From fbd8612ddb9a1c41d33cacefe82f70f5383bcbc0 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Wed, 8 Sep 2021 21:05:16 -0400 Subject: [PATCH 001/155] Adding PS17 files --- keyboards/solartempest/ps17/config.h | 145 +++++ .../solartempest/ps17/firmware location.lnk | Bin 0 -> 1154 bytes keyboards/solartempest/ps17/info.json | 38 ++ .../ps17/keymaps/default/keymap.c | 365 +++++++++++++ .../solartempest/ps17/keymaps/via/config.h | 22 + .../solartempest/ps17/keymaps/via/keymap.c | 507 ++++++++++++++++++ .../solartempest/ps17/keymaps/via/rules.mk | 1 + .../ps17/keymaps/via_bright/config.h | 22 + .../ps17/keymaps/via_bright/keymap.c | 332 ++++++++++++ .../ps17/keymaps/via_bright/rules.mk | 1 + .../solartempest/ps17/ps17 VIA keymap.json | 51 ++ .../solartempest/ps17/ps17 VIA layout.json | 267 +++++++++ keyboards/solartempest/ps17/ps17.c | 68 +++ keyboards/solartempest/ps17/ps17.h | 61 +++ keyboards/solartempest/ps17/readme.md | 39 ++ keyboards/solartempest/ps17/rules.mk | 25 + 16 files changed, 1944 insertions(+) create mode 100644 keyboards/solartempest/ps17/config.h create mode 100644 keyboards/solartempest/ps17/firmware location.lnk create mode 100644 keyboards/solartempest/ps17/info.json create mode 100644 keyboards/solartempest/ps17/keymaps/default/keymap.c create mode 100644 keyboards/solartempest/ps17/keymaps/via/config.h create mode 100644 keyboards/solartempest/ps17/keymaps/via/keymap.c create mode 100644 keyboards/solartempest/ps17/keymaps/via/rules.mk create mode 100644 keyboards/solartempest/ps17/keymaps/via_bright/config.h create mode 100644 keyboards/solartempest/ps17/keymaps/via_bright/keymap.c create mode 100644 keyboards/solartempest/ps17/keymaps/via_bright/rules.mk create mode 100644 keyboards/solartempest/ps17/ps17 VIA keymap.json create mode 100644 keyboards/solartempest/ps17/ps17 VIA layout.json create mode 100644 keyboards/solartempest/ps17/ps17.c create mode 100644 keyboards/solartempest/ps17/ps17.h create mode 100644 keyboards/solartempest/ps17/readme.md create mode 100644 keyboards/solartempest/ps17/rules.mk diff --git a/keyboards/solartempest/ps17/config.h b/keyboards/solartempest/ps17/config.h new file mode 100644 index 000000000000..a22d17fcb719 --- /dev/null +++ b/keyboards/solartempest/ps17/config.h @@ -0,0 +1,145 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#pragma once +#include "config_common.h" + +// USB Device descriptor parameter +#define VENDOR_ID 0x414B // "AK" +#define PRODUCT_ID 0x0015 +#define DEVICE_VER 0x0002 // Ver2 +#define MANUFACTURER ATLANTIS +#define PRODUCT PS17 + +//#define ENCODER_RESOLUTION 2 // default is 4 + +// key matrix size +#ifdef RGBLIGHT_ENABLE + #define MATRIX_ROWS 6 +#endif +#ifdef RGB_MATRIX_ENABLE + #define MATRIX_ROWS 11 //Numpad actually has 6 rows. 5 rows were added for underglow RGB matrix to work together +#endif +#define MATRIX_COLS 4 + +// Encoder matrix +#define ENCODERS_PAD_A { D1 } +#define ENCODERS_PAD_B { D2 } +//#define ENCODER_DIRECTION_FLIP + +#define MATRIX_ROW_PINS { F0, B4, B5, B6, C6, C7 } //Rotary encoder SPST is on F0,F7 +#define MATRIX_COL_PINS { F6, F7, D3, D6 } +#define UNUSED_PINS + +// COL2ROW or ROW2COL +#define DIODE_DIRECTION COL2ROW + +// For LED status indicators +#define LED_NUM_LOCK_PIN D0 +#define LED_CAPS_LOCK_PIN D5 +#define LED_SCROLL_LOCK_PIN D4 +#define LED_PIN_ON_STATE 0 + +#define RGB_DI_PIN B7 +#ifdef RGBLIGHT_ENABLE + #define RGBLED_NUM 28 // 17 key + 11 underglow for RGBLIGHT + #define RGBLIGHT_HUE_STEP 8 + #define RGBLIGHT_SAT_STEP 8 + #define RGBLIGHT_VAL_STEP 8 + #define RGBLIGHT_DEFAULT_VAL 40 // default brightness on clearing EEPROM + #define RGBLIGHT_LIMIT_VAL 180 // brightness level max is 255 + #define RGBLIGHT_LAYERS + #define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF + #define RGBLIGHT_SLEEP // if defined, RGB lighting off when host is sleeping + #define RGBLIGHT_ANIMATIONS + + //RGB LED Conversion macro from physical array to electric array + //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping + #define LED_LAYOUT( \ + L00, L05, \ + L10, L15, \ + L20, L21, L22, L23, L24, L25, \ + L31, L32, L33, L34, \ + L40, L41, L42, L43, L45, \ + L51, L52, L53, L54, \ + L60, L61, L62, L63, L65 ) \ + { \ + L21,L22,L23,L24,L31,L32,L33,L34,L41,L42,L43,L51,L52,L53,L54,L61,L63,L60,L40,L20,L10,L00,L05,L15,L25,L45,L65,L62, \ + } + //RGB LED logical order map + //Right->Left, Top->Bottom + #define RGBLIGHT_LED_MAP LED_LAYOUT( \ + 1, 0, \ + 3, 2, \ + 9, 8, 7, 6, 5, 4, \ + 13, 12, 11, 10, \ + 18, 17, 16, 15, 14, \ + 22, 21, 20, 19, \ + 27, 26, 25, 24, 23 ) +#endif + +#ifdef RGB_MATRIX_ENABLE // For dynamic RGB Matrix effects + #define DRIVER_LED_TOTAL 28 // The number of LEDs connected for matrix, 17 key + 11 underglow + #define RGB_MATRIX_CENTER { 126, 126 }; + #define RGB_MATRIX_KEYPRESSES + #define DISABLE_RGB_MATRIX_ALPHAS_MODS //Remove effects not desired + #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN + #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + #define DISABLE_RGB_MATRIX_BAND_SAT + #define DISABLE_RGB_MATRIX_BAND_VAL + #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT + #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL + #define DISABLE_RGB_MATRIX_CYCLE_ALL + #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN + #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL + #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL + #define DISABLE_RGB_MATRIX_DUAL_BEACON + #define DISABLE_RGB_MATRIX_RAINBOW_BEACON + #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS + #define DISABLE_RGB_MATRIX_RAINDROPS + #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + #define DISABLE_RGB_MATRIX_HUE_BREATHING + #define DISABLE_RGB_MATRIX_HUE_PENDULUM + #define DISABLE_RGB_MATRIX_HUE_WAVE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + #define DISABLE_RGB_MATRIX_SPLASH + #define DISABLE_RGB_MATRIX_MULTISPLASH + #define DISABLE_RGB_MATRIX_SOLID_SPLASH + #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH +#endif + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +#define COMBO_COUNT 6 //Number of tap combos used +#define COMBO_TERM 350 //Default combo time is 200ms + +#define TAPPING_TERM 200 //Tap dance time diff --git a/keyboards/solartempest/ps17/firmware location.lnk b/keyboards/solartempest/ps17/firmware location.lnk new file mode 100644 index 0000000000000000000000000000000000000000..c5314c13be859041d58bab3b1a0f936a11ae7b65 GIT binary patch literal 1154 zcma)5TS$~q5T5md+Qrq>lr=S?WEFPZ^{yl-yY8;{%d(}gc|lj#bX|A<6$_&5VqmG= zP>QU4uzcu35muCi51CXZQeMaxDSC-Yu?RxK`sNpW2&Crco0&6n&di)S^XC$gB+w0< zXjtT=J4N2)2fg4&nMY{Sj6`y7(iDApM)J(+Ze&RnD;p&%VwJz7REp5*W$vZUT?5+o z5mWbay=p#^Bos*tPdVbemsj-r=4r|E09Cgfk-VmItWl7G)I}}|Cymai3n8@_G0Zsd z(2t7pa>{jCheVT0R$A6G_twx^8yq(@FMl-hdTH)z?e2_r{m5wj@cqNtZzP+sE(Y_Tc{G!f<0P30c-*Ijx19FrYayD;D9lc zW6ON2J=V$w%K@WNtB6fVBu%Q>Bv_n+S+F-$I$ai9lSObT3pAM-`DTZ$zPzT+X=|x; zB9SjC$-HJA9NCko?>C6Ea~12cJ}4dkF3B3pK4F-e%<)(_&Ati%74?-sGTEzK_NHcG zWdYv1RNnUDY;ET4PdDy;yR#Hpv^OX?(C3T)u?26(nbG4H|K%^ifcPMO9b&1Cg~qR{ zC$k!A*AM)h2L%GSC$G-y3M_#avJ7D+V4V)+jFp>iEqM!sIR@Bs#NGVvW zDVgF#EeXCjSW+m7;vtjZi^rz`R9LY!5s1So7FME%pmb(~GEe@q_`0jt*?@%(!`OgcY{gh|2dl-ttep1c zgXuu)Y*(@PA3{F@aBbK3Rms!3-}nzs({RDNkO`h+eh9HPPV;xC&HwdAYmX<#W=a9L ufV-P*+FPAXh5. + */ + +#include QMK_KEYBOARD_H +#include "PS17.h" +#ifdef RGBLIGHT_ENABLE + extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT +#endif + +bool is_alt_tab_active = false; // Super Alt Tab Code +uint16_t alt_tab_timer = 0; +#ifdef VIA_ENABLE + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. Don't forget to update the VIA json as well. + ATABF = USER00, //Alt tab forwards + ATABR //Alt tab reverse + }; +#else + enum custom_keycodes { //Use SAFE_RANGE when Via is disabled. + ATABF = SAFE_RANGE, //Alt tab forwards + ATABR //Alt tab reverse + }; +#endif + + +enum combos { //Tap combos + kppls_7, + kppls_8 +}; + +const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; +const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; + +combo_t key_combos[COMBO_COUNT] = { + [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), + [kppls_8] = COMBO(kppl8_combo, KC_DELETE) +}; + + +// Tap Dance declarations +enum { + TD_MINUS_NUMLOCK, +}; + +// Tap Dance definitions +qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for Escape, twice for Caps Lock + [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), +}; + +//TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode + + +enum layer_names { + _LAYER0, + _LAYER1, + _LAYER2, + _LAYER3, + _LAYER4, + _LAYER5, + _LAYER6, + _LAYER7, + _LAYER8, + _LAYER9 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_LAYER0] = LAYOUT( + KC_PGUP, KC__MUTE, KC_PGDOWN, + MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, TD(TD_MINUS_NUMLOCK), + KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, + KC_KP_4, KC_KP_5, KC_KP_6, + KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, + KC_KP_0, KC_KP_DOT + ), + [_LAYER1] = LAYOUT( + KC_LEFT, KC_TRNS, KC_RIGHT, + KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, + TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, RESET, + RESET, KC_TRNS + ), + [_LAYER2] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, + TO(0), KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO + ), + [_LAYER3] = LAYOUT( + ATABR, KC_TRNS, ATABF, + TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), + C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), + KC_LEFT, KC_DOWN, KC_RIGHT, + KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, + KC_PGDOWN, KC_PGUP + ), + [_LAYER4] = LAYOUT( + ATABR, KC_TRNS, ATABF, + TO(0), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, + KC_LEFT, KC_DOWN, KC_RIGHT, + C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_SCROLLLOCK, + KC_F13, KC_F14 + ), + [_LAYER5] = LAYOUT( + 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 + ), + [_LAYER6] = LAYOUT( + 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 + ), + [_LAYER7] = LAYOUT( + 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 + ), + [_LAYER8] = LAYOUT( + 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 + ), + [_LAYER9] = LAYOUT( + 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 + ) +}; + + +void matrix_init_user(void) { //run when matrix is initiated, before all features init +}; + +void matrix_scan_user(void) { //run whenever user matrix is scanned + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { //Actions to override existing key behaviours + switch (keycode) { //For super alt tab keycodes + case ATABF: //Alt tab forwards + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + break; + case ATABR: //Alt tab reverse + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_LSHIFT); + register_code(KC_TAB); + } else { + unregister_code(KC_LSHIFT); + unregister_code(KC_TAB); + } + break; + } + return true; +}; + + +void keyboard_post_init_user(void) { //run as last task in keyboard init + #ifdef RGB_MATRIX_ENABLE + //NOTE 1: Layer lighting doesn't work in RGB matrix mode + //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode + //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode + //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state + rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode + rgb_matrix_sethsv_noeeprom(58, 255, 80); //sets LED to green-yellow + #endif + #ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9. Looks great this way! + rgblight_sethsv(58, 255, 30); //Set lower default brightness when connected as the right side dimming is not yet in effect + #endif +}; + + +#ifdef RGBLIGHT_ENABLE +layer_state_t layer_state_set_user(layer_state_t state) { + switch (get_highest_layer(state)) { + //This custom layer lighting is similar to RGB Light Gradient 9, but customized to separate key and case underglow brightness + static uint16_t underglow_brightness = 140; + static uint16_t perkey_brightness = 80; + static uint16_t lastrow_brightness = 15; //for less shine-through at case edges + static uint16_t current_hue = 0; //hue calculated to be used + static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue + static uint16_t layer0_hueincrement = 2; //hue gradient colour increment + static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green + static uint16_t layer1_hueincrement = 2; //hue gradient colour increment + static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) + static uint16_t layer2_hueincrement = 2; //hue gradient colour increment + static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple + static uint16_t layer3_hueincrement = 2; //hue gradient colour increment + static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red + static uint16_t layer4_hueincrement = 1; //hue gradient colour increment + + /*#define RGBLIGHT_LED_MAP LED_LAYOUT( \ + 1, 0, \ + 3, 2, \ + 9, 8, 7, 6, 5, 4, \ + 13, 12, 11, 10, \ + 18, 17, 16, 15, 14,\ + 22, 21, 20, 19, \ + 27, 26, 25, 24, 23 )*/ + + case _LAYER0: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER1: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER2: //Photoshop custom layer (macros and keys all done in VIA) + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3) { //Underglow LEDs + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } + else if (i == 6) {rgblight_sethsv_at(148,255,perkey_brightness+15,i);} //Text - light blue + else if (i == 5) {rgblight_sethsv_at(140,255,perkey_brightness+15,i);} //New Layer - light blue + else if (i == 15) {rgblight_sethsv_at(195,255,perkey_brightness+15,i);} //Marquee - rose + else if (i == 9) {rgblight_sethsv_at(190,255,underglow_brightness,i);} //Underglow to match + else if (i == 13) {rgblight_sethsv_at(180,255,perkey_brightness+15,i);} //Healing Brush - purple + else if (i == 12) {rgblight_sethsv_at(185,255,perkey_brightness+15,i);} //Clone + else if (i == 11) {rgblight_sethsv_at(190,255,perkey_brightness+15,i);} //Default + else if (i == 7) {rgblight_sethsv_at(195,255,perkey_brightness+15,i);} //Brush + else if (i == 18) {rgblight_sethsv_at(230,255,underglow_brightness,i);} //Underglow to match + else if (i == 17) {rgblight_sethsv_at(0,255,perkey_brightness+15,i);} //copy - red + else if (i == 16) {rgblight_sethsv_at(3,255,perkey_brightness+15,i);} //Paste + else if (i == 22) {rgblight_sethsv_at(5,255,perkey_brightness+15,i);} //Undo + else if (i == 21) {rgblight_sethsv_at(0,255,perkey_brightness+15,i);} //Redo + else if (i == 26) {rgblight_sethsv_at(200,255,lastrow_brightness+15,i);} //Space - blue + else if (i == 24) {rgblight_sethsv_at(195,255,lastrow_brightness+15,i);} //Alt + else if (i == 20) {rgblight_sethsv_at(190,255,lastrow_brightness+15,i);} //Shift + else if (i == 27) {rgblight_sethsv_at(200,255,underglow_brightness,i);} //Underglow to match + else if (i == 10) {rgblight_sethsv_at(current_hue,255,lastrow_brightness,i);} //Zoom in + else if (i == 19) {rgblight_sethsv_at(current_hue,255,lastrow_brightness,i);} //Zoom out + else if (i == 25) {rgblight_sethsv_at(180,255,underglow_brightness,i);} //Underglow to match + else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + + /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code is for normal gradient colouration + current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + };*/ + break; + case _LAYER3: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER4: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + } + return state; + }; +#endif diff --git a/keyboards/solartempest/ps17/keymaps/via/config.h b/keyboards/solartempest/ps17/keymaps/via/config.h new file mode 100644 index 000000000000..4bbacd9a507b --- /dev/null +++ b/keyboards/solartempest/ps17/keymaps/via/config.h @@ -0,0 +1,22 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#pragma once + +// Set 10 layers for VIA +#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/ps17/keymaps/via/keymap.c b/keyboards/solartempest/ps17/keymaps/via/keymap.c new file mode 100644 index 000000000000..b75dc6fc7272 --- /dev/null +++ b/keyboards/solartempest/ps17/keymaps/via/keymap.c @@ -0,0 +1,507 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#include QMK_KEYBOARD_H +#include "PS17.h" +#ifdef RGBLIGHT_ENABLE + extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT +#endif + + +// IDLE TIMEOUTS +#ifdef IDLE_TIMEOUT_ENABLE + #define TIMEOUT_THRESHOLD_DEFAULT 5 // default timeout minutes + #define TIMEOUT_THRESHOLD_MAX 140 // upper limits (2 hours and 10 minutes -- no rgb indicators above this value) + + //prototype functions + uint16_t get_timeout_threshold(void); + void timeout_reset_timer(void); + void timeout_update_threshold(bool increase); + void timeout_tick_timer(void); +#endif //IDLE_TIMEOUT_ENABLE + + +bool is_alt_tab_active = false; // Super Alt Tab Code +uint16_t alt_tab_timer = 0; +bool spam_arrow; +uint16_t spam_timer = false; +uint16_t spam_interval = 1000; // (1000ms == 1s) +bool teams_muted; +#ifdef VIA_ENABLE + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = USER00, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. + TEAMSMUTE //MS Teams mute shortcut and simple LED status + }; +#else + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = SAFE_RANGE, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. + TEAMSMUTE //MS Teams mute shortcut and simple LED status + }; +#endif + +#ifdef COMBO_ENABLE //Tap combos + enum combos { + kppls_7, //Hold plus and 7 to backspace + kppls_8, //Hold plus and 8 to delete + kpent_4, //Hold enter and 4 for left arrow + kpent_5, //Hold enter and 5 for down arrow + kpent_6, //Hold enter and 6 for right arrow + kpent_8, //Hold enter and 4'8 for up arrow + }; + const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; + const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; + const uint16_t PROGMEM kpent4_combo[] = {KC_PENT, KC_KP_4, COMBO_END}; + const uint16_t PROGMEM kpent5_combo[] = {KC_PENT, KC_KP_5, COMBO_END}; + const uint16_t PROGMEM kpent6_combo[] = {KC_PENT, KC_KP_6, COMBO_END}; + const uint16_t PROGMEM kpent8_combo[] = {KC_PENT, KC_KP_8, COMBO_END}; + combo_t key_combos[COMBO_COUNT] = { + [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), + [kppls_8] = COMBO(kppl8_combo, KC_DELETE), + [kpent_4] = COMBO(kpent4_combo, KC_LEFT), + [kpent_5] = COMBO(kpent5_combo, KC_DOWN), + [kpent_6] = COMBO(kpent6_combo, KC_RGHT), + [kpent_8] = COMBO(kpent8_combo, KC_UP) + }; +#endif + +#ifdef TAP_DANCE_ENABLE// Tap Dance definitions. Not VIA compatible. + enum { + TD_MINUS_NUMLOCK, + }; + qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for Escape, twice for Caps Lock + [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), + }; + //TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode (non-VIA only) +#endif + + +enum layer_names { + _LAYER0, + _LAYER1, + _LAYER2, + _LAYER3, + _LAYER4, + _LAYER5, + _LAYER6, + _LAYER7, + _LAYER8, + _LAYER9 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_LAYER0] = LAYOUT( + KC_PGDOWN, KC__MUTE, KC_PGUP, + MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, + KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, + KC_KP_4, KC_KP_5, KC_KP_6, + KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, + KC_KP_0, KC_KP_DOT + ), + [_LAYER1] = LAYOUT( + KC_RIGHT, KC_TRNS, KC_LEFT, + KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, + TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, RESET, + RESET, KC_TRNS + ), + [_LAYER2] = LAYOUT( + KC_RBRACKET, KC_TRNS, KC_LBRACKET, + TO(0), KC_B, KC_T, C(S(KC_N)), + KC_J, KC_S, KC_D, C(KC_MINS), + C(KC_C), C(KC_V), KC_M, + C(KC_N), C(S(KC_Z)), KC_LSHIFT, C(KC_PPLS), + KC_SPACE, KC_LALT + ), + [_LAYER3] = LAYOUT( + ATABF, KC_TRNS, ATABR, + TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), + C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), + KC_LEFT, KC_DOWN, KC_RIGHT, + KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, + KC_PGDOWN, KC_PGUP + ), + [_LAYER4] = LAYOUT( + ATABF, KC_TRNS, ATABR, + TO(0), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, + KC_LEFT, KC_DOWN, KC_RIGHT, + C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_NUMLOCK, + KC_F13, KC_F14 + ), + [_LAYER5] = LAYOUT( + 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 + ), + [_LAYER6] = LAYOUT( + 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 + ), + [_LAYER7] = LAYOUT( + 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 + ), + [_LAYER8] = LAYOUT( + 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 + ), + [_LAYER9] = LAYOUT( + 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 + ) +}; + + +void matrix_init_user(void) { //run when matrix is initiated, before all features init +}; + + +// TIMEOUTS +#ifdef IDLE_TIMEOUT_ENABLE + static uint16_t timeout_timer = 0; + static uint16_t timeout_counter = 0; //in minute intervals + static uint16_t timeout_threshold = TIMEOUT_THRESHOLD_DEFAULT; + + uint16_t get_timeout_threshold(void) { + return timeout_threshold; + } + + void timeout_reset_timer(void) { + timeout_timer = timer_read(); + timeout_counter = 0; + }; + + void timeout_update_threshold(bool increase) { + if (increase && timeout_threshold < TIMEOUT_THRESHOLD_MAX) timeout_threshold++; + if (!increase && timeout_threshold > 0) timeout_threshold--; + }; + + void timeout_tick_timer(void) { + if (timeout_threshold > 0) { + if (timer_elapsed(timeout_timer) >= 60000) { // 1 minute tick + timeout_counter++; + timeout_timer = timer_read(); + } + #ifdef RGB_MATRIX_ENABLE + if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { + rgb_matrix_disable_noeeprom(); + } + #endif + #ifdef RGBLIGHT_ENABLE + if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { + rgblight_toggle_noeeprom(); + } + #endif + } // timeout_threshold = 0 will disable timeout + } + + __attribute__((weak)) void matrix_scan_keymap(void) {} +#endif // IDLE_TIMEOUT_ENABLE + + +void matrix_scan_user(void) { //run whenever user matrix is scanned + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } + if (spam_arrow && timer_elapsed(spam_timer) >= spam_interval) { + spam_timer = timer_read(); + //tap_code(KC_UP); + //tap_code(KC_DOWN); + tap_code(KC_F24); + } + + #ifdef IDLE_TIMEOUT_ENABLE + timeout_tick_timer(); + matrix_scan_keymap(); + #endif // IDLE_TIMEOUT_ENABLE +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { //For keycode overrides + case ATABF: //Alt tab forwards + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + return true; + case ATABR: //Alt tab reverse + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_LSHIFT); + register_code(KC_TAB); + } else { + unregister_code(KC_LSHIFT); + unregister_code(KC_TAB); + } + return true; + + case NMR: //Move window to next monitor on right + if (record->event.pressed) { + register_code(KC_LSFT); + register_code(KC_LWIN); + register_code(KC_RIGHT); + unregister_code(KC_RIGHT); + unregister_code(KC_LWIN); + unregister_code(KC_LSFT); + } + return true; + case NML: //Move window to next monitor on left + if (record->event.pressed) { + register_code(KC_LSFT); + register_code(KC_LWIN); + register_code(KC_LEFT); + unregister_code(KC_LEFT); + unregister_code(KC_LWIN); + unregister_code(KC_LSFT); + } + return true; + + case SPAMARROW: // Moves arrow up and down + if (record->event.pressed) { + spam_arrow ^= 1; + spam_timer = timer_read(); + if(spam_arrow==1) { //Change LED colour on bottom row and underglow to orange to indicate on + rgblight_sethsv_at(15,255,120,24); + rgblight_sethsv_at(15,255,120,25); + rgblight_sethsv_at(15,255,120,26); + rgblight_sethsv_at(15,255,120,27); + } + else { + rgblight_sethsv_at(180,255,120,24); //Set LEDs back to purple, assuming on that coloured layer + rgblight_sethsv_at(180,255,120,25); + rgblight_sethsv_at(180,255,120,26); + rgblight_sethsv_at(180,255,120,27); + } + } + return false; + + case TEAMSMUTE: //Mute MS teams and simply change LED for key 1 colour + if (record->event.pressed) { + register_code(KC_LCTRL); + register_code(KC_LSFT); + register_code(KC_M); + unregister_code(KC_M); + unregister_code(KC_LSFT); + unregister_code(KC_LCTRL); + teams_muted ^= 1; + if(teams_muted==1) { //Change LED colour on LEDs for key 1 and underglow to orange to indicate muted + rgblight_sethsv_at(15,255,120,18); + rgblight_sethsv_at(15,255,120,22); + } + else { + rgblight_sethsv_at(175,255,120,18); //Set LEDs back to violet, assuming on that coloured layer + rgblight_sethsv_at(175,255,120,22); + } + } + return true; + } + return true; +} + + +// RGB Layer Light Settings - Note that this will fix the key switch LED colour and brightness +const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Spring green (Code is extra for static key lighting of layers) +const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 5,255,120}); //Yellow-orange (Code is extra for static key lighting of layers) +const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); //Cyan (Code is extra for static key lighting of layers) +const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); //Magenta (Code is extra for static key lighting of layers) +const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 15,255,120}); //Orange-red (Code is extra for static key lighting of layers) +const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers + my_layer0_layer, + my_layer1_layer, + my_layer2_layer, + my_layer3_layer, + my_layer4_layer +); + + +void keyboard_post_init_user(void) { //run as last task in keyboard init + #ifdef RGB_MATRIX_ENABLE + //NOTE 1: Layer lighting doesn't work in RGB matrix mode + //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode + //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode + //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state + rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode + rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow + #endif + #ifdef RGBLIGHT_ENABLE + rgblight_layers = my_rgb_layers;// Enable the LED layers + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 + layer_move(0); //start on layer 0 to get the lighting activated + #endif +}; + + +#ifdef RGBLIGHT_ENABLE +layer_state_t layer_state_set_user(layer_state_t state) { + rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active + rgblight_set_layer_state(1, layer_state_cmp(state, 1)); + rgblight_set_layer_state(2, layer_state_cmp(state, 2)); + rgblight_set_layer_state(3, layer_state_cmp(state, 3)); + rgblight_set_layer_state(4, layer_state_cmp(state, 4)); + + /*static uint16_t underglow_brightness = 140; //This code can be used to have edge and underglow LEDs selectively brighter + static uint16_t perkey_brightness = 80; + static uint16_t lastrow_brightness = 50; //for less shine-through at case edges (brighter is okay for FR4 plate) + static uint16_t current_hue = 0; //hue calculated to be used + static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue + static uint16_t layer0_hueincrement = 2; //hue gradient colour increment + static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green + static uint16_t layer1_hueincrement = 2; //hue gradient colour increment + static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) + static uint16_t layer2_hueincrement = 2; //hue gradient colour increment + static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple + static uint16_t layer3_hueincrement = 2; //hue gradient colour increment + static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red + static uint16_t layer4_hueincrement = 1; //hue gradient colour increment + */ + // This is what the LED layout is. + // 1, 0, + // 3, 2, + // 9, 8, 7, 6, 5, 4, + // 13, 12, 11, 10, + // 18, 17, 16, 15, 14, + // 22, 21, 20, 19, + // 27, 26, 25, 24, 23 + + switch(biton32(state)){ // Change all other LEDs based on layer state as well + case 0: + rgblight_sethsv_noeeprom(50,255,100); + /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter + current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + };*/ + break; + case 1: + rgblight_sethsv_noeeprom(5,255,100); + /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter + current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + };*/ + break; + case 2: + rgblight_sethsv_noeeprom(128,255,100); + /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter + current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + };*/ + break; + case 3: + rgblight_sethsv_noeeprom(215,255,100); + /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter + current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + };*/ + break; + case 4: + rgblight_sethsv_noeeprom(15,255,100); + /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter + current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + };*/ + break; + } + return state; + }; +#endif diff --git a/keyboards/solartempest/ps17/keymaps/via/rules.mk b/keyboards/solartempest/ps17/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/solartempest/ps17/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/config.h b/keyboards/solartempest/ps17/keymaps/via_bright/config.h new file mode 100644 index 000000000000..4bbacd9a507b --- /dev/null +++ b/keyboards/solartempest/ps17/keymaps/via_bright/config.h @@ -0,0 +1,22 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#pragma once + +// Set 10 layers for VIA +#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c b/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c new file mode 100644 index 000000000000..6c422f8be38d --- /dev/null +++ b/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c @@ -0,0 +1,332 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#include QMK_KEYBOARD_H +#include "PS17.h" +#ifdef RGBLIGHT_ENABLE + extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT +#endif + +bool is_alt_tab_active = false; // Super Alt Tab Code +uint16_t alt_tab_timer = 0; +#ifdef VIA_ENABLE + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = USER00, //Alt tab forwards + ATABR //Alt tab reverse + }; +#else + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = SAFE_RANGE, //Alt tab forwards + ATABR //Alt tab reverse + }; +#endif + + +enum combos { //Tap combos + kppls_7, + kppls_8 +}; + +const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; +const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; + +combo_t key_combos[COMBO_COUNT] = { + [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), + [kppls_8] = COMBO(kppl8_combo, KC_DELETE) +}; + + +// Tap Dance declarations +enum { + TD_MINUS_NUMLOCK, +}; + +// Tap Dance definitions. Not VIA compatible. +qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for Escape, twice for Caps Lock + [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), +}; +//TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode + + +enum layer_names { + _LAYER0, + _LAYER1, + _LAYER2, + _LAYER3, + _LAYER4, + _LAYER5, + _LAYER6, + _LAYER7, + _LAYER8, + _LAYER9 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_LAYER0] = LAYOUT( + KC_PGDOWN, KC__MUTE, KC_PGUP, + MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, + KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, + KC_KP_4, KC_KP_5, KC_KP_6, + KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, + KC_KP_0, KC_KP_DOT + ), + [_LAYER1] = LAYOUT( + KC_RIGHT, KC_TRNS, KC_LEFT, + KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, + TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, RESET, + RESET, KC_TRNS + ), + [_LAYER2] = LAYOUT( + KC_RBRACKET, KC_TRNS, KC_LBRACKET, + TO(0), KC_B, KC_T, C(S(KC_N)), + KC_J, KC_S, KC_D, C(KC_MINS), + C(KC_C), C(KC_V), KC_M, + C(KC_N), C(S(KC_Z)), KC_LSHIFT, C(KC_PPLS), + KC_SPACE, KC_LALT + ), + [_LAYER3] = LAYOUT( + ATABF, KC_TRNS, ATABR, + TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), + C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), + KC_LEFT, KC_DOWN, KC_RIGHT, + KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, + KC_PGDOWN, KC_PGUP + ), + [_LAYER4] = LAYOUT( + ATABF, KC_TRNS, ATABR, + TO(0), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, + KC_LEFT, KC_DOWN, KC_RIGHT, + C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_NUMLOCK, + KC_F13, KC_F14 + ), + [_LAYER5] = LAYOUT( + 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 + ), + [_LAYER6] = LAYOUT( + 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 + ), + [_LAYER7] = LAYOUT( + 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 + ), + [_LAYER8] = LAYOUT( + 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 + ), + [_LAYER9] = LAYOUT( + 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 + ) +}; + + +void matrix_init_user(void) { //run when matrix is initiated, before all features init +}; + +void matrix_scan_user(void) { //run whenever user matrix is scanned + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { //Actions to override existing key behaviours + switch (keycode) { //For super alt tab keycodes + case ATABF: //Alt tab forwards + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + break; + case ATABR: //Alt tab reverse + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_LSHIFT); + register_code(KC_TAB); + } else { + unregister_code(KC_LSHIFT); + unregister_code(KC_TAB); + } + break; + } + return true; +}; + + +void keyboard_post_init_user(void) { //run as last task in keyboard init + #ifdef RGB_MATRIX_ENABLE + //NOTE 1: Layer lighting doesn't work in RGB matrix mode + //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode + //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode + //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state + rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode + rgb_matrix_sethsv_noeeprom(58, 255, 80); //sets LED to green-yellow + #endif + #ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9. Looks great this way! + rgblight_sethsv(58, 255, 100); //Set lower default brightness when connected as the right side dimming is not yet in effect + layer_move(0); //start on layer 0 to get the lighting activated + #endif +}; + + +#ifdef RGBLIGHT_ENABLE +layer_state_t layer_state_set_user(layer_state_t state) { + switch (get_highest_layer(state)) { + //This custom layer lighting is similar to RGB Light Gradient 9, but customized to separate key and case underglow brightness + static uint16_t underglow_brightness = 120; + static uint16_t perkey_brightness = 120; + static uint16_t lastrow_brightness = 30; //for less shine-through at case edges + static uint16_t current_hue = 0; //hue calculated to be used + static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue + static uint16_t layer0_hueincrement = 2; //hue gradient colour increment + static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green + static uint16_t layer1_hueincrement = 2; //hue gradient colour increment + static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) + static uint16_t layer2_hueincrement = 2; //hue gradient colour increment + static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple + static uint16_t layer3_hueincrement = 2; //hue gradient colour increment + static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red + static uint16_t layer4_hueincrement = 1; //hue gradient colour increment + + /*#define RGBLIGHT_LED_MAP LED_LAYOUT( \ + 1, 0, \ + 3, 2, \ + 9, 8, 7, 6, 5, 4, \ + 13, 12, 11, 10, \ + 18, 17, 16, 15, 14,\ + 22, 21, 20, 19, \ + 27, 26, 25, 24, 23 )*/ + + case _LAYER0: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER1: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER2: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code is for normal gradient colouration + current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER3: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER4: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + } + return state; + }; +#endif diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/rules.mk b/keyboards/solartempest/ps17/keymaps/via_bright/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/solartempest/ps17/keymaps/via_bright/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/solartempest/ps17/ps17 VIA keymap.json b/keyboards/solartempest/ps17/ps17 VIA keymap.json new file mode 100644 index 000000000000..d906b47dbb7a --- /dev/null +++ b/keyboards/solartempest/ps17/ps17 VIA keymap.json @@ -0,0 +1,51 @@ +{ + "name": "PS17" , + "vendorId": "0x414B", + "productId": "0x0015", + "lighting": "qmk_rgblight", + "matrix": { "rows": 6, "cols": 4 }, + "customKeycodes": [ + { + "name": "Super Alt Tab FWD", + "title": "Alt Tab Forwards in Windows", + "shortName": "ATABF" + }, + { + "name": "Super Alt Tab REV", + "title": "Alt Tab Reverse in Windows", + "shortName": "ATABR" + }, + { + "name": "Move Window Right", + "title": "Move Window Right in Windows", + "shortName": "MWR" + }, + { + "name": "Move Window Left", + "title": "Move Window Left in Windows", + "shortName": "MWL" + }, + { + "name": "Spam Arrow", + "title": "Toggle F24 on interval timer with Orange LED", + "shortName": "SA" + }, + { + "name": "Teams Muted", + "title": "Simply Change LED of 1 to show if muted or not", + "shortName": "TM" + } + ], + "layouts": + { + "keymap": + [ + [{"w": 1, "h":1.5},"0,0", "0,1", {"w": 1, "h":1.5},"0,2"], + [{"y":0.75}, "1,0", "1,1", "1,2", "1,3"], + [ "2,0", "2,1", "2,2", {"h":2},"2,3"], + [ "3,0","3,1","3,2"], + [ "4,0", "4,1", "4,2", {"h":2},"4,3"], + [{"w": 2},"5,0", "5,2"] + ] + } +} \ No newline at end of file diff --git a/keyboards/solartempest/ps17/ps17 VIA layout.json b/keyboards/solartempest/ps17/ps17 VIA layout.json new file mode 100644 index 000000000000..6671cee90952 --- /dev/null +++ b/keyboards/solartempest/ps17/ps17 VIA layout.json @@ -0,0 +1,267 @@ +{ + "name": "PS17", + "vendorProductId": 1095434261, + "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + "layers": [ + [ + "C(KC_TAB)", + "C(KC_W)", + "C(S(KC_TAB))", + "KC_NO", + "TO(2)", + "KC_PSLS", + "KC_PAST", + "KC_PMNS", + "KC_P7", + "KC_P8", + "KC_P9", + "KC_PPLS", + "KC_P4", + "KC_P5", + "KC_P6", + "KC_NO", + "KC_P1", + "KC_P2", + "KC_P3", + "KC_PENT", + "KC_P0", + "KC_NO", + "KC_PDOT", + "KC_NO" + ], + [ + "KC_RGHT", + "KC_TRNS", + "KC_LEFT", + "KC_NO", + "TO(0)", + "KC_TRNS", + "KC_TRNS", + "KC_NLCK", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_BSPC", + "TO(5)", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "TO(2)", + "TO(3)", + "TO(4)", + "KC_TRNS", + "RESET", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_VOLU", + "KC_TRNS", + "KC_VOLD", + "KC_NO", + "TO(0)", + "KC_WWW_REFRESH", + "KC_WWW_HOME", + "C(S(KC_B))", + "C(S(KC_TAB))", + "KC_UP", + "C(KC_TAB)", + "USER04", + "KC_LEFT", + "KC_DOWN", + "KC_RGHT", + "KC_NO", + "USER05", + "KC_TRNS", + "KC_SLCK", + "KC_NLCK", + "KC_F13", + "KC_NO", + "KC_F14", + "KC_NO" + ], + [ + "USER00", + "KC_TRNS", + "USER01", + "KC_NO", + "TO(0)", + "KC_WWW_REFRESH", + "KC_HOME", + "C(KC_T)", + "C(S(KC_TAB))", + "KC_UP", + "C(KC_TAB)", + "C(KC_W)", + "KC_LEFT", + "KC_DOWN", + "KC_RGHT", + "KC_NO", + "KC_WWW_BACK", + "KC_SPC", + "KC_WWW_FORWARD", + "KC_ENT", + "KC_PGDN", + "KC_NO", + "KC_PGUP", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ] + ] +} \ No newline at end of file diff --git a/keyboards/solartempest/ps17/ps17.c b/keyboards/solartempest/ps17/ps17.c new file mode 100644 index 000000000000..54ae3f8ab053 --- /dev/null +++ b/keyboards/solartempest/ps17/ps17.c @@ -0,0 +1,68 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#include "ps17.h" + +bool encoder_update_user(uint8_t index, bool clockwise) { // QMK encoder functionality + #ifdef VIA_ENABLE //Add in VIA setting of rotary encoder keymap + if (index == 0) { // First encoder + if (clockwise) { + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) }); //Time is 1 tick otherwise empty event + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) }); + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) }); + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) }); + } + } + /*if (clockwise) { //This code only works for single keypresses with the rotary encoder + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 0)); //Allow setting of keymap in VIA + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 2)); //Allow setting of keymap in VIA + }*/ + #endif + return true; +} + +#ifdef RGB_MATRIX_ENABLE //Add in addressable LED underglow support with physical locations + led_config_t g_led_config = { { + //Key matrix to LED index + { NO_LED, NO_LED, NO_LED, NO_LED, }, + { 0, 1, 2, 3, }, + { 4, 5, 6, 7, }, + { 8, 9, 10, NO_LED, }, + { 11, 12, 13, 14, }, + { 15, NO_LED, 16, NO_LED, }, + + //Underglow matrix to LED index + { 21, NO_LED, NO_LED, 22, }, + { 20, NO_LED, NO_LED, 23, }, + { 19, NO_LED, NO_LED, 24, }, + { 18, NO_LED, NO_LED, 25, }, + { 17, 27, NO_LED, 26, } + }, { + // LED Key Index to Physical Position, calculated with Plot Digitizer and scaled PCB Image with center at {126,126} + {74,165},{108,165},{144,165},{179,165},{74,129},{109,129},{143,129},{188,121},{74,95},{109,95},{143,95},{73,60},{109,60},{144,60},{188,51},{91,25},{144,25}, + + // LED underglow + {61,26},{61,88},{61,158},{61,197},{61,232},{192,232},{192,196},{192,158},{192,87},{183,26},{127,24} + }, { + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, // LED Index to Flag. 4 for key backlight. + 2,2,2,2,2,2,2,2,2,2,2 // 2 for case underglow. + } }; +#endif diff --git a/keyboards/solartempest/ps17/ps17.h b/keyboards/solartempest/ps17/ps17.h new file mode 100644 index 000000000000..64ebc5766887 --- /dev/null +++ b/keyboards/solartempest/ps17/ps17.h @@ -0,0 +1,61 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#pragma once +#include "quantum.h" + +#ifdef RGBLIGHT_ENABLE + #define LAYOUT( \ + K00, K01, K02, \ + K10, K11, K12, K13, \ + K20, K21, K22, K23, \ + K30, K31, K32, \ + K40, K41, K42, K43, \ + K50, K52 \ + ) { \ + { K00, K01, K02, KC_NO }, \ + { K10, K11, K12, K13 }, \ + { K20, K21, K22, K23 }, \ + { K30, K31, K32, KC_NO }, \ + { K40, K41, K42, K43 }, \ + { K50, KC_NO, K52, KC_NO }, \ + } +#endif + +#ifdef RGB_MATRIX_ENABLE // Five empty rows of keys were added for RGB Matrix purposes. You must map to a key otherwise it will not work. + #define LAYOUT( \ + K00, K01, K02, \ + K10, K11, K12, K13, \ + K20, K21, K22, K23, \ + K30, K31, K32, \ + K40, K41, K42, K43, \ + K50, K52 \ + ) { \ + { K00, K01, K02, KC_NO }, \ + { K10, K11, K12, K13 }, \ + { K20, K21, K22, K23 }, \ + { K30, K31, K32, KC_NO }, \ + { K40, K41, K42, K43 }, \ + { K50, KC_NO, K52, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO }, \ + } +#endif diff --git a/keyboards/solartempest/ps17/readme.md b/keyboards/solartempest/ps17/readme.md new file mode 100644 index 000000000000..bd9504222899 --- /dev/null +++ b/keyboards/solartempest/ps17/readme.md @@ -0,0 +1,39 @@ +# Atlantis PS17 Macropad + +![Atlantis PS17](https://i.imgur.com/Y0rkPgA.jpg) + +A 17-key macro pad with pushbutton rotary encoder and underglow RGB per key RGB and for the case. + +For detailed instructions on using VIA and flashing, please refer to the sections further down the page! + +* Keyboard Maintainer: solartempest +* Hardware Supported: Atlantis PS17 v2 +* Hardware Availability: [rioo897](https://shop198276076.world.taobao.com/index.htm?spm=2013.1.w5002-23418336364.2.3f4d7d51DkVX3s) + +# Custom Features: + +- Remappable rotary encoder controls volume up/down/mute. +- Allows for remapping of per-layer rotary encoder functions in VIA. +- VIA support included by default. +- RGB underglow and matrix support and remapped to physical locations (nicer gradient and effects). +- Adds custom layer lighting with custom gradients for each. +- Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders. +- Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders. +- Adds key combo functionality for backspace, delete, and arrow keys. + +## Make and Flashing + +Make example for this keyboard (after setting up your build environment): + + qmk compile -kb solartempest/ps17 -km via + +To reset the board into bootloader mode, tap the Reset switch mounted on the bottom of the PCB. +Flash with QMK toolbox, auto-flash. + +## Using with VIA + +- After flashing, in VIA make sure to Import Keymap, which is "ps17 VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. +- Go to Save+Load to Load Saved Layout. You can import my own layout "ps17 VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. +- It is a good idea to Save Current Layout after you decide on your mapping. + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/solartempest/ps17/rules.mk b/keyboards/solartempest/ps17/rules.mk new file mode 100644 index 000000000000..0b5dd1c97afa --- /dev/null +++ b/keyboards/solartempest/ps17/rules.mk @@ -0,0 +1,25 @@ +# MCU name +MCU = atmega32u4 + +# Bootloader selection +BOOTLOADER = atmel-dfu + +# Build Options +# change yes to no to disable +# + +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration +CONSOLE_ENABLE = no # Console for debug +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +NKRO_ENABLE = yes # USB Nkey Rollover +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +RGB_MATRIX_ENABLE = no # RGB matrix for individual LED control +RGB_MATRIX_DRIVER = WS2812 # Addressable LED strand driver +UNICODE_ENABLE = yes # Unicode +ENCODER_ENABLE = yes # For encoder +LTO_ENABLE = yes # Reduce firmware size +COMBO_ENABLE = yes # Combos +TAP_DANCE_ENABLE = no # Tap dance + +IDLE_TIMEOUT_ENABLE = yes # Turn LEDs off after inactive time From 9877c6f6af08ab118cce4a16a0d1d4f5a0dbe494 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Wed, 8 Sep 2021 21:20:52 -0400 Subject: [PATCH 002/155] Delete firmware location.lnk --- .../solartempest/ps17/firmware location.lnk | Bin 1154 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 keyboards/solartempest/ps17/firmware location.lnk diff --git a/keyboards/solartempest/ps17/firmware location.lnk b/keyboards/solartempest/ps17/firmware location.lnk deleted file mode 100644 index c5314c13be859041d58bab3b1a0f936a11ae7b65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1154 zcma)5TS$~q5T5md+Qrq>lr=S?WEFPZ^{yl-yY8;{%d(}gc|lj#bX|A<6$_&5VqmG= zP>QU4uzcu35muCi51CXZQeMaxDSC-Yu?RxK`sNpW2&Crco0&6n&di)S^XC$gB+w0< zXjtT=J4N2)2fg4&nMY{Sj6`y7(iDApM)J(+Ze&RnD;p&%VwJz7REp5*W$vZUT?5+o z5mWbay=p#^Bos*tPdVbemsj-r=4r|E09Cgfk-VmItWl7G)I}}|Cymai3n8@_G0Zsd z(2t7pa>{jCheVT0R$A6G_twx^8yq(@FMl-hdTH)z?e2_r{m5wj@cqNtZzP+sE(Y_Tc{G!f<0P30c-*Ijx19FrYayD;D9lc zW6ON2J=V$w%K@WNtB6fVBu%Q>Bv_n+S+F-$I$ai9lSObT3pAM-`DTZ$zPzT+X=|x; zB9SjC$-HJA9NCko?>C6Ea~12cJ}4dkF3B3pK4F-e%<)(_&Ati%74?-sGTEzK_NHcG zWdYv1RNnUDY;ET4PdDy;yR#Hpv^OX?(C3T)u?26(nbG4H|K%^ifcPMO9b&1Cg~qR{ zC$k!A*AM)h2L%GSC$G-y3M_#avJ7D+V4V)+jFp>iEqM!sIR@Bs#NGVvW zDVgF#EeXCjSW+m7;vtjZi^rz`R9LY!5s1So7FME%pmb(~GEe@q_`0jt*?@%(!`OgcY{gh|2dl-ttep1c zgXuu)Y*(@PA3{F@aBbK3Rms!3-}nzs({RDNkO`h+eh9HPPV;xC&HwdAYmX<#W=a9L ufV-P*+FPAXh5 Date: Wed, 8 Sep 2021 21:23:15 -0400 Subject: [PATCH 003/155] Delete firmware location.lnk --- .../solartempest/ps17/firmware location.lnk | Bin 1154 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 keyboards/solartempest/ps17/firmware location.lnk diff --git a/keyboards/solartempest/ps17/firmware location.lnk b/keyboards/solartempest/ps17/firmware location.lnk deleted file mode 100644 index c5314c13be859041d58bab3b1a0f936a11ae7b65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1154 zcma)5TS$~q5T5md+Qrq>lr=S?WEFPZ^{yl-yY8;{%d(}gc|lj#bX|A<6$_&5VqmG= zP>QU4uzcu35muCi51CXZQeMaxDSC-Yu?RxK`sNpW2&Crco0&6n&di)S^XC$gB+w0< zXjtT=J4N2)2fg4&nMY{Sj6`y7(iDApM)J(+Ze&RnD;p&%VwJz7REp5*W$vZUT?5+o z5mWbay=p#^Bos*tPdVbemsj-r=4r|E09Cgfk-VmItWl7G)I}}|Cymai3n8@_G0Zsd z(2t7pa>{jCheVT0R$A6G_twx^8yq(@FMl-hdTH)z?e2_r{m5wj@cqNtZzP+sE(Y_Tc{G!f<0P30c-*Ijx19FrYayD;D9lc zW6ON2J=V$w%K@WNtB6fVBu%Q>Bv_n+S+F-$I$ai9lSObT3pAM-`DTZ$zPzT+X=|x; zB9SjC$-HJA9NCko?>C6Ea~12cJ}4dkF3B3pK4F-e%<)(_&Ati%74?-sGTEzK_NHcG zWdYv1RNnUDY;ET4PdDy;yR#Hpv^OX?(C3T)u?26(nbG4H|K%^ifcPMO9b&1Cg~qR{ zC$k!A*AM)h2L%GSC$G-y3M_#avJ7D+V4V)+jFp>iEqM!sIR@Bs#NGVvW zDVgF#EeXCjSW+m7;vtjZi^rz`R9LY!5s1So7FME%pmb(~GEe@q_`0jt*?@%(!`OgcY{gh|2dl-ttep1c zgXuu)Y*(@PA3{F@aBbK3Rms!3-}nzs({RDNkO`h+eh9HPPV;xC&HwdAYmX<#W=a9L ufV-P*+FPAXh5 Date: Wed, 8 Sep 2021 21:27:48 -0400 Subject: [PATCH 004/155] Add 9e files. --- keyboards/solartempest/9e/9e VIA ayout.json | 507 ++++++++++++++++++ keyboards/solartempest/9e/9e VIA keymap.json | 39 ++ keyboards/solartempest/9e/A9e.c | 64 +++ keyboards/solartempest/9e/A9e.h | 35 ++ keyboards/solartempest/9e/config.h | 140 +++++ .../solartempest/9e/firmware location.lnk | Bin 0 -> 1154 bytes keyboards/solartempest/9e/info.json | 12 + .../solartempest/9e/keymaps/default/keymap.c | 208 +++++++ .../solartempest/9e/keymaps/via/config.h | 22 + .../solartempest/9e/keymaps/via/keymap.c | 417 ++++++++++++++ .../solartempest/9e/keymaps/via/rules.mk | 1 + .../9e/qmk_firmware hex location (old).lnk | Bin 0 -> 899 bytes .../9e/qmk_firmware hex location.lnk | Bin 0 -> 899 bytes keyboards/solartempest/9e/readme.md | 42 ++ keyboards/solartempest/9e/rules.mk | 63 +++ 15 files changed, 1550 insertions(+) create mode 100644 keyboards/solartempest/9e/9e VIA ayout.json create mode 100644 keyboards/solartempest/9e/9e VIA keymap.json create mode 100644 keyboards/solartempest/9e/A9e.c create mode 100644 keyboards/solartempest/9e/A9e.h create mode 100644 keyboards/solartempest/9e/config.h create mode 100644 keyboards/solartempest/9e/firmware location.lnk create mode 100644 keyboards/solartempest/9e/info.json create mode 100644 keyboards/solartempest/9e/keymaps/default/keymap.c create mode 100644 keyboards/solartempest/9e/keymaps/via/config.h create mode 100644 keyboards/solartempest/9e/keymaps/via/keymap.c create mode 100644 keyboards/solartempest/9e/keymaps/via/rules.mk create mode 100644 keyboards/solartempest/9e/qmk_firmware hex location (old).lnk create mode 100644 keyboards/solartempest/9e/qmk_firmware hex location.lnk create mode 100644 keyboards/solartempest/9e/readme.md create mode 100644 keyboards/solartempest/9e/rules.mk diff --git a/keyboards/solartempest/9e/9e VIA ayout.json b/keyboards/solartempest/9e/9e VIA ayout.json new file mode 100644 index 000000000000..aa58163c6e9b --- /dev/null +++ b/keyboards/solartempest/9e/9e VIA ayout.json @@ -0,0 +1,507 @@ +{ + "name": "A9e", + "vendorProductId": 1095434249, + "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + "layers": [ + [ + "KC_RGHT", + "KC_MUTE", + "KC_LEFT", + "TO(1)", + "TO(2)", + "TO(3)", + "KC_P7", + "KC_P8", + "KC_P9", + "KC_WWW_BACK", + "KC_F13", + "KC_WWW_FORWARD", + "USER01", + "RGB_TOG", + "USER00", + "KC_CAPS", + "KC_NLCK", + "KC_MINS", + "KC_P4", + "KC_P5", + "KC_P6", + "KC_VOLD", + "KC_F14", + "KC_VOLU", + "USER03", + "KC_MSTP", + "USER02", + "KC_WWW_REFRESH", + "KC_BSPC", + "KC_P0", + "KC_P1", + "KC_P2", + "KC_P3", + "KC_MS_WH_UP", + "C(KC_W)", + "KC_MS_WH_DOWN", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_MS_WH_DOWN", + "KC_HOME", + "KC_MS_WH_UP", + "C(KC_PMNS)", + "C(KC_0)", + "C(KC_PPLS)", + "C(S(KC_TAB))", + "C(KC_T)", + "C(KC_TAB)" + ], + [ + "KC_RBRC", + "KC_I", + "KC_LBRC", + "TO(0)", + "KC_T", + "KC_M", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_LEFT", + "C(S(KC_B))", + "KC_RGHT", + "KC_LCBR", + "C(KC_I)", + "KC_RCBR", + "KC_B", + "KC_J", + "KC_S", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "C(S(KC_TAB))", + "C(KC_S)", + "C(KC_TAB)", + "C(KC_Z)", + "KC_X", + "C(S(KC_Z))", + "KC_LALT", + "KC_SPC", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_DOWN", + "KC_TRNS", + "KC_UP", + "KC_NO", + "KC_NO", + "KC_NO", + "C(KC_LBRC)", + "KC_DEL", + "C(KC_RBRC)", + "A(KC_LBRC)", + "C(KC_F10)", + "A(KC_RBRC)", + "C(KC_MINS)", + "C(KC_0)", + "C(KC_PPLS)" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "TO(0)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_UP", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_LEFT", + "KC_DOWN", + "KC_RGHT", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_MS_BTN2", + "KC_PAUS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS" + ], + [ + "KC_NO", + "KC_NO", + "KC_NO", + "TO(0)", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "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_NO", + "KC_NO", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "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_NO", + "KC_NO", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "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_NO", + "KC_NO", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "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_NO", + "KC_NO", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "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_NO", + "KC_NO", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "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_NO", + "KC_NO", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS" + ] + ] +} \ No newline at end of file diff --git a/keyboards/solartempest/9e/9e VIA keymap.json b/keyboards/solartempest/9e/9e VIA keymap.json new file mode 100644 index 000000000000..21498184e2bd --- /dev/null +++ b/keyboards/solartempest/9e/9e VIA keymap.json @@ -0,0 +1,39 @@ +{ + "name": "A9e" , + "vendorId": "0x414B", + "productId": "0x0009", + "lighting": "qmk_rgblight", + "matrix": { "rows": 4, "cols": 12 }, + "customKeycodes": [ + { + "name": "Super Alt Tab FWD", + "title": "Alt Tab Forwards in Windows", + "shortName": "ATABF" + }, + { + "name": "Super Alt Tab REV", + "title": "Alt Tab Reverse in Windows", + "shortName": "ATABR" + }, + { + "name": "Move Window Right", + "title": "Move Window Right in Windows", + "shortName": "MWR" + }, + { + "name": "Move Window Left", + "title": "Move Window Left in Windows", + "shortName": "MWL" + } + ], + "layouts": + { + "keymap": + [ + [{"x": 0.25},"0,0", {"x": 1}, "1,0",{"h": 1.5},"1,1","1,2", {"x": 1}, "0,3", "0,4", "0,5", "0,6", "0,7", "0,8", {"x": 1}, "0,9", {"h": 1.5},"0,10","0,11", {"x": 1}, "1,9",{"h": 1.5},"1,10","1,11"], + [{"w": 1.5},"0,1",{"x": 4.75}, "1,3", "1,4", "1,5", "1,6", "1,7", "1,8"], + [{"x": 0.25},"0,2", {"x": 1}, "2,0",{"h": 1.5},"2,1","2,2", {"x": 1}, "2,3", "2,4", "2,5", "2,6", "2,7", "2,8", {"x": 3}, "2,9",{"h": 1.5},"2,10","2,11"], + [{"x": 6.25, "y": 0.5}, "3,3",{"h": 1.5},"3,4","3,5", "3,6",{"h": 1.5},"3,7", "3,8", {"x": 3,"y": 1},"3,9",{"h": 1.5},"3,10","3,11"] + ] + } +} \ No newline at end of file diff --git a/keyboards/solartempest/9e/A9e.c b/keyboards/solartempest/9e/A9e.c new file mode 100644 index 000000000000..3fc20a1961c1 --- /dev/null +++ b/keyboards/solartempest/9e/A9e.c @@ -0,0 +1,64 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . +*/ + +#include "A9e.h" + +/* #define RGBLIGHT_LED_MAP LED_LAYOUT( \ + 31, 32, 33, 34, 35, \ + 1, 30, 4, 5, 6, 7, 8, 9, \ + 0, 3, 10, 11, 12, 13, 14, 15, \ + 2, 41, 16, 17, 18, 19, 20, 21, 23, 36, \ + 40, 39, 22, 25, \ + 24, \ + 38, 27, 37, \ + 26, 29, \ + 28 )*/ +// E2 Keys Row 1 E4 E5 +// E1 Keys Row 2 E6 +// E3 Keys Row 3 +// E8 E9 E7 + +#ifdef RGB_MATRIX_ENABLE //Add in addressable LED underglow support with physical locations + led_config_t g_led_config = { { + //Key matrix to LED index + { 36, 35, 34, 33, 32, }, + {18, 37, 5, 4, 3, 2, 1, 0, }, + {19, 21, 11, 10, 9, 8, 7, 6, }, + {20, 38, 17, 16, 15, 14, 13, 12, 22, 31, }, + { 39, 40, 23, 25, }, + { 24, }, + { 41, 26, 30, }, + { 27, 29, }, + { 28, NO_LED, NO_LED, NO_LED, } + }, { + // LED Key Index to Physical Position, calculated with Plot Digitizer and scaled PCB Image with center at {110,110} + {150,98},{132,98},{116,98},{100,98},{84,98},{60,98}, + {150,80},{132,80},{116,80},{100,80},{84,80},{60,80}, + {150,64},{132,64},{116,64},{100,64},{84,64},{60,64}, + + {16,85},{7,76},{16,66},{24,76}, {192,74},{184,62}, + {192,52},{202,62}, {192,30},{184,20},{192,8},{202,19}, + + {209,32},{211,71},{191,105},{141,105},{101,104},{76,104}, + {52,98},{30,89},{30,63},{52,50},{141,44},{181,32} + }, { // LED Index to Flag. + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, // 4 for 18-key backlight. + 1,1,1,1,1,1,1,1,1,1,1,1, // 1 for 3*4LED large rotary encoders. + 2,2,2,2,2,2,2,2,2,2,2,2 // 2 for 12-case underglow. + } }; +#endif diff --git a/keyboards/solartempest/9e/A9e.h b/keyboards/solartempest/9e/A9e.h new file mode 100644 index 000000000000..cc6481b19bb5 --- /dev/null +++ b/keyboards/solartempest/9e/A9e.h @@ -0,0 +1,35 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#ifndef A9E_H + #define A9E_H + + #include "quantum.h" + + #define KEYMAP( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ + K303, K304, K305, K306, K307, K308, K309, K310, K311 \ + ) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \ + { KC_NO, KC_NO, KC_NO, K303, K304, K305, K306, K307, K308, K309, K310, K311 } \ + } +#endif diff --git a/keyboards/solartempest/9e/config.h b/keyboards/solartempest/9e/config.h new file mode 100644 index 000000000000..a74b280bfb3b --- /dev/null +++ b/keyboards/solartempest/9e/config.h @@ -0,0 +1,140 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . +*/ + +#ifndef CONFIG_H + #define CONFIG_H + + #include "config_common.h" + + /* USB Device descriptor parameter */ + #define VENDOR_ID 0x414B // AK + #define PRODUCT_ID 0x0009 // 9e + #define DEVICE_VER 0x0001 + #define MANUFACTURER Atlantis + #define PRODUCT A9e + #define DESCRIPTION Keyboard + + /* key matrix size */ + #define MATRIX_ROWS 4 + #define MATRIX_COLS 12 + + /* key matrix pins */ + #define MATRIX_ROW_PINS { F0, F1, F2, F3 } + #define MATRIX_COL_PINS { F5, F6, F7, A0, A1, A2, A3, A4, A5, B7, B6, B5 } //F5, F7, B7, B5 are unused on the MCU. They are needed for the encoder key matrix. + #define UNUSED_PINS + + /* encoder pins */ + #define ENCODERS_PAD_A { C0, C3, C5, C7, D1, D3, D5, D6, A7 } //Encoder pads ordered so on VIA mapping it is cw/ccw and up/down rotation orientation. + #define ENCODERS_PAD_B { C1, C2, C4, C6, D0, D2, D4, D7, A6 } + #define ENCODER_RESOLUTIONS { 4, 4, 4, 4, 4, 4, 4, 2, 2 } //Better control of individual encoders and encoder types. + //#define ENCODER_RESOLUTION 4 + + /* COL2ROW or ROW2COL */ + #define DIODE_DIRECTION COL2ROW + + /* Set 0 if debouncing isn't needed */ + #define DEBOUNCE 5 + + /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ + #define LOCKING_SUPPORT_ENABLE + + /* Locking resynchronize hack */ + #define LOCKING_RESYNC_ENABLE + + + #define RGB_DI_PIN E6 + #ifdef RGB_DI_PIN + #define RGBLIGHT_ANIMATIONS + #define RGBLIGHT_HUE_STEP 8 + #define RGBLIGHT_SAT_STEP 8 + #define RGBLIGHT_VAL_STEP 8 + #define RGBLIGHT_LAYERS + #define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF + #define RGBLIGHT_SLEEP // 18 keys, 9*3 encoders = 45 keys + #define RGBLED_NUM 42 // 18 keys + 12 encoders + 12 underglow for RGBLIGHT + #define RGBLIGHT_LIMIT_VAL 180 + + //RGB LED Conversion macro from physical array to electric array + //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping + #define LED_LAYOUT( \ + L01, L03, L05, L07, L08, \ + L10, L11, L12, L13, L14, L15, L16, L17, \ + L20, L21, L22, L23, L24, L25, L26, L27, \ + L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, \ + L41, L46, L47, L49, \ + L58, \ + L67, L68, L69, \ + L77, L79, \ + L88 )\ + { \ + L17,L16,L15,L14,L13,L12,L27,L26,L25,L24,L23,L22,L37,L36,L35,L34,L33,L32,L10,L20,L30,L21,L38,L47,L58,L49,L68,L77,L88,L79,L69,L39,L08,L07,L05,L03,L01,L11,L31,L41,L46,L67, \ + } + //RGB LED logical order map + //Left encoder -> keys -> right encoders -> backlight + #define RGBLIGHT_LED_MAP LED_LAYOUT( \ + 31, 32, 33, 34, 35, \ + 1, 30, 4, 5, 6, 7, 8, 9, \ + 0, 3, 10, 11, 12, 13, 14, 15, \ + 2, 41, 16, 17, 18, 19, 20, 21, 23, 36, \ + 40, 39, 22, 25, \ + 24, \ + 38, 27, 37, \ + 26, 29, \ + 28 ) + #endif + + #ifdef RGB_MATRIX_ENABLE // For dynamic RGB Matrix effects + #define DRIVER_LED_TOTAL 42 // The number of LEDs connected for matrix, 18 keys + 12 encoders + 12 underglow + #define RGB_MATRIX_CENTER { 110, 110 }; + #define RGB_MATRIX_KEYPRESSES + #define DISABLE_RGB_MATRIX_ALPHAS_MODS //Remove effects not desired + #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN + #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + #define DISABLE_RGB_MATRIX_BAND_SAT + #define DISABLE_RGB_MATRIX_BAND_VAL + #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT + #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL + #define DISABLE_RGB_MATRIX_CYCLE_ALL + #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN + #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL + #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL + #define DISABLE_RGB_MATRIX_DUAL_BEACON + #define DISABLE_RGB_MATRIX_RAINBOW_BEACON + #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS + #define DISABLE_RGB_MATRIX_RAINDROPS + #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + #define DISABLE_RGB_MATRIX_HUE_BREATHING + #define DISABLE_RGB_MATRIX_HUE_PENDULUM + #define DISABLE_RGB_MATRIX_HUE_WAVE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + #define DISABLE_RGB_MATRIX_SPLASH + #define DISABLE_RGB_MATRIX_MULTISPLASH + #define DISABLE_RGB_MATRIX_SOLID_SPLASH + #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH + #endif + + +#endif diff --git a/keyboards/solartempest/9e/firmware location.lnk b/keyboards/solartempest/9e/firmware location.lnk new file mode 100644 index 0000000000000000000000000000000000000000..c5314c13be859041d58bab3b1a0f936a11ae7b65 GIT binary patch literal 1154 zcma)5TS$~q5T5md+Qrq>lr=S?WEFPZ^{yl-yY8;{%d(}gc|lj#bX|A<6$_&5VqmG= zP>QU4uzcu35muCi51CXZQeMaxDSC-Yu?RxK`sNpW2&Crco0&6n&di)S^XC$gB+w0< zXjtT=J4N2)2fg4&nMY{Sj6`y7(iDApM)J(+Ze&RnD;p&%VwJz7REp5*W$vZUT?5+o z5mWbay=p#^Bos*tPdVbemsj-r=4r|E09Cgfk-VmItWl7G)I}}|Cymai3n8@_G0Zsd z(2t7pa>{jCheVT0R$A6G_twx^8yq(@FMl-hdTH)z?e2_r{m5wj@cqNtZzP+sE(Y_Tc{G!f<0P30c-*Ijx19FrYayD;D9lc zW6ON2J=V$w%K@WNtB6fVBu%Q>Bv_n+S+F-$I$ai9lSObT3pAM-`DTZ$zPzT+X=|x; zB9SjC$-HJA9NCko?>C6Ea~12cJ}4dkF3B3pK4F-e%<)(_&Ati%74?-sGTEzK_NHcG zWdYv1RNnUDY;ET4PdDy;yR#Hpv^OX?(C3T)u?26(nbG4H|K%^ifcPMO9b&1Cg~qR{ zC$k!A*AM)h2L%GSC$G-y3M_#avJ7D+V4V)+jFp>iEqM!sIR@Bs#NGVvW zDVgF#EeXCjSW+m7;vtjZi^rz`R9LY!5s1So7FME%pmb(~GEe@q_`0jt*?@%(!`OgcY{gh|2dl-ttep1c zgXuu)Y*(@PA3{F@aBbK3Rms!3-}nzs({RDNkO`h+eh9HPPV;xC&HwdAYmX<#W=a9L ufV-P*+FPAXh5. +*/ + +#pragma once + +// Set 10 layers for VIA +#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/9e/keymaps/via/keymap.c b/keyboards/solartempest/9e/keymaps/via/keymap.c new file mode 100644 index 000000000000..6b53279aa6bd --- /dev/null +++ b/keyboards/solartempest/9e/keymaps/via/keymap.c @@ -0,0 +1,417 @@ +#include "A9e.h" +#include QMK_KEYBOARD_H + +#ifdef RGBLIGHT_ENABLE + extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT +#endif + + +bool is_alt_tab_active = false; // Super Alt Tab Code +uint16_t alt_tab_timer = 0; +#ifdef VIA_ENABLE + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = USER00, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML //Move window to monitor on left + }; +#else + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = SAFE_RANGE, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML //Move window to monitor on left + }; +#endif + + +//Keymap physical layout as follows: +// E2 Keys Row 1 E4 E5 +// E1 Keys Row 2 E6 +// E3 Keys Row 3 +// E8 E9 E7 +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + KEYMAP( + KC_LEFT, KC__MUTE, KC_RIGHT, //Rotary Encoder 1 + TO(1), TO(2), TO(3), KC_P7, KC_P8, KC_P9, //Keys Row 1 + RGB_VAD, KC_SPACE, RGB_VAI, //Rotary Encoder 4 + RGB_MODE_REVERSE, RGB_TOG, RGB_MODE_FORWARD, //Rotary Encoder 2 + KC_CAPS, KC_SLCK, KC_NLCK, KC_P4, KC_P5, KC_P6, //Keys Row 2 + RGB_HUD, A(KC_F4), RGB_HUI, //Rotary Encoder 5 + ATABR, KC_MSTP, ATABF, //Rotary Encoder 3 + KC_WREF, KC_MYCM, KC_P0, KC_P1, KC_P2, KC_P3, //Keys Row 3 + KC_MS_WH_UP, C(KC_W), KC_MS_WH_DOWN, //Rotary Encoder 6 + C(S(KC_TAB)), KC_HOME, C(KC_TAB), //Rotary Encoder 8 + C(KC_PMNS), KC__MUTE, C(KC_PPLS), //Rotary Encoder 9 + C(S(KC_TAB)), C(KC_T), C(KC_TAB) //Rotary Encoder 7 + ), + KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 + TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 + KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 + ), + KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 + TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 + KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 + ), + KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 + TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 + KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 + ), + KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 + KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 + ), + KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 + KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 + ), + KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 + KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 + ), + KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 + KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 + ), + KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 + KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 + ), + KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 + KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 + KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 + ), +}; + + +/*const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { //Code is not required + switch (id) { + } + return MACRO_NONE; +}*/ + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { //For super alt tab keycodes + case ATABF: //Alt tab forwards + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + return true; + case ATABR: //Alt tab reverse + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_LSHIFT); + register_code(KC_TAB); + } else { + unregister_code(KC_LSHIFT); + unregister_code(KC_TAB); + } + return true; + + case NMR: //Move window to next monitor on right + if (record->event.pressed) { + register_code(KC_LSFT); + register_code(KC_LWIN); + register_code(KC_RIGHT); + unregister_code(KC_RIGHT); + unregister_code(KC_LWIN); + unregister_code(KC_LSFT); + } + return true; + case NML: //Move window to next monitor on left + if (record->event.pressed) { + register_code(KC_LSFT); + register_code(KC_LWIN); + register_code(KC_LEFT); + unregister_code(KC_LEFT); + unregister_code(KC_LWIN); + unregister_code(KC_LSFT); + } + return true; + } + return true; +} + + +bool encoder_update_user(uint8_t index, bool clockwise) +{ + if (index == 0) { /* 1 encoder */ + if (clockwise) { + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + } + else if (index == 1) { /* 2 encoder */ + if (clockwise) { + action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + } + else if (index == 2) { /* 3 encoder */ + if (clockwise) { + action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + } + else if (index == 3) { /* 4 encoder */ + if (clockwise) { + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + } + else if (index == 4) { /* 5 encoder */ + if (clockwise) { + action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col =9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col =9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + } + else if (index == 5) { /* 6 encoder */ + if (clockwise) { + action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + } + else if (index == 6) { /* 7 encoder */ + if (clockwise) { + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + } + else if (index == 7) { /* 8 encoder */ + if (clockwise) { + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 3}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 3}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 5}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 5}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + } + else if (index == 8) { /* 9 encoder */ + if (clockwise) { + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 6}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 6}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 8}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 8}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + } + } + return true; +} + + +#ifdef RGBLIGHT_ENABLE + // RGB Layer Light Settings - Note that this will fix the key switches with same LED colour and brightness + const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 95,255,90}); //Spring green + const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 30,255,120}); //Yellow-orange + const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 128,255,100}); //Cyan + const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 215,255,120}); //Magenta + const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 2, 43,100,160}); //White-left caps lock indication (No dedicated LED) + const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({8, 2, 43,100,150}); //White-right num lock indication (No dedicated LED) + const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({6, 2, 43,100,160}); //White-middle scroll lock indication (No dedicated LED) + const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers + my_layer0_layer, + my_layer1_layer, + my_layer2_layer, + my_layer3_layer, + my_capslock_layer, //Highest status indicators override other layers + my_numlock_layer, + my_scrollock_layer + ); +#endif + +void keyboard_post_init_user(void) +{ + #ifdef RGB_MATRIX_ENABLE + //NOTE 1: Layer lighting doesn't work in RGB matrix mode + //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode + //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode + //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state + rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode + rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow + #endif + #ifdef RGBLIGHT_ENABLE + rgblight_layers = my_rgb_layers;// Enable the LED layers + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 + layer_move(0); //start on layer 0 to get the lighting activated + #endif +} + + +#ifdef RGBLIGHT_ENABLE + layer_state_t layer_state_set_user(layer_state_t state) + { + rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active + rgblight_set_layer_state(1, layer_state_cmp(state, 1)); + rgblight_set_layer_state(2, layer_state_cmp(state, 2)); + rgblight_set_layer_state(3, layer_state_cmp(state, 3)); + + switch(biton32(state)){ // Change all other LEDs based on layer state as well + case 0: + rgblight_sethsv_noeeprom(50,255,30); + break; + case 1: + rgblight_sethsv_noeeprom(30,255,30); + break; + case 2: + rgblight_sethsv_noeeprom(106,255,30); + break; + case 3: + rgblight_sethsv_noeeprom(215,255,30); + break; + default: + rgblight_sethsv_noeeprom(64,255,30); + } + return state; + } + + bool led_update_user(led_t led_state) + { + rgblight_set_layer_state(4, led_state.caps_lock); //Activate capslock lighting layer + rgblight_set_layer_state(5, !(led_state.num_lock)); //Invert the indication so numlock does not always appear "on". + rgblight_set_layer_state(6, led_state.scroll_lock); //Activate scrollock lighting layer + return true; + } +#endif diff --git a/keyboards/solartempest/9e/keymaps/via/rules.mk b/keyboards/solartempest/9e/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/solartempest/9e/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/solartempest/9e/qmk_firmware hex location (old).lnk b/keyboards/solartempest/9e/qmk_firmware hex location (old).lnk new file mode 100644 index 0000000000000000000000000000000000000000..41fea2c18b9ab61e353cea86f3590ae6b0c976d9 GIT binary patch literal 899 zcmeZaU|?VrVFHp23-V~&@UVtIc*E`%KpYChGC&M+6o|G0Vh{)cVmTlN8K{5d%s)_2hG!(^q*ew8yXYF3 znlS*wBRjP+DL=6&r8uTAH#b70mMg{q)xZ;KM`yS OXvoXY%S;A|!vFvrV8tf@ literal 0 HcmV?d00001 diff --git a/keyboards/solartempest/9e/qmk_firmware hex location.lnk b/keyboards/solartempest/9e/qmk_firmware hex location.lnk new file mode 100644 index 0000000000000000000000000000000000000000..41fea2c18b9ab61e353cea86f3590ae6b0c976d9 GIT binary patch literal 899 zcmeZaU|?VrVFHp23-V~&@UVtIc*E`%KpYChGC&M+6o|G0Vh{)cVmTlN8K{5d%s)_2hG!(^q*ew8yXYF3 znlS*wBRjP+DL=6&r8uTAH#b70mMg{q)xZ;KM`yS OXvoXY%S;A|!vFvrV8tf@ literal 0 HcmV?d00001 diff --git a/keyboards/solartempest/9e/readme.md b/keyboards/solartempest/9e/readme.md new file mode 100644 index 000000000000..38b472d3326a --- /dev/null +++ b/keyboards/solartempest/9e/readme.md @@ -0,0 +1,42 @@ +# Atlantis 9e Macropad + +![Atlantis 9e](https://i.imgur.com/hFuZyXU.jpg) + +A 18-key macro pad with 9 pushbutton rotary encoders and underglow RGB per key RGB and for the case. + +For detailed instructions on using VIA and flashing, please refer to the sections further down the page! + +* Keyboard Maintainer: solartempest +* Hardware Supported: Atlantis 9e +* Hardware Availability: [rioo897](https://shop198276076.world.taobao.com/index.htm?spm=2013.1.w5002-23418336364.2.3f4d7d51DkVX3s) + +# Custom Features: + +- 9 remappable rotary encoder controling a variety of different things! +- RGB underglow support and remapped to physical locations. +- Adds custom layer lighting with custom gradients for each and static colours for the switches. +- Adds white caps lock, scroll lock, and num lock key indicators on the top row. +- VIA support included by default. +- Allows for remapping of per-layer rotary encoder functions in VIA. +- Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders. +- Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders. + + +## Flashing + +Make example for this keyboard (after setting up your build environment): + + qmk compile -kb solartempest/9e -km via + +- Please note that QMK toolbox and configurator cannot be used to flash this board. +- You will need to use an ISP Programmer to directly flash the 9e. No board reset is required, as you will flash the MCU directly. +- I used Prog ISP V2.0 but other AVR programmers will also work. +- Use a 12P AWM 20624 ribbon cable with FCP-12P-1.0mm breakout board. Only 10 pins are used. + +## Using with VIA + +- After flashing, in VIA make sure to Import Keymap, which is "9e VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. +- Go to Save+Load to Load Saved Layout. You can import my own layout "9e VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. +- It is a good idea to Save Current Layout after you decide on your mapping. + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/solartempest/9e/rules.mk b/keyboards/solartempest/9e/rules.mk new file mode 100644 index 000000000000..782755a42c25 --- /dev/null +++ b/keyboards/solartempest/9e/rules.mk @@ -0,0 +1,63 @@ +# MCU name +MCU = at90usb646 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. + +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +TERMINAL_ENABLE = no # Terminal interface feature, very large. +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +RGBLIGHT_ENABLE = no # RGB LEDs +RGB_MATRIX_ENABLE = no # RGB matrix for individual LED control (In progress only) +RGB_MATRIX_DRIVER = WS2812 # Addressable LED strand driver +RGBLIGHT_SLEEP = yes # LEDs off when sleeping +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +KEY_LOCK_ENABLE = no # Key lock functionality +ENCODER_ENABLE = yes # Encoders +LTO_ENABLE = yes # Save space +LEADER_ENABLE = no # Leader keys +COMBO_ENABLE = no # Combo keys +UNICODE_ENABLE = no # Unicode From b6e351ecc3ff327117c3e532dbd4680416e24ebc Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Wed, 8 Sep 2021 21:38:46 -0400 Subject: [PATCH 005/155] Removed extra files --- keyboards/solartempest/9e/firmware location.lnk | Bin 1154 -> 0 bytes .../9e/qmk_firmware hex location (old).lnk | Bin 899 -> 0 bytes .../9e/qmk_firmware hex location.lnk | Bin 899 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 keyboards/solartempest/9e/firmware location.lnk delete mode 100644 keyboards/solartempest/9e/qmk_firmware hex location (old).lnk delete mode 100644 keyboards/solartempest/9e/qmk_firmware hex location.lnk diff --git a/keyboards/solartempest/9e/firmware location.lnk b/keyboards/solartempest/9e/firmware location.lnk deleted file mode 100644 index c5314c13be859041d58bab3b1a0f936a11ae7b65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1154 zcma)5TS$~q5T5md+Qrq>lr=S?WEFPZ^{yl-yY8;{%d(}gc|lj#bX|A<6$_&5VqmG= zP>QU4uzcu35muCi51CXZQeMaxDSC-Yu?RxK`sNpW2&Crco0&6n&di)S^XC$gB+w0< zXjtT=J4N2)2fg4&nMY{Sj6`y7(iDApM)J(+Ze&RnD;p&%VwJz7REp5*W$vZUT?5+o z5mWbay=p#^Bos*tPdVbemsj-r=4r|E09Cgfk-VmItWl7G)I}}|Cymai3n8@_G0Zsd z(2t7pa>{jCheVT0R$A6G_twx^8yq(@FMl-hdTH)z?e2_r{m5wj@cqNtZzP+sE(Y_Tc{G!f<0P30c-*Ijx19FrYayD;D9lc zW6ON2J=V$w%K@WNtB6fVBu%Q>Bv_n+S+F-$I$ai9lSObT3pAM-`DTZ$zPzT+X=|x; zB9SjC$-HJA9NCko?>C6Ea~12cJ}4dkF3B3pK4F-e%<)(_&Ati%74?-sGTEzK_NHcG zWdYv1RNnUDY;ET4PdDy;yR#Hpv^OX?(C3T)u?26(nbG4H|K%^ifcPMO9b&1Cg~qR{ zC$k!A*AM)h2L%GSC$G-y3M_#avJ7D+V4V)+jFp>iEqM!sIR@Bs#NGVvW zDVgF#EeXCjSW+m7;vtjZi^rz`R9LY!5s1So7FME%pmb(~GEe@q_`0jt*?@%(!`OgcY{gh|2dl-ttep1c zgXuu)Y*(@PA3{F@aBbK3Rms!3-}nzs({RDNkO`h+eh9HPPV;xC&HwdAYmX<#W=a9L ufV-P*+FPAXh5-V~&@UVtIc*E`%KpYChGC&M+6o|G0Vh{)cVmTlN8K{5d%s)_2hG!(^q*ew8yXYF3 znlS*wBRjP+DL=6&r8uTAH#b70mMg{q)xZ;KM`yS OXvoXY%S;A|!vFvrV8tf@ diff --git a/keyboards/solartempest/9e/qmk_firmware hex location.lnk b/keyboards/solartempest/9e/qmk_firmware hex location.lnk deleted file mode 100644 index 41fea2c18b9ab61e353cea86f3590ae6b0c976d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 899 zcmeZaU|?VrVFHp23-V~&@UVtIc*E`%KpYChGC&M+6o|G0Vh{)cVmTlN8K{5d%s)_2hG!(^q*ew8yXYF3 znlS*wBRjP+DL=6&r8uTAH#b70mMg{q)xZ;KM`yS OXvoXY%S;A|!vFvrV8tf@ From 74e56b4b4b91fffb86002ab32d51d1bb4c24d0cb Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Wed, 8 Sep 2021 21:49:48 -0400 Subject: [PATCH 006/155] Add sofle files. --- keyboards/solartempest/sofle/.noci | 0 keyboards/solartempest/sofle/config.h | 119 ++++ keyboards/solartempest/sofle/info.json | 12 + .../solartempest/sofle/keymaps/via/bongocat.c | 212 +++++++ .../solartempest/sofle/keymaps/via/config.h | 22 + .../solartempest/sofle/keymaps/via/encoder.c | 42 ++ .../solartempest/sofle/keymaps/via/keymap.c | 334 +++++++++++ .../solartempest/sofle/keymaps/via/luna.c | 309 ++++++++++ .../sofle/keymaps/via/ocean_dream.c | 555 ++++++++++++++++++ .../solartempest/sofle/keymaps/via/oled.c | 82 +++ .../solartempest/sofle/keymaps/via/rules.mk | 1 + .../solartempest/sofle/keymaps/via/snakey.c | 321 ++++++++++ keyboards/solartempest/sofle/readme.md | 82 +++ keyboards/solartempest/sofle/rules.mk | 25 + .../solartempest/sofle/sofle VIA keymap.json | 62 ++ .../solartempest/sofle/sofle VIA layout.json | 295 ++++++++++ keyboards/solartempest/sofle/sofle.c | 19 + keyboards/solartempest/sofle/sofle.h | 42 ++ 18 files changed, 2534 insertions(+) create mode 100644 keyboards/solartempest/sofle/.noci create mode 100644 keyboards/solartempest/sofle/config.h create mode 100644 keyboards/solartempest/sofle/info.json create mode 100644 keyboards/solartempest/sofle/keymaps/via/bongocat.c create mode 100644 keyboards/solartempest/sofle/keymaps/via/config.h create mode 100644 keyboards/solartempest/sofle/keymaps/via/encoder.c create mode 100644 keyboards/solartempest/sofle/keymaps/via/keymap.c create mode 100644 keyboards/solartempest/sofle/keymaps/via/luna.c create mode 100644 keyboards/solartempest/sofle/keymaps/via/ocean_dream.c create mode 100644 keyboards/solartempest/sofle/keymaps/via/oled.c create mode 100644 keyboards/solartempest/sofle/keymaps/via/rules.mk create mode 100644 keyboards/solartempest/sofle/keymaps/via/snakey.c create mode 100644 keyboards/solartempest/sofle/readme.md create mode 100644 keyboards/solartempest/sofle/rules.mk create mode 100644 keyboards/solartempest/sofle/sofle VIA keymap.json create mode 100644 keyboards/solartempest/sofle/sofle VIA layout.json create mode 100644 keyboards/solartempest/sofle/sofle.c create mode 100644 keyboards/solartempest/sofle/sofle.h diff --git a/keyboards/solartempest/sofle/.noci b/keyboards/solartempest/sofle/.noci new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h new file mode 100644 index 000000000000..f0292a3d05e5 --- /dev/null +++ b/keyboards/solartempest/sofle/config.h @@ -0,0 +1,119 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . +*/ + +#pragma once +#include "config_common.h" + +// USB Device descriptor parameter +#define VENDOR_ID 0xFC32 +#define PRODUCT_ID 0x1287 //Original is 0x0287 but do not want to load default VIA keymap +#define DEVICE_VER 0x0002 +#define MANUFACTURER Keyhive +#define PRODUCT Solarius_Sofle //VIA version for this PCB is incorrect for the bottom row +#define DESCRIPTION Rose version of the Sofle + +// Set which side is master +//#define EE_HANDS //Use this instead for EEPROM setting +#define MASTER_LEFT + +// Key matrix size +// Rows are doubled-up. Added extra column for rotary encoder VIA mapping. +#define MATRIX_ROWS 10 +#define MATRIX_COLS 7 + +// wiring of each half +#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 } +#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, C7 } //C7 is unused on the MCU. It is needed for the encoder key matrix in via. +#define MATRIX_ROW_PINS_RIGHT { C6, D7, E6, B4, B5 } +#define MATRIX_COL_PINS_RIGHT { F6, F7, B1, B3, B2, B6, C7 } //C7 is unused on the MCU. It is needed for the encoder key matrix in via. +#define DIODE_DIRECTION COL2ROW + +#define DEBOUNCE 5 + +// Encoder support +#define ENCODERS_PAD_A { F5 } +#define ENCODERS_PAD_B { F4 } +#define ENCODERS_PAD_A_RIGHT { F4 } +#define ENCODERS_PAD_B_RIGHT { F5 } +#define ENCODER_RESOLUTIONS { 4, 2 } //Left encoder seems to have double-output issue but right does not. + +#define TAP_CODE_DELAY 10 +#define TAPPING_TOGGLE 2 //Tap TT twice to toggle layer +#define TAPPING_TERM 160 //Tapping duration in ms + +// Communication between sides +#define SOFT_SERIAL_PIN D2 + +// Disabled for LTO +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION + +// Disabled to save space +#define NO_ACTION_ONESHOT //Save 244 bytes +#define NO_RESET //Save 40 bytes + +// OLED settings +#ifdef OLED_ENABLE + #define OLED_TIMEOUT 80000 //120000 = 2 minutes in ms. + #define OLED_BRIGHTNESS 90 // Default 100. + #define SPLIT_WPM_ENABLE //Enable WPM across split keyboards (+268). + #define SPLIT_OLED_ENABLE //Synx on/off OLED state between halves (+100). +#endif + +// Combo settings +#ifdef COMBO_ENABLE + #define COMBO_COUNT 1 //Number of tap combos used + #define COMBO_TERM 400 //Default combo time is 200ms. This is the time delay allowed between deleting each whole word with shift-backspace. +#endif + +// Add RGB underglow +#define RGB_DI_PIN D3 +#define RGBLED_NUM 74 +#define RGBLED_SPLIT {37,37} +//#define RGBLIGHT_ANIMATIONS // Very memory intensive +#define RGBLIGHT_EFFECT_STATIC_GRADIENT //Firmware size (+262) +#define RGBLIGHT_LIMIT_VAL 160 //Power draw may exceed 0.6A at max brightness with white colour. +#define RGBLIGHT_LAYERS +#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF +#define RGBLIGHT_SLEEP + + +//RGB LED Conversion macro from physical array to electric array (+146 to firmware size) +//First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping +#define LED_LAYOUT( \ + L00, L01, L02, L03, L04, L05, L08, L09, L010, L011, L012, L013, \ + L10, L12, L14, L19, L111, L113, \ + L20, L21, L22, L23, L24, L25, L28, L29, L210, L211, L212, L213, \ + L30, L31, L32, L33, L34, L35, L38, L39, L310, L311, L312, L313, \ + L40, L42, L44, L49, L411, L413, \ + L50, L51, L52, L53, L54, L55, L58, L59, L510, L511, L512, L513, \ + L62, L63, L64, L65, L66, L67, L68, L69, L610, L611, \ + L71, L76, L77, L712 )\ + { \ + L14,L12,L10,L40,L42,L44,L71,L76,L66,L65,L55,L35,L25,L05,L04,L24,L34,L54,L64,L63,L53,L33,L23,L03,L02,L22,L32,L52,L62,L51,L31,L21,L01,L00,L20,L30,L50,L19,L111,L113,L413,L411,L49,L712,L77,L67,L68,L58,L38,L28,L08,L09,L29,L39,L59,L69,L610,L510,L310,L210,L010,L011,L211,L311,L511,L611,L512,L312,L212,L012,L013,L213,L313,L513, \ + } +//RGB LED logical order map +#define RGBLIGHT_LED_MAP LED_LAYOUT( \ + 5, 6, 17, 18, 29, 30, 43, 44, 55, 56, 67, 68, \ + 4, 16, 28, 45, 57, 69, \ + 3, 7, 15, 19, 27, 31, 42, 46, 54, 58, 66, 70, \ + 2, 8, 14, 20, 26, 32, 41, 47, 53, 59, 65, 71, \ + 1, 13, 25, 48, 60, 72, \ + 0, 9, 12, 21, 24, 33, 40, 49, 52, 61, 64, 73, \ + 11, 22, 23, 34, 35, 38, 39, 50, 51, 62, \ + 10, 36, 37, 63 ) diff --git a/keyboards/solartempest/sofle/info.json b/keyboards/solartempest/sofle/info.json new file mode 100644 index 000000000000..16147f76dd51 --- /dev/null +++ b/keyboards/solartempest/sofle/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "Solarius_Sofle", + "url": "", + "maintainer": "solartempest", + "width": 15, + "height": 8.0, + "layouts": { + "LAYOUT": { + "layout": [{"label":"0,3", "x":3.25, "y":0.5}, {"label":"5,3", "x":13.25, "y":0.5}, {"label":"0,2", "x":2.25, "y":0.63}, {"label":"0,4", "x":4.25, "y":0.63}, {"label":"5,4", "x":12.25, "y":0.63}, {"label":"5,2", "x":14.25, "y":0.63}, {"label":"0,5", "x":5.25, "y":0.73}, {"label":"5,5", "x":11.25, "y":0.73}, {"label":"0,0", "x":0.25, "y":0.86}, {"label":"0,1", "x":1.25, "y":0.86}, {"label":"5,1", "x":15.25, "y":0.86}, {"label":"5,0", "x":16.25, "y":0.86}, {"label":"1,3", "x":3.25, "y":1.46}, {"label":"1,6", "x":6.45, "y":1.46}, {"label":"6,6", "x":10.05, "y":1.46}, {"label":"6,3", "x":13.25, "y":1.46}, {"label":"1,2", "x":2.25, "y":1.56}, {"label":"1,4", "x":4.25, "y":1.56}, {"label":"6,4", "x":12.25, "y":1.56}, {"label":"6,2", "x":14.25, "y":1.56}, {"label":"1,5", "x":5.25, "y":1.66}, {"label":"6,5", "x":11.25, "y":1.66}, {"label":"1,0", "x":0.25, "y":1.76}, {"label":"1,1", "x":1.25, "y":1.76}, {"label":"6,1", "x":15.25, "y":1.76}, {"label":"6,0", "x":16.25, "y":1.76}, {"label":"2,3", "x":3.25, "y":2.36}, {"label":"4,0", "x":6.45, "y":2.36}, {"label":"9,5", "x":10.05, "y":2.36}, {"label":"7,3", "x":13.25, "y":2.36}, {"label":"2,2", "x":2.25, "y":2.46}, {"label":"2,4", "x":4.25, "y":2.46}, {"label":"7,4", "x":12.25, "y":2.46}, {"label":"7,2", "x":14.25, "y":2.46}, {"label":"2,5", "x":5.25, "y":2.56}, {"label":"7,5", "x":11.25, "y":2.56}, {"label":"2,0", "x":0.25, "y":2.66}, {"label":"2,1", "x":1.25, "y":2.66}, {"label":"7,1", "x":15.25, "y":2.66}, {"label":"7,0", "x":16.25, "y":2.66}, {"label":"3,3", "x":3.25, "y":3.26}, {"label":"3,6", "x":6.45, "y":3.26}, {"label":"8,6", "x":10.05, "y":3.26}, {"label":"8,3", "x":13.25, "y":3.26}, {"label":"3,2", "x":2.25, "y":3.36}, {"label":"3,4", "x":4.25, "y":3.36}, {"label":"8,4", "x":12.25, "y":3.36}, {"label":"8,2", "x":14.25, "y":3.36}, {"label":"3,5", "x":5.25, "y":3.46}, {"label":"8,5", "x":11.25, "y":3.46}, {"label":"3,0", "x":0.25, "y":3.56}, {"label":"3,1", "x":1.25, "y":3.56}, {"label":"8,1", "x":15.25, "y":3.56}, {"label":"8,0", "x":16.25, "y":3.56}, {"label":"4,2", "x":3.25, "y":4.26}, {"label":"9,1", "x":13.25, "y":4.26}, {"label":"4,3", "x":4.25, "y":4.36}, {"label":"9,2", "x":12.25, "y":4.36}, {"label":"4,1", "x":2.25, "y":4.36}, {"label":"9,0", "x":14.25, "y":4.36}, {"label":"4,4", "x":1, "y":9.96}, {"label":"4,5", "x":3.35, "y":8.71, "h":1.5}, {"label":"9,3", "x":0.8, "y":11.56}, {"label":"9,4", "x":-2.08, "y":11.01, "h":1.5}] + } + } +} diff --git a/keyboards/solartempest/sofle/keymaps/via/bongocat.c b/keyboards/solartempest/sofle/keymaps/via/bongocat.c new file mode 100644 index 000000000000..0a60f6bee0e5 --- /dev/null +++ b/keyboards/solartempest/sofle/keymaps/via/bongocat.c @@ -0,0 +1,212 @@ +/* Code is by foureight84 and modified slightly. This may need some updates for the 2021-08-30 breaking changes. +Check out their post and other work! +https://www.reddit.com/r/olkb/comments/lxw6jw/adapted_bongo_cat_animation_to_the_sofle_keyboard/ +https://github.com/foureight84/qmk_firmware/tree/sofle_foureight84 */ + +#ifdef OLED_ENABLE +char wpm_str[4]; +led_t led_usb_state; + +static void print_status_narrow(void) { +/* // Print current mode + oled_write_P(PSTR("\n\n"), false); + oled_write_ln_P(PSTR("MODE"), false); + oled_write_ln_P(PSTR(""), false); + if (keymap_config.swap_lctl_lgui) { + oled_write_ln_P(PSTR("MAC"), false); + } else { + oled_write_ln_P(PSTR("WIN"), false); + } + + switch (get_highest_layer(default_layer_state)) { + case _QWERTY: + oled_write_ln_P(PSTR("Qwrt"), false); + break; + case _COLEMAK: + oled_write_ln_P(PSTR("Clmk"), false); + break; + default: + oled_write_P(PSTR("Undef"), false); + } + oled_write_P(PSTR("\n\n"), false);*/ + // Print current layer + oled_set_cursor(0,2); + oled_write("LAYER", false); + + oled_set_cursor(0,3); + switch (get_highest_layer(layer_state)) { + case 0: + oled_write("Base ", false); + break; + case 1: + oled_write("Game ", false); + break; + case 3: + oled_write("Raise", false); + break; + case 2: + oled_write("Lower", false); + break; + } + + /* lock status */ + oled_set_cursor(0,6); + oled_write("LOCK", false); + oled_set_cursor(0,7); + oled_write("Caps", led_usb_state.caps_lock); + oled_set_cursor(0,8); + oled_write("Num", !(led_usb_state.num_lock)); + oled_set_cursor(0,9); + oled_write("Scrl", led_usb_state.scroll_lock); +} + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + return OLED_ROTATION_270; +} + +/* Animation bit by j-inc https://github.com/qmk/qmk_firmware/tree/master/keyboards/kyria/keymaps/j-inc */ +// WPM-responsive animation stuff here +#define IDLE_FRAMES 5 +#define IDLE_SPEED 20 // below this wpm value your animation will idle. Default 30. + +// #define PREP_FRAMES 1 // uncomment if >1 + +#define TAP_FRAMES 2 +#define TAP_SPEED 40 // above this wpm value typing animation to trigger. Default 60. + +#define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms +// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing +#define ANIM_SIZE 320 // number of bytes in array, minimize for adequate firmware size, max is 1024 + +uint32_t anim_timer = 0; +uint32_t anim_sleep = 0; +uint8_t current_idle_frame = 0; +// uint8_t current_prep_frame = 0; // uncomment if PREP_FRAMES >1 +uint8_t current_tap_frame = 0; + +// Implementation credit j-inc(/James Incandenza), pixelbenny, and obosob. +// Bongo cat images changed and adapted for sofle keyboard oled size. +// Original gif can be found here: https://www.pixilart.com/art/bongo-cat-bd2a8e9323aa705 +static void render_anim(void) { + static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = { + { + 0x00, 0xc0, 0x3e, 0x01, 0x00, 0x00, 0x00, 0xc0, 0xfc, 0x03, 0x00, 0x03, 0x0c, 0x30, 0xc0, 0x00, + 0xe1, 0x1e, 0x00, 0xc0, 0xbc, 0x83, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x03, 0x00, 0x00, 0x00, 0x80, 0x78, 0x87, 0x00, 0x03, 0x0c, 0x30, 0xc0, 0x00, 0xe0, 0x1f, + 0x01, 0xc0, 0x3c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x31, 0x05, 0x41, 0x12, 0x04, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0x87, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0xc0, 0x3f, 0x03, 0x80, + 0x78, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x05, + 0x00, 0x00, 0xf0, 0xcf, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0x80, 0x79, 0x07, 0x80, 0x78, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe0, 0x1e, 0x01, 0x00, 0x03, 0x0c, 0x30, 0xc0, 0x00, 0xf9, 0x07, 0x80, 0x78, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x2c, 0x32, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x03, 0x0c, 0x30, 0xc0, 0x00, 0x00, 0xf0, 0x0f, 0x80, 0x78, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x60, 0x80, 0x00, 0x00, 0xe1, 0x1e, 0x01, 0xf0, 0x8f, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, + 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x08, 0x09, 0x0e, 0x0e, 0x01, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x19, + 0x19, 0x41, 0x0a, 0x22, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x70, 0x80, + 0x00, 0x00, 0xf0, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x02, 0x01, + } + }; + static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = { + { + 0x00, 0xc0, 0x3e, 0x01, 0x00, 0x00, 0x00, 0xc0, 0xfc, 0xff, 0xff, 0xff, 0x7c, 0x70, 0x40, 0x40, + 0x61, 0x5e, 0x80, 0xc0, 0xbc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x03, 0x00, 0x00, 0x00, 0x80, 0x78, 0x87, 0x00, 0x03, 0x0f, 0x3f, 0xf8, 0xf0, 0xf0, 0x20, + 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0x87, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0xc0, 0x3f, 0x03, 0x80, + 0x78, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, + 0x00, 0x00, 0xf0, 0xcf, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0x80, 0x79, 0x07, 0x80, 0x78, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe0, 0x1e, 0x01, 0x00, 0x03, 0x0c, 0x30, 0xc0, 0x00, 0xf9, 0x07, 0x80, 0x78, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x2c, 0x32, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x03, 0x0c, 0x30, 0xc0, 0x00, 0x00, 0xf0, 0x0f, 0x80, 0x78, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x60, 0x80, 0x00, 0x00, 0xe1, 0x1e, 0x01, 0xf0, 0x8f, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, + 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x08, 0x09, 0x0e, 0x0e, 0x01, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x19, + 0x19, 0x41, 0x0a, 0x22, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x70, 0x80, + 0x00, 0x00, 0xf0, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x02, 0x01, + }, + { + 0x00, 0xc0, 0x3e, 0x01, 0x00, 0x00, 0x00, 0xc0, 0xfc, 0x03, 0x00, 0x03, 0x0c, 0x30, 0xc0, 0x00, + 0xe1, 0x1e, 0x00, 0xc0, 0xbc, 0x83, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x03, 0x00, 0x00, 0x00, 0x80, 0x78, 0x87, 0x00, 0x03, 0x0c, 0x30, 0xc0, 0x00, 0xe0, 0x1f, + 0x01, 0xc0, 0x3c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x31, 0x05, 0x41, 0x12, 0x04, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0x87, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0xc0, 0x3f, 0x03, 0x80, + 0x78, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x05, + 0x00, 0x00, 0xf0, 0xcf, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0x80, 0x79, 0x07, 0x80, 0x78, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe0, 0xfe, 0xff, 0xff, 0xff, 0xfc, 0xf0, 0xc0, 0x00, 0xf9, 0x07, 0x80, 0x78, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x2c, 0x32, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x03, 0x0f, 0x3f, 0xff, 0x03, 0x01, 0x03, 0x07, 0x18, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x60, 0x80, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x08, 0x09, 0x0e, 0x0e, 0x01, 0xf3, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x70, 0x80, + 0x00, 0x00, 0xf0, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x02, 0x01 + }, + }; + + //assumes 1 frame prep stage + void animation_phase(void) { + if(get_current_wpm() <=IDLE_SPEED){ + /* + current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES; + oled_write_raw_P(idle[abs((IDLE_FRAMES-1)-current_idle_frame)], ANIM_SIZE); + */ + oled_write_raw_P(idle[0], ANIM_SIZE); + } + /* + if(get_current_wpm() >IDLE_SPEED && get_current_wpm() 1 + oled_write_raw_P(prep[0], ANIM_SIZE); // remove if IDLE_FRAMES >1 + }*/ + if(get_current_wpm() >=TAP_SPEED){ + current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES; + oled_write_raw_P(tap[abs((TAP_FRAMES-1)-current_tap_frame)], ANIM_SIZE); + } + } + if(get_current_wpm() != 000) { + oled_on(); // not essential but turns on animation OLED with any alpha keypress + if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(); + } + anim_sleep = timer_read32(); + } else { + if(timer_elapsed32(anim_sleep) > OLED_TIMEOUT) { + oled_off(); + } else { + if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(); + } + } + } +} + +void oled_task_user(void) { + led_usb_state = host_keyboard_led_state(); + if (is_keyboard_master()) { + print_status_narrow(); + } else { + oled_set_cursor(0,1); + render_anim(); + oled_set_cursor(0,13); + sprintf(wpm_str, " %03d\n WPM", get_current_wpm()); + oled_write(wpm_str, false); + } +} +#endif diff --git a/keyboards/solartempest/sofle/keymaps/via/config.h b/keyboards/solartempest/sofle/keymaps/via/config.h new file mode 100644 index 000000000000..8970276c8774 --- /dev/null +++ b/keyboards/solartempest/sofle/keymaps/via/config.h @@ -0,0 +1,22 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . +*/ + +#pragma once + +// Set number of layers for VIA, each is 30 bytes +#define DYNAMIC_KEYMAP_LAYER_COUNT 4 diff --git a/keyboards/solartempest/sofle/keymaps/via/encoder.c b/keyboards/solartempest/sofle/keymaps/via/encoder.c new file mode 100644 index 000000000000..58bffb8e91c3 --- /dev/null +++ b/keyboards/solartempest/sofle/keymaps/via/encoder.c @@ -0,0 +1,42 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#ifdef ENCODER_ENABLE +bool encoder_update_user(uint8_t index, bool clockwise) { //Allows for remapping of rotary encoder functions in VIA + if (index == 0) { + if (clockwise) { + action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 6}, .pressed = true, .time = (timer_read() | 1) }); + action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 6}, .pressed = false, .time = (timer_read() | 1) }); + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 6}, .pressed = true, .time = (timer_read() | 1) }); + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 6}, .pressed = false, .time = (timer_read() | 1) }); + } + } else if (index == 1) { + if (clockwise) { //Double check rotation on new flash versus via mapping + action_exec((keyevent_t){.key = (keypos_t){.row = 6, .col = 6}, .pressed = true, .time = (timer_read() | 1) }); + action_exec((keyevent_t){.key = (keypos_t){.row = 6, .col = 6}, .pressed = false, .time = (timer_read() | 1) }); + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 8, .col = 6}, .pressed = true, .time = (timer_read() | 1) }); + action_exec((keyevent_t){.key = (keypos_t){.row = 8, .col = 6}, .pressed = false, .time = (timer_read() | 1) }); + } + } + return true; +} +#endif diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c new file mode 100644 index 000000000000..a61dfcd01236 --- /dev/null +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -0,0 +1,334 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#include QMK_KEYBOARD_H +#include //This is required for OLED sprintf. +#include "encoder.c" +#ifdef OLED_ENABLE + //#include "oled.c" //Stock OLED code + //Note that the keyboard animations below take a large amount of space! + //#include "bongocat.c" //OLED code for Bongocat, original code by foureight84. Disable RGBLIGHT to make enough space. + //#include "luna.c" //OLED code for Luna, original code by Hellsingcoder and adapted by Jackasaur. + #include "snakey.c" //OLED code for Snakey, customized from Luna. +#endif + +#ifdef RGBLIGHT_ENABLE + extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT +#endif + + +bool is_alt_tab_active = false; // Super Alt Tab Code +uint16_t alt_tab_timer = 0; +bool lshift_held = false; // LShift Backspace Delete whole Word Code +bool rshift_held = false; // RShift Backspace Delete whole Word Code +static uint16_t held_shift = 0; +#ifdef VIA_ENABLE + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = USER00, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + SBS //Shift backspace to delete whole word (Swap KC_BPSC with this) + }; +#else + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = SAFE_RANGE, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + SBS //Shift backspace to delete whole word (Swap KC_BPSC with this) + }; +#endif + + +#ifdef COMBO_ENABLE //(+42 firmware size for this combo). SBS takes care of this combo, so it is an example only and can be replaced with others as required. + enum combo_events { + sbs_delword + }; + + const uint16_t PROGMEM delword_combo[] = {KC_LSFT, KC_BSPC, COMBO_END}; //Shift-Backspace to delete whole words + combo_t key_combos[COMBO_COUNT] = { + [sbs_delword] = COMBO_ACTION(delword_combo) + }; + + void process_combo_event(uint16_t combo_index, bool pressed) { + switch(combo_index) { + case sbs_delword: + if (pressed) { + tap_code16(LCTL(KC_BSPC)); + } + break; + } + } +#endif + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these layouts to save space when using only VIA. +/* QWERTY + * ,-----------------------------------------. ,-----------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' | + * |------+------+------+------+------+------| Enc | | Enc |------+------+------+------+------+------| + * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ +/*[0] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC__VOLUP, KC_PGUP,KC_Y, KC_U, KC_I, KC_O, KC_P, SBS, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_MUTE, KC_NO, 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__VOLDOWN,KC_PGDN,KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, + KC_LGUI,KC_LALT,KC_LCTRL,MO(2), KC_ENT, KC_SPC, MO(3), KC_RCTRL,KC_RALT,KC_RGUI +) +, +[1] = LAYOUT( + KC_PSCR, KC_5, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F4, + KC_T, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, + KC_G, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RALT, + KC_ENT, KC_B, KC_TRNS, KC_PAUS, KC_SPACE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +), +[2] = LAYOUT( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_RGHT, KC_TRNS,KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12, + KC_WREF, KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_TRNS, KC_TRNS,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN, KC_PIPE, + KC_TRNS, KC_EQL, KC_MINS,KC_PLUS,KC_LCBR,KC_LCBR,KC_LEFT, KC_TRNS,KC_LBRC,KC_RBRC,KC_DOT, KC_COLN,KC_BSLS, KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS +), +[3] = LAYOUT( + NML, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NMR, + KC_NLCK, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ATABF, NMR, KC_WFWD, KC_HOME, KC_UP, KC_END, KC_INS, KC_DEL, + KC_SLCK, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WBAK, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ATABR, NML, KC_CAPS, KC_PGUP, KC_TRNS, 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 +)*/ +}; + + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +} + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + #ifdef KEYBOARD_PET + if (record->event.pressed) { //Drashna's OLED timeout off code for animations + oled_timer = timer_read32(); + } + #endif + + switch (keycode) { //For keycode overrides + case ATABF: //Alt tab forwards + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + return true; + case ATABR: //Alt tab reverse + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_LSHIFT); + register_code(KC_TAB); + } else { + unregister_code(KC_LSHIFT); + unregister_code(KC_TAB); + } + return true; + + case NMR: //Move window to next monitor on right + if (record->event.pressed) { + register_code(KC_LSFT); + register_code(KC_LWIN); + register_code(KC_RIGHT); + unregister_code(KC_RIGHT); + unregister_code(KC_LWIN); + unregister_code(KC_LSFT); + } + return true; + case NML: //Move window to next monitor on left + if (record->event.pressed) { + register_code(KC_LSFT); + register_code(KC_LWIN); + register_code(KC_LEFT); + unregister_code(KC_LEFT); + unregister_code(KC_LWIN); + unregister_code(KC_LSFT); + } + return true; + + case KC_RSFT: //Shift Backspace to Delete Whole Word. Inspired by Hellsingcoder. + rshift_held = record->event.pressed; + held_shift = keycode; + // KEYBOARD PET STATUS + #ifdef KEYBOARD_PET + if (record->event.pressed) { + isBarking = true; + } else { + isBarking = false; + } + #endif + return true; + case KC_LSFT: + lshift_held = record->event.pressed; + held_shift = keycode; + // KEYBOARD PET STATUS + #ifdef KEYBOARD_PET + if (record->event.pressed) { + isBarking = true; + } else { + isBarking = false; + } + #endif + return true; + case SBS: + if (record->event.pressed) { + if (lshift_held) { + unregister_code(held_shift); + register_code(KC_LCTL); + register_code(KC_BSPC); + } else if (rshift_held) { + unregister_code(held_shift); + register_code(KC_LCTL); + register_code(KC_DEL); + } else { + register_code(KC_BSPC); + } + } else { + unregister_code(KC_BSPC); + unregister_code(KC_DEL); + unregister_code(KC_LCTL); + if (lshift_held || rshift_held) { + register_code(held_shift); + } + } + return false; + + // KEYBOARD PET STATUS + #ifdef KEYBOARD_PET + case KC_LCTL: + case KC_RCTL: + if (record->event.pressed) { + isSneaking = true; + } else { + isSneaking = false; + } + return true; + case KC_SPC: + if (record->event.pressed) { + isJumping = true; + showedJump = false; + } else { + isJumping = false; + } + return true; + #endif + } + return true; +} + + +#ifdef OLED_ENABLE + void suspend_power_down_user(void) { //turn off OLEDs when computer is sleeping + oled_off(); + } +#endif + + +#ifdef RGBLIGHT_ENABLE + // RGB Layer Light Settings - Note that this will fix the key switch LED colour and brightness + const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Spring green (Change range for multiple keys with same colour) + const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 252,255,125}); //Red-orange (Change range for multiple keys with same colour) + const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); //Cyan (Change range for multiple keys with same colour) + const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); //Magenta (Change range for multiple keys with same colour) + const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 3, 43,100,170}); //White-left caps lock indication (No dedicated LED) + const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({28, 3, 43,100,170}); //White-right num lock indication (No dedicated LED). Since this indicator is inverted, it must be on the master side of the keyboard to shut off properly when the computer is sleeping. + const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({55, 3, 43,100,170}); //White-middle-right scroll lock indication (No dedicated LED) + const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers + my_layer0_layer, + my_layer1_layer, + my_layer2_layer, + my_layer3_layer, + my_capslock_layer, //Highest status indicators override other layers + my_numlock_layer, + my_scrollock_layer + ); + + + void keyboard_post_init_user(void) + { + rgblight_layers = my_rgb_layers;// Enable the LED layers + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 + layer_move(0); //start on layer 0 to get the lighting activated + } + + + layer_state_t layer_state_set_user(layer_state_t state) + { + rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active + rgblight_set_layer_state(1, layer_state_cmp(state, 1)); + rgblight_set_layer_state(2, layer_state_cmp(state, 2)); + rgblight_set_layer_state(3, layer_state_cmp(state, 3)); + + switch(biton32(state)){ // Change all other LEDs based on layer state as well + case 0: + rgblight_sethsv_noeeprom(50,255,80); + break; + case 1: + rgblight_sethsv_noeeprom(252,255,80); + break; + case 2: + rgblight_sethsv_noeeprom(118,255,80); + break; + case 3: + rgblight_sethsv_noeeprom(218,255,80); + } + return state; + } + + + bool led_update_user(led_t led_state) + { + rgblight_set_layer_state(4, led_state.caps_lock); //Activate capslock lighting layer + rgblight_set_layer_state(5, !(led_state.num_lock)); //Invert the indication so numlock does not always appear "on". + rgblight_set_layer_state(6, led_state.scroll_lock); //Activate scrollock lighting layer + return true; + } +#endif diff --git a/keyboards/solartempest/sofle/keymaps/via/luna.c b/keyboards/solartempest/sofle/keymaps/via/luna.c new file mode 100644 index 000000000000..46721a60e743 --- /dev/null +++ b/keyboards/solartempest/sofle/keymaps/via/luna.c @@ -0,0 +1,309 @@ +/* Copyright + * 2021 solartempest + * 2021 Luna code adapted from HellSingCoder and Jackasaur + * 2021 QMK + * + * 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 o + * 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 . + */ + +//SSD1306 OLED update loop +#ifdef OLED_ENABLE + /* KEYBOARD PET START */ + #define KEYBOARD_PET + + /* settings */ + #define MIN_WALK_SPEED 10 + #define MIN_RUN_SPEED 40 + + /* advanced settings */ + #define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms + #define ANIM_SIZE 96 // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024 + + /* timers */ + uint32_t anim_timer = 0; + uint32_t anim_sleep = 0; + + /* current frame */ + uint8_t current_frame = 0; + + /* status variables */ + int current_wpm_read = 0; + uint32_t oled_timer = 0; //For Keyboard pet OLED timeout with animations, code by Drashna. + led_t led_usb_state; + + bool isSneaking = false; + bool isJumping = false; + bool showedJump = true; + bool isBarking = false; + + + /* logic */ + static void render_luna(int LUNA_X, int LUNA_Y) { + + /* Sit */ + static const char PROGMEM sit[2][ANIM_SIZE] = { + /* 'sit1', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, + 0x02, 0x05, 0x02, 0x24, 0x04, 0x04, 0x02, 0xa9, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x68, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x82, 0x7c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x10, 0x10, 0x20, 0x20, 0x20, 0x28, + 0x3e, 0x1c, 0x20, 0x20, 0x3e, 0x0f, 0x11, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + /* 'sit2', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, + 0x02, 0x05, 0x02, 0x24, 0x04, 0x04, 0x02, 0xa9, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x90, 0x08, 0x18, 0x60, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0e, 0x82, 0x7c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x10, 0x10, 0x20, 0x20, 0x20, 0x28, + 0x3e, 0x1c, 0x20, 0x20, 0x3e, 0x0f, 0x11, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } + }; + + /* Walk */ + static const char PROGMEM walk[2][ANIM_SIZE] = { + /* 'walk1', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x90, 0x90, 0x90, 0xa0, 0xc0, 0x80, 0x80, + 0x80, 0x70, 0x08, 0x14, 0x08, 0x90, 0x10, 0x10, 0x08, 0xa4, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0xea, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x20, 0x20, 0x3c, 0x0f, 0x11, 0x1f, 0x03, + 0x06, 0x18, 0x20, 0x20, 0x3c, 0x0c, 0x12, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + /* 'walk2', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, + 0x00, 0xe0, 0x10, 0x28, 0x10, 0x20, 0x20, 0x20, 0x10, 0x48, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x20, 0xf8, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x30, 0xd5, 0x20, 0x1f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x30, 0x0c, 0x02, 0x05, 0x09, 0x12, 0x1e, + 0x02, 0x1c, 0x14, 0x08, 0x10, 0x20, 0x2c, 0x32, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + /* Run */ + static const char PROGMEM run[2][ANIM_SIZE] = { + /* 'run1', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x08, 0xc8, 0xb0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x40, 0x40, 0x3c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0xc4, 0xa4, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc8, 0x58, 0x28, 0x2a, 0x10, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x09, 0x04, 0x04, 0x04, 0x04, 0x02, 0x03, 0x02, 0x01, 0x01, + 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + /* 'run2', 32x22px */ + { + 0x00, 0x00, 0x00, 0xe0, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x80, 0x80, 0x78, 0x28, 0x08, 0x10, 0x20, 0x30, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0xb0, 0x50, 0x55, 0x20, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, + 0x02, 0x1e, 0x20, 0x20, 0x18, 0x0c, 0x14, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + /* Bark */ + static const char PROGMEM bark[2][ANIM_SIZE] = { + /* 'bark1', 32x22px */ + { + 0x00, 0xc0, 0x20, 0x10, 0xd0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, + 0x3c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xc8, 0x48, 0x28, 0x2a, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x02, + 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + /* 'bark2', 32x22px */ + { + 0x00, 0xe0, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, + 0x40, 0x2c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x48, 0x28, 0x2a, 0x10, 0x0f, 0x20, 0x4a, 0x09, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x02, + 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + /* Sneak */ + static const char PROGMEM sneak[2][ANIM_SIZE] = { + /* 'sneak1', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x40, 0x40, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1e, 0x21, 0xf0, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x04, + 0x04, 0x04, 0x03, 0x01, 0x00, 0x00, 0x09, 0x01, 0x80, 0x80, 0xab, 0x04, 0xf8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x20, 0x20, 0x3c, 0x0f, 0x11, 0x1f, 0x02, 0x06, + 0x18, 0x20, 0x20, 0x38, 0x08, 0x10, 0x18, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, + }, + + /* 'sneak2', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xe0, 0xa0, 0x20, 0x40, 0x80, 0xc0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3e, 0x41, 0xf0, 0x04, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x02, 0x04, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x40, 0x40, 0x55, 0x82, 0x7c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x30, 0x0c, 0x02, 0x05, 0x09, 0x12, 0x1e, 0x04, + 0x18, 0x10, 0x08, 0x10, 0x20, 0x28, 0x34, 0x06, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + /* animation */ + void animate_luna(void) { + + /* jump */ + if (isJumping || !showedJump) { + + /* clear */ + oled_set_cursor(LUNA_X,LUNA_Y +2); + oled_write(" ", false); + + oled_set_cursor(LUNA_X,LUNA_Y -1); + + showedJump = true; + } else { + + /* clear */ + oled_set_cursor(LUNA_X,LUNA_Y -1); + oled_write(" ", false); + + oled_set_cursor(LUNA_X,LUNA_Y); + } + + /* switch frame */ + current_frame = (current_frame + 1) % 2; + + /* current status */ + if(isBarking) { + oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); + + } else if(isSneaking) { + oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + + } else if(current_wpm_read <= MIN_WALK_SPEED) { + oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); + + } else if(current_wpm_read <= MIN_RUN_SPEED) { + oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE); + + } else { + oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE); + } + } + + /* animation timer */ + if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animate_luna(); + } + } + + /* KEYBOARD PET END */ + + static void print_logo_narrow(void) { + oled_set_cursor(0,3); + oled_write("SOLAR", false); + oled_set_cursor(0,4); + oled_write("TMPST", false); + + /* wpm counter */ + char wpm_str[8]; + oled_set_cursor(0,10); + sprintf(wpm_str, " %03d", current_wpm_read); + oled_write(wpm_str, false); + oled_set_cursor(0,11); + oled_write(" wpm", false); + } + + static void print_status_narrow(void) { + /*switch (get_highest_layer(default_layer_state)) { //Not required as only one default layer is used + case 0: + oled_write("SOLAR", false); + break; + case 1: + oled_write("GAME", false); + break; + default: + oled_write("UNDEF", false); + }*/ + + /* Print current layer */ + oled_set_cursor(0,2); + oled_write("LAYER", false); + + oled_set_cursor(0,3); + switch (get_highest_layer(layer_state)) { + case 0: + oled_write("Base ", false); + break; + case 1: + oled_write("Game ", false); + break; + case 3: + oled_write("Raise", false); + break; + case 2: + oled_write("Lower", false); + break; + } + + /* lock status */ + oled_set_cursor(0,6); + oled_write("LOCK", false); + oled_set_cursor(0,7); + oled_write("Caps", led_usb_state.caps_lock); + oled_set_cursor(0,8); + oled_write("Num", !(led_usb_state.num_lock)); + oled_set_cursor(0,9); + oled_write("Scrl", led_usb_state.scroll_lock); + + /* KEYBOARD PET RENDER START */ + render_luna(0,13); + /* KEYBOARD PET RENDER END */ + } + + oled_rotation_t oled_init_user(oled_rotation_t rotation) { + return OLED_ROTATION_270; + } + + void oled_task_user(void) { + /* KEYBOARD PET VARIABLES START */ + current_wpm_read = get_current_wpm(); + led_usb_state = host_keyboard_led_state(); + /* KEYBOARD PET VARIABLES END */ + + + if (is_keyboard_master()) { //Drashna's OLED timeout off code for animations + if (timer_elapsed32(oled_timer) > 30000) { + oled_off(); + return; + } else { + oled_on(); + } + } + + if (is_keyboard_master()) { + print_status_narrow(); + } else { + print_logo_narrow(); + } + } +#endif diff --git a/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c b/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c new file mode 100644 index 000000000000..6aa6a7a8b5b7 --- /dev/null +++ b/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c @@ -0,0 +1,555 @@ +/* + * Copyright 2021 Tyler Thrailkill (@snowe/@snowe2010) + * + * 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 . + */ + +#include "ocean_dream.h" +#include "quantum.h" +#include "print.h" + +// Calculated Parameters +#define TWINKLE_PROBABILITY_MODULATOR 100 / TWINKLE_PROBABILITY // CALCULATED: Don't Touch +#define TOTAL_STARS STARS_PER_LINE *NUMBER_OF_STAR_LINES // CALCULATED: Don't Touch +#define OCEAN_ANIMATION_MODULATOR NUMBER_OF_FRAMES / OCEAN_ANIMATION_SPEED // CALCULATED: Don't Touch +#define SHOOTING_STAR_ANIMATION_MODULATOR NUMBER_OF_FRAMES / SHOOTING_STAR_ANIMATION_SPEED // CALCULATED: Don't Touch +#define STAR_ANIMATION_MODULATOR NUMBER_OF_FRAMES / STAR_ANIMATION_SPEED // CALCULATED: Don't Touch + +uint8_t animation_counter = 0; // global animation counter. +bool is_calm = false; +uint32_t starry_night_anim_timer = 0; +uint32_t starry_night_anim_sleep = 0; +static int current_wpm = 0; + +static uint8_t increment_counter(uint8_t counter, uint8_t max) { + counter++; + if (counter >= max) { + return 0; + } else { + return counter; + } +} + +#ifdef ENABLE_WAVE +static uint8_t decrement_counter(uint8_t counter, uint8_t max) { + counter--; + if (counter < 0 || counter > max) { + return max; + } else { + return counter; + } +} +#endif + +#ifdef ENABLE_MOON // region +# ifndef STATIC_MOON +uint8_t moon_animation_frame = 0; // keeps track of current moon frame +uint16_t moon_animation_counter = 0; // counts how many frames to wait before animating moon to next frame +# endif + +# ifdef STATIC_MOON +static const char PROGMEM moon[6] = { + 0x18, 0x7E, 0xFF, 0xC3, 0x81, 0x81, +}; +# endif + +# ifndef STATIC_MOON +static const char PROGMEM moon_animation[14][8] = { + // clang-format off + { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, + { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x42, 0x00, }, + { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xC3, 0x00, 0x00, }, + { 0x3C, 0x7E, 0xFF, 0xFF, 0xC3, 0x81, 0x00, 0x00, }, + { 0x3C, 0x7E, 0xFF, 0xC3, 0x81, 0x00, 0x00, 0x00, }, + { 0x3C, 0x7E, 0xC3, 0x81, 0x81, 0x00, 0x00, 0x00, }, + { 0x3C, 0x42, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, + { 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x42, 0x3C, }, + { 0x00, 0x00, 0x00, 0x81, 0x81, 0xC3, 0x7E, 0x3C, }, + { 0x00, 0x00, 0x00, 0x81, 0xC3, 0xFF, 0x7E, 0x3C, }, + { 0x00, 0x00, 0x81, 0xC3, 0xFF, 0xFF, 0x7E, 0x3C, }, + { 0x00, 0x00, 0xC3, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, + { 0x00, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, + // clang-format on +}; +# endif + +static void draw_moon(void) { +# ifdef STATIC_MOON + oled_set_cursor(MOON_COLUMN, MOON_LINE); + oled_write_raw_P(moon, 6); +# endif +# ifndef STATIC_MOON + moon_animation_counter = increment_counter(moon_animation_counter, ANIMATE_MOON_EVERY_N_FRAMES); + if (moon_animation_counter == 0) { + moon_animation_frame = increment_counter(moon_animation_frame, 14); + oled_set_cursor(MOON_COLUMN, MOON_LINE); + oled_write_raw_P(moon_animation[moon_animation_frame], 8); + } +# endif +} +#endif // endregion + +#ifdef ENABLE_WAVE // region +uint8_t starry_night_wave_frame_width_counter = 31; +uint8_t rough_waves_frame_counter = 0; + +// clang-format off +static const char PROGMEM ocean_top[8][32] = { + // still ocean + { + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + }, + // small ripples + { + 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + }, + // level 2 ripples + { + 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, + 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, + 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, + 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, + }, + // level 3 waves + { + 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, + }, + { + 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, + 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, + 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, + 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, + }, + { + 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, + 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, + 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, + 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, + }, +}; +static const char PROGMEM ocean_bottom[8][32] = { + // still ocean + { + 0x00, 0x40, 0x40, 0x41, 0x01, 0x01, 0x01, 0x21, + 0x20, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x44, + 0x44, 0x40, 0x40, 0x00, 0x00, 0x08, 0x08, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x40, 0x40, 0x00, 0x00, + }, + // small ripples + { + 0x00, 0x00, 0x40, 0x40, 0x01, 0x01, 0x01, 0x20, + 0x20, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, + 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, + }, + // level 2 ripples + { + 0x00, 0x00, 0x40, 0x40, 0x01, 0x01, 0x01, 0x20, + 0x20, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, + 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, + }, + // level 3 waves + { + 0x00, 0x40, 0x40, 0x42, 0x42, 0x03, 0x11, 0x11, + 0x20, 0x20, 0x00, 0x00, 0x08, 0x0C, 0x0C, 0x04, + 0x05, 0x41, 0x41, 0x21, 0x20, 0x00, 0x00, 0x08, + 0x0A, 0x0A, 0x0B, 0x41, 0x41, 0x41, 0x41, 0x00, + }, + { + 0x10, 0x10, 0x00, 0x80, 0x84, 0xC4, 0x02, 0x06, + 0x84, 0x44, 0xC0, 0x80, 0x80, 0x20, 0x20, 0x10, + 0x08, 0x12, 0x91, 0x81, 0x42, 0x40, 0x00, 0x00, + 0x10, 0x12, 0x22, 0x22, 0x24, 0x04, 0x84, 0x80, + }, + { + 0x08, 0x80, 0x80, 0x82, 0x82, 0x03, 0x21, 0x21, + 0x10, 0x10, 0x00, 0x00, 0x04, 0x04, 0x0C, 0x08, + 0x09, 0x41, 0x42, 0x22, 0x20, 0x00, 0x00, 0x08, + 0x0A, 0x0A, 0x0B, 0x41, 0x43, 0x42, 0x42, 0x00, + }, +}; +// clang-format on + +static void animate_waves(void) { + starry_night_wave_frame_width_counter = decrement_counter(starry_night_wave_frame_width_counter, WIDTH - 1); // only 3 frames for last wave type + rough_waves_frame_counter = increment_counter(rough_waves_frame_counter, 3); // only 3 frames for last wave type + + void draw_ocean(uint8_t frame, uint16_t offset, uint8_t byte_index) { + oled_write_raw_byte(pgm_read_byte(ocean_top[frame] + byte_index), offset); + oled_write_raw_byte(pgm_read_byte(ocean_bottom[frame] + byte_index), offset + WIDTH); + } + + for (int i = 0; i < WIDTH; ++i) { + uint16_t offset = OCEAN_LINE * WIDTH + i; + uint8_t byte_index = starry_night_wave_frame_width_counter + i; + if (byte_index >= WIDTH) { + byte_index = byte_index - WIDTH; + } + if (is_calm || current_wpm <= WAVE_CALM) { + draw_ocean(0, offset, byte_index); + } else if (current_wpm <= WAVE_HEAVY_STORM) { + draw_ocean(1, offset, byte_index); + } else if (current_wpm <= WAVE_HURRICANE) { + draw_ocean(2, offset, byte_index); + } else { + draw_ocean(3 + rough_waves_frame_counter, offset, byte_index); + } + } +} +#endif // endregion + +#ifdef ENABLE_ISLAND // region +uint8_t island_frame_1 = 0; + +// clang-format off +// only use 46 bytes (first 18 are blank, so we don't write them, makes it smaller and we can see the shooting stars properly!) + +// To save space and allow the shooting stars to be seen, only draw the tree on every frame. +// Tree is only 14bytes wide so we save 108 bytes on just the first row. Second row, the +// first 18 bytes is always the same piece of land, so only store that once, which saves 90 bytes +static const char PROGMEM islandRightTop[6][14] = { + {0x84, 0xEC, 0x6C, 0x3C, 0xF8, 0xFE, 0x3F, 0x6B, 0xDB, 0xB9, 0x30, 0x40, 0x00, 0x00,}, + {0x80, 0xC3, 0xEE, 0x7C, 0xB8, 0xFC, 0xFE, 0x6F, 0xDB, 0x9B, 0xB2, 0x30, 0x00, 0x00,}, + {0x00, 0xC0, 0xEE, 0x7F, 0x3D, 0xF8, 0xFC, 0x7E, 0x57, 0xDB, 0xDB, 0x8A, 0x00, 0x00,}, + {0x00, 0xC0, 0xE6, 0x7F, 0x3B, 0xF9, 0xFC, 0xFC, 0xB6, 0xB3, 0x33, 0x61, 0x00, 0x00,}, + {0x00, 0x00, 0x00, 0x00, 0x80, 0xEE, 0xFF, 0xFB, 0xF9, 0xFC, 0xDE, 0xB6, 0xB6, 0x24,}, + {0x00, 0x00, 0x00, 0x00, 0xC0, 0xEE, 0xFE, 0xFF, 0xFB, 0xFD, 0xEE, 0xB6, 0xB6, 0x92,}, +}; +static const char PROGMEM islandRightBottom[6][14] = { + {0x41, 0x40, 0x60, 0x3E, 0x3F, 0x23, 0x20, 0x60, 0x41, 0x43, 0x40, 0x40, 0x40, 0x80,}, + {0x40, 0x41, 0x60, 0x3E, 0x3F, 0x23, 0x20, 0x60, 0x40, 0x40, 0x41, 0x41, 0x40, 0x80,}, + {0x40, 0x40, 0x61, 0x3D, 0x3F, 0x27, 0x21, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80,}, + {0x40, 0x43, 0x61, 0x3C, 0x3F, 0x27, 0x21, 0x60, 0x41, 0x43, 0x43, 0x42, 0x40, 0x80,}, + {0x40, 0x40, 0x60, 0x3C, 0x3F, 0x27, 0x23, 0x63, 0x44, 0x40, 0x41, 0x41, 0x41, 0x81,}, + {0x40, 0x40, 0x60, 0x3C, 0x3F, 0x27, 0x23, 0x63, 0x42, 0x42, 0x41, 0x41, 0x41, 0x80,}, +}; +static const char PROGMEM islandLeft[18] = { + 0x80, 0x40, 0x40, 0x40, 0x40, 0x60, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x60, 0x40, 0x40, +}; +// clang-format on + +static void animate_island(void) { + if (animation_counter == 0) { + island_frame_1 = increment_counter(island_frame_1, 2); + } + + void draw_island_parts(uint8_t frame) { + oled_set_cursor(ISLAND_COLUMN + 3, ISLAND_LINE); + oled_write_raw_P(islandRightTop[frame], 14); + oled_set_cursor(ISLAND_COLUMN + 0, ISLAND_LINE + 1); + oled_write_raw_P(islandLeft, 18); + oled_set_cursor(ISLAND_COLUMN + 3, ISLAND_LINE + 1); + oled_write_raw_P(islandRightBottom[frame], 14); + } + + if (is_calm || current_wpm < ISLAND_CALM) { + draw_island_parts(0); + } else if (current_wpm >= ISLAND_CALM && current_wpm < ISLAND_HEAVY_STORM) { + draw_island_parts(island_frame_1 + 1); + } else if (current_wpm >= ISLAND_HEAVY_STORM && current_wpm < ISLAND_HURRICANE) { + draw_island_parts(island_frame_1 + 2); + } else { + draw_island_parts(island_frame_1 + 4); + } +} +#endif // endregion + +#ifdef ENABLE_STARS // region +bool stars_setup = false; // only setup stars once, then we just twinkle them +struct Coordinate { + int x; + int y; + bool exists; +}; + +struct Coordinate stars[TOTAL_STARS]; // tracks all stars/coordinates + +/** + * Setup all the initial stars on the screen + * This function divides the screen into regions based on STARS_PER_LINE and NUMBER_OF_STAR_LINES + * where each line is made up of 8x8 pixel groups, that are populated by a single star. + * + * Not sure how this function will work with larger or smaller screens. + * It should be fine, as long as the screen width is a multiple of 8 + */ +static void setup_stars(void) { + // For every line, split the line into STARS_PER_LINE, find a random point in that region, and turn the pixel on + // 36% probability it will not be added + // (said another way, 80% chance it will start out lit in the x direction, then 80% chance it will start out lit in the y direction = 64% probability it will start out lit at all) + for (int line = 0; line < NUMBER_OF_STAR_LINES; ++line) { + for (int column_group = 0; column_group < STARS_PER_LINE; ++column_group) { + uint8_t rand_column = rand() % 10; + uint8_t rand_row = rand() % 10; + if (rand_column < 8 && rand_row < 8) { + int column_adder = column_group * 8; + int line_adder = line * 8; + int x = rand_column + column_adder; + int y = rand_row + line_adder; + oled_write_pixel(x, y, true); + stars[column_group + (line * STARS_PER_LINE)].x = x; + stars[column_group + (line * STARS_PER_LINE)].y = y; + stars[column_group + (line * STARS_PER_LINE)].exists = true; + } else { + stars[column_group + (line * STARS_PER_LINE)].exists = false; + } + } + } + stars_setup = true; +} + +/** + * Twinkle the stars (move them one pixel in any direction) with a probability of 50% to twinkle any given star + */ +static void twinkle_stars(void) { + for (int line = 0; line < NUMBER_OF_STAR_LINES; ++line) { + for (int column_group = 0; column_group < STARS_PER_LINE; ++column_group) { + struct Coordinate star = stars[column_group + (line * STARS_PER_LINE)]; + + // skip stars that were never added + if (!star.exists) { + continue; + } + if (rand() % TWINKLE_PROBABILITY_MODULATOR == 0) { + oled_write_pixel(star.x, star.y, false); // black out pixel + + // don't allow stars to leave their own region + if (star.x == (column_group * 8)) { // star is the farthest left it can go in its region + star.x++; // move it right immediately + } else if (star.x == (((column_group + 1) * 8) - 1)) { // star is farthest right it can go in its region + star.x--; // move it left immediately + } + if (star.y == (line * 8)) { // star is the farthest up it can go in its region + star.y++; // move it down immediately + } else if (star.y == (((line + 1) * 8) - 1)) { // star is farthest down it can go in its region + star.y--; // move it up immediately + } + + // now decide direction + int new_x; + int x_choice = rand() % 3; + if (x_choice == 0) { + new_x = star.x - 1; + } else if (x_choice == 1) { + new_x = star.x + 1; + } else { + new_x = star.x; + } + + int new_y; + int y_choice = rand() % 3; + if (y_choice == 0) { + new_y = star.y - 1; + } else if (y_choice == 1) { + new_y = star.y + 1; + } else { + new_y = star.y; + } + + star.x = new_x; + star.y = new_y; + oled_write_pixel(new_x, new_y, true); + } + + stars[column_group + (line * STARS_PER_LINE)] = star; + } + } +} + +/** + * Setup the stars and then animate them on subsequent frames + */ +static void animate_stars(void) { + if (!stars_setup) { + setup_stars(); + } else { + twinkle_stars(); + } +} +#endif // endregion + +#ifdef ENABLE_SHOOTING_STARS // region +bool shooting_stars_setup = false; // only setup shooting stars array once with defaults + +struct ShootingStar { + int x_1; + int y_1; + int x_2; + int y_2; + bool running; + int frame; + int delay; +}; + +struct ShootingStar shooting_stars[MAX_NUMBER_OF_SHOOTING_STARS]; // tracks all the shooting stars + +static void setup_shooting_star(struct ShootingStar *shooting_star) { + int column_to_start = rand() % (WIDTH / 2); + int row_to_start = rand() % (HEIGHT - 48); // shooting_stars travel diagonally 1 down, 1 across. So the lowest a shooting_star can start and not 'hit' the ocean is 32 above the ocean. + + shooting_star->x_1 = column_to_start; + shooting_star->y_1 = row_to_start; + shooting_star->x_2 = column_to_start + 1; + shooting_star->y_2 = row_to_start + 1; + shooting_star->running = true; + shooting_star->frame++; + shooting_star->delay = rand() % SHOOTING_STAR_DELAY; +} + +static void move_shooting_star(struct ShootingStar *shooting_star) { + oled_write_pixel(shooting_star->x_1, shooting_star->y_1, false); + oled_write_pixel(shooting_star->x_2, shooting_star->y_2, false); + + shooting_star->x_1++; + shooting_star->y_1++; + shooting_star->x_2++; + shooting_star->y_2++; + shooting_star->frame++; + + oled_write_pixel(shooting_star->x_1, shooting_star->y_1, true); + oled_write_pixel(shooting_star->x_2, shooting_star->y_2, true); +} + +static void finish_shooting_star(struct ShootingStar *shooting_star) { + oled_write_pixel(shooting_star->x_1, shooting_star->y_1, false); + oled_write_pixel(shooting_star->x_2, shooting_star->y_2, false); + shooting_star->running = false; + shooting_star->frame = 0; +} + +static void animate_shooting_star(struct ShootingStar *shooting_star) { + if (shooting_star->frame > SHOOTING_STAR_FRAMES) { + finish_shooting_star(shooting_star); + return; + } else if (!shooting_star->running) { + setup_shooting_star(shooting_star); + } else { + if (shooting_star->delay == 0) { + move_shooting_star(shooting_star); + } else { + shooting_star->delay--; + } + } +} + +static void animate_shooting_stars(void) { + if (is_calm) { + return; + } + if (!shooting_stars_setup) { + for (int i = 0; i < MAX_NUMBER_OF_SHOOTING_STARS; ++i) { + shooting_stars[i].running = false; + } + shooting_stars_setup = true; + } + /** + * Fixes issue with stars that were falling _while_ the + * wpm dropped below the condition for them to keep falling + */ + void end_extra_stars(uint8_t starting_index) { + for (int shooting_star_index = starting_index; shooting_star_index < MAX_NUMBER_OF_SHOOTING_STARS; ++shooting_star_index) { + struct ShootingStar shooting_star = shooting_stars[shooting_star_index]; + if (shooting_star.running) { + finish_shooting_star(&shooting_star); + shooting_stars[shooting_star_index] = shooting_star; + } + } + } + + int number_of_shooting_stars = current_wpm / SHOOTING_STAR_WPM_INCREMENT; + number_of_shooting_stars = (number_of_shooting_stars > MAX_NUMBER_OF_SHOOTING_STARS) ? MAX_NUMBER_OF_SHOOTING_STARS : number_of_shooting_stars; + + if (number_of_shooting_stars == 0) { + // make sure all shooting_stars are ended + end_extra_stars(0); + } else { + for (int shooting_star_index = 0; shooting_star_index < number_of_shooting_stars; ++shooting_star_index) { + struct ShootingStar shooting_star = shooting_stars[shooting_star_index]; + animate_shooting_star(&shooting_star); + shooting_stars[shooting_star_index] = shooting_star; + } + end_extra_stars(number_of_shooting_stars); + } +} +#endif // endregion + +/** + * Main rendering function + * + * Calls all different animations at different rates + */ +void render_stars(void) { + // // animation timer + if (timer_elapsed32(starry_night_anim_timer) > STARRY_NIGHT_ANIM_FRAME_DURATION) { + starry_night_anim_timer = timer_read32(); + current_wpm = get_current_wpm(); + +#ifdef ENABLE_ISLAND + animate_island(); +#endif + +#ifdef ENABLE_SHOOTING_STARS + if (animation_counter % SHOOTING_STAR_ANIMATION_MODULATOR == 0) { + animate_shooting_stars(); + } +#endif + +#ifdef ENABLE_STARS + // TODO offsetting the star animation from the wave animation would look better, + // but if I do that, then the stars appear in the water because + // the ocean animation has to wait a bunch of frames to overwrite it. + // Possible solutions: + // 1. Only draw stars to the top of the island/ocean. + // 2. Draw ocean every frame, only move ocean on frames matching modulus + // Problems: + // 1. What if someone wants to move the island up a bit, or they want to have the stars reflect in the water? + // 2. More cpu intensive. And I'm already running out of cpu as it is... + if (animation_counter % STAR_ANIMATION_MODULATOR == 0) { + animate_stars(); + } +#endif + +#ifdef ENABLE_WAVE + if (animation_counter % OCEAN_ANIMATION_MODULATOR == 0) { + animate_waves(); + } +#endif + +#ifdef ENABLE_MOON + draw_moon(); +#endif + + animation_counter = increment_counter(animation_counter, NUMBER_OF_FRAMES); + } + + // this fixes the screen on and off bug + if (current_wpm > 0) { + oled_on(); + starry_night_anim_sleep = timer_read32(); + } else if (timer_elapsed32(starry_night_anim_sleep) > OLED_TIMEOUT) { + oled_off(); + } +} \ No newline at end of file diff --git a/keyboards/solartempest/sofle/keymaps/via/oled.c b/keyboards/solartempest/sofle/keymaps/via/oled.c new file mode 100644 index 000000000000..415a82f13d08 --- /dev/null +++ b/keyboards/solartempest/sofle/keymaps/via/oled.c @@ -0,0 +1,82 @@ + /* Copyright 2020 Josef Adamcik + * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang + * + * 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 . + */ + +//Sets up what the OLED screens display. + +#ifdef OLED_ENABLE + static void render_logo(void) { + static const char PROGMEM qmk_logo[] = { + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, + 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, + 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0 + }; + + oled_write_P(qmk_logo, false); + } + + static void print_status_narrow(void) { + // Print current mode + oled_write_P(PSTR("\n\n"), false); + + switch (get_highest_layer(layer_state)) { + case 0: + oled_write_ln_P(PSTR("Qwrt"), false); + break; + case 1: + oled_write_ln_P(PSTR("Clmk"), false); + break; + default: + oled_write_P(PSTR("Mod\n"), false); + break; + } + oled_write_P(PSTR("\n\n"), false); + // Print current layer + oled_write_ln_P(PSTR("LAYER"), false); + switch (get_highest_layer(layer_state)) { + case 0: + case 1: + oled_write_P(PSTR("Base\n"), false); + break; + case 2: + oled_write_P(PSTR("Raise"), false); + break; + case 3: + oled_write_P(PSTR("Lower"), false); + break; + default: + oled_write_ln_P(PSTR("Undef"), false); + } + oled_write_P(PSTR("\n\n"), false); + led_t led_usb_state = host_keyboard_led_state(); + oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock); + } + + oled_rotation_t oled_init_user(oled_rotation_t rotation) { + if (is_keyboard_master()) { + return OLED_ROTATION_270; + } + return rotation; + } + + void oled_task_user(void) { + if (is_keyboard_master()) { + print_status_narrow(); + } else { + render_logo(); + } + } +#endif \ No newline at end of file diff --git a/keyboards/solartempest/sofle/keymaps/via/rules.mk b/keyboards/solartempest/sofle/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/solartempest/sofle/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey.c b/keyboards/solartempest/sofle/keymaps/via/snakey.c new file mode 100644 index 000000000000..76b292887ebf --- /dev/null +++ b/keyboards/solartempest/sofle/keymaps/via/snakey.c @@ -0,0 +1,321 @@ +/* Copyright + * 2021 solartempest + * 2021 Luna code adapted from HellSingCoder and Jackasaur + * 2021 QMK + * + * 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 o + * 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 . + */ + +//SSD1306 OLED update loop +#ifdef OLED_ENABLE + #define KEYBOARD_PET + /* KEYBOARD PET START */ + + /* settings */ + #define MIN_WALK_SPEED 10 + #define MIN_RUN_SPEED 40 + + /* advanced settings */ + #define ANIM_FRAME_DURATION 300 // how long each frame lasts in ms. Default is 200. + #define ANIM_SIZE 96 // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024 + + /* timers */ + uint32_t anim_timer = 0; + + /* current frame */ + uint8_t current_frame = 0; + + /* status variables */ + int current_wpm_read = 0; + uint32_t oled_timer = 0; //For Keyboard pet OLED timeout with animations, code by Drashna. + led_t led_usb_state; + + bool isSneaking = false; + bool isJumping = false; + bool showedJump = true; + bool isBarking = false; + + + static void render_logo(int LUNA_X, int LUNA_Y) { + static const char PROGMEM luna_logo[] = { + 0x00, 0x00, 0x04, 0xf6, 0xb8, 0xf8, 0xd8, 0xf0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, + 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xc0, 0xe1, 0xf3, 0xfb, 0x7f, 0x1f, 0x0f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x3f, 0x03, + 0x01, 0x00, 0x00, 0x00, 0x80, 0xc1, 0xf3, 0xff, 0x7f, 0x1f, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x30, + 0x1e, 0x3f, 0x3f, 0x7f, 0xf9, 0xf0, 0xf0, 0x70, 0x78, 0x3c, 0x3f, 0x1f, 0x0f, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0x3f, 0x7f, 0x7f, 0xfb, 0xf1, 0xf0, 0x78, 0x3c, 0x1e, 0x0f, 0x03, 0x00, 0x00, + }; + oled_set_cursor(LUNA_X,LUNA_Y); + oled_write_raw_P(luna_logo, sizeof(luna_logo)); + } + + /* logic */ + static void render_luna(int LUNA_X, int LUNA_Y) { + + /* Sit */ + static const char PROGMEM sit[2][ANIM_SIZE] = { + /* 'sit1', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xcc, + 0xcc, 0xf8, 0xf8, 0xf0, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3f, 0x7f, 0xfc, 0xf9, 0xf1, + 0xe1, 0xc1, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x38, 0x70, 0x60, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf9, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + /* 'sit2', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xcc, + 0xcc, 0xf8, 0xf8, 0xf0, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3f, 0x7f, 0xfc, 0xf9, 0xf1, + 0xe1, 0xc1, 0x81, 0x00, 0x00, 0x01, 0x01, 0x02, 0x06, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x7c, 0x60, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf9, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + /* Walk */ + static const char PROGMEM walk[2][ANIM_SIZE] = { + /* 'walk1', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xf8, 0xfc, 0xfe, 0xfe, 0x1f, 0x3f, 0x39, 0x39, 0x3f, 0x3f, 0x1e, 0x1e, 0x0c, 0x00, + 0x00, 0x00, 0x01, 0x0f, 0x3e, 0x78, 0x70, 0xf8, 0xfc, 0xfe, 0x7e, 0x3e, 0x3c, 0x3c, 0x78, 0x78, + 0x78, 0xf0, 0xf1, 0xff, 0x7f, 0x7f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + /* 'walk2', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60, 0x60, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3e, 0x7f, 0xff, 0xff, 0xe7, 0xc7, 0x0e, 0x0e, 0x0f, 0x0f, 0x07, 0x07, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1f, 0x3e, 0x78, 0xf0, 0xfc, 0x7e, 0x1e, 0x1f, 0x0f, 0x0e, + 0x1e, 0x1c, 0x3d, 0x7f, 0xff, 0xff, 0xff, 0xfc, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + /* Run */ + static const char PROGMEM run[2][ANIM_SIZE] = { + /* 'run1', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xc0, 0xe0, 0xf0, 0xf0, 0xf8, 0x98, 0xf8, 0xf8, 0xf8, 0xf0, 0x70, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf0, 0xf0, 0xe0, 0xc0, + 0x87, 0x7f, 0xff, 0xff, 0xf1, 0xc3, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x1f, 0x3e, 0x78, 0xf7, 0xff, 0x7f, 0x3d, 0x03, 0x07, 0x0f, + 0x1e, 0x3d, 0x7f, 0xff, 0xff, 0xff, 0xfc, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + /* 'run2', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xe0, 0xf0, 0xf0, 0xf8, 0x98, 0xf8, 0xf8, 0xf8, 0xf0, 0x70, 0x20, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf8, 0xfc, 0x3e, 0xde, 0xfe, 0xfc, 0xf8, 0x00, 0x00, + 0xe0, 0xfe, 0xff, 0x7f, 0x07, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x1e, 0x3c, 0x78, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x07, 0x1f, 0x3f, 0x7c, 0x78, 0xff, + 0xff, 0x7f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + /* Bark */ + static const char PROGMEM bark[2][ANIM_SIZE] = { + /* 'bark1', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0x30, 0x70, 0xe0, 0xe0, 0xc0, 0xc0, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0xff, 0xff, 0xe7, 0xe7, 0xef, 0xef, 0xcf, 0xcb, 0x83, 0x83, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x1c, 0x38, 0x78, 0xf1, 0xe3, 0xe3, 0xe7, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + /* 'bark2', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0x60, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0x9f, + 0x0f, 0x0e, 0x1f, 0x1f, 0x3f, 0x3f, 0x7e, 0xe6, 0x83, 0x03, 0x0f, 0x43, 0x43, 0x90, 0x88, 0x08, + 0x00, 0x00, 0x03, 0x1e, 0x3c, 0x78, 0xf0, 0xe0, 0xe0, 0xf0, 0xf0, 0xfb, 0xff, 0xff, 0xff, 0x7f, + 0x7f, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + /* Sneak */ + static const char PROGMEM sneak[2][ANIM_SIZE] = { + /* 'sneak1', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xcc, 0xf8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, + 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x7f, 0xf1, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, + 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x01, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, + }, + + /* 'sneak2', 32x22px */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xe0, 0xf8, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, + 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x7f, 0xf0, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, + 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + /* animation */ + void animate_luna(void) { + + /* jump */ + if (isJumping || !showedJump) { + + /* clear */ + oled_set_cursor(LUNA_X,LUNA_Y +2); + oled_write(" ", false); + + oled_set_cursor(LUNA_X,LUNA_Y -1); + + showedJump = true; + } else { + + /* clear */ + oled_set_cursor(LUNA_X,LUNA_Y -1); + oled_write(" ", false); + + oled_set_cursor(LUNA_X,LUNA_Y); + } + + /* switch frame */ + current_frame = (current_frame + 1) % 2; + + /* current status */ + if(isBarking) { + oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); + + } else if(isSneaking) { + oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + + } else if(current_wpm_read <= MIN_WALK_SPEED) { + oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); + + } else if(current_wpm_read <= MIN_RUN_SPEED) { + oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE); + + } else { + oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE); + } + } + + /* animation timer */ + if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animate_luna(); + } + } + /* KEYBOARD PET END */ + + static void print_logo_narrow(void) { + oled_set_cursor(0,2); + oled_write("SOLAR", false); + oled_set_cursor(0,3); + oled_write("TMPST", false); + + render_logo(0,7); + + /* wpm counter */ + char wpm_str[8]; + oled_set_cursor(0,13); + sprintf(wpm_str, " %03d", current_wpm_read); + oled_write(wpm_str, false); + oled_set_cursor(0,14); + oled_write(" wpm", false); + } + + static void print_status_narrow(void) { + /*switch (get_highest_layer(default_layer_state)) { //May be useful if you use multiple non-QWERTY layouts to show which is active. + case 0: + oled_write("SOLAR", false); + break; + case 1: + oled_write("GAME", false); + break; + default: + oled_write("UNDEF", false); + }*/ + + /* Print current layer */ + oled_set_cursor(0,2); + oled_write("LAYER", false); + + oled_set_cursor(0,3); + switch (get_highest_layer(layer_state)) { + case 0: + oled_write("Base ", false); + break; + case 1: + oled_write("Game ", false); + break; + case 3: + oled_write("Raise", false); + break; + case 2: + oled_write("Lower", false); + break; + } + + /* lock status */ + oled_set_cursor(0,6); + oled_write("LOCK", false); + oled_set_cursor(0,7); + oled_write("Caps", led_usb_state.caps_lock); + oled_set_cursor(0,8); + oled_write("Num", !(led_usb_state.num_lock)); + oled_set_cursor(0,9); + oled_write("Scrl", led_usb_state.scroll_lock); + + /* KEYBOARD PET RENDER START */ + render_luna(0,13); + /* KEYBOARD PET RENDER END */ + } + + oled_rotation_t oled_init_user(oled_rotation_t rotation) { + return OLED_ROTATION_270; + } + + void oled_task_user(void) { + /* KEYBOARD PET VARIABLES START */ + current_wpm_read = get_current_wpm(); + /* KEYBOARD PET VARIABLES END */ + led_usb_state = host_keyboard_led_state(); + + if (is_keyboard_master()) { //Drashna's OLED timeout off code for animations + if (timer_elapsed32(oled_timer) > 30000) { + oled_off(); + return; + } else { + oled_on(); + } + } + + if (is_keyboard_master()) { + print_status_narrow(); + } else { + print_logo_narrow(); + } + } +#endif diff --git a/keyboards/solartempest/sofle/readme.md b/keyboards/solartempest/sofle/readme.md new file mode 100644 index 000000000000..1593b040f746 --- /dev/null +++ b/keyboards/solartempest/sofle/readme.md @@ -0,0 +1,82 @@ +# Sofle Keyboard + +![SofleKeyboard version 2.1 RGB Keyhive](https://i.imgur.com/WH9OoWu.jpg) + +Sofle is 6×4+5 keys column-staggered split keyboard. Based on Lily58, Corne and Helix keyboards. + +For detailed instructions on using VIA and flashing, please refer to the sections further down the page! + +For details about the keyboard design, refer to Josef's blog: [Sofle Keyboard - a split keyboard based on Lily58 and Crkbd](https://josef-adamcik.cz/electronics/let-me-introduce-you-sofle-keyboard-split-keyboard-based-on-lily58.html) + +Build guide and log is available here: [SofleKeyboard build log/guide](https://josef-adamcik.cz/electronics/soflekeyboard-build-log-and-build-guide.html) + +* Keyboard Maintainer: [Solartempest] +* Hardware Supported: SofleKeyboard V2.1 RGB PCB, ProMicro / Elite-C +* Hardware Availability: [Keyhive](https://keyhive.xyz/shop/sofle) + +# Custom Features: + +### OLED Features: +- Includes Snakey keyboard pet! Slithers according to WPM, bites, and sticks its tongue out at you! +- OLED displays current layer, lock key status, WPM, custom logo, and custom name. +- OLED shuts off on idle and when computer is sleeping. +- Includes working Luna keyboard pet. +- Includes working Bongocat (disable RGB for sufficient space). +- Includes stock OLED code as well. + +### RGB Features: +- Adds custom layer lighting with custom gradients for each layer. +- RGB underglow support and remapped to physical locations (nicer gradients and effects). +- Adds white caps lock, scroll lock, and num lock key indicators using the top row/underglow LEDs. + +### Rotary Encoder and VIA Features: +- Fully emappable left encoder controls volume up/down/mute. Right encoder PGUP/PGDOWN. +- Allows for live remapping of per-layer rotary encoder functions in VIA. +- VIA support included by default. +- This fixes the Keyhive left bottom row offset issue in VIA. You will need to import sofle.json in VIA. +- Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders. +- Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders. + +### Tap and Other Features: +- Push left-shift + backspace to delete whole words. Right-shift + backspace to delete whole words in the opposite direction. +- Double tap layers to stay on a layer instead of momentary push. +- Adds key combo functionality. +- Symmetric modifiers (CMD/Super, Alt/Opt, Ctrl, Shift). + +## Using with VIA + +- After flashing, in VIA make sure to Import Keymap, which is "sofle VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. +- Go to Save+Load to Load Saved Layout. You can import my own layout "sofle VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. +- It is a good idea to Save Current Layout after you decide on your mapping. + + +# Compiling + +Compile with the command below: + +```sh +# for Elite C with Left Side Master builds +qmk compile -kb solartempest/sofle -km via +``` + +## Flashing + +Flash using the correct command below (or use QMK Toolbox like me): + +```sh +# for pro micro-based builds +qmk flash -kb solartempest/sofle -km via -bl avrdude-split-left +qmk flash -kb solartempest/sofle -km via -bl avrdude-split-right + +# for Elite C or dfu bootloader builds +qmk flash -kb solartempest/sofle -km via -bl dfu-split-left +qmk flash -kb solartempest/sofle -km via -bl dfu-split-right +``` + +These commands can be mixed if, for example, you have an Elite C on the left and a pro micro on the right. +Press reset button on he keyboard when asked. + +Disconnect the first half, connect the second one and repeat the process. + + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/solartempest/sofle/rules.mk b/keyboards/solartempest/sofle/rules.mk new file mode 100644 index 000000000000..a6d0a766b59a --- /dev/null +++ b/keyboards/solartempest/sofle/rules.mk @@ -0,0 +1,25 @@ +MCU = atmega32u4 +BOOTLOADER = atmel-dfu + +# Build Options +# Comment out to disable the options. + +SPLIT_KEYBOARD = yes # Split keyboard +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration +CONSOLE_ENABLE = no # Console for debug +EXTRAKEY_ENABLE = yes # Audio control and System control (+450) +RGBLIGHT_ENABLE = yes # RGB lighting (+2350) +ENCODER_ENABLE = yes # Encoders +MOUSEKEY_ENABLE = no # Mouse keys (+1482) +NKRO_ENABLE = no # Has 6KRO+ already. NKRO does not work +LTO_ENABLE = yes # Save space + +OLED_ENABLE = yes # Must be disabled if OLEDs are not installed (+3608) +OLED_DRIVER = SSD1306 # Specify OLED driver +WPM_ENABLE = yes # WPM counter for keyboard pets (+1298) +COMBO_ENABLE = no # Tap combo chording, may run into space issue if also using keyboard pets (+952) + # Via_enable in keymap (+2300). VIA is required as non-via layouts are removed to save space. + +GRAVE_ESC_ENABLE = no # Save space by not using KC_GESC (+127) +MAGIC_ENABLE = no # Save space by not PROCESS_MAGIC, which is bootmagic with out the boot (+612) +SPACE_CADET_ENABLE = no # Save space by not using space cadet left/right shift (+350) diff --git a/keyboards/solartempest/sofle/sofle VIA keymap.json b/keyboards/solartempest/sofle/sofle VIA keymap.json new file mode 100644 index 000000000000..163a23ab1b15 --- /dev/null +++ b/keyboards/solartempest/sofle/sofle VIA keymap.json @@ -0,0 +1,62 @@ +{ + "name": "Solarius_Sofle" , + "vendorId": "0xFC32", + "productId": "0x1287", + "lighting": "qmk_rgblight", + "matrix": { "rows": 10, "cols": 7 }, + "customKeycodes": [ + { + "name": "Super Alt Tab FWD", + "title": "Alt Tab Forwards in Windows", + "shortName": "ATABF" + }, + { + "name": "Super Alt Tab REV", + "title": "Alt Tab Reverse in Windows", + "shortName": "ATABR" + }, + { + "name": "Move Window Right", + "title": "Move Window Right in Windows", + "shortName": "MWR" + }, + { + "name": "Move Window Left", + "title": "Move Window Left in Windows", + "shortName": "MWL" + }, + { + "name": "Shift-BSPC", + "title": "Shift-Backspace to Delete Whole Words", + "shortName": "SBS" + } + ], + "layouts": + { + "keymap": + [ + [{"y":0.5,"x":3.25},"0,3",{"x":9},"5,3"], + [{"y":-0.87,"x":2.25},"0,2",{"x":1},"0,4",{"x":7},"5,4",{"x":1},"5,2"], + [{"y":-0.9,"x":5.25},"0,5",{"x":5},"5,5"], + [{"y":-0.87,"x":0.25,"c":"#777777"},"0,0",{"c":"#cccccc"},"0,1",{"x":13},"5,1",{"c":"#aaaaaa"},"5,0"], + [{"y":-0.4,"x":3.25,"c":"#cccccc"},"1,3",{"x":2.2},"1,6",{"x":2.6},"8,6",{"x":2.2},"6,3"], + [{"y":-0.9,"x":2.25},"1,2",{"x":1},"1,4",{"x":7},"6,4",{"x":1},"6,2"], + [{"y":-0.9,"x":5.25},"1,5",{"x":5},"6,5"], + [{"y":-0.9,"x":0.25,"c":"#aaaaaa"},"1,0",{"c":"#cccccc"},"1,1",{"x":13},"6,1",{"c":"#aaaaaa"},"6,0"], + [{"y":-0.4,"x":3.25,"c":"#cccccc"},"2,3",{"x":2.2},"4,0",{"x":2.6},"9,5",{"x":2.2},"7,3"], + [{"y":-0.9,"x":2.25},"2,2",{"x":1},"2,4",{"x":7},"7,4",{"x":1},"7,2"], + [{"y":-0.9,"x":5.25},"2,5",{"x":5},"7,5"], + [{"y":-0.9,"x":0.25,"c":"#aaaaaa"},"2,0",{"c":"#cccccc"},"2,1",{"x":13},"7,1",{"c":"#aaaaaa"},"7,0"], + [{"y":-0.4,"x":3.25,"c":"#cccccc"},"3,3",{"x":2.2},"3,6",{"x":2.6},"6,6",{"x":2.2},"8,3"], + [{"y":-0.9,"x":2.25},"3,2",{"x":1},"3,4",{"x":7},"8,4",{"x":1},"8,2"], + [{"y":-0.9,"x":5.25},"3,5",{"x":5},"8,5"], + [{"y":-0.9,"x":0.25,"c":"#aaaaaa"},"3,0",{"c":"#cccccc"},"3,1",{"x":13},"8,1",{"c":"#aaaaaa"},"8,0"], + [{"y":-0.3,"x":3.25},"4,2",{"x":9},"9,1"], + [{"y":-0.9,"x":2.25},"4,1",{"x":1},"4,3",{"x":7},"9,2",{"x":1},"9,0"], + [{"r":30,"rx":7.15,"y":4.6,"x":1,"c":"#777777"},"4,4"], + [{"r":45,"y":-2.25,"x":3.35,"h":1.5},"4,5"], + [{"r":-45,"y":1.3,"x":-2.08,"h":1.5},"9,4"], + [{"r":-30,"y":-0.45,"x":0.8},"9,3"] + ] + } +} diff --git a/keyboards/solartempest/sofle/sofle VIA layout.json b/keyboards/solartempest/sofle/sofle VIA layout.json new file mode 100644 index 000000000000..42db09c8d317 --- /dev/null +++ b/keyboards/solartempest/sofle/sofle VIA layout.json @@ -0,0 +1,295 @@ +{ + "name": "Solarius_Sofle", + "vendorProductId": 4231139975, + "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + "layers": [ + [ + "KC_GRV", + "KC_1", + "KC_2", + "KC_3", + "KC_4", + "KC_5", + "KC_NO", + "KC_ESC", + "KC_Q", + "KC_W", + "KC_E", + "KC_R", + "KC_T", + "KC_VOLU", + "KC_TAB", + "KC_A", + "KC_S", + "KC_D", + "KC_F", + "KC_G", + "KC_F", + "KC_LSFT", + "KC_Z", + "KC_X", + "KC_C", + "KC_V", + "KC_B", + "KC_VOLD", + "KC_MUTE", + "KC_LGUI", + "KC_LALT", + "KC_LCTL", + "TT(2)", + "KC_ENT", + "KC_LALT", + "KC_MINS", + "KC_0", + "KC_9", + "KC_8", + "KC_7", + "KC_6", + "KC_0", + "USER04", + "KC_P", + "KC_O", + "KC_I", + "KC_U", + "KC_Y", + "KC_PGUP", + "KC_QUOT", + "KC_SCLN", + "KC_L", + "KC_K", + "KC_J", + "KC_H", + "KC_NO", + "KC_RSFT", + "KC_SLSH", + "KC_DOT", + "KC_COMM", + "KC_M", + "KC_N", + "KC_PGDN", + "TG(1)", + "KC_RALT", + "KC_RCTL", + "TT(3)", + "KC_SPC", + "C(KC_W)", + "KC_N" + ], + [ + "KC_PSCR", + "KC_5", + "KC_1", + "KC_2", + "KC_3", + "KC_G", + "KC_SPC", + "KC_F12", + "KC_ESC", + "KC_Q", + "KC_W", + "KC_E", + "KC_R", + "KC_TRNS", + "KC_ENT", + "KC_TAB", + "KC_A", + "KC_S", + "KC_D", + "KC_F", + "KC_NO", + "KC_LSFT", + "KC_LSFT", + "KC_Z", + "KC_X", + "KC_C", + "KC_V", + "KC_TRNS", + "KC_TRNS", + "KC_LALT", + "KC_B", + "KC_TRNS", + "KC_F22", + "KC_SPC", + "KC_NO", + "KC_F4", + "KC_F11", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "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_NO", + "KC_RALT", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "MO(3)", + "KC_TRNS", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_GRV", + "KC_F1", + "KC_F2", + "KC_F3", + "KC_F4", + "KC_F5", + "KC_NO", + "KC_ESC", + "KC_1", + "KC_2", + "KC_3", + "KC_4", + "KC_5", + "C(KC_PPLS)", + "KC_TRNS", + "KC_EXLM", + "KC_AT", + "KC_HASH", + "KC_DLR", + "KC_PERC", + "KC_NO", + "KC_TRNS", + "KC_EQL", + "KC_MINS", + "KC_PLUS", + "KC_LCBR", + "KC_RCBR", + "C(KC_MINS)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_F11", + "KC_F10", + "KC_F9", + "KC_F8", + "KC_F7", + "KC_F6", + "KC_NO", + "KC_F12", + "KC_0", + "KC_9", + "KC_8", + "KC_7", + "KC_6", + "C(S(KC_TAB))", + "KC_PIPE", + "KC_RPRN", + "KC_LPRN", + "KC_ASTR", + "KC_AMPR", + "KC_CIRC", + "KC_NO", + "KC_TRNS", + "KC_BSLS", + "KC_COLN", + "KC_DOT", + "KC_RBRC", + "KC_LBRC", + "C(KC_TAB)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_BSPC", + "KC_TRNS", + "C(KC_T)", + "KC_NO" + ], + [ + "USER03", + "C(KC_PPLS)", + "C(KC_MINS)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_INS", + "KC_PSCR", + "KC_APP", + "C(KC_UP)", + "C(KC_DOWN)", + "USER00", + "KC_TRNS", + "KC_LALT", + "KC_LCTL", + "KC_LSFT", + "C(KC_LEFT)", + "C(KC_RGHT)", + "KC_NO", + "KC_TRNS", + "C(KC_Z)", + "C(KC_X)", + "C(KC_C)", + "C(KC_V)", + "KC_TRNS", + "USER01", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_MYCM", + "KC_TRNS", + "KC_NO", + "USER02", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_F14", + "KC_F13", + "KC_NO", + "KC_DEL", + "KC_INS", + "KC_END", + "KC_UP", + "KC_HOME", + "KC_WWW_FORWARD", + "USER03", + "KC_BSPC", + "KC_NLCK", + "KC_RGHT", + "KC_DOWN", + "KC_LEFT", + "KC_WWW_BACK", + "KC_NO", + "KC_TRNS", + "KC_SLCK", + "KC_PGDN", + "KC_TRNS", + "KC_PGUP", + "KC_CAPS", + "USER02", + "KC_TRNS", + "KC_TRNS", + "KC_WWW_REFRESH", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO" + ] + ] +} \ No newline at end of file diff --git a/keyboards/solartempest/sofle/sofle.c b/keyboards/solartempest/sofle/sofle.c new file mode 100644 index 000000000000..b51a7e8a0460 --- /dev/null +++ b/keyboards/solartempest/sofle/sofle.c @@ -0,0 +1,19 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . +*/ + +#include "sofle.h" diff --git a/keyboards/solartempest/sofle/sofle.h b/keyboards/solartempest/sofle/sofle.h new file mode 100644 index 000000000000..6e9b06cef09f --- /dev/null +++ b/keyboards/solartempest/sofle/sofle.h @@ -0,0 +1,42 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#pragma once + +#include "quantum.h" + +// Extra keys are added for rotary encoder support in VIA +#define LAYOUT( \ + LA1, LA2, LA3, LA4, LA5, LA6, RA6, RA5, RA4, RA3, RA2, RA1, \ + LB1, LB2, LB3, LB4, LB5, LB6, LB7, RB7, RB6, RB5, RB4, RB3, RB2, RB1, \ + LC1, LC2, LC3, LC4, LC5, LC6, LE1, RE6, RC6, RC5, RC4, RC3, RC2, RC1, \ + LD1, LD2, LD3, LD4, LD5, LD6, LD7, RD7, RD6, RD5, RD4, RD3, RD2, RD1, \ + LE2, LE3, LE4, LE5, LE6, RE5, RE4, RE3, RE2, RE1 \ + ) \ + { \ + { LA1, LA2, LA3, LA4, LA5, LA6, KC_NO }, \ + { LB1, LB2, LB3, LB4, LB5, LB6, LB7 }, \ + { LC1, LC2, LC3, LC4, LC5, LC6, KC_NO }, \ + { LD1, LD2, LD3, LD4, LD5, LD6, LD7 }, \ + { LE1, LE2, LE3, LE4, LE5, LE6, KC_NO }, \ + { RA1, RA2, RA3, RA4, RA5, RA6, KC_NO }, \ + { RB1, RB2, RB3, RB4, RB5, RB6, RB7 }, \ + { RC1, RC2, RC3, RC4, RC5, RC6, KC_NO }, \ + { RD1, RD2, RD3, RD4, RD5, RD6, RD7 }, \ + { RE1, RE2, RE3, RE4, RE5, RE6, KC_NO } \ + } From 47bc4a4a4c4c23a7aa880e6f5b526d799dc8efd6 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Wed, 8 Sep 2021 22:25:56 -0400 Subject: [PATCH 007/155] Initial commit --- .../gmmk/pro/ansi/keymaps/railgun/config.h | 69 ++++ .../keymaps/railgun/gmmk_pro VIA layout.json | 367 ++++++++++++++++++ .../keymaps/railgun/gmmk_pro_ansi_railgun.bin | Bin 0 -> 46400 bytes .../gmmk/pro/ansi/keymaps/railgun/jonavin.c | 253 ++++++++++++ .../gmmk/pro/ansi/keymaps/railgun/jonavin.h | 85 ++++ .../gmmk/pro/ansi/keymaps/railgun/keymap.c | 194 +++++++++ .../gmmk/pro/ansi/keymaps/railgun/readme.md | 53 +++ .../pro/ansi/keymaps/railgun/rgb_matrix_map.h | 148 +++++++ .../gmmk/pro/ansi/keymaps/railgun/rules.mk | 32 ++ 9 files changed, 1201 insertions(+) create mode 100644 keyboards/gmmk/pro/ansi/keymaps/railgun/config.h create mode 100644 keyboards/gmmk/pro/ansi/keymaps/railgun/gmmk_pro VIA layout.json create mode 100644 keyboards/gmmk/pro/ansi/keymaps/railgun/gmmk_pro_ansi_railgun.bin create mode 100644 keyboards/gmmk/pro/ansi/keymaps/railgun/jonavin.c create mode 100644 keyboards/gmmk/pro/ansi/keymaps/railgun/jonavin.h create mode 100644 keyboards/gmmk/pro/ansi/keymaps/railgun/keymap.c create mode 100644 keyboards/gmmk/pro/ansi/keymaps/railgun/readme.md create mode 100644 keyboards/gmmk/pro/ansi/keymaps/railgun/rgb_matrix_map.h create mode 100644 keyboards/gmmk/pro/ansi/keymaps/railgun/rules.mk diff --git a/keyboards/gmmk/pro/ansi/keymaps/railgun/config.h b/keyboards/gmmk/pro/ansi/keymaps/railgun/config.h new file mode 100644 index 000000000000..c50c9704403a --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/railgun/config.h @@ -0,0 +1,69 @@ +/* Copyright 2021 Jonavin Eng + * + * 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 . + */ + +#pragma once + +#define TAPPING_TOGGLE 2 // TT set to two taps + +/* Handle GRAVESC combo keys */ +//#define GRAVE_ESC_ALT_OVERRIDE //Always send Escape if Alt is pressed +//#define GRAVE_ESC_CTRL_OVERRIDE //Always send Escape if Control is pressed + +#define TAPPING_TERM 180 + +#ifdef RGB_MATRIX_ENABLE + #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_HUE_WAVE + #define RGB_DISABLE_WHEN_USB_SUSPENDED + + /*#define RGB_MATRIX_KEYPRESSES + #define DISABLE_RGB_MATRIX_SOLID_COLOR + #define DISABLE_RGB_MATRIX_BREATHING + #define DISABLE_RGB_MATRIX_ALPHAS_MODS //Remove effects not desired + #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN + #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + #define DISABLE_RGB_MATRIX_BAND_SAT + #define DISABLE_RGB_MATRIX_BAND_VAL + #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT + #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL + #define DISABLE_RGB_MATRIX_CYCLE_ALL + #define DISABLE_ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + #define DISABLE_ENABLE_RGB_MATRIX_CYCLE_UP_DOWN + #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN + #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL + #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL + #define DISABLE_RGB_MATRIX_DUAL_BEACON + #define DISABLE_RGB_MATRIX_RAINBOW_BEACON + #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS + #define DISABLE_RGB_MATRIX_RAINDROPS + #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + #define DISABLE_RGB_MATRIX_HUE_BREATHING + #define DISABLE_RGB_MATRIX_HUE_PENDULUM + //#define DISABLE_RGB_MATRIX_HUE_WAVE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + #define DISABLE_RGB_MATRIX_SPLASH + #define DISABLE_RGB_MATRIX_MULTISPLASH + #define DISABLE_RGB_MATRIX_SOLID_SPLASH + #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH*/ +#endif diff --git a/keyboards/gmmk/pro/ansi/keymaps/railgun/gmmk_pro VIA layout.json b/keyboards/gmmk/pro/ansi/keymaps/railgun/gmmk_pro VIA layout.json new file mode 100644 index 000000000000..40a86c5ba5c4 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/railgun/gmmk_pro VIA layout.json @@ -0,0 +1,367 @@ +{ + "name": "GMMK Pro", + "vendorProductId": 839864388, + "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + "layers": [ + [ + "KC_LSFT", + "KC_MUTE", + "KC_NO", + "KC_LEFT", + "KC_RCTL", + "KC_RGHT", + "KC_LCTL", + "KC_F5", + "KC_Q", + "KC_TAB", + "KC_A", + "KC_ESC", + "KC_Z", + "KC_PGUP", + "KC_GRV", + "KC_1", + "KC_W", + "TT(2)", + "KC_S", + "KC_NO", + "KC_X", + "KC_PGDN", + "KC_F1", + "KC_2", + "KC_E", + "KC_F3", + "KC_D", + "KC_F4", + "KC_C", + "KC_UP", + "KC_F2", + "KC_3", + "KC_R", + "KC_T", + "KC_F", + "KC_G", + "KC_V", + "KC_B", + "KC_5", + "KC_4", + "KC_U", + "KC_Y", + "KC_J", + "KC_H", + "KC_M", + "KC_N", + "KC_6", + "KC_7", + "KC_I", + "KC_RBRC", + "KC_K", + "KC_F6", + "KC_COMM", + "KC_HOME", + "KC_EQL", + "KC_8", + "KC_O", + "KC_F7", + "KC_L", + "KC_DOWN", + "KC_DOT", + "KC_END", + "KC_F8", + "KC_9", + "KC_P", + "KC_LBRC", + "KC_SCLN", + "KC_QUOT", + "KC_NO", + "KC_SLSH", + "KC_MINS", + "KC_0", + "KC_LGUI", + "KC_RSFT", + "MO(1)", + "KC_LALT", + "KC_SPC", + "KC_RALT", + "KC_NO", + "KC_DEL", + "KC_NO", + "KC_BSPC", + "KC_BSLS", + "KC_F11", + "KC_ENT", + "KC_F12", + "KC_F9", + "KC_F10" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "RGB_SPD", + "TO(3)", + "RGB_SPI", + "KC_TRNS", + "KC_MPRV", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_HOME", + "KC_TRNS", + "KC_TRNS", + "RGB_VAI", + "KC_CAPS", + "RGB_VAD", + "KC_NO", + "RGB_HUI", + "KC_END", + "KC_MYCM", + "KC_TRNS", + "KC_TRNS", + "KC_CALC", + "KC_TRNS", + "KC_MSEL", + "KC_TRNS", + "RGB_MOD", + "KC_WWW_HOME", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_PSCR", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NLCK", + "KC_TRNS", + "KC_TRNS", + "KC_SLCK", + "KC_TRNS", + "KC_TRNS", + "KC_MNXT", + "KC_NO", + "RGB_TOG", + "KC_TRNS", + "KC_TRNS", + "KC_PAUS", + "KC_MPLY", + "KC_TRNS", + "RGB_RMOD", + "KC_NO", + "KC_TRNS", + "KC_MSTP", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_F14", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_F13", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_CAPS", + "KC_NO", + "KC_CALC", + "KC_NO", + "KC_TRNS", + "RESET", + "KC_VOLU", + "KC_TRNS", + "KC_TRNS", + "KC_MUTE", + "KC_VOLD" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "C(RCTL(KC_LEFT))", + "KC_TRNS", + "C(RCTL(KC_RGHT))", + "KC_TRNS", + "KC_TRNS", + "KC_HOME", + "KC_TRNS", + "KC_LEFT", + "KC_TRNS", + "KC_CAPS", + "KC_HOME", + "C(S(KC_M))", + "C(S(KC_B))", + "KC_UP", + "TO(0)", + "KC_DOWN", + "KC_NO", + "KC_DEL", + "KC_END", + "KC_TRNS", + "KC_TRNS", + "KC_END", + "KC_TRNS", + "KC_RGHT", + "KC_TRNS", + "KC_INS", + "C(RCTL(KC_PGUP))", + "KC_TRNS", + "KC_TRNS", + "KC_PGUP", + "KC_TRNS", + "KC_PGDN", + "KC_TRNS", + "KC_NO", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_P4", + "KC_TAB", + "KC_P1", + "KC_TRNS", + "KC_P0", + "KC_NO", + "KC_TRNS", + "KC_P7", + "KC_P5", + "KC_TRNS", + "KC_P2", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_PPLS", + "KC_P8", + "KC_P6", + "KC_TRNS", + "KC_P3", + "C(RCTL(KC_PGDN))", + "KC_PDOT", + "KC_TRNS", + "KC_TRNS", + "KC_P9", + "KC_PPLS", + "KC_TRNS", + "KC_PENT", + "KC_PAST", + "KC_NO", + "KC_PSLS", + "KC_PMNS", + "KC_P0", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_BSPC", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_PENT", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_F22", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "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", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "TO(0)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS" + ] + ] +} \ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/railgun/gmmk_pro_ansi_railgun.bin b/keyboards/gmmk/pro/ansi/keymaps/railgun/gmmk_pro_ansi_railgun.bin new file mode 100644 index 0000000000000000000000000000000000000000..3a0d9c54f5b53f5d5d58bdf13c0472b92c811e7d GIT binary patch literal 46400 zcmc${dwf*I`9D5q&)G|EWOD&R5@3@}aB~3`0vayLvKvk=3kCsO1pK&w+Kp&kw6;rI z%SKRxN(FKth$U*=2&lEK?Jk#^fJhYNNK)-t64hJY5V#7 z{`iI0?97?VGtWHp%*->-JTnlE7=kLIJN6&AmPh`xeE$=y2cIUot#Hr7wZMG@_Zi$J zxc{llcjG&D{O5VUTlW9*9rqie8w)oDZXVn%aQ_!Lv`o&<|9#nl@kFPFBeB2x-k4G0 z>Cx4d;x`VzH(u7=^w*1o(K##^3Hb}$jhCmbjmG$Us-N`t-1{U=X}c&Qr7o6tIHg)7 z5!@i$(c9V??TczV+7Xeq7ujI0%x4_1peo5xpXRc*D-_Rp2Lggzm=a?Djp%35wSFl+NsJqMQtC{6Lpd?%#1)YtK_`xikTXL9A&Xn8T1bJ;PfXeVYEhm7 zXC`9e!B<1N#CtAqe~lAQ44sy^&eIoEMy|-=B7U~ebs)9F z(#5D>)pC3SZwQXz4g6w>TaGrbdCi&;-o4YR^XFw~0*Re^ ziJ6lkF_Y`9nqY%993%$U+ph8@Gf!QW*K=%&q?%=b`-Q;G>^R2E9EK7(n&4(#cDK#-xO;<(LK6=>qU8fi z#*xC=fj{|JUe%c%lBZpJjFp(8-C8Ng78i7U+Dh$5Y<)nvBZDH5nC5KNlkXY}(#_GH+$}*s^&c!Wuy-Lw-SHKP^Aqh!l}QWI9g7_ac`X05V_R)Bf1EwO;zr;Ql%hCH?7eB}#Pv_l zAI4=8!dK&?Z}#MHJQ3GL9JgD%?0Ay)&ikbDDgmGTyDFE{a}ttMdOl5%;5H}S1smRg8-^TAO@*1;G` zTL~NuQ<$Z#;|p@yOPg&9%ncL^1KYikt@7Rkm`q`!0(Y!qivpFFmcwI4SbVAA zqHq)pF{V{^hR<-y;g|eT+NtdEz=Fm+qVy+g&u|XYVHM~=`*^raORP+3a{{lOujW(u z44xQ`jyUn>1Ga1uC~Y-5Nl|~G$Whw56!T@Axb|(*96x`8Q_Vlzl+BCIMP99)Z2jm0 zGgVVr#OHzvIg%W%ALQ(r{6&G*)eHXN=-dmZYX%4B%Hh*8@h2W2%^RAyeVE;fn0g}4 zim*+$N?f-JbK{5udZelMY34^$8Q$O|Vj*(0eyO*x$PsM^_5VA^pwForPK&meh$|0X z-F_mnv2Ri^J5bt;S#WmZcv5uGe=bAKGvby$qdn7E=-p#Y>d0|AG9I!T1FIY+KHEWi zm=Pa&v(d`7XYz|dqew8txiF)_Iwp|UPV;WCY67brOOQL7*Y)PH3xs9LRy%SK+anyk zKvYcGDt!H2aFrXJOxZ$|NpYMHM)NIpq&PZ-L}Sqv2-R;AKV7?|=8v-TMOLkwo;b18 zpO{Z3YWR{*S={kCoksWtCvy2EPEsrd*EvbStUv*8=HtXW z`)%2#z>(}c%rp&Fbs#5`#xCz?%wq%j4l`Omx{nJb5QC^C#<7PonLt)%<3g!5F?Xs1 zIJ71dsoVEhS36SziyZ>yBcmg`EZ^}tFgEig4n~wB(OjYS#m;nomg9s#;TQG09q)h# zX*=qjn751S9VsXE2e#ETTH{W|7ia@%&ZXIU#~7E62QS!N<@A?`zkBPOc-p7Cyi#*o zSu(HTZymQ}9Mk!VRTr4ar%TLuGf&5`E&EbX!nmW3=C60^o74HUmc@Pk3A^rcFD^@{ zCxv$gh!JCdDl<(}|Ir0q$!2M}IlEr_l)6*1Q`^V(q}hsjO?^JE&K-%hgZAW4q?h>( zS;X{pP_wIDQ|341qKsjTHpgA&FH*vV1-Av&J5!w8R8pXRs_o*_p17?m-Op!FD!4oF zz04O&}#Pq8G$hJ-+&`|^ESdG1Tt=LOJiiRAv6G^^1L}RG zei>h5XSZu!dcB8uYWbFsJV%R`*wGG38B(;q_ZP2ITBeCiGU#bm1$Tm)jh^Ki5~}wk zY#)#D4yjArH?R=YU*9|9bxMD(=>~!Nx~7=|rPiF@pT2&l@Lb5OiYu)1@8KKU<90Ef z#XK{;z|D4VU{&2VHk$e}-_tRvfD5VAarI9HcS?-DuwYV9y=$kW(q}rgPjMxrP+cD% zV%6~>6?@&OYn8U|#H@ByCMHktMgC^~5kb96TVfQotgb{||BO&+wTUV=ZmXvL4k6m+ zVx`SQl%!gIqk2zAFJx=NLteQQ3N?Jg4c!@6h=h8`cv+F+jgcQLUC}y82 z_z$$d|K*Nvb6Sr^Yf!m0C0y8@9FCgM&Pg%zU@VQ!dfkjNI zbsKY?XQZWvHcIo%jB})h%HfQ|5_--P)Ry_JqCu7Gpz}q&N1sb_HlnQ#XM=;7+AjXl zljF=0IVK0`7O~MoOct@t^8l|aB;qTc*SgiLapm03)u`(WPi8wQC=Dz{jqM)Pq^EU$ z`R@C|y-4+YT!{aRhsFior8NR42gTJYR5=TmQ!_nAx3YjXN-dwAK;BEKaz-N7SFz%gZ`Dn?L&;& z5Gdr0HN*WiCIIN$&pMydjyaJDE*V8RB#z{B;1G6uX6DP*B=ASow|Xn2@Q0et4jZ~Umjb59s+*!{FWk7a)4+hLu|7o28Fo^vkDW@bF+FgQlKR-xsi0*#wa zX_*u86H@}EJXTrpWF#5zjt76@><|t(KNe_j6VWJ@wis)MzotfrNeEzMUw1B+UVxa( z!CWU}{ODWr(>F5g9z|ZAWp_1?b!s4mCwcePobr~Uu5khSTNSttzdHXvoChL_hI-!^ zZN>>hjcz|y6jgCxbq&c~Zf#t-$KluyNkEa(AC45DL}&2sD<#e!KdqU4VySk*aYKz& z)Ul1VyL`lSI>`1K?()QinJ_oINXrOVEp@u>}8r-2>>R$zl5!2BiYBpzT{&vD9 zT2PkGT&~tvoNov#*WBdgLS^g@D+dU2_%D4FM`B#Pnivf=s~x#wp32~OPq2y>Rh+Rz z*&pnwbwMVf^X}F2_2Zi|wU}GxCh{JB?(r%oDZJ(M`Mb!Z#Q~DrE|G;fcl{A_X_dXyKd6ZP~Y>kIvtfbJuNJ^@&x^)oVPN30~vfZJ8=a_%sKfJuir|W(B9Bn*(Eu zn82u_WkDlocH{z?x^fL*E=<`UZGkFaK?~OO5rbnjMqTZQn%BHZ&Jm6s+C)F7Y@Ty}wvN!##ovX~i&L!!s zXrFGw+WT}m(J_^fpAbjGx@H?{RUO}eI++v1plkI2{+HaIJS98@kXTG{$ zb!h~z4*i6Y!xtkQj}<*9(R`;v9dfF291V`4@b6>;PkBmZXBAvNz&>IakBJwgYBfKz zLJr>^*$27T87!?Tx+B$jUFA!wUben>A+?0Vy1Q>BoxSdtoY;#H@m}dg#a|=+*!iV{ z|5FTrBp44NsFo?8tTVh&w@QHZTpOoL>EUGl1fzMj&Ve{8SW#vui#wG8a@vc zIVI)U$2#}b{9=E_^b;4DY0ND3iTqAx*0O9al!%!@0FNz+;m#0QW{~nY+C$@Lc=J`^^|5x+_}W-l*R00ZeUR$Z z;DOdJbe>3h^kt;XYyj!+vQ8- z$7nY+J%ruU^b@%?J2CI7R2a98>jUJP-h!qiujql$#3UZ@(cMB z-ge9omY$=Yc1dT>%G8!k%={xl6#gGPv=lAnU-7o*b?aL^xhQzjdbiv=IdJ>}H(J|W zu5IXM613eP|IC@aUca>Lpmip{(XR!r%TeZnCq=2L3_BYlUh*vCb846^L*ZqEdp0q< za(lO|vWgznp4#7cC#cx&1oESm#+3%g9>-*UAHR&R#CTEn?Qt5NN3)ifP3HGFj1H1d zTYM_3r7YUsIh2#k6jQ7^6JMq+d|G$yULhf*V;5gg{b(1jDT%hpTe{V8 zYXXdc*1tS!QrY?}ib2|2#6a~b;*(SOLco7DVssXj868myFNMtVxq=~`d+FNNSR2hv zch)7?7w949-pKFb$>iq)#MB%d#&ZVn+!y>s_746P!C14wI`Y`cnwPAp?UU@kziYR3 zo4<&^S0uJ7zP>-yvyf-{*`A!c4wh@j{qgiyS@#I9qeYX^2b6-hM;akvp30h8*66?r zQS@~%id#Hz`!diZP+C{SID#PV*MS#=OnwSawMu-1+4USsf0&tB_8dx&<$ob81kBeW zEKf}9dyTK>)GXwO!b3x}7ZP)gqKEwx*3w6z$$(E+M{}*B4ZIs;a7dQdlL2`>U5oXh z3T;-Pjwcg7zQ8PDu206Q!4#=O@^nqdfyf9mQ-WP{psieETcgYv{|wG?lF45N&Cm#m zwKqUMqCVX-K&%I>@qne_=}sjIFXak6T?`(TsZ@Yi*+t@_Fuzh@o)1<4mb9UTkNVJw zH7D}k$Ot_t_)XI&ek`AM>MmX@Kt zG!4e3UnV=$z;-D7qC!`fcT}Z!6|z#(7BxMVd)B~LuL~nHi%G>f#F#Rbn5<^YMh3X+U)8bQ4<}}i zAHn}X;(mer>u;YI2{O}PB}HWg$j7R@!jf?;?-dF$s)?Ve7z&p|wkT89p`mbPEF8CA zg1+rfUJajwv394_U{xKP%+s9$<>8_5?m;a^-{n9qUx2RzeP+dqG`K3VUkxJ#5+PJM`dGW3Oj%V=dL;(SD#~aum2e(J-Drrl#^A9RYF2b0HP) zshtJMlcmea@RNaZ*FVsfZ|XTJHEyzIkML9YHaN!}v=$0YC;ssu z)e>hwOZ>J!VQE{2t6bl#o^N!Qv~cz`FIPb|U5wG_(zmuj$4PmTo;&KAS$me3tz?yS zT`P@0f^?e3y3xM@wLQyyN~1dQ8BT7*H)r6th_(x3@cZePmGoV)bX8SaU4oaHmF97k zzlgOQ>$q6i53Rq4wUgXT4{GywqOMQj%w9EeKVHPOGbJ>?9PU)~=d@gD^N9Jzy2IY2 z1*ST+II;i6%eNV~TQwc=C_!_p#c};6kFjo+S5uW*x6{fVqnd3_9NSXbO3M$|;VRcP zW1la};XYZ{O11EWP?;(T^MVA~#^e1}3z>LbfD!Ws9?~Y9m}bv#t4!*4#@y!1a53Ut zQZddvU9F6mKCnR(cftT#>>0d~{tnP^{ovOEBWecT*J6&kSgj}G#=b8QGuU6IWl!uw zj$aO*7RCcAV^Rg>@Wb-og_jIH$nlSUk2dZ^22zOWqX1JHt#7LI0n$G0uZ`7p_n;jx z?pEr$b+83#f&N3NtGf3^7ZGplYeLKi{WjF~3i9!TFA5y`jwzyb&5)lHUPfJ~L2Kpw z0qssiyCbriZ}7fw=}pV3(!FlA>ALnaUt$MvZSvUs;yiD51ra~*&xbB}-sM#biKyu_ zq5bo{qbn2KhkHosL)dYy>fzE7T>lW}UA}$cS3)*U)#Px7d=B4tEc`-9_sZe^q0{)f zbK$2#u{W+N&AkEhW18z2;(oO7xIl`J2RQM1oXz}m=tDt*3`}|J6X2O7U^hBQ%h?P}JuA+~I!(WL5oeA>!}Ad?jD;5>oEHl(MtEE-T!nB(EW7~W)L8f?gcD=oB?xOG z_b8)Ljh1Eda!vx`2BaFwH)2Y^$}}Uun$`svQ%UfS1tapHWltbRIoFfJ%x1+erF2o| zdV`Jy+;>t=#Zs1iFXgYXl$#gCeW%R3u@tt++lbeq0;!cl#%=Qh&oxu5ispTJ)Ue^pX| z6eVJv(Hj!I7STZB@M|IQ`1KHdYsNU}rux2%PWTia&_;|T^cb(8qReZ*hS~%HwJaB(a->9=d@D{G(PNK>K`n>hm-Sf58Jrw3A+Aq#G2RyRsVt9KIhqFyaNsledGqtFX6Ici|CPcGm&o)dpJP=IxY6W^3{E%bz*e#zl`aLyCP87WOU zg56~(77jpm?v91?`ibd_SXe^%j1mSvp=?KBpL@A?-sNSBpS5NO;@b~gI#`_=n0NV8 z+q2e`Ky;`7N6g8~k)DkB74Un4jQE5k3fS$-biGOMdjr2uN`mrxP9Q{T9&I08Iex`x z`ysHDmTX=zs&dzgU$0>2s^?;_%kemmQ;UombGSwopfW^aWTf{zd|jjz5?D{{t2UDE zrKt}_CU~)9uoNTwMT^w>+n0#$S8(HACc0n4r?Ql>n&U@cKN7DqV76uv1aASVK3~v z{uBJxeGk7)-@)(a-@>m)`Uby7H_2B`J9+COEf->#Z}4+oh2Ls-BL5ZeoAN#Uu(OQI z_Om=^*r^-mSDDi=ewXXAu^VXfQJVxRAJNe_JSO`Qrg9`5Eg@*@z;<;D2Ew4)HdKy-3S>SDzbcX87^8Jv_0u;*Zp$sog zBVzNA7Apv;BckJNW!5qMH1LoqEy#&G2Wqvh<5b>EkcoIqwqDe`)MD=-jfuzDq4Uun z{Toapkay$2A?>o`i;;3^h={GRyq^v(Hhd{;RC3%uVAEC}FGr4Z$ni=n$47(ZhK~hy z{3%~U(TMi3iguI}-y1M^4dBg>k@Fd}nuvcIdS4(R1AEG+Ez-7w&pF1>V4-v0NQ?^- zT8<;ouDPA5QC*JWk2`xqJs3J|fu8PJ^mC^_&*1Y{sle&WuKO3NNjOcCEx0*%} z!zA!GWE#^_v_2Uv%0lZGouF-f0$41OY3RwJ=&Z8T4)G)q!@Xj{3BPN;_D_uw7|K%TR!}11YLPu3f3e zz=RL--zeLxOadKWu)UHGhZ}(&D%~p$9gL{2F!VFWQ ze_>8MM#%-(7Mj2>?pSNizeBajH0EcqnA3=vc%i5Kk#!HdJ%CF@^U$?%TF9xB`KP@{ zdbCDX6j@6V7vN%jGOj~~wx)njvW7g67C-PE>0xKIgp!lzK%N~Vrb3^(8vmNe2jm9) z3zA994fwZ>px!bPbGX`+~%;lGwS=X=`w1DujXdmZ|%j@d0l91D7G9-=(_ z;!sK_5vL4Y7U)-w{O!EOZxJyWd4D$aQb-rq5@M6tc1|?+%i*O%WHJ$#)q+n4A!`zg zxTLmDQW5C4u!hX(v!J~zBSd^*kgjcFIT7c+i8*wrUBQsH99R|_iq82m{MB9YnYVkH zVpHJ3{WtF4E@{jswM{4P?a`*yA#CV;+Is_VP8hOu#gjIl9Jb1T5SU4qf|!kCahQjP zUKJ)G*Qg8O4eI>fXMEbQM>NlLlzZ z_YQ3q(t9oU9_gtyY6DEsBf&e+M{(fwo<5I|9}A!E`#H49eQ+0rPG7#45gq-EICbD& ztRyY{5ei|wDM%)+@BPv1M|!M!4>^ocluWi;4*AkWJsIaurkrX+EqNLKHlM24(gleo zz!t{`m||6ch(C=~;v{5EgvYNtV#DvMhy^rba+CI_LiaJJcV-OoAq6s^vZPNXzUQN` zw_JgJ7_eS53MM zZ1FYmbJRF1^7;AbmlQauP?6>FV1Uq1309T9bd{__*PBfJaw7Zhkmg&%m|49!Tsx)<&J3;8Ui<`?kG=6>d*9M})u z{UFkSQo}L5Lp#nZ9QkNkGgF7%vYXO^;hC*OG=N`UmY6H@m>eGeP8yXVosD&5%Q4LV zBsTx2EA#&&{R_cy^9G#WM#v;81BFZHb8{=@sJ|&IO>w`fiOOAcX84sd*AOxA_V8Ts zU@YbXC5B+GdIe`soY(?Pel|eF$KhHA81YPhbe0-?lkONVD_?T>Jmw%GmMbuDI^}Qc zVW+BQ9`+>_W}}awPt#^)rDtVjX|)+ySs7wcT7YX8ik^U!%|Kf1ElQ7tgd$Bxs3D!1fxUCrIqQZPP6E9iwatc$1Kbgy^Sqs^YsQPpV6}SHz(O&l{hla zoe1o-dE;z6YCEO&^%!jA+#Q)hIceX)W1XHo^zXsnq_Hgsgb*WgF zjzk47DcLHnIBe386o96{LnMA}tdtU5j*@ktyeEX3{j3XC+>nW;h36W%H@cwx% zygs9#QEHQ@7k`8{H;UG#I1E`Hqse8M1 zY#`k7V8w%Wtvk#8V8vV3>>vSe{eFnfdraYBUw+33v@u!56c)7WdtLYD23}U^JuY}7 z{}+Kw{xHzEj-F~Xu00}PbaC52*KPAOLA_Mc_QX6@aIc#b{~^efP;UC0Kp`;DN^}Mc zB~)Vmq=W7*!vkLaW8waJ3Bez>yttOed_7R)G&m^YTsOWb zu_G5$)frST5?F%98$emlW@&^OnuV*%g@&*jA7Un~Q%b)#5D_Tl(t=THP^ze0&tj*6 zJ;xwjTMi5yk;s-K61PPT|9R+1A-Apw8sm3^WU@aP#j0`O8pn?uHwgx(YD)t!NF=0) zr?hk^J!iE9Xun+_M6c<__ti-UL;I5p+Hb%qV{0G^ZDg=<-AQfIaY&M?_<&frZ|$Rj zQ@+DJY$`LA^4Gq#>xJQ#k5%wKkNx~Mlrr&AD$8NVfL{2fSBKkha$thvPREbXBabRO z_CF11a9U9th(cp4C?#)+$l*JOZpNHJ`IU|-%CmG_iC6Y*loAa?Mb+558H#RH^KNA~ z7TvSW#A>aNt=3FH4!68~ zW5G-p`)7>u#CaIyf5E(mJ>}ph*pJQ|NVQ+@n(i9wxYco7;JVw;E4L1Lyd`d~`><+> zR6=gTsQ>Xmi95K)a({HT2Zk)vtsx2Fi(^M^nmfOSB!V2Bd^ANk(rN_EH zp@pVXeI93D>Tc`t5W3@lM2*&*SK=9ivTow{Q$KKU)BN`5|h_;*Nhjz=J>BhYtLk7}5Q_^U>9&2b)RhB!|oisnqmQ-bMrn=K? ziB+sC)jidlW@BBf7#`5!RNzzD0DBL;g%w|YJ4zplKkX}u+jnt_S8#&1@_5|*xm|5c z4r+a=e_O0iNd>$hm%&_1PSTT%Q@DfmU>604qq%_XI~#iw^!wW{DL-v%oi z)Y_N3mus~rD38eDM`M!WX}_+OmZLDK%y?GO+JWoWf|lZ%gNTEFyHtJo!s_jSLZvsA z_!zXfI^2kXZTdkLzc(I)ZUcUm#PPZCd8w?67(70zd3@Igogd=nNICJju-~Oxff)xG zJ{fVh!B2y~{2-OpB2;RHAHoS%7%hSxQ`{w^=9LtOe2L`H8nfWD29n2!qolF+9Kg=T z*_B?(QEESU2ENDPdo;d9d}rf(6u#+M*VnQ1 z5zyqS#A}9BVg+X6*U<}6xm6A~`5Ar$avlTLtT<&5tGa_aUF$DFPfxUe#Qg8XyAgl2 zCQ8>l6prhsQop(aXJ3#%+ELHfpupEkpT1e!)6(zBDS3lfDM0-Ew#n)tV%^8Vooz36Y_h=ur!r0I^Mq<`HV)gKIV8@x|-UXXd z>_hq<>C$N~`$&GZ$Rv#FN=P;Zd#}Ld_N75nJ`^rNFMJ%qS@=SssqKD~yZ!g3`1ZXfCnQiVz>eSLd#=djCwT_kX7QU=21#B-Xu3phOE@Z< zdfNrl#f}E-g?IUqA(L8q8!Xp!HeIsZw)~h%eb~4BxUJVx_8IcOTs;=`yjXqMcOU#0 zs^jsyw|X^x_f#)DR&_B%EM08gUxa6sGZPm3c(%vZRi?M}##=V}+5q7|bux1Ms{aeW zuT(EO)^MrGw#z3Mz0qEU8^e|^&d?<^TxvtyeqgunXq&PR|6GFEU9Yt8oX=ppp);@4 z((AGOU06EpoX-e)q!UYTUD;Nlt<-~^&W|CPKaQPW0+9q;Z$;U|O4!nCDDxo1q#y37 zB^HL(ggrk?&llL944b7l(emo|@a_?+F7}db0@Wxs#Bi|mk|oQbV@M_hXQ0@Jr&Cy# zUcF^A*7gZb+-Q;)a?WF2Ej6FfC|5W74)yF|7=YXfH7RFi>b(9dO0Y zcBn=SCyY1bOfcUtbIuI(+CwH)U^?{Zu5vRt9d~e{|LVk;D#qH;pFY#{>kA#y-nAeL5b?wIPvG0^}>+uiC8MJu$iWFA6;iy@xYsO zX2f2S&V`B&;SU447CCIeEY~)mgEm199~#i&Y#h6L%$Y3%L*b8Q4l)TXKNS8-8T%9u zx`+Kn2GBJRhHDgF1XB_6x#SbS;gE8zbp;HZsS ze)SJ=|5d{;%}(MifoN@*pLIqtIgUl0x<0lyhquB8ZLd!)7WBO&Wm-tyM&KlecgUkF zjQn%_LfrMdDccyx6_a64m8^=Z$-!CRQEldNl)kvc$CQ+H#c{eKX!9ap27f5!lPFGG zWb8K>NR7BhK`lBol6niZcq4gV2*Wti9@;F&RT1N22W~q{TC=t)!7v;q;tWMoG!#As zyH^$HOlfUy#_E)Z+pA?CNePzEe9Vh=n(e!|>6kIJ--pui=yVkv#Mgunc0w z|B57l4~@`M#6@N22xro@ORX1I^etgZc3b;C!5v)JWpFOuLhx_Jda(_TuCZq&R`g@7 zq3#$?Ij$w*2 z_rkvpzG#9}5`?|8Y_S&D+g-ZWkYd-f0bA0GCYtgqq!{hnT_K@IN%<*KA|?(gugYWX z8Ed}~`b;doUO>LfLcda`0pU^hrE5PH29z?`sN-ZN5qcc1NY|cR#Ta`_sm5+GG;|AH zM}$F?O2CXqcaCYUw}m0V*DBvC_Oc+G_6J$zi(~(ZK6@6pEA6n0ruvA=5Ff0Mu&~BV zJV|moT#H(!RFRw%m!>mhN{Xdi{Nz4w=DOwU(rn9oq^LSrXs3IWizZEw6oyWc+?_5! zFnp%8kQ842L_iDcBb=TKl7i1plbkVYKSe85_&Rwqj5gLs)Jobh)OgF_NCP{JjlkOevcw4q#Tc!6zTa@irV{W8#Ayc6eYq4*nWw*oagoBJ& z{)743A}Y_e2V?}R(g6L(7Gi94opl-4u3o#eOUuRw7T7cDRN|-deAq_K z+HbE)b#Jjw{Nx8+YBnKIsiXzu3Z#*u8w2G^>XJ`BcQ;~plndIff}?ZaOY%m*-w5~{ zC6z~TO;~%!TATtsItwLK-4Cgnx~<8_aqlU?#dOL=eLB2f570BwOSyD!k3Q)Np{rPj?lNUm9__%-f9i=G#9uBz+RtLnM| zFmD*}rgV0_i)WnbA|_3gIe z1qAUIfLZ{!H}%n19v;FMZsO$i3u?%@F93H5bA1cWA%E1DaAU&!#AVIYkS$iiq7Jvz{Isls6L1>`edqhj##J+uw)@A|& zUf}9&{<1E9nx~Y#C^FigG*)9+LG_CF}t0s`a#T_3Lzh;SQ>K^N*j!|}4cQ4Fzh^=gI+g$IZw(8{I zmh1-W$o8A+C^gr4HC;B=Q=;PcU-H~`?&yU@p9{BeoyQONSfbseyNwz}jKR*|NTvYag~&`l&xpWJpxc zQ0&(lz)gk$1wJh=;S_uXKkX<^b-AR#hu9+=#~#6%Jtdy*7yc?!YICsPky_L2A1rIJ zMgs3Hf_w&>C1UCcuAi9N-tW8Us|TM^S;B&{*T%omJ$mvN0cSRaaGiV_eAWw%A+?Z! zME8z1?_-Q3N@H68Ox&buTOliJ6^*l89)j*SzFlKKq@C+umi^F*wiP%vH7xbFEpwHF z_L#?MJ_`GcpZ@+*`8})r{swkQhqX!kMxXw~hu~dmf#k@3uO~T&=6qD{%q|$=fn8WB zFmd=PccZ-AkX?{C9Q%MD?`bHv2sp?XRo*{Cs;)!Xm*lE!4(Aul^(lNlw*WR4(rFrXRP8to0OB?9dZ>Y4D%mpV%szlWk)wSmZ4MHSdBQc4W z1xc~xO^?-7o&BP36y6z-!zqv(ujk1%v&Jw*FLY~F$?dCkv=-Wzs(!Z2RCc#_l$55Y zcvHGY-uW^srH-~TT~^IGD@b_hBnTc!u%C1Ww28-0I&ab@;P5SYW~_nYMie} zr4beA&nkTY?VII(#dhX%ndHk87+7|sw`dH?8Pe0tZI_) zn#!WLlaSlG(@I~L8NrWgA8(Mue*iRn3>pI%;|-HMa`=@iFlZcw;cC@_v+2DOEupZW z?W;-E%=NQX%N(ju-PC0c%)*E_GC!IJ9V0OEuxTr!aa4BI_pYyIw%{}_AI>^D80Vd0 z-??HlZvStVlHf)dcH^Xk7;vruE21Rx>Yil8jDSDdLgm!m5@%VvKhM5n1=n3hWTOR= zUypdNxP-OY*zPixp6i|RjqGPH9uCRu8mwelsqckk?odcp(U|$RDw`eF0@}PoJ=)yE zI2HWRr!kGe-WOKPx|HPf3=P@p3kdOeu?kq>oIt_KvR_ERTQj+Maia$}brNvK z+)>WtyFd>Sdyb7wOb*usxzEp-%*{-Do6p?ZbSZq>Zof57H}$Ab&Sml%Gj7oz?kQIv z?x|+eu*U9!j#1rl*SMp;ZC0_vG47lo;|}}X+2?$h1s(sXphu5p`VZM)f5YpWu>)aP zFEb^6{-GWwmFu>$%iU@HOekGSHM8A0X|OiJYZ=R}&|E53p19|!;6+bAnJvXrQY-XQ z3OSdfhmFOdZoMJfOiTy;7Q7bFMu^YQ)#*~?>D0}VnlQVF;iM1e5(HGjIasm*zK!++ zeGBYm*w1fl0$khw4zA`ug3D~#j1!1|jR7GWn~JBz+nFtCQi^$J=D#ly#hKZXP(ixq zGQ_Y|y5&l_|GA~aPs^E`(-u68`qbTXS!T;}cVo!F-R>jBZ~G6!5@>~Qq=G|kS({H^ z22B1%D=8O8VQy@q+`1d5D$EvD_hJ_1%>TO05ym;9zwkTVl1Qc7ERyZiZ&i(QVr#@qh)l#pTe z65HWWDGOQEn%ZquwfQQ5Gx@hT(;kTS>BCJ)JhSD9PY>!<4HZvMwWmoV4f?V}zC9sN ztgb^Lk7}`RIbp>iWp?4Z>(l;qPYuK0*pve9ES}Ql1BdD#&y3=}D08vzluxlg=wAG9 zAkmQ)|2cCxvpkc*?YL(DBBs9oV$W0k zJw22&4}w1(Xi2-ms}^gUuT!A3r897MCbLD)e}eTaAh&gU(n$9PVxSz{uNKL_nFDAW zV{qnu1Lu|h7S6vK^H;&i-z^y|6r*gc&5z2(Wze=}{_nB58p`e8gYxfip(6|!fFF3- z@NY&k2m6rm&AX)xV4al}rDTz8pfl0G82_}?#wNN>2yerFr$U#T4eLiY?$&2Ozcc)O zH1@5JjL=mVBg5?WOvWUsaL8m z&S&WwVR^Bfu2!3+Y-;yo*({C4xyCr6g}UQ*nXWg7eE7|wQsv{a>N;lHe!&15(D6)Z z!Bpb?Dd-`eUQFLCki#1gJ{1c;i16lx(fFSseA5!eZXEAssve(gKO-Fhb;j0#I%Z0n z<+{D(+mz9Lt)KaD(*!&7KT=0`g*rGx`G@N9Z&Sz=Kzq%g009NsKrI8PrDt~I%)(%p z>6(!N_?E83D-=kKQ6LEv7(wXET4!OIaWw_v6$-oy`Qy7Zs7L$Mv374pctI@uD8l|2 z4Qdh2QD_jZ=G=H2XUjEJlsE9^K~t1F&iVG~z!kcYb+;)N4Xcvbe)Y|VaAP((${X?E zoBYpwkImDz9}KNbj&erywspFcV7T9%i8m~0FQe6FTNg2+<)n~D$Z{~&&s?mPYP1rg z6RmW8rS*{GgrARvw<7#eEc`gaOswq> zBRnG(UXO6nqG;K52;YM+9WRtG@De}+=Qi7SUNvT3)!k}4=c6sBw0X3N(xw(KT3E=z z(5mD%AG`H%Y~;Y+vENf_^O<QcG z7ugA3VSh`WraLrnNajqQ@<>yRdg(FhjRf^Z5jCh69Q-zqNQ2C@_mnY0={7t@o^r-o)?|0U3W(~zsv^E{~J8Qrjy1;JafV2S_U#+KO`Z-{W zmrIm+jpB=buuOqa~jR!~8n&0v%%p%)y>5&q$o-4`@Tb`&9|n zBFa2`4jQI(HEqSq7+uP|8xI>Lb9L8t-Akdv31@vf>D(K`W_X0fDI+X3kR_#?Gvj{Y zR`t`@_3#D__~4^~Z}UO#05k2>cksypJ{$iJ_#F9{_@pWL=&%R-1zwI@1Q{oa(Z=s! zv=11a{8nH0%q_HY?){+6FlDZ(s+U+#*1Ek!gOhN5-6=XBsh8R)rO-aZa9^*9G+dF` z+Cm;;gT!{qm)5WA$$})K0!8p@8T#5vaR85gd)A5ZXpFkw@F<AXw% z^g6sZ%a*D6dMSI#7`#cgP{F1YFDTW(!>N6kHJA6WNb z?ZcZkGsZJQgB$O)DdnKElp(=(-cSL(;eZj=dPY}i%WS&})@ys*sVzw@EJCHN*CIU) zcjBkPzkjexm|$)-Agv5V@G@p6E{3rE{Y+eh0;#|v#cZFiHRJI9Hsb9?z< z*fWsPG8m47wZZRTb-FpCQLrCKj@rRNQfQ$zgLJP#;klX@ zu1s*HxtW}m3O(q4dpJKm3+R?%J&JlMzO=j=aG%nS^K;61Xr}w#9!5paJ%`KS?FkAu zIU%sLg)umK9tDjx3Pu`~OtFnY-Yifx%OEOameNwe3wuD^sUY-Kja@pXB)f>=r{R@I ziZ8uWLE+QzKPm1CT^?rff`%xw44;mCSxBRIDu(lYg?#2_&HQ}#t6ELqbDWVq=Sp!q zTnV-`7hOYWK3Xqc_~0wte{yef>&(p z&VSDRxm!O)F2LH8!}1^c9PVgN|5fQZbwl_oea9coIJjT4v5j?{q5q9x+a)Hgi&IT*V#YZE97H8WRf< zdxwZg3_|mu$NfX`D|}tRnPJb+1>petRBX->leJ7f18wocP3k@dRxTR6lvN5l7glVR zW^YIeC9}V|hCGeev+zRKW+@r-z&ohvb02w{rqOrZm}${?pWI%2F-UT~keZUs(exC& zi6e)fm(}!a5SMim=5yU1bvpDnaTTw-zjoi_<}g=Pi|vVt{T!Kl^P!tJ+|1E&bTjh% z`|*}X9{A4(T%%`WXggX-U%V+my>j^P@~Yy?^gV2HU9)b%niYw>&8w|yHl%4l>&ZKD$fb}s^rSg zU@szvoVtslQh?uDrz5fY(=g+t!%lEEi$?cr$=IDBRNb7ZcBk% z-jW#utgOv!iSFbGq%b*n8{I%tUW=tHv(nd>sGPCXzt~FO7a|5o%`qI_pnSRy?>ocS zH5&~>;Xg)lOt>8a`{+D;y&H)$Nx^)C-iBnaW0zW&&J79Bf{sh~=j6yaw1h80iqrjZ z_@X8D;VZ+h%b};RI?P10>~pZm*ELT-Xh%fX`mT?Lo@t3%OLst4k;9j8Ca=cbz#S3A z+5<5k!7ds7jdgp!oY6vKm3x7p_!I5{Z^NZ`Y^k%7i}Ko2@fr^iH$|d0t&CwHe9r(2 z&cwbB=filt2QjWIG2KJmf(rJG^DgUg_A25Xg%tRg0!-eSSlsDY+{Zzcp~b@+IJ`uZTC_x2@8i=;=aw&AO#gnc%u#dS1MXTvj5b%Caf6G#0YOhH8SyVIHn*xM zDZmzuz|Gsym>V7(Vn;N(*u=9gHr}|_vGz;cySPv870R>81kpDb9zDQZn=nZ$G0EZJ zNr6Iwv>=}lD4cLG01Xa#Qx5-^{1@SnyVh;N9f=#I4q-!G^lSN>yFiP@QY)+(|4VvP z!Tt{jzau$Z`{BPWvGJ>24X#&(ChP@1b6eib9qU1f{nFm=#Jnr*LjI%DcKoJEXTFoV zRC?k&F?UKE1P;>HBBJVMQkrscexbj{>?$usA6~*6MnmCeB~Inc9tv-l_QHDC<159j zbm(5?Y`nKMCVnXVr1Y83nN82Dhr*i<()UI2ju^(=nVv9Fi}%d9Knvc}yRGlx{%(Pp#ue*AO}fuu?JvQ8`W?L8LSGdlp=;DX z$RO7oz&$sq_4&{>?EXvU^_r6=V7EXrxR~k8G*P(5)rVVg!?|f**Ok2N$s9M$Jww8) zp3_C)p(fS@?T0?To$5{E3pDUKgSJrBu4=;j6ZDj~$yKfgT`U*J=qVoo?nNR0Dl9Gv z#{HL`Sg-kn!j1nv7E10I7O}kSClrgp@MY|nC>Hu=%S8e6BW8tZgOHRCT=Lu-4(eNz zO<{Uk(QdgYn+L<6$n7o2mw&tk*XpmK<&Vif&ZawXXo@UOuWg*FXmmS0ail8|=Nb$j zmQ~ZKF3{ORZBLp3wGWmLgE*tswJ@{K`IzbL!gQYbf5m+ZT$EM%|9LMn%mBgwk}#mo zMGzcR5KGFeVP+VS(J)w^-`p5qG)-kRDg(*z{pBl%Y%6c)bK-y%#6ZgEOqPk+@hqf2>Fv?& zWAXj9@oPiSPtbP5S!2<6mkUEZkoSU~p=l=f3x=-&?Jm45`#C53xl;HaescSV?Dk#Z z*ZwTnIOAzxvvYpRH}M~ALQd$OV$pZWm`!g&jyb$XobK=0IZ!b(4As@@Bk#5+)X#J+cEcAS5H-${HF_=e|zO%k$`zvE6>BD44L^;rrudZyG+_+uK8shqnUd3 zw0(^#(`Rj}@uy{fH>J(Gd&-j4Pi<#LnY+pSI9mp!2d{J zgFZCE1=)vAXqVq+;d6g~4|kPfsTKYPm@yCwd5y7x7vYSU!>ll$0lo}(jQ=3N3x%Wd zd%bW(ejgJK!!NmiB)C`+I)cPqSIK|2?!nBqA9_yYP^CO@B{A|8D%ghcKFJ6_Uww)-86$%3M$> z)9D72fVl%4V!q-{eLY|Gf|GcKrWx}Yop{2xVr96(lU({stX;T#wKr+zSHaoaSY|2sjR>~i!kxkRtuwA^@EEu3 z!_BQjpvmpC4D%Wv+Yr2|cG3EzLo_$82~k;zU$?)Qp#9EVIw zdv;q|NqQ;nma!Kb(;7+k|M2QX+?JZCPTO$fnsckpct9svk+~jn6?%8C?+5M7xuU=4 z+rHiSRrNQl5v&a>*4$(CD3IP+cY$r^bhTqtEvLik7A7dXHQUS8oAqSp!5zuf z*G9fq_0sJH+(+v*U#d6gBG4+?Ht4@XwuM7PbSwq#IUJ^pu$ERC58W~=2RFqR`E2PG zUVhArmWd}CMh%$mZOe1G-{r@puFvrb<0e2qmEhBEv0&tA*XwdD-t0D2&J?dE=T@(n zGr&jQz|cE-#^_=$@O=L${JsT=CI!uv?B&Kk`D^um z^;3*Ie@cD}yw6{olj_Cnw^r*l=bV(&%i{TV@})w$pUD0+{8jm#!e5c!I=)MO=knjk z?*jfJ#x1y=Tg>Q3AE1nnX42Z2xAVxsmVR0pvlfDBnxbYJC9K4~O1LcR7x6p0ACivq zjZRwUQ+V<>cz2`?anap*l}7+wuzEV#L0gfQcvRr%wP0t3-U;s9mKMIoQmruX)eDCF z?Zo{L!XZLQqNMd;bz8k-$PKqZH_;tf(V?kLlVUt{0!{RjFA+bbaie>hJM8{>#GRxm ztWU4-#5iyV7hJ)wwrZS3+7=I5#>5uqDA z36ZezXTHrY?eOtQZ5kW2O$4Gi0c}}VlWM^|2&7j%y)GS+qao*E3uH~zK{74D!u%Bgo#>fkYDhAj z&7%U3IWw~y;Y^sGa;k;ir131QJ8dxE|5=!iuM4vmw2Q$oYP5V^dI@?!xb4L=qoA)P z#U6xwRc2_Vv&UL$%R&Dn%PvjcBY{`>h^nc#=Nm@oQzz~76#l@@m}yW~4a z=1VU-xj^`O( z^(t_iq-jo2OpkWFV2SfFqXn{g>!5)&%5egBcGg4Fsp|mrMHTFv4o#i3XWtzO?+uMc zdkmG8Xh=`=hf7QTQZP;nn$$Bj;8BDGV?E*>ZSGL$Qb8Y@+NX0mB?c~InJc|TG%($^ z;A%}&37?%*6Xg>EeFEfw`$Wf_8lq(qy@1-@34aA-BK4;NHBlTdc*Cg{G%HF3qo#Tf zPDhCM9U9bnyZo;M@01}7N%@H?J}SjP$0G->^WRDm_u{8Jqb@)t99_@i-iG6r#|vn+BPNr7we(|q~x!5hynp5!pz54rYo9Hw`l4L&s6 z(!`>dU^*k=9C``O>mFf`8YL7Bs2QDYE`sju0u33MN& z8aJwNQb1)JEN69-W|n5=xEf=P<}RkMw?NXm$AB{oWA!lkT%pS!SjgpzSyWHmUPTtx zpr(OS7qPB%zBO2@W6&kn8r+Td+uX@q7WnFF z;tZ_4iny*Z4Eisy=BoWMM>N8_X+_3?$D2T#JTeR-E+&&6oJ)d5}2H1zx^J zCl+VG>m4q8H_9KF!Lwqj11dY_$!$fVU5+!bE_i*sk3*V@V#b4YT)-8i*eF&yeL@>H zQ+QxzS?)y`uMCcRI?)nM8NN{^rp@8`$ap55ZX4}Cqtu+#LGziYzX_|HkAfo{`0mni zz@ahFpBl3TGr79G(>>pfxjPS>WXn!g)}!Wm%uK;flL$n%2!KHSS7`X&$PMcm${{Jx0(t!dKC4E5|8FxDtc zN+12Iy?s5Su!CQWFb^UO$UzOTd0AIn*RWP;BcRmc1D4L!Lno4j23d@y-{sk zj?v5KMEMdO3v@|Xqv|0+&ybS{YOi4b4!7I+tgCIYj@TJ;O z`@8>ut)mU|Y%$rs^+!1pb)Wm|(3j@JRKiFwD`9G3zJy6?vMo8kOe-az?UH@^)qHlM zFZGec&75(oImr_1<6Z?G!KnE38gI|?Tv*2K(m$e;SYT&}Z~(REY|>bpPhXB^8-7P0 zAv=9(j}X*I?s9J%CA)u1_DSU4(OlhhERwcpzsbiT^(3S|CzARwAB8{C&qMFg*UK8J z+>c~Q;#3+Tkj&mv-E3Y$(qR}|3z=S;67+BrmuYpzJCw`$ZQPDeB(`H1WC1(e(N(dz zd6?TD?pHgw9s2<9aGTuxvw0XDRJN(tz&ngSGWkuWdg(Ey`ugWg6(fabk?2PRa8PV> zl{}I#$r?1UEsrF601N zn^GcscxG7fE@%UgpG>}=?ZX~?75wCCKyAf6rVJ`|K|h7aSOt!kYr2sX17^FxV}0Sd zCDh|Wxx+KEQ_z{Be3*-M`f;TJCJ1e#$0^$g>l()O`C2ji3hhG4`o&R(ql*R1qt(;j zM!#KgUCob`YkmxBK3T5$k>*i8)@4)Dd0FkXRu9g%UWJUUe)N;al(-qh?bN!n?TOl4 zTd?P+z2}#uxw#$f=o#E2Oqzr+TL$QMP5@Hq)(IQm{&f}6h{||pco~CJbP;dTVFg3k11@dNk&n-)m=1@xt)H0t*yWIDn5AQ;4 zf^r{;Ujx1a@EAJ;tWoKPPWAMEVh(YR#e9Z!rP`6(lrGI0Ww6b#jI%|X?~$;pv4|%& zSopRSr^cS!%nW_NV-#j^jZJIraNdchp&F}H23-lmXR0zzUgUV}O6}s*Etb@_6X|K% z_eT-sY>TA;RHzi&dFf1gB47rb3cX<2gk1*BoUdNxrjd4!uR!gF#*bx%&>H_G(p-ps zOL0SP5TupxIH4I64E5B9qG!}Xw<`-AxXKxA!IW5GrL1pM#?P(;qy>uBmfl12fy+Ke z9RGw_et>h#cMbS+0b_ysg9?YxHJm?oQDLA_%nZjaMkNy7C3n(0*m_X_jSCued-?I% z_A#^Gv=_AS`ul>z?_5z7?aOj~cu`?f*`UuY|0O5UdLi}m@Ts7#b$4ehzd0q&Zal#< zewWRz5$Yx8c6a_sb1_Vg6Ub(Y)YNROHI#M`1> z<2AXXOSrv|VJgcAz7P_3C3(o67NRu?$+`~poW{8_mFt^2+7rdjDl9j-*Gcs#8z`=A z)OwI40bUPCs|#_)oN~@?Tp7llnDTK)ox+0eMM`sTlXgivp|Og1M#6QaX;Oh^q;qQ} z1GIT_24lH)WvFLch_mb5G-i5wzC1$VY0vvbD8&;#_q@=eLcY$ntatKy-UYhAMd(ak zPdKGcdS7b5dfOUI&*9zH;LIEgev5Ndn6q+nc!Lm3$zcZTML};3>e7Yah#YHBlhe?Z z#j2-w@gzGaj5|ptW?1U}S9>F=koYq`s++BcP%gDGEK%WNRfb*Vms=sqbs0=eaN{0otm4dcTa$23VLd%GR zqPh@Jhf1$j;+?Z2;r@VdG@lKF#^DV(p(|(>FoqX8i_nh_4s`pOvGpSA2K}$jooW>x zT~{7$5`0#7szm{6Rt#2CR`*t`fPFvpyx$-;P`IHbbeKJS(so`lS_fg+@CyhBFV>VeY5;A=(5JdKFB=+6UVu&apsB>Sh(g zyyR4~0_*ZWSY`PPdf`l!m%dNDe|T9MmaSVetSOn}{R)Jba< zaOAgmFN%|PKsxAADf&>#NYsE1ClKyb=TV89bkup&on%|@7Rq;6#UI?q-)KFn0VIC(KT@pqky zm^s=VMOiI7?C*A&q3T=&}iI1}av+eeS~Num)EoiCu3#9bf!OB-1$G|ha~ zQKzMfT8-K%+7ND`yN;lRkSev1;ZO?6;F%hOUP0|7*J}O`)GAtO>~*bVbZbZMah*fm z-`GmxzqC@M-EaGWcE6#WXx*IVeYUrxWp4@-O$BxD{f-o zw3SBXH<8vF2Az{HP-{g~J+jRG&^%juXolQQd(ci#07^RcO}n>K8TCtO6&ztV zPfRt*y?@m)8%D0MrC$OtGT{jD4h8Fb{G? znz42`g4wQ`TA0ILDb!O7I_Y44F2vg6o&g>wabYY)=YfN6Ebungr4ANb! z(us>WVZbhJSL58eLF}fJvE21;NkeYm$B7kNP&F0nZFzouBQj1XRnfjJ_)up8NWVipJ&3xi*M)l2e5eK~HT@ z&up9pae-sO>&y22IL^SjF%)8%oDmvrgRxU{CZo-!uJO!w>paxEsh$q?19tn)>mYCU z|JG6z6qo+f7wWmApT>VR_K~#LP}pa?&p6|7&pgF594qD??6-Hj2fw5HiN+G%J$AGN zo9ZMXz$F2rIH6fj!MbvkZ0x_M|H!|kU)|qC=|B2U-yjFkBL@TTAboNA<_i*+@v{3V z^E7MGI-`>r_c$w@=bfZs&=c_!CHtwA{U~nm^Zr3v!waAx#Q2mmjZ3WojbN<&BWBvP ze&bT3Y$I9*Tgc2hAj5O#HXfsO1`L zmTUB!Z$q%sNjrv5L)7+0lE)7ou|Q$Ubo{O(4y)Q=ZLR`6*$Q{j9^(=9JEybESD+y` zR-qdkZoz%>=)5uQlYIoaz9m2Dqt^SawCz) zXZ+7%rwux|VC~?Ipx9w{WC2gDt_>1Y)=u}vwsEFAyu4|xmznlsSNbTwXE86+!jJm* zUs<;n`UGnCUoo%!E$G}2<#MK%eD4Gw%_VM&N$rrLxa?N%2*k8|S)RAyN^1pY+TIqX zKHqm8_4#d-W21MF_N+xX4Wvz*zvC@CENieTB3kxOTQ)ZXc>iir3)* zELQ|(2xAIfuJ15S{c)sRlRHugS}muuN1tK=Rfwcp^3ckf^;VAK4S$YfANbb31@|At z#gNDJwEBCtAiV#t?z$k)f-w1}_yp=0o64Ym4*54D{MT)g46 zMy_0jYyY^{lRV`5eaq?x68tek@b5#79XOBmnfMm?O1FY$k2eoP=OEN48CqF6^-N>@ zxXEqtrb*Z@34tkjc`C!CyvQ?U%7+iWjlT9P%kbmJq_izfxJ@MVCC+=`P`Gx(DM5qQ zHLBrgxtGSZ50~FzAEciyRi5$wdX34L9c$=if(QNB==W1!XMxWK!tW0U!fi0v=l_n? z1?6-&xJt6or<5jzmupM&XqweidC0d9hk7p(`js0(r?w}XF8X5RQFnb_pt(GflQUSe z?Q$=G#^_VN!93A8`wJwHIjzE#a;qA0$m)VDi8FvEDAb#+>Rn8TxE%}DLbojDNJeg) z-lBd1(ouAiQf#2HX=t>we7K%v?Ml6>NrirRGNgozUAlb_2;QIKt;YM0ct_*?0p26< zZk4IDN_`f-4}(UgX)?@gsH*7h7aCj*Rf7D+tURfq%IG#g3Jhp(<$Cv7>74VNbROoM zdjzfj=bS4)=f?WKyLNfB(@@2Co0m6UVQWW0b4%?cgUjeLR;7tiCyiCsZnlDKcw3Dw z2Hl6m>)qg1mdH}b%NyKDk`>s6D7j3-n^`q8Lo%${fW4>8Y2nmL&qVc~DwBxTQ|2s_ zptY6n^QB5$;3}7j-4^^IO)cKr1o*3>P-U*Ns_h7s2s%}1w>amFE7zc{pcreHlh0?k z{!_6t5)IMLXo+Ns^W%DbWpL%?6nLbd0z|t+i`@d|6Ux_^kqlG=a}3UAG)+fAIf$N_ zY8N5pz$|f29+EG_{9MyI=M|r#geWg_A%jtztZA;n8HWnv0=rOiOcrs_SlSFTxs0*W zM)O3=?LOUIr5!9)*~wD4+=*6OFc)_?TiIBr)wx8e@M<0N-6Yv}e)$4-a(B%#g*RD- z@G_*#qwG{OmsBTdExfOF4OWThrzUHK6L9XwK{azoGuB|24q200XPjY++2VxsZ>O2o zg>^)Ix#}OvAIezJlrnSU8mz;56_<>Xu>+EToE7qWy;R{$illL1fV-I)^^z@kGw!y3 zs3=h`ajJYmS1o$Am|y0mU1b^an?U)+IWR#`uYlmRvxU;5`qaE5O4c=c$s(OLC!#Im zxM=Vtu3y7Jf^CJ9o1}Ei4Nfvo1}*uhFkkxDQw=%KO{5?GbGbL;O#dL&F=X%oc02-W zJ(w~C`(p%l;9%Ae>_`Om`oV%B*gFx}o`c0hu-786od@R+!FESrPal+qV9!Tj8xGbC z!Jdr3Rv+9n1X~}0RUh0r1gnX_79ZR@1f#PN;ul|d@E~BM;kT#s=;dQc;DnDpdbw78 z^z!?vqn8UuaXWs3+a9HX_?S4bLKG}3X$ZB+MF9DVa$)= zqWmtSL#Zh0P$@P#Ka|4Xaf%q!{NXM>ep!c7{Ls0qLlDw@QRAL#QB)OGnan2hb1l{m z@G-&&E~`tB(#^M9Mdu8a)?3;!LtWajNmbhMbX*JLCLQ)Gq#U?LjT4>EwTM-=Dx=wW zL-=$4@V(=hDE<`bQJxD5@E=i5+8e7N5sW`I2GHVbE-49|Id15ior{$Z&8+*PVop^^ z3nZ&YG#IK0LUS_ob6}n=Xs)Q5FL4s?tZ%}e=gIw^)y2gjOj`ByeFPiuFUX21K_~2rcvBFh&DVi(1l!BE* zbP}yUiC+pFff!Gi2cd^|q|f94H?D77i4j`t!M}1XyF}-rZys2<`&y>M>8f`Fi_NJo z-{m$|l}YE_v7jBgs^&;Lz-{qTm1WC$;MnR#O;_5N>AS1TjosB18(Ipxcb8kccULHC zo^5%_^^)tn3;VaE4?Tr}G2BZoYha9U-gVxcirO#(Q*v7<1q-lUVL%+joB=a1LqW4% z4q-$HI&Y)=&-*1)6~WM0Er@VmrudGzS(R2|83s8V=~w^_|C+N3bUmE&zG(U2qG}$E z`Fgh@QW_fba(y5kp-R)VP>OM!ch*&vJB?0j)dJ~^^JvvQPT*za!ysdP17URF5UtFA z)((6T?>OTo$eHrElFvX_rI}*~Xs)$Z^QFHU>RmKnodHF$zPzmBjI+$i8Oq94m_O4| zyTy?EFXL};3nPR@)s)~qA;p+aH-2p06_rpPbt>H613f9&r_q`=EbaKBJo=!k`v_y; zEqfr0-&!FTjA;^Vf@E!ZZWNEg9L;mj~=_uozuguK)Gc4 z1=4(XZ0kkGKQ3tFo|J`tomu%)IQ=XTsQ*>?+7N7-UJlE%XgIFQ$bQemL>p-L*ZS>;|>Rok^ zf3LJ7%>)Vj?;Z409d1J%Rtt6AW@uL*tixq;f1xw;_^42b@Zsm+uOmC=G;ld5dex4d zmUv$Ydh~a_4*Xv3mG7`t3RlkLpTTHj7#*LvRm~KJ`rbCsD0r-~YK0S(@)`y(q5)Jl zeIc2!vlj%xRE9kmX=!6Cm~mps@CT~Eb6sl_ue934PHs3f;Tl}daa+8>4VaHE69 zK1+}mhznvJX2F^SPLk5@){0mBgb|P;&v!p+`GZ`4Bu_N9MDq^Q*N#b8ba&;+N}F^+ zdeTB=Ot+PGkFpJ~G=m>;gH9|V?#H9RUaL^gR9`3Mxd*qZv%wGJ8;06W@PYn43z#QT zx7n2?x?#ZHqkH4@)BM>Ogo;M$BfxK|4d*C^W&um0GxtxJYvjgjTS{)si(ZniIlKk>H9(uBI3jL=Tqbxmkii{sk@Jh&(bwT5 zE`i5vwN?5aC#6aT$Uog?5xPVnh;%4Ev_IDS$Iw%GsnN4=OHwK~b$?&?H5@G!u za76r2@3a68%9imz!gVai5o>>60^h)v6r7fYafP;=ute3hsFFFsF^K2iF@*(i%#O$h z`MEx=+M$s^X@&DT=w~n<%@D@<-p^*nb=4MfR}L1&NCL(a=mtMkdt-+1l(kzY<0zu{ z{)=DWuUu2ibw2CRrw2zP`F2QF=T@oC`H6JQ8RNE=JKTb6tJ~^AI&f7rr8(-WEZq=6 z<*KhTMBZiSDg9XICYNCC3(D*^GjVzHUFjUVQj4B;3f~2h@4w>vN0IN3@m(GH#%-mp zCnMj@k@er|L)52&@*40aqd;ekR7dC|G8GkXO%nrMQ3bA~fu6gADTiW>M%hB9V>(PR5i_Nh(fm5309tQqT9+>9&;CDT@UETdQQ-xzDH&D+?)xX|ke;P7XF&?m+ zHwQkdwG=h>uJ5s*F7)4eNoow&J=Z5C|5jQU&Nn&6^C{vTSI5G@N(n+zThQQUt&Jr7u#>^5Nt0O z4L_Ze%6EnGh2t+5ai@2T%CWuN87q=(pi!QFGc!(huE0ro;1|XAFZ@aNfS*4U`tld= z?(O8UPevZ@dJS<7^y^~d`qJ}b`}iOvVp(?!)8iE^;V zQi>eFZ@zeZk45$?AP?GRKb1PGH}>kkl$@tD_cb0unhBKVw%9%)h!JkCEfRa9x{ar^ zDBV2qcx^acF3YyNQ^lTv{zY82r zPWv8zh5dlvTBJA~=lR1$tkLu;`zrtb-n#zxFuQ4d)*|l2ddTG6pp~HYjnn?3H)>t_B+#)qN@N zMx!+av}BCsnIhI3+jGb1Jt-==E}ub}_M$EgwmqHE{N~0+gh2=c{9i8YAbQ)luwRrP z=T798GuWthcK0cE9@kom9QHyxe?sXiEfS9(>Qo3)r^s;yPkZ{cu1+p0syA+6403iC zb|YhvGRiRJMZekpk-reS1M}>?{|GiQ(5ivMK`3Xs!6%EJLCg2=O`3mw#GxkwFO(nd z2cED8i~R6E@Q}NX{r`VN+)w&{or~ODq`>h^5EV=rrDE#n7#2G$4qY#SB_<7L$v2H) zDXChPmOhe=8m(h`gOQEN$Yf))ve`IO4jVsVBFoL2#PTQK%x;-dz;3;5D!YB!9qdkX zA+uO*tawHVbIhE@?kb(l?w&K3{b=5gS=oYx?B4r+%ADmcR#CZ#Exuo3?y4nh=>re4 zWz|1p%U7&qs~&oo)jYDAJ+`)%ty^EmHf(&HJ+Wys+p_gZwr%?}Y{#?DvFCrelf6*C zi@o@(U$fureu?dAc$xk7mEWq2?;PrZL)kf$okO`fl$S$!aXB@cLm4@gkwf`7 zl#45}Pv=lJ4rSs{ChjNm@8M7;4rSp`77k_MP!yAwCrlnU@n%!* zEmr%CnX~8qWPxpZ$*jA7G=CxYlf7uh+3W%`x0B`*7hbwqJ%c;`c3>V+)&Pd)W8j zuYCwMSN@tV|L$Xp?>&n6IabWx#P0_S7u^fZTC!U>B)Y!*R|)vw9|RsFZ^+-mS7q2< z_L}@g{U&g%6egU@+2kjZ-#Pfc8@8FK4|1p9QkWUcA^UgW`z{!I$bBK&=N`OWvi+y* zUVN949r^ePbF%yJy@1`7P=Pnc${D>Gn+NkF_G5%1DE*Ctk@Fg{&yT#xZLn;Ee*gXb zzxMI(Vg7rNA4=i+{0_#3%>I|2ai**r{bds%XVhe!-Y{lz=Gcr0w~U`sFcw1>BNvD& zKmV2qQwm0l3LrP&HVki!ZXh;{Z=f|`wTXGT#_>1*r|vh;q%JIma%t z4%WngSJNyL>Lu} z8YUVBL%W!R;b9>8saS+jz$js&U{o+_m}nT5mzQ0ZwkrB(kP$L(5mRl4xf|bXXkHwe z0I`jfpU6b2phrnh6g?_DYCO@=(J?VGv9Ynkh7F60i;Its*Ju(F5)u=Wl7wDwcJ&?XtCs8vh;yv)yr3`dbnownx8*byS{GY6Pva?`SdTg?|AO{ zo%JvNdiS1&-~R5^eQ&(w+28d0!|xqwJ^H~PKK|s-fAyXGTia(}e0A=E|6=F=2wc7r z?7bFZA?kbbN&_DuhI*Et=7&%>c<3kAz;yJDc95SzKQmT`{pbL#yur^?k1*92h+|j{ zQ@xLO?i)-s8KxLUOiX0Yfe-ynn7_aTU={-Y7>wC)K+P{;0>^guqU{(ba2!+X340jK zEK0Essz*4r$T6OB5pgiUVZESZT$Dnfms;cz@O$?IaNj@mNwzh}u@ z=I>RDgm2|+1gL6$pbk(pb}M-3vtjOm znE^8w#tM@UgFD!AU&?JlJC9|$K|^*5JNWz;?Hc%(&41DVVD#*Pa`%JGUAc4-AZNk% z901=o@iC(Rvp3ca=7ntZ@MaZE#1=#LbQtPBOypw8o(qF6ib28;BfAYoE>NrxNA~$J zlu@P;KA-HA0Zq*9wpoR`#pUj$tCmw~8C&->QzdU_sumbCGqVdAuVg6tAdTI< zwc})u{jInEC?UC$wjP-2=dt!UR=XRVgRr#*7)w^nn-_M&GKL-?;>Z)2H*cOI?Dp^= zZ0HTQ!EiFn%;wQFj(9_%j^zc%*Ya&d=#1$(m>3ezkgOw915Lb?F@u~+aR=Srxc$<#m zE?==?(Q>lt3>hm7ay2fhyiK>*y>yWb$LY|-NT zfxH>*1tMrYjL#|F?_uRGtoIiatm@m)TDgfMdz`kHA@d1lCk(m&-+a!pTiKFjOtlW? zmoPWRT^Y$k5f;XaXmR`lkAjJz&`%3X73nG-D`f{46(_`pG(T1j8=jav;->pzlTt@% zN2lpVreu#9mto2@W=*(fq9M2VuJMz{-dujmoSgjI?wo24-G0ZdF=bN{^m(D8(7b!6 zIW3b4kXXE^Rb;C3_-TnOF8(HMYNkGK_%uBm89zpwl{qmlbJ|2^iqF^Hk~uAJ8oMpN zP+OEaGq02t$Cqm7W|rkGoOU1kN&J0USEf5}DO(i3R9l_-aNZiWGJcKrvCPNwwoiMC zt&iWVeJbT(VIJe(f8*YEyb&<)q5B5Pn zkUm~S0oAVbdu9n-DU4_U*&{|~=3HrK6Ts;6Kw g9%ZVZ!8`)Po~O*H. +*/ + + +#include QMK_KEYBOARD_H +#include "jonavin.h" + + +#ifdef TD_LSFT_CAPSLOCK_ENABLE + // Tap once for shift, twice for Caps Lock but only if Win Key in not disabled + void dance_LSFT_finished(qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1 || keymap_config.no_gui) { + register_code16(KC_LSFT); + } else { + register_code(KC_CAPS); + } + } + + void dance_LSFT_reset(qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1 || keymap_config.no_gui) { + unregister_code16(KC_LSFT); + } else { + unregister_code(KC_CAPS); + } + } + + qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for shift, twice for Caps Lock + [TD_LSFT_CAPSLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS), + [TD_LSFT_CAPS_WIN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_LSFT_finished, dance_LSFT_reset), + }; +#endif // TD_LSFT_CAPSLOCK_ENABLE + +// RGB NIGHT MODE +#ifdef RGB_MATRIX_ENABLE + static bool rgb_nightmode = false; + + // Turn on/off NUM LOCK if current state is different + void activate_rgb_nightmode (bool turn_on) { + if (rgb_nightmode != turn_on) { + rgb_nightmode = !rgb_nightmode; + } + } + + bool get_rgb_nightmode(void) { + return rgb_nightmode; + } +#endif // RGB_MATRIX_ENABLE + +// TIMEOUTS +#ifdef IDLE_TIMEOUT_ENABLE + static uint16_t timeout_timer = 0; + static uint16_t timeout_counter = 0; //in minute intervals + static uint16_t timeout_threshold = TIMEOUT_THRESHOLD_DEFAULT; + + uint16_t get_timeout_threshold(void) { + return timeout_threshold; + } + + void timeout_reset_timer(void) { + timeout_timer = timer_read(); + timeout_counter = 0; + }; + + void timeout_update_threshold(bool increase) { + if (increase && timeout_threshold < TIMEOUT_THRESHOLD_MAX) timeout_threshold++; + if (!increase && timeout_threshold > 0) timeout_threshold--; + }; + + void timeout_tick_timer(void) { + if (timeout_threshold > 0) { + if (timer_elapsed(timeout_timer) >= 60000) { // 1 minute tick + timeout_counter++; + timeout_timer = timer_read(); + } + #ifdef RGB_MATRIX_ENABLE + if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { + rgb_matrix_disable_noeeprom(); + } + #endif + } // timeout_threshold = 0 will disable timeout + } + + __attribute__((weak)) void matrix_scan_keymap(void) {} + + void matrix_scan_user(void) { + timeout_tick_timer(); + matrix_scan_keymap(); + } +#endif // IDLE_TIMEOUT_ENABLE + + +#if defined(ENCODER_ENABLE) && defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality + #ifndef DYNAMIC_KEYMAP_LAYER_COUNT + #define DYNAMIC_KEYMAP_LAYER_COUNT 4 //default in case this is not already defined elsewhere + #endif + #ifndef ENCODER_DEFAULTACTIONS_INDEX + #define ENCODER_DEFAULTACTIONS_INDEX 0 // can select encoder index if there are multiple encoders + #endif + +uint8_t selected_layer = 0; + +__attribute__((weak)) bool encoder_update_keymap(uint8_t index, bool clockwise) { return true; } + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (!encoder_update_keymap(index, clockwise)) { return false; } //This is to override the default kb function and go to userspace + if (index != ENCODER_DEFAULTACTIONS_INDEX) {return true;} // exit if the index doesn't match + if ( clockwise ) { + if (get_mods() & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers + if(selected_layer < (DYNAMIC_KEYMAP_LAYER_COUNT - 1)) { + selected_layer ++; + layer_move(selected_layer); + } + } else if (get_mods() & MOD_BIT(KC_RSFT) ) { // If you are holding R shift, Page up + unregister_mods(MOD_BIT(KC_RSFT)); + register_code(KC_PGDN); + register_mods(MOD_BIT(KC_RSFT)); + } else if (get_mods() & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next word + tap_code16(LCTL(KC_RGHT)); + } else if (get_mods() & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next track + tap_code(KC_MEDIA_NEXT_TRACK); + } else { + switch (selected_layer) { + case _FN1: + #ifdef IDLE_TIMEOUT_ENABLE + timeout_update_threshold(true); + #endif + break; + default: + tap_code(KC_VOLU); // Otherwise it just changes volume + break; + } + } + } else { + if (get_mods() & MOD_BIT(KC_LSFT) ) { + if (selected_layer > 0) { + selected_layer --; + layer_move(selected_layer); + } + } else if (get_mods() & MOD_BIT(KC_RSFT) ) { + unregister_mods(MOD_BIT(KC_RSFT)); + register_code(KC_PGUP); + register_mods(MOD_BIT(KC_RSFT)); + } else if (get_mods() & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate previous word + tap_code16(LCTL(KC_LEFT)); + } else if (get_mods() & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media previous track + tap_code(KC_MEDIA_PREV_TRACK); + } else { + switch (selected_layer) { + case _FN1: + #ifdef IDLE_TIMEOUT_ENABLE + timeout_update_threshold(false); + #endif + break; + default: + tap_code(KC_VOLD); + break; + } + } + } + + return true; + } +#endif // ENCODER_ENABLE + + +// PROCESS KEY CODES +__attribute__ ((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; } + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (!process_record_keymap(keycode, record)) { return false; } + switch (keycode) { + case KC_00: + if (record->event.pressed) { + // when keycode KC_00 is pressed + SEND_STRING("00"); + } else unregister_code16(keycode); + break; + case KC_WINLCK: + if (record->event.pressed) { + keymap_config.no_gui = !keymap_config.no_gui; //toggle status + } else unregister_code16(keycode); + break; + +#ifdef IDLE_TIMEOUT_ENABLE + case RGB_TOI: + if(record->event.pressed) { + timeout_update_threshold(true); + } else unregister_code16(keycode); + break; + case RGB_TOD: + if(record->event.pressed) { + timeout_update_threshold(false); //decrease timeout + } else unregister_code16(keycode); + break; +#endif // IDLE_TIMEOUT_ENABLE +#ifdef RGB_MATRIX_ENABLE + case RGB_NITE: + if(record->event.pressed) { + rgb_nightmode = !rgb_nightmode; + } else unregister_code16(keycode); + break; +#endif // RGB_MATRIX_ENABLE + default: + if (record->event.pressed) { + #ifdef RGB_MATRIX_ENABLE + rgb_matrix_enable(); + #endif + #ifdef IDLE_TIMEOUT_ENABLE + timeout_reset_timer(); //reset activity timer + #endif + } + break; + } + return true; +}; + + +// Turn on/off NUM LOCK if current state is different +void activate_numlock(bool turn_on) { + if (IS_HOST_LED_ON(USB_LED_NUM_LOCK) != turn_on) { + tap_code(KC_NUMLOCK); + } +} + + +// INITIAL STARTUP + +__attribute__ ((weak)) void keyboard_post_init_keymap(void) {} + +void keyboard_post_init_user(void) { + keyboard_post_init_keymap(); + #ifdef STARTUP_NUMLOCK_ON + activate_numlock(true); // turn on Num lock by default so that the numpad layer always has predictable results + #endif // STARTUP_NUMLOC_ON + #ifdef IDLE_TIMEOUT_ENABLE + timeout_timer = timer_read(); // set inital time for ide timeout + #endif +} \ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/railgun/jonavin.h b/keyboards/gmmk/pro/ansi/keymaps/railgun/jonavin.h new file mode 100644 index 000000000000..e2b53eee128d --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/railgun/jonavin.h @@ -0,0 +1,85 @@ + +/* Copyright 2021 Jonavin Eng @Jonavin + +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 . +*/ + +#pragma once + +// DEFINE MACROS +#define ARRAYSIZE(arr) sizeof(arr)/sizeof(arr[0]) + + +// LAYERS +enum custom_user_layers { + _BASE, + _FN1, + _LOWER, + _RAISE, +}; + +// KEYCODES +enum custom_user_keycodes { + KC_00 = SAFE_RANGE, + ENCFUNC, + KC_WINLCK, //Toggles Win key on and off + RGB_TOI, // Timeout idle time up + RGB_TOD, // Timeout idle time down + RGB_NITE // Turns off all rgb but allow rgb indicators to work +}; + +#define KC_CAD LALT(LCTL(KC_DEL)) +#define KC_AF4 LALT(KC_F4) +#define KC_TASK LCTL(LSFT(KC_ESC)) + + +#ifdef TD_LSFT_CAPSLOCK_ENABLE + // Tap Dance Definitions + enum custom_tapdance { + TD_LSFT_CAPSLOCK, + TD_LSFT_CAPS_WIN + }; + + #define KC_LSFTCAPS TD(TD_LSFT_CAPSLOCK) + #define KC_LSFTCAPSWIN TD(TD_LSFT_CAPS_WIN) +#else // regular Shift + #define KC_LSFTCAPS KC_LSFT +#endif // TD_LSFT_CAPSLOCK_ENABLE + + +#ifdef RGB_MATRIX_ENABLE +//RGB custom colours + #define RGB_GODSPEED 0x00, 0xE4, 0xFF // colour for matching keycaps + #define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Nautilus Font colours + + void activate_rgb_nightmode (bool turn_on); + bool get_rgb_nightmode(void); +#endif + + +// IDLE TIMEOUTS +#ifdef IDLE_TIMEOUT_ENABLE + #define TIMEOUT_THRESHOLD_DEFAULT 5 // default timeout minutes + #define TIMEOUT_THRESHOLD_MAX 140 // upper limits (2 hours and 10 minutes -- no rgb indicators above this value) + + //prototype functions + uint16_t get_timeout_threshold(void); + void timeout_reset_timer(void); + void timeout_update_threshold(bool increase); + void timeout_tick_timer(void); +#endif //IDLE_TIMEOUT_ENABLE + + +// OTHER FUNCTION PROTOTYPE +void activate_numlock(bool turn_on); \ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/railgun/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/railgun/keymap.c new file mode 100644 index 000000000000..020087532d60 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/railgun/keymap.c @@ -0,0 +1,194 @@ +/* Copyright 2021 Glorious, LLC + Copyright 2021 Jonavin + +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 . +*/ + +#include QMK_KEYBOARD_H +#include "rgb_matrix_map.h" +#include "jonavin.h" + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Ins Rotary(Mute) +// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del +// Tab Q W E R T Y U I O P [ ] \ PgUp +// Caps A S D F G H J K L ; " Enter PgDn +// Sh_L Z X C V B N M , . ? Sh_R Up End +// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right + + + [_BASE] = LAYOUT( + KC_ESC, 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_INS, KC_MUTE, + KC_GRV, 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_DEL, + 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_PGUP, + TT(_LOWER), 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_PGDN, + KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [_FN1] = LAYOUT( + _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_CALC, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, + _______, _______, RGB_VAI, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, RESET, KC_HOME, + KC_CAPS, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, + _______, _______, RGB_HUI, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, + _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), + + [_LOWER] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, _______, _______, + _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, KC_TAB, KC_P4, KC_P5, KC_P6, KC_PDOT, _______, _______, _______, KC_HOME, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, KC_P1, KC_P2, KC_P3, KC_NO, KC_PAST, KC_PENT, KC_END, + _______, KC_NO, KC_DEL, KC_INS, KC_NO, KC_NO, KC_NO, KC_P0, KC_00, KC_PDOT, KC_PSLS, _______, RCTL(KC_PGUP), _______, + _______, _______, _______, KC_BSPC, _______, _______, _______, RCTL(KC_LEFT), RCTL(KC_PGDN), RCTL(KC_RIGHT) + ), + + [_RAISE] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +}; + + +#ifdef RGB_MATRIX_ENABLE + // Capslock, Scroll lock and Numlock indicator on Left side lights. + void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { + rgb_matrix_set_color(LED_L7, RGB_GOLD); + rgb_matrix_set_color(LED_L8, RGB_GOLD); + rgb_matrix_set_color(LED_R7, RGB_GOLD); + rgb_matrix_set_color(LED_R8, RGB_GOLD); + } + if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF + rgb_matrix_set_color(LED_L1, RGB_GOLD); + rgb_matrix_set_color(LED_L2, RGB_GOLD); + rgb_matrix_set_color(LED_R1, RGB_GOLD); + rgb_matrix_set_color(LED_R2, RGB_GOLD); + } + if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) { + rgb_matrix_set_color(LED_L3, RGB_GOLDENROD); + rgb_matrix_set_color(LED_L4, RGB_GOLDENROD); + rgb_matrix_set_color(LED_L5, RGB_GOLDENROD); + rgb_matrix_set_color(LED_L6, RGB_GOLDENROD); + rgb_matrix_set_color(LED_R3, RGB_GOLDENROD); + rgb_matrix_set_color(LED_R4, RGB_GOLDENROD); + rgb_matrix_set_color(LED_R5, RGB_GOLDENROD); + rgb_matrix_set_color(LED_R6, RGB_GOLDENROD); + } + if (keymap_config.no_gui) { + rgb_matrix_set_color(LED_LWIN, RGB_RED); //light up Win key when disabled + } + switch(get_highest_layer(layer_state)){ // special handling per layer + case _FN1: // on Fn layer select what the encoder does when pressed + /*rgb_matrix_set_color(LED_R2, RGB_RED); + rgb_matrix_set_color(LED_R3, RGB_RED); + rgb_matrix_set_color(LED_R4, RGB_RED); + rgb_matrix_set_color(LED_FN, RGB_RED); //FN key*/ + for (uint8_t i=0; i= 140 minutes, just show these 3 lights + rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_RED); + rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_RED); + rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_RED); + }*/ + break; + case _LOWER: + for (uint8_t i=0; i or encoder + - setting to zero disables timeout + - indicators in FN layer using RGB in FN and number rows to show the timeout in minutes + - LED address location map as enum definition + - LED group lists for arrows, numpad, F row, num row, left and right side LEDs + - default startuo in single mode with default colour + - Capslock, Scroll Lock, and Num Lock (not set) indicator on left side LED + - Layer indicator on right side LED + - Fn key light up red when Fn layer activate + - Win Key light up red when Win Lock mode enabled + - Layer 2 activation lights up Numpad area + +rules.mk OPTIONS - Active features from userspace +STARTUP_NUMLOCK_ON = yes + - turns on NUMLOCK by default + +ENCODER_DEFAULTACTIONS_ENABLE = yes + - Enabled default encoder funtions + +TD_LSFT_CAPSLOCK_ENABLE = yes + - This will enable double tap on Left Shift to toggle CAPSLOCK when using KC_LSFTCAPS + +IDLE_TIMEOUT_ENABLE = yes + - Enables Timer functionality; for RGB idle timeouts that can be changed dynamically + +## All layers diagram +Default layer +![image](https://user-images.githubusercontent.com/71780717/124177658-82324880-da7e-11eb-9421-b69100131062.png) + +Fn Layer +![image](https://user-images.githubusercontent.com/71780717/126086069-bc539ffc-3ab6-4ebb-9bef-5005f8add294.png) + +Layer 2 (Caps Lock Mod) +![image](https://user-images.githubusercontent.com/71780717/124177683-8b231a00-da7e-11eb-9434-e2475f679a54.png) diff --git a/keyboards/gmmk/pro/ansi/keymaps/railgun/rgb_matrix_map.h b/keyboards/gmmk/pro/ansi/keymaps/railgun/rgb_matrix_map.h new file mode 100644 index 000000000000..4be00d3f03f0 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/railgun/rgb_matrix_map.h @@ -0,0 +1,148 @@ +/* Copyright 2021 Jonavin Eng + * + * 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 . + */ + +#ifdef RGB_MATRIX_ENABLE + + // Custom RGB Colours + #define RGB_GODSPEED 0x00, 0xE4, 0xFF // colour for matching keycaps + #define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Naurilus Font colours + + // RGB LED locations + enum led_location_map { + LED_ESC, // 0, ESC, k13 + LED_GRV, // 1, ~, k16 + LEB_TAB, // 2, Tab, k11 + LED_CAPS, // 3, Caps, k21 + LED_LSFT, // 4, Sh_L, k00 + LED_LCTL, // 5, Ct_L, k06 + LED_F1, // 6, F1, k26 + LED_1, // 7, 1, k17 + LED_Q, // 8, Q, k10 + LED_A, // 9, A, k12 + LED_Z, // 10, Z, k14 + LED_LWIN, // 11, Win_L, k90 + LED_F2, // 12, F2, k36 + LED_2, // 13, 2, k27 + LED_W, // 14, W, k20 + LED_S, // 15, S, k22 + LED_X, // 16, X, k24 + LED_LALT, // 17, Alt_L, k93 + LED_F3, // 18, F3, k31 + LED_3, // 19, 3, k37 + LED_E, // 20, E, k30 + LED_D, // 21, D, k32 + LED_C, // 22, C, k34 + LED_F4, // 23, F4, k33 + LED_4, // 24, 4, k47 + LED_R, // 25, R, k40 + LED_F, // 26, F, k42 + LED_V, // 27, V, k44 + LED_F5, // 28, F5, k07 + LED_5, // 29, 5, k46 + LED_T, // 30, T, k41 + LED_G, // 31, G, k43 + LED_B, // 32, B, k45 + LED_SPC, // 33, SPACE, k94 + LED_F6, // 34, F6, k63 + LED_6, // 35, 6, k56 + LED_Y, // 36, Y, k51 + LED_H, // 37, H, k53 + LED_N, // 38, N, k55 + LED_F7, // 39, F7, k71 + LED_7, // 40, 7, k57 + LED_U, // 41, U, k50 + LED_J, // 42, J, k52 + LED_M, // 43, M, k54 + LED_F8, // 44, F8, k76 + LED_8, // 45, 8, k67 + LED_I, // 46, I, k60 + LED_K, // 47, K, k62 + LED_COMM, // 48, ,, k64 + LED_RALT, // 49, Alt_R, k95 + LED_F9, // 50, F9, ka6 + LED_9, // 51, 9, k77 + LED_O, // 52, O, k70 + LED_L, // 53, L, k72 + LED_DOT, // 54, ., k74 + LED_FN, // 55, FN, k92 + LED_F10, // 56, F10, ka7 + LED_0, // 57, 0, k87 + LED_P, // 58, P, k80 + LED_SCLN, // 59, ;, k82 + LED_SLSH, // 60, ?, k85 + LED_F11, // 61, F11, ka3 + LED_MINS, // 62, -, k86 + LED_LBRC, // 63, [, k81 + LED_QUOT, // 64, ", k83 + LED_RCTL, // 65, Ct_R, k04 + LED_F12, // 66, F12, ka5 + LED_L1, // 67, LED, l01 + LED_R1, // 68, LED, l11 + LED_INS, // 69, Prt, k97 -- remapped to INS + LED_L2, // 70, LED, l02 + LED_R2, // 71, LED, l12 + LED_HOME, // 72, Del, k65 + LED_L3, // 73, LED, l03 + LED_R3, // 74, LED, l13 + LED_PGUP, // 75, PgUp, k15 + LED_L4, // 76, LED, l04 + LED_R4, // 77, LED, l14 + LED_EQL, // 78, =, k66 + LED_RIGHT, // 79, Right, k05 + LED_L5, // 80, LED, l05 + LED_R5, // 81, LED, l15 + LED_END, // 82, End, k75 + LED_L6, // 83, LED, l06 + LED_R6, // 84, LED, l16 + LED_BSPC, // 85, BSpc, ka1 + LED_PGDN, // 86, PgDn, k25 + LED_L7, // 87, LED, l07 + LED_R7, // 88, LED, l17 + LED_RBRC, // 89, ], k61 + LED_RSFT, // 90, Sh_R, k91 + LED_L8, // 91, LED, l08 + LED_R8, // 92, LED, l18 + LED_BSLS, // 93, \, ka2 + LED_UP, // 94, Up, k35 + LED_LEFT, // 95, Left, k03 + LED_ENT, // 96, Enter, ka4 + LED_DOWN // 97, Down, k73 + }; + + const uint8_t LED_LIST_WASD[] = { LED_W, LED_A, LED_S, LED_D }; + + const uint8_t LED_LIST_ARROWS[] = { LED_LEFT, LED_RIGHT, LED_UP, LED_DOWN }; + + const uint8_t LED_LIST_FUNCROW[] = { LED_ESC, LED_F1, LED_F2, LED_F3, LED_F4, LED_F5, LED_F6, LED_F7, LED_F8, LED_F9, LED_F10, LED_F11, LED_F12, LED_INS}; + + const uint8_t LED_LIST_NUMROW[] = { LED_GRV, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, LED_BSPC, LED_HOME}; + + const uint8_t LED_LIST_NAV[] = { LED_HOME, LED_PGUP, LED_PGDN, LED_END}; + + const uint8_t LED_LIST_MODS[] = { LEB_TAB, LED_CAPS, LED_LSFT, LED_LCTL, LED_LWIN, LED_LALT, LED_RALT, LED_FN, LED_RCTL}; + + const uint8_t LED_LIST_NUMPAD[] = { + LED_7, LED_8, LED_9, + LED_U, LED_I, LED_O, + LED_J, LED_K, LED_L, + LED_M, LED_COMM, LED_DOT + }; + + const uint8_t LED_SIDE_LEFT[] = { LED_L1, LED_L2, LED_L3, LED_L4, LED_L5, LED_L6, LED_L7, LED_L8}; + + const uint8_t LED_SIDE_RIGHT[] = { LED_R1, LED_R2, LED_R3, LED_R4, LED_R5, LED_R6, LED_R7, LED_R8}; + +#endif diff --git a/keyboards/gmmk/pro/ansi/keymaps/railgun/rules.mk b/keyboards/gmmk/pro/ansi/keymaps/railgun/rules.mk new file mode 100644 index 000000000000..a6b64334558d --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/railgun/rules.mk @@ -0,0 +1,32 @@ +VIA_ENABLE = yes +MOUSEKEY_ENABLE = yes +BOOTMAGIC_ENABLE = lite # Enable Bootmagic Lite + +TD_LSFT_CAPSLOCK_ENABLE = yes +IDLE_TIMEOUT_ENABLE = yes +STARTUP_NUMLOCK_ON = yes +ENCODER_DEFAULTACTIONS_ENABLE = yes + +LEADER_ENABLE = no # Leader keys +COMBO_ENABLE = no # Combo keys +TAP_DANCE_ENABLE = yes + +LTO_ENABLE = no # MCU has 256kB space - 4kB for the EEPROM. + + +SRC += jonavin.c +ifeq ($(strip $(ENCODER_DEFAULTACTIONS_ENABLE)), yes) + OPT_DEFS += -DENCODER_DEFAULTACTIONS_ENABLE +endif +ifeq ($(strip $(TD_LSFT_CAPSLOCK_ENABLE)), yes) + OPT_DEFS += -DTD_LSFT_CAPSLOCK_ENABLE +endif +ifeq ($(strip $(IDLE_TIMEOUT_ENABLE)), yes) + OPT_DEFS += -DIDLE_TIMEOUT_ENABLE +endif +ifeq ($(strip $(STARTUP_NUMLOCK_ON)), yes) + OPT_DEFS += -DSTARTUP_NUMLOCK_ON +endif +ifeq ($(strip $(COLEMAK_LAYER_ENABLE)), yes) + OPT_DEFS += -DCOLEMAK_LAYER_ENABLE +endif \ No newline at end of file From 4dbd6fb5e36b215d14b496a9fe8bc20d840735e2 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Wed, 8 Sep 2021 23:31:56 -0400 Subject: [PATCH 008/155] Initial commit, in progress. --- .../pro/ansi/keymaps/solartempest/config.h | 69 ++++ .../solartempest/gmmk_pro VIA layout.json | 367 ++++++++++++++++++ .../gmmk_pro_ansi_solartempest.bin | Bin 0 -> 36500 bytes .../pro/ansi/keymaps/solartempest/jonavin.c | 253 ++++++++++++ .../pro/ansi/keymaps/solartempest/jonavin.h | 85 ++++ .../pro/ansi/keymaps/solartempest/keymap.c | 194 +++++++++ .../pro/ansi/keymaps/solartempest/readme.md | 53 +++ .../keymaps/solartempest/rgb_matrix_map.h | 148 +++++++ .../pro/ansi/keymaps/solartempest/rules.mk | 32 ++ 9 files changed, 1201 insertions(+) create mode 100644 keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h create mode 100644 keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro VIA layout.json create mode 100644 keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro_ansi_solartempest.bin create mode 100644 keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.c create mode 100644 keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h create mode 100644 keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c create mode 100644 keyboards/gmmk/pro/ansi/keymaps/solartempest/readme.md create mode 100644 keyboards/gmmk/pro/ansi/keymaps/solartempest/rgb_matrix_map.h create mode 100644 keyboards/gmmk/pro/ansi/keymaps/solartempest/rules.mk diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h b/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h new file mode 100644 index 000000000000..ef211e1334e1 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h @@ -0,0 +1,69 @@ +/* Copyright 2021 Jonavin Eng + * + * 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 . + */ + +#pragma once + +#define TAPPING_TOGGLE 2 // TT set to two taps + +/* Handle GRAVESC combo keys */ +//#define GRAVE_ESC_ALT_OVERRIDE //Always send Escape if Alt is pressed +//#define GRAVE_ESC_CTRL_OVERRIDE //Always send Escape if Control is pressed + +#define TAPPING_TERM 180 + +#ifdef RGB_MATRIX_ENABLE + #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_HUE_WAVE + #define RGB_DISABLE_WHEN_USB_SUSPENDED + + #define RGB_MATRIX_KEYPRESSES + #define DISABLE_RGB_MATRIX_SOLID_COLOR + #define DISABLE_RGB_MATRIX_BREATHING + #define DISABLE_RGB_MATRIX_ALPHAS_MODS //Remove effects not desired + #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN + #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + #define DISABLE_RGB_MATRIX_BAND_SAT + #define DISABLE_RGB_MATRIX_BAND_VAL + #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT + #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL + #define DISABLE_RGB_MATRIX_CYCLE_ALL + #define DISABLE_ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + #define DISABLE_ENABLE_RGB_MATRIX_CYCLE_UP_DOWN + #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN + #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL + #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL + #define DISABLE_RGB_MATRIX_DUAL_BEACON + #define DISABLE_RGB_MATRIX_RAINBOW_BEACON + #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS + #define DISABLE_RGB_MATRIX_RAINDROPS + #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + #define DISABLE_RGB_MATRIX_HUE_BREATHING + #define DISABLE_RGB_MATRIX_HUE_PENDULUM + //#define DISABLE_RGB_MATRIX_HUE_WAVE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + #define DISABLE_RGB_MATRIX_SPLASH + #define DISABLE_RGB_MATRIX_MULTISPLASH + #define DISABLE_RGB_MATRIX_SOLID_SPLASH + #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH +#endif diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro VIA layout.json b/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro VIA layout.json new file mode 100644 index 000000000000..40a86c5ba5c4 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro VIA layout.json @@ -0,0 +1,367 @@ +{ + "name": "GMMK Pro", + "vendorProductId": 839864388, + "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + "layers": [ + [ + "KC_LSFT", + "KC_MUTE", + "KC_NO", + "KC_LEFT", + "KC_RCTL", + "KC_RGHT", + "KC_LCTL", + "KC_F5", + "KC_Q", + "KC_TAB", + "KC_A", + "KC_ESC", + "KC_Z", + "KC_PGUP", + "KC_GRV", + "KC_1", + "KC_W", + "TT(2)", + "KC_S", + "KC_NO", + "KC_X", + "KC_PGDN", + "KC_F1", + "KC_2", + "KC_E", + "KC_F3", + "KC_D", + "KC_F4", + "KC_C", + "KC_UP", + "KC_F2", + "KC_3", + "KC_R", + "KC_T", + "KC_F", + "KC_G", + "KC_V", + "KC_B", + "KC_5", + "KC_4", + "KC_U", + "KC_Y", + "KC_J", + "KC_H", + "KC_M", + "KC_N", + "KC_6", + "KC_7", + "KC_I", + "KC_RBRC", + "KC_K", + "KC_F6", + "KC_COMM", + "KC_HOME", + "KC_EQL", + "KC_8", + "KC_O", + "KC_F7", + "KC_L", + "KC_DOWN", + "KC_DOT", + "KC_END", + "KC_F8", + "KC_9", + "KC_P", + "KC_LBRC", + "KC_SCLN", + "KC_QUOT", + "KC_NO", + "KC_SLSH", + "KC_MINS", + "KC_0", + "KC_LGUI", + "KC_RSFT", + "MO(1)", + "KC_LALT", + "KC_SPC", + "KC_RALT", + "KC_NO", + "KC_DEL", + "KC_NO", + "KC_BSPC", + "KC_BSLS", + "KC_F11", + "KC_ENT", + "KC_F12", + "KC_F9", + "KC_F10" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "RGB_SPD", + "TO(3)", + "RGB_SPI", + "KC_TRNS", + "KC_MPRV", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_HOME", + "KC_TRNS", + "KC_TRNS", + "RGB_VAI", + "KC_CAPS", + "RGB_VAD", + "KC_NO", + "RGB_HUI", + "KC_END", + "KC_MYCM", + "KC_TRNS", + "KC_TRNS", + "KC_CALC", + "KC_TRNS", + "KC_MSEL", + "KC_TRNS", + "RGB_MOD", + "KC_WWW_HOME", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_PSCR", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NLCK", + "KC_TRNS", + "KC_TRNS", + "KC_SLCK", + "KC_TRNS", + "KC_TRNS", + "KC_MNXT", + "KC_NO", + "RGB_TOG", + "KC_TRNS", + "KC_TRNS", + "KC_PAUS", + "KC_MPLY", + "KC_TRNS", + "RGB_RMOD", + "KC_NO", + "KC_TRNS", + "KC_MSTP", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_F14", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_F13", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_CAPS", + "KC_NO", + "KC_CALC", + "KC_NO", + "KC_TRNS", + "RESET", + "KC_VOLU", + "KC_TRNS", + "KC_TRNS", + "KC_MUTE", + "KC_VOLD" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "C(RCTL(KC_LEFT))", + "KC_TRNS", + "C(RCTL(KC_RGHT))", + "KC_TRNS", + "KC_TRNS", + "KC_HOME", + "KC_TRNS", + "KC_LEFT", + "KC_TRNS", + "KC_CAPS", + "KC_HOME", + "C(S(KC_M))", + "C(S(KC_B))", + "KC_UP", + "TO(0)", + "KC_DOWN", + "KC_NO", + "KC_DEL", + "KC_END", + "KC_TRNS", + "KC_TRNS", + "KC_END", + "KC_TRNS", + "KC_RGHT", + "KC_TRNS", + "KC_INS", + "C(RCTL(KC_PGUP))", + "KC_TRNS", + "KC_TRNS", + "KC_PGUP", + "KC_TRNS", + "KC_PGDN", + "KC_TRNS", + "KC_NO", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_P4", + "KC_TAB", + "KC_P1", + "KC_TRNS", + "KC_P0", + "KC_NO", + "KC_TRNS", + "KC_P7", + "KC_P5", + "KC_TRNS", + "KC_P2", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_PPLS", + "KC_P8", + "KC_P6", + "KC_TRNS", + "KC_P3", + "C(RCTL(KC_PGDN))", + "KC_PDOT", + "KC_TRNS", + "KC_TRNS", + "KC_P9", + "KC_PPLS", + "KC_TRNS", + "KC_PENT", + "KC_PAST", + "KC_NO", + "KC_PSLS", + "KC_PMNS", + "KC_P0", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_BSPC", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_PENT", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_F22", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "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", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "TO(0)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS" + ] + ] +} \ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro_ansi_solartempest.bin b/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro_ansi_solartempest.bin new file mode 100644 index 0000000000000000000000000000000000000000..3481afb8006b1bdc0cad4b34feceaae578623dd4 GIT binary patch literal 36500 zcmc${d3;pW-9LWrGD{Z7WC21FV3G+iVFCt%8Wwe!2{+4tL6H^#>i{kjuw@XngSIsg z)QD11Xv?B)G-$O{%M8X6bessZ)~f9cOPzpASmX*RdWQt&CX>wlz0aKqQhlE9^Sqva ze(*YT&-yu^vwya8LU>~QfF=45{}*oLvj1Ja{|?q?ZlaICX;u^cNVth`v)~rM{dZ-) z8$a#A|9#%?mi@nk>w(+P;hu$i8LkcP{{n}WS@(ay{aFps{}}H6x29D$bnBZc@SB3) zn=k8c`Nu`V=$+P!gnR^d^W~|l6ET7Ax@Q92tDd1L?H47aG$r#6rqoG+>Y)nml?X$L-fmt%2)+ZL!jJzt8SCdzp@7Q6xF>nh~ zZE&(kj3a7tugas5N&u^PAZJd_+&|j5jlC8 zZ^K6aSJE@Y)YzTbWEPsMh*2XMl(?vo{vIb^#6?2px7D_h5`BP}3j%eLG8wLnNa_1t zkLc5Xe2)KzPFm3anap>7c8)did)!s-DiYu(xZlj`u%2f$uj_arO)!Q=3PxeR%r8b8 zSH5A(4e`^t2}WV0a4~$_==;5#C)KmVrVkY7YJ=&W2AR1jQ)aH&V$+72ZP5@hy5DhE z-8Q;Q+?GduB(Oo4b)In9636{GWSu_i2>N)274HA9uXVcraM_g1{}B(v^b3d6r)aL^ zR!!9@(L?Hs?rc8*Wz@GrZc`tfn0{?uh@Z3M(i1->&e} z@`H7_tMsi(G^{AmK1J_mjDSzvty*D-phRVb7aF|3Xd@G^4>D45|9V~8v8j$+4{O$h znX-0YuA7lo$fa0wZa*XC^fzi#jv3JxFAdyGfBUI_%fQznBWe5ps^gDYFV-1|w4v`y z#0fSvQ}Z=Ki-h`|@4$E{FwQ#;8Pdl`{z6J?~2~ z$E!qR@y`&tXWr*xsW+uI+tVm9T($EG$lqPhBVvwp#Lj_bv|0w@s7c-Zza-?dud(&Rxtkk3})5fe7YXL^kQe`sW-xk|#n82+lHeAwYjDe1or{`2u4tE*9imgNabVH)B(46DZXUNg1IT*Df4nNh1*l+zjDi*M)tYWg zrWId-H<(hDOd0*XlRaykoLd8EVIrl~O^^@7srqp3uiw4bTDENZfde)4dlr@7jF zL~7~VrIsQcrEMHa(7a0YaDb_i#SzGBPv%vkL8Y$eVYf!w)Hj&xGhmn4m){!D`xCx? z?9SP(>~8KHM=~(q_qM$tvt?_%E4)OS80Q5>Alr!a)d1OU6xcnqHcry|X&ganw@7^> z<77Kp7qDR%*46US)N4vVQsFmnn6@%Z<$`tc`OoZ=aFQ(c|SXMNMI(MJT~Z z!DQ%%YRiapsGpua!o^n&8Y!)h!r-N!?5}8L3N^rFw^AbT0*8I51m_GVEr{tc8!G%X zq(pzL5OXw`NO8g+N&4>_Am*;5za9QBlm4x7V*VoOPwgY-j^J+3V(;wBi{?LXD+s2B z-@LT1E-N_u^5^#FZJ9wcYM8G44SVupq-P+03BKJSMtWM7L?zm+(DNpz?=Ad3Ba7j=k)nlVd8I1XS+>By!f!)taf`Q;LBmS$GA#PC8Nku(yc!5*$@VAZc?P!!&Ikv3dzPt=7lsOTQmWpF z^YRAlcNL-KIOm3jnmsQU5b1;7Qh}Lztw1Jz9lXoP+@O&b^j`2qMb^S6bNpStAaYki z_TIB1Z()MW)YD>-K*nat>`fha)aY^q?NKtZ128nw)L!NWSuC5Ok7=&W0yX_L`edE* zp$J-k-IKonzfh<|y#Yf0H~6jn9)6nd;P>!<;MXmGi(iX}jAf@DzvEUNA7Pkp@jD}b zi{Eljx^MybP5vH!oIp|v0-V4bcj!k4*s^S_-^KcZ0Hts!pF!y(y7~s!WDI_H6CH5SNJkXg zMFVyYw@hPFv99QT^tV8xc_{K4l>@p(N9QBuQk+QsWZp&ceB)Q*1~o^9V%OCitwN47 z$nnQyjvBej_=(7kIpJ%z3=NNRFhZ`2la?w*uMuX`sPCD0V%M3AR;MD*%kcv` z>oMBuhmpso%s2iUt)(g3;&xs6G1}T6BjsA9%J_xIjyddWo^YZA?O+f4bQ9EeaEx)A z+K#q(khTLU>;yin)`N5Cx9_4Ah#P)Y+^%;ME%+QQ(4z(O{Ca;yt45_JM=Ql`X6*kJ z*#EZ$u=Zy1=)qmSZgHA9Jut5@6|3Z2K;LS{eDNe(bM{?5_DUM_(`3wNh?#hr!-}Q?C(z2+o7NV| z$hZmg>_{n#WRd0gzlXd}Zp8l(nZ(?P|63UvdVwM1&x#Z-N{!2wq>S9ab<7#xue?9- z4%SeH^KfPxkw&3EH^u23el?!iNuT;TW2?G#*-h{pJAdW95jdyCt>;ro zyHAPQls}8iq)Q>}#>qJB!|~U}Nys%kJ`e4fuDpUAyMmX+QC@aZb9kO`8sX=|I7=se z9h_F09;oZ-n@3M^UiyRD54+-<#GD@MszcrDOu8Urc|3GC#wZ1I{h5IVact7RcHm*r zEcC%$6gz!my^Q3HG18R&RX9o7V!af?qvjBq_-N0)e>&7{Gc=HcKJdU~oArP%M>3Gn zfeboR?Wm; z#!WrblaLRnkO7q=eXR5sABDa73haY`Z9lIe>3}^1ur+|)+?y|ENo>ZafcjkTF#P_m zHw(YF_GXA@>0B!wtL_-i-ZH@y+gh8gjZB(hs7Uw_eZ8> zTs?~K56lzt)tX4|SYtIo(LvRj!ZaLXRr7mUC>OC%%a z>mOw13O%Mo$Gn?OX-HQ~6WM$O`#(wU|2gXZ|9EU3X58$4m$wBp32UTq>3&}3r)%k- z>Pb@?WA{+Hi|!1+Q1==l1>YImD}J7gd0&m8G;?)7{aw(HH3#<;Tw6aQeGyCSQUm)b z$9P!{DbcgogNRh6!cd|Y1MS`16n6SS-;fCf7$a8F>GJb)^7Hd`y4?KyT*;ChYq+Yzxu#rE!YDoub(oSgJLlVw`75)B2`?@7?IEM$3C`@cPJA$-Ki zD=UzVxD%y*6(E5}KwDBtNCb2R3pzO0u0*?%@oE^*PhS;Yi13Lk@T&OIj9Xs&#t)%N9#}rXoa=rCn_aTz%AYE2+*q2*LiZ!0XKEB)DO}LfTY%4Q$ zrIjnC626Ne%7^|OZK5zJgtS_e<+5A3E;~oCI&^$?rC!K}WbTxeh16oBm6>d?b0zJ* zo)Dd9wCtMJA&%E&o{aXSqy4(#(RKl~ozQ*h(;Q`H%7@8Vvw$)5GuzErA=Y?QTs=1Xy@|NRIU9Wyua(yo{S3i}SkeI_Pi zb|NM$x?58mDK{5*Qs$O>T5Kfb_G`KhaSPzBk zcPY{OcS+#42p2k{tvl9c;apA)?eN&Vqie_9oaGra7Zl}BCwrc?F&KTxpX(x4S! zVy`i@*@}ajt^@oQnQ33@d3yG!&=#4r50j@Do}N7-^rGjrwilaH@}BhVEir_*uT80D zik5ZjGPkd8S&MIW%WCjD0~|elF++bFV5VS4U_THkE?46TTHme_9^3QsoZU?r-!klV zuGi&s`rT}Fm3UTo{^V(u`383LzXf6;(!Ux&2X_K%_v5pP^v{M@JY*7)K5Tfki{qNt z?)2?N9w~)f{B47!sVzb>T%k3y+XO@C(Kg1kyjy2z241Vxz44ZTmbJTAlW}E&hGN;c z32ojaGsaD_9^Vw>K9n{EQ5&ID_cq(8V6^S$)jxOWJo%oVSHEp52ocP!-^b~`$4ofr z8{07yZOmYq2_<1ek9$>7@DFN#j}F}|d?b=n}vigvS)x~c`ziyqa4H@L} z_NQmFp1QxUF_y&V31CTMWB7@R7cKc4bpMDA%s!WkLhcY_eJ(*l!R{- z$Tj|80@|=p%i80*AxA+;vZ+C7!tT{i1W))5c5_+G6gt0luYObv>w*brTs7^<+k2JhJ@EzDGw6J! zYl_ZUx~`-vd>ieF=D4K}yqnQ-vqtc!+*pEVn~u}kkUXuKpb~wh-!x}>r^?msZdCa> zGU1Xsw`O`Kd(bEMZ?;_sE-RpGWTP!Dm^*j6oBI%}JbgA+`A69Iz*7!<3Vw8Uf0pA0 z_qFa(&O4k(MZT*YqjE>Q!CUU(yAHCq$>ro0toonymwOU3soY)Wnc-=)oeSx(zDeNf zw$Qe*Nq+6pKFHU=Lk)&?ZHX{s!Y)qAYfGeU>7^&k`@~(9Vo>)O&@VcKNPvcM@_Gyi zQ)$^?oVIp8q}&b6I-4fw>|W2!cN=i7k87jpR7TA^7JAyd8wlk%KvAPLXVrMdsGghn z{X761JT!lrT4$ceV9#}52}2f6Pg4V8XgWi+B3Jy0a_QeGr-rX8N5g~VzMEH1%U+e2 zh6nQ|{E0eJ5q~u;qOHBvbE{6@sy(Wy&Gf9Zu|b0y(s{@N678n>q04dPdGfrFXd>;T znnvRdI75fj=6kX{L*``LhtwKfS)OcrdM)S9@=Wn&+c`HYZBg{l3Vf~@U6kr$r5exx zwEYx+I#v|7@8XoI;sj~s(Udu}&bKp#sP(nj*5sHf(esc?P-xh%-=G9R#%gaik4qt+>9^Y~J4gu$Y zXdxHj(Fl(~SVFh};o%5VUDwyi^r12+7U_V@N~dKd`X`J+f^Jo!djgCw6giIoYgYPL z!Kv<~PVdh_f99&=!%FXcC*FYgt0htT)_61}MyY;HHFRH~Kf>7YzeW#yt&VBtcq%tf z%-)2wYS5q1^3l3CDXg?h22TZ!vl}Ikp(NGYKemTRju@SbZzyE^7czNvrf_H96MgeQ z-8J@&l$n)}+Zu$Mg4cr@+^J)Zfe-0>{JdU!*+<6KNle=C^Jy98pb~vg$%QW`0IIcU zvzMM#%yT%2=iwx7W~KWStHcm`jFq?~F4$0KI^j`qX)bNr7*kP$Hc1F_J6B zl@^4VYcKff&O12$#5?;MV;_c?>(j3Bg*LR&vm7U48EU{BvtEJA@6Lv#JRU8NGtxES zd48v^uX#%993s8Y&q~h@n6QiLf~@rPfYGf|40Z8n&bzAb84@s~&kNv2!6kYhe1M}| zHV}7J!DCd;Po!h=o=eS;yOtf^bE%=OL3*;`3v*UDVD^N6Z%z&GGP^*5@Up*9pznTsU#UyQ@2UNLo~FuY#rBE@a5_H$W&RX6 zzceC?_MYm>$5g+y$5`0_ACq&idmXVdv?lQU9Mvyy-MMyaPrCK>@8R7o)?Vx(TSY2S zY);}}?IE`ZtTW@BA*Fui&t}4S!hYbki zU!7P}r8qk}baRj1>Y?%zQ!raHWatB@jk(}{-Bn}NynMz*u?YEY*Udn_!@B99dJGvC z#8Hk#o@b%crtoMf(Rf zp;R?wMcM>}bXP)?5t;^f3XbA?7LM-IB`Q8Ttk+ydUosxjt|+8zJQ<1IoyO&sj6dS`z;NiZyku%t1yAr5{g#{dE8YT=JKE3Avmx9r~e69 zB4FrSjYaEW3&ns7&)~LOjhNBAbgDmLAw}`7XicA+R=j{(brn#G^Q^+mq`K-$Asuw8 zG~TYpgR4%)SNLaQU!r@{#B;KJY~2s#!ZNL}uwaN_4JK;C{;W4i87Um<)c0{cg@R3} z7Is1M_j3Pha-NkGZvak8bh|R5+9bRv%#(S`Ed{1vk(9wuPAH|m5W2v_y1b((eepIQ zQ(k#Kh1Xjk&FlRt^h0?pN#L|u0l&e3YAmGO%VUaG)@+9Us*x0bDGuUDM`)9hQcFzp zo!QO5n`RvJ6KR?%DT+r=fNuRO`kD51Su0Mb;*ZZUl^@G#){{QwRmv?lDQTs0 zXz1J`fqBg=3`BdtH{jeUCdH7v{(<}Z7EiqsR%gzVb-VA^*6?UqS`p;Gay+`P*9cy* z%s&VpV+!3}#vHAXAq*2Bmw;suEA_?FFb_?TQ>1`)W~ID--mDMH{)ozaF;j)C0BaWYg22oJbKR-TlZl@jFV{IJ+X^YgYUSgF`f_~ zrRxT6I&k<0*3Arj|B3G~wO-A!9KdVPlVp9|F$2O@{bkgpIW`3TN6k_Pg^`B*i@j;J z`ebd_1!!#zK3dnmMaK9!99;vnp2L7Y6W=5FN@h?cAtm~hVzrex!fw4kqT2N|f+f9Z zrYXNbipjCf9TB_Ll!uVgYvz&ix-!aMKfT|Zw|4Q` zZ2KY~vDAeoI4F;D(X0)T36bNZXonjRj3?C=k_neT716>iy}W@Bk&=_2k;0LyKSwKB zgpMDNqK#X6HEP-s)Oh>qpxR1OB7gcJZ6))8k1x@Mdn%a1b=HL*<9UWGbib>%aY!}e zDU=w7alfUu5mFn3S%$Xp^^isl@ys_Otl`i;Iv40T(YDh0`C4C!=swU=$!+RM4O_VUiHy_$JjWzr1!$7W(` zai4aZRxe+@@Vt&o4bFAsHnGyfeRE(NHDj-%Hp{cwHu2LRoY!z^!5TH~zP@Ut5zEcN zDmC@CPfvMTz#SE#ZA3>U{m=@Zb-8Xra=uOZx4aRf=e`o|IycI-S%811mY%Q#{ zXJs)lu3HbvH9rf#rkBv7m&L-X>U#aEx^4u_TjFHWAWY-x8xT_+Cld!_oU74GsO34- zqCqXc{4Z-MLZ7Wm&PCeSbgVwcdZK+!$1DW@M{q$n4R+0J=avS(HrqYu=vw^l7*iVc z^}dujDc};8_R-%T!N!D0i~Dr&FT{HJW1q%R;H3Ns?A!FD6YeWGnbTWw3RkomVXg3@ zkB^YM_)DItRIXua+F~<=QfoIYx?q3Z_kt}QdYMN6wFGc)>4SDdT8~hLpA^SL4d~n( zfxC>ozD*(0y?tpnr_D*P(~P}NX7i_cKd?XPqxf9gr!nUSGy*&I9a{vn#Zp+*$-s%0 zRdE7tqapA7>!Q(h%%p9BQFErdwgzAaY&sYr%eMw9&kIuwWW*vrZ$VgeqJSdtHQ-~xOhQA3$kiT)D(C-}&=()r*V|0^%AtZe=;fcE*a7SHF!@NAFPx1y}8z_J#Xh4%2{FWrG`7t z96opJDe-o`^XS2D>tveJEwVxf+;MeW2K$!cL~)~M@|UW<8C)x9W^gsIu;PWB!|9F# zOE%iFg74i1Ylpb2?a@*`JZP=-P@q_1NJ7p~8qgUrn~eP`d|Fp(^8LER8x zgU@j61I%4&f#fXsOLs;g&H04VSx_>x0d`?j*Y6C_*^Tl_b3sY^VC;hdCHh%_QfNGA zj9Tx9psJft_BExpfQSBqxgk>+3p$OLn3PuvR_U86XF)o=3fdVqrdu%9OY?3~czFbR zTyCVHUsGx;gAa|9*>rX?d)--43m-|<%1ruYQC4kvbCNaH6};*j4jXADnhCn`27!#9 zF_N*o(xqcF!prrv7CM$}jH@(P-sc@IXB#Nqv|oGQ{VG4RiMBFFVQ)Gu%6_WFBP7jn z+!fTNA3g56MVE%(!`jrNVHcJBwMR72uP3Mx7X8nuV*u%!b&YB}b4np&m2nI#J965z zMpcLOE9TeC&V117M}b{LWOl+%eaj_S!|DTC;{}mgR9G=WR8FQb4-2KuG1c28mNPBA zdnxr<;Y+0dL(!T?2Tb)QHFc`#v=ciLI5gI3aFB?{w!`LD=jHJ57^4#XGoTrg&=|lN zW1Q5WME`gN292XI+4b6u4j)$5(`4U2IX4@MMjB~G&Z ztiMDQ{y;=wY0MmZt=$1@0bTKdZe7tqXazs;Y0V?S`@)J@pP7-9t0m9+f?_IeOaLqB z2~@1Cd&M*%Qz#M&pmoc`J&Qu27cqrGj*usuM}K(0b8Ohd6!LpO_XQYpSt}E6_m%ng zT#DZLLco@ypK{oz6fwmuxwjh*c2{W*cGq#)IAeE0#;EC7G5WA?t4-=~jy@wQC2a7% zf-}C$qF(r1+_0x~a;k&boGoXT?a13CLn6477?1m)FCf4k`l$>fzINI_^iGHXyLRBQ zIjx#>&0>i0S^4%W<^KCpB#O^Nzb$Hy33E=zoVf=W(d{g zs<5aXAXa|jPC*X#L)e1=S8f#vxTt*XO>WLzu3ZB3 z#SUjOZsNIU9q;)<-nDsr?RHq$eIY-;hws|J?;>Y>yY+k|M?b9TPF4G~EQ5<_790>L zCuhceqGhRn!Kypy+c;Yn-WOS#k+51&>4Rr-HX;R+y>K3fmUN`lxPbi z10%16OcwqZ;GdiH{|5fY;HPrebm)5$EkQdVP2IF-*`#vdzRbjLu{pHQ<$E++W})A3 zYvR%`*Q^(s1l<;X$7$aVn>M_3QldRWsNVA#-Of`>wxJbyHdF9A#~1QPd-9>NGnb`C z7>%YYjSC6f7E-9$acAF?-8*bK;Yp6L#{elX$=W1OAgN%j6zD*&Zr3!li@pARk=vQ_ zEUX36xGlet7nX55a`PH}hu4l0euH(kGjE5Fu4xh@Weq<4bGYF!FrqeP`*SkiuHV54 zDUo!N2AhTS2$Q}C^8cC;NZpp@do|hXX5=g>13t4- zB1}q)_!at<&Xv!Sear}KEtL-4fxZmUeoclK&_2J8_HFkp-ZQ%P3)#~!U+rU!u#0T= zobl07rhOgsT=p%SL`V91+TY`0b3ogV5!cXq?R4bn>N)NE-Bo?9TK%lcfi89>=8iu2 z0&-w~#(u3a(7EutI5YLjDxjpfmQl){7P>v9fTKaXMbZ!bV+l#&IA1IBp z0<@21uEk@j)LV?79g66+OADq5C6%s%{^(o%d?baTAx$KO^he+5*K}1f_mh#6HIb1B zzk>A4WO^pTzwMvoCPikf8D~5D+GgR`!oPg;`qp>9X*=Q5hxy7gKFT4HV5ys@bLR=% z>)M$TDb;GA$1RYDH#f;lb9$GcO)uBrY?lt!89Y?Rr~eZn!Z60{>7 zlZsZe!wfwac6A{?G`=R=lj5Or-o<&41(}NHw7BQ5U4|QYupTSQ6b!<0oaAd1?Zlxt zfi#jfV~lCMOP;K@A#EId z75;Rj*TlaTQ}K1g&x?9|=f*(`;d>!|O62j4#6K55!J4FNGmP(1xDL2M-AW8H8hQ%~ z^3+zw!*s1Il@q_-)H#tM;F9Z33E(tojG^r&1M%PrN>~m zBAx8}wM;tAPEvH}(xX*tgsp;deaQFA**W2N)ZQ+4Pl0rWdwVi|Az9{0@Ok|;7;(;G zQRUDhEZ5sv@cmkxV$2k;%*^|f?fL*0QOYNdJmIU8m~?aCMa1HsQ1L0TNY#)QI*Mv@ zo%s$fVrFmyQoRfMl&v>}8r+P@;+9n_vPlXl?F~|y8Kvs7(I*=N!yLnE3*1z?e6X8J zOO)u00nYTLn0a%#Ck?zTKLBf^;#}8MXw07P%P={Ix=~)g#Yrbn+Rc19QHsIC}kw-fEqvvBotG^AMj>V&=dvn|3(fe@g=`ijD zv_nQq`=>vHY7nUw^L^ZLqGtnzPwS@jx?9t3=7lEjwVt2D%2tW`<9dg_c9dIxReO%~ zYaMi!Om(~c6yHJI2JzNH7SyOpiZp6pQZ4SFPI@p8Z3oq1p99TH^V3_Qd_Yr^=Favo zg-g|*qdfRve#%RAL666vUaBLekopOXWs`WpH$JgBkTJaI&h$9lY4&V)S&|l@ z_2P!4Q0@7<=Sh#gjOzIZ%Xd>;Y7B4ANugk~Q-$LU>@!8{Zf!<)J}FM3XS43iZ~ z!4z`B2R^4Kkuz`=KGX)!@TNAAcUs~3ldG@J`G+eoDc%(3DbI@@!xUu#U>0%0;VUqy z{or8zgD};+(~HiZy8r5&4Oj9}n6QIb&0QIR1Pt1K+$3CUC{Ivxj1UHIbpA>?YM-d4 z&oG@oy(W=L?GOj+r|GKx78-!vs;rxN{4(H8oVrTdw9|aVHh` zeP|v%sUFOS`z8V@8X}AamCl=B=ZO=<2wPH(LUoR^Kc)I^=}rw>sKG`Dtu^kzNTC_KgUscd_&L#oHc738QihHh%RuJ;*d9$E11*78m>^U@Prymf$}<~>L^8Nv zk0-yHAdtc`@Cg~%G2TT@r+nmBG>u0rGc^(KQ^KVeL!`)y(=?+jk)A0~Ti}-!4VA6n zvP0S&zN_o{D@rNs-L@ZNxES7>T1I#vITNI6DeY`TJFKU49fy4 zlc8`ZJmNJ}>8q&TmjqKeZp>q`WsaL z%SutbseWRV05c(hb0G{dS6b|u9Kja5?2a%e1k zMx}A|LfgVw7e&agM&|?y3vsCw@gs2lGw8Y zde@#cBg0Z0&cYpLB5mwVSOPG{f#~604)c*Q_D65;$DL=y9J>-TufGdpeF?YE43Jn! zxP6w1@1-D9{6#YEvt-;SA=Vfc6%&W^0rs#SW(JS@+gX;|RB9qMr(#ysy!rIs4;DG= z?|;y*%GEVZvqd)6qu1lMwlbMWY=(tEB;q+CGi4;yW6a+6t_AAjJDIbXkJnKAG z4{l@29b#isBD8q_PV~im*$*A?o$`Ja`#-}Uke%+m`1)lob-BCQ{kllGg_9oZ{-RM0 zDDkGe>pL+A!tKI5fw>NnL`9DqCd{>I6Lk@Tjt{m8WZa#7kHxw~W-4E* zkL=N(1dSuZ?quFNqL*891QHpq`9Urj|0e8%W&g{O@!Z}^Wsho)n}MGf7AwrP%v4Dn z@9u*&@nCM6*L@`~cf8O;bH6aaOl7W>#PxeP^XsrYObt^WCACD0FK^UMV8iSlCE7rx zV|(0H2K0>e;z$FXNq~D%9D5ZO7e&+FOHV(l{glG}$@j5Pb0@J#=H)(3V6iBPg`w4Y zQN+H8U14fGS~u|KrG{0}kinl}jzTJE3|lWMWpU{0!)?en_GlZfBaNrET|e-Xf&?d~ zvAVqW(X3@e7#td*ClK$BN5>Da*HXUR)kbCZt$^AGiE%udKcH`8X2Oo>+OT-7z`WWY zeKYnik?MJKg!LYrg6>g*+3}pW04HPNz<6lB_~iYm$}qLUPTXmuYotFq(LdVrifvK| zTFNHq?FaUn&EYp}nuw7f7Stw7X~SAcr)7+LVENx49W`(ow!Yf11~$NnTV?&x)PV}v zHT6fyfUY!)rf3-Bt5#YAEy4Q->*uf3FG1S+bL@G)fXi;3efctE$IsjJLI%#Hi@2$p zg>M+&QP>YU@Vyb=Pw>qMHsCJkjNoXMhAimZb*ZiLfthS6<+pe#cg#344yWQt+?p>G zQai`P|E1~6B3Y!dokb^2voCkg0zXRmFWd&8>1T?*L~PHjZZ*#-HP5A4{}yT5SvBqQ ztS?0~LX4>c``Iax;!WkYO~8cOch9~&45#RDV9ekHHOva~&jZFj5 zSgb$V8V8-#i8I&!@C?00?5Oa+d}-fo4(D&4dj5_s8drY(jGJcPvf%bR>VLfY!AE}6 zNazXu@D00tddrEheqx83Z+QOPTdrUE@TO;pN!1FQ+#ie7$8x>um*+02Up*HQm#aCJ zLvKudgEr}s1?o+WpdUu>cY2f~aIFppl+2MjHXTlj~hdY7zRk)k+SM@uK zJD`5obMLC(gWP`PrRndh-&x#2HJ;CYL;cRq{)75`Jo^>Ybq(rT)%|{UGva7n&nN47 z4Pn^ivh?MN!;p@y=azLJB^iHhL32KQs^>*Y}cVh~s`QZZr{M9;RCLU27~c=D7!=f9)NJ z{<05NuKs-JadQGRejs|Vm!4-mVgtq>H_1)7!~Kx;k%6eLuNl9_zJcfieal@I@5y=| zk|BBm=T=e6PY$OCG;5*irv9j1h6TnNgC8dv-s{jKX8JzX!XT{|8trdmXI~Y2@L@Oh zk*>DJri{5Qm)@}dh=JrHdxxvYt3^E>_2$aWRo7O!fWzN=U&ZffV1G>?)u@`>E%%$& zoNmBNE1-LL$TQXhcdDs*3KZcQ@36YxfOcWZQ-axZzL4i_CgZ?~>uKCx8*?1%x6$-S zi`TSqH!NP;WKy=UGl2``ZM0$K;?5(!Jfmqg_TI)Q_Q0#wDG=ils0As78tC+?LR7epmBy)-5iq(lz32!l)8Q% zzh(W9y_TC){XZ>F^9|bEJr7v)&XL~BL2l`;qG8BXTr0hLSVGvqQDJt%sv!_yJvO(d zh;=W%l5Z;P=I9>6)n>W!yr6I0Tdt(RdcKL?9pD{?hJ06=mrDGp+~g&|r*(WcJ-&HkGg&s{_%|hW=R<6E*igxs7)i%)7|TY_NE__OP@lW1u|Qu&@5gP#9sNc~(`a16 z?r9KaSu6T*%7y}B!tJxgn`}dazKC)Yi(9+;K%T&qf9BIpToySO0I|LLt;Eu7L*BD1aE;J)%bUIxG))}fb zPvCEb#JE|0*r2OrOR_yWyr&T37>g#vJ8tz*877q%(6KMZy6;Ec!T!@jipWpof{8w^ z@M~&0lfnIx%s@*5d5skAi-^x--@!}*ZOaR~>I1GcAsw|onquJ98n(NHGj>BQ0UWNFAgX z`pme`+8pCJjOG2r1U{#X6!t~m!3~ZEoY4F63R!{+7;j&VinX8D0KPI{Cr zoWKjKLfKM7#%B3JQW#{-Bk|G{xM%ZSp{=r~%+hA7ed!)!(W!e(_rm(Xbm&}Od9U~; zQix@KXeQDaW9L1RIK$DR`iSYgmpJ4O{edf;xOIIfYYZi zEN^d>ADU-zkcrr<3Sm*`E`@}0Y4`hCdF~ORaqz$7O<4WrddB@1Ev-tnbhh#s=5_+R ze~S4vBOEE7t@2Mn*?pYS9r_e?Jz%t6T(^9OEi1I#g*uIQ;P2pLCAAc5C8IGuo$}IC~7O+FC87 zNyQ#V0hJ>?ZyO!p=488_w;BAQV%V6%y$6@wswuI9qGzOOHg4K=m5Dh}Jg2yp*-S_F zN4=(6W*ZOR?Y&#&Hx2MdDp>}v5^R-Q)sPDz2SRTlG!k!FJdLoucR1F@p}xc{&B2^` z%Bum_lh8YO13dPGHB#wXGAHGW60usuZcoOZ#N456YJ#llk8pIIjY69fYtc}| zSJSz+LgA<#pBt8_&=AnJ4Yt$WYM5)7Gr?o>7;YwoJ8ZfT<1K>j!sH&J>JuWOw1g?= z&9t9-f*LdEP^K$nawoJGxIaA5DGtJ-aMil8UPe}vh@M@4H;ELm?J_9yNEyC3StEOx zqh&<;qBpAswAXAVQcMV_8Au0zz)%_CEtDc-q~`|Gs(;c5i~E68yl91+Ub6Kfd;es? z4F84!s;M{*8<|AgH>1r`4NHP(KV7qKoRgbp^MVRfS}I=+_a59r)zti?k&$dNg+`(J zzjC9-+x@gWc4qayU}9exT=!$J!g^h_nr4UFh?6{}v#Wk#JbRqNKwt_#6D?Qe`=na!xP=i$|~&X@X` zGG<3tkgL|3=zN_oQ++Yr3-O{B=G%|_4DPAn-n!pd0&57I?)s3ndY*iA%pBK9!K7M7 zw zj-_|!s7>&T@Lz<#KZpy#FVH3Hv0d@{y?NI_3pM5A8b2L%~Y;5 zBd7~ArKTWTstaW~78|ocqZZ=jk)qNpNP9WqGHwO2=H76+BfVz6Y%H@bxgfG7k#MRb z#W)}L9?l|kK8$m=nufj+b&f3Kr()U@MBj<|^lvx`t{+a1xO?ETTPs(dUX|y{#MliB z6+X{BeL4%-%Drn4N`djV`>ZqR>5nj%S&lQq$CD z@mJzkQNz^Nr>1i>tj@OhJ2dv6G(3g+{_c0T9!%EF3&TSUYR^XPwJ5~5Il+s_JC z@0Y7uR@ARGyZ9M&g}|aU;PzWr(p$BJJc_pv47Hfy7G|8?nc>jh&u(V6eCQ%uhTsh~ zM}6vw^s>q5^B?x7IG8QF5r4kkQqOLkjMYKgmOlV1D$J30n(!v{BBFoncA`&nB~Fpl zwHz$1H!rJQn>ocU7maTJAs z(@y$PEOEBLIsolXoXAejXwijm78?sE)JcTn!eb_A!*tgznh*=M9 z!{HotSIxn^U2|2>k5_xX7(G8s?fFsG(IFD4)KWc}bD-S|z1C~c*7aka{6Y(hN@iPL zeTk5jS60~#ri`M5W6UhrLy>B>gw z(H6Nc=2~2z@6w{3`Ceu-rO{w7jG7+8h*x{Lom93?Bzrv3$5d|?b1kaRa?v~I`5U3h zh1GQTs(f(u7eajG0rsqzIoZ%UPcF0`8mz6*nMh@4eAf^0m=c5g?}A%G0jn1zCtIf>vj{ttmjjFZ4w(#F!iSh=KnC(rVZ$tisFI zD?i8HcLwv0!p41R+|p#BV=2b{+5JjtO+yjwfwy`YQ>C1n&OJb+b;+}K*;{;df;J4c zRb%hG>q(+_!`=TD<5;*XE*cRBUCllXEF*H*gXc6wbQO}KgXeTvbl;@ua_bPG{Tv4w z6_NhZ$4)E}is!x|R6sNIBRS`$HM3Jg=4F35r>WFe9y&+LUvyGgEnYj?e@r&EH+QA8 zPv#C4Oh?GL-?{eN^22Lpr+2a1KXwt^o8O-|X<2SyhjVD|%K9BHpDp*uBE0Uf%$eg{ z;(W!q!}VPL4kz6;x|YiR-#QQH=es@?cerQCl}n|TIWiw+yPtHEw+_Q7tuJ#ZYTwI%YK?xx`L)c z>(WQDVe&WH&ULip7UbcrtQFe=8&!>lp^`{9VPB{HLhpKvo;wMz3KIPf z@sjKPy#2OO;X28f@{-H4;;5Y7oLy;IW^(Pd{mA+IE>^d4=^?yJ!9a&Jtgi_tqOm?$ z^(4Oc)wj6bww>uXF0QEeK|1!V%e*YDGCyyNvjw-_r7G4^8fedDvFhW{qDfCs99U2l z2hr<0Fb~zSG;t5Ccfr!ZwcYisEp~X3i*wqX2IsOz zow-ZFsXx#c-OxtyD{FNWq|JR|4=)&kmip9M=2g7iq`nDuM&Wm6ducddp)>`3<4=ip zKp#xY&ApTIH0g6^Ew$9IbL~LeATbTo(ZdZo*l1AQB4a9D$_Sv@GmZ zT>15zT{~UdY+Iqnp?e#RH?-;@^D)-vxr&^(Ihi8U(!2+h=w^ixjP-QQ^hGDAIMZ|f zGbPuX&|IDg=z-VCzHvCqX>T%|j zma;{hoLfqY?B}>byKF4r4t<09*H}N&&i!oN(o_oKZw zcYp>7wTr&6ozRq>c3JGFox{AQ`caTFVMk?X{}j8v5x?n9Y1Guzt}KEivUa(vyb*tO zATe*zl5a?-5q~cr6TE*qUYF=_74~#4P2p40Q|-r{N92BEN{vlwxc?x0sV*wZOm!NH zj{md~XE*I1DqA32pN1Gn=is;ubu4ye_mJf|!N}K!>8O2!Yi6C)u;%pA6vv5`rh7J^ zekJ<1xB-3Gvee+$IAS7QMZMU&Rd~QDhH;L=QQMW5@pj)&p)Egyom_xb*FV+QU5P~Y zG19qxfNUp43zz3DWhviKl?V^|7A{Z3EL?#b*sa|2%>8^hALGViHqPgFa?4@Cy7N6J z?fLd|Jm#q0)_yKE)4sgSKWhb@vwSAPMF*Ue*1*eaf#5lQ$`-tebikF`mOBbPV1x#t zex&n&iI)2EZIWgvJ~1VVW--ukfQD5)%))4%9O<4m#~BJbMzJeJMt58Ml)2Qdy=OtAJNIg~wOi zh`SCSLFb(7eH{Hr-w|(FacTu5j*DBCZLzUO=(&6>IorR%-&K&+S6)X5+ps4aQ|O*b z#{NM#Dx3Gb4a>rm&@5F8--5R~pHkuBqy;}ZX^eRSa{8gi5s?Qts(y~+N`|pkt{~x229QWz}#khZG zoG9I#nH;N07^@EygE~@loJP6nSmErjwJhV0oUAtr{50H&ft-=9$_vTS8X{~Kw$sr{ zrTs|8?G=8%qOPq*9jBKtPER1VjM`w(aneoCd$mie`;E;U7$I1%$?woataulUx8Sc% zSYAku5k}~`#0Y&`>#r3$-oosT!?c!Lxb7QgDyH_57y^ZHrBICcMPro^aNwdrGFp76cZ`U1p8V)Xoq)k+PUcn zGvIY#Hvl>3;C!A1+T!*&3r$*Lm!kT-!89W60e#67Eq4~V>7FqtH?g~poP&k{T-HwC z{KmoE&8Y76SEprPN&6NiC^lI?gGj$u&)3(J>x9JE>2>yv7ptI(hg(As^{o2Z|!dh(2m8M~`~ll2Ds>~$t5F}>tm z?mX?3-oe|v$viqW&s}OB&3E#=w~x~B9Ap4#A?+N~eRjMmYP#!hIBE0yP4}795S2xc zCBzCEa~5kN<3R1W|9bD^XhS+}gAOZ3Pg}9uODRa&cUSjj*7sVIqV}L)?a@=A4f0)1 z$}xPT(6KkscSvF7CC$pM!tXk2Bh?@`lxZ-N?MTPpj`8w^+p5U8SDfIBG{*6X5!|h= z&hOTJG)7~t9?1`5bo5@foq?s!X2{j-F4j$TTblo`xNDDZy2$qD_eh$wp-ErThF2b? zlm;Yid6bu?Nm@z^6sT2fi>7JSUrG@!E-Nc4;k7I1A`kJh;JUolMbOn2t5rcNh_34^ zMY;mIyA|BcrM;iKDWpqi3%TFI%$#|hncvKrne&@DKcoEa3VWr^ zp<1h0nAAXKFLPm!#;EH8b-Sd)Z$1Nwa#FyhnBXJyQ7%x9HxA6cJ=$}Xa?e$oQ7h|G zoZ|+incw(c3q4{z|KLvSsxI9B%+()R|MDPiq6Z9u_tM|IG?oH?@~TZpVPK<;jHfT^ z&1^O?L`TUv|1;PrLyj#tI(RcAZkQb@(BL(k!OhWCGklseoaHtjZ&~Fd%VF#)ALaMn z&&#sxMp_qIHPvB~oo;ZxjNLgg+mMr5=d&p>Ieu)`IW}#BzjN z{K*5)&Vtjok+p_ZuEVvzE^J5{2)*%Sjn@8 zJqGKOgr}^WdahBMHU5m&l7sz{5SWymtup0gN6n;3Cm(zjeeIX_ zh<);UdAz<)POzlIln_^$Xugoz|XWx!4*f zkGh*_314|GO368_*>-sS}_0!an!DIzhHEE9dO1GkZ+9{R-Jx zwbApnbl!Ddx&S!u8O+xI^UqhG_h9`W^e&5andS1pd5U-AhrdU_3#B?e0Sv{>42<7Dxc$A<5M!!gp-2&zlMpybUg4Dnk zhj%NwrsI$t#Lh}96g$_FP2ya9r-Q^?t7WyTyH!!lBrj#qJtL0S9i0YQ{$`8|>_TmE znd}6N{fucAH*%D;-ZsuYt<^B6w1d)=os`O1$2puKtAXii9OZJj7AX}zeaQk3(`dG! zy3&&pT(LyqOOY|WjHzf)cB;uOt(Ek4zO`i~R*C4R7DtT>c<#=Sno6XZE3r$5jvc)# z-n7wX$K4^l%f{A)Ynk-rs(*k!)G@Cqb=LZoScml}E}12B2W~*SYGiwjRO3pDmht*^ zZUUK&k~1{HDt4Y!6e}0GRINgn7rk1{t?;m2Wd-O>VD#cWF2kT*fnj&0S$V8Ib+3t% zW2I5DOJ{9~c$V>8EY20KS;;|jSB;CyQI?d2a%|%v3qCF^kiPv^g5?2ygLqT$mE4>0 zPQID7aRhfNifd`!J%IaN6!&`bs{^=qqPUluTLy5iMR9wZeFM0IQQVH^_5s}PC~i}8 zU;y`Q6t}LKHulr3yY#6|;h~n;VwhrJPjN+=AZNM#^!EUJ@zkDJI zC)s0q(dp5bS>!+gdwdlS=)~(>I&*C zHj8chF-Hf^Ap!)q!!1ZdZPOg0Yo6|6TEjZ#$4mh zzZA>mUrNQwAvTGvKiPRFoan=N!aRuYj}2?Jl;AXNYgVzjkbRY*_uA-UgPXZ|aN*#! zj1rf7rw3eY{?6)M9&=rVbit#6?9g2|U)qM#5_{_G8!v#zF1@d*yM2iPWNPaP57p@<8flW#G2OB__j1iu z2e}^J(>`Z^@1m-ljrpA(Q?xd0%**Y8e1tk(Q2E>uG(dGIqE8N>)MiY9)>wr9bfz<em%H0xH2$y9AOkhHt;xE)HsY zZ1$o0G*NllQvYa?Sq=|h;d+p|Y*FoAg{tkxMGompiLG%SDnZI+6}8J|FPmc)h11~a z&@@@_4!-0d{)S?@yfb3Dn`ek!y!wj}?N)Sd5cD`xg7ZAyk-jO?nNYGd$7TNC)< znbcs!u5-tX$WvfclCe@+;L+f;eo1sK^@%^Pf*@YZWrW73-DP$JrZ&g8xwp?J{-emtXj(P~BKI-wFzAgPNF?#ghdrI(oxktWxS}Sy)%RPtDMi?DmdQ?YQ8rJtVLq@@4 zjpY?Sua(y@z%d!X(xyL37VPW=L9kR{55~SuK@X96TygT^I-HsII>qi5r`X9Q;|pLW zw<~L-FSHKxF`LzMoGqbs2DVzua2@mdQ!T2(QprGcHkgEv9&W zC>{BHpHtX@$Lt6?Se%>7@(zpyR#t@8{y6>l=mt2>jW`>K>+mX*d>y~^`x}c^^tVK73XnOmv{vClOBf~ zDVBUr1&*+t?{hzH2B)-Cp#xHn{Vm?$6-9 zBkKMT?xj)p3Amq%x{pTJe~-M$<}WY$CtCvsO4ZLlQMd^@p3qOR%eDnR@Y)L+d)8bj zJX_lEL6WR5*=+X2Ywaw}f;*Z!$J5q{9^sMiDr#E!fq*3*zT~POGdh8v7V`o9; z+0ImTSJ*0^+F8J#eX)xti*sLRtgyfFaBt|6sy8v0@744>aS z02=g1{jAoRJ({cEsyWZfJkfY41WAQWvJjpow)&lC$ zT)FM+-c*&`mRnJ$187T=b8lxXzoD@aX^_H%_?PoLm>euC5*PKy`ydvVGdWr7?Cw?U zIHk82loaL{@}DbPOAEwPZ+0pKsZ->*yiE;#dUq!m6VnraJsp(I!7gDGN=6+fJ?FO- ze&El?w@k7Nd;S_~BFK=zTOq(EL%+#nrr&eJenR(cBMz7-K3_K6512>;`;(!BX)bVvD} zR8d()3-7s?T-9!>slAWxe?THn-6E=A{2(n^`fs%Cp&!xmA3sbhe)0%CzRF9h*Q}*= z>wii=gCuX`lTXp+En8{ZGu!Fef8RmB*tv_I`{ncWtKEBO@4o%?>lc1Q2VOi#hhBP_ ze*4O+)X;dCUTb=t-e`W4-g^589ew8*wY+dv9=9O})Xz8va{+nA#{)R99SIn<9sy|{wH864`yp-vp?#ND;vZVq+gP!|q$;ZPS2 zb>UD4Zsntoai|A}dT^kh`}wA)In;qe9XQa-fj$oO-CKH3H7PZTgNK?%jmgQIZZF{R zRN@k{C*>EF+&MpUZ0_h=$7hY3V6jeg6waJAx9qM;=Zxan^X^zsMciEn@EqsTH&jaP z_?BHVSxBVOG>l4U0u3iU@e6K2j3F4%Q)mPjz%+`X>7=CjgbV4ELW4<7v6My%!s{1G zrJ*#4;z&mcI4Yh_8eBYyr`u^F&BDiOM&dhqHYm}VN0VqaVF;bV5WG#(}7K@dNR zF3?|yn|GeZ&|iU@3CN;sa#AK0kewWawg&FwDvmw^yd?V>j-z7v_rt2m^!qBJlU1|n zu#9QM?<;^4RZX%#61)GmZ~#{(yJpD0hv@!=$B{orMf6+zzE^eMLg?U^!y+ls_vOD@ z;QRlG8bKTAt9nt!9iW4_F&=cw-hjwO62$@aL)lS z!@{fZeC~$rmi_nALbxlKA9UPBF1iQqN}7{U1Dm62Vm47Z;10SIsTh|1WdUSbqy7a^ zn}zk)tv~Mf?f*T-_tX4ym>(+PW_tT`1F`>*$+BdAH{NK57&Cml!Dvb!pD}9WtrN#i z${U5Ti=hinm76>9)=7CILb47hBr7H1~~W{*xI;kt9k5%|1o^RELO(jS~?vL zhd+RG#d*3&9n?f%Ec6Mj#>U0PX*8Nag9gRN$7{7(oh~6EAu%y2DLFYM<(69p4^B-@ zOVjIzph<@fNAsio@c{4yGQdAaW3CvBxdLo72W%8G1sEyj2}~2)*V1=;c=$4mZ8=){%Ewj=%T*haY|NS?lRPocZ#Pe?I?>|6=EV1ul1odai{j z%zB(W^TQD)w6AOy&PUt8upgh149t!8mrZ}1i{+6x24FKy-;OgDVUHn?mvK+08g?_z zS04fR0AgYy4TC)qa3^2|;2VGvXFqMG*VTL_2^{V2!80RH;5bqn8P71;C`Pdws);$Z z$Pv$|hz6JtutqQt7o!lEr51T4yb=C7!q>5YM5F`SrpAa0+FFX}b~#QmE3n(TeSg<=hq)McBf%h=N*76lPF8`t>sM z;CDH;=tK-R8-MuF4rZZcz(ennE3B^G!>QeoEDgw#SJw=9w(u>WhTp@j=hfUEQm9dw z>IO{+v#PUGR*zh@okvQgI!|^pN|g#tY#x8Z+rl#PA|oM<%X))SxQsUl^y*eqi$a6E zx%DCfcJm0>%_<@X$PKYx@!h778{uy<83EQbKhOrK8lA;C@ecu40T%(60T%$D15N-~ zoOPQ>l|Bl0f1<$r4Bv15LB9_1W%vi<_h(Owt33~rr?&n+U_5vi(2g_B2FPI0|7p;| zep;B18Q!J>M1670KNP^a4~d+H`K{RAo!2FB= zUEDP1?0m!h)t>t0%UEp*H^51?yq;7e7GsQ&jSgVEGGN&sVPp4zH%pG#*D~#ngp^vg z6~O#nPVMpJ-Hj7=@U;YpQWWLokuWS?m;nQhnm~DZxgrwwa6fLqMp%D38E2z%HhCl8 za5$wr1)S&m28{*^zMbx1AiRpv{54IcxDrws0h0jVOO3nx4EM4EdXWI%3kO0$VmN$n zeyL)pipN^7go}w6v|-(y%0bDADT8mhN0XE`Tt8xnVOZ+u^sJGV40GnKcaJk!i{^|S zKWakt#Q9@#r`$f(7M^z7Lif@SND>;kBwv!fX^4*iSgj zx;2CUkLjPM{#+S({)U?}lgBaq{c%`OSrv|fB|=5qjP8k^RM}3ONKPKl9(U C8f3x% literal 0 HcmV?d00001 diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.c b/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.c new file mode 100644 index 000000000000..37119c302727 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.c @@ -0,0 +1,253 @@ + +/* Copyright 2021 Jonavin Eng @Jonavin + +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 . +*/ + + +#include QMK_KEYBOARD_H +#include "jonavin.h" + + +#ifdef TD_LSFT_CAPSLOCK_ENABLE + // Tap once for shift, twice for Caps Lock but only if Win Key in not disabled + void dance_LSFT_finished(qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1 || keymap_config.no_gui) { + register_code16(KC_LSFT); + } else { + register_code(KC_CAPS); + } + } + + void dance_LSFT_reset(qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1 || keymap_config.no_gui) { + unregister_code16(KC_LSFT); + } else { + unregister_code(KC_CAPS); + } + } + + qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for shift, twice for Caps Lock + [TD_LSFT_CAPSLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS), + [TD_LSFT_CAPS_WIN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_LSFT_finished, dance_LSFT_reset), + }; +#endif // TD_LSFT_CAPSLOCK_ENABLE + +// RGB NIGHT MODE +#ifdef RGB_MATRIX_ENABLE + static bool rgb_nightmode = false; + + // Turn on/off NUM LOCK if current state is different + void activate_rgb_nightmode (bool turn_on) { + if (rgb_nightmode != turn_on) { + rgb_nightmode = !rgb_nightmode; + } + } + + bool get_rgb_nightmode(void) { + return rgb_nightmode; + } +#endif // RGB_MATRIX_ENABLE + +// TIMEOUTS +#ifdef IDLE_TIMEOUT_ENABLE + static uint16_t timeout_timer = 0; + static uint16_t timeout_counter = 0; //in minute intervals + static uint16_t timeout_threshold = TIMEOUT_THRESHOLD_DEFAULT; + + uint16_t get_timeout_threshold(void) { + return timeout_threshold; + } + + void timeout_reset_timer(void) { + timeout_timer = timer_read(); + timeout_counter = 0; + }; + + void timeout_update_threshold(bool increase) { + if (increase && timeout_threshold < TIMEOUT_THRESHOLD_MAX) timeout_threshold++; + if (!increase && timeout_threshold > 0) timeout_threshold--; + }; + + void timeout_tick_timer(void) { + if (timeout_threshold > 0) { + if (timer_elapsed(timeout_timer) >= 60000) { // 1 minute tick + timeout_counter++; + timeout_timer = timer_read(); + } + #ifdef RGB_MATRIX_ENABLE + if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { + rgb_matrix_disable_noeeprom(); + } + #endif + } // timeout_threshold = 0 will disable timeout + } + + __attribute__((weak)) void matrix_scan_keymap(void) {} + + void matrix_scan_user(void) { + timeout_tick_timer(); + matrix_scan_keymap(); + } +#endif // IDLE_TIMEOUT_ENABLE + + +#if defined(ENCODER_ENABLE) && defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality + #ifndef DYNAMIC_KEYMAP_LAYER_COUNT + #define DYNAMIC_KEYMAP_LAYER_COUNT 4 //default in case this is not already defined elsewhere + #endif + #ifndef ENCODER_DEFAULTACTIONS_INDEX + #define ENCODER_DEFAULTACTIONS_INDEX 0 // can select encoder index if there are multiple encoders + #endif + +uint8_t selected_layer = 0; + +__attribute__((weak)) bool encoder_update_keymap(uint8_t index, bool clockwise) { return true; } + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (!encoder_update_keymap(index, clockwise)) { return false; } //This is to override the default kb function and go to userspace + if (index != ENCODER_DEFAULTACTIONS_INDEX) {return true;} // exit if the index doesn't match + if ( clockwise ) { + if (get_mods() & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers + if(selected_layer < (DYNAMIC_KEYMAP_LAYER_COUNT - 1)) { + selected_layer ++; + layer_move(selected_layer); + } + } else if (get_mods() & MOD_BIT(KC_RSFT) ) { // If you are holding R shift, Page up + unregister_mods(MOD_BIT(KC_RSFT)); + register_code(KC_PGDN); + register_mods(MOD_BIT(KC_RSFT)); + } else if (get_mods() & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next word + tap_code16(LCTL(KC_RGHT)); + } else if (get_mods() & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next track + tap_code(KC_MEDIA_NEXT_TRACK); + } else { + switch (selected_layer) { + case _FN1: + #ifdef IDLE_TIMEOUT_ENABLE + timeout_update_threshold(true); + #endif + break; + default: + tap_code(KC_VOLU); // Otherwise it just changes volume + break; + } + } + } else { + if (get_mods() & MOD_BIT(KC_LSFT) ) { + if (selected_layer > 0) { + selected_layer --; + layer_move(selected_layer); + } + } else if (get_mods() & MOD_BIT(KC_RSFT) ) { + unregister_mods(MOD_BIT(KC_RSFT)); + register_code(KC_PGUP); + register_mods(MOD_BIT(KC_RSFT)); + } else if (get_mods() & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate previous word + tap_code16(LCTL(KC_LEFT)); + } else if (get_mods() & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media previous track + tap_code(KC_MEDIA_PREV_TRACK); + } else { + switch (selected_layer) { + case _FN1: + #ifdef IDLE_TIMEOUT_ENABLE + timeout_update_threshold(false); + #endif + break; + default: + tap_code(KC_VOLD); + break; + } + } + } + + return true; + } +#endif // ENCODER_ENABLE + + +// PROCESS KEY CODES +__attribute__ ((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; } + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (!process_record_keymap(keycode, record)) { return false; } + switch (keycode) { + case KC_00: + if (record->event.pressed) { + // when keycode KC_00 is pressed + SEND_STRING("00"); + } else unregister_code16(keycode); + break; + case KC_WINLCK: + if (record->event.pressed) { + keymap_config.no_gui = !keymap_config.no_gui; //toggle status + } else unregister_code16(keycode); + break; + +#ifdef IDLE_TIMEOUT_ENABLE + case RGB_TOI: + if(record->event.pressed) { + timeout_update_threshold(true); + } else unregister_code16(keycode); + break; + case RGB_TOD: + if(record->event.pressed) { + timeout_update_threshold(false); //decrease timeout + } else unregister_code16(keycode); + break; +#endif // IDLE_TIMEOUT_ENABLE +#ifdef RGB_MATRIX_ENABLE + case RGB_NITE: + if(record->event.pressed) { + rgb_nightmode = !rgb_nightmode; + } else unregister_code16(keycode); + break; +#endif // RGB_MATRIX_ENABLE + default: + if (record->event.pressed) { + #ifdef RGB_MATRIX_ENABLE + rgb_matrix_enable(); + #endif + #ifdef IDLE_TIMEOUT_ENABLE + timeout_reset_timer(); //reset activity timer + #endif + } + break; + } + return true; +}; + + +// Turn on/off NUM LOCK if current state is different +void activate_numlock(bool turn_on) { + if (IS_HOST_LED_ON(USB_LED_NUM_LOCK) != turn_on) { + tap_code(KC_NUMLOCK); + } +} + + +// INITIAL STARTUP + +__attribute__ ((weak)) void keyboard_post_init_keymap(void) {} + +void keyboard_post_init_user(void) { + keyboard_post_init_keymap(); + #ifdef STARTUP_NUMLOCK_ON + activate_numlock(true); // turn on Num lock by default so that the numpad layer always has predictable results + #endif // STARTUP_NUMLOC_ON + #ifdef IDLE_TIMEOUT_ENABLE + timeout_timer = timer_read(); // set inital time for ide timeout + #endif +} \ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h b/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h new file mode 100644 index 000000000000..e2b53eee128d --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h @@ -0,0 +1,85 @@ + +/* Copyright 2021 Jonavin Eng @Jonavin + +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 . +*/ + +#pragma once + +// DEFINE MACROS +#define ARRAYSIZE(arr) sizeof(arr)/sizeof(arr[0]) + + +// LAYERS +enum custom_user_layers { + _BASE, + _FN1, + _LOWER, + _RAISE, +}; + +// KEYCODES +enum custom_user_keycodes { + KC_00 = SAFE_RANGE, + ENCFUNC, + KC_WINLCK, //Toggles Win key on and off + RGB_TOI, // Timeout idle time up + RGB_TOD, // Timeout idle time down + RGB_NITE // Turns off all rgb but allow rgb indicators to work +}; + +#define KC_CAD LALT(LCTL(KC_DEL)) +#define KC_AF4 LALT(KC_F4) +#define KC_TASK LCTL(LSFT(KC_ESC)) + + +#ifdef TD_LSFT_CAPSLOCK_ENABLE + // Tap Dance Definitions + enum custom_tapdance { + TD_LSFT_CAPSLOCK, + TD_LSFT_CAPS_WIN + }; + + #define KC_LSFTCAPS TD(TD_LSFT_CAPSLOCK) + #define KC_LSFTCAPSWIN TD(TD_LSFT_CAPS_WIN) +#else // regular Shift + #define KC_LSFTCAPS KC_LSFT +#endif // TD_LSFT_CAPSLOCK_ENABLE + + +#ifdef RGB_MATRIX_ENABLE +//RGB custom colours + #define RGB_GODSPEED 0x00, 0xE4, 0xFF // colour for matching keycaps + #define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Nautilus Font colours + + void activate_rgb_nightmode (bool turn_on); + bool get_rgb_nightmode(void); +#endif + + +// IDLE TIMEOUTS +#ifdef IDLE_TIMEOUT_ENABLE + #define TIMEOUT_THRESHOLD_DEFAULT 5 // default timeout minutes + #define TIMEOUT_THRESHOLD_MAX 140 // upper limits (2 hours and 10 minutes -- no rgb indicators above this value) + + //prototype functions + uint16_t get_timeout_threshold(void); + void timeout_reset_timer(void); + void timeout_update_threshold(bool increase); + void timeout_tick_timer(void); +#endif //IDLE_TIMEOUT_ENABLE + + +// OTHER FUNCTION PROTOTYPE +void activate_numlock(bool turn_on); \ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c new file mode 100644 index 000000000000..020087532d60 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c @@ -0,0 +1,194 @@ +/* Copyright 2021 Glorious, LLC + Copyright 2021 Jonavin + +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 . +*/ + +#include QMK_KEYBOARD_H +#include "rgb_matrix_map.h" +#include "jonavin.h" + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Ins Rotary(Mute) +// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del +// Tab Q W E R T Y U I O P [ ] \ PgUp +// Caps A S D F G H J K L ; " Enter PgDn +// Sh_L Z X C V B N M , . ? Sh_R Up End +// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right + + + [_BASE] = LAYOUT( + KC_ESC, 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_INS, KC_MUTE, + KC_GRV, 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_DEL, + 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_PGUP, + TT(_LOWER), 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_PGDN, + KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [_FN1] = LAYOUT( + _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_CALC, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, + _______, _______, RGB_VAI, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, RESET, KC_HOME, + KC_CAPS, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, + _______, _______, RGB_HUI, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, + _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), + + [_LOWER] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, _______, _______, + _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, KC_TAB, KC_P4, KC_P5, KC_P6, KC_PDOT, _______, _______, _______, KC_HOME, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, KC_P1, KC_P2, KC_P3, KC_NO, KC_PAST, KC_PENT, KC_END, + _______, KC_NO, KC_DEL, KC_INS, KC_NO, KC_NO, KC_NO, KC_P0, KC_00, KC_PDOT, KC_PSLS, _______, RCTL(KC_PGUP), _______, + _______, _______, _______, KC_BSPC, _______, _______, _______, RCTL(KC_LEFT), RCTL(KC_PGDN), RCTL(KC_RIGHT) + ), + + [_RAISE] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +}; + + +#ifdef RGB_MATRIX_ENABLE + // Capslock, Scroll lock and Numlock indicator on Left side lights. + void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { + rgb_matrix_set_color(LED_L7, RGB_GOLD); + rgb_matrix_set_color(LED_L8, RGB_GOLD); + rgb_matrix_set_color(LED_R7, RGB_GOLD); + rgb_matrix_set_color(LED_R8, RGB_GOLD); + } + if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF + rgb_matrix_set_color(LED_L1, RGB_GOLD); + rgb_matrix_set_color(LED_L2, RGB_GOLD); + rgb_matrix_set_color(LED_R1, RGB_GOLD); + rgb_matrix_set_color(LED_R2, RGB_GOLD); + } + if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) { + rgb_matrix_set_color(LED_L3, RGB_GOLDENROD); + rgb_matrix_set_color(LED_L4, RGB_GOLDENROD); + rgb_matrix_set_color(LED_L5, RGB_GOLDENROD); + rgb_matrix_set_color(LED_L6, RGB_GOLDENROD); + rgb_matrix_set_color(LED_R3, RGB_GOLDENROD); + rgb_matrix_set_color(LED_R4, RGB_GOLDENROD); + rgb_matrix_set_color(LED_R5, RGB_GOLDENROD); + rgb_matrix_set_color(LED_R6, RGB_GOLDENROD); + } + if (keymap_config.no_gui) { + rgb_matrix_set_color(LED_LWIN, RGB_RED); //light up Win key when disabled + } + switch(get_highest_layer(layer_state)){ // special handling per layer + case _FN1: // on Fn layer select what the encoder does when pressed + /*rgb_matrix_set_color(LED_R2, RGB_RED); + rgb_matrix_set_color(LED_R3, RGB_RED); + rgb_matrix_set_color(LED_R4, RGB_RED); + rgb_matrix_set_color(LED_FN, RGB_RED); //FN key*/ + for (uint8_t i=0; i= 140 minutes, just show these 3 lights + rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_RED); + rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_RED); + rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_RED); + }*/ + break; + case _LOWER: + for (uint8_t i=0; i or encoder + - setting to zero disables timeout + - indicators in FN layer using RGB in FN and number rows to show the timeout in minutes + - LED address location map as enum definition + - LED group lists for arrows, numpad, F row, num row, left and right side LEDs + - default startuo in single mode with default colour + - Capslock, Scroll Lock, and Num Lock (not set) indicator on left side LED + - Layer indicator on right side LED + - Fn key light up red when Fn layer activate + - Win Key light up red when Win Lock mode enabled + - Layer 2 activation lights up Numpad area + +rules.mk OPTIONS - Active features from userspace +STARTUP_NUMLOCK_ON = yes + - turns on NUMLOCK by default + +ENCODER_DEFAULTACTIONS_ENABLE = yes + - Enabled default encoder funtions + +TD_LSFT_CAPSLOCK_ENABLE = yes + - This will enable double tap on Left Shift to toggle CAPSLOCK when using KC_LSFTCAPS + +IDLE_TIMEOUT_ENABLE = yes + - Enables Timer functionality; for RGB idle timeouts that can be changed dynamically + +## All layers diagram +Default layer +![image](https://user-images.githubusercontent.com/71780717/124177658-82324880-da7e-11eb-9421-b69100131062.png) + +Fn Layer +![image](https://user-images.githubusercontent.com/71780717/126086069-bc539ffc-3ab6-4ebb-9bef-5005f8add294.png) + +Layer 2 (Caps Lock Mod) +![image](https://user-images.githubusercontent.com/71780717/124177683-8b231a00-da7e-11eb-9434-e2475f679a54.png) diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/rgb_matrix_map.h b/keyboards/gmmk/pro/ansi/keymaps/solartempest/rgb_matrix_map.h new file mode 100644 index 000000000000..4be00d3f03f0 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/rgb_matrix_map.h @@ -0,0 +1,148 @@ +/* Copyright 2021 Jonavin Eng + * + * 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 . + */ + +#ifdef RGB_MATRIX_ENABLE + + // Custom RGB Colours + #define RGB_GODSPEED 0x00, 0xE4, 0xFF // colour for matching keycaps + #define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Naurilus Font colours + + // RGB LED locations + enum led_location_map { + LED_ESC, // 0, ESC, k13 + LED_GRV, // 1, ~, k16 + LEB_TAB, // 2, Tab, k11 + LED_CAPS, // 3, Caps, k21 + LED_LSFT, // 4, Sh_L, k00 + LED_LCTL, // 5, Ct_L, k06 + LED_F1, // 6, F1, k26 + LED_1, // 7, 1, k17 + LED_Q, // 8, Q, k10 + LED_A, // 9, A, k12 + LED_Z, // 10, Z, k14 + LED_LWIN, // 11, Win_L, k90 + LED_F2, // 12, F2, k36 + LED_2, // 13, 2, k27 + LED_W, // 14, W, k20 + LED_S, // 15, S, k22 + LED_X, // 16, X, k24 + LED_LALT, // 17, Alt_L, k93 + LED_F3, // 18, F3, k31 + LED_3, // 19, 3, k37 + LED_E, // 20, E, k30 + LED_D, // 21, D, k32 + LED_C, // 22, C, k34 + LED_F4, // 23, F4, k33 + LED_4, // 24, 4, k47 + LED_R, // 25, R, k40 + LED_F, // 26, F, k42 + LED_V, // 27, V, k44 + LED_F5, // 28, F5, k07 + LED_5, // 29, 5, k46 + LED_T, // 30, T, k41 + LED_G, // 31, G, k43 + LED_B, // 32, B, k45 + LED_SPC, // 33, SPACE, k94 + LED_F6, // 34, F6, k63 + LED_6, // 35, 6, k56 + LED_Y, // 36, Y, k51 + LED_H, // 37, H, k53 + LED_N, // 38, N, k55 + LED_F7, // 39, F7, k71 + LED_7, // 40, 7, k57 + LED_U, // 41, U, k50 + LED_J, // 42, J, k52 + LED_M, // 43, M, k54 + LED_F8, // 44, F8, k76 + LED_8, // 45, 8, k67 + LED_I, // 46, I, k60 + LED_K, // 47, K, k62 + LED_COMM, // 48, ,, k64 + LED_RALT, // 49, Alt_R, k95 + LED_F9, // 50, F9, ka6 + LED_9, // 51, 9, k77 + LED_O, // 52, O, k70 + LED_L, // 53, L, k72 + LED_DOT, // 54, ., k74 + LED_FN, // 55, FN, k92 + LED_F10, // 56, F10, ka7 + LED_0, // 57, 0, k87 + LED_P, // 58, P, k80 + LED_SCLN, // 59, ;, k82 + LED_SLSH, // 60, ?, k85 + LED_F11, // 61, F11, ka3 + LED_MINS, // 62, -, k86 + LED_LBRC, // 63, [, k81 + LED_QUOT, // 64, ", k83 + LED_RCTL, // 65, Ct_R, k04 + LED_F12, // 66, F12, ka5 + LED_L1, // 67, LED, l01 + LED_R1, // 68, LED, l11 + LED_INS, // 69, Prt, k97 -- remapped to INS + LED_L2, // 70, LED, l02 + LED_R2, // 71, LED, l12 + LED_HOME, // 72, Del, k65 + LED_L3, // 73, LED, l03 + LED_R3, // 74, LED, l13 + LED_PGUP, // 75, PgUp, k15 + LED_L4, // 76, LED, l04 + LED_R4, // 77, LED, l14 + LED_EQL, // 78, =, k66 + LED_RIGHT, // 79, Right, k05 + LED_L5, // 80, LED, l05 + LED_R5, // 81, LED, l15 + LED_END, // 82, End, k75 + LED_L6, // 83, LED, l06 + LED_R6, // 84, LED, l16 + LED_BSPC, // 85, BSpc, ka1 + LED_PGDN, // 86, PgDn, k25 + LED_L7, // 87, LED, l07 + LED_R7, // 88, LED, l17 + LED_RBRC, // 89, ], k61 + LED_RSFT, // 90, Sh_R, k91 + LED_L8, // 91, LED, l08 + LED_R8, // 92, LED, l18 + LED_BSLS, // 93, \, ka2 + LED_UP, // 94, Up, k35 + LED_LEFT, // 95, Left, k03 + LED_ENT, // 96, Enter, ka4 + LED_DOWN // 97, Down, k73 + }; + + const uint8_t LED_LIST_WASD[] = { LED_W, LED_A, LED_S, LED_D }; + + const uint8_t LED_LIST_ARROWS[] = { LED_LEFT, LED_RIGHT, LED_UP, LED_DOWN }; + + const uint8_t LED_LIST_FUNCROW[] = { LED_ESC, LED_F1, LED_F2, LED_F3, LED_F4, LED_F5, LED_F6, LED_F7, LED_F8, LED_F9, LED_F10, LED_F11, LED_F12, LED_INS}; + + const uint8_t LED_LIST_NUMROW[] = { LED_GRV, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, LED_BSPC, LED_HOME}; + + const uint8_t LED_LIST_NAV[] = { LED_HOME, LED_PGUP, LED_PGDN, LED_END}; + + const uint8_t LED_LIST_MODS[] = { LEB_TAB, LED_CAPS, LED_LSFT, LED_LCTL, LED_LWIN, LED_LALT, LED_RALT, LED_FN, LED_RCTL}; + + const uint8_t LED_LIST_NUMPAD[] = { + LED_7, LED_8, LED_9, + LED_U, LED_I, LED_O, + LED_J, LED_K, LED_L, + LED_M, LED_COMM, LED_DOT + }; + + const uint8_t LED_SIDE_LEFT[] = { LED_L1, LED_L2, LED_L3, LED_L4, LED_L5, LED_L6, LED_L7, LED_L8}; + + const uint8_t LED_SIDE_RIGHT[] = { LED_R1, LED_R2, LED_R3, LED_R4, LED_R5, LED_R6, LED_R7, LED_R8}; + +#endif diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/rules.mk b/keyboards/gmmk/pro/ansi/keymaps/solartempest/rules.mk new file mode 100644 index 000000000000..a6b64334558d --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/rules.mk @@ -0,0 +1,32 @@ +VIA_ENABLE = yes +MOUSEKEY_ENABLE = yes +BOOTMAGIC_ENABLE = lite # Enable Bootmagic Lite + +TD_LSFT_CAPSLOCK_ENABLE = yes +IDLE_TIMEOUT_ENABLE = yes +STARTUP_NUMLOCK_ON = yes +ENCODER_DEFAULTACTIONS_ENABLE = yes + +LEADER_ENABLE = no # Leader keys +COMBO_ENABLE = no # Combo keys +TAP_DANCE_ENABLE = yes + +LTO_ENABLE = no # MCU has 256kB space - 4kB for the EEPROM. + + +SRC += jonavin.c +ifeq ($(strip $(ENCODER_DEFAULTACTIONS_ENABLE)), yes) + OPT_DEFS += -DENCODER_DEFAULTACTIONS_ENABLE +endif +ifeq ($(strip $(TD_LSFT_CAPSLOCK_ENABLE)), yes) + OPT_DEFS += -DTD_LSFT_CAPSLOCK_ENABLE +endif +ifeq ($(strip $(IDLE_TIMEOUT_ENABLE)), yes) + OPT_DEFS += -DIDLE_TIMEOUT_ENABLE +endif +ifeq ($(strip $(STARTUP_NUMLOCK_ON)), yes) + OPT_DEFS += -DSTARTUP_NUMLOCK_ON +endif +ifeq ($(strip $(COLEMAK_LAYER_ENABLE)), yes) + OPT_DEFS += -DCOLEMAK_LAYER_ENABLE +endif \ No newline at end of file From 97f5ecfcaed5ca7e6e58f7d40fadd2913672eee1 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Wed, 8 Sep 2021 23:35:35 -0400 Subject: [PATCH 009/155] Add firmware file. --- .../sofle/solartempest_sofle_via.hex | 1792 +++++++++++++++++ 1 file changed, 1792 insertions(+) create mode 100644 keyboards/solartempest/sofle/solartempest_sofle_via.hex diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex new file mode 100644 index 000000000000..307e1764f1c8 --- /dev/null +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -0,0 +1,1792 @@ +:100000000C94DE060C9425070C9425070C94FF2F06 +:100010000C9425070C9425070C9425070C942507B0 +:100020000C9425070C9425070C94EA190C94A61936 +:100030000C9452260C9425070C9425070C94250744 +:100040000C9425070C9425070C9425070C94250780 +:100050000C9425070C94C11A0C9425070C942507C1 +:100060000C9425070C9425070C9425070C94250760 +:100070000C9425070C9425070C9425070C94250750 +:100080000C9425070C9425070C9425070C94250740 +:100090000C9425070C9425070C9425070C94250730 +:1000A0000C9425070C9425070C94250737032B6423 +:1000B000AAFF000000001C032B64AAFF0000000040 +:1000C00004032B64AAFF000000000000D7FF78FFA4 +:1000D00000000000000080FF64FF0000000000003E +:1000E000FCFF7DFF0000000000005FFF5AFF0000E2 +:1000F000000005010980A101850319012AB7001537 +:100100000126B700950175108100C0050C0901A1F9 +:1001100001850419012AA002150126A00295017586 +:10012000108100C00660FF0961A101096215002667 +:10013000FF009520750881020963150026FF0095D0 +:100140002075089102C005010906A101050719E003 +:1001500029E71500250195087501810295017508AB +:1001600081010507190029FF150026FF0095067576 +:100170000881000508190129059505750191029569 +:100180000175039101C000000000000000000000A4 +:10019000000000000000000000000000000000005F +:1001A000000000000000000000007E0F00D4FFFFF0 +:1001B000FFC70000007800000000000000002A2BAC +:1001C0002800000000000000000000000000000007 +:1001D0000029000000002C1E342021222434262770 +:1001E000252E362D3738271E1F2021222324252691 +:1001F0003333362E37381F0405060708090A0B0C5F +:100200000D0E0F101112131415161718191A1B1CA6 +:100210001D2F3130232D350405060708090A0B0C64 +:100220000D0E0F101112131415161718191A1B1C86 +:100230001D2F3130354C00DA02815AD9F1DB20A470 +:10024000A62EAF00A0C000A1C800AED580A81FD3C5 +:1002500000408D142000E800DE00D400CA00C00079 +:10026000B600AC000000000000000000000000002C +:1002700000000000000080C0E0F0F0F898F8F8F806 +:10028000F0702000000000000060C080000000004E +:10029000C0F0F0F0E0C0877FFFFFF1C3030303016C +:1002A0000100000000000000000103071F3E78F776 +:1002B000FF7F3D03070F1E3D7FFFFFFFFC7800001F +:1002C000000000000000000000000000000000002E +:1002D000000000000000000080E0F0F0F898F8F85E +:1002E000F8F070200000008000000000C0F8FC3E24 +:1002F000DEFEFCF80000E0FEFF7F070103030301C0 +:1003000001000000000000071E3C78FFFF7F010095 +:10031000071F3F7C78FFFF7F070000000000000000 +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000008080BD +:100340000000000000000000C000000000000000ED +:100350000000000000000000F8FCFEFE1F3F3939DD +:100360003F3F1E1E0C000000010F3E7870F8FCFE9F +:100370007E3E3C3C787878F0F1FF7F7F3E000000C5 +:10038000000000000000000000000000000000006D +:1003900000000000000000008080C0C06060C0C09D +:1003A000C0800000000000002060C080000000004D +:1003B0000000000000003E7FFFFFE7C70E0E0F0F9A +:1003C0000707030000000000000001071F3E78F04F +:1003D000FC7E1E1F0F0E1E1C3D7FFFFFFFFC7800E2 +:1003E000000000000000000000000000000000000D +:1003F000E0F0F0F8F8CCCCF8F8F0F0600000000085 +:1004000000000000000000000000000000000000EC +:100410000F3F7FFCF9F1E1C1810000000000000006 +:1004200000000000000000000000000C387060E0D8 +:10043000E0F0F0F8F9FFFFFFFFFF7E1C0000000076 +:1004400000000000000000000000000000000000AC +:10045000E0F0F0F8F8CCCCF8F8F0F0600000000024 +:10046000000000000000000000000000000000008C +:100470000F3F7FFCF9F1E1C1810000010102060C90 +:10048000040000000000000000000000387C60E074 +:10049000E0F0F0F8F9FFFFFFFFFF7E1C0000000016 +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000CCF87000000000F8 +:1004D0000000C0F0F8F87CFCEEE6FCFC7878B00098 +:1004E00000000000000000003F7FF1F8F87C7CF87D +:1004F000F0F0F1E7EFEFFEFEFEFCFCF8F06000012B +:1005000003060200000000000000000000000000E0 +:1005100000000000000000000000000000000000DB +:10052000000000000000000080E0F81C0000000057 +:100530000000C0F0F8F87CFCEEE6FCFC78783000B7 +:1005400000000000000000003F7FF0F8F87C7CF81D +:10055000F0F0F1E7EFEFFEFEFEFCFCF8F0600000CB +:10056000000000000000000000000080C0C0E0E0CB +:100570003070E0E0C0C0800000000000000000001B +:10058000000000000000000000001F7FFFFFE7E701 +:10059000EFEFCFCB838301000000000000000000DC +:1005A0000000000000000000061C3878F1E3E3E7DB +:1005B000F7F7FFFFFFFF7F3E000000000000000094 +:1005C000000000000000000000000000000000002B +:1005D000000000000000000080C0E0E060E0C0C05B +:1005E00080800000000000000000000000000020EB +:1005F000F8FEFFFFFF9F0F0E1F1F3F3F7EE68303A6 +:100600000F43439088080000031E3C78F0E0E0F0C0 +:10061000F0FBFFFFFF7F7F380000000000000000BC +:10062000000000000000000004F6B8F8D8F0E0C0B8 +:1006300000000080C0E0E0F0F0F0F0E0E0C08000FA +:100640000000000000000080C0E1F3FB7F1F0F00EE +:1006500000F0FFFF3F030100000080C1F3FF7F1F98 +:10066000000080C0E0301E3F3F7FF9F0F070783C22 +:100670003F1F0F03000000001C3F7F7FFBF1F0785D +:100680003C1E0F03000000010101010101010101F5 +:100690000202020202020202020303030303030333 +:1006A0000304040404040404050505050506060600 +:1006B0000606070707070708080808090909090ABD +:1006C0000A0A0B0B0B0C0C0C0D0D0D0E0E0E0F0F62 +:1006D0000F101011111112121313141415151616F0 +:1006E0001717181819191A1A1B1B1C1D1D1E1E1F5F +:1006F0002020212222232424252626272829292AAE +:100700002B2C2D2D2E2F30313232333435363738D5 +:10071000393A3B3C3D3E3F404142434445464748D1 +:10072000494A4C4D4E4F50515354555658595A5BA7 +:100730005D5E5F616264656668696B6C6D6F707247 +:10074000737577787A7B7D7E8082838587888A8CB3 +:100750008E8F91939596989A9C9EA0A2A3A5A7A9E7 +:10076000ABADAFB1B3B5B7BABCBEC0C2C4C6C9CBDE +:10077000CDCFD1D4D6D8DBDDDFE2E4E7E9EBEEF094 +:10078000F3F5F8FAFDFFFFAA7F55401C1004010D98 +:10079000190A24232221201F1E1D1B1A18171615A3 +:1007A000141312110F0E0C0B0908070605030200A3 +:1007B0002D3945483C303F25262728292A2B2C2E29 +:1007C0002F31323334353637383A3B3D3E404142A3 +:1007D000434446474907087F0807003E5B4F5B3E9E +:1007E000003E6B4F6B3E001C3E7C3E1C00183C7E66 +:1007F0003C18001C577D571C001C5E7F5E1C0000CF +:10080000183C180000FFE7C3E7FF00001824180099 +:1008100000FFE7DBE7FF0030483A060E00262979A3 +:10082000292600407F05050700407F05253F005A27 +:100830003CE73C5A007F3E1C1C0800081C1C3E7F05 +:100840000014227F2214005F5F005F5F0006097FB3 +:10085000017F00006689956A0060606060600094B6 +:10086000A2FFA2940008047E04080010207E20103D +:100870000008082A1C0800081C2A0808001E10107E +:100880001010000C1E0C1E0C0030383E38300006D4 +:100890000E3E0E060000000000000000005F000099 +:1008A00000000700070000147F147F1400242A7F33 +:1008B0002A120023130864620036495620500000B3 +:1008C0000807030000001C224100000041221C0018 +:1008D000002A1C7F1C2A0008083E080800008070BF +:1008E00030000008080808080000006060000020D0 +:1008F00010080402003E5149453E0000427F40007E +:10090000007249494946002141494D3300181412EB +:100910007F10002745454539003C4A49493100418F +:100920002111090700364949493600464949291E1F +:100930000000001400000000403400000000081413 +:10094000224100141414141400004122140800025F +:1009500001590906003E415D594E007C1211127C7E +:10096000007F49494936003E41414122007F4141D3 +:10097000413E007F49494941007F09090901003E84 +:1009800041415173007F0808087F0000417F41000A +:10099000002040413F01007F08142241007F404079 +:1009A0004040007F021C027F007F0408107F003E51 +:1009B0004141413E007F09090906003E4151215E47 +:1009C000007F091929460026494949320003017F61 +:1009D0000103003F4040403F001F2040201F003FD8 +:1009E0004038403F00631408146300030478040394 +:1009F000006159494D4300007F4141410002040814 +:100A0000102000004141417F000402010204004027 +:100A10004040404000000307080000205454784044 +:100A2000007F284444380038444444280038444473 +:100A3000287F0038545454180000087E090200181A +:100A4000A4A49C78007F080404780000447D400042 +:100A5000002040403D00007F102844000000417FFE +:100A60004000007C04780478007C08040478003896 +:100A70004444443800FC182424180018242418FC8A +:100A8000007C080404080048545454240004043F23 +:100A90004424003C4040207C001C2040201C003CA2 +:100AA0004030403C004428102844004C9090907CFA +:100AB000004464544C4400000836410000000077B4 +:100AC0000000000041360800000201020402003C60 +:100AD0002623263C00000000000000404040F0F8C3 +:100AE000F8FF38FFF8F83FF8F8FF38FFF8F8F04063 +:100AF000404000000000000080C0C0C0800000C076 +:100B0000C08000000080C0C000C0C0000080C0C025 +:100B10000000000000C0C0C0C0C000C0C000000095 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B500000000000C0F0F8FC3E1E06010000007F0F +:100B60004141417F007F4141417F000080C0E07EE4 +:100B70005B4F5BFEC00000C000DCD7DEDEDED7DCF2 +:100B800000C00000000000000000000000000000A5 +:100B90000000000000000000000000494949FFFF7C +:100BA000FFFFE0DFBFBF00BFBFDFE0FFFFFFFF4988 +:100BB000494900000000001F3F6060E0BF1F007F48 +:100BC0007F071E381E077F7F007F7F0E1F3B7160EF +:100BD00000000000007F7F0C0C0C007E7E007F7EFA +:100BE0000303007F7E03037E7E03037F7E000F3EB0 +:100BF000703C063C703E0F00327B49493F7E007FCF +:100C00007E0303001E3F69696F260000000000009C +:100C100000000000030F1F3F3C7870600000007F61 +:100C20004141417F007F4141417F00307B7F7830EF +:100C3000202030787F3B0003000F7F0F0F0F7F0FC6 +:100C400000030000000000000000000000000000A1 +:100C50000000000000000000000000010101070F7B +:100C60000F7F0F7F0F0F7E0F0F7F0F7F0F0F07017B +:100C70000101000000000000000000000101000070 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D1000000000000000AF00AE09025B000301000C +:100D2000A0FA0904000001030101000921110100DA +:100D3000012240000705810308000A09040100029E +:100D40000300000009211101000122220007058291 +:100D5000032000010705030320000109040200012C +:100D6000030000000921110100012232000705845F +:100D70000320000A120100020000000832FC871262 +:100D80000200010200011E0353006F006C006100AD +:100D900072006900750073005F0053006F00660009 +:100DA0006C006500000010034B00650079006800CE +:100DB00069007600650000000403090411241FBEC9 +:100DC000CFEFDAE0DEBFCDBF04B603FE27C08091CF +:100DD000670690916806A0916906B0916A0687300F +:100DE000904BA740B04BD1F4109267061092680662 +:100DF0001092690610926A0614BE84B7877F84BF7A +:100E00000FB6F894A8958091600088618093600087 +:100E1000109260000FBEE0E0F8E3099512E0A0E058 +:100E2000B1E0E6EAFEE602C005900D92A833B107F4 +:100E3000D9F726E0A8E3B2E001C01D92A736B207B9 +:100E4000E1F70E9479260C941A370C940000CF9396 +:100E5000DF934091650650916606455654409A01CD +:100E6000205A3F4F21303240C0F020E032E0241BB6 +:100E7000350B6091630470916404FC01CA01240F76 +:100E8000351FC1E0D0E08217930750F070936404DF +:100E900060936304DF91CF91089520E630E0E9CFBD +:100EA0004491DC01AB59BB4F5C91451781F04C93E9 +:100EB000AC01A5E056954795AA95E1F7DE0102C081 +:100EC000AA0FBB1F4A95E2F7AD016A2B752B01965D +:100ED0003196D9CFE8EDF0E080818E7F808310924B +:100EE000E2001092DA001092E100A0EEB0E08C91E6 +:100EF00081608C9380818F77808319BCA7EDB0E0EF +:100F00008C918E7F8C9380818F7E8083109245049C +:100F100008952091E4003091E50095E6A901209123 +:100F2000EC00822F817020FF06C08091E80080FFD6 +:100F300006C080E008952091E80022FD1AC080914B +:100F40005304882389F0853089F08091EB0085FD7A +:100F50000FC02091E4003091E50042175307F9F2E9 +:100F60009150E1F684E0089582E0089583E00895C9 +:100F700081E00895EF92FF920F931F93CF937C012E +:100F80008B010E948907C82F811117C08091E8004A +:100F900085FD0BC08091E8008E778093E8000E9469 +:100FA0008907882399F3C82F08C0F70181917F0131 +:100FB0008093F1000150110949F78C2FCF911F91B7 +:100FC0000F91FF90EF9008958091550487FF13C013 +:100FD0008091E80082FF06C08091E8008B778093C3 +:100FE000E80004C0809153048111F2CF08958091EC +:100FF00053048823D9F38091E80080FFF8CF8091D3 +:10100000E8008E77ECCF982F9093E900242F762F6D +:1010100050E0891731F07091EC002091ED00509173 +:10102000F00021FD07C09F5F973071F78093E900C2 +:1010300081E008953091EB003E7F3093EB003091DA +:10104000ED003D7F3093ED003091EB003160309347 +:10105000EB007093EC002093ED005093F000209192 +:10106000EE0027FDE0CF80E00895CF92DF92EF926F +:10107000FF920F931F93CF93DF93C8EDD0E0888149 +:101080008F7E8883E7EDF0E080818160808384E05B +:1010900082BF81E08093450488818E7F888302EE41 +:1010A00010E0F80110821092DA0081EEC82ED12CE7 +:1010B000F601108288818F77888388818068888391 +:1010C00088818F7D888319BC109253041092540438 +:1010D000109252041092510490EEE92EF12CF70177 +:1010E00080818B7F808388818160888342E060E09B +:1010F00080E00E940308F60180818E7F8083F801E2 +:10110000808181608083808188608083F701808115 +:101110008E7F8083888180618883DF91CF911F914A +:101120000F91FF90EF90DF90CF900895FC01809198 +:101130005B0490915C0486179707A0F06115710518 +:1011400029F49091E8009E779093E80090E0611573 +:10115000710551F4911108C08091E80082FF34C0FC +:1011600080E00895BC01F2CF809153048823C1F13F +:101170008530C1F18091E80083FD30C08091E800A6 +:1011800082FDEACF8091E80080FFE1CF8091F300FB +:101190002091F200382F6115710519F028303105C2 +:1011A00058F091E02830310509F090E02091E800F6 +:1011B0002E772093E800CBCF81918093F10061508E +:1011C00071092F5F3F4FE7CF80915304882341F08F +:1011D000853041F08091E80083FFBECF81E0089523 +:1011E00082E0089583E00895089580914804089569 +:1011F0002FB7F89460913E0470913F0480914004B1 +:10120000909141042FBF089520913B0430913C04FC +:101210002817390771F090933C0480933B04E091C8 +:101220003904F0913A04309721F00084F185E02DE3 +:10123000099408952091370430913804281739070C +:1012400071F09093380480933704E0913904F09161 +:101250003A04309721F00680F781E02D0994089533 +:1012600020912A0436E0839FC0011124629F800DE3 +:10127000911D1124811522E0920714F090E080E086 +:101280008B599B4F90936606809365060895FC01E9 +:10129000680F791F8FEF91E32191822728E030E0DA +:1012A00087FF09C0880F892721503109C9F7E61740 +:1012B000F70791F70895880FF7CFFA01811101C060 +:1012C000FB01099480915E04982F9E7F61F48170E8 +:1012D000826080935E0480916104813A18F080EA14 +:1012E0008093610408958831B0F381708661F1CFF5 +:1012F000AF92BF92DF92EF92FF920F931F93CF9323 +:10130000DF93082F162FE901E42FF0E0EA57F94F99 +:10131000611110C0E4915E2F4E2F4983E8835A83F8 +:10132000DF91CF911F910F91FF90EF90DF90BF90D1 +:10133000AF900895E62EF12C4491D42EE42FF0E0E6 +:1013400026E0829FC00111242FEF30E0B9010E94F6 +:101350007931802F90E0880F991F55E5569FD00175 +:10136000579FB00D11248A1B9B0B982F990F890F43 +:101370005901AE18BF08AE9ED001AF9EB00DBE9E03 +:10138000B00D11245B2F189F80011124012F11270C +:101390005901A01AB10AAE9E8001AF9E100DBE9EEB +:1013A000100D11245901A81AB108AE9CC001AF9CC0 +:1013B000900DBE9C900D1124892F9927281B390B65 +:1013C0002E9FC0012F9F900D3E9F900D1124E92F5D +:1013D00062307105A1F050F46115710509F49DCFDB +:1013E0006130710581F0EB2F512F97CF643071057B +:1013F00069F080F06630710509F48FCFF4CFE42FE7 +:101400004B2F592F8ACFE42F412F87CFEB2F542F0B +:10141000492F83CF4B2F5D2DE12F7FCF80E00895A3 +:1014200078940895F894E82FE295EF70F0E031A1F8 +:10143000282F2F7081E090E001C0880F2A95EAF7ED +:10144000982F9095932391A392A1892B82A30C941A +:10145000100A9091E50292FF06C0282F28712830CB +:10146000F9F4877F846093FF06C0282F2871283104 +:10147000F1F4877E84612091E60220FF06C0382FB8 +:1014800038713830D9F4877F816021FF06C0282F5A +:1014900028712831D1F4877E816194FD877E08957B +:1014A000282F24712430F9F68B7F8860DCCF282F19 +:1014B0002471243101F78B7E8861DDCF382F3171A3 +:1014C000313019F78E7F8860E0CF282F21712131CC +:1014D00021F78E7E8861E1CFCF93DF93EC018238D4 +:1014E000910581F1B0F58133910509F491C020F5A2 +:1014F0008932910509F485C08A9709F490C0C11515 +:1015000021E5D20708F0AAC0C11530E5D30708F0DD +:10151000F2C0CF3BD10508F089C0C83AD10508F028 +:10152000DFC0C53AD10508F0D3C0C430D105F8F406 +:10153000C130D105E1F040C08533910509F45AC0AE +:10154000C997E9F68091E502837089F0C0EED0E09A +:101550000EC0833E910599F170F4803E910501F132 +:10156000823E910561F68091E50282FD21C0CE01A7 +:10157000DF91CF910895863E910561F1873E9105F7 +:1015800071F1843E910509F0BACF8091E60281FFA6 +:10159000EECF8091E502C7EED0E084FD0DC0E7CF2D +:1015A0008091E50280FDF7C09091E60290FFDFCFC9 +:1015B000C3EED0E084FFDBCFD0E0C0E0D8CF809195 +:1015C000E50282FDEBC09091E60290FDBFCF84FF63 +:1015D000CECFF2CF8091E50283FDDDCFC8CF8091E1 +:1015E000E50283FDDEC09091E60291FFF0CFC4EEEC +:1015F000D0E0BDCF8091E50285FFB9CFC9E2D0E050 +:10160000B6CF8091E50285FFB2CFC5E3D0E0AFCF82 +:101610008091E50286FFABCFCAE2D0E0A8CF8091EF +:10162000E50286FFA4CFC1E3D0E0A1CFC11540E21F +:10163000D40760F4C11581E0D80708F098CFCE0137 +:10164000815E9109079708F492CFB6CFC11590E457 +:10165000D90708F4B1CFDF70D06A89CFC11524E56E +:10166000D20778F4C11533E5D30708F072C0C1156D +:1016700042E5D40708F05CC0DC2FCC27C16FD06AEC +:1016800076CFC1158AE5D80778F4C11599E5D90751 +:1016900008F073C0C11528E5D20708F48DCFDC2F00 +:1016A000CC27C06FD06A63CFCE019056811590428F +:1016B00008F082CF8D2F8F710E94290A90E0982F19 +:1016C000882788279F719C012C2BE901D0624FCF7E +:1016D000C55AD0E0CF52DE4FC881D0E0D06447CFAA +:1016E000C85AD0E0CC0FDD1FCC52DE4F0990D88114 +:1016F000C02DD4643CCFCE0164E0969587956A9561 +:10170000E1F783702C2F26952695237040E2249FC5 +:1017100090011124382B8C2F8370C1E0D0E002C0DF +:10172000CC0FDD1F8A95E2F7C22BD32BDC681FCFCD +:10173000CE018370992721E030E002C0220F331FD1 +:101740008A95E2F7C695C69580E2C89FE00111240C +:10175000EBCFCE018370992721E030E002C0220F49 +:10176000331F8A95E2F7C695C69590E2C99FE001BE +:101770001124C22BD32BDA68FACE8C2F8F700E94E3 +:10178000290A34E0D695C7953A95E1F7CF709C2F9A +:10179000EC01D069ECCEC9E3D0E0E9CEC2EED0E0F6 +:1017A000E6CEC6EED0E0E3CE0C94F8088091460475 +:1017B00090919B02892B90919A02892B80933A02F7 +:1017C000E0913904F0913A04309731F00280F381CE +:1017D000E02D8AE392E00994089580919902909116 +:1017E0006802981301C008958F5F8770FACF27E0D1 +:1017F000929F800D1124982F9770869586958695D7 +:1018000023E0829FF0011124E95BFD4F50E040E0AE +:1018100080E0219130E0092E02C0369527950A9488 +:10182000E2F721703327042E01C0220F0A94EAF751 +:10183000822B4F5F5F4F4330510559F7089527E0E2 +:10184000929F800D1124982F977041E001C0440FA2 +:101850009A95EAF786958695869593E0899FF0019B +:101860001124E95BFD4F90E080E070E05191DF01D1 +:1018700011979B01082E02C0369527950A94E2F72E +:10188000217021952527242325272C930196833029 +:10189000910561F7089590E080E00E941A0990E0B8 +:1018A00080E00E94040910929B0210929A020C940C +:1018B000D60B80939C020C944B0C882341F08095AE +:1018C000909146048923809346040C94D60B089586 +:1018D000882339F090914604982B909346040C94F9 +:1018E000D60B08958823B1F19CEF980F913A70F4CC +:1018F000ECE3F2E09191891303C0DF0111971C9290 +:1019000042E0E234F407B1F70C94D60B90E2980F62 +:10191000983088F4877021E030E0A90102C0440FBC +:10192000551F8A95E2F7CA01809590914604892354 +:1019300080934604E9CF9BE5980F933020F490E024 +:1019400080E00C941A09885A873120F490E080E0F6 +:101950000C94040908950F931F93CF93C82F8823E5 +:1019600009F469C08CEF8C0F813AB0F50CE312E0FA +:1019700082E492E0F8012191C21701F122E0E23401 +:10198000F207C9F7EFEF80E0D8019D918D01C917EB +:1019900081F0EF3F19F4911101C0E82F8F5F86307D +:1019A00099F7EF3F31F00E2E000CFF0BE65CFD4F78 +:1019B000C283CF911F910F910C94D60BECE3F2E010 +:1019C0002191C21303C0DF0111971C928E179F074C +:1019D000B9F70E94D60BD6CF80E28C0F883068F41E +:1019E000C77021E030E001C0220FCA95EAF780916C +:1019F0004604822B80934604DCCFEBE5EC0FE3300A +:101A000050F4F0E0EF52FE4F808190E0CF911F91B3 +:101A10000F910C941A09C85AC73168F4EC2FF0E002 +:101A2000EE0FFF1FEC52FE4F80819181CF911F91ED +:101A30000F910C940409CF911F910F910895982F45 +:101A400092959F7011F0892F94E0282F2695269566 +:101A500011F09E5F822F869509F09F5F892F089570 +:101A6000CF92DF92EF92FF920F931F93CF93DF936A +:101A70006C017B0164E670E088E70E94562EEC0161 +:101A800097FD12C010E000E0F601E00FF11F849115 +:101A900064E670E00E94D02EEC01892B29F40F5FE0 +:101AA0001F4F0E151F0581F70E94532FCE01DF91A6 +:101AB000CF911F910F91FF90EF90DF90CF900895FD +:101AC0008091350490913604911103C091E08927EB +:101AD0000895882369F062E070E087E19DE00E944C +:101AE000300D892B19F0809135040895109235043A +:101AF00080913504EBCFCF93C091350480913604AB +:101B00008823D1F00E94F8086058774C8E4F9F4F81 +:101B100060933104709332048093330490933404BF +:101B2000C11108C062E070E085E19DE00E94300DC7 +:101B3000892B29F0C09135048C2FCF91089581E035 +:101B400080933504F7CF90915304943029F5809316 +:101B5000420470934404609343049093E9008FEF30 +:101B60009091E800815095FD06C095ED9A95F1F7AA +:101B700000008111F5CF8091E80085FF0DC050E095 +:101B800040E063E070E082E494E00E94BA07809154 +:101B9000E8008E778093E8000895BC0184E00C94FF +:101BA000A30DBC0183E00C94A30DCF93DF93EC0154 +:101BB00081E08093E9008FEF9091E800815095FDDE +:101BC00006C095ED9A95F1F700008111F5CF80914F +:101BD000E80085FF14C050E040E068E070E0CE010E +:101BE0000E94BA078091E8008E778093E80088E031 +:101BF000FE01A9E4B4E001900D928A95E1F7DF912E +:101C0000CF9108959F92AF92BF92CF92DF92EF92C1 +:101C1000FF920F931F93CF93DF937C015B016A01C7 +:101C20008091E00201E010E08A3010F40AE010E058 +:101C3000C1E0D0E0F894B501C701F6010995982EEE +:101C40000E94100A911004C021960C171D076CF415 +:101C5000892DDF91CF911F910F91FF90EF90DF9031 +:101C6000CF90BF90AF909F900895CC9F9001CD9F53 +:101C7000300D300D112490E080E045E34A95F1F7F6 +:101C80000000019682179307C1F7D4CF8091AB0271 +:101C9000811110C08091D80080618093D8008AE1C2 +:101CA0008A95F1F700C08091D90080FF0AC081E0D9 +:101CB0008093AB0281E09091AB02913009F080E01B +:101CC000089582E08093AB020E946A071092530449 +:101CD000F1CF0E94460E882351F0E0913904F09133 +:101CE0003A04309721F00190F081E02D099480E0D2 +:101CF00008951F93CF93DF93182FEB010E94AB0C35 +:101D00008FE99FE00197F1F700C000002197C1F72C +:101D1000812FDF91CF911F910C94720C4F925F92A3 +:101D20006F927F928F929F92AF92BF92CF92DF92EB +:101D3000EF92FF920F931F93CF93DF93CDB7DEB750 +:101D4000CE5DD1090FB6F894DEBF0FBECDBF509067 +:101D5000770180915E0480FF5DC080904A0390907F +:101D60004B038114910409F068C0EBE8F7E09E0191 +:101D70002F5F3F4FBE0161527F4FC901A4914A2F8F +:101D800050E0DA01AA0FBB1FA40FB51FA45BBC4F24 +:101D9000CD90DD90EC90D901CD92DD92ED929D0138 +:101DA00031966A177B0751F72091760143E0249F13 +:101DB000800D911D1124539A2BB1277F3BB13860C0 +:101DC0005FB7F894BC01549E600D711D11248617F5 +:101DD000970709F090C05FBF8FE594E00197F1F796 +:101DE00000C00000C252DF4F0FB6F894DEBF0FBE36 +:101DF000CDBFDF91CF911F910F91FF90EF90DF90BA +:101E0000CF90BF90AF909F908F907F906F905F909A +:101E10004F900895809178019091790123E0829FFD +:101E2000F0011124E45BFC4F891708F096CF118272 +:101E3000108212828F5F3396F7CF80914903811110 +:101E400094CFD12CC12C66246394712C53E0452E81 +:101E50008091480393010C2C01C0220F0A94EAF7E9 +:101E6000822309F43FC0F601EE0FFF1FE80DF91DB4 +:101E7000E590F490E114F10409F477CF45E050E0E7 +:101E8000B701CE0101960E94323209810F3F51F114 +:101E90008A81800F9927991F8B34910514F08AE469 +:101EA00090E05C01AA0CBB1C8A0D9B1DDC01A45BAD +:101EB000BC4F5D01049D80011124045B1C4F0A1579 +:101EC0001B0520F0B5E0EB0EF11CD8CF4D81413A57 +:101ED00008F040EA98016C818B810E9478090D5FBF +:101EE0001F4FEDCFEFEFCE1ADE0AF8E0CF16D10488 +:101EF00009F0AECF3ACFFC014191CF01E8E03BB908 +:101F0000000000C047FF2BB9440F000000C000C014 +:101F100000C02BB900C0EA9591F759CFEEE5F4E087 +:101F200080818E7F8083E5E4F3E08281816082831B +:101F30002FEF80E792E0215080409040E1F700C011 +:101F400000000C948E0EECE3F2E086E0DF011D92BF +:101F50008A95E9F70C944B0C1F93CF93DF93CDB781 +:101F6000DEB7AA970FB6F894DEBF0FBECDBF85E5EA +:101F700094E02091F100DC012D93CD01B4E08D358A +:101F80009B07B9F780915604833009F471C0B8F407 +:101F9000813009F448C0823009F4B4C08091E8006F +:101FA00083FF3CC180915504909156049A3008F00B +:101FB00035C1E92FF0E0E45EF84C0C94CC318A3066 +:101FC00009F48FC08B3009F470C0893039F78091E3 +:101FD0005504813219F78091590490915A04009761 +:101FE00011F00297D9F68091E800877F8093E8008E +:101FF0008091E80082FF37C09091F3008091F20059 +:10200000029729F48091F1008B7F813021F4809137 +:10201000F100809348048091E8008B778093E8007A +:102020000E94E407BBCF80915504813A09F0B6CFF6 +:102030008091E800877F8093E80080915904909117 +:102040005A04892B61F468E089E494E070E00E940E +:1020500096088091E8008B778093E8009FCF60E03E +:1020600090E080E0F3CF809153048111C1CF96CFEF +:1020700080915504813A09F091CF80915904909153 +:102080005A04892B09F08ACF8091E800877F8093DA +:10209000E8008091E80080FFFCCF80917B01809375 +:1020A000F1008091E8008E77B9CF8091550481329C +:1020B00009F074CF8091590490915A04892B09F04A +:1020C0006DCF8091E800877F8093E8000E94E4074D +:1020D0008091570480937B01109246040E94A30FC5 +:1020E0005DCF80915504813209F058CF8091E8008E +:1020F000877F8093E8000E94E407809158048093D2 +:1021000047044CCF80915504813A09F047CF809124 +:10211000E800877F8093E8008091E80080FFFCCF93 +:1021200080914704BCCF803899F0823809F076C09E +:10213000809159048F70873008F070C08093E90057 +:102140008091EB0085FB882780F91092E90006C09A +:102150008091510490915204911182609091E80015 +:10216000977F9093E8008093F1001092F1008091A6 +:10217000E8008E77B5C1882309F4A2C1823009F046 +:102180004DC0809157048111A6C1809159048F7070 +:102190002FEF280F263008F041C08093E9002091EE +:1021A000EB0020FF98C1933031F48091EB00806206 +:1021B0008093EB0090C19091EB0090619093EB00C5 +:1021C00021E030E001C0220F8A95EAF72093EA006F +:1021D0001092EA008091EB008860EACF81111EC066 +:1021E000109157041F778091E3008078812B8093B2 +:1021F000E3008091E800877F8093E8000E94E40775 +:102200008091E80080FFFCCF8091E300806880939C +:10221000E30082E0111183E0809353048091E80091 +:1022200083FF0AC08091E800877F8093E800809157 +:10223000EB0080628093EB00AA960FB6F894DEBFA5 +:102240000FBECDBFDF91CF911F910895805882308E +:1022500028F720915704309158042C3DE3E03E07C5 +:10226000A1F583E08A838AE289834FB7F894DE017F +:10227000139620E03EE051E2E32FF0E05093570048 +:10228000E49120FF03C0E295EF703F5FEF708E2F67 +:1022900090E0EA30C0F0C7968D939D932F5F243174 +:1022A00059F74FBF8091E800877F8093E8006AE28A +:1022B00070E0CE0101960E9496088091E8008B772D +:1022C0008093E800ABCFC096E7CF809159049091FE +:1022D0005A04432F55274330510509F44AC078F575 +:1022E0004130510509F47AC08BE590E0E9E1FDE069 +:1022F0004230510509F092CF2091E800277F2093CA +:10230000E80020915B0430915C048217930708F485 +:102310009C0140E02115310509F065C0411163C001 +:102320008091E80082FDC9CF80915304882329F26F +:10233000853019F28091E80083FFF2CFBECF4132A1 +:10234000510509F43CC04232510509F067CF833092 +:10235000910508F063CFFC01EE0FFF1FE55DFD4F17 +:102360000190F081E02D885D9D4FDC018C9190E023 +:102370001AC0332721303105D1F02115310561F024 +:102380002230310509F04ACFE6E8FDE0E4918E2FD6 +:1023900090E0E6E8FDE007C0E8EBFDE0E4918E2F79 +:1023A00090E0E8EBFDE0009709F438CFA5CFE6EA2E +:1023B000FDE0E4918E2F90E0E6EAFDE0F4CF83307B +:1023C000910508F02BCF880F991FFC01EF5CFD4FA2 +:1023D0000190F081E02D89E090E08ECF82E190E0E5 +:1023E000E4E7FDE089CF80915304882309F465CFA9 +:1023F000853009F462CF8091E80083FD5ECF809143 +:10240000E80082FD8DCF8091E80080FF83CF90911E +:10241000F3008091F2002115310519F08830910503 +:1024200050F041E0089709F040E08091E8008E7795 +:102430008093E8006FCF44914093F1003196215092 +:1024400031090196E8CF803809F0E8CE8091E800A4 +:10245000877F8093E800809154048093F10087CEB9 +:102460008111DCCE10915704123008F0D7CE809144 +:10247000E800877F8093E800109354040E94E407EB +:10248000112311F084E005C08091E30087FDFACFAD +:1024900081E08093530442E061EC81E00E940308F4 +:1024A00042E261EC84E00E94030842E261EC82E0D7 +:1024B0000E94030842E260EC83E00E940308AECE73 +:1024C00080915704813009F0A9CE81E0933009F062 +:1024D00080E0809352041092E9008091E800877FA9 +:1024E0008093E8000E94E40799CE1F93CF93DF9377 +:1024F000162FC0916506D09166068A30D1F42091DE +:102500002A04CE0185569440622F70E00E947931F2 +:10251000281B822F66E00E948D31C82FC15020F405 +:10252000DF91CF911F91089560E080E20E947512C3 +:10253000F5CF8D30E9F4C556D44020912A04622F9E +:1025400070E0CE010E947931281B822F9E01280F56 +:10255000311D2115324018F080E0D0E0C0E0C80FF6 +:10256000D11DCB59DB4FD0936606C0936506D8CFFB +:1025700096E0FE01ABE2B4E001900D929A95E1F78E +:10258000803E90F186E0FE0111928A95E9F7C091B4 +:102590006506D0916606111133C046E050E0BE01D9 +:1025A0008BE294E00E943B329E0125563440892BF9 +:1025B00091F52A5F3F4F40912A04642F70E0C901D2 +:1025C0000E947931481B463010F4240F311D21152B +:1025D00072E0370710F030E020E02B593B4F30938A +:1025E0006606209365069CCFF6E08F9FB00111240C +:1025F0006B52784F46E050E0CE010E943232C7CF96 +:102600009E012A5F3F4FFE012E173F0731F2808166 +:1026100080958193F9CFC90145E0969587954A95B4 +:10262000E1F741E050E0BA0102C0660F771F8A95DA +:10263000E2F7CB016091630470916404862B972BC1 +:10264000B9016B5F7F4FE5E076956795EA95E1F715 +:1026500002C0440F551F6A95E2F7842B952B909387 +:10266000640480936304A5CFFF920F931F93CF93CD +:10267000DF93EC01F62EFC0101900020E9F78F01B9 +:1026800001501109C017D10730F0DF91CF911F9190 +:102690000F91FF9008956F2D89910E947512F2CFCE +:1026A000CF93DF93C7E5D2E060E0CE010E94F7341C +:1026B0002196C11584E0D807B9F7DF91CF9108952D +:1026C0006F927F928F929F92AF92BF92CF92DF9242 +:1026D000EF92FF920F931F93CF93DF9385EDC82E58 +:1026E00087E0D82E91ECE92EF12CE701CC58D109E6 +:1026F00036011BC0F50185909490692DC8010E9498 +:10270000F734682DC80101960E94F73482E0A80EC4 +:10271000B11C0E5F1F4FC017D10761F78EE0680E26 +:10272000711C2E96CE15DF0529F08E010E50110971 +:102730005301E0CF7E018CE8E80EF11C8CE8C80E56 +:10274000D11C81EFE81682E0F80679F6DF91CF918F +:102750001F910F91FF90EF90DF90CF90BF90AF90BF +:102760009F908F907F906F900895CF93C82F6FEFB9 +:10277000811161E283E290E00E94F7346FEFC111B2 +:1027800068E084E290E00E94F7346FEFC11160E3EB +:1027900085E290E0CF910C94F73480E00E94B5136D +:1027A00060E086E290E00E94F7340E9460130E948D +:1027B000501381E00C94B5130F931F93CF93DF93C5 +:1027C000C42FD0E0CC0FDD1F2EE0629FC00DD11DC5 +:1027D00011243CE8839FC00DD11D1124CE018796A2 +:1027E0000E94E334082F10E0102F0027CE018896B6 +:1027F0000E94E3349801282BC901DF91CF911F91EA +:102800000F910895462F843038F47A3028F46730D9 +:1028100018F4672F0C94DC1390E080E00895CF92B9 +:10282000DF92FF920F931F93CF93DF936C01009180 +:102830005D0480919C02082BC7E0D0E010E0FC2EE4 +:10284000C8010C2E02C0959587950A94E2F780FD89 +:102850000CC02197A0F7F12C8F2DDF91CF911F9104 +:102860000F91FF90DF90CF900895B6018C2F0E94BA +:1028700002140E946C0A019761F3EECFCF93DF93AD +:10288000EC010E940F14BE010E940214DF91CF914F +:102890000C946C0AFC01808191810E943E14292FC6 +:1028A0002F7092959F7092509E3078F4E92FF0E04F +:1028B000EA5DF84C0C94CC31803F19F020F4883E4E +:1028C00020F481E00895843FE1F380E00895883E9C +:1028D000C0F3813FD1F7F5CF822F869586958695F7 +:1028E000089583E290E00E94E334813289F484E227 +:1028F00090E00E94E334883059F485E290E00E9431 +:10290000E33491E0803309F090E0892F81700895DD +:1029100080E0FCCFCF92DF92EF92FF926B017C01BF +:102920000E946209B701A60188E090E0FF90EF9055 +:10293000DF90CF900C940935AF92BF92CF92DF9287 +:10294000EF92FF920F931F93CF93DF9300D00F92DC +:10295000CDB7DEB7082FF62E142FE22E80915E043D +:1029600080FF4FC0E82FE695AE2FB0E0A45EBD4FCC +:102970009C91909345038E7F823009F056C0413A76 +:1029800008F040EA9E012F5F3F4F6F2D802F0E947D +:10299000780980915E0480FF11C02B8139814A81C2 +:1029A000809178019091790153E0859FF001112485 +:1029B000E45BFC4F891798F10E948E0E80915F04B2 +:1029C000801308C0809160048F1104C0809161045D +:1029D000811729F080914703826080934703009319 +:1029E0005F04F092600410936104EE2051F0609156 +:1029F0005E0470915F0480916004909161040E9474 +:102A00008A140F900F900F90DF91CF911F910F912B +:102A1000FF90EF90DF90CF90BF90AF9008954183EB +:102A2000308322838F5F3396C5CF923039F6E250E0 +:102A30008E2F8170D82EE695F0E0EA57F84FA590DA +:102A4000B490C12CBB2460917A01C61608F0B4CFB3 +:102A50002C2D30E0A29EC001A39E900DB29E900D41 +:102A6000112470E00E947931802FD11016C0860F9A +:102A700040917801420F532F511D9A01220F331FAD +:102A8000240F351F245B3C4F412F113A08F040EAD8 +:102A90006F2D0E947809C394D6CF861BE9CFEEE54F +:102AA000F4E0438121E1421B08F440E021E062812F +:102AB00081810C949C14EEE5F4E0438121E1420F06 +:102AC00008F44FEF21E0628181810C949C14EEE5C3 +:102AD000F4E0628121E1621B08F460E021E04381BF +:102AE00081810C949C14EEE5F4E0628121E1620F97 +:102AF00008F46FEF21E0438181810C949C14EEE592 +:102B0000F4E0818121E04381628188500C949C141F +:102B1000EEE5F4E0818121E043816281885F0C94DD +:102B20009C1480916204882319F081508093620480 +:102B300060915E0470915F048091600490916104E3 +:102B40000C948A1480916204833018F48F5F809310 +:102B5000620460915E0470915F04809160049091C2 +:102B600061040C948A1490915E0490FF27C09170C8 +:102B700081111DC0926090935E0480914703816033 +:102B800080934703662351F060915E0470915F0467 +:102B900080916004909161040E948A1420E0409129 +:102BA00061046091600480915F040C949C148C30EB +:102BB00010F09661E0CF880F982BDDCF089521E0CB +:102BC00030E0A90102C0440F551F8A95E2F7CA01FF +:102BD000209148036623C1F0822B809348038091A3 +:102BE000470380618093470380914603811106C0AB +:102BF00080915E0460E086950E94B31580915E042A +:102C000080FD05C00C948E0E80958223E6CF08953A +:102C1000CF93DF93C82FC17082FBDD27D0F981FBF2 +:102C2000662760F984E00E94DF1561E06C2785E08B +:102C30000E94DF156D2F86E0DF91CF910C94DF1598 +:102C40000F931F93CF93C82F61E08111682F61709C +:102C500080E00E94DF15C1FB662760F9C11101C049 +:102C600060E081E00E94DF15C2FB662760F9C111B8 +:102C700001C060E082E00E94DF15C3FB662760F9B7 +:102C8000C11101C060E083E00E94DF154C2F50E0CD +:102C900070E060E0DB01CA01F4E0B695A795979576 +:102CA0008795FA95D1F70097A105B10551F1AC01CF +:102CB000BD0184E08A019B01E2E0369527951795D6 +:102CC0000795EA95D1F7011511052105310519F090 +:102CD0008E5FB901A8017695679557954795452B65 +:102CE000462B472B09F08F5F8130A1F0882359F0E4 +:102CF0008230A9F08330C1F08C2FCF911F910F91BA +:102D0000089580E0D7CF20E040E56FEF82E30E9496 +:102D10009C14F2CF20E040E56FEF8CEFF8CF20E07D +:102D200040E56FEF86E7F3CF20E040E56FEF8AEDF7 +:102D3000EECF0E94201680935D040C944B0C809182 +:102D40005D04982F9670963019F488600C9499164B +:102D5000877FFCCF21E030E001C0220F8A95EAF79F +:102D6000209580915D0482230C94991621E030E037 +:102D700001C0220F8A95EAF780915D04822B0C94A2 +:102D8000991680915E048695815009F48BE061E08C +:102D90000C94B31580915E0486958F5F8C3008F09B +:102DA00081E061E00C94B31580915E0480FF07C060 +:102DB000869582588F77893010F40C94CA1661E09A +:102DC00082E00C94B315EEE5F4E083E08083118299 +:102DD0008FEF828380EA83831482A5E4B3E01296A6 +:102DE0008C911297836012968C936081718182819D +:102DF00093810C948A1469EE7EEF90E080E00E944B +:102E0000153560E082E090E00E94F73460E083E0F6 +:102E100090E00E94F73410929C0260E084E090E021 +:102E20000E94F73460E082E290E00E94F73460E0B4 +:102E300085E090E00E94F73460E086E090E00E9438 +:102E4000F7346FEF87E090E00E94F73440E050E005 +:102E5000BA0188E090E00E94093560E08DE090E0E2 +:102E60000E94F73440E050E0BA0188E190E00E940F +:102E7000093560E087E190E00E94F73440E050E0DF +:102E8000BA018CE190E00E94093570E060E080E2D8 +:102E900090E00E94153540E050E0BA0188E190E0F2 +:102EA0000E94093580E00E94B5130E94CD1340E0D6 +:102EB00050E0BA018FE090E00E94093540E050E018 +:102EC000BA0183E190E00C9409350F931F93CF93DF +:102ED000DF9300D000D0CDB7DEB74091D002509143 +:102EE000D1026091D2027091D3022FB7F8948091F1 +:102EF0003E0490913F04A0914004B09141042FBF43 +:102F0000841B950BA60BB70B84369105A105B10563 +:102F100088F10E94460E882379F10E94F8086E5FBE +:102F20007F4F8F4F9F4F69837A838B839C838091E0 +:102F30002B0190912C0187549D4F40912A0150E024 +:102F40004530510510F044E050E0BE016F5F7F4F07 +:102F50000E94483284E090E00E94C530892BD9F469 +:102F60000E94F8086093D0027093D1028093D2023D +:102F70009093D30281E010C00E94F8080091E10212 +:102F80001091E2022091E3023091E402600F711F80 +:102F9000821F931FC4CF80E00F900F900F900F906F +:102FA000DF91CF911F910F9108958F929F92AF92D1 +:102FB000BF92CF92DF92EF92FF920F931F93CF9326 +:102FC000DF93EB0188809980AA80BB809FB7F8943B +:102FD000C0903E04D0903F04E0904004F090410443 +:102FE0009FBFC818D908EA08FB0894E6C916D1049F +:102FF000E104F10410F4442311F1E82E082E000C32 +:10300000FF089AE08902F0011124E050FF4F83810C +:10301000948187549D4F428150E00417150708F4AE +:10302000A801B9010E944832C7010E94C530892B0E +:10303000A1F40E94F808688379838A839B8381E0E6 +:10304000DF91CF911F910F91FF90EF90DF90CF9084 +:10305000BF90AF909F908F90089580E0F1CF0F9335 +:103060001F93CF93DF930F92CDB7DEB780913504D6 +:1030700089832091CF0290E041E02817190609F4D6 +:1030800040E001E010E09E012F5F3F4F6CED72E0E9 +:1030900087E00E94D5170F90DF91CF911F910F917C +:1030A00008950F931F93CF93DF930F92CDB7DEB7A1 +:1030B0008091FB02898341E09091CE02981301C078 +:1030C00040E001E010E09E012F5F3F4F68ED72E0AD +:1030D00086E00E94D5170F90DF91CF911F910F913D +:1030E00008950F931F93CF93DF93CDB7DEB7299742 +:1030F0000FB6F894DEBF0FBECDBF85E0EEE5F4E07D +:10310000DE01119601900D928A95E1F780914503B9 +:1031100090914603A0914703B09148038E839F830B +:10312000A887B98741E08885811101C040E009E0A6 +:1031300010E09E012F5F3F4F64ED72E085E00E943A +:10314000D51781111092470329960FB6F894DEBF68 +:103150000FBECDBFDF91CF911F910F9108956F9258 +:103160007F928F929F92AF92BF92CF92DF92EF9217 +:10317000FF920F931F93CF93DF930F92CDB7DEB7DC +:10318000862E5A016901682E880F7708C3010E94B4 +:10319000C530892B09F088C08AE0869DF001879DA3 +:1031A000F00D1124E050FF4F458150E041155105CD +:1031B00011F041E050E08AE0869DF001879DF00D1E +:1031C0001124E050FF4F6681778167547D4FCE0117 +:1031D00001960E944832F5014081518162817381DC +:1031E0002FB7F89480913E0490913F04A091400441 +:1031F000B09141042FBF841B950BA60BB70B8436EF +:103200009105A105B10540F4B701C8010E94470925 +:103210009981891709F44FC0082C000C9908C40142 +:103220000E94C530892B91F0B12C8B2D0F90DF912E +:10323000CF911F910F91FF90EF90DF90CF90BF90B3 +:10324000AF909F908F907F906F9008958AE0889DB7 +:10325000F001899DF00D1124E050FF4F458150E0B1 +:10326000E416F50608F4A7018AE0889DF001899D1F +:10327000F00D1124E050FF4F6681778167547D4F38 +:10328000C6010E944832B701C8010E9447099981CE +:103290008913CACF0E94F808F50160837183828385 +:1032A0009383BB24B394C1CFB12CA701B801C6014D +:1032B0000E944832BACFBB24B394F7CFCF92DF92AB +:1032C000EF92FF920F931F93CF93DF9300D000D024 +:1032D0000F92CDB7DEB76B0185E0E82EF12C0AEB3B +:1032E00012E09E012F5F3F4F41EB52E061E080E032 +:1032F0000E94AF18882349F095E0FE013196ACEAB0 +:10330000B2E001900D929A95E1F795E0ECEAF2E0D7 +:10331000D60101900D929A95E1F70F900F900F90C2 +:103320000F900F90DF91CF911F910F91FF90EF9031 +:10333000DF90CF90089590E080E00E94F134893EC4 +:103340009E4F11F40C94711480E008951F920F9217 +:103350000FB60F9211242F933F934F935F936F9368 +:103360007F938F939F93AF93BF93CF93DF93EF930D +:10337000FF93D091E900DF708091EC00C82FC170FD +:1033800080FDC0E81092E9008091F000877F809373 +:10339000F00078940E94AC0F1092E9008091F00048 +:1033A00088608093F000CD2BCF70C093E900FF912F +:1033B000EF91DF91CF91BF91AF919F918F917F91CD +:1033C0006F915F914F913F912F910F900FBE0F9092 +:1033D0001F9018951F920F920FB60F9211242F93E2 +:1033E0003F934F935F936F937F938F939F93AF938D +:1033F000BF93EF93FF938091E10082FF09C080911A +:10340000E20082FF05C08091E1008B7F8093E100A4 +:103410008091DA0080FF24C08091D80080FF20C016 +:103420008091DA008E7F8093DA008091D90080FF4E +:103430009BC080E189BD82E189BD09B400FEFDCF5A +:1034400081E08093530480914504811109C00E945A +:103450006A070E9435088091E20084608093E20050 +:103460008091E10080FF17C08091E20080FF13C0CF +:103470008091E2008E7F8093E2008091E200806183 +:103480008093E2008091D80080628093D80019BCBC +:1034900085E0809353048091E10084FF29C08091EE +:1034A000E20084FF25C080E189BD82E189BD89B544 +:1034B000982F917080FFFBCF8091D8008F7D8093F3 +:1034C000D8008091E1008F7E8093E1008091E2003E +:1034D0008F7E8093E2008091E20081608093E20021 +:1034E00080915404882309F445C084E080935304F8 +:1034F0008091E10083FF27C08091E20083FF23C019 +:103500008091E100877F8093E10082E08093530403 +:10351000109254048091E1008E7F8093E1008091AD +:10352000E2008E7F8093E2008091E20080618093D0 +:10353000E20042E060E080E00E9403088091F00039 +:1035400088608093F000FF91EF91BF91AF919F91C0 +:103550008F917F916F915F914F913F912F910F903C +:103560000FBE0F901F90189519BC10925304109223 +:10357000450476CF8091E30087FD93E09093530458 +:10358000B7CF78941F921FB61F9211248F939F93E9 +:10359000AF93BF9380913E0490913F04A09140046B +:1035A000B09141040196A11DB11D80933E049093FA +:1035B0003F04A0934004B0934104BF91AF919F9109 +:1035C0008F911F901FBE1F9018959C014FB7F894C4 +:1035D00080913E0490913F04A0914004B091410439 +:1035E0004FBF821B930B08952FB7F89480913E0430 +:1035F00090913F04A0914004B09141042FBF0895E1 +:103600008F929F92AF92BF92CF92DF92EF92FF92F2 +:103610000F931F93CF93DF93CDB7DEB72F970FB6DE +:10362000F894DEBF0FBECDBF8E010F5F1F4F8AE043 +:10363000D8011D928A95E9F787E5C82E81E0D82E3A +:10364000F12CE12CAA24A394B12CF60181916F01F5 +:103650008F3F09F44AC0F894E82FE295EF70F0E04C +:1036600021A18F70A50102C0440F551F8A95E2F772 +:10367000CA01922F982B91A392A18095892382A3AE +:103680000E94100A00C0E0E5F1E030E020E0912C5B +:1036900041914F3F09F47FC0A42FA295AF70B0E0D5 +:1036A00090968C9190E04F7002C0959587954A95C1 +:1036B000E2F780FD70C08A2D022E01C0880F0A94A7 +:1036C000EAF7982A2F5F3F4F2730310509F7F601B7 +:1036D000319780818F3F11F00E94120A50EA5A956B +:1036E000F1F7F801EE0DFF1D90828FEFE81AF80A4E +:1036F00095E0E916F10409F0A8CF4AE050E0B801DE +:1037000087EE92E00E943B327C01892B41F08AE0F7 +:10371000F801A7EEB2E001900D928A95E1F71091C1 +:10372000F202E114F104C9F181E080939F020E944A +:10373000F41A90939E0280939D0280919D02909135 +:103740009E020E94E51A059778F0A7EEB2E0E12FFD +:10375000F0E0E55CFC4F8CEE92E02D9121938A170E +:103760009B07D9F710929F0281E090E0EF28C9F003 +:103770002F960FB6F894DEBF0FBECDBFDF91CF916D +:103780001F910F91FF90EF90DF90CF90BF90AF907F +:103790009F908F90089580E094CF80919F02811137 +:1037A000CCCF0E94460EB82EE091F2028E01055F4A +:1037B0001F4F882309F4D3C085E0D8011D928A9554 +:1037C000E9F7F0E09F01255C3C4F79018091E00230 +:1037D000AE01405F5F4F6A018A3008F098C04EE545 +:1037E00059E1B801C7010E94020E882309F4A6C05E +:1037F0004CEF55E2B801C7010E94020E882309F47C +:103800009DC045E657E1B801C7010E94020E88231A +:1038100009F494C041E758E1B801C7010E94020EC3 +:10382000882309F48BC041E558E1B801C7010E9423 +:10383000020E882309F482C04FE258E1B801C701A3 +:103840000E94020E882309F479C01092E002E091F0 +:10385000F102F0E0AF01455C5C4FD80110E0FA01E5 +:103860009191AF018D91981731F09F01215031094D +:10387000F90180831B2DAC15BD0589F78091A2024B +:103880009091A3020E94E51A893E934060F16091F5 +:10389000FB02E62EF12C662777276E197F09072E8B +:1038A000000C880B990B0E94E03527EA39E747E4C2 +:1038B0005DE30E94AD364B015C01B701FF0C880B44 +:1038C000990B0E94E0359B01AC01C501B4010E9437 +:1038D0002C350E94AF356093FB020E94F41A90933E +:1038E000A3028093A2028091A602882371F08091A6 +:1038F000A4029091A5020E94E51A893E934028F007 +:1039000082EE0E94720C1092A602812F31CF80911C +:10391000A0029091A1020E94E51A843F914008F014 +:103920005ECFE091F102F0E0E55CFC4FD80111922E +:103930001D92AC15BD05D9F71B2DA0CF8091E002DB +:103940008F3F31F08F5F8093E0028A3008F47FCFA1 +:103950000E94F41A9093A1028093A002E2CFF0E0BB +:10396000E55CFC4FF89485E0AAEBB2E001900D9283 +:103970008A95E1F765E070E08AEB92E00E944709E2 +:103980008093B9020E94100AF894E091F902F0E0E5 +:10399000EA50FD4F80818B878093C00261E070E028 +:1039A000C8010E9447098093BF020E94100AF89440 +:1039B000C090C102D090C202E090C302F090C40255 +:1039C0008091A7029091A802A091A902B091AA02A9 +:1039D000C816D906EA06FB06D1F0C092A702D0921B +:1039E000A802E092A902F092AA020E94460E81115A +:1039F0000EC00E94F808C61AD70AE80AF90AC0924F +:103A0000E102D092E202E092E302F092E4020E942C +:103A1000100AF8948091CC02882321F184FF04C01D +:103A20009091CD029093480380FF0DC08091C50214 +:103A300080FF2CC090915E04916090935E0460E0E2 +:103A400086950E94B3158091CC0281FF09C020E0C9 +:103A50004091C8026091C7028091C6020E949C14E6 +:103A60001092CC020E94100AF8948091CE028093AA +:103A7000FB020E94100AF8948091CF02882349F03B +:103A80000E947B0D0E94100A80E072CE0E948E0F71 +:103A9000DACF0E94600DF6CF5F926F927F928F9285 +:103AA0009F92AF92BF92CF92DF92EF92FF920F93CD +:103AB0001F93CF93DF9300D000D00F92CDB7DEB726 +:103AC0006C01FC0183819481892B31F0808191818B +:103AD00089238F3F09F082C50F900F900F900F90B0 +:103AE0000F90DF91CF911F910F91FF90EF90DF909A +:103AF000CF90BF90AF909F908F907F906F905F908E +:103B000008950E940F14182F682F89819A810E94AE +:103B10001F0C69817A81812F0E9402148C01F601A9 +:103B20008281882309F463C0C80190568115F0E2B0 +:103B30009F0750F0905E811520E1920728F0915C7C +:103B400081159F4108F0A5C0C80199279C01245008 +:103B500031092432310520F08B970E9708F047C0C9 +:103B60008091A2029091A3020097D9F10E94E51AD8 +:103B70009C0150E040E060E67AEE80E090E00E9438 +:103B8000AD31CA01B90125E030E040E050E00E94CB +:103B9000AD31E090FB022F3F310519F010F02FEF0F +:103BA00030E0F12C2E193F09B90190E080E00E942D +:103BB000DE3527EA39E747E45DE30E94AD360E942F +:103BC00098354B015C01B701FF0C880B990B0E94E3 +:103BD000E035A50194010E942C350E94AF35609319 +:103BE000FB020E94F41A9093A3028093A202F601B2 +:103BF0008281882309F4E6C4C80182519F45409719 +:103C000008F071C48FEF93E00E94E334025197E50E +:103C1000A92E92E0B92E81115FCF011143C01C8201 +:103C20001B82662463948AE0582E85010F5F1F4F24 +:103C3000C5010E94E33489831A82882309F44CCF9A +:103C40009FEF980F9330E8F58A83698232E0A30EE4 +:103C5000B11CC8010E94E3348B83882309F43CCF54 +:103C60008E010F5F1F4FF80120812223F1F22130D6 +:103C700009F061C091818281913029F50E5F1F4F5B +:103C80006AE070E0893311F460E570E00E94790E1B +:103C900020C090E080E00F3F110511F008F056CFF2 +:103CA000C80154CFA114F4E0BF0609F415CFC50133 +:103CB0000E94E334811101C001502FEFA21AB20A11 +:103CC000ACCF5801CDCF923039F40E5F1F4F0E9418 +:103CD000AB0C0F5F1F4FC7CF933029F40E5F1F4F00 +:103CE0000E94720CF6CF943019F00F5F1F4FF1CF86 +:103CF0000E5F1F4F30E020E0B8016F5F7F4FF8018B +:103D000041818053990B8A30910550F0215031093F +:103D100000F38FE99FE00197F1F700C00000F6CFB4 +:103D2000529EF001539EF00D11249C012E0F3F1F57 +:103D3000842F8B01E1CFE22FF0E0EA54FE4F749024 +:103D4000822F86958695869590E0FC01EA55FE4F78 +:103D5000E4902770F12C022E02C0F594E7940A94A7 +:103D6000E2F7E1E0EE22FF24FC01EA56FE4FC490A8 +:103D7000D12C022E02C0D594C7940A94E2F7F1E048 +:103D8000CF22DD24FC01EA57FE4F8490912C02C023 +:103D9000959487942A95E2F721E082229924E114F0 +:103DA000F10419F081EE0E94AB0CC114D10419F09A +:103DB00086EE0E94AB0C39E36AE070E0731202C039 +:103DC00060E570E0872D0E94790ECD2819F086EE0F +:103DD0000E94720CEF2819F081EE0E94720C892863 +:103DE00009F477CF6AE070E08CE250CF81E00E9466 +:103DF000B61603C081E00E94AA160F900F900F9094 +:103E00000F900F90DF91CF911F910F91FF90EF9046 +:103E1000DF90CF90BF90AF909F908F907F906F90EA +:103E20005F900C949F1682E0E2CF013E110509F4E9 +:103E30009AC0043E110509F07CC3882309F4CEC062 +:103E400081E08093FC0275C30238FFE51F0709F487 +:103E500059C000F500383FE51307B9F101384FE5C7 +:103E6000140709F066C3882309F445C08091A602AF +:103E7000811106C081E08093A60282EE0E94AB0C05 +:103E80000E94F41A9093A5028093A40281EE0E94EE +:103E9000AB0C2DC003385FE5150709F447C00438A3 +:103EA0009FE5190709F045C3882309F482C0809172 +:103EB0004302882309F45AC0809144020E94720C84 +:103EC00080EE0E94AB0C8AE25EC08823B9F080913C +:103ED000A602811106C081E08093A60282EE0E94B4 +:103EE000AB0C0E94F41A9093A5028093A4028BE27B +:103EF0000E94AB0C1EC381EE0E94720C8BE20E94EA +:103F0000720C17C3882309F414C381EE0E94AB0C12 +:103F100083EE0E94AB0C8FE40E94AB0C8FE40E94F6 +:103F2000720C83EE0E94720C81EEE9CF882309F4B3 +:103F300000C381EE0E94AB0C83EE0E94AB0C80E5C7 +:103F40000E94AB0C80E5EBCF8093460210934502B4 +:103F500000934402882321F081E08093FD02E9C2AE +:103F60001092FD02E6C280934302F0CF8091460298 +:103F7000882309F4A8CF809144020E94720C80EE3D +:103F80000E94AB0C8CE40F900F900F900F900F904D +:103F9000DF91CF911F910F91FF90EF90DF90CF9025 +:103FA000BF90AF909F908F907F906F905F900C9498 +:103FB000AB0C8AE20E94720C8CE40E94720C80EEC0 +:103FC0000E94720C80914302811105C080914602CB +:103FD000882309F481CD80914402D5CF1092FC0250 +:103FE000A8C2882331F081E08093FF0210926E0115 +:103FF000A0C21092FF029DC2073C2CE5120709F4F3 +:10400000AEC008F4A7C0083C4CE5140709F4ACC0E6 +:10401000093C1C4509F0ADC24FE455E16BE575E183 +:1040200079C0043DECE51E07A8F40E3CFCE51F0733 +:1040300008F052CD0C3C2CE5120709F49FC041E971 +:1040400055E162EA75E10D3C1C4508F463C061E08E +:1040500081E046C0053D4CE5140709F43DCD08F468 +:1040600092C00D351D4509F437CD83C280915E04A1 +:1040700080FF31C08E7F80935E0460915E047091FA +:104080005F0480916004909161040E948A14809181 +:1040900047038160809347039FEFE0E7F2E0915090 +:1040A000E040F040E1F700C000000F900F900F904B +:1040B0000F900F90DF91CF911F910F91FF90EF9094 +:1040C000DF90CF90BF90AF909F908F907F906F9038 +:1040D0005F900C948E0E816080935E0461E0869503 +:1040E0000F900F900F900F900F90DF91CF911F9135 +:1040F0000F91FF90EF90DF90CF90BF90AF909F9087 +:104100008F907F906F905F900C94B31541EC56E1C7 +:104110006AEC76E10F900F900F900F900F90DF9167 +:10412000CF911F910F91FF90EF90DF90CF90BF90B4 +:10413000AF909F908F907F906F905F900C945D09EF +:104140004AEC56E161EC76E1E5CF4FE755E168E8EE +:1041500075E1E0CF48E855E16FE775E1DBCF47E671 +:1041600055E163E775E1D6CF43E755E167E675E1D1 +:10417000D1CF4BE555E16FE475E1CCCF42EA55E193 +:1041800061E975E1C7CF0F900F900F900F900F90DE +:10419000DF91CF911F910F91FF90EF90DF90CF9023 +:1041A000BF90AF909F908F907F906F905F900C9496 +:1041B000D4160E3D1C4509F0DCC10F900F900F90F6 +:1041C0000F900F90DF91CF911F910F91FF90EF9083 +:1041D000DF90CF90BF90AF909F908F907F906F9027 +:1041E0005F900C94FB16C8010E94F70BF82ECFC10C +:1041F000092F0F70907F11F00295007F812F2223ED +:10420000C9F0002369F090E2910F983010F011117D +:104210000BC080914604082B009346040E94D60BE5 +:10422000812F0E94AB0C17C080919B02082B00933A +:104230009B02F4CF0E94720C002369F00095105E7F +:10424000183010F0B11027C0809146040823009365 +:1042500046040E94D60B98E0E91AF108E4E0EE1655 +:10426000F10408F039CC0E94690E0F900F900F9066 +:104270000F900F90DF91CF911F910F91FF90EF90D2 +:10428000DF90CF90BF90AF909F908F907F906F9076 +:104290005F900C94081680919B02082300939B0268 +:1042A000D8CF892F8F70907F903211F08295807FC8 +:1042B000F1E0BF120CC0222329F0333060F60E94D7 +:1042C000680CC9CF323038F60E945D0CC4CF22236F +:1042D00041F03323A1F340FFA3CF4F70F601458394 +:1042E000EECF332389F3193309F0F5C0FFEF27EE42 +:1042F00033E0F15020403040E1F700C00000812F52 +:104300000E94720CA8CF892F86958695837061F0E4 +:10431000813009F0A0CF812F9370211102C090E06D +:1043200080E00E94040997CF812F9370211102C071 +:1043300090E080E00E941A098ECF892F8370A1F54A +:10434000211189CF812F829586958770880F880FDC +:10435000412F4F70082E01C0440F0A94EAF7212F15 +:10436000207114FF07C02FE030E001C0220F8A95B2 +:10437000EAF72095969596959370923081F0822F6A +:10438000842B933030F480919C02913029F0242BBF +:1043900082230E94590C5FCF842B822BFACF242BCF +:1043A00080919C028227F5CF8695222311F0892FD8 +:1043B0008170882309F44FCF812F8295869587706D +:1043C000880F880F412F4F70082E01C0440F0A94A8 +:1043D000EAF7212F207114FF07C02FE030E001C061 +:1043E000220F8A95EAF720959695969593709230CC +:1043F00081F0822F842B933030F480915D049130D2 +:1044000029F0242B82230E94991625CF842B822BFE +:10441000FACF242B80915D048227F5CF092F0F70EE +:10442000222329F0802F0E94B616812F48CF812F9A +:104430000E945D0C802F0E94AA160DCF812FE1EF04 +:104440001E1789F1E11750F0F0EF1F17B9F0222382 +:10445000B1F13111E5CE892F8F7129C042EF1417C8 +:1044600049F153EF1513F3CF80E0222361F29F71DE +:1044700081E001C0880F9A95EAF7C5CF222379F031 +:10448000323008F0E8CE292F2F7181E090E001C092 +:10449000880F2A95EAF790915D048927B4CF3330CD +:1044A00008F0D9CEF0CF892F8F71222321F20E94FC +:1044B000B616D1CE892F8F712223C9F3BCCF3323F7 +:1044C00079F0893341F48FEF97EEE3E0815090402B +:1044D000E040E1F712CF8FE39CE90197F1F70DCFB0 +:1044E000892F8F71A8CF0031FFE51F0709F47ECC1B +:1044F00001312FE5120709F496CC0E94F808609369 +:104500000403709305038093060390930703F60159 +:104510008281053E110509F417CD08F095CC003EC7 +:10452000110509F48ACC08F080CC0C32110509F48D +:1045300058CDF601928191113CCE80914604827251 +:104540000A3CFCE51F0709F414CE08F06ACD053CCF +:104550003CE5130709F4F9CD08F04ECD033C5CE5CA +:10456000150709F4D3CD08F0EBCD023C1C4509F446 +:104570007DCDF60100811181992309F434CEC80163 +:104580000E940F14F82E682FC8010E941F0CB8015A +:104590008F2D0E9402140E946C0A182FB82EF6016B +:1045A00022814581342F32953F70892F82958F70FB +:1045B000E82EF12C8C3008F04ECEF701EC5CF84C74 +:1045C0000C94CC3100313FE5130709F413CC0131D1 +:1045D0004FE5140709F09BCF82E00DCC85E0DE01AA +:1045E000119601900D928A95E1F7F6012281898159 +:1045F0009A81211186CA0E94F70B182F8ACA1F932D +:10460000CF93DF9380916702807FA9F48091640249 +:10461000882389F080919902D091680260916202AA +:1046200070916302A0916502B0916602C62FC72304 +:1046300016E0D81304C0DF91CF911F91089590E048 +:10464000109711F0CF3F19F401968770F2CF189FA1 +:104650009001199F300D1124F901E759FD4F418157 +:104660004713F2CF40814613EFCF42814111ECCF87 +:10467000438154814A1B5B0B403A510528F78091D6 +:1046800067028F70806180936702F901E259FD4FE4 +:1046900080818F708061808382E692E00E944C1D51 +:1046A000DF91CF911F910C94ED0BAF92BF92CF92FF +:1046B000DF92EF92FF920F931F93CF93DF93CDB7CB +:1046C000DEB761970FB6F894DEBF0FBECDBF8C0189 +:1046D00085E0F801DE011D9601900D928A95E1F7C3 +:1046E000F801E28082E6A82E82E0B82E6091650291 +:1046F000709166026115710509F432C190916202F0 +:1047000040916302892F84238F3F09F429C12081BE +:104710003181C380D480F0906402F601E61BF70B70 +:10472000FF2009F4E8C080916702582F507FE03ADB +:10473000F10508F0ABC0511177C0FE2C431321C026 +:1047400092131FC0E1101DC08F70806180936702BB +:10475000C5010E944C1D80916702F80185838F2D51 +:1047600061960FB6F894DEBF0FBECDBFDF91CF913B +:104770001F910F91FF90EF90DF90CF90BF90AF907F +:104780000895CD2829F0822F83238F3F09F003C19C +:1047900080E0F82FF170DF2E80FF3CC080919902FD +:1047A0004091680256E0841315C02D873E878D85A1 +:1047B0009E850E943E14292F22952F702230F0F002 +:1047C000243018F59F70F1F0F8019581907FD1F4B5 +:1047D000D12C1EC090E0589FF001599FF00D11247C +:1047E000E759FD4F6181361306C06081261303C06F +:1047F0006281E6120FC001968770D5CF9F7011F0CD +:10480000882331F3805E883018F3C8010E944C1D64 +:10481000FD2CA5CFEE2009F4A2CF80916702816024 +:1048200080936702F12C9BCF431306C0921304C000 +:10483000F801EE2009F479C0C8010E944A148823C7 +:1048400009F1EE20F9F080916702803270F020913A +:1048500062023091630238872F831986DB86CA860D +:104860008C87CE0107960E944C1D86E0F801A2E6D7 +:10487000B2E001900D928A95E1F70E94FF22FF2499 +:10488000F3946DCFC8010E944C1DF9CF51110AC09D +:1048900082E692E00E944C1D86E0F50111928A9515 +:1048A000E9F7C0CF43130FC092130DC0E1100BC046 +:1048B000F8018583C8010E944C1D86E0F501119224 +:1048C0008A95E9F74CCFC8010E944A148823D1F297 +:1048D000EE20C1F280916702803238F220916202AC +:1048E000309163023A8329831B82DD82CC828E83DE +:1048F000CE010196B8CFE03AF105F8F6FE2CEE2095 +:1049000009F243131FC092131DC08091670280FDFE +:1049100010C0982F907F69F0F8018583903F31F0A7 +:10492000982F907F905F8F70892B8583C8010E949C +:104930004C1D86E0F801A2E6B2E001900D928A9546 +:10494000E1F70DCFC8010E944A1481118ECF8091EA +:104950006702816080936702C8010E944C1DFFCEF0 +:10496000EE2009F48FCFC8010E944A14F82E882344 +:1049700009F488CF86E0F801A2E6B2E001900D923A +:104980008A95E1F780916202909163020E943E1441 +:104990000E94FF22E4CE81E08E25FBCE1F93CF93B1 +:1049A000DF93CDB7DEB767970FB6F894DEBF0FBEC3 +:1049B000CDBF4B8B5C8B6D8B7E8B8F8B611110927F +:1049C0009B021A8A198A85E0FE017396DE011D9604 +:1049D00001900D928A95E1F786E0FE013D96DE0199 +:1049E000179601900D928A95E1F7CE0107960E94E5 +:1049F0005523882389F016E08091990290916802EE +:104A000089134BC067960FB6F894DEBF0FBECDBFBB +:104A1000DF91CF911F91089586E0FE013796DE0168 +:104A2000119601900D928A95E1F78A859B85892BD5 +:104A300011F38F81988589238F3FE9F220916802D5 +:104A400030E0C90101968770992740919902481773 +:104A5000190681F4109246040E94A30F1092680276 +:104A60001092990286E0E2E6F2E0DF011D928A955B +:104A7000E9F7C1CF96E0929FD001939FB00D11242A +:104A8000A759BD4FFE01319601900D929A95E1F71D +:104A9000809368020E94ED0BAECF819FC00111246C +:104AA00087599D4F0E945523882309F4ABCF8091ED +:104AB000990290E0019687709927809399029CCF84 +:104AC0000F931F93CF93DF93CDB7DEB7A8970FB6A1 +:104AD000F894DEBF0FBECDBF81114DC006E0662346 +:104AE00059F10CA311E01DA31EA30E94F41A8160CA +:104AF000782F98A78FA34CA15DA16EA188A50E94D5 +:104B0000CE240F8F18A319A20E94F41A8160782F67 +:104B10009BA38AA34F8D58A169A18BA10E94CE248B +:104B200081E0A8960FB6F894DEBF0FBECDBFDF912F +:104B3000CF911F910F9108950A8F13E01B8F81E091 +:104B40008C8F0E94F41A8160782F9E8F8D8F4A8DF2 +:104B50005B8D6C8D8E8D0E94CE240D8B1E8B1F8ADB +:104B60000E94F41A8160782F998F888F4D895E8911 +:104B70006F89898DD3CF813099F66623F1F016E0E5 +:104B8000188B198B8A8B0E94F41A8160782F9C8B6A +:104B90008B8B488959896A898C890E94CE241B870E +:104BA0001C871D860E94F41A8160782F9F878E874C +:104BB0004B855C856D858F85B1CF06E00E8318E04F +:104BC0001F8388870E94F41A8160782F9A878987CB +:104BD0004E815F8168858A850E94CE2409831A836D +:104BE0001B820E94F41A8160782F9D838C834981F7 +:104BF0005A816B818D8192CFCF92DF92EF92FF929B +:104C00000F931F93CF93DF930F92CDB7DEB7EE24B0 +:104C1000E394F12C00EC12E09E012F5F3F4F45EB37 +:104C200052E063E082E00E94AF18082F882321F150 +:104C3000C090F4028C2D90E09C012A503D4F7901E8 +:104C40001981F9018081181BD12E80E00AC0DA9405 +:104C5000F70180818F5F808360E08C2D0E9460254A +:104C6000802F1D14A4F3912F17FD90E0191B111133 +:104C70000EC081110E94D40B802F0F90DF91CF9135 +:104C80001F910F91FF90EF90DF90CF9008951F5FDD +:104C9000F70180818150808361E08C2D0E94602526 +:104CA000802FE5CF1F921FB61F9211248F939F93E1 +:104CB000AF93BF9380913D04811113C080913E0456 +:104CC00090913F04A0914004B09141044196A11DF0 +:104CD000B11D80933E0490933F04A0934004B09391 +:104CE0004104BF91AF919F918F911F901FBE1F9064 +:104CF0001895CDB7DEB7E0970FB6F894DEBF0FBEBC +:104D0000CDBF84B7877F84BF0FB6F894A8958091F4 +:104D10006000886180936000109260000FBE80E8A0 +:104D200090E00FB6F89480936100909361000FBEFD +:104D300085B7806885BF85B7806885BF8EE09AE0BB +:104D400090933902809338020E946A070E943508C6 +:104D50008091E20084608093E20078948091530413 +:104D60008823A1F01091E9001F709091EC00892F29 +:104D7000817090FD80E8182B1092E9008091E80086 +:104D800083FD0E94AC0F1F701093E90082E084BD88 +:104D900093E095BD9AEF97BD80936E001092E1026B +:104DA0001092E2021092E3021092E4020E94711447 +:104DB000811102C00E94CD130E94460E80936101B2 +:104DC00080916101882309F4C6C01092760185E2C2 +:104DD000809377010E94460E81110E94B82F809126 +:104DE000610181112FC0FE01359686E0DF011D9221 +:104DF0008A95E9F786E6898387E98A8386EC8B833F +:104E000084E38C8385E38D833497A7E5B1E0CE01FD +:104E10000B9621912D938E179F07D9F787E0ECE72A +:104E2000F1E0DE01919601900D928A95E1F7FE0185 +:104E3000B196A0E5B1E0CE01889621912D938E1711 +:104E40009F07D9F78091610195E0811190E09093DF +:104E5000F20285E0891B8093F10207E511E0FCE591 +:104E6000EF2EF1E0FF2EF80181918F018F3F11F0BD +:104E70000E94120AE016F106B1F700E511E0E7E53D +:104E8000EE2EE1E0FE2ED8018D918D018F3F11F0C5 +:104E90000E94120AE016F106B1F7E7EEF2E081EFA8 +:104EA00092E0ABE3B3E011921D928E179F07D9F702 +:104EB0000E949B19811102C00E94FB1682E090E0C3 +:104EC0000E94E3348093300384E090E00E94E33456 +:104ED000182F82E290E00E94E334982F812F909364 +:104EE000E6028093E5020E94001BEFE3FCE93197A4 +:104EF000F1F700C000000E94001B80913B0380FF7F +:104F00002EC06FEF7FEF90E080E00E94153581E0CA +:104F10008093E00080E28093D8001092C9008FE176 +:104F20009EE40197F1F700C0000087E090EBDC0100 +:104F30008093670690936806A0936906B0936A060B +:104F400088E19CE00FB6F894A895809360000FBEAE +:104F500090936000FFCF85E28093760139CF83E0A4 +:104F600090E00E94E3340E94590C80915D040E94FD +:104F700020160E94460E811102C00E94BB2F83E0C2 +:104F800080932B0380E280932A040E94502E6DE0D0 +:104F900070E089E492E00E94300D892BE9F5809160 +:104FA0002B0363E070E081FDFFC186E492E00E9484 +:104FB000300D892B89F56DE070E086E392E00E9468 +:104FC000300D892B49F50E94F8086058774C8E4FB8 +:104FD0009F4F609331047093320480933304909315 +:104FE0003404E5E6F4E080E092E0DF019C011D92EC +:104FF00021503040E1F7F0936606E09365068FEFAD +:105000009FEF909364048093630481E0809336045F +:105010008093350410922C038091F302811136C0E5 +:105020000E949B19811104C00E94FB160E94E31686 +:1050300088E090E00E94EB3460935E0470935F041C +:105040008093600490936104809147038360809310 +:1050500047036E7F71F40E94E31688E090E00E949F +:10506000EB3460935E0470935F04809360049093CC +:1050700061040E94620980915E0480FF04C060E0C8 +:1050800086950E94B31581E08093F30280916101BF +:10509000811106C084EF80936D0185EF80936C01D0 +:1050A00020916D01A22FA295AF70B0E091963C9136 +:1050B00091972F7081E090E0BC01022E01C0660F35 +:1050C0000A94EAF7462F4095432391964C93919783 +:1050D00092963C919297362B92963C939297409160 +:1050E0006C01E42FE295EF70F0E031A14F70042ED7 +:1050F00001C0880F0A94EAF7982F9095932391A303 +:1051000092A1892B82A390968C9190E002C09595F4 +:1051100087952A95E2F7817020A130E002C035958D +:1051200027954A95E2F792E020FF90E0892B809343 +:10513000FA029091610181E098279093F902891B0E +:105140008093F40286E592E090934B0380934A03A8 +:1051500060E08AE00E94B31581E00E94991682E621 +:1051600091E090933A048093390470E4672ECE0165 +:1051700001967C0180915304DD24D39400E112E177 +:10518000853009F45EC10E94001BC82E81110E9467 +:10519000F808E1E3F3E0ABE3B3E010E000E0902EC9 +:1051A000BD9081918B1509F476C18B25A12CDD244E +:1051B000D3949D2D982309F469C10E94460E88233B +:1051C00099F0A9A29AA2BD2081E009F480E08BA306 +:1051D0000E94F41A8160782F9DA38CA349A15AA143 +:1051E0006BA18DA10E94CE24F801EF5CFC4F808161 +:1051F000D826D0828091FA02E82FEE0FEE0F909120 +:105200006D01A92FA295AF70B0E090962C9130E07F +:105210009F7002C0359527959A95E2F72170332744 +:1052200090916C01A92FA295AF70B0E090964C912F +:1052300050E09F7002C0559547959A95E2F7CA01D4 +:105240008170992740FF02C082E090E0822B8E2B74 +:105250008093FA021091F9028F70E82FF0E0EC5F72 +:10526000FD4F80819091F802890F8093F802D12C34 +:1052700084306CF0E12FF0E0EA50FD4F80818F5FC9 +:10528000808360E0812F0E946025DD24D39480918B +:10529000F8028D3F6CF4E12FF0E0EA50FD4F808181 +:1052A0008150808361E0812F0E946025DD24D394AA +:1052B0008091F802082E000C990B64E070E00E94C7 +:1052C00099318093F802D1100E94D40B809136045A +:1052D000882351F180912D0390912E030E94E51AAD +:1052E000C29708F0EFC02091630430916404211547 +:1052F000310509F049C2809135048823A9F00E9444 +:10530000F808009131041091320420913304309157 +:105310003404601B710B820B930B6F3F7F4F8F4FD9 +:105320009F4710F40E94600DC11001C0D1100E946F +:105330007B0D0E94690E90912F03891731F00E9416 +:10534000690E80932F030E940816809153048430C5 +:1053500009F010CF83E08093E9008091E80082FF9C +:1053600009CF8091E80090E085FF0CC00E9489077A +:1053700030E2C32ED12C8E010F5F1F4F882309F41A +:10538000E2C291E08091E8008B778093E800992356 +:1053900009F4F0CEE981E150E33108F036C3F0E0E2 +:1053A000E05CF84C0C94CC3183E492E000CE809128 +:1053B0005304843009F435C00E94600D80E00E94DF +:1053C000081680914903811109C0D0924903809148 +:1053D0005E0481708093F5020E948E0F10923D044E +:1053E000A8E1B0E00FB6F894A895A09360000FBEB6 +:1053F0006092600083B7817F846083BF83B78160E0 +:1054000083BF7894889583B78E7F83BF0FB6F89457 +:10541000A895809160008861809360001092600080 +:105420000FBE80915204882361F00E94001BEBE3C1 +:10543000F3E08191811113C425E433E02E173F0777 +:10544000C1F780915304853009F4B1CF109246041E +:105450000E94A30F0E94690E0E9408161092490331 +:105460008091F502882351F080915E0481608093E1 +:105470005E0460E086950E94B31585CE8091480356 +:10548000882309F480CE0E948E0E7DCEA394DD0C7D +:1054900037E0A3128ECE0F5F1F4F0A30110509F0BF +:1054A0007ECE8FEF88A789A71AA60E94F41A816082 +:1054B000782F9CA78BA748A559A56AA58CA50E9403 +:1054C000CE2498CE0E94F41A90932E0380932D033D +:1054D00060E080E00E9430098091FB0290E09093B0 +:1054E0000A03809309030E94690E809308030E94B7 +:1054F000460E882331F140910403509105036091D9 +:105500000603709107032FB7F89480913E049091A1 +:105510003F04A0914004B09141042FBF841B950B20 +:10552000A60BB70B81339547A105B10540F00E944A +:10553000600D80913604882309F4DDCED4CE0E941C +:105540007B0D0E94460E62E0882309F4DEC080E0F5 +:105550000E94300960E083E891E00E94341363E028 +:1055600080E00E94300980915D040E941F0D81300F +:1055700009F497C0882309F48EC0823009F499C0D9 +:10558000833009F492C066E080E00E94300960E058 +:1055900081EA91E00E94341367E080E00E943009C4 +:1055A000609108036695617086EA91E00E94341369 +:1055B00068E080E00E9430096091080360956170A6 +:1055C0008BEA91E00E94341369E080E00E94300988 +:1055D0006091080362FB662760F98FEA91E00E9400 +:1055E00034134091000350910103609102037091C4 +:1055F00003032FB7F89480913E0490913F04A0914B +:105600004004B09141042FBF841B950BA60BB70B30 +:105610008D329140A105B10508F48BCF0E94F808A6 +:10562000609300037093010380930203909303033C +:105630008091FF02811104C080916E0181113DC0F3 +:105640006FE080E00E94300960E084EB91E00E940E +:1056500034136CE080E00E94300981E080936E0199 +:105660008091FE0290E00196817099278093FE025E +:1056700021E030E0281B390B40E6429FC001439FE8 +:10568000900D11242091FD02222329F18A599A4F6D +:105690000E9427074ECF60E089E891E00E94341312 +:1056A00072CF60E08FE891E0F9CF60E085E991E0AA +:1056B000F5CF60E08BE991E0F1CF6CE080E00E94F3 +:1056C000300960E084EB91E00E9434136DE080E0EB +:1056D0000E943009C5CF2091FC02222319F08A557F +:1056E0009B4FD6CF2091090330910A032B3031050F +:1056F0001CF48A519C4FCCCF293231051CF48A5DB1 +:105700009C4FC6CF8A599D4FC3CF80E00E9430097D +:1057100060E08AEB91E00E94341363E080E00E9435 +:10572000300960E080EC91E00E94341367E080E093 +:105730000E94300986E296E00E9427076DE080E033 +:105740000E94300980910A038F93809109038F93FF +:1057500086EC91E09F938F93FF92EF920E945132DB +:1057600060E0C7010E9434136EE080E00E943009BF +:1057700060E08CEC91E00E9434130F900F900F903A +:105780000F900F900F90D5CE80912C0361E070E0C8 +:105790008111B1CD482E512C1B01082E02C0220CC4 +:1057A000331C0A94E2F7A90142215321452B09F445 +:1057B00048C090912B0390FD46C08295880F80765B +:1057C0008093710192013695279536952795209300 +:1057D0007401815E809372011092750124E630E0BD +:1057E00047E050E06FE671E088E70E94FF2E892BCA +:1057F00009F081CD55E0440C551C5A95E1F7809194 +:105800002B0380FD2EC0A2014B595B4F04E610E034 +:1058100020E230E060E488E70E94262F892B09F01F +:105820006ACD0E947B0DC101809590952090630404 +:105830003090640428223922309264042092630458 +:105840005ACD8F5FA7CF880F880F880F8093710183 +:1058500010927401895F8093720183E080937501D7 +:10586000BDCFEBE0F3E080E2DF011D928A95E9F71E +:10587000E8E1F2E0F8ABEFA764E172E047E0A42EC4 +:1058800099249394AFA5B8A94D91B8ABAFA7FB01EC +:105890008191BF01840D952D911D9C012B593B4F8A +:1058A0003EA72DA7E42FF0E0E55FFC4F30E020E0BD +:1058B0007A2C721AB92C022E01C0BB0C0A94EAF79A +:1058C0000DA51EA590E0D8018D918D018B21472D4E +:1058D000491B4770842E042E000C550BB82F01C0B5 +:1058E000BB0F8A94EAF78B2E519541955109477069 +:1058F000552701C086954A95EAF7882A8081882A2B +:1059000080829F5F9830F9F62F5F3F4F31962830A5 +:10591000310571F6ECE1F2E02FA538A9E217F307A3 +:1059200009F0B0CF04E610E020E230E04BE053E0B5 +:1059300071CF8091F100D8018D938D01B1E0CB1A28 +:10594000D10809F41ECD8091E80085FDF2CF809149 +:10595000E8008B778093E8000E948907882399F3F9 +:1059600010CD1A8289E08B8311C08A81823009F4BC +:105970008EC1833089F1813009F047C00E94F80858 +:105980000E94D2316B837C838D839E8380915304EC +:10599000843009F0EFCB1091E9001F709091EC007A +:1059A000892F817090FD80E8182B82E08093E900B8 +:1059B0008091E80080FF0CC050E040E060E270E0C1 +:1059C000C7010E94BA078091E8008E778093E800B3 +:1059D0001F701093E900CECBDE011396EBE3F3E0EA +:1059E00081918D9323E0E534F207D1F7CFCF8A81FF +:1059F000823059F46B817C818D819E810E94D231ED +:105A000086E290E00E94F734C1CF8FEF8983BECF4A +:105A10004C816B818A810E94DC1398278927982703 +:105A20009E838D83B3CF0D811E8110270127102700 +:105A30008A81CB803EE0C39E600111249CE8899F4F +:105A4000C00CD11C11248C8190E0880F991FC80EC6 +:105A5000D91E612FC60187960E94F734602FC601B8 +:105A60008896D0CF0E94601391CF8A818138C1F08F +:105A700060F4803809F08ACF20E04B8160916004A7 +:105A800080915F040E949C1481CF8238E9F08338B2 +:105A900009F07CCF20E0409161046C818B81F2CFD2 +:105AA00060E08B810E94B3158B81811103C00E943D +:105AB0008E0F6CCF80915E04816080935E0460E005 +:105AC00086950E94B31562CF8B81809362045ECF6E +:105AD0008A81813899F030F4803809F057CF80916D +:105AE000610441CF823891F0833809F04FCF809123 +:105AF0005F048B83809160048C8348CF80915E0427 +:105B000080FF02C086952FCF80E02DCF8091620468 +:105B10002ACF60915E0470915F048091600490913F +:105B200061040E948A1432CF80E18A832FCF81E002 +:105B30008A8389EA18CFAA80BB80BA24AB24BA240E +:105B40008E010F5F1F4FCC80C00ED12ED11CC5011E +:105B5000895A9D4F0C151D0509F418CFA9EAAA16FC +:105B6000A1E0BA0650F40E94E334F8018483BFEF49 +:105B7000AB1ABB0A0F5F1F4FEACFD80114961C92D5 +:105B8000F6CF0A811B81102701271027FE013196CD +:105B90005F01CC80C00ED12ED11CC801895A9D4F07 +:105BA000C016D10609F4F2CE093AF1E01F0728F435 +:105BB000D50114966C910E94F734BFEFAB1ABB0A63 +:105BC0000F5F1F4FEACF0E945013E0CE84E0ADCFAD +:105BD000AA80BB80BA24AB24BA248E010F5F1F4F6A +:105BE000CC80C00ED12ED11CC5018796C016D1061F +:105BF00009F4CCCEE0E3AE16E2E0BE0658F40E9413 +:105C0000E334D80114968C93FFEFAF1ABF0A0F5FED +:105C10001F4FEACFF8011482F7CF0A811B811027AA +:105C2000012710279E012F5F3F4F5901CC80C00EE6 +:105C3000D12ED11CC8018796C016D10609F4A6CE74 +:105C4000003332E0130728F4D50114966C910E94BA +:105C5000F734BFEFAB1ABB0A0F5F1F4FEBCF09BD85 +:105C600019BD09B400FEFDCF8091D8008F7D8093CF +:105C7000D8008091E00082608093E0008091E00095 +:105C800081FDFCCF109246040E94A30FDACB86E27E +:105C900090E00E94E3341B821C821D828E8376CEAC +:105CA0001092B9008CE08093B80008959F92AF9253 +:105CB000BF92CF92DF92EF92FF920F931F93CF93F9 +:105CC000DF93B82EEB010E94F41A6C01EE24E394EA +:105CD000F12CC431D10560F025E0E22EF12CCF3F4C +:105CE000DC0731F0CE0164E170E00E9479317B0184 +:105CF00084EAA82E94E8992E1092BC00A092BC00D1 +:105D00000E94F41A8C018091BC0087FF0DC0809125 +:105D1000B900887F883039F18091B900887F80315F +:105D200011F10FEF1FEF09C00E94F41A801B910BB5 +:105D30008E159F0540F30EEF1FEFCF3FDC07E1F21A +:105D4000C6010E94E51A8C179D07B0F2C801DF91C9 +:105D5000CF911F910F91FF90EF90DF90CF90BF9068 +:105D6000AF909F900895B092BB009092BC000E94AB +:105D7000F41A8C018091BC0087FF0AC08091B900A1 +:105D8000887F883111F0803461F610E000E0DECFCA +:105D90000E94F41A801B910B8E159F0558F3CBCFF0 +:105DA0000F931F93CF93DF93EB018093BB0084E8A5 +:105DB0008093BC000E94F41A8C018091BC0087FF84 +:105DC00011C02091B900287F81E090E0283211F4C1 +:105DD00090E080E0919581959109DF91CF911F919D +:105DE0000F910895CF3FDC0741F30E94F41A801B06 +:105DF000910B8C179D0708F38EEF9FEFEECFCF929C +:105E0000DF92EF92FF920F931F93CF93DF936B017B +:105E10008A017901B9010E94562EE6010C0D1D1D63 +:105E2000C017D10761F424E92093BC00DF91CF9122 +:105E30001F910F91FF90EF90DF90CF90089597FD05 +:105E4000F2CFB70189910E94D02EEACFCF92DF9294 +:105E5000EF92FF920F931F93CF93DF93C62F6A01A8 +:105E60007901B8010E94562E97FD0CC0B8018C2F05 +:105E70000E94D02EE601EC0CFD1CCE15DF0511F0C2 +:105E800097FF0CC024E92093BC00DF91CF911F91B4 +:105E90000F91FF90EF90DF90CF900895B801899116 +:105EA0000E94D02EEACF84E98093BC0008958EE151 +:105EB0004A9B02C08150E1F74A9BFECF08955A9851 +:105EC00080E28A95F1F75A9A0895FC013BE03A95F1 +:105ED000F1F798E020E080E031E040E14A95F1F709 +:105EE000880F4A9B02C08160232742E04A95F1F760 +:105EF000000040E14A95F1F7915079F790E19A95C9 +:105F0000F1F799B132E03A95F1F7000040E14A9596 +:105F1000F1F792FB992790F992272081920F9083B5 +:105F20000895EF92FF920F931F93CF93DF930F92F9 +:105F3000CDB7DEB719828C017C01E60EF11C0E157F +:105F40001F0561F481E09981911180E00F90DF914C +:105F5000CF911F910F91FF90EF9008950E94572FBE +:105F6000CE0101960E94652FF80181938F01E7CF42 +:105F7000529A5A9A089552985A9AEA9AE9E6F0E0A3 +:105F800080818F7C808308956150770B91E001C000 +:105F9000990F6A95EAF720E031E0911108C02223B9 +:105FA00091F05A9A80E28A95F1F75A980895492F0C +:105FB000482339F05A9A232740E24A95F1F79695FB +:105FC000ECCF5A98F9CF5A98EDCFFF920F931F93C9 +:105FD000CF93DF93EC018C01060F111DC017D10781 +:105FE00031F4DF91CF911F910F91FF900895F990B7 +:105FF0000E945F2F68E08F2D0E94C42FEFCF1F9269 +:106000000F920FB60F921124EF92FF920F931F93EE +:106010002F933F934F935F936F937F938F939F93B0 +:10602000AF93BF93EF93FF93CF93DF930F92CDB7CF +:10603000DEB719820E94572FCE0101960E94652F6C +:10604000A82FA695A695A695282F229525709A2F5C +:106050009570290F922F937026952695920F982769 +:1060600097708981982B09F075C0A93008F072C02B +:1060700080E18A95F1F75A9A529AB2E0BA95F1F70F +:1060800000C05A98EA2EF12CEAE0AE9FD00111240C +:10609000A050BF4F1896ED91FC9119973097B1F031 +:1060A000609102027091030216962D913C91179710 +:1060B000260F371F13968D919C911497680F791FA7 +:1060C00015964C91159712968C9109958AE08E9DA4 +:1060D000F0018F9DF00D1124E050FF4F6581662384 +:1060E00051F0209102023091030286819781820F44 +:1060F000931F0E94E52F0E945F2FF0E1FA95F1F7C0 +:106100005A9852985A9A80E18A95F1F78AE08E9DC2 +:1061100080018F9D100D112400501F4FD801129641 +:106120006C911297662371F1209102023091030263 +:1061300013968D919C91820F931F0E94912FD801ED +:10614000ED91FC91882311F088E001C082E080830A +:106150000E94572F0F90DF91CF91FF91EF91BF9148 +:10616000AF919F918F917F916F915F914F913F91EF +:106170002F911F910F91FF90EF900F900FBE0F90F6 +:106180001F901895ED91FC91DFCF0F931F93CF9344 +:10619000DF93EC0109970CF0A9C08AE08C9FF00115 +:1061A0008D9FF00D1124E050FF4F80819181892B4C +:1061B00009F49CC0F894529A5A9885E08A95F1F7B0 +:1061C00000008C2F869585709C2F9570890F982FD5 +:1061D000937086958695890F8E0193E0000F111FAD +:1061E0009A95E1F7082B0E945F2F00C068E0802F8E +:1061F0000E94C42FA0E1AA95F1F752985A9A4A9B9F +:1062000027C087E090E04A9925C08AE08C9F8001F2 +:106210008D9F100D112400501F4FF80165816623DA +:10622000A1F1209102023091030286819781820FB1 +:10623000931F0E94912F811128C0529A5A9AD80117 +:10624000ED91FC9182E08083789482E090E016C02A +:1062500000C0D5CF0197B9F4529A5A9A8AE08C9F20 +:10626000F0018D9FF00D1124E050FF4F0190F0815F +:10627000E02D81E08083789481E090E0DF91CF9100 +:106280001F910F91089500C0BECF0E94572FB0E21A +:10629000BA95F1F75A98529AE0E1EA95F1F78AE057 +:1062A0008C9FF0018D9FF00D1124E050FF4F628113 +:1062B000662351F020910202309103028381948180 +:1062C000820F931F0E94E52F0E945F2F8AE08C9F10 +:1062D000F0018D9FF00D1124E050FF4F0190F081EF +:1062E000E02D1082789490E080E0C8CF84E090E0C8 +:1062F000C5CFAA1BBB1B51E107C0AA1FBB1FA61716 +:10630000B70710F0A61BB70B881F991F5A95A9F75E +:1063100080959095BC01CD010895991B79E004C04A +:10632000991F961708F0961B881F7A95C9F78095D4 +:10633000089597FB072E16F4009407D077FD09D037 +:106340000E94793107FC05D03EF4909581959F4FCE +:106350000895709561957F4F0895052E97FB1EF463 +:1063600000940E94C43157FD07D00E94D93107FC28 +:1063700003D04EF40C94C43150954095309521953E +:106380003F4F4F4F5F4F0895909580957095619561 +:106390007F4F8F4F9F4F0895EE0FFF1F0590F49191 +:1063A000E02D09946927962769277827872778277A +:1063B0000895A1E21A2EAA1BBB1BFD010DC0AA1F46 +:1063C000BB1FEE1FFF1FA217B307E407F50720F05E +:1063D000A21BB30BE40BF50B661F771F881F991FD9 +:1063E0001A9469F760957095809590959B01AC0122 +:1063F000BD01CF0108952F923F924F925F926F920D +:106400007F928F929F92AF92BF92CF92DF92EF9244 +:10641000FF920F931F93CF93DF93CDB7DEB7CA1BC5 +:10642000DB0B0FB6F894DEBF0FBECDBF09942A88F0 +:10643000398848885F846E847D848C849B84AA8498 +:10644000B984C884DF80EE80FD800C811B81AA8125 +:10645000B981CE0FD11D0FB6F894DEBF0FBECDBFF0 +:10646000ED010895FB01DC0102C005900D92415041 +:106470005040D8F70895FB01DC0104C08D910190D4 +:10648000801921F441505040C8F7881B990B08959A +:10649000FB01DC0102C001900D9241505040D8F741 +:1064A0000895AEE0B0E0E7E5F2E30C9409320D891F +:1064B0001E8986E08C831A8309838FEF9FE79E8372 +:1064C0008D83AE01475E5F4F6F89788DCE01019657 +:1064D0000E9474322F813885020F131FF801108239 +:1064E0002E96E4E00C942532ABE0B0E0EAE7F2E36C +:1064F0000C94FB317C013B018A01FC01178216825E +:10650000838181FFB9C19AE0292ECE0101965C01F9 +:10651000F7019381F30193FD859193FF81913F01F1 +:10652000882309F446C1853239F493FD859193FFA0 +:1065300081913F01853229F4B70190E00E945534E2 +:10654000E7CF912C412C512CFFE1F51538F08B321F +:1065500009F188F4803201F1833221F157FC3AC00D +:1065600020ED280F2A3040F556FE1FC0929C200DCA +:106570001124922E06C08D3291F0803379F7689401 +:1065800050F8F30193FD859193FF81913F018111B3 +:10659000DBCF20C0689451F8689452F8F2CF689429 +:1065A00053F8EFCF689454F8ECCF429C200D11249F +:1065B000422E689455F8E5CF8E3229F456FCF9C086 +:1065C000689456F8DECF8C3619F4689457F8D9CF12 +:1065D0008836B9F2982F9F7D95549330C0F083365A +:1065E000A1F18337C1F1833509F05BC0F801C19097 +:1065F000D1908F01692D70E056FC02C06FEF7FEFE4 +:10660000C6010E943F344C01689457F80AC00C5FE1 +:106610001F4F2FE3298388248394912C6501E894EC +:1066200057F853FC04C04814190409F018F5342C29 +:106630008114910431F5332009F46ACFB70180E267 +:1066400090E00E9455343A94F6CFF8018081898316 +:106650000E5F1F4FE0CFF801C190D1908F01692DDF +:1066600070E056FC02C06FEF7FEFC6010E944A3413 +:106670004C01D5CFB70180E290E00E9455344A9496 +:10668000D2CFF60157FC859157FE81916F01B7017A +:1066900090E00E94553431103A94F1E08F1A91083D +:1066A000C7CF843619F0893609F074C0F80157FE57 +:1066B0006AC061917191819191918F01252D2F7601 +:1066C000D22E97FF09C090958095709561957F4F68 +:1066D0008F4F9F4F6894D7F82AE030E0A5010E94C1 +:1066E0008534C82ECA188C2C5D2CD6FE0CC0E894BC +:1066F00050F8C91440F4D4FE05C0D2FC03C0FD2DEF +:10670000FE7E5F2E892C54FE8FC0FE01EC0DF11D24 +:106710008081803309F081C0252D297E522E852D60 +:106720008870382E53FC8FC050FE89C09C2C841476 +:1067300018F44C0C942C981854FE8BC0B70180E3CD +:1067400090E00E94553452FE09C088E790E051FE67 +:1067500002C088E590E0B7010E945534C91408F4DE +:1067600084C0CA94D12C9FEFC91AD90ACA0CDB1C69 +:10677000F60182916F01B70190E00E945534AC148C +:10678000BD04B1F758CF61917191072E000C880BB1 +:10679000990B93CFD52CE894D4F82AE030E08537D4 +:1067A00039F1952D997FD92E8F3601F148F488352E +:1067B000A9F0F701868197812B96E2E10C941732BC +:1067C000803749F08837A9F7D4FE02C06894D2F820 +:1067D00020E130E00DC06894D4F8F6CF54FE03C039 +:1067E000E92FE660DE2E20E132E002C028E030E052 +:1067F000F801D7FE0DC061917191819191918F0146 +:10680000A5010E948534C82ECA18E894D7F86BCF2A +:106810006191719190E080E0F2CF52FC02C08394CC +:106820007ECF839483947BCF852D867809F477CFB0 +:10683000F6CFB70180E290E00E945534839484142F +:10684000C0F3312C79CF342C3818841408F474CF69 +:10685000F8CF852D867809F481CF8BE251FE80E256 +:1068600057FC8DE2B70190E077CFB70180E390E06D +:106870000E9455349A9472CF8FEF9FEF9DCFFC0109 +:106880000590615070400110D8F7809590958E0F5B +:106890009F1F0895FC016150704001900110D8F7CE +:1068A000809590958E0F9F1F08950F931F93CF9300 +:1068B000DF93182F092FEB018B8181FD09C01FEF9A +:1068C0000FEF812F902FDF91CF911F910F9108959E +:1068D00082FF14C02E813F818C819D81281739074A +:1068E0003CF4E881F981CF01019699838883108374 +:1068F0008E819F8101969F838E83E3CFE885F98502 +:10690000812F0995892BA1F3DACFFA01AA27283024 +:1069100051F1203181F1E8946F936E7F6E5F7F4F6C +:106920008F4F9F4FAF4FB1E03ED0B4E03CD0670FE8 +:10693000781F891F9A1FA11D680F791F8A1F911D3B +:10694000A11D6A0F711D811D911DA11D20D009F48B +:1069500068943F912AE0269F11243019305D3193CD +:10696000DEF6CF010895462F4770405D4193B3E0B6 +:106970000FD0C9F7F6CF462F4F70405D4A3318F05D +:10698000495D31FD4052419302D0A9F7EACFB4E00E +:10699000A6959795879577956795BA95C9F70097C6 +:1069A0006105710508959B01AC010A2E0694579567 +:1069B000479537952795BA95C9F7620F731F841FBE +:1069C000951FA01D0895F999FECF92BD81BDF89A3B +:1069D000992780B50895A6E1B0E044E050E00C941A +:1069E0001D35A8E1B0E042E050E00C941D35262FA3 +:1069F000F999FECF92BD81BDF89A019700B40216B5 +:106A000039F01FBA20BD0FB6F894FA9AF99A0FBE62 +:106A100008950396272F0E94F8340E94F734252FFB +:106A20000E94F834242F0C94F8340196272F0E94EA +:106A3000F8340C94F734DC01CB01FC01F999FECF5A +:106A400006C0F2BDE1BDF89A319600B40D924150F6 +:106A50005040B8F708955058BB27AA270E944335E5 +:106A60000C945B360E944D3638F00E94543620F06C +:106A700039F49F3F19F426F40C944A360EF4E0954D +:106A8000E7FB0C941B36E92F0E946C3658F3BA17BB +:106A9000620773078407950720F079F4A6F50C9434 +:106AA000A6360EF4E0950B2EBA2FA02D0B01B901DE +:106AB00090010C01CA01A0011124FF27591B99F074 +:106AC000593F50F4503E68F11A16F040A22F232F80 +:106AD000342F4427585FF3CF469537952795A795D0 +:106AE000F0405395C9F77EF41F16BA0B620B730B77 +:106AF000840BBAF09150A1F0FF0FBB1F661F771FE8 +:106B0000881FC2F70EC0BA0F621F731F841F48F49C +:106B1000879577956795B795F7959E3F08F0B0CF25 +:106B20009395880F08F09927EE0F9795879508950C +:106B30000E948E3690F09F3748F4911116F40C9411 +:106B4000A73660E070E080E89FE3089526F01B160A +:106B5000611D711D811D0C9421360C943C360E94E0 +:106B6000743688F09F5798F0B92F9927B751B0F035 +:106B7000E1F0660F771F881F991F1AF0BA95C9F7C1 +:106B800014C0B13091F00E94A636B1E008950C9483 +:106B9000A636672F782F8827B85F39F0B93FCCF336 +:106BA000869577956795B395D9F73EF4909580953E +:106BB000709561957F4F8F4F9F4F0895E89409C05E +:106BC00097FB3EF490958095709561957F4F8F4F20 +:106BD0009F4F9923A9F0F92F96E9BB279395F69536 +:106BE000879577956795B795F111F8CFFAF4BB0FB4 +:106BF00011F460FF1BC06F5F7F4F8F4F9F4F16C018 +:106C0000882311F096E911C0772321F09EE8872FA1 +:106C1000762F05C0662371F096E8862F70E060E05D +:106C20002AF09A95660F771F881FDAF7880F9695D6 +:106C3000879597F9089597F99F6780E870E060E07D +:106C40000895882371F4772321F09850872B762FAD +:106C500007C0662311F499270DC09051862B70E070 +:106C600060E02AF09A95660F771F881FDAF7880F81 +:106C70009695879597F908959F3F31F0915020F4AC +:106C8000879577956795B795880F911D9695879508 +:106C900097F908959FEF80EC089500240A94161642 +:106CA000170618060906089500240A9412161306FA +:106CB000140605060895092E0394000C11F4882388 +:106CC00052F0BB0F40F4BF2B11F460FF04C06F5FA4 +:106CD0007F4F8F4F9F4F089557FD9058440F551F7A +:106CE00059F05F3F71F04795880F97FB991F61F04E +:106CF0009F3F79F087950895121613061406551FC5 +:106D0000F2CF4695F1DF08C0161617061806991F30 +:106D1000F1CF869571056105089408950E94743637 +:106D2000A0F0BEE7B91788F4BB279F3860F41616A9 +:106D3000B11D672F782F8827985FF7CF86957795B5 +:106D40006795B11D93959639C8F30895E894BB27CC +:106D500066277727CB0197F908950E94C0360C94D7 +:106D60005B360E944D3638F00E94543620F0952351 +:106D700011F00C941B360C944A3611240C94A7364F +:106D80000E946C3670F3959FC1F3950F50E0551F2C +:106D9000629FF001729FBB27F00DB11D639FAA2770 +:106DA000F00DB11DAA1F649F6627B00DA11D661FBF +:106DB000829F2227B00DA11D621F739FB00DA11DE0 +:106DC000621F839FA00D611D221F749F3327A00D9A +:106DD000611D231F849F600D211D822F762F6A2F36 +:106DE00011249F5750409AF0F1F088234AF0EE0F9B +:106DF000FF1FBB1F661F771F881F91505040A9F7C8 +:106E00009E3F510580F00C941B360C94A7365F3FD3 +:106E1000E4F3983ED4F3869577956795B795F79503 +:106E2000E7959F5FC1F7FE2B880F911D969587957B +:106E300097F90895F894FFCF9310BB100E11BB1073 +:106E40000E11EE1026110E11231230125C145C1478 +:106E50006514651467146514651465145C145C147A +:106E60006C14651465146C14F820F820512151211C +:106E700083212B212B212B219D210E221E221E221C +:106E8000B12CB52CF72C082D132D322D352D682D56 +:106E9000892D052D052D942D972D9B2DC12DE32D8D +:066EA000E62DE82D0D2E89 +:106EA600420200000001000000004202000000054E +:106EB600010000004202000000010600000042023C +:106EC6000000000107000000420204080000000064 +:106ED60000004202090C00000000000042020115F9 +:106EE6000000000000004202011600000000000041 +:106EF60036323331F7F6676697C634350000000040 +:106F06000001F508D50DF408D10DCD0DF4F50100FD +:106F160021007F220003004A004A4A01F6F7313376 +:106F26003236674C4159455200426173652000472D +:106F3600616D6520005261697365004C6F776572FB +:106F4600004C4F434B0043617073004E756D005308 +:106F560063726C00202020202000534F4C415200C9 +:106F6600544D505354002025303364002077706D03 +:106F760000818283E200E900EA00B500B600B700AE +:106F8600CD008301CC008A019201940121022302E3 +:106F960024022502260227022A02B300B4006F004B +:106FA6007000B90200FF0100010000FFFF000001B0 +:106FB6000001FF0000081018181008000001020266 +:106FC600020202020202020240223246012401F2B9 +:086FD600002B0D440D640D00B9 +:00000001FF From 909427ab27562829fd2d5631ef51471ac7892591 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Thu, 9 Sep 2021 00:05:55 -0400 Subject: [PATCH 010/155] Changed RGB enable to noeeprom. --- .../gmmk_pro_ansi_solartempest.bin | Bin 36500 -> 36480 bytes .../pro/ansi/keymaps/solartempest/jonavin.c | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro_ansi_solartempest.bin b/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro_ansi_solartempest.bin index 3481afb8006b1bdc0cad4b34feceaae578623dd4..c07d4f2fe74825593fbfff7605d766b5dcf2d481 100644 GIT binary patch delta 3154 zcma);e^gXu8pq$~&J1%A24)x#CNS>INDKm-ERu4JU_b|zEKvz?wa74K(;PwyQx{N4 zENz!wE6rS~&6AaG!fjS?8L_bSbj-6*cosEMk9h{yTrZN{8JIhFpUX~cr?Y?TJ?Ha2 z@B4k8_kHhuf8IR@n1%z)AJRb6lAg z5_o=H$VU)=c2pK`2fpys))V%$g>V}p38#0d9csZwGg+(gm>-Jb8dx{!u0zjEms-%# zDt0Ce(|6cx=;tr7NsLL|NZ5FUAW=vnl8R(fQ`jxoMz!I^jK7O63*Q5OqqoE3tuX2y zV)N8O<%wA?Fl!vL_>r9AP&-sY23ij7!!%uI%6LpBw&C9YC@UpmyBW;?1@qT~`IiI4 zb~%_Q^aWj~E@3-i{o4rpHrjBS6Oj!?^o0mJOrxC<@lZ?8N7$J$FO7@LgNw90QjuyS zU9o9$qt@A<%@H9?Cc@Wp{vEwjBRoy*`k3s=@@Lv*{Y%hyH$Vh;(6`9Dgd6f~w?*`+ z1dUvvo!?)G5#M3NkzhnF{k=X0O6ehefn7XFhRal!+9#)m46qB_L;Ad5dyPaTjGeq~ z(_8@Is$bDSXmjh`r*(uog0IiIh^?%5t1S|HI7(9tR@hG$8cgsiU2Q0g*`u_`eAPaA zntDJPP{OH%w`h;ye%Q^A7{UNPqjJdL$IPT+jQA`vBaO#+=bU zhtq(yhD|Qv{BAzACT zJ@ni#T>#*HN!p5BnHl3tyTv2=U+hi6D9br)ZW}rPZ95#ed1l zurY#zKAK#^9O|OI$#L{bGK;9`P%;MtG}M->u{GgL(1o@v9Q|#!s$hB8cGMt@h2dvd z>r&f7aU2*yPd`pc(bbMILNR`Z!YclH3T5CR-I!(tBR!B-08V-}Egn|#Qd*A|D)~=m z#51T3K9C7ZsbQuOmhwq6&oF3iWe#p;%IC zn6MPr&6<@3z;?@KrEX-mvygS&hdHgxx<74Ka++>j+ng+3u*izJi(5|PBf>tPG9!S> zISi1+YqBiz^lX7OWv7o!X=kr zuPQa77gA&Uh_HpeIVTaC=mT=?@W@t`^SFlyC%qL;9&MLbHR&m5tMjPmm>0;^ zy1WyXDGlvJ;JxqtLiyCYALGCB?#0yTz5EMrnRnMOl&8JhJZjEaxR@|E!EnsN(E7QC zUrh?AnKcOkF(mL_J6F)qKFd7|zttow9}-*#MBIl$=dA=A!|BS#{{yGv+ z-Xw|bga^NChpYilmIDs^#glY>VK&U99~5R}CQH}awRpN|1g#3Vy?LkF{bIB<%kdrB zNs=}#O7UobJDlep@{W5WsBYdc6XJhuew;?*_lwm=v9lGe?W4X}9Pbn<~_<^n}%P?K+Qnuy$0qs0lyb`eAX`YTpHO|~W>BnWMp}WQ; zvESzxzoFO4noJ@#_a!obe1i-jKOl?w#_~uAJ={##^ksyt=Jzd21-!F9{|y?E4lj>| zUK+ZhK(lBkVVCp8D{2|M@y#4`T=HCbw19d?tm zny?$tKF?RLja9*Bx^w+OOjDdaF`H3lT`K(Gug32SSv=LTi$b+A=j{p4$)M**$B_x` zlc4r)N7sb*VNl!K@g*(B7QUJAyb<(l@A!T~+ZEJa?C?)$TZ5XjBb>fdZH!5H`KPyg zHt1R2kw(9$_TWL$_S`{Ci)(Ib-gypxI(hqsn`)THr*AySz*_#?rv0HhO&(!yAW3$@ zUgv9@;sNHgyZfb9AMeEoNnFuZRoiw!ali{uwk_7 z<+GvU0>bKw2y5kYUP)x&EM2iXIXri{^4i>Z5482AXxKsz?e0m_l@iv3v>_6rDZ{Wg VlqizRN delta 3051 zcma);e^66b7RT>-NytMCBt(QXA}>TF6d0itk+rNuBoU~slv2>v5w}%gt2GoI>8}NU zV9^yVbKR}2b)hXzYptX3%oZF|w7Bc)E?ZDLtJAT)g~IWey!>-bw*ObLx_2M+}tGbV!Em=JqYRs%pZ%fixq>kS+`@h8@lA z8MGC)s){6)uz(sEyDAB5^XPge5p=YPiH0aOCiLXd|7(phqdOzOG9qXDAYGXhQ3}YoRuu~=ElYCA%&5R?=Dqba}6)bRR}JA zbI1uW-kOlb`+>{uy>*1W7*DvZ5roq^l{TgD2+d&4`m=s0im7K^q`MX)Sx%)8O{>@} z@X`0#Z1{%%noVE~F*^vm0GWl%M>3Elh@Be3zJn&Jo>|Ox>m?X_5FmnUDz@5F!VSB3Tf+MlLWG>B zF1T*T7I(14r&BEo=s|51tfR-Yc~?JlkBqK0ti@#nKnVkz(2X^FrdKBGxGGaREUbOty~H|p$BfBGE1$XxB1{jl;z za6$>E5ZY*uZUMZ_kL$t!{z2u)UigIe>f)XV+B z_e%M7v$resZ9cg}bg!v>Z_X|E3mhy_3P<=6LzOb_K_}@B{wk&jY%!GzLEZJEkJ|&i zhxnSg&A44t)x|%rX_6VC%|nF6J`l#~j`(WWM91UHAeR=I4aSzq9#+aT9w)+4KO;0t=Gt9L z)qRYxpVpbvVGiGJej6gb$GKBGPkNMEc!v?*La3Tl)rlFQ4s>d1#JBO~YWa8}avQ$m^qn4Ap311iv z!(5x(9*Xn82oKRyNlBVIA0s@A!w9m4znerEI8I+lF+(gpnvw^v(!mrXY~rPq9yQeR z7alb-u$$gmm;sekm!*eFJ|XK8gXX*JTcDolQ`&HI(Ei0Y;XQidu^redHRq#9)+vi4 zIFk_nkRy0Lw{rZ|9Ge36Q-k$II6)h%b{L|)*0R*5UlVpcGK%yf`AY~Ji@bwWBcn(^ z!aDt86fItQsjhYpVPEHht77H?Vv20CKp%RpdFUm`p%zbn0@gTr*WB`@<<>DbW{kPB zx=kk86l@H%By9PHGPWY@IFY6?kB?UXv4BNc%2?wR#3OrbJi`J6^_r`MCkTZ zIC!)!k7CC2j#kG>_h}E1!P?xj@v-$CL^$JV`-Sp_=LojH<~fX|-gEmG(N&)Pzfd-M zcDa?D!~PUuMnHEuo}rubb!iY#GL>@zq9nC-aC!9|i(HFvyl#1pO=UC82#EiY20JR} z1haQQ{N64 znK#^-Hu%_&lmDze8&c^X?CBY?(olyQ)0s+8D}Xzkd%nXj&X5+_?w}=-Iwdj~Q33aH zu4~vc8C6oReU$P0=(o#bR6d_ybkfj*7FbV@7rY1yXjEZdv?gG#?HNBGxl;ht~4pYg&LSyt_y^?rf0xv3;v6dvy>dxenaK(G*g~I4C^+fAylE_U+;#N9T zXiCcSfZ1H5bt!5gndxU6{o=1WnPli+-sp8Z?Eh2qX=+hs*cI=``1TNfe*xWGR0F5z zV9^Rqo42Ay5=*?TSZ?AMKVG8*B|Wt=F)Bu4U92-8ZjcD)6W7Rq`*XWbsJA zCnn-)2#CY9thg9HP{}W(oB1p=EY}aavrSZsy9l$QWMFhl;u&8a|H?N9-&~uH1wXP;?1K+SZ z8DJOR{w$jB=&k3X@uq$7T%PKMy@Yk}Icv5BGakP-2UgJ0wHZ)E6Dq9mFu$=PO9?OY zEiW7cXyNlWq(bZm0b;&*4>Ghat&@va+IEiX8m$$?G&9XB9-;>~)@hy&v{uEm&x$7| zulNLStjttu_G3528wuNpb|1fHQ?vr!qT9B#U>W7;NqP%q)~Ub&U!A-FWbu4w>$LW_ zDecdlrzuqHbIwmk&P+u<=>Ry(C_=uD&USL^Zeb5^_Ym>+$)1NiKAID(sENDuE5?b992hFs(sVBu$M%Yy3FNm(3um*(uG1v`Devent.pressed) { #ifdef RGB_MATRIX_ENABLE - rgb_matrix_enable(); + rgb_matrix_enable_noeeprom(); #endif #ifdef IDLE_TIMEOUT_ENABLE timeout_reset_timer(); //reset activity timer From 1b7d27e16a72c911607111a3b38ac5618a3cbe84 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Thu, 9 Sep 2021 00:11:32 -0400 Subject: [PATCH 011/155] Changed RGB timer to be noeeprom. --- .../keymaps/railgun/gmmk_pro_ansi_railgun.bin | Bin 46400 -> 46376 bytes .../gmmk/pro/ansi/keymaps/railgun/jonavin.c | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/railgun/gmmk_pro_ansi_railgun.bin b/keyboards/gmmk/pro/ansi/keymaps/railgun/gmmk_pro_ansi_railgun.bin index 3a0d9c54f5b53f5d5d58bdf13c0472b92c811e7d..11b834b812598d1c736eb9bf1d687c29a5093be8 100644 GIT binary patch delta 3408 zcma);dsGuw8o=*2Nz4R90+E*inGldbq{2}uR9Okw(5{bat*dsmVk;J;2-TvXvf!($ zReR)IpWBC6wZ#V_jOl@D8m-jo_PBzrN8Hv`YCS>G;~=$@kRh{Qkh1={bI$MH?{VMv zyLax{`%LY9X2)naP@ObsMBXmKmLuDd1BeZ|gxuU!{ahlPt8OR`>PA(yo3If`5@Mk# zFab2Q2dNVaNld~KSA5Y4Cftx<%WJw(_V zqzZ{_AZ#pR;?D)#Qm7`Qm`o1`eW4jF#Lo^^!!v50?%*>j4GM{dwKOH<@0d1+crdkv zo`$vjyI~nhD5CXxJB;9qB7tF^xM;~ptERn)#4tuyxJn%(!=f&@4sOYc9Of|oRy8Xd z$;~^sPHS&)57V;38QL>4B`Oz(#M%^7^bLxa6))BIkSf-W%Sl=SeamTyo&yqb|4?riA+%cicwLc$-QnrVuk8X3_MRbavn=evq>sYfDr@XP?jFhm+7|65*m_gK1csQYfR35<&v5_RZotog4ct zZ_}W}kg#)oIox%pBKoJs8uPIBs3~9#&sPe~G$Sz^=FxSDVF?S)JTj?nfY2fNS_GlN zuC<$n5iS(Ric4pj+q&Kqh&=?-bBRWMpXVEO=CxTkg4JFkWXZF*2iTt<`UNT{=7j!! znsm=)t~Q1yD%*X_OgN<=ou>26&p{x+)$9)tOZSYv3^6n>DLTN}Tjh*vXz9@qrO?J# zC+!26M9pKqQ`fkC73+BSm{kg0q+4zjoeRo7j=bqy%)um;pyM};El@^J`LuLA> zr4SYl=om`*3Sl|#pH>Y)T@u?Mi~o_ieBb;O!U0;B-Ud~)@`XpnC@&*S^vYtrti{N? zgOMkTCmmoNhV%Qufq^f?(dr3d5J8Vjcq`zp#0Y(TM3~@VglRNl;=9m7w@#dsx>w2+ zfYiB$66G=7Jq7WKW3k=qZboqT_dP@Qn@WUFB!zIV*I2e8OWmpvex+dIb#n5 zPR6BH+v;3OE$m~2Tl}Lx-2_-hFK0$TEp=wDVB)``xfYI=Sd_HN!olnGfMt?uC)Rq8 z-nFDc6xC-H4Cq_3>VjT%`%ekaHI|thG*4H8=42-XTz4r19tYv$JH8^DG5|ElYJ^gn zYR!hLwA`wP7JirYyc*i+yy<)3EZ;r-jw;~2gM@`CKjnw#5XVK@@tO`U@=sn9HJCko z!vU~|*5y`0B~4ni5H8Z~i}v%GZ;oT|{wZBNRR37lLTOl` zIom5TE*J-?f>UeDeC&+nti%B0`b1Ga^`xp;Y}48UO(NdcTzlqYIk`{ll-rxJT-=Y% zuoL1<);{qT-BcKDz9KWJ+g(FQezW4FV7Fo2-d3OYyv#Pk#9tdBwcVL&g<6j|pI#|U zhig>xPRiJCf0poU(#n~0aKPY5aB2xrVt0jkeF01fg4dGiOVEOe7+C= zTXuaJF%Nh6?2=e0`F7|x=NSwstqqJyt72v58fmClFV(D(#EV!dlFlhMBy{zH(YQiu zSCoO7X=68g#9zK*%+U7IX1B8>=YQ6R^gwZ{|8l7oYj4Hc*J(%b3YbG@mrM(oD&?+_ zM31Ki)8Tx5$qFSrpvKbpkh3ytXKh~bOB|m^RP_Re-6*=SG%B?Y?>CoBVsAG}Vpm^y zGmP^e?ZW-UsB*HlUhyCOH6@X{C9w_}@9q=BXhW$^eFZOJuPD&(OJ~9cK5FF(z@Jq0 zs(J7+?OJsY;_0=rN~U`y{Y&{Ts!lvqLutn92zZswS$!9hX~vpKkjz)CDTj!%{_y_7 ztA0rqZ+k6|HzyO}uaZaHOam*-nnc{b<*2Qu*%g~23Xc;u6Pb$4K;|R)$OXQmA`mo@ zC-4IJ8(}Z=?!TD<3i-IILI4}BUKa+F>5+BWsunEK%6G3TWzg{U#taOx!yCsk{to)@ zjhS$t*KZoHgctZ(TMh%f&AUHHf~chuF}B=;v0A)4xEQ5%eNWJ4OD-`CO%^dsv$s_S zL`pRU;SIxMh(Q!X`77H}mBSujKR34G+Yj^mC-~s%Pz58Lpou#_^=1Fu`Avv`9{h*k zq_6frIb`u{6QKuo=`ytSe|Wwg@EmXA25qMXY@anH5893n*!DJM(r#>F#-L~SfM;V< z?x1bkfNgbC$)IihfUTsdiduH-LUs&#mJN93H`UOB-A*`3XYSdLY4@HkRmL8CbMqa0 zyOeN-zx>I525!@$8Vih~^)-5h)xDX&T%+>~Sb+DhB@bU^NCyA#s2<=j)f_iM3Qan$ zPc1Dc?6)fk`(zbf<(P-p;o}!cMwG$9qyjg1H}WOYj!Z`T629X2X{a>dW(Oe_Bn6p( zm=QhVkN94r;WmsDe3t)#PxsmX`2J5_i{<-yrhI6B8_yV?>h$sneb6P`Um=!o$)gAd zXx~NMCvIs9J|t}44#IxHchv8Pp@UC(eE8C!Lo)(8NIIESOxOaXlE2pw&EQGWoQj8! uXv(Q*xIt&0IzPH#4Pi@>fVG63hb%(KZeQOlk^8@(TeGc`wR>MrJ@#K@seL8@ delta 3419 zcma);eNaj$e2wywiN)R&NuwTC_YVQvVP-&;MvB1x$Uq1eHNr6nO>ro4zo(Tts&qEF-M{hCinDktlPS&9eg_zl5Ad0kqZ@Ok~@DLx!`7|fl;}0h?(w>%2Qp; zbazyCxR|f$=7^$_)}UWZyYAy7jNd{;9A*3-ycUxTJ?Ljjhc;Yb3WXXhBzXrmQ=5+i zBNkn(HU7`;YMNYzM@;?|j~)sah2 zGrM=G+{m_6Qo*QBsg$phwus}BYQSH1^DT;eLlN@5`%_6x*p%D_?_=c){l*v%CuMsS zxmnRu=G~^uQ{*q~V3|PsyK1MzmlCjMb`V74k=bwQ2Hc#arCrZk2%N;ev{G*7*SI`gz~Xc@R;3HD3J<2I zYL1iFF1(wb2(cKNv3gYBkhU?`r{YOMLvA ztflV3n|6Rh*tEP7c4GXB9JqzMS2RrIt%`hKq0bUErPzC>zYxT@mA~Vl2v_9JO#Hy3 zwg~M^(kg7KU~$;A*?CfqhBIi2vx=GY$iqxh*8xYceujlf4@mpDi%EmnksA$G?9Z(R z7nbA|P@-JV%Yxe&y((w!-Ia{D5p&*Rd^B-@C?f`l4q{F&<6{Zl>XKXByiIQ%|FRJE z>LZpeSUBmD;*}||B!7$lSaqaQIz~lWU;=M73Lg2Q(_n&5(ri;nJL}Y%99_{QopLq~ z@Tw&lOVS7WsFp=cvKtJF!RyiLWY0~qYf1BZ93w5*&Ktb>$J-Ty*Y{w%w=g|R(tamz zJKO4&>e}hNQ3m!zDcFLbM-I0FbS`H^R^ z4+OVdJZ8C%EAks42w`m8r83Yk@{Nwy@Kr%ws9Xe=SV9{B@DZ)<*- z?OsxvN8W)xYv#deT(rgr^RQw~JS5}iYZikqDr?M{!}1daW`R7kPzOk+-~(TKhv#|d{iLRr=4ka$)71nmOIpcgsE!- zp%E9Y9f+*=y!G-+PXaR!WC&G;?w6hbN#nbP?QXfw%a4QGD3)nCcx%qf$T_l{t`|Co3R=VAC+%Ww?*+R>id6GR*h^5%(V0cl` zxI^y7jc)lAJ)y_cB17!WAut+C^)^*Gn7J-~yG#D(*PI!;vbQ_?inIP}?Zq8MiQ`te z50iH#d0)bgqEbrYl;U~1H23mSx7_b)q?Q-!ic8gWj>eV61fEoQ8*lZF`+n% zu2WWhlscOk9I^#dH{6A6jNX_E*<#+t3V^kEb5js(LV1%}8$r=u<#x&I(7gHGkgYV$ z5+aw#C;miK5jVt+&3>Srb%OB+w=n*$*t^9HkR$4<3LxZ&6H?RzdiBk&V%tK8x+vYD zF1XRh?8~sGI#cr#`P>tGs>?V?!dJJYzysX9Z6>Fj#&g@!;D)Gr_jxr;6KC)E6ySBS z_x*T)H_>lbD9lImu1cNW-MBiqWl|I~$g;2a)viSK1a&jjjGc5tp`L3Nhd!LF;`nBq zxc6gk*Shyy3Qr^SzmToSS4OT8ihQOmc+7Tj)b?eYY0P$d)ONfr30rCdQnJTJj*gDh zw=Eg7HICZ$wB?W4_Kn)MwUs063rN{MHuBEsNO4>Jn5}%&wyN#$m~GvtZCM-LIQI3y zMNF=1pth&(zGhJ!-Kxco`ul45UbG%);J|^48q*`E3{idjW5#lC-Gk9D&t-e$eU2yc z3(iK-+8E%gE1{ygD35ON!~*f!(NF*z4jeNsn6rVRICAl3ESECJD|6n4e!D9efBkL7 z>&h8_miie@bQLDD3H8K@td`Q^1o3x5B9@VTimdC6p1C45_5=!L?$tlFcRMB zXIROFF6qDF)xGxLe*dSgr{_m_>iLY3Ii527PrY!(>UC^&?%F&W?WG)*rZQp1vrGWe zo3Qu9O>Ola#s}6g-Y#}DH#~izFKJnevent.pressed) { #ifdef RGB_MATRIX_ENABLE - rgb_matrix_enable(); + rgb_matrix_enable_noeeprom(); #endif #ifdef IDLE_TIMEOUT_ENABLE timeout_reset_timer(); //reset activity timer From 74543cb719b42efd149ab69f9c5b857fbd00b515 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Thu, 9 Sep 2021 00:25:11 -0400 Subject: [PATCH 012/155] Initial commit. --- .../solartempest/ak21/ak21 VIA keymap.json | 69 +++++ .../solartempest/ak21/ak21 VIA layout.json | 267 ++++++++++++++++ keyboards/solartempest/ak21/ak21.c | 19 ++ keyboards/solartempest/ak21/ak21.h | 38 +++ keyboards/solartempest/ak21/config.h | 94 ++++++ keyboards/solartempest/ak21/info.json | 39 +++ .../ak21/keymaps/default/keymap.c | 293 ++++++++++++++++++ .../solartempest/ak21/keymaps/via/config.h | 22 ++ .../solartempest/ak21/keymaps/via/keymap.c | 293 ++++++++++++++++++ .../solartempest/ak21/keymaps/via/rules.mk | 1 + keyboards/solartempest/ak21/readme.md | 28 ++ keyboards/solartempest/ak21/rules.mk | 28 ++ 12 files changed, 1191 insertions(+) create mode 100644 keyboards/solartempest/ak21/ak21 VIA keymap.json create mode 100644 keyboards/solartempest/ak21/ak21 VIA layout.json create mode 100644 keyboards/solartempest/ak21/ak21.c create mode 100644 keyboards/solartempest/ak21/ak21.h create mode 100644 keyboards/solartempest/ak21/config.h create mode 100644 keyboards/solartempest/ak21/info.json create mode 100644 keyboards/solartempest/ak21/keymaps/default/keymap.c create mode 100644 keyboards/solartempest/ak21/keymaps/via/config.h create mode 100644 keyboards/solartempest/ak21/keymaps/via/keymap.c create mode 100644 keyboards/solartempest/ak21/keymaps/via/rules.mk create mode 100644 keyboards/solartempest/ak21/readme.md create mode 100644 keyboards/solartempest/ak21/rules.mk diff --git a/keyboards/solartempest/ak21/ak21 VIA keymap.json b/keyboards/solartempest/ak21/ak21 VIA keymap.json new file mode 100644 index 000000000000..0f369e01f272 --- /dev/null +++ b/keyboards/solartempest/ak21/ak21 VIA keymap.json @@ -0,0 +1,69 @@ +{ + "name": "AK21", + "vendorId": "0x414B", + "productId": "0x0021", + "lighting": "qmk_rgblight", + "matrix": { "rows": 6, "cols": 4 }, + "customKeycodes": [ + { + "name": "Super Alt Tab FWD", + "title": "Alt Tab Forwards in Windows", + "shortName": "ATABF" + }, + { + "name": "Super Alt Tab REV", + "title": "Alt Tab Reverse in Windows", + "shortName": "ATABR" + } + ], + "layouts": { + "keymap": [ + [ + { + "c": "#393B3B", + "t": "#91867A" + }, + "0,0", + "0,1", + "0,2", + "0,3" + ], + [ + "1,0", + "1,1", + "1,2", + "1,3" + ], + [ + "2,0", + "2,1", + "2,2", + { + "h": 2 + }, + "2,3" + ], + [ + "3,0", + "3,1", + "3,2" + ], + [ + "4,0", + "4,1", + "4,2", + { + "h": 2 + }, + "4,3" + ], + [ + { + "w": 2 + }, + "5,1", + "5,2" + ] +] + } +} \ No newline at end of file diff --git a/keyboards/solartempest/ak21/ak21 VIA layout.json b/keyboards/solartempest/ak21/ak21 VIA layout.json new file mode 100644 index 000000000000..dbec06309e55 --- /dev/null +++ b/keyboards/solartempest/ak21/ak21 VIA layout.json @@ -0,0 +1,267 @@ +{ + "name": "AK21", + "vendorProductId": 1095434273, + "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + "layers": [ + [ + "MO(1)", + "KC_MSTP", + "USER01", + "USER00", + "KC_NLCK", + "KC_PSLS", + "KC_PAST", + "KC_PMNS", + "KC_P7", + "KC_P8", + "KC_P9", + "KC_PPLS", + "KC_P4", + "KC_P5", + "KC_P6", + "KC_NO", + "KC_P1", + "KC_P2", + "KC_P3", + "KC_PENT", + "KC_P0", + "KC_P0", + "KC_PDOT", + "KC_NO" + ], + [ + "KC_TRNS", + "TO(2)", + "TO(3)", + "TO(4)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "RESET", + "KC_TRNS", + "KC_NO" + ], + [ + "TO(0)", + "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_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "TO(0)", + "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_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "TO(0)", + "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_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ] + ] +} \ No newline at end of file diff --git a/keyboards/solartempest/ak21/ak21.c b/keyboards/solartempest/ak21/ak21.c new file mode 100644 index 000000000000..4d53707a6fa8 --- /dev/null +++ b/keyboards/solartempest/ak21/ak21.c @@ -0,0 +1,19 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#include "ak21.h" diff --git a/keyboards/solartempest/ak21/ak21.h b/keyboards/solartempest/ak21/ak21.h new file mode 100644 index 000000000000..2bf922bf5158 --- /dev/null +++ b/keyboards/solartempest/ak21/ak21.h @@ -0,0 +1,38 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#pragma once +#include "quantum.h" + +#ifdef RGBLIGHT_ENABLE + #define LAYOUT( \ + K00, K01, K02, K03, \ + K10, K11, K12, K13, \ + K20, K21, K22, K23, \ + K30, K31, K32, \ + K40, K41, K42, K43, \ + K50, K52 \ + ) { \ + { K00, K01, K02, K03 }, \ + { K10, K11, K12, K13 }, \ + { K20, K21, K22, K23 }, \ + { K30, K31, K32, KC_NO }, \ + { K40, K41, K42, K43 }, \ + { K50, KC_NO, K52, KC_NO }, \ + } +#endif diff --git a/keyboards/solartempest/ak21/config.h b/keyboards/solartempest/ak21/config.h new file mode 100644 index 000000000000..2931a96fccf5 --- /dev/null +++ b/keyboards/solartempest/ak21/config.h @@ -0,0 +1,94 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#pragma once +#include "config_common.h" + +// USB Device descriptor parameter +#define VENDOR_ID 0x414B // "AK" +#define PRODUCT_ID 0x0021 +#define DEVICE_VER 0x0001 // Ver1 +#define MANUFACTURER ATLANTIS +#define PRODUCT AK21 + + +// key matrix size +#ifdef RGBLIGHT_ENABLE + #define MATRIX_ROWS 6 + #define MATRIX_COLS 4 +#endif + +#define MATRIX_ROW_PINS { B3, F1, F4, F5, F6, F7 } +#define MATRIX_COL_PINS { B2, F0, D6, D7 } +#define UNUSED_PINS + +// COL2ROW or ROW2COL +#define DIODE_DIRECTION ROW2COL + +// For LED status indicators +#define LED_NUM_LOCK_PIN E6 +#define LED_PIN_ON_STATE 0 + +#define RGB_DI_PIN B0 +#ifdef RGBLIGHT_ENABLE + #define RGBLED_NUM 33 // 21 key + 12 underglow for RGBLIGHT + #define RGBLIGHT_HUE_STEP 8 + #define RGBLIGHT_SAT_STEP 8 + #define RGBLIGHT_VAL_STEP 8 + #define RGBLIGHT_DEFAULT_VAL 40 // default brightness on clearing EEPROM + #define RGBLIGHT_LIMIT_VAL 200 // brightness level max is 255 + #define RGBLIGHT_SLEEP // if defined, RGB lighting off when host is sleeping + #define RGBLIGHT_ANIMATIONS + + //RGB LED Conversion macro from physical array to electric array + //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping + #define LED_LAYOUT( \ + L01, L02, L03, L04, L05, \ + L10, L11, L12, L13, L14, L15, \ + L20, L21, L22, L23, L25, \ + L30, L31, L32, L33, L34, L35, \ + L40, L41, L42, L43, L45, \ + L51, L53, L55, \ + L60, L63, L65 ) \ + { \ + L01,L02,L03,L05,L14,L13,L12,L11,L21,L22,L23,L34,L33,L32,L31,L41,L42,L43,L55,L53,L51,L60,L63,L65,L45,L35,L25,L04,L10,L20,L30,L40, \ + } + //RGB LED logical order map + //Right->Left, Top->Bottom + #define RGBLIGHT_LED_MAP LED_LAYOUT( \ + 4, 3, 2, 1, 0, \ + 10, 9, 8, 7, 6, 5, \ + 15, 14, 13, 12, 11, \ + 21, 20, 19, 18, 17, 16, \ + 26, 25, 24, 23, 22, \ + 29, 28, 27, \ + 32, 31, 30 ) +#endif + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +#define COMBO_COUNT 2 //Number of tap combos used +#define COMBO_TERM 300 //Default combo time is 200ms + +#define TAPPING_TERM 200 //Tap dance time diff --git a/keyboards/solartempest/ak21/info.json b/keyboards/solartempest/ak21/info.json new file mode 100644 index 000000000000..8ebc6f69bdc9 --- /dev/null +++ b/keyboards/solartempest/ak21/info.json @@ -0,0 +1,39 @@ +{ + "keyboard_name": "Atlantis AK21 Macropad", + "url": "", + "maintainer": "solartempest", + "width": 4, + "height": 6, + "layouts": { + "LAYOUT": { + "layout": [ + {"x":0, "y":0}, + {"x":0, "y":1}, + {"x":0, "y":2}, + {"x":0, "y":3}, + + {"x":1, "y":0}, + {"x":1, "y":1}, + {"x":1, "y":2}, + {"x":1, "y":3}, + + {"x":2, "y":0}, + {"x":2, "y":1}, + {"x":2, "y":2}, + {"x":2, "y":3, "h":2}, + + {"x":3, "y":0}, + {"x":3, "y":1}, + {"x":3, "y":2}, + + {"x":4, "y":0}, + {"x":4, "y":1}, + {"x":4, "y":2}, + {"x":4, "y":3, "h":2}, + + {"x":5, "y":0, "w":2}, + {"x":5, "y":2}, + ] + } + } +} diff --git a/keyboards/solartempest/ak21/keymaps/default/keymap.c b/keyboards/solartempest/ak21/keymaps/default/keymap.c new file mode 100644 index 000000000000..57cb17af2a32 --- /dev/null +++ b/keyboards/solartempest/ak21/keymaps/default/keymap.c @@ -0,0 +1,293 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#include QMK_KEYBOARD_H +#include "ak21.h" +#ifdef RGBLIGHT_ENABLE + extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT +#endif + +bool is_alt_tab_active = false; // Super Alt Tab Code +uint16_t alt_tab_timer = 0; +#ifdef VIA_ENABLE + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = USER00, //Alt tab forwards + ATABR //Alt tab reverse + }; +#else + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = SAFE_RANGE, //Alt tab forwards + ATABR //Alt tab reverse + }; +#endif + + +enum combos { //Tap combos + kppls_7, + kppls_8 +}; + +const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; +const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; + +combo_t key_combos[COMBO_COUNT] = { + [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), + [kppls_8] = COMBO(kppl8_combo, KC_DELETE) +}; + + +// Tap Dance declarations +enum { + TD_MINUS_NUMLOCK, +}; + +// Tap Dance definitions. Not VIA compatible. +qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for Escape, twice for Caps Lock + [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), +}; +//TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode + + +enum layer_names { + _LAYER0, + _LAYER1, + _LAYER2, + _LAYER3, + _LAYER4, + _LAYER5, + _LAYER6, + _LAYER7, + _LAYER8, + _LAYER9 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_LAYER0] = LAYOUT( + MO(_LAYER1), KC_ESC, KC_CALC, KC_BSPC, + KC_NLCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, + KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, + KC_KP_4, KC_KP_5, KC_KP_6, + KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, + KC_KP_0, KC_KP_DOT + ), + [_LAYER1] = LAYOUT( + 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, RESET, + KC_TRNS, KC_TRNS + ), + [_LAYER2] = LAYOUT( + 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 + ), + [_LAYER3] = LAYOUT( + 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 + ), + [_LAYER4] = LAYOUT( + 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 + ), + [_LAYER5] = LAYOUT( + 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 + ), + [_LAYER6] = LAYOUT( + 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 + ), + [_LAYER7] = LAYOUT( + 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 + ), + [_LAYER8] = LAYOUT( + 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 + ), + [_LAYER9] = LAYOUT( + 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 + ) +}; + + +void matrix_init_user(void) { //run when matrix is initiated, before all features init +}; + +void matrix_scan_user(void) { //run whenever user matrix is scanned + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { //Actions to override existing key behaviours + switch (keycode) { //For super alt tab keycodes + case ATABF: //Alt tab forwards + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + break; + case ATABR: //Alt tab reverse + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_LSHIFT); + register_code(KC_TAB); + } else { + unregister_code(KC_LSHIFT); + unregister_code(KC_TAB); + } + break; + } + return true; +}; + + +void keyboard_post_init_user(void) { //run as last task in keyboard init + #ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9. Looks great this way! + rgblight_sethsv(58, 255, 30); //Set lower default brightness when connected as the right side dimming is not yet in effect + #endif +}; + + +#ifdef RGBLIGHT_ENABLE +layer_state_t layer_state_set_user(layer_state_t state) { + switch (get_highest_layer(state)) { + //This custom layer lighting is similar to RGB Light Gradient 9, but customized to separate key and case underglow brightness + static uint16_t underglow_brightness = 140; + static uint16_t perkey_brightness = 80; + static uint16_t current_hue = 0; //hue calculated to be used + static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue + static uint16_t layer0_hueincrement = 2; //hue gradient colour increment + static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green + static uint16_t layer1_hueincrement = 2; //hue gradient colour increment + static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange + static uint16_t layer2_hueincrement = 2; //hue gradient colour increment + static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple + static uint16_t layer3_hueincrement = 2; //hue gradient colour increment + static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red + static uint16_t layer4_hueincrement = 1; //hue gradient colour increment + + case _LAYER0: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER1: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER2: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code is for normal gradient colouration + current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER3: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER4: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + } + return state; + }; +#endif diff --git a/keyboards/solartempest/ak21/keymaps/via/config.h b/keyboards/solartempest/ak21/keymaps/via/config.h new file mode 100644 index 000000000000..4bbacd9a507b --- /dev/null +++ b/keyboards/solartempest/ak21/keymaps/via/config.h @@ -0,0 +1,22 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#pragma once + +// Set 10 layers for VIA +#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/ak21/keymaps/via/keymap.c b/keyboards/solartempest/ak21/keymaps/via/keymap.c new file mode 100644 index 000000000000..57cb17af2a32 --- /dev/null +++ b/keyboards/solartempest/ak21/keymaps/via/keymap.c @@ -0,0 +1,293 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#include QMK_KEYBOARD_H +#include "ak21.h" +#ifdef RGBLIGHT_ENABLE + extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT +#endif + +bool is_alt_tab_active = false; // Super Alt Tab Code +uint16_t alt_tab_timer = 0; +#ifdef VIA_ENABLE + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = USER00, //Alt tab forwards + ATABR //Alt tab reverse + }; +#else + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = SAFE_RANGE, //Alt tab forwards + ATABR //Alt tab reverse + }; +#endif + + +enum combos { //Tap combos + kppls_7, + kppls_8 +}; + +const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; +const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; + +combo_t key_combos[COMBO_COUNT] = { + [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), + [kppls_8] = COMBO(kppl8_combo, KC_DELETE) +}; + + +// Tap Dance declarations +enum { + TD_MINUS_NUMLOCK, +}; + +// Tap Dance definitions. Not VIA compatible. +qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for Escape, twice for Caps Lock + [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), +}; +//TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode + + +enum layer_names { + _LAYER0, + _LAYER1, + _LAYER2, + _LAYER3, + _LAYER4, + _LAYER5, + _LAYER6, + _LAYER7, + _LAYER8, + _LAYER9 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_LAYER0] = LAYOUT( + MO(_LAYER1), KC_ESC, KC_CALC, KC_BSPC, + KC_NLCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, + KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, + KC_KP_4, KC_KP_5, KC_KP_6, + KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, + KC_KP_0, KC_KP_DOT + ), + [_LAYER1] = LAYOUT( + 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, RESET, + KC_TRNS, KC_TRNS + ), + [_LAYER2] = LAYOUT( + 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 + ), + [_LAYER3] = LAYOUT( + 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 + ), + [_LAYER4] = LAYOUT( + 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 + ), + [_LAYER5] = LAYOUT( + 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 + ), + [_LAYER6] = LAYOUT( + 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 + ), + [_LAYER7] = LAYOUT( + 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 + ), + [_LAYER8] = LAYOUT( + 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 + ), + [_LAYER9] = LAYOUT( + 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 + ) +}; + + +void matrix_init_user(void) { //run when matrix is initiated, before all features init +}; + +void matrix_scan_user(void) { //run whenever user matrix is scanned + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { //Actions to override existing key behaviours + switch (keycode) { //For super alt tab keycodes + case ATABF: //Alt tab forwards + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + break; + case ATABR: //Alt tab reverse + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_LSHIFT); + register_code(KC_TAB); + } else { + unregister_code(KC_LSHIFT); + unregister_code(KC_TAB); + } + break; + } + return true; +}; + + +void keyboard_post_init_user(void) { //run as last task in keyboard init + #ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9. Looks great this way! + rgblight_sethsv(58, 255, 30); //Set lower default brightness when connected as the right side dimming is not yet in effect + #endif +}; + + +#ifdef RGBLIGHT_ENABLE +layer_state_t layer_state_set_user(layer_state_t state) { + switch (get_highest_layer(state)) { + //This custom layer lighting is similar to RGB Light Gradient 9, but customized to separate key and case underglow brightness + static uint16_t underglow_brightness = 140; + static uint16_t perkey_brightness = 80; + static uint16_t current_hue = 0; //hue calculated to be used + static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue + static uint16_t layer0_hueincrement = 2; //hue gradient colour increment + static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green + static uint16_t layer1_hueincrement = 2; //hue gradient colour increment + static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange + static uint16_t layer2_hueincrement = 2; //hue gradient colour increment + static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple + static uint16_t layer3_hueincrement = 2; //hue gradient colour increment + static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red + static uint16_t layer4_hueincrement = 1; //hue gradient colour increment + + case _LAYER0: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER1: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER2: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code is for normal gradient colouration + current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER3: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER4: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + } + return state; + }; +#endif diff --git a/keyboards/solartempest/ak21/keymaps/via/rules.mk b/keyboards/solartempest/ak21/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/solartempest/ak21/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/solartempest/ak21/readme.md b/keyboards/solartempest/ak21/readme.md new file mode 100644 index 000000000000..ab15ce05d570 --- /dev/null +++ b/keyboards/solartempest/ak21/readme.md @@ -0,0 +1,28 @@ +# Atlantis AK21 Macropad + +![Atlantis AK21] + +A 21-key macro pad with pushbutton rotary encoder and underglow RGB per key RGB and for the case. + +For detailed instructions on using VIA and flashing, please refer to the sections further down the page! + +* Keyboard Maintainer: solartempest +* Hardware Supported: Atlantis AK21 +* Hardware Availability: [rioo897](https://shop198276076.world.taobao.com/index.htm?spm=2013.1.w5002-23418336364.2.3f4d7d51DkVX3s) + +## Make and Flashing + +Make example for this keyboard (after setting up your build environment): + + qmk compile -kb solartempest/ak21 -km via + +To reset the board into bootloader mode, tap the Reset switch mounted on the bottom of the PCB. +Flash with QMK toolbox, auto-flash. + +## Using with VIA + +- After flashing, in VIA make sure to Import Keymap, which is "ak21 VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. +- Go to Save+Load to Load Saved Layout. You can import my own layout "as21 VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. +- It is a good idea to Save Current Layout after you decide on your mapping. + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/solartempest/ak21/rules.mk b/keyboards/solartempest/ak21/rules.mk new file mode 100644 index 000000000000..c6bc1c8cc8cf --- /dev/null +++ b/keyboards/solartempest/ak21/rules.mk @@ -0,0 +1,28 @@ +# MCU name +MCU = atmega32u4 + +# Bootloader selection +BOOTLOADER = atmel-dfu + +# Build Options +# change yes to no to disable +# + +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration +MOUSEKEY_ENABLE = no # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +RGB_MATRIX_ENABLE = no # RGB matrix for individual LED control +RGB_MATRIX_DRIVER = WS2812 # Addressable LED strand driver (keep for RGBLIGHT too) +BLUETOOTH_ENABLE = no # Enable Bluetooth +AUDIO_ENABLE = no # Audio output +MIDI_ENABLE = no # No midi +UNICODE_ENABLE = yes # Unicode +COMBO_ENABLE = yes # Tap combo chording +TAP_DANCE_ENABLE = yes # Tap dance +LTO_ENABLE = yes # Reduce firmware size From 26f6b2af9b15b8f376a44e640822a37c853c8c3e Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Thu, 9 Sep 2021 00:31:02 -0400 Subject: [PATCH 013/155] Add firmware file. --- .../ak21/solartempest_ak21_via.hex | 1475 +++++++++++++++++ 1 file changed, 1475 insertions(+) create mode 100644 keyboards/solartempest/ak21/solartempest_ak21_via.hex diff --git a/keyboards/solartempest/ak21/solartempest_ak21_via.hex b/keyboards/solartempest/ak21/solartempest_ak21_via.hex new file mode 100644 index 000000000000..1c6288a1558e --- /dev/null +++ b/keyboards/solartempest/ak21/solartempest_ak21_via.hex @@ -0,0 +1,1475 @@ +:100000000C9470030C94B7030C94B7030C94B703CF +:100010000C94B7030C94B7030C94B7030C94B70378 +:100020000C94B7030C94B7030C94B6260C94722668 +:100030000C94B1270C94B7030C94B7030C94B7033A +:100040000C94B7030C94B7030C94B7030C94B70348 +:100050000C94B7030C948D270C94B7030C94B7033E +:100060000C94B7030C94B7030C94B7030C94B70328 +:100070000C94B7030C94B7030C94B7030C94B70318 +:100080000C94B7030C94B7030C94B7030C94B70308 +:100090000C94B7030C94B7030C94B7030C94B703F8 +:1000A0000C94B7030C94B7030C94B703570060008B +:1000B000000057005F00000005010980A1018503D1 +:1000C00019012AB700150126B700950175108100A6 +:1000D000C0050C0901A101850419012AA00215011E +:1000E00026A002950175108100C005010906A10135 +:1000F0008505050719E029E7150025019508750113 +:1001000081020507190029EF1500250195F07501F9 +:1001100081020508190129059505750191029501CE +:1001200075039101C00660FF0961A1010962150014 +:1001300026FF009520750881020963150026FF003F +:10014000952075089102C005010906A1010507194E +:10015000E029E715002501950875018102950175D3 +:100160000881010507190029FF150026FF009506E3 +:100170007508810005081901290595057501910289 +:10018000950175039101C00000000000000000000F +:10019000000000000000000000000000000000005F +:1001A00000000000000000000000007E0F00D4FFEF +:1001B000FFFFC70000007800000000000000002AD8 +:1001C0002B280000000000000000000000000000DC +:1001D000000029000000002C1E3420212224342697 +:1001E00027252E362D3738271E1F20212223242590 +:1001F000263333362E37381F0405060708090A0B45 +:100200000C0D0E0F101112131415161718191A1BB6 +:100210001C1D2F3130232D350405060708090A0B54 +:100220000C0D0E0F101112131415161718191A1B96 +:100230001C1D2F3130354C00047F3F1F6432146485 +:100240003214783C1E1E140A05000101010101014F +:10025000010101020202020202020202030303037D +:10026000030303030404040404040405050505054D +:10027000060606060607070707070808080809090B +:1002800009090A0A0A0B0B0B0C0C0C0D0D0D0E0EB6 +:100290000E0F0F0F10101111111212131314141549 +:1002A0001516161717181819191A1A1B1B1C1D1DBD +:1002B0001E1E1F2020212222232424252626272813 +:1002C00029292A2B2C2D2D2E2F3031323233343543 +:1002D000363738393A3B3C3D3E3F40414243444546 +:1002E000464748494A4C4D4E4F5051535455565825 +:1002F000595A5B5D5E5F616264656668696B6C6DCF +:100300006F7072737577787A7B7D7E808283858744 +:10031000888A8C8E8F91939596989A9C9EA0A2A382 +:10032000A5A7A9ABADAFB1B3B5B7BABCBEC0C2C487 +:10033000C6C9CBCDCFD1D4D6D8DBDDDFE2E4E7E947 +:10034000EBEEF0F3F5F8FAFDFFFFAA7F554004034A +:100350000200060708090E0D0C11121314191817C4 +:100360001B1C1D201F1E16100B010A0F151A22231D +:10037000252628292A2C2D2F3032333536383A3B82 +:100380003D3E4042434547494A4C4E5051535557D4 +:10039000595A5C5E6062646668696B6D6F717375F3 +:1003A00077797B7D7F81838587898A8C8E909294F3 +:1003B00096989A9C9E9FA1A3A5A7A8AAACAEAFB100 +:1003C000B3B4B6B8B9BBBCBEBFC1C2C3C5C6C7C94A +:1003D000CACBCCCDCED0D1D2D2D3D4D5D6D7D7D804 +:1003E000D9D9DADADBDBDBDCDCDCDCDCDDDDDDDD56 +:1003F000DCDCDCDCDCDBDBDBDADAD9D9D8D7D7D65E +:10040000D5D4D3D2D2D1D0CECDCCCBCAC9C7C6C514 +:10041000C3C2C1BFBEBCBBB9B8B6B4B3B1AFAEAC5A +:10042000AAA8A7A5A3A19F9E9C9A98969492908E05 +:100430008C8A89878583817F7D7B79777573716FDE +:100440006D6B6968666462605E5C5A5957555351BA +:10045000504E4C4A4947454342403E3D3B3A383670 +:10046000353332302F2D2C2A2928262523220151DD +:100470002900B2002A0053005400550056005F00C6 +:100480006000610057005C005D005E0000005900E4 +:100490005A005B0058006200000063000000010089 +:1004A0000100010001000100010001000100010044 +:1004B0000100010001000100010001000000010035 +:1004C00001000100005C01000000010000000100CB +:1004D0000100010001000100010001000100010014 +:1004E0000100010001000100010001000000010005 +:1004F00001000100010001000000010000000100F6 +:1005000001000100010001000100010001000100E3 +:1005100001000100010001000100010000000100D4 +:1005200001000100010001000000010000000100C5 +:1005300001000100010001000100010001000100B3 +:1005400001000100010001000100010000000100A4 +:100550000100010001000100000001000000010095 +:100560000100010001000100010001000100010083 +:100570000100010001000100010001000000010074 +:100580000100010001000100000001000000010065 +:100590000100010001000100010001000100010053 +:1005A0000100010001000100010001000000010044 +:1005B0000100010001000100000001000000010035 +:1005C0000100010001000100010001000100010023 +:1005D0000100010001000100010001000000010014 +:1005E0000100010001000100000001000000010005 +:1005F00001000100010001000100010001000100F3 +:1006000001000100010001000100010000000100E3 +:1006100001000100010001000000010000000100D4 +:1006200001000100010001000100010001000100C2 +:1006300001000100010001000100010000000100B3 +:10064000010001000100010000000100000009029A +:100650005B00030100A0FA0904000001030101008E +:100660000921110100012240000705810308000A49 +:100670000904010002030000000921110100012208 +:100680002200070582032000010705030320000163 +:1006900009040200010300000009211101000122E8 +:1006A0006D000705840320000A120100020000000B +:1006B000084B4121000100010200010A0341004BE7 +:1006C000003200310000001203410054004C004190 +:1006D000004E0054004900530000000403090400C8 +:1006E00011241FBECFEFDAE0DEBFCDBF04B603FE9C +:1006F00027C08091800390918103A0918203B091E3 +:1007000083038730904BA740B04BD1F41092800305 +:1007100010928103109282031092830314BE84B757 +:10072000877F84BF0FB6F894A89580916000886198 +:1007300080936000109260000FBEE0E0F8E309953E +:1007400011E0A0E0B1E0E2E5FBE502C005900D920A +:10075000A23BB107D9F723E0A2EBB1E001C01D92A3 +:10076000A038B207E1F70E94D8270C94702D0C94A2 +:100770000000E8EDF0E080818E7F80831092E2003F +:100780001092DA001092E100A0EEB0E08C9181604E +:100790008C9380818F77808319BCA7EDB0E08C911A +:1007A0008E7F8C9380818F7E80831092E4020895E7 +:1007B0002091E4003091E50095E6A9012091EC003C +:1007C000822F817020FF06C08091E80080FF06C064 +:1007D00080E008952091E80022FD1AC0809109036D +:1007E000882389F0853089F08091EB0085FD0FC06A +:1007F0002091E4003091E50042175307F9F291503F +:10080000E1F684E0089582E0089583E0089581E0B0 +:100810000895EF92FF920F931F93CF937C018B016A +:100820000E94D803C82F811117C08091E80085FD70 +:100830000BC08091E8008E778093E8000E94D80377 +:10084000882399F3C82F08C0F70181917F01809315 +:10085000F1000150110949F78C2FCF911F910F9191 +:10086000FF90EF90089580910B0387FF13C0809154 +:10087000E80082FF06C08091E8008B778093E80053 +:1008800004C0809109038111F2CF0895809109037A +:100890008823D9F38091E80080FFF8CF8091E800A9 +:1008A0008E77ECCF982F9093E900242F762F50E08D +:1008B000891731F07091EC002091ED005091F0001B +:1008C00021FD07C09F5F973071F78093E90081E0B9 +:1008D00008953091EB003E7F3093EB003091ED00B6 +:1008E0003D7F3093ED003091EB0031603093EB00B1 +:1008F0007093EC002093ED005093F0002091EE00F7 +:1009000027FDE0CF80E00895CF92DF92EF92FF9233 +:100910000F931F93CF93DF93C8EDD0E088818F7E34 +:100920008883E7EDF0E080818160808384E082BF8E +:1009300081E08093E40288818E7F888302EE10E05C +:10094000F80110821092DA0081EEC82ED12CF60147 +:10095000108288818F7788838881806888838881E6 +:100960008F7D888319BC1092090310920A0310929C +:1009700008031092070390EEE92EF12CF701808115 +:100980008B7F808388818160888342E060E080E0A3 +:100990000E945204F60180818E7F8083F80180815D +:1009A00081608083808188608083F70180818E7F71 +:1009B0008083888180618883DF91CF911F910F911F +:1009C000FF90EF90DF90CF900895FC01809111038C +:1009D0009091120386179707A0F06115710529F40D +:1009E0009091E8009E779093E80090E06115710582 +:1009F00051F4911108C08091E80082FF34C080E07A +:100A00000895BC01F2CF809109038823C1F185309C +:100A1000C1F18091E80083FD30C08091E80082FD43 +:100A2000EACF8091E80080FFE1CF8091F300209130 +:100A3000F200382F6115710519F02830310558F092 +:100A400091E02830310509F090E02091E8002E7700 +:100A50002093E800CBCF81918093F1006150710920 +:100A60002F5F3F4FE7CF80910903882341F0853006 +:100A700041F08091E80083FFBECF81E0089582E0DD +:100A8000089583E00895089508958091E6020895F9 +:100A90009C014FB7F8948091DB029091DC02A09109 +:100AA000DD02B091DE024FBF821B930B08952FB77A +:100AB000F8948091DB029091DC02A091DD02B0916C +:100AC000DE022FBF08952091D8023091D902281755 +:100AD000390771F09093D9028093D802E091D60241 +:100AE000F091D702309721F00084F185E02D099430 +:100AF00008952091D4023091D5022817390771F05A +:100B00009093D5028093D402E091D602F091D7025F +:100B1000309721F00680F781E02D09940895E09147 +:100B2000D602F091D702309721F00190F081E02DAC +:100B3000099480E00895DC016091CC028091CD029F +:100B4000962F891301C00895292F30E0F901EE0F87 +:100B5000FF1FEC53FD4F408151814A175B07A1F401 +:100B600087E08A9FA0018B9F500D1124435E5E4F4A +:100B700081E0FA0184839613E6CF2F5F3F4F237005 +:100B800033272093CC0208952F5F3F4F922F93700D +:100B9000D8CF1092610210926002809122018111DF +:100BA00004C010922101109223018091290181112A +:100BB00004C01092280110922A010895FA018111AF +:100BC00001C0FB01099480917B03982F9E7F61F403 +:100BD0008170826080937B0380917E03893C18F052 +:100BE00088EC80937E0308958A34B0F38170886422 +:100BF000F1CFAF92BF92DF92EF92FF920F931F93CC +:100C0000CF93DF93182F062FE901493C08F048ECF9 +:100C1000E42FF0E0E75BFD4F011110C0E4915E2F7F +:100C20004E2F4983E8835A83DF91CF911F910F9113 +:100C3000FF90EF90DF90BF90AF900895202F30E0AD +:100C40004491D42EE42EF12C56E0159FC0011124BE +:100C5000EFEFF0E0BF010E947A2C812F90E0880F27 +:100C6000991F55E5569FD001579FB00D11248A1B3F +:100C70009B0B982F990F890F5F01A21AB30AAE9CA4 +:100C8000D001AF9CB00DBE9CB00D11245B2F089F0E +:100C900080011124012F11275F01A01AB10AAE9C17 +:100CA0008001AF9C100DBE9C100D11245F01A81A8D +:100CB000B108A29EC001A39E900DB29E900D11247A +:100CC000892F9927E81BF90BEE9DC001EF9D900D30 +:100CD000FE9D900D1124E92F62307105A1F050F4B2 +:100CE0006115710509F49DCF6130710581F0EB2F1D +:100CF000512F97CF6430710569F080F0663071052F +:100D000009F48FCFF4CFE42F4B2F592F8ACFE42F44 +:100D1000412F87CFEB2F542F492F83CF4B2F5D2DA2 +:100D2000E12F7FCF80E00895F894E82FE295EF70EF +:100D3000F0E031A1282F2F7081E090E001C0880FF2 +:100D40002A95EAF7982F9095932391A392A1892B46 +:100D500082A3789408959091DF0292FF06C0282F15 +:100D600028712830F9F4877F846093FF06C0282F0C +:100D700028712831F1F4877E84612091E00220FF00 +:100D800006C0382F38713830D9F4877F816021FF51 +:100D900006C0282F28712831D1F4877E816194FD07 +:100DA000877E0895282F24712430F9F68B7F886080 +:100DB000DCCF282F2471243101F78B7E8861DDCFB1 +:100DC000382F3171313019F78E7F8860E0CF282FAE +:100DD0002171213121F78E7E8861E1CFCF93DF939E +:100DE000EC0182389105A9F1D8F58133910509F418 +:100DF00096C048F58932910509F48AC08A9709F4AA +:100E000095C0C11522E5D20708F0B6C0C11531E57D +:100E1000D30708F026C1C83ED10508F09CC0C03EEB +:100E2000D10560F5C83AD10508F087C0C53AD105AB +:100E300008F0EFC0C130D10509F12097F9F0C430B6 +:100E4000D105E0F440C08533910509F45AC0C99733 +:100E5000C1F68091DF02837089F0C0EED0E00EC051 +:100E6000833E910599F170F4803E910501F1823E37 +:100E7000910539F68091DF0282FD21C0CE01DF911C +:100E8000CF910895863E910561F1873E910571F1FC +:100E9000843E910509F0B5CF8091E00281FFEECF4D +:100EA0008091DF02C7EED0E084FD0DC0E7CF8091D6 +:100EB000DF0280FD07C19091E00290FFDFCFC3EE1B +:100EC000D0E084FFDBCFD0E0C0E0D8CF8091DF025C +:100ED00082FDFBC09091E00290FDBFCF84FFCECF9A +:100EE000F2CF8091DF0283FDDDCFC8CF8091DF029A +:100EF00083FDEEC09091E00291FFF0CFC4EED0E010 +:100F0000BDCF8091DF0285FFB9CFC9E2D0E0B6CF77 +:100F10008091DF0285FFB2CFC5E3D0E0AFCF8091F3 +:100F2000DF0286FFABCFCAE2D0E0A8CF8091DF021C +:100F300086FFA4CFC1E3D0E0A1CFCF3BD10518F607 +:100F4000C85AD0E0CC0FDD1FCA5BDE4F0990D881B4 +:100F5000C02DD46493CFC11540E5D40708F064C018 +:100F6000C11580E4D80708F05CC0CE019A958115C0 +:100F70009F4108F483CFA7CFC11536E5D30718F5F5 +:100F8000C11545E5D40708F084C0C11584E5D8072C +:100F900008F07AC09C2F969596959E012370332772 +:100FA000C115D34508F462C0C1E0D0E002C0CC0F47 +:100FB000DD1F2A95E2F730E2939FC0011124C82B70 +:100FC000D92BDA685BCFC1158AE5D80778F4C1154B +:100FD00099E5D90708F068C0C11528E5D20708F4DB +:100FE00072CFDC2FCC27C06FD06A48CFCE0190568D +:100FF0008115904208F067CF8D2F8F710E94AB064C +:1010000090E0982F882788279F719C012C2BE9015D +:1010100049C0C55AD0E0CD5BDE4FC881D0E0D06476 +:101020002DCFDF70D06A2ACFCE01E4E09695879568 +:10103000EA95E1F783702C2F26952695237040E2E0 +:10104000249F90011124382B8C2F8370C1E0D0E0B5 +:1010500002C0CC0FDD1F8A95E2F7C22BD32BDC68D0 +:101060000DCFDC2FCC27C16FD06A08CFC1E0D0E014 +:1010700002C0CC0FDD1F2A95E2F720E2929FC0014B +:101080001124C82BD92BEBCFDC2FCC27C46FD06A0F +:10109000F5CE8C2F0E94AB06C82FD0E0DC2FCC27DA +:1010A000CC27DF71D062EACE8C2F8F700E94AB0606 +:1010B00034E0D695C7953A95E1F7CF709C2FEC01B7 +:1010C000D069DCCEC9E3D0E0D9CEC2EED0E0D6CE36 +:1010D000C6EED0E0D3CE8091310281111092310260 +:1010E000089580959091D30298239093D302089508 +:1010F0008091D3029091D202892B90913002892B5A +:101100008093B401909131029923A1F0892B8093AF +:10111000B40180914201882341F18091DF0287FF71 +:1011200024C08EE1E6EBF1E090E0815000F59111F2 +:101130000E946B08E091D602F091D7023097E1F05F +:1011400080914201882359F08091DF0287FF07C018 +:101150008091B4018093B50185E08093B401028051 +:10116000F381E02D84EB91E0099486E0DBCF2191BF +:101170002223D9F29F5FD9CF0895CF93DF93EC015B +:1011800081E0898B8091D3029F81892B8093D30248 +:101190008091D2029885892B8093D2020E94780890 +:1011A000EA81FB81309739F06C897D89CE01069602 +:1011B000DF91CF910994DF91CF910895EF92FF9243 +:1011C0000F931F93CF93DF93EC018A85811139C070 +:1011D000EB80FC8087E5F81A26E12E9DC0012F9D4B +:1011E000900D1124DC01A45DBE4F1496ED91FC918D +:1011F0001597309731F054966D917C918E5C9E4F8F +:10120000099586E18E9D80018F9D100D1124045D4E +:101210001E4FF80187810E947108F8018085982F80 +:1012200090958091D20289238093D2020E947808FF +:10123000188219861B861E821D821092D10210927E +:10124000D002DF91CF911F910F91FF90EF90089501 +:10125000909142019923D1F09091DF0297FF16C03F +:10126000E82FE695E695E695EE31E0F4F0E0EC54F3 +:10127000FE4F282F277081E090E001C0880F2A954B +:10128000EAF780959281892382830895E6EBF1E065 +:101290009191891303C0DF0111971C9291E0EC3BFF +:1012A000F907B1F70895909142019923C1F0909107 +:1012B000DF0297FF14C0E82FE695E695E695EE313C +:1012C000F8F4F0E0EC54FE4F877021E030E001C00C +:1012D000220F8A95EAF78281822B82830895A6EBFA +:1012E000B1E0EFEF90E02D91821751F0EF3F19F44C +:1012F000211101C0E92F9F5F9630A9F7EF3F09F454 +:1013000008950E2E000CFF0BEC54FE4FE6CF80919B +:101310002E029091ED01981301C008958F5F8770A0 +:10132000FACF990F990F890F982F97708695869508 +:10133000869524E0829FF0011124E752FE4F50E091 +:1013400040E080E0219130E0092E02C036952795DB +:101350000A94E2F721703327042E01C0220F0A9469 +:10136000EAF7822B4F5F5F4F4430510559F70895DC +:10137000990F990F890F982F977041E001C0440F82 +:101380009A95EAF786958695869594E0899FF0016F +:101390001124E752FE4F30E020E070E05191DF0170 +:1013A0001197CB01022E02C0969587950A94E2F719 +:1013B000817081958527842385278C932F5F3F4FEC +:1013C0002430310559F7089590E080E00E947905B6 +:1013D00090E080E00E9463051092D20210923002E9 +:1013E0000C94780890933302809332020C94E409B1 +:1013F000882341F080959091D20289238093D20274 +:101400000C9478080895882339F09091D202982B93 +:101410009093D2020C9478080895882321F00E94BA +:1014200071080C9478080895882339F09091D302BC +:10143000982B9093D3020C9478080895882309F48C +:101440004BC0823871F40E948F0581FF45C089E34B +:101450000E9453090E94780889E30E9428090C948D +:101460007808833859F40E948F0580FF35C083E5E2 +:101470000E9453090E94780883E5EFCF843859F41D +:101480000E948F0582FF28C087E40E9453090E94B2 +:10149000780887E4E2CF9CEF980F913AF0F290E25F +:1014A000980F983050F4877091E001C0990F8A9599 +:1014B000EAF7892F0E947108D2CF9BE5980F9330ED +:1014C00020F490E080E00C947905885A873120F46C +:1014D00090E080E00C946305089580FD02C0769A48 +:1014E0000895769808959C013A9521153F4150F54D +:1014F000FC01EE27F170BC0166277270AC01442735 +:1015000054709C012227387094FF0EC080E1EF2BAD +:1015100009F480E0672B09F08062452B09F08064B4 +:10152000232B89F08068089581E0EF2B09F480E097 +:10153000672B09F08260452B09F08460232B19F09A +:101540008860089580E00895CF93DF93EC010E94B6 +:101550001E0ACE010E94730A9E01205E31092830C6 +:10156000310510F0CD2B21F4DF91CF910C940D0AB1 +:10157000DF91CF910C94F809FC018081813029F42E +:10158000FB01808191810C94A40A823021F4FB013B +:1015900082819381F8CF089590910903943029F5C1 +:1015A0008093E1027093E3026093E2029093E9007A +:1015B0008FEF9091E800815095FD06C095ED9A95CA +:1015C000F1F700008111F5CF8091E80085FF0DC093 +:1015D00050E040E063E070E081EE92E00E94090498 +:1015E0008091E8008E778093E8000895BC0184E044 +:1015F0000C94CC0ABC0183E00C94CC0ACF93DF930B +:10160000EC01809142018823B1F18091DF0287FFD4 +:1016100032C060E284E08093E9008FEF9091E800AF +:10162000815095FD06C095ED9A95F1F70000811166 +:10163000F5CF8091E80085FF1BC08091420170E0EA +:1016400050E040E0811104C050E040E068E070E00C +:10165000CE010E9409048091E8008E778093E80013 +:1016600080E2FE01A7EEB2E001900D928A95E1F7CB +:10167000DF91CF91089568E081E0CDCF81E0809344 +:10168000E00080E28093D8001092C9008FE19EE4D0 +:101690000197F1F700C0000087E090EBDC01809338 +:1016A000800390938103A0938203B093830388E126 +:1016B0009CE00FB6F894A895809360000FBE9093BD +:1016C0006000FFCFAF92BF92CF92DF92EF921F9355 +:1016D000CF93DF93CDB7DEB7C356D1090FB6F894D9 +:1016E000DEBF0FBECDBF80917B0380FD0AC0E8E165 +:1016F000F3E0118210821282339683E0EB37F80711 +:10170000C1F77EE4A72E73E0B72EDE011196AE017D +:101710004C595F4F1A2F7B2FF5018491282F30E011 +:10172000C901880F991F820F931F885E9C4FFC018F +:10173000C080D180E280CD92DD92ED92FFEFAF1AB2 +:10174000BF0AA417B50741F7209A35B13E7F25B1EE +:1017500021606FB7F894812F972FFC017191CF0111 +:10176000E8E025B9000000C077FF35B9770F000029 +:1017700000C000C000C035B900C0EA9591F78417D9 +:10178000950759F76FBF8FE594E00197F1F700C017 +:101790000000CD59DF4F0FB6F894DEBF0FBECDBFAE +:1017A000DF91CF911F91EF90DF90CF90BF90AF90DE +:1017B00008951F93CF93DF9300D00F92CDB7DEB77C +:1017C000142F90917B0390FF1AC09E012F5F3F4F13 +:1017D000462F6FEF0E94F905113289F08B819981B4 +:1017E000412F50E0FA01EE0FFF1FE40FF51FE85EF6 +:1017F000FC4F2A812183908382830E94620B0F9089 +:101800000F900F90DF91CF911F910895EF92FF926B +:101810000F931F93CF93DF937C018F2D90E0C8E04F +:10182000009711F4C701C0E09C0154E0369527955C +:101830005A95E1F72115310511F0CC5FC9019C01E2 +:1018400036952795369527952115310511F0CE5FF0 +:10185000C90196958795892B09F0CF5FC23009F4AD +:101860008AC068F4CC23B1F1C13009F45BC0C70170 +:10187000DF91CF911F910F91FF90EF900895C330AA +:1018800009F4AEC0C43099F7CEE1D0E08C2F4C2FD4 +:101890004E51D093D501C093D401942F9B7F9130AA +:1018A00089F0942F9E7E9A3069F093ED9C0F9230D0 +:1018B00048F09DEC9C0F923028F094EC9C0F9330F4 +:1018C00008F0B7C06CE80E94D90B2196CF33D10540 +:1018D000E9F6CDCF08E310E01093D5010093D401D1 +:1018E000802F9C2F9B7F913081F09C2F9E7E9A3081 +:1018F00061F091EF9C0F923040F09BEE9C0F923084 +:1019000020F092EE9C0F933050F44C2F6CE80E9424 +:10191000D90BCF5F0E5F1F4FC132F1F6A8CF4C2F0E +:1019200060E5F5CF0FE010E0C0E01093D501009323 +:10193000D401802F9C2F9B7F913081F09C2F9E7E25 +:101940009A3061F091EF9C0F923040F09BEE9C0F2B +:10195000923020F092EE9C0F933050F44C2F6CE8B4 +:101960000E94D90BCF5F0E5F1F4FC132F1F67FCFC0 +:101970004C2F60E5F5CF0CED10E0C0E00F3F1105F6 +:1019800009F030F51093D5010093D4018091D40172 +:101990009C2F9B7F913091F09C2F9E7E9A3071F00E +:1019A00091EF9C0F923050F09BEE9C0F923030F0F4 +:1019B00092EE9C0F4C2F60E5933010F44C2F6CE8A6 +:1019C0000E94D90BCF5F0E5F1F4FC132B9F64FCFC8 +:1019D000C8018F5F91099093D5018093D401D6CF30 +:1019E00007E810E0C0E01093D5010093D401802FE8 +:1019F0009C2F9B7F913081F09C2F9E7E9A3061F0CE +:101A000091EF9C0F923040F09BEE9C0F923020F0B3 +:101A100092EE9C0F933050F44C2F6CE80E94D90B3F +:101A2000CF5F0E5F1F4FC132F1F621CF4C2F60E523 +:101A3000F5CF60E548CF0E94060C90931403809385 +:101A400013030C94E40980911303909114039C01F7 +:101A5000267033272630310519F488600C941B0D4D +:101A6000877FFCCF21E030E002C0220F331F8A9530 +:101A7000E2F720953095809113039091140382230F +:101A800093230C941B0D90912F02809589238093B2 +:101A90002F02282F277039F4282F082E000C330B23 +:101AA0009217130621F49091E00292FF07C08595EA +:101AB000859585950E94320D10922F02089521E0A0 +:101AC00030E002C0220F331F8A95E2F780911303A2 +:101AD00090911403822B932B0C941B0DEF92FF9289 +:101AE0000F931F93CF93DF938C01C8E1D3E0F12CC8 +:101AF000E12CF801948160917D0380917C03F0E1F9 +:101B0000EF16F104FCF49923F9F09E0140917E0355 +:101B10000E94F9052FEFE21AF20A239681E2E816F5 +:101B2000F10439F70E94620BF801848190E001967C +:101B3000817099278483DF91CF911F910F91FF903E +:101B4000EF900895992309F39E0140E0E1CF8F9231 +:101B50009F92AF92BF92CF92DF92EF92FF920F933C +:101B60001F93CF93DF93EC014C81042F10E0980179 +:101B7000D8010E94D92C9B01AC010E94EF2C4B0193 +:101B80005C01E0E2F0E0E01BF10BA5E5B0E0AC01A8 +:101B90009B010E94EF2C6B017C019F01DF010E94E1 +:101BA000D12C9B01AC010E94FA2C9B01AC01280DA9 +:101BB000391D4A1D5B1DC701B6010E94A22CF22EE1 +:101BC000822F90E039E23F15D8F143E0249F900145 +:101BD000112435952795122F109598E1C92E93E081 +:101BE000D92E00E085E5E82EEF188E2D01FD8F2D12 +:101BF0009601412F60917D030E94F9050F5F53E02C +:101C0000C50ED11C013289F70E94620B9C8181E0D4 +:101C1000992319F0903219F48FEF80931C01809171 +:101C20001C01890F8C83DF91CF911F910F91FF9041 +:101C3000EF90DF90CF90BF90AF909F908F900895DE +:101C400025E530E0A901481B590BCA019A01220F72 +:101C5000331F280F391F37FFBCCF2F5F3F4FB9CF3E +:101C60000F931F93CF93DF93C8E1D3E0FE0111825E +:101C700010821282339683E0EB37F807C1F710E049 +:101C800000E080915E02082E000C990B08171907DE +:101C90008CF180911B01082E000C990B8017910785 +:101CA0004CF19E0140917E0360917D0380917C0305 +:101CB0000E94F9050F5F1F4F23960132110509F7A6 +:101CC0000E94620B80911A0190915E02980F90938E +:101CD0005E0220911B01280F20931B01121614F4A1 +:101CE00090321CF0819580931A01DF91CF911F9162 +:101CF0000F910895198218821A82DCCFBF92CF9279 +:101D0000DF92EF92FF920F931F93CF93DF93FC012B +:101D10008281DD24DA9480FD02C0DD24D39408E1C1 +:101D200013E0D0E0C0E021E2B22EF801118210826F +:101D3000128294E0E92EF12CC12C80915D028C0D71 +:101D400082320CF43DC06B2D0E946C2C892F082E22 +:101D5000000C990B8C179D0791F480917E038E9D4A +:101D6000A0018F9D500D1124559547955595479588 +:101D7000980160917D0380917C030E94F905CD0C50 +:101D8000F1E0EF1AF108C9F621960D5F1F4FC1323D +:101D9000D10559F60E94620B80915D0291E0D91243 +:101DA00015C0811111C080E280935D02DF91CF9157 +:101DB0001F910F91FF90EF90DF90CF90BF9008950B +:101DC00087FFC5CF8F5DC3CF8150EECF90E00196E6 +:101DD000BE010E948E2CE8CFEF92FF921F93CF930B +:101DE000DF93EC0188E1E82E83E0F82E10E08C818F +:101DF000970140917E0360917D03810F0E94F90558 +:101E0000195F83E0E80EF11C173E89F70E94620B10 +:101E10009A818C8190FF08C08F5F8C83DF91CF9176 +:101E20001F91FF90EF9008958150F7CF90917B0321 +:101E300090FF0CC0E8E1F3E0818360834283339636 +:101E400093E0EB37F907C1F70C94620B08950F93F9 +:101E50001F93CF93DF9300D00F92CDB7DEB78C01E5 +:101E600080915F0281110AC09E012F5F3F4F48ECB5 +:101E70006FEF0E94F9058A8180935F02F801648107 +:101E8000613069F080915F0240E0662361F040E0DC +:101E9000623011F440915F0280E060E004C0609124 +:101EA0005F0240E080E00E94160FF801848190E01C +:101EB000019663E070E00E948E2C84830F900F9057 +:101EC0000F90DF91CF911F910F910895CF93DF93E2 +:101ED00000D00F92CDB7DEB790917B0390FF0AC080 +:101EE0009E012F5F3F4F0E94F9054B8169818A81D6 +:101EF0000E94160F0F900F900F90DF91CF910895D1 +:101F0000CF93DF93EC01EBE7F3E0438162818C81B7 +:101F10000E94660F8C818F5F8C83DF91CF91089533 +:101F2000CF93DF93EC01EC81F0E0E259FC4F449158 +:101F3000EBE7F3E0628181810E94660F8C818F5F05 +:101F40008C83DF91CF910895CF93C82F882309F414 +:101F5000A6C08238C1F40E948F0581FDA0C089E32C +:101F60000E9453090E9478082FEF81EE94E02150DF +:101F700080409040E1F700C0000089E30E942809FA +:101F8000CF910C9478088338A1F40E948F0580FDCE +:101F900086C083E50E9453090E9478082FEF81EEE6 +:101FA00094E0215080409040E1F700C0000083E5BC +:101FB000E5CF8438A1F40E948F0582FD70C087E4CC +:101FC0000E9453090E9478082FEF81EE94E021507F +:101FD00080409040E1F700C0000087E4CFCF8CEF55 +:101FE0008C0F813A88F580914201882301F180911C +:101FF000DF0287FF1CC0EC2FE695E695E695F0E042 +:10200000EC54FE4F828190E04C2F477021E030E08D +:1020100002C0220F331F4A95E2F782239323892BB4 +:1020200079F08C2F0E9428090E94780809C0E6EBFD +:10203000F1E08191C817A9F321E0EC3BF207C9F761 +:102040008C2F0E9453099CCF80E28C0F883068F45B +:10205000C77021E030E001C0220FCA95EAF78091F5 +:10206000D302822B8093D3028BCFEBE5EC0FE330CE +:1020700040F4F0E0ED5BFE4F808190E0CF910C9456 +:102080007905C85AC73158F4EC2FF0E0EE0FFF1F66 +:10209000EA5BFE4F80819181CF910C946305CF91D3 +:1020A00008951F93CF93DF93182FD0E0C0E08933BA +:1020B00011F4C0E5D0E0812F0E94A40F209731F4E5 +:1020C000812FDF91CF911F910C941E0A8FE99FE021 +:1020D0000197F1F700C000002197F0CF0F931F93F5 +:1020E000CF93DF93C62FD42F022FFC018281882348 +:1020F000A1F0609317030E945705909316038093F5 +:102100001503C77081E001C0880FCA95EAF7DF9117 +:10211000CF911F910F910C94140A809117036813AB +:1021200035C080911503909116030E944805883CA4 +:10213000910560F510E21D0FCD17B9F080E28C0F0C +:10214000883040F4C77081E001C0880FCA95EAF773 +:102150000E940D0A183048F481E09D2F977001C04D +:10216000880F9A95EAF70E94140A802F0E94511056 +:10217000183098F4D77081E001C0880FDA95EAF73B +:10218000DF91CF911F910F910C940D0AC77081E0E0 +:1021900001C0880FCA95EAF7F3CFDF91CF911F9165 +:1021A0000F910895DF92EF92FF920F931F93CF93B9 +:1021B000DF93E82FF0E0E954FE4FD490282F2695C6 +:1021C0002695269530E0F901E955FE4F0491877078 +:1021D00010E0082E02C0159507950A94E2F70170E9 +:1021E0001127F901E956FE4FE490F12C082E02C0A8 +:1021F000F594E7940A94E2F791E0E922FF24F901CB +:10220000E957FE4FC491D0E002C0D595C7958A9595 +:10221000E2F7C170DD270115110519F081EE0E946A +:10222000A40FE114F10419F086EE0E94A40F8D2D85 +:102230000E945110EF2819F086EE0E941E0A012B11 +:1022400019F081EE0E941E0ACD2B51F08CE2DF9135 +:10225000CF911F910F91FF90EF90DF900C94511050 +:10226000DF91CF911F910F91FF90EF90DF90089534 +:10227000CF93DF93EC010E94730A9E01205E310927 +:102280002830310510F0209739F40E94140A8C2F61 +:10229000DF91CF910C94A40F0E94030AF8CFFC01A8 +:1022A0008081813029F4FB01808191810C94381167 +:1022B000823021F4FB0182819381F8CF0895CF937E +:1022C000DF93EC018881823039F4FB0182819381B4 +:1022D0000E94381181E08B87DF91CF910895CF93D1 +:1022E000DF93C7E0D2E060E0CE010E94222D21966C +:1022F000C11584E0D807B9F7DF91CF9108956F92A7 +:102300007F928F929F92AF92BF92CF92DF92EF9285 +:10231000FF920F931F93CF93DF938EE6C82E84E036 +:10232000D82E0FE510E0E801E09736011CC0F5015A +:1023300085909490692DC7010E94222D682DC701B8 +:1023400001960E94222D82E0A80EB11C82E0E80EC8 +:10235000F11CCE15DF0559F788E0680E711C289630 +:102360000C171D0731F07E0188E0E81AF1085301CF +:10237000DECF005D1F4F80E3C80ED11C0F3382E01B +:10238000180789F6DF91CF911F910F91FF90EF9081 +:10239000DF90CF90BF90AF909F908F907F906F9085 +:1023A0000895CF93C82F6FEF811161E283E290E02F +:1023B0000E94222DC1110CC0CFEF6C2F84E290E05F +:1023C0000E94222D6C2F85E290E0CF910C94222D5B +:1023D000C9E0F3CF80E00E94D11160E086E290E096 +:1023E0000E94222D0E947F110E946F1181E00C94A7 +:1023F000D111CF93C091E002C2FB992790F99817B1 +:1024000081F080FBC2F9C093E0026091DF0284E0BA +:1024100090E00E94222D6C2F82E290E0CF910C94EC +:10242000222DCF9108950F931F93CF93DF9328E030 +:10243000629FE001112450E0440F551FC40FD51FC7 +:1024400030E3839FC00DD11D1124CE0187960E94D9 +:102450000E2D082F10E0102F0027CE0188960E9425 +:102460000E2D9801282BC901DF91CF911F910F915B +:102470000895462F8A3038F4763028F4643018F402 +:10248000672F0C94131290E080E00895BF92CF92D2 +:10249000DF92EF92FF920F931F93CF93DF937C0114 +:1024A0000091130310911403809132029091330232 +:1024B000082B192BCFE0D0E0CC24C394D12CBC2E18 +:1024C000C6010C2E02C0880F991F0A94E2F78023E0 +:1024D0009123892B71F4219790F7B12C8B2DDF91EB +:1024E000CF911F910F91FF90EF90DF90CF90BF9011 +:1024F0000895B7018C2F0E9439120E94EE060197B1 +:1025000051F3ECCFCF93DF93EC010E944612BE0152 +:102510000E943912DF91CF910C94EE06FC01868166 +:102520009781009779F00E94EE06292F2F709295DF +:102530009F7092509E30A0F4E92FF0E0EE58F24DDB +:102540000C94C42C808191810E948212EECF803F36 +:1025500019F020F4883E20F481E00895843FE1F3EF +:1025600080E00895883EC0F3813FD1F7F5CF822FF8 +:1025700086958695869508951F93CF93DF9300D017 +:1025800000D00F92CDB7DEB7FC012681378121152F +:10259000310541F525E0DE01119601900D922A9555 +:1025A000E1F7FC01228189819A812223B9F0662317 +:1025B000A9F00E944612182F682F89819A810E94E3 +:1025C000B80969817A81812F0F900F900F900F9039 +:1025D0000F90DF91CF911F910C9439120E949109B5 +:1025E000182FEFCFC9010F900F900F900F900F9001 +:1025F000DF91CF911F91089583E290E00E940E2D0C +:10260000813289F484E290E00E940E2D893059F4E1 +:1026100085E290E00E940E2D91E0893009F090E073 +:10262000892F8170089580E0FCCFCF9384E090E003 +:102630000E940E2DC82F82E290E00E940E2D982F4E +:102640008C2FCF91089560917B03669570E04BE0ED +:1026500050E08FE091E00E94562D892B19F481E023 +:1026600080935C020E945705909356028093550216 +:102670000895CF92DF92EF92FF926B017C010E944E +:10268000E305B701A60188E090E0FF90EF90DF90AE +:10269000CF900C94342D5F926F927F928F929F9285 +:1026A000AF92BF92CF92DF92EF92FF920F931F9360 +:1026B000CF93DF9300D00F92CDB7DEB7182F762ED1 +:1026C000042F622E90917B0390FF29C0E92FE6959D +:1026D000AE2FB0E0A258BE4F8C9180935B029E7FDC +:1026E000923081F59E012F5F3F4F812F0E94F905A7 +:1026F0004B8169818A810E94160F10937C0370922E +:102700007D0300937E03662051F060917B037091FE +:102710007C0380917D0390917E030E9439130F907A +:102720000F900F90DF91CF911F910F91FF90EF903D +:10273000DF90CF90BF90AF909F908F907F906F90E1 +:102740005F900895823019F400917E03D6CF8630D1 +:1027500019F410917C03D1CF8930D9F3893169F60E +:10276000E9518E2F8170582EE695F0E0E75BFC4F23 +:10277000A590B490BB2488E1E82E83E0F82ED12CFC +:10278000C12C91E2892E912CC601B4010E947A2CB1 +:10279000812F511013C0860F9701402F672D0E9483 +:1027A000F905CA0CDB1C83E0E80EF11C8BE7E81688 +:1027B00083E0F80649F70E94620B9FCF861BECCF9F +:1027C000EBE7F3E0438128E0421B08F440E021E01E +:1027D000628181810C944B13EBE7F3E0438128E0A5 +:1027E000420F08F44FEF21E0628181810C944B137A +:1027F000EBE7F3E0628128E0621B08F460E021E08F +:10280000438181810C944B13EBE7F3E0628128E074 +:10281000620F08F46FEF21E0438181810C944B1328 +:10282000EBE7F3E0818121E04381628188500C94E1 +:102830004B13EBE7F3E0818121E043816281885F04 +:102840000C944B1380917F03882319F0815080935F +:102850007F0360917B0370917C0380917D03909155 +:102860007E030C94391380917F03833018F48F5FBB +:1028700080937F0360917B0370917C0380917D0343 +:1028800090917E030C94391390917B0390FF36C096 +:102890009170811129C0926090937B03662351F05F +:1028A00060917B0370917C0380917D0390917E0306 +:1028B0000E94391360917B03669570E04BE050E015 +:1028C0008FE091E00E94562D892BA9F010925C02B6 +:1028D00081E08093580220E040917E0360917D0367 +:1028E00080917C030C944B13853210F09864D4CF04 +:1028F000880F982BD1CF0E942313EACF089580919F +:102900007B038695815009F484E261E00C944414C1 +:1029100080917B0386958F5F853208F081E061E0CE +:102920000C94441490917B0390FF07C096959817E0 +:1029300020F0961710F40C94881461E00C94441461 +:10294000EBE7F3E083E0808311828FEF828388E2FC +:102950008383148260817181828193810C94391305 +:1029600069EE7EEF90E080E00E94402D60E082E022 +:1029700090E00E94222D60E083E090E00E94222DF2 +:10298000109233021092320260E084E090E00E94E4 +:10299000222D60E082E290E00E94222D60E085E03E +:1029A00090E00E94222D60E086E090E00E94222DBF +:1029B0006FEF87E090E00E94222D40E050E0BA01E6 +:1029C00088E090E00E94342D60E08DE090E00E946D +:1029D000222D40E050E0BA0188E190E00E94342DC1 +:1029E00060E087E190E00E94222D40E050E0BA01D3 +:1029F0008CE190E00E94342D70E060E080E290E095 +:102A00000E94402D40E050E0BA0188E190E00E9431 +:102A1000342D80E00E94D1110E94EA1140E050E084 +:102A2000BA018FE090E00E94342D40E050E0BA01FE +:102A300083E190E00C94342D90E080E00E941C2D06 +:102A4000893E9E4F11F40C94FC1280E00895109280 +:102A5000D30280914201E6EBF1E0882359F08091A6 +:102A6000DF0287FF07C08EE1DF011D928A95E9F73B +:102A70000C94E40986E0F8CF1F93CF93DF93CDB792 +:102A8000DEB7AA970FB6F894DEBF0FBECDBF8BE0BE +:102A900093E02091F100DC012D93CD01B3E083316F +:102AA0009B07B9F780910C03833009F471C0B8F427 +:102AB000813009F448C0823009F4B2C08091E80046 +:102AC00083FF3AC180910B0390910C039A3008F078 +:102AD00033C1E92FF0E0E058F24D0C94C42C8A3059 +:102AE00009F48DC08B3009F470C0893039F78091BA +:102AF0000B03813219F780910F0390911003009717 +:102B000011F00297D9F68091E800877F8093E80062 +:102B10008091E80082FF37C09091F3008091F2002D +:102B2000029729F48091F1008B7F813021F480910C +:102B3000F1008093E6028091E8008B778093E800B3 +:102B40000E943304BBCF80910B03813A09F0B6CFCA +:102B50008091E800877F8093E80080910F03909137 +:102B60001003892B61F460E287EE92E070E00E942E +:102B7000E5048091E8008B778093E8009FCF60E0C8 +:102B800090E080E0F3CF809109038111C1CF96CF0F +:102B900080910B03813A09F091CF80910F039091BE +:102BA0001003892B09F08ACF8091E800877F8093FA +:102BB000E8008091E80080FFFCCF80914201809383 +:102BC000F1008091E8008E77B9CF80910B038132BC +:102BD00009F074CF80910F0390911003892B09F0B5 +:102BE0006DCF8091E800877F8093E8000E943304D6 +:102BF00080910D03809342010E9427155FCF809141 +:102C00000B03813209F05ACF8091E800877F8093CF +:102C1000E8000E94330480910E038093E5024ECFBA +:102C200080910B03813A09F049CF8091E800877FBA +:102C30008093E8008091E80080FFFCCF8091E5025E +:102C4000BECF803899F0823809F076C080910F03AA +:102C50008F70873008F070C08093E9008091EB009E +:102C600085FB882780F91092E90006C08091070350 +:102C700090910803911182609091E800977F909362 +:102C8000E8008093F1001092F1008091E8008E77C7 +:102C9000B5C1882309F4A2C1823009F04DC08091EA +:102CA0000D038111A6C180910F038F702FEF280FA4 +:102CB000263008F041C08093E9002091EB0020FF0E +:102CC00098C1933031F48091EB0080628093EB00E7 +:102CD00090C19091EB0090619093EB0021E030E087 +:102CE00001C0220F8A95EAF72093EA001092EA00C9 +:102CF0008091EB008860EACF81111EC010910D0316 +:102D00001F778091E3008078812B8093E30080918E +:102D1000E800877F8093E8000E9433048091E800F8 +:102D200080FFFCCF8091E30080688093E30082E025 +:102D3000111183E0809309038091E80083FF0AC0AA +:102D40008091E800877F8093E8008091EB008062AB +:102D50008093EB00AA960FB6F894DEBF0FBECDBFEE +:102D6000DF91CF911F9108958058823028F72091EC +:102D70000D0330910E032C3DE3E03E07A1F583E007 +:102D80008A838AE289834FB7F894DE01139620E0A4 +:102D90003EE051E2E32FF0E050935700E49120FF32 +:102DA00003C0E295EF703F5FEF708E2F90E0EA3046 +:102DB000C0F0C7968D939D932F5F243159F74FBF75 +:102DC0008091E800877F8093E8006AE270E0CE019E +:102DD00001960E94E5048091E8008B778093E800DB +:102DE000ABCFC096E7CF80910F0390911003432F94 +:102DF00055274330510509F44AC078F54130510553 +:102E000009F47AC08BE590E0EEE4F6E0423051053B +:102E100009F092CF2091E800277F2093E8002091CD +:102E20001103309112038217930708F49C0140E0CC +:102E30002115310509F065C0411163C08091E8009A +:102E400082FDC9CF80910903882329F2853019F2C8 +:102E50008091E80083FFF2CFBECF4132510509F4E3 +:102E60003CC04232510509F067CF8330910508F02C +:102E700063CFFC01EE0FFF1FEA55FE4F0190F0817A +:102E8000E02D8D559E4FDC018C9190E01AC03327C8 +:102E900021303105D1F02115310561F022303105A5 +:102EA00009F04ACFEBEBF6E0E4918E2F90E0EBEBEC +:102EB000F6E007C0EBEDF6E0E4918E2F90E0EBED4D +:102EC000F6E0009709F438CFA5CFE7ECF6E0E491FF +:102ED0008E2F90E0E7ECF6E0F4CF8330910508F018 +:102EE0002BCF880F991FFC01E455FE4F0190F08114 +:102EF000E02D89E090E08ECF82E190E0E9EAF6E013 +:102F000089CF80910903882309F465CF853009F4BE +:102F100062CF8091E80083FD5ECF8091E80082FD62 +:102F20008DCF8091E80080FF83CF9091F300809156 +:102F3000F2002115310519F08830910550F041E07B +:102F4000089709F040E08091E8008E778093E800D0 +:102F50006FCF44914093F100319621503109019691 +:102F6000E8CF803809F0E8CE8091E800877F809331 +:102F7000E80080910A038093F10087CE8111DCCEB6 +:102F800010910D03123008F0D7CE8091E800877FB2 +:102F90008093E80010930A030E943304112311F078 +:102FA00084E005C08091E30087FDFACF81E0809343 +:102FB000090342E061EC81E00E94520442E261ECCC +:102FC00084E00E94520442E261EC82E00E945204DA +:102FD00042E260EC83E00E945204AECE80910D0389 +:102FE000813009F0A9CE81E0933009F080E0809330 +:102FF00008031092E9008091E800877F8093E80041 +:103000000E94330499CE9F92AF92BF92CF92DF92EB +:10301000EF92FF920F931F93CF93DF9300D000D0D6 +:10302000CDB7DEB77C01DC0113968D919C9114978E +:10303000892B39F08C9111969C9189238F3F09F04F +:1030400040C60F900F900F900F90DF91CF911F917E +:103050000F91FF90EF90DF90CF90BF90AF909F9037 +:103060000895D60116968C9116978823E9F0199643 +:103070008D919C910817190739F48091D002909195 +:10308000D1020817190781F0F60197861487038784 +:103090008189811103C0C6010E94BD08C601069640 +:1030A0000E94DE081092D202FFEFAF1ABF0A26E19B +:1030B000C20ED11C1CC6980122513F45203131055A +:1030C00008F0DEC48FEF93E00E940E2D025167E0FE +:1030D000C62E62E0D62E882349F180912F02877098 +:1030E00009F4AFCFF7018281882309F4AACF82E0E7 +:1030F0000F900F900F900F90DF91CF911F910F9134 +:10310000FF90EF90DF90CF90BF90AF909F900C9486 +:10311000430DC11434E0D30601F3C6010E940E2D05 +:10312000811101C001508FEFC81AD80A0111F1CFE7 +:103130001C821B82BB24B3945AE0A52E86010F5F2C +:103140001F4FC6010E940E2D89831A82882329F2FF +:103150009FEF980F933020F58A83B98292E0C90ED1 +:10316000D11CC8010E940E2D8B83882309F4B5CF92 +:103170008E010F5F1F4FD8018C918823F9F28130A7 +:1031800009F046C011969C91119712968C9191303E +:1031900049F40E5F1F4F0E9451100F5F1F4FEBCF7E +:1031A0006801E6CF923029F40E5F1F4F0E94A40FF2 +:1031B000F4CF933029F40E5F1F4F0E941E0AEDCF0B +:1031C000943019F00F5F1F4FE8CF0E5F1F4F30E0B4 +:1031D00020E0B8016F5F7F4FF80141818053990B68 +:1031E0008A30910550F021503109B8F28FE99FE003 +:1031F0000197F1F700C00000F6CFA29EF001A39E58 +:10320000F00D11249C012E0F3F1F842F8B01E1CF65 +:103210000E94D210C2CF81E00E945F0D0E94230D58 +:103220005CCF81E00E94320DF9CF82E0F5CF882398 +:1032300069F180913902811106C081E080933902E1 +:1032400082EE0E94A40F0E9457059093380280934B +:1032500037028BE20E94A40F27C48823A1F080913B +:103260003902811106C081E08093390282EE0E940A +:10327000A40F0E945705909338028093370281EE85 +:103280000E94A40FE6CF81EE0E941E0A8BE20E94EC +:103290001E0A0AC4882309F455C4F60181898823CB +:1032A00009F450C4C5018E5C9E4F0E94DE084AC4DA +:1032B00082EE0E94A40F82C488E193E00E9438113C +:1032C00088E193E00E94A40A79C482EE0E94A40FD0 +:1032D00087E50E94511072C486EE0E94511088E169 +:1032E000F8CF895A85C482EE0E941E0A99C48CE2E6 +:1032F0000E9451108091D701882309F491C489E379 +:103300000E9451108DC488E2FBCF033FBCE51B0730 +:1033100039F188F4083DFCE51F07F1F0093D2CE583 +:10332000120751F1073D3CE5130709F07DC426E281 +:1033300041EE61EE0DC0053F8CE51807C9F0A0F025 +:1033400027E245EE66EE063FACE51A0709F06CC4CD +:10335000C7010E946E10C1CE27E245EE65EEF8CFA0 +:1033600026E241EE60EEF4CF27E245EE64EEF0CFC8 +:1033700026E241EE62EEECCF28E241E0EFCF809111 +:10338000DF02806106303CE5130709F487C008F4CA +:103390008CC08091DF02806281C08091DF028D7FCE +:1033A0000C309CE5190709F479C070F48091DF02B4 +:1033B0008C600A30BCE51B0709F470C008F481C0BA +:1033C0008091DF028E7F6AC08091DF02877F0E309E +:1033D000FCE51F0709F462C08091DF028B7F0F308C +:1033E0001C4508F45BC08091DF028F7E57C00B3F05 +:1033F0003CE5130709F45DC030F503319CE519077E +:1034000009F46DC078F40131BCE51B0709F463C011 +:1034100002311C4509F045C40E9427158091DF0246 +:103420008F773CC00531FCE51F0709F460C008F444 +:1034300074C08091E00281600A3F1C4509F031C4EC +:103440008093E0022EC40F3F8CE5180709F44BC0AF +:1034500088F48091E0028D7F0D3FACE51A0781F37F +:103460008091E0028E7F0E3F1C4550F38091E00278 +:103470008360E6CF0130EDE51E0709F457C008F47C +:1034800042C060E002301D4509F00BC48EE090E0C0 +:103490000E94222D06C48091DF0281608093DF02AA +:1034A00000C48091DF028460F9CF8091DF028860E0 +:1034B000F5CF8091E0028260C3CF8091DF0280640B +:1034C000EDCF0E9427158091DF028068E7CF8091C1 +:1034D000DF028F7DE3CF8091DF028F7BDFCF809192 +:1034E000DF02837FDBCF8091E0028C7FA9CF8091C8 +:1034F000DF0282FB992790F921E0922790FB82F965 +:1035000090FB83F9CBCF8091E002982F909591703A +:103510008E7F892B90FB81F993CF0E942715909184 +:10352000DF02892F97FB87F98058B8CF61E0AECFD3 +:103530008091D30206313CE5130709F0FCC38A7A77 +:1035400091E009F490E09093D801811106C089E2DE +:103550000E9453090E947808C0CD85E3F9CF85E326 +:10356000E7C380917B0380FF1BC08E7F80937B032A +:1035700060917B0370917C0380917D0390917E0329 +:103580000E94391310925C028FEF90E7A2E0815005 +:103590009040A040E1F700C000000E94620B9DCD6A +:1035A000816080937B0361E086950E94441495CDF1 +:1035B0004FE754E168E874E10E94DE058ECD48E8EB +:1035C00054E16FE774E1F8CF49E154E160E174E15F +:1035D000F3CF48EF53E164E074E1EECF40EE53E106 +:1035E0006CEE73E1E9CF4CEE53E160EE73E1E4CFB2 +:1035F00043E354E162E274E1DFCF61E081E0D5CFE3 +:1036000065E082E00E94921468CD68E086E0FACF1F +:1036100064E18FE0F7CF67E185E1F4CF62E289E111 +:10362000F1CF61E083E2C1CF0B353DE5130701F136 +:103630000C351D4509F0AAC38091E00282FB882762 +:1036400080F991E089270E94F911A0C30E942715F3 +:103650009FEFA4E3BCE09150A040B040E1F700C070 +:1036600000000E943E0B0E94B01437CD81E0EBCFEA +:1036700080E0E9CFF701828100811181882369F020 +:10368000C8010E944612D82E682FC8010E94B809AE +:10369000B8018D2D0E94391280C3C8010E94910982 +:1036A000D82EF6CFE12FEF70CE2E107F19F0C294F6 +:1036B00090EFC922DD20C9F0CC2069F080E2800FB4 +:1036C000883010F001110BC08091D302C82AC0923B +:1036D000D3020E947808802F0E94A40F16C0809108 +:1036E000D202C82AC092D202F4CF802F0E941E0AB2 +:1036F000CC2059F080E2800F883010F0011138C0E2 +:103700008C2D0E9471080E947808A92DA850BB0B2F +:10371000149720F40E948F050E946D0AAA20A9F038 +:1037200080912F0280FD11C0F70112828595859549 +:1037300085950E945F0DC7010E94031880912F029A +:103740008595859585950E94320D60E0C7010F90A3 +:103750000F900F900F90DF91CF911F910F91FF90DD +:10376000EF90DF90CF90BF90AF909F900C94BC12E1 +:10377000C0948091D202C822C092D202C4CFF12F4D +:10378000FF70BF2E107F103219F0B29480EFB82274 +:10379000002381F0013099F1DD20F1F1CC20A9F175 +:1037A000D70115968C91159780FF95CF8F70159640 +:1037B0008C932BC0DD20B1F0909131028B2D892BA1 +:1037C000C11003C00E94140AA0CF21E0C212FACF98 +:1037D0002091E00222FD99CF981709F496CF8093AB +:1037E000310293CFC11006C00E946B088B2D0E943E +:1037F0000D0A8BCF31E0C31609F487CFF5CFDD205A +:1038000031F085E08C1508F480CF8B2DDBCF94E070 +:103810009C1508F47ACFEACFCC2041F3093349F460 +:10382000BFEFE7EEF3E0B150E040F040E1F700C059 +:103830000000802F0E941E0A68CF812F86958695F2 +:10384000837061F0813009F060CFC8019370D110AE +:1038500002C090E080E00E94630557CFC8019370DA +:10386000D11002C090E080E00E9479054ECF812FF8 +:10387000837009F03FC0D11048CF402F4295469544 +:103880004770440F440F802F8F7090E0042E02C0C9 +:10389000880F991F0A94E2F730E020E004FF09C086 +:1038A0002FE030E002C0220F331F4A95E2F7209547 +:1038B0003095169516951370123099F078F4409162 +:1038C000320250913302113039F0822B932B842332 +:1038D00095230E94F20919CF842B952B822B932BD1 +:1038E000F8CF822B932B2091320230913302822722 +:1038F0009327EFCF8695DD2011F0812F81708823EB +:1039000009F403CF402F429546954770440F440F6A +:10391000802F8F7090E0042E02C0880F991F0A94A8 +:10392000E2F730E020E004FF09C02FE030E002C001 +:10393000220F331F4A95E2F720953095169516957C +:103940001370123099F078F44091130350911403DE +:10395000113039F0822B932B842395230E941B0D69 +:10396000D4CE842B952B822B932BF8CF822B932BA9 +:10397000209113033091140382279327EFCF1F70F8 +:10398000DD2029F0812F0E945F0D802F1BCF802F1B +:103990000E940D0A812F0E94320DB7CE023F09F41A +:1039A00041C060F4003F11F1013FA1F1DD2009F4B5 +:1039B00057C0C11090CE812F8F7131C0033FB9F134 +:1039C000043FA1F7DD2009F440C01F71812F0E9440 +:1039D0005F0D8091E00282FD07C0A8E01A9FC00140 +:1039E0001124836080932F02812F19C0DD2069F09C +:1039F00024E02C1508F489CE1F7181E090E002C00C +:103A0000880F991F1A95E2F7B3CF35E03C1508F4FB +:103A10007CCEF2CF812F8F71DD2009F4BCCF0E94C4 +:103A20005F0D73CE812F8F71DD20C9F3B4CF90E08D +:103A300080E0DD2009F492CF1F7181E090E002C0A8 +:103A4000880F991F1A95E2F789CF81E00E94430DF4 +:103A5000B1E0BC1508F059CE82E00E94430D55CE6E +:103A6000CC2059F0093309F0E4CEEFEFF7EE23E074 +:103A7000E150F0402040E1F7DACE812F8F718BCFFB +:103A80000031FFE51F0709F4C6CB01312FE512070E +:103A900009F4CBCB0038AFE51A0709F4C8CB0138DD +:103AA000BFE51B0709F4D9CBC80197558F3F910596 +:103AB00011F008F047C020910401022E000C330BD6 +:103AC0002817390714F480930401F701228136E1A5 +:103AD000389F5001399FB00C1124C501845D9E4F61 +:103AE0006C01DC0150962C935097928116968C9124 +:103AF0001697992309F4CECB1A961C930E93199717 +:103B00008F5F16968C930E945705F60196878587DE +:103B10008091310287838091D2029091D302892BC8 +:103B200080870190F081E02D309741F0D6015496C6 +:103B30006D917C91C5018E5C9E4F09951093D102C9 +:103B40000093D002D70112968C91882369F0C801A6 +:103B5000815E9C45059740F46FE1600F60933A02E7 +:103B60008CE090E00E94222D17FFCFCBF7018281DD +:103B7000882309F459C00E948F058695817080932F +:103B8000D70190913A02913029F4882319F089E302 +:103B90000E9451108091D3028093D6011092D302DB +:103BA00080913A02813009F487CB882309F480CBD5 +:103BB000823009F48ACB843009F48ECB8FE39CE900 +:103BC0000197F1F700C000005801E894B7F84CE005 +:103BD000C42ED12CC5010C2C02C0969587950A9451 +:103BE000E2F78F7096EF980F963008F47ACB805DED +:103BF0000E94D21094E0C91AD108ACEFCA16AFEFF8 +:103C0000DA0641F780913A02813009F470CB8823BB +:103C100009F469CB823009F466CB843009F473CBA4 +:103C20008091D6018093D302F7018281882309F421 +:103C300077C0109217030230FCE51F0708F478CC18 +:103C400006312CE5120730F0C8018A5F9C450997C0 +:103C500008F06ECC0E9415139093E0028093DF026F +:103C600000313CE5130709F432CC08F0C0CB083032 +:103C70009CE5190709F421CC08F08FCB0430BCE592 +:103C80001B0709F40ECC08F07ACB0230FCE51F07C5 +:103C900009F401CC8091DF02826003301C4509F4F5 +:103CA000FDCB6091DF021091E00284E090E00E9481 +:103CB000222D612F82E290E00E94222D0E94271582 +:103CC0000CCA61E0C7010E94BC128C01D701129698 +:103CD0008C918823A9F0809104018F3F89F07CE2C8 +:103CE000C72E71E0D72EB12CA12C992493948091EA +:103CF0000401082E000C990B8A159B050CF0B1C924 +:103D0000F70182818111D7C900313FE5130709F41A +:103D100088CA01319FE5190709F0BCCE82E082CA4A +:103D200006311C4599F58091D801811118CC89E2A2 +:103D30000E9428090FCC82720C3CECE51E0709F4A6 +:103D400057CC08F090C0063C2CE5120709F43CCC97 +:103D500008F065C0033C9CE5190709F429CC08F07C +:103D60004FC0023CBCE51B0709F4FBCB0A35BDE59F +:103D70001B0709F47BCC08F057CC0115FCE51F07A5 +:103D800009F464CC0E3D1C4509F46DCCD7011696A0 +:103D90008D919C91009709F46DCC0E94EE068C01E8 +:103DA000D7011296DC9012971596CC90C2943FE002 +:103DB000C32280912F028770A1F0AD2CDD2091F0FD +:103DC000812F807F803421F080E2800F883048F09E +:103DD00082E00E94430D80912F028770AA24A39451 +:103DE0008111A12C912E92942FE09222BBE0B91563 +:103DF00008F48BCCE92DF0E0E657F24D0C94C42C7E +:103E0000043CECE51E0709F4DACB40E154E169E13A +:103E100074E1053CFCE51F0709F4CECBA7CF093CB4 +:103E20002CE5120709F4DACB78F4073C9CE5190776 +:103E300009F4CFCB44E054E168EF73E1083CACE512 +:103E40001A0709F4B9CB92CF0A3CBCE51B0709F469 +:103E5000CACB42E254E163E374E10B3CECE51E079C +:103E600009F4AACB83CF013DFCE51F0709F4D0CBB1 +:103E7000A0F40E3C3CE5130709F4C2CB08F4BDCB1B +:103E80000F3C9CE5190709F4C0CB6EE089E0003DCA +:103E9000ACE51A0709F4B6CB69CF043DBCE51B07B6 +:103EA00009F4BCCB68F4023DFCE51F0709F4B3CB71 +:103EB00061E088E1033D2CE5120709F476CB56CF8B +:103EC000053D3CE5130709F4ACCB0D35100709F4AB +:103ED00004C94CCFCF93DF938091EA01807FA1F496 +:103EE0008091E701882381F080912E02D091ED012D +:103EF0006091E5017091E601A091E801B091E901BE +:103F0000C62FC723D81303C0DF91CF91089590E047 +:103F1000109711F0CF3F19F401968770F3CF9C01F1 +:103F200043E0220F331F4A95E1F7F901E251FE4FBA +:103F300041814713F1CF40814613EECF42814111B9 +:103F4000EBCF438154814A1B5B0B483C510520F762 +:103F50008091EA018F7080618093EA01F901ED5050 +:103F6000FE4F80818F708061808385EE91E00E949A +:103F70000318DF91CF910C948709AF92BF92CF9233 +:103F8000DF92EF92FF920F931F93CF93DF93CDB702 +:103F9000DEB765970FB6F894DEBF0FBECDBF8C01BC +:103FA00085E0F801DE01519601900D928A95E1F7C6 +:103FB000F801E28065EEA62E61E0B62E6091E80180 +:103FC0007091E9016115710509F468C19091E501ED +:103FD0004091E601892F84238F3F09F45FC120813E +:103FE0003181C380D480F090E701F601E61BF70B26 +:103FF000FF2009F41DC18091EA01582F507FE83C51 +:10400000F10508F0D0C0511181C0FE2C43132BC024 +:10401000921329C06091EB017091EC01F801468187 +:10402000578164177507F9F4E1101DC08F70806126 +:104030008093EA01C5010E9403188091EA01F8010A +:1040400085838F2D65960FB6F894DEBF0FBECDBF6A +:10405000DF91CF911F910F91FF90EF90DF90CF9064 +:10406000BF90AF900895CD2829F0822F83238F3FF2 +:1040700009F02FC180E0F82FF170DF2E80FF3CC0E7 +:1040800080912E024091ED01841315C0298B3A8B4B +:1040900089899A890E948212292F22952F702230B5 +:1040A000F8F0243020F59F70F9F0F8019581907FA9 +:1040B000D9F4D12C1FC090E0FC0153E0EE0FFF1F9C +:1040C0005A95E1F7E251FE4F5181351306C05081F8 +:1040D000251303C05281E5120FC001968770D4CF1B +:1040E0009F7011F0882329F3805E883010F3C80197 +:1040F0000E940318FD2CA5CFEE2009F4A2CF8091D9 +:10410000EA0181608093EA01F12C9BCF43131BC02D +:10411000921319C04091EB015091EC01F8012681F6 +:1041200037814217530779F4E1100DC08583C80128 +:104130000E94031888E0F801A5EEB1E001900D920D +:104140008A95E1F77ECFC8010E948E12882339F14B +:10415000EE2029F18091EA018032A0F02091E50162 +:104160003091E6013A8729871B86DD86CC868E87CB +:104170008091EB019091EC01988B8F87CE0109968D +:104180000E94031888E0F801A5EEB1E001900D92BD +:104190008A95E1F70E946A1FFF24F39452CFC80169 +:1041A0000E940318F9CF51110AC085EE91E00E94D8 +:1041B000031888E0F50111928A95E9F7A5CF43131A +:1041C00018C0921316C04091EB015091EC01F80118 +:1041D000268137814217530761F4E1100AC08583B5 +:1041E000C8010E94031888E0F50111928A95E9F749 +:1041F00028CFC8010E948E12882389F2EE2079F21E +:104200008091EA01803208F4BDCF2091E501309120 +:10421000E6013A8329831B82DD82CC828E838091E2 +:10422000EB019091EC0198878F83CE010196A8CF86 +:10423000E83CF105C0F6FE2CEE2009F4B0CF4313A4 +:104240001FC092131DC02091EB013091EC01F801C9 +:10425000868197812817390799F49091EA0190FD9A +:1042600069CF907F09F466CF8091EA018583903F02 +:1042700009F45DCF982F907F905F8F70892B56CF78 +:10428000C8010E948E1281117DCF8091EA01816068 +:104290008093EA01C8010E940318D3CEEE2009F4EE +:1042A0007ECFC8010E948E12F82E882309F477CFA2 +:1042B00088E0F801A5EEB1E001900D928A95E1F752 +:1042C0008091E5019091E6010E9482120E946A1F8E +:1042D000B8CE81E08E25CFCECF93DF93CDB7DEB7BA +:1042E00060970FB6F894DEBF0FBECDBF29873A871F +:1042F0004B875C876D877E878F87988BCE01099669 +:104300000E94BD1F811112C088E0FE013996DE01B6 +:10431000119601900D928A95E1F78C859D85892BE8 +:1043200029F089859A8589238F3FA9F580912E02EE +:104330009091ED0189131CC060960FB6F894DEBF12 +:104340000FBECDBFDF91CF91089593E0AA0FBB1FA1 +:104350009A95E1F7A251BE4F98E0FE013196019087 +:104360000D929A95E1F78093ED010E948709DECFC7 +:10437000B8E08B9FC001112482519E4F0E94BD1F47 +:104380008823D1F280912E0290E0019687709927C0 +:1043900080932E02CBCFA091ED01B0E0CD0101962C +:1043A0008770992720912E022817190671F60E940E +:1043B00027151092ED0110922E0288E0E5EEF1E053 +:1043C000DF011D928A95E9F7B1CF0F931F93CF9329 +:1043D000DF9380916302E0916202CCE081111AC008 +:1043E000DF91CF911F910F910895D1E0DE0FD0930F +:1043F00062020E2F10E0EC9FF0011124EC59FD4FEA +:1044000083819481892B29F08081918189238F3F39 +:1044100051F4ED2F80916302E81738F31092630294 +:1044200010926202DDCFC09FD001C19FB00D112458 +:10443000AC59BD4F16968D919C911797892B29F4F5 +:1044400018968D919C91019651F420813181428181 +:10445000538164817581868197810E946C21C09F00 +:10446000F001C19FF00D1124EC59FD4F148213820D +:10447000D0CF1092CF021092CE0210922B018091D9 +:10448000CD028093CC020E94C9050C94E5212F92A5 +:104490003F924F925F926F927F928F929F92AF92D4 +:1044A000BF92CF92DF92EF92FF920F931F93CF9321 +:1044B000DF93C091CC02E7E0FE2E01E010E0FCE0CB +:1044C0002F2EAEEFEA2E8091CD028C1316C00E94E3 +:1044D000E521DF91CF911F910F91FF90EF90DF9039 +:1044E000CF90BF90AF909F908F907F906F905F9094 +:1044F0004F903F902F900C94C905D0E0FE01EE0F35 +:10450000FF1FEC53FD4F80819181F89EF001F99ED1 +:10451000F00D1124E35EFE4F2481211158C030902C +:104520006302A4E6B2E030E020E0412C5F012315F5 +:1045300008F04BC01A966D907C901B97F501808017 +:1045400091804FEF5FEF512CC52CD12CF601EE0F6F +:10455000FF1FE80DF91D659174916616770609F441 +:10456000A601672B11F05394EFCF4F3F5407B1F1E1 +:10457000B80102C0660F771F4A95E2F7462AA801E4 +:1045800002C0440F551F5A94E2F741505109441696 +:10459000150601F5229EF001239EF00D1124EC5921 +:1045A000FD4FF89ED001F99EB00D1124A35EBE4FC1 +:1045B00012962D913C91139737832683E082E182F6 +:1045C0009187808771E015967C930E949B052196C8 +:1045D000C37079CF14961C921E9213972F5F3F4F92 +:1045E0001C96A5CFAF92BF92CF92DF92EF92FF922F +:1045F0000F931F93CF93DF9300D000D000D0CDB79F +:10460000DEB78E010F5F1F4F86E0D8011D928A959D +:10461000E9F724E7C22E21E0D22EF12CE12CAA24C6 +:10462000A394B12CF60181916F018F3F09F44BC027 +:10463000F894E82FE295EF70F0E021A18F70A501CA +:1046400002C0440F551F8A95E2F7CA01922F982B9A +:1046500091A392A18095892382A3789400C0C5017B +:104660000E2C01C0880F0A94EAF7382F282F2095C6 +:1046700068E771E0F801DB019D91BD0180819F3FFA +:1046800009F46BC0492F42954F7050E0DA019096C3 +:104690004C9150E09F7002C0559547959A95E2F76E +:1046A00040FD5BC0832B80833196B1E06E377B0782 +:1046B00011F7F601319780818F3F11F00E94940627 +:1046C000E0EAEA95F1F7FFEFEF1AFF0A24E0E216BD +:1046D000F10409F0A7CF46E050E0B8018EE392E084 +:1046E0000E94632DDD24D394009709F4D12C892BEB +:1046F000B1F186E0F801AEE3B2E001900D928A9547 +:10470000E1F781E0809336020E94570590933502CD +:104710008093340280913402909135020E944805C2 +:10472000059708F180913E0280934F0280913F02ED +:104730008093500280914002809351028091410207 +:1047400080935202809142028093530280914302EF +:10475000809354021092360206C08223A4CF809127 +:1047600036028111D7CF809104018F3F09F06AC0D2 +:1047700080912B0181116AC080913902882371F0E8 +:1047800080913702909138020E944805893E9340FB +:1047900028F082EE0E941E0A109239028D2D269674 +:1047A0000FB6F894DEBF0FBECDBFDF91CF911F9142 +:1047B0000F91FF90EF90DF90CF90BF90AF90089552 +:1047C000E29EF001E39EF00D1124E45DFE4FA2880D +:1047D000B388A114B10419F498ECA92EB12CE29E6F +:1047E0008001E39E100D1124045D1E4FD801169622 +:1047F0008C9116978823C9F01D968D919C910E94EB +:104800004805A816B90688F4FE9C50011124F80149 +:104810008189811105C0C501845D9E4F0E94BD083C +:10482000C5018E5C9E4F0E94DE08F3942F2D30E070 +:1048300080910401082E000C990B821793070CF04D +:10484000BFCF96CFF12C86E1E82EF0CF8091CE023B +:104850009091CF02009709F48FCF0E9448052091D4 +:104860006002309161022817390708F085CF9091D6 +:10487000CC028091CD02981759F00E9447221092E5 +:104880006102109260021092CF021092CE0274CF99 +:104890000E94E5211092CF021092CE020E94C9051B +:1048A0006BCF2F923F924F925F926F927F928F9237 +:1048B0009F92AF92BF92CF92DF92EF92FF920F93AF +:1048C0001F93CF93DF93CDB7DEB769970FB6F894F8 +:1048D000DEBF0FBECDBF498B5A8B6B8B7C8B8D8B14 +:1048E00061111092D2021D861E861F86188A85E0ED +:1048F000FE017196DE01199601900D928A95E1F7FD +:104900008C859D85892B31F089859A8589238F3FF8 +:1049100009F0D4C129853A854B855C856D857E85F6 +:104920008F8598890E946C21C3C028EFC2162CE5A0 +:10493000D20629F4882379F00E943922EBCF39EF8F +:10494000C3163CE5D30639F4882329F080912B0166 +:104950008111F2CFC3C10DE111E0E12CB12CA12CEA +:1049600088248394912C2EEF522E44244394F801F2 +:104970006081718166246A94762C20E0422F50E099 +:10498000FA01EE0FFF1FE60FF71F85919491C816ED +:10499000D90609F43A01892B31F02F5FEFCFAA2411 +:1049A000A394B12CE4CFF12CFFEF6F167F0609F42E +:1049B00045C0F8014481F0902B018F2D411180E01A +:1049C000F82FF170FF2EF801258086819B859923B1 +:1049D00009F404C1FF2009F401C1211014C0A4018D +:1049E00001C0440F6A94EAF7842B868380916002A9 +:1049F000909161028C32914030F44CE251E050933E +:104A0000610240936002C40102C0880F991F2A9579 +:104A1000E2F70197F80126812817190679F48091A9 +:104A2000CE029091CF02009709F45BC00E94480526 +:104A30008D32914008F455C0F8014482EF28095F97 +:104A40001F4FAA94AB2809F0AACF8B85882309F4BD +:104A500020C1EE2009F41DC10E9457059093CF029A +:104A60008093CE0280916302883010F591E0980F18 +:104A70009093630298E0FE013996DE011196019051 +:104A80000D929A95E1F72CE0829FC00111248C5978 +:104A90009D4F28E0FE013196DC0101900D922A9590 +:104AA000E1F72FEF3FEFFC0131872087D386C286E5 +:104AB00069960FB6F894DEBF0FBECDBFDF91CF91E0 +:104AC0001F910F91FF90EF90DF90CF90BF90AF902C +:104AD0009F908F907F906F905F904F903F902F901E +:104AE00008958091CC026090CD02982FF0E0E0E034 +:104AF000861114C09093CC020E171F0709F49ECFA5 +:104B000090E0FC01EE0FFF1FEC53FD4FB182A0823D +:104B10000196837099278093CD0290CF282E312C57 +:104B2000F101EE0FFF1FEC53FD4F20813181F7E0C3 +:104B3000F29FD001F39FB00D1124A35EBE4F2D91C3 +:104B40003C911197398F288F712C60E070E0E72F2E +:104B5000F0E0EE0FFF1F288D398DE20FF31F259136 +:104B6000349121153105E1F0F8010190F081E02D3B +:104B7000FF8BEE8B60E005C02417350709F47F2C0E +:104B80006F5FE62FF0E0EE0FFF1F4E895F89E40FA5 +:104B9000F51F459154914115510571F77F5FD7CFAE +:104BA0007720C9F0F801671708F0FD0144820E175D +:104BB0001F0721F49093CC02F72C40CF981305C027 +:104BC000AE17BF0711F49F5F937091012F5F3F4FA6 +:104BD000822F83708DCFF0E0E0E0F7CF90E02110DE +:104BE0001FC0B40102C0660F771F2A95E2F79B0130 +:104BF000215031092817390731F4442309F447C0FB +:104C0000C5010E949B05C40101C0880F6A94EAF7A0 +:104C1000982F9095F801868189238683F22C0ECFF8 +:104C20009C01062C02C0359527950A94E2F7A9014C +:104C300041705527BC016150710986239723892B48 +:104C400011F5452B01F1F80182819381892BC1F087 +:104C50001B821C821D821E8259825A820E94570525 +:104C60008160582F9D838C83F801828193818F838B +:104C7000988729813A814B816D817E810E946C21C8 +:104C8000F8011582C0CFF22FF1702F2EBCCF2F2C40 +:104C9000BACF9091CC028091CD02981731F00E944A +:104CA0004722EE2009F436CE03CF0E94E521109270 +:104CB000CF021092CE020E94C905F3CF61E0CE016F +:104CC00009960E94BC126C018B85F7EFCF16FCE5AC +:104CD000DF0609F02ACE882309F43DCE81E08093D7 +:104CE0002B0118CE1F920F920FB60F9211242F9303 +:104CF0003F934F935F936F937F938F939F93AF9364 +:104D0000BF93CF93DF93EF93FF93D091E900DF70D0 +:104D10008091EC00C82FC17080FDC0E81092E900BE +:104D20008091F000877F8093F00078940E943C157A +:104D30001092E9008091F00088608093F000CD2B04 +:104D4000CF70C093E900FF91EF91DF91CF91BF91B8 +:104D5000AF919F918F917F916F915F914F913F9113 +:104D60002F910F900FBE0F901F9018951F920F92CA +:104D70000FB60F9211242F933F934F935F936F932E +:104D80007F938F939F93AF93BF93EF93FF93809104 +:104D9000E10082FF09C08091E20082FF05C080919E +:104DA000E1008B7F8093E1008091DA0080FF24C0D6 +:104DB0008091D80080FF20C08091DA008E7F8093A0 +:104DC000DA008091D90080FF9BC080E189BD82E13B +:104DD00089BD09B400FEFDCF81E080930903809175 +:104DE000E402811109C00E94B9030E9484048091E9 +:104DF000E20084608093E2008091E10080FF17C0B0 +:104E00008091E20080FF13C08091E2008E7F80934A +:104E1000E2008091E20080618093E2008091D800FE +:104E200080628093D80019BC85E08093090380914B +:104E3000E10084FF29C08091E20084FF25C080E169 +:104E400089BD82E189BD89B5982F917080FFFBCF24 +:104E50008091D8008F7D8093D8008091E1008F7E73 +:104E60008093E1008091E2008F7E8093E200809148 +:104E7000E20081608093E20080910A03882309F4B4 +:104E800045C084E0809309038091E10083FF27C03F +:104E90008091E20083FF23C08091E100877F8093AF +:104EA000E10082E08093090310920A038091E100FF +:104EB0008E7F8093E1008091E2008E7F8093E200FC +:104EC0008091E20080618093E20042E060E080E057 +:104ED0000E9452048091F00088608093F000FF915E +:104EE000EF91BF91AF919F918F917F916F915F9162 +:104EF0004F913F912F910F900FBE0F901F901895DB +:104F000019BC109209031092E40276CF8091E3005D +:104F100087FD93E090930903B7CF78941F921FB653 +:104F20001F9211248F939F93AF93BF938091DB02C5 +:104F30009091DC02A091DD02B091DE020196A11DEC +:104F4000B11D8093DB029093DC02A093DD02B0934D +:104F5000DE02BF91AF919F918F911F901FBE1F9056 +:104F600018951F921FB61F9211248F939F93AF9392 +:104F7000BF938091DA02811113C08091DB0290917E +:104F8000DC02A091DD02B091DE024196A11DB11DAF +:104F90008093DB029093DC02A093DD02B093DE02EB +:104FA000BF91AF919F918F911F901FBE1F90189539 +:104FB000CDB7DEB7AA970FB6F894DEBF0FBECDBF50 +:104FC00084B7877F84BF0FB6F894A895809160005E +:104FD000886180936000109260000FBE80E890E0CE +:104FE0000FB6F89480936100909361000FBE85B76F +:104FF000806885BF85B7806885BF82E996E0909319 +:10500000B3018093B2010E94B9030E94840480918D +:10501000E20084608093E200789480910903882301 +:10502000A1F01091E9001F709091EC00892F817020 +:1050300090FD80E8182B1092E9008091E80083FD34 +:105040000E943C151F701093E90082E084BD93E03C +:1050500095BD9AEF97BD80936E000E94FC1281115E +:1050600002C00E94EA1182E30E94940680EF0E942F +:10507000940686E90E94940687E90E94940608E750 +:1050800011E02EE7E22E21E0F22EF80181918F014E +:105090008F3F11F00E949406E016F106B1F7EEE39F +:1050A000F2E084E492E0AFE4B2E011921D928E1738 +:1050B0009F07D9F70E941C15811102C00E94B014ED +:1050C00082E090E00E940E2D809348020E9415130A +:1050D0009093E0028093DF020E94F2228FE39CE92A +:1050E0000197F1F700C000000E94F22280914F0268 +:1050F00080FF08C06FEF7FEF90E080E00E94402DBE +:105100000E943E0B83E090E00E940E2D90E00E94F2 +:10511000F20980911303909114030E94060C6E9A79 +:10512000769A8CE090E00E940E2D90E0B0E0A0E036 +:1051300080933A0290933B02A0933C02B0933D02CD +:1051400080914402811133C00E941C15811104C05A +:105150000E94B0140E94A01488E090E00E94162DD6 +:1051600060937B0370937C0380937D0390937E0315 +:105170006E7F71F40E94A01488E090E00E94162DCA +:1051800060937B0370937C0380937D0390937E03F5 +:105190000E94E30510925C0280917B0380FF04C0B3 +:1051A00060E086950E94441481E0809344028091DF +:1051B0007B03816080937B0361E086950E944414A9 +:1051C00060E081E20E94441421E04EE16FEF8AE347 +:1051D0000E944B1385E091E09093D7028093D60212 +:1051E00018E1E12EF12C00E4C02E8FE492E096E06D +:1051F000D92ED80E80910903BB24B39400E112E1AB +:10520000853009F402C10E94F222882359F08FB739 +:10521000F8944091DB025091DC026091DD027091C4 +:10522000DE028FBFE9E4F2E0AFE4B2E010E000E0BC +:10523000302F8D919191981709F409C1292F2827B2 +:1052400090E0BB24B394422F4B2109F4FBC099A3F7 +:105250003AA38B2191E009F490E09BA30E945705AB +:105260008160782F9DA38CA349A15AA16BA18DA128 +:105270000E945124F801E75BFD4F8081B826B0827F +:1052800080915C028823D1F180915B02E0917B03E5 +:10529000E695E81BE0935702823009F0EFC0F0E09A +:1052A000EB5BFD4FE4910E2F10E0B0E9AB2EBFE0B9 +:1052B000BB2E80915802882361F0109258020E9400 +:1052C0005705909356028093550210925A021092FD +:1052D00059020E945705E0915502F09156028E1B2B +:1052E0009F0B8F3F9F4750F4E00FF11FF093560242 +:1052F000E093550285E592E0F50109950E948F053E +:1053000090914702891731F00E948F0580934702E0 +:105310000E946D0A80910903843009F06BCF83E00D +:105320008093E9008091E80082FF64CF8091E800DB +:1053300090E085FF06C00E94D803882309F4F8C0D6 +:1053400091E08091E8008B778093E800992309F43D +:1053500051CFE981E150E33108F06CC1F0E0EA5649 +:10536000F24D0C94C42C80910903843009F440C0A0 +:1053700080E00E946D0A10925C02809146028111C9 +:1053800016C0B092460280917B03982F9170909343 +:1053900045028E7F80937B039FEFE0E7F2E0915020 +:1053A000E040F040E1F700C000000E94620B109264 +:1053B000DA020FB6F894A895E09260000FBEC09292 +:1053C000600083B7817F846083BF83B7816083BFC0 +:1053D0007894889583B78E7F83BF0FB6F894A8958D +:1053E00080916000886180936000109260000FBE21 +:1053F00080910803882349F00E94F222EFE4F2E052 +:10540000819181114AC2DE12FBCF80910903853060 +:1054100009F4A9CF0E9427150E948F050E946D0AEA +:105420001092460280914502882349F080917B03C7 +:10543000816080937B0360E086950E9444140E9403 +:105440002313E1CE9F5FBB0C943009F0FCCE0F5FBD +:105450001F4F0630110509F0EBCE8FEF8EA38FA3FF +:1054600018A60E9457058160782F9AA789A74EA198 +:105470005FA168A58AA50E94512402CF863059F405 +:10548000F0E0EE5BFD4FE4910E2F10E0A0E8AA2EB5 +:10549000AFE0BA2E0ECF893061F4E695F0E0E15C22 +:1054A000FD4FE4910E2F10E0FCEEAF2EFEE0BF2E7C +:1054B00000CF8F3061F4E695F0E0E45CFD4FE491BD +:1054C0000E2F10E0EEE7AE2EEEE0BE2EF2CE8531CE +:1054D00059F4F0E0E75CFD4FE4910E2F10E070E32B +:1054E000A72E7EE0B72EE5CE08E210E047EAA42E14 +:1054F0004DE0B42E883109F4DCCE833249F4E7E381 +:10550000F2E00591149167E2A62E6FE0B62ED1CE9F +:1055100004EF11E05EE6A52E5DE0B52E843209F4BD +:10552000C8CE00ED17E033E4A32E35E0B32EC1CE94 +:1055300000E210E0CE0101965C018091E80085FD5B +:105540000AC08091E8008B778093E8000E94D8031E +:10555000882399F3F5CE8091F100F50181935F01E5 +:105560000150110951F7ECCE1A8289E08B832DC0CE +:105570008A81823009F4A7C18330A9F0813009F013 +:1055800059C02FB7F8946091DB027091DC028091D2 +:10559000DD029091DE022FBF0E94CA2C6B837C83B8 +:1055A0008D839E8312C080914F028B838091500225 +:1055B0008C83809151028D83809152028E838091E1 +:1055C00053028F838091540288878091090384302D +:1055D00009F010CE1091E9001F709091EC00892F16 +:1055E000817090FD80E8182B82E08093E900809123 +:1055F000E80080FF0DC050E040E060E270E0CE01C6 +:1056000001960E9409048091E8008E778093E8005B +:105610001F701093E900EECD8A81823059F46B81BE +:105620007C818D819E810E94CA2C86E290E00E943E +:10563000222DCBCF8FEF8983C8CF4C816B818A819C +:105640000E9413129827892798279E838D83BDCFA8 +:10565000AD80BE80BA24AB24BA248A810B81F8E0E5 +:105660000F9F8001112420E3829F000D111D112442 +:105670008C8190E0880F991F080F191F6B2DC801AE +:1056800087960E94222D6A2DC8018896D0CF0E944D +:105690007F119BCF8A818138C1F060F4803809F096 +:1056A00094CF20E04B8160917D0380917C030E9428 +:1056B0004B138BCF823859F1833809F086CF20E025 +:1056C00040917E036C818B81F2CF60E08B810E94E0 +:1056D00044149B8180917B03911111C08E7F809334 +:1056E0007B0310925C028FEF90E7E2E081509040E4 +:1056F000E040E1F700C000000E94620B66CF8160CD +:1057000080937B0360E086950E9444145ECF8B817A +:1057100080937F035ACF8A81813899F030F48038A2 +:1057200009F053CF80917E0321CF823891F08338E6 +:1057300009F04BCF80917C038B8380917D038C8318 +:1057400044CF80917B0380FF02C086950FCF80E01D +:105750000DCF80917F030ACF60917B0370917C0312 +:1057600080917D0390917E030E9439132ECF80E1BA +:105770008A832BCF81E08A8389EFF8CEAA80BB8011 +:10578000BA24AB24BA248E010F5F1F4F8C80800E89 +:10579000912E911CC501895F9D4F8016910609F4D9 +:1057A00014CFF9EFAF16F1E0BF0650F40E940E2DB2 +:1057B000F8018483FFEFAF1ABF0A0F5F1F4FEACFD4 +:1057C000F8011482F7CF0A811B81102701271027C7 +:1057D000CE0101964C01AC80A00EB12EB11CC801C7 +:1057E000895F9D4FA016B10609F4EFCE093FE1E0B5 +:1057F0001E0720F4F40164810E94222DFFEF8F1A0E +:105800009F0A0F5F1F4FEBCF0E946F11DECE8AE021 +:10581000AFCFAA80BB80BA24AB24BA248E010F5F1D +:105820001F4F8C80800E912E911CC501879680168B +:10583000910609F4CACE20EEA21621E0B20650F479 +:105840000E940E2DF8018483FFEFAF1ABF0A0F5F8D +:105850001F4FEBCFF8011482F7CF0A811B8110276D +:1058600001271027CE0101964C01AC80A00EB12E6D +:10587000B11CC8018796A016B10609F4A6CE003E59 +:10588000E1E01E0720F4F40164810E94222DFFEF65 +:105890008F1A9F0A0F5F1F4FECCF09BD19BD09B4C6 +:1058A00000FEFDCF8091D8008F7D8093D80080913D +:1058B000E00082608093E0008091E00081FDFCCFF9 +:1058C0000E942715A2CD86E290E00E940E2D1B8239 +:1058D0001C821D828E8379CE87FB082E062687FDCB +:1058E000819567FD61950E94022D0EF4919507FC4C +:1058F00081950895AA1BBB1B51E107C0AA1FBB1FBE +:10590000A617B70710F0A61BB70B881F991F5A954B +:10591000A9F780959095BC01CD01089597FB072EBE +:1059200016F4009407D077FD09D00E947A2C07FC6A +:1059300005D03EF4909581959F4F0895709561959F +:105940007F4F0895A1E21A2EAA1BBB1BFD010DC0BB +:10595000AA1FBB1FEE1FFF1FA217B307E407F5071F +:1059600020F0A21BB30BE40BF50B661F771F881FFB +:10597000991F1A9469F760957095809590959B0191 +:10598000AC01BD01CF010895EE0FFF1F0590F4910A +:10599000E02D099469279627692778278727782794 +:1059A00008950E94D92C332312F48A1B9B0B0C946C +:1059B000EA2CA29FB001B39FC001A39F700D811D6F +:1059C0001124911DB29F700D811D1124911D089508 +:1059D0000E94D92CB7FF0895821B930B08950E9453 +:1059E000D92CA59F900DB49F900DA49F800D911D63 +:1059F00011240895B7FF0C94EF2C0E94EF2C821B0A +:105A0000930B0895991B79E004C0991F961708F02D +:105A1000961B881F7A95C9F780950895F999FECF4E +:105A200092BD81BDF89A992780B50895A6E1B0E0AE +:105A300044E050E00C94482DA8E1B0E042E050E092 +:105A40000C94482D262FF999FECF92BD81BDF89A6E +:105A5000019700B4021639F01FBA20BD0FB6F894B2 +:105A6000FA9AF99A0FBE08950396272F0E94232DC4 +:105A70000E94222D252F0E94232D242F0C94232DAC +:105A80000196272F0E94232D0C94222DDC01CB019F +:105A9000FC01F999FECF06C0F2BDE1BDF89A31963E +:105AA00000B40D9241505040B8F70895FC014150A8 +:105AB000504030F001900616D1F73197CF0108958C +:105AC000882799270895FB01DC0104C08D9101907E +:105AD000801921F441505040C8F7881B990B089554 +:105AE000F894FFCFA712A712B012B012B212B012E0 +:105AF000B012B012A712A712B712B012B012B7129A +:105B0000211649169C1649169C167C16B4169C162E +:105B1000B117BE17521B521BBF1BBF1B1D1C851B81 +:105B2000851B851B371CBF1CCE1CCE1CB42AB82A73 +:105B30000C2B1D2B282B472B4A2B8B2BAC2B1A2BDA +:105B40001A2BB72BBA2BBE2BE32B042C072C092CBA +:025B50002D2CFA +:105B520056005300FF4505FE0A4405FA0AF60A01FB +:105B6200191A1B1C1D1E1F202122010201B2002A2C +:105B720000000000AC004C00000000015F114F115A +:105B8200BC0A00000000000000000000000000004D +:105B9200000101818283E200E900EA00B500B6005B +:105BA200B700CD008301CC008A0192019401210249 +:105BB200230224022502260227022A02B300B4008D +:105BC2006F00700032F0969733F1F4F5F6F70001AA +:105BD200020202020606060909090909090F0F0F46 +:105BE2000F0F0F151515181919191919191919194E +:105BF20019232440226D47012501B8006006790669 +:025C0200990601 +:00000001FF From 0d51da712802a801eb9a6e779a469ad7a99a5d93 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 11 Sep 2021 02:50:33 -0400 Subject: [PATCH 014/155] Updated for breaking changes and encoder LED animation --- .../{9e VIA ayout.json => 9e VIA layout.json} | 0 keyboards/solartempest/9e/A9e.c | 45 - keyboards/solartempest/9e/A9e.h | 12 +- keyboards/solartempest/9e/config.h | 178 +- .../solartempest/9e/keymaps/default/keymap.c | 208 --- .../solartempest/9e/keymaps/via/keymap.c | 216 ++- keyboards/solartempest/9e/readme.md | 4 +- keyboards/solartempest/9e/rules.mk | 32 +- .../solartempest/9e/solartempest_9e_via.hex | 1613 +++++++++++++++++ 9 files changed, 1836 insertions(+), 472 deletions(-) rename keyboards/solartempest/9e/{9e VIA ayout.json => 9e VIA layout.json} (100%) delete mode 100644 keyboards/solartempest/9e/keymaps/default/keymap.c create mode 100644 keyboards/solartempest/9e/solartempest_9e_via.hex diff --git a/keyboards/solartempest/9e/9e VIA ayout.json b/keyboards/solartempest/9e/9e VIA layout.json similarity index 100% rename from keyboards/solartempest/9e/9e VIA ayout.json rename to keyboards/solartempest/9e/9e VIA layout.json diff --git a/keyboards/solartempest/9e/A9e.c b/keyboards/solartempest/9e/A9e.c index 3fc20a1961c1..584df4ba0beb 100644 --- a/keyboards/solartempest/9e/A9e.c +++ b/keyboards/solartempest/9e/A9e.c @@ -17,48 +17,3 @@ */ #include "A9e.h" - -/* #define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 31, 32, 33, 34, 35, \ - 1, 30, 4, 5, 6, 7, 8, 9, \ - 0, 3, 10, 11, 12, 13, 14, 15, \ - 2, 41, 16, 17, 18, 19, 20, 21, 23, 36, \ - 40, 39, 22, 25, \ - 24, \ - 38, 27, 37, \ - 26, 29, \ - 28 )*/ -// E2 Keys Row 1 E4 E5 -// E1 Keys Row 2 E6 -// E3 Keys Row 3 -// E8 E9 E7 - -#ifdef RGB_MATRIX_ENABLE //Add in addressable LED underglow support with physical locations - led_config_t g_led_config = { { - //Key matrix to LED index - { 36, 35, 34, 33, 32, }, - {18, 37, 5, 4, 3, 2, 1, 0, }, - {19, 21, 11, 10, 9, 8, 7, 6, }, - {20, 38, 17, 16, 15, 14, 13, 12, 22, 31, }, - { 39, 40, 23, 25, }, - { 24, }, - { 41, 26, 30, }, - { 27, 29, }, - { 28, NO_LED, NO_LED, NO_LED, } - }, { - // LED Key Index to Physical Position, calculated with Plot Digitizer and scaled PCB Image with center at {110,110} - {150,98},{132,98},{116,98},{100,98},{84,98},{60,98}, - {150,80},{132,80},{116,80},{100,80},{84,80},{60,80}, - {150,64},{132,64},{116,64},{100,64},{84,64},{60,64}, - - {16,85},{7,76},{16,66},{24,76}, {192,74},{184,62}, - {192,52},{202,62}, {192,30},{184,20},{192,8},{202,19}, - - {209,32},{211,71},{191,105},{141,105},{101,104},{76,104}, - {52,98},{30,89},{30,63},{52,50},{141,44},{181,32} - }, { // LED Index to Flag. - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, // 4 for 18-key backlight. - 1,1,1,1,1,1,1,1,1,1,1,1, // 1 for 3*4LED large rotary encoders. - 2,2,2,2,2,2,2,2,2,2,2,2 // 2 for 12-case underglow. - } }; -#endif diff --git a/keyboards/solartempest/9e/A9e.h b/keyboards/solartempest/9e/A9e.h index cc6481b19bb5..e70c429d6179 100644 --- a/keyboards/solartempest/9e/A9e.h +++ b/keyboards/solartempest/9e/A9e.h @@ -16,20 +16,18 @@ * along with this program. If not, see . */ -#ifndef A9E_H - #define A9E_H +#pragma once +#include "quantum.h" - #include "quantum.h" - - #define KEYMAP( \ + #define LAYOUT( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ K303, K304, K305, K306, K307, K308, K309, K310, K311 \ - ) { \ + ) \ + { \ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \ { KC_NO, KC_NO, KC_NO, K303, K304, K305, K306, K307, K308, K309, K310, K311 } \ } -#endif diff --git a/keyboards/solartempest/9e/config.h b/keyboards/solartempest/9e/config.h index a74b280bfb3b..a839aee2d30b 100644 --- a/keyboards/solartempest/9e/config.h +++ b/keyboards/solartempest/9e/config.h @@ -16,125 +16,81 @@ * along with this program. If not, see . */ -#ifndef CONFIG_H - #define CONFIG_H +#pragma once +#include "config_common.h" - #include "config_common.h" +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x414B // AK +#define PRODUCT_ID 0x0009 // 9e +#define DEVICE_VER 0x0001 +#define MANUFACTURER Atlantis +#define PRODUCT A9e +#define DESCRIPTION Keyboard - /* USB Device descriptor parameter */ - #define VENDOR_ID 0x414B // AK - #define PRODUCT_ID 0x0009 // 9e - #define DEVICE_VER 0x0001 - #define MANUFACTURER Atlantis - #define PRODUCT A9e - #define DESCRIPTION Keyboard +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 - /* key matrix size */ - #define MATRIX_ROWS 4 - #define MATRIX_COLS 12 +/* key matrix pins */ +#define MATRIX_ROW_PINS { F0, F1, F2, F3 } +#define MATRIX_COL_PINS { F5, F6, F7, A0, A1, A2, A3, A4, A5, B7, B6, B5 } //F5, F7, B7, B5 are unused on the MCU. They are needed for the encoder key matrix. +#define UNUSED_PINS - /* key matrix pins */ - #define MATRIX_ROW_PINS { F0, F1, F2, F3 } - #define MATRIX_COL_PINS { F5, F6, F7, A0, A1, A2, A3, A4, A5, B7, B6, B5 } //F5, F7, B7, B5 are unused on the MCU. They are needed for the encoder key matrix. - #define UNUSED_PINS +/* encoder pins */ +#define ENCODERS_PAD_A { C0, C3, C5, C7, D1, D3, D5, D6, A7 } //Encoder pads ordered so on VIA mapping it is cw/ccw and up/down rotation orientation. +#define ENCODERS_PAD_B { C1, C2, C4, C6, D0, D2, D4, D7, A6 } +#define ENCODER_RESOLUTIONS { 4, 4, 4, 4, 4, 4, 4, 2, 2 } //Better control of individual encoders and encoder types. +//#define ENCODER_RESOLUTION 4 - /* encoder pins */ - #define ENCODERS_PAD_A { C0, C3, C5, C7, D1, D3, D5, D6, A7 } //Encoder pads ordered so on VIA mapping it is cw/ccw and up/down rotation orientation. - #define ENCODERS_PAD_B { C1, C2, C4, C6, D0, D2, D4, D7, A6 } - #define ENCODER_RESOLUTIONS { 4, 4, 4, 4, 4, 4, 4, 2, 2 } //Better control of individual encoders and encoder types. - //#define ENCODER_RESOLUTION 4 +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW - /* COL2ROW or ROW2COL */ - #define DIODE_DIRECTION COL2ROW +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 - /* Set 0 if debouncing isn't needed */ - #define DEBOUNCE 5 +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE - /* 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 - /* Locking resynchronize hack */ - #define LOCKING_RESYNC_ENABLE +#define RGB_DI_PIN E6 +#define RGBLIGHT_ANIMATIONS +#define RGBLIGHT_EFFECT_SNAKE_LENGTH 1 //Default 4 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#define RGBLIGHT_LAYERS +#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF +#define RGBLIGHT_SLEEP // 18 keys, 9*3 encoders = 45 keys +#define RGBLED_NUM 42 // 18 keys + 12 encoders + 12 underglow for RGBLIGHT +#define RGBLIGHT_LIMIT_VAL 180 - #define RGB_DI_PIN E6 - #ifdef RGB_DI_PIN - #define RGBLIGHT_ANIMATIONS - #define RGBLIGHT_HUE_STEP 8 - #define RGBLIGHT_SAT_STEP 8 - #define RGBLIGHT_VAL_STEP 8 - #define RGBLIGHT_LAYERS - #define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF - #define RGBLIGHT_SLEEP // 18 keys, 9*3 encoders = 45 keys - #define RGBLED_NUM 42 // 18 keys + 12 encoders + 12 underglow for RGBLIGHT - #define RGBLIGHT_LIMIT_VAL 180 - - //RGB LED Conversion macro from physical array to electric array - //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping - #define LED_LAYOUT( \ - L01, L03, L05, L07, L08, \ - L10, L11, L12, L13, L14, L15, L16, L17, \ - L20, L21, L22, L23, L24, L25, L26, L27, \ - L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, \ - L41, L46, L47, L49, \ - L58, \ - L67, L68, L69, \ - L77, L79, \ - L88 )\ - { \ - L17,L16,L15,L14,L13,L12,L27,L26,L25,L24,L23,L22,L37,L36,L35,L34,L33,L32,L10,L20,L30,L21,L38,L47,L58,L49,L68,L77,L88,L79,L69,L39,L08,L07,L05,L03,L01,L11,L31,L41,L46,L67, \ - } - //RGB LED logical order map - //Left encoder -> keys -> right encoders -> backlight - #define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 31, 32, 33, 34, 35, \ - 1, 30, 4, 5, 6, 7, 8, 9, \ - 0, 3, 10, 11, 12, 13, 14, 15, \ - 2, 41, 16, 17, 18, 19, 20, 21, 23, 36, \ - 40, 39, 22, 25, \ - 24, \ - 38, 27, 37, \ - 26, 29, \ - 28 ) - #endif - - #ifdef RGB_MATRIX_ENABLE // For dynamic RGB Matrix effects - #define DRIVER_LED_TOTAL 42 // The number of LEDs connected for matrix, 18 keys + 12 encoders + 12 underglow - #define RGB_MATRIX_CENTER { 110, 110 }; - #define RGB_MATRIX_KEYPRESSES - #define DISABLE_RGB_MATRIX_ALPHAS_MODS //Remove effects not desired - #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN - #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT - #define DISABLE_RGB_MATRIX_BAND_SAT - #define DISABLE_RGB_MATRIX_BAND_VAL - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL - #define DISABLE_RGB_MATRIX_CYCLE_ALL - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL - #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON - #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL - #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL - #define DISABLE_RGB_MATRIX_DUAL_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS - #define DISABLE_RGB_MATRIX_RAINDROPS - #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS - #define DISABLE_RGB_MATRIX_HUE_BREATHING - #define DISABLE_RGB_MATRIX_HUE_PENDULUM - #define DISABLE_RGB_MATRIX_HUE_WAVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS - #define DISABLE_RGB_MATRIX_SPLASH - #define DISABLE_RGB_MATRIX_MULTISPLASH - #define DISABLE_RGB_MATRIX_SOLID_SPLASH - #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH - #endif - - -#endif +//RGB LED Conversion macro from physical array to electric array +//First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping +#define LED_LAYOUT( \ + L01, L03, L05, L07, L08, \ + L10, L11, L12, L13, L14, L15, L16, L17, \ + L20, L21, L22, L23, L24, L25, L26, L27, \ + L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, \ + L41, L46, L47, L49, \ + L58, \ + L67, L68, L69, \ + L77, L79, \ + L88 )\ + { \ + L17,L16,L15,L14,L13,L12,L27,L26,L25,L24,L23,L22,L37,L36,L35,L34,L33,L32,L10,L20,L30,L21,L38,L47,L58,L49,L68,L77,L88,L79,L69,L39,L08,L07,L05,L03,L11,L31,L41,L46,L67, \ + } +//RGB LED logical order map +//Left encoder -> keys -> right encoders -> backlight +#define RGBLIGHT_LED_MAP LED_LAYOUT( \ + 31, 32, 33, 34, 35, \ +3, 30, 4, 5, 6, 7, 8, 9, \ +0, 2, 10, 11, 12, 13, 14, 15, \ +1, 41, 16, 17, 18, 19, 20, 21, 25, 36, \ + 40, 39, 22, 24, \ + 23, \ + 38, 29, 37, \ + 26, 28, \ + 27 ) diff --git a/keyboards/solartempest/9e/keymaps/default/keymap.c b/keyboards/solartempest/9e/keymaps/default/keymap.c deleted file mode 100644 index 916fa70260df..000000000000 --- a/keyboards/solartempest/9e/keymaps/default/keymap.c +++ /dev/null @@ -1,208 +0,0 @@ -#include "A9e.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - KEYMAP( - KC_L, KC_1, KC_R, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_L, KC_4, KC_R, - KC_L, KC_2, KC_R, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_L, KC_5, KC_R, - KC_L, KC_3, KC_R, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_L, KC_6, KC_R, - KC_UP, KC_8, KC_DOWN, RGB_VAI, KC_9, RGB_VAD, KC_L, KC_7, KC_R), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - - - switch (id) { - - } - return MACRO_NONE; -} - -void matrix_init_user(void) { -} - -void matrix_scan_user(void) { -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} - -void encoder_update_user(uint8_t index, bool clockwise) -{ - if (index == 0) { /* First encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 0)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 2)); - } - } else if (index == 1) { /* Second encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 0)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 2)); - }} else if (index == 2) { /* 3 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 0)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 2)); - }} else if (index == 3) { /* 4 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 9)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 11)); - }} else if (index == 4) { /* 5 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 9)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 11)); - }} else if (index == 5) { /* 6 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 9)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 11)); - }} else if (index == 6) { /* 7 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 9)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 11)); - }} else if (index == 7) { /* 8 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 3)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 5)); - }} else if (index == 8) { /* 9 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 6)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 8)); - } - } -} - - - -void led_set_user(uint8_t usb_led) { - - if (usb_led & (1 << USB_LED_NUM_LOCK)) { - - } else { - - } - - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - - } else { - - } - - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - - } else { - - } - - if (usb_led & (1 << USB_LED_COMPOSE)) { - - } else { - - } - - if (usb_led & (1 << USB_LED_KANA)) { - - } else { - - } - -} \ No newline at end of file diff --git a/keyboards/solartempest/9e/keymaps/via/keymap.c b/keyboards/solartempest/9e/keymaps/via/keymap.c index 6b53279aa6bd..0f44b1bea9f8 100644 --- a/keyboards/solartempest/9e/keymaps/via/keymap.c +++ b/keyboards/solartempest/9e/keymaps/via/keymap.c @@ -1,8 +1,32 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . +*/ + #include "A9e.h" -#include QMK_KEYBOARD_H #ifdef RGBLIGHT_ENABLE extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT + + bool is_encoder1_rotate = false; // For encoder animated LEDs + bool is_encoder6_rotate = false; + bool is_encoder7_rotate = false; + bool encoder_effect = false; + uint16_t encoder_timer = 0; + uint16_t encoder_interval = 500; #endif @@ -31,7 +55,7 @@ uint16_t alt_tab_timer = 0; // E3 Keys Row 3 // E8 E9 E7 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( + [0] = LAYOUT( KC_LEFT, KC__MUTE, KC_RIGHT, //Rotary Encoder 1 TO(1), TO(2), TO(3), KC_P7, KC_P8, KC_P9, //Keys Row 1 RGB_VAD, KC_SPACE, RGB_VAI, //Rotary Encoder 4 @@ -45,7 +69,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { C(KC_PMNS), KC__MUTE, C(KC_PPLS), //Rotary Encoder 9 C(S(KC_TAB)), C(KC_T), C(KC_TAB) //Rotary Encoder 7 ), - KEYMAP( + [1] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -59,7 +83,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [2] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -73,7 +97,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [3] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -87,7 +111,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [4] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -101,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [5] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -115,7 +139,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [6] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -129,7 +153,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [7] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -143,7 +167,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [8] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -157,7 +181,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [9] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -174,12 +198,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -/*const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { //Code is not required - switch (id) { - } - return MACRO_NONE; -}*/ - void matrix_init_user(void) { } @@ -190,6 +208,36 @@ void matrix_scan_user(void) { is_alt_tab_active = false; } } + + #ifdef RGBLIGHT_ENABLE //Add rotation animations underneath rotary encoders when turning + if (!encoder_effect && is_encoder1_rotate) { //Turn on the effect for encoder 1 + rgblight_set_effect_range(0, 4); + rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); + is_encoder1_rotate = false; + encoder_effect = true; + } else if (!encoder_effect && is_encoder6_rotate) { //Turn on the effect for encoder 6 + rgblight_set_effect_range(22, 4); + rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); + is_encoder6_rotate = false; + encoder_effect = true; + } else if (!encoder_effect && is_encoder7_rotate) { //Turn on the effect for encoder 7 + rgblight_set_effect_range(26, 4); + rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); + is_encoder7_rotate = false; + encoder_effect = true; + } else if (!is_encoder1_rotate && !is_encoder6_rotate && !is_encoder7_rotate && timer_elapsed(encoder_timer) > encoder_interval) { //Turn off the effect + rgblight_set_effect_range(0, 41); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); + is_encoder1_rotate = false; + is_encoder6_rotate = false; + is_encoder7_rotate = false; + encoder_effect = false; + } else { + is_encoder1_rotate = false; //Wait until encoder is turned again + is_encoder6_rotate = false; + is_encoder7_rotate = false; + } + #endif } bool process_record_user(uint16_t keycode, keyrecord_t *record) { @@ -252,10 +300,14 @@ bool encoder_update_user(uint8_t index, bool clockwise) if (clockwise) { action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + is_encoder1_rotate = true; + encoder_timer = timer_read(); } else { action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + is_encoder1_rotate = true; + encoder_timer = timer_read(); } } else if (index == 1) { /* 2 encoder */ @@ -302,20 +354,28 @@ bool encoder_update_user(uint8_t index, bool clockwise) if (clockwise) { action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + is_encoder6_rotate = true; + encoder_timer = timer_read(); } else { action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + is_encoder6_rotate = true; + encoder_timer = timer_read(); } } else if (index == 6) { /* 7 encoder */ if (clockwise) { action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + is_encoder7_rotate = true; + encoder_timer = timer_read(); } else { action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + is_encoder7_rotate = true; + encoder_timer = timer_read(); } } else if (index == 7) { /* 8 encoder */ @@ -342,76 +402,66 @@ bool encoder_update_user(uint8_t index, bool clockwise) } -#ifdef RGBLIGHT_ENABLE - // RGB Layer Light Settings - Note that this will fix the key switches with same LED colour and brightness - const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 95,255,90}); //Spring green - const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 30,255,120}); //Yellow-orange - const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 128,255,100}); //Cyan - const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 215,255,120}); //Magenta - const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 2, 43,100,160}); //White-left caps lock indication (No dedicated LED) - const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({8, 2, 43,100,150}); //White-right num lock indication (No dedicated LED) - const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({6, 2, 43,100,160}); //White-middle scroll lock indication (No dedicated LED) - const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers - my_layer0_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_capslock_layer, //Highest status indicators override other layers - my_numlock_layer, - my_scrollock_layer - ); -#endif +// RGB Layer Light Settings - Note that this will fix the key switches with same LED colour and brightness +const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 95,255,90}); //Spring green +const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 30,255,120}); //Yellow-orange +const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 128,255,100}); //Cyan +const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 215,255,120}); //Magenta +const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 2, 43,100,160}); //White-left caps lock indication (No dedicated LED) +const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({8, 2, 43,100,150}); //White-right num lock indication (No dedicated LED) +const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({6, 2, 43,100,160}); //White-middle scroll lock indication (No dedicated LED) + + +const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers + my_layer0_layer, + my_layer1_layer, + my_layer2_layer, + my_layer3_layer, + my_capslock_layer, //Highest status indicators override other layers + my_numlock_layer, + my_scrollock_layer +); + void keyboard_post_init_user(void) { - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE rgblight_layers = my_rgb_layers;// Enable the LED layers rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 layer_move(0); //start on layer 0 to get the lighting activated - #endif } -#ifdef RGBLIGHT_ENABLE - layer_state_t layer_state_set_user(layer_state_t state) - { - rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active - rgblight_set_layer_state(1, layer_state_cmp(state, 1)); - rgblight_set_layer_state(2, layer_state_cmp(state, 2)); - rgblight_set_layer_state(3, layer_state_cmp(state, 3)); - - switch(biton32(state)){ // Change all other LEDs based on layer state as well - case 0: - rgblight_sethsv_noeeprom(50,255,30); - break; - case 1: - rgblight_sethsv_noeeprom(30,255,30); - break; - case 2: - rgblight_sethsv_noeeprom(106,255,30); - break; - case 3: - rgblight_sethsv_noeeprom(215,255,30); - break; - default: - rgblight_sethsv_noeeprom(64,255,30); - } - return state; - } +layer_state_t layer_state_set_user(layer_state_t state) +{ + rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active + rgblight_set_layer_state(1, layer_state_cmp(state, 1)); + rgblight_set_layer_state(2, layer_state_cmp(state, 2)); + rgblight_set_layer_state(3, layer_state_cmp(state, 3)); + + switch(biton32(state)){ // Change all other LEDs based on layer state as well + case 0: + rgblight_sethsv_noeeprom(50,255,30); + break; + case 1: + rgblight_sethsv_noeeprom(30,255,30); + break; + case 2: + rgblight_sethsv_noeeprom(106,255,30); + break; + case 3: + rgblight_sethsv_noeeprom(215,255,30); + break; + default: + rgblight_sethsv_noeeprom(64,255,30); + } + return state; +} - bool led_update_user(led_t led_state) - { - rgblight_set_layer_state(4, led_state.caps_lock); //Activate capslock lighting layer - rgblight_set_layer_state(5, !(led_state.num_lock)); //Invert the indication so numlock does not always appear "on". - rgblight_set_layer_state(6, led_state.scroll_lock); //Activate scrollock lighting layer - return true; - } -#endif + +bool led_update_user(led_t led_state) +{ + rgblight_set_layer_state(4, led_state.caps_lock); //Activate capslock lighting layer + rgblight_set_layer_state(5, !(led_state.num_lock)); //Invert the indication so numlock does not always appear "on". + rgblight_set_layer_state(6, led_state.scroll_lock); //Activate scrollock lighting layer + return true; +} diff --git a/keyboards/solartempest/9e/readme.md b/keyboards/solartempest/9e/readme.md index 38b472d3326a..30353b2d00a1 100644 --- a/keyboards/solartempest/9e/readme.md +++ b/keyboards/solartempest/9e/readme.md @@ -12,8 +12,9 @@ For detailed instructions on using VIA and flashing, please refer to the section # Custom Features: -- 9 remappable rotary encoder controling a variety of different things! +- 9 remappable rotary encoder controlling a variety of different things! - RGB underglow support and remapped to physical locations. +- When turning the 3 large rotary encoders the RGB LEDs underneath animate. - Adds custom layer lighting with custom gradients for each and static colours for the switches. - Adds white caps lock, scroll lock, and num lock key indicators on the top row. - VIA support included by default. @@ -32,6 +33,7 @@ Make example for this keyboard (after setting up your build environment): - You will need to use an ISP Programmer to directly flash the 9e. No board reset is required, as you will flash the MCU directly. - I used Prog ISP V2.0 but other AVR programmers will also work. - Use a 12P AWM 20624 ribbon cable with FCP-12P-1.0mm breakout board. Only 10 pins are used. +- Plug in the ribbon cable with the data pins facing away from the PCB. ## Using with VIA diff --git a/keyboards/solartempest/9e/rules.mk b/keyboards/solartempest/9e/rules.mk index 782755a42c25..5c83fafe8829 100644 --- a/keyboards/solartempest/9e/rules.mk +++ b/keyboards/solartempest/9e/rules.mk @@ -44,20 +44,18 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096 # Build Options # comment out to disable the options. -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -TERMINAL_ENABLE = no # Terminal interface feature, very large. -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -RGBLIGHT_ENABLE = no # RGB LEDs -RGB_MATRIX_ENABLE = no # RGB matrix for individual LED control (In progress only) -RGB_MATRIX_DRIVER = WS2812 # Addressable LED strand driver -RGBLIGHT_SLEEP = yes # LEDs off when sleeping -NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -KEY_LOCK_ENABLE = no # Key lock functionality -ENCODER_ENABLE = yes # Encoders -LTO_ENABLE = yes # Save space -LEADER_ENABLE = no # Leader keys -COMBO_ENABLE = no # Combo keys -UNICODE_ENABLE = no # Unicode +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +TERMINAL_ENABLE = no # Terminal interface feature, very large. +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +RGBLIGHT_ENABLE = yes # RGB LEDs +RGBLIGHT_SLEEP = yes # LEDs off when sleeping +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +KEY_LOCK_ENABLE = no # Key lock functionality +ENCODER_ENABLE = yes # Encoders +LTO_ENABLE = yes # Save space +LEADER_ENABLE = no # Leader keys +COMBO_ENABLE = no # Combo keys +UNICODE_ENABLE = no # Unicode \ No newline at end of file diff --git a/keyboards/solartempest/9e/solartempest_9e_via.hex b/keyboards/solartempest/9e/solartempest_9e_via.hex new file mode 100644 index 000000000000..2a587000b62c --- /dev/null +++ b/keyboards/solartempest/9e/solartempest_9e_via.hex @@ -0,0 +1,1613 @@ +:100000000C94A3040C94EA040C94EA040C94EA04FF +:100010000C94EA040C94EA040C94EA040C94EA04A8 +:100020000C94EA040C94EA040C94F8280C94B42878 +:100030000C94F3290C94EA040C94EA040C94EA045A +:100040000C94EA040C94EA040C94EA040C94EA0478 +:100050000C94EA040C94CF290C94EA040C94EA045E +:100060000C94EA040C94EA040C94EA040C94EA0458 +:100070000C94EA040C94EA040C94EA040C94EA0448 +:100080000C94EA040C94EA040C94EA040C94EA0438 +:100090000C94EA040C94EA0406022B64A0FF00000E +:1000A000000008022B6496FF0000000004022B648D +:1000B000A0FF000000000412D7FF78FF000000003E +:1000C000041280FF64FF0000000004121EFF78FF8E +:1000D0000000000004125FFF5AFF0000000005014D +:1000E0000902A10185020901A100050919012908D8 +:1000F00015002501950875018102050109300931B6 +:100100001581257F95027508810609381581257F9F +:10011000950175088106050C0A38021581257F9521 +:100120000175088106C0C005010980A10185031978 +:10013000012AB700150126B700950175108100C08E +:10014000050C0901A101850419012AA00215012647 +:10015000A002950175108100C005010906A1018565 +:1001600005050719E029E7150025019508750181A6 +:10017000020507190029EF1500250195F075018189 +:10018000020508190129059505750191029501756A +:10019000039101C00660FF0961A1010962150026F3 +:1001A000FF009520750881020963150026FF009560 +:1001B0002075089102C005010906A101050719E093 +:1001C00029E715002501950875018102950175083B +:1001D00081010507190029FF150026FF0095067506 +:1001E00008810005081901290595057501910295F9 +:1001F0000175039101C00000000000000000000034 +:1002000000000000000000000000000000000000EE +:10021000000000000000000000007E0F00D4FFFF7F +:10022000FFC70000007800000000000000002A2B3B +:100230002800000000000000000000000000000096 +:100240000029000000002C1E3420212224342627FF +:10025000252E362D3738271E1F2021222324252620 +:100260003333362E37381F0405060708090A0B0CEE +:100270000D0E0F101112131415161718191A1B1C36 +:100280001D2F3130232D350405060708090A0B0CF4 +:100290000D0E0F101112131415161718191A1B1C16 +:1002A0001D2F3130354CD400CA00C000B600AC0060 +:1002B000A2009800000000047F3F1F6432146432E3 +:1002C00014783C1E1E140A05000101010101010100 +:1002D00001010202020202020202020303030303FB +:1002E00003030304040404040404050505050506CA +:1002F0000606060607070707070808080809090988 +:10030000090A0A0A0B0B0B0C0C0C0D0D0D0E0E0E30 +:100310000F0F0F10101111111212131314141515C1 +:1003200016161717181819191A1A1B1B1C1D1D1E33 +:100330001E1F202021222223242425262627282987 +:10034000292A2B2C2D2D2E2F3031323233343536B5 +:100350003738393A3B3C3D3E3F40414243444546B5 +:100360004748494A4C4D4E4F505153545556585991 +:100370005A5B5D5E5F616264656668696B6C6D6F38 +:100380007072737577787A7B7D7E808283858788AB +:100390008A8C8E8F91939596989A9C9EA0A2A3A5E5 +:1003A000A7A9ABADAFB1B3B5B7BABCBEC0C2C4C6E6 +:1003B000C9CBCDCFD1D4D6D8DBDDDFE2E4E7E9EBA2 +:1003C000EEF0F3F5F8FAFDFFFFAA7F5540090807A4 +:1003D0000605040F0E0D0C0B0A1514131211100351 +:1003E000000102191617181D1A1B1C25242322218F +:1003F000201E292827262223252628292A2C2D2F8E +:100400003032333536383A3B3D3E4042434547492A +:100410004A4C4E5051535557595A5C5E606264665F +:1004200068696B6D6F71737577797B7D7F8183856B +:1004300087898A8C8E90929496989A9C9E9FA1A36D +:10044000A5A7A8AAACAEAFB1B3B4B6B8B9BBBCBE91 +:10045000BFC1C2C3C5C6C7C9CACBCCCDCED0D1D20D +:10046000D2D3D4D5D6D7D7D8D9D9DADADBDBDBDC0F +:10047000DCDCDCDCDDDDDDDDDCDCDCDCDCDBDBDBBB +:10048000DADAD9D9D8D7D7D6D5D4D3D2D2D1D0CE1B +:10049000CDCCCBCAC9C7C6C5C3C2C1BFBEBCBBB920 +:1004A000B8B6B4B3B1AFAEACAAA8A7A5A3A19F9E9E +:1004B0009C9A98969492908E8C8A89878583817F66 +:1004C0007D7B79777573716F6D6B69686664626047 +:1004D0005E5C5A5957555351504E4C4A4947454313 +:1004E00042403E3D3B3A3836353332302F2D2C2AB0 +:1004F00029282625232250007F004F00115012503A +:1005000013505F0060006100CA5C2C00C95CC45CD1 +:10051000C25CC35C3900470053005C005D005E00B4 +:10052000C65C3D04C55C815FAD00805FB900B3006F +:10053000620059005A005B00F9001A01FA0000003D +:10054000000000002B034A002B0156017F005701D9 +:100550002B0317012B0101000100010010500100C5 +:100560000100010001000100010001000100010083 +:100570000100010001000100010001000100010073 +:100580000100010001000100010001000100010063 +:100590000100010001000100010001000100000054 +:1005A0000000000001000100010001000100010045 +:1005B00001000100010001000100010010500100D4 +:1005C0000100010001000100010001000100010023 +:1005D0000100010001000100010001000100010013 +:1005E0000100010001000100010001000100010003 +:1005F00001000100010001000100010001000000F4 +:1006000000000000010001000100010001000100E4 +:100610000100010001000100010001001050010073 +:1006200001000100010001000100010001000100C2 +:1006300001000100010001000100010001000100B2 +:1006400001000100010001000100010001000100A2 +:100650000100010001000100010001000100000093 +:100660000000000001000100010001000100010084 +:100670000100010001000100010001000100010072 +:100680000100010001000100010001000100010062 +:100690000100010001000100010001000100010052 +:1006A0000100010001000100010001000100010042 +:1006B0000100010001000100010001000100000033 +:1006C0000000000001000100010001000100010024 +:1006D0000100010001000100010001000100010012 +:1006E0000100010001000100010001000100010002 +:1006F00001000100010001000100010001000100F2 +:1007000001000100010001000100010001000100E1 +:1007100001000100010001000100010001000000D2 +:1007200000000000010001000100010001000100C3 +:1007300001000100010001000100010001000100B1 +:1007400001000100010001000100010001000100A1 +:100750000100010001000100010001000100010091 +:100760000100010001000100010001000100010081 +:100770000100010001000100010001000100000072 +:100780000000000001000100010001000100010063 +:100790000100010001000100010001000100010051 +:1007A0000100010001000100010001000100010041 +:1007B0000100010001000100010001000100010031 +:1007C0000100010001000100010001000100010021 +:1007D0000100010001000100010001000100000012 +:1007E0000000000001000100010001000100010003 +:1007F00001000100010001000100010001000100F1 +:1008000001000100010001000100010001000100E0 +:1008100001000100010001000100010001000100D0 +:1008200001000100010001000100010001000100C0 +:1008300001000100010001000100010001000000B1 +:1008400000000000010001000100010001000100A2 +:100850000100010001000100010001000100010090 +:100860000100010001000100010001000100010080 +:100870000100010001000100010001000100010070 +:100880000100010001000100010001000100010060 +:100890000100010001000100010001000100000051 +:1008A0000000000001000100010001000100010042 +:1008B00001000100010009025B00030100A0FA0928 +:1008C000040000010301010009211101000122407F +:1008D000000705810308000A090401000203000063 +:1008E00000092111010001222200070582032000D6 +:1008F00001070503032000010904020001030000B1 +:100900000009211101000122B6000705840320001F +:100910000A12010002000000084B41090001000119 +:100920000200010803410039006500000012034184 +:100930000074006C0061006E0074006900730000B8 +:1009400000040309040011241FBECFEFD0E1DEBF75 +:10095000CDBF04B603FE27C080915E0390915F0374 +:10096000A0916003B09161038730904BA740B04BDA +:10097000D1F410925E0310925F0310926003109204 +:10098000610314BE84B7877F84BF0FB6F894A8951F +:1009900080916000886180936000109260000FBEBB +:1009A000E0E0F8E7099523E0AEEBB1E001C01D926D +:1009B000AE35B207E1F711E0A0E0B1E0E6EFF3E613 +:1009C00002C005900D92AE3BB107D9F70E941A2ADA +:1009D0000C94C2310C940000E8EDF0E080818C7F33 +:1009E00080831092E2001092DA001092E100A0EEF3 +:1009F000B0E08C9181608C9380818F77808319BC6B +:100A0000A7EDB0E08C918E7F8C9380818F7E808368 +:100A100010922A0308952091E4003091E50095E6B4 +:100A2000A9012091EC00822F817020FF06C08091E7 +:100A3000E80080FF06C080E008952091E80022FDD4 +:100A40001AC080914F03882389F0853089F0809106 +:100A5000EB0085FD0FC02091E4003091E5004217C6 +:100A60005307F9F29150E1F684E0089582E0089589 +:100A700083E0089581E00895EF92FF920F931F9312 +:100A8000CF937C018B010E940B05C82F811117C0E9 +:100A90008091E80085FD0BC08091E8008E778093FF +:100AA000E8000E940B05882399F3C82F08C0F701BE +:100AB00081917F018093F1000150110949F78C2F3A +:100AC000CF911F910F91FF90EF9008958091510366 +:100AD00087FF13C08091E80082FF06C08091E80084 +:100AE0008B778093E80004C080914F038111F2CF8F +:100AF000089580914F038823D9F38091E80080FF07 +:100B0000F8CF8091E8008E77ECCF982F9093E90092 +:100B1000242F762F50E0891731F07091EC0020914E +:100B2000ED005091F00021FD07C09F5F973071F7F5 +:100B30008093E90081E008953091EB003E7F30938F +:100B4000EB003091ED003D7F3093ED003091EB00F4 +:100B500031603093EB007093EC002093ED005093E4 +:100B6000F0002091EE0027FDE0CF80E00895CF92C5 +:100B7000DF92EF92FF920F931F93CF93DF93C8ED15 +:100B8000D0E088818F7E8883E7EDF0E0808181600E +:100B9000808381E080932A0388818C7F888302EEA2 +:100BA00010E0D8011C921092DA0081EEC82ED12CF0 +:100BB000D6011C9288818F7788838881806888839A +:100BC00088818F7D888380818068808319BC1092A2 +:100BD0004F031092500310924E0310924D0390EE6B +:100BE000E92EF12CF70180818B7F808388818160E1 +:100BF000888342E060E080E00E948505D6018C9108 +:100C00008E7F8C93F80180818160808380818860F1 +:100C10008083D7018C918E7F8C93888180618883BB +:100C2000DF91CF911F910F91FF90EF90DF90CF90C8 +:100C30000895FC01809157039091580386179707F8 +:100C4000A0F06115710529F49091E8009E779093CA +:100C5000E80090E06115710551F4911108C0809190 +:100C6000E80082FF33C080E00895BC01F2CF80919C +:100C70004F038823B9F18530B9F18091E80083FDF5 +:100C80002FC08091E80082FDEACF8091E80080FFCC +:100C9000E1CF2091F2003091F3006115710519F058 +:100CA0002830310558F091E02830310509F090E006 +:100CB0002091E8002E772093E800CCCF819180939B +:100CC000F100615071092F5F3F4FE7CF80914F03D3 +:100CD000882341F0853041F08091E80083FFBFCF49 +:100CE00081E0089582E0089583E0089580912C03C7 +:100CF00008959C014FB7F8948091210390912203AD +:100D0000A0912303B09124034FBF821B930B08953E +:100D10002FB7F8948091210390912203A09123038F +:100D2000B09124032FBF089520911E0330911F031B +:100D30002817390771F090931F0380931E03E091E9 +:100D40001C03F0911D03309721F00084F185E02D04 +:100D50000994089520911A0330911B03281739072D +:100D600071F090931B0380931A03E0911C03F091A0 +:100D70001D03309721F00680F781E02D0994089536 +:100D8000E0911C03F0911D03309721F00190F08158 +:100D9000E02D099480E00895FA01811101C0FB0162 +:100DA0000994089580911503982F9E7F61F48170B6 +:100DB00082608093150380911803853B18F084EBC3 +:100DC0008093180308958A34B0F381708864F1CF5A +:100DD000AF92BF92DF92EF92FF920F931F93CF9348 +:100DE000DF93182F062FE901453B08F044EBE42F71 +:100DF000F0E0E853FD4F011110C0E4915E2F4E2F3B +:100E00004983E8835A83DF91CF911F910F91FF901F +:100E1000EF90DF90BF90AF900895202F30E0449185 +:100E2000D42EE42EF12C56E0159FC0011124EFEFD3 +:100E3000F0E0BF010E94C330812F90E0880F991F1E +:100E400055E5569FD001579FB00D11248A1B9B0B6F +:100E5000982F990F890F5F01A21AB30AAE9CD00197 +:100E6000AF9CB00DBE9CB00D11245B2F089F80017C +:100E70001124012F11275F01A01AB10AAE9C800135 +:100E8000AF9C100DBE9C100D11245F01A81AB10873 +:100E9000A29EC001A39E900DB29E900D1124892F99 +:100EA0009927E81BF90BEE9DC001EF9D900DFE9D6B +:100EB000900D1124E92F62307105A1F050F46115F5 +:100EC000710509F49DCF6130710581F0EB2F512F31 +:100ED00097CF6430710569F080F06630710509F4D0 +:100EE0008FCFF4CFE42F4B2F592F8ACFE42F412FF0 +:100EF00087CFEB2F542F492F83CF4B2F5D2DE12F21 +:100F00007FCF0E9488069C01909184028091850287 +:100F1000982B21F0309381022093800290918602D9 +:100F200080918702982B21F030937F0220937E02DC +:100F3000E0911C03F0911D03309749F082E080930B +:100F400082020480F581E02D82E892E00994089500 +:100F500040918402803F59F48091850287FF0DC043 +:100F60001092850241110BC010927C0208C0813F93 +:100F700081F48091850218169CF3442381F08091BE +:100F8000860290918702892B09F05AC010927B0249 +:100F90000895823F49F447FFF0CF10928402809178 +:100FA00085028111ECCFE0CF833F19F41416ACF326 +:100FB000E4CF90918602893F29F41916F4F6109235 +:100FC0008602DBCF8A3F19F497FFD7CFF8CF9091F5 +:100FD00087028B3F29F497FFD0CF10928702CDCFA5 +:100FE0008C3F19F41916CCF3C8CF9CE0980F9530BC +:100FF00090F4845F990B21E030E0B90102C0660FE4 +:10100000771F8A95E2F7CB0180959091830289231F +:1010100080938302B2CF8D3F31F480917D028E7F29 +:1010200080937D02AACF8E3F21F480917D028D7F37 +:10103000F7CF8F3F09F0A1CF80917D028B7FF0CF5A +:10104000089580917D0280FD16C081FD16C082FD4D +:1010500016C080917B028823A1F0883280F428E0BA +:10106000829FC001112468E270E00E94D730862F71 +:10107000672B39F0089582E0089584E0089588E0B0 +:10108000089581E0089580917D0280FD14C081FD66 +:1010900014C082FD16C080917C02882381F08431C7 +:1010A00080F422E3829FC001112464E170E00E9479 +:1010B000D730862F08958CE0089589E1089585E062 +:1010C000089582E30895803F31F40E94430881959A +:1010D000809385020895813F19F40E944308F8CF58 +:1010E000823F31F40E9443088195809384020895E1 +:1010F000833F19F40E944308F8CF893F29F40E94E6 +:1011000021088093860208958A3F21F40E942108D5 +:101110008195F7CF8B3F31F40E9421088195809310 +:10112000870208958C3F19F40E942108F8CF9CE0B3 +:10113000980F953070F4845F990B21E030E001C086 +:10114000220F8A95EAF780918302822B8093830293 +:1011500008958D3F31F480917D02816080937D02FE +:1011600008958E3F21F480917D028260F7CF8F3FFA +:10117000B9F780917D028460F1CF80E00895F89402 +:10118000E82FE295EF70F0E031A1282F2F7081E079 +:1011900090E001C0880F2A95EAF7982F9095932345 +:1011A00091A392A1892B82A378940895909125030D +:1011B00092FF06C0282F28712830F9F4877F8460B9 +:1011C00093FF06C0282F28712831F1F4877E8461AF +:1011D0002091260320FF06C0382F38713830D9F40B +:1011E000877F816021FF06C0282F28712831D1F424 +:1011F000877E816194FD877E0895282F2471243095 +:10120000F9F68B7F8860DCCF282F2471243101F719 +:101210008B7E8861DDCF382F3171313019F78E7FA9 +:101220008860E0CF282F2171213121F78E7E8861DF +:10123000E1CFCF93DF93EC0182389105A9F1D8F586 +:101240008133910509F496C048F58932910509F476 +:101250008AC08A9709F495C0C11521E5D20708F024 +:10126000BCC0C11530E5D30708F014C1C83ED10594 +:1012700008F09CC0C03ED10560F5C83AD10508F021 +:1012800087C0C53AD10508F0FDC0C130D10509F1CC +:101290002097F9F0C430D105E0F440C085339105C2 +:1012A00009F45AC0C997C1F680912503837089F06B +:1012B000C0EED0E00EC0833E910599F170F4803EFF +:1012C000910501F1823E910539F68091250382FD59 +:1012D00021C0CE01DF91CF910895863E910561F145 +:1012E000873E910571F1843E910509F0B5CF80915B +:1012F000260381FFEECF80912503C7EED0E084FD69 +:101300000DC0E7CF8091250380FD12C19091260387 +:1013100090FFDFCFC3EED0E084FFDBCFD0E0C0E0B2 +:10132000D8CF8091250382FD06C19091260390FDC0 +:10133000BFCF84FFCECFF2CF8091250383FDDDCFD9 +:10134000C8CF8091250383FDF9C09091260391FFBA +:10135000F0CFC4EED0E0BDCF8091250385FFB9CF9B +:10136000C9E2D0E0B6CF8091250385FFB2CFC5E3B7 +:10137000D0E0AFCF8091250386FFABCFCAE2D0E0AB +:10138000A8CF8091250386FFA4CFC1E3D0E0A1CFF1 +:10139000CF3BD10518F6C85AD0E0CC0FDD1FCF5D8A +:1013A000DE4F0990D881C02DD46493CFC11540E29F +:1013B000D40758F4C11581E0D80708F08ACFC03FA0 +:1013C000D10508F4ABCFD06584CFC11590E4D9071F +:1013D00008F4A4CFDF70D06A7CCFC11525E5D20711 +:1013E00000F5C11534E5D30708F08AC0C11543E5FF +:1013F000D40708F071C0C11582E5D80708F467C0AA +:10140000CE018370992721E030E002C0220F331F04 +:101410008A95E2F7C695C69580E2C89FE00111243F +:1014200052C0C11599E5D907A8F4C11528E5D2071E +:1014300008F06BC0C11536E5D30708F06FCF8C2FCD +:101440000E94D608C82FD0E0DC2FCC27CC27DF7134 +:10145000D0623FCFC1154AE5D40708F45BC0CE0186 +:1014600090568115904208F059CF8D2F8F710E94B0 +:10147000D60890E0982F882788279F719C012C2BF5 +:10148000E901E6CFC55AD0E0C25EDE4FC881D0E0A8 +:10149000D0641FCFCE01E4E096958795EA95E1F7F9 +:1014A00083702C2F26952695237040E2249F90016F +:1014B0001124382B8C2F8370C1E0D0E002C0CC0FF8 +:1014C000DD1F8A95E2F7C22BD32BDC6802CFDC2F1D +:1014D000CC27C16FD06AFDCECE018370992721E061 +:1014E00030E002C0220F331F8A95E2F7C695C695F9 +:1014F00090E2C99FE0011124C22BD32BDA68E9CE18 +:10150000DC2FCC27C46FD06AE4CEDC2FCC27C06F91 +:10151000D06ADFCE8C2F8F700E94D60834E0D6952B +:10152000C7953A95E1F7CF709C2FEC01D069D1CEE9 +:10153000C9E3D0E0CECEC2EED0E0CBCEC6EED0E056 +:10154000C8CE8091350281111092350208958091A4 +:10155000340290913302892B90913202892B80932F +:10156000C001909135029923A1F0892B8093C0018D +:1015700080911D01882341F18091250387FF24C0BC +:101580008EE1E2ECF1E090E0815000F591110E94D3 +:10159000A10AE0911C03F0911D033097E1F08091C6 +:1015A0001D01882359F08091250387FF07C0809192 +:1015B000C0018093C10185E08093C0010280F38166 +:1015C000E02D80EC91E0099486E0DBCF219122238D +:1015D000D9F29F5FD9CF089590911D019923D1F041 +:1015E0009091250397FF16C0E82FE695E695E695BE +:1015F000EE31E0F4F0E0E054FE4F282F277081E058 +:1016000090E001C0880F2A95EAF78095928189239E +:1016100082830895E2ECF1E09191891303C0DF0128 +:1016200011971C9291E0E83CF907B1F70895909169 +:101630001D019923C1F09091250397FF14C0E82F55 +:10164000E695E695E695EE31F8F4F0E0E054FE4FCD +:10165000877021E030E001C0220F8A95EAF782818D +:10166000822B82830895A2ECB1E0EFEF90E02D9100 +:10167000821751F0EF3F19F4211101C0E92F9F5F4C +:101680009630A9F7EF3F09F408950E2E000CFF0BDA +:10169000E054FE4FE6CF809130029091FF01981305 +:1016A00001C008958F5F8770FACF2CE0929F800D64 +:1016B0001124982F977086958695869524E0829FB1 +:1016C000F0011124EF51FE4F50E040E080E0219105 +:1016D00030E0092E02C0369527950A94E2F7217072 +:1016E0003327042E01C0220F0A94EAF7822B4F5FA2 +:1016F0005F4F4430510559F708952CE0929F800DBB +:101700001124982F977041E001C0440F9A95EAF791 +:1017100086958695869594E0899FF0011124EF5176 +:10172000FE4F90E080E070E05191DF0111979B0146 +:10173000082E02C0369527950A94E2F7217021956C +:101740002527242325272C9301968430910561F7C2 +:10175000089590E080E00E94AA0690E080E00E9458 +:10176000940610923302109232020E94A70A86E079 +:10177000E2E8F2E0DF011D928A95E9F710927C021F +:1017800010927B0210927D020C9481079093370295 +:10179000809336020C94A90B882341F08095909198 +:1017A00034028923809334020C94A70A0895882375 +:1017B00039F090913402982B909334020C94A70A3C +:1017C0000895882309F459C0823871F40E94C00634 +:1017D00081FF53C089E30E94170B0E94A70A89E387 +:1017E0000E94EC0A0C94A70A833859F40E94C006A0 +:1017F00080FF43C083E50E94170B0E94A70A83E580 +:10180000EFCF843859F40E94C00682FF36C087E4C7 +:101810000E94170B0E94A70A87E4E2CF9CEF980F63 +:10182000913AF0F290E2980F983088F4877021E0B6 +:1018300030E0A90102C0440F551F8A95E2F7CA01A2 +:10184000809590913402892380933402CBCF9BE51D +:10185000980F933020F490E080E00C94AA0698E56D +:10186000980F973120F490E080E00C949406803F2C +:1018700020F00E94A8070C948107089590914F03CF +:10188000943029F5809327037093290360932803EC +:101890009093E9008FEF9091E800815095FD06C08C +:1018A00095ED9A95F1F700008111F5CF8091E80050 +:1018B00085FF0DC050E040E063E070E087E293E018 +:1018C0000E943C058091E8008E778093E80008959F +:1018D000BC0184E00C943E0CBC0183E00C943E0CF3 +:1018E0009C0184E08093E9009FEF8091E800915093 +:1018F00085FD06C085ED8A95F1F700009111F5CFC1 +:101900008091E80085FF0CC050E040E066E070E0A8 +:10191000C9010E943C058091E8008E778093E80021 +:101920000895CF93DF93EC0180911D018823B1F1DD +:101930008091250387FF32C060E284E08093E90054 +:101940008FEF9091E800815095FD06C095ED9A9536 +:10195000F1F700008111F5CF8091E80085FF1BC0F1 +:1019600080911D0170E050E040E0811104C050E022 +:1019700040E068E070E0CE010E943C058091E80004 +:101980008E778093E80080E2FE01ADE2B3E0019043 +:101990000D928A95E1F7DF91CF91089568E081E09B +:1019A000CDCF81E08093E00080E28093D800109258 +:1019B000C9008FE19EE40197F1F700C0000087E0C5 +:1019C00090EBDC0180935E0390935F03A093600330 +:1019D000B093610388E19CE00FB6F894A8958093DA +:1019E00060000FBE90936000FFCFCF93C82F882375 +:1019F00009F4AEC08238C1F40E94C00681FDA8C0BF +:101A000089E30E94170B0E94A70A2FEF81EE94E052 +:101A1000215080409040E1F700C0000089E30E941F +:101A2000EC0ACF910C94A70A8338A1F40E94C00657 +:101A300080FD8EC083E50E94170B0E94A70A2FEF3E +:101A400081EE94E0215080409040E1F700C000001A +:101A500083E5E5CF8438A1F40E94C00682FD78C0FA +:101A600087E40E94170B0E94A70A2FEF81EE94E0F3 +:101A7000215080409040E1F700C0000087E4CFCFC4 +:101A80008CEF8C0F813A88F580911D01882301F13C +:101A90008091250387FF1CC0EC2FE695E695E6951F +:101AA000F0E0E054FE4F828190E04C2F477021E03F +:101AB00030E002C0220F331F4A95E2F782239323BE +:101AC000892B79F08C2F0E94EC0A0E94A70A09C08A +:101AD000E2ECF1E08191C817A9F321E0E83CF207BC +:101AE000C9F78C2F0E94170B9CCF80E28C0F883097 +:101AF00068F4C77021E030E001C0220FCA95EAF710 +:101B000080913402822B809334028BCFEBE5EC0F73 +:101B1000E33040F4F0E0E25EFE4F808190E0CF9150 +:101B20000C94AA06E8E5EC0FE73150F4F0E0EE0F74 +:101B3000FF1FEF5DFE4F80819181CF910C94940641 +:101B4000C03F30F08C2F0E946308CF910C94810726 +:101B5000CF9108951F93CF93DF93182FD0E0C0E06B +:101B6000893311F4C0E5D0E0812F0E94F50C209755 +:101B700031F4812FDF91CF911F910C94E10B8FE90C +:101B80009FE00197F1F700C000002197F0CF0F937D +:101B90001F93CF93DF93C62FD42F022FFC01828196 +:101BA0008823A1F060935D030E94880690935C03F4 +:101BB00080935B03C77081E001C0880FCA95EAF784 +:101BC000DF91CF911F910F910C94D70B80915D0302 +:101BD000681335C080915B0390915C030E94790685 +:101BE000883C910560F510E21D0FCD17B9F080E239 +:101BF0008C0F883040F4C77081E001C0880FCA950F +:101C0000EAF70E94CC0B183048F481E09D2F9770C2 +:101C100001C0880F9A95EAF70E94D70B802F0E9487 +:101C2000AA0D183098F4D77081E001C0880FDA95BA +:101C3000EAF7DF91CF911F910F910C94CC0BC770F5 +:101C400081E001C0880FCA95EAF7F3CFDF91CF9109 +:101C50001F910F910895CF93DF93C7EED3E060E01B +:101C6000CE010E944A312196C11588E0D807B9F704 +:101C7000DF91CF9108956F927F928F929F92AF9252 +:101C8000BF92CF92DF92EF92FF920F931F93CF9369 +:101C9000DF9386EFC82E84E0D82E9FE9E92EF12C41 +:101CA000E701C056D10936011BC0F501859094901B +:101CB000692DC8010E944A31682DC80101960E9411 +:101CC0004A3182E0A80EB11C0E5F1F4FC017D1072A +:101CD00061F788E1680E711C6896CE15DF0529F062 +:101CE0008E01085111095301E0CF7E0180E6E80E14 +:101CF000F11C80E6C80ED11C8FE5E81684E0F806DA +:101D000079F6DF91CF911F910F91FF90EF90DF90C7 +:101D1000CF90BF90AF909F908F907F906F900895DD +:101D2000CF93C82F6FEF811161E283E290E00E94B0 +:101D30004A316FEFC11169E084E290E00E944A31BC +:101D40006FEFC11161E185E290E0CF910C944A31CF +:101D500080E00E94900E60E086E290E00E944A31AE +:101D60000E943B0E0E942B0E81E00C94900ECF93AC +:101D7000C0912603C2FB992790F9981781F080FB48 +:101D8000C2F9C09326036091250384E090E00E948D +:101D90004A316C2F82E290E0CF910C944A31CF917E +:101DA00008950F931F93CF93DF93C42FD0E0CC0FF0 +:101DB000DD1F28E1629FC00DD11D112430E6839FF5 +:101DC000C00DD11D1124CE0187960E943631082FF7 +:101DD00010E0102F0027CE0188960E94363198011E +:101DE000282BC901DF91CF911F910F910895462FA4 +:101DF0008A3038F4743028F46C3018F4672F0C945F +:101E0000D10E90E080E00895BF92CF92DF92EF92E2 +:101E1000FF920F931F93CF93DF937C01009159039F +:101E200010915A038091360290913702082B192B9A +:101E3000CFE0D0E0CC24C394D12CBC2EC6010C2E14 +:101E400002C0880F991F0A94E2F780239123892BFF +:101E500071F4219790F7B12C8B2DDF91CF911F91C9 +:101E60000F91FF90EF90DF90CF90BF900895B70152 +:101E70008C2F0E94F70E0E941909019751F3ECCFA5 +:101E8000CF93DF93EC010E94040FBE010E94F70E76 +:101E9000DF91CF910C941909FC01808191810E94FE +:101EA000400F292F2F7092959F7092509E3078F49A +:101EB000E92FF0E0EC53FE4C0C94EB30803F19F02E +:101EC00020F4883E20F481E00895843FE1F380E02F +:101ED0000895883EC0F3813FD1F7F5CF822F8695D4 +:101EE00086958695089583E290E00E94363181328E +:101EF00089F484E290E00E943631893059F485E219 +:101F000090E00E94363191E0813109F090E0892F14 +:101F10008170089580E0FCCFCF9384E090E00E9430 +:101F20003631C82F82E290E00E943631982F8C2FF4 +:101F3000CF91089560911503669570E04BE050E0F5 +:101F40008AE091E00E941C31892B19F481E0809392 +:101F500092020E94880690938C0280938B020895CF +:101F60004F925F926F927F928F929F92AF92BF92A9 +:101F7000CF92DF92EF92FF920F931F93CF93DF9355 +:101F8000CDB7DEB7CE57D1090FB6F894DEBF0FBE7E +:101F9000CDBF509019018091150380FF5DC08090E6 +:101FA000890290908A028114910409F068C0EDECD6 +:101FB000F3E09E012F5F3F4FBE0161587F4FC90183 +:101FC000A4914A2F50E0DA01AA0FBB1FA40FB51F3E +:101FD000A956BD4FCD90DD90EC90D901CD92DD9208 +:101FE000ED929D0131966A177B0751F720911801F8 +:101FF00043E0249F800D911D11246E9A2EB12F7BFA +:102000003EB130645FB7F894BC01549E600D711D01 +:1020100011248617970709F08DC05FBF8FE594E004 +:102020000197F1F700C00000C258DF4F0FB6F894D7 +:10203000DEBF0FBECDBFDF91CF911F910F91FF90FB +:10204000EF90DF90CF90BF90AF909F908F907F9058 +:102050006F905F904F90089580911A0190911B01AD +:1020600023E0829FF0011124E956FD4F891708F003 +:1020700096CF1182108212828F5F3396F7CF8091B4 +:102080008802811194CFD12CC12C66246394712CC9 +:1020900053E0452E8091930293010C2C01C0220F36 +:1020A0000A94EAF7822309F43CC0F601EE0FFF1F01 +:1020B000E80DF91DE590F490E114F10409F477CFEF +:1020C00045E050E0B701CE0101960E94133109812D +:1020D0000F3F39F18A81800F9927991F8B32910523 +:1020E00014F08AE290E05C01AA0CBB1C8A0D9B1DD7 +:1020F000DC01A956BD4F5D01049D800111240956E4 +:102100001D4F0A151B0520F0B5E0EB0EF11CD8CFD2 +:1021100098014D816C818B810E94E8060D5F1F4FF5 +:10212000F0CFEFEFCE1ADE0AF8E0CF16D10409F0B7 +:10213000B1CF3DCFFC014191CF01E8E03EB90000B5 +:1021400000C047FF2EB9440F000000C000C000C00F +:102150002EB900C0EA9591F75CCF0F931F93CF93F0 +:10216000DF93EC0110E000E090911C019017110644 +:1021700009F06CF40E94B00F8C8190E001968170A0 +:1021800099278C83DF91CF911F910F910895209112 +:102190001A01A801420F511D9A01220F331F240F6B +:1021A000351F29563D4F4C816091170380911603CE +:1021B00096959017110651F04CF0442349F0409148 +:1021C00018030E94E8060F5F1F4FCECF4423B9F3D8 +:1021D00040E0F7CF8F929F92AF92BF92CF92DF9263 +:1021E000EF92FF920F931F93CF93DF93EC014C81FB +:1021F000042F10E09801D8010E94B3319B01AC017B +:102200000E947E314B015C01E0E2F0E0E01BF10B4B +:10221000A5E5B0E0AC019B010E947E316B017C0121 +:102220009F01DF010E94F8309B01AC010E948931BF +:102230009B01AC01280D391D4A1D5B1DC701B6016C +:102240000E949131F22E822F90E039E23F1560F129 +:1022500043E0249F9001112435952795122F109566 +:1022600000E085E5E82EEF1880911C01081758F171 +:102270000E94B00F9C8181E0992319F0903219F4EB +:102280008FEF8093170180911701890F8C83DF9165 +:10229000CF911F910F91FF90EF90DF90CF90BF9063 +:1022A000AF909F908F90089525E530E0B901681BAD +:1022B000790B9B01220F331F260F371F37FFCCCF1F +:1022C0002F5F3F4FC9CF8E2D01FD8F2D20911A0119 +:1022D000622F600F7727771F9B01220F331F260F76 +:1022E000371F29563D4F412F609117030E94E80682 +:1022F0000F5FBACF0F931F93CF93DF9380911A0193 +:1023000090911B0123E0829FF0011124E956FD4FBB +:10231000891740F1C0E0D3E060911C01C61740F17D +:102320000E94B00F2091150180919502820F809339 +:10233000950290911601920F90931601191654F47C +:10234000082E000C990B40911C014150550B84172D +:1023500095071CF0219520931501DF91CF911F91D6 +:102360000F9108951182108212828F5F3396D0CF21 +:102370000C2F10E070E0C8010E94D73020911A01A4 +:10238000820F482F50E020919502022E000C330B53 +:1023900002171307BCF020911601022E000C330B1C +:1023A000201731077CF08D9F9001112429563D4F55 +:1023B0004091180360911703809116030E94E8066C +:1023C000CF5FAACFFA01EE0FFF1FE40FF51FE9560A +:1023D000FD4F118210821282F3CF1F93CF93DF93B0 +:1023E000FC018281DFEF80FFD1E0C0E01AE2909132 +:1023F0001C01C91788F00E94B00F80919402D1305F +:10240000C9F5811102C080911C0181508093940212 +:10241000DF91CF911F910895E0911A014C2F50E068 +:102420009A012E0F311DF901EE0FFF1FE20FF31F6E +:10243000E956FD4F118210821282809194028B32F4 +:10244000ACF0612F0E94B530892F082E000C990B3B +:102450004817590749F49F014091180360911703E9 +:10246000809116030E94E806CF5FC1CF87FFEDCFB2 +:10247000890FEBCF90E0019660911C0170E00E9403 +:10248000D730C4CFEF92FF921F93CF93DF93EC012D +:1024900010E0EE24EA94F12C60911C01161770F004 +:1024A0000E94B00F9A818C8190FF27C08F5F8C8330 +:1024B000DF91CF911F91FF90EF90089520911A0125 +:1024C000422F410F5527551FCA019A01220F331F72 +:1024D000280F391F29563D4F70E0C7010E94D730A1 +:1024E000962F8C814091180360911703199F800DDE +:1024F00011240E94E8061F5FCFCF8150D8CF909162 +:10250000150390FF14C090911A0120911B0133E034 +:10251000939FF0011124E956FD4F921710F00C948F +:10252000B00F8183608342839F5F3396F6CF089517 +:102530000F931F93CF93DF9300D00F92CDB7DEB7E9 +:102540008C018091960281110AC09E012F5F3F4F3E +:1025500044EB6FEF0E94E8068A8180939602F801AF +:102560006481613069F08091960240E0662361F0F9 +:1025700040E0623011F44091960280E060E004C0D7 +:102580006091960240E080E00E947F12F801848111 +:1025900090E0019663E070E00E94D73084830F9052 +:1025A0000F900F90DF91CF911F910F910895CF93CE +:1025B000DF9300D00F92CDB7DEB79091150390FF57 +:1025C0000AC09E012F5F3F4F0E94E8064B81698140 +:1025D0008A810E947F120F900F900F90DF91CF9110 +:1025E0000895CF93DF93EC01E5E1F3E0438162814D +:1025F0008C810E94D7128C818F5F8C83DF91CF9169 +:102600000895CF93DF93EC01EC81F0E0EA50FC4FAA +:102610004491E5E1F3E0628181810E94D7128C81CF +:102620008F5F8C83DF91CF910895CF92DF92EF92ED +:10263000FF926B017C010E94D206B701A60188E0DF +:1026400090E0FF90EF90DF90CF900C945C31AF92D0 +:10265000BF92CF92DF92EF92FF920F931F93CF938F +:10266000DF9300D00F92CDB7DEB7182FF62E042FD0 +:10267000E22E9091150390FF29C0E92FE695AE2F29 +:10268000B0E0A657BE4F8C91809391029E7F92300E +:1026900059F59E012F5F3F4F812F0E94E8064B8125 +:1026A00069818A810E947F1210931603F0921703AA +:1026B00000931803EE2051F06091150370911603FA +:1026C00080911703909118030E9415130F900F909B +:1026D0000F90DF91CF911F910F91FF90EF90DF90BE +:1026E000CF90BF90AF900895823019F400911803F5 +:1026F000DBCF863019F410911603D6CF8930D9F389 +:10270000893191F6E9518E2F8170D82EE695F0E04F +:10271000E853FC4FA590B490C12CBB2460911C01E0 +:10272000C61618F00E94B00FBFCF2C2D30E0A29E2D +:10273000C001A39E900DB29E900D112470E00E94E6 +:10274000C330812FD11013C0860F40911A01420F60 +:10275000532F511D9A01220F331F240F351F295665 +:102760003D4F402F6F2D0E94E806C394D7CF861BA4 +:10277000ECCFE5E1F3E0438128E0421B08F440E0C0 +:1027800021E0628181810C942713E5E1F3E043812C +:1027900028E0420F08F44FEF21E0628181810C9420 +:1027A0002713E5E1F3E0628128E0621B08F460E0B2 +:1027B00021E0438181810C942713E5E1F3E06281FC +:1027C00028E0620F08F46FEF21E0438181810C94CF +:1027D0002713E5E1F3E0818121E0438162818850A4 +:1027E0000C942713E5E1F3E0818121E043816281CC +:1027F000885F0C94271380911903882319F0815066 +:10280000809319036091150370911603809117034B +:10281000909118030C94151380911903833018F4C8 +:102820008F5F809319036091150370911603809157 +:102830001703909118030C9415139091150390FFB2 +:1028400036C09170811129C0926090931503662360 +:1028500051F06091150370911603809117039091C8 +:1028600018030E94151360911503669570E04BE004 +:1028700050E08AE091E00E941C31892BA9F010926F +:10288000920281E080938E0220E0409118036091D3 +:102890001703809116030C942713853210F0986467 +:1028A000D4CF880F982BD1CF0E949A0FEACF0895EA +:1028B00060E00C941D1421E030E0A90102C0440F37 +:1028C000551F8A95E2F7CA0120919302662391F081 +:1028D000822B8093930280919202811105C0809196 +:1028E000150386950E9458148091150380FD05C03C +:1028F0000C94B00F80958223ECCF0895CF93DF9393 +:10290000C82FC17082FBDD27D0F981FB662760F9F3 +:1029100084E00E945B1461E06C2785E00E945B14F8 +:102920006D2F86E0DF91CF910C945B140F931F9372 +:10293000CF93DF93EC0161E0009709F0682F61709D +:1029400080E00E945B1460E0209721F0BE01769544 +:102950006795617081E00E945B1460E0209731F020 +:10296000BE017695679576956795617082E00E94C5 +:102970005B1460E0209739F0BE01B3E0769567956F +:10298000BA95E1F7617083E00E945B14AE0170E0DC +:1029900060E0BB27A72F962F852F0097A105B105D3 +:1029A000D9F1AC01BD0188E08A019B01F4E03695C4 +:1029B000279517950795FA95D1F70115110521056A +:1029C000310519F08C5FB901A8018A019B01E2E091 +:1029D0003695279517950795EA95D1F701151105B5 +:1029E0002105310519F08E5FB901A801769567952B +:1029F00057954795452B462B472B09F08F5F813024 +:102A0000C9F0882359F08230D1F08330E9F020E01A +:102A10004EE16FEF80E406C080E0C6CF20E04EE1DB +:102A20006FEF82E30E942713CE01DF91CF911F91B8 +:102A30000F91089520E04EE16FEF8EE1F3CF20E09B +:102A40004EE16FEF8AE6EECF20E04EE16FEF87EDCB +:102A5000E9CF0E94961490935A03809359030C94E3 +:102A6000A90B8091590390915A039C01267033273A +:102A70002630310519F488600C942915877FFCCF26 +:102A800021E030E002C0220F331F8A95E2F7209543 +:102A900030958091590390915A03822393230C948B +:102AA0002915909131028095892380933102282F36 +:102AB000277039F4282F082E000C330B92171306B9 +:102AC00021F49091260392FF07C085958595859501 +:102AD0000E94401510923102089521E030E002C0BA +:102AE000220F331F8A95E2F78091590390915A0380 +:102AF000822B932B0C942915809115038695815078 +:102B000009F484E261E00C941D148091150386950C +:102B10008F5F853208F081E061E00C941D14909184 +:102B2000150390FF07C09695981720F0961710F49C +:102B30000C94851561E00C941D14E5E1F3E083E04D +:102B4000808311828FEF828384EB83831482608180 +:102B50007181828193810C94151369EE7EEF90E070 +:102B600080E00E94683160E082E090E00E944A319B +:102B700060E083E090E00E944A31109237021092A8 +:102B8000360260E084E090E00E944A3160E082E238 +:102B900090E00E944A3160E085E090E00E944A3176 +:102BA00060E086E090E00E944A316FEF87E090E0BD +:102BB0000E944A3140E050E0BA0188E090E00E9473 +:102BC0005C3160E08DE090E00E944A3140E050E0EE +:102BD000BA0188E190E00E945C3160E087E190E01A +:102BE0000E944A3140E050E0BA018CE190E00E943E +:102BF0005C3170E060E080E290E00E94683140E08B +:102C000050E0BA0188E190E00E945C3180E00E94CF +:102C1000900E0E94A80E40E050E0BA018FE090E0D4 +:102C20000E945C3140E050E0BA0183E190E00C94F6 +:102C30005C318F929F92AF92BF92CF92DF92EF92D0 +:102C4000FF920F931F93CF93DF93CDB7DEB72897F3 +:102C50000FB6F894DEBF0FBECDBF8E010F5F1F4FC2 +:102C600088E0F80111928A95E9F78FE4E82E81E077 +:102C7000F82E6801AA24A394B12CF70181917F0159 +:102C80008F3F09F44BC0F894E82FE295EF70F0E025 +:102C900021A18F70A50102C0440F551F8A95E2F74C +:102CA000CA01922F982B91A392A18095892382A388 +:102CB000789400C0E3E5F1E030E020E0912C812C35 +:102CC00081918F3F09F47EC0A82FA295AF70B0E02C +:102CD00090964C9150E08F7002C0559547958A951B +:102CE000E2F740FD6FC0C501022E02C0880F991F98 +:102CF0000A94E2F7882A992A2F5F3F4F2C3031053A +:102D0000F9F6F701319780818F3F11F00E94BF08DB +:102D100050EA5A95F1F7F60191828082F2E0CF0EE7 +:102D2000D11C23E5E21621E0F20609F0A6CF48E027 +:102D300050E0B80184E492E00E942931FF24F3942A +:102D4000009709F4F12C892B09F43FC088E0F801C1 +:102D5000A4E4B2E001900D928A95E1F781E08093BE +:102D60003A020E948806909339028093380280913B +:102D70003802909139020E947906059750F18091AE +:102D80004402909145029093740280937302809163 +:102D9000460290914702909376028093750280914B +:102DA0004802909149029093780280937702809133 +:102DB0004A0290914B0290937A028093790210928A +:102DC0003A0207C090E080E095CF80913A028111ED +:102DD000CECF80914302882371F08091410290917F +:102DE00042020E947906893E934028F082EE0E94BA +:102DF000E10B1092430280913F02909140029111A9 +:102E00004BC0882319F110921A0184E080931B01B2 +:102E100080931C018FE00E94581410923F0281E0C1 +:102E2000809340028F2D28960FB6F894DEBF0FBE18 +:102E3000CDBFDF91CF911F910F91FF90EF90DF9069 +:102E4000CF90BF90AF909F908F90089580913E0259 +:102E5000882379F086E180931A018AE180931B012F +:102E600084E080931C018FE00E94581410923E026F +:102E7000D6CF80913D028823A9F08AE180931A0180 +:102E80008EE180931B0184E080931C018FE00E94FF +:102E9000581410923D02C3CF811124C080913E028C +:102EA000811120C080913D0281111CC080913B02A4 +:102EB00090913C020E947906853F914098F01092D3 +:102EC0001A0189E280931B0180931C0181E20E9418 +:102ED000581410923F0210923E0210923D0210923E +:102EE0004002A0CF10923F0210923E0210923D028B +:102EF00099CF90E080E00E944431893E9E4F11F4CA +:102F00000C94730F80E008951092340280911D019B +:102F1000E2ECF1E0882359F08091250387FF07C098 +:102F20008EE1DF011D928A95E9F70C94A90B86E0EA +:102F3000F8CF1F93CF93DF93CDB7DEB7AA970FB625 +:102F4000F894DEBF0FBECDBF81E593E02091F10084 +:102F5000DC012D93CD01B3E089359B07B9F7809152 +:102F60005203833009F471C0B8F4813009F448C0C9 +:102F7000823009F4B2C08091E80083FF3AC18091A9 +:102F80005103909152039A3008F033C1E92FF0E0D9 +:102F9000EE52FE4C0C94EB308A3009F48DC08B302D +:102FA00009F470C0893039F780915103813219F7E3 +:102FB0008091550390915603009711F00297D9F62E +:102FC0008091E800877F8093E8008091E80082FF8D +:102FD00037C08091F2009091F300029729F480911C +:102FE000F1008B7F813021F48091F10080932C03DC +:102FF0008091E8008B778093E8000E946605BBCF44 +:1030000080915103813A09F0B6CF8091E800877F23 +:103010008093E8008091550390915603892B61F4C9 +:1030200060E28DE293E070E00E9419068091E80072 +:103030008B778093E8009FCF60E090E080E0F3CF53 +:1030400080914F038111C1CF96CF80915103813A76 +:1030500009F091CF8091550390915603892B09F087 +:103060008ACF8091E800877F8093E8008091E80014 +:1030700080FFFCCF80911D018093F1008091E800DA +:103080008E77B9CF80915103813209F074CF80914E +:10309000550390915603892B09F06DCF8091E8007C +:1030A000877F8093E8000E94660580915303809398 +:1030B0001D010E9484175FCF80915103813209F076 +:1030C0005ACF8091E800877F8093E8000E946605D0 +:1030D0008091540380932B034ECF80915103813A0A +:1030E00009F049CF8091E800877F8093E8008091C4 +:1030F000E80080FFFCCF80912B03BECF803899F091 +:10310000823809F076C0809155038F70873008F0BF +:1031100070C08093E9008091EB0085FB882780F9DF +:103120001092E90006C080914D0390914E039111D9 +:1031300082609091E800977F9093E8008093F1007F +:103140001092F1008091E8008E77B5C1882309F4D0 +:10315000A2C1823009F04DC0809153038111A6C1F4 +:10316000809155038F702FEF280F263008F041C053 +:103170008093E9002091EB0020FF98C1933031F457 +:103180008091EB0080628093EB0090C19091EB0006 +:1031900090619093EB0021E030E001C0220F8A950E +:1031A000EAF72093EA001092EA008091EB00886031 +:1031B000EACF81111EC0109153031F778091E30065 +:1031C0008078812B8093E3008091E800877F809353 +:1031D000E8000E9466058091E80080FFFCCF8091A6 +:1031E000E30080688093E30082E0111183E0809324 +:1031F0004F038091E80083FF0AC08091E800877F39 +:103200008093E8008091EB0080628093EB00AA96A7 +:103210000FB6F894DEBF0FBECDBFDF91CF911F91E7 +:1032200008958058823028F7209153033091540339 +:103230002C3DE3E03E07A1F583E08A838AE289839F +:103240004FB7F894DE01139620E03EE051E2E32F01 +:10325000F0E050935700E49120FF03C0E295EF7037 +:103260003F5FEF708E2F90E0EA30C0F0C7968D93ED +:103270009D932F5F243159F74FBF8091E800877FDE +:103280008093E8006AE270E0CE0101960E94190680 +:103290008091E8008B778093E800ABCFC096E7CFB2 +:1032A0008091550390915603432F55274330510584 +:1032B00009F44AC078F54130510509F47AC08BE52C +:1032C00090E0E6EBF8E04230510509F092CF209112 +:1032D000E800277F2093E80020915703309158039E +:1032E0008217930708F49C0140E02115310509F08D +:1032F00065C0411163C08091E80082FDC9CF809113 +:103300004F03882329F2853019F28091E80083FF6A +:10331000F2CFBECF4132510509F43CC042325105D3 +:1033200009F067CF8330910508F063CFFC01EE0F01 +:10333000FF1FEE54FE4F0190F081E02D81559E4F0E +:10334000DC018C9190E01AC0332721303105D1F097 +:103350002115310561F02230310509F04ACFE3E251 +:10336000F9E0E4918E2F90E0E3E2F9E007C0E1E4B8 +:10337000F9E0E4918E2F90E0E1E4F9E0009709F4A0 +:1033800038CFA5CFEDE2F9E0E4918E2F90E0EDE2A9 +:10339000F9E0F4CF8330910508F02BCF880F991F07 +:1033A000FC01E854FE4F0190F081E02D89E090E0AF +:1033B0008ECF82E190E0E1E1F9E089CF80914F0387 +:1033C000882309F465CF853009F462CF8091E80045 +:1033D00083FD5ECF8091E80082FD8DCF8091E80073 +:1033E00080FF83CF8091F2009091F3002115310589 +:1033F00019F08830910550F041E0089709F040E05D +:103400008091E8008E778093E8006FCF44914093DD +:10341000F1003196215031090196E8CF803809F04A +:10342000E8CE8091E800877F8093E8008091500388 +:103430008093F10087CE8111DCCE109153031230BE +:1034400008F0D7CE8091E800877F8093E800109342 +:1034500050030E946605112311F084E005C080919D +:10346000E30087FDFACF81E080934F0342E061ECF7 +:1034700081E00E94850542E261EC84E00E948505BE +:1034800042E261EC82E00E94850542E260EC83E06A +:103490000E948505AECE80915303813009F0A9CEFC +:1034A00081E0933009F080E080934E031092E900B0 +:1034B0008091E800877F8093E8000E94660599CE9E +:1034C0003F924F925F926F927F928F929F92AF92B4 +:1034D000BF92CF92DF92EF92FF920F931F93CF9301 +:1034E000DF9300D000D00F92CDB7DEB78C01FC0186 +:1034F00083819481892B31F08081918189238F3F51 +:1035000009F010C60F900F900F900F900F90DF9161 +:10351000CF911F910F91FF90EF90DF90CF90BF90D0 +:10352000AF909F908F907F906F905F904F903F9063 +:1035300008950E94040FF82E682F89819A810E94B5 +:103540007D0B69817A818F2D0E94F70E7C01F80135 +:103550008281882309F4D9C5970122513F45203142 +:10356000310508F09AC58FEF97E00E943631FEEEE4 +:10357000EF0E57EE852E53E0952E882381F1809132 +:103580003102877009F4BECFF8018281882309F4E3 +:10359000B9CF82E00F900F900F900F900F90DF91B6 +:1035A000CF911F910F91FF90EF90DF90CF90BF9040 +:1035B000AF909F908F907F906F905F904F903F90D3 +:1035C0000C945115811428E09206C9F2C4010E949E +:1035D0003631811101C0EA943FEF831A930AE1105A +:1035E000F1CF1C821B82442443944AE0342E7401A0 +:1035F0004FEFE41AF40AC4010E94363189831A821B +:10360000882309F4BCCF9FEF980F933000F58A838D +:10361000498252E0850E911CC7010E9436318B838E +:10362000882309F4ACCFCE0101967C01F7012081FB +:103630002223E9F2213009F049C091818281913041 +:1036400041F4F2E0EF0EF11C0E94AA0D09C04701FF +:10365000EACF923049F422E0E20EF11C0E94F50C10 +:103660003FEFE31AF30AE2CF933031F432E0E30E96 +:10367000F11C0E94E10BF4CF943021F04FEFE41ADB +:10368000F40AEECF52E0E50EF11C30E020E0B70185 +:103690006F5F7F4FF70141818053990B8A3091050D +:1036A00050F021503109E0F28FE99FE00197F1F7E6 +:1036B00000C00000F6CF329EF001339EF00D1124C1 +:1036C0009C012E0F3F1F842F7B01E1CFE22FF0E002 +:1036D000EA5DFD4F5490822F86958695869590E001 +:1036E000FC01EA5EFD4F64902770712C022E02C02F +:1036F000759467940A94E2F7E1E06E227724FC0166 +:10370000EA5FFD4FA490B12C022E02C0B594A7949D +:103710000A94E2F7F1E0AF22BB24FC01EA50FE4F2D +:10372000C490D12C02C0D594C7942A95E2F721E029 +:10373000C222DD246114710419F081EE0E94F50C9F +:10374000A114B10419F086EE0E94F50C852D0E949B +:10375000AA0DAB2819F086EE0E94E10B672819F03C +:1037600081EE0E94E10BCD2809F47ACF8CE26CCF78 +:1037700081E00E946D150E94311501CF81E00E9409 +:103780004015F9CF82E0F5CFE2E8EE16EFE5FE0650 +:1037900009F49BC0F3E8EF16FFE5FF0609F097C4B4 +:1037A000882309F181EE0E94F50C83EE0E94F50C4E +:1037B00080E50E94F50C80E595C0882309F481C05E +:1037C00080914302811106C081E08093430282EE22 +:1037D0000E94F50C0E948806909342028093410259 +:1037E0008BE20E94F50CF8018281882309F4ABC4B6 +:1037F00010925D03F2E0EF16FCE5FF0608F491C1BC +:1038000026E1E2162CE5F20630F0C7018A5F9C45FE +:10381000099708F086C10E948C0F9093260380932D +:10382000250330E1E3163CE5F30609F449C108F04D +:10383000CBC058E0E5165CE5F50609F433C108F0A5 +:1038400094C094E0E9169CE5F90609F423C108F058 +:1038500076C0F2E0EF16FCE5FF0609F415C1809191 +:103860002503826023E0E2162CE5F20609F40FC17D +:1038700060912503F090260384E090E00E944A3195 +:103880006F2D82E290E00E944A310E94841777CE29 +:103890008823A1F080914302811106C081E08093CA +:1038A000430282EE0E94F50C0E9488069093420229 +:1038B0008093410281EE0E94F50C92CF81EE0E942E +:1038C000E10B8BE20E94E10B8ECF882309F48BCFB2 +:1038D00081EE0E94F50C83EE0E94F50C8FE40E94AD +:1038E000F50C8FE40E94E10B83EE0E94E10B81EE68 +:1038F000E9CF95EFE9169CE5F906D1F0A8F027E2AB +:1039000045EE66EEF6EFEF16FCE5FF0609F06BCF2D +:10391000C8010E94C70D33CE27E245EE65EEF8CF11 +:1039200026E241EE60EEF4CF27E245EE64EEF0CF02 +:1039300026E241EE62EEECCF28E241E0EFCF80914B +:103940002503806136E0E3163CE5F30609F49FC0E9 +:1039500080912503886047E0E4164CE5F40608F4FE +:1039600096C080912503806292C0809125038D7F4F +:103970005CE0E5165CE5F50609F489C078F4809111 +:1039800025038C609AE0E9169CE5F90609F47FC0EE +:1039900008F48CC0809125038E7F79C08091250327 +:1039A000877FFEE0EF16FCE5FF0609F470C080910A +:1039B00025038B7F2FE0E2162CE5F20608F467C0A2 +:1039C000809125038F7E63C03BEFE3163CE5F30651 +:1039D00009F464C068F553E1E5165CE5F50609F401 +:1039E00077C090F491E1E9169CE5F90609F46CC002 +:1039F000E2E1EE16ECE5FE0609F03ACF0E948417EC +:103A0000809125038F7743C0F5E1EF16FCE5FF06B3 +:103A100009F466C008F47AC08091260381603AEF09 +:103A2000E3163CE5F30609F023CF8093260320CF6D +:103A30004FEFE4164CE5F40609F44EC088F48DEF20 +:103A4000E8168CE5F806C1F1809126038E7F9EEF83 +:103A5000E9169CE5F90648F3809126038360E5CFDB +:103A6000E1E0EE16EDE5FE0609F459C008F444C0A5 +:103A700060E022E0E2162DE5F20609F0F9CE8EE0D4 +:103A800090E00E944A31F4CE8091250381608093BA +:103A90002503EECE809125038460F9CF8091260323 +:103AA0008260C3CF809125038064F1CF0E94841788 +:103AB000809125038068EBCF809126038D7FB5CF61 +:103AC000809125038F7DE3CF809125038F7BDFCF0E +:103AD00080912503837FDBCF809126038C7FA5CF48 +:103AE0008091250382FB992790F921E0922790FB92 +:103AF00082F990FB83F9CBCF80912603982F909584 +:103B000091708E7F892B90FB81F98FCF0E94841753 +:103B100090912503892F97FB87F98058B8CF61E0F2 +:103B2000AECF8091340236E1E3163CE5F30609F0AE +:103B300017C38A7A91E009F490E09093E001811133 +:103B400006C089E20E94170B0E94A70A18CD85E3E0 +:103B5000F9CF85E302C38091150380FF1BC08E7FE0 +:103B600080931503609115037091160380911703DC +:103B7000909118030E941513109292024FEF50E794 +:103B800082E0415050408040E1F700C000000E94B8 +:103B9000B00FF5CC81608093150361E086950E949B +:103BA0001D14EDCC4CE755E165E875E10E94CC06AB +:103BB000E6CC45E855E16CE775E1F8CF42EF53E11B +:103BC00069EE73E1F3CF41ED53E16DED73E1EECFBB +:103BD00049EB53E165EC73E1E9CF45EC53E169EB67 +:103BE00073E1E4CF4CE054E16BEF73E1DFCF61E0D0 +:103BF00081E0D5CF65E082E00E948F15C0CC68E0FF +:103C000086E0FACF64E18FE0F7CF67E185E1F4CF9A +:103C100062E289E1F1CF61E083E2C1CF3BE5E316E7 +:103C20003DE5F30611F14CE5E4164DE5F40609F027 +:103C3000C9C28091260382FB882780F991E08927F9 +:103C40000E94B70EBFC20E9484175FEF84E39CE01E +:103C5000515080409040E1F700C000000E94D10C1C +:103C60000E94AD158CCC81E0EBCF80E0E9CFC7019D +:103C70000E94550BD82EB5C22F2D2F70C22E8F2D1E +:103C8000807F19F0C29490EFC922DD20C9F0CC20CA +:103C900069F080E28E0D883010F081100BC08091A9 +:103CA0003402C82AC09234020E94A70A8E2D0E94B4 +:103CB000F50C19C080913302C82AC0923302F4CFA8 +:103CC0008E2D0E94E10BCC2071F0C09480E28E0D0D +:103CD000883010F081103EC080913402C822C0921A +:103CE00034020E94A70AE92DE850FF0B349720F414 +:103CF0000E94C0060E947E14AA2009F403CC809181 +:103D0000310280FDFFCBF80112828595859585955E +:103D10000E946D15C8010E94601A8091310285953C +:103D2000859585950F900F900F900F900F90DF91D4 +:103D3000CF911F910F91FF90EF90DF90CF90BF90A8 +:103D4000AF909F908F907F906F905F904F903F903B +:103D50000C94401580913302C822C0923302C1CF27 +:103D60003F2D3F70B32E8F2D807F803219F0B2949B +:103D700080EFB822882071F041E0841681F1DD20C7 +:103D8000D9F1CC2091F1F801858180FF8FCF8F7020 +:103D900085832BC0DD20B1F0909135028B2D892BCE +:103DA000C11003C00E94D70B9ECF51E0C512FACFBD +:103DB0002091260322FD97CF981709F494CF809382 +:103DC000350291CFC11006C00E94A10A8B2D0E941E +:103DD000CC0B89CF81E0C81609F485CFF5CFDD2063 +:103DE00031F095E09C1508F47ECF8B2DDBCFE4E01D +:103DF000EC1508F478CFEACFCC2041F3F9E38F1229 +:103E000009C02FEF37EE43E0215030404040E1F74A +:103E100000C000008E2D0E94E10B65CF8F2D86958E +:103E20008695837061F0813009F05DCFC701937092 +:103E3000D11002C090E080E00E94940654CFC701E8 +:103E40009370D11002C090E080E00E94AA064BCF90 +:103E50008E2DDD2029F00E9463080E94810743CF48 +:103E60000E94A807FACF8F2D837009F040C0D110AF +:103E70003ACF4E2D429546954770440F440F8E2DF4 +:103E80008F7090E0042E02C0880F991F0A94E2F709 +:103E900030E020E0E4FE09C02FE030E002C0220F55 +:103EA000331F4A95E2F7209530954F2D469546955C +:103EB0004370423099F078F4609136027091370285 +:103EC000413039F0822B932B862397230E94C60B17 +:103ED0000ACF862B972B822B932BF8CF822B932BF9 +:103EE000209136023091370282279327EFCF8695B3 +:103EF000DD2011F08F2D8170882309F4F4CE4E2D32 +:103F0000429546954770440F440F8E2D8F7090E078 +:103F1000042E02C0880F991F0A94E2F730E020E0D7 +:103F2000E4FE09C02FE030E002C0220F331F4A95A3 +:103F3000E2F7209530954F2D4695469543704230D7 +:103F400099F078F46091590370915A03413039F037 +:103F5000822B932B862397230E942915C4CE862B70 +:103F6000972B822B932BF8CF822B932B20915903E5 +:103F700030915A0382279327EFCF5F2D5F70F52E84 +:103F8000DD2029F0852F0E946D158E2D0BCF8E2DF3 +:103F90000E94CC0B8F2D0E944015A5CE8E2D92EF46 +:103FA000891609F449C0981570F0E0EF8E1639F1C2 +:103FB000F1EF8F16C9F1DD2009F45FC0C11076CE94 +:103FC0008F2D8F7136C023EF8216D9F134EF831213 +:103FD000F2CFDD2009F446C0FF2DFF71FF2E8F2F99 +:103FE0000E946D158091260382FD07C028E0F29E95 +:103FF000C00111248360809331028F2D1AC0DD200F +:1040000071F044E04C1508F46ECE2F2D2F7181E035 +:1040100090E002C0880F991F2A95E2F7A7CF55E0DC +:104020005C1508F460CEF1CF8F2D8F71DD2009F47F +:10403000B2CF0E946D1557CE8F2D8F71DD20C9F341 +:10404000AACF90E080E0DD2009F486CF9F2D9F71FC +:1040500021E030E0F90102C0EE0FFF1F9A95E2F770 +:10406000CF017ACF81E00E94511531E03C1508F074 +:104070003ACE82E00E94511536CECC2059F08933D9 +:1040800009F0C8CE4FEF57EE83E0415050408040DA +:10409000E1F7BECE8F2D8F717ECFF0E1EF16FFE5F9 +:1040A000FF0609F465CB21E1E2162FE5F20609F4DB +:1040B00069CB41E8E4164FE5F40609F4E9CB08F0D2 +:1040C00063CB90E8E9169FE5F90609F476CB23EF78 +:1040D000E2162CE5F20609F423CC08F00ACC48EDF0 +:1040E000E4164CE5F40609F417CC59EDE5165CE549 +:1040F000F50609F421CC87EDE8168CE5F80609F001 +:1041000072CB26E241EE61EE03CC30E1E3163FE5EF +:10411000F30609F433CB41E1E4164FE5F40649F622 +:1041200082E02DCB85E0DE01119601900D928A95FB +:10413000E1F7F801228189819A812111FAC90E944F +:10414000550BF82EFEC9F6E1EF16FCE5FF06D1F59A +:104150008091E0018111FDCC89E20E94EC0AF4CC4F +:1041600082722CECE2162CE5F20609F43BCD08F045 +:10417000A7C046ECE4164CE5F40609F41FCD08F0A0 +:1041800076C093ECE9169CE5F90609F40BCD08F02E +:104190005DC0F2ECEF16FCE5FF0609F4DCCC9AE515 +:1041A000E9169DE5F90609F45ECD08F037CDE11476 +:1041B000FCE5FF0609F447CD2EEDE2162CE5F206EC +:1041C00009F44ECDF8018281E080F180882309F462 +:1041D0004ECDC7010E94040FD82E682FC7010E9440 +:1041E0007D0BB7018D2D0E94F70E0E9419097C01ED +:1041F000882EF801D280C580C2943FE0C32280910E +:1042000031028770A1F0AD2CDD2091F08F2D807FE1 +:10421000803421F080E28E0D883048F082E00E94E8 +:104220005115809131028770AA24A3948111A12C89 +:104230009F2C92942FE09222FBE0F91508F453CDC5 +:10424000E92DF0E0E452FE4C0C94EB3024ECE21645 +:104250002CE5F20609F4ADCC49EE53E162EF73E1CF +:1042600035ECE3163CE5F30609F4A0CC98CF49EC15 +:10427000E4164CE5F40609F4ABCC88F497ECE916A7 +:104280009CE5F90609F49FCC4DED53E161ED73E136 +:10429000E8ECEE16ECE5FE0609F488CC80CFFAECEB +:1042A000EF16FCE5FF0609F498CC4BEF53E16CE008 +:1042B00074E12BECE2162CE5F20609F477CC6FCF13 +:1042C00031EDE3163CE5F30609F49CCCB8F45EEC62 +:1042D000E5165CE5F50609F48DCC08F488CC9FEC76 +:1042E000E9169CE5F90609F48ACC6EE089E0E0ED78 +:1042F000EE16ECE5FE0609F47FCC51CFF4EDEF1697 +:10430000FCE5FF0609F484CC78F432EDE3163CE5D5 +:10431000F30609F47ACC61E088E143EDE4164CE55C +:10432000F40609F43CCC3BCF55EDE5165CE5F5060B +:1043300009F471CC8DE5E816F80609F420C92FCFF1 +:104340001F93CF93DF938091FE01807FA9F480912A +:10435000FB01882389F080913002D091FF016091A8 +:10436000F9017091FA01A091FC01B091FD01C62FF5 +:10437000C72316E0D81304C0DF91CF911F91089591 +:1043800090E0109711F0CF3F19F401968770F2CFAB +:10439000189F9001199F300D1124F901E050FE4F34 +:1043A00041814713F2CF40814613EFCF4281411143 +:1043B000ECCF438154814A1B5B0B483C510528F7E5 +:1043C0008091FE018F7080618093FE01F901EB5FA7 +:1043D000FD4F80818F708061808389EF91E00E9422 +:1043E000601ADF91CF911F910C944B0BAF92BF924B +:1043F000CF92DF92EF92FF920F931F93CF93DF93B1 +:10440000CDB7DEB761970FB6F894DEBF0FBECDBF54 +:104410008C0185E0F801DE011D9601900D928A95D0 +:10442000E1F7F801E28089EFA82E81E0B82E6091D3 +:10443000FC017091FD016115710509F432C1909183 +:10444000F9014091FA01892F84238F3F09F429C192 +:1044500020813181C380D480F090FB01F601E61BFE +:10446000F70BFF2009F4E8C08091FE01582F507F20 +:10447000E83CF10508F0ABC0511177C0FE2C4313A6 +:1044800021C092131FC0E1101DC08F708061809306 +:10449000FE01C5010E94601A8091FE01F80185832A +:1044A0008F2D61960FB6F894DEBF0FBECDBFDF91A2 +:1044B000CF911F910F91FF90EF90DF90CF90BF9021 +:1044C000AF900895CD2829F0822F83238F3F09F0E4 +:1044D00003C180E0F82FF170DF2E80FF3CC0809197 +:1044E00030024091FF0156E0841315C02D873E87AE +:1044F0008D859E850E94400F292F22952F70223096 +:10450000F0F0243018F59F70F1F0F8019581907F5C +:10451000D1F4D12C1EC090E0589FF001599FF00DAE +:104520001124E050FE4F6181361306C060812613CE +:1045300003C06281E6120FC001968770D5CF9F70CD +:1045400011F0882331F3805E883018F3C8010E948F +:10455000601AFD2CA5CFEE2009F4A2CF8091FE01B8 +:1045600081608093FE01F12C9BCF431306C0921310 +:1045700004C0F801EE2009F479C0C8010E944C0F74 +:10458000882309F1EE20F9F08091FE01803270F06D +:104590002091F9013091FA0138872F831986DB8643 +:1045A000CA868C87CE0107960E94601A86E0F801C1 +:1045B000A9EFB1E001900D928A95E1F70E94A02148 +:1045C000FF24F3946DCFC8010E94601AF9CF5111F6 +:1045D0000AC089EF91E00E94601A86E0F50111920D +:1045E0008A95E9F7C0CF43130FC092130DC0E110B5 +:1045F0000BC0F8018583C8010E94601A86E0F501AE +:1046000011928A95E9F74CCFC8010E944C0F88237C +:10461000D1F2EE20C1F28091FE01803238F2209179 +:10462000F9013091FA013A8329831B82DD82CC8221 +:104630008E83CE010196B8CFE83CF105F8F6FE2C4A +:10464000EE2009F243131FC092131DC08091FE019A +:1046500080FD10C0982F907F69F0F8018583903F0E +:1046600031F0982F907F905F8F70892B8583C801E0 +:104670000E94601A86E0F801A9EFB1E001900D9266 +:104680008A95E1F70DCFC8010E944C0F81118ECFA2 +:104690008091FE0181608093FE01C8010E94601A32 +:1046A000FFCEEE2009F48FCFC8010E944C0FF82EE8 +:1046B000882309F488CF86E0F801A9EFB1E00190E2 +:1046C0000D928A95E1F78091F9019091FA010E948B +:1046D000400F0E94A021E4CE81E08E25FBCE1F93E7 +:1046E000CF93DF93CDB7DEB767970FB6F894DEBFF1 +:1046F0000FBECDBF4B8B5C8B6D8B7E8B8F8B611117 +:10470000109233021A8A198A85E0FE017396DE013F +:104710001D9601900D928A95E1F786E0FE013D9687 +:10472000DE01179601900D928A95E1F7CE0107966A +:104730000E94F621882389F016E080913002909142 +:10474000FF01891349C067960FB6F894DEBF0FBE0C +:10475000CDBFDF91CF911F91089586E0FE0137967E +:10476000DE01119601900D928A95E1F78A859B856D +:10477000892B11F38F81988589238F3FE9F220914E +:10478000FF0130E0C90101968770992740913002FE +:104790004817190671F40E9484171092FF011092B5 +:1047A000300286E0E9EFF1E0DF011D928A95E9F73A +:1047B000C3CF96E0929FD001939FB00D1124A050DB +:1047C000BE4FFE01319601900D929A95E1F78093CC +:1047D000FF010E944B0BB0CF819FC001112480507C +:1047E0009E4F0E94F621882309F4ADCF80913002BC +:1047F00090E0019687709927809330029ECFFF92B8 +:104800000F931F93CF93DF93CDB7DEB7C45BD1096E +:104810000FB6F894DEBF0FBECDBF182F8111D7C0E1 +:10482000662309F475C0C055DF4F1882C05BD040C5 +:10483000CF54DF4F1882C15BD04011E0CE54DF4F20 +:104840001883C25BD0400E9488068160782FCD54C7 +:10485000DF4F99838883C35BD040C055DF4F4881C9 +:10486000C05BD040CF54DF4F5881C15BD040CE54A5 +:10487000DF4F6881C25BD040CC54DF4F8881C45B7E +:10488000D0400E946F23C555DF4F1882CB5AD040CD +:10489000C455DF4F1882CC5AD040C355DF4F188221 +:1048A000CD5AD0400E9488068160782FC255DF4FD4 +:1048B00099838883CE5AD040C555DF4F4881CB5A63 +:1048C000D040C455DF4F5881CC5AD040C355DF4F3C +:1048D0006881CD5AD040C155DF4F8881CF5AD04032 +:1048E0000E946F2310933F020E94880690933C021F +:1048F00080933B0281E0CC54DF4F0FB6F894DEBFCB +:104900000FBECDBFDF91CF911F910F91FF90089502 +:1049100002E0CA55DF4F0883C65AD040C955DF4F61 +:104920001882C75AD04011E0C855DF4F1883C85AC3 +:10493000D0400E9488068160782FC755DF4F998349 +:104940008883C95AD040CA55DF4F4881C65AD040E3 +:10495000C955DF4F5881C75AD040C855DF4F6881CD +:10496000C85AD040C655DF4F8881CA5AD0400E94ED +:104970006F23CF55DF4F0883C15AD040CE55DF4F4C +:104980001882C25AD040CD55DF4F1882C35AD0404A +:104990000E9488068160782FCC55DF4F99838883E9 +:1049A000C45AD040CF55DF4F4881C15AD040CE5570 +:1049B000DF4F5881C25AD040CD55DF4F6881C35A6E +:1049C000D040CB55DF4F8881C55AD04089CF813048 +:1049D00009F0C0C0662309F45FC0C456DF4F1882D7 +:1049E000CC59D040C356DF4F8883CD59D040C256F2 +:1049F000DF4F8883CE59D0400E9488068160782F8F +:104A0000C156DF4F99838883CF59D040C456DF4FBA +:104A10004881CC59D040C356DF4F5881CD59D04042 +:104A2000C256DF4F6881CE59D040C056DF4F8881D3 +:104A3000C05AD0400E946F23C956DF4F1882C75911 +:104A4000D040C856DF4F1883C859D040C756DF4FF3 +:104A50001882C959D0400E9488068160782FC656B6 +:104A6000DF4F99838883CA59D040C956DF4F4881A8 +:104A7000C759D040C856DF4F5881C859D040C75693 +:104A8000DF4F6881C959D040C556DF4F8881CB5967 +:104A9000D0400E946F232ECF02E0CE56DF4F088316 +:104AA000C259D040CD56DF4F8883C359D040CC5631 +:104AB000DF4F8883C459D0400E9488068160782FD8 +:104AC000CB56DF4F99838883C559D040CE56DF4FF0 +:104AD0004881C259D040CD56DF4F5881C359D0408C +:104AE000CC56DF4F6881C459D040CA56DF4F888109 +:104AF000C659D0400E946F23C357DF4F0883CD585B +:104B0000D040C257DF4F1883CE58D040C157DF4F37 +:104B10001882CF58D0400E9488068160782FC057F5 +:104B2000DF4F99838883C059D040C357DF4F4881F6 +:104B3000CD58D040C257DF4F5881CE58D040C157D2 +:104B4000DF4F6881CF58D040CF56DF4F8881C159A1 +:104B5000D0409FCF823009F0ABC0662309F45EC01D +:104B6000C857DF4F1882C858D040C757DF4F8883D7 +:104B7000C958D04081E0C657DF4F8883CA58D0401B +:104B80000E9488068160782FC557DF4F99838883FC +:104B9000CB58D040C857DF4F4881C858D040C7577E +:104BA000DF4F5881C958D040C657DF4F6881CA5877 +:104BB000D040C457DF4F8881CC58D0400E946F232B +:104BC000CD57DF4F1882C358D040CC57DF4F1883E2 +:104BD000C458D040CB57DF4F1882C558D0400E94F0 +:104BE00088068160782FCA57DF4F99838883C6581B +:104BF000D040CD57DF4F4881C358D040CC57DF4F0E +:104C00005881C458D040CB57DF4F6881C558D04039 +:104C1000C957DF4F8881C758D0403BCFEF968FAF41 +:104C2000EF97C158DF4F8883CF57D04081E0C058FD +:104C3000DF4F8883C058D0400E9488068160782F5B +:104C4000CF57DF4F99838883C158D040EF964FAD3F +:104C5000EF97C158DF4F5881CF57D040C058DF4F32 +:104C60006881C058D040CE57DF4F8881C258D040AD +:104C70000E946F23EA961FAFEA97EB961FAFEB9760 +:104C8000EC961FAEEC970E9488068160782FEE9616 +:104C90009FAF8EAFEE97EA964FADEA97EB965FAD7A +:104CA000EB97EC966FADEC97EE968FADEE97F1CE5D +:104CB000833009F081C0662309F43FC019E0E5960E +:104CC0001FAFE597E6961FAEE69781E0E7968FAFB8 +:104CD000E7970E9488068160782FE9969FAF8EAF94 +:104CE000E997E5964FADE597E6965FADE697E796CF +:104CF0006FADE797E9968FADE9970E946F23E09635 +:104D00001FAFE097E1961FAEE197E2961FAEE297E4 +:104D10000E9488068160782FE4969FAF8EAFE4975B +:104D2000E0964FADE097E1965FADE197E2966FAD0B +:104D3000E297E4968FADE497ACCE1BE0AB961FAF45 +:104D4000AB97AC961FAEAC9781E0AD968FAFAD97A9 +:104D50000E9488068160782FAF969FAF8EAFAF9785 +:104D6000AB964FADAB97AC965FADAC97AD966FADD4 +:104D7000AD97AF968FADAF970E946F23A6961FAFEA +:104D8000A697A7961FAEA797A8961FAEA8970E94B2 +:104D900088068160782FAA969FAF8EAFAA97A696B5 +:104DA0004FADA697A7965FADA797A8966FADA897AA +:104DB000AA968FADAA976DCE843009F081C0662384 +:104DC00009F43FC009E0A1960FAFA19711E0A296A8 +:104DD0001FAFA297A3961FAFA3970E94880681607A +:104DE000782FA5969FAF8EAFA597A1964FADA197AF +:104DF000A2965FADA297A3966FADA397A5968FAD30 +:104E0000A5970E946F236C960FAF6C976D961FAF9E +:104E10006D976E961FAE6E970E9488068160782F00 +:104E2000A0969FAF8EAFA0976C964FAD6C976D9686 +:104E30005FAD6D976E966FAD6E97A0968FADA09794 +:104E400028CE0BE067960FAF679711E068961FAF0B +:104E5000689769961FAF69970E9488068160782FCE +:104E60006B969FAF8EAF6B9767964FAD67976896BF +:104E70005FAD689769966FAD69976B968FAD6B97CD +:104E80000E946F2362960FAF629763961FAF63977E +:104E900064961FAE64970E9488068160782F66969C +:104EA0009FAF8EAF669762964FAD629763965FAD88 +:104EB000639764966FAD649766968FAD6697E9CDFC +:104EC000853009F07DC0662309F445C039E0F32E32 +:104ED0002D96FFAE2D9702E02E960FAF2E9711E084 +:104EE0002F961FAF2F970E9488068160782F6196BA +:104EF0009FAF8EAF61972D964FAD2D972E965FADDC +:104F00002E972F966FAD2F9761968FAD61970E9468 +:104F10006F232896FFAE289729960FAF29972A96D8 +:104F20001FAE2A970E9488068160782F2C969FAF2B +:104F30008EAF2C9728964FAD289729965FAD29976D +:104F40002A966FAD2A972C968FAD2C970E946F23CF +:104F500010933E02C9CC2BE0F22E2396FFAE23978E +:104F600002E024960FAF249711E025961FAF2597F6 +:104F70000E9488068160782F27969FAF8EAF279773 +:104F800023964FAD239724965FAD249725966FAD5A +:104F9000259727968FAD27970E946F23FDAE0EAF02 +:104FA0001FAE0E9488068160782F22969FAF8EAF39 +:104FB00022974DAD5EAD6FAD22968FAD2297C6CFD5 +:104FC000863009F048C0662329F199E0F92EF8AE41 +:104FD00003E009AF11E01AAF0E9488068160782FC4 +:104FE0009CAF8BAF48AD59AD6AAD8CAD0E946F23BD +:104FF000FBAA0CAB1DAA0E9488068160782F9FAB8C +:105000008EAB4BA95CA96DA98FA90E946F23109349 +:105010003D026ACC8BE0F82EFEA603E00FA711E05C +:1050200018AB0E9488068160782F9AAB89AB4EA599 +:105030005FA568A98AA90E946F23F9A60AA71BA6E3 +:105040000E9488068160782F9DA78CA749A55AA544 +:105050006BA58DA5DACF873009F041C06623F9F042 +:1050600013E01CA31DA381E08EA30E94880681602B +:10507000782F98A78FA34CA15DA16EA188A50E944F +:105080006F231F8F18A319A20E9488068160782FB2 +:105090009BA38AA34F8D58A169A18BA1FACC05E0EF +:1050A0000A8F13E01B8F81E08C8F0E94880681603D +:1050B000782F9E8F8D8F4A8D5B8D6C8D8E8D0E948B +:1050C0006F230D8B1E8B1F8A0E9488068160782FAC +:1050D000998F888F4D895E896F89898DDACC883068 +:1050E00009F008CC662301F106E0088B13E0198B68 +:1050F00081E08A8B0E9488068160782F9C8B8B8B45 +:10510000488959896A898C890E946F230B871C877B +:105110001D860E9488068160782F9F878E874B8529 +:105120005C856D858F85B5CC08E00E8313E01F8309 +:1051300081E088870E9488068160782F9A87898716 +:105140004E815F8168858A850E946F2309831A8357 +:105150001B820E9488068160782F9D838C83498101 +:105160005A816B818D8195CC1F920F920FB60F9251 +:1051700011242F933F934F935F936F937F938F935C +:105180009F93AF93BF93CF93DF93EF93FF93D09110 +:10519000E900DF708091EC00C82FC17080FDC0E88D +:1051A0001092E9008091F000877F8093F00078945E +:1051B0000E9499171092E9008091F0008860809316 +:1051C000F000CD2BCF70C093E900FF91EF91DF91FC +:1051D000CF91BF91AF919F918F917F916F915F918F +:1051E0004F913F912F910F900FBE0F901F901895E8 +:1051F0001F920F920FB60F9211242F933F934F934C +:105200005F936F937F938F939F93AF93BF93EF932E +:10521000FF938091E10082FF09C08091E20082FF4C +:1052200005C08091E1008B7F8093E1008091DA00DE +:1052300080FF24C08091D80080FF20C08091DA00D8 +:105240008E7F8093DA008091D90080FF9BC088E137 +:1052500089BD8AE189BD09B400FEFDCF81E080935C +:105260004F0380912A03811109C00E94EC040E941F +:10527000B7058091E20084608093E2008091E100B4 +:1052800080FF17C08091E20080FF13C08091E20090 +:105290008E7F8093E2008091E20080618093E20043 +:1052A0008091D80080628093D80019BC85E08093FB +:1052B0004F038091E10084FF29C08091E20084FFC8 +:1052C00025C088E189BD8AE189BD89B5982F917093 +:1052D00080FFFBCF8091D8008F7D8093D800809194 +:1052E000E1008F7E8093E1008091E2008F7E8093C9 +:1052F000E2008091E20081608093E200809150039F +:10530000882309F445C084E080934F038091E10035 +:1053100083FF27C08091E20083FF23C08091E100DA +:10532000877F8093E10082E080934F0310925003C7 +:105330008091E1008E7F8093E1008091E2008E7F7A +:105340008093E2008091E20080618093E20042E07D +:1053500060E080E00E9485058091F0008860809385 +:10536000F000FF91EF91BF91AF919F918F917F914D +:105370006F915F914F913F912F910F900FBE0F90C2 +:105380001F90189519BC10924F0310922A0376CFE4 +:105390008091E30087FD93E090934F03B7CF78941B +:1053A0001F921FB61F9211248F939F93AF93BF93A9 +:1053B0008091210390912203A0912303B0912403B3 +:1053C0000196A11DB11D8093210390932203A09308 +:1053D0002303B0932403BF91AF919F918F911F90AE +:1053E0001FBE1F9018951F921FB61F9211248F93F6 +:1053F0009F93AF93BF9380912003811113C080913D +:10540000210390912203A0912303B091240341969C +:10541000A11DB11D8093210390932203A093230328 +:10542000B0932403BF91AF919F918F911F901FBEA6 +:105430001F901895CDB7DEB7AA970FB6F894DEBFC8 +:105440000FBECDBF84B7877F84BF0FB6F894A895F1 +:1054500080916000886180936000109260000FBEB0 +:1054600080E890E00FB6F89480936100909361001B +:105470000FBE85B7806885BF85B7806885BF8DEB17 +:1054800098E09093BF018093BE010E94EC040E94BB +:10549000B7058091E20084608093E2007894809167 +:1054A0004F038823A1F01091E9001F709091EC0048 +:1054B000892F817090FD80E8182B1092E90080916F +:1054C000E80083FD0E9499171F701093E90082E0A5 +:1054D00084BD93E095BD9AEF97BD80936E000E94C6 +:1054E000730F811102C00E94A80E80EF0E94BF08B6 +:1054F00081EF0E94BF0882EF0E94BF0883EF0E94E5 +:10550000BF0803E511E06FE5E62E61E0F62ED80155 +:105510008D918D018F3F11F00E94BF08E016F106BA +:10552000B1F7109245021092440210927402109248 +:105530007302109247021092460210927602109265 +:10554000750210924902109248021092780210924D +:10555000770210924B0210924A0210927A02109235 +:1055600079020E947917811102C00E94AD1582E074 +:1055700090E00E94363180936A020E948C0F9093D3 +:105580002603809325030E941916EFE3FCE9319767 +:10559000F1F700C000000E9419168091730280FF8D +:1055A00008C06FEF7FEF90E080E00E9468310E94BA +:1055B000D10C83E090E00E94363190E00E94C60B4F +:1055C0008091590390915A030E94961480914C0245 +:1055D000811132C00E947917811104C00E94AD155B +:1055E0000E949D1588E090E00E943E316093150373 +:1055F0007093160380931703909318036E7F71F4D2 +:105600000E949D1588E090E00E943E316093150352 +:105610007093160380931703909318030E94D20689 +:10562000109292028091150380FF03C086950E941C +:10563000581481E080934C026AE871E050E6852EB0 +:1056400052E0952E28E731E0E1E8F1E041E050E05A +:105650001191812F82958F7090E0DC019196FC90E2 +:1056600091971F70E12E6A0101C0CC0C1A95EAF7E0 +:105670000C2D00950F2191960C93919792961C9169 +:1056800092971C2992961C93D901FD909D010F2D94 +:1056900002950F7010E0D8019196BC90BF2DBF709D +:1056A000FB2E6A0101C0CC0CBA95EAF7DC2CD09431 +:1056B000DB20D8019196DC9291979296DC9092979C +:1056C000DC289296DC92DC0190968C9190E002C0EE +:1056D00095958795EA94E2F78170D80190960C91A0 +:1056E00010E002C015950795FA94E2F790E000FDEE +:1056F00092E0892BD4018D934D016E177F0709F03D +:10570000A7CF86EA92E090938A028093890281E291 +:105710000E94581481E090E00E94291580E091E0F9 +:1057200090931D0380931C0380914F03FF24F394F7 +:1057300008E11AE1853009F47CC20E941916882319 +:1057400059F08FB7F8944091210350912203609152 +:105750002303709124038FBFA3E7B2E0EBE6F2E0EE +:1057600010E000E0702F8D919D91219131912817CB +:10577000390709F487C22827392760E0EE24E3942B +:10578000F12CA9014E215F21452B09F475C269A3B3 +:105790007AA39C012E213F2191E0232B09F490E074 +:1057A0009BA30E9488068160782F9DA38CA349A1AA +:1057B0005AA16BA18DA10E946F23000F111FF80148 +:1057C000E559FD4F80819181E826F926F182E0823A +:1057D000809192028823D1F180919102E09115038A +:1057E000E695E81BE0938D02823009F062C2F0E09A +:1057F000EC53FD4FE4910E2F10E041E0E42E43E125 +:10580000F42E80918E02882361F010928E020E9405 +:10581000880690938C0280938B02109290021092D3 +:105820008F020E948806E0918B02F0918C028E1B01 +:105830009F0B8F3F9F4750F4E00FF11FF0938C02B6 +:10584000E0938B028BE892E0F701099537E5E32EB0 +:1058500032E0F32E0EE412E04FE6442E41E0542EE7 +:1058600058E7652E51E0752E61E8862E61E0962E90 +:1058700070E6A72E72E0B72E212C312CD501ED91C8 +:105880005D01EE0FEE0FD4012D914D01A22FA295D7 +:10589000AF70B0E090968C9190E02F7002C095951B +:1058A00087952A95E2F781709927D3014D913D01A3 +:1058B000A42FA295AF70B0E090962C9130E04F707D +:1058C00002C0359527954A95E2F7A9014170552701 +:1058D00020FF02C042E050E0842BE82BD501119755 +:1058E000EC93D201CD902D01EF70F0E0E15AFE4F24 +:1058F0008081F7019081890F8083D12C082E000CC4 +:10590000990B20E08C159D054CF0D8018C918F5F90 +:105910008C9360E0832D0E94FF2321E0F7018081BA +:10592000082E000C990B442755274C195D09481780 +:1059300059074CF0D8018C9181508C9361E0832DF4 +:105940000E94FF2321E0F7018081082E000C990BB3 +:10595000B6010E94D730D7018D937D01222A33945E +:105960000F5F1F4FB9E03B1289CF222059F08FB74C +:10597000F894409121035091220360912303709188 +:1059800024038FBF86E0E2E8F2E0DE011196019089 +:105990000D928A95E1F7F0908402E09085021091D3 +:1059A0008602009187021092840210928502109262 +:1059B0008602109287028F2D8E2909F448C08091AB +:1059C0008002909181020E9479069C0190917C0254 +:1059D000992309F4C5C323333105C8F19F3F19F05A +:1059E0009F5F90937C02FF2059F00E9443089FEF35 +:1059F0001F140CF491E0899F802D11248093840260 +:105A0000EE2059F00E9443089FEF1E140CF491E021 +:105A1000899F802D11248093850230918402332345 +:105A2000B1F020918502222391F045EB3403C001AF +:105A30001124992309F497C19093840245EB240320 +:105A400090011124332309F492C130938502812FF0 +:105A5000802B09F448C080917E0290917F020E94C1 +:105A600079069C0190917B02992309F474C3253631 +:105A70003105C8F19F3F19F09F5F90937B0211237E +:105A800059F00E9421089FEF11160CF491E0899FB4 +:105A9000802D112480938602002359F00E94210852 +:105AA0009FEF10160CF491E0899F802D11248093B4 +:105AB0008702309186023323B1F02091870222239E +:105AC00091F045EB3403C0011124992309F453C12B +:105AD0009093860245EB240390011124332309F4AB +:105AE0004EC1309387028091840290918502892B68 +:105AF00090918602892B90918702892B11F00E9448 +:105B0000810786E0FE013196A2E8B2E001900D9295 +:105B10008A95E1F70E94C00690916902891731F0D9 +:105B20000E94C006809369020E947E1480914F03F8 +:105B3000843009F0F9CD83E08093E9008091E8009A +:105B400082FFF2CD8091E80090E085FF06C00E94C0 +:105B50000B05882309F417C191E08091E8008B7749 +:105B60008093E800992309F4DFCDE981E150E33126 +:105B700008F09DC1F0E0E851FE4C0C94EB308091B0 +:105B80004F03843009F443C080E00E947E141092D9 +:105B9000920280918802811116C0F0928802809151 +:105BA0001503982F917090934D028E7F809315036B +:105BB000BFEFE0E7F2E0B150E040F040E1F700C0B5 +:105BC00000000E94B00F1092200388E190E0A0E452 +:105BD0000FB6F894A895809360000FBEA093600064 +:105BE00083B7817F846083BF83B7816083BF7894EC +:105BF000889583B78E7F83BF0FB6F894A895809160 +:105C00006000886180936000109260000FBE8091F8 +:105C10004E03882371F00E941916E3E7F2E08191A8 +:105C20009191892B09F078C28BE792E08E179F073C +:105C3000B1F780914F03853009F4A1CF0E948417FA +:105C40000E94C0060E947E141092880280914D022C +:105C5000882359F080911503816080931503869500 +:105C60000E9458140E949A0F68CD80919302882355 +:105C7000C9F30E94B00FF6CF6F5FEE0CFF1C6C30C3 +:105C800009F07FCD0F5F1F4F0430110509F06ACD79 +:105C90008FEF8EA38FA318A60E9488068160782FAD +:105CA0009AA789A74EA15FA168A58AA50E946F2324 +:105CB0008FCD863059F4F0E0EF53FD4FE4910E2F75 +:105CC00010E031EFE32E32E1F32E9BCD893061F409 +:105CD000E695F0E0E254FD4FE4910E2F10E022E44F +:105CE000E22E22E1F22E8DCD8F3061F4E695F0E0C8 +:105CF000E554FD4FE4910E2F10E09DEEE92E91E169 +:105D0000F92E7FCD853159F4F0E0E854FD4FE49150 +:105D10000E2F10E08AE7E82E81E1F82E72CD08E21E +:105D200010E0FAEEEF2EF0E1FF2E883109F469CD94 +:105D3000833249F4E6EBF2E005911491B8E9EB2ED9 +:105D4000B2E1FB2E5ECD04EF11E0ADEAEA2EA0E158 +:105D5000FA2E843209F455CD00ED17E0E1EDEE2E78 +:105D6000E6E0FE2E4ECD81E08093840267CE81E096 +:105D7000809385026CCE81E080938602ABCE81E079 +:105D800080938702B0CE00E210E0CE0101967C0144 +:105D90008091E80085FD0AC08091E8008B778093B0 +:105DA000E8000E940B05882399F3D6CE8091F1007C +:105DB000D7018D937D010150110951F7CDCE1A8283 +:105DC00089E08B833FC08A81823009F4BBC1833074 +:105DD000A9F0813009F06BC02FB7F89460912103CE +:105DE0007091220380912303909124032FBF0E947E +:105DF000F1306B837C838D839E8324C080917302FA +:105E0000909174029827892798279C838B8380918F +:105E10007502909176029827892798279E838D8313 +:105E20008091770290917802982789279827988700 +:105E30008F838091790290917A02982789279827F9 +:105E40009A87898780914F03843009F06DCC109137 +:105E5000E9001F709091EC00892F817090FD80E81F +:105E6000182B82E08093E9008091E80080FF0DC04C +:105E700050E040E060E270E0CE0101960E943C05F7 +:105E80008091E8008E778093E8001F701093E900FE +:105E90004BCC8A81823059F46B817C818D819E81CB +:105EA0000E94F13086E290E00E944A31CBCF8FEF22 +:105EB0008983C8CF4C816B818A810E94D10E98273B +:105EC000892798279E838D83BDCFED80FE80FE2499 +:105ED000EF24FE248A810B81B8E10B9F80011124FD +:105EE000E0E68E9F000D111D11248C8190E0880F3B +:105EF000991F080F191F6F2DC80187960E944A31FC +:105F00006E2DC8018896D0CF0E943B0E9BCF8A8110 +:105F10008138C1F060F4803809F094CF20E04B81E3 +:105F200060911703809116030E9427138BCF82384C +:105F300049F1833809F086CF20E0409118036C8145 +:105F40008B81F2CF8B810E9458149B818091150325 +:105F5000911111C08E7F8093150310929202FFEF72 +:105F600020E742E0F15020404040E1F700C000004F +:105F70000E94B00F67CF81608093150386950E94C1 +:105F8000581460CF8B81809319035CCF8A8181384C +:105F900099F030F4803809F055CF8091180311CF73 +:105FA000823891F0833809F04DCF809116038B83AE +:105FB000809117038C8346CF8091150380FF02C028 +:105FC0008695FFCE80E0FDCE80911903FACE6091D8 +:105FD00015037091160380911703909118030E9486 +:105FE000151330CF80E18A832DCF84E08A8389E145 +:105FF000E8CE0A811B81102701271027CE010196C8 +:106000006C01EC80DC01AE0DB11D7D01C801895130 +:106010009C4FEC14FD0409F415CF0931B4E01B07C3 +:1060200050F40E943631F60184830F5F1F4FBFEF9B +:10603000CB1ADB0AEBCFD60114961C92F6CF0A815D +:106040001B81102701271027FE0131966F01EC807C +:10605000E00EF12EF11CC80189519C4FE016F106AB +:1060600009F4F0CE0931F4E01F0728F4D6011496A4 +:106070006C910E944A31BFEFCB1ADB0A0F5F1F4FB2 +:10608000EACF0E942B0EDECE8AE0ADCF0A811B81C3 +:10609000102701271027FE0131966F01EC80CF01F8 +:1060A0008E0D911D7C01C8018796EC14FD0409F446 +:1060B000C9CE003CA3E01A0750F40E943631F60125 +:1060C00084830F5F1F4FBFEFCB1ADB0AECCFD601E3 +:1060D00014961C92F6CF0A811B81102701271027E6 +:1060E000FE0131966F01EC80E00EF12EF11CC8012B +:1060F0008796E016F10609F4A5CE003CF3E01F07F1 +:1061000028F4D60114966C910E944A31BFEFCB1A45 +:10611000DB0A0F5F1F4FEBCF09BD19BD09B400FEAD +:10612000FDCF8091D8008F7D8093D8008091E000D2 +:1061300082608093E0008091E00081FDFCCF0E94AE +:10614000841777CD86E290E00E9436311B821C8254 +:106150001D828E8377CE2D32314008F08DCCC3CC9A +:106160002D32314008F03CCC72CC87FB082E06263D +:1061700087FD819567FD61950E9407310EF4919529 +:1061800007FC81950895AA1BBB1B51E107C0AA1FFC +:10619000BB1FA617B70710F0A61BB70B881F991FC8 +:1061A0005A95A9F780959095BC01CD01089597FB6C +:1061B000072E16F4009407D077FD09D00E94C33053 +:1061C00007FC05D03EF4909581959F4F08957095FA +:1061D00061957F4F0895EE0FFF1F0590F491E02D1C +:1061E00009946927962769277827872778270895AC +:1061F0000E94B331332312F48A1B9B0B0C9402319F +:106200000E94B331B7FF0895821B930B0895991B29 +:1062100079E004C0991F961708F0961B881F7A959D +:10622000C9F780950895FB01DC0102C005900D922D +:1062300041505040D8F70895FC014150504030F093 +:1062400001900616D1F73197CF0108958827992735 +:106250000895FB01DC0104C08D910190801921F4A7 +:1062600041505040C8F7881B990B0895F999FECF0B +:1062700092BD81BDF89A992780B50895A6E1B0E056 +:1062800044E050E00C947031A8E1B0E042E050E00E +:106290000C947031262FF999FECF92BD81BDF89AEA +:1062A000019700B4021639F01FBA20BD0FB6F8945A +:1062B000FA9AF99A0FBE08950396272F0E944B3140 +:1062C0000E944A31252F0E944B31242F0C944B31D0 +:1062D0000196272F0E944B310C944A31DC01CB01EF +:1062E000FC01F999FECF06C0F2BDE1BDF89A3196E6 +:1062F00000B40D9241505040B8F708950E94B33158 +:10630000A59F900DB49F900DA49F800D911D112409 +:106310000895B7FF0C947E310E947E31821B930B4F +:106320000895A1E21A2EAA1BBB1BFD010DC0AA1FD6 +:10633000BB1FEE1FFF1FA217B307E407F50720F0EE +:10634000A21BB30BE40BF50B661F771F881F991F69 +:106350001A9469F760957095809590959B01AC01B2 +:10636000BD01CF010895A29FB001B39FC001A39FBB +:10637000700D811D1124911DB29F700D811D11247E +:10638000911D0895F894FFCF5E0F5E0F670F670FA2 +:10639000690F670F670F670F5E0F5E0F6E0F670F56 +:1063A000670F6E0F7E18A618F918A618F918D918D5 +:1063B0001119F9180E1A1B1A3C1E3C1EB01EB01EF5 +:1063C0000E1F281F731E731E331FBD1FCE1FCE1F2F +:1063D000DF2EE32E492F5A2F652F842F872FC62FAC +:1063E000E72F572F572FF22FF52FF92F1F3041305E +:0663F000443046306B3022 +:1063F6007606910C700C6C0C680C01191A1B1C1D8E +:106406001E1F202122010201002A002A2A01818260 +:1064160083E200E900EA00B500B600B700CD0083CC +:1064260001CC008A01920194012102230224022553 +:1064360002260227022A02B300B4006F007000F0A1 +:10644600F1F2F3F5F6F700010203040537363500DD +:10645600FF0100010000FFFF0000010001FF000432 +:106466000404040404040202616264669092949730 +:106476000660636567919395960700010202020222 +:106486000606060909090909090F0F0F0F0F0F154F +:106496001515181919191919191919191923244033 +:0E64A60022B6B6019401DE00C808E108010923 +:00000001FF From 3585ae6b57230aeae85e124b46c43e1ceb00fb0a Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 11 Sep 2021 02:53:37 -0400 Subject: [PATCH 015/155] Restore files. --- .../ps17/keymaps/default/keymap.c | 365 ---- .../solartempest/ps17/keymaps/via/keymap.c | 61 - .../ps17/keymaps/via_bright/keymap.c | 332 ---- .../keymaps/{via_bright => via_fade}/config.h | 0 .../ps17/keymaps/via_fade/keymap - Copy.c | 447 +++++ .../ps17/keymaps/via_fade/keymap.c | 428 +++++ .../keymaps/{via_bright => via_fade}/rules.mk | 0 keyboards/solartempest/ps17/ps17.c | 6 - keyboards/solartempest/ps17/rules.mk | 2 - .../ps17/solartempest_ps17_via.hex | 1549 +++++++++++++++++ 10 files changed, 2424 insertions(+), 766 deletions(-) delete mode 100644 keyboards/solartempest/ps17/keymaps/default/keymap.c delete mode 100644 keyboards/solartempest/ps17/keymaps/via_bright/keymap.c rename keyboards/solartempest/ps17/keymaps/{via_bright => via_fade}/config.h (100%) create mode 100644 keyboards/solartempest/ps17/keymaps/via_fade/keymap - Copy.c create mode 100644 keyboards/solartempest/ps17/keymaps/via_fade/keymap.c rename keyboards/solartempest/ps17/keymaps/{via_bright => via_fade}/rules.mk (100%) create mode 100644 keyboards/solartempest/ps17/solartempest_ps17_via.hex diff --git a/keyboards/solartempest/ps17/keymaps/default/keymap.c b/keyboards/solartempest/ps17/keymaps/default/keymap.c deleted file mode 100644 index 3dc48708a4ef..000000000000 --- a/keyboards/solartempest/ps17/keymaps/default/keymap.c +++ /dev/null @@ -1,365 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include QMK_KEYBOARD_H -#include "PS17.h" -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. Don't forget to update the VIA json as well. - ATABF = USER00, //Alt tab forwards - ATABR //Alt tab reverse - }; -#else - enum custom_keycodes { //Use SAFE_RANGE when Via is disabled. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR //Alt tab reverse - }; -#endif - - -enum combos { //Tap combos - kppls_7, - kppls_8 -}; - -const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; -const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; - -combo_t key_combos[COMBO_COUNT] = { - [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), - [kppls_8] = COMBO(kppl8_combo, KC_DELETE) -}; - - -// Tap Dance declarations -enum { - TD_MINUS_NUMLOCK, -}; - -// Tap Dance definitions -qk_tap_dance_action_t tap_dance_actions[] = { - // Tap once for Escape, twice for Caps Lock - [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), -}; - -//TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode - - -enum layer_names { - _LAYER0, - _LAYER1, - _LAYER2, - _LAYER3, - _LAYER4, - _LAYER5, - _LAYER6, - _LAYER7, - _LAYER8, - _LAYER9 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAYER0] = LAYOUT( - KC_PGUP, KC__MUTE, KC_PGDOWN, - MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, TD(TD_MINUS_NUMLOCK), - KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, - KC_KP_4, KC_KP_5, KC_KP_6, - KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, - KC_KP_0, KC_KP_DOT - ), - [_LAYER1] = LAYOUT( - KC_LEFT, KC_TRNS, KC_RIGHT, - KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, - TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, RESET, - RESET, KC_TRNS - ), - [_LAYER2] = LAYOUT( - KC_TRNS, KC_TRNS, KC_TRNS, - TO(0), KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO - ), - [_LAYER3] = LAYOUT( - ATABR, KC_TRNS, ATABF, - TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), - C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, - KC_PGDOWN, KC_PGUP - ), - [_LAYER4] = LAYOUT( - ATABR, KC_TRNS, ATABF, - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_RIGHT, - C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_SCROLLLOCK, - KC_F13, KC_F14 - ), - [_LAYER5] = LAYOUT( - 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 - ), - [_LAYER6] = LAYOUT( - 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 - ), - [_LAYER7] = LAYOUT( - 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 - ), - [_LAYER8] = LAYOUT( - 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 - ), - [_LAYER9] = LAYOUT( - 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 - ) -}; - - -void matrix_init_user(void) { //run when matrix is initiated, before all features init -}; - -void matrix_scan_user(void) { //run whenever user matrix is scanned - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { //Actions to override existing key behaviours - switch (keycode) { //For super alt tab keycodes - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - break; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - break; - } - return true; -}; - - -void keyboard_post_init_user(void) { //run as last task in keyboard init - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(58, 255, 80); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_enable(); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9. Looks great this way! - rgblight_sethsv(58, 255, 30); //Set lower default brightness when connected as the right side dimming is not yet in effect - #endif -}; - - -#ifdef RGBLIGHT_ENABLE -layer_state_t layer_state_set_user(layer_state_t state) { - switch (get_highest_layer(state)) { - //This custom layer lighting is similar to RGB Light Gradient 9, but customized to separate key and case underglow brightness - static uint16_t underglow_brightness = 140; - static uint16_t perkey_brightness = 80; - static uint16_t lastrow_brightness = 15; //for less shine-through at case edges - static uint16_t current_hue = 0; //hue calculated to be used - static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue - static uint16_t layer0_hueincrement = 2; //hue gradient colour increment - static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green - static uint16_t layer1_hueincrement = 2; //hue gradient colour increment - static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) - static uint16_t layer2_hueincrement = 2; //hue gradient colour increment - static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple - static uint16_t layer3_hueincrement = 2; //hue gradient colour increment - static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red - static uint16_t layer4_hueincrement = 1; //hue gradient colour increment - - /*#define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 1, 0, \ - 3, 2, \ - 9, 8, 7, 6, 5, 4, \ - 13, 12, 11, 10, \ - 18, 17, 16, 15, 14,\ - 22, 21, 20, 19, \ - 27, 26, 25, 24, 23 )*/ - - case _LAYER0: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER1: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER2: //Photoshop custom layer (macros and keys all done in VIA) - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3) { //Underglow LEDs - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } - else if (i == 6) {rgblight_sethsv_at(148,255,perkey_brightness+15,i);} //Text - light blue - else if (i == 5) {rgblight_sethsv_at(140,255,perkey_brightness+15,i);} //New Layer - light blue - else if (i == 15) {rgblight_sethsv_at(195,255,perkey_brightness+15,i);} //Marquee - rose - else if (i == 9) {rgblight_sethsv_at(190,255,underglow_brightness,i);} //Underglow to match - else if (i == 13) {rgblight_sethsv_at(180,255,perkey_brightness+15,i);} //Healing Brush - purple - else if (i == 12) {rgblight_sethsv_at(185,255,perkey_brightness+15,i);} //Clone - else if (i == 11) {rgblight_sethsv_at(190,255,perkey_brightness+15,i);} //Default - else if (i == 7) {rgblight_sethsv_at(195,255,perkey_brightness+15,i);} //Brush - else if (i == 18) {rgblight_sethsv_at(230,255,underglow_brightness,i);} //Underglow to match - else if (i == 17) {rgblight_sethsv_at(0,255,perkey_brightness+15,i);} //copy - red - else if (i == 16) {rgblight_sethsv_at(3,255,perkey_brightness+15,i);} //Paste - else if (i == 22) {rgblight_sethsv_at(5,255,perkey_brightness+15,i);} //Undo - else if (i == 21) {rgblight_sethsv_at(0,255,perkey_brightness+15,i);} //Redo - else if (i == 26) {rgblight_sethsv_at(200,255,lastrow_brightness+15,i);} //Space - blue - else if (i == 24) {rgblight_sethsv_at(195,255,lastrow_brightness+15,i);} //Alt - else if (i == 20) {rgblight_sethsv_at(190,255,lastrow_brightness+15,i);} //Shift - else if (i == 27) {rgblight_sethsv_at(200,255,underglow_brightness,i);} //Underglow to match - else if (i == 10) {rgblight_sethsv_at(current_hue,255,lastrow_brightness,i);} //Zoom in - else if (i == 19) {rgblight_sethsv_at(current_hue,255,lastrow_brightness,i);} //Zoom out - else if (i == 25) {rgblight_sethsv_at(180,255,underglow_brightness,i);} //Underglow to match - else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code is for normal gradient colouration - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case _LAYER3: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER4: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - } - return state; - }; -#endif diff --git a/keyboards/solartempest/ps17/keymaps/via/keymap.c b/keyboards/solartempest/ps17/keymaps/via/keymap.c index b75dc6fc7272..c68c32710e5b 100644 --- a/keyboards/solartempest/ps17/keymaps/via/keymap.c +++ b/keyboards/solartempest/ps17/keymaps/via/keymap.c @@ -23,19 +23,6 @@ #endif -// IDLE TIMEOUTS -#ifdef IDLE_TIMEOUT_ENABLE - #define TIMEOUT_THRESHOLD_DEFAULT 5 // default timeout minutes - #define TIMEOUT_THRESHOLD_MAX 140 // upper limits (2 hours and 10 minutes -- no rgb indicators above this value) - - //prototype functions - uint16_t get_timeout_threshold(void); - void timeout_reset_timer(void); - void timeout_update_threshold(bool increase); - void timeout_tick_timer(void); -#endif //IDLE_TIMEOUT_ENABLE - - bool is_alt_tab_active = false; // Super Alt Tab Code uint16_t alt_tab_timer = 0; bool spam_arrow; @@ -200,49 +187,6 @@ void matrix_init_user(void) { //run when matrix is initiated, before all feature }; -// TIMEOUTS -#ifdef IDLE_TIMEOUT_ENABLE - static uint16_t timeout_timer = 0; - static uint16_t timeout_counter = 0; //in minute intervals - static uint16_t timeout_threshold = TIMEOUT_THRESHOLD_DEFAULT; - - uint16_t get_timeout_threshold(void) { - return timeout_threshold; - } - - void timeout_reset_timer(void) { - timeout_timer = timer_read(); - timeout_counter = 0; - }; - - void timeout_update_threshold(bool increase) { - if (increase && timeout_threshold < TIMEOUT_THRESHOLD_MAX) timeout_threshold++; - if (!increase && timeout_threshold > 0) timeout_threshold--; - }; - - void timeout_tick_timer(void) { - if (timeout_threshold > 0) { - if (timer_elapsed(timeout_timer) >= 60000) { // 1 minute tick - timeout_counter++; - timeout_timer = timer_read(); - } - #ifdef RGB_MATRIX_ENABLE - if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { - rgb_matrix_disable_noeeprom(); - } - #endif - #ifdef RGBLIGHT_ENABLE - if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { - rgblight_toggle_noeeprom(); - } - #endif - } // timeout_threshold = 0 will disable timeout - } - - __attribute__((weak)) void matrix_scan_keymap(void) {} -#endif // IDLE_TIMEOUT_ENABLE - - void matrix_scan_user(void) { //run whenever user matrix is scanned if (is_alt_tab_active) { if (timer_elapsed(alt_tab_timer) > 1000) { @@ -256,11 +200,6 @@ void matrix_scan_user(void) { //run whenever user matrix is scanned //tap_code(KC_DOWN); tap_code(KC_F24); } - - #ifdef IDLE_TIMEOUT_ENABLE - timeout_tick_timer(); - matrix_scan_keymap(); - #endif // IDLE_TIMEOUT_ENABLE }; bool process_record_user(uint16_t keycode, keyrecord_t *record) { diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c b/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c deleted file mode 100644 index 6c422f8be38d..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c +++ /dev/null @@ -1,332 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include QMK_KEYBOARD_H -#include "PS17.h" -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = USER00, //Alt tab forwards - ATABR //Alt tab reverse - }; -#else - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR //Alt tab reverse - }; -#endif - - -enum combos { //Tap combos - kppls_7, - kppls_8 -}; - -const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; -const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; - -combo_t key_combos[COMBO_COUNT] = { - [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), - [kppls_8] = COMBO(kppl8_combo, KC_DELETE) -}; - - -// Tap Dance declarations -enum { - TD_MINUS_NUMLOCK, -}; - -// Tap Dance definitions. Not VIA compatible. -qk_tap_dance_action_t tap_dance_actions[] = { - // Tap once for Escape, twice for Caps Lock - [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), -}; -//TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode - - -enum layer_names { - _LAYER0, - _LAYER1, - _LAYER2, - _LAYER3, - _LAYER4, - _LAYER5, - _LAYER6, - _LAYER7, - _LAYER8, - _LAYER9 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAYER0] = LAYOUT( - KC_PGDOWN, KC__MUTE, KC_PGUP, - MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, - KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, - KC_KP_4, KC_KP_5, KC_KP_6, - KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, - KC_KP_0, KC_KP_DOT - ), - [_LAYER1] = LAYOUT( - KC_RIGHT, KC_TRNS, KC_LEFT, - KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, - TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, RESET, - RESET, KC_TRNS - ), - [_LAYER2] = LAYOUT( - KC_RBRACKET, KC_TRNS, KC_LBRACKET, - TO(0), KC_B, KC_T, C(S(KC_N)), - KC_J, KC_S, KC_D, C(KC_MINS), - C(KC_C), C(KC_V), KC_M, - C(KC_N), C(S(KC_Z)), KC_LSHIFT, C(KC_PPLS), - KC_SPACE, KC_LALT - ), - [_LAYER3] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), - C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, - KC_PGDOWN, KC_PGUP - ), - [_LAYER4] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_RIGHT, - C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_NUMLOCK, - KC_F13, KC_F14 - ), - [_LAYER5] = LAYOUT( - 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 - ), - [_LAYER6] = LAYOUT( - 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 - ), - [_LAYER7] = LAYOUT( - 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 - ), - [_LAYER8] = LAYOUT( - 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 - ), - [_LAYER9] = LAYOUT( - 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 - ) -}; - - -void matrix_init_user(void) { //run when matrix is initiated, before all features init -}; - -void matrix_scan_user(void) { //run whenever user matrix is scanned - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { //Actions to override existing key behaviours - switch (keycode) { //For super alt tab keycodes - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - break; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - break; - } - return true; -}; - - -void keyboard_post_init_user(void) { //run as last task in keyboard init - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(58, 255, 80); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_enable(); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9. Looks great this way! - rgblight_sethsv(58, 255, 100); //Set lower default brightness when connected as the right side dimming is not yet in effect - layer_move(0); //start on layer 0 to get the lighting activated - #endif -}; - - -#ifdef RGBLIGHT_ENABLE -layer_state_t layer_state_set_user(layer_state_t state) { - switch (get_highest_layer(state)) { - //This custom layer lighting is similar to RGB Light Gradient 9, but customized to separate key and case underglow brightness - static uint16_t underglow_brightness = 120; - static uint16_t perkey_brightness = 120; - static uint16_t lastrow_brightness = 30; //for less shine-through at case edges - static uint16_t current_hue = 0; //hue calculated to be used - static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue - static uint16_t layer0_hueincrement = 2; //hue gradient colour increment - static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green - static uint16_t layer1_hueincrement = 2; //hue gradient colour increment - static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) - static uint16_t layer2_hueincrement = 2; //hue gradient colour increment - static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple - static uint16_t layer3_hueincrement = 2; //hue gradient colour increment - static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red - static uint16_t layer4_hueincrement = 1; //hue gradient colour increment - - /*#define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 1, 0, \ - 3, 2, \ - 9, 8, 7, 6, 5, 4, \ - 13, 12, 11, 10, \ - 18, 17, 16, 15, 14,\ - 22, 21, 20, 19, \ - 27, 26, 25, 24, 23 )*/ - - case _LAYER0: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER1: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER2: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code is for normal gradient colouration - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER3: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER4: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - } - return state; - }; -#endif diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/config.h b/keyboards/solartempest/ps17/keymaps/via_fade/config.h similarity index 100% rename from keyboards/solartempest/ps17/keymaps/via_bright/config.h rename to keyboards/solartempest/ps17/keymaps/via_fade/config.h diff --git a/keyboards/solartempest/ps17/keymaps/via_fade/keymap - Copy.c b/keyboards/solartempest/ps17/keymaps/via_fade/keymap - Copy.c new file mode 100644 index 000000000000..05687f34ca3b --- /dev/null +++ b/keyboards/solartempest/ps17/keymaps/via_fade/keymap - Copy.c @@ -0,0 +1,447 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#include QMK_KEYBOARD_H +#include "PS17.h" +#ifdef RGBLIGHT_ENABLE + extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT +#endif + +static uint16_t last_rgb; //For RGB Fade effect +static uint8_t rgb_state[RGBLED_NUM]; +#define RGB_SUSTAIN 0.8 //default 0.7 +#define RGB_HIT 0x99 + +bool is_alt_tab_active = false; // Super Alt Tab Code +uint16_t alt_tab_timer = 0; +bool spam_arrow; +uint16_t spam_timer = false; +uint16_t spam_interval = 1000; // (1000ms == 1s) +bool teams_muted; +#ifdef VIA_ENABLE + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = USER00, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. + TEAMSMUTE //MS Teams mute shortcut and simple LED status + }; +#else + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = SAFE_RANGE, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. + TEAMSMUTE //MS Teams mute shortcut and simple LED status + }; +#endif + +#ifdef COMBO_ENABLE //Tap combos + enum combos { + kppls_7, //Hold plus and 7 to backspace + kppls_8, //Hold plus and 8 to delete + kpent_4, //Hold enter and 4 for left arrow + kpent_5, //Hold enter and 5 for down arrow + kpent_6, //Hold enter and 6 for right arrow + kpent_8, //Hold enter and 4'8 for up arrow + }; + const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; + const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; + const uint16_t PROGMEM kpent4_combo[] = {KC_PENT, KC_KP_4, COMBO_END}; + const uint16_t PROGMEM kpent5_combo[] = {KC_PENT, KC_KP_5, COMBO_END}; + const uint16_t PROGMEM kpent6_combo[] = {KC_PENT, KC_KP_6, COMBO_END}; + const uint16_t PROGMEM kpent8_combo[] = {KC_PENT, KC_KP_8, COMBO_END}; + combo_t key_combos[COMBO_COUNT] = { + [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), + [kppls_8] = COMBO(kppl8_combo, KC_DELETE), + [kpent_4] = COMBO(kpent4_combo, KC_LEFT), + [kpent_5] = COMBO(kpent5_combo, KC_DOWN), + [kpent_6] = COMBO(kpent6_combo, KC_RGHT), + [kpent_8] = COMBO(kpent8_combo, KC_UP) + }; +#endif + +#ifdef TAP_DANCE_ENABLE// Tap Dance definitions. Not VIA compatible. + enum { + TD_MINUS_NUMLOCK, + }; + qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for Escape, twice for Caps Lock + [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), + }; + //TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode (non-VIA only) +#endif + + +enum layer_names { + _LAYER0, + _LAYER1, + _LAYER2, + _LAYER3, + _LAYER4, + _LAYER5, + _LAYER6, + _LAYER7, + _LAYER8, + _LAYER9 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_LAYER0] = LAYOUT( + KC_PGDOWN, KC__MUTE, KC_PGUP, + MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, + KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, + KC_KP_4, KC_KP_5, KC_KP_6, + KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, + KC_KP_0, KC_KP_DOT + ), + [_LAYER1] = LAYOUT( + KC_RIGHT, KC_TRNS, KC_LEFT, + KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, + TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, RESET, + RESET, KC_TRNS + ), + [_LAYER2] = LAYOUT( + KC_RBRACKET, KC_TRNS, KC_LBRACKET, + TO(0), KC_B, KC_T, C(S(KC_N)), + KC_J, KC_S, KC_D, C(KC_MINS), + C(KC_C), C(KC_V), KC_M, + C(KC_N), C(S(KC_Z)), KC_LSHIFT, C(KC_PPLS), + KC_SPACE, KC_LALT + ), + [_LAYER3] = LAYOUT( + ATABF, KC_TRNS, ATABR, + TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), + C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), + KC_LEFT, KC_DOWN, KC_RIGHT, + KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, + KC_PGDOWN, KC_PGUP + ), + [_LAYER4] = LAYOUT( + ATABF, KC_TRNS, ATABR, + TO(0), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, + KC_LEFT, KC_DOWN, KC_RIGHT, + C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_NUMLOCK, + KC_F13, KC_F14 + ), + [_LAYER5] = LAYOUT( + 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 + ), + [_LAYER6] = LAYOUT( + 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 + ), + [_LAYER7] = LAYOUT( + 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 + ), + [_LAYER8] = LAYOUT( + 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 + ), + [_LAYER9] = LAYOUT( + 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 + ) +}; + + +void matrix_init_user(void) { //run when matrix is initiated, before all features init + //For RGB fade effect + last_rgb = timer_read(); + rgblight_setrgb(0, 0, 0); + for (int i = 0; i < RGBLED_NUM; i++) { + rgb_state[i] = 0; + } + //End RGB fade effect +}; + + +void matrix_scan_user(void) { //run whenever user matrix is scanned + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } + if (spam_arrow && timer_elapsed(spam_timer) >= spam_interval) { + spam_timer = timer_read(); + //tap_code(KC_UP); + //tap_code(KC_DOWN); + tap_code(KC_F24); + } + + #ifdef RGBLIGHT_ENABLE + // Animate the ripple effect at 50Hz (20ms interval): + if (timer_elapsed(last_rgb) > 20) { + last_rgb = timer_read(); + + uint8_t next_rgb_state[RGBLED_NUM]; + for (int i = 0; i < RGBLED_NUM; i++) { + // Retain some: + next_rgb_state[i] = rgb_state[i] * RGB_SUSTAIN; + } + // Assign the new state: + for (int i = 0; i < RGBLED_NUM; i++) { + rgb_state[i] = next_rgb_state[i]; + led[i].b = rgb_state[i]; + } + rgblight_set(); + } + #endif //RGBLIGHT_ENABLE + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { +/* #ifdef RGBLIGHT_ENABLE //For RGB fade + if (record->event.pressed) { + // Bump the level of the LED that corresponds to this key. + keypos_t key = record->event.key; + + int i = 0; + i=26; + rgb_state[i] = RGB_HIT; + } + #endif*/ + + + switch (keycode) { //For keycode overrides + case ATABF: //Alt tab forwards + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + return true; + case ATABR: //Alt tab reverse + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_LSHIFT); + register_code(KC_TAB); + } else { + unregister_code(KC_LSHIFT); + unregister_code(KC_TAB); + } + return true; + + case NMR: //Move window to next monitor on right + if (record->event.pressed) { + register_code(KC_LSFT); + register_code(KC_LWIN); + register_code(KC_RIGHT); + unregister_code(KC_RIGHT); + unregister_code(KC_LWIN); + unregister_code(KC_LSFT); + } + return true; + case NML: //Move window to next monitor on left + if (record->event.pressed) { + register_code(KC_LSFT); + register_code(KC_LWIN); + register_code(KC_LEFT); + unregister_code(KC_LEFT); + unregister_code(KC_LWIN); + unregister_code(KC_LSFT); + } + return true; + + case SPAMARROW: // Moves arrow up and down + if (record->event.pressed) { + spam_arrow ^= 1; + spam_timer = timer_read(); + if(spam_arrow==1) { //Change LED colour on bottom row and underglow to orange to indicate on + rgblight_sethsv_at(15,255,120,24); + rgblight_sethsv_at(15,255,120,25); + rgblight_sethsv_at(15,255,120,26); + rgblight_sethsv_at(15,255,120,27); + } + else { + rgblight_sethsv_at(180,255,120,24); //Set LEDs back to purple, assuming on that coloured layer + rgblight_sethsv_at(180,255,120,25); + rgblight_sethsv_at(180,255,120,26); + rgblight_sethsv_at(180,255,120,27); + } + } + return false; + + case TEAMSMUTE: //Mute MS teams and simply change LED for key 1 colour + if (record->event.pressed) { + register_code(KC_LCTRL); + register_code(KC_LSFT); + register_code(KC_M); + unregister_code(KC_M); + unregister_code(KC_LSFT); + unregister_code(KC_LCTRL); + teams_muted ^= 1; + if(teams_muted==1) { //Change LED colour on LEDs for key 1 and underglow to orange to indicate muted + rgblight_sethsv_at(15,255,120,18); + rgblight_sethsv_at(15,255,120,22); + } + else { + rgblight_sethsv_at(175,255,120,18); //Set LEDs back to violet, assuming on that coloured layer + rgblight_sethsv_at(175,255,120,22); + } + } + return true; + } + return true; +} + + +// RGB Layer Light Settings - Note that this will fix the key switch LED colour and brightness +const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Spring green (Code is extra for static key lighting of layers) +const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 5,255,120}); //Yellow-orange (Code is extra for static key lighting of layers) +const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); //Cyan (Code is extra for static key lighting of layers) +const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); //Magenta (Code is extra for static key lighting of layers) +const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 15,255,120}); //Orange-red (Code is extra for static key lighting of layers) +const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers + my_layer0_layer, + my_layer1_layer, + my_layer2_layer, + my_layer3_layer, + my_layer4_layer +); + + +void keyboard_post_init_user(void) { //run as last task in keyboard init + #ifdef RGB_MATRIX_ENABLE + //NOTE 1: Layer lighting doesn't work in RGB matrix mode + //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode + //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode + //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state + rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode + rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow + #endif + #ifdef RGBLIGHT_ENABLE + rgblight_layers = my_rgb_layers;// Enable the LED layers + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 + layer_move(0); //start on layer 0 to get the lighting activated + #endif +}; + + +#ifdef RGBLIGHT_ENABLE +layer_state_t layer_state_set_user(layer_state_t state) { + rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active + rgblight_set_layer_state(1, layer_state_cmp(state, 1)); + rgblight_set_layer_state(2, layer_state_cmp(state, 2)); + rgblight_set_layer_state(3, layer_state_cmp(state, 3)); + rgblight_set_layer_state(4, layer_state_cmp(state, 4)); + + // This is what the LED layout is. + // 1, 0, + // 3, 2, + // 9, 8, 7, 6, 5, 4, + // 13, 12, 11, 10, + // 18, 17, 16, 15, 14, + // 22, 21, 20, 19, + // 27, 26, 25, 24, 23 + + switch(biton32(state)){ // Change all other LEDs based on layer state as well + case 0: + rgblight_sethsv_noeeprom(50,255,100); + break; + case 1: + rgblight_sethsv_noeeprom(5,255,100); + break; + case 2: + break; + case 3: + rgblight_sethsv_noeeprom(215,255,100); + break; + case 4: + rgblight_sethsv_noeeprom(15,255,100); + /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter + current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + };*/ + break; + } + return state; + }; +#endif + + +bool encoder_update_user(uint8_t index, bool clockwise) { // QMK encoder functionality + #ifdef VIA_ENABLE //Add in VIA setting of rotary encoder keymap + if (index == 0) { // First encoder + if (clockwise) { + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) }); //Time is 1 tick otherwise empty event + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) }); + + rgb_state[24] = RGB_HIT; + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) }); + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) }); + + rgb_state[26] = RGB_HIT; + } + } + /*if (clockwise) { //This code only works for single keypresses with the rotary encoder + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 0)); //Allow setting of keymap in VIA + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 2)); //Allow setting of keymap in VIA + }*/ + #endif + return true; +} \ No newline at end of file diff --git a/keyboards/solartempest/ps17/keymaps/via_fade/keymap.c b/keyboards/solartempest/ps17/keymaps/via_fade/keymap.c new file mode 100644 index 000000000000..94e4d9be467c --- /dev/null +++ b/keyboards/solartempest/ps17/keymaps/via_fade/keymap.c @@ -0,0 +1,428 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#include QMK_KEYBOARD_H +#include "PS17.h" +#ifdef RGBLIGHT_ENABLE + extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT +#endif + + +bool is_encoder_rotate = false; // For encoder animated LEDs +bool encoder_effect = false; +uint16_t encoder_timer = 0; +uint16_t encoder_interval = 500; + + +bool is_alt_tab_active = false; // Super Alt Tab Code +uint16_t alt_tab_timer = 0; +bool spam_arrow; +uint16_t spam_timer = false; +uint16_t spam_interval = 1000; // (1000ms == 1s) +bool teams_muted; +#ifdef VIA_ENABLE + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = USER00, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. + TEAMSMUTE //MS Teams mute shortcut and simple LED status + }; +#else + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = SAFE_RANGE, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. + TEAMSMUTE //MS Teams mute shortcut and simple LED status + }; +#endif + +#ifdef COMBO_ENABLE //Tap combos + enum combos { + kppls_7, //Hold plus and 7 to backspace + kppls_8, //Hold plus and 8 to delete + kpent_4, //Hold enter and 4 for left arrow + kpent_5, //Hold enter and 5 for down arrow + kpent_6, //Hold enter and 6 for right arrow + kpent_8, //Hold enter and 4'8 for up arrow + }; + const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; + const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; + const uint16_t PROGMEM kpent4_combo[] = {KC_PENT, KC_KP_4, COMBO_END}; + const uint16_t PROGMEM kpent5_combo[] = {KC_PENT, KC_KP_5, COMBO_END}; + const uint16_t PROGMEM kpent6_combo[] = {KC_PENT, KC_KP_6, COMBO_END}; + const uint16_t PROGMEM kpent8_combo[] = {KC_PENT, KC_KP_8, COMBO_END}; + combo_t key_combos[COMBO_COUNT] = { + [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), + [kppls_8] = COMBO(kppl8_combo, KC_DELETE), + [kpent_4] = COMBO(kpent4_combo, KC_LEFT), + [kpent_5] = COMBO(kpent5_combo, KC_DOWN), + [kpent_6] = COMBO(kpent6_combo, KC_RGHT), + [kpent_8] = COMBO(kpent8_combo, KC_UP) + }; +#endif + +#ifdef TAP_DANCE_ENABLE// Tap Dance definitions. Not VIA compatible. + enum { + TD_MINUS_NUMLOCK, + }; + qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for Escape, twice for Caps Lock + [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), + }; + //TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode (non-VIA only) +#endif + + +enum layer_names { + _LAYER0, + _LAYER1, + _LAYER2, + _LAYER3, + _LAYER4, + _LAYER5, + _LAYER6, + _LAYER7, + _LAYER8, + _LAYER9 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_LAYER0] = LAYOUT( + KC_PGDOWN, KC__MUTE, KC_PGUP, + MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, + KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, + KC_KP_4, KC_KP_5, KC_KP_6, + KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, + KC_KP_0, KC_KP_DOT + ), + [_LAYER1] = LAYOUT( + KC_RIGHT, KC_TRNS, KC_LEFT, + KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, + TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, RESET, + RESET, KC_TRNS + ), + [_LAYER2] = LAYOUT( + KC_RBRACKET, KC_TRNS, KC_LBRACKET, + TO(0), KC_B, KC_T, C(S(KC_N)), + KC_J, KC_S, KC_D, C(KC_MINS), + C(KC_C), C(KC_V), KC_M, + C(KC_N), C(S(KC_Z)), KC_LSHIFT, C(KC_PPLS), + KC_SPACE, KC_LALT + ), + [_LAYER3] = LAYOUT( + ATABF, KC_TRNS, ATABR, + TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), + C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), + KC_LEFT, KC_DOWN, KC_RIGHT, + KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, + KC_PGDOWN, KC_PGUP + ), + [_LAYER4] = LAYOUT( + ATABF, KC_TRNS, ATABR, + TO(0), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, + KC_LEFT, KC_DOWN, KC_RIGHT, + C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_NUMLOCK, + KC_F13, KC_F14 + ), + [_LAYER5] = LAYOUT( + 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 + ), + [_LAYER6] = LAYOUT( + 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 + ), + [_LAYER7] = LAYOUT( + 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 + ), + [_LAYER8] = LAYOUT( + 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 + ), + [_LAYER9] = LAYOUT( + 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 + ) +}; + + +void matrix_init_user(void) { //run when matrix is initiated, before all features init +}; + + +void matrix_scan_user(void) { //run whenever user matrix is scanned + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } + if (spam_arrow && timer_elapsed(spam_timer) >= spam_interval) { + spam_timer = timer_read(); + tap_code(KC_F24); + //tap_code(KC_UP); + //tap_code(KC_DOWN); + } + + #ifdef RGBLIGHT_ENABLE + if (!encoder_effect && is_encoder_rotate) { //Turn on the effect + rgblight_set_effect_range(5, 4); + rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); + is_encoder_rotate = false; + encoder_effect = true; + } else if (!is_encoder_rotate && timer_elapsed(encoder_timer) > encoder_interval) { //Turn off the effect + rgblight_set_effect_range(0, 27); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); + is_encoder_rotate = false; + encoder_effect = false; + } else { + is_encoder_rotate = false; //Wait until encoder is turned again + } + #endif +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { //For keycode overrides + case ATABF: //Alt tab forwards + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + return true; + case ATABR: //Alt tab reverse + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_LSHIFT); + register_code(KC_TAB); + } else { + unregister_code(KC_LSHIFT); + unregister_code(KC_TAB); + } + return true; + + case NMR: //Move window to next monitor on right + if (record->event.pressed) { + register_code(KC_LSFT); + register_code(KC_LWIN); + register_code(KC_RIGHT); + unregister_code(KC_RIGHT); + unregister_code(KC_LWIN); + unregister_code(KC_LSFT); + } + return true; + case NML: //Move window to next monitor on left + if (record->event.pressed) { + register_code(KC_LSFT); + register_code(KC_LWIN); + register_code(KC_LEFT); + unregister_code(KC_LEFT); + unregister_code(KC_LWIN); + unregister_code(KC_LSFT); + } + return true; + + case SPAMARROW: // Moves arrow up and down + if (record->event.pressed) { + spam_arrow ^= 1; + spam_timer = timer_read(); + if(spam_arrow==1) { //Change LED colour on bottom row and underglow to orange to indicate on + rgblight_sethsv_at(15,255,120,24); + rgblight_sethsv_at(15,255,120,25); + rgblight_sethsv_at(15,255,120,26); + rgblight_sethsv_at(15,255,120,27); + } + else { + rgblight_sethsv_at(180,255,120,24); //Set LEDs back to purple, assuming on that coloured layer + rgblight_sethsv_at(180,255,120,25); + rgblight_sethsv_at(180,255,120,26); + rgblight_sethsv_at(180,255,120,27); + } + } + return false; + + case TEAMSMUTE: //Mute MS teams and simply change LED for key 1 colour + if (record->event.pressed) { + register_code(KC_LCTRL); + register_code(KC_LSFT); + register_code(KC_M); + unregister_code(KC_M); + unregister_code(KC_LSFT); + unregister_code(KC_LCTRL); + teams_muted ^= 1; + if(teams_muted==1) { //Change LED colour on LEDs for key 1 and underglow to orange to indicate muted + rgblight_sethsv_at(15,255,120,18); + rgblight_sethsv_at(15,255,120,22); + } + else { + rgblight_sethsv_at(175,255,120,18); //Set LEDs back to violet, assuming on that coloured layer + rgblight_sethsv_at(175,255,120,22); + } + } + return true; + } + return true; +} + + +// RGB Layer Light Settings - Note that this will fix the key switch LED colour and brightness +const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Spring green (Code is extra for static key lighting of layers) +const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 5,255,120}); //Yellow-orange (Code is extra for static key lighting of layers) +const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); //Cyan (Code is extra for static key lighting of layers) +const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); //Magenta (Code is extra for static key lighting of layers) +const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 15,255,120}); //Orange-red (Code is extra for static key lighting of layers) +const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers + my_layer0_layer, + my_layer1_layer, + my_layer2_layer, + my_layer3_layer, + my_layer4_layer +); + + +void keyboard_post_init_user(void) { //run as last task in keyboard init + #ifdef RGB_MATRIX_ENABLE + //NOTE 1: Layer lighting doesn't work in RGB matrix mode + //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode + //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode + //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state + rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode + rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow + #endif + #ifdef RGBLIGHT_ENABLE + rgblight_layers = my_rgb_layers;// Enable the LED layers + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 + layer_move(0); //start on layer 0 to get the lighting activated + #endif +}; + + +#ifdef RGBLIGHT_ENABLE +layer_state_t layer_state_set_user(layer_state_t state) { + rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active + rgblight_set_layer_state(1, layer_state_cmp(state, 1)); + rgblight_set_layer_state(2, layer_state_cmp(state, 2)); + rgblight_set_layer_state(3, layer_state_cmp(state, 3)); + rgblight_set_layer_state(4, layer_state_cmp(state, 4)); + + // This is what the LED layout is. + // 1, 0, + // 3, 2, + // 9, 8, 7, 6, 5, 4, + // 13, 12, 11, 10, + // 18, 17, 16, 15, 14, + // 22, 21, 20, 19, + // 27, 26, 25, 24, 23 + + switch(biton32(state)){ // Change all other LEDs based on layer state as well + case 0: + rgblight_sethsv_noeeprom(50,255,100); + break; + case 1: + rgblight_sethsv_noeeprom(5,255,100); + break; + case 2: + break; + case 3: + rgblight_sethsv_noeeprom(215,255,100); + break; + case 4: + rgblight_sethsv_noeeprom(15,255,100); + /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter + current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare + rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + };*/ + break; + } + return state; + }; +#endif + + +bool encoder_update_user(uint8_t index, bool clockwise) { // QMK encoder functionality + #ifdef VIA_ENABLE //Add in VIA setting of rotary encoder keymap + if (index == 0) { // First encoder + if (clockwise) { + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) }); //Time is 1 tick otherwise empty event + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) }); + + is_encoder_rotate = true; + encoder_timer = timer_read(); + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) }); + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) }); + + is_encoder_rotate = true; + encoder_timer = timer_read(); + } + } + /*if (clockwise) { //This code only works for single keypresses with the rotary encoder + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 0)); //Allow setting of keymap in VIA + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 2)); //Allow setting of keymap in VIA + }*/ + #endif + return true; +} \ No newline at end of file diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/rules.mk b/keyboards/solartempest/ps17/keymaps/via_fade/rules.mk similarity index 100% rename from keyboards/solartempest/ps17/keymaps/via_bright/rules.mk rename to keyboards/solartempest/ps17/keymaps/via_fade/rules.mk diff --git a/keyboards/solartempest/ps17/ps17.c b/keyboards/solartempest/ps17/ps17.c index 54ae3f8ab053..b310548fcdbf 100644 --- a/keyboards/solartempest/ps17/ps17.c +++ b/keyboards/solartempest/ps17/ps17.c @@ -17,7 +17,6 @@ */ #include "ps17.h" - bool encoder_update_user(uint8_t index, bool clockwise) { // QMK encoder functionality #ifdef VIA_ENABLE //Add in VIA setting of rotary encoder keymap if (index == 0) { // First encoder @@ -30,11 +29,6 @@ bool encoder_update_user(uint8_t index, bool clockwise) { // QMK encoder functio action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) }); } } - /*if (clockwise) { //This code only works for single keypresses with the rotary encoder - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 0)); //Allow setting of keymap in VIA - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 2)); //Allow setting of keymap in VIA - }*/ #endif return true; } diff --git a/keyboards/solartempest/ps17/rules.mk b/keyboards/solartempest/ps17/rules.mk index 0b5dd1c97afa..35a150e0997b 100644 --- a/keyboards/solartempest/ps17/rules.mk +++ b/keyboards/solartempest/ps17/rules.mk @@ -21,5 +21,3 @@ ENCODER_ENABLE = yes # For encoder LTO_ENABLE = yes # Reduce firmware size COMBO_ENABLE = yes # Combos TAP_DANCE_ENABLE = no # Tap dance - -IDLE_TIMEOUT_ENABLE = yes # Turn LEDs off after inactive time diff --git a/keyboards/solartempest/ps17/solartempest_ps17_via.hex b/keyboards/solartempest/ps17/solartempest_ps17_via.hex new file mode 100644 index 000000000000..c4de00dc7f90 --- /dev/null +++ b/keyboards/solartempest/ps17/solartempest_ps17_via.hex @@ -0,0 +1,1549 @@ +:100000000C94BD030C9404040C9404040C94040498 +:100010000C9404040C9404040C9404040C94040440 +:100020000C9404040C9404040C9478270C94342746 +:100030000C9473280C9404040C9404040C9404048D +:100040000C9404040C9404040C9404040C94040410 +:100050000C9404040C944F280C9404040C94040491 +:100060000C9404040C9404040C9404040C940404F0 +:100070000C9404040C9404040C9404040C940404E0 +:100080000C9404040C9404040C9404040C940404D0 +:100090000C9404040C9404040C9404040C940404C0 +:1000A0000C9404040C9404040C94040400000FFF4A +:1000B00078FF000000000000D7FF78FF000000007C +:1000C000000080FF64FF00000000000005FF78FFD3 +:1000D0000000000000005FFF5AFF00000000580011 +:1000E0006000000058005E00000058005D00000045 +:1000F00058005C00000057006000000057005F00DF +:10010000000005010902A10185020901A1000509FC +:1001100019012908150025019508750181020501BD +:10012000093009311581257F950275088106093846 +:100130001581257F950175088106050C0A38021581 +:1001400081257F950175088106C0C005010980A140 +:1001500001850319012AB700150126B7009501751D +:10016000108100C0050C0901A101850419012AA014 +:1001700002150126A002950175108100C005010934 +:1001800006A1018505050719E029E7150025019558 +:1001900008750181020507190029EF150025019551 +:1001A000F075018102050819012905950575019170 +:1001B00002950175039101C00660FF0961A1010963 +:1001C00062150026FF00952075088102096315005D +:1001D00026FF00952075089102C005010906A101BE +:1001E000050719E029E71500250195087501810229 +:1001F0009501750881010507190029FF150026FFE3 +:1002000000950675088100050819012905950575F1 +:10021000019102950175039101C0000000000000EA +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000007E0F31 +:1002400000D4FFFFFFC7000000780000000000009E +:1002500000002A2B28000000000000000000000021 +:10026000000000000029000000002C1E3420212284 +:1002700024342627252E362D3738271E1F202122ED +:10028000232425263333362E37381F040506070866 +:10029000090A0B0C0D0E0F10111213141516171856 +:1002A000191A1B1C1D2F3130232D35040506070894 +:1002B000090A0B0C0D0E0F10111213141516171836 +:1002C000191A1B1C1D2F3130354CD400CA00C00038 +:1002D000B600AC00000000047F3F1F64321464329B +:1002E00014783C1E1E140A050001010101010101E0 +:1002F00001010202020202020202020303030303DB +:1003000003030304040404040404050505050506A9 +:100310000606060607070707070808080809090967 +:10032000090A0A0A0B0B0B0C0C0C0D0D0D0E0E0E10 +:100330000F0F0F10101111111212131314141515A1 +:1003400016161717181819191A1A1B1B1C1D1D1E13 +:100350001E1F202021222223242425262627282967 +:10036000292A2B2C2D2D2E2F303132323334353695 +:100370003738393A3B3C3D3E3F4041424344454695 +:100380004748494A4C4D4E4F505153545556585971 +:100390005A5B5D5E5F616264656668696B6C6D6F18 +:1003A0007072737577787A7B7D7E8082838587888B +:1003B0008A8C8E8F91939596989A9C9EA0A2A3A5C5 +:1003C000A7A9ABADAFB1B3B5B7BABCBEC0C2C4C6C6 +:1003D000C9CBCDCFD1D4D6D8DBDDDFE2E4E7E9EB82 +:1003E000EEF0F3F5F8FAFDFFFFAA7F554008070687 +:1003F000050D0C0B0A11100F161514131A181B12E9 +:100400000903010002040E17192223252628292A90 +:100410002C2D2F3032333536383A3B3D3E40424367 +:100420004547494A4C4E5051535557595A5C5E60A6 +:1004300062646668696B6D6F71737577797B7D7FB8 +:1004400081838587898A8C8E90929496989A9C9EB7 +:100450009FA1A3A5A7A8AAACAEAFB1B3B4B6B8B9D3 +:10046000BBBCBEBFC1C2C3C5C6C7C9CACBCCCDCE3B +:10047000D0D1D2D2D3D4D5D6D7D7D8D9D9DADADB1E +:10048000DBDBDCDCDCDCDCDDDDDDDDDCDCDCDCDCAA +:10049000DBDBDBDADAD9D9D8D7D7D6D5D4D3D2D2E9 +:1004A000D1D0CECDCCCBCAC9C7C6C5C3C2C1BFBED1 +:1004B000BCBBB9B8B6B4B3B1AFAEACAAA8A7A5A33C +:1004C000A19F9E9C9A98969492908E8C8A898785FB +:1004D00083817F7D7B79777573716F6D6B696866DA +:1004E0006462605E5C5A5957555351504E4C4A49AC +:1004F00047454342403E3D3B3A3836353332302F54 +:100500002D2C2A2928262523224E007F004B00006F +:100510000001515400550056005F00600061005713 +:10052000005C005D005E00000059005A005B00584E +:100530000062000000630000004F00010050000056 +:10054000000100AD002C0053001450025303532A45 +:100550000001000100010000000100010001000095 +:100560005C005C000001000000300001002F000072 +:100570000010500500170011030D00160007002D94 +:1005800001060119011000000011011D03E10057CF +:10059000012C000000E2000000805F0100815F008C +:1005A000001050B9004A0017012B0352002B011A0A +:1005B00001500051004F000000B6002C00B7002889 +:1005C000004E0000004B000000805F0100815F00D2 +:1005D0000010500100010001000100520001000163 +:1005E00000500051004F00000010033D080100536F +:1005F0000068000000690000000100010001000027 +:1006000000010001000100010001000100010001E2 +:1006100000010001000100000001000100010001D3 +:1006200000010000000100000001000100010000C5 +:1006300000010001000100010001000100010001B2 +:1006400000010001000100000001000100010001A3 +:100650000001000000010000000100010001000095 +:100660000001000100010001000100010001000182 +:100670000001000100010000000100010001000173 +:100680000001000000010000000100010001000065 +:100690000001000100010001000100010001000152 +:1006A0000001000100010000000100010001000143 +:1006B0000001000000010000000100010001000035 +:1006C0000001000100010001000100010001000122 +:1006D0000001000100010000000100010001000113 +:1006E00000010000000100000009025B000301009E +:1006F000A0FA090400000103010100092111010011 +:10070000012240000705810308000A0904010002D4 +:1007100003000000092111010001222200070582C7 +:100720000320000107050303200001090402000162 +:100730000300000009211101000122B60007058411 +:100740000320000A12010002000000084B411500BE +:100750000200010200010A0350005300310037007B +:1007600000001203410054004C0041004E005400B0 +:100770004900530000000403090411241FBECFEFF9 +:10078000DAE0DEBFCDBF04B603FE27C0809196033A +:1007900090919703A0919803B09199038730904B63 +:1007A000A740B04BD1F41092960310929703109289 +:1007B00098031092990314BE84B7877F84BF0FB645 +:1007C000F894A895809160008861809360001092F1 +:1007D00060000FBEE0E0F8E3099511E0A0E0B1E0B1 +:1007E000E6EEFFE502C005900D92A43CB107D9F7F3 +:1007F00023E0A4ECB1E001C01D92A639B207E1F7F5 +:100800000E949A280C94BA2F0C940000E8EDF0E0B6 +:1008100080818E7F80831092E2001092DA00109225 +:10082000E100A0EEB0E08C9181608C9380818F77A5 +:10083000808319BCA7EDB0E08C918E7F8C93808172 +:100840008F7E80831092090308952091E4003091F7 +:10085000E50095E6A9012091EC00822F817020FF30 +:1008600006C08091E80080FF06C080E008952091D6 +:10087000E80022FD1AC080912E03882389F085307C +:1008800089F08091EB0085FD0FC02091E40030914C +:10089000E50042175307F9F29150E1F684E008951C +:1008A00082E0089583E0089581E00895EF92FF9239 +:1008B0000F931F93CF937C018B010E942504C82FB7 +:1008C000811117C08091E80085FD0BC08091E80080 +:1008D0008E778093E8000E942504882399F3C82F1F +:1008E00008C0F70181917F018093F1000150110947 +:1008F00049F78C2FCF911F910F91FF90EF900895A2 +:100900008091300387FF13C08091E80082FF06C00A +:100910008091E8008B778093E80004C080912E03DB +:100920008111F2CF089580912E038823D9F380910D +:10093000E80080FFF8CF8091E8008E77ECCF982F09 +:100940009093E900242F762F50E0891731F07091B1 +:10095000EC002091ED005091F00021FD07C09F5F59 +:10096000973071F78093E90081E008953091EB00B2 +:100970003E7F3093EB003091ED003D7F3093ED00F2 +:100980003091EB0031603093EB007093EC002093DA +:10099000ED005093F0002091EE0027FDE0CF80E0C5 +:1009A0000895CF92DF92EF92FF920F931F93CF9310 +:1009B000DF93C8EDD0E088818F7E8883E7EDF0E09B +:1009C00080818160808384E082BF81E0809309031D +:1009D00088818E7F888302EE10E0F80110821092E9 +:1009E000DA0081EEC82ED12CF601108288818F7733 +:1009F000888388818068888388818F7D888319BCFB +:100A000010922E0310922F0310922D0310922C039C +:100A100090EEE92EF12CF70180818B7F8083888115 +:100A20008160888342E060E080E00E949F04F601DC +:100A300080818E7F8083F8018081816080838081C6 +:100A400088608083F70180818E7F808388818061C8 +:100A50008883DF91CF911F910F91FF90EF90DF90EE +:100A6000CF900895FC01809136039091370386174B +:100A70009707A0F06115710529F49091E8009E7721 +:100A80009093E80090E06115710551F4911108C050 +:100A90008091E80082FF34C080E00895BC01F2CF6D +:100AA00080912E038823C1F18530C1F18091E80047 +:100AB00083FD30C08091E80082FDEACF8091E8009C +:100AC00080FFE1CF8091F3002091F200382F611573 +:100AD000710519F02830310558F091E028303105C2 +:100AE00009F090E02091E8002E772093E800CBCF2A +:100AF00081918093F100615071092F5F3F4FE7CFE3 +:100B000080912E03882341F0853041F08091E800E8 +:100B100083FFBECF81E0089582E0089583E00895C9 +:100B200080910B0308959C014FB7F89480910003C6 +:100B300090910103A0910203B09103034FBF821B68 +:100B4000930B08952FB7F8948091000390910103BF +:100B5000A0910203B09103032FBF08952091FD02DD +:100B60003091FE022817390771F09093FE028093AE +:100B7000FD02E091FB02F091FC02309721F000842D +:100B8000F185E02D099408952091F9023091FA023F +:100B90002817390771F09093FA028093F902E091D7 +:100BA000FB02F091FC02309721F00680F781E02DE6 +:100BB00009940895E091FB02F091FC02309721F036 +:100BC0000190F081E02D099480E00895DC016091AE +:100BD000F5028091F602962F891301C00895292FFE +:100BE00030E0F901EE0FFF1FE351FD4F40815181CD +:100BF0004A175B07A1F487E08A9FA0018B9F500DE5 +:100C00001124485E5E4F81E0FA0184839613E6CF9B +:100C10002F5F3F4F237033272093F50208952F5FF6 +:100C20003F4F922F9370D8CF10928A021092890270 +:100C3000E8E1F1E08581811102C0148216823796C5 +:100C400081E0E234F807B1F70895FA01811101C09B +:100C5000FB010994089580918E03982F9E7F61F483 +:100C60008170826080938E0380919103853B18F0A0 +:100C700084EB8093910308958A34B0F38170886483 +:100C8000F1CFAF92BF92DF92EF92FF920F931F933B +:100C9000CF93DF93182F062FE901453B08F044EB73 +:100CA000E42FF0E0E851FD4F011110C0E4915E2FF8 +:100CB0004E2F4983E8835A83DF91CF911F910F9183 +:100CC000FF90EF90DF90BF90AF900895202F30E01D +:100CD0004491D42EE42EF12C56E0159FC00111242E +:100CE000EFEFF0E0BF010E94BB2E812F90E0880F54 +:100CF000991F55E5569FD001579FB00D11248A1BAF +:100D00009B0B982F990F890F5F01A21AB30AAE9C13 +:100D1000D001AF9CB00DBE9CB00D11245B2F089F7D +:100D200080011124012F11275F01A01AB10AAE9C86 +:100D30008001AF9C100DBE9C100D11245F01A81AFC +:100D4000B108A29EC001A39E900DB29E900D1124E9 +:100D5000892F9927E81BF90BEE9DC001EF9D900D9F +:100D6000FE9D900D1124E92F62307105A1F050F421 +:100D70006115710509F49DCF6130710581F0EB2F8C +:100D8000512F97CF6430710569F080F0663071059E +:100D900009F48FCFF4CFE42F4B2F592F8ACFE42FB4 +:100DA000412F87CFEB2F542F492F83CF4B2F5D2D12 +:100DB000E12F7FCF0E94A2059C0190917602809145 +:100DC0007702982B21F03093730220937202909156 +:100DD000780280917902982B21F030937102209350 +:100DE0007002E091FB02F091FC02309749F082E042 +:100DF000809374020480F581E02D84E792E00994E9 +:100E0000089540917602803F59F48091770287FFE0 +:100E10000DC01092770241110BC010926E0208C0F3 +:100E2000813F81F48091770218169CF3442381F06E +:100E30008091780290917902892B09F05AC0109222 +:100E40006D020895823F49F447FFF0CF1092760279 +:100E5000809177028111ECCFE0CF833F19F4141613 +:100E6000ACF3E4CF90917802893F29F41916F4F697 +:100E700010927802DBCF8A3F19F497FFD7CFF8CFD3 +:100E8000909179028B3F29F497FFD0CF109279028D +:100E9000CDCF8C3F19F41916CCF3C8CF9CE0980F36 +:100EA000953090F4845F990B21E030E0B90102C0E5 +:100EB000660F771F8A95E2F7CB01809590917502B6 +:100EC000892380937502B2CF8D3F31F480916F02F8 +:100ED0008E7F80936F02AACF8E3F21F480916F02A4 +:100EE0008D7FF7CF8F3F09F0A1CF80916F028B7F6D +:100EF000F0CF089580916F0280FD16C081FD16C06D +:100F000082FD16C080916D028823A1F0883280F4A2 +:100F100028E0829FC001112468E270E00E94CF2E79 +:100F2000862F672B39F0089582E0089584E00895B4 +:100F300088E0089581E0089580916F0280FD14C0DB +:100F400081FD14C082FD16C080916E02882381F05D +:100F5000843180F422E3829FC001112464E170E0B7 +:100F60000E94CF2E862F08958CE0089589E1089580 +:100F700085E0089582E30895803F31F40E949C0744 +:100F80008195809377020895813F19F40E949C0710 +:100F9000F8CF823F31F40E949C07819580937602BE +:100FA0000895833F19F40E949C07F8CF893F29F4E4 +:100FB0000E947A078093780208958A3F21F40E9464 +:100FC0007A078195F7CF8B3F31F40E947A0781959C +:100FD0008093790208958C3F19F40E947A07F8CF24 +:100FE0009CE0980F953070F4845F990B21E030E01D +:100FF00001C0220F8A95EAF780917502822B8093B7 +:10100000750208958D3F31F480916F028160809365 +:101010006F0208958E3F21F480916F028260F7CFB6 +:101020008F3FB9F780916F028460F1CF80E008951F +:10103000F894E82FE295EF70F0E031A1282F2F709F +:1010400081E090E001C0880F2A95EAF7982F9095EB +:10105000932391A392A1892B82A3789408959091D0 +:10106000040392FF06C0282F28712830F9F4877FE7 +:10107000846093FF06C0282F28712831F1F4877E01 +:1010800084612091050320FF06C0382F3871383065 +:10109000D9F4877F816021FF06C0282F287128316D +:1010A000D1F4877E816194FD877E0895282F247175 +:1010B0002430F9F68B7F8860DCCF282F247124310F +:1010C00001F78B7E8861DDCF382F3171313019F710 +:1010D0008E7F8860E0CF282F2171213121F78E7E0D +:1010E0008861E1CFCF93DF93EC0182389105A9F1BC +:1010F000D8F58133910509F496C048F589329105F8 +:1011000009F48AC08A9709F495C0C11521E5D20770 +:1011100008F0BCC0C11530E5D30708F014C1C83EC3 +:10112000D10508F09CC0C03ED10560F5C83AD10594 +:1011300008F087C0C53AD10508F0FDC0C130D1051F +:1011400009F12097F9F0C430D105E0F440C08533AF +:10115000910509F45AC0C997C1F6809104038370C0 +:1011600089F0C0EED0E00EC0833E910599F170F495 +:10117000803E910501F1823E910539F6809104038C +:1011800082FD21C0CE01DF91CF910895863E910569 +:1011900061F1873E910571F1843E910509F0B5CF6B +:1011A0008091050381FFEECF80910403C7EED0E06C +:1011B00084FD0DC0E7CF8091040380FD12C19091A2 +:1011C000050390FFDFCFC3EED0E084FFDBCFD0E09C +:1011D000C0E0D8CF8091040382FD06C19091050341 +:1011E00090FDBFCF84FFCECFF2CF8091040383FD6B +:1011F000DDCFC8CF8091040383FDF9C09091050332 +:1012000091FFF0CFC4EED0E0BDCF8091040385FF05 +:10121000B9CFC9E2D0E0B6CF8091040385FFB2CF49 +:10122000C5E3D0E0AFCF8091040386FFABCFCAE225 +:10123000D0E0A8CF8091040386FFA4CFC1E3D0E023 +:10124000A1CFCF3BD10518F6C85AD0E0CC0FDD1F97 +:10125000C95BDE4F0990D881C02DD46493CFC115EE +:1012600040E2D40758F4C11581E0D80708F08ACFCE +:10127000C03FD10508F4ABCFD06584CFC11590E451 +:10128000D90708F4A4CFDF70D06A7CCFC11525E55B +:10129000D20700F5C11534E5D30708F08AC0C1159F +:1012A00043E5D40708F071C0C11582E5D80708F4FA +:1012B00067C0CE018370992721E030E002C0220F81 +:1012C000331F8A95E2F7C695C69580E2C89FE00174 +:1012D000112452C0C11599E5D907A8F4C11528E514 +:1012E000D20708F06BC0C11536E5D30708F06FCF01 +:1012F0008C2F0E942F08C82FD0E0DC2FCC27CC27C2 +:10130000DF71D0623FCFC1154AE5D40708F45BC056 +:10131000CE0190568115904208F059CF8D2F8F71D4 +:101320000E942F0890E0982F882788279F719C01A2 +:101330002C2BE901E6CFC55AD0E0CC5BDE4FC8814B +:10134000D0E0D0641FCFCE01E4E096958795EA9572 +:10135000E1F783702C2F26952695237040E2249F79 +:1013600090011124382B8C2F8370C1E0D0E002C093 +:10137000CC0FDD1F8A95E2F7C22BD32BDC6802CF9E +:10138000DC2FCC27C16FD06AFDCECE0183709927A8 +:1013900021E030E002C0220F331F8A95E2F7C695A4 +:1013A000C69590E2C99FE0011124C22BD32BDA68C5 +:1013B000E9CEDC2FCC27C46FD06AE4CEDC2FCC275B +:1013C000C06FD06ADFCE8C2F8F700E942F0834E060 +:1013D000D695C7953A95E1F7CF709C2FEC01D0696F +:1013E000D1CEC9E3D0E0CECEC2EED0E0CBCEC6EEB9 +:1013F000D0E0C8CE80914402811110924402089539 +:101400008091430290914202892B90914102892B55 +:101410008093C601909144029923A1F0892B809377 +:10142000C60180914301882341F18091040387FF25 +:1014300024C08EE1E8ECF1E090E0815000F59111DC +:101440000E94FA09E091FB02F091FC023097E1F072 +:1014500080914301882359F08091040387FF07C0DE +:101460008091C6018093C70185E08093C601028008 +:10147000F381E02D86EC91E0099486E0DBCF2191A9 +:101480002223D9F29F5FD9CF0895909143019923E8 +:10149000D1F09091040397FF16C0E82FE695E695EA +:1014A000E695EE31E0F4F0E0EA53FE4F282F277086 +:1014B00081E090E001C0880F2A95EAF7809592813B +:1014C000892382830895E8ECF1E09191891303C0A8 +:1014D000DF0111971C9291E0EE3CF907B1F70895F6 +:1014E000909143019923C1F09091040397FF14C098 +:1014F000E82FE695E695E695EE31F8F4F0E0EA534C +:10150000FE4F877021E030E001C0220F8A95EAF794 +:101510008281822B82830895A8ECB1E0EFEF90E006 +:101520002D91821751F0EF3F19F4211101C0E92FDD +:101530009F5F9630A9F7EF3F09F408950E2E000C37 +:10154000FF0BEA53FE4FE6CF80913F029091FE01E0 +:10155000981301C008958F5F8770FACF990F990F84 +:10156000890F982F977086958695869524E0829F9F +:10157000F0011124E651FE4F50E040E080E021915F +:1015800030E0092E02C0369527950A94E2F72170C3 +:101590003327042E01C0220F0A94EAF7822B4F5FF3 +:1015A0005F4F4430510559F70895990F990F890FEE +:1015B000982F977041E001C0440F9A95EAF78695FD +:1015C0008695869594E0899FF0011124E651FE4F9F +:1015D00030E020E070E05191DF011197CB01022E45 +:1015E00002C0969587950A94E2F7817081958527C8 +:1015F000842385278C932F5F3F4F2430310559F783 +:10160000089590E080E00E94C40590E080E00E9490 +:10161000AE0510924202109241020E94000A86E03A +:10162000E4E7F2E0DF011D928A95E9F710926E027D +:1016300010926D0210926F020C94DA06909346029B +:10164000809345020C94010B882341F08095909182 +:1016500042028923809342020C94000A0895882351 +:1016600039F090914202982B909342020C94000A18 +:101670000895882341F080959091430289238093B7 +:1016800043020C94000A0895882339F09091430294 +:10169000982B909343020C94000A0895882309F430 +:1016A00059C0823871F40E94DA0581FF53C089E382 +:1016B0000E94700A0E94000A89E30E94450A0C9465 +:1016C000000A833859F40E94DA0580FF43C083E59D +:1016D0000E94700A0E94000A83E5EFCF843859F413 +:1016E0000E94DA0582FF36C087E40E94700A0E94D9 +:1016F000000A87E4E2CF9CEF980F913AF0F290E273 +:10170000980F983088F4877021E030E0A90102C07A +:10171000440F551F8A95E2F7CA01809590914302C4 +:10172000892380934302CBCF9BE5980F933020F41D +:1017300090E080E00C94C40598E5980F973120F470 +:1017400090E080E00C94AE05803F20F00E940107FD +:101750000C94DA060895809580FF08C0589A81FF9E +:1017600007C05D9A82FF06C05C9A08955898F7CF2B +:101770005D98F8CF5C98089590912E03943029F5E8 +:101780008093060370930803609307039093E90026 +:101790008FEF9091E800815095FD06C095ED9A95E8 +:1017A000F1F700008111F5CF8091E80085FF0DC0B1 +:1017B00050E040E063E070E086E093E00E94560471 +:1017C0008091E8008E778093E8000895BC0184E062 +:1017D0000C94BC0BBC0183E00C94BC0B9C0184E01A +:1017E0008093E9009FEF8091E800915085FD06C04D +:1017F00085ED8A95F1F700009111F5CF8091E80011 +:1018000085FF0CC050E040E066E070E0C9010E9436 +:1018100056048091E8008E778093E8000895CF9376 +:10182000DF93EC01809143018823B1F1809104039F +:1018300087FF32C060E284E08093E9008FEF9091EF +:10184000E800815095FD06C095ED9A95F1F70000EE +:101850008111F5CF8091E80085FF1BC08091430185 +:1018600070E050E040E0811104C050E040E068E0EA +:1018700070E0CE010E9456048091E8008E7780933C +:10188000E80080E2FE01ACE0B3E001900D928A95A1 +:10189000E1F7DF91CF91089568E081E0CDCF81E05D +:1018A0008093E00080E28093D8001092C9008FE11D +:1018B0009EE40197F1F700C0000087E090EBDC01A7 +:1018C0008093960390939703A0939803B093990302 +:1018D00088E19CE00FB6F894A895809360000FBE55 +:1018E00090936000FFCFCF93C82F882309F4AEC038 +:1018F0008238C1F40E94DA0581FDA8C089E30E9404 +:10190000700A0E94000A2FEF81EE94E0215080407F +:101910009040E1F700C0000089E30E94450ACF91A2 +:101920000C94000A8338A1F40E94DA0580FD8EC071 +:1019300083E50E94700A0E94000A2FEF81EE94E076 +:10194000215080409040E1F700C0000083E5E5CFE2 +:101950008438A1F40E94DA0582FD78C087E40E94F1 +:10196000700A0E94000A2FEF81EE94E0215080401F +:101970009040E1F700C0000087E4CFCF8CEF8C0FE0 +:10198000813A88F580914301882301F18091040315 +:1019900087FF1CC0EC2FE695E695E695F0E0EA534C +:1019A000FE4F828190E04C2F477021E030E002C072 +:1019B000220F331F4A95E2F782239323892B79F074 +:1019C0008C2F0E94450A0E94000A09C0E8ECF1E051 +:1019D0008191C817A9F321E0EE3CF207C9F78C2FDB +:1019E0000E94700A9CCF80E28C0F883068F4C77028 +:1019F00021E030E001C0220FCA95EAF7809143024E +:101A0000822B809343028BCFEBE5EC0FE33040F465 +:101A1000F0E0EC5BFE4F808190E0CF910C94C40528 +:101A2000E8E5EC0FE73150F4F0E0EE0FFF1FE95B63 +:101A3000FE4F80819181CF910C94AE05C03F30F074 +:101A40008C2F0E94BC07CF910C94DA06CF91089599 +:101A50001F93CF93DF93182FD0E0C0E0893311F4A8 +:101A6000C0E5D0E0812F0E94730C209731F4812FC4 +:101A7000DF91CF911F910C944E0B8FE99FE001975E +:101A8000F1F700C000002197F0CF0F931F93CF9381 +:101A9000DF93C62FD42F022FFC0182818823A1F06F +:101AA000609395030E94A2059093940380939303FF +:101AB000C77081E001C0880FCA95EAF7DF91CF9126 +:101AC0001F910F910C94440B80919503681335C0BE +:101AD00080919303909194030E949305883C910513 +:101AE00060F510E21D0FCD17B9F080E28C0F883041 +:101AF00040F4C77081E001C0880FCA95EAF70E94E0 +:101B0000390B183048F481E09D2F977001C0880F81 +:101B10009A95EAF70E94440B802F0E94280D1830F6 +:101B200098F4D77081E001C0880FDA95EAF7DF9169 +:101B3000CF911F910F910C94390BC77081E001C0B8 +:101B4000880FCA95EAF7F3CFDF91CF911F910F91DC +:101B50000895DF92EF92FF920F931F93CF93DF933D +:101B6000E82FF0E0E65BFD4FD490282F26952695D0 +:101B7000269530E0F901E65CFD4F0491877010E096 +:101B8000082E02C0159507950A94E2F701701127F7 +:101B9000F901E65DFD4FE490F12C082E02C0F594AA +:101BA000E7940A94E2F791E0E922FF24F901E65E66 +:101BB000FD4FC491D0E002C0D595C7958A95E2F754 +:101BC000C170DD270115110519F081EE0E94730C1B +:101BD000E114F10419F086EE0E94730C8D2D0E9421 +:101BE000280DEF2819F086EE0E944E0B012B19F0FC +:101BF00081EE0E944E0BCD2B51F08CE2DF91CF9104 +:101C00001F910F91FF90EF90DF900C94280DDF91C2 +:101C1000CF911F910F91FF90EF90DF900895CF9398 +:101C2000DF93C7E0D2E060E0CE010E94862F2196CC +:101C3000C11584E0D807B9F7DF91CF9108956F926D +:101C40007F928F929F92AF92BF92CF92DF92EF924C +:101C5000FF920F931F93CF93DF9389E0C82E85E007 +:101C6000D82E0FE510E0E801E09736011CC0F50121 +:101C700085909490692DC7010E94862F682DC70119 +:101C800001960E94862F82E0A80EB11C82E0E80E29 +:101C9000F11CCE15DF0559F788E0680E711C2896F7 +:101CA0000C171D0731F07E0188E0E81AF108530196 +:101CB000DECF005D1F4F80E3C80ED11C0F3382E0E2 +:101CC000180789F6DF91CF911F910F91FF90EF9048 +:101CD000DF90CF90BF90AF909F908F907F906F904C +:101CE0000895CF93C82F6FEF811161E283E290E0F6 +:101CF0000E94862FC1110CC0CFEF6C2F84E290E0C0 +:101D00000E94862F6C2F85E290E0CF910C94862F55 +:101D1000C9E0F3CF80E00E94710E60E086E290E0BF +:101D20000E94862F0E941F0E0E940F0E81E00C94CD +:101D3000710ECF93C0910503C2FB992790F99817B4 +:101D400081F080FBC2F9C09305036091040384E035 +:101D500090E00E94862F6C2F82E290E0CF910C944D +:101D6000862FCF9108950F931F93CF93DF9328E091 +:101D7000629FE001112450E0440F551FC40FD51F8E +:101D800030E3839FC00DD11D1124CE0187960E94A0 +:101D9000722F082F10E0102F0027CE0188960E9486 +:101DA000722F9801282BC901DF91CF911F910F91BC +:101DB0000895462F8A3038F4763028F4643018F4C9 +:101DC000672F0C94B30E90E080E00895BF92CF92FD +:101DD000DF92EF92FF920F931F93CF93DF937C01DB +:101DE0000091380310913903809145029091460289 +:101DF000082B192BCFE0D0E0CC24C394D12CBC2EDF +:101E0000C6010C2E02C0880F991F0A94E2F78023A6 +:101E10009123892B71F4219790F7B12C8B2DDF91B1 +:101E2000CF911F910F91FF90EF90DF90CF90BF90D7 +:101E30000895B7018C2F0E94D90E0E947208019755 +:101E400051F3ECCFCF93DF93EC010E94E60EBE017D +:101E50000E94D90EDF91CF910C947208FC0186810B +:101E60009781009779F00E947208292F2F70929520 +:101E70009F7092509E30A0F4E92FF0E0E454F04DB2 +:101E80000C94052F808191810E94220FEECF803F1C +:101E900019F020F4883E20F481E00895843FE1F3B6 +:101EA00080E00895883EC0F3813FD1F7F5CF822FBF +:101EB00086958695869508951F93CF93DF9300D0DE +:101EC00000D00F92CDB7DEB7FC01268137812115F6 +:101ED000310541F525E0DE01119601900D922A951C +:101EE000E1F7FC01228189819A812223B9F06623DE +:101EF000A9F00E94E60E182F682F89819A810E940E +:101F0000D50A69817A81812F0F900F900F900F90E1 +:101F10000F90DF91CF911F910C94D90E0E94AE0AC1 +:101F2000182FEFCFC9010F900F900F900F900F90C7 +:101F3000DF91CF911F91089583E290E00E94722F6C +:101F4000813289F484E290E00E94722F893059F442 +:101F500085E290E00E94722F91E0893009F090E0D4 +:101F6000892F8170089580E0FCCFCF9384E090E0CA +:101F70000E94722FC82F82E290E00E94722F982F49 +:101F80008C2FCF91089560918E03669570E04BE0A1 +:101F900050E08AE091E00E94582F892B19F481E0EB +:101FA000809384020E94A20590937E0280937D021A +:101FB00008955F926F927F928F929F92AF92BF929D +:101FC000CF92DF92EF92FF920F931F93CF93DF9305 +:101FD000CDB7DEB7C455D1090FB6F894DEBF0FBE3A +:101FE000CDBF80918E0380FD0AC0EAE3F3E0118249 +:101FF00010821282339623E0EE38F207C1F7809008 +:102000007B0290907C028114910409F459C0809164 +:102010007A02811155C0D12CC12C66246394712C95 +:1020200013E0512E8091850293010C2C01C0220FE8 +:102030000A94EAF7822309F43BC0F601EE0FFF1F72 +:10204000E80DF91DE590F490E114F104C9F145E0C3 +:1020500050E0B701CE0101960E944F2F09810F3F3A +:1020600039F18A81800F9927991F8D31910514F0DC +:102070008CE190E05C01AA0CBB1C8A0D9B1DFC014D +:10208000E65CFC4F5F01059D80011124065C1C4F3E +:102090000A151B0520F0F5E0EF0EF11CD8CF9801D2 +:1020A0004D816C818B810E9441060D5F1F4FF0CFE7 +:1020B0002FEFC21AD20A38E0C316D10409F0B2CF0A +:1020C0007DEEA72E73E0B72EDE011196AE014B5ABE +:1020D0005F4F1A2F7B2FF5018491282F30E0C90123 +:1020E000880F991F820F931F865C9C4FFC01C08054 +:1020F000D180E280CD92DD92ED92FFEFAF1ABF0A60 +:10210000A417B50741F7279A35B13F7725B1206865 +:102110006FB7F894812F972FFC017191CF01E8E000 +:1021200025B9000000C077FF35B9770F000000C067 +:1021300000C000C035B900C0EA9591F78417950733 +:1021400059F76FBF8FE594E00197F1F700C00000E9 +:10215000CC5ADF4F0FB6F894DEBF0FBECDBFDF9174 +:10216000CF911F910F91FF90EF90DF90CF90BF9094 +:10217000AF909F908F907F906F905F9008951F9386 +:10218000CF93DF9300D00F92CDB7DEB7162F90918B +:102190008E0390FF18C09E012F5F3F4F48E76FEFFF +:1021A0000E9441068B819981612F70E0FB01EE0F47 +:1021B000FF1FE60FF71FE65CFC4F2A812183908307 +:1021C00082830E94D90F0F900F900F90DF91CF91D3 +:1021D0001F910895EF92FF920F931F93CF93DF9378 +:1021E0008C01CAE3D3E0F12CE12CF80194816091D9 +:1021F000900380918F03FEE0EF16F104FCF4992325 +:10220000F9F09E01409191030E9441062FEFE21ADE +:10221000F20A23968CE1E816F10439F70E94D90FEF +:10222000F801848190E00196817099278483DF9181 +:10223000CF911F910F91FF90EF900895992309F38B +:102240009E0140E0E1CF8F929F92AF92BF92CF92DA +:10225000DF92EF92FF920F931F93CF93DF93EC01E6 +:102260004C81042F10E09801D8010E941A2F9B0185 +:10227000AC010E94302F4B015C01E0E2F0E0E01B7A +:10228000F10BA5E5B0E0AC019B010E94302F6B0182 +:102290007C019F01DF010E94122F9B01AC010E9473 +:1022A0003B2F9B01AC01280D391D4A1D5B1DC70149 +:1022B000B6010E94E32EF22E822F90E039E23F1504 +:1022C000D8F143E0249F9001112435952795122FD2 +:1022D00010959AE3C92E93E0D92E00E085E5E82E0B +:1022E000EF188E2D01FD8F2D9601412F60919003E7 +:1022F0000E9441060F5F53E0C50ED11C0C3189F7D7 +:102300000E94D90F9C8181E0992319F0903219F431 +:102310008FEF8093170180911701890F8C83DF91D4 +:10232000CF911F910F91FF90EF90DF90CF90BF90D2 +:10233000AF909F908F90089525E530E0A901481B4C +:10234000590BCA019A01220F331F280F391F37FF7B +:10235000BCCF2F5F3F4FB9CF0F931F93CF93DF9326 +:10236000CAE3D3E0FE01118210821282339683E029 +:10237000EE38F807C1F710E000E080918702082EE0 +:10238000000C990B081719078CF180911601082E83 +:10239000000C990B801791074CF19E01409191031D +:1023A0006091900380918F030E9441060F5F1F4F41 +:1023B00023960C31110509F70E94D90F8091150160 +:1023C00090918702980F9093870220911601280F11 +:1023D00020931601121614F49B311CF08195809302 +:1023E0001501DF91CF911F910F91089519821882E5 +:1023F0001A82DCCFBF92CF92DF92EF92FF920F93BF +:102400001F93CF93DF93FC018281DD24DA9480FD5A +:1024100002C0DD24D3940AE313E0D0E0C0E02CE155 +:10242000B22EF80111821082128294E0E92EF12C72 +:10243000C12C809186028C0D8D310CF43DC06B2D2A +:102440000E94AD2E892F082E000C990B8C179D072A +:1024500091F4809191038E9DA0018F9D500D1124C8 +:1024600055954795559547959801609190038091B2 +:102470008F030E944106CD0CF1E0EF1AF108C9F676 +:1024800021960D5F1F4FCC31D10559F60E94D90F0F +:102490008091860291E0D91215C0811111C08BE1A3 +:1024A00080938602DF91CF911F910F91FF90EF9063 +:1024B000DF90CF90BF90089587FFC5CF845EC3CFD4 +:1024C0008150EECF90E00196BE010E94CF2EE8CF62 +:1024D000EF92FF921F93CF93DF93EC018AE3E82EF4 +:1024E00083E0F82E10E08C81970140919103609178 +:1024F0009003810F0E944106175F83E0E80EF11CF4 +:102500001C3F89F70E94D90F9A818C8190FF08C0E7 +:102510008F5F8C83DF91CF911F91FF90EF90089593 +:102520008150F7CF90918E0390FF0CC0EAE3F3E067 +:10253000818360834283339693E0EE38F907C1F7D5 +:102540000C94D90F08950F931F93CF93DF9300D06E +:102550000F92CDB7DEB78C018091880281110AC03D +:102560009E012F5F3F4F44EB6FEF0E9441068A812F +:1025700080938802F8016481613069F0809188025B +:1025800040E0662361F040E0623011F4409188023F +:1025900080E060E004C06091880240E080E00E943A +:1025A0009212F801848190E0019663E070E00E944D +:1025B000CF2E84830F900F900F90DF91CF911F91BA +:1025C0000F910895CF93DF9300D00F92CDB7DEB770 +:1025D00090918E0390FF0AC09E012F5F3F4F0E9493 +:1025E00041064B8169818A810E9492120F900F905F +:1025F0000F90DF91CF910895CF93DF93EC01EEE838 +:10260000F3E0438162818C810E94E2128C818F5FB2 +:102610008C83DF91CF910895CF93DF93EC01EC8110 +:10262000F0E0E75FFB4F4491EEE8F3E062818181E7 +:102630000E94E2128C818F5F8C83DF91CF9108958D +:10264000CF92DF92EF92FF926B017C010E942B06EA +:10265000B701A60188E090E0FF90EF90DF90CF9067 +:102660000C94982F5F926F927F928F929F92AF926D +:10267000BF92CF92DF92EF92FF920F931F93CF936F +:10268000DF9300D00F92CDB7DEB7182F762E042F30 +:10269000622E90918E0390FF29C0E92FE695AE2F10 +:1026A000B0E0A157BE4F8C91809383029E7F923001 +:1026B00081F59E012F5F3F4F812F0E9441064B8184 +:1026C00069818A810E94921210938F037092900305 +:1026D00000939103662051F060918E0370918F03F7 +:1026E00080919003909191030E9420130F900F907E +:1026F0000F90DF91CF911F910F91FF90EF90DF909E +:10270000CF90BF90AF909F908F907F906F905F9091 +:102710000895823019F400919103D6CF863019F4D0 +:1027200010918F03D1CF8930D9F3893169F6E951FE +:102730008E2F8170582EE695F0E0E851FC4FA59061 +:10274000B490BB248AE3E82E83E0F82ED12CC12C70 +:102750009CE1892E912CC601B4010E94BB2E812FD1 +:10276000511013C0860F9701402F672D0E9441061C +:10277000CA0CDB1C83E0E80EF11C8EE8E81683E04F +:10278000F80649F70E94D90F9FCF861BECCFEEE8E1 +:10279000F3E0438128E0421B08F440E021E062813D +:1027A00081810C943213EEE8F3E0438128E0420F7C +:1027B00008F44FEF21E0628181810C943213EEE83E +:1027C000F3E0628128E0621B08F460E021E04381CD +:1027D00081810C943213EEE8F3E0628128E0620F0D +:1027E00008F46FEF21E0438181810C943213EEE80D +:1027F000F3E0818121E04381628188500C9432139F +:10280000EEE8F3E0818121E043816281885F0C94EE +:10281000321380919203882319F0815080939203A0 +:1028200060918E0370918F0380919003909191033A +:102830000C94201380919203833018F48F5F80935F +:10284000920360918E0370918F0380919003909119 +:1028500091030C94201390918E0390FF36C09170D9 +:10286000811129C0926090938E03662351F060918C +:102870008E0370918F0380919003909191030E9439 +:10288000201360918E03669570E04BE050E08AE083 +:1028900091E00E94582F892BA9F01092840281E0C8 +:1028A0008093800220E04091910360919003809199 +:1028B0008F030C943213853210F09864D4CF880FB4 +:1028C000982BD1CF0E94C30FEACF089521E030E0CA +:1028D000A90102C0440F551F8A95E2F7CA01209151 +:1028E0008502662399F0822B809385028091840271 +:1028F000811106C080918E0360E086950E942B14A2 +:1029000080918E0380FD05C00C94D90F80958223A1 +:10291000EBCF08950F931F93CF93DF93EC0161E00A +:10292000009709F0682F617080E00E94661460E0F3 +:10293000209721F0BE0176956795617081E00E9435 +:10294000661460E0209731F0BE0176956795769524 +:102950006795617082E00E94661460E0209739F00C +:10296000BE0113E0769567951A95E1F7617083E0F3 +:102970000E94661460E0209739F0BE01B4E07695BD +:102980006795BA95E1F7617084E00E946614AE0124 +:1029900070E060E0BB27A72F962F852F0097A10539 +:1029A000B105D9F1AC01BD0188E08A019B01F4E0D9 +:1029B0003695279517950795FA95D1F701151105C5 +:1029C0002105310519F08C5FB901A8018A019B012D +:1029D000E2E03695279517950795EA95D1F7011509 +:1029E00011052105310519F08E5FB901A801769511 +:1029F000679557954795452B462B472B09F08F5FD9 +:102A0000823011F160F4882399F08130C1F0CE0159 +:102A1000DF91CF911F910F91089580E0C6CF833051 +:102A2000C1F08430A1F720E044E66FEF8FE004C0EE +:102A300020E044E66FEF82E30E943213E8CF20E00B +:102A400044E66FEF85E0F8CF20E044E66FEF80E8E2 +:102A5000F3CF20E044E66FEF87EDEECF0E948A14BB +:102A600090933903809338030C94010B80913803C1 +:102A7000909139039C01267033272630310519F4D3 +:102A800088600C942E15877FFCCF21E030E002C0D7 +:102A9000220F331F8A95E2F72095309580913803F5 +:102AA00090913903822393230C942E159091400228 +:102AB0008095892380934002282F277039F4282F8E +:102AC000082E000C330B9217130621F49091050386 +:102AD00092FF07C08595859585950E9445151092B2 +:102AE0004002089521E030E002C0220F331F8A9592 +:102AF000E2F78091380390913903822B932B0C9449 +:102B00002E1580918E038695815009F484E261E050 +:102B10000C942B1480918E0386958F5F853208F07C +:102B200081E061E00C942B1490918E0390FF07C01C +:102B30009695981720F0961710F40C948A1561E07A +:102B40000C942B14EEE8F3E083E0808311828FEF86 +:102B5000828388E283831482608171818281938180 +:102B60000C94201369EE7EEF90E080E00E94A42F89 +:102B700060E082E090E00E94862F60E083E090E0D9 +:102B80000E94862F109246021092450260E084E077 +:102B900090E00E94862F60E082E290E00E94862F03 +:102BA00060E085E090E00E94862F60E086E090E0A3 +:102BB0000E94862F6FEF87E090E00E94862F40E012 +:102BC00050E0BA0188E090E00E94982F60E08DE02C +:102BD00090E00E94862F40E050E0BA0188E190E04A +:102BE0000E94982F60E087E190E00E94862F40E0ED +:102BF00050E0BA018CE190E00E94982F70E060E014 +:102C000080E290E00E94A42F40E050E0BA0188E109 +:102C100090E00E94982F80E00E94710E0E948A0E20 +:102C200040E050E0BA018FE090E00E94982F40E031 +:102C300050E0BA0183E190E00C94982F90E080E09E +:102C40000E94802F893E9E4F11F40C949C0F80E0CF +:102C500008951092430280914301E8ECF1E088234B +:102C600059F08091040387FF07C08EE1DF011D92B8 +:102C70008A95E9F70C94010B86E0F8CF1F93CF9368 +:102C8000DF93CDB7DEB7AA970FB6F894DEBF0FBEBD +:102C9000CDBF80E393E02091F100DC012D93CD01C5 +:102CA000B3E088339B07B9F780913103833009F48F +:102CB00071C0B8F4813009F448C0823009F4B2C060 +:102CC0008091E80083FF3AC18091300390913103F5 +:102CD0009A3008F033C1E92FF0E0E653F04D0C9440 +:102CE000052F8A3009F48DC08B3009F470C089300B +:102CF00039F780913003813219F780913403909134 +:102D00003503009711F00297D9F68091E800877F8C +:102D10008093E8008091E80082FF37C09091F30033 +:102D20008091F200029729F48091F1008B7F81302D +:102D300021F48091F10080930B038091E8008B7760 +:102D40008093E8000E948004BBCF80913003813AD9 +:102D500009F0B6CF8091E800877F8093E8008091EA +:102D6000340390913503892B61F460E28CE093E0A9 +:102D700070E00E9432058091E8008B778093E80034 +:102D80009FCF60E090E080E0F3CF80912E0381112F +:102D9000C1CF96CF80913003813A09F091CF8091D5 +:102DA000340390913503892B09F08ACF8091E80094 +:102DB000877F8093E8008091E80080FFFCCF8091BE +:102DC00043018093F1008091E8008E77B9CF809124 +:102DD0003003813209F074CF809134039091350330 +:102DE000892B09F06DCF8091E800877F8093E80000 +:102DF0000E94800480913203809343010E9429162F +:102E00005FCF80913003813209F05ACF8091E80082 +:102E1000877F8093E8000E94800480913303809331 +:102E20000A034ECF80913003813A09F049CF809157 +:102E3000E800877F8093E8008091E80080FFFCCF66 +:102E400080910A03BECF803899F0823809F076C0AD +:102E5000809134038F70873008F070C08093E90050 +:102E60008091EB0085FB882780F91092E90006C06D +:102E700080912C0390912D03911182609091E80034 +:102E8000977F9093E8008093F1001092F100809179 +:102E9000E8008E77B5C1882309F4A2C1823009F019 +:102EA0004DC0809132038111A6C1809134038F708F +:102EB0002FEF280F263008F041C08093E9002091C1 +:102EC000EB0020FF98C1933031F48091EB008062D9 +:102ED0008093EB0090C19091EB0090619093EB0098 +:102EE00021E030E001C0220F8A95EAF72093EA0042 +:102EF0001092EA008091EB008860EACF81111EC039 +:102F0000109132031F778091E3008078812B8093AA +:102F1000E3008091E800877F8093E8000E948004AE +:102F20008091E80080FFFCCF8091E300806880936F +:102F3000E30082E0111183E080932E038091E8008A +:102F400083FF0AC08091E800877F8093E80080912A +:102F5000EB0080628093EB00AA960FB6F894DEBF78 +:102F60000FBECDBFDF91CF911F9108958058823061 +:102F700028F720913203309133032C3DE3E03E07E4 +:102F8000A1F583E08A838AE289834FB7F894DE0152 +:102F9000139620E03EE051E2E32FF0E0509357001B +:102FA000E49120FF03C0E295EF703F5FEF708E2F3A +:102FB00090E0EA30C0F0C7968D939D932F5F243147 +:102FC00059F74FBF8091E800877F8093E8006AE25D +:102FD00070E0CE0101960E9432058091E8008B7767 +:102FE0008093E800ABCFC096E7CF809134039091F7 +:102FF0003503432F55274330510509F44AC078F56E +:103000004130510509F47AC08BE590E0E9EEF6E035 +:103010004230510509F092CF2091E800277F20939C +:10302000E80020913603309137038217930708F4A4 +:103030009C0140E02115310509F065C0411163C0D4 +:103040008091E80082FDC9CF80912E03882329F268 +:10305000853019F28091E80083FFF2CFBECF413274 +:10306000510509F43CC04232510509F067CF833065 +:10307000910508F063CFFC01EE0FFF1FE954FE4FEE +:103080000190F081E02D8C549E4FDC018C9190E0FA +:103090001AC0332721303105D1F02115310561F0F7 +:1030A0002230310509F04ACFE6E5F7E0E4918E2FB2 +:1030B00090E0E6E5F7E007C0E6E7F7E0E4918E2F61 +:1030C00090E0E6E7F7E0009709F438CFA5CFE2E615 +:1030D000F7E0E4918E2F90E0E2E6F7E0F4CF833062 +:1030E000910508F02BCF880F991FFC01E354FE4F88 +:1030F0000190F081E02D89E090E08ECF82E190E0B8 +:10310000E4E4F7E089CF80912E03882309F465CFAA +:10311000853009F462CF8091E80083FD5ECF809115 +:10312000E80082FD8DCF8091E80080FF83CF9091F1 +:10313000F3008091F2002115310519F088309105D6 +:1031400050F041E0089709F040E08091E8008E7768 +:103150008093E8006FCF44914093F1003196215065 +:1031600031090196E8CF803809F0E8CE8091E80077 +:10317000877F8093E80080912F038093F10087CEB2 +:103180008111DCCE10913203123008F0D7CE80913D +:10319000E800877F8093E80010932F030E9480044B +:1031A000112311F084E005C08091E30087FDFACF80 +:1031B00081E080932E0342E061EC81E00E949F0455 +:1031C00042E261EC84E00E949F0442E261EC82E012 +:1031D0000E949F0442E260EC83E00E949F04AECE16 +:1031E00080913203813009F0A9CE81E0933009F05B +:1031F00080E080932D031092E9008091E800877FA2 +:103200008093E8000E94800499CE9F92AF92BF9273 +:10321000CF92DF92EF92FF920F931F93CF93DF93A2 +:1032200000D000D0CDB7DEB77C01FC018381948152 +:10323000892B31F08081918189238F3F09F0F0C57E +:103240000F900F900F900F90DF91CF911F910F91E2 +:10325000FF90EF90DF90CF90BF90AF909F90089538 +:10326000980122513F452031310508F0CEC58FEF3E +:1032700093E00E94722F025167E0C62E62E0D62EC4 +:10328000882339F1809140028770D1F2F701828161 +:103290008823B1F282E00F900F900F900F90DF9192 +:1032A000CF911F910F91FF90EF90DF90CF90BF9043 +:1032B000AF909F900C945615C114F4E0DF0611F303 +:1032C000C6010E94722F811101C001502FEFC21A56 +:1032D000D20A0111F1CF1C821B82BB24B3945AE0A5 +:1032E000A52E86010F5F1F4FC6010E94722F898392 +:1032F0001A82882339F29FEF980F933008F58A835A +:10330000B98232E0C30ED11CC8010E94722F8B8398 +:10331000882309F4B7CF8E010F5F1F4FF80180811A +:103320008823F9F2813009F043C091818281913084 +:1033300049F40E5F1F4F0E94280D0F5F1F4FEECF05 +:103340006801E9CF923029F40E5F1F4F0E94730C81 +:10335000F4CF933029F40E5F1F4F0E944E0BEDCF38 +:10336000943019F00F5F1F4FE8CF0E5F1F4F30E012 +:1033700020E0B8016F5F7F4FF80141818053990BC6 +:103380008A30910550F021503109B8F28FE99FE061 +:103390000197F1F700C00000F6CFA29EF001A39EB6 +:1033A000F00D11249C012E0F3F1F842F8B01E1CFC4 +:1033B0000E94A90DC2CF81E00E9472150E943615AD +:1033C00061CF81E00E944515F9CF82E0FBCF043840 +:1033D0009FE5190709F483C008F473C00538FFE5B9 +:1033E0001F0709F041C5882309F43EC580EE0E94FD +:1033F000730C81EE0E94730C80E10E94730C80E1DB +:103400000E944E0B81EE0E944E0B80EE0E944E0BEE +:103410008091E60191E062E189278093E6018823AB +:1034200009F48DC08FE00E94BF1066E18FE00E941A +:10343000BF101AC5882369F180914F02811106C01F +:1034400081E080934F0282EE0E94730C0E94A205DD +:1034500090934E0280934D028BE20E94730C04C540 +:103460008823A1F080914F02811106C081E08093F2 +:103470004F0282EE0E94730C0E94A20590934E02AE +:1034800080934D0281EE0E94730CE6CF81EE0E9484 +:103490004E0B8BE20E944E0BE7C4882309F4E4C470 +:1034A00081EE0E94730C83EE0E94730C8FE40E94E5 +:1034B000730C8FE40E944E0B83EE0E944E0B81EE44 +:1034C000E9CF882309F4D0C481EE0E94730C83EE07 +:1034D0000E94730C80E50E94730C80E5EBCF88237B +:1034E00009F4D0CE10914C0281E0182710934C02C1 +:1034F0000E94A20590934B0280934A0268E1112337 +:1035000081F08FE00E94BF1069E18FE00E94BF1040 +:103510006AE18FE00E94BF106BE18FE00E94BF1054 +:10352000B1CE84EB0E94BF1069E184EB0E94BF1012 +:103530006AE184EB0E94BF106BE184EBEFCF8FEA6E +:103540000E94BF1066E18FEA72CF82EE0E94730C78 +:10355000C6C483E00E942F0B88E10E94730C88E1AF +:103560000E944E0B83E00E94240BB9C482EE0E949D +:10357000730C87E50E94280DB2C486EE0E94280DC8 +:1035800088E1F8CF895AC5C482EE0E944E0BD9C497 +:103590008CE20E94280D8091E801882309F4D1C4AF +:1035A00089E30E94280DCDC488E2FBCF033FFCE5F0 +:1035B0001F0739F1A0F4083D3CE51307F1F0093D80 +:1035C0008CE5180751F1073D9CE5190709F0BDC4CA +:1035D00026E241EE61EEC7010E94450D53CE053F44 +:1035E000ECE51E07B1F088F0063F2CE5120709F064 +:1035F000ACC427E245EE66EEEECF27E245EE65EE7F +:10360000EACF26E241EE60EEE6CF27E245EE64EE39 +:10361000E2CF26E241EE62EEDECF28E241E0EFCFDC +:1036200080910403806106309CE5190709F48CC081 +:1036300080910403886007301C4508F485C08091A0 +:103640000403806281C0809104038D7F0C30FCE50F +:103650001F0709F479C070F4809104038C600A306C +:103660003CE5130709F470C008F481C0809104039D +:103670008E7F6AC080910403877F0E309CE5190716 +:1036800009F462C0809104038B7F0F301C4508F45D +:103690005BC0809104038F7E57C00B3FFCE51F0782 +:1036A00009F45DC030F503313CE5130709F46DC042 +:1036B00078F401319CE5190709F463C002311C4517 +:1036C00009F07EC40E942916809104038F773CC0C4 +:1036D0000531FCE51F0709F460C008F474C080914F +:1036E000050381600A3F1C4509F06AC48093050305 +:1036F00067C40F3F8CE5180709F44BC088F480912C +:1037000005038D7F0D3FECE51E0781F380910503D6 +:103710008E7F0E3F1C4550F3809105038360E6CFFA +:1037200001302DE5120709F457C008F442C060E0EB +:1037300002301D4509F044C48EE090E00E94862FBF +:103740003FC48091040381608093040339C4809155 +:1037500004038260F9CF809104038460F5CF8091E7 +:1037600005038260C3CF809104038064EDCF0E9483 +:103770002916809104038068E7CF809104038F7D30 +:10378000E3CF809104038F7BDFCF80910403837F9D +:10379000DBCF809105038C7FA9CF8091040382FB4E +:1037A000992790F921E0922790FB82F990FB83F909 +:1037B000CBCF80910503982F909591708E7F892BA8 +:1037C00090FB81F993CF0E94291690910403892FD1 +:1037D00097FB87F98058B8CF61E0AECF882309F412 +:1037E00002C4809143028A7A91E009F490E09093B8 +:1037F000E901811106C089E20E94700A0E94000A54 +:1038000041CD85E3F9CF85E3F3C3043CFCE51F0715 +:1038100009F493C047EF53E160E074E1053C2CE507 +:10382000120709F00AC40E9425062CCD093C3CE58C +:10383000130709F491C070F4073CECE51E0709F486 +:1038400086C04BEE53E16FED73E1083CFCE51F07CA +:1038500051F3F3C30A3C2CE5120709F482C049E096 +:1038600054E16AE174E10B3C3CE51307E1F2E5C386 +:10387000013D8CE5180709F487C0B0F40E3CECE577 +:103880001E0709F47BC008F476C00F3C2CE5120734 +:1038900009F477C06EE089E0003D3CE5130709F0CC +:1038A000CCC30E949415EECC043D8CE5180709F4B6 +:1038B00071C078F4023DECE51E0709F468C061E0D0 +:1038C00088E1033DFCE51F0709F0B7C30E942B14F4 +:1038D000D9CC053D2CE5120709F45FC00D35100762 +:1038E00009F4D0CCAAC380918E0380FF1BC08E7FC9 +:1038F00080938E0360918E0370918F03809190036B +:10390000909191030E942013109284028FEF90E710 +:10391000E2E081509040E040E1F700C000000E94EA +:10392000D90FB0CC816080938E0361E08695CECFB5 +:1039300041E855E16AE875E176CF4AE855E161E88A +:1039400075E171CF40E054E167EF73E16CCF4FED6B +:1039500053E16BEE73E167CF47EC53E163ED73E145 +:1039600062CF43ED53E167EC73E15DCF4AE154E18F +:1039700069E074E158CF61E081E0A8CF65E082E0C2 +:1039800090CF68E086E08DCF64E18FE08ACF67E179 +:1039900085E187CF62E289E184CF61E083E296CF5F +:1039A0000B359DE5190701F10C351D4509F055C38F +:1039B0008091050382FB882780F991E089270E9486 +:1039C000990E4BC30E942916FFEF24E33CE0F1500F +:1039D00020403040E1F700C000000E944F0C0E94E0 +:1039E000B21550CC81E0EBCF80E0E9CF828100813D +:1039F0001181882369F0C8010E94E60ED82E682F35 +:103A0000C8010E94D50AB8018D2D0E94D90E2BC382 +:103A1000C8010E94AE0AD82EF6CF212F2F70C22ED9 +:103A2000107F19F0C29490EFC922DD20C9F0CC209C +:103A300069F080E2800F883010F001110BC0809196 +:103A40004302C82AC09243020E94000A802F0E94AB +:103A5000730C19C080914202C82AC0924202F4CF6E +:103A6000802F0E944E0BCC2071F0C09480E2800F1A +:103A7000883010F001113AC080914302C822C092F0 +:103A800043020E94000AE92DE850FF0B349720F40E +:103A90000E94DA050E94AB0BAA20A9F08091400297 +:103AA00080FD11C0F70112828595859585950E944C +:103AB0007215C7010E940519809140028595859570 +:103AC00085950E94451560E0C7010F900F900F90FB +:103AD0000F90DF91CF911F910F91FF90EF90DF90AA +:103AE000CF90BF90AF909F900C945C0F809142025A +:103AF000C822C0924202C5CF312F3F70B32E107F33 +:103B0000103219F0B29480EFB822002369F001302E +:103B100081F1DD20D9F1CC2091F1F701858180FF81 +:103B200095CF8F7085832BC0DD20B1F0909144023A +:103B30008B2D892BC11003C00E94440BA4CFE1E060 +:103B4000CE12FACF2091050322FD9DCF891709F4EB +:103B50009ACF8093440297CFC11006C00E94FA0901 +:103B60008B2D0E94390B8FCFF1E0CF1609F48BCF4C +:103B7000F5CFDD2031F025E02C1508F484CF8B2D16 +:103B8000DBCF34E03C1508F47ECFEACFCC2041F304 +:103B9000093349F4FFEF27EE33E0F1502040304085 +:103BA000E1F700C00000802F0E944E0B6CCF812FE8 +:103BB00086958695837061F0813009F064CFC801E5 +:103BC0009370D11002C090E080E00E94AE055BCF00 +:103BD000C8019370D11002C090E080E00E94C4053B +:103BE00052CF802FDD2029F00E94BC070E94DA0608 +:103BF0004ACF0E940107FACF812F837009F03FC09E +:103C0000D11041CF402F429546954770440F440F45 +:103C1000802F8F7090E0042E02C0880F991F0A94A5 +:103C2000E2F730E020E004FF09C02FE030E002C0FE +:103C3000220F331F4A95E2F7209530951695169579 +:103C40001370123099F078F4409145025091460279 +:103C5000113039F0822B932B842395230E941E0B65 +:103C600012CF842B952B822B932BF8CF822B932B67 +:103C7000209145023091460282279327EFCF869507 +:103C8000DD2011F0812F8170882309F4FCCE402FB4 +:103C9000429546954770440F440F802F8F7090E0F7 +:103CA000042E02C0880F991F0A94E2F730E020E04A +:103CB00004FF09C02FE030E002C0220F331F4A95F5 +:103CC000E2F720953095169516951370123099F0FD +:103CD00078F44091380350913903113039F0822B38 +:103CE000932B842395230E942E15CDCE842B952BC8 +:103CF000822B932BF8CF822B932B2091380330917A +:103D0000390382279327EFCF1F70DD2029F0812F01 +:103D10000E947215802F10CF802F0E94390B812FA7 +:103D20000E944515B0CE023F09F441C060F4003F47 +:103D300011F1013FA1F1DD2009F457C0C11086CE79 +:103D4000812F8F7131C0033FB9F1043FA1F7DD200E +:103D500009F440C01F71812F0E94721580910503E4 +:103D600082FD07C0E8E01E9FC0011124836080939C +:103D70004002812F19C0DD2069F084E08C1508F421 +:103D800082CE1F7181E090E002C0880F991F1A95C2 +:103D9000E2F7B3CF95E09C1508F475CEF2CF812FF2 +:103DA0008F71DD2009F4BCCF0E9472156CCE812F7B +:103DB0008F71DD20C9F3B4CF90E080E0DD2009F4FD +:103DC00092CF1F7181E090E002C0880F991F1A9571 +:103DD000E2F789CF81E00E945615F1E0FC1508F06A +:103DE00052CE82E00E9456154ECECC2059F00933B7 +:103DF00009F0D9CE2FEF37EE83E0215030408040DC +:103E0000E1F7CFCE812F8F718BCF00313FE51307C4 +:103E100009F4D1CA01319FE51907A9F482E0CCCA9F +:103E200061E0C7010E945C0F8C01F7018281811162 +:103E300017CA0031FFE51F0709F4C3CA01312FE596 +:103E4000120709F4C2CA0238EFE51E0709F425CBB0 +:103E500008F0BDCA00382FE5120709F4EBCA013893 +:103E60003FE5130709F4FCCAF7018281882369F052 +:103E7000C801815E9C45059740F46FE1600F609337 +:103E800050028CE090E00E94862F17FF8FCBF70145 +:103E90008281882309F459C00E94DA0586958170D1 +:103EA0008093E80190915002913029F4882319F011 +:103EB00089E30E94280D809143028093E7011092CC +:103EC000430280915002813009F443CB882309F4E6 +:103ED0003CCB823009F44ACB843009F44ECB8FE3DB +:103EE0009CE90197F1F700C000005801E894B7F889 +:103EF0004CE0C42ED12CC5010C2C02C096958795A0 +:103F00000A94E2F78F7096EF980F963008F43ACB48 +:103F1000805D0E94A90D94E0C91AD108ECEFCE167D +:103F2000EFEFDE0641F780915002813009F430CB8B +:103F3000882309F429CB823009F426CB843009F494 +:103F400033CB8091E70180934302F701828188237C +:103F500009F446C0109295030230FCE51F0708F4EF +:103F60004AC006312CE5120738F098012A5F3C451B +:103F70002930310508F03FC00E94B50F909305032A +:103F80008093040300313CE5130709F4F6CB08F0F5 +:103F900084CB08309CE5190709F4E5CB08F053CB36 +:103FA0000430FCE51F0709F4D6CB08F039CB02300A +:103FB0003CE5130709F4C5CB03301C4509F4C7CB16 +:103FC000609104031091050384E090E00E94862F25 +:103FD000612F82E290E00E94862F0E94291652C92A +:103FE00006311C45D1F58091E90181110CCC89E2A3 +:103FF0000E94450A03CC06312CE5120709F4EECBEA +:104000008091430282720C3C9CE5190709F4AECC06 +:1040100008F02ECC063CFCE51F0709F493CC08F011 +:1040200005CC033C3CE5130709F482CC08F0EDCB4A +:10403000023CECE51E0709F456CC0A35FDE51F07E6 +:1040400009F4D0CC08F0ACCC01153CE5130709F419 +:10405000B9CC0E3D1C4509F4C2CCF701868197818D +:10406000009709F4C3CC0E9472088C01F701D2803A +:10407000C580C2943FE0C322809140028770A1F0C6 +:10408000AD2CDD2091F0812F807F803421F080E203 +:10409000800F883048F082E00E94561580914002DF +:1040A0008770AA24A3948111A12C912E92942FE0C1 +:1040B0009222FBE0F91508F4E6CCE92DF0E0EC5291 +:1040C000F04D0C94052FCF93DF938091FB01807FFF +:1040D000A1F48091F801882381F080913F02D09172 +:1040E000FE016091F6017091F701A091F901B09184 +:1040F000FA01C62FC723D81303C0DF91CF910895CB +:1041000090E0109711F0CF3F19F401968770F3CF2C +:104110009C0143E0220F331F4A95E1F7F901E1507A +:10412000FE4F41814713F1CF40814613EECF4281CC +:104130004111EBCF438154814A1B5B0B483C510535 +:1041400020F78091FB018F7080618093FB01F90162 +:10415000EC5FFD4F80818F708061808386EF91E0FE +:104160000E940519DF91CF910C94A40AAF92BF92DF +:10417000CF92DF92EF92FF920F931F93CF93DF9333 +:10418000CDB7DEB765970FB6F894DEBF0FBECDBFD3 +:104190008C0185E0F801DE01519601900D928A951F +:1041A000E1F7F801E28066EFA62E61E0B62E60919D +:1041B000F9017091FA016115710509F468C19091D6 +:1041C000F6014091F701892F84238F3F09F45FC1E5 +:1041D00020813181C380D480F090F801F601E61B84 +:1041E000F70BFF2009F41DC18091FB01582F507F70 +:1041F000E83CF10508F0D0C0511181C0FE2C4313FA +:104200002BC0921329C06091FC017091FD01F8014F +:104210004681578164177507F9F4E1101DC08F704E +:1042200080618093FB01C5010E9405198091FB010B +:10423000F80185838F2D65960FB6F894DEBF0FBE0B +:10424000CDBFDF91CF911F910F91FF90EF90DF9045 +:10425000CF90BF90AF900895CD2829F0822F83236F +:104260008F3F09F02FC180E0F82FF170DF2E80FF23 +:104270003CC080913F024091FE01841315C0298B00 +:104280003A8B89899A890E94220F292F22952F70B3 +:104290002230F8F0243020F59F70F9F0F801958174 +:1042A000907FD9F4D12C1FC090E0FC0153E0EE0FB9 +:1042B000FF1F5A95E1F7E150FE4F5181351306C0BB +:1042C0005081251303C05281E5120FC001968770FB +:1042D000D4CF9F7011F0882329F3805E883010F3CB +:1042E000C8010E940519FD2CA5CFEE2009F4A2CF2C +:1042F0008091FB0181608093FB01F12C9BCF4313E4 +:104300001BC0921319C04091FC015091FD01F801AE +:10431000268137814217530779F4E1100DC0858358 +:10432000C8010E94051988E0F801A6EFB1E00190EC +:104330000D928A95E1F77ECFC8010E942E0F882347 +:1043400039F1EE2029F18091FB018032A0F020911B +:10435000F6013091F7013A8729871B86DD86CC86E6 +:104360008E878091FC019091FD01988B8F87CE0103 +:1043700009960E94051988E0F801A6EFB1E00190C6 +:104380000D928A95E1F70E946320FF24F39452CFA7 +:10439000C8010E940519F9CF51110AC086EF91E0BA +:1043A0000E94051988E0F50111928A95E9F7A5CFD9 +:1043B000431318C0921316C04091FC015091FD01A7 +:1043C000F801268137814217530761F4E1100AC0D2 +:1043D0008583C8010E94051988E0F50111928A952C +:1043E000E9F728CFC8010E942E0F882389F2EE201A +:1043F00079F28091FB01803208F4BDCF2091F60163 +:104400003091F7013A8329831B82DD82CC828E832F +:104410008091FC019091FD0198878F83CE010196D8 +:10442000A8CFE83CF105C0F6FE2CEE2009F4B0CF91 +:1044300043131FC092131DC02091FC013091FD0158 +:10444000F801868197812817390799F49091FB012B +:1044500090FD69CF907F09F466CF8091FB01858341 +:10446000903F09F45DCF982F907F905F8F70892BDC +:1044700056CFC8010E942E0F81117DCF8091FB0184 +:1044800081608093FB01C8010E940519D3CEEE2004 +:1044900009F47ECFC8010E942E0FF82E882309F45C +:1044A00077CF88E0F801A6EFB1E001900D928A95F0 +:1044B000E1F78091F6019091F7010E94220F0E948E +:1044C0006320B8CE81E08E25CFCECF93DF93CDB7DA +:1044D000DEB760970FB6F894DEBF0FBECDBF298759 +:1044E0003A874B875C876D877E878F87988BCE0155 +:1044F00009960E94B620811112C088E0FE0139960B +:10450000DE01119601900D928A95E1F78C859D85CB +:10451000892B29F089859A8589238F3FA9F5809178 +:104520003F029091FE0189131CC060960FB6F8946B +:10453000DEBF0FBECDBFDF91CF91089593E0AA0FEC +:10454000BB1F9A95E1F7A150BE4F98E0FE0131964E +:1045500001900D929A95E1F78093FE010E94A40AC2 +:10456000DECFB8E08B9FC001112481509E4F0E9486 +:10457000B6208823D1F280913F0290E001968770A7 +:10458000992780933F02CBCFA091FE01B0E0CD01EF +:1045900001968770992720913F022817190671F616 +:1045A0000E9429161092FE0110923F0288E0E6EF69 +:1045B000F1E0DF011D928A95E9F7B1CF0F931F93C8 +:1045C000CF93DF9380918C02E0918B02CCE081113C +:1045D0001AC0DF91CF911F910F910895D1E0DE0FA6 +:1045E000D0938B020E2F10E0EC9FF0011124E357C3 +:1045F000FD4F83819481892B29F0808191818923CA +:104600008F3F51F4ED2F80918C02E81738F3109210 +:104610008C0210928B02DDCFC09FD001C19FB00DE4 +:104620001124A357BD4F16968D919C911797892BF6 +:1046300029F418968D919C91019651F42081318135 +:104640004281538164817581868197810E946522B0 +:10465000C09FF001C19FF00D1124E357FD4F14825C +:104660001382D0CF1092F8021092F70210924201FA +:104670008091F6028093F5020E9414060C94DE22CB +:104680002F923F924F925F926F927F928F929F9262 +:10469000AF92BF92CF92DF92EF92FF920F931F9350 +:1046A000CF93DF93C091F502E7E0FE2E01E010E02A +:1046B000FCE02F2EAEEFEA2E8091F6028C1316C08E +:1046C0000E94DE22DF91CF911F910F91FF90EF901A +:1046D000DF90CF90BF90AF909F908F907F906F9022 +:1046E0005F904F903F902F900C941406D0E0FE0105 +:1046F000EE0FFF1FE351FD4F80819181F89EF00185 +:10470000F99EF00D1124E85EFE4F2481211158C05E +:1047100030908C02ADE8B2E030E020E0412C5F0147 +:10472000231508F04BC01A966D907C901B97F501ED +:10473000808091804FEF5FEF512CC52CD12CF6017A +:10474000EE0FFF1FE80DF91D65917491661677064F +:1047500009F4A601672B11F05394EFCF4F3F540794 +:10476000B1F1B80102C0660F771F4A95E2F7462AF9 +:10477000A80102C0440F551F5A94E2F74150510955 +:104780004416150601F5229EF001239EF00D11241A +:10479000E357FD4FF89ED001F99EB00D1124A85E9D +:1047A000BE4F12962D913C91139737832683E0825A +:1047B000E1829187808771E015967C930E94E605DF +:1047C0002196C37079CF14961C921E9213972F5F77 +:1047D0003F4F1C96A5CF9F92AF92BF92CF92DF9290 +:1047E000EF92FF920F931F93CF93DF9300D000D0EF +:1047F00000D0CDB7DEB78E010F5F1F4F86E0F80106 +:1048000011928A95E9F785E7C82E81E0D82EF12C20 +:10481000E12CAA24A394B12CF60181916F018F3F62 +:1048200009F449C0F894E82FE295EF70F0E021A177 +:104830008F70A50102C0440F551F8A95E2F7CA0187 +:10484000922F982B91A392A18095892382A378948B +:1048500000C0EBE7F1E030E020E0912C41914F3FC8 +:1048600009F473C0A42FA295AF70B0E090968C911C +:1048700090E04F7002C0959587954A95E2F780FDCC +:1048800064C08A2D022E01C0880F0A94EAF7982A84 +:104890002F5F3F4F2430310509F7F60131978081B2 +:1048A0008F3F11F00E94180850EA5A95F1F7F8016D +:1048B000EE0DFF1D90828FEFE81AF80AE6E0EE1683 +:1048C000F10409F0A9CF46E050E0B80184E592E098 +:1048D0000E94652FFF24F394009709F4F12C892B93 +:1048E000B1F186E0F801A4E5B2E001900D928A955D +:1048F000E1F781E0809349020E94A205909348026B +:104900008093470280914702909148020E9493054C +:10491000059708F1809154028093670280915502B7 +:1049200080936802809156028093690280915702B9 +:1049300080936A028091580280936B0280915902A1 +:1049400080936C021092490206C080E0A0CF809153 +:1049500049028111D7CF80914201882301F18091D2 +:10496000F7029091F8020097D1F00E9493052091F0 +:10497000890230918A022817390788F49091F5024C +:104980008091F602981709F445C00E9440231092C6 +:104990008A02109289021092F8021092F702809116 +:1049A0004F02882371F080914D0290914E020E9437 +:1049B0009305893E934028F082EE0E944E0B1092A0 +:1049C0004F0280914C02882391F080914A0290918D +:1049D0004B020E949305883E934048F00E94A20536 +:1049E00090934B0280934A0283E70E94280D8F2DFB +:1049F00026960FB6F894DEBF0FBECDBFDF91CF91E4 +:104A00001F910F91FF90EF90DF90CF90BF90AF90EC +:104A10009F9008950E94DE221092F8021092F702F1 +:104A20000E941406BCCF2F923F924F925F926F92DA +:104A30007F928F929F92AF92BF92CF92DF92EF922E +:104A4000FF920F931F93CF93DF93CDB7DEB7699794 +:104A50000FB6F894DEBF0FBECDBF498B5A8B6B8B60 +:104A60007C8B8D8B6111109242021D861E861F86E3 +:104A7000188A85E0FE017196DE01199601900D926B +:104A80008A95E1F78C859D85892B31F089859A85FA +:104A900089238F3F09F0D4C129853A854B855C85F0 +:104AA0006D857E858F8598890E946522C3C028EF19 +:104AB000C2162CE5D20629F4882379F00E9432230D +:104AC000EBCF39EFC3163CE5D30639F4882329F040 +:104AD000809142018111F2CFC3C108E111E0E12CC4 +:104AE000B12CA12C88248394912C9EEF592E442420 +:104AF0004394F8016081718166246A94762C20E0E9 +:104B0000422F50E0FA01EE0FFF1FE60FF71F8591CD +:104B10009491C816D90609F43A01892B11F02F5F38 +:104B2000EFCFF12CFFEF6F167F0609F445C0F801B7 +:104B30004481F09042018F2D411180E0F82FF170F7 +:104B4000FF2EF801258086819B85992309F408C1F1 +:104B5000FF2009F405C1211014C0A40101C0440FB5 +:104B60006A94EAF7842B86838091890290918A0265 +:104B70008E35914030F44EE551E050938A024093D7 +:104B80008902C40102C0880F991F2A95E2F7019794 +:104B9000F80126812817190679F48091F70290917F +:104BA000F802009709F45FC00E9493058F35914089 +:104BB00008F459C0F8014482EF28FFEFAF1ABF0A8A +:104BC000095F1F4F26E0A216B10409F092CF8B8532 +:104BD000882309F420C1EE2009F41DC10E94A2051A +:104BE0009093F8028093F70280918C02883010F540 +:104BF00091E0980F90938C0298E0FE013996DE01C7 +:104C0000119601900D929A95E1F73CE0839FC001C7 +:104C1000112483579D4F28E0FE013196DC0101905D +:104C20000D922A95E1F72FEF3FEFFC0131872087A6 +:104C3000D386C28669960FB6F894DEBF0FBECDBF8D +:104C4000DF91CF911F910F91FF90EF90DF90CF9068 +:104C5000BF90AF909F908F907F906F905F904F909C +:104C60003F902F9008958091F5026090F602982F62 +:104C7000F0E0E0E0861114C09093F5020E171F07D4 +:104C800009F49ACF90E0FC01EE0FFF1FE351FD4FB6 +:104C9000B182A0820196837099278093F6028CCF0F +:104CA000282E312CF101EE0FFF1FE351FD4F208123 +:104CB0003181F7E0F29FD001F39FB00D1124A85E7F +:104CC000BE4F2D913C911197398F288F712C60E048 +:104CD00070E0E72FF0E0EE0FFF1F288D398DE20F17 +:104CE000F31F2591349121153105E1F0F801019070 +:104CF000F081E02DFF8BEE8B60E005C024173507B7 +:104D000009F47F2C6F5FE62FF0E0EE0FFF1F4E8956 +:104D10005F89E40FF51F459154914115510571F7D5 +:104D20007F5FD7CF7720C9F0F801671708F0FD0142 +:104D300044820E171F0721F49093F502F72C3CCF05 +:104D4000981305C0AE17BF0711F49F5F93709101D0 +:104D50002F5F3F4F822F83708DCFF0E0E0E0F7CFE1 +:104D600090E021101FC0B40102C0660F771F2A9582 +:104D7000E2F79B01215031092817390731F4442308 +:104D800009F447C0C5010E94E605C40101C0880FAF +:104D90006A94EAF7982F9095F80186818923868393 +:104DA000F22C0ACF9C01062C02C0359527950A9457 +:104DB000E2F7A90141705527BC01615071098623B2 +:104DC0009723892B11F5452B01F1F80182819381FD +:104DD000892BC1F01B821C821D821E8259825A823D +:104DE0000E94A2058160582F9D838C83F8018281E7 +:104DF00093818F83988729813A814B816D817E8150 +:104E00000E946522F8011582C0CFF22FF1702F2E7B +:104E1000BCCF2F2CBACF9091F5028091F602981753 +:104E200031F00E944023EE2009F436CE03CF0E94D9 +:104E3000DE221092F8021092F7020E941406F3CFBD +:104E400061E0CE0109960E945C0F6C018B85F7EF43 +:104E5000CF16FCE5DF0609F02ACE882309F43DCE03 +:104E600081E08093420118CE1F920F920FB60F92ED +:104E700011242F933F934F935F936F937F938F935F +:104E80009F93AF93BF93CF93DF93EF93FF93D09113 +:104E9000E900DF708091EC00C82FC17080FDC0E890 +:104EA0001092E9008091F000877F8093F000789461 +:104EB0000E943E161092E9008091F0008860809375 +:104EC000F000CD2BCF70C093E900FF91EF91DF91FF +:104ED000CF91BF91AF919F918F917F916F915F9192 +:104EE0004F913F912F910F900FBE0F901F901895EB +:104EF0001F920F920FB60F9211242F933F934F934F +:104F00005F936F937F938F939F93AF93BF93EF9331 +:104F1000FF938091E10082FF09C08091E20082FF4F +:104F200005C08091E1008B7F8093E1008091DA00E1 +:104F300080FF24C08091D80080FF20C08091DA00DB +:104F40008E7F8093DA008091D90080FF9BC080E142 +:104F500089BD82E189BD09B400FEFDCF81E0809367 +:104F60002E0380910903811109C00E9406040E944A +:104F7000D1048091E20084608093E2008091E1009E +:104F800080FF17C08091E20080FF13C08091E20093 +:104F90008E7F8093E2008091E20080618093E20046 +:104FA0008091D80080628093D80019BC85E08093FE +:104FB0002E038091E10084FF29C08091E20084FFEC +:104FC00025C080E189BD82E189BD89B5982F9170A6 +:104FD00080FFFBCF8091D8008F7D8093D800809197 +:104FE000E1008F7E8093E1008091E2008F7E8093CC +:104FF000E2008091E20081608093E20080912F03C3 +:10500000882309F445C084E080932E038091E10059 +:1050100083FF27C08091E20083FF23C08091E100DD +:10502000877F8093E10082E080932E0310922F030C +:105030008091E1008E7F8093E1008091E2008E7F7D +:105040008093E2008091E20080618093E20042E080 +:1050500060E080E00E949F048091F000886080936F +:10506000F000FF91EF91BF91AF919F918F917F9150 +:105070006F915F914F913F912F910F900FBE0F90C5 +:105080001F90189519BC10922E031092090376CF29 +:105090008091E30087FD93E090932E03B7CF78943F +:1050A0001F921FB61F9211248F939F93AF93BF93AC +:1050B0008091000390910103A0910203B09103033A +:1050C0000196A11DB11D8093000390930103A0934D +:1050D0000203B0930303BF91AF919F918F911F90F3 +:1050E0001FBE1F9018951F921FB61F9211248F93F9 +:1050F0009F93AF93BF938091FF02811113C0809162 +:10510000000390910103A0910203B0910303419623 +:10511000A11DB11D8093000390930103A09302038E +:10512000B0930303BF91AF919F918F911F901FBECA +:105130001F901895CDB7DEB7EE970FB6F894DEBF87 +:105140000FBECDBF84B7877F84BF0FB6F894A895F4 +:1051500080916000886180936000109260000FBEB3 +:1051600080E890E00FB6F89480936100909361001E +:105170000FBE85B7806885BF85B7806885BF86E12B +:1051800098E09093C5018093C4010E9406040E9498 +:10519000D1048091E20084608093E2007894809151 +:1051A0002E038823A1F01091E9001F709091EC006C +:1051B000892F817090FD80E8182B1092E900809172 +:1051C000E80083FD0E943E161F701093E90082E004 +:1051D00084BD93E095BD9AEF97BD80936E000E94C9 +:1051E0009C0F811102C00E948A0E05E711E02BE797 +:1051F000C22E21E0D22EF80181918F018F3F11F054 +:105200000E941808C016D106B1F786EF0E94180850 +:1052100087EF0E94180883E90E94180886E90E9417 +:105220001808E4E5F2E08AE592E0A7E6B2E0119220 +:105230001D928E179F07D9F70E941E16811102C07A +:105240000E94B21582E090E00E94722F809360026B +:105250000E94B50F90930503809304030E94EB23F3 +:105260008FE39CE90197F1F700C000000E94EB2357 +:105270008091670280FF08C06FEF7FEF90E080E0D1 +:105280000E94A42F0E944F0C83E090E00E94722F96 +:1052900090E00E941E0B80913803909139030E9488 +:1052A0008A14509A589A559A5D9A549A5C9A8CE04E +:1052B00090E00E94722F90E0B0E0A0E08093500256 +:1052C00090935102A0935202B093530280915A02DC +:1052D000811133C00E941E16811104C00E94B215B4 +:1052E0000E94A21588E090E00E947A2F60938E03BE +:1052F00070938F0380939003909391036E7F71F46A +:105300000E94A21588E090E00E947A2F60938E039D +:1053100070938F0380939003909391030E942B06C8 +:105320001092840280918E0380FF04C060E0869515 +:105330000E942B1481E080935A025198599A5298F6 +:105340005A9A89B1869581704A9928C290E0892B32 +:1053500080935E028AEC92E090937C0280937B02C1 +:1053600060E081E20E942B1481E090E00E942E1503 +:1053700080E091E09093FC028093FB0218E1C12E43 +:10538000D12C00E4A02E87E692E096E0B92EB80E6C +:1053900080912E039924939400E112E1853009F461 +:1053A00051C20E94EB23882359F08FB7F8944091A3 +:1053B00000035091010360910203709103038FBFBA +:1053C000E1E6F2E0A7E6B2E010E000E0302F8D91D8 +:1053D0009191981709F45FC2292F282790E099240A +:1053E0009394422F492109F451C29DAB3EAB8921D0 +:1053F00091E009F490E09FAB0E94A2058160782FB4 +:1054000099AF88AF4DA95EA96FA989AD0E941325F8 +:10541000F801EF59FD4F8081982690828091840297 +:105420008823D1F180918302E0918E03E695E81BF9 +:10543000E0937F02823009F045C2F0E0EC51FD4F6D +:10544000E4910E2F10E0BCE08B2EB3E19B2E8091F7 +:105450008002882361F0109280020E94A20590933E +:105460007E0280937D0210928202109281020E943D +:10547000A205E0917D02F0917E028E1B9F0B8F3F73 +:105480009F4750F4E00FF11FF0937E02E0937D02FE +:105490008DE792E0F4010995E0915E02EE0FEE0FC8 +:1054A000E0935E0289B181FBEE24E0F84A9964C280 +:1054B00080E08E29E82BE0935E02EF70F0E0E15887 +:1054C000FE4F808190915D02890F80935D0220E004 +:1054D000843034F180915C028F5F80935C0212E033 +:1054E00018AB19AA81E08AAB0E94A2058160782FCF +:1054F0009CAB8BAB48A959A96AA98CA90E9413251A +:105500001BA71CA61DA60E94A2058160782F9FA73D +:105510008EA74BA55CA56DA58FA50E94132521E044 +:1055200080915D028D3F2CF580915C0281508093CB +:105530005C021EA21FA281E088A70E94A2058160D2 +:10554000782F9AA789A74EA15FA168A58AA50E9476 +:10555000132519A21AA21BA20E94A2058160782F0E +:105560009DA38CA349A15AA16BA18DA10E941325D3 +:1055700021E080915D02082E000C990B64E070E040 +:105580000E94CF2E80935D02222359F08FB7F894AA +:105590004091000350910103609102037091030355 +:1055A0008FBF86E0E4E7F2E0DE01119601900D92F4 +:1055B0008A95E1F7909076028090770210917802B8 +:1055C000009179021092760210927702109278027E +:1055D00010927902892D882909F448C080917202BD +:1055E000909173020E9493059C0190916E02992301 +:1055F00009F4AEC323333105C8F19F3F19F09F5F13 +:1056000090936E02992059F00E949C079FEF191405 +:105610000CF491E0899F802D1124809376028820DC +:1056200059F00E949C079FEF18140CF491E0899F99 +:10563000802D112480937702309176023323B1F0CC +:1056400020917702222391F045EB3403C00111240D +:10565000992309F494C19093760245EB24039001B9 +:105660001124332309F48FC130937702812F802BCB +:1056700009F448C080917002909171020E949305D4 +:105680009C0190916D02992309F45DC32536310583 +:10569000C8F19F3F19F09F5F90936D02112359F05D +:1056A0000E947A079FEF11160CF491E0899F802DDC +:1056B000112480937802002359F00E947A079FEF0B +:1056C00010160CF491E0899F802D112480937902AB +:1056D000309178023323B1F020917902222391F0A6 +:1056E00045EB3403C0011124992309F450C1909370 +:1056F000780245EB240390011124332309F44BC1B4 +:10570000309379028091760290917702892B909163 +:105710007802892B90917902892B11F00E94DA0688 +:1057200086E0FE013196A4E7B2E001900D928A95E1 +:10573000E1F70E94DA0590915F02891731F00E942B +:10574000DA0580935F020E94AB0B80912E038430B8 +:1057500009F01ECE83E08093E9008091E80082FF8B +:1057600017CE8091E80090E085FF06C00E942504D6 +:10577000882309F414C191E08091E8008B7780932D +:10578000E800992309F404CEE981E150E33108F0FF +:1057900088C1F0E0E052F04D0C94052F92E0D7CD97 +:1057A00080912E03843009F440C080E00E94AB0B4E +:1057B0001092840280917A02811116C090927A022E +:1057C00080918E03982F917090935B028E7F8093CF +:1057D0008E039FEFE0E7F2E09150E040F040E1F708 +:1057E00000C000000E94D90F1092FF020FB6F8947B +:1057F000A895C09260000FBEA092600083B7817F21 +:10580000846083BF83B7816083BF7894889583B7B2 +:105810008E7F83BF0FB6F894A89580916000886151 +:1058200080936000109260000FBE80912D0388234A +:1058300049F00E94EB23E7E6F2E08191811164C216 +:10584000BE12FBCF80912E03853009F4A9CF0E94B0 +:1058500029160E94DA050E94AB0B10927A02809101 +:105860005B02882361F080918E03816080938E03B8 +:1058700060E086950E942B140E94C30F92CD809108 +:1058800085028823C9F30E94D90FF6CF9F5F990C38 +:10589000943009F0A6CD0F5F1F4F0630110509F0B7 +:1058A00095CD8FEF8AAF8BAF1CAE0E94A2058160B1 +:1058B000782F9EAF8DAF4AAD5BAD6CAD8EAD0E94C3 +:1058C0001325ACCD863059F4F0E0EF51FD4FE49153 +:1058D0000E2F10E0ACEF8A2EA2E19A2EB8CD8930BF +:1058E00061F4E695F0E0E252FD4FE4910E2F10E0F6 +:1058F000F8E68F2EF2E19F2EAACD8F3061F4E69567 +:10590000F0E0E552FD4FE4910E2F10E0EAEF8E2E0D +:10591000E1E19E2E9CCD853159F4F0E0E852FD4F37 +:10592000E4910E2F10E07CEA872E71E1972E8FCD47 +:1059300008E210E043E2842E41E1942E883109F41C +:1059400086CD833249F4E6EDF2E00591149163EAE5 +:10595000862E62E1962E7BCD04EF11E05AEE852E65 +:1059600050E1952E843209F472CD00ED17E03AE251 +:10597000832E36E0932E6BCD82E090E09ACD81E0CD +:10598000809376026ACE81E0809377026FCE81E0C9 +:1059900080937802AECE81E080937902B3CE00E2AC +:1059A00010E0CE0101964C018091E80085FD0AC00F +:1059B0008091E8008B778093E8000E94250488237B +:1059C00099F3D9CE8091F100F40181934F010150F8 +:1059D000110951F7D0CE1A8289E08B832DC08A81BC +:1059E000823009F4A7C18330A9F0813009F059C091 +:1059F0002FB7F89460910003709101038091020326 +:105A0000909103032FBF0E940B2F6B837C838D83A8 +:105A10009E8312C0809167028B83809168028C8381 +:105A2000809169028D8380916A028E8380916B02DE +:105A30008F8380916C02888780912E03843009F0D7 +:105A4000A7CC1091E9001F709091EC00892F817014 +:105A500090FD80E8182B82E08093E9008091E800B7 +:105A600080FF0DC050E040E060E270E0CE010196A2 +:105A70000E9456048091E8008E778093E8001F70A2 +:105A80001093E90085CC8A81823059F46B817C8146 +:105A90008D819E810E940B2F86E290E00E94862FCE +:105AA000CBCF8FEF8983C8CF4C816B818A810E94D5 +:105AB000B30E9827892798279E838D83BDCF8D802D +:105AC0009E809824892498248A810B81F8E00F9F76 +:105AD0008001112420E3829F000D111D11248C816F +:105AE00090E0880F991F080F191F692DC80187962C +:105AF0000E94862F682DC8018896D0CF0E941F0E65 +:105B00009BCF8A818138C1F060F4803809F094CF4E +:105B100020E04B816091900380918F030E943213AB +:105B20008BCF823859F1833809F086CF20E040913D +:105B300091036C818B81F2CF60E08B810E942B14EA +:105B40009B8180918E03911111C08E7F80938E0373 +:105B5000109284024FEF80E792E0415080409040E5 +:105B6000E1F700C000000E94D90F66CF81608093EA +:105B70008E0360E086950E942B145ECF8B8180930C +:105B800092035ACF8A81813899F030F4803809F035 +:105B900053CF8091910321CF823891F0833809F05F +:105BA0004BCF80918F038B83809190038C8344CF64 +:105BB00080918E0380FF02C086950FCF80E00DCFCD +:105BC000809192030ACF60918E0370918F03809130 +:105BD0009003909191030E9420132ECF80E18A833D +:105BE0002BCF81E08A8389EFF8CE0A811B811027B1 +:105BF00001271027FE0131963F018C80CF01880DCF +:105C0000911D4C01C801895F9D4F8614970409F4CA +:105C100013CF093FE1E01E0750F40E94722FF301F9 +:105C200084830F5F1F4FFFEF6F1A7F0AEBCFF301E3 +:105C30001482F7CF0A811B81102701271027CE017C +:105C400001963C018C80800E912E911CC801895FC9 +:105C50009D4F8016910609F4EFCE093FE1E01E0743 +:105C600020F4F30164810E94862FFFEF6F1A7F0AF0 +:105C70000F5F1F4FEBCF0E940F0EDECE8AE0AFCF3B +:105C80000A811B81102701271027CE0101963C01B4 +:105C90008C80FC01E80DF11D4F01C8018796861428 +:105CA000970409F4C9CE003EF1E01F0750F40E94AA +:105CB000722FF30184830F5F1F4FFFEF6F1A7F0A6C +:105CC000ECCFF3011482F7CF0A811B811027012743 +:105CD0001027CE0101963C018C80800E912E911CE4 +:105CE000C80187968016910609F4A6CE003EE1E031 +:105CF0001E0720F4F30164810E94862FFFEF6F1AC4 +:105D00007F0A0F5F1F4FECCF09BD19BD09B400FE1C +:105D1000FDCF8091D8008F7D8093D8008091E000E6 +:105D200082608093E0008091E00081FDFCCF0E94C2 +:105D3000291688CD86E290E00E94722F1B821C8279 +:105D40001D828E8379CE2D32314008F0A4CCDACC7E +:105D50002D32314008F053CC89CC87FB082E062623 +:105D600087FD819567FD61950E94432F0EF4919503 +:105D700007FC81950895AA1BBB1B51E107C0AA1F10 +:105D8000BB1FA617B70710F0A61BB70B881F991FDC +:105D90005A95A9F780959095BC01CD01089597FB80 +:105DA000072E16F4009407D077FD09D00E94BB2E71 +:105DB00007FC05D03EF4909581959F4F089570950E +:105DC00061957F4F0895A1E21A2EAA1BBB1BFD010E +:105DD0000DC0AA1FBB1FEE1FFF1FA217B307E407CA +:105DE000F50720F0A21BB30BE40BF50B661F771F22 +:105DF000881F991F1A9469F7609570958095909502 +:105E00009B01AC01BD01CF010895EE0FFF1F05906E +:105E1000F491E02D09946927962769277827872729 +:105E2000782708950E941A2F332312F48A1B9B0BA4 +:105E30000C942B2FA29FB001B39FC001A39F700DA4 +:105E4000811D1124911DB29F700D811D1124911D82 +:105E500008950E941A2FB7FF0895821B930B08958F +:105E60000E941A2FA59F900DB49F900DA49F800DA6 +:105E7000911D11240895B7FF0C94302F0E94302FEC +:105E8000821B930B0895991B79E004C0991F961704 +:105E900008F0961B881F7A95C9F780950895FB0135 +:105EA000DC0102C005900D9241505040D8F7089592 +:105EB000FC014150504030F001900616D1F7319767 +:105EC000CF010895882799270895FB01DC0104C0BC +:105ED0008D910190801921F441505040C8F7881BE2 +:105EE000990B0895F999FECF92BD81BDF89A992733 +:105EF00080B50895A6E1B0E044E050E00C94AC2FEA +:105F0000A8E1B0E042E050E00C94AC2F262FF999C4 +:105F1000FECF92BD81BDF89A019700B4021639F008 +:105F20001FBA20BD0FB6F894FA9AF99A0FBE0895D9 +:105F30000396272F0E94872F0E94862F252F0E94CD +:105F4000872F242F0C94872F0196272F0E94872FAD +:105F50000C94862FDC01CB01FC01F999FECF06C021 +:105F6000F2BDE1BDF89A319600B40D924150504017 +:105F7000B8F70895F894FFCF470F470F500F500F11 +:105F8000520F500F500F500F470F470F570F500F22 +:105F9000500F570F23174B179E174B179E177E173F +:105FA000B6179E17B318C0180D1D0D1D7C1D7C1D46 +:105FB000D71DF11D431D431DFC1D841E931E931E02 +:105FC000EB2CEF2C432D542D5F2D7E2D812DC22DDA +:105FD000E32D512D512DEE2DF12DF52D1A2E3B2EA9 +:065FE0003E2E402E642E4F +:105FE60090050F0CEE0BEA0BE60B01191A1B1C1D94 +:105FF6001E1F202122010201FC002A00000000F6DB +:10600600004C00000000F0005000000000EA0051C3 +:1060160000000000E4004F00000000DE0052000017 +:1060260000000101818283E200E900EA00B500B6C2 +:1060360000B700CD008301CC008A019201940121B2 +:1060460002230224022502260227022A02B300B4F2 +:10605600006F007000F03435366667F6F7939600E9 +:10606600FF0100010000FFFF0000010001FF00002A +:1060760001020202020606060909090909090F0FAB +:106086000F0F0F0F151515181919191919191919AF +:10609600191923244022B6DA01B8010201FB0614BD +:0460A60007340700B4 +:00000001FF From deab6aba6c7a49f8770fcbbbbef8ccadcdea1edf Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 11 Sep 2021 02:54:46 -0400 Subject: [PATCH 016/155] Cleanup files --- .../ps17/keymaps/via_fade/config.h | 22 - .../ps17/keymaps/via_fade/keymap - Copy.c | 447 ------------------ .../ps17/keymaps/via_fade/keymap.c | 428 ----------------- .../ps17/keymaps/via_fade/rules.mk | 1 - 4 files changed, 898 deletions(-) delete mode 100644 keyboards/solartempest/ps17/keymaps/via_fade/config.h delete mode 100644 keyboards/solartempest/ps17/keymaps/via_fade/keymap - Copy.c delete mode 100644 keyboards/solartempest/ps17/keymaps/via_fade/keymap.c delete mode 100644 keyboards/solartempest/ps17/keymaps/via_fade/rules.mk diff --git a/keyboards/solartempest/ps17/keymaps/via_fade/config.h b/keyboards/solartempest/ps17/keymaps/via_fade/config.h deleted file mode 100644 index 4bbacd9a507b..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via_fade/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once - -// Set 10 layers for VIA -#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/ps17/keymaps/via_fade/keymap - Copy.c b/keyboards/solartempest/ps17/keymaps/via_fade/keymap - Copy.c deleted file mode 100644 index 05687f34ca3b..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via_fade/keymap - Copy.c +++ /dev/null @@ -1,447 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include QMK_KEYBOARD_H -#include "PS17.h" -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - -static uint16_t last_rgb; //For RGB Fade effect -static uint8_t rgb_state[RGBLED_NUM]; -#define RGB_SUSTAIN 0.8 //default 0.7 -#define RGB_HIT 0x99 - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -bool spam_arrow; -uint16_t spam_timer = false; -uint16_t spam_interval = 1000; // (1000ms == 1s) -bool teams_muted; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = USER00, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. - TEAMSMUTE //MS Teams mute shortcut and simple LED status - }; -#else - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. - TEAMSMUTE //MS Teams mute shortcut and simple LED status - }; -#endif - -#ifdef COMBO_ENABLE //Tap combos - enum combos { - kppls_7, //Hold plus and 7 to backspace - kppls_8, //Hold plus and 8 to delete - kpent_4, //Hold enter and 4 for left arrow - kpent_5, //Hold enter and 5 for down arrow - kpent_6, //Hold enter and 6 for right arrow - kpent_8, //Hold enter and 4'8 for up arrow - }; - const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; - const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; - const uint16_t PROGMEM kpent4_combo[] = {KC_PENT, KC_KP_4, COMBO_END}; - const uint16_t PROGMEM kpent5_combo[] = {KC_PENT, KC_KP_5, COMBO_END}; - const uint16_t PROGMEM kpent6_combo[] = {KC_PENT, KC_KP_6, COMBO_END}; - const uint16_t PROGMEM kpent8_combo[] = {KC_PENT, KC_KP_8, COMBO_END}; - combo_t key_combos[COMBO_COUNT] = { - [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), - [kppls_8] = COMBO(kppl8_combo, KC_DELETE), - [kpent_4] = COMBO(kpent4_combo, KC_LEFT), - [kpent_5] = COMBO(kpent5_combo, KC_DOWN), - [kpent_6] = COMBO(kpent6_combo, KC_RGHT), - [kpent_8] = COMBO(kpent8_combo, KC_UP) - }; -#endif - -#ifdef TAP_DANCE_ENABLE// Tap Dance definitions. Not VIA compatible. - enum { - TD_MINUS_NUMLOCK, - }; - qk_tap_dance_action_t tap_dance_actions[] = { - // Tap once for Escape, twice for Caps Lock - [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), - }; - //TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode (non-VIA only) -#endif - - -enum layer_names { - _LAYER0, - _LAYER1, - _LAYER2, - _LAYER3, - _LAYER4, - _LAYER5, - _LAYER6, - _LAYER7, - _LAYER8, - _LAYER9 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAYER0] = LAYOUT( - KC_PGDOWN, KC__MUTE, KC_PGUP, - MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, - KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, - KC_KP_4, KC_KP_5, KC_KP_6, - KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, - KC_KP_0, KC_KP_DOT - ), - [_LAYER1] = LAYOUT( - KC_RIGHT, KC_TRNS, KC_LEFT, - KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, - TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, RESET, - RESET, KC_TRNS - ), - [_LAYER2] = LAYOUT( - KC_RBRACKET, KC_TRNS, KC_LBRACKET, - TO(0), KC_B, KC_T, C(S(KC_N)), - KC_J, KC_S, KC_D, C(KC_MINS), - C(KC_C), C(KC_V), KC_M, - C(KC_N), C(S(KC_Z)), KC_LSHIFT, C(KC_PPLS), - KC_SPACE, KC_LALT - ), - [_LAYER3] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), - C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, - KC_PGDOWN, KC_PGUP - ), - [_LAYER4] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_RIGHT, - C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_NUMLOCK, - KC_F13, KC_F14 - ), - [_LAYER5] = LAYOUT( - 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 - ), - [_LAYER6] = LAYOUT( - 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 - ), - [_LAYER7] = LAYOUT( - 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 - ), - [_LAYER8] = LAYOUT( - 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 - ), - [_LAYER9] = LAYOUT( - 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 - ) -}; - - -void matrix_init_user(void) { //run when matrix is initiated, before all features init - //For RGB fade effect - last_rgb = timer_read(); - rgblight_setrgb(0, 0, 0); - for (int i = 0; i < RGBLED_NUM; i++) { - rgb_state[i] = 0; - } - //End RGB fade effect -}; - - -void matrix_scan_user(void) { //run whenever user matrix is scanned - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } - if (spam_arrow && timer_elapsed(spam_timer) >= spam_interval) { - spam_timer = timer_read(); - //tap_code(KC_UP); - //tap_code(KC_DOWN); - tap_code(KC_F24); - } - - #ifdef RGBLIGHT_ENABLE - // Animate the ripple effect at 50Hz (20ms interval): - if (timer_elapsed(last_rgb) > 20) { - last_rgb = timer_read(); - - uint8_t next_rgb_state[RGBLED_NUM]; - for (int i = 0; i < RGBLED_NUM; i++) { - // Retain some: - next_rgb_state[i] = rgb_state[i] * RGB_SUSTAIN; - } - // Assign the new state: - for (int i = 0; i < RGBLED_NUM; i++) { - rgb_state[i] = next_rgb_state[i]; - led[i].b = rgb_state[i]; - } - rgblight_set(); - } - #endif //RGBLIGHT_ENABLE - -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { -/* #ifdef RGBLIGHT_ENABLE //For RGB fade - if (record->event.pressed) { - // Bump the level of the LED that corresponds to this key. - keypos_t key = record->event.key; - - int i = 0; - i=26; - rgb_state[i] = RGB_HIT; - } - #endif*/ - - - switch (keycode) { //For keycode overrides - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - return true; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - return true; - - case NMR: //Move window to next monitor on right - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_RIGHT); - unregister_code(KC_RIGHT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - case NML: //Move window to next monitor on left - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_LEFT); - unregister_code(KC_LEFT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - - case SPAMARROW: // Moves arrow up and down - if (record->event.pressed) { - spam_arrow ^= 1; - spam_timer = timer_read(); - if(spam_arrow==1) { //Change LED colour on bottom row and underglow to orange to indicate on - rgblight_sethsv_at(15,255,120,24); - rgblight_sethsv_at(15,255,120,25); - rgblight_sethsv_at(15,255,120,26); - rgblight_sethsv_at(15,255,120,27); - } - else { - rgblight_sethsv_at(180,255,120,24); //Set LEDs back to purple, assuming on that coloured layer - rgblight_sethsv_at(180,255,120,25); - rgblight_sethsv_at(180,255,120,26); - rgblight_sethsv_at(180,255,120,27); - } - } - return false; - - case TEAMSMUTE: //Mute MS teams and simply change LED for key 1 colour - if (record->event.pressed) { - register_code(KC_LCTRL); - register_code(KC_LSFT); - register_code(KC_M); - unregister_code(KC_M); - unregister_code(KC_LSFT); - unregister_code(KC_LCTRL); - teams_muted ^= 1; - if(teams_muted==1) { //Change LED colour on LEDs for key 1 and underglow to orange to indicate muted - rgblight_sethsv_at(15,255,120,18); - rgblight_sethsv_at(15,255,120,22); - } - else { - rgblight_sethsv_at(175,255,120,18); //Set LEDs back to violet, assuming on that coloured layer - rgblight_sethsv_at(175,255,120,22); - } - } - return true; - } - return true; -} - - -// RGB Layer Light Settings - Note that this will fix the key switch LED colour and brightness -const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Spring green (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 5,255,120}); //Yellow-orange (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); //Cyan (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); //Magenta (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 15,255,120}); //Orange-red (Code is extra for static key lighting of layers) -const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers - my_layer0_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_layer4_layer -); - - -void keyboard_post_init_user(void) { //run as last task in keyboard init - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_layers = my_rgb_layers;// Enable the LED layers - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 - layer_move(0); //start on layer 0 to get the lighting activated - #endif -}; - - -#ifdef RGBLIGHT_ENABLE -layer_state_t layer_state_set_user(layer_state_t state) { - rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active - rgblight_set_layer_state(1, layer_state_cmp(state, 1)); - rgblight_set_layer_state(2, layer_state_cmp(state, 2)); - rgblight_set_layer_state(3, layer_state_cmp(state, 3)); - rgblight_set_layer_state(4, layer_state_cmp(state, 4)); - - // This is what the LED layout is. - // 1, 0, - // 3, 2, - // 9, 8, 7, 6, 5, 4, - // 13, 12, 11, 10, - // 18, 17, 16, 15, 14, - // 22, 21, 20, 19, - // 27, 26, 25, 24, 23 - - switch(biton32(state)){ // Change all other LEDs based on layer state as well - case 0: - rgblight_sethsv_noeeprom(50,255,100); - break; - case 1: - rgblight_sethsv_noeeprom(5,255,100); - break; - case 2: - break; - case 3: - rgblight_sethsv_noeeprom(215,255,100); - break; - case 4: - rgblight_sethsv_noeeprom(15,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - } - return state; - }; -#endif - - -bool encoder_update_user(uint8_t index, bool clockwise) { // QMK encoder functionality - #ifdef VIA_ENABLE //Add in VIA setting of rotary encoder keymap - if (index == 0) { // First encoder - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) }); //Time is 1 tick otherwise empty event - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) }); - - rgb_state[24] = RGB_HIT; - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) }); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) }); - - rgb_state[26] = RGB_HIT; - } - } - /*if (clockwise) { //This code only works for single keypresses with the rotary encoder - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 0)); //Allow setting of keymap in VIA - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 2)); //Allow setting of keymap in VIA - }*/ - #endif - return true; -} \ No newline at end of file diff --git a/keyboards/solartempest/ps17/keymaps/via_fade/keymap.c b/keyboards/solartempest/ps17/keymaps/via_fade/keymap.c deleted file mode 100644 index 94e4d9be467c..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via_fade/keymap.c +++ /dev/null @@ -1,428 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include QMK_KEYBOARD_H -#include "PS17.h" -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - - -bool is_encoder_rotate = false; // For encoder animated LEDs -bool encoder_effect = false; -uint16_t encoder_timer = 0; -uint16_t encoder_interval = 500; - - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -bool spam_arrow; -uint16_t spam_timer = false; -uint16_t spam_interval = 1000; // (1000ms == 1s) -bool teams_muted; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = USER00, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. - TEAMSMUTE //MS Teams mute shortcut and simple LED status - }; -#else - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. - TEAMSMUTE //MS Teams mute shortcut and simple LED status - }; -#endif - -#ifdef COMBO_ENABLE //Tap combos - enum combos { - kppls_7, //Hold plus and 7 to backspace - kppls_8, //Hold plus and 8 to delete - kpent_4, //Hold enter and 4 for left arrow - kpent_5, //Hold enter and 5 for down arrow - kpent_6, //Hold enter and 6 for right arrow - kpent_8, //Hold enter and 4'8 for up arrow - }; - const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; - const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; - const uint16_t PROGMEM kpent4_combo[] = {KC_PENT, KC_KP_4, COMBO_END}; - const uint16_t PROGMEM kpent5_combo[] = {KC_PENT, KC_KP_5, COMBO_END}; - const uint16_t PROGMEM kpent6_combo[] = {KC_PENT, KC_KP_6, COMBO_END}; - const uint16_t PROGMEM kpent8_combo[] = {KC_PENT, KC_KP_8, COMBO_END}; - combo_t key_combos[COMBO_COUNT] = { - [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), - [kppls_8] = COMBO(kppl8_combo, KC_DELETE), - [kpent_4] = COMBO(kpent4_combo, KC_LEFT), - [kpent_5] = COMBO(kpent5_combo, KC_DOWN), - [kpent_6] = COMBO(kpent6_combo, KC_RGHT), - [kpent_8] = COMBO(kpent8_combo, KC_UP) - }; -#endif - -#ifdef TAP_DANCE_ENABLE// Tap Dance definitions. Not VIA compatible. - enum { - TD_MINUS_NUMLOCK, - }; - qk_tap_dance_action_t tap_dance_actions[] = { - // Tap once for Escape, twice for Caps Lock - [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), - }; - //TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode (non-VIA only) -#endif - - -enum layer_names { - _LAYER0, - _LAYER1, - _LAYER2, - _LAYER3, - _LAYER4, - _LAYER5, - _LAYER6, - _LAYER7, - _LAYER8, - _LAYER9 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAYER0] = LAYOUT( - KC_PGDOWN, KC__MUTE, KC_PGUP, - MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, - KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, - KC_KP_4, KC_KP_5, KC_KP_6, - KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, - KC_KP_0, KC_KP_DOT - ), - [_LAYER1] = LAYOUT( - KC_RIGHT, KC_TRNS, KC_LEFT, - KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, - TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, RESET, - RESET, KC_TRNS - ), - [_LAYER2] = LAYOUT( - KC_RBRACKET, KC_TRNS, KC_LBRACKET, - TO(0), KC_B, KC_T, C(S(KC_N)), - KC_J, KC_S, KC_D, C(KC_MINS), - C(KC_C), C(KC_V), KC_M, - C(KC_N), C(S(KC_Z)), KC_LSHIFT, C(KC_PPLS), - KC_SPACE, KC_LALT - ), - [_LAYER3] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), - C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, - KC_PGDOWN, KC_PGUP - ), - [_LAYER4] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_RIGHT, - C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_NUMLOCK, - KC_F13, KC_F14 - ), - [_LAYER5] = LAYOUT( - 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 - ), - [_LAYER6] = LAYOUT( - 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 - ), - [_LAYER7] = LAYOUT( - 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 - ), - [_LAYER8] = LAYOUT( - 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 - ), - [_LAYER9] = LAYOUT( - 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 - ) -}; - - -void matrix_init_user(void) { //run when matrix is initiated, before all features init -}; - - -void matrix_scan_user(void) { //run whenever user matrix is scanned - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } - if (spam_arrow && timer_elapsed(spam_timer) >= spam_interval) { - spam_timer = timer_read(); - tap_code(KC_F24); - //tap_code(KC_UP); - //tap_code(KC_DOWN); - } - - #ifdef RGBLIGHT_ENABLE - if (!encoder_effect && is_encoder_rotate) { //Turn on the effect - rgblight_set_effect_range(5, 4); - rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); - is_encoder_rotate = false; - encoder_effect = true; - } else if (!is_encoder_rotate && timer_elapsed(encoder_timer) > encoder_interval) { //Turn off the effect - rgblight_set_effect_range(0, 27); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); - is_encoder_rotate = false; - encoder_effect = false; - } else { - is_encoder_rotate = false; //Wait until encoder is turned again - } - #endif -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { //For keycode overrides - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - return true; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - return true; - - case NMR: //Move window to next monitor on right - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_RIGHT); - unregister_code(KC_RIGHT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - case NML: //Move window to next monitor on left - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_LEFT); - unregister_code(KC_LEFT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - - case SPAMARROW: // Moves arrow up and down - if (record->event.pressed) { - spam_arrow ^= 1; - spam_timer = timer_read(); - if(spam_arrow==1) { //Change LED colour on bottom row and underglow to orange to indicate on - rgblight_sethsv_at(15,255,120,24); - rgblight_sethsv_at(15,255,120,25); - rgblight_sethsv_at(15,255,120,26); - rgblight_sethsv_at(15,255,120,27); - } - else { - rgblight_sethsv_at(180,255,120,24); //Set LEDs back to purple, assuming on that coloured layer - rgblight_sethsv_at(180,255,120,25); - rgblight_sethsv_at(180,255,120,26); - rgblight_sethsv_at(180,255,120,27); - } - } - return false; - - case TEAMSMUTE: //Mute MS teams and simply change LED for key 1 colour - if (record->event.pressed) { - register_code(KC_LCTRL); - register_code(KC_LSFT); - register_code(KC_M); - unregister_code(KC_M); - unregister_code(KC_LSFT); - unregister_code(KC_LCTRL); - teams_muted ^= 1; - if(teams_muted==1) { //Change LED colour on LEDs for key 1 and underglow to orange to indicate muted - rgblight_sethsv_at(15,255,120,18); - rgblight_sethsv_at(15,255,120,22); - } - else { - rgblight_sethsv_at(175,255,120,18); //Set LEDs back to violet, assuming on that coloured layer - rgblight_sethsv_at(175,255,120,22); - } - } - return true; - } - return true; -} - - -// RGB Layer Light Settings - Note that this will fix the key switch LED colour and brightness -const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Spring green (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 5,255,120}); //Yellow-orange (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); //Cyan (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); //Magenta (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 15,255,120}); //Orange-red (Code is extra for static key lighting of layers) -const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers - my_layer0_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_layer4_layer -); - - -void keyboard_post_init_user(void) { //run as last task in keyboard init - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_layers = my_rgb_layers;// Enable the LED layers - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 - layer_move(0); //start on layer 0 to get the lighting activated - #endif -}; - - -#ifdef RGBLIGHT_ENABLE -layer_state_t layer_state_set_user(layer_state_t state) { - rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active - rgblight_set_layer_state(1, layer_state_cmp(state, 1)); - rgblight_set_layer_state(2, layer_state_cmp(state, 2)); - rgblight_set_layer_state(3, layer_state_cmp(state, 3)); - rgblight_set_layer_state(4, layer_state_cmp(state, 4)); - - // This is what the LED layout is. - // 1, 0, - // 3, 2, - // 9, 8, 7, 6, 5, 4, - // 13, 12, 11, 10, - // 18, 17, 16, 15, 14, - // 22, 21, 20, 19, - // 27, 26, 25, 24, 23 - - switch(biton32(state)){ // Change all other LEDs based on layer state as well - case 0: - rgblight_sethsv_noeeprom(50,255,100); - break; - case 1: - rgblight_sethsv_noeeprom(5,255,100); - break; - case 2: - break; - case 3: - rgblight_sethsv_noeeprom(215,255,100); - break; - case 4: - rgblight_sethsv_noeeprom(15,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - } - return state; - }; -#endif - - -bool encoder_update_user(uint8_t index, bool clockwise) { // QMK encoder functionality - #ifdef VIA_ENABLE //Add in VIA setting of rotary encoder keymap - if (index == 0) { // First encoder - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) }); //Time is 1 tick otherwise empty event - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) }); - - is_encoder_rotate = true; - encoder_timer = timer_read(); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) }); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) }); - - is_encoder_rotate = true; - encoder_timer = timer_read(); - } - } - /*if (clockwise) { //This code only works for single keypresses with the rotary encoder - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 0)); //Allow setting of keymap in VIA - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 2)); //Allow setting of keymap in VIA - }*/ - #endif - return true; -} \ No newline at end of file diff --git a/keyboards/solartempest/ps17/keymaps/via_fade/rules.mk b/keyboards/solartempest/ps17/keymaps/via_fade/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via_fade/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes From bdf3e21dc71ec0c800886dfe8d5577af9ce2a22d Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 11 Sep 2021 02:58:03 -0400 Subject: [PATCH 017/155] Changed debounce to 6. --- keyboards/solartempest/sofle/config.h | 2 +- .../sofle/solartempest_sofle_via.hex | 2360 ++++++++--------- 2 files changed, 1181 insertions(+), 1181 deletions(-) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index f0292a3d05e5..f1875bf6a79f 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -43,7 +43,7 @@ #define MATRIX_COL_PINS_RIGHT { F6, F7, B1, B3, B2, B6, C7 } //C7 is unused on the MCU. It is needed for the encoder key matrix in via. #define DIODE_DIRECTION COL2ROW -#define DEBOUNCE 5 +#define DEBOUNCE 6 //Default is 5 // Encoder support #define ENCODERS_PAD_A { F5 } diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index 307e1764f1c8..4d6ed674c042 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,9 +1,9 @@ -:100000000C94DE060C9425070C9425070C94FF2F06 +:100000000C94DE060C9425070C9425070C94003004 :100010000C9425070C9425070C9425070C942507B0 -:100020000C9425070C9425070C94EA190C94A61936 -:100030000C9452260C9425070C9425070C94250744 +:100020000C9425070C9425070C94EB190C94A71934 +:100030000C9453260C9425070C9425070C94250743 :100040000C9425070C9425070C9425070C94250780 -:100050000C9425070C94C11A0C9425070C942507C1 +:100050000C9425070C94C21A0C9425070C942507C0 :100060000C9425070C9425070C9425070C94250760 :100070000C9425070C9425070C9425070C94250750 :100080000C9425070C9425070C9425070C94250740 @@ -224,9 +224,9 @@ :100DF0001092690610926A0614BE84B7877F84BF7A :100E00000FB6F894A8958091600088618093600087 :100E1000109260000FBEE0E0F8E3099512E0A0E058 -:100E2000B1E0E6EAFEE602C005900D92A833B107F4 +:100E2000B1E0E8EAFEE602C005900D92A833B107F2 :100E3000D9F726E0A8E3B2E001C01D92A736B207B9 -:100E4000E1F70E9479260C941A370C940000CF9396 +:100E4000E1F70E947A260C941B370C940000CF9394 :100E5000DF934091650650916606455654409A01CD :100E6000205A3F4F21303240C0F020E032E0241BB6 :100E7000350B6091630470916404FC01CA01240F76 @@ -307,7 +307,7 @@ :10132000DF91CF911F910F91FF90EF90DF90BF90D1 :10133000AF900895E62EF12C4491D42EE42FF0E0E6 :1013400026E0829FC00111242FEF30E0B9010E94F6 -:101350007931802F90E0880F991F55E5569FD00175 +:101350007A31802F90E0880F991F55E5569FD00174 :10136000579FB00D11248A1B9B0B982F990F890F43 :101370005901AE18BF08AE9ED001AF9EB00DBE9E03 :10138000B00D11245B2F189F80011124012F11270C @@ -421,10 +421,10 @@ :101A400092959F7011F0892F94E0282F2695269566 :101A500011F09E5F822F869509F09F5F892F089570 :101A6000CF92DF92EF92FF920F931F93CF93DF936A -:101A70006C017B0164E670E088E70E94562EEC0161 +:101A70006C017B0164E670E088E70E94572EEC0160 :101A800097FD12C010E000E0F601E00FF11F849115 -:101A900064E670E00E94D02EEC01892B29F40F5FE0 -:101AA0001F4F0E151F0581F70E94532FCE01DF91A6 +:101A900064E670E00E94D12EEC01892B29F40F5FDF +:101AA0001F4F0E151F0581F70E94542FCE01DF91A5 :101AB000CF911F910F91FF90EF90DF90CF900895FD :101AC0008091350490913604911103C091E08927EB :101AD0000895882369F062E070E087E19DE00E944C @@ -486,7 +486,7 @@ :101E50008091480393010C2C01C0220F0A94EAF7E9 :101E6000822309F43FC0F601EE0FFF1FE80DF91DB4 :101E7000E590F490E114F10409F477CF45E050E0E7 -:101E8000B701CE0101960E94323209810F3F51F114 +:101E8000B701CE0101960E94333209810F3F51F113 :101E90008A81800F9927991F8B34910514F08AE469 :101EA00090E05C01AA0CBB1C8A0D9B1DDC01A45BAD :101EB000BC4F5D01049D80011124045B1C4F0A1579 @@ -505,7 +505,7 @@ :101F80009B07B9F780915604833009F471C0B8F407 :101F9000813009F448C0823009F4B4C08091E8006F :101FA00083FF3CC180915504909156049A3008F00B -:101FB00035C1E92FF0E0E45EF84C0C94CC318A3066 +:101FB00035C1E92FF0E0E35EF84C0C94CD318A3066 :101FC00009F48FC08B3009F470C0893039F78091E3 :101FD0005504813219F78091590490915A04009761 :101FE00011F00297D9F68091E800877F8093E8008E @@ -590,22 +590,22 @@ :1024D00080E0809352041092E9008091E800877FA9 :1024E0008093E8000E94E40799CE1F93CF93DF9377 :1024F000162FC0916506D09166068A30D1F42091DE -:102500002A04CE0185569440622F70E00E947931F2 -:10251000281B822F66E00E948D31C82FC15020F405 +:102500002A04CE0185569440622F70E00E947A31F1 +:10251000281B822F66E00E948E31C82FC15020F404 :10252000DF91CF911F91089560E080E20E947512C3 :10253000F5CF8D30E9F4C556D44020912A04622F9E -:1025400070E0CE010E947931281B822F9E01280F56 +:1025400070E0CE010E947A31281B822F9E01280F55 :10255000311D2115324018F080E0D0E0C0E0C80FF6 :10256000D11DCB59DB4FD0936606C0936506D8CFFB :1025700096E0FE01ABE2B4E001900D929A95E1F78E :10258000803E90F186E0FE0111928A95E9F7C091B4 :102590006506D0916606111133C046E050E0BE01D9 -:1025A0008BE294E00E943B329E0125563440892BF9 +:1025A0008BE294E00E943C329E0125563440892BF8 :1025B00091F52A5F3F4F40912A04642F70E0C901D2 -:1025C0000E947931481B463010F4240F311D21152B +:1025C0000E947A31481B463010F4240F311D21152A :1025D00072E0370710F030E020E02B593B4F30938A :1025E0006606209365069CCFF6E08F9FB00111240C -:1025F0006B52784F46E050E0CE010E943232C7CF96 +:1025F0006B52784F46E050E0CE010E943332C7CF95 :102600009E012A5F3F4FFE012E173F0731F2808166 :1026100080958193F9CFC90145E0969587954A95B4 :10262000E1F741E050E0BA0102C0660F771F8A95DA @@ -616,1177 +616,1177 @@ :10267000DF93EC01F62EFC0101900020E9F78F01B9 :1026800001501109C017D10730F0DF91CF911F9190 :102690000F91FF9008956F2D89910E947512F2CFCE -:1026A000CF93DF93C7E5D2E060E0CE010E94F7341C +:1026A000CF93DF93C7E5D2E060E0CE010E94F8341B :1026B0002196C11584E0D807B9F7DF91CF9108952D :1026C0006F927F928F929F92AF92BF92CF92DF9242 :1026D000EF92FF920F931F93CF93DF9385EDC82E58 :1026E00087E0D82E91ECE92EF12CE701CC58D109E6 :1026F00036011BC0F50185909490692DC8010E9498 -:10270000F734682DC80101960E94F73482E0A80EC4 +:10270000F834682DC80101960E94F83482E0A80EC2 :10271000B11C0E5F1F4FC017D10761F78EE0680E26 :10272000711C2E96CE15DF0529F08E010E50110971 :102730005301E0CF7E018CE8E80EF11C8CE8C80E56 :10274000D11C81EFE81682E0F80679F6DF91CF918F :102750001F910F91FF90EF90DF90CF90BF90AF90BF :102760009F908F907F906F900895CF93C82F6FEFB9 -:10277000811161E283E290E00E94F7346FEFC111B2 -:1027800068E084E290E00E94F7346FEFC11160E3EB -:1027900085E290E0CF910C94F73480E00E94B5136D -:1027A00060E086E290E00E94F7340E9460130E948D -:1027B000501381E00C94B5130F931F93CF93DF93C5 -:1027C000C42FD0E0CC0FDD1F2EE0629FC00DD11DC5 -:1027D00011243CE8839FC00DD11D1124CE018796A2 -:1027E0000E94E334082F10E0102F0027CE018896B6 -:1027F0000E94E3349801282BC901DF91CF911F91EA -:102800000F910895462F843038F47A3028F46730D9 -:1028100018F4672F0C94DC1390E080E00895CF92B9 -:10282000DF92FF920F931F93CF93DF936C01009180 -:102830005D0480919C02082BC7E0D0E010E0FC2EE4 -:10284000C8010C2E02C0959587950A94E2F780FD89 -:102850000CC02197A0F7F12C8F2DDF91CF911F9104 -:102860000F91FF90DF90CF900895B6018C2F0E94BA -:1028700002140E946C0A019761F3EECFCF93DF93AD -:10288000EC010E940F14BE010E940214DF91CF914F -:102890000C946C0AFC01808191810E943E14292FC6 -:1028A0002F7092959F7092509E3078F4E92FF0E04F -:1028B000EA5DF84C0C94CC31803F19F020F4883E4E -:1028C00020F481E00895843FE1F380E00895883E9C -:1028D000C0F3813FD1F7F5CF822F869586958695F7 -:1028E000089583E290E00E94E334813289F484E227 -:1028F00090E00E94E334883059F485E290E00E9431 -:10290000E33491E0803309F090E0892F81700895DD -:1029100080E0FCCFCF92DF92EF92FF926B017C01BF -:102920000E946209B701A60188E090E0FF90EF9055 -:10293000DF90CF900C940935AF92BF92CF92DF9287 -:10294000EF92FF920F931F93CF93DF9300D00F92DC -:10295000CDB7DEB7082FF62E142FE22E80915E043D -:1029600080FF4FC0E82FE695AE2FB0E0A45EBD4FCC -:102970009C91909345038E7F823009F056C0413A76 -:1029800008F040EA9E012F5F3F4F6F2D802F0E947D -:10299000780980915E0480FF11C02B8139814A81C2 -:1029A000809178019091790153E0859FF001112485 -:1029B000E45BFC4F891798F10E948E0E80915F04B2 -:1029C000801308C0809160048F1104C0809161045D -:1029D000811729F080914703826080934703009319 -:1029E0005F04F092600410936104EE2051F0609156 -:1029F0005E0470915F0480916004909161040E9474 -:102A00008A140F900F900F90DF91CF911F910F912B -:102A1000FF90EF90DF90CF90BF90AF9008954183EB -:102A2000308322838F5F3396C5CF923039F6E250E0 -:102A30008E2F8170D82EE695F0E0EA57F84FA590DA -:102A4000B490C12CBB2460917A01C61608F0B4CFB3 -:102A50002C2D30E0A29EC001A39E900DB29E900D41 -:102A6000112470E00E947931802FD11016C0860F9A -:102A700040917801420F532F511D9A01220F331FAD -:102A8000240F351F245B3C4F412F113A08F040EAD8 -:102A90006F2D0E947809C394D6CF861BE9CFEEE54F -:102AA000F4E0438121E1421B08F440E021E062812F -:102AB00081810C949C14EEE5F4E0438121E1420F06 -:102AC00008F44FEF21E0628181810C949C14EEE5C3 -:102AD000F4E0628121E1621B08F460E021E04381BF -:102AE00081810C949C14EEE5F4E0628121E1620F97 -:102AF00008F46FEF21E0438181810C949C14EEE592 -:102B0000F4E0818121E04381628188500C949C141F -:102B1000EEE5F4E0818121E043816281885F0C94DD -:102B20009C1480916204882319F081508093620480 -:102B300060915E0470915F048091600490916104E3 -:102B40000C948A1480916204833018F48F5F809310 -:102B5000620460915E0470915F04809160049091C2 -:102B600061040C948A1490915E0490FF27C09170C8 -:102B700081111DC0926090935E0480914703816033 -:102B800080934703662351F060915E0470915F0467 -:102B900080916004909161040E948A1420E0409129 -:102BA00061046091600480915F040C949C148C30EB -:102BB00010F09661E0CF880F982BDDCF089521E0CB -:102BC00030E0A90102C0440F551F8A95E2F7CA01FF -:102BD000209148036623C1F0822B809348038091A3 -:102BE000470380618093470380914603811106C0AB -:102BF00080915E0460E086950E94B31580915E042A -:102C000080FD05C00C948E0E80958223E6CF08953A -:102C1000CF93DF93C82FC17082FBDD27D0F981FBF2 -:102C2000662760F984E00E94DF1561E06C2785E08B -:102C30000E94DF156D2F86E0DF91CF910C94DF1598 -:102C40000F931F93CF93C82F61E08111682F61709C -:102C500080E00E94DF15C1FB662760F9C11101C049 -:102C600060E081E00E94DF15C2FB662760F9C111B8 -:102C700001C060E082E00E94DF15C3FB662760F9B7 -:102C8000C11101C060E083E00E94DF154C2F50E0CD -:102C900070E060E0DB01CA01F4E0B695A795979576 -:102CA0008795FA95D1F70097A105B10551F1AC01CF -:102CB000BD0184E08A019B01E2E0369527951795D6 -:102CC0000795EA95D1F7011511052105310519F090 -:102CD0008E5FB901A8017695679557954795452B65 -:102CE000462B472B09F08F5F8130A1F0882359F0E4 -:102CF0008230A9F08330C1F08C2FCF911F910F91BA -:102D0000089580E0D7CF20E040E56FEF82E30E9496 -:102D10009C14F2CF20E040E56FEF8CEFF8CF20E07D -:102D200040E56FEF86E7F3CF20E040E56FEF8AEDF7 -:102D3000EECF0E94201680935D040C944B0C809182 -:102D40005D04982F9670963019F488600C9499164B -:102D5000877FFCCF21E030E001C0220F8A95EAF79F -:102D6000209580915D0482230C94991621E030E037 -:102D700001C0220F8A95EAF780915D04822B0C94A2 -:102D8000991680915E048695815009F48BE061E08C -:102D90000C94B31580915E0486958F5F8C3008F09B -:102DA00081E061E00C94B31580915E0480FF07C060 -:102DB000869582588F77893010F40C94CA1661E09A -:102DC00082E00C94B315EEE5F4E083E08083118299 -:102DD0008FEF828380EA83831482A5E4B3E01296A6 -:102DE0008C911297836012968C936081718182819D -:102DF00093810C948A1469EE7EEF90E080E00E944B -:102E0000153560E082E090E00E94F73460E083E0F6 -:102E100090E00E94F73410929C0260E084E090E021 -:102E20000E94F73460E082E290E00E94F73460E0B4 -:102E300085E090E00E94F73460E086E090E00E9438 -:102E4000F7346FEF87E090E00E94F73440E050E005 -:102E5000BA0188E090E00E94093560E08DE090E0E2 -:102E60000E94F73440E050E0BA0188E190E00E940F -:102E7000093560E087E190E00E94F73440E050E0DF -:102E8000BA018CE190E00E94093570E060E080E2D8 -:102E900090E00E94153540E050E0BA0188E190E0F2 -:102EA0000E94093580E00E94B5130E94CD1340E0D6 -:102EB00050E0BA018FE090E00E94093540E050E018 -:102EC000BA0183E190E00C9409350F931F93CF93DF -:102ED000DF9300D000D0CDB7DEB74091D002509143 -:102EE000D1026091D2027091D3022FB7F8948091F1 -:102EF0003E0490913F04A0914004B09141042FBF43 -:102F0000841B950BA60BB70B84369105A105B10563 -:102F100088F10E94460E882379F10E94F8086E5FBE -:102F20007F4F8F4F9F4F69837A838B839C838091E0 -:102F30002B0190912C0187549D4F40912A0150E024 -:102F40004530510510F044E050E0BE016F5F7F4F07 -:102F50000E94483284E090E00E94C530892BD9F469 -:102F60000E94F8086093D0027093D1028093D2023D -:102F70009093D30281E010C00E94F8080091E10212 -:102F80001091E2022091E3023091E402600F711F80 -:102F9000821F931FC4CF80E00F900F900F900F906F -:102FA000DF91CF911F910F9108958F929F92AF92D1 -:102FB000BF92CF92DF92EF92FF920F931F93CF9326 -:102FC000DF93EB0188809980AA80BB809FB7F8943B -:102FD000C0903E04D0903F04E0904004F090410443 -:102FE0009FBFC818D908EA08FB0894E6C916D1049F -:102FF000E104F10410F4442311F1E82E082E000C32 -:10300000FF089AE08902F0011124E050FF4F83810C -:10301000948187549D4F428150E00417150708F4AE -:10302000A801B9010E944832C7010E94C530892B0E -:10303000A1F40E94F808688379838A839B8381E0E6 -:10304000DF91CF911F910F91FF90EF90DF90CF9084 -:10305000BF90AF909F908F90089580E0F1CF0F9335 -:103060001F93CF93DF930F92CDB7DEB780913504D6 -:1030700089832091CF0290E041E02817190609F4D6 -:1030800040E001E010E09E012F5F3F4F6CED72E0E9 -:1030900087E00E94D5170F90DF91CF911F910F917C -:1030A00008950F931F93CF93DF930F92CDB7DEB7A1 -:1030B0008091FB02898341E09091CE02981301C078 -:1030C00040E001E010E09E012F5F3F4F68ED72E0AD -:1030D00086E00E94D5170F90DF91CF911F910F913D -:1030E00008950F931F93CF93DF93CDB7DEB7299742 -:1030F0000FB6F894DEBF0FBECDBF85E0EEE5F4E07D -:10310000DE01119601900D928A95E1F780914503B9 -:1031100090914603A0914703B09148038E839F830B -:10312000A887B98741E08885811101C040E009E0A6 -:1031300010E09E012F5F3F4F64ED72E085E00E943A -:10314000D51781111092470329960FB6F894DEBF68 -:103150000FBECDBFDF91CF911F910F9108956F9258 -:103160007F928F929F92AF92BF92CF92DF92EF9217 -:10317000FF920F931F93CF93DF930F92CDB7DEB7DC -:10318000862E5A016901682E880F7708C3010E94B4 -:10319000C530892B09F088C08AE0869DF001879DA3 -:1031A000F00D1124E050FF4F458150E041155105CD -:1031B00011F041E050E08AE0869DF001879DF00D1E -:1031C0001124E050FF4F6681778167547D4FCE0117 -:1031D00001960E944832F5014081518162817381DC -:1031E0002FB7F89480913E0490913F04A091400441 -:1031F000B09141042FBF841B950BA60BB70B8436EF -:103200009105A105B10540F4B701C8010E94470925 -:103210009981891709F44FC0082C000C9908C40142 -:103220000E94C530892B91F0B12C8B2D0F90DF912E -:10323000CF911F910F91FF90EF90DF90CF90BF90B3 -:10324000AF909F908F907F906F9008958AE0889DB7 -:10325000F001899DF00D1124E050FF4F458150E0B1 -:10326000E416F50608F4A7018AE0889DF001899D1F -:10327000F00D1124E050FF4F6681778167547D4F38 -:10328000C6010E944832B701C8010E9447099981CE -:103290008913CACF0E94F808F50160837183828385 -:1032A0009383BB24B394C1CFB12CA701B801C6014D -:1032B0000E944832BACFBB24B394F7CFCF92DF92AB -:1032C000EF92FF920F931F93CF93DF9300D000D024 -:1032D0000F92CDB7DEB76B0185E0E82EF12C0AEB3B -:1032E00012E09E012F5F3F4F41EB52E061E080E032 -:1032F0000E94AF18882349F095E0FE013196ACEAB0 -:10330000B2E001900D929A95E1F795E0ECEAF2E0D7 -:10331000D60101900D929A95E1F70F900F900F90C2 -:103320000F900F90DF91CF911F910F91FF90EF9031 -:10333000DF90CF90089590E080E00E94F134893EC4 -:103340009E4F11F40C94711480E008951F920F9217 -:103350000FB60F9211242F933F934F935F936F9368 -:103360007F938F939F93AF93BF93CF93DF93EF930D -:10337000FF93D091E900DF708091EC00C82FC170FD -:1033800080FDC0E81092E9008091F000877F809373 -:10339000F00078940E94AC0F1092E9008091F00048 -:1033A00088608093F000CD2BCF70C093E900FF912F -:1033B000EF91DF91CF91BF91AF919F918F917F91CD -:1033C0006F915F914F913F912F910F900FBE0F9092 -:1033D0001F9018951F920F920FB60F9211242F93E2 -:1033E0003F934F935F936F937F938F939F93AF938D -:1033F000BF93EF93FF938091E10082FF09C080911A -:10340000E20082FF05C08091E1008B7F8093E100A4 -:103410008091DA0080FF24C08091D80080FF20C016 -:103420008091DA008E7F8093DA008091D90080FF4E -:103430009BC080E189BD82E189BD09B400FEFDCF5A -:1034400081E08093530480914504811109C00E945A -:103450006A070E9435088091E20084608093E20050 -:103460008091E10080FF17C08091E20080FF13C0CF -:103470008091E2008E7F8093E2008091E200806183 -:103480008093E2008091D80080628093D80019BCBC -:1034900085E0809353048091E10084FF29C08091EE -:1034A000E20084FF25C080E189BD82E189BD89B544 -:1034B000982F917080FFFBCF8091D8008F7D8093F3 -:1034C000D8008091E1008F7E8093E1008091E2003E -:1034D0008F7E8093E2008091E20081608093E20021 -:1034E00080915404882309F445C084E080935304F8 -:1034F0008091E10083FF27C08091E20083FF23C019 -:103500008091E100877F8093E10082E08093530403 -:10351000109254048091E1008E7F8093E1008091AD -:10352000E2008E7F8093E2008091E20080618093D0 -:10353000E20042E060E080E00E9403088091F00039 -:1035400088608093F000FF91EF91BF91AF919F91C0 -:103550008F917F916F915F914F913F912F910F903C -:103560000FBE0F901F90189519BC10925304109223 -:10357000450476CF8091E30087FD93E09093530458 -:10358000B7CF78941F921FB61F9211248F939F93E9 -:10359000AF93BF9380913E0490913F04A09140046B -:1035A000B09141040196A11DB11D80933E049093FA -:1035B0003F04A0934004B0934104BF91AF919F9109 -:1035C0008F911F901FBE1F9018959C014FB7F894C4 -:1035D00080913E0490913F04A0914004B091410439 -:1035E0004FBF821B930B08952FB7F89480913E0430 -:1035F00090913F04A0914004B09141042FBF0895E1 -:103600008F929F92AF92BF92CF92DF92EF92FF92F2 -:103610000F931F93CF93DF93CDB7DEB72F970FB6DE -:10362000F894DEBF0FBECDBF8E010F5F1F4F8AE043 -:10363000D8011D928A95E9F787E5C82E81E0D82E3A -:10364000F12CE12CAA24A394B12CF60181916F01F5 -:103650008F3F09F44AC0F894E82FE295EF70F0E04C -:1036600021A18F70A50102C0440F551F8A95E2F772 -:10367000CA01922F982B91A392A18095892382A3AE -:103680000E94100A00C0E0E5F1E030E020E0912C5B -:1036900041914F3F09F47FC0A42FA295AF70B0E0D5 -:1036A00090968C9190E04F7002C0959587954A95C1 -:1036B000E2F780FD70C08A2D022E01C0880F0A94A7 -:1036C000EAF7982A2F5F3F4F2730310509F7F601B7 -:1036D000319780818F3F11F00E94120A50EA5A956B -:1036E000F1F7F801EE0DFF1D90828FEFE81AF80A4E -:1036F00095E0E916F10409F0A8CF4AE050E0B801DE -:1037000087EE92E00E943B327C01892B41F08AE0F7 -:10371000F801A7EEB2E001900D928A95E1F71091C1 -:10372000F202E114F104C9F181E080939F020E944A -:10373000F41A90939E0280939D0280919D02909135 -:103740009E020E94E51A059778F0A7EEB2E0E12FFD -:10375000F0E0E55CFC4F8CEE92E02D9121938A170E -:103760009B07D9F710929F0281E090E0EF28C9F003 -:103770002F960FB6F894DEBF0FBECDBFDF91CF916D -:103780001F910F91FF90EF90DF90CF90BF90AF907F -:103790009F908F90089580E094CF80919F02811137 -:1037A000CCCF0E94460EB82EE091F2028E01055F4A -:1037B0001F4F882309F4D3C085E0D8011D928A9554 -:1037C000E9F7F0E09F01255C3C4F79018091E00230 -:1037D000AE01405F5F4F6A018A3008F098C04EE545 -:1037E00059E1B801C7010E94020E882309F4A6C05E -:1037F0004CEF55E2B801C7010E94020E882309F47C -:103800009DC045E657E1B801C7010E94020E88231A -:1038100009F494C041E758E1B801C7010E94020EC3 -:10382000882309F48BC041E558E1B801C7010E9423 -:10383000020E882309F482C04FE258E1B801C701A3 -:103840000E94020E882309F479C01092E002E091F0 -:10385000F102F0E0AF01455C5C4FD80110E0FA01E5 -:103860009191AF018D91981731F09F01215031094D -:10387000F90180831B2DAC15BD0589F78091A2024B -:103880009091A3020E94E51A893E934060F16091F5 -:10389000FB02E62EF12C662777276E197F09072E8B -:1038A000000C880B990B0E94E03527EA39E747E4C2 -:1038B0005DE30E94AD364B015C01B701FF0C880B44 -:1038C000990B0E94E0359B01AC01C501B4010E9437 -:1038D0002C350E94AF356093FB020E94F41A90933E -:1038E000A3028093A2028091A602882371F08091A6 -:1038F000A4029091A5020E94E51A893E934028F007 -:1039000082EE0E94720C1092A602812F31CF80911C -:10391000A0029091A1020E94E51A843F914008F014 -:103920005ECFE091F102F0E0E55CFC4FD80111922E -:103930001D92AC15BD05D9F71B2DA0CF8091E002DB -:103940008F3F31F08F5F8093E0028A3008F47FCFA1 -:103950000E94F41A9093A1028093A002E2CFF0E0BB -:10396000E55CFC4FF89485E0AAEBB2E001900D9283 -:103970008A95E1F765E070E08AEB92E00E944709E2 -:103980008093B9020E94100AF894E091F902F0E0E5 -:10399000EA50FD4F80818B878093C00261E070E028 -:1039A000C8010E9447098093BF020E94100AF89440 -:1039B000C090C102D090C202E090C302F090C40255 -:1039C0008091A7029091A802A091A902B091AA02A9 -:1039D000C816D906EA06FB06D1F0C092A702D0921B -:1039E000A802E092A902F092AA020E94460E81115A -:1039F0000EC00E94F808C61AD70AE80AF90AC0924F -:103A0000E102D092E202E092E302F092E4020E942C -:103A1000100AF8948091CC02882321F184FF04C01D -:103A20009091CD029093480380FF0DC08091C50214 -:103A300080FF2CC090915E04916090935E0460E0E2 -:103A400086950E94B3158091CC0281FF09C020E0C9 -:103A50004091C8026091C7028091C6020E949C14E6 -:103A60001092CC020E94100AF8948091CE028093AA -:103A7000FB020E94100AF8948091CF02882349F03B -:103A80000E947B0D0E94100A80E072CE0E948E0F71 -:103A9000DACF0E94600DF6CF5F926F927F928F9285 -:103AA0009F92AF92BF92CF92DF92EF92FF920F93CD -:103AB0001F93CF93DF9300D000D00F92CDB7DEB726 -:103AC0006C01FC0183819481892B31F0808191818B -:103AD00089238F3F09F082C50F900F900F900F90B0 -:103AE0000F90DF91CF911F910F91FF90EF90DF909A -:103AF000CF90BF90AF909F908F907F906F905F908E -:103B000008950E940F14182F682F89819A810E94AE -:103B10001F0C69817A81812F0E9402148C01F601A9 -:103B20008281882309F463C0C80190568115F0E2B0 -:103B30009F0750F0905E811520E1920728F0915C7C -:103B400081159F4108F0A5C0C80199279C01245008 -:103B500031092432310520F08B970E9708F047C0C9 -:103B60008091A2029091A3020097D9F10E94E51AD8 -:103B70009C0150E040E060E67AEE80E090E00E9438 -:103B8000AD31CA01B90125E030E040E050E00E94CB -:103B9000AD31E090FB022F3F310519F010F02FEF0F -:103BA00030E0F12C2E193F09B90190E080E00E942D -:103BB000DE3527EA39E747E45DE30E94AD360E942F -:103BC00098354B015C01B701FF0C880B990B0E94E3 -:103BD000E035A50194010E942C350E94AF35609319 -:103BE000FB020E94F41A9093A3028093A202F601B2 -:103BF0008281882309F4E6C4C80182519F45409719 -:103C000008F071C48FEF93E00E94E334025197E50E -:103C1000A92E92E0B92E81115FCF011143C01C8201 -:103C20001B82662463948AE0582E85010F5F1F4F24 -:103C3000C5010E94E33489831A82882309F44CCF9A -:103C40009FEF980F9330E8F58A83698232E0A30EE4 -:103C5000B11CC8010E94E3348B83882309F43CCF54 -:103C60008E010F5F1F4FF80120812223F1F22130D6 -:103C700009F061C091818281913029F50E5F1F4F5B -:103C80006AE070E0893311F460E570E00E94790E1B -:103C900020C090E080E00F3F110511F008F056CFF2 -:103CA000C80154CFA114F4E0BF0609F415CFC50133 -:103CB0000E94E334811101C001502FEFA21AB20A11 -:103CC000ACCF5801CDCF923039F40E5F1F4F0E9418 -:103CD000AB0C0F5F1F4FC7CF933029F40E5F1F4F00 -:103CE0000E94720CF6CF943019F00F5F1F4FF1CF86 -:103CF0000E5F1F4F30E020E0B8016F5F7F4FF8018B -:103D000041818053990B8A30910550F0215031093F -:103D100000F38FE99FE00197F1F700C00000F6CFB4 -:103D2000529EF001539EF00D11249C012E0F3F1F57 -:103D3000842F8B01E1CFE22FF0E0EA54FE4F749024 -:103D4000822F86958695869590E0FC01EA55FE4F78 -:103D5000E4902770F12C022E02C0F594E7940A94A7 -:103D6000E2F7E1E0EE22FF24FC01EA56FE4FC490A8 -:103D7000D12C022E02C0D594C7940A94E2F7F1E048 -:103D8000CF22DD24FC01EA57FE4F8490912C02C023 -:103D9000959487942A95E2F721E082229924E114F0 -:103DA000F10419F081EE0E94AB0CC114D10419F09A -:103DB00086EE0E94AB0C39E36AE070E0731202C039 -:103DC00060E570E0872D0E94790ECD2819F086EE0F -:103DD0000E94720CEF2819F081EE0E94720C892863 -:103DE00009F477CF6AE070E08CE250CF81E00E9466 -:103DF000B61603C081E00E94AA160F900F900F9094 -:103E00000F900F90DF91CF911F910F91FF90EF9046 -:103E1000DF90CF90BF90AF909F908F907F906F90EA -:103E20005F900C949F1682E0E2CF013E110509F4E9 -:103E30009AC0043E110509F07CC3882309F4CEC062 -:103E400081E08093FC0275C30238FFE51F0709F487 -:103E500059C000F500383FE51307B9F101384FE5C7 -:103E6000140709F066C3882309F445C08091A602AF -:103E7000811106C081E08093A60282EE0E94AB0C05 -:103E80000E94F41A9093A5028093A40281EE0E94EE -:103E9000AB0C2DC003385FE5150709F447C00438A3 -:103EA0009FE5190709F045C3882309F482C0809172 -:103EB0004302882309F45AC0809144020E94720C84 -:103EC00080EE0E94AB0C8AE25EC08823B9F080913C -:103ED000A602811106C081E08093A60282EE0E94B4 -:103EE000AB0C0E94F41A9093A5028093A4028BE27B -:103EF0000E94AB0C1EC381EE0E94720C8BE20E94EA -:103F0000720C17C3882309F414C381EE0E94AB0C12 -:103F100083EE0E94AB0C8FE40E94AB0C8FE40E94F6 -:103F2000720C83EE0E94720C81EEE9CF882309F4B3 -:103F300000C381EE0E94AB0C83EE0E94AB0C80E5C7 -:103F40000E94AB0C80E5EBCF8093460210934502B4 -:103F500000934402882321F081E08093FD02E9C2AE -:103F60001092FD02E6C280934302F0CF8091460298 -:103F7000882309F4A8CF809144020E94720C80EE3D -:103F80000E94AB0C8CE40F900F900F900F900F904D -:103F9000DF91CF911F910F91FF90EF90DF90CF9025 -:103FA000BF90AF909F908F907F906F905F900C9498 -:103FB000AB0C8AE20E94720C8CE40E94720C80EEC0 -:103FC0000E94720C80914302811105C080914602CB -:103FD000882309F481CD80914402D5CF1092FC0250 -:103FE000A8C2882331F081E08093FF0210926E0115 -:103FF000A0C21092FF029DC2073C2CE5120709F4F3 -:10400000AEC008F4A7C0083C4CE5140709F4ACC0E6 -:10401000093C1C4509F0ADC24FE455E16BE575E183 -:1040200079C0043DECE51E07A8F40E3CFCE51F0733 -:1040300008F052CD0C3C2CE5120709F49FC041E971 -:1040400055E162EA75E10D3C1C4508F463C061E08E -:1040500081E046C0053D4CE5140709F43DCD08F468 -:1040600092C00D351D4509F437CD83C280915E04A1 -:1040700080FF31C08E7F80935E0460915E047091FA -:104080005F0480916004909161040E948A14809181 -:1040900047038160809347039FEFE0E7F2E0915090 -:1040A000E040F040E1F700C000000F900F900F904B -:1040B0000F900F90DF91CF911F910F91FF90EF9094 -:1040C000DF90CF90BF90AF909F908F907F906F9038 -:1040D0005F900C948E0E816080935E0461E0869503 -:1040E0000F900F900F900F900F90DF91CF911F9135 -:1040F0000F91FF90EF90DF90CF90BF90AF909F9087 -:104100008F907F906F905F900C94B31541EC56E1C7 -:104110006AEC76E10F900F900F900F900F90DF9167 -:10412000CF911F910F91FF90EF90DF90CF90BF90B4 -:10413000AF909F908F907F906F905F900C945D09EF -:104140004AEC56E161EC76E1E5CF4FE755E168E8EE -:1041500075E1E0CF48E855E16FE775E1DBCF47E671 -:1041600055E163E775E1D6CF43E755E167E675E1D1 -:10417000D1CF4BE555E16FE475E1CCCF42EA55E193 -:1041800061E975E1C7CF0F900F900F900F900F90DE -:10419000DF91CF911F910F91FF90EF90DF90CF9023 -:1041A000BF90AF909F908F907F906F905F900C9496 -:1041B000D4160E3D1C4509F0DCC10F900F900F90F6 -:1041C0000F900F90DF91CF911F910F91FF90EF9083 -:1041D000DF90CF90BF90AF909F908F907F906F9027 -:1041E0005F900C94FB16C8010E94F70BF82ECFC10C -:1041F000092F0F70907F11F00295007F812F2223ED -:10420000C9F0002369F090E2910F983010F011117D -:104210000BC080914604082B009346040E94D60BE5 -:10422000812F0E94AB0C17C080919B02082B00933A -:104230009B02F4CF0E94720C002369F00095105E7F -:10424000183010F0B11027C0809146040823009365 -:1042500046040E94D60B98E0E91AF108E4E0EE1655 -:10426000F10408F039CC0E94690E0F900F900F9066 -:104270000F900F90DF91CF911F910F91FF90EF90D2 -:10428000DF90CF90BF90AF909F908F907F906F9076 -:104290005F900C94081680919B02082300939B0268 -:1042A000D8CF892F8F70907F903211F08295807FC8 -:1042B000F1E0BF120CC0222329F0333060F60E94D7 -:1042C000680CC9CF323038F60E945D0CC4CF22236F -:1042D00041F03323A1F340FFA3CF4F70F601458394 -:1042E000EECF332389F3193309F0F5C0FFEF27EE42 -:1042F00033E0F15020403040E1F700C00000812F52 -:104300000E94720CA8CF892F86958695837061F0E4 -:10431000813009F0A0CF812F9370211102C090E06D -:1043200080E00E94040997CF812F9370211102C071 -:1043300090E080E00E941A098ECF892F8370A1F54A -:10434000211189CF812F829586958770880F880FDC -:10435000412F4F70082E01C0440F0A94EAF7212F15 -:10436000207114FF07C02FE030E001C0220F8A95B2 -:10437000EAF72095969596959370923081F0822F6A -:10438000842B933030F480919C02913029F0242BBF -:1043900082230E94590C5FCF842B822BFACF242BCF -:1043A00080919C028227F5CF8695222311F0892FD8 -:1043B0008170882309F44FCF812F8295869587706D -:1043C000880F880F412F4F70082E01C0440F0A94A8 -:1043D000EAF7212F207114FF07C02FE030E001C061 -:1043E000220F8A95EAF720959695969593709230CC -:1043F00081F0822F842B933030F480915D049130D2 -:1044000029F0242B82230E94991625CF842B822BFE -:10441000FACF242B80915D048227F5CF092F0F70EE -:10442000222329F0802F0E94B616812F48CF812F9A -:104430000E945D0C802F0E94AA160DCF812FE1EF04 -:104440001E1789F1E11750F0F0EF1F17B9F0222382 -:10445000B1F13111E5CE892F8F7129C042EF1417C8 -:1044600049F153EF1513F3CF80E0222361F29F71DE -:1044700081E001C0880F9A95EAF7C5CF222379F031 -:10448000323008F0E8CE292F2F7181E090E001C092 -:10449000880F2A95EAF790915D048927B4CF3330CD -:1044A00008F0D9CEF0CF892F8F71222321F20E94FC -:1044B000B616D1CE892F8F712223C9F3BCCF3323F7 -:1044C00079F0893341F48FEF97EEE3E0815090402B -:1044D000E040E1F712CF8FE39CE90197F1F70DCFB0 -:1044E000892F8F71A8CF0031FFE51F0709F47ECC1B -:1044F00001312FE5120709F496CC0E94F808609369 -:104500000403709305038093060390930703F60159 -:104510008281053E110509F417CD08F095CC003EC7 -:10452000110509F48ACC08F080CC0C32110509F48D -:1045300058CDF601928191113CCE80914604827251 -:104540000A3CFCE51F0709F414CE08F06ACD053CCF -:104550003CE5130709F4F9CD08F04ECD033C5CE5CA -:10456000150709F4D3CD08F0EBCD023C1C4509F446 -:104570007DCDF60100811181992309F434CEC80163 -:104580000E940F14F82E682FC8010E941F0CB8015A -:104590008F2D0E9402140E946C0A182FB82EF6016B -:1045A00022814581342F32953F70892F82958F70FB -:1045B000E82EF12C8C3008F04ECEF701EC5CF84C74 -:1045C0000C94CC3100313FE5130709F413CC0131D1 -:1045D0004FE5140709F09BCF82E00DCC85E0DE01AA -:1045E000119601900D928A95E1F7F6012281898159 -:1045F0009A81211186CA0E94F70B182F8ACA1F932D -:10460000CF93DF9380916702807FA9F48091640249 -:10461000882389F080919902D091680260916202AA -:1046200070916302A0916502B0916602C62FC72304 -:1046300016E0D81304C0DF91CF911F91089590E048 -:10464000109711F0CF3F19F401968770F2CF189FA1 -:104650009001199F300D1124F901E759FD4F418157 -:104660004713F2CF40814613EFCF42814111ECCF87 -:10467000438154814A1B5B0B403A510528F78091D6 -:1046800067028F70806180936702F901E259FD4FE4 -:1046900080818F708061808382E692E00E944C1D51 -:1046A000DF91CF911F910C94ED0BAF92BF92CF92FF -:1046B000DF92EF92FF920F931F93CF93DF93CDB7CB -:1046C000DEB761970FB6F894DEBF0FBECDBF8C0189 -:1046D00085E0F801DE011D9601900D928A95E1F7C3 -:1046E000F801E28082E6A82E82E0B82E6091650291 -:1046F000709166026115710509F432C190916202F0 -:1047000040916302892F84238F3F09F429C12081BE -:104710003181C380D480F0906402F601E61BF70B70 -:10472000FF2009F4E8C080916702582F507FE03ADB -:10473000F10508F0ABC0511177C0FE2C431321C026 -:1047400092131FC0E1101DC08F70806180936702BB -:10475000C5010E944C1D80916702F80185838F2D51 -:1047600061960FB6F894DEBF0FBECDBFDF91CF913B -:104770001F910F91FF90EF90DF90CF90BF90AF907F -:104780000895CD2829F0822F83238F3F09F003C19C -:1047900080E0F82FF170DF2E80FF3CC080919902FD -:1047A0004091680256E0841315C02D873E878D85A1 -:1047B0009E850E943E14292F22952F702230F0F002 -:1047C000243018F59F70F1F0F8019581907FD1F4B5 -:1047D000D12C1EC090E0589FF001599FF00D11247C -:1047E000E759FD4F6181361306C06081261303C06F -:1047F0006281E6120FC001968770D5CF9F7011F0CD -:10480000882331F3805E883018F3C8010E944C1D64 -:10481000FD2CA5CFEE2009F4A2CF80916702816024 -:1048200080936702F12C9BCF431306C0921304C000 -:10483000F801EE2009F479C0C8010E944A148823C7 -:1048400009F1EE20F9F080916702803270F020913A -:1048500062023091630238872F831986DB86CA860D -:104860008C87CE0107960E944C1D86E0F801A2E6D7 -:10487000B2E001900D928A95E1F70E94FF22FF2499 -:10488000F3946DCFC8010E944C1DF9CF51110AC09D -:1048900082E692E00E944C1D86E0F50111928A9515 -:1048A000E9F7C0CF43130FC092130DC0E1100BC046 -:1048B000F8018583C8010E944C1D86E0F501119224 -:1048C0008A95E9F74CCFC8010E944A148823D1F297 -:1048D000EE20C1F280916702803238F220916202AC -:1048E000309163023A8329831B82DD82CC828E83DE -:1048F000CE010196B8CFE03AF105F8F6FE2CEE2095 -:1049000009F243131FC092131DC08091670280FDFE -:1049100010C0982F907F69F0F8018583903F31F0A7 -:10492000982F907F905F8F70892B8583C8010E949C -:104930004C1D86E0F801A2E6B2E001900D928A9546 -:10494000E1F70DCFC8010E944A1481118ECF8091EA -:104950006702816080936702C8010E944C1DFFCEF0 -:10496000EE2009F48FCFC8010E944A14F82E882344 -:1049700009F488CF86E0F801A2E6B2E001900D923A -:104980008A95E1F780916202909163020E943E1441 -:104990000E94FF22E4CE81E08E25FBCE1F93CF93B1 -:1049A000DF93CDB7DEB767970FB6F894DEBF0FBEC3 -:1049B000CDBF4B8B5C8B6D8B7E8B8F8B611110927F -:1049C0009B021A8A198A85E0FE017396DE011D9604 -:1049D00001900D928A95E1F786E0FE013D96DE0199 -:1049E000179601900D928A95E1F7CE0107960E94E5 -:1049F0005523882389F016E08091990290916802EE -:104A000089134BC067960FB6F894DEBF0FBECDBFBB -:104A1000DF91CF911F91089586E0FE013796DE0168 -:104A2000119601900D928A95E1F78A859B85892BD5 -:104A300011F38F81988589238F3FE9F220916802D5 -:104A400030E0C90101968770992740919902481773 -:104A5000190681F4109246040E94A30F1092680276 -:104A60001092990286E0E2E6F2E0DF011D928A955B -:104A7000E9F7C1CF96E0929FD001939FB00D11242A -:104A8000A759BD4FFE01319601900D929A95E1F71D -:104A9000809368020E94ED0BAECF819FC00111246C -:104AA00087599D4F0E945523882309F4ABCF8091ED -:104AB000990290E0019687709927809399029CCF84 -:104AC0000F931F93CF93DF93CDB7DEB7A8970FB6A1 -:104AD000F894DEBF0FBECDBF81114DC006E0662346 -:104AE00059F10CA311E01DA31EA30E94F41A8160CA -:104AF000782F98A78FA34CA15DA16EA188A50E94D5 -:104B0000CE240F8F18A319A20E94F41A8160782F67 -:104B10009BA38AA34F8D58A169A18BA10E94CE248B -:104B200081E0A8960FB6F894DEBF0FBECDBFDF912F -:104B3000CF911F910F9108950A8F13E01B8F81E091 -:104B40008C8F0E94F41A8160782F9E8F8D8F4A8DF2 -:104B50005B8D6C8D8E8D0E94CE240D8B1E8B1F8ADB -:104B60000E94F41A8160782F998F888F4D895E8911 -:104B70006F89898DD3CF813099F66623F1F016E0E5 -:104B8000188B198B8A8B0E94F41A8160782F9C8B6A -:104B90008B8B488959896A898C890E94CE241B870E -:104BA0001C871D860E94F41A8160782F9F878E874C -:104BB0004B855C856D858F85B1CF06E00E8318E04F -:104BC0001F8388870E94F41A8160782F9A878987CB -:104BD0004E815F8168858A850E94CE2409831A836D -:104BE0001B820E94F41A8160782F9D838C834981F7 -:104BF0005A816B818D8192CFCF92DF92EF92FF929B -:104C00000F931F93CF93DF930F92CDB7DEB7EE24B0 -:104C1000E394F12C00EC12E09E012F5F3F4F45EB37 -:104C200052E063E082E00E94AF18082F882321F150 -:104C3000C090F4028C2D90E09C012A503D4F7901E8 -:104C40001981F9018081181BD12E80E00AC0DA9405 -:104C5000F70180818F5F808360E08C2D0E9460254A -:104C6000802F1D14A4F3912F17FD90E0191B111133 -:104C70000EC081110E94D40B802F0F90DF91CF9135 -:104C80001F910F91FF90EF90DF90CF9008951F5FDD -:104C9000F70180818150808361E08C2D0E94602526 -:104CA000802FE5CF1F921FB61F9211248F939F93E1 -:104CB000AF93BF9380913D04811113C080913E0456 -:104CC00090913F04A0914004B09141044196A11DF0 -:104CD000B11D80933E0490933F04A0934004B09391 -:104CE0004104BF91AF919F918F911F901FBE1F9064 -:104CF0001895CDB7DEB7E0970FB6F894DEBF0FBEBC -:104D0000CDBF84B7877F84BF0FB6F894A8958091F4 -:104D10006000886180936000109260000FBE80E8A0 -:104D200090E00FB6F89480936100909361000FBEFD -:104D300085B7806885BF85B7806885BF8EE09AE0BB -:104D400090933902809338020E946A070E943508C6 -:104D50008091E20084608093E20078948091530413 -:104D60008823A1F01091E9001F709091EC00892F29 -:104D7000817090FD80E8182B1092E9008091E80086 -:104D800083FD0E94AC0F1F701093E90082E084BD88 -:104D900093E095BD9AEF97BD80936E001092E1026B -:104DA0001092E2021092E3021092E4020E94711447 -:104DB000811102C00E94CD130E94460E80936101B2 -:104DC00080916101882309F4C6C01092760185E2C2 -:104DD000809377010E94460E81110E94B82F809126 -:104DE000610181112FC0FE01359686E0DF011D9221 -:104DF0008A95E9F786E6898387E98A8386EC8B833F -:104E000084E38C8385E38D833497A7E5B1E0CE01FD -:104E10000B9621912D938E179F07D9F787E0ECE72A -:104E2000F1E0DE01919601900D928A95E1F7FE0185 -:104E3000B196A0E5B1E0CE01889621912D938E1711 -:104E40009F07D9F78091610195E0811190E09093DF -:104E5000F20285E0891B8093F10207E511E0FCE591 -:104E6000EF2EF1E0FF2EF80181918F018F3F11F0BD -:104E70000E94120AE016F106B1F700E511E0E7E53D -:104E8000EE2EE1E0FE2ED8018D918D018F3F11F0C5 -:104E90000E94120AE016F106B1F7E7EEF2E081EFA8 -:104EA00092E0ABE3B3E011921D928E179F07D9F702 -:104EB0000E949B19811102C00E94FB1682E090E0C3 -:104EC0000E94E3348093300384E090E00E94E33456 -:104ED000182F82E290E00E94E334982F812F909364 -:104EE000E6028093E5020E94001BEFE3FCE93197A4 -:104EF000F1F700C000000E94001B80913B0380FF7F -:104F00002EC06FEF7FEF90E080E00E94153581E0CA -:104F10008093E00080E28093D8001092C9008FE176 -:104F20009EE40197F1F700C0000087E090EBDC0100 -:104F30008093670690936806A0936906B0936A060B -:104F400088E19CE00FB6F894A895809360000FBEAE -:104F500090936000FFCF85E28093760139CF83E0A4 -:104F600090E00E94E3340E94590C80915D040E94FD -:104F700020160E94460E811102C00E94BB2F83E0C2 -:104F800080932B0380E280932A040E94502E6DE0D0 -:104F900070E089E492E00E94300D892BE9F5809160 -:104FA0002B0363E070E081FDFFC186E492E00E9484 -:104FB000300D892B89F56DE070E086E392E00E9468 -:104FC000300D892B49F50E94F8086058774C8E4FB8 -:104FD0009F4F609331047093320480933304909315 -:104FE0003404E5E6F4E080E092E0DF019C011D92EC -:104FF00021503040E1F7F0936606E09365068FEFAD -:105000009FEF909364048093630481E0809336045F -:105010008093350410922C038091F302811136C0E5 -:105020000E949B19811104C00E94FB160E94E31686 -:1050300088E090E00E94EB3460935E0470935F041C -:105040008093600490936104809147038360809310 -:1050500047036E7F71F40E94E31688E090E00E949F -:10506000EB3460935E0470935F04809360049093CC -:1050700061040E94620980915E0480FF04C060E0C8 -:1050800086950E94B31581E08093F30280916101BF -:10509000811106C084EF80936D0185EF80936C01D0 -:1050A00020916D01A22FA295AF70B0E091963C9136 -:1050B00091972F7081E090E0BC01022E01C0660F35 -:1050C0000A94EAF7462F4095432391964C93919783 -:1050D00092963C919297362B92963C939297409160 -:1050E0006C01E42FE295EF70F0E031A14F70042ED7 -:1050F00001C0880F0A94EAF7982F9095932391A303 -:1051000092A1892B82A390968C9190E002C09595F4 -:1051100087952A95E2F7817020A130E002C035958D -:1051200027954A95E2F792E020FF90E0892B809343 -:10513000FA029091610181E098279093F902891B0E -:105140008093F40286E592E090934B0380934A03A8 -:1051500060E08AE00E94B31581E00E94991682E621 -:1051600091E090933A048093390470E4672ECE0165 -:1051700001967C0180915304DD24D39400E112E177 -:10518000853009F45EC10E94001BC82E81110E9467 -:10519000F808E1E3F3E0ABE3B3E010E000E0902EC9 -:1051A000BD9081918B1509F476C18B25A12CDD244E -:1051B000D3949D2D982309F469C10E94460E88233B -:1051C00099F0A9A29AA2BD2081E009F480E08BA306 -:1051D0000E94F41A8160782F9DA38CA349A15AA143 -:1051E0006BA18DA10E94CE24F801EF5CFC4F808161 -:1051F000D826D0828091FA02E82FEE0FEE0F909120 -:105200006D01A92FA295AF70B0E090962C9130E07F -:105210009F7002C0359527959A95E2F72170332744 -:1052200090916C01A92FA295AF70B0E090964C912F -:1052300050E09F7002C0559547959A95E2F7CA01D4 -:105240008170992740FF02C082E090E0822B8E2B74 -:105250008093FA021091F9028F70E82FF0E0EC5F72 -:10526000FD4F80819091F802890F8093F802D12C34 -:1052700084306CF0E12FF0E0EA50FD4F80818F5FC9 -:10528000808360E0812F0E946025DD24D39480918B -:10529000F8028D3F6CF4E12FF0E0EA50FD4F808181 -:1052A0008150808361E0812F0E946025DD24D394AA -:1052B0008091F802082E000C990B64E070E00E94C7 -:1052C00099318093F802D1100E94D40B809136045A -:1052D000882351F180912D0390912E030E94E51AAD -:1052E000C29708F0EFC02091630430916404211547 -:1052F000310509F049C2809135048823A9F00E9444 -:10530000F808009131041091320420913304309157 -:105310003404601B710B820B930B6F3F7F4F8F4FD9 -:105320009F4710F40E94600DC11001C0D1100E946F -:105330007B0D0E94690E90912F03891731F00E9416 -:10534000690E80932F030E940816809153048430C5 -:1053500009F010CF83E08093E9008091E80082FF9C -:1053600009CF8091E80090E085FF0CC00E9489077A -:1053700030E2C32ED12C8E010F5F1F4F882309F41A -:10538000E2C291E08091E8008B778093E800992356 -:1053900009F4F0CEE981E150E33108F036C3F0E0E2 -:1053A000E05CF84C0C94CC3183E492E000CE809128 -:1053B0005304843009F435C00E94600D80E00E94DF -:1053C000081680914903811109C0D0924903809148 -:1053D0005E0481708093F5020E948E0F10923D044E -:1053E000A8E1B0E00FB6F894A895A09360000FBEB6 -:1053F0006092600083B7817F846083BF83B78160E0 -:1054000083BF7894889583B78E7F83BF0FB6F89457 -:10541000A895809160008861809360001092600080 -:105420000FBE80915204882361F00E94001BEBE3C1 -:10543000F3E08191811113C425E433E02E173F0777 -:10544000C1F780915304853009F4B1CF109246041E -:105450000E94A30F0E94690E0E9408161092490331 -:105460008091F502882351F080915E0481608093E1 -:105470005E0460E086950E94B31585CE8091480356 -:10548000882309F480CE0E948E0E7DCEA394DD0C7D -:1054900037E0A3128ECE0F5F1F4F0A30110509F0BF -:1054A0007ECE8FEF88A789A71AA60E94F41A816082 -:1054B000782F9CA78BA748A559A56AA58CA50E9403 -:1054C000CE2498CE0E94F41A90932E0380932D033D -:1054D00060E080E00E9430098091FB0290E09093B0 -:1054E0000A03809309030E94690E809308030E94B7 -:1054F000460E882331F140910403509105036091D9 -:105500000603709107032FB7F89480913E049091A1 -:105510003F04A0914004B09141042FBF841B950B20 -:10552000A60BB70B81339547A105B10540F00E944A -:10553000600D80913604882309F4DDCED4CE0E941C -:105540007B0D0E94460E62E0882309F4DEC080E0F5 -:105550000E94300960E083E891E00E94341363E028 -:1055600080E00E94300980915D040E941F0D81300F -:1055700009F497C0882309F48EC0823009F499C0D9 -:10558000833009F492C066E080E00E94300960E058 -:1055900081EA91E00E94341367E080E00E943009C4 -:1055A000609108036695617086EA91E00E94341369 -:1055B00068E080E00E9430096091080360956170A6 -:1055C0008BEA91E00E94341369E080E00E94300988 -:1055D0006091080362FB662760F98FEA91E00E9400 -:1055E00034134091000350910103609102037091C4 -:1055F00003032FB7F89480913E0490913F04A0914B -:105600004004B09141042FBF841B950BA60BB70B30 -:105610008D329140A105B10508F48BCF0E94F808A6 -:10562000609300037093010380930203909303033C -:105630008091FF02811104C080916E0181113DC0F3 -:105640006FE080E00E94300960E084EB91E00E940E -:1056500034136CE080E00E94300981E080936E0199 -:105660008091FE0290E00196817099278093FE025E -:1056700021E030E0281B390B40E6429FC001439FE8 -:10568000900D11242091FD02222329F18A599A4F6D -:105690000E9427074ECF60E089E891E00E94341312 -:1056A00072CF60E08FE891E0F9CF60E085E991E0AA -:1056B000F5CF60E08BE991E0F1CF6CE080E00E94F3 -:1056C000300960E084EB91E00E9434136DE080E0EB -:1056D0000E943009C5CF2091FC02222319F08A557F -:1056E0009B4FD6CF2091090330910A032B3031050F -:1056F0001CF48A519C4FCCCF293231051CF48A5DB1 -:105700009C4FC6CF8A599D4FC3CF80E00E9430097D -:1057100060E08AEB91E00E94341363E080E00E9435 -:10572000300960E080EC91E00E94341367E080E093 -:105730000E94300986E296E00E9427076DE080E033 -:105740000E94300980910A038F93809109038F93FF -:1057500086EC91E09F938F93FF92EF920E945132DB -:1057600060E0C7010E9434136EE080E00E943009BF -:1057700060E08CEC91E00E9434130F900F900F903A -:105780000F900F900F90D5CE80912C0361E070E0C8 -:105790008111B1CD482E512C1B01082E02C0220CC4 -:1057A000331C0A94E2F7A90142215321452B09F445 -:1057B00048C090912B0390FD46C08295880F80765B -:1057C0008093710192013695279536952795209300 -:1057D0007401815E809372011092750124E630E0BD -:1057E00047E050E06FE671E088E70E94FF2E892BCA -:1057F00009F081CD55E0440C551C5A95E1F7809194 -:105800002B0380FD2EC0A2014B595B4F04E610E034 -:1058100020E230E060E488E70E94262F892B09F01F -:105820006ACD0E947B0DC101809590952090630404 -:105830003090640428223922309264042092630458 -:105840005ACD8F5FA7CF880F880F880F8093710183 -:1058500010927401895F8093720183E080937501D7 -:10586000BDCFEBE0F3E080E2DF011D928A95E9F71E -:10587000E8E1F2E0F8ABEFA764E172E047E0A42EC4 -:1058800099249394AFA5B8A94D91B8ABAFA7FB01EC -:105890008191BF01840D952D911D9C012B593B4F8A -:1058A0003EA72DA7E42FF0E0E55FFC4F30E020E0BD -:1058B0007A2C721AB92C022E01C0BB0C0A94EAF79A -:1058C0000DA51EA590E0D8018D918D018B21472D4E -:1058D000491B4770842E042E000C550BB82F01C0B5 -:1058E000BB0F8A94EAF78B2E519541955109477069 -:1058F000552701C086954A95EAF7882A8081882A2B -:1059000080829F5F9830F9F62F5F3F4F31962830A5 -:10591000310571F6ECE1F2E02FA538A9E217F307A3 -:1059200009F0B0CF04E610E020E230E04BE053E0B5 -:1059300071CF8091F100D8018D938D01B1E0CB1A28 -:10594000D10809F41ECD8091E80085FDF2CF809149 -:10595000E8008B778093E8000E948907882399F3F9 -:1059600010CD1A8289E08B8311C08A81823009F4BC -:105970008EC1833089F1813009F047C00E94F80858 -:105980000E94D2316B837C838D839E8380915304EC -:10599000843009F0EFCB1091E9001F709091EC007A -:1059A000892F817090FD80E8182B82E08093E900B8 -:1059B0008091E80080FF0CC050E040E060E270E0C1 -:1059C000C7010E94BA078091E8008E778093E800B3 -:1059D0001F701093E900CECBDE011396EBE3F3E0EA -:1059E00081918D9323E0E534F207D1F7CFCF8A81FF -:1059F000823059F46B817C818D819E810E94D231ED -:105A000086E290E00E94F734C1CF8FEF8983BECF4A -:105A10004C816B818A810E94DC1398278927982703 -:105A20009E838D83B3CF0D811E8110270127102700 -:105A30008A81CB803EE0C39E600111249CE8899F4F -:105A4000C00CD11C11248C8190E0880F991FC80EC6 -:105A5000D91E612FC60187960E94F734602FC601B8 -:105A60008896D0CF0E94601391CF8A818138C1F08F -:105A700060F4803809F08ACF20E04B8160916004A7 -:105A800080915F040E949C1481CF8238E9F08338B2 -:105A900009F07CCF20E0409161046C818B81F2CFD2 -:105AA00060E08B810E94B3158B81811103C00E943D -:105AB0008E0F6CCF80915E04816080935E0460E005 -:105AC00086950E94B31562CF8B81809362045ECF6E -:105AD0008A81813899F030F4803809F057CF80916D -:105AE000610441CF823891F0833809F04FCF809123 -:105AF0005F048B83809160048C8348CF80915E0427 -:105B000080FF02C086952FCF80E02DCF8091620468 -:105B10002ACF60915E0470915F048091600490913F -:105B200061040E948A1432CF80E18A832FCF81E002 -:105B30008A8389EA18CFAA80BB80BA24AB24BA240E -:105B40008E010F5F1F4FCC80C00ED12ED11CC5011E -:105B5000895A9D4F0C151D0509F418CFA9EAAA16FC -:105B6000A1E0BA0650F40E94E334F8018483BFEF49 -:105B7000AB1ABB0A0F5F1F4FEACFD80114961C92D5 -:105B8000F6CF0A811B81102701271027FE013196CD -:105B90005F01CC80C00ED12ED11CC801895A9D4F07 -:105BA000C016D10609F4F2CE093AF1E01F0728F435 -:105BB000D50114966C910E94F734BFEFAB1ABB0A63 -:105BC0000F5F1F4FEACF0E945013E0CE84E0ADCFAD -:105BD000AA80BB80BA24AB24BA248E010F5F1F4F6A -:105BE000CC80C00ED12ED11CC5018796C016D1061F -:105BF00009F4CCCEE0E3AE16E2E0BE0658F40E9413 -:105C0000E334D80114968C93FFEFAF1ABF0A0F5FED -:105C10001F4FEACFF8011482F7CF0A811B811027AA -:105C2000012710279E012F5F3F4F5901CC80C00EE6 -:105C3000D12ED11CC8018796C016D10609F4A6CE74 -:105C4000003332E0130728F4D50114966C910E94BA -:105C5000F734BFEFAB1ABB0A0F5F1F4FEBCF09BD85 -:105C600019BD09B400FEFDCF8091D8008F7D8093CF -:105C7000D8008091E00082608093E0008091E00095 -:105C800081FDFCCF109246040E94A30FDACB86E27E -:105C900090E00E94E3341B821C821D828E8376CEAC -:105CA0001092B9008CE08093B80008959F92AF9253 -:105CB000BF92CF92DF92EF92FF920F931F93CF93F9 -:105CC000DF93B82EEB010E94F41A6C01EE24E394EA -:105CD000F12CC431D10560F025E0E22EF12CCF3F4C -:105CE000DC0731F0CE0164E170E00E9479317B0184 -:105CF00084EAA82E94E8992E1092BC00A092BC00D1 -:105D00000E94F41A8C018091BC0087FF0DC0809125 -:105D1000B900887F883039F18091B900887F80315F -:105D200011F10FEF1FEF09C00E94F41A801B910BB5 -:105D30008E159F0540F30EEF1FEFCF3FDC07E1F21A -:105D4000C6010E94E51A8C179D07B0F2C801DF91C9 -:105D5000CF911F910F91FF90EF90DF90CF90BF9068 -:105D6000AF909F900895B092BB009092BC000E94AB -:105D7000F41A8C018091BC0087FF0AC08091B900A1 -:105D8000887F883111F0803461F610E000E0DECFCA -:105D90000E94F41A801B910B8E159F0558F3CBCFF0 -:105DA0000F931F93CF93DF93EB018093BB0084E8A5 -:105DB0008093BC000E94F41A8C018091BC0087FF84 -:105DC00011C02091B900287F81E090E0283211F4C1 -:105DD00090E080E0919581959109DF91CF911F919D -:105DE0000F910895CF3FDC0741F30E94F41A801B06 -:105DF000910B8C179D0708F38EEF9FEFEECFCF929C -:105E0000DF92EF92FF920F931F93CF93DF936B017B -:105E10008A017901B9010E94562EE6010C0D1D1D63 -:105E2000C017D10761F424E92093BC00DF91CF9122 -:105E30001F910F91FF90EF90DF90CF90089597FD05 -:105E4000F2CFB70189910E94D02EEACFCF92DF9294 -:105E5000EF92FF920F931F93CF93DF93C62F6A01A8 -:105E60007901B8010E94562E97FD0CC0B8018C2F05 -:105E70000E94D02EE601EC0CFD1CCE15DF0511F0C2 -:105E800097FF0CC024E92093BC00DF91CF911F91B4 -:105E90000F91FF90EF90DF90CF900895B801899116 -:105EA0000E94D02EEACF84E98093BC0008958EE151 -:105EB0004A9B02C08150E1F74A9BFECF08955A9851 -:105EC00080E28A95F1F75A9A0895FC013BE03A95F1 -:105ED000F1F798E020E080E031E040E14A95F1F709 -:105EE000880F4A9B02C08160232742E04A95F1F760 -:105EF000000040E14A95F1F7915079F790E19A95C9 -:105F0000F1F799B132E03A95F1F7000040E14A9596 -:105F1000F1F792FB992790F992272081920F9083B5 -:105F20000895EF92FF920F931F93CF93DF930F92F9 -:105F3000CDB7DEB719828C017C01E60EF11C0E157F -:105F40001F0561F481E09981911180E00F90DF914C -:105F5000CF911F910F91FF90EF9008950E94572FBE -:105F6000CE0101960E94652FF80181938F01E7CF42 -:105F7000529A5A9A089552985A9AEA9AE9E6F0E0A3 -:105F800080818F7C808308956150770B91E001C000 -:105F9000990F6A95EAF720E031E0911108C02223B9 -:105FA00091F05A9A80E28A95F1F75A980895492F0C -:105FB000482339F05A9A232740E24A95F1F79695FB -:105FC000ECCF5A98F9CF5A98EDCFFF920F931F93C9 -:105FD000CF93DF93EC018C01060F111DC017D10781 -:105FE00031F4DF91CF911F910F91FF900895F990B7 -:105FF0000E945F2F68E08F2D0E94C42FEFCF1F9269 -:106000000F920FB60F921124EF92FF920F931F93EE -:106010002F933F934F935F936F937F938F939F93B0 -:10602000AF93BF93EF93FF93CF93DF930F92CDB7CF -:10603000DEB719820E94572FCE0101960E94652F6C -:10604000A82FA695A695A695282F229525709A2F5C -:106050009570290F922F937026952695920F982769 -:1060600097708981982B09F075C0A93008F072C02B -:1060700080E18A95F1F75A9A529AB2E0BA95F1F70F -:1060800000C05A98EA2EF12CEAE0AE9FD00111240C -:10609000A050BF4F1896ED91FC9119973097B1F031 -:1060A000609102027091030216962D913C91179710 -:1060B000260F371F13968D919C911497680F791FA7 -:1060C00015964C91159712968C9109958AE08E9DA4 -:1060D000F0018F9DF00D1124E050FF4F6581662384 -:1060E00051F0209102023091030286819781820F44 -:1060F000931F0E94E52F0E945F2FF0E1FA95F1F7C0 -:106100005A9852985A9A80E18A95F1F78AE08E9DC2 -:1061100080018F9D100D112400501F4FD801129641 -:106120006C911297662371F1209102023091030263 -:1061300013968D919C91820F931F0E94912FD801ED -:10614000ED91FC91882311F088E001C082E080830A -:106150000E94572F0F90DF91CF91FF91EF91BF9148 -:10616000AF919F918F917F916F915F914F913F91EF -:106170002F911F910F91FF90EF900F900FBE0F90F6 -:106180001F901895ED91FC91DFCF0F931F93CF9344 -:10619000DF93EC0109970CF0A9C08AE08C9FF00115 -:1061A0008D9FF00D1124E050FF4F80819181892B4C -:1061B00009F49CC0F894529A5A9885E08A95F1F7B0 -:1061C00000008C2F869585709C2F9570890F982FD5 -:1061D000937086958695890F8E0193E0000F111FAD -:1061E0009A95E1F7082B0E945F2F00C068E0802F8E -:1061F0000E94C42FA0E1AA95F1F752985A9A4A9B9F -:1062000027C087E090E04A9925C08AE08C9F8001F2 -:106210008D9F100D112400501F4FF80165816623DA -:10622000A1F1209102023091030286819781820FB1 -:10623000931F0E94912F811128C0529A5A9AD80117 -:10624000ED91FC9182E08083789482E090E016C02A -:1062500000C0D5CF0197B9F4529A5A9A8AE08C9F20 -:10626000F0018D9FF00D1124E050FF4F0190F0815F -:10627000E02D81E08083789481E090E0DF91CF9100 -:106280001F910F91089500C0BECF0E94572FB0E21A -:10629000BA95F1F75A98529AE0E1EA95F1F78AE057 -:1062A0008C9FF0018D9FF00D1124E050FF4F628113 -:1062B000662351F020910202309103028381948180 -:1062C000820F931F0E94E52F0E945F2F8AE08C9F10 -:1062D000F0018D9FF00D1124E050FF4F0190F081EF -:1062E000E02D1082789490E080E0C8CF84E090E0C8 -:1062F000C5CFAA1BBB1B51E107C0AA1FBB1FA61716 -:10630000B70710F0A61BB70B881F991F5A95A9F75E -:1063100080959095BC01CD010895991B79E004C04A -:10632000991F961708F0961B881F7A95C9F78095D4 -:10633000089597FB072E16F4009407D077FD09D037 -:106340000E94793107FC05D03EF4909581959F4FCE -:106350000895709561957F4F0895052E97FB1EF463 -:1063600000940E94C43157FD07D00E94D93107FC28 -:1063700003D04EF40C94C43150954095309521953E -:106380003F4F4F4F5F4F0895909580957095619561 -:106390007F4F8F4F9F4F0895EE0FFF1F0590F49191 -:1063A000E02D09946927962769277827872778277A -:1063B0000895A1E21A2EAA1BBB1BFD010DC0AA1F46 -:1063C000BB1FEE1FFF1FA217B307E407F50720F05E -:1063D000A21BB30BE40BF50B661F771F881F991FD9 -:1063E0001A9469F760957095809590959B01AC0122 -:1063F000BD01CF0108952F923F924F925F926F920D -:106400007F928F929F92AF92BF92CF92DF92EF9244 -:10641000FF920F931F93CF93DF93CDB7DEB7CA1BC5 -:10642000DB0B0FB6F894DEBF0FBECDBF09942A88F0 -:10643000398848885F846E847D848C849B84AA8498 -:10644000B984C884DF80EE80FD800C811B81AA8125 -:10645000B981CE0FD11D0FB6F894DEBF0FBECDBFF0 -:10646000ED010895FB01DC0102C005900D92415041 -:106470005040D8F70895FB01DC0104C08D910190D4 -:10648000801921F441505040C8F7881B990B08959A -:10649000FB01DC0102C001900D9241505040D8F741 -:1064A0000895AEE0B0E0E7E5F2E30C9409320D891F -:1064B0001E8986E08C831A8309838FEF9FE79E8372 -:1064C0008D83AE01475E5F4F6F89788DCE01019657 -:1064D0000E9474322F813885020F131FF801108239 -:1064E0002E96E4E00C942532ABE0B0E0EAE7F2E36C -:1064F0000C94FB317C013B018A01FC01178216825E -:10650000838181FFB9C19AE0292ECE0101965C01F9 -:10651000F7019381F30193FD859193FF81913F01F1 -:10652000882309F446C1853239F493FD859193FFA0 -:1065300081913F01853229F4B70190E00E945534E2 -:10654000E7CF912C412C512CFFE1F51538F08B321F -:1065500009F188F4803201F1833221F157FC3AC00D -:1065600020ED280F2A3040F556FE1FC0929C200DCA -:106570001124922E06C08D3291F0803379F7689401 -:1065800050F8F30193FD859193FF81913F018111B3 -:10659000DBCF20C0689451F8689452F8F2CF689429 -:1065A00053F8EFCF689454F8ECCF429C200D11249F -:1065B000422E689455F8E5CF8E3229F456FCF9C086 -:1065C000689456F8DECF8C3619F4689457F8D9CF12 -:1065D0008836B9F2982F9F7D95549330C0F083365A -:1065E000A1F18337C1F1833509F05BC0F801C19097 -:1065F000D1908F01692D70E056FC02C06FEF7FEFE4 -:10660000C6010E943F344C01689457F80AC00C5FE1 -:106610001F4F2FE3298388248394912C6501E894EC -:1066200057F853FC04C04814190409F018F5342C29 -:106630008114910431F5332009F46ACFB70180E267 -:1066400090E00E9455343A94F6CFF8018081898316 -:106650000E5F1F4FE0CFF801C190D1908F01692DDF -:1066600070E056FC02C06FEF7FEFC6010E944A3413 -:106670004C01D5CFB70180E290E00E9455344A9496 -:10668000D2CFF60157FC859157FE81916F01B7017A -:1066900090E00E94553431103A94F1E08F1A91083D -:1066A000C7CF843619F0893609F074C0F80157FE57 -:1066B0006AC061917191819191918F01252D2F7601 -:1066C000D22E97FF09C090958095709561957F4F68 -:1066D0008F4F9F4F6894D7F82AE030E0A5010E94C1 -:1066E0008534C82ECA188C2C5D2CD6FE0CC0E894BC -:1066F00050F8C91440F4D4FE05C0D2FC03C0FD2DEF -:10670000FE7E5F2E892C54FE8FC0FE01EC0DF11D24 -:106710008081803309F081C0252D297E522E852D60 -:106720008870382E53FC8FC050FE89C09C2C841476 -:1067300018F44C0C942C981854FE8BC0B70180E3CD -:1067400090E00E94553452FE09C088E790E051FE67 -:1067500002C088E590E0B7010E945534C91408F4DE -:1067600084C0CA94D12C9FEFC91AD90ACA0CDB1C69 -:10677000F60182916F01B70190E00E945534AC148C -:10678000BD04B1F758CF61917191072E000C880BB1 -:10679000990B93CFD52CE894D4F82AE030E08537D4 -:1067A00039F1952D997FD92E8F3601F148F488352E -:1067B000A9F0F701868197812B96E2E10C941732BC -:1067C000803749F08837A9F7D4FE02C06894D2F820 -:1067D00020E130E00DC06894D4F8F6CF54FE03C039 -:1067E000E92FE660DE2E20E132E002C028E030E052 -:1067F000F801D7FE0DC061917191819191918F0146 -:10680000A5010E948534C82ECA18E894D7F86BCF2A -:106810006191719190E080E0F2CF52FC02C08394CC -:106820007ECF839483947BCF852D867809F477CFB0 -:10683000F6CFB70180E290E00E945534839484142F -:10684000C0F3312C79CF342C3818841408F474CF69 -:10685000F8CF852D867809F481CF8BE251FE80E256 -:1068600057FC8DE2B70190E077CFB70180E390E06D -:106870000E9455349A9472CF8FEF9FEF9DCFFC0109 -:106880000590615070400110D8F7809590958E0F5B -:106890009F1F0895FC016150704001900110D8F7CE -:1068A000809590958E0F9F1F08950F931F93CF9300 -:1068B000DF93182F092FEB018B8181FD09C01FEF9A -:1068C0000FEF812F902FDF91CF911F910F9108959E -:1068D00082FF14C02E813F818C819D81281739074A -:1068E0003CF4E881F981CF01019699838883108374 -:1068F0008E819F8101969F838E83E3CFE885F98502 -:10690000812F0995892BA1F3DACFFA01AA27283024 -:1069100051F1203181F1E8946F936E7F6E5F7F4F6C -:106920008F4F9F4FAF4FB1E03ED0B4E03CD0670FE8 -:10693000781F891F9A1FA11D680F791F8A1F911D3B -:10694000A11D6A0F711D811D911DA11D20D009F48B -:1069500068943F912AE0269F11243019305D3193CD -:10696000DEF6CF010895462F4770405D4193B3E0B6 -:106970000FD0C9F7F6CF462F4F70405D4A3318F05D -:10698000495D31FD4052419302D0A9F7EACFB4E00E -:10699000A6959795879577956795BA95C9F70097C6 -:1069A0006105710508959B01AC010A2E0694579567 -:1069B000479537952795BA95C9F7620F731F841FBE -:1069C000951FA01D0895F999FECF92BD81BDF89A3B -:1069D000992780B50895A6E1B0E044E050E00C941A -:1069E0001D35A8E1B0E042E050E00C941D35262FA3 -:1069F000F999FECF92BD81BDF89A019700B40216B5 -:106A000039F01FBA20BD0FB6F894FA9AF99A0FBE62 -:106A100008950396272F0E94F8340E94F734252FFB -:106A20000E94F834242F0C94F8340196272F0E94EA -:106A3000F8340C94F734DC01CB01FC01F999FECF5A -:106A400006C0F2BDE1BDF89A319600B40D924150F6 -:106A50005040B8F708955058BB27AA270E944335E5 -:106A60000C945B360E944D3638F00E94543620F06C -:106A700039F49F3F19F426F40C944A360EF4E0954D -:106A8000E7FB0C941B36E92F0E946C3658F3BA17BB -:106A9000620773078407950720F079F4A6F50C9434 -:106AA000A6360EF4E0950B2EBA2FA02D0B01B901DE -:106AB00090010C01CA01A0011124FF27591B99F074 -:106AC000593F50F4503E68F11A16F040A22F232F80 -:106AD000342F4427585FF3CF469537952795A795D0 -:106AE000F0405395C9F77EF41F16BA0B620B730B77 -:106AF000840BBAF09150A1F0FF0FBB1F661F771FE8 -:106B0000881FC2F70EC0BA0F621F731F841F48F49C -:106B1000879577956795B795F7959E3F08F0B0CF25 -:106B20009395880F08F09927EE0F9795879508950C -:106B30000E948E3690F09F3748F4911116F40C9411 -:106B4000A73660E070E080E89FE3089526F01B160A -:106B5000611D711D811D0C9421360C943C360E94E0 -:106B6000743688F09F5798F0B92F9927B751B0F035 -:106B7000E1F0660F771F881F991F1AF0BA95C9F7C1 -:106B800014C0B13091F00E94A636B1E008950C9483 -:106B9000A636672F782F8827B85F39F0B93FCCF336 -:106BA000869577956795B395D9F73EF4909580953E -:106BB000709561957F4F8F4F9F4F0895E89409C05E -:106BC00097FB3EF490958095709561957F4F8F4F20 -:106BD0009F4F9923A9F0F92F96E9BB279395F69536 -:106BE000879577956795B795F111F8CFFAF4BB0FB4 -:106BF00011F460FF1BC06F5F7F4F8F4F9F4F16C018 -:106C0000882311F096E911C0772321F09EE8872FA1 -:106C1000762F05C0662371F096E8862F70E060E05D -:106C20002AF09A95660F771F881FDAF7880F9695D6 -:106C3000879597F9089597F99F6780E870E060E07D -:106C40000895882371F4772321F09850872B762FAD -:106C500007C0662311F499270DC09051862B70E070 -:106C600060E02AF09A95660F771F881FDAF7880F81 -:106C70009695879597F908959F3F31F0915020F4AC -:106C8000879577956795B795880F911D9695879508 -:106C900097F908959FEF80EC089500240A94161642 -:106CA000170618060906089500240A9412161306FA -:106CB000140605060895092E0394000C11F4882388 -:106CC00052F0BB0F40F4BF2B11F460FF04C06F5FA4 -:106CD0007F4F8F4F9F4F089557FD9058440F551F7A -:106CE00059F05F3F71F04795880F97FB991F61F04E -:106CF0009F3F79F087950895121613061406551FC5 -:106D0000F2CF4695F1DF08C0161617061806991F30 -:106D1000F1CF869571056105089408950E94743637 -:106D2000A0F0BEE7B91788F4BB279F3860F41616A9 -:106D3000B11D672F782F8827985FF7CF86957795B5 -:106D40006795B11D93959639C8F30895E894BB27CC -:106D500066277727CB0197F908950E94C0360C94D7 -:106D60005B360E944D3638F00E94543620F0952351 -:106D700011F00C941B360C944A3611240C94A7364F -:106D80000E946C3670F3959FC1F3950F50E0551F2C -:106D9000629FF001729FBB27F00DB11D639FAA2770 -:106DA000F00DB11DAA1F649F6627B00DA11D661FBF -:106DB000829F2227B00DA11D621F739FB00DA11DE0 -:106DC000621F839FA00D611D221F749F3327A00D9A -:106DD000611D231F849F600D211D822F762F6A2F36 -:106DE00011249F5750409AF0F1F088234AF0EE0F9B -:106DF000FF1FBB1F661F771F881F91505040A9F7C8 -:106E00009E3F510580F00C941B360C94A7365F3FD3 -:106E1000E4F3983ED4F3869577956795B795F79503 -:106E2000E7959F5FC1F7FE2B880F911D969587957B -:106E300097F90895F894FFCF9310BB100E11BB1073 -:106E40000E11EE1026110E11231230125C145C1478 -:106E50006514651467146514651465145C145C147A -:106E60006C14651465146C14F820F820512151211C -:106E700083212B212B212B219D210E221E221E221C -:106E8000B12CB52CF72C082D132D322D352D682D56 -:106E9000892D052D052D942D972D9B2DC12DE32D8D -:066EA000E62DE82D0D2E89 -:106EA600420200000001000000004202000000054E -:106EB600010000004202000000010600000042023C -:106EC6000000000107000000420204080000000064 -:106ED60000004202090C00000000000042020115F9 -:106EE6000000000000004202011600000000000041 -:106EF60036323331F7F6676697C634350000000040 -:106F06000001F508D50DF408D10DCD0DF4F50100FD -:106F160021007F220003004A004A4A01F6F7313376 -:106F26003236674C4159455200426173652000472D -:106F3600616D6520005261697365004C6F776572FB -:106F4600004C4F434B0043617073004E756D005308 -:106F560063726C00202020202000534F4C415200C9 -:106F6600544D505354002025303364002077706D03 -:106F760000818283E200E900EA00B500B600B700AE -:106F8600CD008301CC008A019201940121022302E3 -:106F960024022502260227022A02B300B4006F004B -:106FA6007000B90200FF0100010000FFFF000001B0 -:106FB6000001FF0000081018181008000001020266 -:106FC600020202020202020240223246012401F2B9 -:086FD600002B0D440D640D00B9 +:10277000811161E283E290E00E94F834C1110CC043 +:10278000CFEF6C2F84E290E00E94F8346C2F85E24A +:1027900090E0CF910C94F834C9E0F3CF80E00E9430 +:1027A000B51360E086E290E00E94F8340E94601366 +:1027B0000E94501381E00C94B5130F931F93CF9395 +:1027C000DF93C42FD0E0CC0FDD1F2EE0629FC00D41 +:1027D000D11D11243CE8839FC00DD11D1124CE01D1 +:1027E00087960E94E434082F10E0102F0027CE01B6 +:1027F00088960E94E4349801282BC901DF91CF917B +:102800001F910F910895462F843038F47A3028F4C0 +:10281000673018F4672F0C94DD1390E080E0089582 +:10282000CF92DF92FF920F931F93CF93DF936C01B0 +:1028300000915D0480919C02082BC7E0D0E010E07D +:10284000FC2EC8010C2E02C0959587950A94E2F7DC +:1028500080FD0CC02197A0F7F12C8F2DDF91CF9137 +:102860001F910F91FF90DF90CF900895B6018C2FAC +:102870000E9403140E946C0A019761F3EECFCF937C +:10288000DF93EC010E941014BE010E940314DF913B +:10289000CF910C946C0AFC01808191810E943F14BD +:1028A000292F2F7092959F7092509E3078F4E92FC7 +:1028B000F0E0E95DF84C0C94CD31803F19F020F444 +:1028C000883E20F481E00895843FE1F380E008959C +:1028D000883EC0F3813FD1F7F5CF822F869586954C +:1028E0008695089583E290E00E94E434813289F471 +:1028F00084E290E00E94E434893059F485E290E06B +:102900000E94E43491E0893009F090E0892F8170D1 +:10291000089580E0FCCFCF92DF92EF92FF926B019F +:102920007C010E946209B701A60188E090E0FF9057 +:10293000EF90DF90CF900C940A35AF92BF92CF9278 +:10294000DF92EF92FF920F931F93CF93DF9300D00C +:102950000F92CDB7DEB7082FF62E142FE22E8091FE +:102960005E0480FF4FC0E82FE695AE2FB0E0A45E76 +:10297000BD4F9C91909345038E7F823009F056C0E5 +:10298000413A08F040EA9E012F5F3F4F6F2D802FA4 +:102990000E94780980915E0480FF11C02B813981EB +:1029A0004A81809178019091790153E0859FF001EF +:1029B0001124E45BFC4F891798F10E948E0E8091E0 +:1029C0005F04801308C0809160048F1104C080915F +:1029D0006104811729F08091470382608093470347 +:1029E00000935F04F092600410936104EE2051F0B4 +:1029F00060915E0470915F04809160049091610425 +:102A00000E948B140F900F900F90DF91CF911F9128 +:102A10000F91FF90EF90DF90CF90BF90AF9008950F +:102A20004183308322838F5F3396C5CF923039F64E +:102A3000E2508E2F8170D82EE695F0E0EA57F84FDD +:102A4000A590B490C12CBB2460917A01C61608F001 +:102A5000B4CF2C2D30E0A29EC001A39E900DB29E5B +:102A6000900D112470E00E947A31802FD11016C091 +:102A7000860F40917801420F532F511D9A01220F6A +:102A8000331F240F351F245B3C4F412F113A08F0B0 +:102A900040EA6F2D0E947809C394D6CF861BE9CFF8 +:102AA000EEE5F4E0438121E1421B08F440E021E03F +:102AB000628181810C949D14EEE5F4E0438121E173 +:102AC000420F08F44FEF21E0628181810C949D1444 +:102AD000EEE5F4E0628121E1621B08F460E021E0B0 +:102AE000438181810C949D14EEE5F4E0628121E143 +:102AF000620F08F46FEF21E0438181810C949D14F3 +:102B0000EEE5F4E0818121E04381628188500C94FC +:102B10009D14EEE5F4E0818121E043816281885FCC +:102B20000C949D1480916204882319F08150809345 +:102B3000620460915E0470915F04809160049091E2 +:102B400061040C948B1480916204833018F48F5FBD +:102B50008093620460915E0470915F0480916004D0 +:102B6000909161040C948B1490915E0490FF27C0A7 +:102B7000917081111DC0926090935E048091470313 +:102B8000816080934703662351F060915E047091E9 +:102B90005F0480916004909161040E948B1420E096 +:102BA000409161046091600480915F040C949D14D5 +:102BB0008C3010F09661E0CF880F982BDDCF089510 +:102BC00021E030E0A90102C0440F551F8A95E2F7C9 +:102BD000CA01209148036623C1F0822B80934803E9 +:102BE0008091470380618093470380914603811160 +:102BF00006C080915E0460E086950E94B4158091C5 +:102C00005E0480FD05C00C948E0E80958223E6CF75 +:102C10000895CF93DF93C82FC17082FBDD27D0F9D1 +:102C200081FB662760F984E00E94E01561E06C2773 +:102C300085E00E94E0156D2F86E0DF91CF910C9426 +:102C4000E0150F931F93CF93C82F61E08111682F78 +:102C5000617080E00E94E015C1FB662760F9C11138 +:102C600001C060E081E00E94E015C2FB662760F9C8 +:102C7000C11101C060E082E00E94E015C3FB66273D +:102C800060F9C11101C060E083E00E94E0154C2FA3 +:102C900050E070E060E0DB01CA01F4E0B695A79572 +:102CA00097958795FA95D1F70097A105B10551F150 +:102CB000AC01BD0184E08A019B01E2E036952795D5 +:102CC00017950795EA95D1F70115110521053105ED +:102CD00019F08E5FB901A8017695679557954795CC +:102CE000452B462B472B09F08F5F8130A1F08823BD +:102CF00059F08230A9F08330C1F08C2FCF911F9111 +:102D00000F91089580E0D7CF20E040E56FEF82E398 +:102D10000E949D14F2CF20E040E56FEF8CEFF8CFDA +:102D200020E040E56FEF86E7F3CF20E040E56FEF6E +:102D30008AEDEECF0E94211680935D040C944B0C1B +:102D400080915D04982F9670963019F488600C94E9 +:102D50009A16877FFCCF21E030E001C0220F8A95D0 +:102D6000EAF7209580915D0482230C949A1621E065 +:102D700030E001C0220F8A95EAF780915D04822B32 +:102D80000C949A1680915E048695815009F48BE02C +:102D900061E00C94B41580915E0486958F5F8C3051 +:102DA00008F081E061E00C94B41580915E0480FF2E +:102DB00007C0869582588F77893010F40C94CB1613 +:102DC00061E082E00C94B415EEE5F4E083E08083EA +:102DD00011828FEF828380EA83831482A5E4B3E0BB +:102DE00012968C911297836012968C9360817181F8 +:102DF000828193810C948B1469EE7EEF90E080E0E9 +:102E00000E94163560E082E090E00E94F83460E0B5 +:102E100083E090E00E94F83410929C0260E084E02D +:102E200090E00E94F83460E082E290E00E94F83482 +:102E300060E085E090E00E94F83460E086E090E099 +:102E40000E94F8346FEF87E090E00E94F83440E091 +:102E500050E0BA0188E090E00E940A3560E08DE021 +:102E600090E00E94F83440E050E0BA0188E190E040 +:102E70000E940A3560E087E190E00E94F83440E06B +:102E800050E0BA018CE190E00E940A3570E060E009 +:102E900080E290E00E94163540E050E0BA0188E1FF +:102EA00090E00E940A3580E00E94B5130E94CE1384 +:102EB00040E050E0BA018FE090E00E940A3540E027 +:102EC00050E0BA0183E190E00C940A350F931F9310 +:102ED000CF93DF9300D000D0CDB7DEB74091D002C2 +:102EE0005091D1026091D2027091D3022FB7F89421 +:102EF00080913E0490913F04A0914004B091410420 +:102F00002FBF841B950BA60BB70B84369105A1052B +:102F1000B10588F10E94460E882379F10E94F808D5 +:102F20006E5F7F4F8F4F9F4F69837A838B839C8324 +:102F300080912B0190912C0187549D4F40912A0143 +:102F400050E04530510510F044E050E0BE016F5FA5 +:102F50007F4F0E94493284E090E00E94C630892B66 +:102F6000D9F40E94F8086093D0027093D102809344 +:102F7000D2029093D30281E010C00E94F808009121 +:102F8000E1021091E2022091E3023091E402600F2D +:102F9000711F821F931FC4CF80E00F900F900F907E +:102FA0000F90DF91CF911F910F9108958F929F9273 +:102FB000AF92BF92CF92DF92EF92FF920F931F9347 +:102FC000CF93DF93EB0188809980AA80BB809FB765 +:102FD000F894C0903E04D0903F04E0904004F090FC +:102FE00041049FBFC818D908EA08FB0894E6C9162F +:102FF000D104E104F10410F4442311F1E82E082E69 +:10300000000CFF089AE08902F0011124E050FF4F04 +:103010008381948187549D4F428150E004171507A6 +:1030200008F4A801B9010E944932C7010E94C630C4 +:10303000892BA1F40E94F808688379838A839B8393 +:1030400081E0DF91CF911F910F91FF90EF90DF9082 +:10305000CF90BF90AF909F908F90089580E0F1CF78 +:103060000F931F93CF93DF930F92CDB7DEB780916D +:10307000350489832091CF0290E041E0281719069A +:1030800009F440E001E010E09E012F5F3F4F6CED3E +:1030900072E087E00E94D6170F90DF91CF911F91C9 +:1030A0000F9108950F931F93CF93DF930F92CDB796 +:1030B000DEB78091FB02898341E09091CE029813A4 +:1030C00001C040E001E010E09E012F5F3F4F68ED3E +:1030D00072E086E00E94D6170F90DF91CF911F918A +:1030E0000F9108950F931F93CF93DF93CDB7DEB762 +:1030F00029970FB6F894DEBF0FBECDBF85E0EEE591 +:10310000F4E0DE01119601900D928A95E1F780912D +:10311000450390914603A0914703B09148038E83E5 +:103120009F83A887B98741E08885811101C040E06D +:1031300009E010E09E012F5F3F4F64ED72E085E0F3 +:103140000E94D61781111092470329960FB6F89462 +:10315000DEBF0FBECDBFDF91CF911F910F910895BC +:103160006F927F928F929F92AF92BF92CF92DF9297 +:10317000EF92FF920F931F93CF93DF930F92CDB7F0 +:10318000DEB7862E5A016901682E880F7708C301C1 +:103190000E94C630892B09F088C08AE0869DF00124 +:1031A000879DF00D1124E050FF4F458150E04115FF +:1031B000510511F041E050E08AE0869DF001879DC5 +:1031C000F00D1124E050FF4F6681778167547D4FE9 +:1031D000CE0101960E944932F50140815181628100 +:1031E00073812FB7F89480913E0490913F04A09191 +:1031F0004004B09141042FBF841B950BA60BB70B65 +:1032000084369105A105B10540F4B701C8010E94BB +:1032100047099981891709F44FC0082C000C9908B7 +:10322000C4010E94C630892B91F0B12C8B2D0F90D8 +:10323000DF91CF911F910F91FF90EF90DF90CF9092 +:10324000BF90AF909F908F907F906F9008958AE08D +:10325000889DF001899DF00D1124E050FF4F4581BC +:1032600050E0E416F50608F4A7018AE0889DF00115 +:10327000899DF00D1124E050FF4F668177816754DE +:103280007D4FC6010E944932B701C8010E9447091B +:1032900099818913CACF0E94F808F5016083718370 +:1032A00082839383BB24B394C1CFB12CA701B8010F +:1032B000C6010E944932BACFBB24B394F7CFCF9254 +:1032C000DF92EF92FF920F931F93CF93DF9300D083 +:1032D00000D00F92CDB7DEB76B0185E0E82EF12C60 +:1032E0000AEB12E09E012F5F3F4F41EB52E061E09D +:1032F00080E00E94B018882349F095E0FE013196E5 +:10330000ACEAB2E001900D929A95E1F795E0ECEA13 +:10331000F2E0D60101900D929A95E1F70F900F908F +:103320000F900F900F90DF91CF911F910F91FF9011 +:10333000EF90DF90CF90089590E080E00E94F2340B +:10334000893E9E4F11F40C94721480E008951F92F0 +:103350000F920FB60F9211242F933F934F935F93C9 +:103360006F937F938F939F93AF93BF93CF93DF938D +:10337000EF93FF93D091E900DF708091EC00C82FAC +:10338000C17080FDC0E81092E9008091F000877F55 +:103390008093F00078940E94AC0F1092E900809125 +:1033A000F00088608093F000CD2BCF70C093E900CF +:1033B000FF91EF91DF91CF91BF91AF919F918F914D +:1033C0007F916F915F914F913F912F910F900FBE21 +:1033D0000F901F9018951F920F920FB60F92112405 +:1033E0002F933F934F935F936F937F938F939F930D +:1033F000AF93BF93EF93FF938091E10082FF09C0E9 +:103400008091E20082FF05C08091E1008B7F809374 +:10341000E1008091DA0080FF24C08091D80080FF15 +:1034200020C08091DA008E7F8093DA008091D900ED +:1034300080FF9BC080E189BD82E189BD09B400FEA7 +:10344000FDCF81E08093530480914504811109C030 +:103450000E946A070E9435088091E2008460809390 +:10346000E2008091E10080FF17C08091E20080FFC0 +:1034700013C08091E2008E7F8093E2008091E20091 +:1034800080618093E2008091D80080628093D800B0 +:1034900019BC85E0809353048091E10084FF29C02A +:1034A0008091E20084FF25C080E189BD82E189BD71 +:1034B00089B5982F917080FFFBCF8091D8008F7DC8 +:1034C0008093D8008091E1008F7E8093E10080910D +:1034D000E2008F7E8093E2008091E2008160809321 +:1034E000E20080915404882309F445C084E080936D +:1034F00053048091E10083FF27C08091E20083FFA5 +:1035000023C08091E100877F8093E10082E0809377 +:103510005304109254048091E1008E7F8093E10067 +:103520008091E2008E7F8093E2008091E2008061D2 +:103530008093E20042E060E080E00E940308809116 +:10354000F00088608093F000FF91EF91BF91AF9100 +:103550009F918F917F916F915F914F913F912F91AB +:103560000F900FBE0F901F90189519BC1092530426 +:103570001092450476CF8091E30087FD93E090930D +:103580005304B7CF78941F921FB61F9211248F93C4 +:103590009F93AF93BF9380913E0490913F04A0917D +:1035A0004004B09141040196A11DB11D80933E04D9 +:1035B00090933F04A0934004B0934104BF91AF9116 +:1035C0009F918F911F901FBE1F9018959C014FB720 +:1035D000F89480913E0490913F04A0914004B091F2 +:1035E00041044FBF821B930B08952FB7F89480912D +:1035F0003E0490913F04A0914004B09141042FBF3C +:1036000008958F929F92AF92BF92CF92DF92EF92E6 +:10361000FF920F931F93CF93DF93CDB7DEB72F9712 +:103620000FB6F894DEBF0FBECDBF8E010F5F1F4FE8 +:103630008AE0D8011D928A95E9F787E5C82E81E0D6 +:10364000D82EF12CE12CAA24A394B12CF60181915F +:103650006F018F3F09F44AC0F894E82FE295EF70AC +:10366000F0E021A18F70A50102C0440F551F8A957B +:10367000E2F7CA01922F982B91A392A180958923FA +:1036800082A30E94100A00C0E0E5F1E030E020E0F3 +:10369000912C41914F3F09F47FC0A42FA295AF70A8 +:1036A000B0E090968C9190E04F7002C09595879510 +:1036B0004A95E2F780FD70C08A2D022E01C0880F66 +:1036C0000A94EAF7982A2F5F3F4F2730310509F710 +:1036D000F601319780818F3F11F00E94120A50EA63 +:1036E0005A95F1F7F801EE0DFF1D90828FEFE81A61 +:1036F000F80A95E0E916F10409F0A8CF4AE050E095 +:10370000B80187EE92E00E943C327C01892B41F0A7 +:103710008AE0F801A7EEB2E001900D928A95E1F7F8 +:103720001091F202E114F104C9F181E080939F024B +:103730000E94F51A90939E0280939D0280919D02B3 +:1037400090919E020E94E61A069778F0A7EEB2E0EA +:10375000E12FF0E0E55CFC4F8CEE92E02D9121939F +:103760008A179B07D9F710929F0281E090E0EF281B +:10377000C9F02F960FB6F894DEBF0FBECDBFDF9114 +:10378000CF911F910F91FF90EF90DF90CF90BF905E +:10379000AF909F908F90089580E094CF80919F028A +:1037A0008111CCCF0E94460EB82EE091F2028E011C +:1037B000055F1F4F882309F4D3C085E0D8011D920F +:1037C0008A95E9F7F0E09F01255C3C4F79018091F3 +:1037D000E002AE01405F5F4F6A018A3008F098C096 +:1037E0004FE559E1B801C7010E94020E882309F490 +:1037F000A6C04DEF55E2B801C7010E94020E882312 +:1038000009F49DC046E657E1B801C7010E94020EC7 +:10381000882309F494C042E758E1B801C7010E9427 +:10382000020E882309F48BC042E558E1B801C701B4 +:103830000E94020E882309F482C040E358E1B801D7 +:10384000C7010E94020E882309F479C01092E00299 +:10385000E091F102F0E0AF01455C5C4FD80110E06F +:10386000FA019191AF018D91981731F09F0121508C +:103870003109F90180831B2DAC15BD0589F78091B5 +:10388000A2029091A3020E94E61A893E934060F141 +:103890006091FB02E62EF12C662777276E197F09CF +:1038A000072E000C880B990B0E94E13527EA39E7B7 +:1038B00047E45DE30E94AE364B015C01B701FF0CAB +:1038C000880B990B0E94E1359B01AC01C501B40145 +:1038D0000E942D350E94B0356093FB020E94F51ABC +:1038E0009093A3028093A2028091A602882371F094 +:1038F0008091A4029091A5020E94E61A893E93400D +:1039000028F082EE0E94720C1092A602812F31CF15 +:103910008091A0029091A1020E94E61A843F9140FA +:1039200008F05ECFE091F102F0E0E55CFC4FD801D9 +:1039300011921D92AC15BD05D9F71B2DA0CF80911A +:10394000E0028F3F31F08F5F8093E0028A3008F40D +:103950007FCF0E94F51A9093A1028093A002E2CF3C +:10396000F0E0E55CFC4FF89485E0AAEBB2E0019052 +:103970000D928A95E1F765E070E08AEB92E00E9493 +:1039800047098093B9020E94100AF894E091F90265 +:10399000F0E0EA50FD4F80818B878093C00261E0A8 +:1039A00070E0C8010E9447098093BF020E94100A7C +:1039B000F894C090C102D090C202E090C302F0908F +:1039C000C4028091A7029091A802A091A902B0918F +:1039D000AA02C816D906EA06FB06D1F0C092A702D1 +:1039E000D092A802E092A902F092AA020E94460E8A +:1039F00081110EC00E94F808C61AD70AE80AF90A0F +:103A0000C092E102D092E202E092E302F092E4027C +:103A10000E94100AF8948091CC02882321F184FF3F +:103A200004C09091CD029093480380FF0DC0809117 +:103A3000C50280FF2CC090915E04916090935E045B +:103A400060E086950E94B4158091CC0281FF09C088 +:103A500020E04091C8026091C7028091C6020E9496 +:103A60009D141092CC020E94100AF8948091CE020C +:103A70008093FB020E94100AF8948091CF02882361 +:103A800049F00E947B0D0E94100A80E072CE0E94D5 +:103A90008E0FDACF0E94600DF6CF5F926F927F9209 +:103AA0008F929F92AF92BF92CF92DF92EF92FF924E +:103AB0000F931F93CF93DF9300D000D00F92CDB719 +:103AC000DEB76C01FC0183819481892B31F0808108 +:103AD000918189238F3F09F082C50F900F900F903D +:103AE0000F900F90DF91CF911F910F91FF90EF906A +:103AF000DF90CF90BF90AF909F908F907F906F900E +:103B00005F9008950E941014182F682F89819A8160 +:103B10000E941F0C69817A81812F0E9403148C01FD +:103B2000F6018281882309F463C0C801905681158B +:103B3000F0E29F0750F0905E811520E1920728F097 +:103B4000915C81159F4108F0A5C0C80199279C018F +:103B5000245031092432310520F08B970E9708F05C +:103B600047C08091A2029091A3020097D9F10E94D0 +:103B7000E61A9C0150E040E060E67AEE80E090E0DA +:103B80000E94AE31CA01B90125E030E040E050E0CA +:103B90000E94AE31E090FB022F3F310519F010F08A +:103BA0002FEF30E0F12C2E193F09B90190E080E0B1 +:103BB0000E94DF3527EA39E747E45DE30E94AE362D +:103BC0000E9499354B015C01B701FF0C880B990BE2 +:103BD0000E94E135A50194010E942D350E94B03567 +:103BE0006093FB020E94F51A9093A3028093A202B5 +:103BF000F6018281882309F4E6C4C80182519F45F9 +:103C0000409708F071C48FEF93E00E94E4340251B2 +:103C100097E5A92E92E0B92E81115FCF011143C023 +:103C20001C821B82662463948AE0582E85010F5FF4 +:103C30001F4FC5010E94E43489831A82882309F446 +:103C40004CCF9FEF980F9330E8F58A83698232E07A +:103C5000A30EB11CC8010E94E4348B83882309F4AD +:103C60003CCF8E010F5F1F4FF80120812223F1F21C +:103C7000213009F061C091818281913029F50E5F78 +:103C80001F4F6AE070E0893311F460E570E00E9434 +:103C9000790E20C090E080E00F3F110511F008F090 +:103CA00056CFC80154CFA114F4E0BF0609F415CFD4 +:103CB000C5010E94E434811101C001502FEFA21A06 +:103CC000B20AACCF5801CDCF923039F40E5F1F4FFE +:103CD0000E94AB0C0F5F1F4FC7CF933029F40E5FCC +:103CE0001F4F0E94720CF6CF943019F00F5F1F4FD8 +:103CF000F1CF0E5F1F4F30E020E0B8016F5F7F4FC4 +:103D0000F80141818053990B8A30910550F0215080 +:103D1000310900F38FE99FE00197F1F700C000003F +:103D2000F6CF529EF001539EF00D11249C012E0FF0 +:103D30003F1F842F8B01E1CFE22FF0E0EA54FE4FCA +:103D40007490822F86958695869590E0FC01EA55C1 +:103D5000FE4FE4902770F12C022E02C0F594E794F8 +:103D60000A94E2F7E1E0EE22FF24FC01EA56FE4F5E +:103D7000C490D12C022E02C0D594C7940A94E2F7C5 +:103D8000F1E0CF22DD24FC01EA57FE4F8490912C14 +:103D900002C0959487942A95E2F721E08222992423 +:103DA000E114F10419F081EE0E94AB0CC114D104AE +:103DB00019F086EE0E94AB0C39E36AE070E07312F2 +:103DC00002C060E570E0872D0E94790ECD2819F0C1 +:103DD00086EE0E94720CEF2819F081EE0E94720CA0 +:103DE000892809F477CF6AE070E08CE250CF81E057 +:103DF0000E94B71603C081E00E94AB160F900F908F +:103E00000F900F900F90DF91CF911F910F91FF9026 +:103E1000EF90DF90CF90BF90AF909F908F907F906A +:103E20006F905F900C94A01682E0E2CF013E1105E6 +:103E300009F49AC0043E110509F07CC3882309F4F3 +:103E4000CEC081E08093FC0275C30238FFE51F07F6 +:103E500009F459C000F500383FE51307B9F10138FE +:103E60004FE5140709F066C3882309F445C0809123 +:103E7000A602811106C081E08093A60282EE0E9414 +:103E8000AB0C0E94F51A9093A5028093A40281EED8 +:103E90000E94AB0C2DC003385FE5150709F447C03D +:103EA00004389FE5190709F045C3882309F482C047 +:103EB00080914302882309F45AC0809144020E94F1 +:103EC000720C80EE0E94AB0C8AE25EC08823B9F0CF +:103ED0008091A602811106C081E08093A60282EE45 +:103EE0000E94AB0C0E94F51A9093A5028093A40245 +:103EF0008BE20E94AB0C1EC381EE0E94720C8BE21F +:103F00000E94720C17C3882309F414C381EE0E9427 +:103F1000AB0C83EE0E94AB0C8FE40E94AB0C8FE4E1 +:103F20000E94720C83EE0E94720C81EEE9CF88230E +:103F300009F400C381EE0E94AB0C83EE0E94AB0C2F +:103F400080E50E94AB0C80E5EBCF80934602109396 +:103F5000450200934402882321F081E08093FD0212 +:103F6000E9C21092FD02E6C280934302F0CF809135 +:103F70004602882309F4A8CF809144020E94720C63 +:103F800080EE0E94AB0C8CE40F900F900F900F907E +:103F90000F90DF91CF911F910F91FF90EF90DF90E5 +:103FA000CF90BF90AF909F908F907F906F905F90D9 +:103FB0000C94AB0C8AE20E94720C8CE40E94720C8E +:103FC00080EE0E94720C80914302811105C08091A5 +:103FD0004602882309F481CD80914402D5CF109206 +:103FE000FC02A8C2882331F081E08093FF02109286 +:103FF0006E01A0C21092FF029DC2073C2CE5120781 +:1040000009F4AEC008F4A7C0083C4CE5140709F455 +:10401000ACC0093C1C4509F0ADC240E555E16CE57A +:1040200075E179C0043DECE51E07A8F40E3CFCE503 +:104030001F0708F052CD0C3C2CE5120709F49FC075 +:1040400042E955E163EA75E10D3C1C4508F463C0A3 +:1040500061E081E046C0053D4CE5140709F43DCD23 +:1040600008F492C00D351D4509F437CD83C2809107 +:104070005E0480FF31C08E7F80935E0460915E0499 +:1040800070915F0480916004909161040E948B1490 +:10409000809147038160809347039FEFE0E7F2E060 +:1040A0009150E040F040E1F700C000000F900F9009 +:1040B0000F900F900F90DF91CF911F910F91FF9074 +:1040C000EF90DF90CF90BF90AF909F908F907F90B8 +:1040D0006F905F900C948E0E816080935E0461E01F +:1040E00086950F900F900F900F900F90DF91CF91CA +:1040F0001F910F91FF90EF90DF90CF90BF90AF9006 +:104100009F908F907F906F905F900C94B41542ECCD +:1041100056E16BEC76E10F900F900F900F900F909F +:10412000DF91CF911F910F91FF90EF90DF90CF9093 +:10413000BF90AF909F908F907F906F905F900C9406 +:104140005D094BEC56E162EC76E1E5CF40E855E1E4 +:1041500069E875E1E0CF49E855E160E875E1DBCF5A +:1041600048E655E164E775E1D6CF44E755E168E6F6 +:1041700075E1D1CF4CE555E160E575E1CCCF43EA7F +:1041800055E162E975E1C7CF0F900F900F900F9046 +:104190000F90DF91CF911F910F91FF90EF90DF90E3 +:1041A000CF90BF90AF909F908F907F906F905F90D7 +:1041B0000C94D5160E3D1C4509F0DCC10F900F90F4 +:1041C0000F900F900F90DF91CF911F910F91FF9063 +:1041D000EF90DF90CF90BF90AF909F908F907F90A7 +:1041E0006F905F900C94FC16C8010E94F70BF82E9C +:1041F000CFC1092F0F70907F11F00295007F812FA2 +:104200002223C9F0002369F090E2910F983010F05A +:1042100011110BC080914604082B009346040E94A4 +:10422000D60B812F0E94AB0C17C080919B02082BEC +:1042300000939B02F4CF0E94720C002369F000955A +:10424000105E183010F0B11027C08091460408238A +:10425000009346040E94D60B98E0E91AF108E4E0C6 +:10426000EE16F10408F039CC0E94690E0F900F9001 +:104270000F900F900F90DF91CF911F910F91FF90B2 +:10428000EF90DF90CF90BF90AF909F908F907F90F6 +:104290006F905F900C94091680919B020823009305 +:1042A0009B02D8CF892F8F70907F903211F082952A +:1042B000807FF1E0BF120CC0222329F0333060F67A +:1042C0000E94680CC9CF323038F60E945D0CC4CF12 +:1042D000222341F03323A1F340FFA3CF4F70F60117 +:1042E0004583EECF332389F3193309F0F5C0FFEF8F +:1042F00027EE33E0F15020403040E1F700C00000ED +:10430000812F0E94720CA8CF892F86958695837085 +:1043100061F0813009F0A0CF812F9370211102C08C +:1043200090E080E00E94040997CF812F93702111C3 +:1043300002C090E080E00E941A098ECF892F83701E +:10434000A1F5211189CF812F829586958770880FDD +:10435000880F412F4F70082E01C0440F0A94EAF7CE +:10436000212F207114FF07C02FE030E001C0220F81 +:104370008A95EAF72095969596959370923081F0FC +:10438000822F842B933030F480919C02913029F05D +:10439000242B82230E94590C5FCF842B822BFACFCF +:1043A000242B80919C028227F5CF8695222311F041 +:1043B000892F8170882309F44FCF812F82958695AC +:1043C0008770880F880F412F4F70082E01C0440F4F +:1043D0000A94EAF7212F207114FF07C02FE030E084 +:1043E00001C0220F8A95EAF72095969596959370CD +:1043F000923081F0822F842B933030F480915D04D1 +:10440000913029F0242B82230E949A1625CF842BE9 +:10441000822BFACF242B80915D048227F5CF092FC0 +:104420000F70222329F0802F0E94B716812F48CFCA +:10443000812F0E945D0C802F0E94AB160DCF812F23 +:10444000E1EF1E1789F1E11750F0F0EF1F17B9F0F7 +:104450002223B1F13111E5CE892F8F7129C042EFAE +:10446000141749F153EF1513F3CF80E0222361F2C3 +:104470009F7181E001C0880F9A95EAF7C5CF22238A +:1044800079F0323008F0E8CE292F2F7181E090E0EA +:1044900001C0880F2A95EAF790915D048927B4CF6F +:1044A000333008F0D9CEF0CF892F8F71222321F23B +:1044B0000E94B716D1CE892F8F712223C9F3BCCFAA +:1044C000332379F0893341F48FEF97EEE3E08150A5 +:1044D0009040E040E1F712CF8FE39CE90197F1F7BC +:1044E0000DCF892F8F71A8CF0031FFE51F0709F489 +:1044F0007ECC01312FE5120709F496CC0E94F80812 +:10450000609304037093050380930603909307035D +:10451000F6018281053E110509F417CD08F095CC0E +:10452000003E110509F48ACC08F080CC0C3211054C +:1045300009F458CDF601928191113CCE8091460448 +:1045400082720A3CFCE51F0709F414CE08F06ACD1C +:10455000053C3CE5130709F4F9CD08F04ECD033CCA +:104560005CE5150709F4D3CD08F0EBCD023C1C4502 +:1045700009F47DCDF60100811181992309F434CE2F +:10458000C8010E941014F82E682FC8010E941F0C49 +:10459000B8018F2D0E9403140E946C0A182FB82EA8 +:1045A000F60122814581342F32953F70892F829503 +:1045B0008F70E82EF12C8C3008F04ECEF701EB5CBA +:1045C000F84C0C94CD3100313FE5130709F413CCBE +:1045D00001314FE5140709F09BCF82E00DCC85E057 +:1045E000DE01119601900D928A95E1F7F601228184 +:1045F00089819A81211186CA0E94F70B182F8ACAD5 +:104600001F93CF93DF9380916702807FA9F48091FD +:104610006402882389F080919902D09168026091A8 +:10462000620270916302A0916502B0916602C62F8A +:10463000C72316E0D81304C0DF91CF911F910895CE +:1046400090E0109711F0CF3F19F401968770F2CFE8 +:10465000189F9001199F300D1124F901E759FD4F62 +:1046600041814713F2CF40814613EFCF4281411180 +:10467000ECCF438154814A1B5B0B403A510528F72C +:10468000809167028F70806180936702F901E2591F +:10469000FD4F80818F708061808382E692E00E946E +:1046A0004D1DDF91CF911F910C94ED0BAF92BF92F6 +:1046B000CF92DF92EF92FF920F931F93CF93DF93EE +:1046C000CDB7DEB761970FB6F894DEBF0FBECDBF92 +:1046D0008C0185E0F801DE011D9601900D928A950E +:1046E000E1F7F801E28082E6A82E82E0B82E609120 +:1046F0006502709166026115710509F432C19091ED +:10470000620240916302892F84238F3F09F429C1FB +:1047100020813181C380D480F0906402F601E61BD1 +:10472000F70BFF2009F4E8C080916702582F507FF3 +:10473000E03AF10508F0ABC0511177C0FE2C4313ED +:1047400021C092131FC0E1101DC08F708061809343 +:104750006702C5010E944D1D80916702F8018583A3 +:104760008F2D61960FB6F894DEBF0FBECDBFDF91DF +:10477000CF911F910F91FF90EF90DF90CF90BF905E +:10478000AF900895CD2829F0822F83238F3F09F021 +:1047900003C180E0F82FF170DF2E80FF3CC08091D4 +:1047A00099024091680256E0841315C02D873E8718 +:1047B0008D859E850E943F14292F22952F702230CF +:1047C000F0F0243018F59F70F1F0F8019581907F9A +:1047D000D1F4D12C1EC090E0589FF001599FF00DEC +:1047E0001124E759FD4F6181361306C060812613FD +:1047F00003C06281E6120FC001968770D5CF9F700B +:1048000011F0882331F3805E883018F3C8010E94CC +:104810004D1DFD2CA5CFEE2009F4A2CF809167029B +:10482000816080936702F12C9BCF431306C09213E3 +:1048300004C0F801EE2009F479C0C8010E944B14AD +:10484000882309F1EE20F9F080916702803270F040 +:10485000209162023091630238872F831986DB86AC +:10486000CA868C87CE0107960E944D1D86E0F8010E +:10487000A2E6B2E001900D928A95E1F70E94002332 +:10488000FF24F3946DCFC8010E944D1DF9CF511143 +:104890000AC082E692E00E944D1D86E0F501119269 +:1048A0008A95E9F7C0CF43130FC092130DC0E110F2 +:1048B0000BC0F8018583C8010E944D1D86E0F501FB +:1048C00011928A95E9F74CCFC8010E944B148823B6 +:1048D000D1F2EE20C1F280916702803238F220914D +:1048E0006202309163023A8329831B82DD82CC828B +:1048F0008E83CE010196B8CFE03AF105F8F6FE2C92 +:10490000EE2009F243131FC092131DC0809167026D +:1049100080FD10C0982F907F69F0F8018583903F4B +:1049200031F0982F907F905F8F70892B8583C8011D +:104930000E944D1D86E0F801A2E6B2E001900D92C2 +:104940008A95E1F70DCFC8010E944B1481118ECFDB +:1049500080916702816080936702C8010E944D1DAB +:10496000FFCEEE2009F48FCFC8010E944B14F82E21 +:10497000882309F488CF86E0F801A2E6B2E001902E +:104980000D928A95E1F780916202909163020E94F4 +:104990003F140E940023E4CE81E08E25FBCE1F93BE +:1049A000CF93DF93CDB7DEB767970FB6F894DEBF2E +:1049B0000FBECDBF4B8B5C8B6D8B7E8B8F8B611154 +:1049C00010929B021A8A198A85E0FE017396DE0115 +:1049D0001D9601900D928A95E1F786E0FE013D96C5 +:1049E000DE01179601900D928A95E1F7CE010796A8 +:1049F0000E945623882389F016E0809199029091B5 +:104A0000680289134BC067960FB6F894DEBF0FBEDD +:104A1000CDBFDF91CF911F91089586E0FE013796BB +:104A2000DE01119601900D928A95E1F78A859B85AA +:104A3000892B11F38F81988589238F3FE9F220918B +:104A4000680230E0C9010196877099274091990268 +:104A50004817190681F4109246040E94A30F109281 +:104A600068021092990286E0E2E6F2E0DF011D9210 +:104A70008A95E9F7C1CF96E0929FD001939FB00D40 +:104A80001124A759BD4FFE01319601900D929A95C0 +:104A9000E1F7809368020E94ED0BAECF819FC001C9 +:104AA000112487599D4F0E945623882309F4ABCFC8 +:104AB0008091990290E001968770992780939902DE +:104AC0009CCF0F931F93CF93DF93CDB7DEB7A897FB +:104AD0000FB6F894DEBF0FBECDBF81114DC006E00A +:104AE000662359F10CA311E01DA31EA30E94F51A21 +:104AF0008160782F98A78FA34CA15DA16EA188A596 +:104B00000E94CF240F8F18A319A20E94F51A81606A +:104B1000782F9BA38AA34F8D58A169A18BA10E94D6 +:104B2000CF2481E0A8960FB6F894DEBF0FBECDBFAC +:104B3000DF91CF911F910F9108950A8F13E01B8F82 +:104B400081E08C8F0E94F51A8160782F9E8F8D8F67 +:104B50004A8D5B8D6C8D8E8D0E94CF240D8B1E8BAC +:104B60001F8A0E94F51A8160782F998F888F4D894E +:104B70005E896F89898DD3CF813099F66623F1F0F4 +:104B800016E0188B198B8A8B0E94F51A8160782F9A +:104B90009C8B8B8B488959896A898C890E94CF2488 +:104BA0001B871C871D860E94F51A8160782F9F87BE +:104BB0008E874B855C856D858F85B1CF06E00E8332 +:104BC00018E01F8388870E94F51A8160782F9A87E2 +:104BD00089874E815F8168858A850E94CF240983F9 +:104BE0001A831B820E94F51A8160782F9D838C8323 +:104BF00049815A816B818D8192CFCF92DF92EF9262 +:104C0000FF920F931F93CF93DF930F92CDB7DEB731 +:104C1000EE24E394F12C00EC12E09E012F5F3F4F55 +:104C200045EB52E063E082E00E94B018082F882331 +:104C300021F1C090F4028C2D90E09C012A503D4F50 +:104C400079011981F9018081181BD12E80E00AC0F9 +:104C5000DA94F70180818F5F808360E08C2D0E9461 +:104C60006125802F1D14A4F3912F17FD90E0191BCF +:104C700011110EC081110E94D40B802F0F90DF9173 +:104C8000CF911F910F91FF90EF90DF90CF900895FB +:104C90001F5FF70180818150808361E08C2D0E942D +:104CA0006125802FE5CF1F921FB61F9211248F938D +:104CB0009F93AF93BF9380913D04811113C0809166 +:104CC0003E0490913F04A0914004B091410441966C +:104CD000A11DB11D80933E0490933F04A093400416 +:104CE000B0934104BF91AF919F918F911F901FBED0 +:104CF0001F901895CDB7DEB7E0970FB6F894DEBFDA +:104D00000FBECDBF84B7877F84BF0FB6F894A89538 +:104D100080916000886180936000109260000FBEF7 +:104D200080E890E00FB6F894809361009093610062 +:104D30000FBE85B7806885BF85B7806885BF8EE068 +:104D40009AE090933902809338020E946A070E9489 +:104D500035088091E20084608093E200789480912D +:104D600053048823A1F01091E9001F709091EC008A +:104D7000892F817090FD80E8182B1092E9008091B6 +:104D8000E80083FD0E94AC0F1F701093E90082E0E1 +:104D900084BD93E095BD9AEF97BD80936E0010920D +:104DA000E1021092E2021092E3021092E4020E94E9 +:104DB0007214811102C00E94CE130E94460E80938D +:104DC000610180916101882309F4C6C010927601C7 +:104DD00085E2809377010E94460E81110E94B92FCF +:104DE0008091610181112FC0FE01359686E0DF01BF +:104DF0001D928A95E9F786E6898387E98A8386EC9E +:104E00008B8384E38C8385E38D833497A7E5B1E0BE +:104E1000CE010B9621912D938E179F07D9F787E02E +:104E2000ECE7F1E0DE01919601900D928A95E1F7B1 +:104E3000FE01B196A0E5B1E0CE01889621912D93B7 +:104E40008E179F07D9F78091610195E0811190E05D +:104E50009093F20285E0891B8093F10207E511E04F +:104E6000FCE5EF2EF1E0FF2EF80181918F018F3FDD +:104E700011F00E94120AE016F106B1F700E511E008 +:104E8000E7E5EE2EE1E0FE2ED8018D918D018F3FFA +:104E900011F00E94120AE016F106B1F7E7EEF2E017 +:104EA00081EF92E0ABE3B3E011921D928E179F0762 +:104EB000D9F70E949C19811102C00E94FC1682E061 +:104EC00090E00E94E4348093300384E090E00E94FC +:104ED000E434182F82E290E00E94E434982F812F6E +:104EE0009093E6028093E5020E94011BEFE7FBEB43 +:104EF0003197F1F700C000000E94011B80913B0335 +:104F000080FF2EC06FEF7FEF90E080E00E941635AB +:104F100081E08093E00080E28093D8001092C90085 +:104F20008FE19EE40197F1F700C0000087E090EB6D +:104F3000DC018093670690936806A0936906B0939E +:104F40006A0688E19CE00FB6F894A895809360000B +:104F50000FBE90936000FFCF85E28093760139CF3A +:104F600083E090E00E94E4340E94590C80915D043B +:104F70000E9421160E94460E811102C00E94BC2F81 +:104F800083E080932B0380E280932A040E94512EB9 +:104F90006DE070E089E492E00E94300D892BE9F524 +:104FA00080912B0363E070E081FDFFC186E492E015 +:104FB0000E94300D892B89F56DE070E086E392E068 +:104FC0000E94300D892B49F50E94F8086058774CF3 +:104FD0008E4F9F4F6093310470933204809333045B +:104FE00090933404E5E6F4E080E092E0DF019C0178 +:104FF0001D9221503040E1F7F0936606E09365067C +:105000008FEF9FEF909364048093630481E080931B +:1050100036048093350410922C038091F3028111A1 +:1050200036C00E949C19811104C00E94FC160E9487 +:10503000E41688E090E00E94EC3460935E04709384 +:105040005F048093600490936104809147038360C0 +:10505000809347036E7F71F40E94E41688E090E02D +:105060000E94EC3460935E0470935F04809360044C +:10507000909361040E94620980915E0480FF04C0E5 +:1050800060E086950E94B41581E08093F3028091E0 +:105090006101811106C084EF80936D0185EF8093DB +:1050A0006C0120916D01A22FA295AF70B0E0919696 +:1050B0003C9191972F7081E090E0BC01022E01C0DD +:1050C000660F0A94EAF7462F4095432391964C9336 +:1050D000919792963C919297362B92963C93929709 +:1050E00040916C01E42FE295EF70F0E031A14F7038 +:1050F000042E01C0880F0A94EAF7982F9095932305 +:1051000091A392A1892B82A390968C9190E002C0EA +:10511000959587952A95E2F7817020A130E002C02D +:10512000359527954A95E2F792E020FF90E0892B8C +:105130008093FA029091610181E098279093F9029F +:10514000891B8093F40286E592E090934B03809351 +:105150004A0360E08AE00E94B41581E00E949A163A +:1051600082E691E090933A048093390470E4672ECC +:10517000CE0101967C0180915304DD24D39400E19B +:1051800012E1853009F45EC10E94011BC82E811115 +:105190000E94F808E1E3F3E0ABE3B3E010E000E0E5 +:1051A000902EBD9081918B1509F476C18B25A12C91 +:1051B000DD24D3949D2D982309F469C10E94460EE5 +:1051C000882399F0A9A29AA2BD2081E009F480E089 +:1051D0008BA30E94F51A8160782F9DA38CA349A10F +:1051E0005AA16BA18DA10E94CF24F801EF5CFC4F66 +:1051F0008081D826D0828091FA02E82FEE0FEE0F40 +:1052000090916D01A92FA295AF70B0E090962C916E +:1052100030E09F7002C0359527959A95E2F721708E +:10522000332790916C01A92FA295AF70B0E09096B2 +:105230004C9150E09F7002C0559547959A95E2F7C2 +:10524000CA018170992740FF02C082E090E0822B62 +:105250008E2B8093FA021091F9028F70E82FF0E004 +:10526000EC5FFD4F80819091F802890F8093F802E6 +:10527000D12C84306CF0E12FF0E0EA50FD4F8081BA +:105280008F5F808360E0812F0E946125DD24D394AD +:105290008091F8028D3F6CF4E12FF0E0EA50FD4F71 +:1052A00080818150808361E0812F0E946125DD240F +:1052B000D3948091F802082E000C990B64E070E002 +:1052C0000E949A318093F802D1100E94D40B8091F1 +:1052D0003604882351F180912D0390912E030E9472 +:1052E000E61AC29708F0EFC020916304309164047D +:1052F0002115310509F049C2809135048823A9F0B0 +:105300000E94F80800913104109132042091330476 +:1053100030913404601B710B820B930B6F3F7F4FF6 +:105320008F4F9F4710F40E94600DC11001C0D11033 +:105330000E947B0D0E94690E90912F03891731F016 +:105340000E94690E80932F030E94091680915304D6 +:10535000843009F010CF83E08093E9008091E80069 +:1053600082FF09CF8091E80090E085FF0CC00E9489 +:10537000890730E2C32ED12C8E010F5F1F4F882387 +:1053800009F4E2C291E08091E8008B778093E80015 +:10539000992309F4F0CEE981E150E33108F036C3F6 +:1053A000F0E0EF5BF84C0C94CD3183E492E000CE5A +:1053B00080915304843009F435C00E94600D80E070 +:1053C0000E94091680914903811109C0D0924903B6 +:1053D00080915E0481708093F5020E948E0F10927E +:1053E0003D04A8E1B0E00FB6F894A895A093600042 +:1053F0000FBE6092600083B7817F846083BF83B7F4 +:10540000816083BF7894889583B78E7F83BF0FB602 +:10541000F894A89580916000886180936000109254 +:1054200060000FBE80915204882361F00E94011B2E +:10543000EBE3F3E08191811113C425E433E02E17EF +:105440003F07C1F780915304853009F4B1CF109222 +:1054500046040E94A30F0E94690E0E940916109232 +:1054600049038091F502882351F080915E048160A8 +:1054700080935E0460E086950E94B41585CE80918D +:105480004803882309F480CE0E948E0E7DCEA3941B +:10549000DD0C37E0A3128ECE0F5F1F4F0A301105CF +:1054A00009F07ECE8FEF88A789A71AA60E94F51A69 +:1054B0008160782F9CA78BA748A559A56AA58CA5C4 +:1054C0000E94CF2498CE0E94F51A90932E038093C9 +:1054D0002D0360E080E00E9430098091FB0290E0A3 +:1054E00090930A03809309030E94690E8093080336 +:1054F0000E94460E882331F1409104035091050328 +:1055000060910603709107032FB7F89480913E04D1 +:1055100090913F04A0914004B09141042FBF841B9F +:10552000950BA60BB70B81339547A105B10540F04C +:105530000E94600D80913604882309F4DDCED4CE1C +:105540000E947B0D0E94460E62E0882309F4DEC0B3 +:1055500080E00E94300960E083E891E00E9434130B +:1055600063E080E00E94300980915D040E941F0D7D +:10557000813009F497C0882309F48EC0823009F481 +:1055800099C0833009F492C066E080E00E9430093F +:1055900060E081EA91E00E94341367E080E00E94BD +:1055A0003009609108036695617086EA91E00E9477 +:1055B000341368E080E00E94300960910803609530 +:1055C00061708BEA91E00E94341369E080E00E94F0 +:1055D00030096091080362FB662760F98FEA91E069 +:1055E0000E94341340910003509101036091020323 +:1055F000709103032FB7F89480913E0490913F047B +:10560000A0914004B09141042FBF841B950BA60BC1 +:10561000B70B8D329140A105B10508F48BCF0E94E4 +:10562000F808609300037093010380930203909342 +:1056300003038091FF02811104C080916E018111EA +:105640003DC06FE080E00E94300960E084EB91E0B3 +:105650000E9434136CE080E00E94300981E0809366 +:105660006E018091FE0290E00196817099278093EF +:10567000FE0221E030E0281B390B40E6429FC001CA +:10568000439F900D11242091FD02222329F18A5974 +:105690009A4F0E9427074ECF60E089E891E00E9470 +:1056A000341372CF60E08FE891E0F9CF60E085E9D4 +:1056B00091E0F5CF60E08BE991E0F1CF6CE080E024 +:1056C0000E94300960E084EB91E00E9434136DE0A9 +:1056D00080E00E943009C5CF2091FC02222319F0FE +:1056E0008A559B4FD6CF2091090330910A032B3066 +:1056F00031051CF48A519C4FCCCF293231051CF462 +:105700008A5D9C4FC6CF8A599D4FC3CF80E00E94CF +:10571000300960E08AEB91E00E94341363E080E09E +:105720000E94300960E080EC91E00E94341367E051 +:1057300080E00E94300986E296E00E9427076DE033 +:1057400080E00E94300980910A038F9380910903C1 +:105750008F9386EC91E09F938F93FF92EF920E943C +:10576000523260E0C7010E9434136EE080E00E9474 +:10577000300960E08CEC91E00E9434130F900F90A0 +:105780000F900F900F900F90D5CE80912C0361E079 +:1057900070E08111B1CD482E512C1B01082E02C0A2 +:1057A000220C331C0A94E2F7A90142215321452B14 +:1057B00009F448C090912B0390FD46C08295880F54 +:1057C00080768093710192013695279536952795BD +:1057D00020937401815E809372011092750124E61A +:1057E00030E047E050E06FE671E088E70E94002F6C +:1057F000892B09F081CD55E0440C551C5A95E1F7F1 +:1058000080912B0380FD2EC0A2014B595B4F04E613 +:1058100010E020E230E060E488E70E94272F892B27 +:1058200009F06ACD0E947B0DC10180959095209072 +:105830006304309064042822392230926404209258 +:1058400063045ACD8F5FA7CF880F880F880F80938E +:10585000710110927401895F8093720183E08093DB +:105860007501BDCFEBE0F3E080E2DF011D928A9588 +:10587000E9F7E8E1F2E0F8ABEFA764E172E047E0B6 +:10588000A42E99249394AFA5B8A94D91B8ABAFA716 +:10589000FB018191BF01840D952D911D9C012B5918 +:1058A0003B4F3EA72DA7E42FF0E0E55FFC4F30E033 +:1058B00020E07A2C721AB92C022E01C0BB0C0A947B +:1058C000EAF70DA51EA590E0D8018D918D018B21E1 +:1058D000472D491B4770842E042E000C550BB82F02 +:1058E00001C0BB0F8A94EAF78B2E5195419551095F +:1058F0004770552701C086954A95EAF7882A808126 +:10590000882A80829F5F9830F9F62F5F3F4F31964B +:105910002830310571F6ECE1F2E02FA538A9E21745 +:10592000F30709F0B0CF04E610E020E230E04BE0EE +:1059300053E071CF8091F100D8018D938D01B1E0DA +:10594000CB1AD10809F41ECD8091E80085FDF2CF75 +:105950008091E8008B778093E8000E948907882374 +:1059600099F310CD1A8289E08B8311C08A8182302D +:1059700009F48EC1833089F1813009F047C00E945B +:10598000F8080E94D3316B837C838D839E83809142 +:105990005304843009F0EFCB1091E9001F7090910F +:1059A000EC00892F817090FD80E8182B82E08093B5 +:1059B000E9008091E80080FF0CC050E040E060E228 +:1059C00070E0C7010E94BA078091E8008E7780934B +:1059D000E8001F701093E900CECBDE011396EBE3D5 +:1059E000F3E081918D9323E0E534F207D1F7CFCF37 +:1059F0008A81823059F46B817C818D819E810E94E5 +:105A0000D33186E290E00E94F834C1CF8FEF8983D2 +:105A1000BECF4C816B818A810E94DD139827892734 +:105A200098279E838D83B3CF0D811E811027012778 +:105A300010278A81CB803EE0C39E600111249CE840 +:105A4000899FC00CD11C11248C8190E0880F991F74 +:105A5000C80ED91E612FC60187960E94F834602FA8 +:105A6000C6018896D0CF0E94601391CF8A81813879 +:105A7000C1F060F4803809F08ACF20E04B8160915A +:105A8000600480915F040E949D1481CF8238E9F008 +:105A9000833809F07CCF20E0409161046C818B81D8 +:105AA000F2CF60E08B810E94B4158B81811103C01D +:105AB0000E948E0F6CCF80915E04816080935E04A3 +:105AC00060E086950E94B41562CF8B81809362045A +:105AD0005ECF8A81813899F030F4803809F057CF51 +:105AE0008091610441CF823891F0833809F04FCF23 +:105AF00080915F048B83809160048C8348CF809178 +:105B00005E0480FF02C086952FCF80E02DCF80916C +:105B100062042ACF60915E0470915F0480916004FA +:105B2000909161040E948B1432CF80E18A832FCF41 +:105B300081E08A8389EA18CFAA80BB80BA24AB248B +:105B4000BA248E010F5F1F4FCC80C00ED12ED11C06 +:105B5000C501895A9D4F0C151D0509F418CFA9EAF6 +:105B6000AA16A1E0BA0650F40E94E434F801848336 +:105B7000BFEFAB1ABB0A0F5F1F4FEACFD8011496D5 +:105B80001C92F6CF0A811B81102701271027FE01E6 +:105B900031965F01CC80C00ED12ED11CC801895A2C +:105BA0009D4FC016D10609F4F2CE093AF1E01F0765 +:105BB00028F4D50114966C910E94F834BFEFAB1A0B +:105BC000BB0A0F5F1F4FEACF0E945013E0CE84E064 +:105BD000ADCFAA80BB80BA24AB24BA248E010F5F5C +:105BE0001F4FCC80C00ED12ED11CC5018796C01688 +:105BF000D10609F4CCCEE0E3AE16E2E0BE0658F4DE +:105C00000E94E434D80114968C93FFEFAF1ABF0AB8 +:105C10000F5F1F4FEACFF8011482F7CF0A811B8173 +:105C20001027012710279E012F5F3F4F5901CC807D +:105C3000C00ED12ED11CC8018796C016D10609F41A +:105C4000A6CE003332E0130728F4D50114966C91E8 +:105C50000E94F834BFEFAB1ABB0A0F5F1F4FEBCFA8 +:105C600009BD19BD09B400FEFDCF8091D8008F7D1C +:105C70008093D8008091E00082608093E000809162 +:105C8000E00081FDFCCF109246040E94A30FDACB06 +:105C900086E290E00E94E4341B821C821D828E8387 +:105CA00076CE1092B9008CE08093B80008959F9250 +:105CB000AF92BF92CF92DF92EF92FF920F931F931A +:105CC000CF93DF93B82EEB010E94F51A6C01EE24FE +:105CD000E394F12CC431D10560F025E0E22EF12CE3 +:105CE000CF3FDC0731F0CE0164E170E00E947A31F1 +:105CF0007B0184EAA82E94E8992E1092BC00A09211 +:105D0000BC000E94F51A8C018091BC0087FF0DC079 +:105D10008091B900887F883039F18091B900887FFF +:105D2000803111F10FEF1FEF09C00E94F51A801B9F +:105D3000910B8E159F0540F30EEF1FEFCF3FDC0751 +:105D4000E1F2C6010E94E61A8C179D07B0F2C80165 +:105D5000DF91CF911F910F91FF90EF90DF90CF9047 +:105D6000BF90AF909F900895B092BB009092BC00FE +:105D70000E94F51A8C018091BC0087FF0AC08091B7 +:105D8000B900887F883111F0803461F610E000E0BE +:105D9000DECF0E94F51A801B910B8E159F0558F3DC +:105DA000CBCF0F931F93CF93DF93EB018093BB0077 +:105DB00084E88093BC000E94F51A8C018091BC009D +:105DC00087FF11C02091B900287F81E090E0283240 +:105DD00011F490E080E0919581959109DF91CF9148 +:105DE0001F910F910895CF3FDC0741F30E94F51AF0 +:105DF000801B910B8C179D0708F38EEF9FEFEECF62 +:105E0000CF92DF92EF92FF920F931F93CF93DF9386 +:105E10006B018A017901B9010E94572EE6010C0D30 +:105E20001D1DC017D10761F424E92093BC00DF9148 +:105E3000CF911F910F91FF90EF90DF90CF90089539 +:105E400097FDF2CFB70189910E94D12EEACFCF9270 +:105E5000DF92EF92FF920F931F93CF93DF93C62FA2 +:105E60006A017901B8010E94572E97FD0CC0B80154 +:105E70008C2F0E94D12EE601EC0CFD1CCE15DF0507 +:105E800011F097FF0CC024E92093BC00DF91CF9163 +:105E90001F910F91FF90EF90DF90CF900895B80180 +:105EA00089910E94D12EEACF84E98093BC000895A5 +:105EB0008EE14A9B02C08150E1F74A9BFECF0895D4 +:105EC0005A9880E28A95F1F75A9A0895FC013BE0CE +:105ED0003A95F1F798E020E080E031E040E14A9522 +:105EE000F1F7880F4A9B02C08160232742E04A9560 +:105EF000F1F7000040E14A95F1F7915079F790E110 +:105F00009A95F1F799B132E03A95F1F7000040E146 +:105F10004A95F1F792FB992790F992272081920FE9 +:105F200090830895EF92FF920F931F93CF93DF9387 +:105F30000F92CDB7DEB719828C017C01E60EF11C01 +:105F40000E151F0561F481E09981911180E00F9099 +:105F5000DF91CF911F910F91FF90EF9008950E94D4 +:105F6000582FCE0101960E94662FF80181938F0170 +:105F7000E7CF529A5A9A089552985A9AEA9AE9E6BD +:105F8000F0E080818F7C808308956150770B91E0F1 +:105F900001C0990F6A95EAF720E031E0911108C03D +:105FA000222391F05A9A80E28A95F1F75A9808953F +:105FB000492F482339F05A9A232740E24A95F1F7AE +:105FC0009695ECCF5A98F9CF5A98EDCFFF920F9350 +:105FD0001F93CF93DF93EC018C01060F111DC017A7 +:105FE000D10731F4DF91CF911F910F91FF90089568 +:105FF000F9900E94602F68E08F2D0E94C52FEFCF8F +:106000001F920F920FB60F921124EF92FF920F93EF +:106010001F932F933F934F935F936F937F938F9330 +:106020009F93AF93BF93EF93FF93CF93DF930F9221 +:10603000CDB7DEB719820E94582FCE0101960E947B +:10604000662FA82FA695A695A695282F2295257090 +:106050009A2F9570290F922F937026952695920F5F +:10606000982797708981982B09F075C0A93008F09E +:1060700072C080E18A95F1F75A9A529AB2E0BA95C5 +:10608000F1F700C05A98EA2EF12CEAE0AE9FD00159 +:106090001124A050BF4F1896ED91FC91199730979D +:1060A000B1F0609102027091030216962D913C911D +:1060B0001797260F371F13968D919C911497680F91 +:1060C000791F15964C91159712968C9109958AE037 +:1060D0008E9DF0018F9DF00D1124E050FF4F6581E2 +:1060E000662351F02091020230910302868197814C +:1060F000820F931F0E94E62F0E94602FF0E1FA9515 +:10610000F1F75A9852985A9A80E18A95F1F78AE005 +:106110008E9D80018F9D100D112400501F4FD801BE +:1061200012966C911297662371F1209102023091C0 +:10613000030213968D919C91820F931F0E94922FC0 +:10614000D801ED91FC91882311F088E001C082E034 +:1061500080830E94582F0F90DF91CF91FF91EF9194 +:10616000BF91AF919F918F917F916F915F914F916F +:106170003F912F911F910F91FF90EF900F900FBEC5 +:106180000F901F901895ED91FC91DFCF0F931F9307 +:10619000CF93DF93EC0109970CF0A9C08AE08C9FA4 +:1061A000F0018D9FF00D1124E050FF4F808191810F +:1061B000892B09F49CC0F894529A5A9885E08A95E4 +:1061C000F1F700008C2F869585709C2F9570890FB4 +:1061D000982F937086958695890F8E0193E0000F16 +:1061E000111F9A95E1F7082B0E94602F00C068E00C +:1061F000802F0E94C52FA0E1AA95F1F752985A9AD4 +:106200004A9B27C087E090E04A9925C08AE08C9F8E +:1062100080018D9F100D112400501F4FF8016581E2 +:106220006623A1F1209102023091030286819781B9 +:10623000820F931F0E94922F811128C0529A5A9A5E +:10624000D801ED91FC9182E08083789482E090E027 +:1062500016C000C0D5CF0197B9F4529A5A9A8AE075 +:106260008C9FF0018D9FF00D1124E050FF4F0190A5 +:10627000F081E02D81E08083789481E090E0DF91EF +:10628000CF911F910F91089500C0BECF0E94582F4B +:10629000B0E2BA95F1F75A98529AE0E1EA95F1F72F +:1062A0008AE08C9FF0018D9FF00D1124E050FF4F8C +:1062B0006281662351F020910202309103028381B2 +:1062C0009481820F931F0E94E62F0E94602F8AE024 +:1062D0008C9FF0018D9FF00D1124E050FF4F019035 +:1062E000F081E02D1082789490E080E0C8CF84E0C7 +:1062F00090E0C5CFAA1BBB1B51E107C0AA1FBB1F63 +:10630000A617B70710F0A61BB70B881F991F5A9541 +:10631000A9F780959095BC01CD010895991B79E06E +:1063200004C0991F961708F0961B881F7A95C9F725 +:106330008095089597FB072E16F4009407D077FDFB +:1063400009D00E947A3107FC05D03EF490958195E2 +:106350009F4F0895709561957F4F0895052E97FB87 +:106360001EF400940E94C53157FD07D00E94DA3117 +:1063700007FC03D04EF40C94C531509540953095F0 +:1063800021953F4F4F4F5F4F0895909580957095A1 +:1063900061957F4F8F4F9F4F0895EE0FFF1F059020 +:1063A000F491E02D09946927962769277827872794 +:1063B00078270895A1E21A2EAA1BBB1BFD010DC070 +:1063C000AA1FBB1FEE1FFF1FA217B307E407F507A5 +:1063D00020F0A21BB30BE40BF50B661F771F881F81 +:1063E000991F1A9469F760957095809590959B0117 +:1063F000AC01BD01CF0108952F923F924F925F9261 +:106400006F927F928F929F92AF92BF92CF92DF92C4 +:10641000EF92FF920F931F93CF93DF93CDB7DEB729 +:10642000CA1BDB0B0FB6F894DEBF0FBECDBF0994BD +:106430002A88398848885F846E847D848C849B8414 +:10644000AA84B984C884DF80EE80FD800C811B8122 +:10645000AA81B981CE0FD11D0FB6F894DEBF0FBE51 +:10646000CDBFED010895FB01DC0102C005900D9246 +:1064700041505040D8F70895FB01DC0104C08D91D4 +:106480000190801921F441505040C8F7881B990BA6 +:106490000895FB01DC0102C001900D924150504073 +:1064A000D8F70895AEE0B0E0E8E5F2E30C940A32E4 +:1064B0000D891E8986E08C831A8309838FEF9FE7FD +:1064C0009E838D83AE01475E5F4F6F89788DCE01CD +:1064D00001960E9475322F813885020F131FF80133 +:1064E00010822E96E4E00C942632ABE0B0E0EBE7AD +:1064F000F2E30C94FC317C013B018A01FC01178220 +:106500001682838181FFB9C19AE0292ECE010196BE +:106510005C01F7019381F30193FD859193FF8191D4 +:106520003F01882309F446C1853239F493FD8591F2 +:1065300093FF81913F01853229F4B70190E00E94D9 +:106540005634E7CF912C412C512CFFE1F51538F052 +:106550008B3209F188F4803201F1833221F157FC4A +:106560003AC020ED280F2A3040F556FE1FC0929CFD +:10657000200D1124922E06C08D3291F0803379F7D0 +:10658000689450F8F30193FD859193FF81913F0149 +:106590008111DBCF20C0689451F8689452F8F2CF93 +:1065A000689453F8EFCF689454F8ECCF429C200DD8 +:1065B0001124422E689455F8E5CF8E3229F456FC0A +:1065C000F9C0689456F8DECF8C3619F4689457F801 +:1065D000D9CF8836B9F2982F9F7D95549330C0F06B +:1065E0008336A1F18337C1F1833509F05BC0F8012F +:1065F000C190D1908F01692D70E056FC02C06FEF01 +:106600007FEFC6010E9440344C01689457F80AC0DD +:106610000C5F1F4F2FE3298388248394912C6501FD +:10662000E89457F853FC04C04814190409F018F50D +:10663000342C8114910431F5332009F46ACFB70169 +:1066400080E290E00E9456343A94F6CFF8018081BF +:1066500089830E5F1F4FE0CFF801C190D1908F0169 +:10666000692D70E056FC02C06FEF7FEFC6010E94FB +:106670004B344C01D5CFB70180E290E00E945634F4 +:106680004A94D2CFF60157FC859157FE81916F0154 +:10669000B70190E00E94563431103A94F1E08F1A1D +:1066A0009108C7CF843619F0893609F074C0F80113 +:1066B00057FE6AC061917191819191918F01252D51 +:1066C0002F76D22E97FF09C0909580957095619591 +:1066D0007F4F8F4F9F4F6894D7F82AE030E0A50195 +:1066E0000E948634C82ECA188C2C5D2CD6FE0CC095 +:1066F000E89450F8C91440F4D4FE05C0D2FC03C09D +:10670000FD2DFE7E5F2E892C54FE8FC0FE01EC0D08 +:10671000F11D8081803309F081C0252D297E522E04 +:10672000852D8870382E53FC8FC050FE89C09C2C5C +:10673000841418F44C0C942C981854FE8BC0B70198 +:1067400080E390E00E94563452FE09C088E790E052 +:1067500051FE02C088E590E0B7010E945634C9148A +:1067600008F484C0CA94D12C9FEFC91AD90ACA0C64 +:10677000DB1CF60182916F01B70190E00E94563454 +:10678000AC14BD04B1F758CF61917191072E000C84 +:10679000880B990B93CFD52CE894D4F82AE030E0FD +:1067A000853739F1952D997FD92E8F3601F148F42F +:1067B0008835A9F0F701868197812B96E2E10C9448 +:1067C0001832803749F08837A9F7D4FE02C06894A0 +:1067D000D2F820E130E00DC06894D4F8F6CF54FE32 +:1067E00003C0E92FE660DE2E20E132E002C028E09F +:1067F00030E0F801D7FE0DC06191719181919191C6 +:106800008F01A5010E948634C82ECA18E894D7F8D3 +:106810006BCF6191719190E080E0F2CF52FC02C0A9 +:1068200083947ECF839483947BCF852D867809F4DF +:1068300077CFF6CFB70180E290E00E945634839480 +:106840008414C0F3312C79CF342C3818841408F414 +:1068500074CFF8CF852D867809F481CF8BE251FE75 +:1068600080E257FC8DE2B70190E077CFB70180E37B +:1068700090E00E9456349A9472CF8FEF9FEF9DCF95 +:10688000FC010590615070400110D8F780959095FB +:106890008E0F9F1F0895FC01615070400190011000 +:1068A000D8F7809590958E0F9F1F08950F931F9393 +:1068B000CF93DF93182F092FEB018B8181FD09C046 +:1068C0001FEF0FEF812F902FDF91CF911F910F912D +:1068D000089582FF14C02E813F818C819D812817ED +:1068E00039073CF4E881F981CF01019699838883C7 +:1068F00010838E819F8101969F838E83E3CFE885ED +:10690000F985812F0995892BA1F3DACFFA01AA27FE +:10691000283051F1203181F1E8946F936E7F6E5FE2 +:106920007F4F8F4F9F4FAF4FB1E03ED0B4E03CD090 +:10693000670F781F891F9A1FA11D680F791F8A1F73 +:10694000911DA11D6A0F711D811D911DA11D20D0DA +:1069500009F468943F912AE0269F11243019305D94 +:106960003193DEF6CF010895462F4770405D419385 +:10697000B3E00FD0C9F7F6CF462F4F70405D4A33D2 +:1069800018F0495D31FD4052419302D0A9F7EACF9A +:10699000B4E0A6959795879577956795BA95C9F7C9 +:1069A00000976105710508959B01AC010A2E0694BC +:1069B0005795479537952795BA95C9F7620F731F75 +:1069C000841F951FA01D0895F999FECF92BD81BD2A +:1069D000F89A992780B50895A6E1B0E044E050E028 +:1069E0000C941E35A8E1B0E042E050E00C941E3556 +:1069F000262FF999FECF92BD81BDF89A019700B478 +:106A0000021639F01FBA20BD0FB6F894FA9AF99A17 +:106A10000FBE08950396272F0E94F9340E94F83480 +:106A2000252F0E94F934242F0C94F9340196272F36 +:106A30000E94F9340C94F834DC01CB01FC01F99983 +:106A4000FECF06C0F2BDE1BDF89A319600B40D92BA +:106A500041505040B8F708955058BB27AA270E94CC +:106A600044350C945C360E944E3638F00E94553600 +:106A700020F039F49F3F19F426F40C944B360EF4B1 +:106A8000E095E7FB0C941C36E92F0E946D3658F315 +:106A9000BA17620773078407950720F079F4A6F503 +:106AA0000C94A7360EF4E0950B2EBA2FA02D0B01F7 +:106AB000B90190010C01CA01A0011124FF27591B43 +:106AC00099F0593F50F4503E68F11A16F040A22F49 +:106AD000232F342F4427585FF3CF469537952795BA +:106AE000A795F0405395C9F77EF41F16BA0B620BB9 +:106AF000730B840BBAF09150A1F0FF0FBB1F661F00 +:106B0000771F881FC2F70EC0BA0F621F731F841F42 +:106B100048F4879577956795B795F7959E3F08F068 +:106B2000B0CF9395880F08F09927EE0F979587952A +:106B300008950E948F3690F09F3748F4911116F413 +:106B40000C94A83660E070E080E89FE3089526F09A +:106B50001B16611D711D811D0C9422360C943D364F +:106B60000E94753688F09F5798F0B92F9927B75132 +:106B7000B0F0E1F0660F771F881F991F1AF0BA95E1 +:106B8000C9F714C0B13091F00E94A736B1E0089562 +:106B90000C94A736672F782F8827B85F39F0B93F54 +:106BA000CCF3869577956795B395D9F73EF4909594 +:106BB0008095709561957F4F8F4F9F4F0895E89412 +:106BC00009C097FB3EF490958095709561957F4F35 +:106BD0008F4F9F4F9923A9F0F92F96E9BB279395E3 +:106BE000F695879577956795B795F111F8CFFAF4F3 +:106BF000BB0F11F460FF1BC06F5F7F4F8F4F9F4F24 +:106C000016C0882311F096E911C0772321F09EE881 +:106C1000872F762F05C0662371F096E8862F70E0E7 +:106C200060E02AF09A95660F771F881FDAF7880FC1 +:106C30009695879597F9089597F99F6780E870E092 +:106C400060E00895882371F4772321F09850872B12 +:106C5000762F07C0662311F499270DC09051862B1B +:106C600070E060E02AF09A95660F771F881FDAF7C8 +:106C7000880F9695879597F908959F3F31F0915029 +:106C800020F4879577956795B795880F911D969510 +:106C9000879597F908959FEF80EC089500240A9452 +:106CA0001616170618060906089500240A941216E7 +:106CB0001306140605060895092E0394000C11F41A +:106CC000882352F0BB0F40F4BF2B11F460FF04C0C7 +:106CD0006F5F7F4F8F4F9F4F089557FD9058440F20 +:106CE000551F59F05F3F71F04795880F97FB991F2B +:106CF00061F09F3F79F087950895121613061406E8 +:106D0000551FF2CF4695F1DF08C016161706180674 +:106D1000991FF1CF869571056105089408950E9429 +:106D20007536A0F0BEE7B91788F4BB279F3860F42A +:106D30001616B11D672F782F8827985FF7CF869595 +:106D400077956795B11D93959639C8F30895E894A2 +:106D5000BB2766277727CB0197F908950E94C13694 +:106D60000C945C360E944E3638F00E94553620F066 +:106D7000952311F00C941C360C944B3611240C9472 +:106D8000A8360E946D3670F3959FC1F3950F50E0C1 +:106D9000551F629FF001729FBB27F00DB11D639FCD +:106DA000AA27F00DB11DAA1F649F6627B00DA11D73 +:106DB000661F829F2227B00DA11D621F739FB00D19 +:106DC000A11D621F839FA00D611D221F749F332789 +:106DD000A00D611D231F849F600D211D822F762F22 +:106DE0006A2F11249F5750409AF0F1F088234AF0FF +:106DF000EE0FFF1FBB1F661F771F881F915050406B +:106E0000A9F79E3F510580F00C941C360C94A836CF +:106E10005F3FE4F3983ED4F3869577956795B795F1 +:106E2000F795E7959F5FC1F7FE2B880F911D96950B +:106E3000879597F90895F894FFCF9310BB100E1122 +:106E4000BB100E11EE1026110E11231230125D141C +:106E50005D146614661468146614661466145D1472 +:106E60005D146D14661466146D14F920F920522116 +:106E7000522184212C212C212C219E210F221F22E2 +:106E80001F22B22CB62CF82C092D142D332D362DA3 +:106E9000692D8A2D062D062D952D982D9C2DC22D00 +:086EA000E42DE72DE92D0E2E73 +:106EA800420200000001000000004202000000054C +:106EB800010000004202000000010600000042023A +:106EC8000000000107000000420204080000000062 +:106ED80000004202090C00000000000042020115F7 +:106EE800000000000000420201160000000000003F +:106EF80036323331F7F6676697C63435000000003E +:106F08000001F508D50DF408D10DCD0DF4F50100FB +:106F180021007F220003004A004A4A01F6F7313374 +:106F28003236674C4159455200426173652000472B +:106F3800616D6520005261697365004C6F776572F9 +:106F4800004C4F434B0043617073004E756D005306 +:106F580063726C00202020202000534F4C415200C7 +:106F6800544D505354002025303364002077706D01 +:106F780000818283E200E900EA00B500B600B700AC +:106F8800CD008301CC008A019201940121022302E1 +:106F980024022502260227022A02B300B4006F0049 +:106FA8007000B90200FF0100010000FFFF000001AE +:106FB8000001FF0000081018181008000001020264 +:106FC800020202020202020240223246012401F2B7 +:086FD800002B0D440D640D00B7 :00000001FF From a0c2e8b8a9c2fc8bf8c2b770e20eea8391fcdede Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Mon, 13 Sep 2021 20:31:13 -0400 Subject: [PATCH 018/155] Increased combo duration --- keyboards/solartempest/ps17/config.h | 2 +- .../ps17/solartempest_ps17_via.hex | 2192 ++++++++--------- 2 files changed, 1097 insertions(+), 1097 deletions(-) diff --git a/keyboards/solartempest/ps17/config.h b/keyboards/solartempest/ps17/config.h index a22d17fcb719..25a2d3b89897 100644 --- a/keyboards/solartempest/ps17/config.h +++ b/keyboards/solartempest/ps17/config.h @@ -140,6 +140,6 @@ #define LOCKING_RESYNC_ENABLE #define COMBO_COUNT 6 //Number of tap combos used -#define COMBO_TERM 350 //Default combo time is 200ms +#define COMBO_TERM 400 //Default combo time is 200ms #define TAPPING_TERM 200 //Tap dance time diff --git a/keyboards/solartempest/ps17/solartempest_ps17_via.hex b/keyboards/solartempest/ps17/solartempest_ps17_via.hex index c4de00dc7f90..b9d0957dd893 100644 --- a/keyboards/solartempest/ps17/solartempest_ps17_via.hex +++ b/keyboards/solartempest/ps17/solartempest_ps17_via.hex @@ -1,9 +1,9 @@ :100000000C94BD030C9404040C9404040C94040498 :100010000C9404040C9404040C9404040C94040440 -:100020000C9404040C9404040C9478270C94342746 -:100030000C9473280C9404040C9404040C9404048D +:100020000C9404040C9404040C9477270C94332748 +:100030000C9472280C9404040C9404040C9404048E :100040000C9404040C9404040C9404040C94040410 -:100050000C9404040C944F280C9404040C94040491 +:100050000C9404040C944E280C9404040C94040492 :100060000C9404040C9404040C9404040C940404F0 :100070000C9404040C9404040C9404040C940404E0 :100080000C9404040C9404040C9404040C940404D0 @@ -124,9 +124,9 @@ :1007B00098031092990314BE84B7877F84BF0FB645 :1007C000F894A895809160008861809360001092F1 :1007D00060000FBEE0E0F8E3099511E0A0E0B1E0B1 -:1007E000E6EEFFE502C005900D92A43CB107D9F7F3 +:1007E000E4EEFFE502C005900D92A43CB107D9F7F5 :1007F00023E0A4ECB1E001C01D92A639B207E1F7F5 -:100800000E949A280C94BA2F0C940000E8EDF0E0B6 +:100800000E9499280C94B92F0C940000E8EDF0E0B8 :1008100080818E7F80831092E2001092DA00109225 :10082000E100A0EEB0E08C9181608C9380818F77A5 :10083000808319BCA7EDB0E08C918E7F8C93808172 @@ -204,7 +204,7 @@ :100CB0004E2F4983E8835A83DF91CF911F910F9183 :100CC000FF90EF90DF90BF90AF900895202F30E01D :100CD0004491D42EE42EF12C56E0159FC00111242E -:100CE000EFEFF0E0BF010E94BB2E812F90E0880F54 +:100CE000EFEFF0E0BF010E94BA2E812F90E0880F55 :100CF000991F55E5569FD001579FB00D11248A1BAF :100D00009B0B982F990F890F5F01A21AB30AAE9C13 :100D1000D001AF9CB00DBE9CB00D11245B2F089F7D @@ -239,12 +239,12 @@ :100EE0008D7FF7CF8F3F09F0A1CF80916F028B7F6D :100EF000F0CF089580916F0280FD16C081FD16C06D :100F000082FD16C080916D028823A1F0883280F4A2 -:100F100028E0829FC001112468E270E00E94CF2E79 +:100F100028E0829FC001112468E270E00E94CE2E7A :100F2000862F672B39F0089582E0089584E00895B4 :100F300088E0089581E0089580916F0280FD14C0DB :100F400081FD14C082FD16C080916E02882381F05D :100F5000843180F422E3829FC001112464E170E0B7 -:100F60000E94CF2E862F08958CE0089589E1089580 +:100F60000E94CE2E862F08958CE0089589E1089581 :100F700085E0089582E30895803F31F40E949C0744 :100F80008195809377020895813F19F40E949C0710 :100F9000F8CF823F31F40E949C07819580937602BE @@ -448,1102 +448,1102 @@ :101BF00081EE0E944E0BCD2B51F08CE2DF91CF9104 :101C00001F910F91FF90EF90DF900C94280DDF91C2 :101C1000CF911F910F91FF90EF90DF900895CF9398 -:101C2000DF93C7E0D2E060E0CE010E94862F2196CC +:101C2000DF93C7E0D2E060E0CE010E94852F2196CD :101C3000C11584E0D807B9F7DF91CF9108956F926D :101C40007F928F929F92AF92BF92CF92DF92EF924C :101C5000FF920F931F93CF93DF9389E0C82E85E007 :101C6000D82E0FE510E0E801E09736011CC0F50121 -:101C700085909490692DC7010E94862F682DC70119 -:101C800001960E94862F82E0A80EB11C82E0E80E29 +:101C700085909490692DC7010E94852F682DC7011A +:101C800001960E94852F82E0A80EB11C82E0E80E2A :101C9000F11CCE15DF0559F788E0680E711C2896F7 :101CA0000C171D0731F07E0188E0E81AF108530196 :101CB000DECF005D1F4F80E3C80ED11C0F3382E0E2 :101CC000180789F6DF91CF911F910F91FF90EF9048 :101CD000DF90CF90BF90AF909F908F907F906F904C :101CE0000895CF93C82F6FEF811161E283E290E0F6 -:101CF0000E94862FC1110CC0CFEF6C2F84E290E0C0 -:101D00000E94862F6C2F85E290E0CF910C94862F55 -:101D1000C9E0F3CF80E00E94710E60E086E290E0BF -:101D20000E94862F0E941F0E0E940F0E81E00C94CD -:101D3000710ECF93C0910503C2FB992790F99817B4 -:101D400081F080FBC2F9C09305036091040384E035 -:101D500090E00E94862F6C2F82E290E0CF910C944D -:101D6000862FCF9108950F931F93CF93DF9328E091 -:101D7000629FE001112450E0440F551FC40FD51F8E -:101D800030E3839FC00DD11D1124CE0187960E94A0 -:101D9000722F082F10E0102F0027CE0188960E9486 -:101DA000722F9801282BC901DF91CF911F910F91BC -:101DB0000895462F8A3038F4763028F4643018F4C9 -:101DC000672F0C94B30E90E080E00895BF92CF92FD -:101DD000DF92EF92FF920F931F93CF93DF937C01DB -:101DE0000091380310913903809145029091460289 -:101DF000082B192BCFE0D0E0CC24C394D12CBC2EDF -:101E0000C6010C2E02C0880F991F0A94E2F78023A6 -:101E10009123892B71F4219790F7B12C8B2DDF91B1 -:101E2000CF911F910F91FF90EF90DF90CF90BF90D7 -:101E30000895B7018C2F0E94D90E0E947208019755 -:101E400051F3ECCFCF93DF93EC010E94E60EBE017D -:101E50000E94D90EDF91CF910C947208FC0186810B -:101E60009781009779F00E947208292F2F70929520 -:101E70009F7092509E30A0F4E92FF0E0E454F04DB2 -:101E80000C94052F808191810E94220FEECF803F1C -:101E900019F020F4883E20F481E00895843FE1F3B6 -:101EA00080E00895883EC0F3813FD1F7F5CF822FBF -:101EB00086958695869508951F93CF93DF9300D0DE -:101EC00000D00F92CDB7DEB7FC01268137812115F6 -:101ED000310541F525E0DE01119601900D922A951C -:101EE000E1F7FC01228189819A812223B9F06623DE -:101EF000A9F00E94E60E182F682F89819A810E940E -:101F0000D50A69817A81812F0F900F900F900F90E1 -:101F10000F90DF91CF911F910C94D90E0E94AE0AC1 -:101F2000182FEFCFC9010F900F900F900F900F90C7 -:101F3000DF91CF911F91089583E290E00E94722F6C -:101F4000813289F484E290E00E94722F893059F442 -:101F500085E290E00E94722F91E0893009F090E0D4 -:101F6000892F8170089580E0FCCFCF9384E090E0CA -:101F70000E94722FC82F82E290E00E94722F982F49 -:101F80008C2FCF91089560918E03669570E04BE0A1 -:101F900050E08AE091E00E94582F892B19F481E0EB -:101FA000809384020E94A20590937E0280937D021A -:101FB00008955F926F927F928F929F92AF92BF929D -:101FC000CF92DF92EF92FF920F931F93CF93DF9305 -:101FD000CDB7DEB7C455D1090FB6F894DEBF0FBE3A -:101FE000CDBF80918E0380FD0AC0EAE3F3E0118249 -:101FF00010821282339623E0EE38F207C1F7809008 -:102000007B0290907C028114910409F459C0809164 -:102010007A02811155C0D12CC12C66246394712C95 -:1020200013E0512E8091850293010C2C01C0220FE8 -:102030000A94EAF7822309F43BC0F601EE0FFF1F72 -:10204000E80DF91DE590F490E114F104C9F145E0C3 -:1020500050E0B701CE0101960E944F2F09810F3F3A -:1020600039F18A81800F9927991F8D31910514F0DC -:102070008CE190E05C01AA0CBB1C8A0D9B1DFC014D -:10208000E65CFC4F5F01059D80011124065C1C4F3E -:102090000A151B0520F0F5E0EF0EF11CD8CF9801D2 -:1020A0004D816C818B810E9441060D5F1F4FF0CFE7 -:1020B0002FEFC21AD20A38E0C316D10409F0B2CF0A -:1020C0007DEEA72E73E0B72EDE011196AE014B5ABE -:1020D0005F4F1A2F7B2FF5018491282F30E0C90123 -:1020E000880F991F820F931F865C9C4FFC01C08054 -:1020F000D180E280CD92DD92ED92FFEFAF1ABF0A60 -:10210000A417B50741F7279A35B13F7725B1206865 -:102110006FB7F894812F972FFC017191CF01E8E000 -:1021200025B9000000C077FF35B9770F000000C067 -:1021300000C000C035B900C0EA9591F78417950733 -:1021400059F76FBF8FE594E00197F1F700C00000E9 -:10215000CC5ADF4F0FB6F894DEBF0FBECDBFDF9174 -:10216000CF911F910F91FF90EF90DF90CF90BF9094 -:10217000AF909F908F907F906F905F9008951F9386 -:10218000CF93DF9300D00F92CDB7DEB7162F90918B -:102190008E0390FF18C09E012F5F3F4F48E76FEFFF -:1021A0000E9441068B819981612F70E0FB01EE0F47 -:1021B000FF1FE60FF71FE65CFC4F2A812183908307 -:1021C00082830E94D90F0F900F900F90DF91CF91D3 -:1021D0001F910895EF92FF920F931F93CF93DF9378 -:1021E0008C01CAE3D3E0F12CE12CF80194816091D9 -:1021F000900380918F03FEE0EF16F104FCF4992325 -:10220000F9F09E01409191030E9441062FEFE21ADE -:10221000F20A23968CE1E816F10439F70E94D90FEF -:10222000F801848190E00196817099278483DF9181 -:10223000CF911F910F91FF90EF900895992309F38B -:102240009E0140E0E1CF8F929F92AF92BF92CF92DA -:10225000DF92EF92FF920F931F93CF93DF93EC01E6 -:102260004C81042F10E09801D8010E941A2F9B0185 -:10227000AC010E94302F4B015C01E0E2F0E0E01B7A -:10228000F10BA5E5B0E0AC019B010E94302F6B0182 -:102290007C019F01DF010E94122F9B01AC010E9473 -:1022A0003B2F9B01AC01280D391D4A1D5B1DC70149 -:1022B000B6010E94E32EF22E822F90E039E23F1504 -:1022C000D8F143E0249F9001112435952795122FD2 -:1022D00010959AE3C92E93E0D92E00E085E5E82E0B -:1022E000EF188E2D01FD8F2D9601412F60919003E7 -:1022F0000E9441060F5F53E0C50ED11C0C3189F7D7 -:102300000E94D90F9C8181E0992319F0903219F431 -:102310008FEF8093170180911701890F8C83DF91D4 -:10232000CF911F910F91FF90EF90DF90CF90BF90D2 -:10233000AF909F908F90089525E530E0A901481B4C -:10234000590BCA019A01220F331F280F391F37FF7B -:10235000BCCF2F5F3F4FB9CF0F931F93CF93DF9326 -:10236000CAE3D3E0FE01118210821282339683E029 -:10237000EE38F807C1F710E000E080918702082EE0 -:10238000000C990B081719078CF180911601082E83 -:10239000000C990B801791074CF19E01409191031D -:1023A0006091900380918F030E9441060F5F1F4F41 -:1023B00023960C31110509F70E94D90F8091150160 -:1023C00090918702980F9093870220911601280F11 -:1023D00020931601121614F49B311CF08195809302 -:1023E0001501DF91CF911F910F91089519821882E5 -:1023F0001A82DCCFBF92CF92DF92EF92FF920F93BF -:102400001F93CF93DF93FC018281DD24DA9480FD5A -:1024100002C0DD24D3940AE313E0D0E0C0E02CE155 -:10242000B22EF80111821082128294E0E92EF12C72 -:10243000C12C809186028C0D8D310CF43DC06B2D2A -:102440000E94AD2E892F082E000C990B8C179D072A -:1024500091F4809191038E9DA0018F9D500D1124C8 -:1024600055954795559547959801609190038091B2 -:102470008F030E944106CD0CF1E0EF1AF108C9F676 -:1024800021960D5F1F4FCC31D10559F60E94D90F0F -:102490008091860291E0D91215C0811111C08BE1A3 -:1024A00080938602DF91CF911F910F91FF90EF9063 -:1024B000DF90CF90BF90089587FFC5CF845EC3CFD4 -:1024C0008150EECF90E00196BE010E94CF2EE8CF62 -:1024D000EF92FF921F93CF93DF93EC018AE3E82EF4 -:1024E00083E0F82E10E08C81970140919103609178 -:1024F0009003810F0E944106175F83E0E80EF11CF4 -:102500001C3F89F70E94D90F9A818C8190FF08C0E7 -:102510008F5F8C83DF91CF911F91FF90EF90089593 -:102520008150F7CF90918E0390FF0CC0EAE3F3E067 -:10253000818360834283339693E0EE38F907C1F7D5 -:102540000C94D90F08950F931F93CF93DF9300D06E -:102550000F92CDB7DEB78C018091880281110AC03D -:102560009E012F5F3F4F44EB6FEF0E9441068A812F -:1025700080938802F8016481613069F0809188025B -:1025800040E0662361F040E0623011F4409188023F -:1025900080E060E004C06091880240E080E00E943A -:1025A0009212F801848190E0019663E070E00E944D -:1025B000CF2E84830F900F900F90DF91CF911F91BA -:1025C0000F910895CF93DF9300D00F92CDB7DEB770 -:1025D00090918E0390FF0AC09E012F5F3F4F0E9493 -:1025E00041064B8169818A810E9492120F900F905F -:1025F0000F90DF91CF910895CF93DF93EC01EEE838 -:10260000F3E0438162818C810E94E2128C818F5FB2 -:102610008C83DF91CF910895CF93DF93EC01EC8110 -:10262000F0E0E75FFB4F4491EEE8F3E062818181E7 -:102630000E94E2128C818F5F8C83DF91CF9108958D -:10264000CF92DF92EF92FF926B017C010E942B06EA -:10265000B701A60188E090E0FF90EF90DF90CF9067 -:102660000C94982F5F926F927F928F929F92AF926D -:10267000BF92CF92DF92EF92FF920F931F93CF936F -:10268000DF9300D00F92CDB7DEB7182F762E042F30 -:10269000622E90918E0390FF29C0E92FE695AE2F10 -:1026A000B0E0A157BE4F8C91809383029E7F923001 -:1026B00081F59E012F5F3F4F812F0E9441064B8184 -:1026C00069818A810E94921210938F037092900305 -:1026D00000939103662051F060918E0370918F03F7 -:1026E00080919003909191030E9420130F900F907E -:1026F0000F90DF91CF911F910F91FF90EF90DF909E -:10270000CF90BF90AF909F908F907F906F905F9091 -:102710000895823019F400919103D6CF863019F4D0 -:1027200010918F03D1CF8930D9F3893169F6E951FE -:102730008E2F8170582EE695F0E0E851FC4FA59061 -:10274000B490BB248AE3E82E83E0F82ED12CC12C70 -:102750009CE1892E912CC601B4010E94BB2E812FD1 -:10276000511013C0860F9701402F672D0E9441061C -:10277000CA0CDB1C83E0E80EF11C8EE8E81683E04F -:10278000F80649F70E94D90F9FCF861BECCFEEE8E1 -:10279000F3E0438128E0421B08F440E021E062813D -:1027A00081810C943213EEE8F3E0438128E0420F7C -:1027B00008F44FEF21E0628181810C943213EEE83E -:1027C000F3E0628128E0621B08F460E021E04381CD -:1027D00081810C943213EEE8F3E0628128E0620F0D -:1027E00008F46FEF21E0438181810C943213EEE80D -:1027F000F3E0818121E04381628188500C9432139F -:10280000EEE8F3E0818121E043816281885F0C94EE -:10281000321380919203882319F0815080939203A0 -:1028200060918E0370918F0380919003909191033A -:102830000C94201380919203833018F48F5F80935F -:10284000920360918E0370918F0380919003909119 -:1028500091030C94201390918E0390FF36C09170D9 -:10286000811129C0926090938E03662351F060918C -:102870008E0370918F0380919003909191030E9439 -:10288000201360918E03669570E04BE050E08AE083 -:1028900091E00E94582F892BA9F01092840281E0C8 -:1028A0008093800220E04091910360919003809199 -:1028B0008F030C943213853210F09864D4CF880FB4 -:1028C000982BD1CF0E94C30FEACF089521E030E0CA -:1028D000A90102C0440F551F8A95E2F7CA01209151 -:1028E0008502662399F0822B809385028091840271 -:1028F000811106C080918E0360E086950E942B14A2 -:1029000080918E0380FD05C00C94D90F80958223A1 -:10291000EBCF08950F931F93CF93DF93EC0161E00A -:10292000009709F0682F617080E00E94661460E0F3 -:10293000209721F0BE0176956795617081E00E9435 -:10294000661460E0209731F0BE0176956795769524 -:102950006795617082E00E94661460E0209739F00C -:10296000BE0113E0769567951A95E1F7617083E0F3 -:102970000E94661460E0209739F0BE01B4E07695BD -:102980006795BA95E1F7617084E00E946614AE0124 -:1029900070E060E0BB27A72F962F852F0097A10539 -:1029A000B105D9F1AC01BD0188E08A019B01F4E0D9 -:1029B0003695279517950795FA95D1F701151105C5 -:1029C0002105310519F08C5FB901A8018A019B012D -:1029D000E2E03695279517950795EA95D1F7011509 -:1029E00011052105310519F08E5FB901A801769511 -:1029F000679557954795452B462B472B09F08F5FD9 -:102A0000823011F160F4882399F08130C1F0CE0159 -:102A1000DF91CF911F910F91089580E0C6CF833051 -:102A2000C1F08430A1F720E044E66FEF8FE004C0EE -:102A300020E044E66FEF82E30E943213E8CF20E00B -:102A400044E66FEF85E0F8CF20E044E66FEF80E8E2 -:102A5000F3CF20E044E66FEF87EDEECF0E948A14BB -:102A600090933903809338030C94010B80913803C1 -:102A7000909139039C01267033272630310519F4D3 -:102A800088600C942E15877FFCCF21E030E002C0D7 -:102A9000220F331F8A95E2F72095309580913803F5 -:102AA00090913903822393230C942E159091400228 -:102AB0008095892380934002282F277039F4282F8E -:102AC000082E000C330B9217130621F49091050386 -:102AD00092FF07C08595859585950E9445151092B2 -:102AE0004002089521E030E002C0220F331F8A9592 -:102AF000E2F78091380390913903822B932B0C9449 -:102B00002E1580918E038695815009F484E261E050 -:102B10000C942B1480918E0386958F5F853208F07C -:102B200081E061E00C942B1490918E0390FF07C01C -:102B30009695981720F0961710F40C948A1561E07A -:102B40000C942B14EEE8F3E083E0808311828FEF86 -:102B5000828388E283831482608171818281938180 -:102B60000C94201369EE7EEF90E080E00E94A42F89 -:102B700060E082E090E00E94862F60E083E090E0D9 -:102B80000E94862F109246021092450260E084E077 -:102B900090E00E94862F60E082E290E00E94862F03 -:102BA00060E085E090E00E94862F60E086E090E0A3 -:102BB0000E94862F6FEF87E090E00E94862F40E012 -:102BC00050E0BA0188E090E00E94982F60E08DE02C -:102BD00090E00E94862F40E050E0BA0188E190E04A -:102BE0000E94982F60E087E190E00E94862F40E0ED -:102BF00050E0BA018CE190E00E94982F70E060E014 -:102C000080E290E00E94A42F40E050E0BA0188E109 -:102C100090E00E94982F80E00E94710E0E948A0E20 -:102C200040E050E0BA018FE090E00E94982F40E031 -:102C300050E0BA0183E190E00C94982F90E080E09E -:102C40000E94802F893E9E4F11F40C949C0F80E0CF -:102C500008951092430280914301E8ECF1E088234B -:102C600059F08091040387FF07C08EE1DF011D92B8 -:102C70008A95E9F70C94010B86E0F8CF1F93CF9368 -:102C8000DF93CDB7DEB7AA970FB6F894DEBF0FBEBD -:102C9000CDBF80E393E02091F100DC012D93CD01C5 -:102CA000B3E088339B07B9F780913103833009F48F -:102CB00071C0B8F4813009F448C0823009F4B2C060 -:102CC0008091E80083FF3AC18091300390913103F5 -:102CD0009A3008F033C1E92FF0E0E653F04D0C9440 -:102CE000052F8A3009F48DC08B3009F470C089300B -:102CF00039F780913003813219F780913403909134 -:102D00003503009711F00297D9F68091E800877F8C -:102D10008093E8008091E80082FF37C09091F30033 -:102D20008091F200029729F48091F1008B7F81302D -:102D300021F48091F10080930B038091E8008B7760 -:102D40008093E8000E948004BBCF80913003813AD9 -:102D500009F0B6CF8091E800877F8093E8008091EA -:102D6000340390913503892B61F460E28CE093E0A9 -:102D700070E00E9432058091E8008B778093E80034 -:102D80009FCF60E090E080E0F3CF80912E0381112F -:102D9000C1CF96CF80913003813A09F091CF8091D5 -:102DA000340390913503892B09F08ACF8091E80094 -:102DB000877F8093E8008091E80080FFFCCF8091BE -:102DC00043018093F1008091E8008E77B9CF809124 -:102DD0003003813209F074CF809134039091350330 -:102DE000892B09F06DCF8091E800877F8093E80000 -:102DF0000E94800480913203809343010E9429162F -:102E00005FCF80913003813209F05ACF8091E80082 -:102E1000877F8093E8000E94800480913303809331 -:102E20000A034ECF80913003813A09F049CF809157 -:102E3000E800877F8093E8008091E80080FFFCCF66 -:102E400080910A03BECF803899F0823809F076C0AD -:102E5000809134038F70873008F070C08093E90050 -:102E60008091EB0085FB882780F91092E90006C06D -:102E700080912C0390912D03911182609091E80034 -:102E8000977F9093E8008093F1001092F100809179 -:102E9000E8008E77B5C1882309F4A2C1823009F019 -:102EA0004DC0809132038111A6C1809134038F708F -:102EB0002FEF280F263008F041C08093E9002091C1 -:102EC000EB0020FF98C1933031F48091EB008062D9 -:102ED0008093EB0090C19091EB0090619093EB0098 -:102EE00021E030E001C0220F8A95EAF72093EA0042 -:102EF0001092EA008091EB008860EACF81111EC039 -:102F0000109132031F778091E3008078812B8093AA -:102F1000E3008091E800877F8093E8000E948004AE -:102F20008091E80080FFFCCF8091E300806880936F -:102F3000E30082E0111183E080932E038091E8008A -:102F400083FF0AC08091E800877F8093E80080912A -:102F5000EB0080628093EB00AA960FB6F894DEBF78 -:102F60000FBECDBFDF91CF911F9108958058823061 -:102F700028F720913203309133032C3DE3E03E07E4 -:102F8000A1F583E08A838AE289834FB7F894DE0152 -:102F9000139620E03EE051E2E32FF0E0509357001B -:102FA000E49120FF03C0E295EF703F5FEF708E2F3A -:102FB00090E0EA30C0F0C7968D939D932F5F243147 -:102FC00059F74FBF8091E800877F8093E8006AE25D -:102FD00070E0CE0101960E9432058091E8008B7767 -:102FE0008093E800ABCFC096E7CF809134039091F7 -:102FF0003503432F55274330510509F44AC078F56E -:103000004130510509F47AC08BE590E0E9EEF6E035 -:103010004230510509F092CF2091E800277F20939C -:10302000E80020913603309137038217930708F4A4 -:103030009C0140E02115310509F065C0411163C0D4 -:103040008091E80082FDC9CF80912E03882329F268 -:10305000853019F28091E80083FFF2CFBECF413274 -:10306000510509F43CC04232510509F067CF833065 -:10307000910508F063CFFC01EE0FFF1FE954FE4FEE -:103080000190F081E02D8C549E4FDC018C9190E0FA -:103090001AC0332721303105D1F02115310561F0F7 -:1030A0002230310509F04ACFE6E5F7E0E4918E2FB2 -:1030B00090E0E6E5F7E007C0E6E7F7E0E4918E2F61 -:1030C00090E0E6E7F7E0009709F438CFA5CFE2E615 -:1030D000F7E0E4918E2F90E0E2E6F7E0F4CF833062 -:1030E000910508F02BCF880F991FFC01E354FE4F88 -:1030F0000190F081E02D89E090E08ECF82E190E0B8 -:10310000E4E4F7E089CF80912E03882309F465CFAA -:10311000853009F462CF8091E80083FD5ECF809115 -:10312000E80082FD8DCF8091E80080FF83CF9091F1 -:10313000F3008091F2002115310519F088309105D6 -:1031400050F041E0089709F040E08091E8008E7768 -:103150008093E8006FCF44914093F1003196215065 -:1031600031090196E8CF803809F0E8CE8091E80077 -:10317000877F8093E80080912F038093F10087CEB2 -:103180008111DCCE10913203123008F0D7CE80913D -:10319000E800877F8093E80010932F030E9480044B -:1031A000112311F084E005C08091E30087FDFACF80 -:1031B00081E080932E0342E061EC81E00E949F0455 -:1031C00042E261EC84E00E949F0442E261EC82E012 -:1031D0000E949F0442E260EC83E00E949F04AECE16 -:1031E00080913203813009F0A9CE81E0933009F05B -:1031F00080E080932D031092E9008091E800877FA2 -:103200008093E8000E94800499CE9F92AF92BF9273 -:10321000CF92DF92EF92FF920F931F93CF93DF93A2 -:1032200000D000D0CDB7DEB77C01FC018381948152 -:10323000892B31F08081918189238F3F09F0F0C57E -:103240000F900F900F900F90DF91CF911F910F91E2 -:10325000FF90EF90DF90CF90BF90AF909F90089538 -:10326000980122513F452031310508F0CEC58FEF3E -:1032700093E00E94722F025167E0C62E62E0D62EC4 -:10328000882339F1809140028770D1F2F701828161 -:103290008823B1F282E00F900F900F900F90DF9192 -:1032A000CF911F910F91FF90EF90DF90CF90BF9043 -:1032B000AF909F900C945615C114F4E0DF0611F303 -:1032C000C6010E94722F811101C001502FEFC21A56 -:1032D000D20A0111F1CF1C821B82BB24B3945AE0A5 -:1032E000A52E86010F5F1F4FC6010E94722F898392 -:1032F0001A82882339F29FEF980F933008F58A835A -:10330000B98232E0C30ED11CC8010E94722F8B8398 -:10331000882309F4B7CF8E010F5F1F4FF80180811A -:103320008823F9F2813009F043C091818281913084 -:1033300049F40E5F1F4F0E94280D0F5F1F4FEECF05 -:103340006801E9CF923029F40E5F1F4F0E94730C81 -:10335000F4CF933029F40E5F1F4F0E944E0BEDCF38 -:10336000943019F00F5F1F4FE8CF0E5F1F4F30E012 -:1033700020E0B8016F5F7F4FF80141818053990BC6 -:103380008A30910550F021503109B8F28FE99FE061 -:103390000197F1F700C00000F6CFA29EF001A39EB6 -:1033A000F00D11249C012E0F3F1F842F8B01E1CFC4 -:1033B0000E94A90DC2CF81E00E9472150E943615AD -:1033C00061CF81E00E944515F9CF82E0FBCF043840 -:1033D0009FE5190709F483C008F473C00538FFE5B9 -:1033E0001F0709F041C5882309F43EC580EE0E94FD -:1033F000730C81EE0E94730C80E10E94730C80E1DB -:103400000E944E0B81EE0E944E0B80EE0E944E0BEE -:103410008091E60191E062E189278093E6018823AB -:1034200009F48DC08FE00E94BF1066E18FE00E941A -:10343000BF101AC5882369F180914F02811106C01F -:1034400081E080934F0282EE0E94730C0E94A205DD -:1034500090934E0280934D028BE20E94730C04C540 -:103460008823A1F080914F02811106C081E08093F2 -:103470004F0282EE0E94730C0E94A20590934E02AE -:1034800080934D0281EE0E94730CE6CF81EE0E9484 -:103490004E0B8BE20E944E0BE7C4882309F4E4C470 -:1034A00081EE0E94730C83EE0E94730C8FE40E94E5 -:1034B000730C8FE40E944E0B83EE0E944E0B81EE44 -:1034C000E9CF882309F4D0C481EE0E94730C83EE07 -:1034D0000E94730C80E50E94730C80E5EBCF88237B -:1034E00009F4D0CE10914C0281E0182710934C02C1 -:1034F0000E94A20590934B0280934A0268E1112337 -:1035000081F08FE00E94BF1069E18FE00E94BF1040 -:103510006AE18FE00E94BF106BE18FE00E94BF1054 -:10352000B1CE84EB0E94BF1069E184EB0E94BF1012 -:103530006AE184EB0E94BF106BE184EBEFCF8FEA6E -:103540000E94BF1066E18FEA72CF82EE0E94730C78 -:10355000C6C483E00E942F0B88E10E94730C88E1AF -:103560000E944E0B83E00E94240BB9C482EE0E949D -:10357000730C87E50E94280DB2C486EE0E94280DC8 -:1035800088E1F8CF895AC5C482EE0E944E0BD9C497 -:103590008CE20E94280D8091E801882309F4D1C4AF -:1035A00089E30E94280DCDC488E2FBCF033FFCE5F0 -:1035B0001F0739F1A0F4083D3CE51307F1F0093D80 -:1035C0008CE5180751F1073D9CE5190709F0BDC4CA -:1035D00026E241EE61EEC7010E94450D53CE053F44 -:1035E000ECE51E07B1F088F0063F2CE5120709F064 -:1035F000ACC427E245EE66EEEECF27E245EE65EE7F -:10360000EACF26E241EE60EEE6CF27E245EE64EE39 -:10361000E2CF26E241EE62EEDECF28E241E0EFCFDC -:1036200080910403806106309CE5190709F48CC081 -:1036300080910403886007301C4508F485C08091A0 -:103640000403806281C0809104038D7F0C30FCE50F -:103650001F0709F479C070F4809104038C600A306C -:103660003CE5130709F470C008F481C0809104039D -:103670008E7F6AC080910403877F0E309CE5190716 -:1036800009F462C0809104038B7F0F301C4508F45D -:103690005BC0809104038F7E57C00B3FFCE51F0782 -:1036A00009F45DC030F503313CE5130709F46DC042 -:1036B00078F401319CE5190709F463C002311C4517 -:1036C00009F07EC40E942916809104038F773CC0C4 -:1036D0000531FCE51F0709F460C008F474C080914F -:1036E000050381600A3F1C4509F06AC48093050305 -:1036F00067C40F3F8CE5180709F44BC088F480912C -:1037000005038D7F0D3FECE51E0781F380910503D6 -:103710008E7F0E3F1C4550F3809105038360E6CFFA -:1037200001302DE5120709F457C008F442C060E0EB -:1037300002301D4509F044C48EE090E00E94862FBF -:103740003FC48091040381608093040339C4809155 -:1037500004038260F9CF809104038460F5CF8091E7 -:1037600005038260C3CF809104038064EDCF0E9483 -:103770002916809104038068E7CF809104038F7D30 -:10378000E3CF809104038F7BDFCF80910403837F9D -:10379000DBCF809105038C7FA9CF8091040382FB4E -:1037A000992790F921E0922790FB82F990FB83F909 -:1037B000CBCF80910503982F909591708E7F892BA8 -:1037C00090FB81F993CF0E94291690910403892FD1 -:1037D00097FB87F98058B8CF61E0AECF882309F412 -:1037E00002C4809143028A7A91E009F490E09093B8 -:1037F000E901811106C089E20E94700A0E94000A54 -:1038000041CD85E3F9CF85E3F3C3043CFCE51F0715 -:1038100009F493C047EF53E160E074E1053C2CE507 -:10382000120709F00AC40E9425062CCD093C3CE58C -:10383000130709F491C070F4073CECE51E0709F486 -:1038400086C04BEE53E16FED73E1083CFCE51F07CA -:1038500051F3F3C30A3C2CE5120709F482C049E096 -:1038600054E16AE174E10B3C3CE51307E1F2E5C386 -:10387000013D8CE5180709F487C0B0F40E3CECE577 -:103880001E0709F47BC008F476C00F3C2CE5120734 -:1038900009F477C06EE089E0003D3CE5130709F0CC -:1038A000CCC30E949415EECC043D8CE5180709F4B6 -:1038B00071C078F4023DECE51E0709F468C061E0D0 -:1038C00088E1033DFCE51F0709F0B7C30E942B14F4 -:1038D000D9CC053D2CE5120709F45FC00D35100762 -:1038E00009F4D0CCAAC380918E0380FF1BC08E7FC9 -:1038F00080938E0360918E0370918F03809190036B -:10390000909191030E942013109284028FEF90E710 -:10391000E2E081509040E040E1F700C000000E94EA -:10392000D90FB0CC816080938E0361E08695CECFB5 -:1039300041E855E16AE875E176CF4AE855E161E88A -:1039400075E171CF40E054E167EF73E16CCF4FED6B -:1039500053E16BEE73E167CF47EC53E163ED73E145 -:1039600062CF43ED53E167EC73E15DCF4AE154E18F -:1039700069E074E158CF61E081E0A8CF65E082E0C2 -:1039800090CF68E086E08DCF64E18FE08ACF67E179 -:1039900085E187CF62E289E184CF61E083E296CF5F -:1039A0000B359DE5190701F10C351D4509F055C38F -:1039B0008091050382FB882780F991E089270E9486 -:1039C000990E4BC30E942916FFEF24E33CE0F1500F -:1039D00020403040E1F700C000000E944F0C0E94E0 -:1039E000B21550CC81E0EBCF80E0E9CF828100813D -:1039F0001181882369F0C8010E94E60ED82E682F35 -:103A0000C8010E94D50AB8018D2D0E94D90E2BC382 -:103A1000C8010E94AE0AD82EF6CF212F2F70C22ED9 -:103A2000107F19F0C29490EFC922DD20C9F0CC209C -:103A300069F080E2800F883010F001110BC0809196 -:103A40004302C82AC09243020E94000A802F0E94AB -:103A5000730C19C080914202C82AC0924202F4CF6E -:103A6000802F0E944E0BCC2071F0C09480E2800F1A -:103A7000883010F001113AC080914302C822C092F0 -:103A800043020E94000AE92DE850FF0B349720F40E -:103A90000E94DA050E94AB0BAA20A9F08091400297 -:103AA00080FD11C0F70112828595859585950E944C -:103AB0007215C7010E940519809140028595859570 -:103AC00085950E94451560E0C7010F900F900F90FB -:103AD0000F90DF91CF911F910F91FF90EF90DF90AA -:103AE000CF90BF90AF909F900C945C0F809142025A -:103AF000C822C0924202C5CF312F3F70B32E107F33 -:103B0000103219F0B29480EFB822002369F001302E -:103B100081F1DD20D9F1CC2091F1F701858180FF81 -:103B200095CF8F7085832BC0DD20B1F0909144023A -:103B30008B2D892BC11003C00E94440BA4CFE1E060 -:103B4000CE12FACF2091050322FD9DCF891709F4EB -:103B50009ACF8093440297CFC11006C00E94FA0901 -:103B60008B2D0E94390B8FCFF1E0CF1609F48BCF4C -:103B7000F5CFDD2031F025E02C1508F484CF8B2D16 -:103B8000DBCF34E03C1508F47ECFEACFCC2041F304 -:103B9000093349F4FFEF27EE33E0F1502040304085 -:103BA000E1F700C00000802F0E944E0B6CCF812FE8 -:103BB00086958695837061F0813009F064CFC801E5 -:103BC0009370D11002C090E080E00E94AE055BCF00 -:103BD000C8019370D11002C090E080E00E94C4053B -:103BE00052CF802FDD2029F00E94BC070E94DA0608 -:103BF0004ACF0E940107FACF812F837009F03FC09E -:103C0000D11041CF402F429546954770440F440F45 -:103C1000802F8F7090E0042E02C0880F991F0A94A5 -:103C2000E2F730E020E004FF09C02FE030E002C0FE -:103C3000220F331F4A95E2F7209530951695169579 -:103C40001370123099F078F4409145025091460279 -:103C5000113039F0822B932B842395230E941E0B65 -:103C600012CF842B952B822B932BF8CF822B932B67 -:103C7000209145023091460282279327EFCF869507 -:103C8000DD2011F0812F8170882309F4FCCE402FB4 -:103C9000429546954770440F440F802F8F7090E0F7 -:103CA000042E02C0880F991F0A94E2F730E020E04A -:103CB00004FF09C02FE030E002C0220F331F4A95F5 -:103CC000E2F720953095169516951370123099F0FD -:103CD00078F44091380350913903113039F0822B38 -:103CE000932B842395230E942E15CDCE842B952BC8 -:103CF000822B932BF8CF822B932B2091380330917A -:103D0000390382279327EFCF1F70DD2029F0812F01 -:103D10000E947215802F10CF802F0E94390B812FA7 -:103D20000E944515B0CE023F09F441C060F4003F47 -:103D300011F1013FA1F1DD2009F457C0C11086CE79 -:103D4000812F8F7131C0033FB9F1043FA1F7DD200E -:103D500009F440C01F71812F0E94721580910503E4 -:103D600082FD07C0E8E01E9FC0011124836080939C -:103D70004002812F19C0DD2069F084E08C1508F421 -:103D800082CE1F7181E090E002C0880F991F1A95C2 -:103D9000E2F7B3CF95E09C1508F475CEF2CF812FF2 -:103DA0008F71DD2009F4BCCF0E9472156CCE812F7B -:103DB0008F71DD20C9F3B4CF90E080E0DD2009F4FD -:103DC00092CF1F7181E090E002C0880F991F1A9571 -:103DD000E2F789CF81E00E945615F1E0FC1508F06A -:103DE00052CE82E00E9456154ECECC2059F00933B7 -:103DF00009F0D9CE2FEF37EE83E0215030408040DC -:103E0000E1F7CFCE812F8F718BCF00313FE51307C4 -:103E100009F4D1CA01319FE51907A9F482E0CCCA9F -:103E200061E0C7010E945C0F8C01F7018281811162 -:103E300017CA0031FFE51F0709F4C3CA01312FE596 -:103E4000120709F4C2CA0238EFE51E0709F425CBB0 -:103E500008F0BDCA00382FE5120709F4EBCA013893 -:103E60003FE5130709F4FCCAF7018281882369F052 -:103E7000C801815E9C45059740F46FE1600F609337 -:103E800050028CE090E00E94862F17FF8FCBF70145 -:103E90008281882309F459C00E94DA0586958170D1 -:103EA0008093E80190915002913029F4882319F011 -:103EB00089E30E94280D809143028093E7011092CC -:103EC000430280915002813009F443CB882309F4E6 -:103ED0003CCB823009F44ACB843009F44ECB8FE3DB -:103EE0009CE90197F1F700C000005801E894B7F889 -:103EF0004CE0C42ED12CC5010C2C02C096958795A0 -:103F00000A94E2F78F7096EF980F963008F43ACB48 -:103F1000805D0E94A90D94E0C91AD108ECEFCE167D -:103F2000EFEFDE0641F780915002813009F430CB8B -:103F3000882309F429CB823009F426CB843009F494 -:103F400033CB8091E70180934302F701828188237C -:103F500009F446C0109295030230FCE51F0708F4EF -:103F60004AC006312CE5120738F098012A5F3C451B -:103F70002930310508F03FC00E94B50F909305032A -:103F80008093040300313CE5130709F4F6CB08F0F5 -:103F900084CB08309CE5190709F4E5CB08F053CB36 -:103FA0000430FCE51F0709F4D6CB08F039CB02300A -:103FB0003CE5130709F4C5CB03301C4509F4C7CB16 -:103FC000609104031091050384E090E00E94862F25 -:103FD000612F82E290E00E94862F0E94291652C92A -:103FE00006311C45D1F58091E90181110CCC89E2A3 -:103FF0000E94450A03CC06312CE5120709F4EECBEA -:104000008091430282720C3C9CE5190709F4AECC06 -:1040100008F02ECC063CFCE51F0709F493CC08F011 -:1040200005CC033C3CE5130709F482CC08F0EDCB4A -:10403000023CECE51E0709F456CC0A35FDE51F07E6 -:1040400009F4D0CC08F0ACCC01153CE5130709F419 -:10405000B9CC0E3D1C4509F4C2CCF701868197818D -:10406000009709F4C3CC0E9472088C01F701D2803A -:10407000C580C2943FE0C322809140028770A1F0C6 -:10408000AD2CDD2091F0812F807F803421F080E203 -:10409000800F883048F082E00E94561580914002DF -:1040A0008770AA24A3948111A12C912E92942FE0C1 -:1040B0009222FBE0F91508F4E6CCE92DF0E0EC5291 -:1040C000F04D0C94052FCF93DF938091FB01807FFF -:1040D000A1F48091F801882381F080913F02D09172 -:1040E000FE016091F6017091F701A091F901B09184 -:1040F000FA01C62FC723D81303C0DF91CF910895CB -:1041000090E0109711F0CF3F19F401968770F3CF2C -:104110009C0143E0220F331F4A95E1F7F901E1507A -:10412000FE4F41814713F1CF40814613EECF4281CC -:104130004111EBCF438154814A1B5B0B483C510535 -:1041400020F78091FB018F7080618093FB01F90162 -:10415000EC5FFD4F80818F708061808386EF91E0FE -:104160000E940519DF91CF910C94A40AAF92BF92DF -:10417000CF92DF92EF92FF920F931F93CF93DF9333 -:10418000CDB7DEB765970FB6F894DEBF0FBECDBFD3 -:104190008C0185E0F801DE01519601900D928A951F -:1041A000E1F7F801E28066EFA62E61E0B62E60919D -:1041B000F9017091FA016115710509F468C19091D6 -:1041C000F6014091F701892F84238F3F09F45FC1E5 -:1041D00020813181C380D480F090F801F601E61B84 -:1041E000F70BFF2009F41DC18091FB01582F507F70 -:1041F000E83CF10508F0D0C0511181C0FE2C4313FA -:104200002BC0921329C06091FC017091FD01F8014F -:104210004681578164177507F9F4E1101DC08F704E -:1042200080618093FB01C5010E9405198091FB010B -:10423000F80185838F2D65960FB6F894DEBF0FBE0B -:10424000CDBFDF91CF911F910F91FF90EF90DF9045 -:10425000CF90BF90AF900895CD2829F0822F83236F -:104260008F3F09F02FC180E0F82FF170DF2E80FF23 -:104270003CC080913F024091FE01841315C0298B00 -:104280003A8B89899A890E94220F292F22952F70B3 -:104290002230F8F0243020F59F70F9F0F801958174 -:1042A000907FD9F4D12C1FC090E0FC0153E0EE0FB9 -:1042B000FF1F5A95E1F7E150FE4F5181351306C0BB -:1042C0005081251303C05281E5120FC001968770FB -:1042D000D4CF9F7011F0882329F3805E883010F3CB -:1042E000C8010E940519FD2CA5CFEE2009F4A2CF2C -:1042F0008091FB0181608093FB01F12C9BCF4313E4 -:104300001BC0921319C04091FC015091FD01F801AE -:10431000268137814217530779F4E1100DC0858358 -:10432000C8010E94051988E0F801A6EFB1E00190EC -:104330000D928A95E1F77ECFC8010E942E0F882347 -:1043400039F1EE2029F18091FB018032A0F020911B -:10435000F6013091F7013A8729871B86DD86CC86E6 -:104360008E878091FC019091FD01988B8F87CE0103 -:1043700009960E94051988E0F801A6EFB1E00190C6 -:104380000D928A95E1F70E946320FF24F39452CFA7 -:10439000C8010E940519F9CF51110AC086EF91E0BA -:1043A0000E94051988E0F50111928A95E9F7A5CFD9 -:1043B000431318C0921316C04091FC015091FD01A7 -:1043C000F801268137814217530761F4E1100AC0D2 -:1043D0008583C8010E94051988E0F50111928A952C -:1043E000E9F728CFC8010E942E0F882389F2EE201A -:1043F00079F28091FB01803208F4BDCF2091F60163 -:104400003091F7013A8329831B82DD82CC828E832F -:104410008091FC019091FD0198878F83CE010196D8 -:10442000A8CFE83CF105C0F6FE2CEE2009F4B0CF91 -:1044300043131FC092131DC02091FC013091FD0158 -:10444000F801868197812817390799F49091FB012B -:1044500090FD69CF907F09F466CF8091FB01858341 -:10446000903F09F45DCF982F907F905F8F70892BDC -:1044700056CFC8010E942E0F81117DCF8091FB0184 -:1044800081608093FB01C8010E940519D3CEEE2004 -:1044900009F47ECFC8010E942E0FF82E882309F45C -:1044A00077CF88E0F801A6EFB1E001900D928A95F0 -:1044B000E1F78091F6019091F7010E94220F0E948E -:1044C0006320B8CE81E08E25CFCECF93DF93CDB7DA -:1044D000DEB760970FB6F894DEBF0FBECDBF298759 -:1044E0003A874B875C876D877E878F87988BCE0155 -:1044F00009960E94B620811112C088E0FE0139960B -:10450000DE01119601900D928A95E1F78C859D85CB -:10451000892B29F089859A8589238F3FA9F5809178 -:104520003F029091FE0189131CC060960FB6F8946B -:10453000DEBF0FBECDBFDF91CF91089593E0AA0FEC -:10454000BB1F9A95E1F7A150BE4F98E0FE0131964E -:1045500001900D929A95E1F78093FE010E94A40AC2 -:10456000DECFB8E08B9FC001112481509E4F0E9486 -:10457000B6208823D1F280913F0290E001968770A7 -:10458000992780933F02CBCFA091FE01B0E0CD01EF -:1045900001968770992720913F022817190671F616 -:1045A0000E9429161092FE0110923F0288E0E6EF69 -:1045B000F1E0DF011D928A95E9F7B1CF0F931F93C8 -:1045C000CF93DF9380918C02E0918B02CCE081113C -:1045D0001AC0DF91CF911F910F910895D1E0DE0FA6 -:1045E000D0938B020E2F10E0EC9FF0011124E357C3 -:1045F000FD4F83819481892B29F0808191818923CA -:104600008F3F51F4ED2F80918C02E81738F3109210 -:104610008C0210928B02DDCFC09FD001C19FB00DE4 -:104620001124A357BD4F16968D919C911797892BF6 -:1046300029F418968D919C91019651F42081318135 -:104640004281538164817581868197810E946522B0 -:10465000C09FF001C19FF00D1124E357FD4F14825C -:104660001382D0CF1092F8021092F70210924201FA -:104670008091F6028093F5020E9414060C94DE22CB -:104680002F923F924F925F926F927F928F929F9262 -:10469000AF92BF92CF92DF92EF92FF920F931F9350 -:1046A000CF93DF93C091F502E7E0FE2E01E010E02A -:1046B000FCE02F2EAEEFEA2E8091F6028C1316C08E -:1046C0000E94DE22DF91CF911F910F91FF90EF901A -:1046D000DF90CF90BF90AF909F908F907F906F9022 -:1046E0005F904F903F902F900C941406D0E0FE0105 -:1046F000EE0FFF1FE351FD4F80819181F89EF00185 -:10470000F99EF00D1124E85EFE4F2481211158C05E -:1047100030908C02ADE8B2E030E020E0412C5F0147 -:10472000231508F04BC01A966D907C901B97F501ED -:10473000808091804FEF5FEF512CC52CD12CF6017A -:10474000EE0FFF1FE80DF91D65917491661677064F -:1047500009F4A601672B11F05394EFCF4F3F540794 -:10476000B1F1B80102C0660F771F4A95E2F7462AF9 -:10477000A80102C0440F551F5A94E2F74150510955 -:104780004416150601F5229EF001239EF00D11241A -:10479000E357FD4FF89ED001F99EB00D1124A85E9D -:1047A000BE4F12962D913C91139737832683E0825A -:1047B000E1829187808771E015967C930E94E605DF -:1047C0002196C37079CF14961C921E9213972F5F77 -:1047D0003F4F1C96A5CF9F92AF92BF92CF92DF9290 -:1047E000EF92FF920F931F93CF93DF9300D000D0EF -:1047F00000D0CDB7DEB78E010F5F1F4F86E0F80106 -:1048000011928A95E9F785E7C82E81E0D82EF12C20 -:10481000E12CAA24A394B12CF60181916F018F3F62 -:1048200009F449C0F894E82FE295EF70F0E021A177 -:104830008F70A50102C0440F551F8A95E2F7CA0187 -:10484000922F982B91A392A18095892382A378948B -:1048500000C0EBE7F1E030E020E0912C41914F3FC8 -:1048600009F473C0A42FA295AF70B0E090968C911C -:1048700090E04F7002C0959587954A95E2F780FDCC -:1048800064C08A2D022E01C0880F0A94EAF7982A84 -:104890002F5F3F4F2430310509F7F60131978081B2 -:1048A0008F3F11F00E94180850EA5A95F1F7F8016D -:1048B000EE0DFF1D90828FEFE81AF80AE6E0EE1683 -:1048C000F10409F0A9CF46E050E0B80184E592E098 -:1048D0000E94652FFF24F394009709F4F12C892B93 -:1048E000B1F186E0F801A4E5B2E001900D928A955D -:1048F000E1F781E0809349020E94A205909348026B -:104900008093470280914702909148020E9493054C -:10491000059708F1809154028093670280915502B7 -:1049200080936802809156028093690280915702B9 -:1049300080936A028091580280936B0280915902A1 -:1049400080936C021092490206C080E0A0CF809153 -:1049500049028111D7CF80914201882301F18091D2 -:10496000F7029091F8020097D1F00E9493052091F0 -:10497000890230918A022817390788F49091F5024C -:104980008091F602981709F445C00E9440231092C6 -:104990008A02109289021092F8021092F702809116 -:1049A0004F02882371F080914D0290914E020E9437 -:1049B0009305893E934028F082EE0E944E0B1092A0 -:1049C0004F0280914C02882391F080914A0290918D -:1049D0004B020E949305883E934048F00E94A20536 -:1049E00090934B0280934A0283E70E94280D8F2DFB -:1049F00026960FB6F894DEBF0FBECDBFDF91CF91E4 -:104A00001F910F91FF90EF90DF90CF90BF90AF90EC -:104A10009F9008950E94DE221092F8021092F702F1 -:104A20000E941406BCCF2F923F924F925F926F92DA -:104A30007F928F929F92AF92BF92CF92DF92EF922E -:104A4000FF920F931F93CF93DF93CDB7DEB7699794 -:104A50000FB6F894DEBF0FBECDBF498B5A8B6B8B60 -:104A60007C8B8D8B6111109242021D861E861F86E3 -:104A7000188A85E0FE017196DE01199601900D926B -:104A80008A95E1F78C859D85892B31F089859A85FA -:104A900089238F3F09F0D4C129853A854B855C85F0 -:104AA0006D857E858F8598890E946522C3C028EF19 -:104AB000C2162CE5D20629F4882379F00E9432230D -:104AC000EBCF39EFC3163CE5D30639F4882329F040 -:104AD000809142018111F2CFC3C108E111E0E12CC4 -:104AE000B12CA12C88248394912C9EEF592E442420 -:104AF0004394F8016081718166246A94762C20E0E9 -:104B0000422F50E0FA01EE0FFF1FE60FF71F8591CD -:104B10009491C816D90609F43A01892B11F02F5F38 -:104B2000EFCFF12CFFEF6F167F0609F445C0F801B7 -:104B30004481F09042018F2D411180E0F82FF170F7 -:104B4000FF2EF801258086819B85992309F408C1F1 -:104B5000FF2009F405C1211014C0A40101C0440FB5 -:104B60006A94EAF7842B86838091890290918A0265 -:104B70008E35914030F44EE551E050938A024093D7 -:104B80008902C40102C0880F991F2A95E2F7019794 -:104B9000F80126812817190679F48091F70290917F -:104BA000F802009709F45FC00E9493058F35914089 -:104BB00008F459C0F8014482EF28FFEFAF1ABF0A8A -:104BC000095F1F4F26E0A216B10409F092CF8B8532 -:104BD000882309F420C1EE2009F41DC10E94A2051A -:104BE0009093F8028093F70280918C02883010F540 -:104BF00091E0980F90938C0298E0FE013996DE01C7 -:104C0000119601900D929A95E1F73CE0839FC001C7 -:104C1000112483579D4F28E0FE013196DC0101905D -:104C20000D922A95E1F72FEF3FEFFC0131872087A6 -:104C3000D386C28669960FB6F894DEBF0FBECDBF8D -:104C4000DF91CF911F910F91FF90EF90DF90CF9068 -:104C5000BF90AF909F908F907F906F905F904F909C -:104C60003F902F9008958091F5026090F602982F62 -:104C7000F0E0E0E0861114C09093F5020E171F07D4 -:104C800009F49ACF90E0FC01EE0FFF1FE351FD4FB6 -:104C9000B182A0820196837099278093F6028CCF0F -:104CA000282E312CF101EE0FFF1FE351FD4F208123 -:104CB0003181F7E0F29FD001F39FB00D1124A85E7F -:104CC000BE4F2D913C911197398F288F712C60E048 -:104CD00070E0E72FF0E0EE0FFF1F288D398DE20F17 -:104CE000F31F2591349121153105E1F0F801019070 -:104CF000F081E02DFF8BEE8B60E005C024173507B7 -:104D000009F47F2C6F5FE62FF0E0EE0FFF1F4E8956 -:104D10005F89E40FF51F459154914115510571F7D5 -:104D20007F5FD7CF7720C9F0F801671708F0FD0142 -:104D300044820E171F0721F49093F502F72C3CCF05 -:104D4000981305C0AE17BF0711F49F5F93709101D0 -:104D50002F5F3F4F822F83708DCFF0E0E0E0F7CFE1 -:104D600090E021101FC0B40102C0660F771F2A9582 -:104D7000E2F79B01215031092817390731F4442308 -:104D800009F447C0C5010E94E605C40101C0880FAF -:104D90006A94EAF7982F9095F80186818923868393 -:104DA000F22C0ACF9C01062C02C0359527950A9457 -:104DB000E2F7A90141705527BC01615071098623B2 -:104DC0009723892B11F5452B01F1F80182819381FD -:104DD000892BC1F01B821C821D821E8259825A823D -:104DE0000E94A2058160582F9D838C83F8018281E7 -:104DF00093818F83988729813A814B816D817E8150 -:104E00000E946522F8011582C0CFF22FF1702F2E7B -:104E1000BCCF2F2CBACF9091F5028091F602981753 -:104E200031F00E944023EE2009F436CE03CF0E94D9 -:104E3000DE221092F8021092F7020E941406F3CFBD -:104E400061E0CE0109960E945C0F6C018B85F7EF43 -:104E5000CF16FCE5DF0609F02ACE882309F43DCE03 -:104E600081E08093420118CE1F920F920FB60F92ED -:104E700011242F933F934F935F936F937F938F935F -:104E80009F93AF93BF93CF93DF93EF93FF93D09113 -:104E9000E900DF708091EC00C82FC17080FDC0E890 -:104EA0001092E9008091F000877F8093F000789461 -:104EB0000E943E161092E9008091F0008860809375 -:104EC000F000CD2BCF70C093E900FF91EF91DF91FF -:104ED000CF91BF91AF919F918F917F916F915F9192 -:104EE0004F913F912F910F900FBE0F901F901895EB -:104EF0001F920F920FB60F9211242F933F934F934F -:104F00005F936F937F938F939F93AF93BF93EF9331 -:104F1000FF938091E10082FF09C08091E20082FF4F -:104F200005C08091E1008B7F8093E1008091DA00E1 -:104F300080FF24C08091D80080FF20C08091DA00DB -:104F40008E7F8093DA008091D90080FF9BC080E142 -:104F500089BD82E189BD09B400FEFDCF81E0809367 -:104F60002E0380910903811109C00E9406040E944A -:104F7000D1048091E20084608093E2008091E1009E -:104F800080FF17C08091E20080FF13C08091E20093 -:104F90008E7F8093E2008091E20080618093E20046 -:104FA0008091D80080628093D80019BC85E08093FE -:104FB0002E038091E10084FF29C08091E20084FFEC -:104FC00025C080E189BD82E189BD89B5982F9170A6 -:104FD00080FFFBCF8091D8008F7D8093D800809197 -:104FE000E1008F7E8093E1008091E2008F7E8093CC -:104FF000E2008091E20081608093E20080912F03C3 -:10500000882309F445C084E080932E038091E10059 -:1050100083FF27C08091E20083FF23C08091E100DD -:10502000877F8093E10082E080932E0310922F030C -:105030008091E1008E7F8093E1008091E2008E7F7D -:105040008093E2008091E20080618093E20042E080 -:1050500060E080E00E949F048091F000886080936F -:10506000F000FF91EF91BF91AF919F918F917F9150 -:105070006F915F914F913F912F910F900FBE0F90C5 -:105080001F90189519BC10922E031092090376CF29 -:105090008091E30087FD93E090932E03B7CF78943F -:1050A0001F921FB61F9211248F939F93AF93BF93AC -:1050B0008091000390910103A0910203B09103033A -:1050C0000196A11DB11D8093000390930103A0934D -:1050D0000203B0930303BF91AF919F918F911F90F3 -:1050E0001FBE1F9018951F921FB61F9211248F93F9 -:1050F0009F93AF93BF938091FF02811113C0809162 -:10510000000390910103A0910203B0910303419623 -:10511000A11DB11D8093000390930103A09302038E -:10512000B0930303BF91AF919F918F911F901FBECA -:105130001F901895CDB7DEB7EE970FB6F894DEBF87 -:105140000FBECDBF84B7877F84BF0FB6F894A895F4 -:1051500080916000886180936000109260000FBEB3 -:1051600080E890E00FB6F89480936100909361001E -:105170000FBE85B7806885BF85B7806885BF86E12B -:1051800098E09093C5018093C4010E9406040E9498 -:10519000D1048091E20084608093E2007894809151 -:1051A0002E038823A1F01091E9001F709091EC006C -:1051B000892F817090FD80E8182B1092E900809172 -:1051C000E80083FD0E943E161F701093E90082E004 -:1051D00084BD93E095BD9AEF97BD80936E000E94C9 -:1051E0009C0F811102C00E948A0E05E711E02BE797 -:1051F000C22E21E0D22EF80181918F018F3F11F054 -:105200000E941808C016D106B1F786EF0E94180850 -:1052100087EF0E94180883E90E94180886E90E9417 -:105220001808E4E5F2E08AE592E0A7E6B2E0119220 -:105230001D928E179F07D9F70E941E16811102C07A -:105240000E94B21582E090E00E94722F809360026B -:105250000E94B50F90930503809304030E94EB23F3 -:105260008FE39CE90197F1F700C000000E94EB2357 -:105270008091670280FF08C06FEF7FEF90E080E0D1 -:105280000E94A42F0E944F0C83E090E00E94722F96 -:1052900090E00E941E0B80913803909139030E9488 -:1052A0008A14509A589A559A5D9A549A5C9A8CE04E -:1052B00090E00E94722F90E0B0E0A0E08093500256 -:1052C00090935102A0935202B093530280915A02DC -:1052D000811133C00E941E16811104C00E94B215B4 -:1052E0000E94A21588E090E00E947A2F60938E03BE -:1052F00070938F0380939003909391036E7F71F46A -:105300000E94A21588E090E00E947A2F60938E039D -:1053100070938F0380939003909391030E942B06C8 -:105320001092840280918E0380FF04C060E0869515 -:105330000E942B1481E080935A025198599A5298F6 -:105340005A9A89B1869581704A9928C290E0892B32 -:1053500080935E028AEC92E090937C0280937B02C1 -:1053600060E081E20E942B1481E090E00E942E1503 -:1053700080E091E09093FC028093FB0218E1C12E43 -:10538000D12C00E4A02E87E692E096E0B92EB80E6C -:1053900080912E039924939400E112E1853009F461 -:1053A00051C20E94EB23882359F08FB7F8944091A3 -:1053B00000035091010360910203709103038FBFBA -:1053C000E1E6F2E0A7E6B2E010E000E0302F8D91D8 -:1053D0009191981709F45FC2292F282790E099240A -:1053E0009394422F492109F451C29DAB3EAB8921D0 -:1053F00091E009F490E09FAB0E94A2058160782FB4 -:1054000099AF88AF4DA95EA96FA989AD0E941325F8 -:10541000F801EF59FD4F8081982690828091840297 -:105420008823D1F180918302E0918E03E695E81BF9 -:10543000E0937F02823009F045C2F0E0EC51FD4F6D -:10544000E4910E2F10E0BCE08B2EB3E19B2E8091F7 -:105450008002882361F0109280020E94A20590933E -:105460007E0280937D0210928202109281020E943D -:10547000A205E0917D02F0917E028E1B9F0B8F3F73 -:105480009F4750F4E00FF11FF0937E02E0937D02FE -:105490008DE792E0F4010995E0915E02EE0FEE0FC8 -:1054A000E0935E0289B181FBEE24E0F84A9964C280 -:1054B00080E08E29E82BE0935E02EF70F0E0E15887 -:1054C000FE4F808190915D02890F80935D0220E004 -:1054D000843034F180915C028F5F80935C0212E033 -:1054E00018AB19AA81E08AAB0E94A2058160782FCF -:1054F0009CAB8BAB48A959A96AA98CA90E9413251A -:105500001BA71CA61DA60E94A2058160782F9FA73D -:105510008EA74BA55CA56DA58FA50E94132521E044 -:1055200080915D028D3F2CF580915C0281508093CB -:105530005C021EA21FA281E088A70E94A2058160D2 -:10554000782F9AA789A74EA15FA168A58AA50E9476 -:10555000132519A21AA21BA20E94A2058160782F0E -:105560009DA38CA349A15AA16BA18DA10E941325D3 -:1055700021E080915D02082E000C990B64E070E040 -:105580000E94CF2E80935D02222359F08FB7F894AA -:105590004091000350910103609102037091030355 -:1055A0008FBF86E0E4E7F2E0DE01119601900D92F4 -:1055B0008A95E1F7909076028090770210917802B8 -:1055C000009179021092760210927702109278027E -:1055D00010927902892D882909F448C080917202BD -:1055E000909173020E9493059C0190916E02992301 -:1055F00009F4AEC323333105C8F19F3F19F09F5F13 -:1056000090936E02992059F00E949C079FEF191405 -:105610000CF491E0899F802D1124809376028820DC -:1056200059F00E949C079FEF18140CF491E0899F99 -:10563000802D112480937702309176023323B1F0CC -:1056400020917702222391F045EB3403C00111240D -:10565000992309F494C19093760245EB24039001B9 -:105660001124332309F48FC130937702812F802BCB -:1056700009F448C080917002909171020E949305D4 -:105680009C0190916D02992309F45DC32536310583 -:10569000C8F19F3F19F09F5F90936D02112359F05D -:1056A0000E947A079FEF11160CF491E0899F802DDC -:1056B000112480937802002359F00E947A079FEF0B -:1056C00010160CF491E0899F802D112480937902AB -:1056D000309178023323B1F020917902222391F0A6 -:1056E00045EB3403C0011124992309F450C1909370 -:1056F000780245EB240390011124332309F44BC1B4 -:10570000309379028091760290917702892B909163 -:105710007802892B90917902892B11F00E94DA0688 -:1057200086E0FE013196A4E7B2E001900D928A95E1 -:10573000E1F70E94DA0590915F02891731F00E942B -:10574000DA0580935F020E94AB0B80912E038430B8 -:1057500009F01ECE83E08093E9008091E80082FF8B -:1057600017CE8091E80090E085FF06C00E942504D6 -:10577000882309F414C191E08091E8008B7780932D -:10578000E800992309F404CEE981E150E33108F0FF -:1057900088C1F0E0E052F04D0C94052F92E0D7CD97 -:1057A00080912E03843009F440C080E00E94AB0B4E -:1057B0001092840280917A02811116C090927A022E -:1057C00080918E03982F917090935B028E7F8093CF -:1057D0008E039FEFE0E7F2E09150E040F040E1F708 -:1057E00000C000000E94D90F1092FF020FB6F8947B -:1057F000A895C09260000FBEA092600083B7817F21 -:10580000846083BF83B7816083BF7894889583B7B2 -:105810008E7F83BF0FB6F894A89580916000886151 -:1058200080936000109260000FBE80912D0388234A -:1058300049F00E94EB23E7E6F2E08191811164C216 -:10584000BE12FBCF80912E03853009F4A9CF0E94B0 -:1058500029160E94DA050E94AB0B10927A02809101 -:105860005B02882361F080918E03816080938E03B8 -:1058700060E086950E942B140E94C30F92CD809108 -:1058800085028823C9F30E94D90FF6CF9F5F990C38 -:10589000943009F0A6CD0F5F1F4F0630110509F0B7 -:1058A00095CD8FEF8AAF8BAF1CAE0E94A2058160B1 -:1058B000782F9EAF8DAF4AAD5BAD6CAD8EAD0E94C3 -:1058C0001325ACCD863059F4F0E0EF51FD4FE49153 -:1058D0000E2F10E0ACEF8A2EA2E19A2EB8CD8930BF -:1058E00061F4E695F0E0E252FD4FE4910E2F10E0F6 -:1058F000F8E68F2EF2E19F2EAACD8F3061F4E69567 -:10590000F0E0E552FD4FE4910E2F10E0EAEF8E2E0D -:10591000E1E19E2E9CCD853159F4F0E0E852FD4F37 -:10592000E4910E2F10E07CEA872E71E1972E8FCD47 -:1059300008E210E043E2842E41E1942E883109F41C -:1059400086CD833249F4E6EDF2E00591149163EAE5 -:10595000862E62E1962E7BCD04EF11E05AEE852E65 -:1059600050E1952E843209F472CD00ED17E03AE251 -:10597000832E36E0932E6BCD82E090E09ACD81E0CD -:10598000809376026ACE81E0809377026FCE81E0C9 -:1059900080937802AECE81E080937902B3CE00E2AC -:1059A00010E0CE0101964C018091E80085FD0AC00F -:1059B0008091E8008B778093E8000E94250488237B -:1059C00099F3D9CE8091F100F40181934F010150F8 -:1059D000110951F7D0CE1A8289E08B832DC08A81BC -:1059E000823009F4A7C18330A9F0813009F059C091 -:1059F0002FB7F89460910003709101038091020326 -:105A0000909103032FBF0E940B2F6B837C838D83A8 -:105A10009E8312C0809167028B83809168028C8381 -:105A2000809169028D8380916A028E8380916B02DE -:105A30008F8380916C02888780912E03843009F0D7 -:105A4000A7CC1091E9001F709091EC00892F817014 -:105A500090FD80E8182B82E08093E9008091E800B7 -:105A600080FF0DC050E040E060E270E0CE010196A2 -:105A70000E9456048091E8008E778093E8001F70A2 -:105A80001093E90085CC8A81823059F46B817C8146 -:105A90008D819E810E940B2F86E290E00E94862FCE -:105AA000CBCF8FEF8983C8CF4C816B818A810E94D5 -:105AB000B30E9827892798279E838D83BDCF8D802D -:105AC0009E809824892498248A810B81F8E00F9F76 -:105AD0008001112420E3829F000D111D11248C816F -:105AE00090E0880F991F080F191F692DC80187962C -:105AF0000E94862F682DC8018896D0CF0E941F0E65 -:105B00009BCF8A818138C1F060F4803809F094CF4E -:105B100020E04B816091900380918F030E943213AB -:105B20008BCF823859F1833809F086CF20E040913D -:105B300091036C818B81F2CF60E08B810E942B14EA -:105B40009B8180918E03911111C08E7F80938E0373 -:105B5000109284024FEF80E792E0415080409040E5 -:105B6000E1F700C000000E94D90F66CF81608093EA -:105B70008E0360E086950E942B145ECF8B8180930C -:105B800092035ACF8A81813899F030F4803809F035 -:105B900053CF8091910321CF823891F0833809F05F -:105BA0004BCF80918F038B83809190038C8344CF64 -:105BB00080918E0380FF02C086950FCF80E00DCFCD -:105BC000809192030ACF60918E0370918F03809130 -:105BD0009003909191030E9420132ECF80E18A833D -:105BE0002BCF81E08A8389EFF8CE0A811B811027B1 -:105BF00001271027FE0131963F018C80CF01880DCF -:105C0000911D4C01C801895F9D4F8614970409F4CA -:105C100013CF093FE1E01E0750F40E94722FF301F9 -:105C200084830F5F1F4FFFEF6F1A7F0AEBCFF301E3 -:105C30001482F7CF0A811B81102701271027CE017C -:105C400001963C018C80800E912E911CC801895FC9 -:105C50009D4F8016910609F4EFCE093FE1E01E0743 -:105C600020F4F30164810E94862FFFEF6F1A7F0AF0 -:105C70000F5F1F4FEBCF0E940F0EDECE8AE0AFCF3B -:105C80000A811B81102701271027CE0101963C01B4 -:105C90008C80FC01E80DF11D4F01C8018796861428 -:105CA000970409F4C9CE003EF1E01F0750F40E94AA -:105CB000722FF30184830F5F1F4FFFEF6F1A7F0A6C -:105CC000ECCFF3011482F7CF0A811B811027012743 -:105CD0001027CE0101963C018C80800E912E911CE4 -:105CE000C80187968016910609F4A6CE003EE1E031 -:105CF0001E0720F4F30164810E94862FFFEF6F1AC4 -:105D00007F0A0F5F1F4FECCF09BD19BD09B400FE1C -:105D1000FDCF8091D8008F7D8093D8008091E000E6 -:105D200082608093E0008091E00081FDFCCF0E94C2 -:105D3000291688CD86E290E00E94722F1B821C8279 -:105D40001D828E8379CE2D32314008F0A4CCDACC7E -:105D50002D32314008F053CC89CC87FB082E062623 -:105D600087FD819567FD61950E94432F0EF4919503 -:105D700007FC81950895AA1BBB1B51E107C0AA1F10 -:105D8000BB1FA617B70710F0A61BB70B881F991FDC -:105D90005A95A9F780959095BC01CD01089597FB80 -:105DA000072E16F4009407D077FD09D00E94BB2E71 -:105DB00007FC05D03EF4909581959F4F089570950E -:105DC00061957F4F0895A1E21A2EAA1BBB1BFD010E -:105DD0000DC0AA1FBB1FEE1FFF1FA217B307E407CA -:105DE000F50720F0A21BB30BE40BF50B661F771F22 -:105DF000881F991F1A9469F7609570958095909502 -:105E00009B01AC01BD01CF010895EE0FFF1F05906E -:105E1000F491E02D09946927962769277827872729 -:105E2000782708950E941A2F332312F48A1B9B0BA4 -:105E30000C942B2FA29FB001B39FC001A39F700DA4 -:105E4000811D1124911DB29F700D811D1124911D82 -:105E500008950E941A2FB7FF0895821B930B08958F -:105E60000E941A2FA59F900DB49F900DA49F800DA6 -:105E7000911D11240895B7FF0C94302F0E94302FEC -:105E8000821B930B0895991B79E004C0991F961704 -:105E900008F0961B881F7A95C9F780950895FB0135 -:105EA000DC0102C005900D9241505040D8F7089592 -:105EB000FC014150504030F001900616D1F7319767 -:105EC000CF010895882799270895FB01DC0104C0BC -:105ED0008D910190801921F441505040C8F7881BE2 -:105EE000990B0895F999FECF92BD81BDF89A992733 -:105EF00080B50895A6E1B0E044E050E00C94AC2FEA -:105F0000A8E1B0E042E050E00C94AC2F262FF999C4 -:105F1000FECF92BD81BDF89A019700B4021639F008 -:105F20001FBA20BD0FB6F894FA9AF99A0FBE0895D9 -:105F30000396272F0E94872F0E94862F252F0E94CD -:105F4000872F242F0C94872F0196272F0E94872FAD -:105F50000C94862FDC01CB01FC01F999FECF06C021 -:105F6000F2BDE1BDF89A319600B40D924150504017 -:105F7000B8F70895F894FFCF470F470F500F500F11 -:105F8000520F500F500F500F470F470F570F500F22 -:105F9000500F570F23174B179E174B179E177E173F -:105FA000B6179E17B318C0180D1D0D1D7C1D7C1D46 -:105FB000D71DF11D431D431DFC1D841E931E931E02 -:105FC000EB2CEF2C432D542D5F2D7E2D812DC22DDA -:105FD000E32D512D512DEE2DF12DF52D1A2E3B2EA9 -:065FE0003E2E402E642E4F -:105FE60090050F0CEE0BEA0BE60B01191A1B1C1D94 -:105FF6001E1F202122010201FC002A00000000F6DB -:10600600004C00000000F0005000000000EA0051C3 -:1060160000000000E4004F00000000DE0052000017 -:1060260000000101818283E200E900EA00B500B6C2 -:1060360000B700CD008301CC008A019201940121B2 -:1060460002230224022502260227022A02B300B4F2 -:10605600006F007000F03435366667F6F7939600E9 -:10606600FF0100010000FFFF0000010001FF00002A -:1060760001020202020606060909090909090F0FAB -:106086000F0F0F0F151515181919191919191919AF -:10609600191923244022B6DA01B8010201FB0614BD -:0460A60007340700B4 +:101CF0000E94852F6FEFC11169E084E290E00E949D +:101D0000852F6FEFC11163E185E290E0CF910C94D4 +:101D1000852F80E00E94710E60E086E290E00E94D4 +:101D2000852F0E941F0E0E940F0E81E00C94710EF1 +:101D3000CF93C0910503C2FB992790F9981781F0C2 +:101D400080FBC2F9C09305036091040384E090E036 +:101D50000E94852F6C2F82E290E0CF910C94852F0A +:101D6000CF9108950F931F93CF93DF9328E0629F45 +:101D7000E001112450E0440F551FC40FD51F30E37C +:101D8000839FC00DD11D1124CE0187960E94712F13 +:101D9000082F10E0102F0027CE0188960E94712F87 +:101DA0009801282BC901DF91CF911F910F910895C0 +:101DB000462F8A3038F4763028F4643018F4672FD0 +:101DC0000C94B20E90E080E00895BF92CF92DF9223 +:101DD000EF92FF920F931F93CF93DF937C010091BB +:101DE0003803109139038091450290914602082BE7 +:101DF000192BCFE0D0E0CC24C394D12CBC2EC6014B +:101E00000C2E02C0880F991F0A94E2F780239123B9 +:101E1000892B71F4219790F7B12C8B2DDF91CF9105 +:101E20001F910F91FF90EF90DF90CF90BF9008959A +:101E3000B7018C2F0E94D80E0E947208019751F3AF +:101E4000ECCFCF93DF93EC010E94E50EBE010E9420 +:101E5000D80EDF91CF910C947208FC018681978196 +:101E6000009779F00E947208292F2F7092959F7029 +:101E700092509E30A0F4E92FF0E0E554F04D0C9420 +:101E8000042F808191810E94210FEECF803F19F0B5 +:101E900020F4883E20F481E00895843FE1F380E05F +:101EA0000895883EC0F3813FD1F7F5CF822F869504 +:101EB0008695869508951F93CF93DF9300D000D029 +:101EC0000F92CDB7DEB7FC01268137812115310590 +:101ED00041F525E0DE01119601900D922A95E1F77A +:101EE000FC01228189819A812223B9F06623A9F01D +:101EF0000E94E50E182F682F89819A810E94D50AC9 +:101F000069817A81812F0F900F900F900F900F9021 +:101F1000DF91CF911F910C94D80E0E94AE0A182F1A +:101F2000EFCFC9010F900F900F900F900F90DF919E +:101F3000CF911F91089583E290E00E94712F81322A +:101F400089F484E290E00E94712F893059F485E28F +:101F500090E00E94712F91E0833109F090E0892F89 +:101F60008170089580E0FCCFCF9384E090E00E94E0 +:101F7000712FC82F82E290E00E94712F982F8C2F32 +:101F8000CF91089560918E03669570E04BE050E02C +:101F90008AE091E00E94572F892B19F481E0809309 +:101FA00084020E94A20590937E0280937D02089590 +:101FB0005F926F927F928F929F92AF92BF92CF92D9 +:101FC000DF92EF92FF920F931F93CF93DF93CDB7E2 +:101FD000DEB7C455D1090FB6F894DEBF0FBECDBF32 +:101FE00080918E0380FD0AC0EAE3F3E01182108243 +:101FF0001282339623E0EE38F207C1F780907B021D +:1020000090907C028114910409F459C080917A0265 +:10201000811155C0D12CC12C66246394712C13E01E +:10202000512E8091850293010C2C01C0220F0A943D +:10203000EAF7822309F43BC0F601EE0FFF1FE80D1B +:10204000F91DE590F490E114F104C9F145E050E088 +:10205000B701CE0101960E944E2F09810F3F39F141 +:102060008A81800F9927991F8D31910514F08CE199 +:1020700090E05C01AA0CBB1C8A0D9B1DFC01E65C78 +:10208000FC4F5F01059D80011124065C1C4F0A1561 +:102090001B0520F0F5E0EF0EF11CD8CF98014D8123 +:1020A0006C818B810E9441060D5F1F4FF0CF2FEF97 +:1020B000C21AD20A38E0C316D10409F0B2CF7DEEBD +:1020C000A72E73E0B72EDE011196AE014B5A5F4F7B +:1020D0001A2F7B2FF5018491282F30E0C901880F3A +:1020E000991F820F931F865C9C4FFC01C080D1809A +:1020F000E280CD92DD92ED92FFEFAF1ABF0AA417F6 +:10210000B50741F7279A35B13F7725B120686FB7FA +:10211000F894812F972FFC017191CF01E8E025B948 +:10212000000000C077FF35B9770F000000C000C085 +:1021300000C035B900C0EA9591F78417950759F7A3 +:102140006FBF8FE594E00197F1F700C00000CC5A13 +:10215000DF4F0FB6F894DEBF0FBECDBFDF91CF913A +:102160001F910F91FF90EF90DF90CF90BF90AF90B5 +:102170009F908F907F906F905F9008951F93CF9363 +:10218000DF9300D00F92CDB7DEB7162F90918E035C +:1021900090FF18C09E012F5F3F4F48E76FEF0E94EE +:1021A00041068B819981612F70E0FB01EE0FFF1FCB +:1021B000E60FF71FE65CFC4F2A8121839083828320 +:1021C0000E94D80F0F900F900F90DF91CF911F9129 +:1021D0000895EF92FF920F931F93CF93DF938C019B +:1021E000CAE3D3E0F12CE12CF801948160919003D3 +:1021F00080918F03FEE0EF16F104FCF49923F9F0CF +:102200009E01409191030E9441062FEFE21AF20ACB +:1022100023968CE1E816F10439F70E94D80FF801F3 +:10222000848190E00196817099278483DF91CF911A +:102230001F910F91FF90EF900895992309F39E014C +:1022400040E0E1CF8F929F92AF92BF92CF92DF9208 +:10225000EF92FF920F931F93CF93DF93EC014C818A +:10226000042F10E09801D8010E94192F9B01AC01A6 +:102270000E942F2F4B015C01E0E2F0E0E01BF10B2C +:10228000A5E5B0E0AC019B010E942F2F6B017C0102 +:102290009F01DF010E94112F9B01AC010E943A2F88 +:1022A0009B01AC01280D391D4A1D5B1DC701B601FC +:1022B0000E94E22EF22E822F90E039E23F15D8F1F3 +:1022C00043E0249F9001112435952795122F1095F6 +:1022D0009AE3C92E93E0D92E00E085E5E82EEF18A9 +:1022E0008E2D01FD8F2D9601412F609190030E944C +:1022F00041060F5F53E0C50ED11C0C3189F70E94D7 +:10230000D80F9C8181E0992319F0903219F48FEF56 +:102310008093170180911701890F8C83DF91CF91F2 +:102320001F910F91FF90EF90DF90CF90BF90AF90F3 +:102330009F908F90089525E530E0A901481B590B27 +:10234000CA019A01220F331F280F391F37FFBCCF54 +:102350002F5F3F4FB9CF0F931F93CF93DF93CAE304 +:10236000D3E0FE01118210821282339683E0EE38B0 +:10237000F807C1F710E000E080918702082E000CFA +:10238000990B081719078CF180911601082E000C83 +:10239000990B801791074CF19E0140919103609138 +:1023A000900380918F030E9441060F5F1F4F239679 +:1023B0000C31110509F70E94D80F809115019091F9 +:1023C0008702980F9093870220911601280F20937F +:1023D0001601121614F49B311CF08195809315019F +:1023E000DF91CF911F910F910895198218821A825F +:1023F000DCCFBF92CF92DF92EF92FF920F931F93A9 +:10240000CF93DF93FC018281DD24DA9480FD02C04A +:10241000DD24D3940AE313E0D0E0C0E02CE1B22E37 +:10242000F80111821082128294E0E92EF12CC12C65 +:10243000809186028C0D8D310CF43DC06B2D0E9475 +:10244000AC2E892F082E000C990B8C179D0791F448 +:10245000809191038E9DA0018F9D500D1124559563 +:1024600047955595479598016091900380918F030A +:102470000E944106CD0CF1E0EF1AF108C9F6219651 +:102480000D5F1F4FCC31D10559F60E94D80F8091B6 +:10249000860291E0D91215C0811111C08BE18093A1 +:1024A0008602DF91CF911F910F91FF90EF90DF9007 +:1024B000CF90BF90089587FFC5CF845EC3CF815072 +:1024C000EECF90E00196BE010E94CE2EE8CFEF92B3 +:1024D000FF921F93CF93DF93EC018AE3E82E83E012 +:1024E000F82E10E08C819701409191036091900348 +:1024F000810F0E944106175F83E0E80EF11C1C3F2C +:1025000089F70E94D80F9A818C8190FF08C08F5F55 +:102510008C83DF91CF911F91FF90EF9008958150B0 +:10252000F7CF90918E0390FF0CC0EAE3F3E0818334 +:1025300060834283339693E0EE38F907C1F70C9439 +:10254000D80F08950F931F93CF93DF9300D00F926E +:10255000CDB7DEB78C018091880281110AC09E013F +:102560002F5F3F4F44EB6FEF0E9441068A818093BB +:102570008802F8016481613069F08091880240E04E +:10258000662361F040E0623011F44091880280E0FF +:1025900060E004C06091880240E080E00E949112F7 +:1025A000F801848190E0019663E070E00E94CE2EF5 +:1025B00084830F900F900F90DF91CF911F910F9117 +:1025C0000895CF93DF9300D00F92CDB7DEB79091EF +:1025D0008E0390FF0AC09E012F5F3F4F0E9441066D +:1025E0004B8169818A810E9491120F900F900F9008 +:1025F000DF91CF910895CF93DF93EC01EEE8F3E004 +:10260000438162818C810E94E1128C818F5F8C8377 +:10261000DF91CF910895CF93DF93EC01EC81F0E04F +:10262000E75FFB4F4491EEE8F3E0628181810E9415 +:10263000E1128C818F5F8C83DF91CF910895CF92CF +:10264000DF92EF92FF926B017C010E942B06B70193 +:10265000A60188E090E0FF90EF90DF90CF900C947F +:10266000972F5F926F927F928F929F92AF92BF92BD +:10267000CF92DF92EF92FF920F931F93CF93DF934E +:1026800000D00F92CDB7DEB7182F762E042F622E12 +:1026900090918E0390FF29C0E92FE695AE2FB0E010 +:1026A000A157BE4F8C91809383029E7F923081F51B +:1026B0009E012F5F3F4F812F0E9441064B81698110 +:1026C0008A810E94911210938F037092900300935D +:1026D0009103662051F060918E0370918F03809179 +:1026E0009003909191030E941F130F900F900F90F1 +:1026F000DF91CF911F910F91FF90EF90DF90CF90DE +:10270000BF90AF909F908F907F906F905F90089553 +:10271000823019F400919103D6CF863019F41091CC +:102720008F03D1CF8930D9F3893169F6E9518E2FE2 +:102730008170582EE695F0E0E851FC4FA590B490DA +:10274000BB248AE3E82E83E0F82ED12CC12C9CE137 +:10275000892E912CC601B4010E94BA2E812F5110EE +:1027600013C0860F9701402F672D0E944106CA0CA7 +:10277000DB1C83E0E80EF11C8EE8E81683E0F80627 +:1027800049F70E94D80F9FCF861BECCFEEE8F3E00D +:10279000438128E0421B08F440E021E0628181810E +:1027A0000C943113EEE8F3E0438128E0420F08F483 +:1027B0004FEF21E0628181810C943113EEE8F3E068 +:1027C000628128E0621B08F460E021E0438181819E +:1027D0000C943113EEE8F3E0628128E0620F08F414 +:1027E0006FEF21E0438181810C943113EEE8F3E037 +:1027F000818121E04381628188500C943113EEE89D +:10280000F3E0818121E043816281885F0C94311380 +:1028100080919203882319F08150809392036091F4 +:102820008E0370918F0380919003909191030C948B +:102830001F1380919203833018F48F5F809392036B +:1028400060918E0370918F0380919003909191031A +:102850000C941F1390918E0390FF36C091708111DC +:1028600029C0926090938E03662351F060918E038D +:1028700070918F0380919003909191030E941F1398 +:1028800060918E03669570E04BE050E08AE091E045 +:102890000E94572F892BA9F01092840281E0809327 +:1028A000800220E0409191036091900380918F031A +:1028B0000C943113853210F09864D4CF880F982B84 +:1028C000D1CF0E94C20FEACF089521E030E0A901E4 +:1028D00002C0440F551F8A95E2F7CA012091850274 +:1028E000662399F0822B8093850280918402811166 +:1028F00006C080918E0360E086950E942A14809124 +:102900008E0380FD05C00C94D80F80958223EBCFF9 +:1029100008950F931F93CF93DF93EC0161E000972D +:1029200009F0682F617080E00E94651460E02097D4 +:1029300021F0BE0176956795617081E00E94651473 +:1029400060E0209731F0BE017695679576956795A2 +:10295000617082E00E94651460E0209739F0BE014A +:1029600013E0769567951A95E1F7617083E00E9410 +:10297000651460E0209739F0BE01B4E07695679564 +:10298000BA95E1F7617084E00E946514AE0170E0D1 +:1029900060E0BB27A72F962F852F0097A105B105D3 +:1029A000D9F1AC01BD0188E08A019B01F4E03695C4 +:1029B000279517950795FA95D1F70115110521056A +:1029C000310519F08C5FB901A8018A019B01E2E091 +:1029D0003695279517950795EA95D1F701151105B5 +:1029E0002105310519F08E5FB901A801769567952B +:1029F00057954795452B462B472B09F08F5F823023 +:102A000011F160F4882399F08130C1F0CE01DF919B +:102A1000CF911F910F91089580E0C6CF8330C1F010 +:102A20008430A1F720E044E66FEF8FE004C020E09F +:102A300044E66FEF82E30E943113E8CF20E044E6E2 +:102A40006FEF85E0F8CF20E044E66FEF80E8F3CF4A +:102A500020E044E66FEF87EDEECF0E94891490935B +:102A60003903809338030C94010B809138039091C3 +:102A700039039C01267033272630310519F488600C +:102A80000C942D15877FFCCF21E030E002C0220F8F +:102A9000331F8A95E2F72095309580913803909105 +:102AA0003903822393230C942D1590914002809535 +:102AB000892380934002282F277039F4282F082E6D +:102AC000000C330B9217130621F49091050392FF2B +:102AD00007C08595859585950E9444151092400202 +:102AE000089521E030E002C0220F331F8A95E2F7FB +:102AF0008091380390913903822B932B0C942D15E0 +:102B000080918E038695815009F484E261E00C94F3 +:102B10002A1480918E0386958F5F853208F081E0BC +:102B200061E00C942A1490918E0390FF07C0969553 +:102B3000981720F0961710F40C94891561E00C9406 +:102B40002A14EEE8F3E083E0808311828FEF828322 +:102B500088E28383148260817181828193810C94E5 +:102B60001F1369EE7EEF90E080E00E94A32F60E0EB +:102B700082E090E00E94852F60E083E090E00E9478 +:102B8000852F109246021092450260E084E090E0AA +:102B90000E94852F60E082E290E00E94852F60E035 +:102BA00085E090E00E94852F60E086E090E00E9442 +:102BB000852F6FEF87E090E00E94852F40E050E086 +:102BC000BA0188E090E00E94972F60E08DE090E0ED +:102BD0000E94852F40E050E0BA0188E190E00E9419 +:102BE000972F60E087E190E00E94852F40E050E061 +:102BF000BA018CE190E00E94972F70E060E080E2E3 +:102C000090E00E94A32F40E050E0BA0188E190E0FC +:102C10000E94972F80E00E94710E0E94890E40E072 +:102C200050E0BA018FE090E00E94972F40E050E022 +:102C3000BA0183E190E00C94972F90E080E00E942D +:102C40007F2F893E9E4F11F40C949B0F80E00895D6 +:102C50001092430280914301E8ECF1E0882359F09F +:102C60008091040387FF07C08EE1DF011D928A95E2 +:102C7000E9F70C94010B86E0F8CF1F93CF93DF9315 +:102C8000CDB7DEB7AA970FB6F894DEBF0FBECDBFA3 +:102C900080E393E02091F100DC012D93CD01B3E0BE +:102CA00088339B07B9F780913103833009F471C0F1 +:102CB000B8F4813009F448C0823009F4B2C0809180 +:102CC000E80083FF3AC180913003909131039A303C +:102CD00008F033C1E92FF0E0E753F04D0C94042FD6 +:102CE0008A3009F48DC08B3009F470C0893039F70F +:102CF00080913003813219F780913403909135032C +:102D0000009711F00297D9F68091E800877F8093B1 +:102D1000E8008091E80082FF37C09091F300809135 +:102D2000F200029729F48091F1008B7F813021F429 +:102D30008091F10080930B038091E8008B77809362 +:102D4000E8000E948004BBCF80913003813A09F0F3 +:102D5000B6CF8091E800877F8093E80080913403AC +:102D600090913503892B61F460E28CE093E070E090 +:102D70000E9432058091E8008B778093E8009FCF16 +:102D800060E090E080E0F3CF80912E038111C1CF0D +:102D900096CF80913003813A09F091CF809134032E +:102DA00090913503892B09F08ACF8091E800877FC5 +:102DB0008093E8008091E80080FFFCCF8091430180 +:102DC0008093F1008091E8008E77B9CF8091300335 +:102DD000813209F074CF8091340390913503892BAF +:102DE00009F06DCF8091E800877F8093E8000E9412 +:102DF000800480913203809343010E9428165FCFA4 +:102E000080913003813209F05ACF8091E800877FAA +:102E10008093E8000E9480048091330380930A032A +:102E20004ECF80913003813A09F049CF8091E8007C +:102E3000877F8093E8008091E80080FFFCCF80913D +:102E40000A03BECF803899F0823809F076C08091AD +:102E500034038F70873008F070C08093E900809150 +:102E6000EB0085FB882780F91092E90006C080916D +:102E70002C0390912D03911182609091E800977F2F +:102E80009093E8008093F1001092F1008091E800A7 +:102E90008E77B5C1882309F4A2C1823009F04DC0F4 +:102EA000809132038111A6C1809134038F702FEF7E +:102EB000280F263008F041C08093E9002091EB00F4 +:102EC00020FF98C1933031F48091EB0080628093B1 +:102ED000EB0090C19091EB0090619093EB0021E0AA +:102EE00030E001C0220F8A95EAF72093EA001092A1 +:102EF000EA008091EB008860EACF81111EC010913A +:102F000032031F778091E3008078812B8093E30068 +:102F10008091E800877F8093E8000E948004809180 +:102F2000E80080FFFCCF8091E30080688093E3009D +:102F300082E0111183E080932E038091E80083FFEB +:102F40000AC08091E800877F8093E8008091EB00C1 +:102F500080628093EB00AA960FB6F894DEBF0FBE96 +:102F6000CDBFDF91CF911F9108958058823028F70F +:102F700020913203309133032C3DE3E03E07A1F56D +:102F800083E08A838AE289834FB7F894DE0113963F +:102F900020E03EE051E2E32FF0E050935700E4914F +:102FA00020FF03C0E295EF703F5FEF708E2F90E03F +:102FB000EA30C0F0C7968D939D932F5F243159F767 +:102FC0004FBF8091E800877F8093E8006AE270E05D +:102FD000CE0101960E9432058091E8008B778093A4 +:102FE000E800ABCFC096E7CF8091340390913503D2 +:102FF000432F55274330510509F44AC078F5413035 +:10300000510509F47AC08BE590E0E9EEF6E0423034 +:10301000510509F092CF2091E800277F2093E80026 +:1030200020913603309137038217930708F49C01EF +:1030300040E02115310509F065C0411163C0809160 +:10304000E80082FDC9CF80912E03882329F28530C4 +:1030500019F28091E80083FFF2CFBECF41325105D3 +:1030600009F43CC04232510509F067CF8330910525 +:1030700008F063CFFC01EE0FFF1FE954FE4F0190F3 +:10308000F081E02D8C549E4FDC018C9190E01AC0B1 +:10309000332721303105D1F02115310561F022307F +:1030A000310509F04ACFE6E5F7E0E4918E2F90E094 +:1030B000E6E5F7E007C0E6E7F7E0E4918E2F90E061 +:1030C000E6E7F7E0009709F438CFA5CFE2E6F7E0AE +:1030D000E4918E2F90E0E2E6F7E0F4CF83309105A3 +:1030E00008F02BCF880F991FFC01E354FE4F01908D +:1030F000F081E02D89E090E08ECF82E190E0E4E481 +:10310000F7E089CF80912E03882309F465CF8530BD +:1031100009F462CF8091E80083FD5ECF8091E800E2 +:1031200082FD8DCF8091E80080FF83CF9091F300E6 +:103130008091F2002115310519F08830910550F089 +:1031400041E0089709F040E08091E8008E77809395 +:10315000E8006FCF44914093F1003196215031093E +:103160000196E8CF803809F0E8CE8091E800877FAB +:103170008093E80080912F038093F10087CE811126 +:10318000DCCE10913203123008F0D7CE8091E800E7 +:10319000877F8093E80010932F030E9480041123FF +:1031A00011F084E005C08091E30087FDFACF81E053 +:1031B00080932E0342E061EC81E00E949F0442E292 +:1031C00061EC84E00E949F0442E261EC82E00E9494 +:1031D0009F0442E260EC83E00E949F04AECE8091A7 +:1031E0003203813009F0A9CE81E0933009F080E00C +:1031F00080932D031092E9008091E800877F8093EF +:10320000E8000E94800499CE9F92AF92BF92CF9225 +:10321000DF92EF92FF920F931F93CF93DF9300D033 +:1032200000D0CDB7DEB77C01FC0183819481892B6E +:1032300031F08081918189238F3F09F0F0C50F9093 +:103240000F900F900F90DF91CF911F910F91FF90F2 +:10325000EF90DF90CF90BF90AF909F90089598012E +:1032600022513F452031310508F0CEC58FEF93E064 +:103270000E94712F025167E0C62E62E0D62E88238D +:1032800039F1809140028770D1F2F7018281882361 +:10329000B1F282E00F900F900F900F90DF91CF91DD +:1032A0001F910F91FF90EF90DF90CF90BF90AF9064 +:1032B0009F900C945515C114F4E0DF0611F3C6017C +:1032C0000E94712F811101C001502FEFC21AD20A42 +:1032D0000111F1CF1C821B82BB24B3945AE0A52EAE +:1032E00086010F5F1F4FC6010E94712F89831A82CA +:1032F000882339F29FEF980F933008F58A83B982BB +:1033000032E0C30ED11CC8010E94712F8B83882329 +:1033100009F4B7CF8E010F5F1F4FF801808188231A +:10332000F9F2813009F043C091818281913049F4F2 +:103330000E5F1F4F0E94280D0F5F1F4FEECF6801D9 +:10334000E9CF923029F40E5F1F4F0E94730CF4CF27 +:10335000933029F40E5F1F4F0E944E0BEDCF943037 +:1033600019F00F5F1F4FE8CF0E5F1F4F30E020E0D6 +:10337000B8016F5F7F4FF80141818053990B8A300C +:10338000910550F021503109B8F28FE99FE0019783 +:10339000F1F700C00000F6CFA29EF001A39EF00D51 +:1033A00011249C012E0F3F1F842F8B01E1CF0E941F +:1033B000A90DC2CF81E00E9471150E94351561CF21 +:1033C00081E00E944415F9CF82E0FBCF04389FE5ED +:1033D000190709F483C008F473C00538FFE51F0717 +:1033E00009F041C5882309F43EC580EE0E94730CA4 +:1033F00081EE0E94730C80E10E94730C80E10E94B8 +:103400004E0B81EE0E944E0B80EE0E944E0B80917F +:10341000E60191E062E189278093E601882309F4BF +:103420008DC08FE00E94BE1066E18FE00E94BE104A +:103430001AC5882369F180914F02811106C081E08D +:1034400080934F0282EE0E94730C0E94A20590931B +:103450004E0280934D028BE20E94730C04C58823B8 +:10346000A1F080914F02811106C081E080934F024C +:1034700082EE0E94730C0E94A20590934E028093EC +:103480004D0281EE0E94730CE6CF81EE0E944E0B3E +:103490008BE20E944E0BE7C4882309F4E4C481EE5A +:1034A0000E94730C83EE0E94730C8FE40E94730CD5 +:1034B0008FE40E944E0B83EE0E944E0B81EEE9CF0B +:1034C000882309F4D0C481EE0E94730C83EE0E941D +:1034D000730C80E50E94730C80E5EBCF882309F420 +:1034E000D0CE10914C0281E0182710934C020E941C +:1034F000A20590934B0280934A0268E1112381F068 +:103500008FE00E94BE1069E18FE00E94BE106AE168 +:103510008FE00E94BE106BE18FE00E94BE10B1CE22 +:1035200084EB0E94BE1069E184EB0E94BE106AE148 +:1035300084EB0E94BE106BE184EBEFCF8FEA0E9418 +:10354000BE1066E18FEA72CF82EE0E94730CC6C491 +:1035500083E00E942F0B88E10E94730C88E10E9497 +:103560004E0B83E00E94240BB9C482EE0E94730CC0 +:1035700087E50E94280DB2C486EE0E94280D88E1DE +:10358000F8CF895AC5C482EE0E944E0BD9C48CE292 +:103590000E94280D8091E801882309F4D1C489E3B1 +:1035A0000E94280DCDC488E2FBCF033FFCE51F0736 +:1035B00039F1A0F4083D3CE51307F1F0093D8CE535 +:1035C000180751F1073D9CE5190709F0BDC426E233 +:1035D00041EE61EEC7010E94450D53CE053FECE57B +:1035E0001E07B1F088F0063F2CE5120709F0ACC4C5 +:1035F00027E245EE66EEEECF27E245EE65EEEACF36 +:1036000026E241EE60EEE6CF27E245EE64EEE2CF41 +:1036100026E241EE62EEDECF28E241E0EFCF80917C +:103620000403806106309CE5190709F48CC0809181 +:103630000403886007301C4508F485C080910403AA +:10364000806281C0809104038D7F0C30FCE51F07F0 +:1036500009F479C070F4809104038C600A303CE571 +:10366000130709F470C008F481C0809104038E7FB1 +:103670006AC080910403877F0E309CE5190709F426 +:1036800062C0809104038B7F0F301C4508F45BC03F +:10369000809104038F7E57C00B3FFCE51F0709F4A0 +:1036A0005DC030F503313CE5130709F46DC078F4D3 +:1036B00001319CE5190709F463C002311C4509F08A +:1036C0007EC40E942816809104038F773CC0053188 +:1036D000FCE51F0709F460C008F474C0809105037D +:1036E00081600A3F1C4509F06AC48093050367C4E2 +:1036F0000F3F8CE5180709F44BC088F4809105034F +:103700008D7F0D3FECE51E0781F3809105038E7FD1 +:103710000E3F1C4550F3809105038360E6CF0130D6 +:103720002DE5120709F457C008F442C060E00230EA +:103730001D4509F044C48EE090E00E94852F3FC4EF +:103740008091040381608093040339C48091040351 +:103750008260F9CF809104038460F5CF80910503E6 +:103760008260C3CF809104038064EDCF0E9428164D +:10377000809104038068E7CF809104038F7DE3CFBD +:10378000809104038F7BDFCF80910403837FDBCFA5 +:10379000809105038C7FA9CF8091040382FB992738 +:1037A00090F921E0922790FB82F990FB83F9CBCF2F +:1037B00080910503982F909591708E7F892B90FBB7 +:1037C00081F993CF0E94281690910403892F97FBCB +:1037D00087F98058B8CF61E0AECF882309F402C4DE +:1037E000809143028A7A91E009F490E09093E90194 +:1037F000811106C089E20E94700A0E94000A41CD30 +:1038000085E3F9CF85E3F3C3043CFCE51F0709F426 +:1038100093C046EF53E16FEF73E1053C2CE51207CF +:1038200009F00AC40E9425062CCD093C3CE513078B +:1038300009F491C070F4073CECE51E0709F486C05A +:103840004AEE53E16EED73E1083CFCE51F0751F3CE +:10385000F3C30A3C2CE5120709F482C048E054E1A6 +:1038600069E174E10B3C3CE51307E1F2E5C3013D7E +:103870008CE5180709F487C0B0F40E3CECE51E0790 +:1038800009F47BC008F476C00F3C2CE5120709F45C +:1038900077C06EE089E0003D3CE5130709F0CCC33A +:1038A0000E949315EECC043D8CE5180709F471C015 +:1038B00078F4023DECE51E0709F468C061E088E198 +:1038C000033DFCE51F0709F0B7C30E942A14D9CCB9 +:1038D000053D2CE5120709F45FC00D35100709F40A +:1038E000D0CCAAC380918E0380FF1BC08E7F8093B3 +:1038F0008E0360918E0370918F038091900390915D +:1039000091030E941F13109284028FEF90E7E2E070 +:1039100081509040E040E1F700C000000E94D80FC5 +:10392000B0CC816080938E0361E08695CECF40E875 +:1039300055E169E875E176CF49E855E160E875E160 +:1039400071CF4FEF53E166EF73E16CCF4EED53E172 +:103950006AEE73E167CF46EC53E162ED73E162CF4B +:1039600042ED53E166EC73E15DCF49E154E168E07B +:1039700074E158CF61E081E0A8CF65E082E090CFAC +:1039800068E086E08DCF64E18FE08ACF67E185E172 +:1039900087CF62E289E184CF61E083E296CF0B3585 +:1039A0009DE5190701F10C351D4509F055C38091BE +:1039B000050382FB882780F991E089270E94980EF1 +:1039C0004BC30E942816FFEF24E33CE0F150204057 +:1039D0003040E1F700C000000E944F0C0E94B1157A +:1039E00050CC81E0EBCF80E0E9CF82810081118172 +:1039F000882369F0C8010E94E50ED82E682FC801FF +:103A00000E94D50AB8018D2D0E94D80E2BC3C80183 +:103A10000E94AE0AD82EF6CF212F2F70C22E107F13 +:103A200019F0C29490EFC922DD20C9F0CC2069F0D2 +:103A300080E2800F883010F001110BC080914302AA +:103A4000C82AC09243020E94000A802F0E94730C71 +:103A500019C080914202C82AC0924202F4CF802F3E +:103A60000E944E0BCC2071F0C09480E2800F883011 +:103A700010F001113AC080914302C822C092430263 +:103A80000E94000AE92DE850FF0B349720F40E94B1 +:103A9000DA050E94AB0BAA20A9F08091400280FDBC +:103AA00011C0F70112828595859585950E94711543 +:103AB000C7010E94041980914002859585958595DE +:103AC0000E94441560E0C7010F900F900F900F9077 +:103AD000DF91CF911F910F91FF90EF90DF90CF90EA +:103AE000BF90AF909F900C945B0F80914202C822D0 +:103AF000C0924202C5CF312F3F70B32E107F1032DB +:103B000019F0B29480EFB822002369F0013081F1FE +:103B1000DD20D9F1CC2091F1F701858180FF95CF8F +:103B20008F7085832BC0DD20B1F0909144028B2DE6 +:103B3000892BC11003C00E94440BA4CFE1E0CE1238 +:103B4000FACF2091050322FD9DCF891709F49ACF62 +:103B50008093440297CFC11006C00E94FA098B2DB2 +:103B60000E94390B8FCFF1E0CF1609F48BCFF5CF40 +:103B7000DD2031F025E02C1508F484CF8B2DDBCF30 +:103B800034E03C1508F47ECFEACFCC2041F3093372 +:103B900049F4FFEF27EE33E0F15020403040E1F7E9 +:103BA00000C00000802F0E944E0B6CCF812F8695A5 +:103BB0008695837061F0813009F064CFC8019370FD +:103BC000D11002C090E080E00E94AE055BCFC8013A +:103BD0009370D11002C090E080E00E94C40552CFE3 +:103BE000802FDD2029F00E94BC070E94DA064ACF10 +:103BF0000E940107FACF812F837009F03FC0D110D6 +:103C000041CF402F429546954770440F440F802F77 +:103C10008F7090E0042E02C0880F991F0A94E2F77B +:103C200030E020E004FF09C02FE030E002C0220FA6 +:103C3000331F4A95E2F72095309516951695137027 +:103C4000123099F078F440914502509146021130BB +:103C500039F0822B932B842395230E941E0B12CFC5 +:103C6000842B952B822B932BF8CF822B932B209197 +:103C700045023091460282279327EFCF8695DD20BB +:103C800011F0812F8170882309F4FCCE402F4295DA +:103C900046954770440F440F802F8F7090E0042E9C +:103CA00002C0880F991F0A94E2F730E020E004FF79 +:103CB00009C02FE030E002C0220F331F4A95E2F71F +:103CC00020953095169516951370123099F078F46A +:103CD0004091380350913903113039F0822B932BE6 +:103CE000842395230E942D15CDCE842B952B822BDA +:103CF000932BF8CF822B932B2091380330913903EB +:103D000082279327EFCF1F70DD2029F0812F0E949B +:103D10007115802F10CF802F0E94390B812F0E94A8 +:103D20004415B0CE023F09F441C060F4003F11F1E8 +:103D3000013FA1F1DD2009F457C0C11086CE812FCB +:103D40008F7131C0033FB9F1043FA1F7DD2009F4C1 +:103D500040C01F71812F0E9471158091050382FD63 +:103D600007C0E8E01E9FC0011124836080934002D9 +:103D7000812F19C0DD2069F084E08C1508F482CE13 +:103D80001F7181E090E002C0880F991F1A95E2F739 +:103D9000B3CF95E09C1508F475CEF2CF812F8F71CB +:103DA000DD2009F4BCCF0E9471156CCE812F8F717C +:103DB000DD20C9F3B4CF90E080E0DD2009F492CF9C +:103DC0001F7181E090E002C0880F991F1A95E2F7F9 +:103DD00089CF81E00E945515F1E0FC1508F052CE24 +:103DE00082E00E9455154ECECC2059F0093309F0DF +:103DF000D9CE2FEF37EE83E0215030408040E1F7FD +:103E0000CFCE812F8F718BCF00313FE5130709F49F +:103E1000D1CA01319FE51907A9F482E0CCCA61E05B +:103E2000C7010E945B0F8C01F7018281811117CAC3 +:103E30000031FFE51F0709F4C3CA01312FE512075E +:103E400009F4C2CA0238EFE51E0709F425CB08F0D1 +:103E5000BDCA00382FE5120709F4EBCA01383FE567 +:103E6000130709F4FCCAF7018281882369F0C801AD +:103E7000815E9C45059740F46FE1600F60935002AE +:103E80008CE090E00E94852F17FF8FCBF701828195 +:103E9000882309F459C00E94DA05869581708093C1 +:103EA000E80190915002913029F4882319F089E3B8 +:103EB0000E94280D809143028093E70110924302F3 +:103EC00080915002813009F443CB882309F43CCB24 +:103ED000823009F44ACB843009F44ECB8FE39CE95D +:103EE0000197F1F700C000005801E894B7F84CE0E2 +:103EF000C42ED12CC5010C2C02C0969587950A942E +:103F0000E2F78F7096EF980F963008F43ACB805D09 +:103F10000E94A90D94E0C91AD108ECEFCE16EFEF7C +:103F2000DE0641F780915002813009F430CB8823BE +:103F300009F429CB823009F426CB843009F433CB41 +:103F40008091E70180934302F7018281882309F47D +:103F500046C0109295030230FCE51F0708F44AC0E2 +:103F600006312CE5120738F098012A5F3C452930CC +:103F7000310508F03FC00E94B40F90930503809371 +:103F8000040300313CE5130709F4F6CB08F084CBB9 +:103F900008309CE5190709F4E5CB08F053CB043051 +:103FA000FCE51F0709F4D6CB08F039CB02303CE51D +:103FB000130709F4C5CB03301C4509F4C7CB609146 +:103FC00004031091050384E090E00E94852F612F87 +:103FD00082E290E00E94852F0E94281652C9063185 +:103FE0001C45D1F58091E90181110CCC89E20E9438 +:103FF000450A03CC06312CE5120709F4EECB80917B +:10400000430282720C3C9CE5190709F4AECC08F01F +:104010002ECC063CFCE51F0709F493CC08F005CC38 +:10402000033C3CE5130709F482CC08F0EDCB023CDD +:10403000ECE51E0709F456CC0A35FDE51F0709F427 +:10404000D0CC08F0ACCC01153CE5130709F4B9CC91 +:104050000E3D1C4509F4C2CCF7018681978100977B +:1040600009F4C3CC0E9472088C01F701D280C5808C +:10407000C2943FE0C322809140028770A1F0AD2C32 +:10408000DD2091F0812F807F803421F080E2800F4D +:10409000883048F082E00E94551580914002877078 +:1040A000AA24A3948111A12C912E92942FE0922204 +:1040B000FBE0F91508F4E6CCE92DF0E0ED52F04D07 +:1040C0000C94042FCF93DF938091FB01807FA1F4A8 +:1040D0008091F801882381F080913F02D091FE0108 +:1040E0006091F6017091F701A091F901B091FA0188 +:1040F000C62FC723D81303C0DF91CF91089590E056 +:10410000109711F0CF3F19F401968770F3CF9C01FF +:1041100043E0220F331F4A95E1F7F901E150FE4FCA +:1041200041814713F1CF40814613EECF42814111C7 +:10413000EBCF438154814A1B5B0B483C510520F770 +:104140008091FB018F7080618093FB01F901EC5F2E +:10415000FD4F80818F708061808386EF91E00E94A7 +:104160000419DF91CF910C94A40AAF92BF92CF9221 +:10417000DF92EF92FF920F931F93CF93DF93CDB710 +:10418000DEB765970FB6F894DEBF0FBECDBF8C01CA +:1041900085E0F801DE01519601900D928A95E1F7D4 +:1041A000F801E28066EFA62E61E0B62E6091F9017B +:1041B0007091FA016115710509F468C19091F601D9 +:1041C0004091F701892F84238F3F09F45FC120813B +:1041D0003181C380D480F090F801F601E61BF70B23 +:1041E000FF2009F41DC18091FB01582F507FE83C4E +:1041F000F10508F0D0C0511181C0FE2C43132BC033 +:10420000921329C06091FC017091FD01F801468173 +:10421000578164177507F9F4E1101DC08F70806134 +:104220008093FB01C5010E9404198091FB01F801F4 +:1042300085838F2D65960FB6F894DEBF0FBECDBF78 +:10424000DF91CF911F910F91FF90EF90DF90CF9072 +:10425000BF90AF900895CD2829F0822F83238F3F00 +:1042600009F02FC180E0F82FF170DF2E80FF3CC0F5 +:1042700080913F024091FE01841315C0298B3A8B37 +:1042800089899A890E94210F292F22952F70223027 +:10429000F8F0243020F59F70F9F0F8019581907FB7 +:1042A000D9F4D12C1FC090E0FC0153E0EE0FFF1FAA +:1042B0005A95E1F7E150FE4F5181351306C0508108 +:1042C000251303C05281E5120FC001968770D4CF29 +:1042D0009F7011F0882329F3805E883010F3C801A5 +:1042E0000E940419FD2CA5CFEE2009F4A2CF8091E5 +:1042F000FB0181608093FB01F12C9BCF43131BC01A +:10430000921319C04091FC015091FD01F8012681E2 +:1043100037814217530779F4E1100DC08583C80136 +:104320000E94041988E0F801A6EFB1E001900D9217 +:104330008A95E1F77ECFC8010E942D0F882339F1BD +:10434000EE2029F18091FB018032A0F02091F6014E +:104350003091F7013A8729871B86DD86CC868E87C8 +:104360008091FC019091FD01988B8F87CE01099679 +:104370000E94041988E0F801A6EFB1E001900D92C7 +:104380008A95E1F70E946220FF24F39452CFC8017E +:104390000E940419F9CF51110AC086EF91E00E94E2 +:1043A000041988E0F50111928A95E9F7A5CF431326 +:1043B00018C0921316C04091FC015091FD01F80104 +:1043C000268137814217530761F4E1100AC08583C3 +:1043D000C8010E94041988E0F50111928A95E9F755 +:1043E00028CFC8010E942D0F882389F2EE2079F290 +:1043F0008091FB01803208F4BDCF2091F60130910D +:10440000F7013A8329831B82DD82CC828E838091DF +:10441000FC019091FD0198878F83CE010196A8CF72 +:10442000E83CF105C0F6FE2CEE2009F4B0CF4313B2 +:104430001FC092131DC02091FC013091FD01F801B5 +:10444000868197812817390799F49091FB0190FD97 +:1044500069CF907F09F466CF8091FB018583903FFF +:1044600009F45DCF982F907F905F8F70892B56CF86 +:10447000C8010E942D0F81117DCF8091FB018160C9 +:104480008093FB01C8010E940419D3CEEE2009F4E9 +:104490007ECFC8010E942D0FF82E882309F477CF14 +:1044A00088E0F801A6EFB1E001900D928A95E1F75E +:1044B0008091F6019091F7010E94210F0E946220E5 +:1044C000B8CE81E08E25CFCECF93DF93CDB7DEB7C8 +:1044D00060970FB6F894DEBF0FBECDBF29873A872D +:1044E0004B875C876D877E878F87988BCE01099677 +:1044F0000E94B520811112C088E0FE013996DE01CC +:10450000119601900D928A95E1F78C859D85892BF6 +:1045100029F089859A8589238F3FA9F580913F02EB +:104520009091FE0189131CC060960FB6F894DEBF0F +:104530000FBECDBFDF91CF91089593E0AA0FBB1FAF +:104540009A95E1F7A150BE4F98E0FE013196019097 +:104550000D929A95E1F78093FE010E94A40ADECFA6 +:10456000B8E08B9FC001112481509E4F0E94B5205E +:104570008823D1F280913F0290E0019687709927BD +:1045800080933F02CBCFA091FE01B0E0CD01019618 +:104590008770992720913F022817190671F60E940B +:1045A00028161092FE0110923F0288E0E6EFF1E03B +:1045B000DF011D928A95E9F7B1CF0F931F93CF9337 +:1045C000DF9380918C02E0918B02CCE081111AC0C4 +:1045D000DF91CF911F910F910895D1E0DE0FD0931D +:1045E0008B020E2F10E0EC9FF0011124E357FD4FDA +:1045F00083819481892B29F08081918189238F3F48 +:1046000051F4ED2F80918C02E81738F310928C0250 +:1046100010928B02DDCFC09FD001C19FB00D11243D +:10462000A357BD4F16968D919C911797892B29F40E +:1046300018968D919C91019651F42081318142818F +:10464000538164817581868197810E946422C09F15 +:10465000F001C19FF00D1124E357FD4F1482138226 +:10466000D0CF1092F8021092F7021092420180917E +:10467000F6028093F5020E9414060C94DD222F921C +:104680003F924F925F926F927F928F929F92AF92E2 +:10469000BF92CF92DF92EF92FF920F931F93CF932F +:1046A000DF93C091F502E7E0FE2E01E010E0FCE0B0 +:1046B0002F2EAEEFEA2E8091F6028C1316C00E94C8 +:1046C000DD22DF91CF911F910F91FF90EF90DF904E +:1046D000CF90BF90AF909F908F907F906F905F90A2 +:1046E0004F903F902F900C941406D0E0FE01EE0FF7 +:1046F000FF1FE351FD4F80819181F89EF001F99EEB +:10470000F00D1124E85EFE4F2481211158C0309035 +:104710008C02ADE8B2E030E020E0412C5F012315CF +:1047200008F04BC01A966D907C901B97F501808025 +:1047300091804FEF5FEF512CC52CD12CF601EE0F7D +:10474000FF1FE80DF91D659174916616770609F44F +:10475000A601672B11F05394EFCF4F3F5407B1F1EF +:10476000B80102C0660F771F4A95E2F7462AA801F2 +:1047700002C0440F551F5A94E2F7415051094416A4 +:10478000150601F5229EF001239EF00D1124E3573A +:10479000FD4FF89ED001F99EB00D1124A85EBE4FCA +:1047A00012962D913C91139737832683E082E18204 +:1047B0009187808771E015967C930E94E60521968B +:1047C000C37079CF14961C921E9213972F5F3F4FA0 +:1047D0001C96A5CF9F92AF92BF92CF92DF92EF929D +:1047E000FF920F931F93CF93DF9300D000D000D0A0 +:1047F000CDB7DEB78E010F5F1F4F86E0F801119233 +:104800008A95E9F785E7C82E81E0D82EF12CE12CB6 +:10481000AA24A394B12CF60181916F018F3F09F472 +:1048200049C0F894E82FE295EF70F0E021A18F7075 +:10483000A50102C0440F551F8A95E2F7CA01922FC5 +:10484000982B91A392A18095892382A3789400C08C +:10485000EBE7F1E030E020E0912C41914F3F09F48B +:1048600073C0A42FA295AF70B0E090968C9190E0A9 +:104870004F7002C0959587954A95E2F780FD64C018 +:104880008A2D022E01C0880F0A94EAF7982A2F5F1A +:104890003F4F2430310509F7F601319780818F3F72 +:1048A00011F00E94180850EA5A95F1F7F801EE0D40 +:1048B000FF1D90828FEFE81AF80AE6E0EE16F10489 +:1048C00009F0A9CF46E050E0B80184E592E00E94EB +:1048D000642FFF24F394009709F4F12C892BB1F194 +:1048E00086E0F801A4E5B2E001900D928A95E1F727 +:1048F00081E0809349020E94A20590934802809330 +:10490000470280914702909148020E9493050597C3 +:1049100008F1809154028093670280915502809340 +:1049200068028091560280936902809157028093B9 +:104930006A028091580280936B02809159028093A1 +:104940006C021092490206C080E0A0CF809149021B +:104950008111D7CF80914201882301F18091F70224 +:104960009091F8020097D1F00E949305209189025E +:1049700030918A022817390788F49091F5028091C6 +:10498000F602981709F445C00E943F2310928A024C +:10499000109289021092F8021092F70280914F0251 +:1049A000882371F080914D0290914E020E949305F0 +:1049B000893E934028F082EE0E944E0B10924F02E7 +:1049C00080914C02882391F080914A0290914B0291 +:1049D0000E949305883E934048F00E94A205909360 +:1049E0004B0280934A0283E70E94280D8F2D269662 +:1049F0000FB6F894DEBF0FBECDBFDF91CF911F91F0 +:104A00000F91FF90EF90DF90CF90BF90AF909F906D +:104A100008950E94DD221092F8021092F7020E947F +:104A20001406BCCF2F923F924F925F926F927F926B +:104A30008F929F92AF92BF92CF92DF92EF92FF92AE +:104A40000F931F93CF93DF93CDB7DEB769970FB660 +:104A5000F894DEBF0FBECDBF498B5A8B6B8B7C8B1E +:104A60008D8B6111109242021D861E861F86188A48 +:104A700085E0FE017196DE01199601900D928A95EE +:104A8000E1F78C859D85892B31F089859A8589236D +:104A90008F3F09F0D4C129853A854B855C856D85AA +:104AA0007E858F8598890E946422C3C028EFC21634 +:104AB0002CE5D20629F4882379F00E943123EBCF2C +:104AC00039EFC3163CE5D30639F4882329F08091E9 +:104AD00042018111F2CFC3C108E111E0E12CB12CF8 +:104AE000A12C88248394912C9EEF592E4424439426 +:104AF000F8016081718166246A94762C20E0422F4F +:104B000050E0FA01EE0FFF1FE60FF71F8591949119 +:104B1000C816D90609F43A01892B11F02F5FEFCF9F +:104B2000F12CFFEF6F167F0609F445C0F8014481B0 +:104B3000F09042018F2D411180E0F82FF170FF2E8F +:104B4000F801258086819B85992309F408C1FF20FF +:104B500009F405C1211014C0A40101C0440F6A94D6 +:104B6000EAF7842B86838091890290918A028039AA +:104B7000914030F440E951E050938A024093890219 +:104B8000C40102C0880F991F2A95E2F70197F80126 +:104B900026812817190679F48091F7029091F8027E +:104BA000009709F45FC00E9493058139914008F491 +:104BB00059C0F8014482EF28FFEFAF1ABF0A095F1E +:104BC0001F4F26E0A216B10409F092CF8B858823EF +:104BD00009F420C1EE2009F41DC10E94A2059093A2 +:104BE000F8028093F70280918C02883010F591E0F2 +:104BF000980F90938C0298E0FE013996DE01119691 +:104C000001900D929A95E1F73CE0839FC001112439 +:104C100083579D4F28E0FE013196DC0101900D92F3 +:104C20002A95E1F72FEF3FEFFC0131872087D386EC +:104C3000C28669960FB6F894DEBF0FBECDBFDF9176 +:104C4000CF911F910F91FF90EF90DF90CF90BF9089 +:104C5000AF909F908F907F906F905F904F903F901C +:104C60002F9008958091F5026090F602982FF0E061 +:104C7000E0E0861114C09093F5020E171F0709F4A7 +:104C80009ACF90E0FC01EE0FFF1FE351FD4FB18280 +:104C9000A0820196837099278093F6028CCF282EEC +:104CA000312CF101EE0FFF1FE351FD4F20813181C7 +:104CB000F7E0F29FD001F39FB00D1124A85EBE4F24 +:104CC0002D913C911197398F288F712C60E070E005 +:104CD000E72FF0E0EE0FFF1F288D398DE20FF31F55 +:104CE0002591349121153105E1F0F8010190F08111 +:104CF000E02DFF8BEE8B60E005C02417350709F42B +:104D00007F2C6F5FE62FF0E0EE0FFF1F4E895F896B +:104D1000E40FF51F459154914115510571F77F5FDF +:104D2000D7CF7720C9F0F801671708F0FD0144825A +:104D30000E171F0721F49093F502F72C3CCF981320 +:104D400005C0AE17BF0711F49F5F937091012F5FED +:104D50003F4F822F83708DCFF0E0E0E0F7CF90E0FF +:104D600021101FC0B40102C0660F771F2A95E2F719 +:104D70009B01215031092817390731F4442309F4E4 +:104D800047C0C5010E94E605C40101C0880F6A94AE +:104D9000EAF7982F9095F801868189238683F22C73 +:104DA0000ACF9C01062C02C0359527950A94E2F79C +:104DB000A90141705527BC016150710986239723D1 +:104DC000892B11F5452B01F1F80182819381892B03 +:104DD000C1F01B821C821D821E8259825A820E944F +:104DE000A2058160582F9D838C83F8018281938175 +:104DF0008F83988729813A814B816D817E810E94C2 +:104E00006422F8011582C0CFF22FF1702F2EBCCF93 +:104E10002F2CBACF9091F5028091F602981731F0BD +:104E20000E943F23EE2009F436CE03CF0E94DD22FC +:104E30001092F8021092F7020E941406F3CF61E07C +:104E4000CE0109960E945B0F6C018B85F7EFCF16A0 +:104E5000FCE5DF0609F02ACE882309F43DCE81E087 +:104E60008093420118CE1F920F920FB60F92112419 +:104E70002F933F934F935F936F937F938F939F9362 +:104E8000AF93BF93CF93DF93EF93FF93D091E9005C +:104E9000DF708091EC00C82FC17080FDC0E81092D7 +:104EA000E9008091F000877F8093F00078940E9461 +:104EB0003D161092E9008091F00088608093F00028 +:104EC000CD2BCF70C093E900FF91EF91DF91CF918F +:104ED000BF91AF919F918F917F916F915F914F9112 +:104EE0003F912F910F900FBE0F901F9018951F921A +:104EF0000F920FB60F9211242F933F934F935F930E +:104F00006F937F938F939F93AF93BF93EF93FF9391 +:104F10008091E10082FF09C08091E20082FF05C01C +:104F20008091E1008B7F8093E1008091DA0080FF27 +:104F300024C08091D80080FF20C08091DA008E7F4D +:104F40008093DA008091D90080FF9BC080E189BD09 +:104F500082E189BD09B400FEFDCF81E080932E037C +:104F600080910903811109C00E9406040E94D104A6 +:104F70008091E20084608093E2008091E10080FFF4 +:104F800017C08091E20080FF13C08091E2008E7F05 +:104F90008093E2008091E20080618093E200809142 +:104FA000D80080628093D80019BC85E080932E03DE +:104FB0008091E10084FF29C08091E20084FF25C038 +:104FC00080E189BD82E189BD89B5982F917080FF0C +:104FD000FBCF8091D8008F7D8093D8008091E10035 +:104FE0008F7E8093E1008091E2008F7E8093E200CB +:104FF0008091E20081608093E20080912F038823FA +:1050000009F445C084E080932E038091E10083FF82 +:1050100027C08091E20083FF23C08091E100877F59 +:105020008093E10082E080932E0310922F03809101 +:10503000E1008E7F8093E1008091E2008E7F80937B +:10504000E2008091E20080618093E20042E060E053 +:1050500080E00E949F048091F00088608093F000BF +:10506000FF91EF91BF91AF919F918F917F916F9140 +:105070005F914F913F912F910F900FBE0F901F9016 +:10508000189519BC10922E031092090376CF8091C7 +:10509000E30087FD93E090932E03B7CF78941F929F +:1050A0001FB61F9211248F939F93AF93BF9380914C +:1050B000000390910103A0910203B09103030196B4 +:1050C000A11DB11D8093000390930103A0930203DF +:1050D000B0930303BF91AF919F918F911F901FBE1B +:1050E0001F9018951F921FB61F9211248F939F93A4 +:1050F000AF93BF938091FF02811113C08091000391 +:1051000090910103A0910203B09103034196A11D68 +:10511000B11D8093000390930103A0930203B09309 +:105120000303BF91AF919F918F911F901FBE1F905E +:105130001895CDB7DEB7EE970FB6F894DEBF0FBE69 +:10514000CDBF84B7877F84BF0FB6F894A8958091B0 +:105150006000886180936000109260000FBE80E85C +:1051600090E00FB6F89480936100909361000FBEB9 +:1051700085B7806885BF85B7806885BF86E198E080 +:105180009093C5018093C4010E9406040E94D1043B +:105190008091E20084608093E200789480912E03F5 +:1051A0008823A1F01091E9001F709091EC00892FE5 +:1051B000817090FD80E8182B1092E9008091E80042 +:1051C00083FD0E943D161F701093E90082E084BDAC +:1051D00093E095BD9AEF97BD80936E000E949B0F60 +:1051E000811102C00E94890E05E711E02BE7C22E53 +:1051F00021E0D22EF80181918F018F3F11F00E94A2 +:105200001808C016D106B1F786EF0E94180887EF7C +:105210000E94180883E90E94180886E90E9418086D +:10522000E4E5F2E08AE592E0A7E6B2E011921D9291 +:105230008E179F07D9F70E941D16811102C00E9488 +:10524000B11582E090E00E94712F809360020E946D +:10525000B40F90930503809304030E94EA238FE325 +:105260009CE90197F1F700C000000E94EA238091B9 +:10527000670280FF08C06FEF7FEF90E080E00E9440 +:10528000A32F0E944F0C83E090E00E94712F90E0CA +:105290000E941E0B80913803909139030E9489145B +:1052A000509A589A559A5D9A549A5C9A8CE090E07C +:1052B0000E94712F90E0B0E0A0E0809350029093A4 +:1052C0005102A0935202B093530280915A0281116D +:1052D00033C00E941D16811104C00E94B1150E94A6 +:1052E000A11588E090E00E94792F60938E0370935F +:1052F0008F0380939003909391036E7F71F40E94CB +:10530000A11588E090E00E94792F60938E0370933E +:105310008F0380939003909391030E942B06109229 +:10532000840280918E0380FF04C060E086950E9415 +:105330002A1481E080935A025198599A52985A9AA5 +:1053400089B1869581704A9928C290E0892B809313 +:105350005E028AEC92E090937C0280937B0260E094 +:1053600081E20E942A1481E090E00E942D1580E0E5 +:1053700091E09093FC028093FB0218E1C12ED12CA6 +:1053800000E4A02E87E692E096E0B92EB80E809158 +:105390002E039924939400E112E1853009F451C25F +:1053A0000E94EA23882359F08FB7F89440910003B4 +:1053B0005091010360910203709103038FBFE1E6F6 +:1053C000F2E0A7E6B2E010E000E0302F8D9191917D +:1053D000981709F45FC2292F282790E09924939405 +:1053E000422F492109F451C29DAB3EAB892191E086 +:1053F00009F490E09FAB0E94A2058160782F99AFDD +:1054000088AF4DA95EA96FA989AD0E941225F80148 +:10541000EF59FD4F808198269082809184028823E5 +:10542000D1F180918302E0918E03E695E81BE09331 +:105430007F02823009F045C2F0E0EC51FD4FE4916B +:105440000E2F10E0BBE08B2EB3E19B2E80918002EB +:10545000882361F0109280020E94A20590937E0240 +:1054600080937D0210928202109281020E94A20516 +:10547000E0917D02F0917E028E1B9F0B8F3F9F4734 +:1054800050F4E00FF11FF0937E02E0937D028DE770 +:1054900092E0F4010995E0915E02EE0FEE0FE093C9 +:1054A0005E0289B181FBEE24E0F84A9964C280E093 +:1054B0008E29E82BE0935E02EF70F0E0E158FE4F9A +:1054C000808190915D02890F80935D0220E084309D +:1054D00034F180915C028F5F80935C0212E018AB24 +:1054E00019AA81E08AAB0E94A2058160782F9CAB4B +:1054F0008BAB48A959A96AA98CA90E9412251BA7A0 +:105500001CA61DA60E94A2058160782F9FA78EA7CA +:105510004BA55CA56DA58FA50E94122521E0809169 +:105520005D028D3F2CF580915C02815080935C027E +:105530001EA21FA281E088A70E94A2058160782F89 +:105540009AA789A74EA15FA168A58AA50E941225E6 +:1055500019A21AA21BA20E94A2058160782F9DA306 +:105560008CA349A15AA16BA18DA10E94122521E013 +:1055700080915D02082E000C990B64E070E00E949F +:10558000CE2E80935D02222359F08FB7F89440917C +:1055900000035091010360910203709103038FBFD8 +:1055A00086E0E4E7F2E0DE01119601900D928A9523 +:1055B000E1F7909076028090770210917802009146 +:1055C000790210927602109277021092780210926D +:1055D0007902892D882909F448C08091720290913E +:1055E00073020E9493059C0190916E02992309F425 +:1055F000AEC323333105C8F19F3F19F09F5F9093ED +:105600006E02992059F00E949C079FEF19140CF428 +:1056100091E0899F802D112480937602882059F093 +:105620000E949C079FEF18140CF491E0899F802D35 +:10563000112480937702309176023323B1F02091C8 +:105640007702222391F045EB3403C0011124992302 +:1056500009F494C19093760245EB24039001112440 +:10566000332309F48FC130937702812F802B09F403 +:1056700048C080917002909171020E9493059C0134 +:1056800090916D02992309F45DC325363105C8F167 +:105690009F3F19F09F5F90936D02112359F00E9474 +:1056A0007A079FEF11160CF491E0899F802D112449 +:1056B00080937802002359F00E947A079FEF10161A +:1056C0000CF491E0899F802D112480937902309110 +:1056D00078023323B1F020917902222391F045EB37 +:1056E0003403C0011124992309F450C19093780226 +:1056F00045EB240390011124332309F44BC130936B +:1057000079028091760290917702892B90917802AC +:10571000892B90917902892B11F00E94DA0686E09C +:10572000FE013196A4E7B2E001900D928A95E1F76F +:105730000E94DA0590915F02891731F00E94DA0524 +:1057400080935F020E94AB0B80912E03843009F09E +:105750001ECE83E08093E9008091E80082FF17CE9F +:105760008091E80090E085FF06C00E942504882310 +:1057700009F414C191E08091E8008B778093E800F0 +:10578000992309F404CEE981E150E33108F088C19E +:10579000F0E0E152F04D0C94042F92E0D7CD8091CF +:1057A0002E03843009F440C080E00E94AB0B1092BD +:1057B000840280917A02811116C090927A028091BF +:1057C0008E03982F917090935B028E7F80938E034F +:1057D0009FEFE0E7F2E09150E040F040E1F700C0D9 +:1057E00000000E94D80F1092FF020FB6F894A895FF +:1057F000C09260000FBEA092600083B7817F84607A +:1058000083BF83B7816083BF7894889583B78E7F89 +:1058100083BF0FB6F894A89580916000886180934B +:105820006000109260000FBE80912D03882349F024 +:105830000E94EA23E7E6F2E08191811164C2BE1280 +:10584000FBCF80912E03853009F4A9CF0E94281642 +:105850000E94DA050E94AB0B10927A0280915B02E3 +:10586000882361F080918E03816080938E0360E0D5 +:1058700086950E942A140E94C20F92CD80918502C3 +:105880008823C9F30E94D80FF6CF9F5F990C9430FC +:1058900009F0A6CD0F5F1F4F0630110509F095CD19 +:1058A0008FEF8AAF8BAF1CAE0E94A2058160782F6C +:1058B0009EAF8DAF4AAD5BAD6CAD8EAD0E94122533 +:1058C000ACCD863059F4F0E0EF51FD4FE4910E2F4E +:1058D00010E0ABEF8A2EA2E19A2EB8CD893061F4A8 +:1058E000E695F0E0E252FD4FE4910E2F10E0F7E66E +:1058F0008F2EF2E19F2EAACD8F3061F4E695F0E075 +:10590000E552FD4FE4910E2F10E0E9EF8E2EE1E11C +:105910009E2E9CCD853159F4F0E0E852FD4FE49184 +:105920000E2F10E07BEA872E71E1972E8FCD08E2D3 +:1059300010E042E2842E41E1942E883109F486CDB4 +:10594000833249F4E6EDF2E00591149162EA862E85 +:1059500062E1962E7BCD04EF11E059EE852E50E1E9 +:10596000952E843209F472CD00ED17E03AE2832ED1 +:1059700036E0932E6BCD82E090E09ACD81E080936B +:1059800076026ACE81E0809377026FCE81E08093C9 +:105990007802AECE81E080937902B3CE00E210E0CF +:1059A000CE0101964C018091E80085FD0AC08091EE +:1059B000E8008B778093E8000E942504882399F300 +:1059C000D9CE8091F100F40181934F01015011096A +:1059D00051F7D0CE1A8289E08B832DC08A81823024 +:1059E00009F4A7C18330A9F0813009F059C02FB75D +:1059F000F8946091000370910103809102039091EB +:105A000003032FBF0E940A2F6B837C838D839E83A9 +:105A100012C0809167028B83809168028C83809191 +:105A200069028D8380916A028E8380916B028F83DD +:105A300080916C02888780912E03843009F0A7CC76 +:105A40001091E9001F709091EC00892F817090FDFA +:105A500080E8182B82E08093E9008091E80080FFC5 +:105A60000DC050E040E060E270E0CE0101960E947F +:105A700056048091E8008E778093E8001F701093A1 +:105A8000E90085CC8A81823059F46B817C818D81DB +:105A90009E810E940A2F86E290E00E94852FCBCF44 +:105AA0008FEF8983C8CF4C816B818A810E94B20EAF +:105AB0009827892798279E838D83BDCF8D809E80D0 +:105AC0009824892498248A810B81F8E00F9F800113 +:105AD000112420E3829F000D111D11248C8190E080 +:105AE000880F991F080F191F692DC80187960E94FA +:105AF000852F682DC8018896D0CF0E941F0E9BCF9E +:105B00008A818138C1F060F4803809F094CF20E0B8 +:105B10004B816091900380918F030E9431138BCF52 +:105B2000823859F1833809F086CF20E04091910303 +:105B30006C818B81F2CF60E08B810E942A149B8163 +:105B400080918E03911111C08E7F80938E031092ED +:105B500084024FEF80E792E0415080409040E1F7AF +:105B600000C000000E94D80F66CF816080938E0332 +:105B700060E086950E942A145ECF8B818093920309 +:105B80005ACF8A81813899F030F4803809F053CFA8 +:105B90008091910321CF823891F0833809F04BCF67 +:105BA00080918F038B83809190038C8344CF80916D +:105BB0008E0380FF02C086950FCF80E00DCF8091CD +:105BC00092030ACF60918E0370918F0380919003AE +:105BD000909191030E941F132ECF80E18A832BCFD7 +:105BE00081E08A8389EFF8CE0A811B811027012783 +:105BF0001027FE0131963F018C80CF01880D911D49 +:105C00004C01C801895F9D4F8614970409F413CF96 +:105C1000093FE1E01E0750F40E94712FF3018483D5 +:105C20000F5F1F4FFFEF6F1A7F0AEBCFF301148254 +:105C3000F7CF0A811B81102701271027CE0101967B +:105C40003C018C80800E912E911CC801895F9D4F74 +:105C50008016910609F4EFCE093FE1E01E0720F41B +:105C6000F30164810E94852FFFEF6F1A7F0A0F5F97 +:105C70001F4FEBCF0E940F0EDECE8AE0AFCF0A811E +:105C80001B81102701271027CE0101963C018C8033 +:105C9000FC01E80DF11D4F01C80187968614970499 +:105CA00009F4C9CE003EF1E01F0750F40E94712FA5 +:105CB000F30184830F5F1F4FFFEF6F1A7F0AECCF52 +:105CC000F3011482F7CF0A811B81102701271027C7 +:105CD000CE0101963C018C80800E912E911CC80152 +:105CE00087968016910609F4A6CE003EE1E01E07D5 +:105CF00020F4F30164810E94852FFFEF6F1A7F0A61 +:105D00000F5F1F4FECCF09BD19BD09B400FEFDCFD9 +:105D10008091D8008F7D8093D8008091E0008260D0 +:105D20008093E0008091E00081FDFCCF0E94281666 +:105D300088CD86E290E00E94712F1B821C821D821A +:105D40008E8379CE2D32314008F0A4CCDACC2D32BE +:105D5000314008F053CC89CC87FB082E062687FDFE +:105D6000819567FD61950E94422F0EF4919507FC85 +:105D700081950895AA1BBB1B51E107C0AA1FBB1F39 +:105D8000A617B70710F0A61BB70B881F991F5A95C7 +:105D9000A9F780959095BC01CD01089597FB072E3A +:105DA00016F4009407D077FD09D00E94BA2E07FCA4 +:105DB00005D03EF4909581959F4F0895709561951B +:105DC0007F4F0895A1E21A2EAA1BBB1BFD010DC037 +:105DD000AA1FBB1FEE1FFF1FA217B307E407F5079B +:105DE00020F0A21BB30BE40BF50B661F771F881F77 +:105DF000991F1A9469F760957095809590959B010D +:105E0000AC01BD01CF010895EE0FFF1F0590F49185 +:105E1000E02D09946927962769277827872778270F +:105E200008950E94192F332312F48A1B9B0B0C94A4 +:105E30002A2FA29FB001B39FC001A39F700D811DA7 +:105E40001124911DB29F700D811D1124911D089583 +:105E50000E94192FB7FF0895821B930B08950E948B +:105E6000192FA59F900DB49F900DA49F800D911D9B +:105E700011240895B7FF0C942F2F0E942F2F821BFF +:105E8000930B0895991B79E004C0991F961708F0A9 +:105E9000961B881F7A95C9F780950895FB01DC0150 +:105EA00002C005900D9241505040D8F70895FC0172 +:105EB0004150504030F001900616D1F73197CF0194 +:105EC0000895882799270895FB01DC0104C08D916E +:105ED0000190801921F441505040C8F7881B990B5C +:105EE0000895F999FECF92BD81BDF89A992780B5A2 +:105EF0000895A6E1B0E044E050E00C94AB2FA8E197 +:105F0000B0E042E050E00C94AB2F262FF999FECF81 +:105F100092BD81BDF89A019700B4021639F01FBAFC +:105F200020BD0FB6F894FA9AF99A0FBE0895039619 +:105F3000272F0E94862F0E94852F252F0E94862FB3 +:105F4000242F0C94862F0196272F0E94862F0C94C5 +:105F5000852FDC01CB01FC01F999FECF06C0F2BD13 +:105F6000E1BDF89A319600B40D9241505040B8F717 +:105F70000895F894FFCF460F460F4F0F4F0F510F64 +:105F80004F0F4F0F4F0F460F460F560F4F0F4F0F2C +:105F9000560F22174A179D174A179D177D17B517D9 +:105FA0009D17B218BF180C1D0C1D7B1D7B1DD61D27 +:105FB000F01D421D421DFB1D831E921E921EEA2CE7 +:105FC000EE2C422D532D5E2D7D2D802DC12DE22DE9 +:105FD000502D502DED2DF02DF42D192E3A2E3D2E55 +:045FE0003F2E632EBF +:105FE40090050F0CEE0BEA0BE60B01191A1B1C1D96 +:105FF4001E1F202122010201FC002A00000000F6DD +:10600400004C00000000F0005000000000EA0051C5 +:1060140000000000E4004F00000000DE0052000019 +:1060240000000101818283E200E900EA00B500B6C4 +:1060340000B700CD008301CC008A019201940121B4 +:1060440002230224022502260227022A02B300B4F4 +:10605400006F007000F03435366667F6F7939600EB +:10606400FF0100010000FFFF0000010001FF00002C +:1060740001020202020606060909090909090F0FAD +:106084000F0F0F0F151515181919191919191919B1 +:10609400191923244022B6DA01B8010201FB0614BF +:0460A40007340700B6 :00000001FF From 3d7d8742a058852b4b47cd88e6dd747efdec977a Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Mon, 13 Sep 2021 20:34:50 -0400 Subject: [PATCH 019/155] Commented out combo code as it is not used --- keyboards/solartempest/sofle/keymaps/via/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index a61dfcd01236..96bb58e2b25e 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -56,7 +56,7 @@ static uint16_t held_shift = 0; #endif -#ifdef COMBO_ENABLE //(+42 firmware size for this combo). SBS takes care of this combo, so it is an example only and can be replaced with others as required. +/*#ifdef COMBO_ENABLE //(+42 firmware size for this combo). SBS takes care of this combo, so it is an example only and can be replaced with others as required. enum combo_events { sbs_delword }; @@ -75,7 +75,7 @@ static uint16_t held_shift = 0; break; } } -#endif +#endif*/ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these layouts to save space when using only VIA. From 00073c93b3263b31012497daabf099d39d31604a Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Tue, 14 Sep 2021 13:23:43 -0400 Subject: [PATCH 020/155] Added another VIA layer. --- keyboards/solartempest/sofle/config.h | 2 +- .../solartempest/sofle/keymaps/via/bongocat.c | 5 +- .../solartempest/sofle/keymaps/via/config.h | 2 +- .../solartempest/sofle/keymaps/via/keymap.c | 24 +- .../solartempest/sofle/keymaps/via/luna.c | 5 +- .../solartempest/sofle/keymaps/via/oled.c | 6 +- .../solartempest/sofle/keymaps/via/snakey.c | 5 +- keyboards/solartempest/sofle/readme.md | 8 +- .../solartempest/sofle/sofle VIA layout.json | 96 +- .../sofle/solartempest_sofle_via.hex | 3551 +++++++++-------- 10 files changed, 1892 insertions(+), 1812 deletions(-) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index f1875bf6a79f..72b2962c3db4 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -89,8 +89,8 @@ #define RGBLIGHT_EFFECT_STATIC_GRADIENT //Firmware size (+262) #define RGBLIGHT_LIMIT_VAL 160 //Power draw may exceed 0.6A at max brightness with white colour. #define RGBLIGHT_LAYERS -#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF #define RGBLIGHT_SLEEP +//#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF //Shows lock key lighting status even when RGB is off //RGB LED Conversion macro from physical array to electric array (+146 to firmware size) diff --git a/keyboards/solartempest/sofle/keymaps/via/bongocat.c b/keyboards/solartempest/sofle/keymaps/via/bongocat.c index 0a60f6bee0e5..73ded11b4a76 100644 --- a/keyboards/solartempest/sofle/keymaps/via/bongocat.c +++ b/keyboards/solartempest/sofle/keymaps/via/bongocat.c @@ -36,15 +36,16 @@ static void print_status_narrow(void) { oled_set_cursor(0,3); switch (get_highest_layer(layer_state)) { case 0: + case 2: oled_write("Base ", false); break; case 1: oled_write("Game ", false); break; - case 3: + case 4: oled_write("Raise", false); break; - case 2: + case 3: oled_write("Lower", false); break; } diff --git a/keyboards/solartempest/sofle/keymaps/via/config.h b/keyboards/solartempest/sofle/keymaps/via/config.h index 8970276c8774..d9c79020c416 100644 --- a/keyboards/solartempest/sofle/keymaps/via/config.h +++ b/keyboards/solartempest/sofle/keymaps/via/config.h @@ -19,4 +19,4 @@ #pragma once // Set number of layers for VIA, each is 30 bytes -#define DYNAMIC_KEYMAP_LAYER_COUNT 4 +#define DYNAMIC_KEYMAP_LAYER_COUNT 5 diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index 96bb58e2b25e..dcaefa44fe92 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -274,10 +274,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef RGBLIGHT_ENABLE // RGB Layer Light Settings - Note that this will fix the key switch LED colour and brightness - const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Spring green (Change range for multiple keys with same colour) - const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 252,255,125}); //Red-orange (Change range for multiple keys with same colour) - const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); //Cyan (Change range for multiple keys with same colour) - const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); //Magenta (Change range for multiple keys with same colour) + const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Change range for multiple keys with same colour + const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 252,255,125}); //Change range for multiple keys with same colour + const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Change range for multiple keys with same colour + const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); //Change range for multiple keys with same colour + const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); //Change range for multiple keys with same colour const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 3, 43,100,170}); //White-left caps lock indication (No dedicated LED) const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({28, 3, 43,100,170}); //White-right num lock indication (No dedicated LED). Since this indicator is inverted, it must be on the master side of the keyboard to shut off properly when the computer is sleeping. const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({55, 3, 43,100,170}); //White-middle-right scroll lock indication (No dedicated LED) @@ -286,6 +287,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { my_layer1_layer, my_layer2_layer, my_layer3_layer, + my_layer4_layer, my_capslock_layer, //Highest status indicators override other layers my_numlock_layer, my_scrollock_layer @@ -296,7 +298,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { { rgblight_layers = my_rgb_layers;// Enable the LED layers rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 - layer_move(0); //start on layer 0 to get the lighting activated + //layer_move(0); //start on layer 0 to get the lighting activated in all cases } @@ -306,6 +308,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { rgblight_set_layer_state(1, layer_state_cmp(state, 1)); rgblight_set_layer_state(2, layer_state_cmp(state, 2)); rgblight_set_layer_state(3, layer_state_cmp(state, 3)); + rgblight_set_layer_state(4, layer_state_cmp(state, 4)); switch(biton32(state)){ // Change all other LEDs based on layer state as well case 0: @@ -315,9 +318,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { rgblight_sethsv_noeeprom(252,255,80); break; case 2: - rgblight_sethsv_noeeprom(118,255,80); + rgblight_sethsv_noeeprom(80,255,80); break; case 3: + rgblight_sethsv_noeeprom(118,255,80); + break; + case 4: rgblight_sethsv_noeeprom(218,255,80); } return state; @@ -326,9 +332,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool led_update_user(led_t led_state) { - rgblight_set_layer_state(4, led_state.caps_lock); //Activate capslock lighting layer - rgblight_set_layer_state(5, !(led_state.num_lock)); //Invert the indication so numlock does not always appear "on". - rgblight_set_layer_state(6, led_state.scroll_lock); //Activate scrollock lighting layer + rgblight_set_layer_state(5, led_state.caps_lock); //Activate capslock lighting layer + rgblight_set_layer_state(6, !(led_state.num_lock)); //Invert the indication so numlock does not always appear "on". + rgblight_set_layer_state(7, led_state.scroll_lock); //Activate scrollock lighting layer return true; } #endif diff --git a/keyboards/solartempest/sofle/keymaps/via/luna.c b/keyboards/solartempest/sofle/keymaps/via/luna.c index 46721a60e743..a18a7889e8c5 100644 --- a/keyboards/solartempest/sofle/keymaps/via/luna.c +++ b/keyboards/solartempest/sofle/keymaps/via/luna.c @@ -252,15 +252,16 @@ oled_set_cursor(0,3); switch (get_highest_layer(layer_state)) { case 0: + case 2: oled_write("Base ", false); break; case 1: oled_write("Game ", false); break; - case 3: + case 4: oled_write("Raise", false); break; - case 2: + case 3: oled_write("Lower", false); break; } diff --git a/keyboards/solartempest/sofle/keymaps/via/oled.c b/keyboards/solartempest/sofle/keymaps/via/oled.c index 415a82f13d08..190477ab5cca 100644 --- a/keyboards/solartempest/sofle/keymaps/via/oled.c +++ b/keyboards/solartempest/sofle/keymaps/via/oled.c @@ -48,13 +48,13 @@ oled_write_ln_P(PSTR("LAYER"), false); switch (get_highest_layer(layer_state)) { case 0: - case 1: + case 2: oled_write_P(PSTR("Base\n"), false); break; - case 2: + case 3: oled_write_P(PSTR("Raise"), false); break; - case 3: + case 4: oled_write_P(PSTR("Lower"), false); break; default: diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey.c b/keyboards/solartempest/sofle/keymaps/via/snakey.c index 76b292887ebf..642f6adec6fa 100644 --- a/keyboards/solartempest/sofle/keymaps/via/snakey.c +++ b/keyboards/solartempest/sofle/keymaps/via/snakey.c @@ -265,15 +265,16 @@ oled_set_cursor(0,3); switch (get_highest_layer(layer_state)) { case 0: + case 2: oled_write("Base ", false); break; case 1: oled_write("Game ", false); break; - case 3: + case 4: oled_write("Raise", false); break; - case 2: + case 3: oled_write("Lower", false); break; } diff --git a/keyboards/solartempest/sofle/readme.md b/keyboards/solartempest/sofle/readme.md index 1593b040f746..42a25fa17a43 100644 --- a/keyboards/solartempest/sofle/readme.md +++ b/keyboards/solartempest/sofle/readme.md @@ -61,16 +61,14 @@ qmk compile -kb solartempest/sofle -km via ## Flashing -Flash using the correct command below (or use QMK Toolbox like me): +Flash using the correct command below or use QMK Toolbox. Specifying side during compile is unnecessary as Master Left is defined: ```sh # for pro micro-based builds -qmk flash -kb solartempest/sofle -km via -bl avrdude-split-left -qmk flash -kb solartempest/sofle -km via -bl avrdude-split-right +qmk flash -kb solartempest/sofle -km via # for Elite C or dfu bootloader builds -qmk flash -kb solartempest/sofle -km via -bl dfu-split-left -qmk flash -kb solartempest/sofle -km via -bl dfu-split-right +qmk flash -kb solartempest/sofle -km via ``` These commands can be mixed if, for example, you have an Elite C on the left and a pro micro on the right. diff --git a/keyboards/solartempest/sofle/sofle VIA layout.json b/keyboards/solartempest/sofle/sofle VIA layout.json index 42db09c8d317..12f50ce6f43a 100644 --- a/keyboards/solartempest/sofle/sofle VIA layout.json +++ b/keyboards/solartempest/sofle/sofle VIA layout.json @@ -36,7 +36,7 @@ "KC_LGUI", "KC_LALT", "KC_LCTL", - "TT(2)", + "TT(3)", "KC_ENT", "KC_LALT", "KC_MINS", @@ -67,10 +67,10 @@ "KC_M", "KC_N", "KC_PGDN", - "TG(1)", + "TO(1)", "KC_RALT", "KC_RCTL", - "TT(3)", + "TT(4)", "KC_SPC", "C(KC_W)", "KC_N" @@ -139,14 +139,86 @@ "KC_TRNS", "KC_TRNS", "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "MO(3)", - "KC_TRNS", + "TO(0)", + "KC_RALT", + "KC_RCTL", + "MO(2)", + "KC_ENT", "KC_TRNS", "KC_NO" ], + [ + "KC_GRV", + "KC_1", + "KC_2", + "KC_3", + "KC_4", + "KC_5", + "KC_NO", + "KC_ESC", + "KC_Q", + "KC_W", + "KC_E", + "KC_R", + "KC_T", + "KC_VOLU", + "KC_TAB", + "KC_A", + "KC_S", + "KC_D", + "KC_F", + "KC_G", + "KC_F", + "KC_LSFT", + "KC_Z", + "KC_X", + "KC_C", + "KC_V", + "KC_B", + "KC_VOLD", + "KC_MUTE", + "KC_LGUI", + "KC_LALT", + "KC_LCTL", + "TT(2)", + "KC_SPC", + "KC_LALT", + "KC_MINS", + "KC_0", + "KC_9", + "KC_8", + "KC_7", + "KC_6", + "KC_0", + "USER04", + "KC_P", + "KC_O", + "KC_I", + "KC_U", + "KC_Y", + "KC_PGUP", + "KC_QUOT", + "KC_SCLN", + "KC_L", + "KC_K", + "KC_J", + "KC_H", + "KC_NO", + "KC_RSFT", + "KC_SLSH", + "KC_DOT", + "KC_COMM", + "KC_M", + "KC_N", + "KC_PGDN", + "TO(1)", + "KC_RALT", + "KC_RCTL", + "TT(3)", + "KC_ENT", + "C(KC_W)", + "KC_N" + ], [ "KC_GRV", "KC_F1", @@ -220,9 +292,9 @@ "KC_NO" ], [ - "USER03", - "C(KC_PPLS)", + "KC_TRNS", "C(KC_MINS)", + "C(KC_PPLS)", "KC_TRNS", "KC_TRNS", "KC_TRNS", @@ -255,7 +327,7 @@ "KC_MYCM", "KC_TRNS", "KC_NO", - "USER02", + "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", @@ -279,7 +351,7 @@ "KC_TRNS", "KC_SLCK", "KC_PGDN", - "KC_TRNS", + "S(LWIN(SWIN(KC_S)))", "KC_PGUP", "KC_CAPS", "USER02", diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index 4d6ed674c042..ace3db77edbb 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,204 +1,204 @@ -:100000000C94DE060C9425070C9425070C94003004 -:100010000C9425070C9425070C9425070C942507B0 -:100020000C9425070C9425070C94EB190C94A71934 -:100030000C9453260C9425070C9425070C94250743 -:100040000C9425070C9425070C9425070C94250780 -:100050000C9425070C94C21A0C9425070C942507C0 -:100060000C9425070C9425070C9425070C94250760 -:100070000C9425070C9425070C9425070C94250750 -:100080000C9425070C9425070C9425070C94250740 -:100090000C9425070C9425070C9425070C94250730 -:1000A0000C9425070C9425070C94250737032B6423 +:100000000C94E4060C942B070C942B070C940A30E8 +:100010000C942B070C942B070C942B070C942B0798 +:100020000C942B070C942B070C94F9190C94B5190C +:100030000C9461260C942B070C942B070C942B0723 +:100040000C942B070C942B070C942B070C942B0768 +:100050000C942B070C94D01A0C942B070C942B07A0 +:100060000C942B070C942B070C942B070C942B0748 +:100070000C942B070C942B070C942B070C942B0738 +:100080000C942B070C942B070C942B070C942B0728 +:100090000C942B070C942B070C942B070C942B0718 +:1000A0000C942B070C942B070C942B0737032B6411 :1000B000AAFF000000001C032B64AAFF0000000040 :1000C00004032B64AAFF000000000000D7FF78FFA4 :1000D00000000000000080FF64FF0000000000003E -:1000E000FCFF7DFF0000000000005FFF5AFF0000E2 -:1000F000000005010980A101850319012AB7001537 -:100100000126B700950175108100C0050C0901A1F9 -:1001100001850419012AA002150126A00295017586 -:10012000108100C00660FF0961A101096215002667 -:10013000FF009520750881020963150026FF0095D0 -:100140002075089102C005010906A101050719E003 -:1001500029E71500250195087501810295017508AB -:1001600081010507190029FF150026FF0095067576 -:100170000881000508190129059505750191029569 -:100180000175039101C000000000000000000000A4 +:1000E0005FFF5AFF000000000000FCFF7DFF0000E2 +:1000F000000000005FFF5AFF0000000005010980BA +:10010000A101850319012AB700150126B700950141 +:1001100075108100C0050C0901A101850419012A8F +:10012000A002150126A002950175108100C006608D +:10013000FF0961A1010962150026FF0095207508DD +:1001400081020963150026FF00952075089102C001 +:1001500005010906A101050719E029E71500250198 +:10016000950875018102950175088101050719003F +:1001700029FF150026FF009506750881000508195E +:10018000012905950575019102950175039101C03D :10019000000000000000000000000000000000005F -:1001A000000000000000000000007E0F00D4FFFFF0 -:1001B000FFC70000007800000000000000002A2BAC -:1001C0002800000000000000000000000000000007 -:1001D0000029000000002C1E342021222434262770 -:1001E000252E362D3738271E1F2021222324252691 -:1001F0003333362E37381F0405060708090A0B0C5F -:100200000D0E0F101112131415161718191A1B1CA6 -:100210001D2F3130232D350405060708090A0B0C64 -:100220000D0E0F101112131415161718191A1B1C86 -:100230001D2F3130354C00DA02815AD9F1DB20A470 -:10024000A62EAF00A0C000A1C800AED580A81FD3C5 -:1002500000408D142000E800DE00D400CA00C00079 -:10026000B600AC000000000000000000000000002C -:1002700000000000000080C0E0F0F0F898F8F8F806 -:10028000F0702000000000000060C080000000004E -:10029000C0F0F0F0E0C0877FFFFFF1C3030303016C -:1002A0000100000000000000000103071F3E78F776 -:1002B000FF7F3D03070F1E3D7FFFFFFFFC7800001F -:1002C000000000000000000000000000000000002E -:1002D000000000000000000080E0F0F0F898F8F85E -:1002E000F8F070200000008000000000C0F8FC3E24 -:1002F000DEFEFCF80000E0FEFF7F070103030301C0 -:1003000001000000000000071E3C78FFFF7F010095 -:10031000071F3F7C78FFFF7F070000000000000000 -:1003200000000000000000000000000000000000CD -:1003300000000000000000000000000000008080BD -:100340000000000000000000C000000000000000ED -:100350000000000000000000F8FCFEFE1F3F3939DD -:100360003F3F1E1E0C000000010F3E7870F8FCFE9F -:100370007E3E3C3C787878F0F1FF7F7F3E000000C5 -:10038000000000000000000000000000000000006D -:1003900000000000000000008080C0C06060C0C09D -:1003A000C0800000000000002060C080000000004D -:1003B0000000000000003E7FFFFFE7C70E0E0F0F9A -:1003C0000707030000000000000001071F3E78F04F -:1003D000FC7E1E1F0F0E1E1C3D7FFFFFFFFC7800E2 -:1003E000000000000000000000000000000000000D -:1003F000E0F0F0F8F8CCCCF8F8F0F0600000000085 -:1004000000000000000000000000000000000000EC -:100410000F3F7FFCF9F1E1C1810000000000000006 -:1004200000000000000000000000000C387060E0D8 -:10043000E0F0F0F8F9FFFFFFFFFF7E1C0000000076 -:1004400000000000000000000000000000000000AC -:10045000E0F0F0F8F8CCCCF8F8F0F0600000000024 -:10046000000000000000000000000000000000008C -:100470000F3F7FFCF9F1E1C1810000010102060C90 -:10048000040000000000000000000000387C60E074 -:10049000E0F0F0F8F9FFFFFFFFFF7E1C0000000016 -:1004A000000000000000000000000000000000004C +:1001A000000000000000000000000000000000004F +:1001B000000000007E0F00D4FFFFFFC700000078A2 +:1001C00000000000000000002A2B280000000000B2 +:1001D00000000000000000000000002900000000F6 +:1001E0002C1E3420212224342627252E362D373864 +:1001F000271E1F202122232425263333362E37386D +:100200001F0405060708090A0B0C0D0E0F1011122A +:10021000131415161718191A1B1C1D2F3130232DF6 +:10022000350405060708090A0B0C0D0E0F101112F4 +:10023000131415161718191A1B1C1D2F3130354CA5 +:1002400000DA02815AD9F1DB20A4A62EAF00A0C0AB +:1002500000A1C800AED580A81FD300408D14200097 +:10026000F200E800DE00D400CA00C000B600AC0016 +:10027000000000000000000000000000000000007E +:10028000000080C0E0F0F0F898F8F8F8F070200076 +:10029000000000000060C08000000000C0F0F0F02E +:1002A000E0C0877FFFFFF1C30303030101000000EB +:1002B00000000000000103071F3E78F7FF7F3D03A9 +:1002C000070F1E3D7FFFFFFFFC78000000000000CD +:1002D000000000000000000000000000000000001E +:1002E0000000000080E0F0F0F898F8F8F8F07020D6 +:1002F0000000008000000000C0F8FC3EDEFEFCF8BC +:100300000000E0FEFF7F070103030301010000007E +:10031000000000071E3C78FFFF7F0100071F3F7CA5 +:1003200078FFFF7F070000000000000000000000D1 +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000808000000000AD +:1003500000000000C00000000000000000000000DD +:1003600000000000F8FCFEFE1F3F39393F3F1E1E13 +:100370000C000000010F3E7870F8FCFE7E3E3C3C15 +:10038000787878F0F1FF7F7F3E00000000000000E9 +:10039000000000000000000000000000000000005D +:1003A000000000008080C0C06060C0C0C08000004D +:1003B000000000002060C08000000000000000007D +:1003C00000003E7FFFFFE7C70E0E0F0F0707030079 +:1003D00000000000000001071F3E78F0FC7E1E1F99 +:1003E0000F0E1E1C3D7FFFFFFFFC78000000000089 +:1003F000000000000000000000000000E0F0F0F845 +:10040000F8CCCCF8F8F0F06000000000000000002C +:100410000000000000000000000000000F3F7FFC13 +:10042000F9F1E1C1810000000000000000000000BF +:10043000000000000000000C387060E0E0F0F0F810 +:10044000F9FFFFFFFFFF7E1C00000000000000001E +:10045000000000000000000000000000E0F0F0F8E4 +:10046000F8CCCCF8F8F0F0600000000000000000CC +:100470000000000000000000000000000F3F7FFCB3 +:10048000F9F1E1C1810000010102060C0400000045 +:100490000000000000000000387C60E0E0F0F0F8B0 +:1004A000F9FFFFFFFFFF7E1C0000000000000000BE :1004B000000000000000000000000000000000003C -:1004C000000000000000000000CCF87000000000F8 -:1004D0000000C0F0F8F87CFCEEE6FCFC7878B00098 -:1004E00000000000000000003F7FF1F8F87C7CF87D -:1004F000F0F0F1E7EFEFFEFEFEFCFCF8F06000012B -:1005000003060200000000000000000000000000E0 +:1004C000000000000000000000000000000000002C +:1004D0000000000000CCF870000000000000C0F038 +:1004E000F8F87CFCEEE6FCFC7878B0000000000038 +:1004F000000000003F7FF1F8F87C7CF8F0F0F1E7B5 +:10050000EFEFFEFEFEFCFCF8F060000103060200C7 :1005100000000000000000000000000000000000DB -:10052000000000000000000080E0F81C0000000057 -:100530000000C0F0F8F87CFCEEE6FCFC78783000B7 -:1005400000000000000000003F7FF0F8F87C7CF81D -:10055000F0F0F1E7EFEFFEFEFEFCFCF8F0600000CB -:10056000000000000000000000000080C0C0E0E0CB -:100570003070E0E0C0C0800000000000000000001B -:10058000000000000000000000001F7FFFFFE7E701 -:10059000EFEFCFCB838301000000000000000000DC -:1005A0000000000000000000061C3878F1E3E3E7DB -:1005B000F7F7FFFFFFFF7F3E000000000000000094 -:1005C000000000000000000000000000000000002B -:1005D000000000000000000080C0E0E060E0C0C05B -:1005E00080800000000000000000000000000020EB -:1005F000F8FEFFFFFF9F0F0E1F1F3F3F7EE68303A6 -:100600000F43439088080000031E3C78F0E0E0F0C0 -:10061000F0FBFFFFFF7F7F380000000000000000BC -:10062000000000000000000004F6B8F8D8F0E0C0B8 -:1006300000000080C0E0E0F0F0F0F0E0E0C08000FA -:100640000000000000000080C0E1F3FB7F1F0F00EE -:1006500000F0FFFF3F030100000080C1F3FF7F1F98 -:10066000000080C0E0301E3F3F7FF9F0F070783C22 -:100670003F1F0F03000000001C3F7F7FFBF1F0785D -:100680003C1E0F03000000010101010101010101F5 -:100690000202020202020202020303030303030333 -:1006A0000304040404040404050505050506060600 -:1006B0000606070707070708080808090909090ABD -:1006C0000A0A0B0B0B0C0C0C0D0D0D0E0E0E0F0F62 -:1006D0000F101011111112121313141415151616F0 -:1006E0001717181819191A1A1B1B1C1D1D1E1E1F5F -:1006F0002020212222232424252626272829292AAE -:100700002B2C2D2D2E2F30313232333435363738D5 -:10071000393A3B3C3D3E3F404142434445464748D1 -:10072000494A4C4D4E4F50515354555658595A5BA7 -:100730005D5E5F616264656668696B6C6D6F707247 -:10074000737577787A7B7D7E8082838587888A8CB3 -:100750008E8F91939596989A9C9EA0A2A3A5A7A9E7 -:10076000ABADAFB1B3B5B7BABCBEC0C2C4C6C9CBDE -:10077000CDCFD1D4D6D8DBDDDFE2E4E7E9EBEEF094 -:10078000F3F5F8FAFDFFFFAA7F55401C1004010D98 -:10079000190A24232221201F1E1D1B1A18171615A3 -:1007A000141312110F0E0C0B0908070605030200A3 -:1007B0002D3945483C303F25262728292A2B2C2E29 -:1007C0002F31323334353637383A3B3D3E404142A3 -:1007D000434446474907087F0807003E5B4F5B3E9E -:1007E000003E6B4F6B3E001C3E7C3E1C00183C7E66 -:1007F0003C18001C577D571C001C5E7F5E1C0000CF -:10080000183C180000FFE7C3E7FF00001824180099 -:1008100000FFE7DBE7FF0030483A060E00262979A3 -:10082000292600407F05050700407F05253F005A27 -:100830003CE73C5A007F3E1C1C0800081C1C3E7F05 -:100840000014227F2214005F5F005F5F0006097FB3 -:10085000017F00006689956A0060606060600094B6 -:10086000A2FFA2940008047E04080010207E20103D -:100870000008082A1C0800081C2A0808001E10107E -:100880001010000C1E0C1E0C0030383E38300006D4 -:100890000E3E0E060000000000000000005F000099 -:1008A00000000700070000147F147F1400242A7F33 -:1008B0002A120023130864620036495620500000B3 -:1008C0000807030000001C224100000041221C0018 -:1008D000002A1C7F1C2A0008083E080800008070BF -:1008E00030000008080808080000006060000020D0 -:1008F00010080402003E5149453E0000427F40007E -:10090000007249494946002141494D3300181412EB -:100910007F10002745454539003C4A49493100418F -:100920002111090700364949493600464949291E1F -:100930000000001400000000403400000000081413 -:10094000224100141414141400004122140800025F -:1009500001590906003E415D594E007C1211127C7E -:10096000007F49494936003E41414122007F4141D3 -:10097000413E007F49494941007F09090901003E84 -:1009800041415173007F0808087F0000417F41000A -:10099000002040413F01007F08142241007F404079 -:1009A0004040007F021C027F007F0408107F003E51 -:1009B0004141413E007F09090906003E4151215E47 -:1009C000007F091929460026494949320003017F61 -:1009D0000103003F4040403F001F2040201F003FD8 -:1009E0004038403F00631408146300030478040394 -:1009F000006159494D4300007F4141410002040814 -:100A0000102000004141417F000402010204004027 -:100A10004040404000000307080000205454784044 -:100A2000007F284444380038444444280038444473 -:100A3000287F0038545454180000087E090200181A -:100A4000A4A49C78007F080404780000447D400042 -:100A5000002040403D00007F102844000000417FFE -:100A60004000007C04780478007C08040478003896 -:100A70004444443800FC182424180018242418FC8A -:100A8000007C080404080048545454240004043F23 -:100A90004424003C4040207C001C2040201C003CA2 -:100AA0004030403C004428102844004C9090907CFA -:100AB000004464544C4400000836410000000077B4 -:100AC0000000000041360800000201020402003C60 -:100AD0002623263C00000000000000404040F0F8C3 -:100AE000F8FF38FFF8F83FF8F8FF38FFF8F8F04063 -:100AF000404000000000000080C0C0C0800000C076 -:100B0000C08000000080C0C000C0C0000080C0C025 -:100B10000000000000C0C0C0C0C000C0C000000095 -:100B200000000000000000000000000000000000C5 +:1005200000000000000000000000000000000000CB +:100530000000000080E0F81C000000000000C0F097 +:10054000F8F87CFCEEE6FCFC787830000000000057 +:10055000000000003F7FF0F8F87C7CF8F0F0F1E755 +:10056000EFEFFEFEFEFCFCF8F06000000000000073 +:100570000000000000000080C0C0E0E03070E0E05B +:10058000C0C080000000000000000000000000006B +:100590000000000000001F7FFFFFE7E7EFEFCFCB79 +:1005A0008383010000000000000000000000000044 +:1005B00000000000061C3878F1E3E3E7F7F7FFFFDF +:1005C000FFFF7F3E00000000000000000000000070 +:1005D000000000000000000000000000000000001B +:1005E0000000000080C0E0E060E0C0C0808000004B +:1005F000000000000000000000000020F8FEFFFFE7 +:10060000FF9F0F0E1F1F3F3F7EE683030F43439064 +:1006100088080000031E3C78F0E0E0F0F0FBFFFFEC +:10062000FF7F7F3800000000000000000000000095 +:100630000000000004F6B8F8D8F0E0C00000008028 +:10064000C0E0E0F0F0F0F0E0E0C08000000000006A +:1006500000000080C0E1F3FB7F1F0F0000F0FFFFF0 +:100660003F030100000080C1F3FF7F1F000080C036 +:10067000E0301E3F3F7FF9F0F070783C3F1F0F03E2 +:10068000000000001C3F7F7FFBF1F0783C1E0F0351 +:100690000000000101010101010101010202020249 +:1006A000020202020203030303030303030404041C +:1006B00004040404050505050506060606060707E5 +:1006C00007070708080808090909090A0A0A0B0B9D +:1006D0000B0C0C0C0D0D0D0E0E0E0F0F0F1010113C +:1006E00011111212131314141515161617171818C2 +:1006F00019191A1A1B1B1C1D1D1E1E1F202021222A +:1007000022232424252626272829292A2B2C2D2D6F +:100710002E2F30313232333435363738393A3B3C8C +:100720003D3E3F404142434445464748494A4C4D7F +:100730004E4F50515354555658595A5B5D5E5F6148 +:100740006264656668696B6C6D6F707273757778DB +:100750007A7B7D7E8082838587888A8C8E8F919339 +:100760009596989A9C9EA0A2A3A5A7A9ABADAFB160 +:10077000B3B5B7BABCBEC0C2C4C6C9CBCDCFD1D445 +:10078000D6D8DBDDDFE2E4E7E9EBEEF0F3F5F8FAEB +:10079000FDFFFFAA7F55401C1004010D190A2423F8 +:1007A0002221201F1E1D1B1A1817161514131211B3 +:1007B0000F0E0C0B09080706050302002D394548EA +:1007C0003C303F25262728292A2B2C2E2F31323347 +:1007D00034353637383A3B3D3E4041424344464744 +:1007E0004907087F0807003E5B4F5B3E003E6B4FAA +:1007F0006B3E001C3E7C3E1C00183C7E3C18001CDE +:10080000577D571C001C5E7F5E1C0000183C1800C2 +:1008100000FFE7C3E7FF00001824180000FFE7DB34 +:10082000E7FF0030483A060E0026297929260040C5 +:100830007F05050700407F05253F005A3CE73C5AED +:10084000007F3E1C1C0800081C1C3E7F0014227FF9 +:100850002214005F5F005F5F0006097F017F0000D8 +:100860006689956A0060606060600094A2FFA2944F +:100870000008047E04080010207E20100008082ACA +:100880001C0800081C2A0808001E10101010000C7C +:100890001E0C1E0C0030383E383000060E3E0E0690 +:1008A0000000000000000000005F000000000700E2 +:1008B000070000147F147F1400242A7F2A120023CB +:1008C00013086462003649562050000008070300F0 +:1008D00000001C224100000041221C00002A1C7F55 +:1008E0001C2A0008083E080800008070300000083C +:1008F00008080808000000606000002010080402DA +:10090000003E5149453E0000427F40000072494987 +:100910004946002141494D33001814127F10002729 +:1009200045454539003C4A494931004121110907F3 +:1009300000364949493600464949291E000000143D +:1009400000000000403400000000081422410014A0 +:10095000141414140000412214080002015909065D +:10096000003E415D594E007C1211127C007F4949C6 +:100970004936003E41414122007F4141413E007FD6 +:1009800049494941007F09090901003E414151732C +:10099000007F0808087F0000417F4100002040419F +:1009A0003F01007F08142241007F40404040007F0B +:1009B000021C027F007F0408107F003E4141413E3F +:1009C000007F09090906003E4151215E007F091997 +:1009D00029460026494949320003017F0103003FAF +:1009E0004040403F001F2040201F003F4038403F14 +:1009F0000063140814630003047804030061594978 +:100A00004D4300007F4141410002040810200000D6 +:100A10004141417F00040201020400404040404047 +:100A2000000003070800002054547840007F284449 +:100A3000443800384444442800384444287F00386F +:100A4000545454180000087E09020018A4A49C788D +:100A5000007F080404780000447D400000204040EE +:100A60003D00007F102844000000417F4000007CD2 +:100A700004780478007C080404780038444444383E +:100A800000FC182424180018242418FC007C0804F6 +:100A900004080048545454240004043F4424003CF7 +:100AA0004040207C001C2040201C003C4030403C4A +:100AB000004428102844004C9090907C00446454DA +:100AC0004C440000083641000000007700000000A0 +:100AD00041360800000201020402003C2623263CA5 +:100AE00000000000000000404040F0F8F8FF38FF30 +:100AF000F8F83FF8F8FF38FFF8F8F0404040000001 +:100B00000000000080C0C0C0800000C0C0800000A5 +:100B10000080C0C000C0C0000080C0C00000000055 +:100B200000C0C0C0C0C000C0C00000000000000085 :100B300000000000000000000000000000000000B5 :100B400000000000000000000000000000000000A5 -:100B500000000000C0F0F8FC3E1E06010000007F0F -:100B60004141417F007F4141417F000080C0E07EE4 -:100B70005B4F5BFEC00000C000DCD7DEDEDED7DCF2 -:100B800000C00000000000000000000000000000A5 -:100B90000000000000000000000000494949FFFF7C -:100BA000FFFFE0DFBFBF00BFBFDFE0FFFFFFFF4988 -:100BB000494900000000001F3F6060E0BF1F007F48 -:100BC0007F071E381E077F7F007F7F0E1F3B7160EF -:100BD00000000000007F7F0C0C0C007E7E007F7EFA -:100BE0000303007F7E03037E7E03037F7E000F3EB0 -:100BF000703C063C703E0F00327B49493F7E007FCF -:100C00007E0303001E3F69696F260000000000009C -:100C100000000000030F1F3F3C7870600000007F61 -:100C20004141417F007F4141417F00307B7F7830EF -:100C3000202030787F3B0003000F7F0F0F0F7F0FC6 -:100C400000030000000000000000000000000000A1 -:100C50000000000000000000000000010101070F7B -:100C60000F7F0F7F0F0F7E0F0F7F0F7F0F0F07017B -:100C70000101000000000000000000000101000070 -:100C80000000000000000000000000000000000064 +:100B50000000000000000000000000000000000095 +:100B6000C0F0F8FC3E1E06010000007F4141417FBD +:100B7000007F4141417F000080C0E07E5B4F5BFE13 +:100B8000C00000C000DCD7DEDEDED7DC00C0000025 +:100B90000000000000000000000000000000000055 +:100BA00000000000000000494949FFFFFFFFE0DFAF +:100BB000BFBF00BFBFDFE0FFFFFFFF4949490000A3 +:100BC0000000001F3F6060E0BF1F007F7F071E38EE +:100BD0001E077F7F007F7F0E1F3B716000000000BB +:100BE000007F7F0C0C0C007E7E007F7E0303007F65 +:100BF0007E03037E7E03037F7E000F3E703C063C37 +:100C0000703E0F00327B49493F7E007F7E03030028 +:100C10001E3F69696F260000000000000000000010 +:100C2000030F1F3F3C7870600000007F4141417F0F +:100C3000007F4141417F00307B7F78302020307839 +:100C40007F3B0003000F7F0F0F0F7F0F000300009B +:100C50000000000000000000000000000000000094 +:100C600000000000000000010101070F0F7F0F7F4F +:100C70000F0F7E0F0F7F0F7F0F0F07010101000085 +:100C80000000000000000000010100000000000062 :100C90000000000000000000000000000000000054 :100CA0000000000000000000000000000000000044 :100CB0000000000000000000000000000000000034 @@ -207,1586 +207,1587 @@ :100CE0000000000000000000000000000000000004 :100CF00000000000000000000000000000000000F4 :100D000000000000000000000000000000000000E3 -:100D1000000000000000AF00AE09025B000301000C -:100D2000A0FA0904000001030101000921110100DA -:100D3000012240000705810308000A09040100029E -:100D40000300000009211101000122220007058291 -:100D5000032000010705030320000109040200012C -:100D6000030000000921110100012232000705845F -:100D70000320000A120100020000000832FC871262 -:100D80000200010200011E0353006F006C006100AD -:100D900072006900750073005F0053006F00660009 -:100DA0006C006500000010034B00650079006800CE -:100DB00069007600650000000403090411241FBEC9 -:100DC000CFEFDAE0DEBFCDBF04B603FE27C08091CF -:100DD000670690916806A0916906B0916A0687300F -:100DE000904BA740B04BD1F4109267061092680662 -:100DF0001092690610926A0614BE84B7877F84BF7A -:100E00000FB6F894A8958091600088618093600087 -:100E1000109260000FBEE0E0F8E3099512E0A0E058 -:100E2000B1E0E8EAFEE602C005900D92A833B107F2 -:100E3000D9F726E0A8E3B2E001C01D92A736B207B9 -:100E4000E1F70E947A260C941B370C940000CF9394 -:100E5000DF934091650650916606455654409A01CD -:100E6000205A3F4F21303240C0F020E032E0241BB6 -:100E7000350B6091630470916404FC01CA01240F76 -:100E8000351FC1E0D0E08217930750F070936404DF -:100E900060936304DF91CF91089520E630E0E9CFBD -:100EA0004491DC01AB59BB4F5C91451781F04C93E9 -:100EB000AC01A5E056954795AA95E1F7DE0102C081 -:100EC000AA0FBB1F4A95E2F7AD016A2B752B01965D -:100ED0003196D9CFE8EDF0E080818E7F808310924B -:100EE000E2001092DA001092E100A0EEB0E08C91E6 -:100EF00081608C9380818F77808319BCA7EDB0E0EF -:100F00008C918E7F8C9380818F7E8083109245049C -:100F100008952091E4003091E50095E6A901209123 -:100F2000EC00822F817020FF06C08091E80080FFD6 -:100F300006C080E008952091E80022FD1AC080914B -:100F40005304882389F0853089F08091EB0085FD7A -:100F50000FC02091E4003091E50042175307F9F2E9 -:100F60009150E1F684E0089582E0089583E00895C9 -:100F700081E00895EF92FF920F931F93CF937C012E -:100F80008B010E948907C82F811117C08091E8004A -:100F900085FD0BC08091E8008E778093E8000E9469 -:100FA0008907882399F3C82F08C0F70181917F0131 -:100FB0008093F1000150110949F78C2FCF911F91B7 -:100FC0000F91FF90EF9008958091550487FF13C013 -:100FD0008091E80082FF06C08091E8008B778093C3 -:100FE000E80004C0809153048111F2CF08958091EC -:100FF00053048823D9F38091E80080FFF8CF8091D3 -:10100000E8008E77ECCF982F9093E900242F762F6D -:1010100050E0891731F07091EC002091ED00509173 -:10102000F00021FD07C09F5F973071F78093E900C2 -:1010300081E008953091EB003E7F3093EB003091DA -:10104000ED003D7F3093ED003091EB003160309347 -:10105000EB007093EC002093ED005093F000209192 -:10106000EE0027FDE0CF80E00895CF92DF92EF926F -:10107000FF920F931F93CF93DF93C8EDD0E0888149 -:101080008F7E8883E7EDF0E080818160808384E05B -:1010900082BF81E08093450488818E7F888302EE41 -:1010A00010E0F80110821092DA0081EEC82ED12CE7 -:1010B000F601108288818F77888388818068888391 -:1010C00088818F7D888319BC109253041092540438 -:1010D000109252041092510490EEE92EF12CF70177 -:1010E00080818B7F808388818160888342E060E09B -:1010F00080E00E940308F60180818E7F8083F801E2 -:10110000808181608083808188608083F701808115 -:101110008E7F8083888180618883DF91CF911F914A -:101120000F91FF90EF90DF90CF900895FC01809198 -:101130005B0490915C0486179707A0F06115710518 -:1011400029F49091E8009E779093E80090E0611573 -:10115000710551F4911108C08091E80082FF34C0FC -:1011600080E00895BC01F2CF809153048823C1F13F -:101170008530C1F18091E80083FD30C08091E800A6 -:1011800082FDEACF8091E80080FFE1CF8091F300FB -:101190002091F200382F6115710519F028303105C2 -:1011A00058F091E02830310509F090E02091E800F6 -:1011B0002E772093E800CBCF81918093F10061508E -:1011C00071092F5F3F4FE7CF80915304882341F08F -:1011D000853041F08091E80083FFBECF81E0089523 -:1011E00082E0089583E00895089580914804089569 -:1011F0002FB7F89460913E0470913F0480914004B1 -:10120000909141042FBF089520913B0430913C04FC -:101210002817390771F090933C0480933B04E091C8 -:101220003904F0913A04309721F00084F185E02DE3 -:10123000099408952091370430913804281739070C -:1012400071F09093380480933704E0913904F09161 -:101250003A04309721F00680F781E02D0994089533 -:1012600020912A0436E0839FC0011124629F800DE3 -:10127000911D1124811522E0920714F090E080E086 -:101280008B599B4F90936606809365060895FC01E9 -:10129000680F791F8FEF91E32191822728E030E0DA -:1012A00087FF09C0880F892721503109C9F7E61740 -:1012B000F70791F70895880FF7CFFA01811101C060 -:1012C000FB01099480915E04982F9E7F61F48170E8 -:1012D000826080935E0480916104813A18F080EA14 -:1012E0008093610408958831B0F381708661F1CFF5 -:1012F000AF92BF92DF92EF92FF920F931F93CF9323 -:10130000DF93082F162FE901E42FF0E0EA57F94F99 -:10131000611110C0E4915E2F4E2F4983E8835A83F8 -:10132000DF91CF911F910F91FF90EF90DF90BF90D1 -:10133000AF900895E62EF12C4491D42EE42FF0E0E6 -:1013400026E0829FC00111242FEF30E0B9010E94F6 -:101350007A31802F90E0880F991F55E5569FD00174 -:10136000579FB00D11248A1B9B0B982F990F890F43 -:101370005901AE18BF08AE9ED001AF9EB00DBE9E03 -:10138000B00D11245B2F189F80011124012F11270C -:101390005901A01AB10AAE9E8001AF9E100DBE9EEB -:1013A000100D11245901A81AB108AE9CC001AF9CC0 -:1013B000900DBE9C900D1124892F9927281B390B65 -:1013C0002E9FC0012F9F900D3E9F900D1124E92F5D -:1013D00062307105A1F050F46115710509F49DCFDB -:1013E0006130710581F0EB2F512F97CF643071057B -:1013F00069F080F06630710509F48FCFF4CFE42FE7 -:101400004B2F592F8ACFE42F412F87CFEB2F542F0B -:10141000492F83CF4B2F5D2DE12F7FCF80E00895A3 -:1014200078940895F894E82FE295EF70F0E031A1F8 -:10143000282F2F7081E090E001C0880F2A95EAF7ED -:10144000982F9095932391A392A1892B82A30C941A -:10145000100A9091E50292FF06C0282F28712830CB -:10146000F9F4877F846093FF06C0282F2871283104 -:10147000F1F4877E84612091E60220FF06C0382FB8 -:1014800038713830D9F4877F816021FF06C0282F5A -:1014900028712831D1F4877E816194FD877E08957B -:1014A000282F24712430F9F68B7F8860DCCF282F19 -:1014B0002471243101F78B7E8861DDCF382F3171A3 -:1014C000313019F78E7F8860E0CF282F21712131CC -:1014D00021F78E7E8861E1CFCF93DF93EC018238D4 -:1014E000910581F1B0F58133910509F491C020F5A2 -:1014F0008932910509F485C08A9709F490C0C11515 -:1015000021E5D20708F0AAC0C11530E5D30708F0DD -:10151000F2C0CF3BD10508F089C0C83AD10508F028 -:10152000DFC0C53AD10508F0D3C0C430D105F8F406 -:10153000C130D105E1F040C08533910509F45AC0AE -:10154000C997E9F68091E502837089F0C0EED0E09A -:101550000EC0833E910599F170F4803E910501F132 -:10156000823E910561F68091E50282FD21C0CE01A7 -:10157000DF91CF910895863E910561F1873E9105F7 -:1015800071F1843E910509F0BACF8091E60281FFA6 -:10159000EECF8091E502C7EED0E084FD0DC0E7CF2D -:1015A0008091E50280FDF7C09091E60290FFDFCFC9 -:1015B000C3EED0E084FFDBCFD0E0C0E0D8CF809195 -:1015C000E50282FDEBC09091E60290FDBFCF84FF63 -:1015D000CECFF2CF8091E50283FDDDCFC8CF8091E1 -:1015E000E50283FDDEC09091E60291FFF0CFC4EEEC -:1015F000D0E0BDCF8091E50285FFB9CFC9E2D0E050 -:10160000B6CF8091E50285FFB2CFC5E3D0E0AFCF82 -:101610008091E50286FFABCFCAE2D0E0A8CF8091EF -:10162000E50286FFA4CFC1E3D0E0A1CFC11540E21F -:10163000D40760F4C11581E0D80708F098CFCE0137 -:10164000815E9109079708F492CFB6CFC11590E457 -:10165000D90708F4B1CFDF70D06A89CFC11524E56E -:10166000D20778F4C11533E5D30708F072C0C1156D -:1016700042E5D40708F05CC0DC2FCC27C16FD06AEC -:1016800076CFC1158AE5D80778F4C11599E5D90751 -:1016900008F073C0C11528E5D20708F48DCFDC2F00 -:1016A000CC27C06FD06A63CFCE019056811590428F -:1016B00008F082CF8D2F8F710E94290A90E0982F19 -:1016C000882788279F719C012C2BE901D0624FCF7E -:1016D000C55AD0E0CF52DE4FC881D0E0D06447CFAA -:1016E000C85AD0E0CC0FDD1FCC52DE4F0990D88114 -:1016F000C02DD4643CCFCE0164E0969587956A9561 -:10170000E1F783702C2F26952695237040E2249FC5 -:1017100090011124382B8C2F8370C1E0D0E002C0DF -:10172000CC0FDD1F8A95E2F7C22BD32BDC681FCFCD -:10173000CE018370992721E030E002C0220F331FD1 -:101740008A95E2F7C695C69580E2C89FE00111240C -:10175000EBCFCE018370992721E030E002C0220F49 -:10176000331F8A95E2F7C695C69590E2C99FE001BE -:101770001124C22BD32BDA68FACE8C2F8F700E94E3 -:10178000290A34E0D695C7953A95E1F7CF709C2F9A -:10179000EC01D069ECCEC9E3D0E0E9CEC2EED0E0F6 -:1017A000E6CEC6EED0E0E3CE0C94F8088091460475 -:1017B00090919B02892B90919A02892B80933A02F7 -:1017C000E0913904F0913A04309731F00280F381CE -:1017D000E02D8AE392E00994089580919902909116 -:1017E0006802981301C008958F5F8770FACF27E0D1 -:1017F000929F800D1124982F9770869586958695D7 -:1018000023E0829FF0011124E95BFD4F50E040E0AE -:1018100080E0219130E0092E02C0369527950A9488 -:10182000E2F721703327042E01C0220F0A94EAF751 -:10183000822B4F5F5F4F4330510559F7089527E0E2 -:10184000929F800D1124982F977041E001C0440FA2 -:101850009A95EAF786958695869593E0899FF0019B -:101860001124E95BFD4F90E080E070E05191DF01D1 -:1018700011979B01082E02C0369527950A94E2F72E -:10188000217021952527242325272C930196833029 -:10189000910561F7089590E080E00E941A0990E0B8 -:1018A00080E00E94040910929B0210929A020C940C -:1018B000D60B80939C020C944B0C882341F08095AE -:1018C000909146048923809346040C94D60B089586 -:1018D000882339F090914604982B909346040C94F9 -:1018E000D60B08958823B1F19CEF980F913A70F4CC -:1018F000ECE3F2E09191891303C0DF0111971C9290 -:1019000042E0E234F407B1F70C94D60B90E2980F62 -:10191000983088F4877021E030E0A90102C0440FBC -:10192000551F8A95E2F7CA01809590914604892354 -:1019300080934604E9CF9BE5980F933020F490E024 -:1019400080E00C941A09885A873120F490E080E0F6 -:101950000C94040908950F931F93CF93C82F8823E5 -:1019600009F469C08CEF8C0F813AB0F50CE312E0FA -:1019700082E492E0F8012191C21701F122E0E23401 -:10198000F207C9F7EFEF80E0D8019D918D01C917EB -:1019900081F0EF3F19F4911101C0E82F8F5F86307D -:1019A00099F7EF3F31F00E2E000CFF0BE65CFD4F78 -:1019B000C283CF911F910F910C94D60BECE3F2E010 -:1019C0002191C21303C0DF0111971C928E179F074C -:1019D000B9F70E94D60BD6CF80E28C0F883068F41E -:1019E000C77021E030E001C0220FCA95EAF780916C -:1019F0004604822B80934604DCCFEBE5EC0FE3300A -:101A000050F4F0E0EF52FE4F808190E0CF911F91B3 -:101A10000F910C941A09C85AC73168F4EC2FF0E002 -:101A2000EE0FFF1FEC52FE4F80819181CF911F91ED -:101A30000F910C940409CF911F910F910895982F45 -:101A400092959F7011F0892F94E0282F2695269566 -:101A500011F09E5F822F869509F09F5F892F089570 -:101A6000CF92DF92EF92FF920F931F93CF93DF936A -:101A70006C017B0164E670E088E70E94572EEC0160 -:101A800097FD12C010E000E0F601E00FF11F849115 -:101A900064E670E00E94D12EEC01892B29F40F5FDF -:101AA0001F4F0E151F0581F70E94542FCE01DF91A5 -:101AB000CF911F910F91FF90EF90DF90CF900895FD -:101AC0008091350490913604911103C091E08927EB -:101AD0000895882369F062E070E087E19DE00E944C -:101AE000300D892B19F0809135040895109235043A -:101AF00080913504EBCFCF93C091350480913604AB -:101B00008823D1F00E94F8086058774C8E4F9F4F81 -:101B100060933104709332048093330490933404BF -:101B2000C11108C062E070E085E19DE00E94300DC7 -:101B3000892B29F0C09135048C2FCF91089581E035 -:101B400080933504F7CF90915304943029F5809316 -:101B5000420470934404609343049093E9008FEF30 -:101B60009091E800815095FD06C095ED9A95F1F7AA -:101B700000008111F5CF8091E80085FF0DC050E095 -:101B800040E063E070E082E494E00E94BA07809154 -:101B9000E8008E778093E8000895BC0184E00C94FF -:101BA000A30DBC0183E00C94A30DCF93DF93EC0154 -:101BB00081E08093E9008FEF9091E800815095FDDE -:101BC00006C095ED9A95F1F700008111F5CF80914F -:101BD000E80085FF14C050E040E068E070E0CE010E -:101BE0000E94BA078091E8008E778093E80088E031 -:101BF000FE01A9E4B4E001900D928A95E1F7DF912E -:101C0000CF9108959F92AF92BF92CF92DF92EF92C1 -:101C1000FF920F931F93CF93DF937C015B016A01C7 -:101C20008091E00201E010E08A3010F40AE010E058 -:101C3000C1E0D0E0F894B501C701F6010995982EEE -:101C40000E94100A911004C021960C171D076CF415 -:101C5000892DDF91CF911F910F91FF90EF90DF9031 -:101C6000CF90BF90AF909F900895CC9F9001CD9F53 -:101C7000300D300D112490E080E045E34A95F1F7F6 -:101C80000000019682179307C1F7D4CF8091AB0271 -:101C9000811110C08091D80080618093D8008AE1C2 -:101CA0008A95F1F700C08091D90080FF0AC081E0D9 -:101CB0008093AB0281E09091AB02913009F080E01B -:101CC000089582E08093AB020E946A071092530449 -:101CD000F1CF0E94460E882351F0E0913904F09133 -:101CE0003A04309721F00190F081E02D099480E0D2 -:101CF00008951F93CF93DF93182FEB010E94AB0C35 -:101D00008FE99FE00197F1F700C000002197C1F72C -:101D1000812FDF91CF911F910C94720C4F925F92A3 -:101D20006F927F928F929F92AF92BF92CF92DF92EB -:101D3000EF92FF920F931F93CF93DF93CDB7DEB750 -:101D4000CE5DD1090FB6F894DEBF0FBECDBF509067 -:101D5000770180915E0480FF5DC080904A0390907F -:101D60004B038114910409F068C0EBE8F7E09E0191 -:101D70002F5F3F4FBE0161527F4FC901A4914A2F8F -:101D800050E0DA01AA0FBB1FA40FB51FA45BBC4F24 -:101D9000CD90DD90EC90D901CD92DD92ED929D0138 -:101DA00031966A177B0751F72091760143E0249F13 -:101DB000800D911D1124539A2BB1277F3BB13860C0 -:101DC0005FB7F894BC01549E600D711D11248617F5 -:101DD000970709F090C05FBF8FE594E00197F1F796 -:101DE00000C00000C252DF4F0FB6F894DEBF0FBE36 -:101DF000CDBFDF91CF911F910F91FF90EF90DF90BA -:101E0000CF90BF90AF909F908F907F906F905F909A -:101E10004F900895809178019091790123E0829FFD -:101E2000F0011124E45BFC4F891708F096CF118272 -:101E3000108212828F5F3396F7CF80914903811110 -:101E400094CFD12CC12C66246394712C53E0452E81 -:101E50008091480393010C2C01C0220F0A94EAF7E9 -:101E6000822309F43FC0F601EE0FFF1FE80DF91DB4 -:101E7000E590F490E114F10409F477CF45E050E0E7 -:101E8000B701CE0101960E94333209810F3F51F113 -:101E90008A81800F9927991F8B34910514F08AE469 -:101EA00090E05C01AA0CBB1C8A0D9B1DDC01A45BAD -:101EB000BC4F5D01049D80011124045B1C4F0A1579 -:101EC0001B0520F0B5E0EB0EF11CD8CF4D81413A57 -:101ED00008F040EA98016C818B810E9478090D5FBF -:101EE0001F4FEDCFEFEFCE1ADE0AF8E0CF16D10488 -:101EF00009F0AECF3ACFFC014191CF01E8E03BB908 -:101F0000000000C047FF2BB9440F000000C000C014 -:101F100000C02BB900C0EA9591F759CFEEE5F4E087 -:101F200080818E7F8083E5E4F3E08281816082831B -:101F30002FEF80E792E0215080409040E1F700C011 -:101F400000000C948E0EECE3F2E086E0DF011D92BF -:101F50008A95E9F70C944B0C1F93CF93DF93CDB781 -:101F6000DEB7AA970FB6F894DEBF0FBECDBF85E5EA -:101F700094E02091F100DC012D93CD01B4E08D358A -:101F80009B07B9F780915604833009F471C0B8F407 -:101F9000813009F448C0823009F4B4C08091E8006F -:101FA00083FF3CC180915504909156049A3008F00B -:101FB00035C1E92FF0E0E35EF84C0C94CD318A3066 -:101FC00009F48FC08B3009F470C0893039F78091E3 -:101FD0005504813219F78091590490915A04009761 -:101FE00011F00297D9F68091E800877F8093E8008E -:101FF0008091E80082FF37C09091F3008091F20059 -:10200000029729F48091F1008B7F813021F4809137 -:10201000F100809348048091E8008B778093E8007A -:102020000E94E407BBCF80915504813A09F0B6CFF6 -:102030008091E800877F8093E80080915904909117 -:102040005A04892B61F468E089E494E070E00E940E -:1020500096088091E8008B778093E8009FCF60E03E -:1020600090E080E0F3CF809153048111C1CF96CFEF -:1020700080915504813A09F091CF80915904909153 -:102080005A04892B09F08ACF8091E800877F8093DA -:10209000E8008091E80080FFFCCF80917B01809375 -:1020A000F1008091E8008E77B9CF8091550481329C -:1020B00009F074CF8091590490915A04892B09F04A -:1020C0006DCF8091E800877F8093E8000E94E4074D -:1020D0008091570480937B01109246040E94A30FC5 -:1020E0005DCF80915504813209F058CF8091E8008E -:1020F000877F8093E8000E94E407809158048093D2 -:1021000047044CCF80915504813A09F047CF809124 -:10211000E800877F8093E8008091E80080FFFCCF93 -:1021200080914704BCCF803899F0823809F076C09E -:10213000809159048F70873008F070C08093E90057 -:102140008091EB0085FB882780F91092E90006C09A -:102150008091510490915204911182609091E80015 -:10216000977F9093E8008093F1001092F1008091A6 -:10217000E8008E77B5C1882309F4A2C1823009F046 -:102180004DC0809157048111A6C1809159048F7070 -:102190002FEF280F263008F041C08093E9002091EE -:1021A000EB0020FF98C1933031F48091EB00806206 -:1021B0008093EB0090C19091EB0090619093EB00C5 -:1021C00021E030E001C0220F8A95EAF72093EA006F -:1021D0001092EA008091EB008860EACF81111EC066 -:1021E000109157041F778091E3008078812B8093B2 -:1021F000E3008091E800877F8093E8000E94E40775 -:102200008091E80080FFFCCF8091E300806880939C -:10221000E30082E0111183E0809353048091E80091 -:1022200083FF0AC08091E800877F8093E800809157 -:10223000EB0080628093EB00AA960FB6F894DEBFA5 -:102240000FBECDBFDF91CF911F910895805882308E -:1022500028F720915704309158042C3DE3E03E07C5 -:10226000A1F583E08A838AE289834FB7F894DE017F -:10227000139620E03EE051E2E32FF0E05093570048 -:10228000E49120FF03C0E295EF703F5FEF708E2F67 -:1022900090E0EA30C0F0C7968D939D932F5F243174 -:1022A00059F74FBF8091E800877F8093E8006AE28A -:1022B00070E0CE0101960E9496088091E8008B772D -:1022C0008093E800ABCFC096E7CF809159049091FE -:1022D0005A04432F55274330510509F44AC078F575 -:1022E0004130510509F47AC08BE590E0E9E1FDE069 -:1022F0004230510509F092CF2091E800277F2093CA -:10230000E80020915B0430915C048217930708F485 -:102310009C0140E02115310509F065C0411163C001 -:102320008091E80082FDC9CF80915304882329F26F -:10233000853019F28091E80083FFF2CFBECF4132A1 -:10234000510509F43CC04232510509F067CF833092 -:10235000910508F063CFFC01EE0FFF1FE55DFD4F17 -:102360000190F081E02D885D9D4FDC018C9190E023 -:102370001AC0332721303105D1F02115310561F024 -:102380002230310509F04ACFE6E8FDE0E4918E2FD6 -:1023900090E0E6E8FDE007C0E8EBFDE0E4918E2F79 -:1023A00090E0E8EBFDE0009709F438CFA5CFE6EA2E -:1023B000FDE0E4918E2F90E0E6EAFDE0F4CF83307B -:1023C000910508F02BCF880F991FFC01EF5CFD4FA2 -:1023D0000190F081E02D89E090E08ECF82E190E0E5 -:1023E000E4E7FDE089CF80915304882309F465CFA9 -:1023F000853009F462CF8091E80083FD5ECF809143 -:10240000E80082FD8DCF8091E80080FF83CF90911E -:10241000F3008091F2002115310519F08830910503 -:1024200050F041E0089709F040E08091E8008E7795 -:102430008093E8006FCF44914093F1003196215092 -:1024400031090196E8CF803809F0E8CE8091E800A4 -:10245000877F8093E800809154048093F10087CEB9 -:102460008111DCCE10915704123008F0D7CE809144 -:10247000E800877F8093E800109354040E94E407EB -:10248000112311F084E005C08091E30087FDFACFAD -:1024900081E08093530442E061EC81E00E940308F4 -:1024A00042E261EC84E00E94030842E261EC82E0D7 -:1024B0000E94030842E260EC83E00E940308AECE73 -:1024C00080915704813009F0A9CE81E0933009F062 -:1024D00080E0809352041092E9008091E800877FA9 -:1024E0008093E8000E94E40799CE1F93CF93DF9377 -:1024F000162FC0916506D09166068A30D1F42091DE -:102500002A04CE0185569440622F70E00E947A31F1 -:10251000281B822F66E00E948E31C82FC15020F404 -:10252000DF91CF911F91089560E080E20E947512C3 -:10253000F5CF8D30E9F4C556D44020912A04622F9E -:1025400070E0CE010E947A31281B822F9E01280F55 -:10255000311D2115324018F080E0D0E0C0E0C80FF6 -:10256000D11DCB59DB4FD0936606C0936506D8CFFB -:1025700096E0FE01ABE2B4E001900D929A95E1F78E -:10258000803E90F186E0FE0111928A95E9F7C091B4 -:102590006506D0916606111133C046E050E0BE01D9 -:1025A0008BE294E00E943C329E0125563440892BF8 -:1025B00091F52A5F3F4F40912A04642F70E0C901D2 -:1025C0000E947A31481B463010F4240F311D21152A -:1025D00072E0370710F030E020E02B593B4F30938A -:1025E0006606209365069CCFF6E08F9FB00111240C -:1025F0006B52784F46E050E0CE010E943332C7CF95 -:102600009E012A5F3F4FFE012E173F0731F2808166 -:1026100080958193F9CFC90145E0969587954A95B4 -:10262000E1F741E050E0BA0102C0660F771F8A95DA -:10263000E2F7CB016091630470916404862B972BC1 -:10264000B9016B5F7F4FE5E076956795EA95E1F715 -:1026500002C0440F551F6A95E2F7842B952B909387 -:10266000640480936304A5CFFF920F931F93CF93CD -:10267000DF93EC01F62EFC0101900020E9F78F01B9 -:1026800001501109C017D10730F0DF91CF911F9190 -:102690000F91FF9008956F2D89910E947512F2CFCE -:1026A000CF93DF93C7E5D2E060E0CE010E94F8341B -:1026B0002196C11584E0D807B9F7DF91CF9108952D -:1026C0006F927F928F929F92AF92BF92CF92DF9242 -:1026D000EF92FF920F931F93CF93DF9385EDC82E58 -:1026E00087E0D82E91ECE92EF12CE701CC58D109E6 -:1026F00036011BC0F50185909490692DC8010E9498 -:10270000F834682DC80101960E94F83482E0A80EC2 -:10271000B11C0E5F1F4FC017D10761F78EE0680E26 -:10272000711C2E96CE15DF0529F08E010E50110971 -:102730005301E0CF7E018CE8E80EF11C8CE8C80E56 -:10274000D11C81EFE81682E0F80679F6DF91CF918F -:102750001F910F91FF90EF90DF90CF90BF90AF90BF -:102760009F908F907F906F900895CF93C82F6FEFB9 -:10277000811161E283E290E00E94F834C1110CC043 -:10278000CFEF6C2F84E290E00E94F8346C2F85E24A -:1027900090E0CF910C94F834C9E0F3CF80E00E9430 -:1027A000B51360E086E290E00E94F8340E94601366 -:1027B0000E94501381E00C94B5130F931F93CF9395 -:1027C000DF93C42FD0E0CC0FDD1F2EE0629FC00D41 -:1027D000D11D11243CE8839FC00DD11D1124CE01D1 -:1027E00087960E94E434082F10E0102F0027CE01B6 -:1027F00088960E94E4349801282BC901DF91CF917B -:102800001F910F910895462F843038F47A3028F4C0 -:10281000673018F4672F0C94DD1390E080E0089582 -:10282000CF92DF92FF920F931F93CF93DF936C01B0 -:1028300000915D0480919C02082BC7E0D0E010E07D -:10284000FC2EC8010C2E02C0959587950A94E2F7DC -:1028500080FD0CC02197A0F7F12C8F2DDF91CF9137 -:102860001F910F91FF90DF90CF900895B6018C2FAC -:102870000E9403140E946C0A019761F3EECFCF937C -:10288000DF93EC010E941014BE010E940314DF913B -:10289000CF910C946C0AFC01808191810E943F14BD -:1028A000292F2F7092959F7092509E3078F4E92FC7 -:1028B000F0E0E95DF84C0C94CD31803F19F020F444 -:1028C000883E20F481E00895843FE1F380E008959C -:1028D000883EC0F3813FD1F7F5CF822F869586954C -:1028E0008695089583E290E00E94E434813289F471 -:1028F00084E290E00E94E434893059F485E290E06B -:102900000E94E43491E0893009F090E0892F8170D1 -:10291000089580E0FCCFCF92DF92EF92FF926B019F -:102920007C010E946209B701A60188E090E0FF9057 -:10293000EF90DF90CF900C940A35AF92BF92CF9278 -:10294000DF92EF92FF920F931F93CF93DF9300D00C -:102950000F92CDB7DEB7082FF62E142FE22E8091FE -:102960005E0480FF4FC0E82FE695AE2FB0E0A45E76 -:10297000BD4F9C91909345038E7F823009F056C0E5 -:10298000413A08F040EA9E012F5F3F4F6F2D802FA4 -:102990000E94780980915E0480FF11C02B813981EB -:1029A0004A81809178019091790153E0859FF001EF -:1029B0001124E45BFC4F891798F10E948E0E8091E0 -:1029C0005F04801308C0809160048F1104C080915F -:1029D0006104811729F08091470382608093470347 -:1029E00000935F04F092600410936104EE2051F0B4 -:1029F00060915E0470915F04809160049091610425 -:102A00000E948B140F900F900F90DF91CF911F9128 -:102A10000F91FF90EF90DF90CF90BF90AF9008950F -:102A20004183308322838F5F3396C5CF923039F64E -:102A3000E2508E2F8170D82EE695F0E0EA57F84FDD -:102A4000A590B490C12CBB2460917A01C61608F001 -:102A5000B4CF2C2D30E0A29EC001A39E900DB29E5B -:102A6000900D112470E00E947A31802FD11016C091 -:102A7000860F40917801420F532F511D9A01220F6A -:102A8000331F240F351F245B3C4F412F113A08F0B0 -:102A900040EA6F2D0E947809C394D6CF861BE9CFF8 -:102AA000EEE5F4E0438121E1421B08F440E021E03F -:102AB000628181810C949D14EEE5F4E0438121E173 -:102AC000420F08F44FEF21E0628181810C949D1444 -:102AD000EEE5F4E0628121E1621B08F460E021E0B0 -:102AE000438181810C949D14EEE5F4E0628121E143 -:102AF000620F08F46FEF21E0438181810C949D14F3 -:102B0000EEE5F4E0818121E04381628188500C94FC -:102B10009D14EEE5F4E0818121E043816281885FCC -:102B20000C949D1480916204882319F08150809345 -:102B3000620460915E0470915F04809160049091E2 -:102B400061040C948B1480916204833018F48F5FBD -:102B50008093620460915E0470915F0480916004D0 -:102B6000909161040C948B1490915E0490FF27C0A7 -:102B7000917081111DC0926090935E048091470313 -:102B8000816080934703662351F060915E047091E9 -:102B90005F0480916004909161040E948B1420E096 -:102BA000409161046091600480915F040C949D14D5 -:102BB0008C3010F09661E0CF880F982BDDCF089510 -:102BC00021E030E0A90102C0440F551F8A95E2F7C9 -:102BD000CA01209148036623C1F0822B80934803E9 -:102BE0008091470380618093470380914603811160 -:102BF00006C080915E0460E086950E94B4158091C5 -:102C00005E0480FD05C00C948E0E80958223E6CF75 -:102C10000895CF93DF93C82FC17082FBDD27D0F9D1 -:102C200081FB662760F984E00E94E01561E06C2773 -:102C300085E00E94E0156D2F86E0DF91CF910C9426 -:102C4000E0150F931F93CF93C82F61E08111682F78 -:102C5000617080E00E94E015C1FB662760F9C11138 -:102C600001C060E081E00E94E015C2FB662760F9C8 -:102C7000C11101C060E082E00E94E015C3FB66273D -:102C800060F9C11101C060E083E00E94E0154C2FA3 -:102C900050E070E060E0DB01CA01F4E0B695A79572 -:102CA00097958795FA95D1F70097A105B10551F150 -:102CB000AC01BD0184E08A019B01E2E036952795D5 -:102CC00017950795EA95D1F70115110521053105ED -:102CD00019F08E5FB901A8017695679557954795CC -:102CE000452B462B472B09F08F5F8130A1F08823BD -:102CF00059F08230A9F08330C1F08C2FCF911F9111 -:102D00000F91089580E0D7CF20E040E56FEF82E398 -:102D10000E949D14F2CF20E040E56FEF8CEFF8CFDA -:102D200020E040E56FEF86E7F3CF20E040E56FEF6E -:102D30008AEDEECF0E94211680935D040C944B0C1B -:102D400080915D04982F9670963019F488600C94E9 -:102D50009A16877FFCCF21E030E001C0220F8A95D0 -:102D6000EAF7209580915D0482230C949A1621E065 -:102D700030E001C0220F8A95EAF780915D04822B32 -:102D80000C949A1680915E048695815009F48BE02C -:102D900061E00C94B41580915E0486958F5F8C3051 -:102DA00008F081E061E00C94B41580915E0480FF2E -:102DB00007C0869582588F77893010F40C94CB1613 -:102DC00061E082E00C94B415EEE5F4E083E08083EA -:102DD00011828FEF828380EA83831482A5E4B3E0BB -:102DE00012968C911297836012968C9360817181F8 -:102DF000828193810C948B1469EE7EEF90E080E0E9 -:102E00000E94163560E082E090E00E94F83460E0B5 -:102E100083E090E00E94F83410929C0260E084E02D -:102E200090E00E94F83460E082E290E00E94F83482 -:102E300060E085E090E00E94F83460E086E090E099 -:102E40000E94F8346FEF87E090E00E94F83440E091 -:102E500050E0BA0188E090E00E940A3560E08DE021 -:102E600090E00E94F83440E050E0BA0188E190E040 -:102E70000E940A3560E087E190E00E94F83440E06B -:102E800050E0BA018CE190E00E940A3570E060E009 -:102E900080E290E00E94163540E050E0BA0188E1FF -:102EA00090E00E940A3580E00E94B5130E94CE1384 -:102EB00040E050E0BA018FE090E00E940A3540E027 -:102EC00050E0BA0183E190E00C940A350F931F9310 -:102ED000CF93DF9300D000D0CDB7DEB74091D002C2 -:102EE0005091D1026091D2027091D3022FB7F89421 -:102EF00080913E0490913F04A0914004B091410420 -:102F00002FBF841B950BA60BB70B84369105A1052B -:102F1000B10588F10E94460E882379F10E94F808D5 -:102F20006E5F7F4F8F4F9F4F69837A838B839C8324 -:102F300080912B0190912C0187549D4F40912A0143 -:102F400050E04530510510F044E050E0BE016F5FA5 -:102F50007F4F0E94493284E090E00E94C630892B66 -:102F6000D9F40E94F8086093D0027093D102809344 -:102F7000D2029093D30281E010C00E94F808009121 -:102F8000E1021091E2022091E3023091E402600F2D -:102F9000711F821F931FC4CF80E00F900F900F907E -:102FA0000F90DF91CF911F910F9108958F929F9273 -:102FB000AF92BF92CF92DF92EF92FF920F931F9347 -:102FC000CF93DF93EB0188809980AA80BB809FB765 -:102FD000F894C0903E04D0903F04E0904004F090FC -:102FE00041049FBFC818D908EA08FB0894E6C9162F -:102FF000D104E104F10410F4442311F1E82E082E69 -:10300000000CFF089AE08902F0011124E050FF4F04 -:103010008381948187549D4F428150E004171507A6 -:1030200008F4A801B9010E944932C7010E94C630C4 -:10303000892BA1F40E94F808688379838A839B8393 -:1030400081E0DF91CF911F910F91FF90EF90DF9082 -:10305000CF90BF90AF909F908F90089580E0F1CF78 -:103060000F931F93CF93DF930F92CDB7DEB780916D -:10307000350489832091CF0290E041E0281719069A -:1030800009F440E001E010E09E012F5F3F4F6CED3E -:1030900072E087E00E94D6170F90DF91CF911F91C9 -:1030A0000F9108950F931F93CF93DF930F92CDB796 -:1030B000DEB78091FB02898341E09091CE029813A4 -:1030C00001C040E001E010E09E012F5F3F4F68ED3E -:1030D00072E086E00E94D6170F90DF91CF911F918A -:1030E0000F9108950F931F93CF93DF93CDB7DEB762 -:1030F00029970FB6F894DEBF0FBECDBF85E0EEE591 -:10310000F4E0DE01119601900D928A95E1F780912D -:10311000450390914603A0914703B09148038E83E5 -:103120009F83A887B98741E08885811101C040E06D -:1031300009E010E09E012F5F3F4F64ED72E085E0F3 -:103140000E94D61781111092470329960FB6F89462 -:10315000DEBF0FBECDBFDF91CF911F910F910895BC -:103160006F927F928F929F92AF92BF92CF92DF9297 -:10317000EF92FF920F931F93CF93DF930F92CDB7F0 -:10318000DEB7862E5A016901682E880F7708C301C1 -:103190000E94C630892B09F088C08AE0869DF00124 -:1031A000879DF00D1124E050FF4F458150E04115FF -:1031B000510511F041E050E08AE0869DF001879DC5 -:1031C000F00D1124E050FF4F6681778167547D4FE9 -:1031D000CE0101960E944932F50140815181628100 -:1031E00073812FB7F89480913E0490913F04A09191 -:1031F0004004B09141042FBF841B950BA60BB70B65 -:1032000084369105A105B10540F4B701C8010E94BB -:1032100047099981891709F44FC0082C000C9908B7 -:10322000C4010E94C630892B91F0B12C8B2D0F90D8 -:10323000DF91CF911F910F91FF90EF90DF90CF9092 -:10324000BF90AF909F908F907F906F9008958AE08D -:10325000889DF001899DF00D1124E050FF4F4581BC -:1032600050E0E416F50608F4A7018AE0889DF00115 -:10327000899DF00D1124E050FF4F668177816754DE -:103280007D4FC6010E944932B701C8010E9447091B -:1032900099818913CACF0E94F808F5016083718370 -:1032A00082839383BB24B394C1CFB12CA701B8010F -:1032B000C6010E944932BACFBB24B394F7CFCF9254 -:1032C000DF92EF92FF920F931F93CF93DF9300D083 -:1032D00000D00F92CDB7DEB76B0185E0E82EF12C60 -:1032E0000AEB12E09E012F5F3F4F41EB52E061E09D -:1032F00080E00E94B018882349F095E0FE013196E5 -:10330000ACEAB2E001900D929A95E1F795E0ECEA13 -:10331000F2E0D60101900D929A95E1F70F900F908F -:103320000F900F900F90DF91CF911F910F91FF9011 -:10333000EF90DF90CF90089590E080E00E94F2340B -:10334000893E9E4F11F40C94721480E008951F92F0 -:103350000F920FB60F9211242F933F934F935F93C9 -:103360006F937F938F939F93AF93BF93CF93DF938D -:10337000EF93FF93D091E900DF708091EC00C82FAC -:10338000C17080FDC0E81092E9008091F000877F55 -:103390008093F00078940E94AC0F1092E900809125 -:1033A000F00088608093F000CD2BCF70C093E900CF -:1033B000FF91EF91DF91CF91BF91AF919F918F914D -:1033C0007F916F915F914F913F912F910F900FBE21 -:1033D0000F901F9018951F920F920FB60F92112405 -:1033E0002F933F934F935F936F937F938F939F930D -:1033F000AF93BF93EF93FF938091E10082FF09C0E9 -:103400008091E20082FF05C08091E1008B7F809374 -:10341000E1008091DA0080FF24C08091D80080FF15 -:1034200020C08091DA008E7F8093DA008091D900ED -:1034300080FF9BC080E189BD82E189BD09B400FEA7 -:10344000FDCF81E08093530480914504811109C030 -:103450000E946A070E9435088091E2008460809390 -:10346000E2008091E10080FF17C08091E20080FFC0 -:1034700013C08091E2008E7F8093E2008091E20091 -:1034800080618093E2008091D80080628093D800B0 -:1034900019BC85E0809353048091E10084FF29C02A -:1034A0008091E20084FF25C080E189BD82E189BD71 -:1034B00089B5982F917080FFFBCF8091D8008F7DC8 -:1034C0008093D8008091E1008F7E8093E10080910D -:1034D000E2008F7E8093E2008091E2008160809321 -:1034E000E20080915404882309F445C084E080936D -:1034F00053048091E10083FF27C08091E20083FFA5 -:1035000023C08091E100877F8093E10082E0809377 -:103510005304109254048091E1008E7F8093E10067 -:103520008091E2008E7F8093E2008091E2008061D2 -:103530008093E20042E060E080E00E940308809116 -:10354000F00088608093F000FF91EF91BF91AF9100 -:103550009F918F917F916F915F914F913F912F91AB -:103560000F900FBE0F901F90189519BC1092530426 -:103570001092450476CF8091E30087FD93E090930D -:103580005304B7CF78941F921FB61F9211248F93C4 -:103590009F93AF93BF9380913E0490913F04A0917D -:1035A0004004B09141040196A11DB11D80933E04D9 -:1035B00090933F04A0934004B0934104BF91AF9116 -:1035C0009F918F911F901FBE1F9018959C014FB720 -:1035D000F89480913E0490913F04A0914004B091F2 -:1035E00041044FBF821B930B08952FB7F89480912D -:1035F0003E0490913F04A0914004B09141042FBF3C -:1036000008958F929F92AF92BF92CF92DF92EF92E6 -:10361000FF920F931F93CF93DF93CDB7DEB72F9712 -:103620000FB6F894DEBF0FBECDBF8E010F5F1F4FE8 -:103630008AE0D8011D928A95E9F787E5C82E81E0D6 -:10364000D82EF12CE12CAA24A394B12CF60181915F -:103650006F018F3F09F44AC0F894E82FE295EF70AC -:10366000F0E021A18F70A50102C0440F551F8A957B -:10367000E2F7CA01922F982B91A392A180958923FA -:1036800082A30E94100A00C0E0E5F1E030E020E0F3 -:10369000912C41914F3F09F47FC0A42FA295AF70A8 -:1036A000B0E090968C9190E04F7002C09595879510 -:1036B0004A95E2F780FD70C08A2D022E01C0880F66 -:1036C0000A94EAF7982A2F5F3F4F2730310509F710 -:1036D000F601319780818F3F11F00E94120A50EA63 -:1036E0005A95F1F7F801EE0DFF1D90828FEFE81A61 -:1036F000F80A95E0E916F10409F0A8CF4AE050E095 -:10370000B80187EE92E00E943C327C01892B41F0A7 -:103710008AE0F801A7EEB2E001900D928A95E1F7F8 -:103720001091F202E114F104C9F181E080939F024B -:103730000E94F51A90939E0280939D0280919D02B3 -:1037400090919E020E94E61A069778F0A7EEB2E0EA -:10375000E12FF0E0E55CFC4F8CEE92E02D9121939F -:103760008A179B07D9F710929F0281E090E0EF281B -:10377000C9F02F960FB6F894DEBF0FBECDBFDF9114 -:10378000CF911F910F91FF90EF90DF90CF90BF905E -:10379000AF909F908F90089580E094CF80919F028A -:1037A0008111CCCF0E94460EB82EE091F2028E011C -:1037B000055F1F4F882309F4D3C085E0D8011D920F -:1037C0008A95E9F7F0E09F01255C3C4F79018091F3 -:1037D000E002AE01405F5F4F6A018A3008F098C096 -:1037E0004FE559E1B801C7010E94020E882309F490 -:1037F000A6C04DEF55E2B801C7010E94020E882312 -:1038000009F49DC046E657E1B801C7010E94020EC7 -:10381000882309F494C042E758E1B801C7010E9427 -:10382000020E882309F48BC042E558E1B801C701B4 -:103830000E94020E882309F482C040E358E1B801D7 -:10384000C7010E94020E882309F479C01092E00299 -:10385000E091F102F0E0AF01455C5C4FD80110E06F -:10386000FA019191AF018D91981731F09F0121508C -:103870003109F90180831B2DAC15BD0589F78091B5 -:10388000A2029091A3020E94E61A893E934060F141 -:103890006091FB02E62EF12C662777276E197F09CF -:1038A000072E000C880B990B0E94E13527EA39E7B7 -:1038B00047E45DE30E94AE364B015C01B701FF0CAB -:1038C000880B990B0E94E1359B01AC01C501B40145 -:1038D0000E942D350E94B0356093FB020E94F51ABC -:1038E0009093A3028093A2028091A602882371F094 -:1038F0008091A4029091A5020E94E61A893E93400D -:1039000028F082EE0E94720C1092A602812F31CF15 -:103910008091A0029091A1020E94E61A843F9140FA -:1039200008F05ECFE091F102F0E0E55CFC4FD801D9 -:1039300011921D92AC15BD05D9F71B2DA0CF80911A -:10394000E0028F3F31F08F5F8093E0028A3008F40D -:103950007FCF0E94F51A9093A1028093A002E2CF3C -:10396000F0E0E55CFC4FF89485E0AAEBB2E0019052 -:103970000D928A95E1F765E070E08AEB92E00E9493 -:1039800047098093B9020E94100AF894E091F90265 -:10399000F0E0EA50FD4F80818B878093C00261E0A8 -:1039A00070E0C8010E9447098093BF020E94100A7C -:1039B000F894C090C102D090C202E090C302F0908F -:1039C000C4028091A7029091A802A091A902B0918F -:1039D000AA02C816D906EA06FB06D1F0C092A702D1 -:1039E000D092A802E092A902F092AA020E94460E8A -:1039F00081110EC00E94F808C61AD70AE80AF90A0F -:103A0000C092E102D092E202E092E302F092E4027C -:103A10000E94100AF8948091CC02882321F184FF3F -:103A200004C09091CD029093480380FF0DC0809117 -:103A3000C50280FF2CC090915E04916090935E045B -:103A400060E086950E94B4158091CC0281FF09C088 -:103A500020E04091C8026091C7028091C6020E9496 -:103A60009D141092CC020E94100AF8948091CE020C -:103A70008093FB020E94100AF8948091CF02882361 -:103A800049F00E947B0D0E94100A80E072CE0E94D5 -:103A90008E0FDACF0E94600DF6CF5F926F927F9209 -:103AA0008F929F92AF92BF92CF92DF92EF92FF924E -:103AB0000F931F93CF93DF9300D000D00F92CDB719 -:103AC000DEB76C01FC0183819481892B31F0808108 -:103AD000918189238F3F09F082C50F900F900F903D -:103AE0000F900F90DF91CF911F910F91FF90EF906A -:103AF000DF90CF90BF90AF909F908F907F906F900E -:103B00005F9008950E941014182F682F89819A8160 -:103B10000E941F0C69817A81812F0E9403148C01FD -:103B2000F6018281882309F463C0C801905681158B -:103B3000F0E29F0750F0905E811520E1920728F097 -:103B4000915C81159F4108F0A5C0C80199279C018F -:103B5000245031092432310520F08B970E9708F05C -:103B600047C08091A2029091A3020097D9F10E94D0 -:103B7000E61A9C0150E040E060E67AEE80E090E0DA -:103B80000E94AE31CA01B90125E030E040E050E0CA -:103B90000E94AE31E090FB022F3F310519F010F08A -:103BA0002FEF30E0F12C2E193F09B90190E080E0B1 -:103BB0000E94DF3527EA39E747E45DE30E94AE362D -:103BC0000E9499354B015C01B701FF0C880B990BE2 -:103BD0000E94E135A50194010E942D350E94B03567 -:103BE0006093FB020E94F51A9093A3028093A202B5 -:103BF000F6018281882309F4E6C4C80182519F45F9 -:103C0000409708F071C48FEF93E00E94E4340251B2 -:103C100097E5A92E92E0B92E81115FCF011143C023 -:103C20001C821B82662463948AE0582E85010F5FF4 -:103C30001F4FC5010E94E43489831A82882309F446 -:103C40004CCF9FEF980F9330E8F58A83698232E07A -:103C5000A30EB11CC8010E94E4348B83882309F4AD -:103C60003CCF8E010F5F1F4FF80120812223F1F21C -:103C7000213009F061C091818281913029F50E5F78 -:103C80001F4F6AE070E0893311F460E570E00E9434 -:103C9000790E20C090E080E00F3F110511F008F090 -:103CA00056CFC80154CFA114F4E0BF0609F415CFD4 -:103CB000C5010E94E434811101C001502FEFA21A06 -:103CC000B20AACCF5801CDCF923039F40E5F1F4FFE -:103CD0000E94AB0C0F5F1F4FC7CF933029F40E5FCC -:103CE0001F4F0E94720CF6CF943019F00F5F1F4FD8 -:103CF000F1CF0E5F1F4F30E020E0B8016F5F7F4FC4 -:103D0000F80141818053990B8A30910550F0215080 -:103D1000310900F38FE99FE00197F1F700C000003F -:103D2000F6CF529EF001539EF00D11249C012E0FF0 -:103D30003F1F842F8B01E1CFE22FF0E0EA54FE4FCA -:103D40007490822F86958695869590E0FC01EA55C1 -:103D5000FE4FE4902770F12C022E02C0F594E794F8 -:103D60000A94E2F7E1E0EE22FF24FC01EA56FE4F5E -:103D7000C490D12C022E02C0D594C7940A94E2F7C5 -:103D8000F1E0CF22DD24FC01EA57FE4F8490912C14 -:103D900002C0959487942A95E2F721E08222992423 -:103DA000E114F10419F081EE0E94AB0CC114D104AE -:103DB00019F086EE0E94AB0C39E36AE070E07312F2 -:103DC00002C060E570E0872D0E94790ECD2819F0C1 -:103DD00086EE0E94720CEF2819F081EE0E94720CA0 -:103DE000892809F477CF6AE070E08CE250CF81E057 -:103DF0000E94B71603C081E00E94AB160F900F908F -:103E00000F900F900F90DF91CF911F910F91FF9026 -:103E1000EF90DF90CF90BF90AF909F908F907F906A -:103E20006F905F900C94A01682E0E2CF013E1105E6 -:103E300009F49AC0043E110509F07CC3882309F4F3 -:103E4000CEC081E08093FC0275C30238FFE51F07F6 -:103E500009F459C000F500383FE51307B9F10138FE -:103E60004FE5140709F066C3882309F445C0809123 -:103E7000A602811106C081E08093A60282EE0E9414 -:103E8000AB0C0E94F51A9093A5028093A40281EED8 -:103E90000E94AB0C2DC003385FE5150709F447C03D -:103EA00004389FE5190709F045C3882309F482C047 -:103EB00080914302882309F45AC0809144020E94F1 -:103EC000720C80EE0E94AB0C8AE25EC08823B9F0CF -:103ED0008091A602811106C081E08093A60282EE45 -:103EE0000E94AB0C0E94F51A9093A5028093A40245 -:103EF0008BE20E94AB0C1EC381EE0E94720C8BE21F -:103F00000E94720C17C3882309F414C381EE0E9427 -:103F1000AB0C83EE0E94AB0C8FE40E94AB0C8FE4E1 -:103F20000E94720C83EE0E94720C81EEE9CF88230E -:103F300009F400C381EE0E94AB0C83EE0E94AB0C2F -:103F400080E50E94AB0C80E5EBCF80934602109396 -:103F5000450200934402882321F081E08093FD0212 -:103F6000E9C21092FD02E6C280934302F0CF809135 -:103F70004602882309F4A8CF809144020E94720C63 -:103F800080EE0E94AB0C8CE40F900F900F900F907E -:103F90000F90DF91CF911F910F91FF90EF90DF90E5 -:103FA000CF90BF90AF909F908F907F906F905F90D9 -:103FB0000C94AB0C8AE20E94720C8CE40E94720C8E -:103FC00080EE0E94720C80914302811105C08091A5 -:103FD0004602882309F481CD80914402D5CF109206 -:103FE000FC02A8C2882331F081E08093FF02109286 -:103FF0006E01A0C21092FF029DC2073C2CE5120781 -:1040000009F4AEC008F4A7C0083C4CE5140709F455 -:10401000ACC0093C1C4509F0ADC240E555E16CE57A -:1040200075E179C0043DECE51E07A8F40E3CFCE503 -:104030001F0708F052CD0C3C2CE5120709F49FC075 -:1040400042E955E163EA75E10D3C1C4508F463C0A3 -:1040500061E081E046C0053D4CE5140709F43DCD23 -:1040600008F492C00D351D4509F437CD83C2809107 -:104070005E0480FF31C08E7F80935E0460915E0499 -:1040800070915F0480916004909161040E948B1490 -:10409000809147038160809347039FEFE0E7F2E060 -:1040A0009150E040F040E1F700C000000F900F9009 -:1040B0000F900F900F90DF91CF911F910F91FF9074 -:1040C000EF90DF90CF90BF90AF909F908F907F90B8 -:1040D0006F905F900C948E0E816080935E0461E01F -:1040E00086950F900F900F900F900F90DF91CF91CA -:1040F0001F910F91FF90EF90DF90CF90BF90AF9006 -:104100009F908F907F906F905F900C94B41542ECCD -:1041100056E16BEC76E10F900F900F900F900F909F -:10412000DF91CF911F910F91FF90EF90DF90CF9093 -:10413000BF90AF909F908F907F906F905F900C9406 -:104140005D094BEC56E162EC76E1E5CF40E855E1E4 -:1041500069E875E1E0CF49E855E160E875E1DBCF5A -:1041600048E655E164E775E1D6CF44E755E168E6F6 -:1041700075E1D1CF4CE555E160E575E1CCCF43EA7F -:1041800055E162E975E1C7CF0F900F900F900F9046 -:104190000F90DF91CF911F910F91FF90EF90DF90E3 -:1041A000CF90BF90AF909F908F907F906F905F90D7 -:1041B0000C94D5160E3D1C4509F0DCC10F900F90F4 -:1041C0000F900F900F90DF91CF911F910F91FF9063 -:1041D000EF90DF90CF90BF90AF909F908F907F90A7 -:1041E0006F905F900C94FC16C8010E94F70BF82E9C -:1041F000CFC1092F0F70907F11F00295007F812FA2 -:104200002223C9F0002369F090E2910F983010F05A -:1042100011110BC080914604082B009346040E94A4 -:10422000D60B812F0E94AB0C17C080919B02082BEC -:1042300000939B02F4CF0E94720C002369F000955A -:10424000105E183010F0B11027C08091460408238A -:10425000009346040E94D60B98E0E91AF108E4E0C6 -:10426000EE16F10408F039CC0E94690E0F900F9001 -:104270000F900F900F90DF91CF911F910F91FF90B2 -:10428000EF90DF90CF90BF90AF909F908F907F90F6 -:104290006F905F900C94091680919B020823009305 -:1042A0009B02D8CF892F8F70907F903211F082952A -:1042B000807FF1E0BF120CC0222329F0333060F67A -:1042C0000E94680CC9CF323038F60E945D0CC4CF12 -:1042D000222341F03323A1F340FFA3CF4F70F60117 -:1042E0004583EECF332389F3193309F0F5C0FFEF8F -:1042F00027EE33E0F15020403040E1F700C00000ED -:10430000812F0E94720CA8CF892F86958695837085 -:1043100061F0813009F0A0CF812F9370211102C08C -:1043200090E080E00E94040997CF812F93702111C3 -:1043300002C090E080E00E941A098ECF892F83701E -:10434000A1F5211189CF812F829586958770880FDD -:10435000880F412F4F70082E01C0440F0A94EAF7CE -:10436000212F207114FF07C02FE030E001C0220F81 -:104370008A95EAF72095969596959370923081F0FC -:10438000822F842B933030F480919C02913029F05D -:10439000242B82230E94590C5FCF842B822BFACFCF -:1043A000242B80919C028227F5CF8695222311F041 -:1043B000892F8170882309F44FCF812F82958695AC -:1043C0008770880F880F412F4F70082E01C0440F4F -:1043D0000A94EAF7212F207114FF07C02FE030E084 -:1043E00001C0220F8A95EAF72095969596959370CD -:1043F000923081F0822F842B933030F480915D04D1 -:10440000913029F0242B82230E949A1625CF842BE9 -:10441000822BFACF242B80915D048227F5CF092FC0 -:104420000F70222329F0802F0E94B716812F48CFCA -:10443000812F0E945D0C802F0E94AB160DCF812F23 -:10444000E1EF1E1789F1E11750F0F0EF1F17B9F0F7 -:104450002223B1F13111E5CE892F8F7129C042EFAE -:10446000141749F153EF1513F3CF80E0222361F2C3 -:104470009F7181E001C0880F9A95EAF7C5CF22238A -:1044800079F0323008F0E8CE292F2F7181E090E0EA -:1044900001C0880F2A95EAF790915D048927B4CF6F -:1044A000333008F0D9CEF0CF892F8F71222321F23B -:1044B0000E94B716D1CE892F8F712223C9F3BCCFAA -:1044C000332379F0893341F48FEF97EEE3E08150A5 -:1044D0009040E040E1F712CF8FE39CE90197F1F7BC -:1044E0000DCF892F8F71A8CF0031FFE51F0709F489 -:1044F0007ECC01312FE5120709F496CC0E94F80812 -:10450000609304037093050380930603909307035D -:10451000F6018281053E110509F417CD08F095CC0E -:10452000003E110509F48ACC08F080CC0C3211054C -:1045300009F458CDF601928191113CCE8091460448 -:1045400082720A3CFCE51F0709F414CE08F06ACD1C -:10455000053C3CE5130709F4F9CD08F04ECD033CCA -:104560005CE5150709F4D3CD08F0EBCD023C1C4502 -:1045700009F47DCDF60100811181992309F434CE2F -:10458000C8010E941014F82E682FC8010E941F0C49 -:10459000B8018F2D0E9403140E946C0A182FB82EA8 -:1045A000F60122814581342F32953F70892F829503 -:1045B0008F70E82EF12C8C3008F04ECEF701EB5CBA -:1045C000F84C0C94CD3100313FE5130709F413CCBE -:1045D00001314FE5140709F09BCF82E00DCC85E057 -:1045E000DE01119601900D928A95E1F7F601228184 -:1045F00089819A81211186CA0E94F70B182F8ACAD5 -:104600001F93CF93DF9380916702807FA9F48091FD -:104610006402882389F080919902D09168026091A8 -:10462000620270916302A0916502B0916602C62F8A -:10463000C72316E0D81304C0DF91CF911F910895CE -:1046400090E0109711F0CF3F19F401968770F2CFE8 -:10465000189F9001199F300D1124F901E759FD4F62 -:1046600041814713F2CF40814613EFCF4281411180 -:10467000ECCF438154814A1B5B0B403A510528F72C -:10468000809167028F70806180936702F901E2591F -:10469000FD4F80818F708061808382E692E00E946E -:1046A0004D1DDF91CF911F910C94ED0BAF92BF92F6 -:1046B000CF92DF92EF92FF920F931F93CF93DF93EE -:1046C000CDB7DEB761970FB6F894DEBF0FBECDBF92 -:1046D0008C0185E0F801DE011D9601900D928A950E -:1046E000E1F7F801E28082E6A82E82E0B82E609120 -:1046F0006502709166026115710509F432C19091ED -:10470000620240916302892F84238F3F09F429C1FB -:1047100020813181C380D480F0906402F601E61BD1 -:10472000F70BFF2009F4E8C080916702582F507FF3 -:10473000E03AF10508F0ABC0511177C0FE2C4313ED -:1047400021C092131FC0E1101DC08F708061809343 -:104750006702C5010E944D1D80916702F8018583A3 -:104760008F2D61960FB6F894DEBF0FBECDBFDF91DF -:10477000CF911F910F91FF90EF90DF90CF90BF905E -:10478000AF900895CD2829F0822F83238F3F09F021 -:1047900003C180E0F82FF170DF2E80FF3CC08091D4 -:1047A00099024091680256E0841315C02D873E8718 -:1047B0008D859E850E943F14292F22952F702230CF -:1047C000F0F0243018F59F70F1F0F8019581907F9A -:1047D000D1F4D12C1EC090E0589FF001599FF00DEC -:1047E0001124E759FD4F6181361306C060812613FD -:1047F00003C06281E6120FC001968770D5CF9F700B -:1048000011F0882331F3805E883018F3C8010E94CC -:104810004D1DFD2CA5CFEE2009F4A2CF809167029B -:10482000816080936702F12C9BCF431306C09213E3 -:1048300004C0F801EE2009F479C0C8010E944B14AD -:10484000882309F1EE20F9F080916702803270F040 -:10485000209162023091630238872F831986DB86AC -:10486000CA868C87CE0107960E944D1D86E0F8010E -:10487000A2E6B2E001900D928A95E1F70E94002332 -:10488000FF24F3946DCFC8010E944D1DF9CF511143 -:104890000AC082E692E00E944D1D86E0F501119269 -:1048A0008A95E9F7C0CF43130FC092130DC0E110F2 -:1048B0000BC0F8018583C8010E944D1D86E0F501FB -:1048C00011928A95E9F74CCFC8010E944B148823B6 -:1048D000D1F2EE20C1F280916702803238F220914D -:1048E0006202309163023A8329831B82DD82CC828B -:1048F0008E83CE010196B8CFE03AF105F8F6FE2C92 -:10490000EE2009F243131FC092131DC0809167026D -:1049100080FD10C0982F907F69F0F8018583903F4B -:1049200031F0982F907F905F8F70892B8583C8011D -:104930000E944D1D86E0F801A2E6B2E001900D92C2 -:104940008A95E1F70DCFC8010E944B1481118ECFDB -:1049500080916702816080936702C8010E944D1DAB -:10496000FFCEEE2009F48FCFC8010E944B14F82E21 -:10497000882309F488CF86E0F801A2E6B2E001902E -:104980000D928A95E1F780916202909163020E94F4 -:104990003F140E940023E4CE81E08E25FBCE1F93BE -:1049A000CF93DF93CDB7DEB767970FB6F894DEBF2E -:1049B0000FBECDBF4B8B5C8B6D8B7E8B8F8B611154 -:1049C00010929B021A8A198A85E0FE017396DE0115 -:1049D0001D9601900D928A95E1F786E0FE013D96C5 -:1049E000DE01179601900D928A95E1F7CE010796A8 -:1049F0000E945623882389F016E0809199029091B5 -:104A0000680289134BC067960FB6F894DEBF0FBEDD -:104A1000CDBFDF91CF911F91089586E0FE013796BB -:104A2000DE01119601900D928A95E1F78A859B85AA -:104A3000892B11F38F81988589238F3FE9F220918B -:104A4000680230E0C9010196877099274091990268 -:104A50004817190681F4109246040E94A30F109281 -:104A600068021092990286E0E2E6F2E0DF011D9210 -:104A70008A95E9F7C1CF96E0929FD001939FB00D40 -:104A80001124A759BD4FFE01319601900D929A95C0 -:104A9000E1F7809368020E94ED0BAECF819FC001C9 -:104AA000112487599D4F0E945623882309F4ABCFC8 -:104AB0008091990290E001968770992780939902DE -:104AC0009CCF0F931F93CF93DF93CDB7DEB7A897FB -:104AD0000FB6F894DEBF0FBECDBF81114DC006E00A -:104AE000662359F10CA311E01DA31EA30E94F51A21 -:104AF0008160782F98A78FA34CA15DA16EA188A596 -:104B00000E94CF240F8F18A319A20E94F51A81606A -:104B1000782F9BA38AA34F8D58A169A18BA10E94D6 -:104B2000CF2481E0A8960FB6F894DEBF0FBECDBFAC -:104B3000DF91CF911F910F9108950A8F13E01B8F82 -:104B400081E08C8F0E94F51A8160782F9E8F8D8F67 -:104B50004A8D5B8D6C8D8E8D0E94CF240D8B1E8BAC -:104B60001F8A0E94F51A8160782F998F888F4D894E -:104B70005E896F89898DD3CF813099F66623F1F0F4 -:104B800016E0188B198B8A8B0E94F51A8160782F9A -:104B90009C8B8B8B488959896A898C890E94CF2488 -:104BA0001B871C871D860E94F51A8160782F9F87BE -:104BB0008E874B855C856D858F85B1CF06E00E8332 -:104BC00018E01F8388870E94F51A8160782F9A87E2 -:104BD00089874E815F8168858A850E94CF240983F9 -:104BE0001A831B820E94F51A8160782F9D838C8323 -:104BF00049815A816B818D8192CFCF92DF92EF9262 -:104C0000FF920F931F93CF93DF930F92CDB7DEB731 -:104C1000EE24E394F12C00EC12E09E012F5F3F4F55 -:104C200045EB52E063E082E00E94B018082F882331 -:104C300021F1C090F4028C2D90E09C012A503D4F50 -:104C400079011981F9018081181BD12E80E00AC0F9 -:104C5000DA94F70180818F5F808360E08C2D0E9461 -:104C60006125802F1D14A4F3912F17FD90E0191BCF -:104C700011110EC081110E94D40B802F0F90DF9173 -:104C8000CF911F910F91FF90EF90DF90CF900895FB -:104C90001F5FF70180818150808361E08C2D0E942D -:104CA0006125802FE5CF1F921FB61F9211248F938D -:104CB0009F93AF93BF9380913D04811113C0809166 -:104CC0003E0490913F04A0914004B091410441966C -:104CD000A11DB11D80933E0490933F04A093400416 -:104CE000B0934104BF91AF919F918F911F901FBED0 -:104CF0001F901895CDB7DEB7E0970FB6F894DEBFDA -:104D00000FBECDBF84B7877F84BF0FB6F894A89538 -:104D100080916000886180936000109260000FBEF7 -:104D200080E890E00FB6F894809361009093610062 -:104D30000FBE85B7806885BF85B7806885BF8EE068 -:104D40009AE090933902809338020E946A070E9489 -:104D500035088091E20084608093E200789480912D -:104D600053048823A1F01091E9001F709091EC008A -:104D7000892F817090FD80E8182B1092E9008091B6 -:104D8000E80083FD0E94AC0F1F701093E90082E0E1 -:104D900084BD93E095BD9AEF97BD80936E0010920D -:104DA000E1021092E2021092E3021092E4020E94E9 -:104DB0007214811102C00E94CE130E94460E80938D -:104DC000610180916101882309F4C6C010927601C7 -:104DD00085E2809377010E94460E81110E94B92FCF -:104DE0008091610181112FC0FE01359686E0DF01BF -:104DF0001D928A95E9F786E6898387E98A8386EC9E -:104E00008B8384E38C8385E38D833497A7E5B1E0BE -:104E1000CE010B9621912D938E179F07D9F787E02E -:104E2000ECE7F1E0DE01919601900D928A95E1F7B1 -:104E3000FE01B196A0E5B1E0CE01889621912D93B7 -:104E40008E179F07D9F78091610195E0811190E05D -:104E50009093F20285E0891B8093F10207E511E04F -:104E6000FCE5EF2EF1E0FF2EF80181918F018F3FDD -:104E700011F00E94120AE016F106B1F700E511E008 -:104E8000E7E5EE2EE1E0FE2ED8018D918D018F3FFA -:104E900011F00E94120AE016F106B1F7E7EEF2E017 -:104EA00081EF92E0ABE3B3E011921D928E179F0762 -:104EB000D9F70E949C19811102C00E94FC1682E061 -:104EC00090E00E94E4348093300384E090E00E94FC -:104ED000E434182F82E290E00E94E434982F812F6E -:104EE0009093E6028093E5020E94011BEFE7FBEB43 -:104EF0003197F1F700C000000E94011B80913B0335 -:104F000080FF2EC06FEF7FEF90E080E00E941635AB -:104F100081E08093E00080E28093D8001092C90085 -:104F20008FE19EE40197F1F700C0000087E090EB6D -:104F3000DC018093670690936806A0936906B0939E -:104F40006A0688E19CE00FB6F894A895809360000B -:104F50000FBE90936000FFCF85E28093760139CF3A -:104F600083E090E00E94E4340E94590C80915D043B -:104F70000E9421160E94460E811102C00E94BC2F81 -:104F800083E080932B0380E280932A040E94512EB9 -:104F90006DE070E089E492E00E94300D892BE9F524 -:104FA00080912B0363E070E081FDFFC186E492E015 -:104FB0000E94300D892B89F56DE070E086E392E068 -:104FC0000E94300D892B49F50E94F8086058774CF3 -:104FD0008E4F9F4F6093310470933204809333045B -:104FE00090933404E5E6F4E080E092E0DF019C0178 -:104FF0001D9221503040E1F7F0936606E09365067C -:105000008FEF9FEF909364048093630481E080931B -:1050100036048093350410922C038091F3028111A1 -:1050200036C00E949C19811104C00E94FC160E9487 -:10503000E41688E090E00E94EC3460935E04709384 -:105040005F048093600490936104809147038360C0 -:10505000809347036E7F71F40E94E41688E090E02D -:105060000E94EC3460935E0470935F04809360044C -:10507000909361040E94620980915E0480FF04C0E5 -:1050800060E086950E94B41581E08093F3028091E0 -:105090006101811106C084EF80936D0185EF8093DB -:1050A0006C0120916D01A22FA295AF70B0E0919696 -:1050B0003C9191972F7081E090E0BC01022E01C0DD -:1050C000660F0A94EAF7462F4095432391964C9336 -:1050D000919792963C919297362B92963C93929709 -:1050E00040916C01E42FE295EF70F0E031A14F7038 -:1050F000042E01C0880F0A94EAF7982F9095932305 -:1051000091A392A1892B82A390968C9190E002C0EA -:10511000959587952A95E2F7817020A130E002C02D -:10512000359527954A95E2F792E020FF90E0892B8C -:105130008093FA029091610181E098279093F9029F -:10514000891B8093F40286E592E090934B03809351 -:105150004A0360E08AE00E94B41581E00E949A163A -:1051600082E691E090933A048093390470E4672ECC -:10517000CE0101967C0180915304DD24D39400E19B -:1051800012E1853009F45EC10E94011BC82E811115 -:105190000E94F808E1E3F3E0ABE3B3E010E000E0E5 -:1051A000902EBD9081918B1509F476C18B25A12C91 -:1051B000DD24D3949D2D982309F469C10E94460EE5 -:1051C000882399F0A9A29AA2BD2081E009F480E089 -:1051D0008BA30E94F51A8160782F9DA38CA349A10F -:1051E0005AA16BA18DA10E94CF24F801EF5CFC4F66 -:1051F0008081D826D0828091FA02E82FEE0FEE0F40 -:1052000090916D01A92FA295AF70B0E090962C916E -:1052100030E09F7002C0359527959A95E2F721708E -:10522000332790916C01A92FA295AF70B0E09096B2 -:105230004C9150E09F7002C0559547959A95E2F7C2 -:10524000CA018170992740FF02C082E090E0822B62 -:105250008E2B8093FA021091F9028F70E82FF0E004 -:10526000EC5FFD4F80819091F802890F8093F802E6 -:10527000D12C84306CF0E12FF0E0EA50FD4F8081BA -:105280008F5F808360E0812F0E946125DD24D394AD -:105290008091F8028D3F6CF4E12FF0E0EA50FD4F71 -:1052A00080818150808361E0812F0E946125DD240F -:1052B000D3948091F802082E000C990B64E070E002 -:1052C0000E949A318093F802D1100E94D40B8091F1 -:1052D0003604882351F180912D0390912E030E9472 -:1052E000E61AC29708F0EFC020916304309164047D -:1052F0002115310509F049C2809135048823A9F0B0 -:105300000E94F80800913104109132042091330476 -:1053100030913404601B710B820B930B6F3F7F4FF6 -:105320008F4F9F4710F40E94600DC11001C0D11033 -:105330000E947B0D0E94690E90912F03891731F016 -:105340000E94690E80932F030E94091680915304D6 -:10535000843009F010CF83E08093E9008091E80069 -:1053600082FF09CF8091E80090E085FF0CC00E9489 -:10537000890730E2C32ED12C8E010F5F1F4F882387 -:1053800009F4E2C291E08091E8008B778093E80015 -:10539000992309F4F0CEE981E150E33108F036C3F6 -:1053A000F0E0EF5BF84C0C94CD3183E492E000CE5A -:1053B00080915304843009F435C00E94600D80E070 -:1053C0000E94091680914903811109C0D0924903B6 -:1053D00080915E0481708093F5020E948E0F10927E -:1053E0003D04A8E1B0E00FB6F894A895A093600042 -:1053F0000FBE6092600083B7817F846083BF83B7F4 -:10540000816083BF7894889583B78E7F83BF0FB602 -:10541000F894A89580916000886180936000109254 -:1054200060000FBE80915204882361F00E94011B2E -:10543000EBE3F3E08191811113C425E433E02E17EF -:105440003F07C1F780915304853009F4B1CF109222 -:1054500046040E94A30F0E94690E0E940916109232 -:1054600049038091F502882351F080915E048160A8 -:1054700080935E0460E086950E94B41585CE80918D -:105480004803882309F480CE0E948E0E7DCEA3941B -:10549000DD0C37E0A3128ECE0F5F1F4F0A301105CF -:1054A00009F07ECE8FEF88A789A71AA60E94F51A69 -:1054B0008160782F9CA78BA748A559A56AA58CA5C4 -:1054C0000E94CF2498CE0E94F51A90932E038093C9 -:1054D0002D0360E080E00E9430098091FB0290E0A3 -:1054E00090930A03809309030E94690E8093080336 -:1054F0000E94460E882331F1409104035091050328 -:1055000060910603709107032FB7F89480913E04D1 -:1055100090913F04A0914004B09141042FBF841B9F -:10552000950BA60BB70B81339547A105B10540F04C -:105530000E94600D80913604882309F4DDCED4CE1C -:105540000E947B0D0E94460E62E0882309F4DEC0B3 -:1055500080E00E94300960E083E891E00E9434130B -:1055600063E080E00E94300980915D040E941F0D7D -:10557000813009F497C0882309F48EC0823009F481 -:1055800099C0833009F492C066E080E00E9430093F -:1055900060E081EA91E00E94341367E080E00E94BD -:1055A0003009609108036695617086EA91E00E9477 -:1055B000341368E080E00E94300960910803609530 -:1055C00061708BEA91E00E94341369E080E00E94F0 -:1055D00030096091080362FB662760F98FEA91E069 -:1055E0000E94341340910003509101036091020323 -:1055F000709103032FB7F89480913E0490913F047B -:10560000A0914004B09141042FBF841B950BA60BC1 -:10561000B70B8D329140A105B10508F48BCF0E94E4 -:10562000F808609300037093010380930203909342 -:1056300003038091FF02811104C080916E018111EA -:105640003DC06FE080E00E94300960E084EB91E0B3 -:105650000E9434136CE080E00E94300981E0809366 -:105660006E018091FE0290E00196817099278093EF -:10567000FE0221E030E0281B390B40E6429FC001CA -:10568000439F900D11242091FD02222329F18A5974 -:105690009A4F0E9427074ECF60E089E891E00E9470 -:1056A000341372CF60E08FE891E0F9CF60E085E9D4 -:1056B00091E0F5CF60E08BE991E0F1CF6CE080E024 -:1056C0000E94300960E084EB91E00E9434136DE0A9 -:1056D00080E00E943009C5CF2091FC02222319F0FE -:1056E0008A559B4FD6CF2091090330910A032B3066 -:1056F00031051CF48A519C4FCCCF293231051CF462 -:105700008A5D9C4FC6CF8A599D4FC3CF80E00E94CF -:10571000300960E08AEB91E00E94341363E080E09E -:105720000E94300960E080EC91E00E94341367E051 -:1057300080E00E94300986E296E00E9427076DE033 -:1057400080E00E94300980910A038F9380910903C1 -:105750008F9386EC91E09F938F93FF92EF920E943C -:10576000523260E0C7010E9434136EE080E00E9474 -:10577000300960E08CEC91E00E9434130F900F90A0 -:105780000F900F900F900F90D5CE80912C0361E079 -:1057900070E08111B1CD482E512C1B01082E02C0A2 -:1057A000220C331C0A94E2F7A90142215321452B14 -:1057B00009F448C090912B0390FD46C08295880F54 -:1057C00080768093710192013695279536952795BD -:1057D00020937401815E809372011092750124E61A -:1057E00030E047E050E06FE671E088E70E94002F6C -:1057F000892B09F081CD55E0440C551C5A95E1F7F1 -:1058000080912B0380FD2EC0A2014B595B4F04E613 -:1058100010E020E230E060E488E70E94272F892B27 -:1058200009F06ACD0E947B0DC10180959095209072 -:105830006304309064042822392230926404209258 -:1058400063045ACD8F5FA7CF880F880F880F80938E -:10585000710110927401895F8093720183E08093DB -:105860007501BDCFEBE0F3E080E2DF011D928A9588 -:10587000E9F7E8E1F2E0F8ABEFA764E172E047E0B6 -:10588000A42E99249394AFA5B8A94D91B8ABAFA716 -:10589000FB018191BF01840D952D911D9C012B5918 -:1058A0003B4F3EA72DA7E42FF0E0E55FFC4F30E033 -:1058B00020E07A2C721AB92C022E01C0BB0C0A947B -:1058C000EAF70DA51EA590E0D8018D918D018B21E1 -:1058D000472D491B4770842E042E000C550BB82F02 -:1058E00001C0BB0F8A94EAF78B2E5195419551095F -:1058F0004770552701C086954A95EAF7882A808126 -:10590000882A80829F5F9830F9F62F5F3F4F31964B -:105910002830310571F6ECE1F2E02FA538A9E21745 -:10592000F30709F0B0CF04E610E020E230E04BE0EE -:1059300053E071CF8091F100D8018D938D01B1E0DA -:10594000CB1AD10809F41ECD8091E80085FDF2CF75 -:105950008091E8008B778093E8000E948907882374 -:1059600099F310CD1A8289E08B8311C08A8182302D -:1059700009F48EC1833089F1813009F047C00E945B -:10598000F8080E94D3316B837C838D839E83809142 -:105990005304843009F0EFCB1091E9001F7090910F -:1059A000EC00892F817090FD80E8182B82E08093B5 -:1059B000E9008091E80080FF0CC050E040E060E228 -:1059C00070E0C7010E94BA078091E8008E7780934B -:1059D000E8001F701093E900CECBDE011396EBE3D5 -:1059E000F3E081918D9323E0E534F207D1F7CFCF37 -:1059F0008A81823059F46B817C818D819E810E94E5 -:105A0000D33186E290E00E94F834C1CF8FEF8983D2 -:105A1000BECF4C816B818A810E94DD139827892734 -:105A200098279E838D83B3CF0D811E811027012778 -:105A300010278A81CB803EE0C39E600111249CE840 -:105A4000899FC00CD11C11248C8190E0880F991F74 -:105A5000C80ED91E612FC60187960E94F834602FA8 -:105A6000C6018896D0CF0E94601391CF8A81813879 -:105A7000C1F060F4803809F08ACF20E04B8160915A -:105A8000600480915F040E949D1481CF8238E9F008 -:105A9000833809F07CCF20E0409161046C818B81D8 -:105AA000F2CF60E08B810E94B4158B81811103C01D -:105AB0000E948E0F6CCF80915E04816080935E04A3 -:105AC00060E086950E94B41562CF8B81809362045A -:105AD0005ECF8A81813899F030F4803809F057CF51 -:105AE0008091610441CF823891F0833809F04FCF23 -:105AF00080915F048B83809160048C8348CF809178 -:105B00005E0480FF02C086952FCF80E02DCF80916C -:105B100062042ACF60915E0470915F0480916004FA -:105B2000909161040E948B1432CF80E18A832FCF41 -:105B300081E08A8389EA18CFAA80BB80BA24AB248B -:105B4000BA248E010F5F1F4FCC80C00ED12ED11C06 -:105B5000C501895A9D4F0C151D0509F418CFA9EAF6 -:105B6000AA16A1E0BA0650F40E94E434F801848336 -:105B7000BFEFAB1ABB0A0F5F1F4FEACFD8011496D5 -:105B80001C92F6CF0A811B81102701271027FE01E6 -:105B900031965F01CC80C00ED12ED11CC801895A2C -:105BA0009D4FC016D10609F4F2CE093AF1E01F0765 -:105BB00028F4D50114966C910E94F834BFEFAB1A0B -:105BC000BB0A0F5F1F4FEACF0E945013E0CE84E064 -:105BD000ADCFAA80BB80BA24AB24BA248E010F5F5C -:105BE0001F4FCC80C00ED12ED11CC5018796C01688 -:105BF000D10609F4CCCEE0E3AE16E2E0BE0658F4DE -:105C00000E94E434D80114968C93FFEFAF1ABF0AB8 -:105C10000F5F1F4FEACFF8011482F7CF0A811B8173 -:105C20001027012710279E012F5F3F4F5901CC807D -:105C3000C00ED12ED11CC8018796C016D10609F41A -:105C4000A6CE003332E0130728F4D50114966C91E8 -:105C50000E94F834BFEFAB1ABB0A0F5F1F4FEBCFA8 -:105C600009BD19BD09B400FEFDCF8091D8008F7D1C -:105C70008093D8008091E00082608093E000809162 -:105C8000E00081FDFCCF109246040E94A30FDACB06 -:105C900086E290E00E94E4341B821C821D828E8387 -:105CA00076CE1092B9008CE08093B80008959F9250 -:105CB000AF92BF92CF92DF92EF92FF920F931F931A -:105CC000CF93DF93B82EEB010E94F51A6C01EE24FE -:105CD000E394F12CC431D10560F025E0E22EF12CE3 -:105CE000CF3FDC0731F0CE0164E170E00E947A31F1 -:105CF0007B0184EAA82E94E8992E1092BC00A09211 -:105D0000BC000E94F51A8C018091BC0087FF0DC079 -:105D10008091B900887F883039F18091B900887FFF -:105D2000803111F10FEF1FEF09C00E94F51A801B9F -:105D3000910B8E159F0540F30EEF1FEFCF3FDC0751 -:105D4000E1F2C6010E94E61A8C179D07B0F2C80165 -:105D5000DF91CF911F910F91FF90EF90DF90CF9047 -:105D6000BF90AF909F900895B092BB009092BC00FE -:105D70000E94F51A8C018091BC0087FF0AC08091B7 -:105D8000B900887F883111F0803461F610E000E0BE -:105D9000DECF0E94F51A801B910B8E159F0558F3DC -:105DA000CBCF0F931F93CF93DF93EB018093BB0077 -:105DB00084E88093BC000E94F51A8C018091BC009D -:105DC00087FF11C02091B900287F81E090E0283240 -:105DD00011F490E080E0919581959109DF91CF9148 -:105DE0001F910F910895CF3FDC0741F30E94F51AF0 -:105DF000801B910B8C179D0708F38EEF9FEFEECF62 -:105E0000CF92DF92EF92FF920F931F93CF93DF9386 -:105E10006B018A017901B9010E94572EE6010C0D30 -:105E20001D1DC017D10761F424E92093BC00DF9148 -:105E3000CF911F910F91FF90EF90DF90CF90089539 -:105E400097FDF2CFB70189910E94D12EEACFCF9270 -:105E5000DF92EF92FF920F931F93CF93DF93C62FA2 -:105E60006A017901B8010E94572E97FD0CC0B80154 -:105E70008C2F0E94D12EE601EC0CFD1CCE15DF0507 -:105E800011F097FF0CC024E92093BC00DF91CF9163 -:105E90001F910F91FF90EF90DF90CF900895B80180 -:105EA00089910E94D12EEACF84E98093BC000895A5 -:105EB0008EE14A9B02C08150E1F74A9BFECF0895D4 -:105EC0005A9880E28A95F1F75A9A0895FC013BE0CE -:105ED0003A95F1F798E020E080E031E040E14A9522 -:105EE000F1F7880F4A9B02C08160232742E04A9560 -:105EF000F1F7000040E14A95F1F7915079F790E110 -:105F00009A95F1F799B132E03A95F1F7000040E146 -:105F10004A95F1F792FB992790F992272081920FE9 -:105F200090830895EF92FF920F931F93CF93DF9387 -:105F30000F92CDB7DEB719828C017C01E60EF11C01 -:105F40000E151F0561F481E09981911180E00F9099 -:105F5000DF91CF911F910F91FF90EF9008950E94D4 -:105F6000582FCE0101960E94662FF80181938F0170 -:105F7000E7CF529A5A9A089552985A9AEA9AE9E6BD -:105F8000F0E080818F7C808308956150770B91E0F1 -:105F900001C0990F6A95EAF720E031E0911108C03D -:105FA000222391F05A9A80E28A95F1F75A9808953F -:105FB000492F482339F05A9A232740E24A95F1F7AE -:105FC0009695ECCF5A98F9CF5A98EDCFFF920F9350 -:105FD0001F93CF93DF93EC018C01060F111DC017A7 -:105FE000D10731F4DF91CF911F910F91FF90089568 -:105FF000F9900E94602F68E08F2D0E94C52FEFCF8F -:106000001F920F920FB60F921124EF92FF920F93EF -:106010001F932F933F934F935F936F937F938F9330 -:106020009F93AF93BF93EF93FF93CF93DF930F9221 -:10603000CDB7DEB719820E94582FCE0101960E947B -:10604000662FA82FA695A695A695282F2295257090 -:106050009A2F9570290F922F937026952695920F5F -:10606000982797708981982B09F075C0A93008F09E -:1060700072C080E18A95F1F75A9A529AB2E0BA95C5 -:10608000F1F700C05A98EA2EF12CEAE0AE9FD00159 -:106090001124A050BF4F1896ED91FC91199730979D -:1060A000B1F0609102027091030216962D913C911D -:1060B0001797260F371F13968D919C911497680F91 -:1060C000791F15964C91159712968C9109958AE037 -:1060D0008E9DF0018F9DF00D1124E050FF4F6581E2 -:1060E000662351F02091020230910302868197814C -:1060F000820F931F0E94E62F0E94602FF0E1FA9515 -:10610000F1F75A9852985A9A80E18A95F1F78AE005 -:106110008E9D80018F9D100D112400501F4FD801BE -:1061200012966C911297662371F1209102023091C0 -:10613000030213968D919C91820F931F0E94922FC0 -:10614000D801ED91FC91882311F088E001C082E034 -:1061500080830E94582F0F90DF91CF91FF91EF9194 -:10616000BF91AF919F918F917F916F915F914F916F -:106170003F912F911F910F91FF90EF900F900FBEC5 -:106180000F901F901895ED91FC91DFCF0F931F9307 -:10619000CF93DF93EC0109970CF0A9C08AE08C9FA4 -:1061A000F0018D9FF00D1124E050FF4F808191810F -:1061B000892B09F49CC0F894529A5A9885E08A95E4 -:1061C000F1F700008C2F869585709C2F9570890FB4 -:1061D000982F937086958695890F8E0193E0000F16 -:1061E000111F9A95E1F7082B0E94602F00C068E00C -:1061F000802F0E94C52FA0E1AA95F1F752985A9AD4 -:106200004A9B27C087E090E04A9925C08AE08C9F8E -:1062100080018D9F100D112400501F4FF8016581E2 -:106220006623A1F1209102023091030286819781B9 -:10623000820F931F0E94922F811128C0529A5A9A5E -:10624000D801ED91FC9182E08083789482E090E027 -:1062500016C000C0D5CF0197B9F4529A5A9A8AE075 -:106260008C9FF0018D9FF00D1124E050FF4F0190A5 -:10627000F081E02D81E08083789481E090E0DF91EF -:10628000CF911F910F91089500C0BECF0E94582F4B -:10629000B0E2BA95F1F75A98529AE0E1EA95F1F72F -:1062A0008AE08C9FF0018D9FF00D1124E050FF4F8C -:1062B0006281662351F020910202309103028381B2 -:1062C0009481820F931F0E94E62F0E94602F8AE024 -:1062D0008C9FF0018D9FF00D1124E050FF4F019035 -:1062E000F081E02D1082789490E080E0C8CF84E0C7 -:1062F00090E0C5CFAA1BBB1B51E107C0AA1FBB1F63 -:10630000A617B70710F0A61BB70B881F991F5A9541 -:10631000A9F780959095BC01CD010895991B79E06E -:1063200004C0991F961708F0961B881F7A95C9F725 -:106330008095089597FB072E16F4009407D077FDFB -:1063400009D00E947A3107FC05D03EF490958195E2 -:106350009F4F0895709561957F4F0895052E97FB87 -:106360001EF400940E94C53157FD07D00E94DA3117 -:1063700007FC03D04EF40C94C531509540953095F0 -:1063800021953F4F4F4F5F4F0895909580957095A1 -:1063900061957F4F8F4F9F4F0895EE0FFF1F059020 -:1063A000F491E02D09946927962769277827872794 -:1063B00078270895A1E21A2EAA1BBB1BFD010DC070 -:1063C000AA1FBB1FEE1FFF1FA217B307E407F507A5 -:1063D00020F0A21BB30BE40BF50B661F771F881F81 -:1063E000991F1A9469F760957095809590959B0117 -:1063F000AC01BD01CF0108952F923F924F925F9261 -:106400006F927F928F929F92AF92BF92CF92DF92C4 -:10641000EF92FF920F931F93CF93DF93CDB7DEB729 -:10642000CA1BDB0B0FB6F894DEBF0FBECDBF0994BD -:106430002A88398848885F846E847D848C849B8414 -:10644000AA84B984C884DF80EE80FD800C811B8122 -:10645000AA81B981CE0FD11D0FB6F894DEBF0FBE51 -:10646000CDBFED010895FB01DC0102C005900D9246 -:1064700041505040D8F70895FB01DC0104C08D91D4 -:106480000190801921F441505040C8F7881B990BA6 -:106490000895FB01DC0102C001900D924150504073 -:1064A000D8F70895AEE0B0E0E8E5F2E30C940A32E4 -:1064B0000D891E8986E08C831A8309838FEF9FE7FD -:1064C0009E838D83AE01475E5F4F6F89788DCE01CD -:1064D00001960E9475322F813885020F131FF80133 -:1064E00010822E96E4E00C942632ABE0B0E0EBE7AD -:1064F000F2E30C94FC317C013B018A01FC01178220 -:106500001682838181FFB9C19AE0292ECE010196BE -:106510005C01F7019381F30193FD859193FF8191D4 -:106520003F01882309F446C1853239F493FD8591F2 -:1065300093FF81913F01853229F4B70190E00E94D9 -:106540005634E7CF912C412C512CFFE1F51538F052 -:106550008B3209F188F4803201F1833221F157FC4A -:106560003AC020ED280F2A3040F556FE1FC0929CFD -:10657000200D1124922E06C08D3291F0803379F7D0 -:10658000689450F8F30193FD859193FF81913F0149 -:106590008111DBCF20C0689451F8689452F8F2CF93 -:1065A000689453F8EFCF689454F8ECCF429C200DD8 -:1065B0001124422E689455F8E5CF8E3229F456FC0A -:1065C000F9C0689456F8DECF8C3619F4689457F801 -:1065D000D9CF8836B9F2982F9F7D95549330C0F06B -:1065E0008336A1F18337C1F1833509F05BC0F8012F -:1065F000C190D1908F01692D70E056FC02C06FEF01 -:106600007FEFC6010E9440344C01689457F80AC0DD -:106610000C5F1F4F2FE3298388248394912C6501FD -:10662000E89457F853FC04C04814190409F018F50D -:10663000342C8114910431F5332009F46ACFB70169 -:1066400080E290E00E9456343A94F6CFF8018081BF -:1066500089830E5F1F4FE0CFF801C190D1908F0169 -:10666000692D70E056FC02C06FEF7FEFC6010E94FB -:106670004B344C01D5CFB70180E290E00E945634F4 -:106680004A94D2CFF60157FC859157FE81916F0154 -:10669000B70190E00E94563431103A94F1E08F1A1D -:1066A0009108C7CF843619F0893609F074C0F80113 -:1066B00057FE6AC061917191819191918F01252D51 -:1066C0002F76D22E97FF09C0909580957095619591 -:1066D0007F4F8F4F9F4F6894D7F82AE030E0A50195 -:1066E0000E948634C82ECA188C2C5D2CD6FE0CC095 -:1066F000E89450F8C91440F4D4FE05C0D2FC03C09D -:10670000FD2DFE7E5F2E892C54FE8FC0FE01EC0D08 -:10671000F11D8081803309F081C0252D297E522E04 -:10672000852D8870382E53FC8FC050FE89C09C2C5C -:10673000841418F44C0C942C981854FE8BC0B70198 -:1067400080E390E00E94563452FE09C088E790E052 -:1067500051FE02C088E590E0B7010E945634C9148A -:1067600008F484C0CA94D12C9FEFC91AD90ACA0C64 -:10677000DB1CF60182916F01B70190E00E94563454 -:10678000AC14BD04B1F758CF61917191072E000C84 -:10679000880B990B93CFD52CE894D4F82AE030E0FD -:1067A000853739F1952D997FD92E8F3601F148F42F -:1067B0008835A9F0F701868197812B96E2E10C9448 -:1067C0001832803749F08837A9F7D4FE02C06894A0 -:1067D000D2F820E130E00DC06894D4F8F6CF54FE32 -:1067E00003C0E92FE660DE2E20E132E002C028E09F -:1067F00030E0F801D7FE0DC06191719181919191C6 -:106800008F01A5010E948634C82ECA18E894D7F8D3 -:106810006BCF6191719190E080E0F2CF52FC02C0A9 -:1068200083947ECF839483947BCF852D867809F4DF -:1068300077CFF6CFB70180E290E00E945634839480 -:106840008414C0F3312C79CF342C3818841408F414 -:1068500074CFF8CF852D867809F481CF8BE251FE75 -:1068600080E257FC8DE2B70190E077CFB70180E37B -:1068700090E00E9456349A9472CF8FEF9FEF9DCF95 -:10688000FC010590615070400110D8F780959095FB -:106890008E0F9F1F0895FC01615070400190011000 -:1068A000D8F7809590958E0F9F1F08950F931F9393 -:1068B000CF93DF93182F092FEB018B8181FD09C046 -:1068C0001FEF0FEF812F902FDF91CF911F910F912D -:1068D000089582FF14C02E813F818C819D812817ED -:1068E00039073CF4E881F981CF01019699838883C7 -:1068F00010838E819F8101969F838E83E3CFE885ED -:10690000F985812F0995892BA1F3DACFFA01AA27FE -:10691000283051F1203181F1E8946F936E7F6E5FE2 -:106920007F4F8F4F9F4FAF4FB1E03ED0B4E03CD090 -:10693000670F781F891F9A1FA11D680F791F8A1F73 -:10694000911DA11D6A0F711D811D911DA11D20D0DA -:1069500009F468943F912AE0269F11243019305D94 -:106960003193DEF6CF010895462F4770405D419385 -:10697000B3E00FD0C9F7F6CF462F4F70405D4A33D2 -:1069800018F0495D31FD4052419302D0A9F7EACF9A -:10699000B4E0A6959795879577956795BA95C9F7C9 -:1069A00000976105710508959B01AC010A2E0694BC -:1069B0005795479537952795BA95C9F7620F731F75 -:1069C000841F951FA01D0895F999FECF92BD81BD2A -:1069D000F89A992780B50895A6E1B0E044E050E028 -:1069E0000C941E35A8E1B0E042E050E00C941E3556 -:1069F000262FF999FECF92BD81BDF89A019700B478 -:106A0000021639F01FBA20BD0FB6F894FA9AF99A17 -:106A10000FBE08950396272F0E94F9340E94F83480 -:106A2000252F0E94F934242F0C94F9340196272F36 -:106A30000E94F9340C94F834DC01CB01FC01F99983 -:106A4000FECF06C0F2BDE1BDF89A319600B40D92BA -:106A500041505040B8F708955058BB27AA270E94CC -:106A600044350C945C360E944E3638F00E94553600 -:106A700020F039F49F3F19F426F40C944B360EF4B1 -:106A8000E095E7FB0C941C36E92F0E946D3658F315 -:106A9000BA17620773078407950720F079F4A6F503 -:106AA0000C94A7360EF4E0950B2EBA2FA02D0B01F7 -:106AB000B90190010C01CA01A0011124FF27591B43 -:106AC00099F0593F50F4503E68F11A16F040A22F49 -:106AD000232F342F4427585FF3CF469537952795BA -:106AE000A795F0405395C9F77EF41F16BA0B620BB9 -:106AF000730B840BBAF09150A1F0FF0FBB1F661F00 -:106B0000771F881FC2F70EC0BA0F621F731F841F42 -:106B100048F4879577956795B795F7959E3F08F068 -:106B2000B0CF9395880F08F09927EE0F979587952A -:106B300008950E948F3690F09F3748F4911116F413 -:106B40000C94A83660E070E080E89FE3089526F09A -:106B50001B16611D711D811D0C9422360C943D364F -:106B60000E94753688F09F5798F0B92F9927B75132 -:106B7000B0F0E1F0660F771F881F991F1AF0BA95E1 -:106B8000C9F714C0B13091F00E94A736B1E0089562 -:106B90000C94A736672F782F8827B85F39F0B93F54 -:106BA000CCF3869577956795B395D9F73EF4909594 -:106BB0008095709561957F4F8F4F9F4F0895E89412 -:106BC00009C097FB3EF490958095709561957F4F35 -:106BD0008F4F9F4F9923A9F0F92F96E9BB279395E3 -:106BE000F695879577956795B795F111F8CFFAF4F3 -:106BF000BB0F11F460FF1BC06F5F7F4F8F4F9F4F24 -:106C000016C0882311F096E911C0772321F09EE881 -:106C1000872F762F05C0662371F096E8862F70E0E7 -:106C200060E02AF09A95660F771F881FDAF7880FC1 -:106C30009695879597F9089597F99F6780E870E092 -:106C400060E00895882371F4772321F09850872B12 -:106C5000762F07C0662311F499270DC09051862B1B -:106C600070E060E02AF09A95660F771F881FDAF7C8 -:106C7000880F9695879597F908959F3F31F0915029 -:106C800020F4879577956795B795880F911D969510 -:106C9000879597F908959FEF80EC089500240A9452 -:106CA0001616170618060906089500240A941216E7 -:106CB0001306140605060895092E0394000C11F41A -:106CC000882352F0BB0F40F4BF2B11F460FF04C0C7 -:106CD0006F5F7F4F8F4F9F4F089557FD9058440F20 -:106CE000551F59F05F3F71F04795880F97FB991F2B -:106CF00061F09F3F79F087950895121613061406E8 -:106D0000551FF2CF4695F1DF08C016161706180674 -:106D1000991FF1CF869571056105089408950E9429 -:106D20007536A0F0BEE7B91788F4BB279F3860F42A -:106D30001616B11D672F782F8827985FF7CF869595 -:106D400077956795B11D93959639C8F30895E894A2 -:106D5000BB2766277727CB0197F908950E94C13694 -:106D60000C945C360E944E3638F00E94553620F066 -:106D7000952311F00C941C360C944B3611240C9472 -:106D8000A8360E946D3670F3959FC1F3950F50E0C1 -:106D9000551F629FF001729FBB27F00DB11D639FCD -:106DA000AA27F00DB11DAA1F649F6627B00DA11D73 -:106DB000661F829F2227B00DA11D621F739FB00D19 -:106DC000A11D621F839FA00D611D221F749F332789 -:106DD000A00D611D231F849F600D211D822F762F22 -:106DE0006A2F11249F5750409AF0F1F088234AF0FF -:106DF000EE0FFF1FBB1F661F771F881F915050406B -:106E0000A9F79E3F510580F00C941C360C94A836CF -:106E10005F3FE4F3983ED4F3869577956795B795F1 -:106E2000F795E7959F5FC1F7FE2B880F911D96950B -:106E3000879597F90895F894FFCF9310BB100E1122 -:106E4000BB100E11EE1026110E11231230125D141C -:106E50005D146614661468146614661466145D1472 -:106E60005D146D14661466146D14F920F920522116 -:106E7000522184212C212C212C219E210F221F22E2 -:106E80001F22B22CB62CF82C092D142D332D362DA3 -:106E9000692D8A2D062D062D952D982D9C2DC22D00 -:086EA000E42DE72DE92D0E2E73 -:106EA800420200000001000000004202000000054C -:106EB800010000004202000000010600000042023A -:106EC8000000000107000000420204080000000062 -:106ED80000004202090C00000000000042020115F7 -:106EE800000000000000420201160000000000003F -:106EF80036323331F7F6676697C63435000000003E -:106F08000001F508D50DF408D10DCD0DF4F50100FB -:106F180021007F220003004A004A4A01F6F7313374 -:106F28003236674C4159455200426173652000472B -:106F3800616D6520005261697365004C6F776572F9 -:106F4800004C4F434B0043617073004E756D005306 -:106F580063726C00202020202000534F4C415200C7 -:106F6800544D505354002025303364002077706D01 -:106F780000818283E200E900EA00B500B600B700AC -:106F8800CD008301CC008A019201940121022302E1 -:106F980024022502260227022A02B300B4006F0049 -:106FA8007000B90200FF0100010000FFFF000001AE -:106FB8000001FF0000081018181008000001020264 -:106FC800020202020202020240223246012401F2B7 -:086FD800002B0D440D640D00B7 +:100D100000000000000000000000000000000000D3 +:100D20000000AF00AE09025B00030100A0FA090455 +:100D3000000001030101000921110100012240000E +:100D40000705810308000A090401000203000000EE +:100D50000921110100012222000705820320000160 +:100D6000070503032000010904020001030000003D +:100D70000921110100012232000705840320000A25 +:100D8000120100020000000832FC8712020001027A +:100D900000011E0353006F006C00610072006900C7 +:100DA000750073005F0053006F0066006C00650003 +:100DB000000010034B0065007900680069007600B0 +:100DC000650000000403090411241FBECFEFDAE020 +:100DD000DEBFCDBF04B603FE27C0809167069091A9 +:100DE0006806A0916906B0916A068730904BA740CB +:100DF000B04BD1F410926706109268061092690603 +:100E000010926A0614BE84B7877F84BF0FB6F89429 +:100E1000A8958091600088618093600010926000C6 +:100E20000FBEE0E0F8E3099512E0A0E0B1E0ECEBE2 +:100E3000FEE602C005900D92A833B107D9F726E06F +:100E4000A8E3B2E001C01D92A736B207E1F70E9405 +:100E500088260C9425370C940000CF93DF934091A3 +:100E6000650650916606455654409A01205A3F4FF8 +:100E700021303240C0F020E032E0241B350B60917D +:100E8000630470916404FC01CA01240F351FC1E0A2 +:100E9000D0E08217930750F070936404609363046A +:100EA000DF91CF91089520E630E0E9CF4491DC0155 +:100EB000AB59BB4F5C91451781F04C93AC01A5E059 +:100EC00056954795AA95E1F7DE0102C0AA0FBB1F10 +:100ED0004A95E2F7AD016A2B752B01963196D9CF71 +:100EE000E8EDF0E080818E7F80831092E200109226 +:100EF000DA001092E100A0EEB0E08C9181608C935A +:100F000080818F77808319BCA7EDB0E08C918E7FB4 +:100F10008C9380818F7E8083109245040895209168 +:100F2000E4003091E50095E6A9012091EC00822FC4 +:100F3000817020FF06C08091E80080FF06C080E03D +:100F400008952091E80022FD1AC08091530488235F +:100F500089F0853089F08091EB0085FD0FC02091EC +:100F6000E4003091E50042175307F9F29150E1F6A1 +:100F700084E0089582E0089583E0089581E0089573 +:100F8000EF92FF920F931F93CF937C018B010E94EE +:100F90008F07C82F811117C08091E80085FD0BC015 +:100FA0008091E8008E778093E8000E948F07882365 +:100FB00099F3C82F08C0F70181917F018093F10058 +:100FC0000150110949F78C2FCF911F910F91FF907C +:100FD000EF9008958091550487FF13C08091E80039 +:100FE00082FF06C08091E8008B778093E80004C000 +:100FF000809153048111F2CF089580915304882386 +:10100000D9F38091E80080FFF8CF8091E8008E77D7 +:10101000ECCF982F9093E900242F762F50E089177A +:1010200031F07091EC002091ED005091F00021FD25 +:1010300007C09F5F973071F78093E90081E00895C2 +:101040003091EB003E7F3093EB003091ED003D7F1F +:101050003093ED003091EB0031603093EB007093F2 +:10106000EC002093ED005093F0002091EE0027FD5E +:10107000E0CF80E00895CF92DF92EF92FF920F933E +:101080001F93CF93DF93C8EDD0E088818F7E888354 +:10109000E7EDF0E080818160808384E082BF81E0C1 +:1010A0008093450488818E7F888302EE10E0F801EA +:1010B00010821092DA0081EEC82ED12CF601108237 +:1010C00088818F77888388818068888388818F7DF5 +:1010D000888319BC10925304109254041092520445 +:1010E0001092510490EEE92EF12CF70180818B7F54 +:1010F000808388818160888342E060E080E00E9494 +:101100000908F60180818E7F8083F80180818160EB +:101110008083808188608083F70180818E7F8083D7 +:10112000888180618883DF91CF911F910F91FF901B +:10113000EF90DF90CF900895FC0180915B04909137 +:101140005C0486179707A0F06115710529F490914A +:10115000E8009E779093E80090E06115710551F4E6 +:10116000911108C08091E80082FF34C080E00895AA +:10117000BC01F2CF809153048823C1F18530C1F1C5 +:101180008091E80083FD30C08091E80082FDEACFC5 +:101190008091E80080FFE1CF8091F3002091F20080 +:1011A000382F6115710519F02830310558F091E09C +:1011B0002830310509F090E02091E8002E77209347 +:1011C000E800CBCF81918093F100615071092F5FCE +:1011D0003F4FE7CF80915304882341F0853041F0A1 +:1011E0008091E80083FFBECF81E0089582E00895FA +:1011F00083E0089508958091480408952FB7F894E6 +:1012000060913E0470913F048091400490914104AC +:101210002FBF089520913B0430913C0428173907D3 +:1012200071F090933C0480933B04E0913904F09179 +:101230003A04309721F00084F185E02D0994089557 +:1012400020913704309138042817390771F09093B2 +:10125000380480933704E0913904F0913A043097D0 +:1012600021F00680F781E02D0994089520912A0449 +:1012700036E0839FC0011124629F800D911D1124CF +:10128000811522E0920714F090E080E08B599B4F8B +:1012900090936606809365060895FC01680F791F98 +:1012A0008FEF91E32191822728E030E087FF09C08A +:1012B000880F892721503109C9F7E617F70791F7F9 +:1012C0000895880FF7CFFA01811101C0FB0109943D +:1012D00080915E04982F9E7F61F48170826080937C +:1012E0005E0480916104813A18F080EA8093610481 +:1012F00008958831B0F381708661F1CFAF92BF92CB +:10130000DF92EF92FF920F931F93CF93DF93082FFB +:10131000162FE901E42FF0E0EE56F94F611110C0ED +:10132000E4915E2F4E2F4983E8835A83DF91CF915A +:101330001F910F91FF90EF90DF90BF90AF900895B5 +:10134000E62EF12C4491D42EE42FF0E026E0829F8B +:10135000C00111242FEF30E0B9010E948431802FA9 +:1013600090E0880F991F55E5569FD001579FB00D0B +:1013700011248A1B9B0B982F990F890F5901AE18C6 +:10138000BF08AE9ED001AF9EB00DBE9EB00D112421 +:101390005B2F189F80011124012F11275901A01ADA +:1013A000B10AAE9E8001AF9E100DBE9E100D11249D +:1013B0005901A81AB108AE9CC001AF9C900DBE9C0B +:1013C000900D1124892F9927281B390B2E9FC001BE +:1013D0002F9F900D3E9F900D1124E92F62307105D3 +:1013E000A1F050F46115710509F49DCF61307105CC +:1013F00081F0EB2F512F97CF6430710569F080F0A9 +:101400006630710509F48FCFF4CFE42F4B2F592F9D +:101410008ACFE42F412F87CFEB2F542F492F83CF33 +:101420004B2F5D2DE12F7FCF80E0089578940895B4 +:10143000F894E82FE295EF70F0E031A1282F2F709B +:1014400081E090E001C0880F2A95EAF7982F9095E7 +:10145000932391A392A1892B82A30C94160A9091B5 +:10146000E50292FF06C0282F28712830F9F4877F03 +:10147000846093FF06C0282F28712831F1F4877EFD +:1014800084612091E60220FF06C0382F3871383081 +:10149000D9F4877F816021FF06C0282F2871283169 +:1014A000D1F4877E816194FD877E0895282F247171 +:1014B0002430F9F68B7F8860DCCF282F247124310B +:1014C00001F78B7E8861DDCF382F3171313019F70C +:1014D0008E7F8860E0CF282F2171213121F78E7E09 +:1014E0008861E1CFCF93DF93EC018238910581F1E0 +:1014F000B0F58133910509F491C020F58932910549 +:1015000009F485C08A9709F490C0C11521E5D20776 +:1015100008F0AAC0C11530E5D30708F0F2C0CF3BF0 +:10152000D10508F089C0C83AD10508F0DFC0C53A36 +:10153000D10508F0D3C0C430D105F8F4C130D105CD +:10154000E1F040C08533910509F45AC0C997E9F626 +:101550008091E502837089F0C0EED0E00EC0833E3A +:10156000910599F170F4803E910501F1823E91055B +:1015700061F68091E50282FD21C0CE01DF91CF911D +:101580000895863E910561F1873E910571F1843E93 +:10159000910509F0BACF8091E60281FFEECF8091EC +:1015A000E502C7EED0E084FD0DC0E7CF8091E502F3 +:1015B00080FDF7C09091E60290FFDFCFC3EED0E050 +:1015C00084FFDBCFD0E0C0E0D8CF8091E50282FD80 +:1015D000EBC09091E60290FDBFCF84FFCECFF2CF5B +:1015E0008091E50283FDDDCFC8CF8091E50283FDC8 +:1015F000DEC09091E60291FFF0CFC4EED0E0BDCF07 +:101600008091E50285FFB9CFC9E2D0E0B6CF8091E5 +:10161000E50285FFB2CFC5E3D0E0AFCF8091E50210 +:1016200086FFABCFCAE2D0E0A8CF8091E50286FF6B +:10163000A4CFC1E3D0E0A1CFC11540E2D40760F44C +:10164000C11581E0D80708F098CFCE01815E9109DD +:10165000079708F492CFB6CFC11590E4D90708F4E4 +:10166000B1CFDF70D06A89CFC11524E5D20778F4F5 +:10167000C11533E5D30708F072C0C11542E5D407A0 +:1016800008F05CC0DC2FCC27C16FD06A76CFC115C3 +:101690008AE5D80778F4C11599E5D90708F073C031 +:1016A000C11528E5D20708F48DCFDC2FCC27C06FF9 +:1016B000D06A63CFCE0190568115904208F082CF58 +:1016C0008D2F8F710E942F0A90E0982F88278827EE +:1016D0009F719C012C2BE901D0624FCFC55AD0E0FD +:1016E000CF52DE4FC881D0E0D06447CFC85AD0E097 +:1016F000CC0FDD1FCC52DE4F0990D881C02DD464B1 +:101700003CCFCE0164E0969587956A95E1F78370AA +:101710002C2F26952695237040E2249F90011124BA +:10172000382B8C2F8370C1E0D0E002C0CC0FDD1FBE +:101730008A95E2F7C22BD32BDC681FCFCE018370D2 +:10174000992721E030E002C0220F331F8A95E2F78B +:10175000C695C69580E2C89FE0011124EBCFCE016B +:101760008370992721E030E002C0220F331F8A9551 +:10177000E2F7C695C69590E2C99FE0011124C22BFD +:10178000D32BDA68FACE8C2F8F700E942F0A34E0A8 +:10179000D695C7953A95E1F7CF709C2FEC01D069AB +:1017A000ECCEC9E3D0E0E9CEC2EED0E0E6CEC6EEA4 +:1017B000D0E0E3CE0C94FE088091460490919B0209 +:1017C000892B90919A02892B80933A02E0913904F7 +:1017D000F0913A04309731F00280F381E02D8AE3F2 +:1017E00092E009940895809199029091680298136B +:1017F00001C008958F5F8770FACF27E0929F800D18 +:101800001124982F977086958695869523E0829F60 +:10181000F0011124E95BFD4F50E040E080E02191B0 +:1018200030E0092E02C0369527950A94E2F7217020 +:101830003327042E01C0220F0A94EAF7822B4F5F50 +:101840005F4F4330510559F7089527E0929F800D6F +:101850001124982F977041E001C0440F9A95EAF740 +:1018600086958695869593E0899FF0011124E95B22 +:10187000FD4F90E080E070E05191DF0111979B01F6 +:10188000082E02C0369527950A94E2F7217021951B +:101890002527242325272C9301968330910561F772 +:1018A000089590E080E00E94200990E080E00E948E +:1018B0000A0910929B0210929A020C94DC0B8093FE +:1018C0009C020C94510C882341F080959091460421 +:1018D0008923809346040C94DC0B0895882339F007 +:1018E00090914604982B909346040C94DC0B089539 +:1018F0008823B1F19CEF980F913A70F4ECE3F2E099 +:101900009191891303C0DF0111971C9242E0E234E8 +:10191000F407B1F70C94DC0B90E2980F983088F440 +:10192000877021E030E0A90102C0440F551F8A955D +:10193000E2F7CA018095909146048923809346047A +:10194000E9CF9BE5980F933020F490E080E00C9471 +:101950002009885A873120F490E080E00C940A092D +:1019600008950F931F93CF93C82F882309F469C05C +:101970008CEF8C0F813AB0F50CE312E082E492E038 +:10198000F8012191C21701F122E0E234F207C9F710 +:10199000EFEF80E0D8019D918D01C91781F0EF3FF5 +:1019A00019F4911101C0E82F8F5F863099F7EF3F4E +:1019B00031F00E2E000CFF0BE65CFD4FC283CF9181 +:1019C0001F910F910C94DC0BECE3F2E02191C21318 +:1019D00003C0DF0111971C928E179F07B9F70E9471 +:1019E000DC0BD6CF80E28C0F883068F4C77021E022 +:1019F00030E001C0220FCA95EAF780914604822B9D +:101A000080934604DCCFEBE5EC0FE33050F4F0E0DC +:101A1000EF52FE4F808190E0CF911F910F910C9477 +:101A20002009C85AC73168F4EC2FF0E0EE0FFF1F11 +:101A3000EC52FE4F80819181CF911F910F910C94B8 +:101A40000A09CF911F910F910895982F92959F7039 +:101A500011F0892F94E0282F2695269511F09E5F8E +:101A6000822F869509F09F5F892F0895CF92DF928C +:101A7000EF92FF920F931F93CF93DF936C017B0143 +:101A800064E670E088E70E94612EEC0197FD12C0C9 +:101A900010E000E0F601E00FF11F849164E670E0D1 +:101AA0000E94DB2EEC01892B29F40F5F1F4F0E15CE +:101AB0001F0581F70E945E2FCE01DF91CF911F910C +:101AC0000F91FF90EF90DF90CF90089580913504B3 +:101AD00090913604911103C091E0892708958823DD +:101AE00069F062E070E083E29DE00E94360D892B90 +:101AF00019F08091350408951092350480913504D1 +:101B0000EBCFCF93C0913504809136048823D1F078 +:101B10000E94FE086058774C8E4F9F4F60933104AF +:101B2000709332048093330490933404C11108C03D +:101B300062E070E081E29DE00E94360D892B29F081 +:101B4000C09135048C2FCF91089581E080933504A6 +:101B5000F7CF90915304943029F580934204709309 +:101B60004404609343049093E9008FEF9091E80060 +:101B7000815095FD06C095ED9A95F1F70000811111 +:101B8000F5CF8091E80085FF0DC050E040E063E0B4 +:101B900070E082E494E00E94C0078091E8008E77B4 +:101BA0008093E8000895BC0184E00C94A90DBC0169 +:101BB00083E00C94A90DCF93DF93EC0181E0809337 +:101BC000E9008FEF9091E800815095FD06C095EDFA +:101BD0009A95F1F700008111F5CF8091E80085FF1B +:101BE00014C050E040E068E070E0CE010E94C00701 +:101BF0008091E8008E778093E80088E0FE01A9E4F8 +:101C0000B4E001900D928A95E1F7DF91CF910895AC +:101C10009F92AF92BF92CF92DF92EF92FF920F937B +:101C20001F93CF93DF937C015B016A018091E002F7 +:101C300001E010E08A3010F40AE010E0C1E0D0E0EA +:101C4000F894B501C701F6010995982E0E94160A6D +:101C5000911004C021960C171D076CF4892DDF919B +:101C6000CF911F910F91FF90EF90DF90CF90BF9099 +:101C7000AF909F900895CC9F9001CD9F300D300D77 +:101C8000112490E080E045E34A95F1F700000196C9 +:101C900082179307C1F7D4CF8091AB02811110C096 +:101CA0008091D80080618093D8008AE18A95F1F70D +:101CB00000C08091D90080FF0AC081E08093AB0210 +:101CC00081E09091AB02913009F080E0089582E0CC +:101CD0008093AB020E94700710925304F1CF0E94D0 +:101CE0004C0E882351F0E0913904F0913A0430977A +:101CF00021F00190F081E02D099480E008951F9378 +:101D0000CF93DF93182FEB010E94B10C8FE99FE076 +:101D10000197F1F700C000002197C1F7812FDF91F3 +:101D2000CF911F910C94780C4F925F926F927F929B +:101D30008F929F92AF92BF92CF92DF92EF92FF92DB +:101D40000F931F93CF93DF93CDB7DEB7CE5DD1094D +:101D50000FB6F894DEBF0FBECDBF509077019091C3 +:101D60005E0490FF5DC080904A0390904B03811405 +:101D7000910409F068C0E7E9F7E09E012F5F3F4F4B +:101D8000BE0161527F4FC901A4914A2F50E0DA0190 +:101D9000AA0FBB1FA40FB51FA45BBC4FCD90DD9055 +:101DA000EC90D901CD92DD92ED929D0131966A17AA +:101DB0007B0751F72091760143E0249F800D911D10 +:101DC0001124539A2BB1277F3BB138605FB7F89449 +:101DD000BC01549E600D711D11248617970709F0F0 +:101DE0008EC05FBF8FE594E00197F1F700C000005F +:101DF000C252DF4F0FB6F894DEBF0FBECDBFDF91EA +:101E0000CF911F910F91FF90EF90DF90CF90BF90F7 +:101E1000AF909F908F907F906F905F904F900895BC +:101E2000809178012091790133E0839FF0011124A2 +:101E3000E45BFC4F821708F096CF11821082128269 +:101E40008F5F3396F7CF90FF96CFD12CC12C6624AD +:101E50006394712C53E0452E8091490393010C2C1F +:101E600001C0220F0A94EAF7822309F43FC0F60169 +:101E7000EE0FFF1FE80DF91DE590F490E114F10459 +:101E800009F479CF45E050E0B701CE0101960E94F8 +:101E90003D3209810F3F51F18A81800F9927991FA7 +:101EA0008B34910514F08AE490E05C01AA0CBB1C11 +:101EB0008A0D9B1DDC01A45BBC4F5D01049D80016C +:101EC0001124045B1C4F0A151B0520F0B5E0EB0E36 +:101ED000F11CD8CF4D81413A08F040EA98016C815D +:101EE0008B810E947E090D5F1F4FEDCFEFEFCE1A61 +:101EF000DE0AF8E0CF16D10409F0AECF3CCFFC01EA +:101F00004191CF01E8E03BB9000000C047FF2BB989 +:101F1000440F000000C000C000C02BB900C0EA950B +:101F200091F75BCFEEE5F4E080818E7F8083E6E47D +:101F3000F3E08281816082832FEF80E792E021507D +:101F400080409040E1F700C000000C94940EECE358 +:101F5000F2E086E0DF011D928A95E9F70C94510CBE +:101F60001F93CF93DF93CDB7DEB7AA970FB6F89440 +:101F7000DEBF0FBECDBF85E594E02091F100DC010E +:101F80002D93CD01B4E08D359B07B9F780915604B0 +:101F9000833009F471C0B8F4813009F448C082304C +:101FA00009F4B4C08091E80083FF3CC180915504DE +:101FB000909156049A3008F035C1E92FF0E0E95DC0 +:101FC000F84C0C94D7318A3009F48FC08B3009F467 +:101FD00070C0893039F780915504813219F78091AA +:101FE000590490915A04009711F00297D9F6809104 +:101FF000E800877F8093E8008091E80082FF37C087 +:102000009091F3008091F200029729F48091F10001 +:102010008B7F813021F48091F1008093480480917E +:10202000E8008B778093E8000E94EA07BBCF80919D +:102030005504813A09F0B6CF8091E800877F8093FC +:10204000E8008091590490915A04892B61F468E06A +:1020500089E494E070E00E949C088091E8008B770E +:102060008093E8009FCF60E090E080E0F3CF809124 +:1020700053048111C1CF96CF80915504813A09F064 +:1020800091CF8091590490915A04892B09F08ACFFD +:102090008091E800877F8093E8008091E80080FFCE +:1020A000FCCF80917B018093F1008091E8008E77D6 +:1020B000B9CF80915504813209F074CF80915904D1 +:1020C00090915A04892B09F06DCF8091E800877FA9 +:1020D0008093E8000E94EA078091570480937B0177 +:1020E000109246040E94A70F5DCF80915504813263 +:1020F00009F058CF8091E800877F8093E8000E9424 +:10210000EA0780915804809347044CCF809155048E +:10211000813A09F047CF8091E800877F8093E800FB +:102120008091E80080FFFCCF80914704BCCF8038CD +:1021300099F0823809F076C0809159048F70873009 +:1021400008F070C08093E9008091EB0085FB882740 +:1021500080F91092E90006C08091510490915204D8 +:10216000911182609091E800977F9093E8008093AE +:10217000F1001092F1008091E8008E77B5C18823BC +:1021800009F4A2C1823009F04DC080915704811139 +:10219000A6C1809159048F702FEF280F263008F0C8 +:1021A00041C08093E9002091EB0020FF98C193305B +:1021B00031F48091EB0080628093EB0090C19091AC +:1021C000EB0090619093EB0021E030E001C0220F22 +:1021D0008A95EAF72093EA001092EA008091EB00DA +:1021E0008860EACF81111EC0109157041F7780913B +:1021F000E3008078812B8093E3008091E800877F63 +:102200008093E8000E94EA078091E80080FFFCCFFD +:102210008091E30080688093E30082E0111183E005 +:10222000809353048091E80083FF0AC08091E80006 +:10223000877F8093E8008091EB0080628093EB00C1 +:10224000AA960FB6F894DEBF0FBECDBFDF91CF9137 +:102250001F9108958058823028F7209157043091BB +:1022600058042C3DE3E03E07A1F583E08A838AE22F +:1022700089834FB7F894DE01139620E03EE051E2E7 +:10228000E32FF0E050935700E49120FF03C0E29564 +:10229000EF703F5FEF708E2F90E0EA30C0F0C7968E +:1022A0008D939D932F5F243159F74FBF8091E800A4 +:1022B000877F8093E8006AE270E0CE0101960E9479 +:1022C0009C088091E8008B778093E800ABCFC096A4 +:1022D000E7CF8091590490915A04432F55274330FA +:1022E000510509F44AC078F54130510509F47AC026 +:1022F0008BE590E0E5E2FDE04230510509F092CF38 +:102300002091E800277F2093E80020915B04309122 +:102310005C048217930708F49C0140E02115310505 +:1023200009F065C0411163C08091E80082FDC9CF0A +:1023300080915304882329F2853019F28091E800B6 +:1023400083FFF2CFBECF4132510509F43CC0423287 +:10235000510509F067CF8330910508F063CFFC0188 +:10236000EE0FFF1FE55DFD4F0190F081E02D885DD0 +:102370009D4FDC018C9190E01AC03327213031054C +:10238000D1F02115310561F02230310509F04ACF35 +:10239000E2E9FDE0E4918E2F90E0E2E9FDE007C084 +:1023A000E4ECFDE0E4918E2F90E0E4ECFDE000979A +:1023B00009F438CFA5CFE2EBFDE0E4918E2F90E059 +:1023C000E2EBFDE0F4CF8330910508F02BCF880FCE +:1023D000991FFC01EF5CFD4F0190F081E02D89E039 +:1023E00090E08ECF82E190E0E0E8FDE089CF80913F +:1023F0005304882309F465CF853009F462CF8091B6 +:10240000E80083FD5ECF8091E80082FD8DCF809152 +:10241000E80080FF83CF9091F3008091F2002115B6 +:10242000310519F08830910550F041E0089709F026 +:1024300040E08091E8008E778093E8006FCF449170 +:102440004093F1003196215031090196E8CF803850 +:1024500009F0E8CE8091E800877F8093E8008091C2 +:1024600054048093F10087CE8111DCCE1091570483 +:10247000123008F0D7CE8091E800877F8093E80083 +:10248000109354040E94EA07112311F084E005C060 +:102490008091E30087FDFACF81E08093530442E00E +:1024A00061EC81E00E94090842E261EC84E00E9454 +:1024B000090842E261EC82E00E94090842E260EC15 +:1024C00083E00E940908AECE80915704813009F064 +:1024D000A9CE81E0933009F080E0809352041092FD +:1024E000E9008091E800877F8093E8000E94EA0776 +:1024F00099CE1F93CF93DF93162FC0916506D0918D +:1025000066068A30D1F420912A04CE018556944083 +:10251000622F70E00E948431281B822F66E00E94A7 +:102520009831C82FC15020F4DF91CF911F910895A9 +:1025300060E080E20E947912F5CF8D30E9F4C55653 +:10254000D44020912A04622F70E0CE010E94843191 +:10255000281B822F9E01280F311D2115324018F0B3 +:1025600080E0D0E0C0E0C80FD11DCB59DB4FD09345 +:102570006606C0936506D8CF96E0FE01ABE2B4E0F4 +:1025800001900D929A95E1F7803E90F186E0FE0170 +:1025900011928A95E9F7C0916506D09166061111EE +:1025A00033C046E050E0BE018BE294E00E94463228 +:1025B0009E0125563440892B91F52A5F3F4F40916B +:1025C0002A04642F70E0C9010E948431481B463000 +:1025D00010F4240F311D211572E0370710F030E0A0 +:1025E00020E02B593B4F30936606209365069CCF25 +:1025F000F6E08F9FB00111246F51784F46E050E014 +:10260000CE010E943D32C7CF9E012A5F3F4FFE019F +:102610002E173F0731F2808180958193F9CFC90150 +:1026200045E0969587954A95E1F741E050E0BA017B +:1026300002C0660F771F8A95E2F7CB0160916304B1 +:1026400070916404862B972BB9016B5F7F4FE5E097 +:1026500076956795EA95E1F702C0440F551F6A9594 +:10266000E2F7842B952B9093640480936304A5CFA9 +:10267000FF920F931F93CF93DF93EC01F62EFC0193 +:1026800001900020E9F78F0101501109C017D1070F +:1026900030F0DF91CF911F910F91FF9008956F2D32 +:1026A00089910E947912F2CFCF93DF93C3EED2E0EB +:1026B00060E0CE010E9402352196C11584E0D80762 +:1026C000B9F7DF91CF9108956F927F928F929F9289 +:1026D000AF92BF92CF92DF92EF92FF920F931F9330 +:1026E000CF93DF9381EEC82E87E0D82E91ECE92EB0 +:1026F000F12CE701CC58D10936011BC0F5018590BA +:102700009490692DC8010E940235682DC801019678 +:102710000E94023582E0A80EB11C0E5F1F4FC01749 +:10272000D10761F78EE0680E711C2E96CE15DF057D +:1027300029F08E010E5011095301E0CF7E018CE883 +:10274000E80EF11C8CE8C80ED11C8DE7E81683E07A +:10275000F80679F6DF91CF911F910F91FF90EF90DE +:10276000DF90CF90BF90AF909F908F907F906F90B1 +:102770000895CF93C82F6FEF811161E283E290E05B +:102780000E9402356FEFC11169E084E290E00E947F +:1027900002356FEFC11164E185E290E0CF910C94B6 +:1027A000023580E00E94B91360E086E290E00E946A +:1027B00002350E9464130E94541381E00C94B913F3 +:1027C0000F931F93CF93DF93C42FD0E0CC0FDD1F67 +:1027D0002EE0629FC00DD11D11243CE8839FC00DE7 +:1027E000D11D1124CE0187960E94EE34082F10E0EF +:1027F000102F0027CE0188960E94EE349801282BD6 +:10280000C901DF91CF911F910F910895462F853017 +:1028100038F47A3028F4673018F4672F0C94E013FA +:1028200090E080E00895CF92DF92FF920F931F9384 +:10283000CF93DF936C0100915D0480919C02082B83 +:10284000C7E0D0E010E0FC2EC8010C2E02C0959528 +:1028500087950A94E2F780FD0CC02197A0F7F12C30 +:102860008F2DDF91CF911F910F91FF90DF90CF902F +:102870000895B6018C2F0E9406140E94720A0197D7 +:1028800061F3EECFCF93DF93EC010E941314BE01EE +:102890000E940614DF91CF910C94720AFC01808192 +:1028A00091810E944214292F2F7092959F7092500F +:1028B0009E3078F4E92FF0E0EF5CF84C0C94D731BF +:1028C000803F19F020F4883E20F481E00895843F91 +:1028D000E1F380E00895883EC0F3813FD1F7F5CF62 +:1028E000822F869586958695089583E290E00E94D2 +:1028F000EE34813289F484E290E00E94EE34893033 +:1029000059F485E290E00E94EE3491E0843109F0C0 +:1029100090E0892F8170089580E0FCCFCF92DF9204 +:10292000EF92FF926B017C010E946809B701A6013A +:1029300088E090E0FF90EF90DF90CF900C941435FA +:10294000AF92BF92CF92DF92EF92FF920F931F93BD +:10295000CF93DF9300D00F92CDB7DEB7082FF62EBE +:10296000142FE22E80915E0480FF4FC0E82FE69581 +:10297000AE2FB0E0A45EBD4F9C91909346038E7F36 +:10298000823009F056C0413A08F040EA9E012F5FBC +:102990003F4F6F2D802F0E947E0980915E0480FF43 +:1029A00011C02B8139814A81809178019091790100 +:1029B00053E0859FF0011124E45BFC4F891798F1E7 +:1029C0000E94940E80915F04801308C0809160047F +:1029D0008F1104C080916104811729F08091480310 +:1029E00082608093480300935F04F0926004109328 +:1029F0006104EE2051F060915E0470915F0480915B +:102A00006004909161040E948E140F900F900F90BB +:102A1000DF91CF911F910F91FF90EF90DF90CF90BA +:102A2000BF90AF9008954183308322838F5F3396A8 +:102A3000C5CF923039F6E2508E2F8170D82EE695B0 +:102A4000F0E0EE56F84FA590B490C12CBB246091F5 +:102A50007A01C61608F0B4CF2C2D30E0A29EC0013A +:102A6000A39E900DB29E900D112470E00E948431BF +:102A7000802FD11016C0860F40917801420F532F3E +:102A8000511D9A01220F331F240F351F245B3C4F29 +:102A9000412F113A08F040EA6F2D0E947E09C3943D +:102AA000D6CF861BE9CFEEE5F4E0438121E1421B5E +:102AB00008F440E021E0628181810C94A014EEE5ED +:102AC000F4E0438121E1420F08F44FEF21E06281FD +:102AD00081810C94A014EEE5F4E0628121E1621B97 +:102AE00008F460E021E0438181810C94A014EEE5BC +:102AF000F4E0628121E1620F08F46FEF21E043818D +:102B000081810C94A014EEE5F4E0818121E0438101 +:102B1000628188500C94A014EEE5F4E0818121E0FC +:102B200043816281885F0C94A014809162048823A1 +:102B300019F081508093620460915E0470915F048B +:102B400080916004909161040C948E1480916204D1 +:102B5000833018F48F5F8093620460915E047091FB +:102B60005F0480916004909161040C948E149091A4 +:102B70005E0490FF27C0917081111DC092609093F8 +:102B80005E0480914803816080934803662351F07E +:102B900060915E0470915F04809160049091610483 +:102BA0000E948E1420E04091610460916004809145 +:102BB0005F040C94A0148C3010F09661E0CF880F65 +:102BC000982BDDCF089521E030E0A90102C0440F29 +:102BD000551F8A95E2F7CA0120914903662391F0B7 +:102BE000822B80934903809148038061809348033E +:102BF00080914703811109C080915E0460E0869551 +:102C00000C94B71580958223ECCF0895CF93DF9372 +:102C1000C82FC17082FBDD27D0F981FB662760F9E0 +:102C200085E00E94E31561E06C2786E00E94E315D1 +:102C30006D2F87E0DF91CF910C94E3150F931F93D5 +:102C4000CF93C82F61E08111682F617080E00E94EE +:102C5000E315C1FB662760F9C11101C060E081E0A6 +:102C60000E94E315C2FB662760F9C11101C060E054 +:102C700082E00E94E315C3FB662760F9C11101C021 +:102C800060E083E00E94E315C4FB662760F9C11190 +:102C900001C060E084E00E94E3154C2F50E070E03A +:102CA00060E0DB01CA01F4E0B695A795979587959A +:102CB000FA95D1F70097A105B10549F1AC01BD0125 +:102CC00084E08A019B01E2E03695279517950795E8 +:102CD000EA95D1F7011511052105310519F08E5F2F +:102CE000B901A8017695679557954795452B462BD1 +:102CF000472B09F08F5F823009F158F4882391F057 +:102D00008130B9F08C2FCF911F910F91089580E001 +:102D1000D8CF8330C1F08430A9F720E040E56FEFD1 +:102D20008AED04C020E040E56FEF82E30E94A0142A +:102D3000E9CF20E040E56FEF8CEFF8CF20E040E5F1 +:102D40006FEF80E5F3CF20E040E56FEF86E7EECF51 +:102D50000E941E1680935D040C94510C80915D04BA +:102D6000982F9670963019F488600C94A816877F77 +:102D7000FCCF21E030E001C0220F8A95EAF72095D0 +:102D800080915D0482230C94A81621E030E001C0FC +:102D9000220F8A95EAF780915D04822B0C94A81685 +:102DA00080915E048695815009F48BE061E00C947B +:102DB000B71580915E0486958F5F8C3008F081E0B6 +:102DC00061E00C94B71580915E0480FF07C0869582 +:102DD00082588F77893010F40C94D91661E082E024 +:102DE0000C94B715EEE5F4E083E0808311828FEF59 +:102DF000828380EA83831482A6E4B3E012968C91E6 +:102E00001297836012968C93608171818281938185 +:102E10000C948E1469EE7EEF90E080E00E942035E5 +:102E200060E082E090E00E94023560E083E090E0A4 +:102E30000E94023510929C0260E084E090E00E94C3 +:102E4000023560E082E290E00E94023560E085E0B9 +:102E500090E00E94023560E086E090E00E9402353A +:102E60006FEF87E090E00E94023540E050E0BA0149 +:102E700088E090E00E94143560E08DE090E00E94D0 +:102E8000023540E050E0BA0188E190E00E9414353C +:102E900060E087E190E00E94023540E050E0BA0136 +:102EA0008CE190E00E94143570E060E080E290E0F8 +:102EB0000E94203540E050E0BA0188E190E00E9495 +:102EC000143580E00E94B9130E94D11340E050E015 +:102ED000BA018FE090E00E94143540E050E0BA0162 +:102EE00083E190E00C9414350F931F93CF93DF93FD +:102EF00000D000D0CDB7DEB74091D0025091D102C2 +:102F00006091D2027091D3022FB7F89480913E0461 +:102F100090913F04A0914004B09141042FBF841BC5 +:102F2000950BA60BB70B84369105A105B10588F169 +:102F30000E944C0E882379F10E94FE086E5F7F4F3D +:102F40008F4F9F4F69837A838B839C8380912B0162 +:102F500090912C0187549D4F40912A0150E04530BB +:102F6000510510F044E050E0BE016F5F7F4F0E94BA +:102F7000533284E090E00E94D030892BD9F40E9433 +:102F8000FE086093D0027093D1028093D202909396 +:102F9000D30281E010C00E94FE080091E10210916E +:102FA000E2022091E3023091E402600F711F821F60 +:102FB000931FC4CF80E00F900F900F900F90DF9180 +:102FC000CF911F910F9108958F929F92AF92BF92D0 +:102FD000CF92DF92EF92FF920F931F93CF93DF93E5 +:102FE000EB0188809980AA80BB809FB7F894C0903D +:102FF0003E04D0903F04E0904004F09041049FBF15 +:10300000C818D908EA08FB0894E6C916D104E104F7 +:10301000F10410F4442311F1E82E082E000CFF08EF +:103020009AE08902F0011124E050FF4F83819481DE +:1030300087549D4F428150E00417150708F4A801FA +:10304000B9010E945332C7010E94D030892BA1F4EC +:103050000E94FE08688379838A839B8381E0DF91E5 +:10306000CF911F910F91FF90EF90DF90CF90BF9085 +:10307000AF909F908F90089580E0F1CF0F931F93B2 +:10308000CF93DF930F92CDB7DEB78091350489835C +:103090002091CF0290E041E02817190609F440E0A2 +:1030A00001E010E09E012F5F3F4F6CED72E087E082 +:1030B0000E94E4170F90DF91CF911F910F91089517 +:1030C0000F931F93CF93DF930F92CDB7DEB780910D +:1030D000FC02898341E09091CE02981301C040E048 +:1030E00001E010E09E012F5F3F4F68ED72E086E047 +:1030F0000E94E4170F90DF91CF911F910F910895D7 +:103100000F931F93CF93DF93CDB7DEB729970FB6F9 +:10311000F894DEBF0FBECDBF85E0EEE5F4E0DE0142 +:10312000119601900D928A95E1F780914603909156 +:103130004703A0914803B09149038E839F83A887DA +:10314000B98741E08885811101C040E009E010E0C5 +:103150009E012F5F3F4F64ED72E085E00E94E4170F +:1031600081111092480329960FB6F894DEBF0FBE66 +:10317000CDBFDF91CF911F910F9108956F927F92F4 +:103180008F929F92AF92BF92CF92DF92EF92FF9277 +:103190000F931F93CF93DF930F92CDB7DEB7862E99 +:1031A0005A016901682E880F7708C3010E94D03048 +:1031B000892B09F088C08AE0869DF001879DF00D7B +:1031C0001124E050FF4F458150E04115510511F0A9 +:1031D00041E050E08AE0869DF001879DF00D1124CA +:1031E000E050FF4F6681778167547D4FCE01019695 +:1031F0000E945332F50140815181628173812FB762 +:10320000F89480913E0490913F04A0914004B091C5 +:1032100041042FBF841B950BA60BB70B8436910579 +:10322000A105B10540F4B701C8010E944D0999817B +:10323000891709F44FC0082C000C9908C4010E949A +:10324000D030892B91F0B12C8B2D0F90DF91CF9145 +:103250001F910F91FF90EF90DF90CF90BF90AF90B4 +:103260009F908F907F906F9008958AE0889DF001E5 +:10327000899DF00D1124E050FF4F458150E0E41688 +:10328000F50608F4A7018AE0889DF001899DF00DFC +:103290001124E050FF4F6681778167547D4FC6014E +:1032A0000E945332B701C8010E944D0999818913C8 +:1032B000CACF0E94FE08F5016083718382839383E5 +:1032C000BB24B394C1CFB12CA701B801C6010E94A1 +:1032D0005332BACFBB24B394F7CFCF92DF92EF92A1 +:1032E000FF920F931F93CF93DF9300D000D00F92E4 +:1032F000CDB7DEB76B0185E0E82EF12C0AEB12E0CA +:103300009E012F5F3F4F41EB52E061E080E00E9461 +:10331000BE18882349F095E0FE013196ACEAB2E090 +:1033200001900D929A95E1F795E0ECEAF2E0D60172 +:1033300001900D929A95E1F70F900F900F900F90DA +:103340000F90DF91CF911F910F91FF90EF90DF9041 +:10335000CF90089590E080E00E94FC34893E9E4F1B +:1033600011F40C94751480E008951F920F920FB61B +:103370000F9211242F933F934F935F936F937F93FB +:103380008F939F93AF93BF93CF93DF93EF93FF936D +:10339000D091E900DF708091EC00C82FC17080FDF2 +:1033A000C0E81092E9008091F000877F8093F000E0 +:1033B00078940E94B00F1092E9008091F00088602C +:1033C0008093F000CD2BCF70C093E900FF91EF9177 +:1033D000DF91CF91BF91AF919F918F917F916F912D +:1033E0005F914F913F912F910F900FBE0F901F90C3 +:1033F00018951F920F920FB60F9211242F933F939F +:103400004F935F936F937F938F939F93AF93BF93EC +:10341000EF93FF938091E10082FF09C08091E20069 +:1034200082FF05C08091E1008B7F8093E100809155 +:10343000DA0080FF24C08091D80080FF20C08091F6 +:10344000DA008E7F8093DA008091D90080FF9BC0E4 +:1034500080E189BD82E189BD09B400FEFDCF81E034 +:103460008093530480914504811109C00E94700724 +:103470000E943B088091E20084608093E20080918A +:10348000E10080FF17C08091E20080FF13C08091AF +:10349000E2008E7F8093E2008091E2008061809361 +:1034A000E2008091D80080628093D80019BC85E04A +:1034B000809353048091E10084FF29C08091E20051 +:1034C00084FF25C080E189BD82E189BD89B5982F3F +:1034D000917080FFFBCF8091D8008F7D8093D800C2 +:1034E0008091E1008F7E8093E1008091E2008F7EE9 +:1034F0008093E2008091E20081608093E2008091FD +:103500005404882309F445C084E0809353048091D7 +:10351000E10083FF27C08091E20083FF23C08091F8 +:10352000E100877F8093E10082E080935304109252 +:1035300054048091E1008E7F8093E1008091E2004D +:103540008E7F8093E2008091E20080618093E200B0 +:1035500042E060E080E00E9409088091F00088600D +:103560008093F000FF91EF91BF91AF919F918F9168 +:103570007F916F915F914F913F912F910F900FBE6F +:103580000F901F90189519BC109253041092450487 +:1035900076CF8091E30087FD93E090935304B7CFFB +:1035A00078941F921FB61F9211248F939F93AF930D +:1035B000BF9380913E0490913F04A0914004B0914C +:1035C00041040196A11DB11D80933E0490933F04D8 +:1035D000A0934004B0934104BF91AF919F918F910C +:1035E0001F901FBE1F9018959C014FB7F8948091B3 +:1035F0003E0490913F04A0914004B09141044FBF1C +:10360000821B930B08952FB7F89480913E049091FC +:103610003F04A0914004B09141042FBF08958F92C0 +:103620009F92AF92BF92CF92DF92EF92FF920F9351 +:103630001F93CF93DF93CDB7DEB72F970FB6F894D4 +:10364000DEBF0FBECDBF8E010F5F1F4F8AE0D801D6 +:103650001D928A95E9F787E5C82E81E0D82EF12CD6 +:10366000E12CAA24A394B12CF60181916F018F3F24 +:1036700009F44AC0F894E82FE295EF70F0E021A138 +:103680008F70A50102C0440F551F8A95E2F7CA0149 +:10369000922F982B91A392A18095892382A30E94B7 +:1036A000160A00C0E0E5F1E030E020E0912C419105 +:1036B0004F3F09F47FC0A42FA295AF70B0E0909661 +:1036C0008C9190E04F7002C0959587954A95E2F7EE +:1036D00080FD70C08A2D022E01C0880F0A94EAF77F +:1036E000982A2F5F3F4F2730310509F7F6013197B0 +:1036F00080818F3F11F00E94180A50EA5A95F1F725 +:10370000F801EE0DFF1D90828FEFE81AF80A95E0A0 +:10371000E916F10409F0A8CF4AE050E0B80187EEBD +:1037200092E00E9446327C01892B41F08AE0F80148 +:10373000A7EEB2E001900D928A95E1F71091F202A6 +:10374000E114F104C9F181E080939F020E94031B00 +:1037500090939E0280939D0280919D0290919E0283 +:103760000E94F41A069778F0A7EEB2E0E12FF0E09D +:10377000E45CFC4F8CEE92E02D9121938A179B071D +:10378000D9F710929F0281E090E0EF28C9F02F96C0 +:103790000FB6F894DEBF0FBECDBFDF91CF911F9162 +:1037A0000F91FF90EF90DF90CF90BF90AF909F90E0 +:1037B0008F90089580E094CF80919F028111CCCFAB +:1037C0000E944C0EB82EE091F2028E01055F1F4F51 +:1037D000882309F4D3C085E0D8011D928A95E9F7C2 +:1037E000F0E09F01245C3C4F79018091E002AE0142 +:1037F000405F5F4F6A018A3008F098C04DE659E19A +:10380000B801C7010E94080E882309F4A6C04BE046 +:1038100056E2B801C7010E94080E882309F49DC032 +:1038200044E757E1B801C7010E94080E882309F454 +:1038300094C040E858E1B801C7010E94080E8823EF +:1038400009F48BC040E658E1B801C7010E94080E98 +:10385000882309F482C04EE358E1B801C7010E94F1 +:10386000080E882309F479C01092E002E091F10279 +:10387000F0E0AF01445C5C4FD80110E0FA01919197 +:10388000AF018D91981731F09F0121503109F90155 +:1038900080831B2DAC15BD0589F78091A202909104 +:1038A000A3020E94F41A893E934060F16091FC02E9 +:1038B000E62EF12C662777276E197F09072E000C5C +:1038C000880B990B0E94EB3527EA39E747E45DE363 +:1038D0000E94B8364B015C01B701FF0C880B990BB5 +:1038E0000E94EB359B01AC01C501B4010E94373544 +:1038F0000E94BA356093FC020E94031B9093A302BE +:103900008093A2028091A602882371F08091A40284 +:103910009091A5020E94F41A893E934028F082EE0D +:103920000E94780C1092A602812F31CF8091A002C4 +:103930009091A1020E94F41A843F914008F05ECF5A +:10394000E091F102F0E0E45CFC4FD80111921D928D +:10395000AC15BD05D9F71B2DA0CF8091E0028F3F9C +:1039600031F08F5F8093E0028A3008F47FCF0E94AD +:10397000031B9093A1028093A002E2CFF0E0E45CED +:10398000FC4FF89485E0AAEBB2E001900D928A9585 +:10399000E1F765E070E08AEB92E00E944D098093C8 +:1039A000B9020E94160AF894E091FA02F0E0E95098 +:1039B000FD4F80818B878093C00261E070E0C80179 +:1039C0000E944D098093BF020E94160AF894C0908D +:1039D000C102D090C202E090C302F090C402809174 +:1039E000A7029091A802A091A902B091AA02C816BC +:1039F000D906EA06FB06D1F0C092A702D092A8022F +:103A0000E092A902F092AA020E944C0E81110EC00F +:103A10000E94FE08C61AD70AE80AF90AC092E10213 +:103A2000D092E202E092E302F092E4020E94160ACF +:103A3000F8948091CC02882321F184FF04C09091F6 +:103A4000CD029093490380FF0DC08091C50280FF95 +:103A50002CC090915E04916090935E0460E0869526 +:103A60000E94B7158091CC0281FF09C020E04091EF +:103A7000C8026091C7028091C6020E94A0141092F1 +:103A8000CC020E94160AF8948091CE028093FC0228 +:103A90000E94160AF8948091CF02882349F00E9470 +:103AA000810D0E94160A80E072CE0E94920FDACF3A +:103AB0000E94660DF6CF5F926F927F928F929F92D7 +:103AC000AF92BF92CF92DF92EF92FF920F931F932C +:103AD000CF93DF9300D000D00F92CDB7DEB76C014B +:103AE000FC0183819481892B31F08081918189232C +:103AF0008F3F09F082C50F900F900F900F900F909D +:103B0000DF91CF911F910F91FF90EF90DF90CF90B9 +:103B1000BF90AF909F908F907F906F905F9008952F +:103B20000E941314182F682F89819A810E94250CF6 +:103B300069817A81812F0E9406148C01F6018281AD +:103B4000882309F463C0C80190568115F0E29F07ED +:103B500050F0905E811520E1920728F0915C81156C +:103B60009F4108F0A5C0C80199279C012450310944 +:103B70002432310520F08B970E9708F047C08091D2 +:103B8000A2029091A3020097D9F10E94F41A9C011D +:103B900050E040E060E67AEE80E090E00E94B831CC +:103BA000CA01B90125E030E040E050E00E94B831A0 +:103BB000E090FC022F3F310519F010F02FEF30E0BC +:103BC000F12C2E193F09B90190E080E00E94E935FF +:103BD00027EA39E747E45DE30E94B8360E94A3353F +:103BE0004B015C01B701FF0C880B990B0E94EB3570 +:103BF000A50194010E9437350E94BA356093FC02FA +:103C00000E94031B9093A3028093A202F60182817B +:103C1000882309F4E6C4C80182519F45409708F003 +:103C200071C48FEF93E00E94EE34025193EEA92EFF +:103C300092E0B92E81115FCF011143C01C821B821B +:103C4000662463948AE0582E85010F5F1F4FC501DB +:103C50000E94EE3489831A82882309F44CCF9FEFA7 +:103C6000980F9330E8F58A83698232E0A30EB11C85 +:103C7000C8010E94EE348B83882309F43CCF8E0167 +:103C80000F5F1F4FF80120812223F1F2213009F04C +:103C900061C091818281913029F50E5F1F4F6AE0EA +:103CA00070E0893311F460E570E00E947F0E20C05F +:103CB00090E080E00F3F110511F008F056CFC801E9 +:103CC00054CFA114F4E0BF0609F415CFC5010E943A +:103CD000EE34811101C001502FEFA21AB20AACCF0D +:103CE0005801CDCF923039F40E5F1F4F0E94B10CB6 +:103CF0000F5F1F4FC7CF933029F40E5F1F4F0E94F5 +:103D0000780CF6CF943019F00F5F1F4FF1CF0E5F94 +:103D10001F4F30E020E0B8016F5F7F4FF801418115 +:103D20008053990B8A30910550F02150310900F3EE +:103D30008FE99FE00197F1F700C00000F6CF529E97 +:103D4000F001539EF00D11249C012E0F3F1F842F74 +:103D50008B01E1CFE22FF0E0E054FE4F7490822F10 +:103D600086958695869590E0FC01E055FE4FE4909F +:103D70002770F12C022E02C0F594E7940A94E2F722 +:103D8000E1E0EE22FF24FC01E056FE4FC490D12C6E +:103D9000022E02C0D594C7940A94E2F7F1E0CF2234 +:103DA000DD24FC01E057FE4F8490912C02C09594D5 +:103DB00087942A95E2F721E082229924E114F10404 +:103DC00019F081EE0E94B10CC114D10419F086EEF5 +:103DD0000E94B10C39E36AE070E0731202C060E542 +:103DE00070E0872D0E947F0ECD2819F086EE0E948C +:103DF000780CEF2819F081EE0E94780C892809F4DC +:103E000077CF6AE070E08CE250CF81E00E94C51667 +:103E100003C081E00E94B9160F900F900F900F9091 +:103E20000F90DF91CF911F910F91FF90EF90DF9056 +:103E3000CF90BF90AF909F908F907F906F905F904A +:103E40000C94AE1682E0E2CF013E110509F49AC04F +:103E5000043E110509F07CC3882309F4CEC081E03B +:103E60008093FD0275C30238FFE51F0709F459C0AE +:103E700000F500383FE51307B9F101384FE51407A5 +:103E800009F066C3882309F445C08091A602811118 +:103E900006C081E08093A60282EE0E94B10C0E94CF +:103EA000031B9093A5028093A40281EE0E94B10CA3 +:103EB0002DC003385FE5150709F447C004389FE5B6 +:103EC000190709F045C3882309F482C08091430291 +:103ED000882309F45AC0809144020E94780C80EE35 +:103EE0000E94B10C8AE25EC08823B9F08091A602DC +:103EF000811106C081E08093A60282EE0E94B10C7F +:103F00000E94031B9093A5028093A4028BE20E945F +:103F1000B10C1EC381EE0E94780C8BE20E94780CDB +:103F200017C3882309F414C381EE0E94B10C83EEF9 +:103F30000E94B10C8FE40E94B10C8FE40E94780CB7 +:103F400083EE0E94780C81EEE9CF882309F400C348 +:103F500081EE0E94B10C83EE0E94B10C80E50E94BC +:103F6000B10C80E5EBCF809346021093450200939D +:103F70004402882321F081E08093FE02E9C210927E +:103F8000FE02E6C280934302F0CF8091460288236E +:103F900009F4A8CF809144020E94780C80EE0E9420 +:103FA000B10C8CE40F900F900F900F900F90DF9159 +:103FB000CF911F910F91FF90EF90DF90CF90BF9026 +:103FC000AF909F908F907F906F905F900C94B10C0A +:103FD0008AE20E94780C8CE40E94780C80EE0E94A9 +:103FE000780C80914302811105C08091460288239C +:103FF00009F481CD80914402D5CF1092FD02A8C270 +:10400000882331F081E08093000310926E01A0C2FA +:10401000109200039DC2073C2CE5120709F4AEC0C4 +:1040200008F4A7C0083C4CE5140709F4ACC0093CEF +:104030001C4509F0ADC243E555E16FE575E179C076 +:10404000043DECE51E07A8F40E3CFCE51F0708F054 +:1040500052CD0C3C2CE5120709F49FC045E955E10F +:1040600066EA75E10D3C1C4508F463C061E081E03F +:1040700046C0053D4CE5140709F43DCD08F492C057 +:104080000D351D4509F437CD83C280915E0480FF54 +:1040900031C08E7F80935E0460915E0470915F04F6 +:1040A00080916004909161040E948E148091480375 +:1040B0008160809348039FEFE0E7F2E09150E04099 +:1040C000F040E1F700C000000F900F900F900F90AC +:1040D0000F90DF91CF911F910F91FF90EF90DF90A4 +:1040E000CF90BF90AF909F908F907F906F905F9098 +:1040F0000C94940E816080935E0461E086950F902D +:104100000F900F900F900F90DF91CF911F910F9113 +:10411000FF90EF90DF90CF90BF90AF909F908F90E7 +:104120007F906F905F900C94B71540ED56E169ED6C +:1041300076E10F900F900F900F900F90DF91CF913D +:104140001F910F91FF90EF90DF90CF90BF90AF90B5 +:104150009F908F907F906F905F900C94630949EDD2 +:1041600056E160ED76E1E5CF43E855E16CE875E1B5 +:10417000E0CF4CE855E163E875E1DBCF4BE655E174 +:1041800067E775E1D6CF47E755E16BE675E1D1CF3B +:104190004FE555E163E575E1CCCF46EA55E165E9C8 +:1041A00075E1C7CF0F900F900F900F900F90DF9198 +:1041B000CF911F910F91FF90EF90DF90CF90BF9024 +:1041C000AF909F908F907F906F905F900C94E316CC +:1041D0000E3D1C4509F0DCC10F900F900F900F9021 +:1041E0000F90DF91CF911F910F91FF90EF90DF9093 +:1041F000CF90BF90AF909F908F907F906F905F9087 +:104200000C940A17C8010E94FD0BF82ECFC1092F8C +:104210000F70907F11F00295007F812F2223C9F04B +:10422000002369F090E2910F983010F011110BC04B +:1042300080914604082B009346040E94DC0B812FDA +:104240000E94B10C17C080919B02082B00939B0227 +:10425000F4CF0E94780C002369F00095105E1830AE +:1042600010F0B11027C08091460408230093460443 +:104270000E94DC0B98E0E91AF108E4E0EE16F10484 +:1042800008F039CC0E946F0E0F900F900F900F9096 +:104290000F90DF91CF911F910F91FF90EF90DF90E2 +:1042A000CF90BF90AF909F908F907F906F905F90D6 +:1042B0000C94061680919B02082300939B02D8CF92 +:1042C000892F8F70907F903211F08295807FF1E07E +:1042D000BF120CC0222329F0333060F60E946E0C0E +:1042E000C9CF323038F60E94630CC4CF222341F08C +:1042F0003323A1F340FFA3CF4F70F6014583EECFE8 +:10430000332389F3193309F0F5C0FFEF27EE33E0CB +:10431000F15020403040E1F700C00000812F0E94A2 +:10432000780CA8CF892F86958695837061F08130AF +:1043300009F0A0CF812F9370211102C090E080E09E +:104340000E940A0997CF812F9370211102C090E03B +:1043500080E00E9420098ECF892F8370A1F5211162 +:1043600089CF812F829586958770880F880F412F7E +:104370004F70082E01C0440F0A94EAF7212F2071D4 +:1043800014FF07C02FE030E001C0220F8A95EAF742 +:104390002095969596959370923081F0822F842B7C +:1043A000933030F480919C02913029F0242B8223A9 +:1043B0000E945F0C5FCF842B822BFACF242B80913D +:1043C0009C028227F5CF8695222311F0892F8170D8 +:1043D000882309F44FCF812F829586958770880FA7 +:1043E000880F412F4F70082E01C0440F0A94EAF73E +:1043F000212F207114FF07C02FE030E001C0220FF1 +:104400008A95EAF72095969596959370923081F06B +:10441000822F842B933030F480915D04913029F009 +:10442000242B82230E94A81625CF842B822BFACF1F +:10443000242B80915D048227F5CF092F0F70222352 +:1044400029F0802F0E94C516812F48CF812F0E940E +:10445000630C802F0E94B9160DCF812FE1EF1E173C +:1044600089F1E11750F0F0EF1F17B9F02223B1F1F5 +:104470003111E5CE892F8F7129C042EF141749F110 +:1044800053EF1513F3CF80E0222361F29F7181E097 +:1044900001C0880F9A95EAF7C5CF222379F0323010 +:1044A00008F0E8CE292F2F7181E090E001C0880F3D +:1044B0002A95EAF790915D048927B4CF333008F04C +:1044C000D9CEF0CF892F8F71222321F20E94C516F9 +:1044D000D1CE892F8F712223C9F3BCCF332379F03A +:1044E000893341F48FEF97EEE3E081509040E04054 +:1044F000E1F712CF8FE39CE90197F1F70DCF892FF8 +:104500008F71A8CF0031FFE51F0709F47ECC013180 +:104510002FE5120709F496CC0E94FE08609305036C +:10452000709306038093070390930803F60182813A +:10453000053E110509F417CD08F095CC003E110594 +:1045400009F48ACC08F080CC0C32110509F458CD5E +:10455000F601928191113CCE8091460482720A3C10 +:10456000FCE51F0709F414CE08F06ACD053C3CE5D4 +:10457000130709F4F9CD08F04ECD033C5CE51507AF +:1045800009F4D3CD08F0EBCD023C1C4509F47DCDF8 +:10459000F60100811181992309F434CEC8010E94EB +:1045A0001314F82E682FC8010E94250CB8018F2D16 +:1045B0000E9406140E94720A182FB82EF60122815A +:1045C0004581342F32953F70892F82958F70E82E68 +:1045D000F12C8C3008F04ECEF701E15CF84C0C94D5 +:1045E000D73100313FE5130709F413CC01314FE512 +:1045F000140709F09BCF82E00DCC85E0DE01119617 +:1046000001900D928A95E1F7F601228189819A81C4 +:10461000211186CA0E94FD0B182F8ACA1F93CF93BF +:10462000DF9380916702807FA9F4809164028823E0 +:1046300089F080919902D091680260916202709134 +:104640006302A0916502B0916602C62FC72316E0EF +:10465000D81304C0DF91CF911F91089590E0109777 +:1046600011F0CF3F19F401968770F2CF189F900197 +:10467000199F300D1124F901E759FD4F418147136E +:10468000F2CF40814613EFCF42814111ECCF4381FD +:1046900054814A1B5B0B403A510528F78091670211 +:1046A0008F70806180936702F901E259FD4F80812C +:1046B0008F708061808382E692E00E945B1DDF91B3 +:1046C000CF911F910C94F30BAF92BF92CF92DF92D8 +:1046D000EF92FF920F931F93CF93DF93CDB7DEB787 +:1046E00061970FB6F894DEBF0FBECDBF8C0185E099 +:1046F000F801DE011D9601900D928A95E1F7F8010F +:10470000E28082E6A82E82E0B82E60916502709168 +:1047100066026115710509F432C1909162024091FF +:104720006302892F84238F3F09F429C120813181BD +:10473000C380D480F0906402F601E61BF70BFF20E3 +:1047400009F4E8C080916702582F507FE03AF105E4 +:1047500008F0ABC0511177C0FE2C431321C0921357 +:104760001FC0E1101DC08F70806180936702C5017A +:104770000E945B1D80916702F80185838F2D6196F1 +:104780000FB6F894DEBF0FBECDBFDF91CF911F9162 +:104790000F91FF90EF90DF90CF90BF90AF90089572 +:1047A000CD2829F0822F83238F3F09F003C180E0B9 +:1047B000F82FF170DF2E80FF3CC08091990240916C +:1047C000680256E0841315C02D873E878D859E852F +:1047D0000E944214292F22952F702230F0F02430AD +:1047E00018F59F70F1F0F8019581907FD1F4D12CEC +:1047F0001EC090E0589FF001599FF00D1124E75919 +:10480000FD4F6181361306C06081261303C06281AB +:10481000E6120FC001968770D5CF9F7011F08823E4 +:1048200031F3805E883018F3C8010E945B1DFD2CB7 +:10483000A5CFEE2009F4A2CF80916702816080931A +:104840006702F12C9BCF431306C0921304C0F801FA +:10485000EE2009F479C0C8010E944E14882309F1A2 +:10486000EE20F9F080916702803270F020916202B0 +:104870003091630238872F831986DB86CA868C873E +:10488000CE0107960E945B1D86E0F801A2E6B2E029 +:1048900001900D928A95E1F70E940E23FF24F39474 +:1048A0006DCFC8010E945B1DF9CF51110AC082E68D +:1048B00092E00E945B1D86E0F50111928A95E9F76E +:1048C000C0CF43130FC092130DC0E1100BC0F8010D +:1048D0008583C8010E945B1D86E0F50111928A95CF +:1048E000E9F74CCFC8010E944E148823D1F2EE2084 +:1048F000C1F280916702803238F2209162023091D9 +:1049000063023A8329831B82DD82CC828E83CE01AF +:104910000196B8CFE03AF105F8F6FE2CEE2009F248 +:1049200043131FC092131DC08091670280FD10C009 +:10493000982F907F69F0F8018583903F31F0982F90 +:10494000907F905F8F70892B8583C8010E945B1DCB +:1049500086E0F801A2E6B2E001900D928A95E1F7B7 +:104960000DCFC8010E944E1481118ECF8091670235 +:10497000816080936702C8010E945B1DFFCEEE201C +:1049800009F48FCFC8010E944E14F82E882309F431 +:1049900088CF86E0F801A2E6B2E001900D928A95F8 +:1049A000E1F780916202909163020E9442140E949A +:1049B0000E23E4CE81E08E25FBCE1F93CF93DF93B1 +:1049C000CDB7DEB767970FB6F894DEBF0FBECDBF89 +:1049D0004B8B5C8B6D8B7E8B8F8B611110929B024E +:1049E0001A8A198A85E0FE017396DE011D960190F0 +:1049F0000D928A95E1F786E0FE013D96DE0117965D +:104A000001900D928A95E1F7CE0107960E946423EA +:104A1000882389F016E080919902909168028913A9 +:104A20004BC067960FB6F894DEBF0FBECDBFDF91C7 +:104A3000CF911F91089586E0FE013796DE01119611 +:104A400001900D928A95E1F78A859B85892B11F358 +:104A50008F81988589238F3FE9F22091680230E0A9 +:104A6000C901019687709927409199024817190644 +:104A700081F4109246040E94A70F109268021092CF +:104A8000990286E0E2E6F2E0DF011D928A95E9F7FD +:104A9000C1CF96E0929FD001939FB00D1124A759EA +:104AA000BD4FFE01319601900D929A95E1F78093EA +:104AB00068020E94F30BAECF819FC0011124875979 +:104AC0009D4F0E946423882309F4ABCF8091990203 +:104AD00090E0019687709927809399029CCF0F935D +:104AE0001F93CF93DF93CDB7DEB7A8970FB6F89497 +:104AF000DEBF0FBECDBF81114DC006E0662359F168 +:104B00000CA311E01DA31EA30E94031B8160782F3C +:104B100098A78FA34CA15DA16EA188A50E94DD245A +:104B20000F8F18A319A20E94031B8160782F9BA3EB +:104B30008AA34F8D58A169A18BA10E94DD2481E039 +:104B4000A8960FB6F894DEBF0FBECDBFDF91CF9110 +:104B50001F910F9108950A8F13E01B8F81E08C8FB6 +:104B60000E94031B8160782F9E8F8D8F4A8D5B8DF5 +:104B70006C8D8E8D0E94DD240D8B1E8B1F8A0E94F2 +:104B8000031B8160782F998F888F4D895E896F898B +:104B9000898DD3CF813099F66623F1F016E0188B1A +:104BA000198B8A8B0E94031B8160782F9C8B8B8BC7 +:104BB000488959896A898C890E94DD241B871C8752 +:104BC0001D860E94031B8160782F9F878E874B85EF +:104BD0005C856D858F85B1CF06E00E8318E01F835D +:104BE00088870E94031B8160782F9A8789874E816E +:104BF0005F8168858A850E94DD2409831A831B8270 +:104C00000E94031B8160782F9D838C8349815A8188 +:104C10006B818D8192CFCF92DF92EF92FF920F93B3 +:104C20001F93CF93DF930F92CDB7DEB7EE24E394BB +:104C3000F12C00EC12E09E012F5F3F4F45EB52E05C +:104C400063E082E00E94BE18082F882321F1C09003 +:104C5000F4028C2D90E09C0129503D4F790119817F +:104C6000F9018081181BD12E80E00AC0DA94F70187 +:104C700080818F5F808360E08C2D0E946F25802F64 +:104C80001D14A4F3912F17FD90E0191B11110EC0F4 +:104C900081110E94DA0B802F0F90DF91CF911F912D +:104CA0000F91FF90EF90DF90CF9008951F5FF70175 +:104CB00080818150808361E08C2D0E946F25802F40 +:104CC000E5CF1F921FB61F9211248F939F93AF932E +:104CD000BF9380913D04811113C080913E04909157 +:104CE0003F04A0914004B09141044196A11DB11D23 +:104CF00080933E0490933F04A0934004B0934104FA +:104D0000BF91AF919F918F911F901FBE1F901895DB +:104D1000CDB7DEB7E0970FB6F894DEBF0FBECDBFBC +:104D200084B7877F84BF0FB6F894A8958091600000 +:104D3000886180936000109260000FBE80E890E070 +:104D40000FB6F89480936100909361000FBE85B711 +:104D5000806885BF85B7806885BF84E19AE09093BD +:104D60003902809338020E9470070E943B088091AC +:104D7000E20084608093E200789480915304882359 +:104D8000A1F01091E9001F709091EC00892F8170C3 +:104D900090FD80E8182B1092E9008091E80083FDD7 +:104DA0000E94B00F1F701093E90082E084BD93E071 +:104DB00095BD9AEF97BD80936E001092E10210921C +:104DC000E2021092E3021092E4020E947514811133 +:104DD00002C00E94D1130E944C0E80936101809109 +:104DE0006101882309F4C6C01092760185E28093A0 +:104DF00077010E944C0E81110E94C32F80916101A6 +:104E000081112FC0FE01359686E0DF011D928A9543 +:104E1000E9F786E6898387E98A8386EC8B8384E3D6 +:104E20008C8385E38D833497A7E5B1E0CE010B96A3 +:104E300021912D938E179F07D9F787E0ECE7F1E0DA +:104E4000DE01919601900D928A95E1F7FE01B196EF +:104E5000A0E5B1E0CE01889621912D938E179F0792 +:104E6000D9F78091610195E0811190E09093F20271 +:104E700085E0891B8093F10207E511E08CE5E82EBF +:104E800081E0F82EF80181918F018F3F11F00E948F +:104E9000180AE016F106B1F700E511E0B7E5EB2ED0 +:104EA000B1E0FB2ED8018D918D018F3F11F00E9452 +:104EB000180AE016F106B1F7E7EEF2E081EF92E0B2 +:104EC000ACE3B3E011921D928E179F07D9F70E94B1 +:104ED000AA19811102C00E940A1782E090E00E9484 +:104EE000EE348093310384E090E00E94EE34182F7A +:104EF00082E290E00E94EE34982F812F9093E60298 +:104F00008093E5020E940F1BEFE7FBEB3197F1F76F +:104F100000C000000E940F1B80913C0380FF2EC048 +:104F20006FEF7FEF90E080E00E94203581E080937A +:104F3000E00080E28093D8001092C9008FE19EE4E7 +:104F40000197F1F700C0000087E090EBDC0180934F +:104F5000670690936806A0936906B0936A0688E195 +:104F60009CE00FB6F894A895809360000FBE9093D4 +:104F70006000FFCF85E28093760139CF83E090E037 +:104F80000E94EE340E945F0C80915D040E941E1608 +:104F90000E944C0E811102C00E94C62F83E08093B4 +:104FA0002C0380E280932A040E945B2E6DE070E067 +:104FB00083E592E00E94360D892BE9F580912C0360 +:104FC00063E070E081FDFCC180E592E00E94360D57 +:104FD000892B89F56DE070E080E492E00E94360D47 +:104FE000892B49F50E94FE086058774C8E4F9F4FE1 +:104FF00060933104709332048093330490933404AB +:10500000E5E6F4E080E092E0DF019C011D92215092 +:105010003040E1F7F0936606E09365068FEF9FEF6F +:10502000909364048093630481E0809336048093BA +:10503000350410922D038091F302811136C00E9435 +:10504000AA19811104C00E940A170E94F21688E072 +:1050500090E00E94F63460935E0470935F04809346 +:1050600060049093610480914803836080934803B7 +:105070006E7F71F40E94F21688E090E00E94F63490 +:1050800060935E0470935F04809360049093610466 +:105090000E94680980915E0480FF04C060E08695EC +:1050A0000E94B71581E08093F30280916101811124 +:1050B00006C084EF80936D0185EF80936C01209191 +:1050C0006D01A22FA295AF70B0E091963C9191979F +:1050D0002F7081E090E0BC01022E01C0660F0A949F +:1050E000EAF7462F4095432391964C9391979296D9 +:1050F0003C919297362B92963C93929740916C01FB +:10510000E42FE295EF70F0E031A14F70042E01C062 +:10511000880F0A94EAF7982F9095932391A392A170 +:10512000892B82A390968C9190E002C095958795EB +:105130002A95E2F7817020A130E002C035952795CD +:105140004A95E2F792E020FF90E0892B8093FB02E2 +:105150009091610181E098279093FA02891B8093D6 +:10516000F40280E692E090934B0380934A0360E060 +:105170008AE00E94B71582E691E090933A0480930A +:105180003904A0E46A2ECE0101967C01809153047B +:10519000DD24D39400E112E1853009F45EC10E9460 +:1051A0000F1BC82E81110E94FE08E2E3F3E0ACE37E +:1051B000B3E010E000E0902EBD9081918B1509F4D2 +:1051C0006FC18B25A12CDD24D3949D2D982309F448 +:1051D00062C10E944C0E882399F0A9A29AA2BD2018 +:1051E00081E009F480E08BA30E94031B8160782F8B +:1051F0009DA38CA349A15AA16BA18DA10E94DD247E +:10520000F801EE5CFC4F8081D826D0828091FB02B1 +:10521000E82FEE0FEE0F90916D01A92FA295AF70C0 +:10522000B0E090962C9130E09F7002C035952795A4 +:105230009A95E2F72170332790916C01A92FA295DE +:10524000AF70B0E090964C9150E09F7002C05595C1 +:1052500047959A95E2F7CA018170992740FF02C0ED +:1052600082E090E0822B8E2B8093FB021091FA0259 +:105270008F70E82FF0E0EC5FFD4F80819091F90294 +:10528000890F8093F902D12C84306CF0E12FF0E08B +:10529000E950FD4F80818F5F808360E0812F0E9405 +:1052A0006F25DD24D3948091F9028D3F6CF4E12FBA +:1052B000F0E0E950FD4F80818150808361E0812FD3 +:1052C0000E946F25DD24D3948091F902082E000CF2 +:1052D000990B64E070E00E94A4318093F902D11030 +:1052E0000E94DA0B80913604882351F180912E03BD +:1052F00090912F030E94F41AC29708F0E8C0209101 +:105300006304309164042115310509F046C280918F +:1053100035048823A9F00E94FE0800913104109101 +:1053200032042091330430913404601B710B820BE2 +:10533000930B6F3F7F4F8F4F9F4710F40E94660D76 +:10534000C11001C0D1100E94810D0E946F0E90917A +:105350003003891731F00E946F0E809330030E9452 +:10536000061680915304843009F010CF83E08093B7 +:10537000E9008091E80082FF09CF8091E80090E089 +:1053800085FF0CC00E948F0730E2C32ED12C8E0106 +:105390000F5F1F4F882309F4E1C291E08091E8007C +:1053A0008B778093E800992309F4F0CEE981E150EE +:1053B000E33108F035C3F0E0E55BF84C0C94D731ED +:1053C0008DE492E003CE80915304843009F435C01B +:1053D0000E94660D80E00E9406168091F6028111FF +:1053E00009C0D092F60280915E0481708093F5022C +:1053F0000E94920F10923D04A8E1B0E00FB6F8941D +:10540000A895A09360000FBE6092600083B7817F73 +:10541000846083BF83B7816083BF7894889583B7A6 +:105420008E7F83BF0FB6F894A89580916000886145 +:1054300080936000109260000FBE80915204882318 +:1054400061F00E940F1BECE3F3E08191811112C423 +:1054500026E433E02E173F07C1F7809153048530CF +:1054600009F4B1CF109246040E94A70F0E946F0E5C +:105470000E9406161092F6028091F502882309F424 +:105480008ECE80915E04816080935E0460E086959C +:105490000E94B71584CEA394DD0C37E0A31295CEFD +:1054A0000F5F1F4F0A30110509F085CE8FEF88A7D7 +:1054B00089A71AA60E94031B8160782F9CA78BA73F +:1054C00048A559A56AA58CA50E94DD249FCE0E94FF +:1054D000031B90932F0380932E0360E080E00E94D3 +:1054E00036098091FC0290E090930B0380930A03AD +:1054F0000E946F0E809309030E944C0E882331F1A5 +:1055000040910503509106036091070370910803D1 +:105510002FB7F89480913E0490913F04A0914004ED +:10552000B09141042FBF841B950BA60BB70B8133A1 +:105530009547A105B10540F00E94660D80913604A3 +:10554000882309F4E4CEDBCE0E94810D0E944C0E2C +:1055500062E0882309F4E2C080E00E94360960E03E +:1055600083E891E00E94381363E080E00E943609EE +:1055700080915D040E94250D823009F499C008F0E5 +:105580008EC0882309F494C0813009F497C066E086 +:1055900080E00E94360960E081EA91E00E943813C1 +:1055A00067E080E00E9436096091090366956170AA +:1055B00086EA91E00E94381368E080E00E94360994 +:1055C00060910903609561708BEA91E00E94381345 +:1055D00069E080E00E9436096091090362FB66275A +:1055E00060F98FEA91E00E943813409101035091D5 +:1055F000020360910303709104032FB7F894809124 +:105600003E0490913F04A0914004B09141042FBF0B +:10561000841B950BA60BB70B8D329140A105B105EC +:1056200008F48CCF0E94FE0860930103709302037C +:10563000809303039093040380910003811104C0BD +:1056400080916E01811142C06FE080E00E943609B6 +:1056500060E084EB91E00E9438136CE080E00E94EF +:10566000360981E080936E018091FF0290E00196FF +:10567000817099278093FF0221E030E0281B390BCD +:1056800040E6429FC001439F900D11242091FE02ED +:10569000222351F18E589A4F0E942D074FCF83300D +:1056A00089F0843009F073CF60E085E991E003C0B0 +:1056B00060E089E891E00E94381369CF60E08FE8EC +:1056C00091E0F9CF60E08BE991E0F5CF6CE080E00C +:1056D0000E94360960E084EB91E00E9438136DE08F +:1056E00080E00E943609C0CF2091FD02222319F0EC +:1056F0008E549B4FD1CF20910A0330910B032B3056 +:1057000031051CF48E509C4FC7CF293231051CF453 +:105710008E5C9C4FC1CF8E589D4FBECF80E00E94C3 +:10572000360960E08AEB91E00E94381363E080E084 +:105730000E94360960E080EC91E00E94381367E037 +:1057400080E00E94360982E396E00E942D076DE01A +:1057500080E00E94360980910B038F9380910A03A9 +:105760008F9386EC91E09F938F93FF92EF920E942C +:105770005C3260E0C7010E9438136EE080E00E9456 +:10578000360960E08CEC91E00E9438130F900F9086 +:105790000F900F900F900F90D1CE80912D0361E06C +:1057A00070E08111B4CD082F10E01B01082E02C05B +:1057B000220C331C0A94E2F7A90142215321452B04 +:1057C00009F448C090912C0390FD46C08295880F43 +:1057D00080768093710198013695279536952795A7 +:1057E00020937401815E809372011092750124E60A +:1057F00030E047E050E06FE671E088E70E940A2F52 +:10580000892B09F084CDA801E5E0440F551FEA95E6 +:10581000E1F780912C0380FD2DC04B595B4F04E6CE +:1058200010E020E230E060E488E70E94312F892B0D +:1058300009F06DCD0E94810DC10180959095209059 +:105840006304309064042822392230926404209248 +:1058500063045DCD8F5FA7CF880F880F880F80937B +:10586000710110927401895F8093720183E08093CB +:105870007501BDCFECE0F3E080E2DF011D928A9577 +:10588000E9F7E8E1F2E0F8ABEFA764E1462E62E069 +:10589000562E77E0A72E99249394AFA5B8A96D91C1 +:1058A000B8ABAFA7F20181912F01840F952F911D05 +:1058B0009C012B593B4F3EA72DA7E62FF0E0E45F5C +:1058C000FC4F30E020E07A2C721AB92C022E01C075 +:1058D000BB0C0A94EAF70DA51EA590E0D8018D91A6 +:1058E0008D018B21672D691B6770862E062E000C9B +:1058F000770BB82F01C0BB0F8A94EAF78B2E7195F6 +:10590000619571096770772701C086956A95EAF7F6 +:10591000882A8081882A80829F5F9830F9F62F5FDD +:105920003F4F31962830310571F6ECE1F2E02FA5BA +:1059300038A9E217F30709F0B0CF04E610E020E23F +:1059400030E04CE053E06FCF8091F100D8018D93AF +:105950008D01B1E0CB1AD10809F41FCD8091E80088 +:1059600085FDF2CF8091E8008B778093E8000E945C +:105970008F07882399F311CD1A8289E08B8311C098 +:105980008A81823009F48EC1833089F1813009F037 +:1059900047C00E94FE080E94DD316B837C838D83AB +:1059A0009E8380915304843009F0F0CB1091E9007C +:1059B0001F709091EC00892F817090FD80E8182B6A +:1059C00082E08093E9008091E80080FF0CC050E005 +:1059D00040E060E270E0C7010E94C0078091E800EB +:1059E0008E778093E8001F701093E900CFCBDE0123 +:1059F0001396ECE3F3E081918D9323E0E634F20714 +:105A0000D1F7CFCF8A81823059F46B817C818D812F +:105A10009E810E94DD3186E290E00E940235C1CF76 +:105A20008FEF8983BECF4C816B818A810E94E01306 +:105A30009827892798279E838D83B3CF0D811E8158 +:105A40001027012710278A81CB803EE0C39E60018A +:105A500011249CE8899FC00CD11C11248C8190E0FA +:105A6000880F991FC80ED91E612FC60187960E9404 +:105A70000235602FC6018896D0CF0E94641391CF63 +:105A80008A818138C1F060F4803809F08ACF20E043 +:105A90004B816091600480915F040E94A01481CFCB +:105AA0008238E9F0833809F07CCF20E0409161042E +:105AB0006C818B81F2CF60E08B810E94B7158B8166 +:105AC000811103C00E94920F6CCF80915E048160AF +:105AD00080935E0460E086950E94B71562CF8B814B +:105AE000809362045ECF8A81813899F030F48038E7 +:105AF00009F057CF8091610441CF823891F083380B +:105B000009F04FCF80915F048B83809160048C8378 +:105B100048CF80915E0480FF02C086952FCF80E041 +:105B20002DCF809162042ACF60915E0470915F0452 +:105B300080916004909161040E948E1432CF80E1C4 +:105B40008A832FCF81E08A838DE118CFAA80BB8022 +:105B5000BA24AB24BA248E010F5F1F4FCC80C00E35 +:105B6000D12ED11CC5018D519D4F0C151D0509F479 +:105B700018CFADE1AA16A1E0BA0650F40E94EE34A7 +:105B8000F8018483BFEFAB1ABB0A0F5F1F4FEACF48 +:105B9000D80114961C92F6CF0A811B811027012789 +:105BA0001027FE0131965F01CC80C00ED12ED11C92 +:105BB000C8018D519D4FC016D10609F4F2CE0D31AA +:105BC000F1E01F0728F4D50114966C910E9402356C +:105BD000BFEFAB1ABB0A0F5F1F4FEACF0E945413EF +:105BE000E0CE85E0ADCFAA80BB80BA24AB24BA2436 +:105BF0008E010F5F1F4FCC80C00ED12ED11CC5016E +:105C00008796C016D10609F4CCCEECEBAE16E2E0D6 +:105C1000BE0658F40E94EE34D80114968C93FFEF20 +:105C2000AF1ABF0A0F5F1F4FEACFF8011482F7CFF8 +:105C30000A811B811027012710279E012F5F3F4FEC +:105C40005901CC80C00ED12ED11CC8018796C01638 +:105C5000D10609F4A6CE0C3B32E0130728F4D50197 +:105C600014966C910E940235BFEFAB1ABB0A0F5F0E +:105C70001F4FEBCF09BD19BD09B400FEFDCF8091C8 +:105C8000D8008F7D8093D8008091E000826080935F +:105C9000E0008091E00081FDFCCF109246040E945C +:105CA000A70FDBCB86E290E00E94EE341B821C82C1 +:105CB0001D828E8376CE1092B9008CE08093B8005E +:105CC00008959F92AF92BF92CF92DF92EF92FF9290 +:105CD0000F931F93CF93DF93B82EEB010E94031B0A +:105CE0006C01EE24E394F12CC431D10560F025E081 +:105CF000E22EF12CCF3FDC0731F0CE0164E170E001 +:105D00000E9484317B0184EAA82E94E8992E109297 +:105D1000BC00A092BC000E94031B8C018091BC00BF +:105D200087FF0DC08091B900887F883039F180915C +:105D3000B900887F803111F10FEF1FEF09C00E9479 +:105D4000031B801B910B8E159F0540F30EEF1FEF79 +:105D5000CF3FDC07E1F2C6010E94F41A8C179D07C1 +:105D6000B0F2C801DF91CF911F910F91FF90EF909A +:105D7000DF90CF90BF90AF909F900895B092BB00FE +:105D80009092BC000E94031B8C018091BC0087FF95 +:105D90000AC08091B900887F883111F0803461F6A3 +:105DA00010E000E0DECF0E94031B801B910B8E15DC +:105DB0009F0558F3CBCF0F931F93CF93DF93EB0146 +:105DC0008093BB0084E88093BC000E94031B8C017D +:105DD0008091BC0087FF11C02091B900287F81E02D +:105DE00090E0283211F490E080E09195819591093E +:105DF000DF91CF911F910F910895CF3FDC0741F3C1 +:105E00000E94031B801B910B8C179D0708F38EEFDC +:105E10009FEFEECFCF92DF92EF92FF920F931F93FF +:105E2000CF93DF936B018A017901B9010E94612E42 +:105E3000E6010C0D1D1DC017D10761F424E9209364 +:105E4000BC00DF91CF911F910F91FF90EF90DF90F9 +:105E5000CF90089597FDF2CFB70189910E94DB2E74 +:105E6000EACFCF92DF92EF92FF920F931F93CF93DF +:105E7000DF93C62F6A017901B8010E94612E97FD58 +:105E80000CC0B8018C2F0E94DB2EE601EC0CFD1C2F +:105E9000CE15DF0511F097FF0CC024E92093BC005C +:105EA000DF91CF911F910F91FF90EF90DF90CF90F6 +:105EB0000895B80189910E94DB2EEACF84E980938E +:105EC000BC0008958EE14A9B02C08150E1F74A9BD5 +:105ED000FECF08955A9880E28A95F1F75A9A08956C +:105EE000FC013BE03A95F1F798E020E080E031E0FA +:105EF00040E14A95F1F7880F4A9B02C08160232751 +:105F000042E04A95F1F7000040E14A95F1F79150DF +:105F100079F790E19A95F1F799B132E03A95F1F776 +:105F2000000040E14A95F1F792FB992790F99227FA +:105F30002081920F90830895EF92FF920F931F9309 +:105F4000CF93DF930F92CDB7DEB719828C017C011E +:105F5000E60EF11C0E151F0561F481E09981911187 +:105F600080E00F90DF91CF911F910F91FF90EF9004 +:105F700008950E94622FCE0101960E94702FF801B1 +:105F800081938F01E7CF529A5A9A089552985A9A5C +:105F9000EA9AE9E6F0E080818F7C80830895615081 +:105FA000770B91E001C0990F6A95EAF720E031E0A4 +:105FB000911108C0222391F05A9A80E28A95F1F754 +:105FC0005A980895492F482339F05A9A232740E2D6 +:105FD0004A95F1F79695ECCF5A98F9CF5A98EDCFAC +:105FE000FF920F931F93CF93DF93EC018C01060F69 +:105FF000111DC017D10731F4DF91CF911F910F917F +:10600000FF900895F9900E946A2F68E08F2D0E94FA +:10601000CF2FEFCF1F920F920FB60F921124EF9256 +:10602000FF920F931F932F933F934F935F936F9321 +:106030007F938F939F93AF93BF93EF93FF93CF93F0 +:10604000DF930F92CDB7DEB719820E94622FCE0187 +:1060500001960E94702FA82FA695A695A695282F89 +:10606000229525709A2F9570290F922F937026955F +:106070002695920F982797708981982B09F075C003 +:10608000A93008F072C080E18A95F1F75A9A529AC5 +:10609000B2E0BA95F1F700C05A98EA2EF12CEAE086 +:1060A000AE9FD0011124A050BF4F1896ED91FC91E6 +:1060B00019973097B1F06091020270910302169621 +:1060C0002D913C911797260F371F13968D919C9118 +:1060D0001497680F791F15964C91159712968C910D +:1060E00009958AE08E9DF0018F9DF00D1124E050FE +:1060F000FF4F6581662351F0209102023091030227 +:1061000086819781820F931F0E94F02F0E946A2F31 +:10611000F0E1FA95F1F75A9852985A9A80E18A95E7 +:10612000F1F78AE08E9D80018F9D100D11240050A3 +:106130001F4FD80112966C911297662371F120912E +:1061400002023091030213968D919C91820F931F4E +:106150000E949C2FD801ED91FC91882311F088E0DA +:1061600001C082E080830E94622F0F90DF91CF9167 +:10617000FF91EF91BF91AF919F918F917F916F911F +:106180005F914F913F912F911F910F91FF90EF9051 +:106190000F900FBE0F901F901895ED91FC91DFCFDF +:1061A0000F931F93CF93DF93EC0109970CF0A9C0D5 +:1061B0008AE08C9FF0018D9FF00D1124E050FF4F7D +:1061C00080819181892B09F49CC0F894529A5A9845 +:1061D00085E08A95F1F700008C2F869585709C2FBD +:1061E0009570890F982F937086958695890F8E01EB +:1061F00093E0000F111F9A95E1F7082B0E946A2F78 +:1062000000C068E0802F0E94CF2FA0E1AA95F1F78F +:1062100052985A9A4A9B27C087E090E04A9925C035 +:106220008AE08C9F80018D9F100D112400501F4F1C +:10623000F80165816623A1F12091020230910302E9 +:1062400086819781820F931F0E949C2F811128C005 +:10625000529A5A9AD801ED91FC9182E08083789409 +:1062600082E090E016C000C0D5CF0197B9F4529AF1 +:106270005A9A8AE08C9FF0018D9FF00D1124E05016 +:10628000FF4F0190F081E02D81E08083789481E0E0 +:1062900090E0DF91CF911F910F91089500C0BECF84 +:1062A0000E94622FB0E2BA95F1F75A98529AE0E153 +:1062B000EA95F1F78AE08C9FF0018D9FF00D112493 +:1062C000E050FF4F6281662351F02091020230912D +:1062D000030283819481820F931F0E94F02F0E94FA +:1062E0006A2F8AE08C9FF0018D9FF00D1124E05001 +:1062F000FF4F0190F081E02D1082789490E080E0D3 +:10630000C8CF84E090E0C5CFAA1BBB1B51E107C0FA +:10631000AA1FBB1FA617B70710F0A61BB70B881F35 +:10632000991F5A95A9F780959095BC01CD010895C4 +:10633000991B79E004C0991F961708F0961B881FD7 +:106340007A95C9F78095089597FB072E16F4009467 +:1063500007D077FD09D00E94843107FC05D03EF4B8 +:10636000909581959F4F0895709561957F4F089501 +:10637000052E97FB1EF400940E94CF3157FD07D0E5 +:106380000E94E43107FC03D04EF40C94CF315095B9 +:106390004095309521953F4F4F4F5F4F0895909511 +:1063A0008095709561957F4F8F4F9F4F0895EE0FA9 +:1063B000FF1F0590F491E02D09946927962769271E +:1063C0007827872778270895A1E21A2EAA1BBB1BDE +:1063D000FD010DC0AA1FBB1FEE1FFF1FA217B307B1 +:1063E000E407F50720F0A21BB30BE40BF50B661FC7 +:1063F000771F881F991F1A9469F76095709580958B +:1064000090959B01AC01BD01CF0108952F923F9261 +:106410004F925F926F927F928F929F92AF92BF92B4 +:10642000CF92DF92EF92FF920F931F93CF93DF9360 +:10643000CDB7DEB7CA1BDB0B0FB6F894DEBF0FBEBD +:10644000CDBF09942A88398848885F846E847D840A +:106450008C849B84AA84B984C884DF80EE80FD800C +:106460000C811B81AA81B981CE0FD11D0FB6F89482 +:10647000DEBF0FBECDBFED010895FB01DC0102C000 +:1064800005900D9241505040D8F70895FB01DC0172 +:1064900004C08D910190801921F441505040C8F7FB +:1064A000881B990B0895FB01DC0102C001900D923D +:1064B00041505040D8F70895AEE0B0E0E2E6F2E394 +:1064C0000C9414320D891E8986E08C831A8309830B +:1064D0008FEF9FE79E838D83AE01475E5F4F6F898D +:1064E000788DCE0101960E947F322F813885020F70 +:1064F000131FF80110822E96E4E00C943032ABE0CA +:10650000B0E0E5E8F2E30C9406327C013B018A013D +:10651000FC0117821682838181FFB9C19AE0292E7E +:10652000CE0101965C01F7019381F30193FD859102 +:1065300093FF81913F01882309F446C1853239F4E4 +:1065400093FD859193FF81913F01853229F4B70135 +:1065500090E00E946034E7CF912C412C512CFFE158 +:10656000F51538F08B3209F188F4803201F183326D +:1065700021F157FC3AC020ED280F2A3040F556FE95 +:106580001FC0929C200D1124922E06C08D3291F0D6 +:10659000803379F7689450F8F30193FD859193FF68 +:1065A00081913F018111DBCF20C0689451F868943C +:1065B00052F8F2CF689453F8EFCF689454F8ECCFC8 +:1065C000429C200D1124422E689455F8E5CF8E325E +:1065D00029F456FCF9C0689456F8DECF8C3619F4CD +:1065E000689457F8D9CF8836B9F2982F9F7D955483 +:1065F0009330C0F08336A1F18337C1F1833509F0C0 +:106600005BC0F801C190D1908F01692D70E056FCFC +:1066100002C06FEF7FEFC6010E944A344C016894BC +:1066200057F80AC00C5F1F4F2FE3298388248394F7 +:10663000912C6501E89457F853FC04C048141904E0 +:1066400009F018F5342C8114910431F5332009F444 +:106650006ACFB70180E290E00E9460343A94F6CFAE +:10666000F801808189830E5F1F4FE0CFF801C19050 +:10667000D1908F01692D70E056FC02C06FEF7FEF63 +:10668000C6010E9455344C01D5CFB70180E290E09D +:106690000E9460344A94D2CFF60157FC859157FE90 +:1066A00081916F01B70190E00E94603431103A94FB +:1066B000F1E08F1A9108C7CF843619F0893609F0B6 +:1066C00074C0F80157FE6AC06191719181919191F6 +:1066D0008F01252D2F76D22E97FF09C0909580959A +:1066E000709561957F4F8F4F9F4F6894D7F82AE040 +:1066F00030E0A5010E949034C82ECA188C2C5D2C65 +:10670000D6FE0CC0E89450F8C91440F4D4FE05C07D +:10671000D2FC03C0FD2DFE7E5F2E892C54FE8FC05F +:10672000FE01EC0DF11D8081803309F081C0252D23 +:10673000297E522E852D8870382E53FC8FC050FE36 +:1067400089C09C2C841418F44C0C942C981854FE7A +:106750008BC0B70180E390E00E94603452FE09C014 +:1067600088E790E051FE02C088E590E0B7010E9402 +:106770006034C91408F484C0CA94D12C9FEFC91A9C +:10678000D90ACA0CDB1CF60182916F01B70190E0B7 +:106790000E946034AC14BD04B1F758CF619171917F +:1067A000072E000C880B990B93CFD52CE894D4F8C6 +:1067B0002AE030E0853739F1952D997FD92E8F3633 +:1067C00001F148F48835A9F0F701868197812B966D +:1067D000E2E10C942232803749F08837A9F7D4FEE1 +:1067E00002C06894D2F820E130E00DC06894D4F87B +:1067F000F6CF54FE03C0E92FE660DE2E20E132E042 +:1068000002C028E030E0F801D7FE0DC0619171911F +:10681000819191918F01A5010E949034C82ECA18D0 +:10682000E894D7F86BCF6191719190E080E0F2CF5E +:1068300052FC02C083947ECF839483947BCF852DBA +:10684000867809F477CFF6CFB70180E290E00E9416 +:10685000603483948414C0F3312C79CF342C3818ED +:10686000841408F474CFF8CF852D867809F481CF8D +:106870008BE251FE80E257FC8DE2B70190E077CFCA +:10688000B70180E390E00E9460349A9472CF8FEF5A +:106890009FEF9DCFFC010590615070400110D8F72B +:1068A000809590958E0F9F1F0895FC016150704058 +:1068B00001900110D8F7809590958E0F9F1F089535 +:1068C0000F931F93CF93DF93182F092FEB018B8129 +:1068D00081FD09C01FEF0FEF812F902FDF91CF9126 +:1068E0001F910F91089582FF14C02E813F818C81EA +:1068F0009D81281739073CF4E881F981CF01019681 +:106900009983888310838E819F8101969F838E83D4 +:10691000E3CFE885F985812F0995892BA1F3DACF9B +:10692000FA01AA27283051F1203181F1E8946F93C0 +:106930006E7F6E5F7F4F8F4F9F4FAF4FB1E03ED066 +:10694000B4E03CD0670F781F891F9A1FA11D680F04 +:10695000791F8A1F911DA11D6A0F711D811D911D37 +:10696000A11D20D009F468943F912AE0269F1124AC +:106970003019305D3193DEF6CF010895462F477010 +:10698000405D4193B3E00FD0C9F7F6CF462F4F706B +:10699000405D4A3318F0495D31FD4052419302D0C9 +:1069A000A9F7EACFB4E0A69597958795779567956F +:1069B000BA95C9F700976105710508959B01AC016F +:1069C0000A2E06945795479537952795BA95C9F796 +:1069D000620F731F841F951FA01D0895F999FECFA4 +:1069E00092BD81BDF89A992780B50895A6E1B0E0DF +:1069F00044E050E00C942835A8E1B0E042E050E0DB +:106A00000C942835262FF999FECF92BD81BDF89AB6 +:106A1000019700B4021639F01FBA20BD0FB6F894E2 +:106A2000FA9AF99A0FBE08950396272F0E9403350C +:106A30000E940235252F0E940335242F0C94033524 +:106A40000196272F0E9403350C940235DC01CB01FF +:106A5000FC01F999FECF06C0F2BDE1BDF89A31966E +:106A600000B40D9241505040B8F708955058BB27DC +:106A7000AA270E944E350C9466360E94583638F08C +:106A80000E945F3620F039F49F3F19F426F40C94ED +:106A900055360EF4E095E7FB0C942636E92F0E945C +:106AA000773658F3BA17620773078407950720F003 +:106AB00079F4A6F50C94B1360EF4E0950B2EBA2FAE +:106AC000A02D0B01B90190010C01CA01A0011124F4 +:106AD000FF27591B99F0593F50F4503E68F11A16A0 +:106AE000F040A22F232F342F4427585FF3CF469531 +:106AF00037952795A795F0405395C9F77EF41F1653 +:106B0000BA0B620B730B840BBAF09150A1F0FF0F1C +:106B1000BB1F661F771F881FC2F70EC0BA0F621F08 +:106B2000731F841F48F4879577956795B795F795F8 +:106B30009E3F08F0B0CF9395880F08F09927EE0F8D +:106B40009795879508950E94993690F09F3748F45D +:106B5000911116F40C94B23660E070E080E89FE387 +:106B6000089526F01B16611D711D811D0C942C3695 +:106B70000C9447360E947F3688F09F5798F0B92FC3 +:106B80009927B751B0F0E1F0660F771F881F991F62 +:106B90001AF0BA95C9F714C0B13091F00E94B1361D +:106BA000B1E008950C94B136672F782F8827B85F2D +:106BB00039F0B93FCCF3869577956795B395D9F7BA +:106BC0003EF490958095709561957F4F8F4F9F4FC4 +:106BD0000895E89409C097FB3EF4909580957095D0 +:106BE00061957F4F8F4F9F4F9923A9F0F92F96E919 +:106BF000BB279395F695879577956795B795F1118E +:106C0000F8CFFAF4BB0F11F460FF1BC06F5F7F4F2A +:106C10008F4F9F4F16C0882311F096E911C077233C +:106C200021F09EE8872F762F05C0662371F096E845 +:106C3000862F70E060E02AF09A95660F771F881F14 +:106C4000DAF7880F9695879597F9089597F99F67D2 +:106C500080E870E060E00895882371F4772321F0E4 +:106C60009850872B762F07C0662311F499270DC003 +:106C70009051862B70E060E02AF09A95660F771F9E +:106C8000881FDAF7880F9695879597F908959F3FA3 +:106C900031F0915020F4879577956795B795880FD7 +:106CA000911D9695879597F908959FEF80EC08952B +:106CB00000240A94161617061806090608950024DB +:106CC0000A9412161306140605060895092E039455 +:106CD000000C11F4882352F0BB0F40F4BF2B11F4C9 +:106CE00060FF04C06F5F7F4F8F4F9F4F089557FD28 +:106CF0009058440F551F59F05F3F71F04795880F2A +:106D000097FB991F61F09F3F79F0879508951216C0 +:106D100013061406551FF2CF4695F1DF08C016166C +:106D200017061806991FF1CF86957105610508941D +:106D300008950E947F36A0F0BEE7B91788F4BB27FC +:106D40009F3860F41616B11D672F782F8827985F3B +:106D5000F7CF869577956795B11D93959639C8F3CA +:106D60000895E894BB2766277727CB0197F9089504 +:106D70000E94CB360C9466360E94583638F00E943A +:106D80005F3620F0952311F00C9426360C9455367E +:106D900011240C94B2360E94773670F3959FC1F39C +:106DA000950F50E0551F629FF001729FBB27F00DB9 +:106DB000B11D639FAA27F00DB11DAA1F649F66270E +:106DC000B00DA11D661F829F2227B00DA11D621F5D +:106DD000739FB00DA11D621F839FA00D611D221F17 +:106DE000749F3327A00D611D231F849F600D211DFB +:106DF000822F762F6A2F11249F5750409AF0F1F07E +:106E000088234AF0EE0FFF1FBB1F661F771F881FE6 +:106E100091505040A9F79E3F510580F00C942636C2 +:106E20000C94B2365F3FE4F3983ED4F386957795A1 +:106E30006795B795F795E7959F5FC1F7FE2B880F8C +:106E4000911D9695879597F90895F894FFCF97101F +:106E5000BF101211BF101211F2102A1112112712B5 +:106E6000341260146014691469146B146914691481 +:106E70006914601460147014691469147014072183 +:106E800007216021602192213A213A213A21AC2147 +:106E90001D222D222D22BC2CC02C022D132D1E2D87 +:106EA0003D2D402D732D942D102D102D9F2DA22D95 +:0C6EB000A62DCC2DEE2DF12DF32D182E6B +:106EBC004202000000010000000042020000000538 +:106ECC000100000042020000000106000000420226 +:106EDC00000000010700000042020408000000004E +:106EEC0000004202090C00000000000042020115E3 +:106EFC00000000000000420201160000000000002B +:106F0C0036323331F7F6676697C634350000000029 +:106F1C000001FB08DB0DFA08D70DD30DF4F50100C9 +:106F2C0021007F220003004A004A4A01F6F7313360 +:106F3C003236674C41594552004261736520004717 +:106F4C00616D6520005261697365004C6F776572E5 +:106F5C00004C4F434B0043617073004E756D0053F2 +:106F6C0063726C00202020202000534F4C415200B3 +:106F7C00544D505354002025303364002077706DED +:106F8C0000818283E200E900EA00B500B600B70098 +:106F9C00CD008301CC008A019201940121022302CD +:106FAC0024022502260227022A02B300B4006F0035 +:106FBC007000B90200FF0100010000FFFF0000019A +:106FCC000001FF0000081018181008000001020250 +:106FDC00020202020202020240223250012E01FC85 +:086FEC0000370D500D700D007F :00000001FF From ea722b9e5183407e3697bcf720c4c9f0665ce912 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Thu, 16 Sep 2021 23:59:21 -0400 Subject: [PATCH 021/155] Updated encoder function and disabled rainbow RGB --- .../pro/ansi/keymaps/solartempest/config.h | 12 ++++++--- .../gmmk_pro_ansi_solartempest.bin | Bin 36480 -> 36412 bytes .../pro/ansi/keymaps/solartempest/jonavin.c | 24 ++++++++++++++---- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h b/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h index ef211e1334e1..d8618ea074c6 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h @@ -29,7 +29,7 @@ #define RGB_DISABLE_WHEN_USB_SUSPENDED #define RGB_MATRIX_KEYPRESSES - #define DISABLE_RGB_MATRIX_SOLID_COLOR + #define DISABLE_RGB_MATRIX_SOLID_COLOR #define DISABLE_RGB_MATRIX_BREATHING #define DISABLE_RGB_MATRIX_ALPHAS_MODS //Remove effects not desired #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN @@ -41,8 +41,8 @@ #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL #define DISABLE_RGB_MATRIX_CYCLE_ALL - #define DISABLE_ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT - #define DISABLE_ENABLE_RGB_MATRIX_CYCLE_UP_DOWN + #define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + #define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON @@ -56,12 +56,18 @@ #define DISABLE_RGB_MATRIX_HUE_BREATHING #define DISABLE_RGB_MATRIX_HUE_PENDULUM //#define DISABLE_RGB_MATRIX_HUE_WAVE + //#define DISABLE_RGB_MATRIX_PIXEL_RAIN + //#define DISABLE_RGB_MATRIX_PIXEL_FLOW + //#define DISABLE_RGB_MATRIX_PIXEL_FRACTAL + #define DISABLE_RGB_MATRIX_TYPING_HEATMAP + #define DISABLE_RGB_MATRIX_DIGITAL_RAIN #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE #define DISABLE_RGB_MATRIX_SOLID_REACTIVE #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + //#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS #define DISABLE_RGB_MATRIX_SPLASH #define DISABLE_RGB_MATRIX_MULTISPLASH #define DISABLE_RGB_MATRIX_SOLID_SPLASH diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro_ansi_solartempest.bin b/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro_ansi_solartempest.bin index c07d4f2fe74825593fbfff7605d766b5dcf2d481..26bd2c82cbb83577c0f24a5920dde9ceccb94bac 100644 GIT binary patch delta 4643 zcma)AdstJ)wx8MAF*_iT073#jb`q2z*s6#?Rpg=J5fl+0_`3C3vC3%_Yol#H@LBA` z$~V1MkM+@W^j@uPEu`^=Rz$1T>N%$uTKS6C`npPk`qi@$b%(GYckK}Q&b{ZKyT9)@ z`!{Q?nZ0J#%$iAR4p65*p?0TG=a$sHkQKMxftY=OF97ENZGig#(NXupNb1h|x-(1b z*nxWeTEq+oWCErEmXI-c0#2%{PbG)(di5|-&8diy%6~x=)SORk|d9LceX8Gv& z+Wa0b#r@K&FV_DrnVRc3O?FW+RQtQ+->4aydy?c;a|ek?CE+AjqG|=DXm+XN=C!|z z7?l$zt6J3dc<1#2RNEaEadF>fLOHt$HD53z_Mi1^Kz}i)r;4I#L+kN`s2WH9l!1t4 z+%(rn@PM4;1LE{&FI)EJ4!9NqHaIn^hURvO)*4Igg!%zRk+px!RsG!5nUSsH2&o*9 zR$bhJx#_|dO=w%8-Qc9G>UKQ(Y=gmpxsQA)HrD27!d#ZHb%3^w1^@mkPFG4n;Z5Qr zFXl!I-)rc$?8hZK#C_@S07;@SMHACTgN0jEM&=goLfIgcKzTAyrih9pNzqnwBSe~Q z_l|^*V=L7v^XugE-s7OI6`P?mEYxVUZ5GfXtEUBL^tqPrYXDt$@8+Oen?*ac*c@GD8%Cm^~hC|+L|6t|QJ z;bg@vy}Z%;8OSGzuaj!c%7{nOJ@3?KD`s?fqw8h9l|0p0256lqjx` zK&;M9+i31rKN-iEtCtJdZm3}(h)z(YL(tCob2PDS$a2jro940<7c2Mi1;F(|UJg7o z$QJ@v%QSb?uj8;PwpD4D$6`WpehKeaYBsQV668~WKML}Ema67DC7P@CZ_&KiX0jYL zUo#bg!A+@;7Xxn(@)^K?3i2}Ge+}{?;NJ)NG~j20ycGC1K|Txk*HUF*ZL48uaW>f$ z3bM~6GD|xG?;&q$jqy9BXilb|w9cPKCk*o8P-KzKH6}cf;@%=BwMP6JxvU)$zc^?$ zWmURfK?g6Ax3N?@gc_e%%D~3H0}SfN+Bg7@pvd%4OaS~)zJPg)|np#`l899 z5Mwnj_IVUNjS2ShT>l`biTEeYji6?Yw{P3N1yMa)gP30crvX0#t^>S)zXLF<;?8?u zdvj+!$IVAf2&N^r`S8=4Di=u){Xji05;5D!<ZBua_QW9)t z6^F>EFyq(|8Cknp`Xn(TvOWy*SAll~d6tB%w}Sjs4{?Th!rQkZ#setdhL|6=lC1Cy zO7;CKBN`ixR%>69qKGwl# z;z*8e&`VdO?=XtNCDY4=g?pSkPRzOm^#{ zaVR;e%QK!hgSyI9*BfGz2edOqO`W>zvA!sz;!YB*kJVRzzlVr9JgiL(E9JU7129MAON6{fjuq)vXW3cmt6m|AuFgzeNoT%M@$8 z!|N|}YvBVHS5MSFjMow}=o0g|S7|5rx|YUlP(@Ael^b~PBIhTAZ+MrpcrwjRbv-n$ zqS-?pSS?`?dpounDpXv3unxHaY8O1N^+R{#$VoB-iRGruRw%=vxb8C~hHar*JfxF- zq^|T)+%9t6G{pFZOxX>K6);WFI>Z_PjGN+C6TNvdUO`IDmauf0;!1poo6w8717x## zEsi1G=43pA46`JsJ&>|FjK1&ysgjaGF;^JyVTK%1jJN{=#Z3?`&aJtc z7K$5Bsx4!v3)@@`mOVIP4@|Je{e_R#;e8Z0#x-~N4Lta;fH>ZVA#52wl}6nr^N#{c z7E;w|G9z(*++-OtA%amabmXJvR!EqRd=*UKywjv5(Lin|G60%%CbIZ_qP0#Qa1TCn zVH=rl9S6bNYF+hQ@YuQ#Um+z)C6PyZLt!E;&g6P6OeV!$=p|nzS;LZgm8{tZqpKr{ zP`He2OtDaxJmg?XE>0kKQsQxpOH4Vh!7Mp9Zk}sLnhqxxH&X?Sd9VrM06F_t@bGy( z<4j*&V~?|GNz?dYIECC8pNe%vpB@F}@bqR}NyK!b50%e$Yx2HpfYQXmj+{z9%}Apr zNu)i)p>Irsq+p|p5G(Vun^7|+^D@)%d!#NiZ^8))kL!TMqI`BKEEjCwUtxfW(rrh~ zsQYrh+J@_*Z4zH8Xl%$jxdrb_sHZ-&!Y4M6h?nBW{3y^}T0GX4G)3K|MFRi5pnf<7 zuS3Q$>MkSH&wySZ)a#*siY$2Pwdw?WLQy;fS#67JwG>769(WHs3+nqUWPX_p({@{5AoFpu z#feibj*P}|J7tb@{K*;F7}lr)meHgI{T%60lve}fne@P`hPPk(4JLrBnNVyzB&ohy zG0~Or#eGn>lnlkJ4!HAjDx$( zZgOIxJv~GSFVMjeiF`)8z^ep_ALTbRO8hA}w|^64{;HsXQ!9!SB2=x)rjz;Wr*%y_ zGHTMWK^G;)&J+!CFko@M8>^yVkWU%?yP?z-a^8rd@WS7rj3|8I4KE5S^g;u_KjRtD+gT!X?&n<2Y{>(|J~d8I=V{VFqM!mPl5DRje-M1Ewy z3IfPru(J9wnm?P0t#bAk_DIIBG^J*G0nljuFQ+cpWZ8L^Qe4%uwp<=LdSC;s^ zGvxEB#gwmx_@|mFjYNjpQgAo1+veg6uX+I$P{9*WQGA2JZdacMb;)(Yfa9X=J&4!N&e2736 z=4aroQPWolko5 zyYNi%u)sK=R1o-3nS>M`#NU$Rg{$#)GN>reuuQVRGCmu*g~Qa+?n_ad0uu$_brcQ7 zZ;=m+;xh;PMgE>2Zm>=9PLv$ooW>@>TpIn#oIdf^K$LZEY=O(ghU_;*ev$t$lpCPU z6>_)8l(f%>EtV=>lk!W3YGrB#ez%88#;palJzhxj{nGtplszq!^&f-Qnb3MWskB#7 zYCrjJdvTb*XK|ItAMZH~<#( z0>>Caj9X`>3y{gr?;&?*cVH*EJZCa?y0mjQ;*Yz*(|;k4UmlC!Aj22u;5n|9i_>X* z&~<3}QH=lMn)=EpJmg0SSuWhisgVENteLiL>DJfgEJmh*qkH(XRfhU# zGcxt?n_Te~X>`~)_)gC&h#3v!9XO9%sMov!HCRr?y{qI4IlY*-J{-M$J6duX#VH+2rx` z%eDk%4$lw$GG|csil@C__J^Qsp{H{vIkomT%D0moTz61;WmP>;FIorxA-G1Ze@H{- zH*P#cVXLe0&HdW2i;x+QXCtNqaMZPAdpw2%;_V$4Tt`0L5uesJ3;u(ciI~}Ch|$7( z@jHlF4sZhK$VhY%B774d0a%c|5BSp6wc}e{y&0mt7Vs&c4zM5a9^g&DY5;;KWfx)+ z5)u0xN?nmZfBv6!9oPr(5B4#EKK?<_S0_0;|m0x${=Y&Q)+= ztU=7BHDu1aS3+Dxh`9{7Rpc7^-Z#oo+424|{0=GnAkoyjK=G3ebg2|nkg0<2Oj7s3 l`IO6Z;J+O}s(~a^TV5nr)k+yBD|2^gkSacEJDu delta 4629 zcma)AdstIfw%_|Cha5mi!b6CFoFq_!phy*g0p+C$NkE}!#n;$Utyp!4TKlClcEATM zwbf5%&-D7Jk9KrQTkRE69B7SkYFpc>egmys(fX*j+W4sUpsgp6^SCP*nYnZSx##4|F2JkED*O&zBGOzc(NUHO$-u^lF%>bDhe{O}X8V*0EtWwq#U1u* zE42ShMsq4R*+z|~5?>>Kp{i6NvgD?&1!CgpI23 zzRC7@CuO4h@x&7y@ea&A=gTy+W``SdF~X*h&^{K%_qI4QkO~1##JgV1g$SRklzqkb zW@!+&dFVPwME`V^qVIjMSTA1kCPS;(MD@yiv;1G)ciH=3@uR;<71|dM8uV+^nI4?? zu*1iFr$BkxzaiM!O3@CDtQ_uak=PBo9{(rM*{q-29Eh7abOa=){AJMDA+R%xZC)if z6c!me%a`BszQ^7t->8uCKNYO#=8S0GgyoZ^69`+g51JVjoetMdUj}|DyvU#JZLzt zw}L^8{E$}wj|}oE;7pL$0H=c723(LH+E)U95aiXsxgehn{Fbz8I1Fi++8DE}4+q(I z5@`#444)?d2-W3yq!>Api zm+)%PYT8Ks7Ytj5>#rvbVY=LgpnlRwE06SbLCweB^vcL!53Po~!*yp9Pnd3sC1^2r zr0qxgUj;R~kyamR#!DnJJbp17G*DME|JHPLP_xqea5Jul08nl~OacG_q5#Q&48SA+ zW))mSH*8uitovQV0X+f_&Lhp?gr=hqlTDIFrNzYoD;tfNK#a+Jk38$=-#Tb+6In2- z8Vls`s8=dw*?og4#@u{2)2ZM-50>V-9Tuh&ai0n@KO~#)wP|P$4+Sih+>(#-I?w zM%aXyHz6OjnfxI#kFpPv(~-s0xIq%B9)s7Bbae^#lNFF&AcxfnAo)_=NoC5UNfWd5 zSzq8J3xf%0iV^pPXOk(iSHX>zKT*v;TLYS3B*eMp(t8?kK$WkCz2V(FY(dLqD(hJb zSX={(LqUropM^c=RV07gu|FfSKgo{G@%0LBE*aF6VV+FY#-;m@|74=iWA3UD=n-@6 zZjJlX2*e(O@q_D3wLKe6Y8b&`@{-nwcayiYI=qd1thL1c@i-c&rM~VMJx2Ja{OnB<6NvB{g-{^|Wtq~ID{l`%Upb`x*xDQ21wsAm^k zM@PS)h~DLwJ9zIR=bMR_yh~VIq~uy%MPrsL+1p(ZO)xAfI0Z3ShGPaMr0I5jF?KtS zdR1oNjJhnd^?}JyT#<)7$M#T(-K0=|m+tma+y#W zDQ>q9aRq+N-6Va6)wqsWj2XC|tTkp(Q)IH=7?YeOVD3-DT~x_o6^Pp-P~0n`(YdKq z)kAR`$v4JqifML*q`ZOE7r=k2&ci;X2JfV}mt60sUc!k#3W(!<7#1ndr%=&-GJkhC zQYp^tCI`~y0S+{-LY zatu{i!<_{#yDiGOy>$G=CvVY;@E)r@zJ=oIT-D=Gs_+sLn=?<7nH^@w+oOHjiMz&Z z^(k3WH6?MZ!(xUTbn_9sJ-i&t zaA`a$Q^y~cRrWDvSd1yj*g-yx@>wt2j#zjUK`YFp}d!5{HmeR zWH;FoAcSahLT{Qi+8OFpa0SSYDMi#=xo8JA-^7e-|GG8Zyd%ue*mwBCRbmB=yM_zZ7oidDZyzPwYj_6hZ z%X5zcz11k)^@ahlOSilX+dIC&o{qQMj25dGA@(jlf6PYAg*H5sdjI5i80xW-T0jqwWdWznRZ*CeHx?M56e zqZHQcbBC5M&h_r`#cL*-5qA?xH+vEH6Ui=4#jRv+@doT9=Zlxo zl|3TgNoJH}HReYTe`v;oMKya$8Bd_qJU94DL@9&b7+Va)14MTiLnGy@g^E&<#Crc>aPNkr+Xj3qB4W<87GS!-k^eu}I&;T|ZtQ=pV3 zhnjr7sldj``v({zm&WF@GRlncgz9B|z(NP5cn_lw_@D8}`hcz46Szko1E!K0_uo1K zj3)N7c}d?6Dh!k!vjSfyz~ht^`O71cdE{?p`*1UPdiwbZVUm)nPn7r&=|Bft*3^;b z&g+zUubgP6&AKp&7saa`^@)L}wZ!voQa_`DD%?Ph&M;6Pi{!$LO#BW}ndic4EH;lX zSt8=eI0t;$S$xk6{zrN|S>or3AO6zR!1rq0Y7-9+1-8HVo;*?FZDM~n*rlHB#(%_V zCfL9wBfcEI&e26-6SXNkp;q|-9Mh6vA8%y; z!t_>DrNtUV1|C)t?+_8|=aDJxsY;4a!?yLo-ukXXS@%Kn{bu~WhT3WppQ~DZm;fY%OIhj;*6IYX@ z*^T&5WY6sHlb?r>-U0Y960u2eJUc81F`XKNvK;A$_~*&KIoI(q()?r*KIZ!D$rmwo z;TS2d9ZlU5NNw%7u-E+}e|AvdFAC)K+RZv1S~?Br2V4Z)0Q?Mi!j(QxjYHd7;JlxY znANV5`572qGpiP4U>)zrQUt2vQx{I?uZN!y zaCmmTJ|g=fC_CEq=7{WgP)x$8%w zUmZP77}0DDY8+jowmce_GbnquD{(~jo1koASLPP7X7vwL;TAG~&E7yZwB{E5)*ARb z!F6-(Z6z*u^*Q%Zc%^II?{}C*sb5} osoZ)pGh#0Mn*(SEhyc14Ch Date: Fri, 17 Sep 2021 20:22:52 -0400 Subject: [PATCH 022/155] Added define for OLED_LOGO in config.h for those looking to save space --- keyboards/solartempest/sofle/config.h | 1 + .../solartempest/sofle/keymaps/via/snakey.c | 31 ++++++++++--------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index 72b2962c3db4..1bb5c21f14cb 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -73,6 +73,7 @@ #define OLED_BRIGHTNESS 90 // Default 100. #define SPLIT_WPM_ENABLE //Enable WPM across split keyboards (+268). #define SPLIT_OLED_ENABLE //Synx on/off OLED state between halves (+100). + #define OLED_LOGO //Enable to print custom logo on slave side, disable to save space. #endif // Combo settings diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey.c b/keyboards/solartempest/sofle/keymaps/via/snakey.c index 642f6adec6fa..a9ea055b0cd1 100644 --- a/keyboards/solartempest/sofle/keymaps/via/snakey.c +++ b/keyboards/solartempest/sofle/keymaps/via/snakey.c @@ -46,19 +46,20 @@ bool showedJump = true; bool isBarking = false; - - static void render_logo(int LUNA_X, int LUNA_Y) { - static const char PROGMEM luna_logo[] = { - 0x00, 0x00, 0x04, 0xf6, 0xb8, 0xf8, 0xd8, 0xf0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, - 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xc0, 0xe1, 0xf3, 0xfb, 0x7f, 0x1f, 0x0f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x3f, 0x03, - 0x01, 0x00, 0x00, 0x00, 0x80, 0xc1, 0xf3, 0xff, 0x7f, 0x1f, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x30, - 0x1e, 0x3f, 0x3f, 0x7f, 0xf9, 0xf0, 0xf0, 0x70, 0x78, 0x3c, 0x3f, 0x1f, 0x0f, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x3f, 0x7f, 0x7f, 0xfb, 0xf1, 0xf0, 0x78, 0x3c, 0x1e, 0x0f, 0x03, 0x00, 0x00, - }; - oled_set_cursor(LUNA_X,LUNA_Y); - oled_write_raw_P(luna_logo, sizeof(luna_logo)); - } + #ifdef OLED_LOGO + static void render_logo(int LUNA_X, int LUNA_Y) { + static const char PROGMEM luna_logo[] = { + 0x00, 0x00, 0x04, 0xf6, 0xb8, 0xf8, 0xd8, 0xf0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, + 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xc0, 0xe1, 0xf3, 0xfb, 0x7f, 0x1f, 0x0f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x3f, 0x03, + 0x01, 0x00, 0x00, 0x00, 0x80, 0xc1, 0xf3, 0xff, 0x7f, 0x1f, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x30, + 0x1e, 0x3f, 0x3f, 0x7f, 0xf9, 0xf0, 0xf0, 0x70, 0x78, 0x3c, 0x3f, 0x1f, 0x0f, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0x3f, 0x7f, 0x7f, 0xfb, 0xf1, 0xf0, 0x78, 0x3c, 0x1e, 0x0f, 0x03, 0x00, 0x00, + }; + oled_set_cursor(LUNA_X,LUNA_Y); + oled_write_raw_P(luna_logo, sizeof(luna_logo)); + } + #endif /* logic */ static void render_luna(int LUNA_X, int LUNA_Y) { @@ -235,7 +236,9 @@ oled_set_cursor(0,3); oled_write("TMPST", false); - render_logo(0,7); + #ifdef OLED_LOGO + render_logo(0,7); //Not defining this in config.h will save 112 bytes. + #endif /* wpm counter */ char wpm_str[8]; From 331422f7d52bc8a26daa7cd19d0dca6cf0622038 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Mon, 27 Sep 2021 00:38:56 -0400 Subject: [PATCH 023/155] Custom functions work in progress. --- .../pro/ansi/keymaps/solartempest/config.h | 2 +- .../solartempest/gmmk_pro VIA layout.json | 10 +- .../pro/ansi/keymaps/solartempest/jonavin.c | 150 ++++++++++++------ .../pro/ansi/keymaps/solartempest/jonavin.h | 6 +- .../pro/ansi/keymaps/solartempest/keymap.c | 15 +- 5 files changed, 126 insertions(+), 57 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h b/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h index d8618ea074c6..1e3dddd33e83 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h @@ -17,12 +17,12 @@ #pragma once #define TAPPING_TOGGLE 2 // TT set to two taps +#define TAPPING_TERM 180 /* Handle GRAVESC combo keys */ //#define GRAVE_ESC_ALT_OVERRIDE //Always send Escape if Alt is pressed //#define GRAVE_ESC_CTRL_OVERRIDE //Always send Escape if Control is pressed -#define TAPPING_TERM 180 #ifdef RGB_MATRIX_ENABLE #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_HUE_WAVE diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro VIA layout.json b/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro VIA layout.json index 40a86c5ba5c4..50c89c1494a0 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro VIA layout.json +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro VIA layout.json @@ -114,13 +114,13 @@ "KC_CAPS", "RGB_VAD", "KC_NO", - "RGB_HUI", + "KC_TRNS", "KC_END", "KC_MYCM", "KC_TRNS", - "KC_TRNS", + "RGB_HUI", "KC_CALC", - "KC_TRNS", + "RGB_HUD", "KC_MSEL", "KC_TRNS", "RGB_MOD", @@ -146,7 +146,7 @@ "KC_TRNS", "KC_TRNS", "KC_MNXT", - "KC_NO", + "KC_NLCK", "RGB_TOG", "KC_TRNS", "KC_TRNS", @@ -154,7 +154,7 @@ "KC_MPLY", "KC_TRNS", "RGB_RMOD", - "KC_NO", + "KC_SLCK", "KC_TRNS", "KC_MSTP", "KC_TRNS", diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.c b/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.c index fc00790b137e..cd7e366b8f5c 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.c +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.c @@ -1,5 +1,6 @@ /* Copyright 2021 Jonavin Eng @Jonavin + Copyright 2021 solartempest 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 @@ -19,6 +20,10 @@ along with this program. If not, see . #include QMK_KEYBOARD_H #include "jonavin.h" +bool spam_arrow; +uint16_t spam_timer = false; +uint16_t spam_interval = 1000; // (1000ms == 1s) +bool teams_muted; #ifdef TD_LSFT_CAPSLOCK_ENABLE // Tap once for shift, twice for Caps Lock but only if Win Key in not disabled @@ -96,13 +101,19 @@ along with this program. If not, see . } __attribute__((weak)) void matrix_scan_keymap(void) {} - - void matrix_scan_user(void) { - timeout_tick_timer(); - matrix_scan_keymap(); - } #endif // IDLE_TIMEOUT_ENABLE +void matrix_scan_user(void) { + #ifdef IDLE_TIMEOUT_ENABLE + timeout_tick_timer(); + matrix_scan_keymap(); + #endif + if (spam_arrow && timer_elapsed(spam_timer) >= spam_interval) { + spam_timer = timer_read(); + tap_code(KC_F24); + } +} + #if defined(ENCODER_ENABLE) && defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality #ifndef DYNAMIC_KEYMAP_LAYER_COUNT @@ -197,50 +208,91 @@ __attribute__ ((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (!process_record_keymap(keycode, record)) { return false; } - switch (keycode) { - case KC_00: - if (record->event.pressed) { - // when keycode KC_00 is pressed - SEND_STRING("00"); - } else unregister_code16(keycode); - break; - case KC_WINLCK: - if (record->event.pressed) { - keymap_config.no_gui = !keymap_config.no_gui; //toggle status - } else unregister_code16(keycode); - break; - -#ifdef IDLE_TIMEOUT_ENABLE - case RGB_TOI: - if(record->event.pressed) { - timeout_update_threshold(true); - } else unregister_code16(keycode); - break; - case RGB_TOD: - if(record->event.pressed) { - timeout_update_threshold(false); //decrease timeout - } else unregister_code16(keycode); - break; -#endif // IDLE_TIMEOUT_ENABLE -#ifdef RGB_MATRIX_ENABLE - case RGB_NITE: - if(record->event.pressed) { - rgb_nightmode = !rgb_nightmode; - } else unregister_code16(keycode); - break; -#endif // RGB_MATRIX_ENABLE - default: - if (record->event.pressed) { - #ifdef RGB_MATRIX_ENABLE - rgb_matrix_enable_noeeprom(); - #endif - #ifdef IDLE_TIMEOUT_ENABLE - timeout_reset_timer(); //reset activity timer - #endif - } - break; - } - return true; + switch (keycode) { + case KC_00: + if (record->event.pressed) { + // when keycode KC_00 is pressed + SEND_STRING("00"); + } else unregister_code16(keycode); + break; + case KC_WINLCK: + if (record->event.pressed) { + keymap_config.no_gui = !keymap_config.no_gui; //toggle status + } else unregister_code16(keycode); + break; + + #ifdef IDLE_TIMEOUT_ENABLE + case RGB_TOI: + if(record->event.pressed) { + timeout_update_threshold(true); + } else unregister_code16(keycode); + break; + case RGB_TOD: + if(record->event.pressed) { + timeout_update_threshold(false); //decrease timeout + } else unregister_code16(keycode); + break; + #endif // IDLE_TIMEOUT_ENABLE + #ifdef RGB_MATRIX_ENABLE + case RGB_NITE: + if(record->event.pressed) { + rgb_nightmode = !rgb_nightmode; + } else unregister_code16(keycode); + break; + #endif // RGB_MATRIX_ENABLE + + case NMR: //Move window to next monitor on right + if (record->event.pressed) { + register_code(KC_LSFT); + register_code(KC_LWIN); + register_code(KC_RIGHT); + unregister_code(KC_RIGHT); + unregister_code(KC_LWIN); + unregister_code(KC_LSFT); + } + return true; + case NML: //Move window to next monitor on left + if (record->event.pressed) { + register_code(KC_LSFT); + register_code(KC_LWIN); + register_code(KC_LEFT); + unregister_code(KC_LEFT); + unregister_code(KC_LWIN); + unregister_code(KC_LSFT); + } + return true; + + case SPAMARROW: // Moves arrow up and down + if (record->event.pressed) { + spam_arrow ^= 1; + spam_timer = timer_read(); + } + return false; + + case TEAMSMUTE: //Mute MS teams and simply change LED for key 1 colour + if (record->event.pressed) { + register_code(KC_LCTRL); + register_code(KC_LSFT); + register_code(KC_M); + unregister_code(KC_M); + unregister_code(KC_LSFT); + unregister_code(KC_LCTRL); + teams_muted ^= 1; + } + return true; + + default: + if (record->event.pressed) { + #ifdef RGB_MATRIX_ENABLE + rgb_matrix_enable_noeeprom(); + #endif + #ifdef IDLE_TIMEOUT_ENABLE + timeout_reset_timer(); //reset activity timer + #endif + } + break; + } + return true; }; diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h b/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h index e2b53eee128d..47e1cfa42073 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h @@ -36,7 +36,11 @@ enum custom_user_keycodes { KC_WINLCK, //Toggles Win key on and off RGB_TOI, // Timeout idle time up RGB_TOD, // Timeout idle time down - RGB_NITE // Turns off all rgb but allow rgb indicators to work + RGB_NITE, // Turns off all rgb but allow rgb indicators to work + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + SPAMARROW, //Spam F24. + TEAMSMUTE //MS Teams mute shortcut and simple LED status }; #define KC_CAD LALT(LCTL(KC_DEL)) diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c index 020087532d60..58f816b8b6e0 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c @@ -19,6 +19,8 @@ along with this program. If not, see . #include "rgb_matrix_map.h" #include "jonavin.h" +bool spam_arrow; +bool teams_muted; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -97,9 +99,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { if (keymap_config.no_gui) { rgb_matrix_set_color(LED_LWIN, RGB_RED); //light up Win key when disabled } + if(spam_arrow==1) { //Change LED colour on nav cluster to indicate on + for (uint8_t i=0; i Date: Mon, 27 Sep 2021 00:50:04 -0400 Subject: [PATCH 024/155] Updated VIA layout. --- keyboards/solartempest/9e/9e VIA layout.json | 28 +-- keyboards/solartempest/9e/A9e.c | 45 ++++ keyboards/solartempest/9e/A9e.h | 12 +- keyboards/solartempest/9e/config.h | 178 +++++++++------ .../solartempest/9e/keymaps/default/keymap.c | 208 +++++++++++++++++ .../solartempest/9e/keymaps/via/keymap.c | 216 +++++++----------- .../9e/qmk_firmware - Shortcut.lnk | Bin 0 -> 1154 bytes keyboards/solartempest/9e/readme.md | 4 +- keyboards/solartempest/9e/rules.mk | 32 +-- 9 files changed, 486 insertions(+), 237 deletions(-) create mode 100644 keyboards/solartempest/9e/keymaps/default/keymap.c create mode 100644 keyboards/solartempest/9e/qmk_firmware - Shortcut.lnk diff --git a/keyboards/solartempest/9e/9e VIA layout.json b/keyboards/solartempest/9e/9e VIA layout.json index aa58163c6e9b..cfcaec6e88ed 100644 --- a/keyboards/solartempest/9e/9e VIA layout.json +++ b/keyboards/solartempest/9e/9e VIA layout.json @@ -14,22 +14,22 @@ "KC_P8", "KC_P9", "KC_WWW_BACK", - "KC_F13", + "KC_MSTP", "KC_WWW_FORWARD", - "USER01", - "RGB_TOG", - "USER00", + "KC_VOLD", + "KC_F14", + "KC_VOLU", "KC_CAPS", "KC_NLCK", "KC_MINS", "KC_P4", "KC_P5", "KC_P6", - "KC_VOLD", - "KC_F14", - "KC_VOLU", + "USER01", + "RGB_TOG", + "USER00", "USER03", - "KC_MSTP", + "KC_F13", "USER02", "KC_WWW_REFRESH", "KC_BSPC", @@ -37,21 +37,21 @@ "KC_P1", "KC_P2", "KC_P3", - "KC_MS_WH_UP", + "C(S(KC_TAB))", "C(KC_W)", - "KC_MS_WH_DOWN", + "C(KC_TAB)", "KC_NO", "KC_NO", "KC_NO", - "KC_MS_WH_DOWN", + "KC_PGDN", "KC_HOME", - "KC_MS_WH_UP", + "KC_PGUP", "C(KC_PMNS)", "C(KC_0)", "C(KC_PPLS)", - "C(S(KC_TAB))", + "KC_MS_WH_UP", "C(KC_T)", - "C(KC_TAB)" + "KC_MS_WH_DOWN" ], [ "KC_RBRC", diff --git a/keyboards/solartempest/9e/A9e.c b/keyboards/solartempest/9e/A9e.c index 584df4ba0beb..3fc20a1961c1 100644 --- a/keyboards/solartempest/9e/A9e.c +++ b/keyboards/solartempest/9e/A9e.c @@ -17,3 +17,48 @@ */ #include "A9e.h" + +/* #define RGBLIGHT_LED_MAP LED_LAYOUT( \ + 31, 32, 33, 34, 35, \ + 1, 30, 4, 5, 6, 7, 8, 9, \ + 0, 3, 10, 11, 12, 13, 14, 15, \ + 2, 41, 16, 17, 18, 19, 20, 21, 23, 36, \ + 40, 39, 22, 25, \ + 24, \ + 38, 27, 37, \ + 26, 29, \ + 28 )*/ +// E2 Keys Row 1 E4 E5 +// E1 Keys Row 2 E6 +// E3 Keys Row 3 +// E8 E9 E7 + +#ifdef RGB_MATRIX_ENABLE //Add in addressable LED underglow support with physical locations + led_config_t g_led_config = { { + //Key matrix to LED index + { 36, 35, 34, 33, 32, }, + {18, 37, 5, 4, 3, 2, 1, 0, }, + {19, 21, 11, 10, 9, 8, 7, 6, }, + {20, 38, 17, 16, 15, 14, 13, 12, 22, 31, }, + { 39, 40, 23, 25, }, + { 24, }, + { 41, 26, 30, }, + { 27, 29, }, + { 28, NO_LED, NO_LED, NO_LED, } + }, { + // LED Key Index to Physical Position, calculated with Plot Digitizer and scaled PCB Image with center at {110,110} + {150,98},{132,98},{116,98},{100,98},{84,98},{60,98}, + {150,80},{132,80},{116,80},{100,80},{84,80},{60,80}, + {150,64},{132,64},{116,64},{100,64},{84,64},{60,64}, + + {16,85},{7,76},{16,66},{24,76}, {192,74},{184,62}, + {192,52},{202,62}, {192,30},{184,20},{192,8},{202,19}, + + {209,32},{211,71},{191,105},{141,105},{101,104},{76,104}, + {52,98},{30,89},{30,63},{52,50},{141,44},{181,32} + }, { // LED Index to Flag. + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, // 4 for 18-key backlight. + 1,1,1,1,1,1,1,1,1,1,1,1, // 1 for 3*4LED large rotary encoders. + 2,2,2,2,2,2,2,2,2,2,2,2 // 2 for 12-case underglow. + } }; +#endif diff --git a/keyboards/solartempest/9e/A9e.h b/keyboards/solartempest/9e/A9e.h index e70c429d6179..cc6481b19bb5 100644 --- a/keyboards/solartempest/9e/A9e.h +++ b/keyboards/solartempest/9e/A9e.h @@ -16,18 +16,20 @@ * along with this program. If not, see . */ -#pragma once -#include "quantum.h" +#ifndef A9E_H + #define A9E_H - #define LAYOUT( \ + #include "quantum.h" + + #define KEYMAP( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ K303, K304, K305, K306, K307, K308, K309, K310, K311 \ - ) \ - { \ + ) { \ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \ { KC_NO, KC_NO, KC_NO, K303, K304, K305, K306, K307, K308, K309, K310, K311 } \ } +#endif diff --git a/keyboards/solartempest/9e/config.h b/keyboards/solartempest/9e/config.h index a839aee2d30b..a74b280bfb3b 100644 --- a/keyboards/solartempest/9e/config.h +++ b/keyboards/solartempest/9e/config.h @@ -16,81 +16,125 @@ * along with this program. If not, see . */ -#pragma once -#include "config_common.h" +#ifndef CONFIG_H + #define CONFIG_H -/* USB Device descriptor parameter */ -#define VENDOR_ID 0x414B // AK -#define PRODUCT_ID 0x0009 // 9e -#define DEVICE_VER 0x0001 -#define MANUFACTURER Atlantis -#define PRODUCT A9e -#define DESCRIPTION Keyboard + #include "config_common.h" -/* key matrix size */ -#define MATRIX_ROWS 4 -#define MATRIX_COLS 12 + /* USB Device descriptor parameter */ + #define VENDOR_ID 0x414B // AK + #define PRODUCT_ID 0x0009 // 9e + #define DEVICE_VER 0x0001 + #define MANUFACTURER Atlantis + #define PRODUCT A9e + #define DESCRIPTION Keyboard -/* key matrix pins */ -#define MATRIX_ROW_PINS { F0, F1, F2, F3 } -#define MATRIX_COL_PINS { F5, F6, F7, A0, A1, A2, A3, A4, A5, B7, B6, B5 } //F5, F7, B7, B5 are unused on the MCU. They are needed for the encoder key matrix. -#define UNUSED_PINS + /* key matrix size */ + #define MATRIX_ROWS 4 + #define MATRIX_COLS 12 -/* encoder pins */ -#define ENCODERS_PAD_A { C0, C3, C5, C7, D1, D3, D5, D6, A7 } //Encoder pads ordered so on VIA mapping it is cw/ccw and up/down rotation orientation. -#define ENCODERS_PAD_B { C1, C2, C4, C6, D0, D2, D4, D7, A6 } -#define ENCODER_RESOLUTIONS { 4, 4, 4, 4, 4, 4, 4, 2, 2 } //Better control of individual encoders and encoder types. -//#define ENCODER_RESOLUTION 4 + /* key matrix pins */ + #define MATRIX_ROW_PINS { F0, F1, F2, F3 } + #define MATRIX_COL_PINS { F5, F6, F7, A0, A1, A2, A3, A4, A5, B7, B6, B5 } //F5, F7, B7, B5 are unused on the MCU. They are needed for the encoder key matrix. + #define UNUSED_PINS -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW + /* encoder pins */ + #define ENCODERS_PAD_A { C0, C3, C5, C7, D1, D3, D5, D6, A7 } //Encoder pads ordered so on VIA mapping it is cw/ccw and up/down rotation orientation. + #define ENCODERS_PAD_B { C1, C2, C4, C6, D0, D2, D4, D7, A6 } + #define ENCODER_RESOLUTIONS { 4, 4, 4, 4, 4, 4, 4, 2, 2 } //Better control of individual encoders and encoder types. + //#define ENCODER_RESOLUTION 4 -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 + /* COL2ROW or ROW2COL */ + #define DIODE_DIRECTION COL2ROW -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE + /* Set 0 if debouncing isn't needed */ + #define DEBOUNCE 5 -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE + /* 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 -#define RGB_DI_PIN E6 -#define RGBLIGHT_ANIMATIONS -#define RGBLIGHT_EFFECT_SNAKE_LENGTH 1 //Default 4 -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 -#define RGBLIGHT_LAYERS -#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF -#define RGBLIGHT_SLEEP // 18 keys, 9*3 encoders = 45 keys -#define RGBLED_NUM 42 // 18 keys + 12 encoders + 12 underglow for RGBLIGHT -#define RGBLIGHT_LIMIT_VAL 180 -//RGB LED Conversion macro from physical array to electric array -//First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping -#define LED_LAYOUT( \ - L01, L03, L05, L07, L08, \ - L10, L11, L12, L13, L14, L15, L16, L17, \ - L20, L21, L22, L23, L24, L25, L26, L27, \ - L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, \ - L41, L46, L47, L49, \ - L58, \ - L67, L68, L69, \ - L77, L79, \ - L88 )\ - { \ - L17,L16,L15,L14,L13,L12,L27,L26,L25,L24,L23,L22,L37,L36,L35,L34,L33,L32,L10,L20,L30,L21,L38,L47,L58,L49,L68,L77,L88,L79,L69,L39,L08,L07,L05,L03,L11,L31,L41,L46,L67, \ - } -//RGB LED logical order map -//Left encoder -> keys -> right encoders -> backlight -#define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 31, 32, 33, 34, 35, \ -3, 30, 4, 5, 6, 7, 8, 9, \ -0, 2, 10, 11, 12, 13, 14, 15, \ -1, 41, 16, 17, 18, 19, 20, 21, 25, 36, \ - 40, 39, 22, 24, \ - 23, \ - 38, 29, 37, \ - 26, 28, \ - 27 ) + #define RGB_DI_PIN E6 + #ifdef RGB_DI_PIN + #define RGBLIGHT_ANIMATIONS + #define RGBLIGHT_HUE_STEP 8 + #define RGBLIGHT_SAT_STEP 8 + #define RGBLIGHT_VAL_STEP 8 + #define RGBLIGHT_LAYERS + #define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF + #define RGBLIGHT_SLEEP // 18 keys, 9*3 encoders = 45 keys + #define RGBLED_NUM 42 // 18 keys + 12 encoders + 12 underglow for RGBLIGHT + #define RGBLIGHT_LIMIT_VAL 180 + + //RGB LED Conversion macro from physical array to electric array + //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping + #define LED_LAYOUT( \ + L01, L03, L05, L07, L08, \ + L10, L11, L12, L13, L14, L15, L16, L17, \ + L20, L21, L22, L23, L24, L25, L26, L27, \ + L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, \ + L41, L46, L47, L49, \ + L58, \ + L67, L68, L69, \ + L77, L79, \ + L88 )\ + { \ + L17,L16,L15,L14,L13,L12,L27,L26,L25,L24,L23,L22,L37,L36,L35,L34,L33,L32,L10,L20,L30,L21,L38,L47,L58,L49,L68,L77,L88,L79,L69,L39,L08,L07,L05,L03,L01,L11,L31,L41,L46,L67, \ + } + //RGB LED logical order map + //Left encoder -> keys -> right encoders -> backlight + #define RGBLIGHT_LED_MAP LED_LAYOUT( \ + 31, 32, 33, 34, 35, \ + 1, 30, 4, 5, 6, 7, 8, 9, \ + 0, 3, 10, 11, 12, 13, 14, 15, \ + 2, 41, 16, 17, 18, 19, 20, 21, 23, 36, \ + 40, 39, 22, 25, \ + 24, \ + 38, 27, 37, \ + 26, 29, \ + 28 ) + #endif + + #ifdef RGB_MATRIX_ENABLE // For dynamic RGB Matrix effects + #define DRIVER_LED_TOTAL 42 // The number of LEDs connected for matrix, 18 keys + 12 encoders + 12 underglow + #define RGB_MATRIX_CENTER { 110, 110 }; + #define RGB_MATRIX_KEYPRESSES + #define DISABLE_RGB_MATRIX_ALPHAS_MODS //Remove effects not desired + #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN + #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + #define DISABLE_RGB_MATRIX_BAND_SAT + #define DISABLE_RGB_MATRIX_BAND_VAL + #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT + #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL + #define DISABLE_RGB_MATRIX_CYCLE_ALL + #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN + #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL + #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL + #define DISABLE_RGB_MATRIX_DUAL_BEACON + #define DISABLE_RGB_MATRIX_RAINBOW_BEACON + #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS + #define DISABLE_RGB_MATRIX_RAINDROPS + #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + #define DISABLE_RGB_MATRIX_HUE_BREATHING + #define DISABLE_RGB_MATRIX_HUE_PENDULUM + #define DISABLE_RGB_MATRIX_HUE_WAVE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS + #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + #define DISABLE_RGB_MATRIX_SPLASH + #define DISABLE_RGB_MATRIX_MULTISPLASH + #define DISABLE_RGB_MATRIX_SOLID_SPLASH + #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH + #endif + + +#endif diff --git a/keyboards/solartempest/9e/keymaps/default/keymap.c b/keyboards/solartempest/9e/keymaps/default/keymap.c new file mode 100644 index 000000000000..916fa70260df --- /dev/null +++ b/keyboards/solartempest/9e/keymaps/default/keymap.c @@ -0,0 +1,208 @@ +#include "A9e.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + KEYMAP( + KC_L, KC_1, KC_R, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_L, KC_4, KC_R, + KC_L, KC_2, KC_R, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_L, KC_5, KC_R, + KC_L, KC_3, KC_R, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_L, KC_6, KC_R, + KC_UP, KC_8, KC_DOWN, RGB_VAI, KC_9, RGB_VAD, KC_L, KC_7, KC_R), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + + + switch (id) { + + } + return MACRO_NONE; +} + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void encoder_update_user(uint8_t index, bool clockwise) +{ + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 0)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 2)); + } + } else if (index == 1) { /* Second encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 0)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 2)); + }} else if (index == 2) { /* 3 encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 0)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 2)); + }} else if (index == 3) { /* 4 encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 9)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 11)); + }} else if (index == 4) { /* 5 encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 9)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 11)); + }} else if (index == 5) { /* 6 encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 9)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 11)); + }} else if (index == 6) { /* 7 encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 9)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 11)); + }} else if (index == 7) { /* 8 encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 3)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 5)); + }} else if (index == 8) { /* 9 encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 6)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 8)); + } + } +} + + + +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_KANA)) { + + } else { + + } + +} \ No newline at end of file diff --git a/keyboards/solartempest/9e/keymaps/via/keymap.c b/keyboards/solartempest/9e/keymaps/via/keymap.c index 0f44b1bea9f8..6b53279aa6bd 100644 --- a/keyboards/solartempest/9e/keymaps/via/keymap.c +++ b/keyboards/solartempest/9e/keymaps/via/keymap.c @@ -1,32 +1,8 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . -*/ - #include "A9e.h" +#include QMK_KEYBOARD_H #ifdef RGBLIGHT_ENABLE extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT - - bool is_encoder1_rotate = false; // For encoder animated LEDs - bool is_encoder6_rotate = false; - bool is_encoder7_rotate = false; - bool encoder_effect = false; - uint16_t encoder_timer = 0; - uint16_t encoder_interval = 500; #endif @@ -55,7 +31,7 @@ uint16_t alt_tab_timer = 0; // E3 Keys Row 3 // E8 E9 E7 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( + KEYMAP( KC_LEFT, KC__MUTE, KC_RIGHT, //Rotary Encoder 1 TO(1), TO(2), TO(3), KC_P7, KC_P8, KC_P9, //Keys Row 1 RGB_VAD, KC_SPACE, RGB_VAI, //Rotary Encoder 4 @@ -69,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { C(KC_PMNS), KC__MUTE, C(KC_PPLS), //Rotary Encoder 9 C(S(KC_TAB)), C(KC_T), C(KC_TAB) //Rotary Encoder 7 ), - [1] = LAYOUT( + KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -83,7 +59,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - [2] = LAYOUT( + KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -97,7 +73,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - [3] = LAYOUT( + KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -111,7 +87,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - [4] = LAYOUT( + KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -125,7 +101,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - [5] = LAYOUT( + KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -139,7 +115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - [6] = LAYOUT( + KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -153,7 +129,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - [7] = LAYOUT( + KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -167,7 +143,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - [8] = LAYOUT( + KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -181,7 +157,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - [9] = LAYOUT( + KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -198,6 +174,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; +/*const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { //Code is not required + switch (id) { + } + return MACRO_NONE; +}*/ + void matrix_init_user(void) { } @@ -208,36 +190,6 @@ void matrix_scan_user(void) { is_alt_tab_active = false; } } - - #ifdef RGBLIGHT_ENABLE //Add rotation animations underneath rotary encoders when turning - if (!encoder_effect && is_encoder1_rotate) { //Turn on the effect for encoder 1 - rgblight_set_effect_range(0, 4); - rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); - is_encoder1_rotate = false; - encoder_effect = true; - } else if (!encoder_effect && is_encoder6_rotate) { //Turn on the effect for encoder 6 - rgblight_set_effect_range(22, 4); - rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); - is_encoder6_rotate = false; - encoder_effect = true; - } else if (!encoder_effect && is_encoder7_rotate) { //Turn on the effect for encoder 7 - rgblight_set_effect_range(26, 4); - rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); - is_encoder7_rotate = false; - encoder_effect = true; - } else if (!is_encoder1_rotate && !is_encoder6_rotate && !is_encoder7_rotate && timer_elapsed(encoder_timer) > encoder_interval) { //Turn off the effect - rgblight_set_effect_range(0, 41); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); - is_encoder1_rotate = false; - is_encoder6_rotate = false; - is_encoder7_rotate = false; - encoder_effect = false; - } else { - is_encoder1_rotate = false; //Wait until encoder is turned again - is_encoder6_rotate = false; - is_encoder7_rotate = false; - } - #endif } bool process_record_user(uint16_t keycode, keyrecord_t *record) { @@ -300,14 +252,10 @@ bool encoder_update_user(uint8_t index, bool clockwise) if (clockwise) { action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - is_encoder1_rotate = true; - encoder_timer = timer_read(); } else { action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - is_encoder1_rotate = true; - encoder_timer = timer_read(); + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); } } else if (index == 1) { /* 2 encoder */ @@ -354,28 +302,20 @@ bool encoder_update_user(uint8_t index, bool clockwise) if (clockwise) { action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - is_encoder6_rotate = true; - encoder_timer = timer_read(); } else { action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - is_encoder6_rotate = true; - encoder_timer = timer_read(); + action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); } } else if (index == 6) { /* 7 encoder */ if (clockwise) { action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - is_encoder7_rotate = true; - encoder_timer = timer_read(); } else { action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - is_encoder7_rotate = true; - encoder_timer = timer_read(); + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); } } else if (index == 7) { /* 8 encoder */ @@ -402,66 +342,76 @@ bool encoder_update_user(uint8_t index, bool clockwise) } -// RGB Layer Light Settings - Note that this will fix the key switches with same LED colour and brightness -const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 95,255,90}); //Spring green -const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 30,255,120}); //Yellow-orange -const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 128,255,100}); //Cyan -const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 215,255,120}); //Magenta -const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 2, 43,100,160}); //White-left caps lock indication (No dedicated LED) -const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({8, 2, 43,100,150}); //White-right num lock indication (No dedicated LED) -const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({6, 2, 43,100,160}); //White-middle scroll lock indication (No dedicated LED) - - -const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers - my_layer0_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_capslock_layer, //Highest status indicators override other layers - my_numlock_layer, - my_scrollock_layer -); - +#ifdef RGBLIGHT_ENABLE + // RGB Layer Light Settings - Note that this will fix the key switches with same LED colour and brightness + const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 95,255,90}); //Spring green + const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 30,255,120}); //Yellow-orange + const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 128,255,100}); //Cyan + const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 215,255,120}); //Magenta + const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 2, 43,100,160}); //White-left caps lock indication (No dedicated LED) + const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({8, 2, 43,100,150}); //White-right num lock indication (No dedicated LED) + const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({6, 2, 43,100,160}); //White-middle scroll lock indication (No dedicated LED) + const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers + my_layer0_layer, + my_layer1_layer, + my_layer2_layer, + my_layer3_layer, + my_capslock_layer, //Highest status indicators override other layers + my_numlock_layer, + my_scrollock_layer + ); +#endif void keyboard_post_init_user(void) { + #ifdef RGB_MATRIX_ENABLE + //NOTE 1: Layer lighting doesn't work in RGB matrix mode + //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode + //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode + //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state + rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode + rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow + #endif + #ifdef RGBLIGHT_ENABLE rgblight_layers = my_rgb_layers;// Enable the LED layers rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 layer_move(0); //start on layer 0 to get the lighting activated + #endif } -layer_state_t layer_state_set_user(layer_state_t state) -{ - rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active - rgblight_set_layer_state(1, layer_state_cmp(state, 1)); - rgblight_set_layer_state(2, layer_state_cmp(state, 2)); - rgblight_set_layer_state(3, layer_state_cmp(state, 3)); - - switch(biton32(state)){ // Change all other LEDs based on layer state as well - case 0: - rgblight_sethsv_noeeprom(50,255,30); - break; - case 1: - rgblight_sethsv_noeeprom(30,255,30); - break; - case 2: - rgblight_sethsv_noeeprom(106,255,30); - break; - case 3: - rgblight_sethsv_noeeprom(215,255,30); - break; - default: - rgblight_sethsv_noeeprom(64,255,30); - } - return state; -} - +#ifdef RGBLIGHT_ENABLE + layer_state_t layer_state_set_user(layer_state_t state) + { + rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active + rgblight_set_layer_state(1, layer_state_cmp(state, 1)); + rgblight_set_layer_state(2, layer_state_cmp(state, 2)); + rgblight_set_layer_state(3, layer_state_cmp(state, 3)); + + switch(biton32(state)){ // Change all other LEDs based on layer state as well + case 0: + rgblight_sethsv_noeeprom(50,255,30); + break; + case 1: + rgblight_sethsv_noeeprom(30,255,30); + break; + case 2: + rgblight_sethsv_noeeprom(106,255,30); + break; + case 3: + rgblight_sethsv_noeeprom(215,255,30); + break; + default: + rgblight_sethsv_noeeprom(64,255,30); + } + return state; + } -bool led_update_user(led_t led_state) -{ - rgblight_set_layer_state(4, led_state.caps_lock); //Activate capslock lighting layer - rgblight_set_layer_state(5, !(led_state.num_lock)); //Invert the indication so numlock does not always appear "on". - rgblight_set_layer_state(6, led_state.scroll_lock); //Activate scrollock lighting layer - return true; -} + bool led_update_user(led_t led_state) + { + rgblight_set_layer_state(4, led_state.caps_lock); //Activate capslock lighting layer + rgblight_set_layer_state(5, !(led_state.num_lock)); //Invert the indication so numlock does not always appear "on". + rgblight_set_layer_state(6, led_state.scroll_lock); //Activate scrollock lighting layer + return true; + } +#endif diff --git a/keyboards/solartempest/9e/qmk_firmware - Shortcut.lnk b/keyboards/solartempest/9e/qmk_firmware - Shortcut.lnk new file mode 100644 index 0000000000000000000000000000000000000000..15ada1df2412f92d8cb088807b89bf4901fcdffa GIT binary patch literal 1154 zcma)5Yesr$ zS=Ye%4CGy_rq-8Nt8<6v?~MGox4I*9)i}H>Xd&$EQegd+iI$uHS}(;55`_7!m`lc% zu-~Q6KB=HhJNR=tqK~WEU4(v`7{nuJJRCT|&JWa$BXvL>at@DJ0(wwEE-0ZG5tU{F2`7Z3iER5?v#!S;ari0*nqcVR_+W22*wDI+% z+(cOjYT$mfLp{_{ryJBMBz-x@+hfsRLjgL3$4~gWHRNm9nUdyOXRVbU(K`JBrRN6) literal 0 HcmV?d00001 diff --git a/keyboards/solartempest/9e/readme.md b/keyboards/solartempest/9e/readme.md index 30353b2d00a1..38b472d3326a 100644 --- a/keyboards/solartempest/9e/readme.md +++ b/keyboards/solartempest/9e/readme.md @@ -12,9 +12,8 @@ For detailed instructions on using VIA and flashing, please refer to the section # Custom Features: -- 9 remappable rotary encoder controlling a variety of different things! +- 9 remappable rotary encoder controling a variety of different things! - RGB underglow support and remapped to physical locations. -- When turning the 3 large rotary encoders the RGB LEDs underneath animate. - Adds custom layer lighting with custom gradients for each and static colours for the switches. - Adds white caps lock, scroll lock, and num lock key indicators on the top row. - VIA support included by default. @@ -33,7 +32,6 @@ Make example for this keyboard (after setting up your build environment): - You will need to use an ISP Programmer to directly flash the 9e. No board reset is required, as you will flash the MCU directly. - I used Prog ISP V2.0 but other AVR programmers will also work. - Use a 12P AWM 20624 ribbon cable with FCP-12P-1.0mm breakout board. Only 10 pins are used. -- Plug in the ribbon cable with the data pins facing away from the PCB. ## Using with VIA diff --git a/keyboards/solartempest/9e/rules.mk b/keyboards/solartempest/9e/rules.mk index 5c83fafe8829..782755a42c25 100644 --- a/keyboards/solartempest/9e/rules.mk +++ b/keyboards/solartempest/9e/rules.mk @@ -44,18 +44,20 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096 # Build Options # comment out to disable the options. -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -TERMINAL_ENABLE = no # Terminal interface feature, very large. -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -RGBLIGHT_ENABLE = yes # RGB LEDs -RGBLIGHT_SLEEP = yes # LEDs off when sleeping -NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -KEY_LOCK_ENABLE = no # Key lock functionality -ENCODER_ENABLE = yes # Encoders -LTO_ENABLE = yes # Save space -LEADER_ENABLE = no # Leader keys -COMBO_ENABLE = no # Combo keys -UNICODE_ENABLE = no # Unicode \ No newline at end of file +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +TERMINAL_ENABLE = no # Terminal interface feature, very large. +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +RGBLIGHT_ENABLE = no # RGB LEDs +RGB_MATRIX_ENABLE = no # RGB matrix for individual LED control (In progress only) +RGB_MATRIX_DRIVER = WS2812 # Addressable LED strand driver +RGBLIGHT_SLEEP = yes # LEDs off when sleeping +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +KEY_LOCK_ENABLE = no # Key lock functionality +ENCODER_ENABLE = yes # Encoders +LTO_ENABLE = yes # Save space +LEADER_ENABLE = no # Leader keys +COMBO_ENABLE = no # Combo keys +UNICODE_ENABLE = no # Unicode From 1cd834573683ec1bff6e30411e97972f22058a2d Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Mon, 27 Sep 2021 00:56:29 -0400 Subject: [PATCH 025/155] Small file correction. --- .../ps17/qmk_firmware - Shortcut.lnk | Bin 0 -> 1154 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 keyboards/solartempest/ps17/qmk_firmware - Shortcut.lnk diff --git a/keyboards/solartempest/ps17/qmk_firmware - Shortcut.lnk b/keyboards/solartempest/ps17/qmk_firmware - Shortcut.lnk new file mode 100644 index 0000000000000000000000000000000000000000..15ada1df2412f92d8cb088807b89bf4901fcdffa GIT binary patch literal 1154 zcma)5Yesr$ zS=Ye%4CGy_rq-8Nt8<6v?~MGox4I*9)i}H>Xd&$EQegd+iI$uHS}(;55`_7!m`lc% zu-~Q6KB=HhJNR=tqK~WEU4(v`7{nuJJRCT|&JWa$BXvL>at@DJ0(wwEE-0ZG5tU{F2`7Z3iER5?v#!S;ari0*nqcVR_+W22*wDI+% z+(cOjYT$mfLp{_{ryJBMBz-x@+hfsRLjgL3$4~gWHRNm9nUdyOXRVbU(K`JBrRN6) literal 0 HcmV?d00001 From aa9e899f8c79f612f205d43b37cc4a22663a53b7 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Mon, 27 Sep 2021 01:02:56 -0400 Subject: [PATCH 026/155] Remove file with issues. --- .../ps17/solartempest_ps17_via.hex | 1549 ----------------- 1 file changed, 1549 deletions(-) delete mode 100644 keyboards/solartempest/ps17/solartempest_ps17_via.hex diff --git a/keyboards/solartempest/ps17/solartempest_ps17_via.hex b/keyboards/solartempest/ps17/solartempest_ps17_via.hex deleted file mode 100644 index b9d0957dd893..000000000000 --- a/keyboards/solartempest/ps17/solartempest_ps17_via.hex +++ /dev/null @@ -1,1549 +0,0 @@ -:100000000C94BD030C9404040C9404040C94040498 -:100010000C9404040C9404040C9404040C94040440 -:100020000C9404040C9404040C9477270C94332748 -:100030000C9472280C9404040C9404040C9404048E -:100040000C9404040C9404040C9404040C94040410 -:100050000C9404040C944E280C9404040C94040492 -:100060000C9404040C9404040C9404040C940404F0 -:100070000C9404040C9404040C9404040C940404E0 -:100080000C9404040C9404040C9404040C940404D0 -:100090000C9404040C9404040C9404040C940404C0 -:1000A0000C9404040C9404040C94040400000FFF4A -:1000B00078FF000000000000D7FF78FF000000007C -:1000C000000080FF64FF00000000000005FF78FFD3 -:1000D0000000000000005FFF5AFF00000000580011 -:1000E0006000000058005E00000058005D00000045 -:1000F00058005C00000057006000000057005F00DF -:10010000000005010902A10185020901A1000509FC -:1001100019012908150025019508750181020501BD -:10012000093009311581257F950275088106093846 -:100130001581257F950175088106050C0A38021581 -:1001400081257F950175088106C0C005010980A140 -:1001500001850319012AB700150126B7009501751D -:10016000108100C0050C0901A101850419012AA014 -:1001700002150126A002950175108100C005010934 -:1001800006A1018505050719E029E7150025019558 -:1001900008750181020507190029EF150025019551 -:1001A000F075018102050819012905950575019170 -:1001B00002950175039101C00660FF0961A1010963 -:1001C00062150026FF00952075088102096315005D -:1001D00026FF00952075089102C005010906A101BE -:1001E000050719E029E71500250195087501810229 -:1001F0009501750881010507190029FF150026FFE3 -:1002000000950675088100050819012905950575F1 -:10021000019102950175039101C0000000000000EA -:1002200000000000000000000000000000000000CE -:1002300000000000000000000000000000007E0F31 -:1002400000D4FFFFFFC7000000780000000000009E -:1002500000002A2B28000000000000000000000021 -:10026000000000000029000000002C1E3420212284 -:1002700024342627252E362D3738271E1F202122ED -:10028000232425263333362E37381F040506070866 -:10029000090A0B0C0D0E0F10111213141516171856 -:1002A000191A1B1C1D2F3130232D35040506070894 -:1002B000090A0B0C0D0E0F10111213141516171836 -:1002C000191A1B1C1D2F3130354CD400CA00C00038 -:1002D000B600AC00000000047F3F1F64321464329B -:1002E00014783C1E1E140A050001010101010101E0 -:1002F00001010202020202020202020303030303DB -:1003000003030304040404040404050505050506A9 -:100310000606060607070707070808080809090967 -:10032000090A0A0A0B0B0B0C0C0C0D0D0D0E0E0E10 -:100330000F0F0F10101111111212131314141515A1 -:1003400016161717181819191A1A1B1B1C1D1D1E13 -:100350001E1F202021222223242425262627282967 -:10036000292A2B2C2D2D2E2F303132323334353695 -:100370003738393A3B3C3D3E3F4041424344454695 -:100380004748494A4C4D4E4F505153545556585971 -:100390005A5B5D5E5F616264656668696B6C6D6F18 -:1003A0007072737577787A7B7D7E8082838587888B -:1003B0008A8C8E8F91939596989A9C9EA0A2A3A5C5 -:1003C000A7A9ABADAFB1B3B5B7BABCBEC0C2C4C6C6 -:1003D000C9CBCDCFD1D4D6D8DBDDDFE2E4E7E9EB82 -:1003E000EEF0F3F5F8FAFDFFFFAA7F554008070687 -:1003F000050D0C0B0A11100F161514131A181B12E9 -:100400000903010002040E17192223252628292A90 -:100410002C2D2F3032333536383A3B3D3E40424367 -:100420004547494A4C4E5051535557595A5C5E60A6 -:1004300062646668696B6D6F71737577797B7D7FB8 -:1004400081838587898A8C8E90929496989A9C9EB7 -:100450009FA1A3A5A7A8AAACAEAFB1B3B4B6B8B9D3 -:10046000BBBCBEBFC1C2C3C5C6C7C9CACBCCCDCE3B -:10047000D0D1D2D2D3D4D5D6D7D7D8D9D9DADADB1E -:10048000DBDBDCDCDCDCDCDDDDDDDDDCDCDCDCDCAA -:10049000DBDBDBDADAD9D9D8D7D7D6D5D4D3D2D2E9 -:1004A000D1D0CECDCCCBCAC9C7C6C5C3C2C1BFBED1 -:1004B000BCBBB9B8B6B4B3B1AFAEACAAA8A7A5A33C -:1004C000A19F9E9C9A98969492908E8C8A898785FB -:1004D00083817F7D7B79777573716F6D6B696866DA -:1004E0006462605E5C5A5957555351504E4C4A49AC -:1004F00047454342403E3D3B3A3836353332302F54 -:100500002D2C2A2928262523224E007F004B00006F -:100510000001515400550056005F00600061005713 -:10052000005C005D005E00000059005A005B00584E -:100530000062000000630000004F00010050000056 -:10054000000100AD002C0053001450025303532A45 -:100550000001000100010000000100010001000095 -:100560005C005C000001000000300001002F000072 -:100570000010500500170011030D00160007002D94 -:1005800001060119011000000011011D03E10057CF -:10059000012C000000E2000000805F0100815F008C -:1005A000001050B9004A0017012B0352002B011A0A -:1005B00001500051004F000000B6002C00B7002889 -:1005C000004E0000004B000000805F0100815F00D2 -:1005D0000010500100010001000100520001000163 -:1005E00000500051004F00000010033D080100536F -:1005F0000068000000690000000100010001000027 -:1006000000010001000100010001000100010001E2 -:1006100000010001000100000001000100010001D3 -:1006200000010000000100000001000100010000C5 -:1006300000010001000100010001000100010001B2 -:1006400000010001000100000001000100010001A3 -:100650000001000000010000000100010001000095 -:100660000001000100010001000100010001000182 -:100670000001000100010000000100010001000173 -:100680000001000000010000000100010001000065 -:100690000001000100010001000100010001000152 -:1006A0000001000100010000000100010001000143 -:1006B0000001000000010000000100010001000035 -:1006C0000001000100010001000100010001000122 -:1006D0000001000100010000000100010001000113 -:1006E00000010000000100000009025B000301009E -:1006F000A0FA090400000103010100092111010011 -:10070000012240000705810308000A0904010002D4 -:1007100003000000092111010001222200070582C7 -:100720000320000107050303200001090402000162 -:100730000300000009211101000122B60007058411 -:100740000320000A12010002000000084B411500BE -:100750000200010200010A0350005300310037007B -:1007600000001203410054004C0041004E005400B0 -:100770004900530000000403090411241FBECFEFF9 -:10078000DAE0DEBFCDBF04B603FE27C0809196033A -:1007900090919703A0919803B09199038730904B63 -:1007A000A740B04BD1F41092960310929703109289 -:1007B00098031092990314BE84B7877F84BF0FB645 -:1007C000F894A895809160008861809360001092F1 -:1007D00060000FBEE0E0F8E3099511E0A0E0B1E0B1 -:1007E000E4EEFFE502C005900D92A43CB107D9F7F5 -:1007F00023E0A4ECB1E001C01D92A639B207E1F7F5 -:100800000E9499280C94B92F0C940000E8EDF0E0B8 -:1008100080818E7F80831092E2001092DA00109225 -:10082000E100A0EEB0E08C9181608C9380818F77A5 -:10083000808319BCA7EDB0E08C918E7F8C93808172 -:100840008F7E80831092090308952091E4003091F7 -:10085000E50095E6A9012091EC00822F817020FF30 -:1008600006C08091E80080FF06C080E008952091D6 -:10087000E80022FD1AC080912E03882389F085307C -:1008800089F08091EB0085FD0FC02091E40030914C -:10089000E50042175307F9F29150E1F684E008951C -:1008A00082E0089583E0089581E00895EF92FF9239 -:1008B0000F931F93CF937C018B010E942504C82FB7 -:1008C000811117C08091E80085FD0BC08091E80080 -:1008D0008E778093E8000E942504882399F3C82F1F -:1008E00008C0F70181917F018093F1000150110947 -:1008F00049F78C2FCF911F910F91FF90EF900895A2 -:100900008091300387FF13C08091E80082FF06C00A -:100910008091E8008B778093E80004C080912E03DB -:100920008111F2CF089580912E038823D9F380910D -:10093000E80080FFF8CF8091E8008E77ECCF982F09 -:100940009093E900242F762F50E0891731F07091B1 -:10095000EC002091ED005091F00021FD07C09F5F59 -:10096000973071F78093E90081E008953091EB00B2 -:100970003E7F3093EB003091ED003D7F3093ED00F2 -:100980003091EB0031603093EB007093EC002093DA -:10099000ED005093F0002091EE0027FDE0CF80E0C5 -:1009A0000895CF92DF92EF92FF920F931F93CF9310 -:1009B000DF93C8EDD0E088818F7E8883E7EDF0E09B -:1009C00080818160808384E082BF81E0809309031D -:1009D00088818E7F888302EE10E0F80110821092E9 -:1009E000DA0081EEC82ED12CF601108288818F7733 -:1009F000888388818068888388818F7D888319BCFB -:100A000010922E0310922F0310922D0310922C039C -:100A100090EEE92EF12CF70180818B7F8083888115 -:100A20008160888342E060E080E00E949F04F601DC -:100A300080818E7F8083F8018081816080838081C6 -:100A400088608083F70180818E7F808388818061C8 -:100A50008883DF91CF911F910F91FF90EF90DF90EE -:100A6000CF900895FC01809136039091370386174B -:100A70009707A0F06115710529F49091E8009E7721 -:100A80009093E80090E06115710551F4911108C050 -:100A90008091E80082FF34C080E00895BC01F2CF6D -:100AA00080912E038823C1F18530C1F18091E80047 -:100AB00083FD30C08091E80082FDEACF8091E8009C -:100AC00080FFE1CF8091F3002091F200382F611573 -:100AD000710519F02830310558F091E028303105C2 -:100AE00009F090E02091E8002E772093E800CBCF2A -:100AF00081918093F100615071092F5F3F4FE7CFE3 -:100B000080912E03882341F0853041F08091E800E8 -:100B100083FFBECF81E0089582E0089583E00895C9 -:100B200080910B0308959C014FB7F89480910003C6 -:100B300090910103A0910203B09103034FBF821B68 -:100B4000930B08952FB7F8948091000390910103BF -:100B5000A0910203B09103032FBF08952091FD02DD -:100B60003091FE022817390771F09093FE028093AE -:100B7000FD02E091FB02F091FC02309721F000842D -:100B8000F185E02D099408952091F9023091FA023F -:100B90002817390771F09093FA028093F902E091D7 -:100BA000FB02F091FC02309721F00680F781E02DE6 -:100BB00009940895E091FB02F091FC02309721F036 -:100BC0000190F081E02D099480E00895DC016091AE -:100BD000F5028091F602962F891301C00895292FFE -:100BE00030E0F901EE0FFF1FE351FD4F40815181CD -:100BF0004A175B07A1F487E08A9FA0018B9F500DE5 -:100C00001124485E5E4F81E0FA0184839613E6CF9B -:100C10002F5F3F4F237033272093F50208952F5FF6 -:100C20003F4F922F9370D8CF10928A021092890270 -:100C3000E8E1F1E08581811102C0148216823796C5 -:100C400081E0E234F807B1F70895FA01811101C09B -:100C5000FB010994089580918E03982F9E7F61F483 -:100C60008170826080938E0380919103853B18F0A0 -:100C700084EB8093910308958A34B0F38170886483 -:100C8000F1CFAF92BF92DF92EF92FF920F931F933B -:100C9000CF93DF93182F062FE901453B08F044EB73 -:100CA000E42FF0E0E851FD4F011110C0E4915E2FF8 -:100CB0004E2F4983E8835A83DF91CF911F910F9183 -:100CC000FF90EF90DF90BF90AF900895202F30E01D -:100CD0004491D42EE42EF12C56E0159FC00111242E -:100CE000EFEFF0E0BF010E94BA2E812F90E0880F55 -:100CF000991F55E5569FD001579FB00D11248A1BAF -:100D00009B0B982F990F890F5F01A21AB30AAE9C13 -:100D1000D001AF9CB00DBE9CB00D11245B2F089F7D -:100D200080011124012F11275F01A01AB10AAE9C86 -:100D30008001AF9C100DBE9C100D11245F01A81AFC -:100D4000B108A29EC001A39E900DB29E900D1124E9 -:100D5000892F9927E81BF90BEE9DC001EF9D900D9F -:100D6000FE9D900D1124E92F62307105A1F050F421 -:100D70006115710509F49DCF6130710581F0EB2F8C -:100D8000512F97CF6430710569F080F0663071059E -:100D900009F48FCFF4CFE42F4B2F592F8ACFE42FB4 -:100DA000412F87CFEB2F542F492F83CF4B2F5D2D12 -:100DB000E12F7FCF0E94A2059C0190917602809145 -:100DC0007702982B21F03093730220937202909156 -:100DD000780280917902982B21F030937102209350 -:100DE0007002E091FB02F091FC02309749F082E042 -:100DF000809374020480F581E02D84E792E00994E9 -:100E0000089540917602803F59F48091770287FFE0 -:100E10000DC01092770241110BC010926E0208C0F3 -:100E2000813F81F48091770218169CF3442381F06E -:100E30008091780290917902892B09F05AC0109222 -:100E40006D020895823F49F447FFF0CF1092760279 -:100E5000809177028111ECCFE0CF833F19F4141613 -:100E6000ACF3E4CF90917802893F29F41916F4F697 -:100E700010927802DBCF8A3F19F497FFD7CFF8CFD3 -:100E8000909179028B3F29F497FFD0CF109279028D -:100E9000CDCF8C3F19F41916CCF3C8CF9CE0980F36 -:100EA000953090F4845F990B21E030E0B90102C0E5 -:100EB000660F771F8A95E2F7CB01809590917502B6 -:100EC000892380937502B2CF8D3F31F480916F02F8 -:100ED0008E7F80936F02AACF8E3F21F480916F02A4 -:100EE0008D7FF7CF8F3F09F0A1CF80916F028B7F6D -:100EF000F0CF089580916F0280FD16C081FD16C06D -:100F000082FD16C080916D028823A1F0883280F4A2 -:100F100028E0829FC001112468E270E00E94CE2E7A -:100F2000862F672B39F0089582E0089584E00895B4 -:100F300088E0089581E0089580916F0280FD14C0DB -:100F400081FD14C082FD16C080916E02882381F05D -:100F5000843180F422E3829FC001112464E170E0B7 -:100F60000E94CE2E862F08958CE0089589E1089581 -:100F700085E0089582E30895803F31F40E949C0744 -:100F80008195809377020895813F19F40E949C0710 -:100F9000F8CF823F31F40E949C07819580937602BE -:100FA0000895833F19F40E949C07F8CF893F29F4E4 -:100FB0000E947A078093780208958A3F21F40E9464 -:100FC0007A078195F7CF8B3F31F40E947A0781959C -:100FD0008093790208958C3F19F40E947A07F8CF24 -:100FE0009CE0980F953070F4845F990B21E030E01D -:100FF00001C0220F8A95EAF780917502822B8093B7 -:10100000750208958D3F31F480916F028160809365 -:101010006F0208958E3F21F480916F028260F7CFB6 -:101020008F3FB9F780916F028460F1CF80E008951F -:10103000F894E82FE295EF70F0E031A1282F2F709F -:1010400081E090E001C0880F2A95EAF7982F9095EB -:10105000932391A392A1892B82A3789408959091D0 -:10106000040392FF06C0282F28712830F9F4877FE7 -:10107000846093FF06C0282F28712831F1F4877E01 -:1010800084612091050320FF06C0382F3871383065 -:10109000D9F4877F816021FF06C0282F287128316D -:1010A000D1F4877E816194FD877E0895282F247175 -:1010B0002430F9F68B7F8860DCCF282F247124310F -:1010C00001F78B7E8861DDCF382F3171313019F710 -:1010D0008E7F8860E0CF282F2171213121F78E7E0D -:1010E0008861E1CFCF93DF93EC0182389105A9F1BC -:1010F000D8F58133910509F496C048F589329105F8 -:1011000009F48AC08A9709F495C0C11521E5D20770 -:1011100008F0BCC0C11530E5D30708F014C1C83EC3 -:10112000D10508F09CC0C03ED10560F5C83AD10594 -:1011300008F087C0C53AD10508F0FDC0C130D1051F -:1011400009F12097F9F0C430D105E0F440C08533AF -:10115000910509F45AC0C997C1F6809104038370C0 -:1011600089F0C0EED0E00EC0833E910599F170F495 -:10117000803E910501F1823E910539F6809104038C -:1011800082FD21C0CE01DF91CF910895863E910569 -:1011900061F1873E910571F1843E910509F0B5CF6B -:1011A0008091050381FFEECF80910403C7EED0E06C -:1011B00084FD0DC0E7CF8091040380FD12C19091A2 -:1011C000050390FFDFCFC3EED0E084FFDBCFD0E09C -:1011D000C0E0D8CF8091040382FD06C19091050341 -:1011E00090FDBFCF84FFCECFF2CF8091040383FD6B -:1011F000DDCFC8CF8091040383FDF9C09091050332 -:1012000091FFF0CFC4EED0E0BDCF8091040385FF05 -:10121000B9CFC9E2D0E0B6CF8091040385FFB2CF49 -:10122000C5E3D0E0AFCF8091040386FFABCFCAE225 -:10123000D0E0A8CF8091040386FFA4CFC1E3D0E023 -:10124000A1CFCF3BD10518F6C85AD0E0CC0FDD1F97 -:10125000C95BDE4F0990D881C02DD46493CFC115EE -:1012600040E2D40758F4C11581E0D80708F08ACFCE -:10127000C03FD10508F4ABCFD06584CFC11590E451 -:10128000D90708F4A4CFDF70D06A7CCFC11525E55B -:10129000D20700F5C11534E5D30708F08AC0C1159F -:1012A00043E5D40708F071C0C11582E5D80708F4FA -:1012B00067C0CE018370992721E030E002C0220F81 -:1012C000331F8A95E2F7C695C69580E2C89FE00174 -:1012D000112452C0C11599E5D907A8F4C11528E514 -:1012E000D20708F06BC0C11536E5D30708F06FCF01 -:1012F0008C2F0E942F08C82FD0E0DC2FCC27CC27C2 -:10130000DF71D0623FCFC1154AE5D40708F45BC056 -:10131000CE0190568115904208F059CF8D2F8F71D4 -:101320000E942F0890E0982F882788279F719C01A2 -:101330002C2BE901E6CFC55AD0E0CC5BDE4FC8814B -:10134000D0E0D0641FCFCE01E4E096958795EA9572 -:10135000E1F783702C2F26952695237040E2249F79 -:1013600090011124382B8C2F8370C1E0D0E002C093 -:10137000CC0FDD1F8A95E2F7C22BD32BDC6802CF9E -:10138000DC2FCC27C16FD06AFDCECE0183709927A8 -:1013900021E030E002C0220F331F8A95E2F7C695A4 -:1013A000C69590E2C99FE0011124C22BD32BDA68C5 -:1013B000E9CEDC2FCC27C46FD06AE4CEDC2FCC275B -:1013C000C06FD06ADFCE8C2F8F700E942F0834E060 -:1013D000D695C7953A95E1F7CF709C2FEC01D0696F -:1013E000D1CEC9E3D0E0CECEC2EED0E0CBCEC6EEB9 -:1013F000D0E0C8CE80914402811110924402089539 -:101400008091430290914202892B90914102892B55 -:101410008093C601909144029923A1F0892B809377 -:10142000C60180914301882341F18091040387FF25 -:1014300024C08EE1E8ECF1E090E0815000F59111DC -:101440000E94FA09E091FB02F091FC023097E1F072 -:1014500080914301882359F08091040387FF07C0DE -:101460008091C6018093C70185E08093C601028008 -:10147000F381E02D86EC91E0099486E0DBCF2191A9 -:101480002223D9F29F5FD9CF0895909143019923E8 -:10149000D1F09091040397FF16C0E82FE695E695EA -:1014A000E695EE31E0F4F0E0EA53FE4F282F277086 -:1014B00081E090E001C0880F2A95EAF7809592813B -:1014C000892382830895E8ECF1E09191891303C0A8 -:1014D000DF0111971C9291E0EE3CF907B1F70895F6 -:1014E000909143019923C1F09091040397FF14C098 -:1014F000E82FE695E695E695EE31F8F4F0E0EA534C -:10150000FE4F877021E030E001C0220F8A95EAF794 -:101510008281822B82830895A8ECB1E0EFEF90E006 -:101520002D91821751F0EF3F19F4211101C0E92FDD -:101530009F5F9630A9F7EF3F09F408950E2E000C37 -:10154000FF0BEA53FE4FE6CF80913F029091FE01E0 -:10155000981301C008958F5F8770FACF990F990F84 -:10156000890F982F977086958695869524E0829F9F -:10157000F0011124E651FE4F50E040E080E021915F -:1015800030E0092E02C0369527950A94E2F72170C3 -:101590003327042E01C0220F0A94EAF7822B4F5FF3 -:1015A0005F4F4430510559F70895990F990F890FEE -:1015B000982F977041E001C0440F9A95EAF78695FD -:1015C0008695869594E0899FF0011124E651FE4F9F -:1015D00030E020E070E05191DF011197CB01022E45 -:1015E00002C0969587950A94E2F7817081958527C8 -:1015F000842385278C932F5F3F4F2430310559F783 -:10160000089590E080E00E94C40590E080E00E9490 -:10161000AE0510924202109241020E94000A86E03A -:10162000E4E7F2E0DF011D928A95E9F710926E027D -:1016300010926D0210926F020C94DA06909346029B -:10164000809345020C94010B882341F08095909182 -:1016500042028923809342020C94000A0895882351 -:1016600039F090914202982B909342020C94000A18 -:101670000895882341F080959091430289238093B7 -:1016800043020C94000A0895882339F09091430294 -:10169000982B909343020C94000A0895882309F430 -:1016A00059C0823871F40E94DA0581FF53C089E382 -:1016B0000E94700A0E94000A89E30E94450A0C9465 -:1016C000000A833859F40E94DA0580FF43C083E59D -:1016D0000E94700A0E94000A83E5EFCF843859F413 -:1016E0000E94DA0582FF36C087E40E94700A0E94D9 -:1016F000000A87E4E2CF9CEF980F913AF0F290E273 -:10170000980F983088F4877021E030E0A90102C07A -:10171000440F551F8A95E2F7CA01809590914302C4 -:10172000892380934302CBCF9BE5980F933020F41D -:1017300090E080E00C94C40598E5980F973120F470 -:1017400090E080E00C94AE05803F20F00E940107FD -:101750000C94DA060895809580FF08C0589A81FF9E -:1017600007C05D9A82FF06C05C9A08955898F7CF2B -:101770005D98F8CF5C98089590912E03943029F5E8 -:101780008093060370930803609307039093E90026 -:101790008FEF9091E800815095FD06C095ED9A95E8 -:1017A000F1F700008111F5CF8091E80085FF0DC0B1 -:1017B00050E040E063E070E086E093E00E94560471 -:1017C0008091E8008E778093E8000895BC0184E062 -:1017D0000C94BC0BBC0183E00C94BC0B9C0184E01A -:1017E0008093E9009FEF8091E800915085FD06C04D -:1017F00085ED8A95F1F700009111F5CF8091E80011 -:1018000085FF0CC050E040E066E070E0C9010E9436 -:1018100056048091E8008E778093E8000895CF9376 -:10182000DF93EC01809143018823B1F1809104039F -:1018300087FF32C060E284E08093E9008FEF9091EF -:10184000E800815095FD06C095ED9A95F1F70000EE -:101850008111F5CF8091E80085FF1BC08091430185 -:1018600070E050E040E0811104C050E040E068E0EA -:1018700070E0CE010E9456048091E8008E7780933C -:10188000E80080E2FE01ACE0B3E001900D928A95A1 -:10189000E1F7DF91CF91089568E081E0CDCF81E05D -:1018A0008093E00080E28093D8001092C9008FE11D -:1018B0009EE40197F1F700C0000087E090EBDC01A7 -:1018C0008093960390939703A0939803B093990302 -:1018D00088E19CE00FB6F894A895809360000FBE55 -:1018E00090936000FFCFCF93C82F882309F4AEC038 -:1018F0008238C1F40E94DA0581FDA8C089E30E9404 -:10190000700A0E94000A2FEF81EE94E0215080407F -:101910009040E1F700C0000089E30E94450ACF91A2 -:101920000C94000A8338A1F40E94DA0580FD8EC071 -:1019300083E50E94700A0E94000A2FEF81EE94E076 -:10194000215080409040E1F700C0000083E5E5CFE2 -:101950008438A1F40E94DA0582FD78C087E40E94F1 -:10196000700A0E94000A2FEF81EE94E0215080401F -:101970009040E1F700C0000087E4CFCF8CEF8C0FE0 -:10198000813A88F580914301882301F18091040315 -:1019900087FF1CC0EC2FE695E695E695F0E0EA534C -:1019A000FE4F828190E04C2F477021E030E002C072 -:1019B000220F331F4A95E2F782239323892B79F074 -:1019C0008C2F0E94450A0E94000A09C0E8ECF1E051 -:1019D0008191C817A9F321E0EE3CF207C9F78C2FDB -:1019E0000E94700A9CCF80E28C0F883068F4C77028 -:1019F00021E030E001C0220FCA95EAF7809143024E -:101A0000822B809343028BCFEBE5EC0FE33040F465 -:101A1000F0E0EC5BFE4F808190E0CF910C94C40528 -:101A2000E8E5EC0FE73150F4F0E0EE0FFF1FE95B63 -:101A3000FE4F80819181CF910C94AE05C03F30F074 -:101A40008C2F0E94BC07CF910C94DA06CF91089599 -:101A50001F93CF93DF93182FD0E0C0E0893311F4A8 -:101A6000C0E5D0E0812F0E94730C209731F4812FC4 -:101A7000DF91CF911F910C944E0B8FE99FE001975E -:101A8000F1F700C000002197F0CF0F931F93CF9381 -:101A9000DF93C62FD42F022FFC0182818823A1F06F -:101AA000609395030E94A2059093940380939303FF -:101AB000C77081E001C0880FCA95EAF7DF91CF9126 -:101AC0001F910F910C94440B80919503681335C0BE -:101AD00080919303909194030E949305883C910513 -:101AE00060F510E21D0FCD17B9F080E28C0F883041 -:101AF00040F4C77081E001C0880FCA95EAF70E94E0 -:101B0000390B183048F481E09D2F977001C0880F81 -:101B10009A95EAF70E94440B802F0E94280D1830F6 -:101B200098F4D77081E001C0880FDA95EAF7DF9169 -:101B3000CF911F910F910C94390BC77081E001C0B8 -:101B4000880FCA95EAF7F3CFDF91CF911F910F91DC -:101B50000895DF92EF92FF920F931F93CF93DF933D -:101B6000E82FF0E0E65BFD4FD490282F26952695D0 -:101B7000269530E0F901E65CFD4F0491877010E096 -:101B8000082E02C0159507950A94E2F701701127F7 -:101B9000F901E65DFD4FE490F12C082E02C0F594AA -:101BA000E7940A94E2F791E0E922FF24F901E65E66 -:101BB000FD4FC491D0E002C0D595C7958A95E2F754 -:101BC000C170DD270115110519F081EE0E94730C1B -:101BD000E114F10419F086EE0E94730C8D2D0E9421 -:101BE000280DEF2819F086EE0E944E0B012B19F0FC -:101BF00081EE0E944E0BCD2B51F08CE2DF91CF9104 -:101C00001F910F91FF90EF90DF900C94280DDF91C2 -:101C1000CF911F910F91FF90EF90DF900895CF9398 -:101C2000DF93C7E0D2E060E0CE010E94852F2196CD -:101C3000C11584E0D807B9F7DF91CF9108956F926D -:101C40007F928F929F92AF92BF92CF92DF92EF924C -:101C5000FF920F931F93CF93DF9389E0C82E85E007 -:101C6000D82E0FE510E0E801E09736011CC0F50121 -:101C700085909490692DC7010E94852F682DC7011A -:101C800001960E94852F82E0A80EB11C82E0E80E2A -:101C9000F11CCE15DF0559F788E0680E711C2896F7 -:101CA0000C171D0731F07E0188E0E81AF108530196 -:101CB000DECF005D1F4F80E3C80ED11C0F3382E0E2 -:101CC000180789F6DF91CF911F910F91FF90EF9048 -:101CD000DF90CF90BF90AF909F908F907F906F904C -:101CE0000895CF93C82F6FEF811161E283E290E0F6 -:101CF0000E94852F6FEFC11169E084E290E00E949D -:101D0000852F6FEFC11163E185E290E0CF910C94D4 -:101D1000852F80E00E94710E60E086E290E00E94D4 -:101D2000852F0E941F0E0E940F0E81E00C94710EF1 -:101D3000CF93C0910503C2FB992790F9981781F0C2 -:101D400080FBC2F9C09305036091040384E090E036 -:101D50000E94852F6C2F82E290E0CF910C94852F0A -:101D6000CF9108950F931F93CF93DF9328E0629F45 -:101D7000E001112450E0440F551FC40FD51F30E37C -:101D8000839FC00DD11D1124CE0187960E94712F13 -:101D9000082F10E0102F0027CE0188960E94712F87 -:101DA0009801282BC901DF91CF911F910F910895C0 -:101DB000462F8A3038F4763028F4643018F4672FD0 -:101DC0000C94B20E90E080E00895BF92CF92DF9223 -:101DD000EF92FF920F931F93CF93DF937C010091BB -:101DE0003803109139038091450290914602082BE7 -:101DF000192BCFE0D0E0CC24C394D12CBC2EC6014B -:101E00000C2E02C0880F991F0A94E2F780239123B9 -:101E1000892B71F4219790F7B12C8B2DDF91CF9105 -:101E20001F910F91FF90EF90DF90CF90BF9008959A -:101E3000B7018C2F0E94D80E0E947208019751F3AF -:101E4000ECCFCF93DF93EC010E94E50EBE010E9420 -:101E5000D80EDF91CF910C947208FC018681978196 -:101E6000009779F00E947208292F2F7092959F7029 -:101E700092509E30A0F4E92FF0E0E554F04D0C9420 -:101E8000042F808191810E94210FEECF803F19F0B5 -:101E900020F4883E20F481E00895843FE1F380E05F -:101EA0000895883EC0F3813FD1F7F5CF822F869504 -:101EB0008695869508951F93CF93DF9300D000D029 -:101EC0000F92CDB7DEB7FC01268137812115310590 -:101ED00041F525E0DE01119601900D922A95E1F77A -:101EE000FC01228189819A812223B9F06623A9F01D -:101EF0000E94E50E182F682F89819A810E94D50AC9 -:101F000069817A81812F0F900F900F900F900F9021 -:101F1000DF91CF911F910C94D80E0E94AE0A182F1A -:101F2000EFCFC9010F900F900F900F900F90DF919E -:101F3000CF911F91089583E290E00E94712F81322A -:101F400089F484E290E00E94712F893059F485E28F -:101F500090E00E94712F91E0833109F090E0892F89 -:101F60008170089580E0FCCFCF9384E090E00E94E0 -:101F7000712FC82F82E290E00E94712F982F8C2F32 -:101F8000CF91089560918E03669570E04BE050E02C -:101F90008AE091E00E94572F892B19F481E0809309 -:101FA00084020E94A20590937E0280937D02089590 -:101FB0005F926F927F928F929F92AF92BF92CF92D9 -:101FC000DF92EF92FF920F931F93CF93DF93CDB7E2 -:101FD000DEB7C455D1090FB6F894DEBF0FBECDBF32 -:101FE00080918E0380FD0AC0EAE3F3E01182108243 -:101FF0001282339623E0EE38F207C1F780907B021D -:1020000090907C028114910409F459C080917A0265 -:10201000811155C0D12CC12C66246394712C13E01E -:10202000512E8091850293010C2C01C0220F0A943D -:10203000EAF7822309F43BC0F601EE0FFF1FE80D1B -:10204000F91DE590F490E114F104C9F145E050E088 -:10205000B701CE0101960E944E2F09810F3F39F141 -:102060008A81800F9927991F8D31910514F08CE199 -:1020700090E05C01AA0CBB1C8A0D9B1DFC01E65C78 -:10208000FC4F5F01059D80011124065C1C4F0A1561 -:102090001B0520F0F5E0EF0EF11CD8CF98014D8123 -:1020A0006C818B810E9441060D5F1F4FF0CF2FEF97 -:1020B000C21AD20A38E0C316D10409F0B2CF7DEEBD -:1020C000A72E73E0B72EDE011196AE014B5A5F4F7B -:1020D0001A2F7B2FF5018491282F30E0C901880F3A -:1020E000991F820F931F865C9C4FFC01C080D1809A -:1020F000E280CD92DD92ED92FFEFAF1ABF0AA417F6 -:10210000B50741F7279A35B13F7725B120686FB7FA -:10211000F894812F972FFC017191CF01E8E025B948 -:10212000000000C077FF35B9770F000000C000C085 -:1021300000C035B900C0EA9591F78417950759F7A3 -:102140006FBF8FE594E00197F1F700C00000CC5A13 -:10215000DF4F0FB6F894DEBF0FBECDBFDF91CF913A -:102160001F910F91FF90EF90DF90CF90BF90AF90B5 -:102170009F908F907F906F905F9008951F93CF9363 -:10218000DF9300D00F92CDB7DEB7162F90918E035C -:1021900090FF18C09E012F5F3F4F48E76FEF0E94EE -:1021A00041068B819981612F70E0FB01EE0FFF1FCB -:1021B000E60FF71FE65CFC4F2A8121839083828320 -:1021C0000E94D80F0F900F900F90DF91CF911F9129 -:1021D0000895EF92FF920F931F93CF93DF938C019B -:1021E000CAE3D3E0F12CE12CF801948160919003D3 -:1021F00080918F03FEE0EF16F104FCF49923F9F0CF -:102200009E01409191030E9441062FEFE21AF20ACB -:1022100023968CE1E816F10439F70E94D80FF801F3 -:10222000848190E00196817099278483DF91CF911A -:102230001F910F91FF90EF900895992309F39E014C -:1022400040E0E1CF8F929F92AF92BF92CF92DF9208 -:10225000EF92FF920F931F93CF93DF93EC014C818A -:10226000042F10E09801D8010E94192F9B01AC01A6 -:102270000E942F2F4B015C01E0E2F0E0E01BF10B2C -:10228000A5E5B0E0AC019B010E942F2F6B017C0102 -:102290009F01DF010E94112F9B01AC010E943A2F88 -:1022A0009B01AC01280D391D4A1D5B1DC701B601FC -:1022B0000E94E22EF22E822F90E039E23F15D8F1F3 -:1022C00043E0249F9001112435952795122F1095F6 -:1022D0009AE3C92E93E0D92E00E085E5E82EEF18A9 -:1022E0008E2D01FD8F2D9601412F609190030E944C -:1022F00041060F5F53E0C50ED11C0C3189F70E94D7 -:10230000D80F9C8181E0992319F0903219F48FEF56 -:102310008093170180911701890F8C83DF91CF91F2 -:102320001F910F91FF90EF90DF90CF90BF90AF90F3 -:102330009F908F90089525E530E0A901481B590B27 -:10234000CA019A01220F331F280F391F37FFBCCF54 -:102350002F5F3F4FB9CF0F931F93CF93DF93CAE304 -:10236000D3E0FE01118210821282339683E0EE38B0 -:10237000F807C1F710E000E080918702082E000CFA -:10238000990B081719078CF180911601082E000C83 -:10239000990B801791074CF19E0140919103609138 -:1023A000900380918F030E9441060F5F1F4F239679 -:1023B0000C31110509F70E94D80F809115019091F9 -:1023C0008702980F9093870220911601280F20937F -:1023D0001601121614F49B311CF08195809315019F -:1023E000DF91CF911F910F910895198218821A825F -:1023F000DCCFBF92CF92DF92EF92FF920F931F93A9 -:10240000CF93DF93FC018281DD24DA9480FD02C04A -:10241000DD24D3940AE313E0D0E0C0E02CE1B22E37 -:10242000F80111821082128294E0E92EF12CC12C65 -:10243000809186028C0D8D310CF43DC06B2D0E9475 -:10244000AC2E892F082E000C990B8C179D0791F448 -:10245000809191038E9DA0018F9D500D1124559563 -:1024600047955595479598016091900380918F030A -:102470000E944106CD0CF1E0EF1AF108C9F6219651 -:102480000D5F1F4FCC31D10559F60E94D80F8091B6 -:10249000860291E0D91215C0811111C08BE18093A1 -:1024A0008602DF91CF911F910F91FF90EF90DF9007 -:1024B000CF90BF90089587FFC5CF845EC3CF815072 -:1024C000EECF90E00196BE010E94CE2EE8CFEF92B3 -:1024D000FF921F93CF93DF93EC018AE3E82E83E012 -:1024E000F82E10E08C819701409191036091900348 -:1024F000810F0E944106175F83E0E80EF11C1C3F2C -:1025000089F70E94D80F9A818C8190FF08C08F5F55 -:102510008C83DF91CF911F91FF90EF9008958150B0 -:10252000F7CF90918E0390FF0CC0EAE3F3E0818334 -:1025300060834283339693E0EE38F907C1F70C9439 -:10254000D80F08950F931F93CF93DF9300D00F926E -:10255000CDB7DEB78C018091880281110AC09E013F -:102560002F5F3F4F44EB6FEF0E9441068A818093BB -:102570008802F8016481613069F08091880240E04E -:10258000662361F040E0623011F44091880280E0FF -:1025900060E004C06091880240E080E00E949112F7 -:1025A000F801848190E0019663E070E00E94CE2EF5 -:1025B00084830F900F900F90DF91CF911F910F9117 -:1025C0000895CF93DF9300D00F92CDB7DEB79091EF -:1025D0008E0390FF0AC09E012F5F3F4F0E9441066D -:1025E0004B8169818A810E9491120F900F900F9008 -:1025F000DF91CF910895CF93DF93EC01EEE8F3E004 -:10260000438162818C810E94E1128C818F5F8C8377 -:10261000DF91CF910895CF93DF93EC01EC81F0E04F -:10262000E75FFB4F4491EEE8F3E0628181810E9415 -:10263000E1128C818F5F8C83DF91CF910895CF92CF -:10264000DF92EF92FF926B017C010E942B06B70193 -:10265000A60188E090E0FF90EF90DF90CF900C947F -:10266000972F5F926F927F928F929F92AF92BF92BD -:10267000CF92DF92EF92FF920F931F93CF93DF934E -:1026800000D00F92CDB7DEB7182F762E042F622E12 -:1026900090918E0390FF29C0E92FE695AE2FB0E010 -:1026A000A157BE4F8C91809383029E7F923081F51B -:1026B0009E012F5F3F4F812F0E9441064B81698110 -:1026C0008A810E94911210938F037092900300935D -:1026D0009103662051F060918E0370918F03809179 -:1026E0009003909191030E941F130F900F900F90F1 -:1026F000DF91CF911F910F91FF90EF90DF90CF90DE -:10270000BF90AF909F908F907F906F905F90089553 -:10271000823019F400919103D6CF863019F41091CC -:102720008F03D1CF8930D9F3893169F6E9518E2FE2 -:102730008170582EE695F0E0E851FC4FA590B490DA -:10274000BB248AE3E82E83E0F82ED12CC12C9CE137 -:10275000892E912CC601B4010E94BA2E812F5110EE -:1027600013C0860F9701402F672D0E944106CA0CA7 -:10277000DB1C83E0E80EF11C8EE8E81683E0F80627 -:1027800049F70E94D80F9FCF861BECCFEEE8F3E00D -:10279000438128E0421B08F440E021E0628181810E -:1027A0000C943113EEE8F3E0438128E0420F08F483 -:1027B0004FEF21E0628181810C943113EEE8F3E068 -:1027C000628128E0621B08F460E021E0438181819E -:1027D0000C943113EEE8F3E0628128E0620F08F414 -:1027E0006FEF21E0438181810C943113EEE8F3E037 -:1027F000818121E04381628188500C943113EEE89D -:10280000F3E0818121E043816281885F0C94311380 -:1028100080919203882319F08150809392036091F4 -:102820008E0370918F0380919003909191030C948B -:102830001F1380919203833018F48F5F809392036B -:1028400060918E0370918F0380919003909191031A -:102850000C941F1390918E0390FF36C091708111DC -:1028600029C0926090938E03662351F060918E038D -:1028700070918F0380919003909191030E941F1398 -:1028800060918E03669570E04BE050E08AE091E045 -:102890000E94572F892BA9F01092840281E0809327 -:1028A000800220E0409191036091900380918F031A -:1028B0000C943113853210F09864D4CF880F982B84 -:1028C000D1CF0E94C20FEACF089521E030E0A901E4 -:1028D00002C0440F551F8A95E2F7CA012091850274 -:1028E000662399F0822B8093850280918402811166 -:1028F00006C080918E0360E086950E942A14809124 -:102900008E0380FD05C00C94D80F80958223EBCFF9 -:1029100008950F931F93CF93DF93EC0161E000972D -:1029200009F0682F617080E00E94651460E02097D4 -:1029300021F0BE0176956795617081E00E94651473 -:1029400060E0209731F0BE017695679576956795A2 -:10295000617082E00E94651460E0209739F0BE014A -:1029600013E0769567951A95E1F7617083E00E9410 -:10297000651460E0209739F0BE01B4E07695679564 -:10298000BA95E1F7617084E00E946514AE0170E0D1 -:1029900060E0BB27A72F962F852F0097A105B105D3 -:1029A000D9F1AC01BD0188E08A019B01F4E03695C4 -:1029B000279517950795FA95D1F70115110521056A -:1029C000310519F08C5FB901A8018A019B01E2E091 -:1029D0003695279517950795EA95D1F701151105B5 -:1029E0002105310519F08E5FB901A801769567952B -:1029F00057954795452B462B472B09F08F5F823023 -:102A000011F160F4882399F08130C1F0CE01DF919B -:102A1000CF911F910F91089580E0C6CF8330C1F010 -:102A20008430A1F720E044E66FEF8FE004C020E09F -:102A300044E66FEF82E30E943113E8CF20E044E6E2 -:102A40006FEF85E0F8CF20E044E66FEF80E8F3CF4A -:102A500020E044E66FEF87EDEECF0E94891490935B -:102A60003903809338030C94010B809138039091C3 -:102A700039039C01267033272630310519F488600C -:102A80000C942D15877FFCCF21E030E002C0220F8F -:102A9000331F8A95E2F72095309580913803909105 -:102AA0003903822393230C942D1590914002809535 -:102AB000892380934002282F277039F4282F082E6D -:102AC000000C330B9217130621F49091050392FF2B -:102AD00007C08595859585950E9444151092400202 -:102AE000089521E030E002C0220F331F8A95E2F7FB -:102AF0008091380390913903822B932B0C942D15E0 -:102B000080918E038695815009F484E261E00C94F3 -:102B10002A1480918E0386958F5F853208F081E0BC -:102B200061E00C942A1490918E0390FF07C0969553 -:102B3000981720F0961710F40C94891561E00C9406 -:102B40002A14EEE8F3E083E0808311828FEF828322 -:102B500088E28383148260817181828193810C94E5 -:102B60001F1369EE7EEF90E080E00E94A32F60E0EB -:102B700082E090E00E94852F60E083E090E00E9478 -:102B8000852F109246021092450260E084E090E0AA -:102B90000E94852F60E082E290E00E94852F60E035 -:102BA00085E090E00E94852F60E086E090E00E9442 -:102BB000852F6FEF87E090E00E94852F40E050E086 -:102BC000BA0188E090E00E94972F60E08DE090E0ED -:102BD0000E94852F40E050E0BA0188E190E00E9419 -:102BE000972F60E087E190E00E94852F40E050E061 -:102BF000BA018CE190E00E94972F70E060E080E2E3 -:102C000090E00E94A32F40E050E0BA0188E190E0FC -:102C10000E94972F80E00E94710E0E94890E40E072 -:102C200050E0BA018FE090E00E94972F40E050E022 -:102C3000BA0183E190E00C94972F90E080E00E942D -:102C40007F2F893E9E4F11F40C949B0F80E00895D6 -:102C50001092430280914301E8ECF1E0882359F09F -:102C60008091040387FF07C08EE1DF011D928A95E2 -:102C7000E9F70C94010B86E0F8CF1F93CF93DF9315 -:102C8000CDB7DEB7AA970FB6F894DEBF0FBECDBFA3 -:102C900080E393E02091F100DC012D93CD01B3E0BE -:102CA00088339B07B9F780913103833009F471C0F1 -:102CB000B8F4813009F448C0823009F4B2C0809180 -:102CC000E80083FF3AC180913003909131039A303C -:102CD00008F033C1E92FF0E0E753F04D0C94042FD6 -:102CE0008A3009F48DC08B3009F470C0893039F70F -:102CF00080913003813219F780913403909135032C -:102D0000009711F00297D9F68091E800877F8093B1 -:102D1000E8008091E80082FF37C09091F300809135 -:102D2000F200029729F48091F1008B7F813021F429 -:102D30008091F10080930B038091E8008B77809362 -:102D4000E8000E948004BBCF80913003813A09F0F3 -:102D5000B6CF8091E800877F8093E80080913403AC -:102D600090913503892B61F460E28CE093E070E090 -:102D70000E9432058091E8008B778093E8009FCF16 -:102D800060E090E080E0F3CF80912E038111C1CF0D -:102D900096CF80913003813A09F091CF809134032E -:102DA00090913503892B09F08ACF8091E800877FC5 -:102DB0008093E8008091E80080FFFCCF8091430180 -:102DC0008093F1008091E8008E77B9CF8091300335 -:102DD000813209F074CF8091340390913503892BAF -:102DE00009F06DCF8091E800877F8093E8000E9412 -:102DF000800480913203809343010E9428165FCFA4 -:102E000080913003813209F05ACF8091E800877FAA -:102E10008093E8000E9480048091330380930A032A -:102E20004ECF80913003813A09F049CF8091E8007C -:102E3000877F8093E8008091E80080FFFCCF80913D -:102E40000A03BECF803899F0823809F076C08091AD -:102E500034038F70873008F070C08093E900809150 -:102E6000EB0085FB882780F91092E90006C080916D -:102E70002C0390912D03911182609091E800977F2F -:102E80009093E8008093F1001092F1008091E800A7 -:102E90008E77B5C1882309F4A2C1823009F04DC0F4 -:102EA000809132038111A6C1809134038F702FEF7E -:102EB000280F263008F041C08093E9002091EB00F4 -:102EC00020FF98C1933031F48091EB0080628093B1 -:102ED000EB0090C19091EB0090619093EB0021E0AA -:102EE00030E001C0220F8A95EAF72093EA001092A1 -:102EF000EA008091EB008860EACF81111EC010913A -:102F000032031F778091E3008078812B8093E30068 -:102F10008091E800877F8093E8000E948004809180 -:102F2000E80080FFFCCF8091E30080688093E3009D -:102F300082E0111183E080932E038091E80083FFEB -:102F40000AC08091E800877F8093E8008091EB00C1 -:102F500080628093EB00AA960FB6F894DEBF0FBE96 -:102F6000CDBFDF91CF911F9108958058823028F70F -:102F700020913203309133032C3DE3E03E07A1F56D -:102F800083E08A838AE289834FB7F894DE0113963F -:102F900020E03EE051E2E32FF0E050935700E4914F -:102FA00020FF03C0E295EF703F5FEF708E2F90E03F -:102FB000EA30C0F0C7968D939D932F5F243159F767 -:102FC0004FBF8091E800877F8093E8006AE270E05D -:102FD000CE0101960E9432058091E8008B778093A4 -:102FE000E800ABCFC096E7CF8091340390913503D2 -:102FF000432F55274330510509F44AC078F5413035 -:10300000510509F47AC08BE590E0E9EEF6E0423034 -:10301000510509F092CF2091E800277F2093E80026 -:1030200020913603309137038217930708F49C01EF -:1030300040E02115310509F065C0411163C0809160 -:10304000E80082FDC9CF80912E03882329F28530C4 -:1030500019F28091E80083FFF2CFBECF41325105D3 -:1030600009F43CC04232510509F067CF8330910525 -:1030700008F063CFFC01EE0FFF1FE954FE4F0190F3 -:10308000F081E02D8C549E4FDC018C9190E01AC0B1 -:10309000332721303105D1F02115310561F022307F -:1030A000310509F04ACFE6E5F7E0E4918E2F90E094 -:1030B000E6E5F7E007C0E6E7F7E0E4918E2F90E061 -:1030C000E6E7F7E0009709F438CFA5CFE2E6F7E0AE -:1030D000E4918E2F90E0E2E6F7E0F4CF83309105A3 -:1030E00008F02BCF880F991FFC01E354FE4F01908D -:1030F000F081E02D89E090E08ECF82E190E0E4E481 -:10310000F7E089CF80912E03882309F465CF8530BD -:1031100009F462CF8091E80083FD5ECF8091E800E2 -:1031200082FD8DCF8091E80080FF83CF9091F300E6 -:103130008091F2002115310519F08830910550F089 -:1031400041E0089709F040E08091E8008E77809395 -:10315000E8006FCF44914093F1003196215031093E -:103160000196E8CF803809F0E8CE8091E800877FAB -:103170008093E80080912F038093F10087CE811126 -:10318000DCCE10913203123008F0D7CE8091E800E7 -:10319000877F8093E80010932F030E9480041123FF -:1031A00011F084E005C08091E30087FDFACF81E053 -:1031B00080932E0342E061EC81E00E949F0442E292 -:1031C00061EC84E00E949F0442E261EC82E00E9494 -:1031D0009F0442E260EC83E00E949F04AECE8091A7 -:1031E0003203813009F0A9CE81E0933009F080E00C -:1031F00080932D031092E9008091E800877F8093EF -:10320000E8000E94800499CE9F92AF92BF92CF9225 -:10321000DF92EF92FF920F931F93CF93DF9300D033 -:1032200000D0CDB7DEB77C01FC0183819481892B6E -:1032300031F08081918189238F3F09F0F0C50F9093 -:103240000F900F900F90DF91CF911F910F91FF90F2 -:10325000EF90DF90CF90BF90AF909F90089598012E -:1032600022513F452031310508F0CEC58FEF93E064 -:103270000E94712F025167E0C62E62E0D62E88238D -:1032800039F1809140028770D1F2F7018281882361 -:10329000B1F282E00F900F900F900F90DF91CF91DD -:1032A0001F910F91FF90EF90DF90CF90BF90AF9064 -:1032B0009F900C945515C114F4E0DF0611F3C6017C -:1032C0000E94712F811101C001502FEFC21AD20A42 -:1032D0000111F1CF1C821B82BB24B3945AE0A52EAE -:1032E00086010F5F1F4FC6010E94712F89831A82CA -:1032F000882339F29FEF980F933008F58A83B982BB -:1033000032E0C30ED11CC8010E94712F8B83882329 -:1033100009F4B7CF8E010F5F1F4FF801808188231A -:10332000F9F2813009F043C091818281913049F4F2 -:103330000E5F1F4F0E94280D0F5F1F4FEECF6801D9 -:10334000E9CF923029F40E5F1F4F0E94730CF4CF27 -:10335000933029F40E5F1F4F0E944E0BEDCF943037 -:1033600019F00F5F1F4FE8CF0E5F1F4F30E020E0D6 -:10337000B8016F5F7F4FF80141818053990B8A300C -:10338000910550F021503109B8F28FE99FE0019783 -:10339000F1F700C00000F6CFA29EF001A39EF00D51 -:1033A00011249C012E0F3F1F842F8B01E1CF0E941F -:1033B000A90DC2CF81E00E9471150E94351561CF21 -:1033C00081E00E944415F9CF82E0FBCF04389FE5ED -:1033D000190709F483C008F473C00538FFE51F0717 -:1033E00009F041C5882309F43EC580EE0E94730CA4 -:1033F00081EE0E94730C80E10E94730C80E10E94B8 -:103400004E0B81EE0E944E0B80EE0E944E0B80917F -:10341000E60191E062E189278093E601882309F4BF -:103420008DC08FE00E94BE1066E18FE00E94BE104A -:103430001AC5882369F180914F02811106C081E08D -:1034400080934F0282EE0E94730C0E94A20590931B -:103450004E0280934D028BE20E94730C04C58823B8 -:10346000A1F080914F02811106C081E080934F024C -:1034700082EE0E94730C0E94A20590934E028093EC -:103480004D0281EE0E94730CE6CF81EE0E944E0B3E -:103490008BE20E944E0BE7C4882309F4E4C481EE5A -:1034A0000E94730C83EE0E94730C8FE40E94730CD5 -:1034B0008FE40E944E0B83EE0E944E0B81EEE9CF0B -:1034C000882309F4D0C481EE0E94730C83EE0E941D -:1034D000730C80E50E94730C80E5EBCF882309F420 -:1034E000D0CE10914C0281E0182710934C020E941C -:1034F000A20590934B0280934A0268E1112381F068 -:103500008FE00E94BE1069E18FE00E94BE106AE168 -:103510008FE00E94BE106BE18FE00E94BE10B1CE22 -:1035200084EB0E94BE1069E184EB0E94BE106AE148 -:1035300084EB0E94BE106BE184EBEFCF8FEA0E9418 -:10354000BE1066E18FEA72CF82EE0E94730CC6C491 -:1035500083E00E942F0B88E10E94730C88E10E9497 -:103560004E0B83E00E94240BB9C482EE0E94730CC0 -:1035700087E50E94280DB2C486EE0E94280D88E1DE -:10358000F8CF895AC5C482EE0E944E0BD9C48CE292 -:103590000E94280D8091E801882309F4D1C489E3B1 -:1035A0000E94280DCDC488E2FBCF033FFCE51F0736 -:1035B00039F1A0F4083D3CE51307F1F0093D8CE535 -:1035C000180751F1073D9CE5190709F0BDC426E233 -:1035D00041EE61EEC7010E94450D53CE053FECE57B -:1035E0001E07B1F088F0063F2CE5120709F0ACC4C5 -:1035F00027E245EE66EEEECF27E245EE65EEEACF36 -:1036000026E241EE60EEE6CF27E245EE64EEE2CF41 -:1036100026E241EE62EEDECF28E241E0EFCF80917C -:103620000403806106309CE5190709F48CC0809181 -:103630000403886007301C4508F485C080910403AA -:10364000806281C0809104038D7F0C30FCE51F07F0 -:1036500009F479C070F4809104038C600A303CE571 -:10366000130709F470C008F481C0809104038E7FB1 -:103670006AC080910403877F0E309CE5190709F426 -:1036800062C0809104038B7F0F301C4508F45BC03F -:10369000809104038F7E57C00B3FFCE51F0709F4A0 -:1036A0005DC030F503313CE5130709F46DC078F4D3 -:1036B00001319CE5190709F463C002311C4509F08A -:1036C0007EC40E942816809104038F773CC0053188 -:1036D000FCE51F0709F460C008F474C0809105037D -:1036E00081600A3F1C4509F06AC48093050367C4E2 -:1036F0000F3F8CE5180709F44BC088F4809105034F -:103700008D7F0D3FECE51E0781F3809105038E7FD1 -:103710000E3F1C4550F3809105038360E6CF0130D6 -:103720002DE5120709F457C008F442C060E00230EA -:103730001D4509F044C48EE090E00E94852F3FC4EF -:103740008091040381608093040339C48091040351 -:103750008260F9CF809104038460F5CF80910503E6 -:103760008260C3CF809104038064EDCF0E9428164D -:10377000809104038068E7CF809104038F7DE3CFBD -:10378000809104038F7BDFCF80910403837FDBCFA5 -:10379000809105038C7FA9CF8091040382FB992738 -:1037A00090F921E0922790FB82F990FB83F9CBCF2F -:1037B00080910503982F909591708E7F892B90FBB7 -:1037C00081F993CF0E94281690910403892F97FBCB -:1037D00087F98058B8CF61E0AECF882309F402C4DE -:1037E000809143028A7A91E009F490E09093E90194 -:1037F000811106C089E20E94700A0E94000A41CD30 -:1038000085E3F9CF85E3F3C3043CFCE51F0709F426 -:1038100093C046EF53E16FEF73E1053C2CE51207CF -:1038200009F00AC40E9425062CCD093C3CE513078B -:1038300009F491C070F4073CECE51E0709F486C05A -:103840004AEE53E16EED73E1083CFCE51F0751F3CE -:10385000F3C30A3C2CE5120709F482C048E054E1A6 -:1038600069E174E10B3C3CE51307E1F2E5C3013D7E -:103870008CE5180709F487C0B0F40E3CECE51E0790 -:1038800009F47BC008F476C00F3C2CE5120709F45C -:1038900077C06EE089E0003D3CE5130709F0CCC33A -:1038A0000E949315EECC043D8CE5180709F471C015 -:1038B00078F4023DECE51E0709F468C061E088E198 -:1038C000033DFCE51F0709F0B7C30E942A14D9CCB9 -:1038D000053D2CE5120709F45FC00D35100709F40A -:1038E000D0CCAAC380918E0380FF1BC08E7F8093B3 -:1038F0008E0360918E0370918F038091900390915D -:1039000091030E941F13109284028FEF90E7E2E070 -:1039100081509040E040E1F700C000000E94D80FC5 -:10392000B0CC816080938E0361E08695CECF40E875 -:1039300055E169E875E176CF49E855E160E875E160 -:1039400071CF4FEF53E166EF73E16CCF4EED53E172 -:103950006AEE73E167CF46EC53E162ED73E162CF4B -:1039600042ED53E166EC73E15DCF49E154E168E07B -:1039700074E158CF61E081E0A8CF65E082E090CFAC -:1039800068E086E08DCF64E18FE08ACF67E185E172 -:1039900087CF62E289E184CF61E083E296CF0B3585 -:1039A0009DE5190701F10C351D4509F055C38091BE -:1039B000050382FB882780F991E089270E94980EF1 -:1039C0004BC30E942816FFEF24E33CE0F150204057 -:1039D0003040E1F700C000000E944F0C0E94B1157A -:1039E00050CC81E0EBCF80E0E9CF82810081118172 -:1039F000882369F0C8010E94E50ED82E682FC801FF -:103A00000E94D50AB8018D2D0E94D80E2BC3C80183 -:103A10000E94AE0AD82EF6CF212F2F70C22E107F13 -:103A200019F0C29490EFC922DD20C9F0CC2069F0D2 -:103A300080E2800F883010F001110BC080914302AA -:103A4000C82AC09243020E94000A802F0E94730C71 -:103A500019C080914202C82AC0924202F4CF802F3E -:103A60000E944E0BCC2071F0C09480E2800F883011 -:103A700010F001113AC080914302C822C092430263 -:103A80000E94000AE92DE850FF0B349720F40E94B1 -:103A9000DA050E94AB0BAA20A9F08091400280FDBC -:103AA00011C0F70112828595859585950E94711543 -:103AB000C7010E94041980914002859585958595DE -:103AC0000E94441560E0C7010F900F900F900F9077 -:103AD000DF91CF911F910F91FF90EF90DF90CF90EA -:103AE000BF90AF909F900C945B0F80914202C822D0 -:103AF000C0924202C5CF312F3F70B32E107F1032DB -:103B000019F0B29480EFB822002369F0013081F1FE -:103B1000DD20D9F1CC2091F1F701858180FF95CF8F -:103B20008F7085832BC0DD20B1F0909144028B2DE6 -:103B3000892BC11003C00E94440BA4CFE1E0CE1238 -:103B4000FACF2091050322FD9DCF891709F49ACF62 -:103B50008093440297CFC11006C00E94FA098B2DB2 -:103B60000E94390B8FCFF1E0CF1609F48BCFF5CF40 -:103B7000DD2031F025E02C1508F484CF8B2DDBCF30 -:103B800034E03C1508F47ECFEACFCC2041F3093372 -:103B900049F4FFEF27EE33E0F15020403040E1F7E9 -:103BA00000C00000802F0E944E0B6CCF812F8695A5 -:103BB0008695837061F0813009F064CFC8019370FD -:103BC000D11002C090E080E00E94AE055BCFC8013A -:103BD0009370D11002C090E080E00E94C40552CFE3 -:103BE000802FDD2029F00E94BC070E94DA064ACF10 -:103BF0000E940107FACF812F837009F03FC0D110D6 -:103C000041CF402F429546954770440F440F802F77 -:103C10008F7090E0042E02C0880F991F0A94E2F77B -:103C200030E020E004FF09C02FE030E002C0220FA6 -:103C3000331F4A95E2F72095309516951695137027 -:103C4000123099F078F440914502509146021130BB -:103C500039F0822B932B842395230E941E0B12CFC5 -:103C6000842B952B822B932BF8CF822B932B209197 -:103C700045023091460282279327EFCF8695DD20BB -:103C800011F0812F8170882309F4FCCE402F4295DA -:103C900046954770440F440F802F8F7090E0042E9C -:103CA00002C0880F991F0A94E2F730E020E004FF79 -:103CB00009C02FE030E002C0220F331F4A95E2F71F -:103CC00020953095169516951370123099F078F46A -:103CD0004091380350913903113039F0822B932BE6 -:103CE000842395230E942D15CDCE842B952B822BDA -:103CF000932BF8CF822B932B2091380330913903EB -:103D000082279327EFCF1F70DD2029F0812F0E949B -:103D10007115802F10CF802F0E94390B812F0E94A8 -:103D20004415B0CE023F09F441C060F4003F11F1E8 -:103D3000013FA1F1DD2009F457C0C11086CE812FCB -:103D40008F7131C0033FB9F1043FA1F7DD2009F4C1 -:103D500040C01F71812F0E9471158091050382FD63 -:103D600007C0E8E01E9FC0011124836080934002D9 -:103D7000812F19C0DD2069F084E08C1508F482CE13 -:103D80001F7181E090E002C0880F991F1A95E2F739 -:103D9000B3CF95E09C1508F475CEF2CF812F8F71CB -:103DA000DD2009F4BCCF0E9471156CCE812F8F717C -:103DB000DD20C9F3B4CF90E080E0DD2009F492CF9C -:103DC0001F7181E090E002C0880F991F1A95E2F7F9 -:103DD00089CF81E00E945515F1E0FC1508F052CE24 -:103DE00082E00E9455154ECECC2059F0093309F0DF -:103DF000D9CE2FEF37EE83E0215030408040E1F7FD -:103E0000CFCE812F8F718BCF00313FE5130709F49F -:103E1000D1CA01319FE51907A9F482E0CCCA61E05B -:103E2000C7010E945B0F8C01F7018281811117CAC3 -:103E30000031FFE51F0709F4C3CA01312FE512075E -:103E400009F4C2CA0238EFE51E0709F425CB08F0D1 -:103E5000BDCA00382FE5120709F4EBCA01383FE567 -:103E6000130709F4FCCAF7018281882369F0C801AD -:103E7000815E9C45059740F46FE1600F60935002AE -:103E80008CE090E00E94852F17FF8FCBF701828195 -:103E9000882309F459C00E94DA05869581708093C1 -:103EA000E80190915002913029F4882319F089E3B8 -:103EB0000E94280D809143028093E70110924302F3 -:103EC00080915002813009F443CB882309F43CCB24 -:103ED000823009F44ACB843009F44ECB8FE39CE95D -:103EE0000197F1F700C000005801E894B7F84CE0E2 -:103EF000C42ED12CC5010C2C02C0969587950A942E -:103F0000E2F78F7096EF980F963008F43ACB805D09 -:103F10000E94A90D94E0C91AD108ECEFCE16EFEF7C -:103F2000DE0641F780915002813009F430CB8823BE -:103F300009F429CB823009F426CB843009F433CB41 -:103F40008091E70180934302F7018281882309F47D -:103F500046C0109295030230FCE51F0708F44AC0E2 -:103F600006312CE5120738F098012A5F3C452930CC -:103F7000310508F03FC00E94B40F90930503809371 -:103F8000040300313CE5130709F4F6CB08F084CBB9 -:103F900008309CE5190709F4E5CB08F053CB043051 -:103FA000FCE51F0709F4D6CB08F039CB02303CE51D -:103FB000130709F4C5CB03301C4509F4C7CB609146 -:103FC00004031091050384E090E00E94852F612F87 -:103FD00082E290E00E94852F0E94281652C9063185 -:103FE0001C45D1F58091E90181110CCC89E20E9438 -:103FF000450A03CC06312CE5120709F4EECB80917B -:10400000430282720C3C9CE5190709F4AECC08F01F -:104010002ECC063CFCE51F0709F493CC08F005CC38 -:10402000033C3CE5130709F482CC08F0EDCB023CDD -:10403000ECE51E0709F456CC0A35FDE51F0709F427 -:10404000D0CC08F0ACCC01153CE5130709F4B9CC91 -:104050000E3D1C4509F4C2CCF7018681978100977B -:1040600009F4C3CC0E9472088C01F701D280C5808C -:10407000C2943FE0C322809140028770A1F0AD2C32 -:10408000DD2091F0812F807F803421F080E2800F4D -:10409000883048F082E00E94551580914002877078 -:1040A000AA24A3948111A12C912E92942FE0922204 -:1040B000FBE0F91508F4E6CCE92DF0E0ED52F04D07 -:1040C0000C94042FCF93DF938091FB01807FA1F4A8 -:1040D0008091F801882381F080913F02D091FE0108 -:1040E0006091F6017091F701A091F901B091FA0188 -:1040F000C62FC723D81303C0DF91CF91089590E056 -:10410000109711F0CF3F19F401968770F3CF9C01FF -:1041100043E0220F331F4A95E1F7F901E150FE4FCA -:1041200041814713F1CF40814613EECF42814111C7 -:10413000EBCF438154814A1B5B0B483C510520F770 -:104140008091FB018F7080618093FB01F901EC5F2E -:10415000FD4F80818F708061808386EF91E00E94A7 -:104160000419DF91CF910C94A40AAF92BF92CF9221 -:10417000DF92EF92FF920F931F93CF93DF93CDB710 -:10418000DEB765970FB6F894DEBF0FBECDBF8C01CA -:1041900085E0F801DE01519601900D928A95E1F7D4 -:1041A000F801E28066EFA62E61E0B62E6091F9017B -:1041B0007091FA016115710509F468C19091F601D9 -:1041C0004091F701892F84238F3F09F45FC120813B -:1041D0003181C380D480F090F801F601E61BF70B23 -:1041E000FF2009F41DC18091FB01582F507FE83C4E -:1041F000F10508F0D0C0511181C0FE2C43132BC033 -:10420000921329C06091FC017091FD01F801468173 -:10421000578164177507F9F4E1101DC08F70806134 -:104220008093FB01C5010E9404198091FB01F801F4 -:1042300085838F2D65960FB6F894DEBF0FBECDBF78 -:10424000DF91CF911F910F91FF90EF90DF90CF9072 -:10425000BF90AF900895CD2829F0822F83238F3F00 -:1042600009F02FC180E0F82FF170DF2E80FF3CC0F5 -:1042700080913F024091FE01841315C0298B3A8B37 -:1042800089899A890E94210F292F22952F70223027 -:10429000F8F0243020F59F70F9F0F8019581907FB7 -:1042A000D9F4D12C1FC090E0FC0153E0EE0FFF1FAA -:1042B0005A95E1F7E150FE4F5181351306C0508108 -:1042C000251303C05281E5120FC001968770D4CF29 -:1042D0009F7011F0882329F3805E883010F3C801A5 -:1042E0000E940419FD2CA5CFEE2009F4A2CF8091E5 -:1042F000FB0181608093FB01F12C9BCF43131BC01A -:10430000921319C04091FC015091FD01F8012681E2 -:1043100037814217530779F4E1100DC08583C80136 -:104320000E94041988E0F801A6EFB1E001900D9217 -:104330008A95E1F77ECFC8010E942D0F882339F1BD -:10434000EE2029F18091FB018032A0F02091F6014E -:104350003091F7013A8729871B86DD86CC868E87C8 -:104360008091FC019091FD01988B8F87CE01099679 -:104370000E94041988E0F801A6EFB1E001900D92C7 -:104380008A95E1F70E946220FF24F39452CFC8017E -:104390000E940419F9CF51110AC086EF91E00E94E2 -:1043A000041988E0F50111928A95E9F7A5CF431326 -:1043B00018C0921316C04091FC015091FD01F80104 -:1043C000268137814217530761F4E1100AC08583C3 -:1043D000C8010E94041988E0F50111928A95E9F755 -:1043E00028CFC8010E942D0F882389F2EE2079F290 -:1043F0008091FB01803208F4BDCF2091F60130910D -:10440000F7013A8329831B82DD82CC828E838091DF -:10441000FC019091FD0198878F83CE010196A8CF72 -:10442000E83CF105C0F6FE2CEE2009F4B0CF4313B2 -:104430001FC092131DC02091FC013091FD01F801B5 -:10444000868197812817390799F49091FB0190FD97 -:1044500069CF907F09F466CF8091FB018583903FFF -:1044600009F45DCF982F907F905F8F70892B56CF86 -:10447000C8010E942D0F81117DCF8091FB018160C9 -:104480008093FB01C8010E940419D3CEEE2009F4E9 -:104490007ECFC8010E942D0FF82E882309F477CF14 -:1044A00088E0F801A6EFB1E001900D928A95E1F75E -:1044B0008091F6019091F7010E94210F0E946220E5 -:1044C000B8CE81E08E25CFCECF93DF93CDB7DEB7C8 -:1044D00060970FB6F894DEBF0FBECDBF29873A872D -:1044E0004B875C876D877E878F87988BCE01099677 -:1044F0000E94B520811112C088E0FE013996DE01CC -:10450000119601900D928A95E1F78C859D85892BF6 -:1045100029F089859A8589238F3FA9F580913F02EB -:104520009091FE0189131CC060960FB6F894DEBF0F -:104530000FBECDBFDF91CF91089593E0AA0FBB1FAF -:104540009A95E1F7A150BE4F98E0FE013196019097 -:104550000D929A95E1F78093FE010E94A40ADECFA6 -:10456000B8E08B9FC001112481509E4F0E94B5205E -:104570008823D1F280913F0290E0019687709927BD -:1045800080933F02CBCFA091FE01B0E0CD01019618 -:104590008770992720913F022817190671F60E940B -:1045A00028161092FE0110923F0288E0E6EFF1E03B -:1045B000DF011D928A95E9F7B1CF0F931F93CF9337 -:1045C000DF9380918C02E0918B02CCE081111AC0C4 -:1045D000DF91CF911F910F910895D1E0DE0FD0931D -:1045E0008B020E2F10E0EC9FF0011124E357FD4FDA -:1045F00083819481892B29F08081918189238F3F48 -:1046000051F4ED2F80918C02E81738F310928C0250 -:1046100010928B02DDCFC09FD001C19FB00D11243D -:10462000A357BD4F16968D919C911797892B29F40E -:1046300018968D919C91019651F42081318142818F -:10464000538164817581868197810E946422C09F15 -:10465000F001C19FF00D1124E357FD4F1482138226 -:10466000D0CF1092F8021092F7021092420180917E -:10467000F6028093F5020E9414060C94DD222F921C -:104680003F924F925F926F927F928F929F92AF92E2 -:10469000BF92CF92DF92EF92FF920F931F93CF932F -:1046A000DF93C091F502E7E0FE2E01E010E0FCE0B0 -:1046B0002F2EAEEFEA2E8091F6028C1316C00E94C8 -:1046C000DD22DF91CF911F910F91FF90EF90DF904E -:1046D000CF90BF90AF909F908F907F906F905F90A2 -:1046E0004F903F902F900C941406D0E0FE01EE0FF7 -:1046F000FF1FE351FD4F80819181F89EF001F99EEB -:10470000F00D1124E85EFE4F2481211158C0309035 -:104710008C02ADE8B2E030E020E0412C5F012315CF -:1047200008F04BC01A966D907C901B97F501808025 -:1047300091804FEF5FEF512CC52CD12CF601EE0F7D -:10474000FF1FE80DF91D659174916616770609F44F -:10475000A601672B11F05394EFCF4F3F5407B1F1EF -:10476000B80102C0660F771F4A95E2F7462AA801F2 -:1047700002C0440F551F5A94E2F7415051094416A4 -:10478000150601F5229EF001239EF00D1124E3573A -:10479000FD4FF89ED001F99EB00D1124A85EBE4FCA -:1047A00012962D913C91139737832683E082E18204 -:1047B0009187808771E015967C930E94E60521968B -:1047C000C37079CF14961C921E9213972F5F3F4FA0 -:1047D0001C96A5CF9F92AF92BF92CF92DF92EF929D -:1047E000FF920F931F93CF93DF9300D000D000D0A0 -:1047F000CDB7DEB78E010F5F1F4F86E0F801119233 -:104800008A95E9F785E7C82E81E0D82EF12CE12CB6 -:10481000AA24A394B12CF60181916F018F3F09F472 -:1048200049C0F894E82FE295EF70F0E021A18F7075 -:10483000A50102C0440F551F8A95E2F7CA01922FC5 -:10484000982B91A392A18095892382A3789400C08C -:10485000EBE7F1E030E020E0912C41914F3F09F48B -:1048600073C0A42FA295AF70B0E090968C9190E0A9 -:104870004F7002C0959587954A95E2F780FD64C018 -:104880008A2D022E01C0880F0A94EAF7982A2F5F1A -:104890003F4F2430310509F7F601319780818F3F72 -:1048A00011F00E94180850EA5A95F1F7F801EE0D40 -:1048B000FF1D90828FEFE81AF80AE6E0EE16F10489 -:1048C00009F0A9CF46E050E0B80184E592E00E94EB -:1048D000642FFF24F394009709F4F12C892BB1F194 -:1048E00086E0F801A4E5B2E001900D928A95E1F727 -:1048F00081E0809349020E94A20590934802809330 -:10490000470280914702909148020E9493050597C3 -:1049100008F1809154028093670280915502809340 -:1049200068028091560280936902809157028093B9 -:104930006A028091580280936B02809159028093A1 -:104940006C021092490206C080E0A0CF809149021B -:104950008111D7CF80914201882301F18091F70224 -:104960009091F8020097D1F00E949305209189025E -:1049700030918A022817390788F49091F5028091C6 -:10498000F602981709F445C00E943F2310928A024C -:10499000109289021092F8021092F70280914F0251 -:1049A000882371F080914D0290914E020E949305F0 -:1049B000893E934028F082EE0E944E0B10924F02E7 -:1049C00080914C02882391F080914A0290914B0291 -:1049D0000E949305883E934048F00E94A205909360 -:1049E0004B0280934A0283E70E94280D8F2D269662 -:1049F0000FB6F894DEBF0FBECDBFDF91CF911F91F0 -:104A00000F91FF90EF90DF90CF90BF90AF909F906D -:104A100008950E94DD221092F8021092F7020E947F -:104A20001406BCCF2F923F924F925F926F927F926B -:104A30008F929F92AF92BF92CF92DF92EF92FF92AE -:104A40000F931F93CF93DF93CDB7DEB769970FB660 -:104A5000F894DEBF0FBECDBF498B5A8B6B8B7C8B1E -:104A60008D8B6111109242021D861E861F86188A48 -:104A700085E0FE017196DE01199601900D928A95EE -:104A8000E1F78C859D85892B31F089859A8589236D -:104A90008F3F09F0D4C129853A854B855C856D85AA -:104AA0007E858F8598890E946422C3C028EFC21634 -:104AB0002CE5D20629F4882379F00E943123EBCF2C -:104AC00039EFC3163CE5D30639F4882329F08091E9 -:104AD00042018111F2CFC3C108E111E0E12CB12CF8 -:104AE000A12C88248394912C9EEF592E4424439426 -:104AF000F8016081718166246A94762C20E0422F4F -:104B000050E0FA01EE0FFF1FE60FF71F8591949119 -:104B1000C816D90609F43A01892B11F02F5FEFCF9F -:104B2000F12CFFEF6F167F0609F445C0F8014481B0 -:104B3000F09042018F2D411180E0F82FF170FF2E8F -:104B4000F801258086819B85992309F408C1FF20FF -:104B500009F405C1211014C0A40101C0440F6A94D6 -:104B6000EAF7842B86838091890290918A028039AA -:104B7000914030F440E951E050938A024093890219 -:104B8000C40102C0880F991F2A95E2F70197F80126 -:104B900026812817190679F48091F7029091F8027E -:104BA000009709F45FC00E9493058139914008F491 -:104BB00059C0F8014482EF28FFEFAF1ABF0A095F1E -:104BC0001F4F26E0A216B10409F092CF8B858823EF -:104BD00009F420C1EE2009F41DC10E94A2059093A2 -:104BE000F8028093F70280918C02883010F591E0F2 -:104BF000980F90938C0298E0FE013996DE01119691 -:104C000001900D929A95E1F73CE0839FC001112439 -:104C100083579D4F28E0FE013196DC0101900D92F3 -:104C20002A95E1F72FEF3FEFFC0131872087D386EC -:104C3000C28669960FB6F894DEBF0FBECDBFDF9176 -:104C4000CF911F910F91FF90EF90DF90CF90BF9089 -:104C5000AF909F908F907F906F905F904F903F901C -:104C60002F9008958091F5026090F602982FF0E061 -:104C7000E0E0861114C09093F5020E171F0709F4A7 -:104C80009ACF90E0FC01EE0FFF1FE351FD4FB18280 -:104C9000A0820196837099278093F6028CCF282EEC -:104CA000312CF101EE0FFF1FE351FD4F20813181C7 -:104CB000F7E0F29FD001F39FB00D1124A85EBE4F24 -:104CC0002D913C911197398F288F712C60E070E005 -:104CD000E72FF0E0EE0FFF1F288D398DE20FF31F55 -:104CE0002591349121153105E1F0F8010190F08111 -:104CF000E02DFF8BEE8B60E005C02417350709F42B -:104D00007F2C6F5FE62FF0E0EE0FFF1F4E895F896B -:104D1000E40FF51F459154914115510571F77F5FDF -:104D2000D7CF7720C9F0F801671708F0FD0144825A -:104D30000E171F0721F49093F502F72C3CCF981320 -:104D400005C0AE17BF0711F49F5F937091012F5FED -:104D50003F4F822F83708DCFF0E0E0E0F7CF90E0FF -:104D600021101FC0B40102C0660F771F2A95E2F719 -:104D70009B01215031092817390731F4442309F4E4 -:104D800047C0C5010E94E605C40101C0880F6A94AE -:104D9000EAF7982F9095F801868189238683F22C73 -:104DA0000ACF9C01062C02C0359527950A94E2F79C -:104DB000A90141705527BC016150710986239723D1 -:104DC000892B11F5452B01F1F80182819381892B03 -:104DD000C1F01B821C821D821E8259825A820E944F -:104DE000A2058160582F9D838C83F8018281938175 -:104DF0008F83988729813A814B816D817E810E94C2 -:104E00006422F8011582C0CFF22FF1702F2EBCCF93 -:104E10002F2CBACF9091F5028091F602981731F0BD -:104E20000E943F23EE2009F436CE03CF0E94DD22FC -:104E30001092F8021092F7020E941406F3CF61E07C -:104E4000CE0109960E945B0F6C018B85F7EFCF16A0 -:104E5000FCE5DF0609F02ACE882309F43DCE81E087 -:104E60008093420118CE1F920F920FB60F92112419 -:104E70002F933F934F935F936F937F938F939F9362 -:104E8000AF93BF93CF93DF93EF93FF93D091E9005C -:104E9000DF708091EC00C82FC17080FDC0E81092D7 -:104EA000E9008091F000877F8093F00078940E9461 -:104EB0003D161092E9008091F00088608093F00028 -:104EC000CD2BCF70C093E900FF91EF91DF91CF918F -:104ED000BF91AF919F918F917F916F915F914F9112 -:104EE0003F912F910F900FBE0F901F9018951F921A -:104EF0000F920FB60F9211242F933F934F935F930E -:104F00006F937F938F939F93AF93BF93EF93FF9391 -:104F10008091E10082FF09C08091E20082FF05C01C -:104F20008091E1008B7F8093E1008091DA0080FF27 -:104F300024C08091D80080FF20C08091DA008E7F4D -:104F40008093DA008091D90080FF9BC080E189BD09 -:104F500082E189BD09B400FEFDCF81E080932E037C -:104F600080910903811109C00E9406040E94D104A6 -:104F70008091E20084608093E2008091E10080FFF4 -:104F800017C08091E20080FF13C08091E2008E7F05 -:104F90008093E2008091E20080618093E200809142 -:104FA000D80080628093D80019BC85E080932E03DE -:104FB0008091E10084FF29C08091E20084FF25C038 -:104FC00080E189BD82E189BD89B5982F917080FF0C -:104FD000FBCF8091D8008F7D8093D8008091E10035 -:104FE0008F7E8093E1008091E2008F7E8093E200CB -:104FF0008091E20081608093E20080912F038823FA -:1050000009F445C084E080932E038091E10083FF82 -:1050100027C08091E20083FF23C08091E100877F59 -:105020008093E10082E080932E0310922F03809101 -:10503000E1008E7F8093E1008091E2008E7F80937B -:10504000E2008091E20080618093E20042E060E053 -:1050500080E00E949F048091F00088608093F000BF -:10506000FF91EF91BF91AF919F918F917F916F9140 -:105070005F914F913F912F910F900FBE0F901F9016 -:10508000189519BC10922E031092090376CF8091C7 -:10509000E30087FD93E090932E03B7CF78941F929F -:1050A0001FB61F9211248F939F93AF93BF9380914C -:1050B000000390910103A0910203B09103030196B4 -:1050C000A11DB11D8093000390930103A0930203DF -:1050D000B0930303BF91AF919F918F911F901FBE1B -:1050E0001F9018951F921FB61F9211248F939F93A4 -:1050F000AF93BF938091FF02811113C08091000391 -:1051000090910103A0910203B09103034196A11D68 -:10511000B11D8093000390930103A0930203B09309 -:105120000303BF91AF919F918F911F901FBE1F905E -:105130001895CDB7DEB7EE970FB6F894DEBF0FBE69 -:10514000CDBF84B7877F84BF0FB6F894A8958091B0 -:105150006000886180936000109260000FBE80E85C -:1051600090E00FB6F89480936100909361000FBEB9 -:1051700085B7806885BF85B7806885BF86E198E080 -:105180009093C5018093C4010E9406040E94D1043B -:105190008091E20084608093E200789480912E03F5 -:1051A0008823A1F01091E9001F709091EC00892FE5 -:1051B000817090FD80E8182B1092E9008091E80042 -:1051C00083FD0E943D161F701093E90082E084BDAC -:1051D00093E095BD9AEF97BD80936E000E949B0F60 -:1051E000811102C00E94890E05E711E02BE7C22E53 -:1051F00021E0D22EF80181918F018F3F11F00E94A2 -:105200001808C016D106B1F786EF0E94180887EF7C -:105210000E94180883E90E94180886E90E9418086D -:10522000E4E5F2E08AE592E0A7E6B2E011921D9291 -:105230008E179F07D9F70E941D16811102C00E9488 -:10524000B11582E090E00E94712F809360020E946D -:10525000B40F90930503809304030E94EA238FE325 -:105260009CE90197F1F700C000000E94EA238091B9 -:10527000670280FF08C06FEF7FEF90E080E00E9440 -:10528000A32F0E944F0C83E090E00E94712F90E0CA -:105290000E941E0B80913803909139030E9489145B -:1052A000509A589A559A5D9A549A5C9A8CE090E07C -:1052B0000E94712F90E0B0E0A0E0809350029093A4 -:1052C0005102A0935202B093530280915A0281116D -:1052D00033C00E941D16811104C00E94B1150E94A6 -:1052E000A11588E090E00E94792F60938E0370935F -:1052F0008F0380939003909391036E7F71F40E94CB -:10530000A11588E090E00E94792F60938E0370933E -:105310008F0380939003909391030E942B06109229 -:10532000840280918E0380FF04C060E086950E9415 -:105330002A1481E080935A025198599A52985A9AA5 -:1053400089B1869581704A9928C290E0892B809313 -:105350005E028AEC92E090937C0280937B0260E094 -:1053600081E20E942A1481E090E00E942D1580E0E5 -:1053700091E09093FC028093FB0218E1C12ED12CA6 -:1053800000E4A02E87E692E096E0B92EB80E809158 -:105390002E039924939400E112E1853009F451C25F -:1053A0000E94EA23882359F08FB7F89440910003B4 -:1053B0005091010360910203709103038FBFE1E6F6 -:1053C000F2E0A7E6B2E010E000E0302F8D9191917D -:1053D000981709F45FC2292F282790E09924939405 -:1053E000422F492109F451C29DAB3EAB892191E086 -:1053F00009F490E09FAB0E94A2058160782F99AFDD -:1054000088AF4DA95EA96FA989AD0E941225F80148 -:10541000EF59FD4F808198269082809184028823E5 -:10542000D1F180918302E0918E03E695E81BE09331 -:105430007F02823009F045C2F0E0EC51FD4FE4916B -:105440000E2F10E0BBE08B2EB3E19B2E80918002EB -:10545000882361F0109280020E94A20590937E0240 -:1054600080937D0210928202109281020E94A20516 -:10547000E0917D02F0917E028E1B9F0B8F3F9F4734 -:1054800050F4E00FF11FF0937E02E0937D028DE770 -:1054900092E0F4010995E0915E02EE0FEE0FE093C9 -:1054A0005E0289B181FBEE24E0F84A9964C280E093 -:1054B0008E29E82BE0935E02EF70F0E0E158FE4F9A -:1054C000808190915D02890F80935D0220E084309D -:1054D00034F180915C028F5F80935C0212E018AB24 -:1054E00019AA81E08AAB0E94A2058160782F9CAB4B -:1054F0008BAB48A959A96AA98CA90E9412251BA7A0 -:105500001CA61DA60E94A2058160782F9FA78EA7CA -:105510004BA55CA56DA58FA50E94122521E0809169 -:105520005D028D3F2CF580915C02815080935C027E -:105530001EA21FA281E088A70E94A2058160782F89 -:105540009AA789A74EA15FA168A58AA50E941225E6 -:1055500019A21AA21BA20E94A2058160782F9DA306 -:105560008CA349A15AA16BA18DA10E94122521E013 -:1055700080915D02082E000C990B64E070E00E949F -:10558000CE2E80935D02222359F08FB7F89440917C -:1055900000035091010360910203709103038FBFD8 -:1055A00086E0E4E7F2E0DE01119601900D928A9523 -:1055B000E1F7909076028090770210917802009146 -:1055C000790210927602109277021092780210926D -:1055D0007902892D882909F448C08091720290913E -:1055E00073020E9493059C0190916E02992309F425 -:1055F000AEC323333105C8F19F3F19F09F5F9093ED -:105600006E02992059F00E949C079FEF19140CF428 -:1056100091E0899F802D112480937602882059F093 -:105620000E949C079FEF18140CF491E0899F802D35 -:10563000112480937702309176023323B1F02091C8 -:105640007702222391F045EB3403C0011124992302 -:1056500009F494C19093760245EB24039001112440 -:10566000332309F48FC130937702812F802B09F403 -:1056700048C080917002909171020E9493059C0134 -:1056800090916D02992309F45DC325363105C8F167 -:105690009F3F19F09F5F90936D02112359F00E9474 -:1056A0007A079FEF11160CF491E0899F802D112449 -:1056B00080937802002359F00E947A079FEF10161A -:1056C0000CF491E0899F802D112480937902309110 -:1056D00078023323B1F020917902222391F045EB37 -:1056E0003403C0011124992309F450C19093780226 -:1056F00045EB240390011124332309F44BC130936B -:1057000079028091760290917702892B90917802AC -:10571000892B90917902892B11F00E94DA0686E09C -:10572000FE013196A4E7B2E001900D928A95E1F76F -:105730000E94DA0590915F02891731F00E94DA0524 -:1057400080935F020E94AB0B80912E03843009F09E -:105750001ECE83E08093E9008091E80082FF17CE9F -:105760008091E80090E085FF06C00E942504882310 -:1057700009F414C191E08091E8008B778093E800F0 -:10578000992309F404CEE981E150E33108F088C19E -:10579000F0E0E152F04D0C94042F92E0D7CD8091CF -:1057A0002E03843009F440C080E00E94AB0B1092BD -:1057B000840280917A02811116C090927A028091BF -:1057C0008E03982F917090935B028E7F80938E034F -:1057D0009FEFE0E7F2E09150E040F040E1F700C0D9 -:1057E00000000E94D80F1092FF020FB6F894A895FF -:1057F000C09260000FBEA092600083B7817F84607A -:1058000083BF83B7816083BF7894889583B78E7F89 -:1058100083BF0FB6F894A89580916000886180934B -:105820006000109260000FBE80912D03882349F024 -:105830000E94EA23E7E6F2E08191811164C2BE1280 -:10584000FBCF80912E03853009F4A9CF0E94281642 -:105850000E94DA050E94AB0B10927A0280915B02E3 -:10586000882361F080918E03816080938E0360E0D5 -:1058700086950E942A140E94C20F92CD80918502C3 -:105880008823C9F30E94D80FF6CF9F5F990C9430FC -:1058900009F0A6CD0F5F1F4F0630110509F095CD19 -:1058A0008FEF8AAF8BAF1CAE0E94A2058160782F6C -:1058B0009EAF8DAF4AAD5BAD6CAD8EAD0E94122533 -:1058C000ACCD863059F4F0E0EF51FD4FE4910E2F4E -:1058D00010E0ABEF8A2EA2E19A2EB8CD893061F4A8 -:1058E000E695F0E0E252FD4FE4910E2F10E0F7E66E -:1058F0008F2EF2E19F2EAACD8F3061F4E695F0E075 -:10590000E552FD4FE4910E2F10E0E9EF8E2EE1E11C -:105910009E2E9CCD853159F4F0E0E852FD4FE49184 -:105920000E2F10E07BEA872E71E1972E8FCD08E2D3 -:1059300010E042E2842E41E1942E883109F486CDB4 -:10594000833249F4E6EDF2E00591149162EA862E85 -:1059500062E1962E7BCD04EF11E059EE852E50E1E9 -:10596000952E843209F472CD00ED17E03AE2832ED1 -:1059700036E0932E6BCD82E090E09ACD81E080936B -:1059800076026ACE81E0809377026FCE81E08093C9 -:105990007802AECE81E080937902B3CE00E210E0CF -:1059A000CE0101964C018091E80085FD0AC08091EE -:1059B000E8008B778093E8000E942504882399F300 -:1059C000D9CE8091F100F40181934F01015011096A -:1059D00051F7D0CE1A8289E08B832DC08A81823024 -:1059E00009F4A7C18330A9F0813009F059C02FB75D -:1059F000F8946091000370910103809102039091EB -:105A000003032FBF0E940A2F6B837C838D839E83A9 -:105A100012C0809167028B83809168028C83809191 -:105A200069028D8380916A028E8380916B028F83DD -:105A300080916C02888780912E03843009F0A7CC76 -:105A40001091E9001F709091EC00892F817090FDFA -:105A500080E8182B82E08093E9008091E80080FFC5 -:105A60000DC050E040E060E270E0CE0101960E947F -:105A700056048091E8008E778093E8001F701093A1 -:105A8000E90085CC8A81823059F46B817C818D81DB -:105A90009E810E940A2F86E290E00E94852FCBCF44 -:105AA0008FEF8983C8CF4C816B818A810E94B20EAF -:105AB0009827892798279E838D83BDCF8D809E80D0 -:105AC0009824892498248A810B81F8E00F9F800113 -:105AD000112420E3829F000D111D11248C8190E080 -:105AE000880F991F080F191F692DC80187960E94FA -:105AF000852F682DC8018896D0CF0E941F0E9BCF9E -:105B00008A818138C1F060F4803809F094CF20E0B8 -:105B10004B816091900380918F030E9431138BCF52 -:105B2000823859F1833809F086CF20E04091910303 -:105B30006C818B81F2CF60E08B810E942A149B8163 -:105B400080918E03911111C08E7F80938E031092ED -:105B500084024FEF80E792E0415080409040E1F7AF -:105B600000C000000E94D80F66CF816080938E0332 -:105B700060E086950E942A145ECF8B818093920309 -:105B80005ACF8A81813899F030F4803809F053CFA8 -:105B90008091910321CF823891F0833809F04BCF67 -:105BA00080918F038B83809190038C8344CF80916D -:105BB0008E0380FF02C086950FCF80E00DCF8091CD -:105BC00092030ACF60918E0370918F0380919003AE -:105BD000909191030E941F132ECF80E18A832BCFD7 -:105BE00081E08A8389EFF8CE0A811B811027012783 -:105BF0001027FE0131963F018C80CF01880D911D49 -:105C00004C01C801895F9D4F8614970409F413CF96 -:105C1000093FE1E01E0750F40E94712FF3018483D5 -:105C20000F5F1F4FFFEF6F1A7F0AEBCFF301148254 -:105C3000F7CF0A811B81102701271027CE0101967B -:105C40003C018C80800E912E911CC801895F9D4F74 -:105C50008016910609F4EFCE093FE1E01E0720F41B -:105C6000F30164810E94852FFFEF6F1A7F0A0F5F97 -:105C70001F4FEBCF0E940F0EDECE8AE0AFCF0A811E -:105C80001B81102701271027CE0101963C018C8033 -:105C9000FC01E80DF11D4F01C80187968614970499 -:105CA00009F4C9CE003EF1E01F0750F40E94712FA5 -:105CB000F30184830F5F1F4FFFEF6F1A7F0AECCF52 -:105CC000F3011482F7CF0A811B81102701271027C7 -:105CD000CE0101963C018C80800E912E911CC80152 -:105CE00087968016910609F4A6CE003EE1E01E07D5 -:105CF00020F4F30164810E94852FFFEF6F1A7F0A61 -:105D00000F5F1F4FECCF09BD19BD09B400FEFDCFD9 -:105D10008091D8008F7D8093D8008091E0008260D0 -:105D20008093E0008091E00081FDFCCF0E94281666 -:105D300088CD86E290E00E94712F1B821C821D821A -:105D40008E8379CE2D32314008F0A4CCDACC2D32BE -:105D5000314008F053CC89CC87FB082E062687FDFE -:105D6000819567FD61950E94422F0EF4919507FC85 -:105D700081950895AA1BBB1B51E107C0AA1FBB1F39 -:105D8000A617B70710F0A61BB70B881F991F5A95C7 -:105D9000A9F780959095BC01CD01089597FB072E3A -:105DA00016F4009407D077FD09D00E94BA2E07FCA4 -:105DB00005D03EF4909581959F4F0895709561951B -:105DC0007F4F0895A1E21A2EAA1BBB1BFD010DC037 -:105DD000AA1FBB1FEE1FFF1FA217B307E407F5079B -:105DE00020F0A21BB30BE40BF50B661F771F881F77 -:105DF000991F1A9469F760957095809590959B010D -:105E0000AC01BD01CF010895EE0FFF1F0590F49185 -:105E1000E02D09946927962769277827872778270F -:105E200008950E94192F332312F48A1B9B0B0C94A4 -:105E30002A2FA29FB001B39FC001A39F700D811DA7 -:105E40001124911DB29F700D811D1124911D089583 -:105E50000E94192FB7FF0895821B930B08950E948B -:105E6000192FA59F900DB49F900DA49F800D911D9B -:105E700011240895B7FF0C942F2F0E942F2F821BFF -:105E8000930B0895991B79E004C0991F961708F0A9 -:105E9000961B881F7A95C9F780950895FB01DC0150 -:105EA00002C005900D9241505040D8F70895FC0172 -:105EB0004150504030F001900616D1F73197CF0194 -:105EC0000895882799270895FB01DC0104C08D916E -:105ED0000190801921F441505040C8F7881B990B5C -:105EE0000895F999FECF92BD81BDF89A992780B5A2 -:105EF0000895A6E1B0E044E050E00C94AB2FA8E197 -:105F0000B0E042E050E00C94AB2F262FF999FECF81 -:105F100092BD81BDF89A019700B4021639F01FBAFC -:105F200020BD0FB6F894FA9AF99A0FBE0895039619 -:105F3000272F0E94862F0E94852F252F0E94862FB3 -:105F4000242F0C94862F0196272F0E94862F0C94C5 -:105F5000852FDC01CB01FC01F999FECF06C0F2BD13 -:105F6000E1BDF89A319600B40D9241505040B8F717 -:105F70000895F894FFCF460F460F4F0F4F0F510F64 -:105F80004F0F4F0F4F0F460F460F560F4F0F4F0F2C -:105F9000560F22174A179D174A179D177D17B517D9 -:105FA0009D17B218BF180C1D0C1D7B1D7B1DD61D27 -:105FB000F01D421D421DFB1D831E921E921EEA2CE7 -:105FC000EE2C422D532D5E2D7D2D802DC12DE22DE9 -:105FD000502D502DED2DF02DF42D192E3A2E3D2E55 -:045FE0003F2E632EBF -:105FE40090050F0CEE0BEA0BE60B01191A1B1C1D96 -:105FF4001E1F202122010201FC002A00000000F6DD -:10600400004C00000000F0005000000000EA0051C5 -:1060140000000000E4004F00000000DE0052000019 -:1060240000000101818283E200E900EA00B500B6C4 -:1060340000B700CD008301CC008A019201940121B4 -:1060440002230224022502260227022A02B300B4F4 -:10605400006F007000F03435366667F6F7939600EB -:10606400FF0100010000FFFF0000010001FF00002C -:1060740001020202020606060909090909090F0FAD -:106084000F0F0F0F151515181919191919191919B1 -:10609400191923244022B6DA01B8010201FB0614BF -:0460A40007340700B6 -:00000001FF From f1af31c88e5454d636b358583361176ab5b5feb4 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Mon, 27 Sep 2021 01:03:14 -0400 Subject: [PATCH 027/155] Remove file with issues. --- .../ps17/solartempest_ps17_via.hex | 1549 ----------------- 1 file changed, 1549 deletions(-) delete mode 100644 keyboards/solartempest/ps17/solartempest_ps17_via.hex diff --git a/keyboards/solartempest/ps17/solartempest_ps17_via.hex b/keyboards/solartempest/ps17/solartempest_ps17_via.hex deleted file mode 100644 index b9d0957dd893..000000000000 --- a/keyboards/solartempest/ps17/solartempest_ps17_via.hex +++ /dev/null @@ -1,1549 +0,0 @@ -:100000000C94BD030C9404040C9404040C94040498 -:100010000C9404040C9404040C9404040C94040440 -:100020000C9404040C9404040C9477270C94332748 -:100030000C9472280C9404040C9404040C9404048E -:100040000C9404040C9404040C9404040C94040410 -:100050000C9404040C944E280C9404040C94040492 -:100060000C9404040C9404040C9404040C940404F0 -:100070000C9404040C9404040C9404040C940404E0 -:100080000C9404040C9404040C9404040C940404D0 -:100090000C9404040C9404040C9404040C940404C0 -:1000A0000C9404040C9404040C94040400000FFF4A -:1000B00078FF000000000000D7FF78FF000000007C -:1000C000000080FF64FF00000000000005FF78FFD3 -:1000D0000000000000005FFF5AFF00000000580011 -:1000E0006000000058005E00000058005D00000045 -:1000F00058005C00000057006000000057005F00DF -:10010000000005010902A10185020901A1000509FC -:1001100019012908150025019508750181020501BD -:10012000093009311581257F950275088106093846 -:100130001581257F950175088106050C0A38021581 -:1001400081257F950175088106C0C005010980A140 -:1001500001850319012AB700150126B7009501751D -:10016000108100C0050C0901A101850419012AA014 -:1001700002150126A002950175108100C005010934 -:1001800006A1018505050719E029E7150025019558 -:1001900008750181020507190029EF150025019551 -:1001A000F075018102050819012905950575019170 -:1001B00002950175039101C00660FF0961A1010963 -:1001C00062150026FF00952075088102096315005D -:1001D00026FF00952075089102C005010906A101BE -:1001E000050719E029E71500250195087501810229 -:1001F0009501750881010507190029FF150026FFE3 -:1002000000950675088100050819012905950575F1 -:10021000019102950175039101C0000000000000EA -:1002200000000000000000000000000000000000CE -:1002300000000000000000000000000000007E0F31 -:1002400000D4FFFFFFC7000000780000000000009E -:1002500000002A2B28000000000000000000000021 -:10026000000000000029000000002C1E3420212284 -:1002700024342627252E362D3738271E1F202122ED -:10028000232425263333362E37381F040506070866 -:10029000090A0B0C0D0E0F10111213141516171856 -:1002A000191A1B1C1D2F3130232D35040506070894 -:1002B000090A0B0C0D0E0F10111213141516171836 -:1002C000191A1B1C1D2F3130354CD400CA00C00038 -:1002D000B600AC00000000047F3F1F64321464329B -:1002E00014783C1E1E140A050001010101010101E0 -:1002F00001010202020202020202020303030303DB -:1003000003030304040404040404050505050506A9 -:100310000606060607070707070808080809090967 -:10032000090A0A0A0B0B0B0C0C0C0D0D0D0E0E0E10 -:100330000F0F0F10101111111212131314141515A1 -:1003400016161717181819191A1A1B1B1C1D1D1E13 -:100350001E1F202021222223242425262627282967 -:10036000292A2B2C2D2D2E2F303132323334353695 -:100370003738393A3B3C3D3E3F4041424344454695 -:100380004748494A4C4D4E4F505153545556585971 -:100390005A5B5D5E5F616264656668696B6C6D6F18 -:1003A0007072737577787A7B7D7E8082838587888B -:1003B0008A8C8E8F91939596989A9C9EA0A2A3A5C5 -:1003C000A7A9ABADAFB1B3B5B7BABCBEC0C2C4C6C6 -:1003D000C9CBCDCFD1D4D6D8DBDDDFE2E4E7E9EB82 -:1003E000EEF0F3F5F8FAFDFFFFAA7F554008070687 -:1003F000050D0C0B0A11100F161514131A181B12E9 -:100400000903010002040E17192223252628292A90 -:100410002C2D2F3032333536383A3B3D3E40424367 -:100420004547494A4C4E5051535557595A5C5E60A6 -:1004300062646668696B6D6F71737577797B7D7FB8 -:1004400081838587898A8C8E90929496989A9C9EB7 -:100450009FA1A3A5A7A8AAACAEAFB1B3B4B6B8B9D3 -:10046000BBBCBEBFC1C2C3C5C6C7C9CACBCCCDCE3B -:10047000D0D1D2D2D3D4D5D6D7D7D8D9D9DADADB1E -:10048000DBDBDCDCDCDCDCDDDDDDDDDCDCDCDCDCAA -:10049000DBDBDBDADAD9D9D8D7D7D6D5D4D3D2D2E9 -:1004A000D1D0CECDCCCBCAC9C7C6C5C3C2C1BFBED1 -:1004B000BCBBB9B8B6B4B3B1AFAEACAAA8A7A5A33C -:1004C000A19F9E9C9A98969492908E8C8A898785FB -:1004D00083817F7D7B79777573716F6D6B696866DA -:1004E0006462605E5C5A5957555351504E4C4A49AC -:1004F00047454342403E3D3B3A3836353332302F54 -:100500002D2C2A2928262523224E007F004B00006F -:100510000001515400550056005F00600061005713 -:10052000005C005D005E00000059005A005B00584E -:100530000062000000630000004F00010050000056 -:10054000000100AD002C0053001450025303532A45 -:100550000001000100010000000100010001000095 -:100560005C005C000001000000300001002F000072 -:100570000010500500170011030D00160007002D94 -:1005800001060119011000000011011D03E10057CF -:10059000012C000000E2000000805F0100815F008C -:1005A000001050B9004A0017012B0352002B011A0A -:1005B00001500051004F000000B6002C00B7002889 -:1005C000004E0000004B000000805F0100815F00D2 -:1005D0000010500100010001000100520001000163 -:1005E00000500051004F00000010033D080100536F -:1005F0000068000000690000000100010001000027 -:1006000000010001000100010001000100010001E2 -:1006100000010001000100000001000100010001D3 -:1006200000010000000100000001000100010000C5 -:1006300000010001000100010001000100010001B2 -:1006400000010001000100000001000100010001A3 -:100650000001000000010000000100010001000095 -:100660000001000100010001000100010001000182 -:100670000001000100010000000100010001000173 -:100680000001000000010000000100010001000065 -:100690000001000100010001000100010001000152 -:1006A0000001000100010000000100010001000143 -:1006B0000001000000010000000100010001000035 -:1006C0000001000100010001000100010001000122 -:1006D0000001000100010000000100010001000113 -:1006E00000010000000100000009025B000301009E -:1006F000A0FA090400000103010100092111010011 -:10070000012240000705810308000A0904010002D4 -:1007100003000000092111010001222200070582C7 -:100720000320000107050303200001090402000162 -:100730000300000009211101000122B60007058411 -:100740000320000A12010002000000084B411500BE -:100750000200010200010A0350005300310037007B -:1007600000001203410054004C0041004E005400B0 -:100770004900530000000403090411241FBECFEFF9 -:10078000DAE0DEBFCDBF04B603FE27C0809196033A -:1007900090919703A0919803B09199038730904B63 -:1007A000A740B04BD1F41092960310929703109289 -:1007B00098031092990314BE84B7877F84BF0FB645 -:1007C000F894A895809160008861809360001092F1 -:1007D00060000FBEE0E0F8E3099511E0A0E0B1E0B1 -:1007E000E4EEFFE502C005900D92A43CB107D9F7F5 -:1007F00023E0A4ECB1E001C01D92A639B207E1F7F5 -:100800000E9499280C94B92F0C940000E8EDF0E0B8 -:1008100080818E7F80831092E2001092DA00109225 -:10082000E100A0EEB0E08C9181608C9380818F77A5 -:10083000808319BCA7EDB0E08C918E7F8C93808172 -:100840008F7E80831092090308952091E4003091F7 -:10085000E50095E6A9012091EC00822F817020FF30 -:1008600006C08091E80080FF06C080E008952091D6 -:10087000E80022FD1AC080912E03882389F085307C -:1008800089F08091EB0085FD0FC02091E40030914C -:10089000E50042175307F9F29150E1F684E008951C -:1008A00082E0089583E0089581E00895EF92FF9239 -:1008B0000F931F93CF937C018B010E942504C82FB7 -:1008C000811117C08091E80085FD0BC08091E80080 -:1008D0008E778093E8000E942504882399F3C82F1F -:1008E00008C0F70181917F018093F1000150110947 -:1008F00049F78C2FCF911F910F91FF90EF900895A2 -:100900008091300387FF13C08091E80082FF06C00A -:100910008091E8008B778093E80004C080912E03DB -:100920008111F2CF089580912E038823D9F380910D -:10093000E80080FFF8CF8091E8008E77ECCF982F09 -:100940009093E900242F762F50E0891731F07091B1 -:10095000EC002091ED005091F00021FD07C09F5F59 -:10096000973071F78093E90081E008953091EB00B2 -:100970003E7F3093EB003091ED003D7F3093ED00F2 -:100980003091EB0031603093EB007093EC002093DA -:10099000ED005093F0002091EE0027FDE0CF80E0C5 -:1009A0000895CF92DF92EF92FF920F931F93CF9310 -:1009B000DF93C8EDD0E088818F7E8883E7EDF0E09B -:1009C00080818160808384E082BF81E0809309031D -:1009D00088818E7F888302EE10E0F80110821092E9 -:1009E000DA0081EEC82ED12CF601108288818F7733 -:1009F000888388818068888388818F7D888319BCFB -:100A000010922E0310922F0310922D0310922C039C -:100A100090EEE92EF12CF70180818B7F8083888115 -:100A20008160888342E060E080E00E949F04F601DC -:100A300080818E7F8083F8018081816080838081C6 -:100A400088608083F70180818E7F808388818061C8 -:100A50008883DF91CF911F910F91FF90EF90DF90EE -:100A6000CF900895FC01809136039091370386174B -:100A70009707A0F06115710529F49091E8009E7721 -:100A80009093E80090E06115710551F4911108C050 -:100A90008091E80082FF34C080E00895BC01F2CF6D -:100AA00080912E038823C1F18530C1F18091E80047 -:100AB00083FD30C08091E80082FDEACF8091E8009C -:100AC00080FFE1CF8091F3002091F200382F611573 -:100AD000710519F02830310558F091E028303105C2 -:100AE00009F090E02091E8002E772093E800CBCF2A -:100AF00081918093F100615071092F5F3F4FE7CFE3 -:100B000080912E03882341F0853041F08091E800E8 -:100B100083FFBECF81E0089582E0089583E00895C9 -:100B200080910B0308959C014FB7F89480910003C6 -:100B300090910103A0910203B09103034FBF821B68 -:100B4000930B08952FB7F8948091000390910103BF -:100B5000A0910203B09103032FBF08952091FD02DD -:100B60003091FE022817390771F09093FE028093AE -:100B7000FD02E091FB02F091FC02309721F000842D -:100B8000F185E02D099408952091F9023091FA023F -:100B90002817390771F09093FA028093F902E091D7 -:100BA000FB02F091FC02309721F00680F781E02DE6 -:100BB00009940895E091FB02F091FC02309721F036 -:100BC0000190F081E02D099480E00895DC016091AE -:100BD000F5028091F602962F891301C00895292FFE -:100BE00030E0F901EE0FFF1FE351FD4F40815181CD -:100BF0004A175B07A1F487E08A9FA0018B9F500DE5 -:100C00001124485E5E4F81E0FA0184839613E6CF9B -:100C10002F5F3F4F237033272093F50208952F5FF6 -:100C20003F4F922F9370D8CF10928A021092890270 -:100C3000E8E1F1E08581811102C0148216823796C5 -:100C400081E0E234F807B1F70895FA01811101C09B -:100C5000FB010994089580918E03982F9E7F61F483 -:100C60008170826080938E0380919103853B18F0A0 -:100C700084EB8093910308958A34B0F38170886483 -:100C8000F1CFAF92BF92DF92EF92FF920F931F933B -:100C9000CF93DF93182F062FE901453B08F044EB73 -:100CA000E42FF0E0E851FD4F011110C0E4915E2FF8 -:100CB0004E2F4983E8835A83DF91CF911F910F9183 -:100CC000FF90EF90DF90BF90AF900895202F30E01D -:100CD0004491D42EE42EF12C56E0159FC00111242E -:100CE000EFEFF0E0BF010E94BA2E812F90E0880F55 -:100CF000991F55E5569FD001579FB00D11248A1BAF -:100D00009B0B982F990F890F5F01A21AB30AAE9C13 -:100D1000D001AF9CB00DBE9CB00D11245B2F089F7D -:100D200080011124012F11275F01A01AB10AAE9C86 -:100D30008001AF9C100DBE9C100D11245F01A81AFC -:100D4000B108A29EC001A39E900DB29E900D1124E9 -:100D5000892F9927E81BF90BEE9DC001EF9D900D9F -:100D6000FE9D900D1124E92F62307105A1F050F421 -:100D70006115710509F49DCF6130710581F0EB2F8C -:100D8000512F97CF6430710569F080F0663071059E -:100D900009F48FCFF4CFE42F4B2F592F8ACFE42FB4 -:100DA000412F87CFEB2F542F492F83CF4B2F5D2D12 -:100DB000E12F7FCF0E94A2059C0190917602809145 -:100DC0007702982B21F03093730220937202909156 -:100DD000780280917902982B21F030937102209350 -:100DE0007002E091FB02F091FC02309749F082E042 -:100DF000809374020480F581E02D84E792E00994E9 -:100E0000089540917602803F59F48091770287FFE0 -:100E10000DC01092770241110BC010926E0208C0F3 -:100E2000813F81F48091770218169CF3442381F06E -:100E30008091780290917902892B09F05AC0109222 -:100E40006D020895823F49F447FFF0CF1092760279 -:100E5000809177028111ECCFE0CF833F19F4141613 -:100E6000ACF3E4CF90917802893F29F41916F4F697 -:100E700010927802DBCF8A3F19F497FFD7CFF8CFD3 -:100E8000909179028B3F29F497FFD0CF109279028D -:100E9000CDCF8C3F19F41916CCF3C8CF9CE0980F36 -:100EA000953090F4845F990B21E030E0B90102C0E5 -:100EB000660F771F8A95E2F7CB01809590917502B6 -:100EC000892380937502B2CF8D3F31F480916F02F8 -:100ED0008E7F80936F02AACF8E3F21F480916F02A4 -:100EE0008D7FF7CF8F3F09F0A1CF80916F028B7F6D -:100EF000F0CF089580916F0280FD16C081FD16C06D -:100F000082FD16C080916D028823A1F0883280F4A2 -:100F100028E0829FC001112468E270E00E94CE2E7A -:100F2000862F672B39F0089582E0089584E00895B4 -:100F300088E0089581E0089580916F0280FD14C0DB -:100F400081FD14C082FD16C080916E02882381F05D -:100F5000843180F422E3829FC001112464E170E0B7 -:100F60000E94CE2E862F08958CE0089589E1089581 -:100F700085E0089582E30895803F31F40E949C0744 -:100F80008195809377020895813F19F40E949C0710 -:100F9000F8CF823F31F40E949C07819580937602BE -:100FA0000895833F19F40E949C07F8CF893F29F4E4 -:100FB0000E947A078093780208958A3F21F40E9464 -:100FC0007A078195F7CF8B3F31F40E947A0781959C -:100FD0008093790208958C3F19F40E947A07F8CF24 -:100FE0009CE0980F953070F4845F990B21E030E01D -:100FF00001C0220F8A95EAF780917502822B8093B7 -:10100000750208958D3F31F480916F028160809365 -:101010006F0208958E3F21F480916F028260F7CFB6 -:101020008F3FB9F780916F028460F1CF80E008951F -:10103000F894E82FE295EF70F0E031A1282F2F709F -:1010400081E090E001C0880F2A95EAF7982F9095EB -:10105000932391A392A1892B82A3789408959091D0 -:10106000040392FF06C0282F28712830F9F4877FE7 -:10107000846093FF06C0282F28712831F1F4877E01 -:1010800084612091050320FF06C0382F3871383065 -:10109000D9F4877F816021FF06C0282F287128316D -:1010A000D1F4877E816194FD877E0895282F247175 -:1010B0002430F9F68B7F8860DCCF282F247124310F -:1010C00001F78B7E8861DDCF382F3171313019F710 -:1010D0008E7F8860E0CF282F2171213121F78E7E0D -:1010E0008861E1CFCF93DF93EC0182389105A9F1BC -:1010F000D8F58133910509F496C048F589329105F8 -:1011000009F48AC08A9709F495C0C11521E5D20770 -:1011100008F0BCC0C11530E5D30708F014C1C83EC3 -:10112000D10508F09CC0C03ED10560F5C83AD10594 -:1011300008F087C0C53AD10508F0FDC0C130D1051F -:1011400009F12097F9F0C430D105E0F440C08533AF -:10115000910509F45AC0C997C1F6809104038370C0 -:1011600089F0C0EED0E00EC0833E910599F170F495 -:10117000803E910501F1823E910539F6809104038C -:1011800082FD21C0CE01DF91CF910895863E910569 -:1011900061F1873E910571F1843E910509F0B5CF6B -:1011A0008091050381FFEECF80910403C7EED0E06C -:1011B00084FD0DC0E7CF8091040380FD12C19091A2 -:1011C000050390FFDFCFC3EED0E084FFDBCFD0E09C -:1011D000C0E0D8CF8091040382FD06C19091050341 -:1011E00090FDBFCF84FFCECFF2CF8091040383FD6B -:1011F000DDCFC8CF8091040383FDF9C09091050332 -:1012000091FFF0CFC4EED0E0BDCF8091040385FF05 -:10121000B9CFC9E2D0E0B6CF8091040385FFB2CF49 -:10122000C5E3D0E0AFCF8091040386FFABCFCAE225 -:10123000D0E0A8CF8091040386FFA4CFC1E3D0E023 -:10124000A1CFCF3BD10518F6C85AD0E0CC0FDD1F97 -:10125000C95BDE4F0990D881C02DD46493CFC115EE -:1012600040E2D40758F4C11581E0D80708F08ACFCE -:10127000C03FD10508F4ABCFD06584CFC11590E451 -:10128000D90708F4A4CFDF70D06A7CCFC11525E55B -:10129000D20700F5C11534E5D30708F08AC0C1159F -:1012A00043E5D40708F071C0C11582E5D80708F4FA -:1012B00067C0CE018370992721E030E002C0220F81 -:1012C000331F8A95E2F7C695C69580E2C89FE00174 -:1012D000112452C0C11599E5D907A8F4C11528E514 -:1012E000D20708F06BC0C11536E5D30708F06FCF01 -:1012F0008C2F0E942F08C82FD0E0DC2FCC27CC27C2 -:10130000DF71D0623FCFC1154AE5D40708F45BC056 -:10131000CE0190568115904208F059CF8D2F8F71D4 -:101320000E942F0890E0982F882788279F719C01A2 -:101330002C2BE901E6CFC55AD0E0CC5BDE4FC8814B -:10134000D0E0D0641FCFCE01E4E096958795EA9572 -:10135000E1F783702C2F26952695237040E2249F79 -:1013600090011124382B8C2F8370C1E0D0E002C093 -:10137000CC0FDD1F8A95E2F7C22BD32BDC6802CF9E -:10138000DC2FCC27C16FD06AFDCECE0183709927A8 -:1013900021E030E002C0220F331F8A95E2F7C695A4 -:1013A000C69590E2C99FE0011124C22BD32BDA68C5 -:1013B000E9CEDC2FCC27C46FD06AE4CEDC2FCC275B -:1013C000C06FD06ADFCE8C2F8F700E942F0834E060 -:1013D000D695C7953A95E1F7CF709C2FEC01D0696F -:1013E000D1CEC9E3D0E0CECEC2EED0E0CBCEC6EEB9 -:1013F000D0E0C8CE80914402811110924402089539 -:101400008091430290914202892B90914102892B55 -:101410008093C601909144029923A1F0892B809377 -:10142000C60180914301882341F18091040387FF25 -:1014300024C08EE1E8ECF1E090E0815000F59111DC -:101440000E94FA09E091FB02F091FC023097E1F072 -:1014500080914301882359F08091040387FF07C0DE -:101460008091C6018093C70185E08093C601028008 -:10147000F381E02D86EC91E0099486E0DBCF2191A9 -:101480002223D9F29F5FD9CF0895909143019923E8 -:10149000D1F09091040397FF16C0E82FE695E695EA -:1014A000E695EE31E0F4F0E0EA53FE4F282F277086 -:1014B00081E090E001C0880F2A95EAF7809592813B -:1014C000892382830895E8ECF1E09191891303C0A8 -:1014D000DF0111971C9291E0EE3CF907B1F70895F6 -:1014E000909143019923C1F09091040397FF14C098 -:1014F000E82FE695E695E695EE31F8F4F0E0EA534C -:10150000FE4F877021E030E001C0220F8A95EAF794 -:101510008281822B82830895A8ECB1E0EFEF90E006 -:101520002D91821751F0EF3F19F4211101C0E92FDD -:101530009F5F9630A9F7EF3F09F408950E2E000C37 -:10154000FF0BEA53FE4FE6CF80913F029091FE01E0 -:10155000981301C008958F5F8770FACF990F990F84 -:10156000890F982F977086958695869524E0829F9F -:10157000F0011124E651FE4F50E040E080E021915F -:1015800030E0092E02C0369527950A94E2F72170C3 -:101590003327042E01C0220F0A94EAF7822B4F5FF3 -:1015A0005F4F4430510559F70895990F990F890FEE -:1015B000982F977041E001C0440F9A95EAF78695FD -:1015C0008695869594E0899FF0011124E651FE4F9F -:1015D00030E020E070E05191DF011197CB01022E45 -:1015E00002C0969587950A94E2F7817081958527C8 -:1015F000842385278C932F5F3F4F2430310559F783 -:10160000089590E080E00E94C40590E080E00E9490 -:10161000AE0510924202109241020E94000A86E03A -:10162000E4E7F2E0DF011D928A95E9F710926E027D -:1016300010926D0210926F020C94DA06909346029B -:10164000809345020C94010B882341F08095909182 -:1016500042028923809342020C94000A0895882351 -:1016600039F090914202982B909342020C94000A18 -:101670000895882341F080959091430289238093B7 -:1016800043020C94000A0895882339F09091430294 -:10169000982B909343020C94000A0895882309F430 -:1016A00059C0823871F40E94DA0581FF53C089E382 -:1016B0000E94700A0E94000A89E30E94450A0C9465 -:1016C000000A833859F40E94DA0580FF43C083E59D -:1016D0000E94700A0E94000A83E5EFCF843859F413 -:1016E0000E94DA0582FF36C087E40E94700A0E94D9 -:1016F000000A87E4E2CF9CEF980F913AF0F290E273 -:10170000980F983088F4877021E030E0A90102C07A -:10171000440F551F8A95E2F7CA01809590914302C4 -:10172000892380934302CBCF9BE5980F933020F41D -:1017300090E080E00C94C40598E5980F973120F470 -:1017400090E080E00C94AE05803F20F00E940107FD -:101750000C94DA060895809580FF08C0589A81FF9E -:1017600007C05D9A82FF06C05C9A08955898F7CF2B -:101770005D98F8CF5C98089590912E03943029F5E8 -:101780008093060370930803609307039093E90026 -:101790008FEF9091E800815095FD06C095ED9A95E8 -:1017A000F1F700008111F5CF8091E80085FF0DC0B1 -:1017B00050E040E063E070E086E093E00E94560471 -:1017C0008091E8008E778093E8000895BC0184E062 -:1017D0000C94BC0BBC0183E00C94BC0B9C0184E01A -:1017E0008093E9009FEF8091E800915085FD06C04D -:1017F00085ED8A95F1F700009111F5CF8091E80011 -:1018000085FF0CC050E040E066E070E0C9010E9436 -:1018100056048091E8008E778093E8000895CF9376 -:10182000DF93EC01809143018823B1F1809104039F -:1018300087FF32C060E284E08093E9008FEF9091EF -:10184000E800815095FD06C095ED9A95F1F70000EE -:101850008111F5CF8091E80085FF1BC08091430185 -:1018600070E050E040E0811104C050E040E068E0EA -:1018700070E0CE010E9456048091E8008E7780933C -:10188000E80080E2FE01ACE0B3E001900D928A95A1 -:10189000E1F7DF91CF91089568E081E0CDCF81E05D -:1018A0008093E00080E28093D8001092C9008FE11D -:1018B0009EE40197F1F700C0000087E090EBDC01A7 -:1018C0008093960390939703A0939803B093990302 -:1018D00088E19CE00FB6F894A895809360000FBE55 -:1018E00090936000FFCFCF93C82F882309F4AEC038 -:1018F0008238C1F40E94DA0581FDA8C089E30E9404 -:10190000700A0E94000A2FEF81EE94E0215080407F -:101910009040E1F700C0000089E30E94450ACF91A2 -:101920000C94000A8338A1F40E94DA0580FD8EC071 -:1019300083E50E94700A0E94000A2FEF81EE94E076 -:10194000215080409040E1F700C0000083E5E5CFE2 -:101950008438A1F40E94DA0582FD78C087E40E94F1 -:10196000700A0E94000A2FEF81EE94E0215080401F -:101970009040E1F700C0000087E4CFCF8CEF8C0FE0 -:10198000813A88F580914301882301F18091040315 -:1019900087FF1CC0EC2FE695E695E695F0E0EA534C -:1019A000FE4F828190E04C2F477021E030E002C072 -:1019B000220F331F4A95E2F782239323892B79F074 -:1019C0008C2F0E94450A0E94000A09C0E8ECF1E051 -:1019D0008191C817A9F321E0EE3CF207C9F78C2FDB -:1019E0000E94700A9CCF80E28C0F883068F4C77028 -:1019F00021E030E001C0220FCA95EAF7809143024E -:101A0000822B809343028BCFEBE5EC0FE33040F465 -:101A1000F0E0EC5BFE4F808190E0CF910C94C40528 -:101A2000E8E5EC0FE73150F4F0E0EE0FFF1FE95B63 -:101A3000FE4F80819181CF910C94AE05C03F30F074 -:101A40008C2F0E94BC07CF910C94DA06CF91089599 -:101A50001F93CF93DF93182FD0E0C0E0893311F4A8 -:101A6000C0E5D0E0812F0E94730C209731F4812FC4 -:101A7000DF91CF911F910C944E0B8FE99FE001975E -:101A8000F1F700C000002197F0CF0F931F93CF9381 -:101A9000DF93C62FD42F022FFC0182818823A1F06F -:101AA000609395030E94A2059093940380939303FF -:101AB000C77081E001C0880FCA95EAF7DF91CF9126 -:101AC0001F910F910C94440B80919503681335C0BE -:101AD00080919303909194030E949305883C910513 -:101AE00060F510E21D0FCD17B9F080E28C0F883041 -:101AF00040F4C77081E001C0880FCA95EAF70E94E0 -:101B0000390B183048F481E09D2F977001C0880F81 -:101B10009A95EAF70E94440B802F0E94280D1830F6 -:101B200098F4D77081E001C0880FDA95EAF7DF9169 -:101B3000CF911F910F910C94390BC77081E001C0B8 -:101B4000880FCA95EAF7F3CFDF91CF911F910F91DC -:101B50000895DF92EF92FF920F931F93CF93DF933D -:101B6000E82FF0E0E65BFD4FD490282F26952695D0 -:101B7000269530E0F901E65CFD4F0491877010E096 -:101B8000082E02C0159507950A94E2F701701127F7 -:101B9000F901E65DFD4FE490F12C082E02C0F594AA -:101BA000E7940A94E2F791E0E922FF24F901E65E66 -:101BB000FD4FC491D0E002C0D595C7958A95E2F754 -:101BC000C170DD270115110519F081EE0E94730C1B -:101BD000E114F10419F086EE0E94730C8D2D0E9421 -:101BE000280DEF2819F086EE0E944E0B012B19F0FC -:101BF00081EE0E944E0BCD2B51F08CE2DF91CF9104 -:101C00001F910F91FF90EF90DF900C94280DDF91C2 -:101C1000CF911F910F91FF90EF90DF900895CF9398 -:101C2000DF93C7E0D2E060E0CE010E94852F2196CD -:101C3000C11584E0D807B9F7DF91CF9108956F926D -:101C40007F928F929F92AF92BF92CF92DF92EF924C -:101C5000FF920F931F93CF93DF9389E0C82E85E007 -:101C6000D82E0FE510E0E801E09736011CC0F50121 -:101C700085909490692DC7010E94852F682DC7011A -:101C800001960E94852F82E0A80EB11C82E0E80E2A -:101C9000F11CCE15DF0559F788E0680E711C2896F7 -:101CA0000C171D0731F07E0188E0E81AF108530196 -:101CB000DECF005D1F4F80E3C80ED11C0F3382E0E2 -:101CC000180789F6DF91CF911F910F91FF90EF9048 -:101CD000DF90CF90BF90AF909F908F907F906F904C -:101CE0000895CF93C82F6FEF811161E283E290E0F6 -:101CF0000E94852F6FEFC11169E084E290E00E949D -:101D0000852F6FEFC11163E185E290E0CF910C94D4 -:101D1000852F80E00E94710E60E086E290E00E94D4 -:101D2000852F0E941F0E0E940F0E81E00C94710EF1 -:101D3000CF93C0910503C2FB992790F9981781F0C2 -:101D400080FBC2F9C09305036091040384E090E036 -:101D50000E94852F6C2F82E290E0CF910C94852F0A -:101D6000CF9108950F931F93CF93DF9328E0629F45 -:101D7000E001112450E0440F551FC40FD51F30E37C -:101D8000839FC00DD11D1124CE0187960E94712F13 -:101D9000082F10E0102F0027CE0188960E94712F87 -:101DA0009801282BC901DF91CF911F910F910895C0 -:101DB000462F8A3038F4763028F4643018F4672FD0 -:101DC0000C94B20E90E080E00895BF92CF92DF9223 -:101DD000EF92FF920F931F93CF93DF937C010091BB -:101DE0003803109139038091450290914602082BE7 -:101DF000192BCFE0D0E0CC24C394D12CBC2EC6014B -:101E00000C2E02C0880F991F0A94E2F780239123B9 -:101E1000892B71F4219790F7B12C8B2DDF91CF9105 -:101E20001F910F91FF90EF90DF90CF90BF9008959A -:101E3000B7018C2F0E94D80E0E947208019751F3AF -:101E4000ECCFCF93DF93EC010E94E50EBE010E9420 -:101E5000D80EDF91CF910C947208FC018681978196 -:101E6000009779F00E947208292F2F7092959F7029 -:101E700092509E30A0F4E92FF0E0E554F04D0C9420 -:101E8000042F808191810E94210FEECF803F19F0B5 -:101E900020F4883E20F481E00895843FE1F380E05F -:101EA0000895883EC0F3813FD1F7F5CF822F869504 -:101EB0008695869508951F93CF93DF9300D000D029 -:101EC0000F92CDB7DEB7FC01268137812115310590 -:101ED00041F525E0DE01119601900D922A95E1F77A -:101EE000FC01228189819A812223B9F06623A9F01D -:101EF0000E94E50E182F682F89819A810E94D50AC9 -:101F000069817A81812F0F900F900F900F900F9021 -:101F1000DF91CF911F910C94D80E0E94AE0A182F1A -:101F2000EFCFC9010F900F900F900F900F90DF919E -:101F3000CF911F91089583E290E00E94712F81322A -:101F400089F484E290E00E94712F893059F485E28F -:101F500090E00E94712F91E0833109F090E0892F89 -:101F60008170089580E0FCCFCF9384E090E00E94E0 -:101F7000712FC82F82E290E00E94712F982F8C2F32 -:101F8000CF91089560918E03669570E04BE050E02C -:101F90008AE091E00E94572F892B19F481E0809309 -:101FA00084020E94A20590937E0280937D02089590 -:101FB0005F926F927F928F929F92AF92BF92CF92D9 -:101FC000DF92EF92FF920F931F93CF93DF93CDB7E2 -:101FD000DEB7C455D1090FB6F894DEBF0FBECDBF32 -:101FE00080918E0380FD0AC0EAE3F3E01182108243 -:101FF0001282339623E0EE38F207C1F780907B021D -:1020000090907C028114910409F459C080917A0265 -:10201000811155C0D12CC12C66246394712C13E01E -:10202000512E8091850293010C2C01C0220F0A943D -:10203000EAF7822309F43BC0F601EE0FFF1FE80D1B -:10204000F91DE590F490E114F104C9F145E050E088 -:10205000B701CE0101960E944E2F09810F3F39F141 -:102060008A81800F9927991F8D31910514F08CE199 -:1020700090E05C01AA0CBB1C8A0D9B1DFC01E65C78 -:10208000FC4F5F01059D80011124065C1C4F0A1561 -:102090001B0520F0F5E0EF0EF11CD8CF98014D8123 -:1020A0006C818B810E9441060D5F1F4FF0CF2FEF97 -:1020B000C21AD20A38E0C316D10409F0B2CF7DEEBD -:1020C000A72E73E0B72EDE011196AE014B5A5F4F7B -:1020D0001A2F7B2FF5018491282F30E0C901880F3A -:1020E000991F820F931F865C9C4FFC01C080D1809A -:1020F000E280CD92DD92ED92FFEFAF1ABF0AA417F6 -:10210000B50741F7279A35B13F7725B120686FB7FA -:10211000F894812F972FFC017191CF01E8E025B948 -:10212000000000C077FF35B9770F000000C000C085 -:1021300000C035B900C0EA9591F78417950759F7A3 -:102140006FBF8FE594E00197F1F700C00000CC5A13 -:10215000DF4F0FB6F894DEBF0FBECDBFDF91CF913A -:102160001F910F91FF90EF90DF90CF90BF90AF90B5 -:102170009F908F907F906F905F9008951F93CF9363 -:10218000DF9300D00F92CDB7DEB7162F90918E035C -:1021900090FF18C09E012F5F3F4F48E76FEF0E94EE -:1021A00041068B819981612F70E0FB01EE0FFF1FCB -:1021B000E60FF71FE65CFC4F2A8121839083828320 -:1021C0000E94D80F0F900F900F90DF91CF911F9129 -:1021D0000895EF92FF920F931F93CF93DF938C019B -:1021E000CAE3D3E0F12CE12CF801948160919003D3 -:1021F00080918F03FEE0EF16F104FCF49923F9F0CF -:102200009E01409191030E9441062FEFE21AF20ACB -:1022100023968CE1E816F10439F70E94D80FF801F3 -:10222000848190E00196817099278483DF91CF911A -:102230001F910F91FF90EF900895992309F39E014C -:1022400040E0E1CF8F929F92AF92BF92CF92DF9208 -:10225000EF92FF920F931F93CF93DF93EC014C818A -:10226000042F10E09801D8010E94192F9B01AC01A6 -:102270000E942F2F4B015C01E0E2F0E0E01BF10B2C -:10228000A5E5B0E0AC019B010E942F2F6B017C0102 -:102290009F01DF010E94112F9B01AC010E943A2F88 -:1022A0009B01AC01280D391D4A1D5B1DC701B601FC -:1022B0000E94E22EF22E822F90E039E23F15D8F1F3 -:1022C00043E0249F9001112435952795122F1095F6 -:1022D0009AE3C92E93E0D92E00E085E5E82EEF18A9 -:1022E0008E2D01FD8F2D9601412F609190030E944C -:1022F00041060F5F53E0C50ED11C0C3189F70E94D7 -:10230000D80F9C8181E0992319F0903219F48FEF56 -:102310008093170180911701890F8C83DF91CF91F2 -:102320001F910F91FF90EF90DF90CF90BF90AF90F3 -:102330009F908F90089525E530E0A901481B590B27 -:10234000CA019A01220F331F280F391F37FFBCCF54 -:102350002F5F3F4FB9CF0F931F93CF93DF93CAE304 -:10236000D3E0FE01118210821282339683E0EE38B0 -:10237000F807C1F710E000E080918702082E000CFA -:10238000990B081719078CF180911601082E000C83 -:10239000990B801791074CF19E0140919103609138 -:1023A000900380918F030E9441060F5F1F4F239679 -:1023B0000C31110509F70E94D80F809115019091F9 -:1023C0008702980F9093870220911601280F20937F -:1023D0001601121614F49B311CF08195809315019F -:1023E000DF91CF911F910F910895198218821A825F -:1023F000DCCFBF92CF92DF92EF92FF920F931F93A9 -:10240000CF93DF93FC018281DD24DA9480FD02C04A -:10241000DD24D3940AE313E0D0E0C0E02CE1B22E37 -:10242000F80111821082128294E0E92EF12CC12C65 -:10243000809186028C0D8D310CF43DC06B2D0E9475 -:10244000AC2E892F082E000C990B8C179D0791F448 -:10245000809191038E9DA0018F9D500D1124559563 -:1024600047955595479598016091900380918F030A -:102470000E944106CD0CF1E0EF1AF108C9F6219651 -:102480000D5F1F4FCC31D10559F60E94D80F8091B6 -:10249000860291E0D91215C0811111C08BE18093A1 -:1024A0008602DF91CF911F910F91FF90EF90DF9007 -:1024B000CF90BF90089587FFC5CF845EC3CF815072 -:1024C000EECF90E00196BE010E94CE2EE8CFEF92B3 -:1024D000FF921F93CF93DF93EC018AE3E82E83E012 -:1024E000F82E10E08C819701409191036091900348 -:1024F000810F0E944106175F83E0E80EF11C1C3F2C -:1025000089F70E94D80F9A818C8190FF08C08F5F55 -:102510008C83DF91CF911F91FF90EF9008958150B0 -:10252000F7CF90918E0390FF0CC0EAE3F3E0818334 -:1025300060834283339693E0EE38F907C1F70C9439 -:10254000D80F08950F931F93CF93DF9300D00F926E -:10255000CDB7DEB78C018091880281110AC09E013F -:102560002F5F3F4F44EB6FEF0E9441068A818093BB -:102570008802F8016481613069F08091880240E04E -:10258000662361F040E0623011F44091880280E0FF -:1025900060E004C06091880240E080E00E949112F7 -:1025A000F801848190E0019663E070E00E94CE2EF5 -:1025B00084830F900F900F90DF91CF911F910F9117 -:1025C0000895CF93DF9300D00F92CDB7DEB79091EF -:1025D0008E0390FF0AC09E012F5F3F4F0E9441066D -:1025E0004B8169818A810E9491120F900F900F9008 -:1025F000DF91CF910895CF93DF93EC01EEE8F3E004 -:10260000438162818C810E94E1128C818F5F8C8377 -:10261000DF91CF910895CF93DF93EC01EC81F0E04F -:10262000E75FFB4F4491EEE8F3E0628181810E9415 -:10263000E1128C818F5F8C83DF91CF910895CF92CF -:10264000DF92EF92FF926B017C010E942B06B70193 -:10265000A60188E090E0FF90EF90DF90CF900C947F -:10266000972F5F926F927F928F929F92AF92BF92BD -:10267000CF92DF92EF92FF920F931F93CF93DF934E -:1026800000D00F92CDB7DEB7182F762E042F622E12 -:1026900090918E0390FF29C0E92FE695AE2FB0E010 -:1026A000A157BE4F8C91809383029E7F923081F51B -:1026B0009E012F5F3F4F812F0E9441064B81698110 -:1026C0008A810E94911210938F037092900300935D -:1026D0009103662051F060918E0370918F03809179 -:1026E0009003909191030E941F130F900F900F90F1 -:1026F000DF91CF911F910F91FF90EF90DF90CF90DE -:10270000BF90AF909F908F907F906F905F90089553 -:10271000823019F400919103D6CF863019F41091CC -:102720008F03D1CF8930D9F3893169F6E9518E2FE2 -:102730008170582EE695F0E0E851FC4FA590B490DA -:10274000BB248AE3E82E83E0F82ED12CC12C9CE137 -:10275000892E912CC601B4010E94BA2E812F5110EE -:1027600013C0860F9701402F672D0E944106CA0CA7 -:10277000DB1C83E0E80EF11C8EE8E81683E0F80627 -:1027800049F70E94D80F9FCF861BECCFEEE8F3E00D -:10279000438128E0421B08F440E021E0628181810E -:1027A0000C943113EEE8F3E0438128E0420F08F483 -:1027B0004FEF21E0628181810C943113EEE8F3E068 -:1027C000628128E0621B08F460E021E0438181819E -:1027D0000C943113EEE8F3E0628128E0620F08F414 -:1027E0006FEF21E0438181810C943113EEE8F3E037 -:1027F000818121E04381628188500C943113EEE89D -:10280000F3E0818121E043816281885F0C94311380 -:1028100080919203882319F08150809392036091F4 -:102820008E0370918F0380919003909191030C948B -:102830001F1380919203833018F48F5F809392036B -:1028400060918E0370918F0380919003909191031A -:102850000C941F1390918E0390FF36C091708111DC -:1028600029C0926090938E03662351F060918E038D -:1028700070918F0380919003909191030E941F1398 -:1028800060918E03669570E04BE050E08AE091E045 -:102890000E94572F892BA9F01092840281E0809327 -:1028A000800220E0409191036091900380918F031A -:1028B0000C943113853210F09864D4CF880F982B84 -:1028C000D1CF0E94C20FEACF089521E030E0A901E4 -:1028D00002C0440F551F8A95E2F7CA012091850274 -:1028E000662399F0822B8093850280918402811166 -:1028F00006C080918E0360E086950E942A14809124 -:102900008E0380FD05C00C94D80F80958223EBCFF9 -:1029100008950F931F93CF93DF93EC0161E000972D -:1029200009F0682F617080E00E94651460E02097D4 -:1029300021F0BE0176956795617081E00E94651473 -:1029400060E0209731F0BE017695679576956795A2 -:10295000617082E00E94651460E0209739F0BE014A -:1029600013E0769567951A95E1F7617083E00E9410 -:10297000651460E0209739F0BE01B4E07695679564 -:10298000BA95E1F7617084E00E946514AE0170E0D1 -:1029900060E0BB27A72F962F852F0097A105B105D3 -:1029A000D9F1AC01BD0188E08A019B01F4E03695C4 -:1029B000279517950795FA95D1F70115110521056A -:1029C000310519F08C5FB901A8018A019B01E2E091 -:1029D0003695279517950795EA95D1F701151105B5 -:1029E0002105310519F08E5FB901A801769567952B -:1029F00057954795452B462B472B09F08F5F823023 -:102A000011F160F4882399F08130C1F0CE01DF919B -:102A1000CF911F910F91089580E0C6CF8330C1F010 -:102A20008430A1F720E044E66FEF8FE004C020E09F -:102A300044E66FEF82E30E943113E8CF20E044E6E2 -:102A40006FEF85E0F8CF20E044E66FEF80E8F3CF4A -:102A500020E044E66FEF87EDEECF0E94891490935B -:102A60003903809338030C94010B809138039091C3 -:102A700039039C01267033272630310519F488600C -:102A80000C942D15877FFCCF21E030E002C0220F8F -:102A9000331F8A95E2F72095309580913803909105 -:102AA0003903822393230C942D1590914002809535 -:102AB000892380934002282F277039F4282F082E6D -:102AC000000C330B9217130621F49091050392FF2B -:102AD00007C08595859585950E9444151092400202 -:102AE000089521E030E002C0220F331F8A95E2F7FB -:102AF0008091380390913903822B932B0C942D15E0 -:102B000080918E038695815009F484E261E00C94F3 -:102B10002A1480918E0386958F5F853208F081E0BC -:102B200061E00C942A1490918E0390FF07C0969553 -:102B3000981720F0961710F40C94891561E00C9406 -:102B40002A14EEE8F3E083E0808311828FEF828322 -:102B500088E28383148260817181828193810C94E5 -:102B60001F1369EE7EEF90E080E00E94A32F60E0EB -:102B700082E090E00E94852F60E083E090E00E9478 -:102B8000852F109246021092450260E084E090E0AA -:102B90000E94852F60E082E290E00E94852F60E035 -:102BA00085E090E00E94852F60E086E090E00E9442 -:102BB000852F6FEF87E090E00E94852F40E050E086 -:102BC000BA0188E090E00E94972F60E08DE090E0ED -:102BD0000E94852F40E050E0BA0188E190E00E9419 -:102BE000972F60E087E190E00E94852F40E050E061 -:102BF000BA018CE190E00E94972F70E060E080E2E3 -:102C000090E00E94A32F40E050E0BA0188E190E0FC -:102C10000E94972F80E00E94710E0E94890E40E072 -:102C200050E0BA018FE090E00E94972F40E050E022 -:102C3000BA0183E190E00C94972F90E080E00E942D -:102C40007F2F893E9E4F11F40C949B0F80E00895D6 -:102C50001092430280914301E8ECF1E0882359F09F -:102C60008091040387FF07C08EE1DF011D928A95E2 -:102C7000E9F70C94010B86E0F8CF1F93CF93DF9315 -:102C8000CDB7DEB7AA970FB6F894DEBF0FBECDBFA3 -:102C900080E393E02091F100DC012D93CD01B3E0BE -:102CA00088339B07B9F780913103833009F471C0F1 -:102CB000B8F4813009F448C0823009F4B2C0809180 -:102CC000E80083FF3AC180913003909131039A303C -:102CD00008F033C1E92FF0E0E753F04D0C94042FD6 -:102CE0008A3009F48DC08B3009F470C0893039F70F -:102CF00080913003813219F780913403909135032C -:102D0000009711F00297D9F68091E800877F8093B1 -:102D1000E8008091E80082FF37C09091F300809135 -:102D2000F200029729F48091F1008B7F813021F429 -:102D30008091F10080930B038091E8008B77809362 -:102D4000E8000E948004BBCF80913003813A09F0F3 -:102D5000B6CF8091E800877F8093E80080913403AC -:102D600090913503892B61F460E28CE093E070E090 -:102D70000E9432058091E8008B778093E8009FCF16 -:102D800060E090E080E0F3CF80912E038111C1CF0D -:102D900096CF80913003813A09F091CF809134032E -:102DA00090913503892B09F08ACF8091E800877FC5 -:102DB0008093E8008091E80080FFFCCF8091430180 -:102DC0008093F1008091E8008E77B9CF8091300335 -:102DD000813209F074CF8091340390913503892BAF -:102DE00009F06DCF8091E800877F8093E8000E9412 -:102DF000800480913203809343010E9428165FCFA4 -:102E000080913003813209F05ACF8091E800877FAA -:102E10008093E8000E9480048091330380930A032A -:102E20004ECF80913003813A09F049CF8091E8007C -:102E3000877F8093E8008091E80080FFFCCF80913D -:102E40000A03BECF803899F0823809F076C08091AD -:102E500034038F70873008F070C08093E900809150 -:102E6000EB0085FB882780F91092E90006C080916D -:102E70002C0390912D03911182609091E800977F2F -:102E80009093E8008093F1001092F1008091E800A7 -:102E90008E77B5C1882309F4A2C1823009F04DC0F4 -:102EA000809132038111A6C1809134038F702FEF7E -:102EB000280F263008F041C08093E9002091EB00F4 -:102EC00020FF98C1933031F48091EB0080628093B1 -:102ED000EB0090C19091EB0090619093EB0021E0AA -:102EE00030E001C0220F8A95EAF72093EA001092A1 -:102EF000EA008091EB008860EACF81111EC010913A -:102F000032031F778091E3008078812B8093E30068 -:102F10008091E800877F8093E8000E948004809180 -:102F2000E80080FFFCCF8091E30080688093E3009D -:102F300082E0111183E080932E038091E80083FFEB -:102F40000AC08091E800877F8093E8008091EB00C1 -:102F500080628093EB00AA960FB6F894DEBF0FBE96 -:102F6000CDBFDF91CF911F9108958058823028F70F -:102F700020913203309133032C3DE3E03E07A1F56D -:102F800083E08A838AE289834FB7F894DE0113963F -:102F900020E03EE051E2E32FF0E050935700E4914F -:102FA00020FF03C0E295EF703F5FEF708E2F90E03F -:102FB000EA30C0F0C7968D939D932F5F243159F767 -:102FC0004FBF8091E800877F8093E8006AE270E05D -:102FD000CE0101960E9432058091E8008B778093A4 -:102FE000E800ABCFC096E7CF8091340390913503D2 -:102FF000432F55274330510509F44AC078F5413035 -:10300000510509F47AC08BE590E0E9EEF6E0423034 -:10301000510509F092CF2091E800277F2093E80026 -:1030200020913603309137038217930708F49C01EF -:1030300040E02115310509F065C0411163C0809160 -:10304000E80082FDC9CF80912E03882329F28530C4 -:1030500019F28091E80083FFF2CFBECF41325105D3 -:1030600009F43CC04232510509F067CF8330910525 -:1030700008F063CFFC01EE0FFF1FE954FE4F0190F3 -:10308000F081E02D8C549E4FDC018C9190E01AC0B1 -:10309000332721303105D1F02115310561F022307F -:1030A000310509F04ACFE6E5F7E0E4918E2F90E094 -:1030B000E6E5F7E007C0E6E7F7E0E4918E2F90E061 -:1030C000E6E7F7E0009709F438CFA5CFE2E6F7E0AE -:1030D000E4918E2F90E0E2E6F7E0F4CF83309105A3 -:1030E00008F02BCF880F991FFC01E354FE4F01908D -:1030F000F081E02D89E090E08ECF82E190E0E4E481 -:10310000F7E089CF80912E03882309F465CF8530BD -:1031100009F462CF8091E80083FD5ECF8091E800E2 -:1031200082FD8DCF8091E80080FF83CF9091F300E6 -:103130008091F2002115310519F08830910550F089 -:1031400041E0089709F040E08091E8008E77809395 -:10315000E8006FCF44914093F1003196215031093E -:103160000196E8CF803809F0E8CE8091E800877FAB -:103170008093E80080912F038093F10087CE811126 -:10318000DCCE10913203123008F0D7CE8091E800E7 -:10319000877F8093E80010932F030E9480041123FF -:1031A00011F084E005C08091E30087FDFACF81E053 -:1031B00080932E0342E061EC81E00E949F0442E292 -:1031C00061EC84E00E949F0442E261EC82E00E9494 -:1031D0009F0442E260EC83E00E949F04AECE8091A7 -:1031E0003203813009F0A9CE81E0933009F080E00C -:1031F00080932D031092E9008091E800877F8093EF -:10320000E8000E94800499CE9F92AF92BF92CF9225 -:10321000DF92EF92FF920F931F93CF93DF9300D033 -:1032200000D0CDB7DEB77C01FC0183819481892B6E -:1032300031F08081918189238F3F09F0F0C50F9093 -:103240000F900F900F90DF91CF911F910F91FF90F2 -:10325000EF90DF90CF90BF90AF909F90089598012E -:1032600022513F452031310508F0CEC58FEF93E064 -:103270000E94712F025167E0C62E62E0D62E88238D -:1032800039F1809140028770D1F2F7018281882361 -:10329000B1F282E00F900F900F900F90DF91CF91DD -:1032A0001F910F91FF90EF90DF90CF90BF90AF9064 -:1032B0009F900C945515C114F4E0DF0611F3C6017C -:1032C0000E94712F811101C001502FEFC21AD20A42 -:1032D0000111F1CF1C821B82BB24B3945AE0A52EAE -:1032E00086010F5F1F4FC6010E94712F89831A82CA -:1032F000882339F29FEF980F933008F58A83B982BB -:1033000032E0C30ED11CC8010E94712F8B83882329 -:1033100009F4B7CF8E010F5F1F4FF801808188231A -:10332000F9F2813009F043C091818281913049F4F2 -:103330000E5F1F4F0E94280D0F5F1F4FEECF6801D9 -:10334000E9CF923029F40E5F1F4F0E94730CF4CF27 -:10335000933029F40E5F1F4F0E944E0BEDCF943037 -:1033600019F00F5F1F4FE8CF0E5F1F4F30E020E0D6 -:10337000B8016F5F7F4FF80141818053990B8A300C -:10338000910550F021503109B8F28FE99FE0019783 -:10339000F1F700C00000F6CFA29EF001A39EF00D51 -:1033A00011249C012E0F3F1F842F8B01E1CF0E941F -:1033B000A90DC2CF81E00E9471150E94351561CF21 -:1033C00081E00E944415F9CF82E0FBCF04389FE5ED -:1033D000190709F483C008F473C00538FFE51F0717 -:1033E00009F041C5882309F43EC580EE0E94730CA4 -:1033F00081EE0E94730C80E10E94730C80E10E94B8 -:103400004E0B81EE0E944E0B80EE0E944E0B80917F -:10341000E60191E062E189278093E601882309F4BF -:103420008DC08FE00E94BE1066E18FE00E94BE104A -:103430001AC5882369F180914F02811106C081E08D -:1034400080934F0282EE0E94730C0E94A20590931B -:103450004E0280934D028BE20E94730C04C58823B8 -:10346000A1F080914F02811106C081E080934F024C -:1034700082EE0E94730C0E94A20590934E028093EC -:103480004D0281EE0E94730CE6CF81EE0E944E0B3E -:103490008BE20E944E0BE7C4882309F4E4C481EE5A -:1034A0000E94730C83EE0E94730C8FE40E94730CD5 -:1034B0008FE40E944E0B83EE0E944E0B81EEE9CF0B -:1034C000882309F4D0C481EE0E94730C83EE0E941D -:1034D000730C80E50E94730C80E5EBCF882309F420 -:1034E000D0CE10914C0281E0182710934C020E941C -:1034F000A20590934B0280934A0268E1112381F068 -:103500008FE00E94BE1069E18FE00E94BE106AE168 -:103510008FE00E94BE106BE18FE00E94BE10B1CE22 -:1035200084EB0E94BE1069E184EB0E94BE106AE148 -:1035300084EB0E94BE106BE184EBEFCF8FEA0E9418 -:10354000BE1066E18FEA72CF82EE0E94730CC6C491 -:1035500083E00E942F0B88E10E94730C88E10E9497 -:103560004E0B83E00E94240BB9C482EE0E94730CC0 -:1035700087E50E94280DB2C486EE0E94280D88E1DE -:10358000F8CF895AC5C482EE0E944E0BD9C48CE292 -:103590000E94280D8091E801882309F4D1C489E3B1 -:1035A0000E94280DCDC488E2FBCF033FFCE51F0736 -:1035B00039F1A0F4083D3CE51307F1F0093D8CE535 -:1035C000180751F1073D9CE5190709F0BDC426E233 -:1035D00041EE61EEC7010E94450D53CE053FECE57B -:1035E0001E07B1F088F0063F2CE5120709F0ACC4C5 -:1035F00027E245EE66EEEECF27E245EE65EEEACF36 -:1036000026E241EE60EEE6CF27E245EE64EEE2CF41 -:1036100026E241EE62EEDECF28E241E0EFCF80917C -:103620000403806106309CE5190709F48CC0809181 -:103630000403886007301C4508F485C080910403AA -:10364000806281C0809104038D7F0C30FCE51F07F0 -:1036500009F479C070F4809104038C600A303CE571 -:10366000130709F470C008F481C0809104038E7FB1 -:103670006AC080910403877F0E309CE5190709F426 -:1036800062C0809104038B7F0F301C4508F45BC03F -:10369000809104038F7E57C00B3FFCE51F0709F4A0 -:1036A0005DC030F503313CE5130709F46DC078F4D3 -:1036B00001319CE5190709F463C002311C4509F08A -:1036C0007EC40E942816809104038F773CC0053188 -:1036D000FCE51F0709F460C008F474C0809105037D -:1036E00081600A3F1C4509F06AC48093050367C4E2 -:1036F0000F3F8CE5180709F44BC088F4809105034F -:103700008D7F0D3FECE51E0781F3809105038E7FD1 -:103710000E3F1C4550F3809105038360E6CF0130D6 -:103720002DE5120709F457C008F442C060E00230EA -:103730001D4509F044C48EE090E00E94852F3FC4EF -:103740008091040381608093040339C48091040351 -:103750008260F9CF809104038460F5CF80910503E6 -:103760008260C3CF809104038064EDCF0E9428164D -:10377000809104038068E7CF809104038F7DE3CFBD -:10378000809104038F7BDFCF80910403837FDBCFA5 -:10379000809105038C7FA9CF8091040382FB992738 -:1037A00090F921E0922790FB82F990FB83F9CBCF2F -:1037B00080910503982F909591708E7F892B90FBB7 -:1037C00081F993CF0E94281690910403892F97FBCB -:1037D00087F98058B8CF61E0AECF882309F402C4DE -:1037E000809143028A7A91E009F490E09093E90194 -:1037F000811106C089E20E94700A0E94000A41CD30 -:1038000085E3F9CF85E3F3C3043CFCE51F0709F426 -:1038100093C046EF53E16FEF73E1053C2CE51207CF -:1038200009F00AC40E9425062CCD093C3CE513078B -:1038300009F491C070F4073CECE51E0709F486C05A -:103840004AEE53E16EED73E1083CFCE51F0751F3CE -:10385000F3C30A3C2CE5120709F482C048E054E1A6 -:1038600069E174E10B3C3CE51307E1F2E5C3013D7E -:103870008CE5180709F487C0B0F40E3CECE51E0790 -:1038800009F47BC008F476C00F3C2CE5120709F45C -:1038900077C06EE089E0003D3CE5130709F0CCC33A -:1038A0000E949315EECC043D8CE5180709F471C015 -:1038B00078F4023DECE51E0709F468C061E088E198 -:1038C000033DFCE51F0709F0B7C30E942A14D9CCB9 -:1038D000053D2CE5120709F45FC00D35100709F40A -:1038E000D0CCAAC380918E0380FF1BC08E7F8093B3 -:1038F0008E0360918E0370918F038091900390915D -:1039000091030E941F13109284028FEF90E7E2E070 -:1039100081509040E040E1F700C000000E94D80FC5 -:10392000B0CC816080938E0361E08695CECF40E875 -:1039300055E169E875E176CF49E855E160E875E160 -:1039400071CF4FEF53E166EF73E16CCF4EED53E172 -:103950006AEE73E167CF46EC53E162ED73E162CF4B -:1039600042ED53E166EC73E15DCF49E154E168E07B -:1039700074E158CF61E081E0A8CF65E082E090CFAC -:1039800068E086E08DCF64E18FE08ACF67E185E172 -:1039900087CF62E289E184CF61E083E296CF0B3585 -:1039A0009DE5190701F10C351D4509F055C38091BE -:1039B000050382FB882780F991E089270E94980EF1 -:1039C0004BC30E942816FFEF24E33CE0F150204057 -:1039D0003040E1F700C000000E944F0C0E94B1157A -:1039E00050CC81E0EBCF80E0E9CF82810081118172 -:1039F000882369F0C8010E94E50ED82E682FC801FF -:103A00000E94D50AB8018D2D0E94D80E2BC3C80183 -:103A10000E94AE0AD82EF6CF212F2F70C22E107F13 -:103A200019F0C29490EFC922DD20C9F0CC2069F0D2 -:103A300080E2800F883010F001110BC080914302AA -:103A4000C82AC09243020E94000A802F0E94730C71 -:103A500019C080914202C82AC0924202F4CF802F3E -:103A60000E944E0BCC2071F0C09480E2800F883011 -:103A700010F001113AC080914302C822C092430263 -:103A80000E94000AE92DE850FF0B349720F40E94B1 -:103A9000DA050E94AB0BAA20A9F08091400280FDBC -:103AA00011C0F70112828595859585950E94711543 -:103AB000C7010E94041980914002859585958595DE -:103AC0000E94441560E0C7010F900F900F900F9077 -:103AD000DF91CF911F910F91FF90EF90DF90CF90EA -:103AE000BF90AF909F900C945B0F80914202C822D0 -:103AF000C0924202C5CF312F3F70B32E107F1032DB -:103B000019F0B29480EFB822002369F0013081F1FE -:103B1000DD20D9F1CC2091F1F701858180FF95CF8F -:103B20008F7085832BC0DD20B1F0909144028B2DE6 -:103B3000892BC11003C00E94440BA4CFE1E0CE1238 -:103B4000FACF2091050322FD9DCF891709F49ACF62 -:103B50008093440297CFC11006C00E94FA098B2DB2 -:103B60000E94390B8FCFF1E0CF1609F48BCFF5CF40 -:103B7000DD2031F025E02C1508F484CF8B2DDBCF30 -:103B800034E03C1508F47ECFEACFCC2041F3093372 -:103B900049F4FFEF27EE33E0F15020403040E1F7E9 -:103BA00000C00000802F0E944E0B6CCF812F8695A5 -:103BB0008695837061F0813009F064CFC8019370FD -:103BC000D11002C090E080E00E94AE055BCFC8013A -:103BD0009370D11002C090E080E00E94C40552CFE3 -:103BE000802FDD2029F00E94BC070E94DA064ACF10 -:103BF0000E940107FACF812F837009F03FC0D110D6 -:103C000041CF402F429546954770440F440F802F77 -:103C10008F7090E0042E02C0880F991F0A94E2F77B -:103C200030E020E004FF09C02FE030E002C0220FA6 -:103C3000331F4A95E2F72095309516951695137027 -:103C4000123099F078F440914502509146021130BB -:103C500039F0822B932B842395230E941E0B12CFC5 -:103C6000842B952B822B932BF8CF822B932B209197 -:103C700045023091460282279327EFCF8695DD20BB -:103C800011F0812F8170882309F4FCCE402F4295DA -:103C900046954770440F440F802F8F7090E0042E9C -:103CA00002C0880F991F0A94E2F730E020E004FF79 -:103CB00009C02FE030E002C0220F331F4A95E2F71F -:103CC00020953095169516951370123099F078F46A -:103CD0004091380350913903113039F0822B932BE6 -:103CE000842395230E942D15CDCE842B952B822BDA -:103CF000932BF8CF822B932B2091380330913903EB -:103D000082279327EFCF1F70DD2029F0812F0E949B -:103D10007115802F10CF802F0E94390B812F0E94A8 -:103D20004415B0CE023F09F441C060F4003F11F1E8 -:103D3000013FA1F1DD2009F457C0C11086CE812FCB -:103D40008F7131C0033FB9F1043FA1F7DD2009F4C1 -:103D500040C01F71812F0E9471158091050382FD63 -:103D600007C0E8E01E9FC0011124836080934002D9 -:103D7000812F19C0DD2069F084E08C1508F482CE13 -:103D80001F7181E090E002C0880F991F1A95E2F739 -:103D9000B3CF95E09C1508F475CEF2CF812F8F71CB -:103DA000DD2009F4BCCF0E9471156CCE812F8F717C -:103DB000DD20C9F3B4CF90E080E0DD2009F492CF9C -:103DC0001F7181E090E002C0880F991F1A95E2F7F9 -:103DD00089CF81E00E945515F1E0FC1508F052CE24 -:103DE00082E00E9455154ECECC2059F0093309F0DF -:103DF000D9CE2FEF37EE83E0215030408040E1F7FD -:103E0000CFCE812F8F718BCF00313FE5130709F49F -:103E1000D1CA01319FE51907A9F482E0CCCA61E05B -:103E2000C7010E945B0F8C01F7018281811117CAC3 -:103E30000031FFE51F0709F4C3CA01312FE512075E -:103E400009F4C2CA0238EFE51E0709F425CB08F0D1 -:103E5000BDCA00382FE5120709F4EBCA01383FE567 -:103E6000130709F4FCCAF7018281882369F0C801AD -:103E7000815E9C45059740F46FE1600F60935002AE -:103E80008CE090E00E94852F17FF8FCBF701828195 -:103E9000882309F459C00E94DA05869581708093C1 -:103EA000E80190915002913029F4882319F089E3B8 -:103EB0000E94280D809143028093E70110924302F3 -:103EC00080915002813009F443CB882309F43CCB24 -:103ED000823009F44ACB843009F44ECB8FE39CE95D -:103EE0000197F1F700C000005801E894B7F84CE0E2 -:103EF000C42ED12CC5010C2C02C0969587950A942E -:103F0000E2F78F7096EF980F963008F43ACB805D09 -:103F10000E94A90D94E0C91AD108ECEFCE16EFEF7C -:103F2000DE0641F780915002813009F430CB8823BE -:103F300009F429CB823009F426CB843009F433CB41 -:103F40008091E70180934302F7018281882309F47D -:103F500046C0109295030230FCE51F0708F44AC0E2 -:103F600006312CE5120738F098012A5F3C452930CC -:103F7000310508F03FC00E94B40F90930503809371 -:103F8000040300313CE5130709F4F6CB08F084CBB9 -:103F900008309CE5190709F4E5CB08F053CB043051 -:103FA000FCE51F0709F4D6CB08F039CB02303CE51D -:103FB000130709F4C5CB03301C4509F4C7CB609146 -:103FC00004031091050384E090E00E94852F612F87 -:103FD00082E290E00E94852F0E94281652C9063185 -:103FE0001C45D1F58091E90181110CCC89E20E9438 -:103FF000450A03CC06312CE5120709F4EECB80917B -:10400000430282720C3C9CE5190709F4AECC08F01F -:104010002ECC063CFCE51F0709F493CC08F005CC38 -:10402000033C3CE5130709F482CC08F0EDCB023CDD -:10403000ECE51E0709F456CC0A35FDE51F0709F427 -:10404000D0CC08F0ACCC01153CE5130709F4B9CC91 -:104050000E3D1C4509F4C2CCF7018681978100977B -:1040600009F4C3CC0E9472088C01F701D280C5808C -:10407000C2943FE0C322809140028770A1F0AD2C32 -:10408000DD2091F0812F807F803421F080E2800F4D -:10409000883048F082E00E94551580914002877078 -:1040A000AA24A3948111A12C912E92942FE0922204 -:1040B000FBE0F91508F4E6CCE92DF0E0ED52F04D07 -:1040C0000C94042FCF93DF938091FB01807FA1F4A8 -:1040D0008091F801882381F080913F02D091FE0108 -:1040E0006091F6017091F701A091F901B091FA0188 -:1040F000C62FC723D81303C0DF91CF91089590E056 -:10410000109711F0CF3F19F401968770F3CF9C01FF -:1041100043E0220F331F4A95E1F7F901E150FE4FCA -:1041200041814713F1CF40814613EECF42814111C7 -:10413000EBCF438154814A1B5B0B483C510520F770 -:104140008091FB018F7080618093FB01F901EC5F2E -:10415000FD4F80818F708061808386EF91E00E94A7 -:104160000419DF91CF910C94A40AAF92BF92CF9221 -:10417000DF92EF92FF920F931F93CF93DF93CDB710 -:10418000DEB765970FB6F894DEBF0FBECDBF8C01CA -:1041900085E0F801DE01519601900D928A95E1F7D4 -:1041A000F801E28066EFA62E61E0B62E6091F9017B -:1041B0007091FA016115710509F468C19091F601D9 -:1041C0004091F701892F84238F3F09F45FC120813B -:1041D0003181C380D480F090F801F601E61BF70B23 -:1041E000FF2009F41DC18091FB01582F507FE83C4E -:1041F000F10508F0D0C0511181C0FE2C43132BC033 -:10420000921329C06091FC017091FD01F801468173 -:10421000578164177507F9F4E1101DC08F70806134 -:104220008093FB01C5010E9404198091FB01F801F4 -:1042300085838F2D65960FB6F894DEBF0FBECDBF78 -:10424000DF91CF911F910F91FF90EF90DF90CF9072 -:10425000BF90AF900895CD2829F0822F83238F3F00 -:1042600009F02FC180E0F82FF170DF2E80FF3CC0F5 -:1042700080913F024091FE01841315C0298B3A8B37 -:1042800089899A890E94210F292F22952F70223027 -:10429000F8F0243020F59F70F9F0F8019581907FB7 -:1042A000D9F4D12C1FC090E0FC0153E0EE0FFF1FAA -:1042B0005A95E1F7E150FE4F5181351306C0508108 -:1042C000251303C05281E5120FC001968770D4CF29 -:1042D0009F7011F0882329F3805E883010F3C801A5 -:1042E0000E940419FD2CA5CFEE2009F4A2CF8091E5 -:1042F000FB0181608093FB01F12C9BCF43131BC01A -:10430000921319C04091FC015091FD01F8012681E2 -:1043100037814217530779F4E1100DC08583C80136 -:104320000E94041988E0F801A6EFB1E001900D9217 -:104330008A95E1F77ECFC8010E942D0F882339F1BD -:10434000EE2029F18091FB018032A0F02091F6014E -:104350003091F7013A8729871B86DD86CC868E87C8 -:104360008091FC019091FD01988B8F87CE01099679 -:104370000E94041988E0F801A6EFB1E001900D92C7 -:104380008A95E1F70E946220FF24F39452CFC8017E -:104390000E940419F9CF51110AC086EF91E00E94E2 -:1043A000041988E0F50111928A95E9F7A5CF431326 -:1043B00018C0921316C04091FC015091FD01F80104 -:1043C000268137814217530761F4E1100AC08583C3 -:1043D000C8010E94041988E0F50111928A95E9F755 -:1043E00028CFC8010E942D0F882389F2EE2079F290 -:1043F0008091FB01803208F4BDCF2091F60130910D -:10440000F7013A8329831B82DD82CC828E838091DF -:10441000FC019091FD0198878F83CE010196A8CF72 -:10442000E83CF105C0F6FE2CEE2009F4B0CF4313B2 -:104430001FC092131DC02091FC013091FD01F801B5 -:10444000868197812817390799F49091FB0190FD97 -:1044500069CF907F09F466CF8091FB018583903FFF -:1044600009F45DCF982F907F905F8F70892B56CF86 -:10447000C8010E942D0F81117DCF8091FB018160C9 -:104480008093FB01C8010E940419D3CEEE2009F4E9 -:104490007ECFC8010E942D0FF82E882309F477CF14 -:1044A00088E0F801A6EFB1E001900D928A95E1F75E -:1044B0008091F6019091F7010E94210F0E946220E5 -:1044C000B8CE81E08E25CFCECF93DF93CDB7DEB7C8 -:1044D00060970FB6F894DEBF0FBECDBF29873A872D -:1044E0004B875C876D877E878F87988BCE01099677 -:1044F0000E94B520811112C088E0FE013996DE01CC -:10450000119601900D928A95E1F78C859D85892BF6 -:1045100029F089859A8589238F3FA9F580913F02EB -:104520009091FE0189131CC060960FB6F894DEBF0F -:104530000FBECDBFDF91CF91089593E0AA0FBB1FAF -:104540009A95E1F7A150BE4F98E0FE013196019097 -:104550000D929A95E1F78093FE010E94A40ADECFA6 -:10456000B8E08B9FC001112481509E4F0E94B5205E -:104570008823D1F280913F0290E0019687709927BD -:1045800080933F02CBCFA091FE01B0E0CD01019618 -:104590008770992720913F022817190671F60E940B -:1045A00028161092FE0110923F0288E0E6EFF1E03B -:1045B000DF011D928A95E9F7B1CF0F931F93CF9337 -:1045C000DF9380918C02E0918B02CCE081111AC0C4 -:1045D000DF91CF911F910F910895D1E0DE0FD0931D -:1045E0008B020E2F10E0EC9FF0011124E357FD4FDA -:1045F00083819481892B29F08081918189238F3F48 -:1046000051F4ED2F80918C02E81738F310928C0250 -:1046100010928B02DDCFC09FD001C19FB00D11243D -:10462000A357BD4F16968D919C911797892B29F40E -:1046300018968D919C91019651F42081318142818F -:10464000538164817581868197810E946422C09F15 -:10465000F001C19FF00D1124E357FD4F1482138226 -:10466000D0CF1092F8021092F7021092420180917E -:10467000F6028093F5020E9414060C94DD222F921C -:104680003F924F925F926F927F928F929F92AF92E2 -:10469000BF92CF92DF92EF92FF920F931F93CF932F -:1046A000DF93C091F502E7E0FE2E01E010E0FCE0B0 -:1046B0002F2EAEEFEA2E8091F6028C1316C00E94C8 -:1046C000DD22DF91CF911F910F91FF90EF90DF904E -:1046D000CF90BF90AF909F908F907F906F905F90A2 -:1046E0004F903F902F900C941406D0E0FE01EE0FF7 -:1046F000FF1FE351FD4F80819181F89EF001F99EEB -:10470000F00D1124E85EFE4F2481211158C0309035 -:104710008C02ADE8B2E030E020E0412C5F012315CF -:1047200008F04BC01A966D907C901B97F501808025 -:1047300091804FEF5FEF512CC52CD12CF601EE0F7D -:10474000FF1FE80DF91D659174916616770609F44F -:10475000A601672B11F05394EFCF4F3F5407B1F1EF -:10476000B80102C0660F771F4A95E2F7462AA801F2 -:1047700002C0440F551F5A94E2F7415051094416A4 -:10478000150601F5229EF001239EF00D1124E3573A -:10479000FD4FF89ED001F99EB00D1124A85EBE4FCA -:1047A00012962D913C91139737832683E082E18204 -:1047B0009187808771E015967C930E94E60521968B -:1047C000C37079CF14961C921E9213972F5F3F4FA0 -:1047D0001C96A5CF9F92AF92BF92CF92DF92EF929D -:1047E000FF920F931F93CF93DF9300D000D000D0A0 -:1047F000CDB7DEB78E010F5F1F4F86E0F801119233 -:104800008A95E9F785E7C82E81E0D82EF12CE12CB6 -:10481000AA24A394B12CF60181916F018F3F09F472 -:1048200049C0F894E82FE295EF70F0E021A18F7075 -:10483000A50102C0440F551F8A95E2F7CA01922FC5 -:10484000982B91A392A18095892382A3789400C08C -:10485000EBE7F1E030E020E0912C41914F3F09F48B -:1048600073C0A42FA295AF70B0E090968C9190E0A9 -:104870004F7002C0959587954A95E2F780FD64C018 -:104880008A2D022E01C0880F0A94EAF7982A2F5F1A -:104890003F4F2430310509F7F601319780818F3F72 -:1048A00011F00E94180850EA5A95F1F7F801EE0D40 -:1048B000FF1D90828FEFE81AF80AE6E0EE16F10489 -:1048C00009F0A9CF46E050E0B80184E592E00E94EB -:1048D000642FFF24F394009709F4F12C892BB1F194 -:1048E00086E0F801A4E5B2E001900D928A95E1F727 -:1048F00081E0809349020E94A20590934802809330 -:10490000470280914702909148020E9493050597C3 -:1049100008F1809154028093670280915502809340 -:1049200068028091560280936902809157028093B9 -:104930006A028091580280936B02809159028093A1 -:104940006C021092490206C080E0A0CF809149021B -:104950008111D7CF80914201882301F18091F70224 -:104960009091F8020097D1F00E949305209189025E -:1049700030918A022817390788F49091F5028091C6 -:10498000F602981709F445C00E943F2310928A024C -:10499000109289021092F8021092F70280914F0251 -:1049A000882371F080914D0290914E020E949305F0 -:1049B000893E934028F082EE0E944E0B10924F02E7 -:1049C00080914C02882391F080914A0290914B0291 -:1049D0000E949305883E934048F00E94A205909360 -:1049E0004B0280934A0283E70E94280D8F2D269662 -:1049F0000FB6F894DEBF0FBECDBFDF91CF911F91F0 -:104A00000F91FF90EF90DF90CF90BF90AF909F906D -:104A100008950E94DD221092F8021092F7020E947F -:104A20001406BCCF2F923F924F925F926F927F926B -:104A30008F929F92AF92BF92CF92DF92EF92FF92AE -:104A40000F931F93CF93DF93CDB7DEB769970FB660 -:104A5000F894DEBF0FBECDBF498B5A8B6B8B7C8B1E -:104A60008D8B6111109242021D861E861F86188A48 -:104A700085E0FE017196DE01199601900D928A95EE -:104A8000E1F78C859D85892B31F089859A8589236D -:104A90008F3F09F0D4C129853A854B855C856D85AA -:104AA0007E858F8598890E946422C3C028EFC21634 -:104AB0002CE5D20629F4882379F00E943123EBCF2C -:104AC00039EFC3163CE5D30639F4882329F08091E9 -:104AD00042018111F2CFC3C108E111E0E12CB12CF8 -:104AE000A12C88248394912C9EEF592E4424439426 -:104AF000F8016081718166246A94762C20E0422F4F -:104B000050E0FA01EE0FFF1FE60FF71F8591949119 -:104B1000C816D90609F43A01892B11F02F5FEFCF9F -:104B2000F12CFFEF6F167F0609F445C0F8014481B0 -:104B3000F09042018F2D411180E0F82FF170FF2E8F -:104B4000F801258086819B85992309F408C1FF20FF -:104B500009F405C1211014C0A40101C0440F6A94D6 -:104B6000EAF7842B86838091890290918A028039AA -:104B7000914030F440E951E050938A024093890219 -:104B8000C40102C0880F991F2A95E2F70197F80126 -:104B900026812817190679F48091F7029091F8027E -:104BA000009709F45FC00E9493058139914008F491 -:104BB00059C0F8014482EF28FFEFAF1ABF0A095F1E -:104BC0001F4F26E0A216B10409F092CF8B858823EF -:104BD00009F420C1EE2009F41DC10E94A2059093A2 -:104BE000F8028093F70280918C02883010F591E0F2 -:104BF000980F90938C0298E0FE013996DE01119691 -:104C000001900D929A95E1F73CE0839FC001112439 -:104C100083579D4F28E0FE013196DC0101900D92F3 -:104C20002A95E1F72FEF3FEFFC0131872087D386EC -:104C3000C28669960FB6F894DEBF0FBECDBFDF9176 -:104C4000CF911F910F91FF90EF90DF90CF90BF9089 -:104C5000AF909F908F907F906F905F904F903F901C -:104C60002F9008958091F5026090F602982FF0E061 -:104C7000E0E0861114C09093F5020E171F0709F4A7 -:104C80009ACF90E0FC01EE0FFF1FE351FD4FB18280 -:104C9000A0820196837099278093F6028CCF282EEC -:104CA000312CF101EE0FFF1FE351FD4F20813181C7 -:104CB000F7E0F29FD001F39FB00D1124A85EBE4F24 -:104CC0002D913C911197398F288F712C60E070E005 -:104CD000E72FF0E0EE0FFF1F288D398DE20FF31F55 -:104CE0002591349121153105E1F0F8010190F08111 -:104CF000E02DFF8BEE8B60E005C02417350709F42B -:104D00007F2C6F5FE62FF0E0EE0FFF1F4E895F896B -:104D1000E40FF51F459154914115510571F77F5FDF -:104D2000D7CF7720C9F0F801671708F0FD0144825A -:104D30000E171F0721F49093F502F72C3CCF981320 -:104D400005C0AE17BF0711F49F5F937091012F5FED -:104D50003F4F822F83708DCFF0E0E0E0F7CF90E0FF -:104D600021101FC0B40102C0660F771F2A95E2F719 -:104D70009B01215031092817390731F4442309F4E4 -:104D800047C0C5010E94E605C40101C0880F6A94AE -:104D9000EAF7982F9095F801868189238683F22C73 -:104DA0000ACF9C01062C02C0359527950A94E2F79C -:104DB000A90141705527BC016150710986239723D1 -:104DC000892B11F5452B01F1F80182819381892B03 -:104DD000C1F01B821C821D821E8259825A820E944F -:104DE000A2058160582F9D838C83F8018281938175 -:104DF0008F83988729813A814B816D817E810E94C2 -:104E00006422F8011582C0CFF22FF1702F2EBCCF93 -:104E10002F2CBACF9091F5028091F602981731F0BD -:104E20000E943F23EE2009F436CE03CF0E94DD22FC -:104E30001092F8021092F7020E941406F3CF61E07C -:104E4000CE0109960E945B0F6C018B85F7EFCF16A0 -:104E5000FCE5DF0609F02ACE882309F43DCE81E087 -:104E60008093420118CE1F920F920FB60F92112419 -:104E70002F933F934F935F936F937F938F939F9362 -:104E8000AF93BF93CF93DF93EF93FF93D091E9005C -:104E9000DF708091EC00C82FC17080FDC0E81092D7 -:104EA000E9008091F000877F8093F00078940E9461 -:104EB0003D161092E9008091F00088608093F00028 -:104EC000CD2BCF70C093E900FF91EF91DF91CF918F -:104ED000BF91AF919F918F917F916F915F914F9112 -:104EE0003F912F910F900FBE0F901F9018951F921A -:104EF0000F920FB60F9211242F933F934F935F930E -:104F00006F937F938F939F93AF93BF93EF93FF9391 -:104F10008091E10082FF09C08091E20082FF05C01C -:104F20008091E1008B7F8093E1008091DA0080FF27 -:104F300024C08091D80080FF20C08091DA008E7F4D -:104F40008093DA008091D90080FF9BC080E189BD09 -:104F500082E189BD09B400FEFDCF81E080932E037C -:104F600080910903811109C00E9406040E94D104A6 -:104F70008091E20084608093E2008091E10080FFF4 -:104F800017C08091E20080FF13C08091E2008E7F05 -:104F90008093E2008091E20080618093E200809142 -:104FA000D80080628093D80019BC85E080932E03DE -:104FB0008091E10084FF29C08091E20084FF25C038 -:104FC00080E189BD82E189BD89B5982F917080FF0C -:104FD000FBCF8091D8008F7D8093D8008091E10035 -:104FE0008F7E8093E1008091E2008F7E8093E200CB -:104FF0008091E20081608093E20080912F038823FA -:1050000009F445C084E080932E038091E10083FF82 -:1050100027C08091E20083FF23C08091E100877F59 -:105020008093E10082E080932E0310922F03809101 -:10503000E1008E7F8093E1008091E2008E7F80937B -:10504000E2008091E20080618093E20042E060E053 -:1050500080E00E949F048091F00088608093F000BF -:10506000FF91EF91BF91AF919F918F917F916F9140 -:105070005F914F913F912F910F900FBE0F901F9016 -:10508000189519BC10922E031092090376CF8091C7 -:10509000E30087FD93E090932E03B7CF78941F929F -:1050A0001FB61F9211248F939F93AF93BF9380914C -:1050B000000390910103A0910203B09103030196B4 -:1050C000A11DB11D8093000390930103A0930203DF -:1050D000B0930303BF91AF919F918F911F901FBE1B -:1050E0001F9018951F921FB61F9211248F939F93A4 -:1050F000AF93BF938091FF02811113C08091000391 -:1051000090910103A0910203B09103034196A11D68 -:10511000B11D8093000390930103A0930203B09309 -:105120000303BF91AF919F918F911F901FBE1F905E -:105130001895CDB7DEB7EE970FB6F894DEBF0FBE69 -:10514000CDBF84B7877F84BF0FB6F894A8958091B0 -:105150006000886180936000109260000FBE80E85C -:1051600090E00FB6F89480936100909361000FBEB9 -:1051700085B7806885BF85B7806885BF86E198E080 -:105180009093C5018093C4010E9406040E94D1043B -:105190008091E20084608093E200789480912E03F5 -:1051A0008823A1F01091E9001F709091EC00892FE5 -:1051B000817090FD80E8182B1092E9008091E80042 -:1051C00083FD0E943D161F701093E90082E084BDAC -:1051D00093E095BD9AEF97BD80936E000E949B0F60 -:1051E000811102C00E94890E05E711E02BE7C22E53 -:1051F00021E0D22EF80181918F018F3F11F00E94A2 -:105200001808C016D106B1F786EF0E94180887EF7C -:105210000E94180883E90E94180886E90E9418086D -:10522000E4E5F2E08AE592E0A7E6B2E011921D9291 -:105230008E179F07D9F70E941D16811102C00E9488 -:10524000B11582E090E00E94712F809360020E946D -:10525000B40F90930503809304030E94EA238FE325 -:105260009CE90197F1F700C000000E94EA238091B9 -:10527000670280FF08C06FEF7FEF90E080E00E9440 -:10528000A32F0E944F0C83E090E00E94712F90E0CA -:105290000E941E0B80913803909139030E9489145B -:1052A000509A589A559A5D9A549A5C9A8CE090E07C -:1052B0000E94712F90E0B0E0A0E0809350029093A4 -:1052C0005102A0935202B093530280915A0281116D -:1052D00033C00E941D16811104C00E94B1150E94A6 -:1052E000A11588E090E00E94792F60938E0370935F -:1052F0008F0380939003909391036E7F71F40E94CB -:10530000A11588E090E00E94792F60938E0370933E -:105310008F0380939003909391030E942B06109229 -:10532000840280918E0380FF04C060E086950E9415 -:105330002A1481E080935A025198599A52985A9AA5 -:1053400089B1869581704A9928C290E0892B809313 -:105350005E028AEC92E090937C0280937B0260E094 -:1053600081E20E942A1481E090E00E942D1580E0E5 -:1053700091E09093FC028093FB0218E1C12ED12CA6 -:1053800000E4A02E87E692E096E0B92EB80E809158 -:105390002E039924939400E112E1853009F451C25F -:1053A0000E94EA23882359F08FB7F89440910003B4 -:1053B0005091010360910203709103038FBFE1E6F6 -:1053C000F2E0A7E6B2E010E000E0302F8D9191917D -:1053D000981709F45FC2292F282790E09924939405 -:1053E000422F492109F451C29DAB3EAB892191E086 -:1053F00009F490E09FAB0E94A2058160782F99AFDD -:1054000088AF4DA95EA96FA989AD0E941225F80148 -:10541000EF59FD4F808198269082809184028823E5 -:10542000D1F180918302E0918E03E695E81BE09331 -:105430007F02823009F045C2F0E0EC51FD4FE4916B -:105440000E2F10E0BBE08B2EB3E19B2E80918002EB -:10545000882361F0109280020E94A20590937E0240 -:1054600080937D0210928202109281020E94A20516 -:10547000E0917D02F0917E028E1B9F0B8F3F9F4734 -:1054800050F4E00FF11FF0937E02E0937D028DE770 -:1054900092E0F4010995E0915E02EE0FEE0FE093C9 -:1054A0005E0289B181FBEE24E0F84A9964C280E093 -:1054B0008E29E82BE0935E02EF70F0E0E158FE4F9A -:1054C000808190915D02890F80935D0220E084309D -:1054D00034F180915C028F5F80935C0212E018AB24 -:1054E00019AA81E08AAB0E94A2058160782F9CAB4B -:1054F0008BAB48A959A96AA98CA90E9412251BA7A0 -:105500001CA61DA60E94A2058160782F9FA78EA7CA -:105510004BA55CA56DA58FA50E94122521E0809169 -:105520005D028D3F2CF580915C02815080935C027E -:105530001EA21FA281E088A70E94A2058160782F89 -:105540009AA789A74EA15FA168A58AA50E941225E6 -:1055500019A21AA21BA20E94A2058160782F9DA306 -:105560008CA349A15AA16BA18DA10E94122521E013 -:1055700080915D02082E000C990B64E070E00E949F -:10558000CE2E80935D02222359F08FB7F89440917C -:1055900000035091010360910203709103038FBFD8 -:1055A00086E0E4E7F2E0DE01119601900D928A9523 -:1055B000E1F7909076028090770210917802009146 -:1055C000790210927602109277021092780210926D -:1055D0007902892D882909F448C08091720290913E -:1055E00073020E9493059C0190916E02992309F425 -:1055F000AEC323333105C8F19F3F19F09F5F9093ED -:105600006E02992059F00E949C079FEF19140CF428 -:1056100091E0899F802D112480937602882059F093 -:105620000E949C079FEF18140CF491E0899F802D35 -:10563000112480937702309176023323B1F02091C8 -:105640007702222391F045EB3403C0011124992302 -:1056500009F494C19093760245EB24039001112440 -:10566000332309F48FC130937702812F802B09F403 -:1056700048C080917002909171020E9493059C0134 -:1056800090916D02992309F45DC325363105C8F167 -:105690009F3F19F09F5F90936D02112359F00E9474 -:1056A0007A079FEF11160CF491E0899F802D112449 -:1056B00080937802002359F00E947A079FEF10161A -:1056C0000CF491E0899F802D112480937902309110 -:1056D00078023323B1F020917902222391F045EB37 -:1056E0003403C0011124992309F450C19093780226 -:1056F00045EB240390011124332309F44BC130936B -:1057000079028091760290917702892B90917802AC -:10571000892B90917902892B11F00E94DA0686E09C -:10572000FE013196A4E7B2E001900D928A95E1F76F -:105730000E94DA0590915F02891731F00E94DA0524 -:1057400080935F020E94AB0B80912E03843009F09E -:105750001ECE83E08093E9008091E80082FF17CE9F -:105760008091E80090E085FF06C00E942504882310 -:1057700009F414C191E08091E8008B778093E800F0 -:10578000992309F404CEE981E150E33108F088C19E -:10579000F0E0E152F04D0C94042F92E0D7CD8091CF -:1057A0002E03843009F440C080E00E94AB0B1092BD -:1057B000840280917A02811116C090927A028091BF -:1057C0008E03982F917090935B028E7F80938E034F -:1057D0009FEFE0E7F2E09150E040F040E1F700C0D9 -:1057E00000000E94D80F1092FF020FB6F894A895FF -:1057F000C09260000FBEA092600083B7817F84607A -:1058000083BF83B7816083BF7894889583B78E7F89 -:1058100083BF0FB6F894A89580916000886180934B -:105820006000109260000FBE80912D03882349F024 -:105830000E94EA23E7E6F2E08191811164C2BE1280 -:10584000FBCF80912E03853009F4A9CF0E94281642 -:105850000E94DA050E94AB0B10927A0280915B02E3 -:10586000882361F080918E03816080938E0360E0D5 -:1058700086950E942A140E94C20F92CD80918502C3 -:105880008823C9F30E94D80FF6CF9F5F990C9430FC -:1058900009F0A6CD0F5F1F4F0630110509F095CD19 -:1058A0008FEF8AAF8BAF1CAE0E94A2058160782F6C -:1058B0009EAF8DAF4AAD5BAD6CAD8EAD0E94122533 -:1058C000ACCD863059F4F0E0EF51FD4FE4910E2F4E -:1058D00010E0ABEF8A2EA2E19A2EB8CD893061F4A8 -:1058E000E695F0E0E252FD4FE4910E2F10E0F7E66E -:1058F0008F2EF2E19F2EAACD8F3061F4E695F0E075 -:10590000E552FD4FE4910E2F10E0E9EF8E2EE1E11C -:105910009E2E9CCD853159F4F0E0E852FD4FE49184 -:105920000E2F10E07BEA872E71E1972E8FCD08E2D3 -:1059300010E042E2842E41E1942E883109F486CDB4 -:10594000833249F4E6EDF2E00591149162EA862E85 -:1059500062E1962E7BCD04EF11E059EE852E50E1E9 -:10596000952E843209F472CD00ED17E03AE2832ED1 -:1059700036E0932E6BCD82E090E09ACD81E080936B -:1059800076026ACE81E0809377026FCE81E08093C9 -:105990007802AECE81E080937902B3CE00E210E0CF -:1059A000CE0101964C018091E80085FD0AC08091EE -:1059B000E8008B778093E8000E942504882399F300 -:1059C000D9CE8091F100F40181934F01015011096A -:1059D00051F7D0CE1A8289E08B832DC08A81823024 -:1059E00009F4A7C18330A9F0813009F059C02FB75D -:1059F000F8946091000370910103809102039091EB -:105A000003032FBF0E940A2F6B837C838D839E83A9 -:105A100012C0809167028B83809168028C83809191 -:105A200069028D8380916A028E8380916B028F83DD -:105A300080916C02888780912E03843009F0A7CC76 -:105A40001091E9001F709091EC00892F817090FDFA -:105A500080E8182B82E08093E9008091E80080FFC5 -:105A60000DC050E040E060E270E0CE0101960E947F -:105A700056048091E8008E778093E8001F701093A1 -:105A8000E90085CC8A81823059F46B817C818D81DB -:105A90009E810E940A2F86E290E00E94852FCBCF44 -:105AA0008FEF8983C8CF4C816B818A810E94B20EAF -:105AB0009827892798279E838D83BDCF8D809E80D0 -:105AC0009824892498248A810B81F8E00F9F800113 -:105AD000112420E3829F000D111D11248C8190E080 -:105AE000880F991F080F191F692DC80187960E94FA -:105AF000852F682DC8018896D0CF0E941F0E9BCF9E -:105B00008A818138C1F060F4803809F094CF20E0B8 -:105B10004B816091900380918F030E9431138BCF52 -:105B2000823859F1833809F086CF20E04091910303 -:105B30006C818B81F2CF60E08B810E942A149B8163 -:105B400080918E03911111C08E7F80938E031092ED -:105B500084024FEF80E792E0415080409040E1F7AF -:105B600000C000000E94D80F66CF816080938E0332 -:105B700060E086950E942A145ECF8B818093920309 -:105B80005ACF8A81813899F030F4803809F053CFA8 -:105B90008091910321CF823891F0833809F04BCF67 -:105BA00080918F038B83809190038C8344CF80916D -:105BB0008E0380FF02C086950FCF80E00DCF8091CD -:105BC00092030ACF60918E0370918F0380919003AE -:105BD000909191030E941F132ECF80E18A832BCFD7 -:105BE00081E08A8389EFF8CE0A811B811027012783 -:105BF0001027FE0131963F018C80CF01880D911D49 -:105C00004C01C801895F9D4F8614970409F413CF96 -:105C1000093FE1E01E0750F40E94712FF3018483D5 -:105C20000F5F1F4FFFEF6F1A7F0AEBCFF301148254 -:105C3000F7CF0A811B81102701271027CE0101967B -:105C40003C018C80800E912E911CC801895F9D4F74 -:105C50008016910609F4EFCE093FE1E01E0720F41B -:105C6000F30164810E94852FFFEF6F1A7F0A0F5F97 -:105C70001F4FEBCF0E940F0EDECE8AE0AFCF0A811E -:105C80001B81102701271027CE0101963C018C8033 -:105C9000FC01E80DF11D4F01C80187968614970499 -:105CA00009F4C9CE003EF1E01F0750F40E94712FA5 -:105CB000F30184830F5F1F4FFFEF6F1A7F0AECCF52 -:105CC000F3011482F7CF0A811B81102701271027C7 -:105CD000CE0101963C018C80800E912E911CC80152 -:105CE00087968016910609F4A6CE003EE1E01E07D5 -:105CF00020F4F30164810E94852FFFEF6F1A7F0A61 -:105D00000F5F1F4FECCF09BD19BD09B400FEFDCFD9 -:105D10008091D8008F7D8093D8008091E0008260D0 -:105D20008093E0008091E00081FDFCCF0E94281666 -:105D300088CD86E290E00E94712F1B821C821D821A -:105D40008E8379CE2D32314008F0A4CCDACC2D32BE -:105D5000314008F053CC89CC87FB082E062687FDFE -:105D6000819567FD61950E94422F0EF4919507FC85 -:105D700081950895AA1BBB1B51E107C0AA1FBB1F39 -:105D8000A617B70710F0A61BB70B881F991F5A95C7 -:105D9000A9F780959095BC01CD01089597FB072E3A -:105DA00016F4009407D077FD09D00E94BA2E07FCA4 -:105DB00005D03EF4909581959F4F0895709561951B -:105DC0007F4F0895A1E21A2EAA1BBB1BFD010DC037 -:105DD000AA1FBB1FEE1FFF1FA217B307E407F5079B -:105DE00020F0A21BB30BE40BF50B661F771F881F77 -:105DF000991F1A9469F760957095809590959B010D -:105E0000AC01BD01CF010895EE0FFF1F0590F49185 -:105E1000E02D09946927962769277827872778270F -:105E200008950E94192F332312F48A1B9B0B0C94A4 -:105E30002A2FA29FB001B39FC001A39F700D811DA7 -:105E40001124911DB29F700D811D1124911D089583 -:105E50000E94192FB7FF0895821B930B08950E948B -:105E6000192FA59F900DB49F900DA49F800D911D9B -:105E700011240895B7FF0C942F2F0E942F2F821BFF -:105E8000930B0895991B79E004C0991F961708F0A9 -:105E9000961B881F7A95C9F780950895FB01DC0150 -:105EA00002C005900D9241505040D8F70895FC0172 -:105EB0004150504030F001900616D1F73197CF0194 -:105EC0000895882799270895FB01DC0104C08D916E -:105ED0000190801921F441505040C8F7881B990B5C -:105EE0000895F999FECF92BD81BDF89A992780B5A2 -:105EF0000895A6E1B0E044E050E00C94AB2FA8E197 -:105F0000B0E042E050E00C94AB2F262FF999FECF81 -:105F100092BD81BDF89A019700B4021639F01FBAFC -:105F200020BD0FB6F894FA9AF99A0FBE0895039619 -:105F3000272F0E94862F0E94852F252F0E94862FB3 -:105F4000242F0C94862F0196272F0E94862F0C94C5 -:105F5000852FDC01CB01FC01F999FECF06C0F2BD13 -:105F6000E1BDF89A319600B40D9241505040B8F717 -:105F70000895F894FFCF460F460F4F0F4F0F510F64 -:105F80004F0F4F0F4F0F460F460F560F4F0F4F0F2C -:105F9000560F22174A179D174A179D177D17B517D9 -:105FA0009D17B218BF180C1D0C1D7B1D7B1DD61D27 -:105FB000F01D421D421DFB1D831E921E921EEA2CE7 -:105FC000EE2C422D532D5E2D7D2D802DC12DE22DE9 -:105FD000502D502DED2DF02DF42D192E3A2E3D2E55 -:045FE0003F2E632EBF -:105FE40090050F0CEE0BEA0BE60B01191A1B1C1D96 -:105FF4001E1F202122010201FC002A00000000F6DD -:10600400004C00000000F0005000000000EA0051C5 -:1060140000000000E4004F00000000DE0052000019 -:1060240000000101818283E200E900EA00B500B6C4 -:1060340000B700CD008301CC008A019201940121B4 -:1060440002230224022502260227022A02B300B4F4 -:10605400006F007000F03435366667F6F7939600EB -:10606400FF0100010000FFFF0000010001FF00002C -:1060740001020202020606060909090909090F0FAD -:106084000F0F0F0F151515181919191919191919B1 -:10609400191923244022B6DA01B8010201FB0614BF -:0460A40007340700B6 -:00000001FF From 24349ceeb17ae6d53801fe7346129a8844d726a8 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Mon, 27 Sep 2021 01:15:03 -0400 Subject: [PATCH 028/155] Restore hex file. --- .../ps17/solartempest_ps17_via.hex | 1549 +++++++++++++++++ 1 file changed, 1549 insertions(+) create mode 100644 keyboards/solartempest/ps17/solartempest_ps17_via.hex diff --git a/keyboards/solartempest/ps17/solartempest_ps17_via.hex b/keyboards/solartempest/ps17/solartempest_ps17_via.hex new file mode 100644 index 000000000000..ee4f5cf5db02 --- /dev/null +++ b/keyboards/solartempest/ps17/solartempest_ps17_via.hex @@ -0,0 +1,1549 @@ +:100000000C94BD030C9404040C9404040C94040498 +:100010000C9404040C9404040C9404040C94040440 +:100020000C9404040C9404040C9477270C94332748 +:100030000C9472280C9404040C9404040C9404048E +:100040000C9404040C9404040C9404040C94040410 +:100050000C9404040C944E280C9404040C94040492 +:100060000C9404040C9404040C9404040C940404F0 +:100070000C9404040C9404040C9404040C940404E0 +:100080000C9404040C9404040C9404040C940404D0 +:100090000C9404040C9404040C9404040C940404C0 +:1000A0000C9404040C9404040C94040400000FFF4A +:1000B00078FF000000000000D7FF78FF000000007C +:1000C000000080FF64FF00000000000005FF78FFD3 +:1000D0000000000000005FFF5AFF00000000580011 +:1000E0006000000058005E00000058005D00000045 +:1000F00058005C00000057006000000057005F00DF +:10010000000005010902A10185020901A1000509FC +:1001100019012908150025019508750181020501BD +:10012000093009311581257F950275088106093846 +:100130001581257F950175088106050C0A38021581 +:1001400081257F950175088106C0C005010980A140 +:1001500001850319012AB700150126B7009501751D +:10016000108100C0050C0901A101850419012AA014 +:1001700002150126A002950175108100C005010934 +:1001800006A1018505050719E029E7150025019558 +:1001900008750181020507190029EF150025019551 +:1001A000F075018102050819012905950575019170 +:1001B00002950175039101C00660FF0961A1010963 +:1001C00062150026FF00952075088102096315005D +:1001D00026FF00952075089102C005010906A101BE +:1001E000050719E029E71500250195087501810229 +:1001F0009501750881010507190029FF150026FFE3 +:1002000000950675088100050819012905950575F1 +:10021000019102950175039101C0000000000000EA +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000007E0F31 +:1002400000D4FFFFFFC7000000780000000000009E +:1002500000002A2B28000000000000000000000021 +:10026000000000000029000000002C1E3420212284 +:1002700024342627252E362D3738271E1F202122ED +:10028000232425263333362E37381F040506070866 +:10029000090A0B0C0D0E0F10111213141516171856 +:1002A000191A1B1C1D2F3130232D35040506070894 +:1002B000090A0B0C0D0E0F10111213141516171836 +:1002C000191A1B1C1D2F3130354CD400CA00C00038 +:1002D000B600AC00000000047F3F1F64321464329B +:1002E00014783C1E1E140A050001010101010101E0 +:1002F00001010202020202020202020303030303DB +:1003000003030304040404040404050505050506A9 +:100310000606060607070707070808080809090967 +:10032000090A0A0A0B0B0B0C0C0C0D0D0D0E0E0E10 +:100330000F0F0F10101111111212131314141515A1 +:1003400016161717181819191A1A1B1B1C1D1D1E13 +:100350001E1F202021222223242425262627282967 +:10036000292A2B2C2D2D2E2F303132323334353695 +:100370003738393A3B3C3D3E3F4041424344454695 +:100380004748494A4C4D4E4F505153545556585971 +:100390005A5B5D5E5F616264656668696B6C6D6F18 +:1003A0007072737577787A7B7D7E8082838587888B +:1003B0008A8C8E8F91939596989A9C9EA0A2A3A5C5 +:1003C000A7A9ABADAFB1B3B5B7BABCBEC0C2C4C6C6 +:1003D000C9CBCDCFD1D4D6D8DBDDDFE2E4E7E9EB82 +:1003E000EEF0F3F5F8FAFDFFFFAA7F554008070687 +:1003F000050D0C0B0A11100F161514131A181B12E9 +:100400000903010002040E17192223252628292A90 +:100410002C2D2F3032333536383A3B3D3E40424367 +:100420004547494A4C4E5051535557595A5C5E60A6 +:1004300062646668696B6D6F71737577797B7D7FB8 +:1004400081838587898A8C8E90929496989A9C9EB7 +:100450009FA1A3A5A7A8AAACAEAFB1B3B4B6B8B9D3 +:10046000BBBCBEBFC1C2C3C5C6C7C9CACBCCCDCE3B +:10047000D0D1D2D2D3D4D5D6D7D7D8D9D9DADADB1E +:10048000DBDBDCDCDCDCDCDDDDDDDDDCDCDCDCDCAA +:10049000DBDBDBDADAD9D9D8D7D7D6D5D4D3D2D2E9 +:1004A000D1D0CECDCCCBCAC9C7C6C5C3C2C1BFBED1 +:1004B000BCBBB9B8B6B4B3B1AFAEACAAA8A7A5A33C +:1004C000A19F9E9C9A98969492908E8C8A898785FB +:1004D00083817F7D7B79777573716F6D6B696866DA +:1004E0006462605E5C5A5957555351504E4C4A49AC +:1004F00047454342403E3D3B3A3836353332302F54 +:100500002D2C2A2928262523224E007F004B00006F +:100510000001515400550056005F00600061005713 +:10052000005C005D005E00000059005A005B00584E +:100530000062000000630000004F00010050000056 +:10054000000100AD002C0053001450025303532A45 +:100550000001000100010000000100010001000095 +:100560005C005C000001000000300001002F000072 +:100570000010500500170011030D00160007002D94 +:1005800001060119011000000011011D03E10057CF +:10059000012C000000E2000000805F0100815F008C +:1005A000001050B9004A0017012B0352002B011A0A +:1005B00001500051004F000000B6002C00B7002889 +:1005C000004E0000004B000000805F0100815F00D2 +:1005D0000010500100010001000100520001000163 +:1005E00000500051004F00000010033D080100536F +:1005F0000068000000690000000100010001000027 +:1006000000010001000100010001000100010001E2 +:1006100000010001000100000001000100010001D3 +:1006200000010000000100000001000100010000C5 +:1006300000010001000100010001000100010001B2 +:1006400000010001000100000001000100010001A3 +:100650000001000000010000000100010001000095 +:100660000001000100010001000100010001000182 +:100670000001000100010000000100010001000173 +:100680000001000000010000000100010001000065 +:100690000001000100010001000100010001000152 +:1006A0000001000100010000000100010001000143 +:1006B0000001000000010000000100010001000035 +:1006C0000001000100010001000100010001000122 +:1006D0000001000100010000000100010001000113 +:1006E00000010000000100000009025B000301009E +:1006F000A0FA090400000103010100092111010011 +:10070000012240000705810308000A0904010002D4 +:1007100003000000092111010001222200070582C7 +:100720000320000107050303200001090402000162 +:100730000300000009211101000122B60007058411 +:100740000320000A12010002000000084B411500BE +:100750000200010200010A0350005300310037007B +:1007600000001203410054004C0041004E005400B0 +:100770004900530000000403090411241FBECFEFF9 +:10078000DAE0DEBFCDBF04B603FE27C0809196033A +:1007900090919703A0919803B09199038730904B63 +:1007A000A740B04BD1F41092960310929703109289 +:1007B00098031092990314BE84B7877F84BF0FB645 +:1007C000F894A895809160008861809360001092F1 +:1007D00060000FBEE0E0F8E3099511E0A0E0B1E0B1 +:1007E000E4EEFFE502C005900D92A43CB107D9F7F5 +:1007F00023E0A4ECB1E001C01D92A639B207E1F7F5 +:100800000E9499280C94B92F0C940000E8EDF0E0B8 +:1008100080818E7F80831092E2001092DA00109225 +:10082000E100A0EEB0E08C9181608C9380818F77A5 +:10083000808319BCA7EDB0E08C918E7F8C93808172 +:100840008F7E80831092090308952091E4003091F7 +:10085000E50095E6A9012091EC00822F817020FF30 +:1008600006C08091E80080FF06C080E008952091D6 +:10087000E80022FD1AC080912E03882389F085307C +:1008800089F08091EB0085FD0FC02091E40030914C +:10089000E50042175307F9F29150E1F684E008951C +:1008A00082E0089583E0089581E00895EF92FF9239 +:1008B0000F931F93CF937C018B010E942504C82FB7 +:1008C000811117C08091E80085FD0BC08091E80080 +:1008D0008E778093E8000E942504882399F3C82F1F +:1008E00008C0F70181917F018093F1000150110947 +:1008F00049F78C2FCF911F910F91FF90EF900895A2 +:100900008091300387FF13C08091E80082FF06C00A +:100910008091E8008B778093E80004C080912E03DB +:100920008111F2CF089580912E038823D9F380910D +:10093000E80080FFF8CF8091E8008E77ECCF982F09 +:100940009093E900242F762F50E0891731F07091B1 +:10095000EC002091ED005091F00021FD07C09F5F59 +:10096000973071F78093E90081E008953091EB00B2 +:100970003E7F3093EB003091ED003D7F3093ED00F2 +:100980003091EB0031603093EB007093EC002093DA +:10099000ED005093F0002091EE0027FDE0CF80E0C5 +:1009A0000895CF92DF92EF92FF920F931F93CF9310 +:1009B000DF93C8EDD0E088818F7E8883E7EDF0E09B +:1009C00080818160808384E082BF81E0809309031D +:1009D00088818E7F888302EE10E0F80110821092E9 +:1009E000DA0081EEC82ED12CF601108288818F7733 +:1009F000888388818068888388818F7D888319BCFB +:100A000010922E0310922F0310922D0310922C039C +:100A100090EEE92EF12CF70180818B7F8083888115 +:100A20008160888342E060E080E00E949F04F601DC +:100A300080818E7F8083F8018081816080838081C6 +:100A400088608083F70180818E7F808388818061C8 +:100A50008883DF91CF911F910F91FF90EF90DF90EE +:100A6000CF900895FC01809136039091370386174B +:100A70009707A0F06115710529F49091E8009E7721 +:100A80009093E80090E06115710551F4911108C050 +:100A90008091E80082FF34C080E00895BC01F2CF6D +:100AA00080912E038823C1F18530C1F18091E80047 +:100AB00083FD30C08091E80082FDEACF8091E8009C +:100AC00080FFE1CF8091F3002091F200382F611573 +:100AD000710519F02830310558F091E028303105C2 +:100AE00009F090E02091E8002E772093E800CBCF2A +:100AF00081918093F100615071092F5F3F4FE7CFE3 +:100B000080912E03882341F0853041F08091E800E8 +:100B100083FFBECF81E0089582E0089583E00895C9 +:100B200080910B0308959C014FB7F89480910003C6 +:100B300090910103A0910203B09103034FBF821B68 +:100B4000930B08952FB7F8948091000390910103BF +:100B5000A0910203B09103032FBF08952091FD02DD +:100B60003091FE022817390771F09093FE028093AE +:100B7000FD02E091FB02F091FC02309721F000842D +:100B8000F185E02D099408952091F9023091FA023F +:100B90002817390771F09093FA028093F902E091D7 +:100BA000FB02F091FC02309721F00680F781E02DE6 +:100BB00009940895E091FB02F091FC02309721F036 +:100BC0000190F081E02D099480E00895DC016091AE +:100BD000F5028091F602962F891301C00895292FFE +:100BE00030E0F901EE0FFF1FE351FD4F40815181CD +:100BF0004A175B07A1F487E08A9FA0018B9F500DE5 +:100C00001124485E5E4F81E0FA0184839613E6CF9B +:100C10002F5F3F4F237033272093F50208952F5FF6 +:100C20003F4F922F9370D8CF10928A021092890270 +:100C3000E8E1F1E08581811102C0148216823796C5 +:100C400081E0E234F807B1F70895FA01811101C09B +:100C5000FB010994089580918E03982F9E7F61F483 +:100C60008170826080938E0380919103853B18F0A0 +:100C700084EB8093910308958A34B0F38170886483 +:100C8000F1CFAF92BF92DF92EF92FF920F931F933B +:100C9000CF93DF93182F062FE901453B08F044EB73 +:100CA000E42FF0E0E851FD4F011110C0E4915E2FF8 +:100CB0004E2F4983E8835A83DF91CF911F910F9183 +:100CC000FF90EF90DF90BF90AF900895202F30E01D +:100CD0004491D42EE42EF12C56E0159FC00111242E +:100CE000EFEFF0E0BF010E94BA2E812F90E0880F55 +:100CF000991F55E5569FD001579FB00D11248A1BAF +:100D00009B0B982F990F890F5F01A21AB30AAE9C13 +:100D1000D001AF9CB00DBE9CB00D11245B2F089F7D +:100D200080011124012F11275F01A01AB10AAE9C86 +:100D30008001AF9C100DBE9C100D11245F01A81AFC +:100D4000B108A29EC001A39E900DB29E900D1124E9 +:100D5000892F9927E81BF90BEE9DC001EF9D900D9F +:100D6000FE9D900D1124E92F62307105A1F050F421 +:100D70006115710509F49DCF6130710581F0EB2F8C +:100D8000512F97CF6430710569F080F0663071059E +:100D900009F48FCFF4CFE42F4B2F592F8ACFE42FB4 +:100DA000412F87CFEB2F542F492F83CF4B2F5D2D12 +:100DB000E12F7FCF0E94A2059C0190917602809145 +:100DC0007702982B21F03093730220937202909156 +:100DD000780280917902982B21F030937102209350 +:100DE0007002E091FB02F091FC02309749F082E042 +:100DF000809374020480F581E02D84E792E00994E9 +:100E0000089540917602803F59F48091770287FFE0 +:100E10000DC01092770241110BC010926E0208C0F3 +:100E2000813F81F48091770218169CF3442381F06E +:100E30008091780290917902892B09F05AC0109222 +:100E40006D020895823F49F447FFF0CF1092760279 +:100E5000809177028111ECCFE0CF833F19F4141613 +:100E6000ACF3E4CF90917802893F29F41916F4F697 +:100E700010927802DBCF8A3F19F497FFD7CFF8CFD3 +:100E8000909179028B3F29F497FFD0CF109279028D +:100E9000CDCF8C3F19F41916CCF3C8CF9CE0980F36 +:100EA000953090F4845F990B21E030E0B90102C0E5 +:100EB000660F771F8A95E2F7CB01809590917502B6 +:100EC000892380937502B2CF8D3F31F480916F02F8 +:100ED0008E7F80936F02AACF8E3F21F480916F02A4 +:100EE0008D7FF7CF8F3F09F0A1CF80916F028B7F6D +:100EF000F0CF089580916F0280FD16C081FD16C06D +:100F000082FD16C080916D028823A1F0883280F4A2 +:100F100028E0829FC001112468E270E00E94CE2E7A +:100F2000862F672B39F0089582E0089584E00895B4 +:100F300088E0089581E0089580916F0280FD14C0DB +:100F400081FD14C082FD16C080916E02882381F05D +:100F5000843180F422E3829FC001112464E170E0B7 +:100F60000E94CE2E862F08958CE0089589E1089581 +:100F700085E0089582E30895803F31F40E949C0744 +:100F80008195809377020895813F19F40E949C0710 +:100F9000F8CF823F31F40E949C07819580937602BE +:100FA0000895833F19F40E949C07F8CF893F29F4E4 +:100FB0000E947A078093780208958A3F21F40E9464 +:100FC0007A078195F7CF8B3F31F40E947A0781959C +:100FD0008093790208958C3F19F40E947A07F8CF24 +:100FE0009CE0980F953070F4845F990B21E030E01D +:100FF00001C0220F8A95EAF780917502822B8093B7 +:10100000750208958D3F31F480916F028160809365 +:101010006F0208958E3F21F480916F028260F7CFB6 +:101020008F3FB9F780916F028460F1CF80E008951F +:10103000F894E82FE295EF70F0E031A1282F2F709F +:1010400081E090E001C0880F2A95EAF7982F9095EB +:10105000932391A392A1892B82A3789408959091D0 +:10106000040392FF06C0282F28712830F9F4877FE7 +:10107000846093FF06C0282F28712831F1F4877E01 +:1010800084612091050320FF06C0382F3871383065 +:10109000D9F4877F816021FF06C0282F287128316D +:1010A000D1F4877E816194FD877E0895282F247175 +:1010B0002430F9F68B7F8860DCCF282F247124310F +:1010C00001F78B7E8861DDCF382F3171313019F710 +:1010D0008E7F8860E0CF282F2171213121F78E7E0D +:1010E0008861E1CFCF93DF93EC0182389105A9F1BC +:1010F000D8F58133910509F496C048F589329105F8 +:1011000009F48AC08A9709F495C0C11521E5D20770 +:1011100008F0BCC0C11530E5D30708F014C1C83EC3 +:10112000D10508F09CC0C03ED10560F5C83AD10594 +:1011300008F087C0C53AD10508F0FDC0C130D1051F +:1011400009F12097F9F0C430D105E0F440C08533AF +:10115000910509F45AC0C997C1F6809104038370C0 +:1011600089F0C0EED0E00EC0833E910599F170F495 +:10117000803E910501F1823E910539F6809104038C +:1011800082FD21C0CE01DF91CF910895863E910569 +:1011900061F1873E910571F1843E910509F0B5CF6B +:1011A0008091050381FFEECF80910403C7EED0E06C +:1011B00084FD0DC0E7CF8091040380FD12C19091A2 +:1011C000050390FFDFCFC3EED0E084FFDBCFD0E09C +:1011D000C0E0D8CF8091040382FD06C19091050341 +:1011E00090FDBFCF84FFCECFF2CF8091040383FD6B +:1011F000DDCFC8CF8091040383FDF9C09091050332 +:1012000091FFF0CFC4EED0E0BDCF8091040385FF05 +:10121000B9CFC9E2D0E0B6CF8091040385FFB2CF49 +:10122000C5E3D0E0AFCF8091040386FFABCFCAE225 +:10123000D0E0A8CF8091040386FFA4CFC1E3D0E023 +:10124000A1CFCF3BD10518F6C85AD0E0CC0FDD1F97 +:10125000C95BDE4F0990D881C02DD46493CFC115EE +:1012600040E2D40758F4C11581E0D80708F08ACFCE +:10127000C03FD10508F4ABCFD06584CFC11590E451 +:10128000D90708F4A4CFDF70D06A7CCFC11525E55B +:10129000D20700F5C11534E5D30708F08AC0C1159F +:1012A00043E5D40708F071C0C11582E5D80708F4FA +:1012B00067C0CE018370992721E030E002C0220F81 +:1012C000331F8A95E2F7C695C69580E2C89FE00174 +:1012D000112452C0C11599E5D907A8F4C11528E514 +:1012E000D20708F06BC0C11536E5D30708F06FCF01 +:1012F0008C2F0E942F08C82FD0E0DC2FCC27CC27C2 +:10130000DF71D0623FCFC1154AE5D40708F45BC056 +:10131000CE0190568115904208F059CF8D2F8F71D4 +:101320000E942F0890E0982F882788279F719C01A2 +:101330002C2BE901E6CFC55AD0E0CC5BDE4FC8814B +:10134000D0E0D0641FCFCE01E4E096958795EA9572 +:10135000E1F783702C2F26952695237040E2249F79 +:1013600090011124382B8C2F8370C1E0D0E002C093 +:10137000CC0FDD1F8A95E2F7C22BD32BDC6802CF9E +:10138000DC2FCC27C16FD06AFDCECE0183709927A8 +:1013900021E030E002C0220F331F8A95E2F7C695A4 +:1013A000C69590E2C99FE0011124C22BD32BDA68C5 +:1013B000E9CEDC2FCC27C46FD06AE4CEDC2FCC275B +:1013C000C06FD06ADFCE8C2F8F700E942F0834E060 +:1013D000D695C7953A95E1F7CF709C2FEC01D0696F +:1013E000D1CEC9E3D0E0CECEC2EED0E0CBCEC6EEB9 +:1013F000D0E0C8CE80914402811110924402089539 +:101400008091430290914202892B90914102892B55 +:101410008093C601909144029923A1F0892B809377 +:10142000C60180914301882341F18091040387FF25 +:1014300024C08EE1E8ECF1E090E0815000F59111DC +:101440000E94FA09E091FB02F091FC023097E1F072 +:1014500080914301882359F08091040387FF07C0DE +:101460008091C6018093C70185E08093C601028008 +:10147000F381E02D86EC91E0099486E0DBCF2191A9 +:101480002223D9F29F5FD9CF0895909143019923E8 +:10149000D1F09091040397FF16C0E82FE695E695EA +:1014A000E695EE31E0F4F0E0EA53FE4F282F277086 +:1014B00081E090E001C0880F2A95EAF7809592813B +:1014C000892382830895E8ECF1E09191891303C0A8 +:1014D000DF0111971C9291E0EE3CF907B1F70895F6 +:1014E000909143019923C1F09091040397FF14C098 +:1014F000E82FE695E695E695EE31F8F4F0E0EA534C +:10150000FE4F877021E030E001C0220F8A95EAF794 +:101510008281822B82830895A8ECB1E0EFEF90E006 +:101520002D91821751F0EF3F19F4211101C0E92FDD +:101530009F5F9630A9F7EF3F09F408950E2E000C37 +:10154000FF0BEA53FE4FE6CF80913F029091FE01E0 +:10155000981301C008958F5F8770FACF990F990F84 +:10156000890F982F977086958695869524E0829F9F +:10157000F0011124E651FE4F50E040E080E021915F +:1015800030E0092E02C0369527950A94E2F72170C3 +:101590003327042E01C0220F0A94EAF7822B4F5FF3 +:1015A0005F4F4430510559F70895990F990F890FEE +:1015B000982F977041E001C0440F9A95EAF78695FD +:1015C0008695869594E0899FF0011124E651FE4F9F +:1015D00030E020E070E05191DF011197CB01022E45 +:1015E00002C0969587950A94E2F7817081958527C8 +:1015F000842385278C932F5F3F4F2430310559F783 +:10160000089590E080E00E94C40590E080E00E9490 +:10161000AE0510924202109241020E94000A86E03A +:10162000E4E7F2E0DF011D928A95E9F710926E027D +:1016300010926D0210926F020C94DA06909346029B +:10164000809345020C94010B882341F08095909182 +:1016500042028923809342020C94000A0895882351 +:1016600039F090914202982B909342020C94000A18 +:101670000895882341F080959091430289238093B7 +:1016800043020C94000A0895882339F09091430294 +:10169000982B909343020C94000A0895882309F430 +:1016A00059C0823871F40E94DA0581FF53C089E382 +:1016B0000E94700A0E94000A89E30E94450A0C9465 +:1016C000000A833859F40E94DA0580FF43C083E59D +:1016D0000E94700A0E94000A83E5EFCF843859F413 +:1016E0000E94DA0582FF36C087E40E94700A0E94D9 +:1016F000000A87E4E2CF9CEF980F913AF0F290E273 +:10170000980F983088F4877021E030E0A90102C07A +:10171000440F551F8A95E2F7CA01809590914302C4 +:10172000892380934302CBCF9BE5980F933020F41D +:1017300090E080E00C94C40598E5980F973120F470 +:1017400090E080E00C94AE05803F20F00E940107FD +:101750000C94DA060895809580FF08C0589A81FF9E +:1017600007C05D9A82FF06C05C9A08955898F7CF2B +:101770005D98F8CF5C98089590912E03943029F5E8 +:101780008093060370930803609307039093E90026 +:101790008FEF9091E800815095FD06C095ED9A95E8 +:1017A000F1F700008111F5CF8091E80085FF0DC0B1 +:1017B00050E040E063E070E086E093E00E94560471 +:1017C0008091E8008E778093E8000895BC0184E062 +:1017D0000C94BC0BBC0183E00C94BC0B9C0184E01A +:1017E0008093E9009FEF8091E800915085FD06C04D +:1017F00085ED8A95F1F700009111F5CF8091E80011 +:1018000085FF0CC050E040E066E070E0C9010E9436 +:1018100056048091E8008E778093E8000895CF9376 +:10182000DF93EC01809143018823B1F1809104039F +:1018300087FF32C060E284E08093E9008FEF9091EF +:10184000E800815095FD06C095ED9A95F1F70000EE +:101850008111F5CF8091E80085FF1BC08091430185 +:1018600070E050E040E0811104C050E040E068E0EA +:1018700070E0CE010E9456048091E8008E7780933C +:10188000E80080E2FE01ACE0B3E001900D928A95A1 +:10189000E1F7DF91CF91089568E081E0CDCF81E05D +:1018A0008093E00080E28093D8001092C9008FE11D +:1018B0009EE40197F1F700C0000087E090EBDC01A7 +:1018C0008093960390939703A0939803B093990302 +:1018D00088E19CE00FB6F894A895809360000FBE55 +:1018E00090936000FFCFCF93C82F882309F4AEC038 +:1018F0008238C1F40E94DA0581FDA8C089E30E9404 +:10190000700A0E94000A2FEF81EE94E0215080407F +:101910009040E1F700C0000089E30E94450ACF91A2 +:101920000C94000A8338A1F40E94DA0580FD8EC071 +:1019300083E50E94700A0E94000A2FEF81EE94E076 +:10194000215080409040E1F700C0000083E5E5CFE2 +:101950008438A1F40E94DA0582FD78C087E40E94F1 +:10196000700A0E94000A2FEF81EE94E0215080401F +:101970009040E1F700C0000087E4CFCF8CEF8C0FE0 +:10198000813A88F580914301882301F18091040315 +:1019900087FF1CC0EC2FE695E695E695F0E0EA534C +:1019A000FE4F828190E04C2F477021E030E002C072 +:1019B000220F331F4A95E2F782239323892B79F074 +:1019C0008C2F0E94450A0E94000A09C0E8ECF1E051 +:1019D0008191C817A9F321E0EE3CF207C9F78C2FDB +:1019E0000E94700A9CCF80E28C0F883068F4C77028 +:1019F00021E030E001C0220FCA95EAF7809143024E +:101A0000822B809343028BCFEBE5EC0FE33040F465 +:101A1000F0E0EC5BFE4F808190E0CF910C94C40528 +:101A2000E8E5EC0FE73150F4F0E0EE0FFF1FE95B63 +:101A3000FE4F80819181CF910C94AE05C03F30F074 +:101A40008C2F0E94BC07CF910C94DA06CF91089599 +:101A50001F93CF93DF93182FD0E0C0E0893311F4A8 +:101A6000C0E5D0E0812F0E94730C209731F4812FC4 +:101A7000DF91CF911F910C944E0B8FE99FE001975E +:101A8000F1F700C000002197F0CF0F931F93CF9381 +:101A9000DF93C62FD42F022FFC0182818823A1F06F +:101AA000609395030E94A2059093940380939303FF +:101AB000C77081E001C0880FCA95EAF7DF91CF9126 +:101AC0001F910F910C94440B80919503681335C0BE +:101AD00080919303909194030E949305883C910513 +:101AE00060F510E21D0FCD17B9F080E28C0F883041 +:101AF00040F4C77081E001C0880FCA95EAF70E94E0 +:101B0000390B183048F481E09D2F977001C0880F81 +:101B10009A95EAF70E94440B802F0E94280D1830F6 +:101B200098F4D77081E001C0880FDA95EAF7DF9169 +:101B3000CF911F910F910C94390BC77081E001C0B8 +:101B4000880FCA95EAF7F3CFDF91CF911F910F91DC +:101B50000895DF92EF92FF920F931F93CF93DF933D +:101B6000E82FF0E0E65BFD4FD490282F26952695D0 +:101B7000269530E0F901E65CFD4F0491877010E096 +:101B8000082E02C0159507950A94E2F701701127F7 +:101B9000F901E65DFD4FE490F12C082E02C0F594AA +:101BA000E7940A94E2F791E0E922FF24F901E65E66 +:101BB000FD4FC491D0E002C0D595C7958A95E2F754 +:101BC000C170DD270115110519F081EE0E94730C1B +:101BD000E114F10419F086EE0E94730C8D2D0E9421 +:101BE000280DEF2819F086EE0E944E0B012B19F0FC +:101BF00081EE0E944E0BCD2B51F08CE2DF91CF9104 +:101C00001F910F91FF90EF90DF900C94280DDF91C2 +:101C1000CF911F910F91FF90EF90DF900895CF9398 +:101C2000DF93C7E0D2E060E0CE010E94852F2196CD +:101C3000C11584E0D807B9F7DF91CF9108956F926D +:101C40007F928F929F92AF92BF92CF92DF92EF924C +:101C5000FF920F931F93CF93DF9389E0C82E85E007 +:101C6000D82E0FE510E0E801E09736011CC0F50121 +:101C700085909490692DC7010E94852F682DC7011A +:101C800001960E94852F82E0A80EB11C82E0E80E2A +:101C9000F11CCE15DF0559F788E0680E711C2896F7 +:101CA0000C171D0731F07E0188E0E81AF108530196 +:101CB000DECF005D1F4F80E3C80ED11C0F3382E0E2 +:101CC000180789F6DF91CF911F910F91FF90EF9048 +:101CD000DF90CF90BF90AF909F908F907F906F904C +:101CE0000895CF93C82F6FEF811161E283E290E0F6 +:101CF0000E94852F6FEFC11169E084E290E00E949D +:101D0000852F6FEFC11167E285E290E0CF910C94CF +:101D1000852F80E00E94710E60E086E290E00E94D4 +:101D2000852F0E941F0E0E940F0E81E00C94710EF1 +:101D3000CF93C0910503C2FB992790F9981781F0C2 +:101D400080FBC2F9C09305036091040384E090E036 +:101D50000E94852F6C2F82E290E0CF910C94852F0A +:101D6000CF9108950F931F93CF93DF9328E0629F45 +:101D7000E001112450E0440F551FC40FD51F30E37C +:101D8000839FC00DD11D1124CE0187960E94712F13 +:101D9000082F10E0102F0027CE0188960E94712F87 +:101DA0009801282BC901DF91CF911F910F910895C0 +:101DB000462F8A3038F4763028F4643018F4672FD0 +:101DC0000C94B20E90E080E00895BF92CF92DF9223 +:101DD000EF92FF920F931F93CF93DF937C010091BB +:101DE0003803109139038091450290914602082BE7 +:101DF000192BCFE0D0E0CC24C394D12CBC2EC6014B +:101E00000C2E02C0880F991F0A94E2F780239123B9 +:101E1000892B71F4219790F7B12C8B2DDF91CF9105 +:101E20001F910F91FF90EF90DF90CF90BF9008959A +:101E3000B7018C2F0E94D80E0E947208019751F3AF +:101E4000ECCFCF93DF93EC010E94E50EBE010E9420 +:101E5000D80EDF91CF910C947208FC018681978196 +:101E6000009779F00E947208292F2F7092959F7029 +:101E700092509E30A0F4E92FF0E0E554F04D0C9420 +:101E8000042F808191810E94210FEECF803F19F0B5 +:101E900020F4883E20F481E00895843FE1F380E05F +:101EA0000895883EC0F3813FD1F7F5CF822F869504 +:101EB0008695869508951F93CF93DF9300D000D029 +:101EC0000F92CDB7DEB7FC01268137812115310590 +:101ED00041F525E0DE01119601900D922A95E1F77A +:101EE000FC01228189819A812223B9F06623A9F01D +:101EF0000E94E50E182F682F89819A810E94D50AC9 +:101F000069817A81812F0F900F900F900F900F9021 +:101F1000DF91CF911F910C94D80E0E94AE0A182F1A +:101F2000EFCFC9010F900F900F900F900F90DF919E +:101F3000CF911F91089583E290E00E94712F81322A +:101F400089F484E290E00E94712F893059F485E28F +:101F500090E00E94712F91E0873209F090E0892F84 +:101F60008170089580E0FCCFCF9384E090E00E94E0 +:101F7000712FC82F82E290E00E94712F982F8C2F32 +:101F8000CF91089560918E03669570E04BE050E02C +:101F90008AE091E00E94572F892B19F481E0809309 +:101FA00084020E94A20590937E0280937D02089590 +:101FB0005F926F927F928F929F92AF92BF92CF92D9 +:101FC000DF92EF92FF920F931F93CF93DF93CDB7E2 +:101FD000DEB7C455D1090FB6F894DEBF0FBECDBF32 +:101FE00080918E0380FD0AC0EAE3F3E01182108243 +:101FF0001282339623E0EE38F207C1F780907B021D +:1020000090907C028114910409F459C080917A0265 +:10201000811155C0D12CC12C66246394712C13E01E +:10202000512E8091850293010C2C01C0220F0A943D +:10203000EAF7822309F43BC0F601EE0FFF1FE80D1B +:10204000F91DE590F490E114F104C9F145E050E088 +:10205000B701CE0101960E944E2F09810F3F39F141 +:102060008A81800F9927991F8D31910514F08CE199 +:1020700090E05C01AA0CBB1C8A0D9B1DFC01E65C78 +:10208000FC4F5F01059D80011124065C1C4F0A1561 +:102090001B0520F0F5E0EF0EF11CD8CF98014D8123 +:1020A0006C818B810E9441060D5F1F4FF0CF2FEF97 +:1020B000C21AD20A38E0C316D10409F0B2CF7DEEBD +:1020C000A72E73E0B72EDE011196AE014B5A5F4F7B +:1020D0001A2F7B2FF5018491282F30E0C901880F3A +:1020E000991F820F931F865C9C4FFC01C080D1809A +:1020F000E280CD92DD92ED92FFEFAF1ABF0AA417F6 +:10210000B50741F7279A35B13F7725B120686FB7FA +:10211000F894812F972FFC017191CF01E8E025B948 +:10212000000000C077FF35B9770F000000C000C085 +:1021300000C035B900C0EA9591F78417950759F7A3 +:102140006FBF8FE594E00197F1F700C00000CC5A13 +:10215000DF4F0FB6F894DEBF0FBECDBFDF91CF913A +:102160001F910F91FF90EF90DF90CF90BF90AF90B5 +:102170009F908F907F906F905F9008951F93CF9363 +:10218000DF9300D00F92CDB7DEB7162F90918E035C +:1021900090FF18C09E012F5F3F4F48E76FEF0E94EE +:1021A00041068B819981612F70E0FB01EE0FFF1FCB +:1021B000E60FF71FE65CFC4F2A8121839083828320 +:1021C0000E94D80F0F900F900F90DF91CF911F9129 +:1021D0000895EF92FF920F931F93CF93DF938C019B +:1021E000CAE3D3E0F12CE12CF801948160919003D3 +:1021F00080918F03FEE0EF16F104FCF49923F9F0CF +:102200009E01409191030E9441062FEFE21AF20ACB +:1022100023968CE1E816F10439F70E94D80FF801F3 +:10222000848190E00196817099278483DF91CF911A +:102230001F910F91FF90EF900895992309F39E014C +:1022400040E0E1CF8F929F92AF92BF92CF92DF9208 +:10225000EF92FF920F931F93CF93DF93EC014C818A +:10226000042F10E09801D8010E94192F9B01AC01A6 +:102270000E942F2F4B015C01E0E2F0E0E01BF10B2C +:10228000A5E5B0E0AC019B010E942F2F6B017C0102 +:102290009F01DF010E94112F9B01AC010E943A2F88 +:1022A0009B01AC01280D391D4A1D5B1DC701B601FC +:1022B0000E94E22EF22E822F90E039E23F15D8F1F3 +:1022C00043E0249F9001112435952795122F1095F6 +:1022D0009AE3C92E93E0D92E00E085E5E82EEF18A9 +:1022E0008E2D01FD8F2D9601412F609190030E944C +:1022F00041060F5F53E0C50ED11C0C3189F70E94D7 +:10230000D80F9C8181E0992319F0903219F48FEF56 +:102310008093170180911701890F8C83DF91CF91F2 +:102320001F910F91FF90EF90DF90CF90BF90AF90F3 +:102330009F908F90089525E530E0A901481B590B27 +:10234000CA019A01220F331F280F391F37FFBCCF54 +:102350002F5F3F4FB9CF0F931F93CF93DF93CAE304 +:10236000D3E0FE01118210821282339683E0EE38B0 +:10237000F807C1F710E000E080918702082E000CFA +:10238000990B081719078CF180911601082E000C83 +:10239000990B801791074CF19E0140919103609138 +:1023A000900380918F030E9441060F5F1F4F239679 +:1023B0000C31110509F70E94D80F809115019091F9 +:1023C0008702980F9093870220911601280F20937F +:1023D0001601121614F49B311CF08195809315019F +:1023E000DF91CF911F910F910895198218821A825F +:1023F000DCCFBF92CF92DF92EF92FF920F931F93A9 +:10240000CF93DF93FC018281DD24DA9480FD02C04A +:10241000DD24D3940AE313E0D0E0C0E02CE1B22E37 +:10242000F80111821082128294E0E92EF12CC12C65 +:10243000809186028C0D8D310CF43DC06B2D0E9475 +:10244000AC2E892F082E000C990B8C179D0791F448 +:10245000809191038E9DA0018F9D500D1124559563 +:1024600047955595479598016091900380918F030A +:102470000E944106CD0CF1E0EF1AF108C9F6219651 +:102480000D5F1F4FCC31D10559F60E94D80F8091B6 +:10249000860291E0D91215C0811111C08BE18093A1 +:1024A0008602DF91CF911F910F91FF90EF90DF9007 +:1024B000CF90BF90089587FFC5CF845EC3CF815072 +:1024C000EECF90E00196BE010E94CE2EE8CFEF92B3 +:1024D000FF921F93CF93DF93EC018AE3E82E83E012 +:1024E000F82E10E08C819701409191036091900348 +:1024F000810F0E944106175F83E0E80EF11C1C3F2C +:1025000089F70E94D80F9A818C8190FF08C08F5F55 +:102510008C83DF91CF911F91FF90EF9008958150B0 +:10252000F7CF90918E0390FF0CC0EAE3F3E0818334 +:1025300060834283339693E0EE38F907C1F70C9439 +:10254000D80F08950F931F93CF93DF9300D00F926E +:10255000CDB7DEB78C018091880281110AC09E013F +:102560002F5F3F4F44EB6FEF0E9441068A818093BB +:102570008802F8016481613069F08091880240E04E +:10258000662361F040E0623011F44091880280E0FF +:1025900060E004C06091880240E080E00E949112F7 +:1025A000F801848190E0019663E070E00E94CE2EF5 +:1025B00084830F900F900F90DF91CF911F910F9117 +:1025C0000895CF93DF9300D00F92CDB7DEB79091EF +:1025D0008E0390FF0AC09E012F5F3F4F0E9441066D +:1025E0004B8169818A810E9491120F900F900F9008 +:1025F000DF91CF910895CF93DF93EC01EEE8F3E004 +:10260000438162818C810E94E1128C818F5F8C8377 +:10261000DF91CF910895CF93DF93EC01EC81F0E04F +:10262000E75FFB4F4491EEE8F3E0628181810E9415 +:10263000E1128C818F5F8C83DF91CF910895CF92CF +:10264000DF92EF92FF926B017C010E942B06B70193 +:10265000A60188E090E0FF90EF90DF90CF900C947F +:10266000972F5F926F927F928F929F92AF92BF92BD +:10267000CF92DF92EF92FF920F931F93CF93DF934E +:1026800000D00F92CDB7DEB7182F762E042F622E12 +:1026900090918E0390FF29C0E92FE695AE2FB0E010 +:1026A000A157BE4F8C91809383029E7F923081F51B +:1026B0009E012F5F3F4F812F0E9441064B81698110 +:1026C0008A810E94911210938F037092900300935D +:1026D0009103662051F060918E0370918F03809179 +:1026E0009003909191030E941F130F900F900F90F1 +:1026F000DF91CF911F910F91FF90EF90DF90CF90DE +:10270000BF90AF909F908F907F906F905F90089553 +:10271000823019F400919103D6CF863019F41091CC +:102720008F03D1CF8930D9F3893169F6E9518E2FE2 +:102730008170582EE695F0E0E851FC4FA590B490DA +:10274000BB248AE3E82E83E0F82ED12CC12C9CE137 +:10275000892E912CC601B4010E94BA2E812F5110EE +:1027600013C0860F9701402F672D0E944106CA0CA7 +:10277000DB1C83E0E80EF11C8EE8E81683E0F80627 +:1027800049F70E94D80F9FCF861BECCFEEE8F3E00D +:10279000438128E0421B08F440E021E0628181810E +:1027A0000C943113EEE8F3E0438128E0420F08F483 +:1027B0004FEF21E0628181810C943113EEE8F3E068 +:1027C000628128E0621B08F460E021E0438181819E +:1027D0000C943113EEE8F3E0628128E0620F08F414 +:1027E0006FEF21E0438181810C943113EEE8F3E037 +:1027F000818121E04381628188500C943113EEE89D +:10280000F3E0818121E043816281885F0C94311380 +:1028100080919203882319F08150809392036091F4 +:102820008E0370918F0380919003909191030C948B +:102830001F1380919203833018F48F5F809392036B +:1028400060918E0370918F0380919003909191031A +:102850000C941F1390918E0390FF36C091708111DC +:1028600029C0926090938E03662351F060918E038D +:1028700070918F0380919003909191030E941F1398 +:1028800060918E03669570E04BE050E08AE091E045 +:102890000E94572F892BA9F01092840281E0809327 +:1028A000800220E0409191036091900380918F031A +:1028B0000C943113853210F09864D4CF880F982B84 +:1028C000D1CF0E94C20FEACF089521E030E0A901E4 +:1028D00002C0440F551F8A95E2F7CA012091850274 +:1028E000662399F0822B8093850280918402811166 +:1028F00006C080918E0360E086950E942A14809124 +:102900008E0380FD05C00C94D80F80958223EBCFF9 +:1029100008950F931F93CF93DF93EC0161E000972D +:1029200009F0682F617080E00E94651460E02097D4 +:1029300021F0BE0176956795617081E00E94651473 +:1029400060E0209731F0BE017695679576956795A2 +:10295000617082E00E94651460E0209739F0BE014A +:1029600013E0769567951A95E1F7617083E00E9410 +:10297000651460E0209739F0BE01B4E07695679564 +:10298000BA95E1F7617084E00E946514AE0170E0D1 +:1029900060E0BB27A72F962F852F0097A105B105D3 +:1029A000D9F1AC01BD0188E08A019B01F4E03695C4 +:1029B000279517950795FA95D1F70115110521056A +:1029C000310519F08C5FB901A8018A019B01E2E091 +:1029D0003695279517950795EA95D1F701151105B5 +:1029E0002105310519F08E5FB901A801769567952B +:1029F00057954795452B462B472B09F08F5F823023 +:102A000011F160F4882399F08130C1F0CE01DF919B +:102A1000CF911F910F91089580E0C6CF8330C1F010 +:102A20008430A1F720E044E66FEF8FE004C020E09F +:102A300044E66FEF82E30E943113E8CF20E044E6E2 +:102A40006FEF85E0F8CF20E044E66FEF80E8F3CF4A +:102A500020E044E66FEF87EDEECF0E94891490935B +:102A60003903809338030C94010B809138039091C3 +:102A700039039C01267033272630310519F488600C +:102A80000C942D15877FFCCF21E030E002C0220F8F +:102A9000331F8A95E2F72095309580913803909105 +:102AA0003903822393230C942D1590914002809535 +:102AB000892380934002282F277039F4282F082E6D +:102AC000000C330B9217130621F49091050392FF2B +:102AD00007C08595859585950E9444151092400202 +:102AE000089521E030E002C0220F331F8A95E2F7FB +:102AF0008091380390913903822B932B0C942D15E0 +:102B000080918E038695815009F484E261E00C94F3 +:102B10002A1480918E0386958F5F853208F081E0BC +:102B200061E00C942A1490918E0390FF07C0969553 +:102B3000981720F0961710F40C94891561E00C9406 +:102B40002A14EEE8F3E083E0808311828FEF828322 +:102B500088E28383148260817181828193810C94E5 +:102B60001F1369EE7EEF90E080E00E94A32F60E0EB +:102B700082E090E00E94852F60E083E090E00E9478 +:102B8000852F109246021092450260E084E090E0AA +:102B90000E94852F60E082E290E00E94852F60E035 +:102BA00085E090E00E94852F60E086E090E00E9442 +:102BB000852F6FEF87E090E00E94852F40E050E086 +:102BC000BA0188E090E00E94972F60E08DE090E0ED +:102BD0000E94852F40E050E0BA0188E190E00E9419 +:102BE000972F60E087E190E00E94852F40E050E061 +:102BF000BA018CE190E00E94972F70E060E080E2E3 +:102C000090E00E94A32F40E050E0BA0188E190E0FC +:102C10000E94972F80E00E94710E0E94890E40E072 +:102C200050E0BA018FE090E00E94972F40E050E022 +:102C3000BA0183E190E00C94972F90E080E00E942D +:102C40007F2F893E9E4F11F40C949B0F80E00895D6 +:102C50001092430280914301E8ECF1E0882359F09F +:102C60008091040387FF07C08EE1DF011D928A95E2 +:102C7000E9F70C94010B86E0F8CF1F93CF93DF9315 +:102C8000CDB7DEB7AA970FB6F894DEBF0FBECDBFA3 +:102C900080E393E02091F100DC012D93CD01B3E0BE +:102CA00088339B07B9F780913103833009F471C0F1 +:102CB000B8F4813009F448C0823009F4B2C0809180 +:102CC000E80083FF3AC180913003909131039A303C +:102CD00008F033C1E92FF0E0E753F04D0C94042FD6 +:102CE0008A3009F48DC08B3009F470C0893039F70F +:102CF00080913003813219F780913403909135032C +:102D0000009711F00297D9F68091E800877F8093B1 +:102D1000E8008091E80082FF37C09091F300809135 +:102D2000F200029729F48091F1008B7F813021F429 +:102D30008091F10080930B038091E8008B77809362 +:102D4000E8000E948004BBCF80913003813A09F0F3 +:102D5000B6CF8091E800877F8093E80080913403AC +:102D600090913503892B61F460E28CE093E070E090 +:102D70000E9432058091E8008B778093E8009FCF16 +:102D800060E090E080E0F3CF80912E038111C1CF0D +:102D900096CF80913003813A09F091CF809134032E +:102DA00090913503892B09F08ACF8091E800877FC5 +:102DB0008093E8008091E80080FFFCCF8091430180 +:102DC0008093F1008091E8008E77B9CF8091300335 +:102DD000813209F074CF8091340390913503892BAF +:102DE00009F06DCF8091E800877F8093E8000E9412 +:102DF000800480913203809343010E9428165FCFA4 +:102E000080913003813209F05ACF8091E800877FAA +:102E10008093E8000E9480048091330380930A032A +:102E20004ECF80913003813A09F049CF8091E8007C +:102E3000877F8093E8008091E80080FFFCCF80913D +:102E40000A03BECF803899F0823809F076C08091AD +:102E500034038F70873008F070C08093E900809150 +:102E6000EB0085FB882780F91092E90006C080916D +:102E70002C0390912D03911182609091E800977F2F +:102E80009093E8008093F1001092F1008091E800A7 +:102E90008E77B5C1882309F4A2C1823009F04DC0F4 +:102EA000809132038111A6C1809134038F702FEF7E +:102EB000280F263008F041C08093E9002091EB00F4 +:102EC00020FF98C1933031F48091EB0080628093B1 +:102ED000EB0090C19091EB0090619093EB0021E0AA +:102EE00030E001C0220F8A95EAF72093EA001092A1 +:102EF000EA008091EB008860EACF81111EC010913A +:102F000032031F778091E3008078812B8093E30068 +:102F10008091E800877F8093E8000E948004809180 +:102F2000E80080FFFCCF8091E30080688093E3009D +:102F300082E0111183E080932E038091E80083FFEB +:102F40000AC08091E800877F8093E8008091EB00C1 +:102F500080628093EB00AA960FB6F894DEBF0FBE96 +:102F6000CDBFDF91CF911F9108958058823028F70F +:102F700020913203309133032C3DE3E03E07A1F56D +:102F800083E08A838AE289834FB7F894DE0113963F +:102F900020E03EE051E2E32FF0E050935700E4914F +:102FA00020FF03C0E295EF703F5FEF708E2F90E03F +:102FB000EA30C0F0C7968D939D932F5F243159F767 +:102FC0004FBF8091E800877F8093E8006AE270E05D +:102FD000CE0101960E9432058091E8008B778093A4 +:102FE000E800ABCFC096E7CF8091340390913503D2 +:102FF000432F55274330510509F44AC078F5413035 +:10300000510509F47AC08BE590E0E9EEF6E0423034 +:10301000510509F092CF2091E800277F2093E80026 +:1030200020913603309137038217930708F49C01EF +:1030300040E02115310509F065C0411163C0809160 +:10304000E80082FDC9CF80912E03882329F28530C4 +:1030500019F28091E80083FFF2CFBECF41325105D3 +:1030600009F43CC04232510509F067CF8330910525 +:1030700008F063CFFC01EE0FFF1FE954FE4F0190F3 +:10308000F081E02D8C549E4FDC018C9190E01AC0B1 +:10309000332721303105D1F02115310561F022307F +:1030A000310509F04ACFE6E5F7E0E4918E2F90E094 +:1030B000E6E5F7E007C0E6E7F7E0E4918E2F90E061 +:1030C000E6E7F7E0009709F438CFA5CFE2E6F7E0AE +:1030D000E4918E2F90E0E2E6F7E0F4CF83309105A3 +:1030E00008F02BCF880F991FFC01E354FE4F01908D +:1030F000F081E02D89E090E08ECF82E190E0E4E481 +:10310000F7E089CF80912E03882309F465CF8530BD +:1031100009F462CF8091E80083FD5ECF8091E800E2 +:1031200082FD8DCF8091E80080FF83CF9091F300E6 +:103130008091F2002115310519F08830910550F089 +:1031400041E0089709F040E08091E8008E77809395 +:10315000E8006FCF44914093F1003196215031093E +:103160000196E8CF803809F0E8CE8091E800877FAB +:103170008093E80080912F038093F10087CE811126 +:10318000DCCE10913203123008F0D7CE8091E800E7 +:10319000877F8093E80010932F030E9480041123FF +:1031A00011F084E005C08091E30087FDFACF81E053 +:1031B00080932E0342E061EC81E00E949F0442E292 +:1031C00061EC84E00E949F0442E261EC82E00E9494 +:1031D0009F0442E260EC83E00E949F04AECE8091A7 +:1031E0003203813009F0A9CE81E0933009F080E00C +:1031F00080932D031092E9008091E800877F8093EF +:10320000E8000E94800499CE9F92AF92BF92CF9225 +:10321000DF92EF92FF920F931F93CF93DF9300D033 +:1032200000D0CDB7DEB77C01FC0183819481892B6E +:1032300031F08081918189238F3F09F0F0C50F9093 +:103240000F900F900F90DF91CF911F910F91FF90F2 +:10325000EF90DF90CF90BF90AF909F90089598012E +:1032600022513F452031310508F0CEC58FEF93E064 +:103270000E94712F025167E0C62E62E0D62E88238D +:1032800039F1809140028770D1F2F7018281882361 +:10329000B1F282E00F900F900F900F90DF91CF91DD +:1032A0001F910F91FF90EF90DF90CF90BF90AF9064 +:1032B0009F900C945515C114F4E0DF0611F3C6017C +:1032C0000E94712F811101C001502FEFC21AD20A42 +:1032D0000111F1CF1C821B82BB24B3945AE0A52EAE +:1032E00086010F5F1F4FC6010E94712F89831A82CA +:1032F000882339F29FEF980F933008F58A83B982BB +:1033000032E0C30ED11CC8010E94712F8B83882329 +:1033100009F4B7CF8E010F5F1F4FF801808188231A +:10332000F9F2813009F043C091818281913049F4F2 +:103330000E5F1F4F0E94280D0F5F1F4FEECF6801D9 +:10334000E9CF923029F40E5F1F4F0E94730CF4CF27 +:10335000933029F40E5F1F4F0E944E0BEDCF943037 +:1033600019F00F5F1F4FE8CF0E5F1F4F30E020E0D6 +:10337000B8016F5F7F4FF80141818053990B8A300C +:10338000910550F021503109B8F28FE99FE0019783 +:10339000F1F700C00000F6CFA29EF001A39EF00D51 +:1033A00011249C012E0F3F1F842F8B01E1CF0E941F +:1033B000A90DC2CF81E00E9471150E94351561CF21 +:1033C00081E00E944415F9CF82E0FBCF04389FE5ED +:1033D000190709F483C008F473C00538FFE51F0717 +:1033E00009F041C5882309F43EC580EE0E94730CA4 +:1033F00081EE0E94730C80E10E94730C80E10E94B8 +:103400004E0B81EE0E944E0B80EE0E944E0B80917F +:10341000E60191E062E189278093E601882309F4BF +:103420008DC08FE00E94BE1066E18FE00E94BE104A +:103430001AC5882369F180914F02811106C081E08D +:1034400080934F0282EE0E94730C0E94A20590931B +:103450004E0280934D028BE20E94730C04C58823B8 +:10346000A1F080914F02811106C081E080934F024C +:1034700082EE0E94730C0E94A20590934E028093EC +:103480004D0281EE0E94730CE6CF81EE0E944E0B3E +:103490008BE20E944E0BE7C4882309F4E4C481EE5A +:1034A0000E94730C83EE0E94730C8FE40E94730CD5 +:1034B0008FE40E944E0B83EE0E944E0B81EEE9CF0B +:1034C000882309F4D0C481EE0E94730C83EE0E941D +:1034D000730C80E50E94730C80E5EBCF882309F420 +:1034E000D0CE10914C0281E0182710934C020E941C +:1034F000A20590934B0280934A0268E1112381F068 +:103500008FE00E94BE1069E18FE00E94BE106AE168 +:103510008FE00E94BE106BE18FE00E94BE10B1CE22 +:1035200084EB0E94BE1069E184EB0E94BE106AE148 +:1035300084EB0E94BE106BE184EBEFCF8FEA0E9418 +:10354000BE1066E18FEA72CF82EE0E94730CC6C491 +:1035500083E00E942F0B88E10E94730C88E10E9497 +:103560004E0B83E00E94240BB9C482EE0E94730CC0 +:1035700087E50E94280DB2C486EE0E94280D88E1DE +:10358000F8CF895AC5C482EE0E944E0BD9C48CE292 +:103590000E94280D8091E801882309F4D1C489E3B1 +:1035A0000E94280DCDC488E2FBCF033FFCE51F0736 +:1035B00039F1A0F4083D3CE51307F1F0093D8CE535 +:1035C000180751F1073D9CE5190709F0BDC426E233 +:1035D00041EE61EEC7010E94450D53CE053FECE57B +:1035E0001E07B1F088F0063F2CE5120709F0ACC4C5 +:1035F00027E245EE66EEEECF27E245EE65EEEACF36 +:1036000026E241EE60EEE6CF27E245EE64EEE2CF41 +:1036100026E241EE62EEDECF28E241E0EFCF80917C +:103620000403806106309CE5190709F48CC0809181 +:103630000403886007301C4508F485C080910403AA +:10364000806281C0809104038D7F0C30FCE51F07F0 +:1036500009F479C070F4809104038C600A303CE571 +:10366000130709F470C008F481C0809104038E7FB1 +:103670006AC080910403877F0E309CE5190709F426 +:1036800062C0809104038B7F0F301C4508F45BC03F +:10369000809104038F7E57C00B3FFCE51F0709F4A0 +:1036A0005DC030F503313CE5130709F46DC078F4D3 +:1036B00001319CE5190709F463C002311C4509F08A +:1036C0007EC40E942816809104038F773CC0053188 +:1036D000FCE51F0709F460C008F474C0809105037D +:1036E00081600A3F1C4509F06AC48093050367C4E2 +:1036F0000F3F8CE5180709F44BC088F4809105034F +:103700008D7F0D3FECE51E0781F3809105038E7FD1 +:103710000E3F1C4550F3809105038360E6CF0130D6 +:103720002DE5120709F457C008F442C060E00230EA +:103730001D4509F044C48EE090E00E94852F3FC4EF +:103740008091040381608093040339C48091040351 +:103750008260F9CF809104038460F5CF80910503E6 +:103760008260C3CF809104038064EDCF0E9428164D +:10377000809104038068E7CF809104038F7DE3CFBD +:10378000809104038F7BDFCF80910403837FDBCFA5 +:10379000809105038C7FA9CF8091040382FB992738 +:1037A00090F921E0922790FB82F990FB83F9CBCF2F +:1037B00080910503982F909591708E7F892B90FBB7 +:1037C00081F993CF0E94281690910403892F97FBCB +:1037D00087F98058B8CF61E0AECF882309F402C4DE +:1037E000809143028A7A91E009F490E09093E90194 +:1037F000811106C089E20E94700A0E94000A41CD30 +:1038000085E3F9CF85E3F3C3043CFCE51F0709F426 +:1038100093C046EF53E16FEF73E1053C2CE51207CF +:1038200009F00AC40E9425062CCD093C3CE513078B +:1038300009F491C070F4073CECE51E0709F486C05A +:103840004AEE53E16EED73E1083CFCE51F0751F3CE +:10385000F3C30A3C2CE5120709F482C048E054E1A6 +:1038600069E174E10B3C3CE51307E1F2E5C3013D7E +:103870008CE5180709F487C0B0F40E3CECE51E0790 +:1038800009F47BC008F476C00F3C2CE5120709F45C +:1038900077C06EE089E0003D3CE5130709F0CCC33A +:1038A0000E949315EECC043D8CE5180709F471C015 +:1038B00078F4023DECE51E0709F468C061E088E198 +:1038C000033DFCE51F0709F0B7C30E942A14D9CCB9 +:1038D000053D2CE5120709F45FC00D35100709F40A +:1038E000D0CCAAC380918E0380FF1BC08E7F8093B3 +:1038F0008E0360918E0370918F038091900390915D +:1039000091030E941F13109284028FEF90E7E2E070 +:1039100081509040E040E1F700C000000E94D80FC5 +:10392000B0CC816080938E0361E08695CECF40E875 +:1039300055E169E875E176CF49E855E160E875E160 +:1039400071CF4FEF53E166EF73E16CCF4EED53E172 +:103950006AEE73E167CF46EC53E162ED73E162CF4B +:1039600042ED53E166EC73E15DCF49E154E168E07B +:1039700074E158CF61E081E0A8CF65E082E090CFAC +:1039800068E086E08DCF64E18FE08ACF67E185E172 +:1039900087CF62E289E184CF61E083E296CF0B3585 +:1039A0009DE5190701F10C351D4509F055C38091BE +:1039B000050382FB882780F991E089270E94980EF1 +:1039C0004BC30E942816FFEF24E33CE0F150204057 +:1039D0003040E1F700C000000E944F0C0E94B1157A +:1039E00050CC81E0EBCF80E0E9CF82810081118172 +:1039F000882369F0C8010E94E50ED82E682FC801FF +:103A00000E94D50AB8018D2D0E94D80E2BC3C80183 +:103A10000E94AE0AD82EF6CF212F2F70C22E107F13 +:103A200019F0C29490EFC922DD20C9F0CC2069F0D2 +:103A300080E2800F883010F001110BC080914302AA +:103A4000C82AC09243020E94000A802F0E94730C71 +:103A500019C080914202C82AC0924202F4CF802F3E +:103A60000E944E0BCC2071F0C09480E2800F883011 +:103A700010F001113AC080914302C822C092430263 +:103A80000E94000AE92DE850FF0B349720F40E94B1 +:103A9000DA050E94AB0BAA20A9F08091400280FDBC +:103AA00011C0F70112828595859585950E94711543 +:103AB000C7010E94041980914002859585958595DE +:103AC0000E94441560E0C7010F900F900F900F9077 +:103AD000DF91CF911F910F91FF90EF90DF90CF90EA +:103AE000BF90AF909F900C945B0F80914202C822D0 +:103AF000C0924202C5CF312F3F70B32E107F1032DB +:103B000019F0B29480EFB822002369F0013081F1FE +:103B1000DD20D9F1CC2091F1F701858180FF95CF8F +:103B20008F7085832BC0DD20B1F0909144028B2DE6 +:103B3000892BC11003C00E94440BA4CFE1E0CE1238 +:103B4000FACF2091050322FD9DCF891709F49ACF62 +:103B50008093440297CFC11006C00E94FA098B2DB2 +:103B60000E94390B8FCFF1E0CF1609F48BCFF5CF40 +:103B7000DD2031F025E02C1508F484CF8B2DDBCF30 +:103B800034E03C1508F47ECFEACFCC2041F3093372 +:103B900049F4FFEF27EE33E0F15020403040E1F7E9 +:103BA00000C00000802F0E944E0B6CCF812F8695A5 +:103BB0008695837061F0813009F064CFC8019370FD +:103BC000D11002C090E080E00E94AE055BCFC8013A +:103BD0009370D11002C090E080E00E94C40552CFE3 +:103BE000802FDD2029F00E94BC070E94DA064ACF10 +:103BF0000E940107FACF812F837009F03FC0D110D6 +:103C000041CF402F429546954770440F440F802F77 +:103C10008F7090E0042E02C0880F991F0A94E2F77B +:103C200030E020E004FF09C02FE030E002C0220FA6 +:103C3000331F4A95E2F72095309516951695137027 +:103C4000123099F078F440914502509146021130BB +:103C500039F0822B932B842395230E941E0B12CFC5 +:103C6000842B952B822B932BF8CF822B932B209197 +:103C700045023091460282279327EFCF8695DD20BB +:103C800011F0812F8170882309F4FCCE402F4295DA +:103C900046954770440F440F802F8F7090E0042E9C +:103CA00002C0880F991F0A94E2F730E020E004FF79 +:103CB00009C02FE030E002C0220F331F4A95E2F71F +:103CC00020953095169516951370123099F078F46A +:103CD0004091380350913903113039F0822B932BE6 +:103CE000842395230E942D15CDCE842B952B822BDA +:103CF000932BF8CF822B932B2091380330913903EB +:103D000082279327EFCF1F70DD2029F0812F0E949B +:103D10007115802F10CF802F0E94390B812F0E94A8 +:103D20004415B0CE023F09F441C060F4003F11F1E8 +:103D3000013FA1F1DD2009F457C0C11086CE812FCB +:103D40008F7131C0033FB9F1043FA1F7DD2009F4C1 +:103D500040C01F71812F0E9471158091050382FD63 +:103D600007C0E8E01E9FC0011124836080934002D9 +:103D7000812F19C0DD2069F084E08C1508F482CE13 +:103D80001F7181E090E002C0880F991F1A95E2F739 +:103D9000B3CF95E09C1508F475CEF2CF812F8F71CB +:103DA000DD2009F4BCCF0E9471156CCE812F8F717C +:103DB000DD20C9F3B4CF90E080E0DD2009F492CF9C +:103DC0001F7181E090E002C0880F991F1A95E2F7F9 +:103DD00089CF81E00E945515F1E0FC1508F052CE24 +:103DE00082E00E9455154ECECC2059F0093309F0DF +:103DF000D9CE2FEF37EE83E0215030408040E1F7FD +:103E0000CFCE812F8F718BCF00313FE5130709F49F +:103E1000D1CA01319FE51907A9F482E0CCCA61E05B +:103E2000C7010E945B0F8C01F7018281811117CAC3 +:103E30000031FFE51F0709F4C3CA01312FE512075E +:103E400009F4C2CA0238EFE51E0709F425CB08F0D1 +:103E5000BDCA00382FE5120709F4EBCA01383FE567 +:103E6000130709F4FCCAF7018281882369F0C801AD +:103E7000815E9C45059740F46FE1600F60935002AE +:103E80008CE090E00E94852F17FF8FCBF701828195 +:103E9000882309F459C00E94DA05869581708093C1 +:103EA000E80190915002913029F4882319F089E3B8 +:103EB0000E94280D809143028093E70110924302F3 +:103EC00080915002813009F443CB882309F43CCB24 +:103ED000823009F44ACB843009F44ECB8FE39CE95D +:103EE0000197F1F700C000005801E894B7F84CE0E2 +:103EF000C42ED12CC5010C2C02C0969587950A942E +:103F0000E2F78F7096EF980F963008F43ACB805D09 +:103F10000E94A90D94E0C91AD108ECEFCE16EFEF7C +:103F2000DE0641F780915002813009F430CB8823BE +:103F300009F429CB823009F426CB843009F433CB41 +:103F40008091E70180934302F7018281882309F47D +:103F500046C0109295030230FCE51F0708F44AC0E2 +:103F600006312CE5120738F098012A5F3C452930CC +:103F7000310508F03FC00E94B40F90930503809371 +:103F8000040300313CE5130709F4F6CB08F084CBB9 +:103F900008309CE5190709F4E5CB08F053CB043051 +:103FA000FCE51F0709F4D6CB08F039CB02303CE51D +:103FB000130709F4C5CB03301C4509F4C7CB609146 +:103FC00004031091050384E090E00E94852F612F87 +:103FD00082E290E00E94852F0E94281652C9063185 +:103FE0001C45D1F58091E90181110CCC89E20E9438 +:103FF000450A03CC06312CE5120709F4EECB80917B +:10400000430282720C3C9CE5190709F4AECC08F01F +:104010002ECC063CFCE51F0709F493CC08F005CC38 +:10402000033C3CE5130709F482CC08F0EDCB023CDD +:10403000ECE51E0709F456CC0A35FDE51F0709F427 +:10404000D0CC08F0ACCC01153CE5130709F4B9CC91 +:104050000E3D1C4509F4C2CCF7018681978100977B +:1040600009F4C3CC0E9472088C01F701D280C5808C +:10407000C2943FE0C322809140028770A1F0AD2C32 +:10408000DD2091F0812F807F803421F080E2800F4D +:10409000883048F082E00E94551580914002877078 +:1040A000AA24A3948111A12C912E92942FE0922204 +:1040B000FBE0F91508F4E6CCE92DF0E0ED52F04D07 +:1040C0000C94042FCF93DF938091FB01807FA1F4A8 +:1040D0008091F801882381F080913F02D091FE0108 +:1040E0006091F6017091F701A091F901B091FA0188 +:1040F000C62FC723D81303C0DF91CF91089590E056 +:10410000109711F0CF3F19F401968770F3CF9C01FF +:1041100043E0220F331F4A95E1F7F901E150FE4FCA +:1041200041814713F1CF40814613EECF42814111C7 +:10413000EBCF438154814A1B5B0B483C510520F770 +:104140008091FB018F7080618093FB01F901EC5F2E +:10415000FD4F80818F708061808386EF91E00E94A7 +:104160000419DF91CF910C94A40AAF92BF92CF9221 +:10417000DF92EF92FF920F931F93CF93DF93CDB710 +:10418000DEB765970FB6F894DEBF0FBECDBF8C01CA +:1041900085E0F801DE01519601900D928A95E1F7D4 +:1041A000F801E28066EFA62E61E0B62E6091F9017B +:1041B0007091FA016115710509F468C19091F601D9 +:1041C0004091F701892F84238F3F09F45FC120813B +:1041D0003181C380D480F090F801F601E61BF70B23 +:1041E000FF2009F41DC18091FB01582F507FE83C4E +:1041F000F10508F0D0C0511181C0FE2C43132BC033 +:10420000921329C06091FC017091FD01F801468173 +:10421000578164177507F9F4E1101DC08F70806134 +:104220008093FB01C5010E9404198091FB01F801F4 +:1042300085838F2D65960FB6F894DEBF0FBECDBF78 +:10424000DF91CF911F910F91FF90EF90DF90CF9072 +:10425000BF90AF900895CD2829F0822F83238F3F00 +:1042600009F02FC180E0F82FF170DF2E80FF3CC0F5 +:1042700080913F024091FE01841315C0298B3A8B37 +:1042800089899A890E94210F292F22952F70223027 +:10429000F8F0243020F59F70F9F0F8019581907FB7 +:1042A000D9F4D12C1FC090E0FC0153E0EE0FFF1FAA +:1042B0005A95E1F7E150FE4F5181351306C0508108 +:1042C000251303C05281E5120FC001968770D4CF29 +:1042D0009F7011F0882329F3805E883010F3C801A5 +:1042E0000E940419FD2CA5CFEE2009F4A2CF8091E5 +:1042F000FB0181608093FB01F12C9BCF43131BC01A +:10430000921319C04091FC015091FD01F8012681E2 +:1043100037814217530779F4E1100DC08583C80136 +:104320000E94041988E0F801A6EFB1E001900D9217 +:104330008A95E1F77ECFC8010E942D0F882339F1BD +:10434000EE2029F18091FB018032A0F02091F6014E +:104350003091F7013A8729871B86DD86CC868E87C8 +:104360008091FC019091FD01988B8F87CE01099679 +:104370000E94041988E0F801A6EFB1E001900D92C7 +:104380008A95E1F70E946220FF24F39452CFC8017E +:104390000E940419F9CF51110AC086EF91E00E94E2 +:1043A000041988E0F50111928A95E9F7A5CF431326 +:1043B00018C0921316C04091FC015091FD01F80104 +:1043C000268137814217530761F4E1100AC08583C3 +:1043D000C8010E94041988E0F50111928A95E9F755 +:1043E00028CFC8010E942D0F882389F2EE2079F290 +:1043F0008091FB01803208F4BDCF2091F60130910D +:10440000F7013A8329831B82DD82CC828E838091DF +:10441000FC019091FD0198878F83CE010196A8CF72 +:10442000E83CF105C0F6FE2CEE2009F4B0CF4313B2 +:104430001FC092131DC02091FC013091FD01F801B5 +:10444000868197812817390799F49091FB0190FD97 +:1044500069CF907F09F466CF8091FB018583903FFF +:1044600009F45DCF982F907F905F8F70892B56CF86 +:10447000C8010E942D0F81117DCF8091FB018160C9 +:104480008093FB01C8010E940419D3CEEE2009F4E9 +:104490007ECFC8010E942D0FF82E882309F477CF14 +:1044A00088E0F801A6EFB1E001900D928A95E1F75E +:1044B0008091F6019091F7010E94210F0E946220E5 +:1044C000B8CE81E08E25CFCECF93DF93CDB7DEB7C8 +:1044D00060970FB6F894DEBF0FBECDBF29873A872D +:1044E0004B875C876D877E878F87988BCE01099677 +:1044F0000E94B520811112C088E0FE013996DE01CC +:10450000119601900D928A95E1F78C859D85892BF6 +:1045100029F089859A8589238F3FA9F580913F02EB +:104520009091FE0189131CC060960FB6F894DEBF0F +:104530000FBECDBFDF91CF91089593E0AA0FBB1FAF +:104540009A95E1F7A150BE4F98E0FE013196019097 +:104550000D929A95E1F78093FE010E94A40ADECFA6 +:10456000B8E08B9FC001112481509E4F0E94B5205E +:104570008823D1F280913F0290E0019687709927BD +:1045800080933F02CBCFA091FE01B0E0CD01019618 +:104590008770992720913F022817190671F60E940B +:1045A00028161092FE0110923F0288E0E6EFF1E03B +:1045B000DF011D928A95E9F7B1CF0F931F93CF9337 +:1045C000DF9380918C02E0918B02CCE081111AC0C4 +:1045D000DF91CF911F910F910895D1E0DE0FD0931D +:1045E0008B020E2F10E0EC9FF0011124E357FD4FDA +:1045F00083819481892B29F08081918189238F3F48 +:1046000051F4ED2F80918C02E81738F310928C0250 +:1046100010928B02DDCFC09FD001C19FB00D11243D +:10462000A357BD4F16968D919C911797892B29F40E +:1046300018968D919C91019651F42081318142818F +:10464000538164817581868197810E946422C09F15 +:10465000F001C19FF00D1124E357FD4F1482138226 +:10466000D0CF1092F8021092F7021092420180917E +:10467000F6028093F5020E9414060C94DD222F921C +:104680003F924F925F926F927F928F929F92AF92E2 +:10469000BF92CF92DF92EF92FF920F931F93CF932F +:1046A000DF93C091F502E7E0FE2E01E010E0FCE0B0 +:1046B0002F2EAEEFEA2E8091F6028C1316C00E94C8 +:1046C000DD22DF91CF911F910F91FF90EF90DF904E +:1046D000CF90BF90AF909F908F907F906F905F90A2 +:1046E0004F903F902F900C941406D0E0FE01EE0FF7 +:1046F000FF1FE351FD4F80819181F89EF001F99EEB +:10470000F00D1124E85EFE4F2481211158C0309035 +:104710008C02ADE8B2E030E020E0412C5F012315CF +:1047200008F04BC01A966D907C901B97F501808025 +:1047300091804FEF5FEF512CC52CD12CF601EE0F7D +:10474000FF1FE80DF91D659174916616770609F44F +:10475000A601672B11F05394EFCF4F3F5407B1F1EF +:10476000B80102C0660F771F4A95E2F7462AA801F2 +:1047700002C0440F551F5A94E2F7415051094416A4 +:10478000150601F5229EF001239EF00D1124E3573A +:10479000FD4FF89ED001F99EB00D1124A85EBE4FCA +:1047A00012962D913C91139737832683E082E18204 +:1047B0009187808771E015967C930E94E60521968B +:1047C000C37079CF14961C921E9213972F5F3F4FA0 +:1047D0001C96A5CF9F92AF92BF92CF92DF92EF929D +:1047E000FF920F931F93CF93DF9300D000D000D0A0 +:1047F000CDB7DEB78E010F5F1F4F86E0F801119233 +:104800008A95E9F785E7C82E81E0D82EF12CE12CB6 +:10481000AA24A394B12CF60181916F018F3F09F472 +:1048200049C0F894E82FE295EF70F0E021A18F7075 +:10483000A50102C0440F551F8A95E2F7CA01922FC5 +:10484000982B91A392A18095892382A3789400C08C +:10485000EBE7F1E030E020E0912C41914F3F09F48B +:1048600073C0A42FA295AF70B0E090968C9190E0A9 +:104870004F7002C0959587954A95E2F780FD64C018 +:104880008A2D022E01C0880F0A94EAF7982A2F5F1A +:104890003F4F2430310509F7F601319780818F3F72 +:1048A00011F00E94180850EA5A95F1F7F801EE0D40 +:1048B000FF1D90828FEFE81AF80AE6E0EE16F10489 +:1048C00009F0A9CF46E050E0B80184E592E00E94EB +:1048D000642FFF24F394009709F4F12C892BB1F194 +:1048E00086E0F801A4E5B2E001900D928A95E1F727 +:1048F00081E0809349020E94A20590934802809330 +:10490000470280914702909148020E9493050597C3 +:1049100008F1809154028093670280915502809340 +:1049200068028091560280936902809157028093B9 +:104930006A028091580280936B02809159028093A1 +:104940006C021092490206C080E0A0CF809149021B +:104950008111D7CF80914201882301F18091F70224 +:104960009091F8020097D1F00E949305209189025E +:1049700030918A022817390788F49091F5028091C6 +:10498000F602981709F445C00E943F2310928A024C +:10499000109289021092F8021092F70280914F0251 +:1049A000882371F080914D0290914E020E949305F0 +:1049B000893E934028F082EE0E944E0B10924F02E7 +:1049C00080914C02882391F080914A0290914B0291 +:1049D0000E949305883E934048F00E94A205909360 +:1049E0004B0280934A0283E70E94280D8F2D269662 +:1049F0000FB6F894DEBF0FBECDBFDF91CF911F91F0 +:104A00000F91FF90EF90DF90CF90BF90AF909F906D +:104A100008950E94DD221092F8021092F7020E947F +:104A20001406BCCF2F923F924F925F926F927F926B +:104A30008F929F92AF92BF92CF92DF92EF92FF92AE +:104A40000F931F93CF93DF93CDB7DEB769970FB660 +:104A5000F894DEBF0FBECDBF498B5A8B6B8B7C8B1E +:104A60008D8B6111109242021D861E861F86188A48 +:104A700085E0FE017196DE01199601900D928A95EE +:104A8000E1F78C859D85892B31F089859A8589236D +:104A90008F3F09F0D4C129853A854B855C856D85AA +:104AA0007E858F8598890E946422C3C028EFC21634 +:104AB0002CE5D20629F4882379F00E943123EBCF2C +:104AC00039EFC3163CE5D30639F4882329F08091E9 +:104AD00042018111F2CFC3C108E111E0E12CB12CF8 +:104AE000A12C88248394912C9EEF592E4424439426 +:104AF000F8016081718166246A94762C20E0422F4F +:104B000050E0FA01EE0FFF1FE60FF71F8591949119 +:104B1000C816D90609F43A01892B11F02F5FEFCF9F +:104B2000F12CFFEF6F167F0609F445C0F8014481B0 +:104B3000F09042018F2D411180E0F82FF170FF2E8F +:104B4000F801258086819B85992309F408C1FF20FF +:104B500009F405C1211014C0A40101C0440F6A94D6 +:104B6000EAF7842B86838091890290918A028039AA +:104B7000914030F440E951E050938A024093890219 +:104B8000C40102C0880F991F2A95E2F70197F80126 +:104B900026812817190679F48091F7029091F8027E +:104BA000009709F45FC00E9493058139914008F491 +:104BB00059C0F8014482EF28FFEFAF1ABF0A095F1E +:104BC0001F4F26E0A216B10409F092CF8B858823EF +:104BD00009F420C1EE2009F41DC10E94A2059093A2 +:104BE000F8028093F70280918C02883010F591E0F2 +:104BF000980F90938C0298E0FE013996DE01119691 +:104C000001900D929A95E1F73CE0839FC001112439 +:104C100083579D4F28E0FE013196DC0101900D92F3 +:104C20002A95E1F72FEF3FEFFC0131872087D386EC +:104C3000C28669960FB6F894DEBF0FBECDBFDF9176 +:104C4000CF911F910F91FF90EF90DF90CF90BF9089 +:104C5000AF909F908F907F906F905F904F903F901C +:104C60002F9008958091F5026090F602982FF0E061 +:104C7000E0E0861114C09093F5020E171F0709F4A7 +:104C80009ACF90E0FC01EE0FFF1FE351FD4FB18280 +:104C9000A0820196837099278093F6028CCF282EEC +:104CA000312CF101EE0FFF1FE351FD4F20813181C7 +:104CB000F7E0F29FD001F39FB00D1124A85EBE4F24 +:104CC0002D913C911197398F288F712C60E070E005 +:104CD000E72FF0E0EE0FFF1F288D398DE20FF31F55 +:104CE0002591349121153105E1F0F8010190F08111 +:104CF000E02DFF8BEE8B60E005C02417350709F42B +:104D00007F2C6F5FE62FF0E0EE0FFF1F4E895F896B +:104D1000E40FF51F459154914115510571F77F5FDF +:104D2000D7CF7720C9F0F801671708F0FD0144825A +:104D30000E171F0721F49093F502F72C3CCF981320 +:104D400005C0AE17BF0711F49F5F937091012F5FED +:104D50003F4F822F83708DCFF0E0E0E0F7CF90E0FF +:104D600021101FC0B40102C0660F771F2A95E2F719 +:104D70009B01215031092817390731F4442309F4E4 +:104D800047C0C5010E94E605C40101C0880F6A94AE +:104D9000EAF7982F9095F801868189238683F22C73 +:104DA0000ACF9C01062C02C0359527950A94E2F79C +:104DB000A90141705527BC016150710986239723D1 +:104DC000892B11F5452B01F1F80182819381892B03 +:104DD000C1F01B821C821D821E8259825A820E944F +:104DE000A2058160582F9D838C83F8018281938175 +:104DF0008F83988729813A814B816D817E810E94C2 +:104E00006422F8011582C0CFF22FF1702F2EBCCF93 +:104E10002F2CBACF9091F5028091F602981731F0BD +:104E20000E943F23EE2009F436CE03CF0E94DD22FC +:104E30001092F8021092F7020E941406F3CF61E07C +:104E4000CE0109960E945B0F6C018B85F7EFCF16A0 +:104E5000FCE5DF0609F02ACE882309F43DCE81E087 +:104E60008093420118CE1F920F920FB60F92112419 +:104E70002F933F934F935F936F937F938F939F9362 +:104E8000AF93BF93CF93DF93EF93FF93D091E9005C +:104E9000DF708091EC00C82FC17080FDC0E81092D7 +:104EA000E9008091F000877F8093F00078940E9461 +:104EB0003D161092E9008091F00088608093F00028 +:104EC000CD2BCF70C093E900FF91EF91DF91CF918F +:104ED000BF91AF919F918F917F916F915F914F9112 +:104EE0003F912F910F900FBE0F901F9018951F921A +:104EF0000F920FB60F9211242F933F934F935F930E +:104F00006F937F938F939F93AF93BF93EF93FF9391 +:104F10008091E10082FF09C08091E20082FF05C01C +:104F20008091E1008B7F8093E1008091DA0080FF27 +:104F300024C08091D80080FF20C08091DA008E7F4D +:104F40008093DA008091D90080FF9BC080E189BD09 +:104F500082E189BD09B400FEFDCF81E080932E037C +:104F600080910903811109C00E9406040E94D104A6 +:104F70008091E20084608093E2008091E10080FFF4 +:104F800017C08091E20080FF13C08091E2008E7F05 +:104F90008093E2008091E20080618093E200809142 +:104FA000D80080628093D80019BC85E080932E03DE +:104FB0008091E10084FF29C08091E20084FF25C038 +:104FC00080E189BD82E189BD89B5982F917080FF0C +:104FD000FBCF8091D8008F7D8093D8008091E10035 +:104FE0008F7E8093E1008091E2008F7E8093E200CB +:104FF0008091E20081608093E20080912F038823FA +:1050000009F445C084E080932E038091E10083FF82 +:1050100027C08091E20083FF23C08091E100877F59 +:105020008093E10082E080932E0310922F03809101 +:10503000E1008E7F8093E1008091E2008E7F80937B +:10504000E2008091E20080618093E20042E060E053 +:1050500080E00E949F048091F00088608093F000BF +:10506000FF91EF91BF91AF919F918F917F916F9140 +:105070005F914F913F912F910F900FBE0F901F9016 +:10508000189519BC10922E031092090376CF8091C7 +:10509000E30087FD93E090932E03B7CF78941F929F +:1050A0001FB61F9211248F939F93AF93BF9380914C +:1050B000000390910103A0910203B09103030196B4 +:1050C000A11DB11D8093000390930103A0930203DF +:1050D000B0930303BF91AF919F918F911F901FBE1B +:1050E0001F9018951F921FB61F9211248F939F93A4 +:1050F000AF93BF938091FF02811113C08091000391 +:1051000090910103A0910203B09103034196A11D68 +:10511000B11D8093000390930103A0930203B09309 +:105120000303BF91AF919F918F911F901FBE1F905E +:105130001895CDB7DEB7EE970FB6F894DEBF0FBE69 +:10514000CDBF84B7877F84BF0FB6F894A8958091B0 +:105150006000886180936000109260000FBE80E85C +:1051600090E00FB6F89480936100909361000FBEB9 +:1051700085B7806885BF85B7806885BF86E198E080 +:105180009093C5018093C4010E9406040E94D1043B +:105190008091E20084608093E200789480912E03F5 +:1051A0008823A1F01091E9001F709091EC00892FE5 +:1051B000817090FD80E8182B1092E9008091E80042 +:1051C00083FD0E943D161F701093E90082E084BDAC +:1051D00093E095BD9AEF97BD80936E000E949B0F60 +:1051E000811102C00E94890E05E711E02BE7C22E53 +:1051F00021E0D22EF80181918F018F3F11F00E94A2 +:105200001808C016D106B1F786EF0E94180887EF7C +:105210000E94180883E90E94180886E90E9418086D +:10522000E4E5F2E08AE592E0A7E6B2E011921D9291 +:105230008E179F07D9F70E941D16811102C00E9488 +:10524000B11582E090E00E94712F809360020E946D +:10525000B40F90930503809304030E94EA238FE325 +:105260009CE90197F1F700C000000E94EA238091B9 +:10527000670280FF08C06FEF7FEF90E080E00E9440 +:10528000A32F0E944F0C83E090E00E94712F90E0CA +:105290000E941E0B80913803909139030E9489145B +:1052A000509A589A559A5D9A549A5C9A8CE090E07C +:1052B0000E94712F90E0B0E0A0E0809350029093A4 +:1052C0005102A0935202B093530280915A0281116D +:1052D00033C00E941D16811104C00E94B1150E94A6 +:1052E000A11588E090E00E94792F60938E0370935F +:1052F0008F0380939003909391036E7F71F40E94CB +:10530000A11588E090E00E94792F60938E0370933E +:105310008F0380939003909391030E942B06109229 +:10532000840280918E0380FF04C060E086950E9415 +:105330002A1481E080935A025198599A52985A9AA5 +:1053400089B1869581704A9928C290E0892B809313 +:105350005E028AEC92E090937C0280937B0260E094 +:1053600081E20E942A1481E090E00E942D1580E0E5 +:1053700091E09093FC028093FB0218E1C12ED12CA6 +:1053800000E4A02E87E692E096E0B92EB80E809158 +:105390002E039924939400E112E1853009F451C25F +:1053A0000E94EA23882359F08FB7F89440910003B4 +:1053B0005091010360910203709103038FBFE1E6F6 +:1053C000F2E0A7E6B2E010E000E0302F8D9191917D +:1053D000981709F45FC2292F282790E09924939405 +:1053E000422F492109F451C29DAB3EAB892191E086 +:1053F00009F490E09FAB0E94A2058160782F99AFDD +:1054000088AF4DA95EA96FA989AD0E941225F80148 +:10541000EF59FD4F808198269082809184028823E5 +:10542000D1F180918302E0918E03E695E81BE09331 +:105430007F02823009F045C2F0E0EC51FD4FE4916B +:105440000E2F10E0BBE08B2EB3E19B2E80918002EB +:10545000882361F0109280020E94A20590937E0240 +:1054600080937D0210928202109281020E94A20516 +:10547000E0917D02F0917E028E1B9F0B8F3F9F4734 +:1054800050F4E00FF11FF0937E02E0937D028DE770 +:1054900092E0F4010995E0915E02EE0FEE0FE093C9 +:1054A0005E0289B181FBEE24E0F84A9964C280E093 +:1054B0008E29E82BE0935E02EF70F0E0E158FE4F9A +:1054C000808190915D02890F80935D0220E084309D +:1054D00034F180915C028F5F80935C0212E018AB24 +:1054E00019AA81E08AAB0E94A2058160782F9CAB4B +:1054F0008BAB48A959A96AA98CA90E9412251BA7A0 +:105500001CA61DA60E94A2058160782F9FA78EA7CA +:105510004BA55CA56DA58FA50E94122521E0809169 +:105520005D028D3F2CF580915C02815080935C027E +:105530001EA21FA281E088A70E94A2058160782F89 +:105540009AA789A74EA15FA168A58AA50E941225E6 +:1055500019A21AA21BA20E94A2058160782F9DA306 +:105560008CA349A15AA16BA18DA10E94122521E013 +:1055700080915D02082E000C990B64E070E00E949F +:10558000CE2E80935D02222359F08FB7F89440917C +:1055900000035091010360910203709103038FBFD8 +:1055A00086E0E4E7F2E0DE01119601900D928A9523 +:1055B000E1F7909076028090770210917802009146 +:1055C000790210927602109277021092780210926D +:1055D0007902892D882909F448C08091720290913E +:1055E00073020E9493059C0190916E02992309F425 +:1055F000AEC323333105C8F19F3F19F09F5F9093ED +:105600006E02992059F00E949C079FEF19140CF428 +:1056100091E0899F802D112480937602882059F093 +:105620000E949C079FEF18140CF491E0899F802D35 +:10563000112480937702309176023323B1F02091C8 +:105640007702222391F045EB3403C0011124992302 +:1056500009F494C19093760245EB24039001112440 +:10566000332309F48FC130937702812F802B09F403 +:1056700048C080917002909171020E9493059C0134 +:1056800090916D02992309F45DC325363105C8F167 +:105690009F3F19F09F5F90936D02112359F00E9474 +:1056A0007A079FEF11160CF491E0899F802D112449 +:1056B00080937802002359F00E947A079FEF10161A +:1056C0000CF491E0899F802D112480937902309110 +:1056D00078023323B1F020917902222391F045EB37 +:1056E0003403C0011124992309F450C19093780226 +:1056F00045EB240390011124332309F44BC130936B +:1057000079028091760290917702892B90917802AC +:10571000892B90917902892B11F00E94DA0686E09C +:10572000FE013196A4E7B2E001900D928A95E1F76F +:105730000E94DA0590915F02891731F00E94DA0524 +:1057400080935F020E94AB0B80912E03843009F09E +:105750001ECE83E08093E9008091E80082FF17CE9F +:105760008091E80090E085FF06C00E942504882310 +:1057700009F414C191E08091E8008B778093E800F0 +:10578000992309F404CEE981E150E33108F088C19E +:10579000F0E0E152F04D0C94042F92E0D7CD8091CF +:1057A0002E03843009F440C080E00E94AB0B1092BD +:1057B000840280917A02811116C090927A028091BF +:1057C0008E03982F917090935B028E7F80938E034F +:1057D0009FEFE0E7F2E09150E040F040E1F700C0D9 +:1057E00000000E94D80F1092FF020FB6F894A895FF +:1057F000C09260000FBEA092600083B7817F84607A +:1058000083BF83B7816083BF7894889583B78E7F89 +:1058100083BF0FB6F894A89580916000886180934B +:105820006000109260000FBE80912D03882349F024 +:105830000E94EA23E7E6F2E08191811164C2BE1280 +:10584000FBCF80912E03853009F4A9CF0E94281642 +:105850000E94DA050E94AB0B10927A0280915B02E3 +:10586000882361F080918E03816080938E0360E0D5 +:1058700086950E942A140E94C20F92CD80918502C3 +:105880008823C9F30E94D80FF6CF9F5F990C9430FC +:1058900009F0A6CD0F5F1F4F0630110509F095CD19 +:1058A0008FEF8AAF8BAF1CAE0E94A2058160782F6C +:1058B0009EAF8DAF4AAD5BAD6CAD8EAD0E94122533 +:1058C000ACCD863059F4F0E0EF51FD4FE4910E2F4E +:1058D00010E0ABEF8A2EA2E19A2EB8CD893061F4A8 +:1058E000E695F0E0E252FD4FE4910E2F10E0F7E66E +:1058F0008F2EF2E19F2EAACD8F3061F4E695F0E075 +:10590000E552FD4FE4910E2F10E0E9EF8E2EE1E11C +:105910009E2E9CCD853159F4F0E0E852FD4FE49184 +:105920000E2F10E07BEA872E71E1972E8FCD08E2D3 +:1059300010E042E2842E41E1942E883109F486CDB4 +:10594000833249F4E6EDF2E00591149162EA862E85 +:1059500062E1962E7BCD04EF11E059EE852E50E1E9 +:10596000952E843209F472CD00ED17E03AE2832ED1 +:1059700036E0932E6BCD82E090E09ACD81E080936B +:1059800076026ACE81E0809377026FCE81E08093C9 +:105990007802AECE81E080937902B3CE00E210E0CF +:1059A000CE0101964C018091E80085FD0AC08091EE +:1059B000E8008B778093E8000E942504882399F300 +:1059C000D9CE8091F100F40181934F01015011096A +:1059D00051F7D0CE1A8289E08B832DC08A81823024 +:1059E00009F4A7C18330A9F0813009F059C02FB75D +:1059F000F8946091000370910103809102039091EB +:105A000003032FBF0E940A2F6B837C838D839E83A9 +:105A100012C0809167028B83809168028C83809191 +:105A200069028D8380916A028E8380916B028F83DD +:105A300080916C02888780912E03843009F0A7CC76 +:105A40001091E9001F709091EC00892F817090FDFA +:105A500080E8182B82E08093E9008091E80080FFC5 +:105A60000DC050E040E060E270E0CE0101960E947F +:105A700056048091E8008E778093E8001F701093A1 +:105A8000E90085CC8A81823059F46B817C818D81DB +:105A90009E810E940A2F86E290E00E94852FCBCF44 +:105AA0008FEF8983C8CF4C816B818A810E94B20EAF +:105AB0009827892798279E838D83BDCF8D809E80D0 +:105AC0009824892498248A810B81F8E00F9F800113 +:105AD000112420E3829F000D111D11248C8190E080 +:105AE000880F991F080F191F692DC80187960E94FA +:105AF000852F682DC8018896D0CF0E941F0E9BCF9E +:105B00008A818138C1F060F4803809F094CF20E0B8 +:105B10004B816091900380918F030E9431138BCF52 +:105B2000823859F1833809F086CF20E04091910303 +:105B30006C818B81F2CF60E08B810E942A149B8163 +:105B400080918E03911111C08E7F80938E031092ED +:105B500084024FEF80E792E0415080409040E1F7AF +:105B600000C000000E94D80F66CF816080938E0332 +:105B700060E086950E942A145ECF8B818093920309 +:105B80005ACF8A81813899F030F4803809F053CFA8 +:105B90008091910321CF823891F0833809F04BCF67 +:105BA00080918F038B83809190038C8344CF80916D +:105BB0008E0380FF02C086950FCF80E00DCF8091CD +:105BC00092030ACF60918E0370918F0380919003AE +:105BD000909191030E941F132ECF80E18A832BCFD7 +:105BE00081E08A8389EFF8CE0A811B811027012783 +:105BF0001027FE0131963F018C80CF01880D911D49 +:105C00004C01C801895F9D4F8614970409F413CF96 +:105C1000093FE1E01E0750F40E94712FF3018483D5 +:105C20000F5F1F4FFFEF6F1A7F0AEBCFF301148254 +:105C3000F7CF0A811B81102701271027CE0101967B +:105C40003C018C80800E912E911CC801895F9D4F74 +:105C50008016910609F4EFCE093FE1E01E0720F41B +:105C6000F30164810E94852FFFEF6F1A7F0A0F5F97 +:105C70001F4FEBCF0E940F0EDECE8AE0AFCF0A811E +:105C80001B81102701271027CE0101963C018C8033 +:105C9000FC01E80DF11D4F01C80187968614970499 +:105CA00009F4C9CE003EF1E01F0750F40E94712FA5 +:105CB000F30184830F5F1F4FFFEF6F1A7F0AECCF52 +:105CC000F3011482F7CF0A811B81102701271027C7 +:105CD000CE0101963C018C80800E912E911CC80152 +:105CE00087968016910609F4A6CE003EE1E01E07D5 +:105CF00020F4F30164810E94852FFFEF6F1A7F0A61 +:105D00000F5F1F4FECCF09BD19BD09B400FEFDCFD9 +:105D10008091D8008F7D8093D8008091E0008260D0 +:105D20008093E0008091E00081FDFCCF0E94281666 +:105D300088CD86E290E00E94712F1B821C821D821A +:105D40008E8379CE2D32314008F0A4CCDACC2D32BE +:105D5000314008F053CC89CC87FB082E062687FDFE +:105D6000819567FD61950E94422F0EF4919507FC85 +:105D700081950895AA1BBB1B51E107C0AA1FBB1F39 +:105D8000A617B70710F0A61BB70B881F991F5A95C7 +:105D9000A9F780959095BC01CD01089597FB072E3A +:105DA00016F4009407D077FD09D00E94BA2E07FCA4 +:105DB00005D03EF4909581959F4F0895709561951B +:105DC0007F4F0895A1E21A2EAA1BBB1BFD010DC037 +:105DD000AA1FBB1FEE1FFF1FA217B307E407F5079B +:105DE00020F0A21BB30BE40BF50B661F771F881F77 +:105DF000991F1A9469F760957095809590959B010D +:105E0000AC01BD01CF010895EE0FFF1F0590F49185 +:105E1000E02D09946927962769277827872778270F +:105E200008950E94192F332312F48A1B9B0B0C94A4 +:105E30002A2FA29FB001B39FC001A39F700D811DA7 +:105E40001124911DB29F700D811D1124911D089583 +:105E50000E94192FB7FF0895821B930B08950E948B +:105E6000192FA59F900DB49F900DA49F800D911D9B +:105E700011240895B7FF0C942F2F0E942F2F821BFF +:105E8000930B0895991B79E004C0991F961708F0A9 +:105E9000961B881F7A95C9F780950895FB01DC0150 +:105EA00002C005900D9241505040D8F70895FC0172 +:105EB0004150504030F001900616D1F73197CF0194 +:105EC0000895882799270895FB01DC0104C08D916E +:105ED0000190801921F441505040C8F7881B990B5C +:105EE0000895F999FECF92BD81BDF89A992780B5A2 +:105EF0000895A6E1B0E044E050E00C94AB2FA8E197 +:105F0000B0E042E050E00C94AB2F262FF999FECF81 +:105F100092BD81BDF89A019700B4021639F01FBAFC +:105F200020BD0FB6F894FA9AF99A0FBE0895039619 +:105F3000272F0E94862F0E94852F252F0E94862FB3 +:105F4000242F0C94862F0196272F0E94862F0C94C5 +:105F5000852FDC01CB01FC01F999FECF06C0F2BD13 +:105F6000E1BDF89A319600B40D9241505040B8F717 +:105F70000895F894FFCF460F460F4F0F4F0F510F64 +:105F80004F0F4F0F4F0F460F460F560F4F0F4F0F2C +:105F9000560F22174A179D174A179D177D17B517D9 +:105FA0009D17B218BF180C1D0C1D7B1D7B1DD61D27 +:105FB000F01D421D421DFB1D831E921E921EEA2CE7 +:105FC000EE2C422D532D5E2D7D2D802DC12DE22DE9 +:105FD000502D502DED2DF02DF42D192E3A2E3D2E55 +:045FE0003F2E632EBF +:105FE40090050F0CEE0BEA0BE60B01191A1B1C1D96 +:105FF4001E1F202122010201FC002A00000000F6DD +:10600400004C00000000F0005000000000EA0051C5 +:1060140000000000E4004F00000000DE0052000019 +:1060240000000101818283E200E900EA00B500B6C4 +:1060340000B700CD008301CC008A019201940121B4 +:1060440002230224022502260227022A02B300B4F4 +:10605400006F007000F03435366667F6F7939600EB +:10606400FF0100010000FFFF0000010001FF00002C +:1060740001020202020606060909090909090F0FAD +:106084000F0F0F0F151515181919191919191919B1 +:10609400191923244022B6DA01B8010201FB0614BF +:0460A40007340700B6 +:00000001FF From 910c5ebac9520f161ced71d8446b75336fcabf47 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Mon, 27 Sep 2021 01:37:04 -0400 Subject: [PATCH 029/155] Remove extra file --- .../ps17/qmk_firmware - Shortcut.lnk | Bin 1154 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 keyboards/solartempest/ps17/qmk_firmware - Shortcut.lnk diff --git a/keyboards/solartempest/ps17/qmk_firmware - Shortcut.lnk b/keyboards/solartempest/ps17/qmk_firmware - Shortcut.lnk deleted file mode 100644 index 15ada1df2412f92d8cb088807b89bf4901fcdffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1154 zcma)5Yesr$ zS=Ye%4CGy_rq-8Nt8<6v?~MGox4I*9)i}H>Xd&$EQegd+iI$uHS}(;55`_7!m`lc% zu-~Q6KB=HhJNR=tqK~WEU4(v`7{nuJJRCT|&JWa$BXvL>at@DJ0(wwEE-0ZG5tU{F2`7Z3iER5?v#!S;ari0*nqcVR_+W22*wDI+% z+(cOjYT$mfLp{_{ryJBMBz-x@+hfsRLjgL3$4~gWHRNm9nUdyOXRVbU(K`JBrRN6) From 80616dc950a7d1a0ffa38995193e02486dec0619 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 31 Oct 2021 02:16:26 -0400 Subject: [PATCH 030/155] Add pimoroni trackball support. --- keyboards/solartempest/sofle/config.h | 14 +- .../solartempest/sofle/keymaps/via/keymap.c | 190 +- .../sofle/keymaps/via/pimoroni_trackball.c | 201 + .../sofle/keymaps/via/pimoroni_trackball.h | 37 + .../solartempest/sofle/keymaps/via/snakey.c | 66 +- .../sofle/keymaps/via/snakey_minimal.c | 317 ++ keyboards/solartempest/sofle/rules.mk | 38 +- .../solartempest/sofle/sofle VIA keymap.json | 10 + .../sofle/sofle VIA layout trackball.json | 367 ++ .../sofle/solartempest_sofle_via.hex | 3494 ++++++++--------- 10 files changed, 2840 insertions(+), 1894 deletions(-) create mode 100644 keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.c create mode 100644 keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.h create mode 100644 keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c create mode 100644 keyboards/solartempest/sofle/sofle VIA layout trackball.json diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index 1bb5c21f14cb..a62b250b40a1 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -71,8 +71,11 @@ #ifdef OLED_ENABLE #define OLED_TIMEOUT 80000 //120000 = 2 minutes in ms. #define OLED_BRIGHTNESS 90 // Default 100. - #define SPLIT_WPM_ENABLE //Enable WPM across split keyboards (+268). #define SPLIT_OLED_ENABLE //Synx on/off OLED state between halves (+100). + //#define SPLIT_WPM_ENABLE //Enable WPM across split keyboards (+268). + //#define SPLIT_LAYER_STATE_ENABLE + //#define SPLIT_LED_STATE_ENABLE + //#define SPLIT_MODS_ENABLE #define OLED_LOGO //Enable to print custom logo on slave side, disable to save space. #endif @@ -82,6 +85,15 @@ #define COMBO_TERM 400 //Default combo time is 200ms. This is the time delay allowed between deleting each whole word with shift-backspace. #endif +// Pimoroni trackball settings +#ifdef POINTING_DEVICE_ENABLE + #define PIMORONI_TRACKBALL_ROTATE + #define PIMORONI_TRACKBALL_INVERT_Y + //#define PIMORONI_TRACKBALL_INVERT_X + //#define PIMORONI_TRACKBALL_CLICK //Not compatible with having mouse keys on keymap +#endif + + // Add RGB underglow #define RGB_DI_PIN D3 #define RGBLED_NUM 74 diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index dcaefa44fe92..d51ae53124a4 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -24,14 +24,21 @@ //Note that the keyboard animations below take a large amount of space! //#include "bongocat.c" //OLED code for Bongocat, original code by foureight84. Disable RGBLIGHT to make enough space. //#include "luna.c" //OLED code for Luna, original code by Hellsingcoder and adapted by Jackasaur. - #include "snakey.c" //OLED code for Snakey, customized from Luna. + //#include "snakey.c" //OLED code for Snakey, customized from Luna. + #include "snakey_minimal.c" //OLED code for Snakey, without WPM/related animations to save space. +#endif + +#ifdef POINTING_DEVICE_ENABLE + //#include "drivers/sensors/pimoroni_trackball.h" //Normally this is included, but the master code has an issue with the rotation code. + #include "pimoroni_trackball.c" //This is the master code with a workaround for scrolling rotation with inversion (line 146 only). + #include "pimoroni_trackball.h" + bool was_scrolling = true; //Remember last state of trackball scrolling #endif #ifdef RGBLIGHT_ENABLE extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT #endif - bool is_alt_tab_active = false; // Super Alt Tab Code uint16_t alt_tab_timer = 0; bool lshift_held = false; // LShift Backspace Delete whole Word Code @@ -39,52 +46,34 @@ bool rshift_held = false; // RShift Backspace Delete whole Word Code static uint16_t held_shift = 0; #ifdef VIA_ENABLE enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = USER00, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SBS //Shift backspace to delete whole word (Swap KC_BPSC with this) + ATABF = USER00, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + SBS, //Shift backspace to delete whole word (Swap KC_BPSC with this) + PM_SCROLL, //Toggle trackball scrolling mode + PM_PRECISION //Toggle trackball precision mode }; #else enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. ATABF = SAFE_RANGE, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SBS //Shift backspace to delete whole word (Swap KC_BPSC with this) + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + SBS, //Shift backspace to delete whole word (Swap KC_BPSC with this) + PM_SCROLL, //Toggle trackball scrolling mode + PM_PRECISION //Toggle trackball precision mode }; #endif -/*#ifdef COMBO_ENABLE //(+42 firmware size for this combo). SBS takes care of this combo, so it is an example only and can be replaced with others as required. - enum combo_events { - sbs_delword - }; - - const uint16_t PROGMEM delword_combo[] = {KC_LSFT, KC_BSPC, COMBO_END}; //Shift-Backspace to delete whole words - combo_t key_combos[COMBO_COUNT] = { - [sbs_delword] = COMBO_ACTION(delword_combo) - }; - - void process_combo_event(uint16_t combo_index, bool pressed) { - switch(combo_index) { - case sbs_delword: - if (pressed) { - tap_code16(LCTL(KC_BSPC)); - } - break; - } - } -#endif*/ - - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these layouts to save space when using only VIA. /* QWERTY * ,-----------------------------------------. ,-----------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bspc | - * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ESC | Q | W | E | R | T |-------. | Y | U | I | O | P | Bspc | + * |------+------+------+------+------+------| Trkbl | |------+------+------+------+------+------| * | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' | * |------+------+------+------+------+------| Enc | | Enc |------+------+------+------+------+------| * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift| @@ -92,7 +81,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | * | | | | |/ / \ \ | | | | | * `----------------------------------' '------''---------------------------' - */ +*/ /*[0] = LAYOUT( KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC__VOLUP, KC_PGUP,KC_Y, KC_U, KC_I, KC_O, KC_P, SBS, @@ -125,11 +114,35 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these }; -void matrix_init_user(void) { -} +#ifdef POINTING_DEVICE_ENABLE + void run_trackball_cleanup(void) { //Code by Drasnha. Sets colour of trackball LED. + if (trackball_is_scrolling()) { + trackball_set_rgbw(43, 153, 103, 0x00); + } else if (trackball_get_precision() != 1.0) { + trackball_set_rgbw(0, 27, 199, 0x00); + } else { + trackball_set_rgbw(RGB_GOLDENROD, 0x00); + } + } + + #if !defined(MOUSEKEY_ENABLE) //Allows for button clicks on keymap even though mousekeys is not defined. + static bool mouse_button_one, trackball_button_one; + #endif + + void trackball_register_button(bool pressed, enum mouse_buttons button) { //Allows for clicking with mousekey and dragging with trackball. + report_mouse_t currentReport = pointing_device_get_report(); + if (pressed) { + currentReport.buttons |= button; + } else { + currentReport.buttons &= ~button; + } + pointing_device_set_report(currentReport); + } +#endif + void matrix_scan_user(void) { - if (is_alt_tab_active) { + if (is_alt_tab_active) { //Allows for use of super alt tab. if (timer_elapsed(alt_tab_timer) > 1000) { unregister_code(KC_LALT); is_alt_tab_active = false; @@ -139,8 +152,8 @@ void matrix_scan_user(void) { bool process_record_user(uint16_t keycode, keyrecord_t *record) { - #ifdef KEYBOARD_PET - if (record->event.pressed) { //Drashna's OLED timeout off code for animations + #if defined(KEYBOARD_PET) || defined(OLED_LOGO) + if (record->event.pressed) { //OLED timeout code oled_timer = timer_read32(); } #endif @@ -194,11 +207,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return true; - case KC_RSFT: //Shift Backspace to Delete Whole Word. Inspired by Hellsingcoder. + case KC_RSFT: //Shift Backspace to Delete Whole Word. Inspired by Hellsingcoder. rshift_held = record->event.pressed; held_shift = keycode; - // KEYBOARD PET STATUS - #ifdef KEYBOARD_PET + #ifdef KEYBOARD_PET // KEYBOARD PET STATUS if (record->event.pressed) { isBarking = true; } else { @@ -209,8 +221,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case KC_LSFT: lshift_held = record->event.pressed; held_shift = keycode; - // KEYBOARD PET STATUS - #ifdef KEYBOARD_PET + #ifdef KEYBOARD_PET // KEYBOARD PET STATUS if (record->event.pressed) { isBarking = true; } else { @@ -219,12 +230,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif return true; case SBS: - if (record->event.pressed) { + if (record->event.pressed) { //When left shift is held and backspace pressed, one whole word will be deleted (left). if (lshift_held) { unregister_code(held_shift); register_code(KC_LCTL); register_code(KC_BSPC); - } else if (rshift_held) { + } else if (rshift_held) { //When left shift is held and backspace pressed, one whole word will be deleted (right). unregister_code(held_shift); register_code(KC_LCTL); register_code(KC_DEL); @@ -241,18 +252,58 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; - // KEYBOARD PET STATUS - #ifdef KEYBOARD_PET + #ifdef POINTING_DEVICE_ENABLE //Allow modes when trackball is enabled. + case PM_SCROLL: + if (record->event.pressed) { + if (trackball_is_scrolling()){ //Enable toggling for trackball scrolling + trackball_set_scrolling(false); + was_scrolling=false; //Tracks status of scrolling setting. Works with holding of layer key for mouse mode. + }else if(was_scrolling==true){ + trackball_set_scrolling(false); + was_scrolling=false; + } + else{ + trackball_set_scrolling(true); + was_scrolling=true; + } + run_trackball_cleanup(); + break; + } + case PM_PRECISION: + if (record->event.pressed) { + if (trackball_get_precision()==1){ //Enable toggling for trackball precision + trackball_set_precision(1.8); + } else{ + trackball_set_precision(1); + } + run_trackball_cleanup(); + break; + } + # if !defined(MOUSEKEY_ENABLE) //Allow for using mouse buttons in the keymap when mouse keys is not enabled. + case KC_MS_BTN1: + mouse_button_one = record->event.pressed; + trackball_register_button(mouse_button_one | trackball_button_one, MOUSE_BTN1); + break; + case KC_MS_BTN2: + trackball_register_button(record->event.pressed, MOUSE_BTN2); + break; + case KC_MS_BTN3: + trackball_register_button(record->event.pressed, MOUSE_BTN3); + break; + # endif + #endif + + #ifdef KEYBOARD_PET // KEYBOARD PET STATUS case KC_LCTL: case KC_RCTL: - if (record->event.pressed) { + if (record->event.pressed) { //Pet sneaks when control held. isSneaking = true; } else { isSneaking = false; } return true; case KC_SPC: - if (record->event.pressed) { + if (record->event.pressed) { //Pet jumps when enter is pressed. isJumping = true; showedJump = false; } else { @@ -265,9 +316,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } -#ifdef OLED_ENABLE - void suspend_power_down_user(void) { //turn off OLEDs when computer is sleeping - oled_off(); +#if defined(OLED_ENABLE) || defined(POINTING_DEVICE_ENABLE) + void suspend_power_down_user(void) { + #ifdef OLED_ENABLE //Turn off OLEDs when computer is sleeping + oled_off(); + #endif + #ifdef POINTING_DEVICE_ENABLE + trackball_set_rgbw(0,0,0, 0x00); //Turn off Pimoroni trackball LED when computer is sleeping + #endif + } +#endif +#ifdef POINTING_DEVICE_ENABLE + void suspend_wakeup_init_user(void) { //turn on Pimoroni LED when awoken + run_trackball_cleanup(); } #endif @@ -298,7 +359,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { { rgblight_layers = my_rgb_layers;// Enable the LED layers rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 - //layer_move(0); //start on layer 0 to get the lighting activated in all cases + layer_move(0); //start on layer 0 to get the lighting activated in all cases. Remove to save a very small amount of space. + #ifdef POINTING_DEVICE_ENABLE + trackball_set_precision(1.8); + trackball_set_scrolling(true); + run_trackball_cleanup(); + #endif } @@ -310,9 +376,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { rgblight_set_layer_state(3, layer_state_cmp(state, 3)); rgblight_set_layer_state(4, layer_state_cmp(state, 4)); + switch(biton32(state)){ // Change all other LEDs based on layer state as well case 0: rgblight_sethsv_noeeprom(50,255,80); + if (was_scrolling==true){ //Check if was scrolling when layer was left + trackball_set_scrolling(true); + run_trackball_cleanup(); + } else{ + trackball_set_scrolling(false); + run_trackball_cleanup(); + } break; case 1: rgblight_sethsv_noeeprom(252,255,80); @@ -325,6 +399,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; case 4: rgblight_sethsv_noeeprom(218,255,80); + if (was_scrolling==true){ //Check if was scrolling when layer is activated + trackball_set_scrolling(false); + run_trackball_cleanup(); + } } return state; } diff --git a/keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.c b/keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.c new file mode 100644 index 000000000000..a706db9c804c --- /dev/null +++ b/keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.c @@ -0,0 +1,201 @@ +/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * Copyright 2021 Dasky (@daskygit) + * + * 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 . + */ +#include "pimoroni_trackball.h" +#include "i2c_master.h" +#include "print.h" + +#ifndef PIMORONI_TRACKBALL_ADDRESS +# define PIMORONI_TRACKBALL_ADDRESS 0x0A +#endif +#ifndef PIMORONI_TRACKBALL_INTERVAL_MS +# define PIMORONI_TRACKBALL_INTERVAL_MS 8 +#endif +#ifndef PIMORONI_TRACKBALL_MOUSE_SCALE +# define PIMORONI_TRACKBALL_MOUSE_SCALE 5 +#endif +#ifndef PIMORONI_TRACKBALL_SCROLL_SCALE +# define PIMORONI_TRACKBALL_SCROLL_SCALE 1 +#endif +#ifndef PIMORONI_TRACKBALL_DEBOUNCE_CYCLES +# define PIMORONI_TRACKBALL_DEBOUNCE_CYCLES 20 +#endif +#ifndef PIMORONI_TRACKBALL_ERROR_COUNT +# define PIMORONI_TRACKBALL_ERROR_COUNT 10 +#endif + +#define TRACKBALL_TIMEOUT 100 +#define TRACKBALL_REG_LED_RED 0x00 +#define TRACKBALL_REG_LED_GRN 0x01 +#define TRACKBALL_REG_LED_BLU 0x02 +#define TRACKBALL_REG_LED_WHT 0x03 +#define TRACKBALL_REG_LEFT 0x04 +#define TRACKBALL_REG_RIGHT 0x05 +#define TRACKBALL_REG_UP 0x06 +#define TRACKBALL_REG_DOWN 0x07 + +static pimoroni_data current_pimoroni_data; +static report_mouse_t mouse_report; +static bool scrolling = false; +static int16_t x_offset = 0; +static int16_t y_offset = 0; +static int16_t h_offset = 0; +static int16_t v_offset = 0; +static uint16_t precision = 128; +static uint8_t error_count = 0; + +float trackball_get_precision(void) { return ((float)precision / 128); } +void trackball_set_precision(float floatprecision) { precision = (floatprecision * 128); } +bool trackball_is_scrolling(void) { return scrolling; } +void trackball_set_scrolling(bool scroll) { scrolling = scroll; } + +void trackball_set_rgbw(uint8_t r, uint8_t g, uint8_t b, uint8_t w) { + uint8_t data[4] = {r, g, b, w}; + __attribute__((unused)) i2c_status_t status = i2c_writeReg(PIMORONI_TRACKBALL_ADDRESS << 1, TRACKBALL_REG_LED_RED, data, sizeof(data), TRACKBALL_TIMEOUT); +#ifdef TRACKBALL_DEBUG + dprintf("Trackball RGBW i2c_status_t: %d\n", status); +#endif +} + +i2c_status_t read_pimoroni_trackball(pimoroni_data* data) { + i2c_status_t status = i2c_readReg(PIMORONI_TRACKBALL_ADDRESS << 1, TRACKBALL_REG_LEFT, (uint8_t*)data, sizeof(*data), TRACKBALL_TIMEOUT); +#ifdef TRACKBALL_DEBUG + dprintf("Trackball READ i2c_status_t: %d\nLeft: %d\nRight: %d\nUp: %d\nDown: %d\nSwtich: %d\n", status, data->left, data->right, data->up, data->down, data->click); +#endif + return status; +} + +__attribute__((weak)) void pointing_device_init(void) { + i2c_init(); + trackball_set_rgbw(0x00, 0x00, 0x00, 0x00); +} + +int16_t trackball_get_offsets(uint8_t negative_dir, uint8_t positive_dir, uint8_t scale) { + uint8_t offset = 0; + bool isnegative = false; + if (negative_dir > positive_dir) { + offset = negative_dir - positive_dir; + isnegative = true; + } else { + offset = positive_dir - negative_dir; + } + uint16_t magnitude = (scale * offset * offset * precision) >> 7; + return isnegative ? -(int16_t)(magnitude) : (int16_t)(magnitude); +} + +void trackball_adapt_values(int8_t* mouse, int16_t* offset) { + if (*offset > 127) { + *mouse = 127; + *offset -= 127; + } else if (*offset < -127) { + *mouse = -127; + *offset += 127; + } else { + *mouse = *offset; + *offset = 0; + } +} + +__attribute__((weak)) void trackball_click(bool pressed, report_mouse_t* mouse) { +#ifdef PIMORONI_TRACKBALL_CLICK + if (pressed) { + mouse->buttons |= MOUSE_BTN1; + } else { + mouse->buttons &= ~MOUSE_BTN1; + } +#endif +} + +__attribute__((weak)) bool pointing_device_task_user(pimoroni_data* trackball_data) { return true; }; + +__attribute__((weak)) void pointing_device_task() { + static fast_timer_t throttle = 0; + static uint16_t debounce = 0; + + if (error_count < PIMORONI_TRACKBALL_ERROR_COUNT && timer_elapsed_fast(throttle) >= PIMORONI_TRACKBALL_INTERVAL_MS) { + i2c_status_t status = read_pimoroni_trackball(¤t_pimoroni_data); + + if (status == I2C_STATUS_SUCCESS) { + error_count = 0; + + if (pointing_device_task_user(¤t_pimoroni_data)) { + mouse_report = pointing_device_get_report(); + + if (!(current_pimoroni_data.click & 128)) { + trackball_click(false, &mouse_report); + if (!debounce) { + if (scrolling) { +#ifdef PIMORONI_TRACKBALL_INVERT_X + h_offset += trackball_get_offsets(current_pimoroni_data.right, current_pimoroni_data.left, PIMORONI_TRACKBALL_SCROLL_SCALE); +#else + h_offset -= trackball_get_offsets(current_pimoroni_data.right, current_pimoroni_data.left, PIMORONI_TRACKBALL_SCROLL_SCALE); +#endif +#if defined(PIMORONI_TRACKBALL_INVERT_Y) && !defined(PIMORONI_TRACKBALL_ROTATE) //This line was customized to correct the scroll rotation inversion issue. + v_offset += trackball_get_offsets(current_pimoroni_data.down, current_pimoroni_data.up, PIMORONI_TRACKBALL_SCROLL_SCALE); +#else + v_offset -= trackball_get_offsets(current_pimoroni_data.down, current_pimoroni_data.up, PIMORONI_TRACKBALL_SCROLL_SCALE); +#endif + } else { +#ifdef PIMORONI_TRACKBALL_INVERT_X + x_offset -= trackball_get_offsets(current_pimoroni_data.right, current_pimoroni_data.left, PIMORONI_TRACKBALL_MOUSE_SCALE); +#else + x_offset += trackball_get_offsets(current_pimoroni_data.right, current_pimoroni_data.left, PIMORONI_TRACKBALL_MOUSE_SCALE); +#endif +#ifdef PIMORONI_TRACKBALL_INVERT_Y + y_offset -= trackball_get_offsets(current_pimoroni_data.down, current_pimoroni_data.up, PIMORONI_TRACKBALL_MOUSE_SCALE); +#else + y_offset += trackball_get_offsets(current_pimoroni_data.down, current_pimoroni_data.up, PIMORONI_TRACKBALL_MOUSE_SCALE); +#endif + } + if (scrolling) { +#ifndef PIMORONI_TRACKBALL_ROTATE + trackball_adapt_values(&mouse_report.h, &h_offset); + trackball_adapt_values(&mouse_report.v, &v_offset); +#else + trackball_adapt_values(&mouse_report.h, &v_offset); + trackball_adapt_values(&mouse_report.v, &h_offset); +#endif + mouse_report.x = 0; + mouse_report.y = 0; + } else { +#ifndef PIMORONI_TRACKBALL_ROTATE + trackball_adapt_values(&mouse_report.x, &x_offset); + trackball_adapt_values(&mouse_report.y, &y_offset); +#else + trackball_adapt_values(&mouse_report.x, &y_offset); + trackball_adapt_values(&mouse_report.y, &x_offset); +#endif + mouse_report.h = 0; + mouse_report.v = 0; + } + } else { + debounce--; + } + } else { + trackball_click(true, &mouse_report); + debounce = PIMORONI_TRACKBALL_DEBOUNCE_CYCLES; + } + } + } else { + error_count++; + } + + pointing_device_set_report(mouse_report); + pointing_device_send(); + + throttle = timer_read_fast(); + } +} diff --git a/keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.h b/keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.h new file mode 100644 index 000000000000..6b2a41425d41 --- /dev/null +++ b/keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.h @@ -0,0 +1,37 @@ +/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * Copyright 2021 Dasky (@daskygit) + * + * 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 . + */ +#pragma once + +#include "quantum.h" +#include "pointing_device.h" + +typedef struct pimoroni_data { + uint8_t left; + uint8_t right; + uint8_t up; + uint8_t down; + uint8_t click; +} pimoroni_data; + +void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white); +void trackball_click(bool pressed, report_mouse_t* mouse); +int16_t trackball_get_offsets(uint8_t negative_dir, uint8_t positive_dir, uint8_t scale); +void trackball_adapt_values(int8_t* mouse, int16_t* offset); +float trackball_get_precision(void); +void trackball_set_precision(float precision); +bool trackball_is_scrolling(void); +void trackball_set_scrolling(bool scroll); diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey.c b/keyboards/solartempest/sofle/keymaps/via/snakey.c index a9ea055b0cd1..de47c3c01f63 100644 --- a/keyboards/solartempest/sofle/keymaps/via/snakey.c +++ b/keyboards/solartempest/sofle/keymaps/via/snakey.c @@ -19,28 +19,28 @@ //SSD1306 OLED update loop #ifdef OLED_ENABLE + uint32_t oled_timer = 0; //OLED timeout + led_t led_usb_state; + + // KEYBOARD PET START #define KEYBOARD_PET - /* KEYBOARD PET START */ - /* settings */ + // settings #define MIN_WALK_SPEED 10 #define MIN_RUN_SPEED 40 - /* advanced settings */ + // advanced settings #define ANIM_FRAME_DURATION 300 // how long each frame lasts in ms. Default is 200. #define ANIM_SIZE 96 // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024 - /* timers */ + // timers uint32_t anim_timer = 0; - /* current frame */ + // current frame uint8_t current_frame = 0; - /* status variables */ + // status variables int current_wpm_read = 0; - uint32_t oled_timer = 0; //For Keyboard pet OLED timeout with animations, code by Drashna. - led_t led_usb_state; - bool isSneaking = false; bool isJumping = false; bool showedJump = true; @@ -61,12 +61,12 @@ } #endif - /* logic */ + // logic static void render_luna(int LUNA_X, int LUNA_Y) { - /* Sit */ + // Sit static const char PROGMEM sit[2][ANIM_SIZE] = { - /* 'sit1', 32x22px */ + // 'sit1', 32x22px { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xcc, 0xcc, 0xf8, 0xf8, 0xf0, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -76,7 +76,7 @@ 0xff, 0xff, 0xff, 0xff, 0x7e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, - /* 'sit2', 32x22px */ + // 'sit2', 32x22px { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xcc, 0xcc, 0xf8, 0xf8, 0xf0, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -87,9 +87,9 @@ } }; - /* Walk */ + // Walk static const char PROGMEM walk[2][ANIM_SIZE] = { - /* 'walk1', 32x22px */ + // 'walk1', 32x22px { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -99,7 +99,7 @@ 0x78, 0xf0, 0xf1, 0xff, 0x7f, 0x7f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, - /* 'walk2', 32x22px */ + // 'walk2', 32x22px { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60, 0x60, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, @@ -110,9 +110,9 @@ } }; - /* Run */ + // Run static const char PROGMEM run[2][ANIM_SIZE] = { - /* 'run1', 32x22px */ + // 'run1', 32x22px { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf0, 0xf8, 0x98, 0xf8, 0xf8, 0xf8, 0xf0, 0x70, 0x20, 0x00, 0x00, 0x00, @@ -122,7 +122,7 @@ 0x1e, 0x3d, 0x7f, 0xff, 0xff, 0xff, 0xfc, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, - /* 'run2', 32x22px */ + // 'run2', 32x22px { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf0, 0xf0, 0xf8, 0x98, 0xf8, 0xf8, 0xf8, 0xf0, 0x70, 0x20, 0x00, 0x00, @@ -133,9 +133,9 @@ } }; - /* Bark */ + // Bark static const char PROGMEM bark[2][ANIM_SIZE] = { - /* 'bark1', 32x22px */ + // 'bark1', 32x22px { 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0x30, 0x70, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -145,7 +145,7 @@ 0x7f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, - /* 'bark2', 32x22px */ + // 'bark2', 32x22px { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0x60, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, @@ -156,9 +156,9 @@ } }; - /* Sneak */ + // Sneak static const char PROGMEM sneak[2][ANIM_SIZE] = { - /* 'sneak1', 32x22px */ + // 'sneak1', 32x22px { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -168,7 +168,7 @@ 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x01, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, }, - /* 'sneak2', 32x22px */ + // 'sneak2', 32x22px { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -179,13 +179,13 @@ } }; - /* animation */ + // animation void animate_luna(void) { - /* jump */ + // jump if (isJumping || !showedJump) { - /* clear */ + // clear oled_set_cursor(LUNA_X,LUNA_Y +2); oled_write(" ", false); @@ -194,17 +194,17 @@ showedJump = true; } else { - /* clear */ + // clear oled_set_cursor(LUNA_X,LUNA_Y -1); oled_write(" ", false); oled_set_cursor(LUNA_X,LUNA_Y); } - /* switch frame */ + // switch frame current_frame = (current_frame + 1) % 2; - /* current status */ + // current status if(isBarking) { oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); @@ -222,13 +222,13 @@ } } - /* animation timer */ + // animation timer if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { anim_timer = timer_read32(); animate_luna(); } } - /* KEYBOARD PET END */ + // KEYBOARD PET END static void print_logo_narrow(void) { oled_set_cursor(0,2); diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c b/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c new file mode 100644 index 000000000000..b5457bb280f1 --- /dev/null +++ b/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c @@ -0,0 +1,317 @@ +/* Copyright + * 2021 solartempest + * 2021 Luna code adapted from HellSingCoder and Jackasaur + * 2021 QMK + * + * 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 o + * 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 . + */ + +//SSD1306 OLED update loop +#ifdef OLED_ENABLE + uint32_t oled_timer = 0; //OLED timeout + led_t led_usb_state; + + #define KEYBOARD_PET + // KEYBOARD PET START + + // settings + #define MIN_WALK_SPEED 10 + #define MIN_RUN_SPEED 40 + + // advanced settings + #define ANIM_FRAME_DURATION 300 // how long each frame lasts in ms. Default is 200. + #define ANIM_SIZE 96 // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024 + + // timers + uint32_t anim_timer = 0; + + // current frame + uint8_t current_frame = 0; + + // status variables + bool isSneaking = false; + bool isJumping = false; + bool showedJump = true; + bool isBarking = false; + + #ifdef OLED_LOGO + static void render_logo(int LUNA_X, int LUNA_Y) { + static const char PROGMEM luna_logo[] = { + 0x00, 0x00, 0x04, 0xf6, 0xb8, 0xf8, 0xd8, 0xf0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, + 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xc0, 0xe1, 0xf3, 0xfb, 0x7f, 0x1f, 0x0f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x3f, 0x03, + 0x01, 0x00, 0x00, 0x00, 0x80, 0xc1, 0xf3, 0xff, 0x7f, 0x1f, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x30, + 0x1e, 0x3f, 0x3f, 0x7f, 0xf9, 0xf0, 0xf0, 0x70, 0x78, 0x3c, 0x3f, 0x1f, 0x0f, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0x3f, 0x7f, 0x7f, 0xfb, 0xf1, 0xf0, 0x78, 0x3c, 0x1e, 0x0f, 0x03, 0x00, 0x00, + }; + oled_set_cursor(LUNA_X,LUNA_Y); + oled_write_raw_P(luna_logo, sizeof(luna_logo)); + } + #endif + + // logic + static void render_luna(int LUNA_X, int LUNA_Y) { + + // Sit + static const char PROGMEM sit[2][ANIM_SIZE] = { + // 'sit1', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xcc, + 0xcc, 0xf8, 0xf8, 0xf0, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3f, 0x7f, 0xfc, 0xf9, 0xf1, + 0xe1, 0xc1, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x38, 0x70, 0x60, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf9, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + // 'sit2', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xcc, + 0xcc, 0xf8, 0xf8, 0xf0, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3f, 0x7f, 0xfc, 0xf9, 0xf1, + 0xe1, 0xc1, 0x81, 0x00, 0x00, 0x01, 0x01, 0x02, 0x06, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x7c, 0x60, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf9, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + /* + // Walk + static const char PROGMEM walk[2][ANIM_SIZE] = { + // 'walk1', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xf8, 0xfc, 0xfe, 0xfe, 0x1f, 0x3f, 0x39, 0x39, 0x3f, 0x3f, 0x1e, 0x1e, 0x0c, 0x00, + 0x00, 0x00, 0x01, 0x0f, 0x3e, 0x78, 0x70, 0xf8, 0xfc, 0xfe, 0x7e, 0x3e, 0x3c, 0x3c, 0x78, 0x78, + 0x78, 0xf0, 0xf1, 0xff, 0x7f, 0x7f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + // 'walk2', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60, 0x60, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3e, 0x7f, 0xff, 0xff, 0xe7, 0xc7, 0x0e, 0x0e, 0x0f, 0x0f, 0x07, 0x07, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1f, 0x3e, 0x78, 0xf0, 0xfc, 0x7e, 0x1e, 0x1f, 0x0f, 0x0e, + 0x1e, 0x1c, 0x3d, 0x7f, 0xff, 0xff, 0xff, 0xfc, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + // Run + static const char PROGMEM run[2][ANIM_SIZE] = { + // 'run1', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xc0, 0xe0, 0xf0, 0xf0, 0xf8, 0x98, 0xf8, 0xf8, 0xf8, 0xf0, 0x70, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf0, 0xf0, 0xe0, 0xc0, + 0x87, 0x7f, 0xff, 0xff, 0xf1, 0xc3, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x1f, 0x3e, 0x78, 0xf7, 0xff, 0x7f, 0x3d, 0x03, 0x07, 0x0f, + 0x1e, 0x3d, 0x7f, 0xff, 0xff, 0xff, 0xfc, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + // 'run2', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xe0, 0xf0, 0xf0, 0xf8, 0x98, 0xf8, 0xf8, 0xf8, 0xf0, 0x70, 0x20, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf8, 0xfc, 0x3e, 0xde, 0xfe, 0xfc, 0xf8, 0x00, 0x00, + 0xe0, 0xfe, 0xff, 0x7f, 0x07, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x1e, 0x3c, 0x78, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x07, 0x1f, 0x3f, 0x7c, 0x78, 0xff, + 0xff, 0x7f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + };*/ + + // Bark + static const char PROGMEM bark[2][ANIM_SIZE] = { + // 'bark1', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0x30, 0x70, 0xe0, 0xe0, 0xc0, 0xc0, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0xff, 0xff, 0xe7, 0xe7, 0xef, 0xef, 0xcf, 0xcb, 0x83, 0x83, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x1c, 0x38, 0x78, 0xf1, 0xe3, 0xe3, 0xe7, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + // 'bark2', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0x60, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0x9f, + 0x0f, 0x0e, 0x1f, 0x1f, 0x3f, 0x3f, 0x7e, 0xe6, 0x83, 0x03, 0x0f, 0x43, 0x43, 0x90, 0x88, 0x08, + 0x00, 0x00, 0x03, 0x1e, 0x3c, 0x78, 0xf0, 0xe0, 0xe0, 0xf0, 0xf0, 0xfb, 0xff, 0xff, 0xff, 0x7f, + 0x7f, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + // Sneak + static const char PROGMEM sneak[2][ANIM_SIZE] = { + // 'sneak1', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xcc, 0xf8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, + 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x7f, 0xf1, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, + 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x01, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, + }, + + // 'sneak2', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xe0, 0xf8, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, + 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x7f, 0xf0, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, + 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + // animation + void animate_luna(void) { + + // jump + if (isJumping || !showedJump) { + + // clear + oled_set_cursor(LUNA_X,LUNA_Y +2); + oled_write(" ", false); + + oled_set_cursor(LUNA_X,LUNA_Y -1); + + showedJump = true; + } else { + + // clear + oled_set_cursor(LUNA_X,LUNA_Y -1); + oled_write(" ", false); + + oled_set_cursor(LUNA_X,LUNA_Y); + } + + // switch frame + current_frame = (current_frame + 1) % 2; + + // current status + if(isBarking) { + oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); + + } else if(isSneaking) { + oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + /* + } else if(current_wpm_read <= MIN_WALK_SPEED) { + oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); + + } else if(current_wpm_read <= MIN_RUN_SPEED) { + oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE); + + } else { + oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE); + }*/ + } else { + oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); + } + + } + + // animation timer + if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animate_luna(); + } + } + // KEYBOARD PET END + + static void print_logo_narrow(void) { + oled_set_cursor(0,4); + oled_write("SOLAR", false); + oled_set_cursor(0,5); + oled_write("TMPST", false); + + #ifdef OLED_LOGO + render_logo(0,9); //Not defining this in config.h will save 112 bytes. + #endif + } + + static void print_status_narrow(void) { + /*switch (get_highest_layer(default_layer_state)) { //May be useful if you use multiple non-QWERTY layouts to show which is active. + case 0: + oled_write("SOLAR", false); + break; + case 1: + oled_write("GAME", false); + break; + default: + oled_write("UNDEF", false); + }*/ + + // Print current layer + oled_set_cursor(0,1); + oled_write("LAYER", false); + + oled_set_cursor(0,2); + switch (get_highest_layer(layer_state)) { + case 0: + case 2: + oled_write("Base ", false); + break; + case 1: + oled_write("Game ", false); + break; + case 4: + oled_write("Raise", false); + break; + case 3: + oled_write("Lower", false); + break; + } + + // lock status + oled_set_cursor(0,5); + oled_write("LOCK", false); + oled_set_cursor(0,6); + oled_write("Caps", led_usb_state.caps_lock); + oled_set_cursor(0,7); + oled_write("Num", !(led_usb_state.num_lock)); + oled_set_cursor(0,8); + oled_write("Scrl", led_usb_state.scroll_lock); + + /* KEYBOARD PET RENDER START */ + render_luna(0,11); + /* KEYBOARD PET RENDER END */ + } + + oled_rotation_t oled_init_user(oled_rotation_t rotation) { + return OLED_ROTATION_270; + } + + void oled_task_user(void) { + led_usb_state = host_keyboard_led_state(); + + if (is_keyboard_master()) { //Drashna's OLED timeout off code for animations + if (timer_elapsed32(oled_timer) > 30000) { + oled_off(); + return; + } else { + oled_on(); + } + } + + if (is_keyboard_master()) { + print_status_narrow(); + } else { + print_logo_narrow(); + } + } +#endif diff --git a/keyboards/solartempest/sofle/rules.mk b/keyboards/solartempest/sofle/rules.mk index a6d0a766b59a..d33293be4db1 100644 --- a/keyboards/solartempest/sofle/rules.mk +++ b/keyboards/solartempest/sofle/rules.mk @@ -4,22 +4,26 @@ BOOTLOADER = atmel-dfu # Build Options # Comment out to disable the options. -SPLIT_KEYBOARD = yes # Split keyboard -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration -CONSOLE_ENABLE = no # Console for debug -EXTRAKEY_ENABLE = yes # Audio control and System control (+450) -RGBLIGHT_ENABLE = yes # RGB lighting (+2350) -ENCODER_ENABLE = yes # Encoders -MOUSEKEY_ENABLE = no # Mouse keys (+1482) -NKRO_ENABLE = no # Has 6KRO+ already. NKRO does not work -LTO_ENABLE = yes # Save space +SPLIT_KEYBOARD = yes # Split keyboard +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration +CONSOLE_ENABLE = no # Console for debug +EXTRAKEY_ENABLE = yes # Audio control and System control (+450) +RGBLIGHT_ENABLE = yes # RGB lighting (+2350) +ENCODER_ENABLE = yes # Encoders +MOUSEKEY_ENABLE = no # Mouse keys (+1482) +NKRO_ENABLE = no # Has 6KRO+ already. NKRO does not work +LTO_ENABLE = yes # Save space -OLED_ENABLE = yes # Must be disabled if OLEDs are not installed (+3608) -OLED_DRIVER = SSD1306 # Specify OLED driver -WPM_ENABLE = yes # WPM counter for keyboard pets (+1298) -COMBO_ENABLE = no # Tap combo chording, may run into space issue if also using keyboard pets (+952) - # Via_enable in keymap (+2300). VIA is required as non-via layouts are removed to save space. +OLED_ENABLE = yes # Must be disabled if OLEDs are not installed (+3608) +OLED_DRIVER = SSD1306 # Specify OLED driver +WPM_ENABLE = no # WPM counter for keyboard pets (+1298) +COMBO_ENABLE = no # Tap combo chording, may run into space issue if also using keyboard pets (+952) + # Via_enable in keymap (+2300). VIA is required as non-via layouts are removed to save space. -GRAVE_ESC_ENABLE = no # Save space by not using KC_GESC (+127) -MAGIC_ENABLE = no # Save space by not PROCESS_MAGIC, which is bootmagic with out the boot (+612) -SPACE_CADET_ENABLE = no # Save space by not using space cadet left/right shift (+350) +GRAVE_ESC_ENABLE = no # Save space by not using KC_GESC (+127) +MAGIC_ENABLE = no # Save space by not PROCESS_MAGIC, which is bootmagic with out the boot (+612) +SPACE_CADET_ENABLE = no # Save space by not using space cadet left/right shift (+350) + +POINTING_DEVICE_ENABLE = yes # Enable Pimoroni Trackball +QUANTUM_LIB_SRC += i2c_master.c +#SRC += drivers/sensors/pimoroni_trackball.c # There is an issue with the rotation code in the current master. Modified version included in keymap.c instead. \ No newline at end of file diff --git a/keyboards/solartempest/sofle/sofle VIA keymap.json b/keyboards/solartempest/sofle/sofle VIA keymap.json index 163a23ab1b15..3620b3b1e23e 100644 --- a/keyboards/solartempest/sofle/sofle VIA keymap.json +++ b/keyboards/solartempest/sofle/sofle VIA keymap.json @@ -29,6 +29,16 @@ "name": "Shift-BSPC", "title": "Shift-Backspace to Delete Whole Words", "shortName": "SBS" + }, + { + "name": "Trackball Scroll", + "title": "Pimoroni Trackball Scroll Mode", + "shortName": "PM_SCROLL" + }, + { + "name": "Trackball Precision", + "title": "Pimoroni Trackball Precision Mode", + "shortName": "PM_PRECISION" } ], "layouts": diff --git a/keyboards/solartempest/sofle/sofle VIA layout trackball.json b/keyboards/solartempest/sofle/sofle VIA layout trackball.json new file mode 100644 index 000000000000..f794311887be --- /dev/null +++ b/keyboards/solartempest/sofle/sofle VIA layout trackball.json @@ -0,0 +1,367 @@ +{ + "name": "Solarius_Sofle", + "vendorProductId": 4231139975, + "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + "layers": [ + [ + "KC_GRV", + "KC_1", + "KC_2", + "KC_3", + "KC_4", + "KC_5", + "KC_NO", + "KC_ESC", + "KC_Q", + "KC_W", + "KC_E", + "KC_R", + "KC_T", + "KC_VOLU", + "KC_TAB", + "KC_A", + "KC_S", + "KC_D", + "KC_F", + "KC_G", + "KC_F", + "KC_LSFT", + "KC_Z", + "KC_X", + "KC_C", + "KC_V", + "KC_B", + "KC_VOLD", + "KC_MUTE", + "KC_LGUI", + "KC_LALT", + "KC_LCTL", + "TT(3)", + "KC_ENT", + "KC_LALT", + "KC_MINS", + "KC_0", + "KC_9", + "KC_8", + "KC_7", + "KC_6", + "KC_0", + "USER04", + "KC_P", + "KC_O", + "KC_I", + "KC_U", + "KC_Y", + "KC_LEFT", + "KC_QUOT", + "KC_SCLN", + "KC_L", + "KC_K", + "KC_J", + "KC_H", + "KC_NO", + "KC_RSFT", + "KC_SLSH", + "KC_DOT", + "KC_COMM", + "KC_M", + "KC_N", + "KC_RGHT", + "TO(1)", + "KC_RALT", + "KC_RCTL", + "TT(4)", + "KC_SPC", + "C(KC_W)", + "KC_N" + ], + [ + "KC_PSCR", + "KC_5", + "KC_1", + "KC_2", + "KC_3", + "KC_G", + "KC_SPC", + "KC_F12", + "KC_ESC", + "KC_Q", + "KC_W", + "KC_E", + "KC_R", + "KC_TRNS", + "KC_TAB", + "KC_TAB", + "KC_A", + "KC_S", + "KC_D", + "KC_F", + "KC_NO", + "KC_LSFT", + "KC_LSFT", + "KC_Z", + "KC_X", + "KC_C", + "KC_V", + "KC_TRNS", + "KC_TRNS", + "KC_LALT", + "KC_B", + "KC_TRNS", + "KC_F22", + "KC_SPC", + "KC_NO", + "KC_F4", + "KC_F11", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "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_NO", + "KC_RALT", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "TO(0)", + "KC_RALT", + "MO(4)", + "MO(2)", + "KC_ENT", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_GRV", + "KC_1", + "KC_2", + "KC_3", + "KC_4", + "KC_5", + "KC_NO", + "KC_ESC", + "KC_Q", + "KC_W", + "KC_E", + "KC_R", + "KC_T", + "KC_VOLU", + "KC_TAB", + "KC_A", + "KC_S", + "KC_D", + "KC_F", + "KC_G", + "KC_F", + "KC_LSFT", + "KC_Z", + "KC_X", + "KC_C", + "KC_V", + "KC_B", + "KC_VOLD", + "KC_MUTE", + "KC_LGUI", + "KC_LALT", + "KC_LCTL", + "TT(2)", + "KC_SPC", + "KC_LALT", + "KC_MINS", + "KC_0", + "KC_9", + "KC_8", + "KC_7", + "KC_6", + "KC_0", + "USER04", + "KC_P", + "KC_O", + "KC_I", + "KC_U", + "KC_Y", + "KC_PGUP", + "KC_QUOT", + "KC_SCLN", + "KC_L", + "KC_K", + "KC_J", + "KC_H", + "KC_NO", + "KC_RSFT", + "KC_SLSH", + "KC_DOT", + "KC_COMM", + "KC_M", + "KC_N", + "KC_PGDN", + "TO(1)", + "KC_RALT", + "KC_RCTL", + "TT(3)", + "KC_ENT", + "C(KC_W)", + "KC_N" + ], + [ + "KC_GRV", + "KC_F1", + "KC_F2", + "KC_F3", + "KC_F4", + "KC_F5", + "KC_NO", + "KC_ESC", + "KC_1", + "KC_2", + "KC_3", + "KC_4", + "KC_5", + "C(KC_TAB)", + "KC_TRNS", + "KC_EXLM", + "KC_AT", + "KC_HASH", + "KC_DLR", + "KC_PERC", + "KC_NO", + "KC_TRNS", + "KC_EQL", + "KC_MINS", + "KC_PLUS", + "KC_LCBR", + "KC_RCBR", + "C(S(KC_TAB))", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_F11", + "KC_F10", + "KC_F9", + "KC_F8", + "KC_F7", + "KC_F6", + "KC_NO", + "KC_F12", + "KC_0", + "KC_9", + "KC_8", + "KC_7", + "KC_6", + "C(KC_MINS)", + "KC_PIPE", + "KC_RPRN", + "KC_LPRN", + "KC_ASTR", + "KC_AMPR", + "KC_CIRC", + "KC_NO", + "KC_TRNS", + "KC_BSLS", + "KC_COLN", + "KC_DOT", + "KC_RBRC", + "KC_LBRC", + "C(KC_PPLS)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_BSPC", + "KC_TRNS", + "C(KC_T)", + "KC_NO" + ], + [ + "KC_TRNS", + "C(KC_MINS)", + "C(KC_PPLS)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_INS", + "KC_PSCR", + "KC_APP", + "C(KC_UP)", + "C(KC_DOWN)", + "USER00", + "KC_TRNS", + "KC_LALT", + "KC_LCTL", + "KC_LSFT", + "C(KC_LEFT)", + "C(KC_RGHT)", + "KC_NO", + "KC_TRNS", + "C(KC_Z)", + "C(KC_X)", + "C(KC_C)", + "C(KC_V)", + "KC_TRNS", + "USER01", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_MYCM", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_F14", + "KC_F13", + "KC_NO", + "KC_DEL", + "KC_INS", + "KC_END", + "KC_UP", + "KC_HOME", + "KC_WWW_FORWARD", + "USER03", + "KC_BSPC", + "KC_NLCK", + "KC_RGHT", + "KC_DOWN", + "KC_LEFT", + "KC_WWW_BACK", + "KC_NO", + "KC_TRNS", + "KC_CAPS", + "KC_MS_BTN2", + "KC_MS_BTN1", + "USER05", + "USER06", + "USER02", + "KC_TRNS", + "KC_TRNS", + "KC_WWW_REFRESH", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO" + ] + ] +} \ No newline at end of file diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index ace3db77edbb..8628e6281948 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,1793 +1,1713 @@ -:100000000C94E4060C942B070C942B070C940A30E8 -:100010000C942B070C942B070C942B070C942B0798 -:100020000C942B070C942B070C94F9190C94B5190C -:100030000C9461260C942B070C942B070C942B0723 -:100040000C942B070C942B070C942B070C942B0768 -:100050000C942B070C94D01A0C942B070C942B07A0 -:100060000C942B070C942B070C942B070C942B0748 -:100070000C942B070C942B070C942B070C942B0738 -:100080000C942B070C942B070C942B070C942B0728 -:100090000C942B070C942B070C942B070C942B0718 -:1000A0000C942B070C942B070C942B0737032B6411 +:100000000C9449060C9490060C9490060C9469315B +:100010000C9490060C9490060C9490060C94900608 +:100020000C9490060C9490060C943C1A0C94F819BD +:100030000C9438260C9490060C9490060C94900620 +:100040000C9490060C9490060C9490060C949006D8 +:100050000C9490060C94131B0C9490060C94900630 +:100060000C9490060C9490060C9490060C949006B8 +:100070000C9490060C9490060C9490060C949006A8 +:100080000C9490060C9490060C9490060C94900698 +:100090000C9490060C9490060C9490060C94900688 +:1000A0000C9490060C9490060C94900637032B64E5 :1000B000AAFF000000001C032B64AAFF0000000040 :1000C00004032B64AAFF000000000000D7FF78FFA4 :1000D00000000000000080FF64FF0000000000003E :1000E0005FFF5AFF000000000000FCFF7DFF0000E2 -:1000F000000000005FFF5AFF0000000005010980BA -:10010000A101850319012AB700150126B700950141 -:1001100075108100C0050C0901A101850419012A8F -:10012000A002150126A002950175108100C006608D -:10013000FF0961A1010962150026FF0095207508DD -:1001400081020963150026FF00952075089102C001 -:1001500005010906A101050719E029E71500250198 -:10016000950875018102950175088101050719003F -:1001700029FF150026FF009506750881000508195E -:10018000012905950575019102950175039101C03D -:10019000000000000000000000000000000000005F -:1001A000000000000000000000000000000000004F -:1001B000000000007E0F00D4FFFFFFC700000078A2 -:1001C00000000000000000002A2B280000000000B2 -:1001D00000000000000000000000002900000000F6 -:1001E0002C1E3420212224342627252E362D373864 -:1001F000271E1F202122232425263333362E37386D -:100200001F0405060708090A0B0C0D0E0F1011122A -:10021000131415161718191A1B1C1D2F3130232DF6 -:10022000350405060708090A0B0C0D0E0F101112F4 -:10023000131415161718191A1B1C1D2F3130354CA5 -:1002400000DA02815AD9F1DB20A4A62EAF00A0C0AB -:1002500000A1C800AED580A81FD300408D14200097 -:10026000F200E800DE00D400CA00C000B600AC0016 -:10027000000000000000000000000000000000007E -:10028000000080C0E0F0F0F898F8F8F8F070200076 -:10029000000000000060C08000000000C0F0F0F02E -:1002A000E0C0877FFFFFF1C30303030101000000EB -:1002B00000000000000103071F3E78F7FF7F3D03A9 -:1002C000070F1E3D7FFFFFFFFC78000000000000CD -:1002D000000000000000000000000000000000001E -:1002E0000000000080E0F0F0F898F8F8F8F07020D6 -:1002F0000000008000000000C0F8FC3EDEFEFCF8BC -:100300000000E0FEFF7F070103030301010000007E -:10031000000000071E3C78FFFF7F0100071F3F7CA5 -:1003200078FFFF7F070000000000000000000000D1 -:1003300000000000000000000000000000000000BD -:1003400000000000000000000000808000000000AD -:1003500000000000C00000000000000000000000DD -:1003600000000000F8FCFEFE1F3F39393F3F1E1E13 -:100370000C000000010F3E7870F8FCFE7E3E3C3C15 -:10038000787878F0F1FF7F7F3E00000000000000E9 -:10039000000000000000000000000000000000005D -:1003A000000000008080C0C06060C0C0C08000004D -:1003B000000000002060C08000000000000000007D -:1003C00000003E7FFFFFE7C70E0E0F0F0707030079 -:1003D00000000000000001071F3E78F0FC7E1E1F99 -:1003E0000F0E1E1C3D7FFFFFFFFC78000000000089 -:1003F000000000000000000000000000E0F0F0F845 -:10040000F8CCCCF8F8F0F06000000000000000002C -:100410000000000000000000000000000F3F7FFC13 -:10042000F9F1E1C1810000000000000000000000BF -:10043000000000000000000C387060E0E0F0F0F810 -:10044000F9FFFFFFFFFF7E1C00000000000000001E -:10045000000000000000000000000000E0F0F0F8E4 -:10046000F8CCCCF8F8F0F0600000000000000000CC -:100470000000000000000000000000000F3F7FFCB3 -:10048000F9F1E1C1810000010102060C0400000045 -:100490000000000000000000387C60E0E0F0F0F8B0 -:1004A000F9FFFFFFFFFF7E1C0000000000000000BE -:1004B000000000000000000000000000000000003C -:1004C000000000000000000000000000000000002C -:1004D0000000000000CCF870000000000000C0F038 -:1004E000F8F87CFCEEE6FCFC7878B0000000000038 -:1004F000000000003F7FF1F8F87C7CF8F0F0F1E7B5 -:10050000EFEFFEFEFEFCFCF8F060000103060200C7 -:1005100000000000000000000000000000000000DB -:1005200000000000000000000000000000000000CB -:100530000000000080E0F81C000000000000C0F097 -:10054000F8F87CFCEEE6FCFC787830000000000057 -:10055000000000003F7FF0F8F87C7CF8F0F0F1E755 -:10056000EFEFFEFEFEFCFCF8F06000000000000073 -:100570000000000000000080C0C0E0E03070E0E05B -:10058000C0C080000000000000000000000000006B -:100590000000000000001F7FFFFFE7E7EFEFCFCB79 -:1005A0008383010000000000000000000000000044 -:1005B00000000000061C3878F1E3E3E7F7F7FFFFDF -:1005C000FFFF7F3E00000000000000000000000070 -:1005D000000000000000000000000000000000001B -:1005E0000000000080C0E0E060E0C0C0808000004B -:1005F000000000000000000000000020F8FEFFFFE7 -:10060000FF9F0F0E1F1F3F3F7EE683030F43439064 -:1006100088080000031E3C78F0E0E0F0F0FBFFFFEC -:10062000FF7F7F3800000000000000000000000095 -:100630000000000004F6B8F8D8F0E0C00000008028 -:10064000C0E0E0F0F0F0F0E0E0C08000000000006A -:1006500000000080C0E1F3FB7F1F0F0000F0FFFFF0 -:100660003F030100000080C1F3FF7F1F000080C036 -:10067000E0301E3F3F7FF9F0F070783C3F1F0F03E2 -:10068000000000001C3F7F7FFBF1F0783C1E0F0351 -:100690000000000101010101010101010202020249 -:1006A000020202020203030303030303030404041C -:1006B00004040404050505050506060606060707E5 -:1006C00007070708080808090909090A0A0A0B0B9D -:1006D0000B0C0C0C0D0D0D0E0E0E0F0F0F1010113C -:1006E00011111212131314141515161617171818C2 -:1006F00019191A1A1B1B1C1D1D1E1E1F202021222A -:1007000022232424252626272829292A2B2C2D2D6F -:100710002E2F30313232333435363738393A3B3C8C -:100720003D3E3F404142434445464748494A4C4D7F -:100730004E4F50515354555658595A5B5D5E5F6148 -:100740006264656668696B6C6D6F707273757778DB -:100750007A7B7D7E8082838587888A8C8E8F919339 -:100760009596989A9C9EA0A2A3A5A7A9ABADAFB160 -:10077000B3B5B7BABCBEC0C2C4C6C9CBCDCFD1D445 -:10078000D6D8DBDDDFE2E4E7E9EBEEF0F3F5F8FAEB -:10079000FDFFFFAA7F55401C1004010D190A2423F8 -:1007A0002221201F1E1D1B1A1817161514131211B3 -:1007B0000F0E0C0B09080706050302002D394548EA -:1007C0003C303F25262728292A2B2C2E2F31323347 -:1007D00034353637383A3B3D3E4041424344464744 -:1007E0004907087F0807003E5B4F5B3E003E6B4FAA -:1007F0006B3E001C3E7C3E1C00183C7E3C18001CDE -:10080000577D571C001C5E7F5E1C0000183C1800C2 -:1008100000FFE7C3E7FF00001824180000FFE7DB34 -:10082000E7FF0030483A060E0026297929260040C5 -:100830007F05050700407F05253F005A3CE73C5AED -:10084000007F3E1C1C0800081C1C3E7F0014227FF9 -:100850002214005F5F005F5F0006097F017F0000D8 -:100860006689956A0060606060600094A2FFA2944F -:100870000008047E04080010207E20100008082ACA -:100880001C0800081C2A0808001E10101010000C7C -:100890001E0C1E0C0030383E383000060E3E0E0690 -:1008A0000000000000000000005F000000000700E2 -:1008B000070000147F147F1400242A7F2A120023CB -:1008C00013086462003649562050000008070300F0 -:1008D00000001C224100000041221C00002A1C7F55 -:1008E0001C2A0008083E080800008070300000083C -:1008F00008080808000000606000002010080402DA -:10090000003E5149453E0000427F40000072494987 -:100910004946002141494D33001814127F10002729 -:1009200045454539003C4A494931004121110907F3 -:1009300000364949493600464949291E000000143D -:1009400000000000403400000000081422410014A0 -:10095000141414140000412214080002015909065D -:10096000003E415D594E007C1211127C007F4949C6 -:100970004936003E41414122007F4141413E007FD6 -:1009800049494941007F09090901003E414151732C -:10099000007F0808087F0000417F4100002040419F -:1009A0003F01007F08142241007F40404040007F0B -:1009B000021C027F007F0408107F003E4141413E3F -:1009C000007F09090906003E4151215E007F091997 -:1009D00029460026494949320003017F0103003FAF -:1009E0004040403F001F2040201F003F4038403F14 -:1009F0000063140814630003047804030061594978 -:100A00004D4300007F4141410002040810200000D6 -:100A10004141417F00040201020400404040404047 -:100A2000000003070800002054547840007F284449 -:100A3000443800384444442800384444287F00386F -:100A4000545454180000087E09020018A4A49C788D -:100A5000007F080404780000447D400000204040EE -:100A60003D00007F102844000000417F4000007CD2 -:100A700004780478007C080404780038444444383E -:100A800000FC182424180018242418FC007C0804F6 -:100A900004080048545454240004043F4424003CF7 -:100AA0004040207C001C2040201C003C4030403C4A -:100AB000004428102844004C9090907C00446454DA -:100AC0004C440000083641000000007700000000A0 -:100AD00041360800000201020402003C2623263CA5 -:100AE00000000000000000404040F0F8F8FF38FF30 -:100AF000F8F83FF8F8FF38FFF8F8F0404040000001 -:100B00000000000080C0C0C0800000C0C0800000A5 -:100B10000080C0C000C0C0000080C0C00000000055 -:100B200000C0C0C0C0C000C0C00000000000000085 -:100B300000000000000000000000000000000000B5 -:100B400000000000000000000000000000000000A5 -:100B50000000000000000000000000000000000095 -:100B6000C0F0F8FC3E1E06010000007F4141417FBD -:100B7000007F4141417F000080C0E07E5B4F5BFE13 -:100B8000C00000C000DCD7DEDEDED7DC00C0000025 +:1000F000000000005FFF5AFF000000000501090238 +:10010000A10185020901A1000509190129081500AD +:100110002501950875018102050109300931158114 +:10012000257F95027508810609381581257F95017F +:1001300075088106050C0A38021581257F95017521 +:10014000088106C0C005010980A101850319012AA3 +:10015000B700150126B700950175108100C0050C88 +:100160000901A101850419012AA002150126A00296 +:10017000950175108100C00660FF0961A101096247 +:10018000150026FF009520750881020963150026D9 +:10019000FF00952075089102C005010906A101051F +:1001A0000719E029E71500250195087501810295D9 +:1001B00001750881010507190029FF150026FF00B8 +:1001C0009506750881000508190129059505750131 +:1001D0009102950175039101C0000000000000002C +:1001E000000000000000000000000000000000000F +:1001F000000000000000000000000000007E0F0072 +:10020000D4FFFFFFC70000007800000000000000DE +:10021000002A2B2800000000000000000000000061 +:100220000000000029000000002C1E3420212224A0 +:10023000342627252E362D3738271E1F202122232E +:100240002425263333362E37381F040506070809C0 +:100250000A0B0C0D0E0F1011121314151617181986 +:100260001A1B1C1D2F3130232D35040506070809E4 +:100270000A0B0C0D0E0F1011121314151617181966 +:100280001A1B1C1D2F3130354C00DA02815AD9F16E +:10029000DB20A4A62EAF00A0C000A1C800AED58070 +:1002A000A81FD300408D142000F200E800DE00D427 +:1002B00000CA00C000B600AC000000000000000052 +:1002C0000000000000E0F0F0F8F8CCCCF8F8F0F016 +:1002D00060000000000000000000000000000000BE +:1002E00000000000000F3F7FFCF9F1E1C181000038 +:1002F00000000000000000000000000000000000FE +:100300000C387060E0E0F0F0F8F9FFFFFFFFFF7ECF +:100310001C000000000000000000000000000000C1 +:100320000000000000E0F0F0F8F8CCCCF8F8F0F0B5 +:10033000600000000000000000000000000000005D +:1003400000000000000F3F7FFCF9F1E1C1810000D7 +:10035000010102060C040000000000000000000083 +:1003600000387C60E0E0F0F0F8F9FFFFFFFFFF7E6F +:100370001C00000000000000000000000000000061 +:10038000000000000000000000000000000000006D +:100390000000000000000000000000000000CCF899 +:1003A00070000000000000C0F0F8F87CFCEEE6FCF5 +:1003B000FC7878B00000000000000000003F7FF1F2 +:1003C000F8F87C7CF8F0F0F1E7EFEFFEFEFEFCFCC5 +:1003D000F8F06000010306020000000000000000C9 +:1003E000000000000000000000000000000000000D +:1003F0000000000000000000000000000080E0F8A5 +:100400001C000000000000C0F0F8F87CFCEEE6FCE8 +:10041000FC7878300000000000000000003F7FF012 +:10042000F8F87C7CF8F0F0F1E7EFEFFEFEFEFCFC64 +:10043000F8F0600000000000000000000000000074 +:1004400080C0C0E0E03070E0E0C0C080000000008C +:100450000000000000000000000000000000001F7D +:100460007FFFFFE7E7EFEFCFCB83830100000000C2 +:1004700000000000000000000000000000061C3822 +:1004800078F1E3E3E7F7F7FFFFFFFF7F3E000000AF +:10049000000000000000000000000000000000005C +:1004A0000000000000000000000000000080C0E02C +:1004B000E060E0C0C080800000000000000000009C +:1004C0000000000020F8FEFFFFFF9F0F0E1F1F3FE0 +:1004D0003F7EE683030F43439088080000031E3CE1 +:1004E00078F0E0E0F0F0FBFFFFFF7F7F38000000D6 +:1004F0000000000000000000000000000004F6B84A +:10050000F8D8F0E0C000000080C0E0E0F0F0F0F0CB +:10051000E0E0C080000000000000000080C0E1F3C7 +:10052000FB7F1F0F0000F0FFFF3F03010000008072 +:10053000C1F3FF7F1F000080C0E0301E3F3F7FF906 +:10054000F0F070783C3F1F0F03000000001C3F7F5D +:100550007FFBF1F0783C1E0F030000000101010158 +:10056000010101010102020202020202020203036E +:10057000030303030303040404040404040505053E +:100580000505060606060607070707070808080800 +:10059000090909090A0A0A0B0B0B0C0C0C0D0D0DAD +:1005A0000E0E0E0F0F0F1010111111121213131443 +:1005B00014151516161717181819191A1A1B1B1CBB +:1005C0001D1D1E1E1F202021222223242425262615 +:1005D000272829292A2B2C2D2D2E2F30313232334A +:1005E0003435363738393A3B3C3D3E3F4041424353 +:1005F0004445464748494A4C4D4E4F505153545537 +:100600005658595A5B5D5E5F616264656668696BE6 +:100610006C6D6F7072737577787A7B7D7E80828364 +:100620008587888A8C8E8F91939596989A9C9EA0A8 +:10063000A2A3A5A7A9ABADAFB1B3B5B7BABCBEC0B5 +:10064000C2C4C6C9CBCDCFD1D4D6D8DBDDDFE2E47E +:10065000E7E9EBEEF0F3F5F8FAFDFFFFAA7F55406E +:100660001C1004010D190A24232221201F1E1D1B0A +:100670001A18171615141312110F0E0C0B09080770 +:1006800006050302002D3945483C303F2526272822 +:10069000292A2B2C2E2F31323334353637383A3B3A +:1006A0003D3E404142434446474907087F08070012 +:1006B0003E5B4F5B3E003E6B4F6B3E001C3E7C3E04 +:1006C0001C00183C7E3C18001C577D571C001C5E0B +:1006D0007F5E1C0000183C180000FFE7C3E7FF0026 +:1006E000001824180000FFE7DBE7FF0030483A0657 +:1006F0000E00262979292600407F05050700407F46 +:1007000005253F005A3CE73C5A007F3E1C1C080070 +:10071000081C1C3E7F0014227F2214005F5F005FD4 +:100720005F0006097F017F00006689956A006060AE +:100730006060600094A2FFA2940008047E04080098 +:1007400010207E20100008082A1C0800081C2A0817 +:1007500008001E10101010000C1E0C1E0C0030386B +:100760003E383000060E3E0E06000000000000007D +:1007700000005F000000000700070000147F147FE6 +:100780001400242A7F2A12002313086462003649C9 +:1007900056205000000807030000001C2241000002 +:1007A0000041221C00002A1C7F1C2A0008083E0869 +:1007B00008000080703000000808080808000000E9 +:1007C000606000002010080402003E5149453E00D0 +:1007D00000427F4000007249494946002141494D8D +:1007E00033001814127F10002745454539003C4A54 +:1007F000494931004121110907003649494936006C +:10080000464949291E000000140000000040340041 +:1008100000000008142241001414141414000041B4 +:10082000221408000201590906003E415D594E009C +:100830007C1211127C007F49494936003E414141FA +:1008400022007F4141413E007F49494941007F09E3 +:10085000090901003E41415173007F0808087F00EB +:1008600000417F4100002040413F01007F081422E9 +:1008700041007F40404040007F021C027F007F0417 +:1008800008107F003E4141413E007F0909090600F2 +:100890003E4151215E007F091929460026494949F8 +:1008A000320003017F0103003F4040403F001F2012 +:1008B00040201F003F4038403F006314081463008D +:1008C0000304780403006159494D4300007F41410E +:1008D0004100020408102000004141417F00040251 +:1008E00001020400404040404000000307080000AF +:1008F0002054547840007F2844443800384444440D +:100900002800384444287F00385454541800000804 +:100910007E09020018A4A49C78007F0804047800D3 +:1009200000447D4000002040403D00007F102844EE +:10093000000000417F4000007C04780478007C08BF +:1009400004047800384444443800FC182424180077 +:1009500018242418FC007C0804040800485454544B +:10096000240004043F4424003C4040207C001C2020 +:1009700040201C003C4030403C00442810284400EB +:100980004C9090907C004464544C440000083641E4 +:10099000000000007700000000413608000002015E +:1009A000020402003C2623263C0000000000000058 +:1009B000404040F0F8F8FF38FFF8F83FF8F8FF380B +:1009C000FFF8F8F040404000000000000080C0C088 +:1009D000C0800000C0C08000000080C0C000C0C057 +:1009E000000080C0C00000000000C0C0C0C0C00047 +:1009F000C0C0000000000000000000000000000077 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A2000000000000000000000C0F0F8FC3E1E06C0 +:100A3000010000007F4141417F007F4141417F0033 +:100A40000080C0E07E5B4F5BFEC00000C000DCD7D2 +:100A5000DEDEDED7DC00C000000000000000000089 +:100A60000000000000000000000000000000000086 +:100A7000494949FFFFFFFFE0DFBFBF00BFBFDFE025 +:100A8000FFFFFFFF49494900000000001F3F606071 +:100A9000E0BF1F007F7F071E381E077F7F007F7F1C +:100AA0000E1F3B716000000000007F7F0C0C0C00EB +:100AB0007E7E007F7E0303007F7E03037E7E030332 +:100AC0007F7E000F3E703C063C703E0F00327B493B +:100AD000493F7E007F7E0303001E3F69696F260049 +:100AE000000000000000000000030F1F3F3C787072 +:100AF000600000007F4141417F007F4141417F0014 +:100B0000307B7F7830202030787F3B0003000F7FE0 +:100B10000F0F0F7F0F000300000000000000000017 +:100B200000000000000000000000000000000000C5 +:100B3000010101070F0F7F0F7F0F0F7E0F0F7F0F38 +:100B40007F0F0F07010101000000000000000000FE +:100B50000001010000000000000000000000000093 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 :100B90000000000000000000000000000000000055 -:100BA00000000000000000494949FFFFFFFFE0DFAF -:100BB000BFBF00BFBFDFE0FFFFFFFF4949490000A3 -:100BC0000000001F3F6060E0BF1F007F7F071E38EE -:100BD0001E077F7F007F7F0E1F3B716000000000BB -:100BE000007F7F0C0C0C007E7E007F7E0303007F65 -:100BF0007E03037E7E03037F7E000F3E703C063C37 -:100C0000703E0F00327B49493F7E007F7E03030028 -:100C10001E3F69696F260000000000000000000010 -:100C2000030F1F3F3C7870600000007F4141417F0F -:100C3000007F4141417F00307B7F78302020307839 -:100C40007F3B0003000F7F0F0F0F7F0F000300009B -:100C50000000000000000000000000000000000094 -:100C600000000000000000010101070F0F7F0F7F4F -:100C70000F0F7E0F0F7F0F7F0F0F07010101000085 -:100C80000000000000000000010100000000000062 -:100C90000000000000000000000000000000000054 -:100CA0000000000000000000000000000000000044 -:100CB0000000000000000000000000000000000034 -:100CC0000000000000000000000000000000000024 -:100CD0000000000000000000000000000000000014 -:100CE0000000000000000000000000000000000004 -:100CF00000000000000000000000000000000000F4 -:100D000000000000000000000000000000000000E3 -:100D100000000000000000000000000000000000D3 -:100D20000000AF00AE09025B00030100A0FA090455 -:100D3000000001030101000921110100012240000E -:100D40000705810308000A090401000203000000EE -:100D50000921110100012222000705820320000160 -:100D6000070503032000010904020001030000003D -:100D70000921110100012232000705840320000A25 -:100D8000120100020000000832FC8712020001027A -:100D900000011E0353006F006C00610072006900C7 -:100DA000750073005F0053006F0066006C00650003 -:100DB000000010034B0065007900680069007600B0 -:100DC000650000000403090411241FBECFEFDAE020 -:100DD000DEBFCDBF04B603FE27C0809167069091A9 -:100DE0006806A0916906B0916A068730904BA740CB -:100DF000B04BD1F410926706109268061092690603 -:100E000010926A0614BE84B7877F84BF0FB6F89429 -:100E1000A8958091600088618093600010926000C6 -:100E20000FBEE0E0F8E3099512E0A0E0B1E0ECEBE2 -:100E3000FEE602C005900D92A833B107D9F726E06F -:100E4000A8E3B2E001C01D92A736B207E1F70E9405 -:100E500088260C9425370C940000CF93DF934091A3 -:100E6000650650916606455654409A01205A3F4FF8 -:100E700021303240C0F020E032E0241B350B60917D -:100E8000630470916404FC01CA01240F351FC1E0A2 -:100E9000D0E08217930750F070936404609363046A -:100EA000DF91CF91089520E630E0E9CF4491DC0155 -:100EB000AB59BB4F5C91451781F04C93AC01A5E059 -:100EC00056954795AA95E1F7DE0102C0AA0FBB1F10 -:100ED0004A95E2F7AD016A2B752B01963196D9CF71 -:100EE000E8EDF0E080818E7F80831092E200109226 -:100EF000DA001092E100A0EEB0E08C9181608C935A -:100F000080818F77808319BCA7EDB0E08C918E7FB4 -:100F10008C9380818F7E8083109245040895209168 -:100F2000E4003091E50095E6A9012091EC00822FC4 -:100F3000817020FF06C08091E80080FF06C080E03D -:100F400008952091E80022FD1AC08091530488235F -:100F500089F0853089F08091EB0085FD0FC02091EC -:100F6000E4003091E50042175307F9F29150E1F6A1 -:100F700084E0089582E0089583E0089581E0089573 -:100F8000EF92FF920F931F93CF937C018B010E94EE -:100F90008F07C82F811117C08091E80085FD0BC015 -:100FA0008091E8008E778093E8000E948F07882365 -:100FB00099F3C82F08C0F70181917F018093F10058 -:100FC0000150110949F78C2FCF911F910F91FF907C -:100FD000EF9008958091550487FF13C08091E80039 -:100FE00082FF06C08091E8008B778093E80004C000 -:100FF000809153048111F2CF089580915304882386 -:10100000D9F38091E80080FFF8CF8091E8008E77D7 -:10101000ECCF982F9093E900242F762F50E089177A -:1010200031F07091EC002091ED005091F00021FD25 -:1010300007C09F5F973071F78093E90081E00895C2 -:101040003091EB003E7F3093EB003091ED003D7F1F -:101050003093ED003091EB0031603093EB007093F2 -:10106000EC002093ED005093F0002091EE0027FD5E -:10107000E0CF80E00895CF92DF92EF92FF920F933E -:101080001F93CF93DF93C8EDD0E088818F7E888354 -:10109000E7EDF0E080818160808384E082BF81E0C1 -:1010A0008093450488818E7F888302EE10E0F801EA -:1010B00010821092DA0081EEC82ED12CF601108237 -:1010C00088818F77888388818068888388818F7DF5 -:1010D000888319BC10925304109254041092520445 -:1010E0001092510490EEE92EF12CF70180818B7F54 -:1010F000808388818160888342E060E080E00E9494 -:101100000908F60180818E7F8083F80180818160EB -:101110008083808188608083F70180818E7F8083D7 -:10112000888180618883DF91CF911F910F91FF901B -:10113000EF90DF90CF900895FC0180915B04909137 -:101140005C0486179707A0F06115710529F490914A -:10115000E8009E779093E80090E06115710551F4E6 -:10116000911108C08091E80082FF34C080E00895AA -:10117000BC01F2CF809153048823C1F18530C1F1C5 -:101180008091E80083FD30C08091E80082FDEACFC5 -:101190008091E80080FFE1CF8091F3002091F20080 -:1011A000382F6115710519F02830310558F091E09C -:1011B0002830310509F090E02091E8002E77209347 -:1011C000E800CBCF81918093F100615071092F5FCE -:1011D0003F4FE7CF80915304882341F0853041F0A1 -:1011E0008091E80083FFBECF81E0089582E00895FA -:1011F00083E0089508958091480408952FB7F894E6 -:1012000060913E0470913F048091400490914104AC -:101210002FBF089520913B0430913C0428173907D3 -:1012200071F090933C0480933B04E0913904F09179 -:101230003A04309721F00084F185E02D0994089557 -:1012400020913704309138042817390771F09093B2 -:10125000380480933704E0913904F0913A043097D0 -:1012600021F00680F781E02D0994089520912A0449 -:1012700036E0839FC0011124629F800D911D1124CF -:10128000811522E0920714F090E080E08B599B4F8B -:1012900090936606809365060895FC01680F791F98 -:1012A0008FEF91E32191822728E030E087FF09C08A -:1012B000880F892721503109C9F7E617F70791F7F9 -:1012C0000895880FF7CFFA01811101C0FB0109943D -:1012D00080915E04982F9E7F61F48170826080937C -:1012E0005E0480916104813A18F080EA8093610481 -:1012F00008958831B0F381708661F1CFAF92BF92CB -:10130000DF92EF92FF920F931F93CF93DF93082FFB -:10131000162FE901E42FF0E0EE56F94F611110C0ED -:10132000E4915E2F4E2F4983E8835A83DF91CF915A -:101330001F910F91FF90EF90DF90BF90AF900895B5 -:10134000E62EF12C4491D42EE42FF0E026E0829F8B -:10135000C00111242FEF30E0B9010E948431802FA9 -:1013600090E0880F991F55E5569FD001579FB00D0B -:1013700011248A1B9B0B982F990F890F5901AE18C6 -:10138000BF08AE9ED001AF9EB00DBE9EB00D112421 -:101390005B2F189F80011124012F11275901A01ADA -:1013A000B10AAE9E8001AF9E100DBE9E100D11249D -:1013B0005901A81AB108AE9CC001AF9C900DBE9C0B -:1013C000900D1124892F9927281B390B2E9FC001BE -:1013D0002F9F900D3E9F900D1124E92F62307105D3 -:1013E000A1F050F46115710509F49DCF61307105CC -:1013F00081F0EB2F512F97CF6430710569F080F0A9 -:101400006630710509F48FCFF4CFE42F4B2F592F9D -:101410008ACFE42F412F87CFEB2F542F492F83CF33 -:101420004B2F5D2DE12F7FCF80E0089578940895B4 -:10143000F894E82FE295EF70F0E031A1282F2F709B -:1014400081E090E001C0880F2A95EAF7982F9095E7 -:10145000932391A392A1892B82A30C94160A9091B5 -:10146000E50292FF06C0282F28712830F9F4877F03 -:10147000846093FF06C0282F28712831F1F4877EFD -:1014800084612091E60220FF06C0382F3871383081 -:10149000D9F4877F816021FF06C0282F2871283169 -:1014A000D1F4877E816194FD877E0895282F247171 -:1014B0002430F9F68B7F8860DCCF282F247124310B -:1014C00001F78B7E8861DDCF382F3171313019F70C -:1014D0008E7F8860E0CF282F2171213121F78E7E09 -:1014E0008861E1CFCF93DF93EC018238910581F1E0 -:1014F000B0F58133910509F491C020F58932910549 -:1015000009F485C08A9709F490C0C11521E5D20776 -:1015100008F0AAC0C11530E5D30708F0F2C0CF3BF0 -:10152000D10508F089C0C83AD10508F0DFC0C53A36 -:10153000D10508F0D3C0C430D105F8F4C130D105CD -:10154000E1F040C08533910509F45AC0C997E9F626 -:101550008091E502837089F0C0EED0E00EC0833E3A -:10156000910599F170F4803E910501F1823E91055B -:1015700061F68091E50282FD21C0CE01DF91CF911D -:101580000895863E910561F1873E910571F1843E93 -:10159000910509F0BACF8091E60281FFEECF8091EC -:1015A000E502C7EED0E084FD0DC0E7CF8091E502F3 -:1015B00080FDF7C09091E60290FFDFCFC3EED0E050 -:1015C00084FFDBCFD0E0C0E0D8CF8091E50282FD80 -:1015D000EBC09091E60290FDBFCF84FFCECFF2CF5B -:1015E0008091E50283FDDDCFC8CF8091E50283FDC8 -:1015F000DEC09091E60291FFF0CFC4EED0E0BDCF07 -:101600008091E50285FFB9CFC9E2D0E0B6CF8091E5 -:10161000E50285FFB2CFC5E3D0E0AFCF8091E50210 -:1016200086FFABCFCAE2D0E0A8CF8091E50286FF6B -:10163000A4CFC1E3D0E0A1CFC11540E2D40760F44C -:10164000C11581E0D80708F098CFCE01815E9109DD -:10165000079708F492CFB6CFC11590E4D90708F4E4 -:10166000B1CFDF70D06A89CFC11524E5D20778F4F5 -:10167000C11533E5D30708F072C0C11542E5D407A0 -:1016800008F05CC0DC2FCC27C16FD06A76CFC115C3 -:101690008AE5D80778F4C11599E5D90708F073C031 -:1016A000C11528E5D20708F48DCFDC2FCC27C06FF9 -:1016B000D06A63CFCE0190568115904208F082CF58 -:1016C0008D2F8F710E942F0A90E0982F88278827EE -:1016D0009F719C012C2BE901D0624FCFC55AD0E0FD -:1016E000CF52DE4FC881D0E0D06447CFC85AD0E097 -:1016F000CC0FDD1FCC52DE4F0990D881C02DD464B1 -:101700003CCFCE0164E0969587956A95E1F78370AA -:101710002C2F26952695237040E2249F90011124BA -:10172000382B8C2F8370C1E0D0E002C0CC0FDD1FBE -:101730008A95E2F7C22BD32BDC681FCFCE018370D2 -:10174000992721E030E002C0220F331F8A95E2F78B -:10175000C695C69580E2C89FE0011124EBCFCE016B -:101760008370992721E030E002C0220F331F8A9551 -:10177000E2F7C695C69590E2C99FE0011124C22BFD -:10178000D32BDA68FACE8C2F8F700E942F0A34E0A8 -:10179000D695C7953A95E1F7CF709C2FEC01D069AB -:1017A000ECCEC9E3D0E0E9CEC2EED0E0E6CEC6EEA4 -:1017B000D0E0E3CE0C94FE088091460490919B0209 -:1017C000892B90919A02892B80933A02E0913904F7 -:1017D000F0913A04309731F00280F381E02D8AE3F2 -:1017E00092E009940895809199029091680298136B -:1017F00001C008958F5F8770FACF27E0929F800D18 -:101800001124982F977086958695869523E0829F60 -:10181000F0011124E95BFD4F50E040E080E02191B0 -:1018200030E0092E02C0369527950A94E2F7217020 -:101830003327042E01C0220F0A94EAF7822B4F5F50 -:101840005F4F4330510559F7089527E0929F800D6F -:101850001124982F977041E001C0440F9A95EAF740 -:1018600086958695869593E0899FF0011124E95B22 -:10187000FD4F90E080E070E05191DF0111979B01F6 -:10188000082E02C0369527950A94E2F7217021951B -:101890002527242325272C9301968330910561F772 -:1018A000089590E080E00E94200990E080E00E948E -:1018B0000A0910929B0210929A020C94DC0B8093FE -:1018C0009C020C94510C882341F080959091460421 -:1018D0008923809346040C94DC0B0895882339F007 -:1018E00090914604982B909346040C94DC0B089539 -:1018F0008823B1F19CEF980F913A70F4ECE3F2E099 -:101900009191891303C0DF0111971C9242E0E234E8 -:10191000F407B1F70C94DC0B90E2980F983088F440 -:10192000877021E030E0A90102C0440F551F8A955D -:10193000E2F7CA018095909146048923809346047A -:10194000E9CF9BE5980F933020F490E080E00C9471 -:101950002009885A873120F490E080E00C940A092D -:1019600008950F931F93CF93C82F882309F469C05C -:101970008CEF8C0F813AB0F50CE312E082E492E038 -:10198000F8012191C21701F122E0E234F207C9F710 -:10199000EFEF80E0D8019D918D01C91781F0EF3FF5 -:1019A00019F4911101C0E82F8F5F863099F7EF3F4E -:1019B00031F00E2E000CFF0BE65CFD4FC283CF9181 -:1019C0001F910F910C94DC0BECE3F2E02191C21318 -:1019D00003C0DF0111971C928E179F07B9F70E9471 -:1019E000DC0BD6CF80E28C0F883068F4C77021E022 -:1019F00030E001C0220FCA95EAF780914604822B9D -:101A000080934604DCCFEBE5EC0FE33050F4F0E0DC -:101A1000EF52FE4F808190E0CF911F910F910C9477 -:101A20002009C85AC73168F4EC2FF0E0EE0FFF1F11 -:101A3000EC52FE4F80819181CF911F910F910C94B8 -:101A40000A09CF911F910F910895982F92959F7039 -:101A500011F0892F94E0282F2695269511F09E5F8E -:101A6000822F869509F09F5F892F0895CF92DF928C -:101A7000EF92FF920F931F93CF93DF936C017B0143 -:101A800064E670E088E70E94612EEC0197FD12C0C9 -:101A900010E000E0F601E00FF11F849164E670E0D1 -:101AA0000E94DB2EEC01892B29F40F5F1F4F0E15CE -:101AB0001F0581F70E945E2FCE01DF91CF911F910C -:101AC0000F91FF90EF90DF90CF90089580913504B3 -:101AD00090913604911103C091E0892708958823DD -:101AE00069F062E070E083E29DE00E94360D892B90 -:101AF00019F08091350408951092350480913504D1 -:101B0000EBCFCF93C0913504809136048823D1F078 -:101B10000E94FE086058774C8E4F9F4F60933104AF -:101B2000709332048093330490933404C11108C03D -:101B300062E070E081E29DE00E94360D892B29F081 -:101B4000C09135048C2FCF91089581E080933504A6 -:101B5000F7CF90915304943029F580934204709309 -:101B60004404609343049093E9008FEF9091E80060 -:101B7000815095FD06C095ED9A95F1F70000811111 -:101B8000F5CF8091E80085FF0DC050E040E063E0B4 -:101B900070E082E494E00E94C0078091E8008E77B4 -:101BA0008093E8000895BC0184E00C94A90DBC0169 -:101BB00083E00C94A90DCF93DF93EC0181E0809337 -:101BC000E9008FEF9091E800815095FD06C095EDFA -:101BD0009A95F1F700008111F5CF8091E80085FF1B -:101BE00014C050E040E068E070E0CE010E94C00701 -:101BF0008091E8008E778093E80088E0FE01A9E4F8 -:101C0000B4E001900D928A95E1F7DF91CF910895AC -:101C10009F92AF92BF92CF92DF92EF92FF920F937B -:101C20001F93CF93DF937C015B016A018091E002F7 -:101C300001E010E08A3010F40AE010E0C1E0D0E0EA -:101C4000F894B501C701F6010995982E0E94160A6D -:101C5000911004C021960C171D076CF4892DDF919B -:101C6000CF911F910F91FF90EF90DF90CF90BF9099 -:101C7000AF909F900895CC9F9001CD9F300D300D77 -:101C8000112490E080E045E34A95F1F700000196C9 -:101C900082179307C1F7D4CF8091AB02811110C096 -:101CA0008091D80080618093D8008AE18A95F1F70D -:101CB00000C08091D90080FF0AC081E08093AB0210 -:101CC00081E09091AB02913009F080E0089582E0CC -:101CD0008093AB020E94700710925304F1CF0E94D0 -:101CE0004C0E882351F0E0913904F0913A0430977A -:101CF00021F00190F081E02D099480E008951F9378 -:101D0000CF93DF93182FEB010E94B10C8FE99FE076 -:101D10000197F1F700C000002197C1F7812FDF91F3 -:101D2000CF911F910C94780C4F925F926F927F929B -:101D30008F929F92AF92BF92CF92DF92EF92FF92DB -:101D40000F931F93CF93DF93CDB7DEB7CE5DD1094D -:101D50000FB6F894DEBF0FBECDBF509077019091C3 -:101D60005E0490FF5DC080904A0390904B03811405 -:101D7000910409F068C0E7E9F7E09E012F5F3F4F4B -:101D8000BE0161527F4FC901A4914A2F50E0DA0190 -:101D9000AA0FBB1FA40FB51FA45BBC4FCD90DD9055 -:101DA000EC90D901CD92DD92ED929D0131966A17AA -:101DB0007B0751F72091760143E0249F800D911D10 -:101DC0001124539A2BB1277F3BB138605FB7F89449 -:101DD000BC01549E600D711D11248617970709F0F0 -:101DE0008EC05FBF8FE594E00197F1F700C000005F -:101DF000C252DF4F0FB6F894DEBF0FBECDBFDF91EA -:101E0000CF911F910F91FF90EF90DF90CF90BF90F7 -:101E1000AF909F908F907F906F905F904F900895BC -:101E2000809178012091790133E0839FF0011124A2 -:101E3000E45BFC4F821708F096CF11821082128269 -:101E40008F5F3396F7CF90FF96CFD12CC12C6624AD -:101E50006394712C53E0452E8091490393010C2C1F -:101E600001C0220F0A94EAF7822309F43FC0F60169 -:101E7000EE0FFF1FE80DF91DE590F490E114F10459 -:101E800009F479CF45E050E0B701CE0101960E94F8 -:101E90003D3209810F3F51F18A81800F9927991FA7 -:101EA0008B34910514F08AE490E05C01AA0CBB1C11 -:101EB0008A0D9B1DDC01A45BBC4F5D01049D80016C -:101EC0001124045B1C4F0A151B0520F0B5E0EB0E36 -:101ED000F11CD8CF4D81413A08F040EA98016C815D -:101EE0008B810E947E090D5F1F4FEDCFEFEFCE1A61 -:101EF000DE0AF8E0CF16D10409F0AECF3CCFFC01EA -:101F00004191CF01E8E03BB9000000C047FF2BB989 -:101F1000440F000000C000C000C02BB900C0EA950B -:101F200091F75BCFEEE5F4E080818E7F8083E6E47D -:101F3000F3E08281816082832FEF80E792E021507D -:101F400080409040E1F700C000000C94940EECE358 -:101F5000F2E086E0DF011D928A95E9F70C94510CBE -:101F60001F93CF93DF93CDB7DEB7AA970FB6F89440 -:101F7000DEBF0FBECDBF85E594E02091F100DC010E -:101F80002D93CD01B4E08D359B07B9F780915604B0 -:101F9000833009F471C0B8F4813009F448C082304C -:101FA00009F4B4C08091E80083FF3CC180915504DE -:101FB000909156049A3008F035C1E92FF0E0E95DC0 -:101FC000F84C0C94D7318A3009F48FC08B3009F467 -:101FD00070C0893039F780915504813219F78091AA -:101FE000590490915A04009711F00297D9F6809104 -:101FF000E800877F8093E8008091E80082FF37C087 -:102000009091F3008091F200029729F48091F10001 -:102010008B7F813021F48091F1008093480480917E -:10202000E8008B778093E8000E94EA07BBCF80919D -:102030005504813A09F0B6CF8091E800877F8093FC -:10204000E8008091590490915A04892B61F468E06A -:1020500089E494E070E00E949C088091E8008B770E -:102060008093E8009FCF60E090E080E0F3CF809124 -:1020700053048111C1CF96CF80915504813A09F064 -:1020800091CF8091590490915A04892B09F08ACFFD -:102090008091E800877F8093E8008091E80080FFCE -:1020A000FCCF80917B018093F1008091E8008E77D6 -:1020B000B9CF80915504813209F074CF80915904D1 -:1020C00090915A04892B09F06DCF8091E800877FA9 -:1020D0008093E8000E94EA078091570480937B0177 -:1020E000109246040E94A70F5DCF80915504813263 -:1020F00009F058CF8091E800877F8093E8000E9424 -:10210000EA0780915804809347044CCF809155048E -:10211000813A09F047CF8091E800877F8093E800FB -:102120008091E80080FFFCCF80914704BCCF8038CD -:1021300099F0823809F076C0809159048F70873009 -:1021400008F070C08093E9008091EB0085FB882740 -:1021500080F91092E90006C08091510490915204D8 -:10216000911182609091E800977F9093E8008093AE -:10217000F1001092F1008091E8008E77B5C18823BC -:1021800009F4A2C1823009F04DC080915704811139 -:10219000A6C1809159048F702FEF280F263008F0C8 -:1021A00041C08093E9002091EB0020FF98C193305B -:1021B00031F48091EB0080628093EB0090C19091AC -:1021C000EB0090619093EB0021E030E001C0220F22 -:1021D0008A95EAF72093EA001092EA008091EB00DA -:1021E0008860EACF81111EC0109157041F7780913B -:1021F000E3008078812B8093E3008091E800877F63 -:102200008093E8000E94EA078091E80080FFFCCFFD -:102210008091E30080688093E30082E0111183E005 -:10222000809353048091E80083FF0AC08091E80006 -:10223000877F8093E8008091EB0080628093EB00C1 -:10224000AA960FB6F894DEBF0FBECDBFDF91CF9137 -:102250001F9108958058823028F7209157043091BB -:1022600058042C3DE3E03E07A1F583E08A838AE22F -:1022700089834FB7F894DE01139620E03EE051E2E7 -:10228000E32FF0E050935700E49120FF03C0E29564 -:10229000EF703F5FEF708E2F90E0EA30C0F0C7968E -:1022A0008D939D932F5F243159F74FBF8091E800A4 -:1022B000877F8093E8006AE270E0CE0101960E9479 -:1022C0009C088091E8008B778093E800ABCFC096A4 -:1022D000E7CF8091590490915A04432F55274330FA -:1022E000510509F44AC078F54130510509F47AC026 -:1022F0008BE590E0E5E2FDE04230510509F092CF38 -:102300002091E800277F2093E80020915B04309122 -:102310005C048217930708F49C0140E02115310505 -:1023200009F065C0411163C08091E80082FDC9CF0A -:1023300080915304882329F2853019F28091E800B6 -:1023400083FFF2CFBECF4132510509F43CC0423287 -:10235000510509F067CF8330910508F063CFFC0188 -:10236000EE0FFF1FE55DFD4F0190F081E02D885DD0 -:102370009D4FDC018C9190E01AC03327213031054C -:10238000D1F02115310561F02230310509F04ACF35 -:10239000E2E9FDE0E4918E2F90E0E2E9FDE007C084 -:1023A000E4ECFDE0E4918E2F90E0E4ECFDE000979A -:1023B00009F438CFA5CFE2EBFDE0E4918E2F90E059 -:1023C000E2EBFDE0F4CF8330910508F02BCF880FCE -:1023D000991FFC01EF5CFD4F0190F081E02D89E039 -:1023E00090E08ECF82E190E0E0E8FDE089CF80913F -:1023F0005304882309F465CF853009F462CF8091B6 -:10240000E80083FD5ECF8091E80082FD8DCF809152 -:10241000E80080FF83CF9091F3008091F2002115B6 -:10242000310519F08830910550F041E0089709F026 -:1024300040E08091E8008E778093E8006FCF449170 -:102440004093F1003196215031090196E8CF803850 -:1024500009F0E8CE8091E800877F8093E8008091C2 -:1024600054048093F10087CE8111DCCE1091570483 -:10247000123008F0D7CE8091E800877F8093E80083 -:10248000109354040E94EA07112311F084E005C060 -:102490008091E30087FDFACF81E08093530442E00E -:1024A00061EC81E00E94090842E261EC84E00E9454 -:1024B000090842E261EC82E00E94090842E260EC15 -:1024C00083E00E940908AECE80915704813009F064 -:1024D000A9CE81E0933009F080E0809352041092FD -:1024E000E9008091E800877F8093E8000E94EA0776 -:1024F00099CE1F93CF93DF93162FC0916506D0918D -:1025000066068A30D1F420912A04CE018556944083 -:10251000622F70E00E948431281B822F66E00E94A7 -:102520009831C82FC15020F4DF91CF911F910895A9 -:1025300060E080E20E947912F5CF8D30E9F4C55653 -:10254000D44020912A04622F70E0CE010E94843191 -:10255000281B822F9E01280F311D2115324018F0B3 -:1025600080E0D0E0C0E0C80FD11DCB59DB4FD09345 -:102570006606C0936506D8CF96E0FE01ABE2B4E0F4 -:1025800001900D929A95E1F7803E90F186E0FE0170 -:1025900011928A95E9F7C0916506D09166061111EE -:1025A00033C046E050E0BE018BE294E00E94463228 -:1025B0009E0125563440892B91F52A5F3F4F40916B -:1025C0002A04642F70E0C9010E948431481B463000 -:1025D00010F4240F311D211572E0370710F030E0A0 -:1025E00020E02B593B4F30936606209365069CCF25 -:1025F000F6E08F9FB00111246F51784F46E050E014 -:10260000CE010E943D32C7CF9E012A5F3F4FFE019F -:102610002E173F0731F2808180958193F9CFC90150 -:1026200045E0969587954A95E1F741E050E0BA017B -:1026300002C0660F771F8A95E2F7CB0160916304B1 -:1026400070916404862B972BB9016B5F7F4FE5E097 -:1026500076956795EA95E1F702C0440F551F6A9594 -:10266000E2F7842B952B9093640480936304A5CFA9 -:10267000FF920F931F93CF93DF93EC01F62EFC0193 -:1026800001900020E9F78F0101501109C017D1070F -:1026900030F0DF91CF911F910F91FF9008956F2D32 -:1026A00089910E947912F2CFCF93DF93C3EED2E0EB -:1026B00060E0CE010E9402352196C11584E0D80762 -:1026C000B9F7DF91CF9108956F927F928F929F9289 -:1026D000AF92BF92CF92DF92EF92FF920F931F9330 -:1026E000CF93DF9381EEC82E87E0D82E91ECE92EB0 -:1026F000F12CE701CC58D10936011BC0F5018590BA -:102700009490692DC8010E940235682DC801019678 -:102710000E94023582E0A80EB11C0E5F1F4FC01749 -:10272000D10761F78EE0680E711C2E96CE15DF057D -:1027300029F08E010E5011095301E0CF7E018CE883 -:10274000E80EF11C8CE8C80ED11C8DE7E81683E07A -:10275000F80679F6DF91CF911F910F91FF90EF90DE -:10276000DF90CF90BF90AF909F908F907F906F90B1 -:102770000895CF93C82F6FEF811161E283E290E05B -:102780000E9402356FEFC11169E084E290E00E947F -:1027900002356FEFC11164E185E290E0CF910C94B6 -:1027A000023580E00E94B91360E086E290E00E946A -:1027B00002350E9464130E94541381E00C94B913F3 -:1027C0000F931F93CF93DF93C42FD0E0CC0FDD1F67 -:1027D0002EE0629FC00DD11D11243CE8839FC00DE7 -:1027E000D11D1124CE0187960E94EE34082F10E0EF -:1027F000102F0027CE0188960E94EE349801282BD6 -:10280000C901DF91CF911F910F910895462F853017 -:1028100038F47A3028F4673018F4672F0C94E013FA -:1028200090E080E00895CF92DF92FF920F931F9384 -:10283000CF93DF936C0100915D0480919C02082B83 -:10284000C7E0D0E010E0FC2EC8010C2E02C0959528 -:1028500087950A94E2F780FD0CC02197A0F7F12C30 -:102860008F2DDF91CF911F910F91FF90DF90CF902F -:102870000895B6018C2F0E9406140E94720A0197D7 -:1028800061F3EECFCF93DF93EC010E941314BE01EE -:102890000E940614DF91CF910C94720AFC01808192 -:1028A00091810E944214292F2F7092959F7092500F -:1028B0009E3078F4E92FF0E0EF5CF84C0C94D731BF -:1028C000803F19F020F4883E20F481E00895843F91 -:1028D000E1F380E00895883EC0F3813FD1F7F5CF62 -:1028E000822F869586958695089583E290E00E94D2 -:1028F000EE34813289F484E290E00E94EE34893033 -:1029000059F485E290E00E94EE3491E0843109F0C0 -:1029100090E0892F8170089580E0FCCFCF92DF9204 -:10292000EF92FF926B017C010E946809B701A6013A -:1029300088E090E0FF90EF90DF90CF900C941435FA -:10294000AF92BF92CF92DF92EF92FF920F931F93BD -:10295000CF93DF9300D00F92CDB7DEB7082FF62EBE -:10296000142FE22E80915E0480FF4FC0E82FE69581 -:10297000AE2FB0E0A45EBD4F9C91909346038E7F36 -:10298000823009F056C0413A08F040EA9E012F5FBC -:102990003F4F6F2D802F0E947E0980915E0480FF43 -:1029A00011C02B8139814A81809178019091790100 -:1029B00053E0859FF0011124E45BFC4F891798F1E7 -:1029C0000E94940E80915F04801308C0809160047F -:1029D0008F1104C080916104811729F08091480310 -:1029E00082608093480300935F04F0926004109328 -:1029F0006104EE2051F060915E0470915F0480915B -:102A00006004909161040E948E140F900F900F90BB -:102A1000DF91CF911F910F91FF90EF90DF90CF90BA -:102A2000BF90AF9008954183308322838F5F3396A8 -:102A3000C5CF923039F6E2508E2F8170D82EE695B0 -:102A4000F0E0EE56F84FA590B490C12CBB246091F5 -:102A50007A01C61608F0B4CF2C2D30E0A29EC0013A -:102A6000A39E900DB29E900D112470E00E948431BF -:102A7000802FD11016C0860F40917801420F532F3E -:102A8000511D9A01220F331F240F351F245B3C4F29 -:102A9000412F113A08F040EA6F2D0E947E09C3943D -:102AA000D6CF861BE9CFEEE5F4E0438121E1421B5E -:102AB00008F440E021E0628181810C94A014EEE5ED -:102AC000F4E0438121E1420F08F44FEF21E06281FD -:102AD00081810C94A014EEE5F4E0628121E1621B97 -:102AE00008F460E021E0438181810C94A014EEE5BC -:102AF000F4E0628121E1620F08F46FEF21E043818D -:102B000081810C94A014EEE5F4E0818121E0438101 -:102B1000628188500C94A014EEE5F4E0818121E0FC -:102B200043816281885F0C94A014809162048823A1 -:102B300019F081508093620460915E0470915F048B -:102B400080916004909161040C948E1480916204D1 -:102B5000833018F48F5F8093620460915E047091FB -:102B60005F0480916004909161040C948E149091A4 -:102B70005E0490FF27C0917081111DC092609093F8 -:102B80005E0480914803816080934803662351F07E -:102B900060915E0470915F04809160049091610483 -:102BA0000E948E1420E04091610460916004809145 -:102BB0005F040C94A0148C3010F09661E0CF880F65 -:102BC000982BDDCF089521E030E0A90102C0440F29 -:102BD000551F8A95E2F7CA0120914903662391F0B7 -:102BE000822B80934903809148038061809348033E -:102BF00080914703811109C080915E0460E0869551 -:102C00000C94B71580958223ECCF0895CF93DF9372 -:102C1000C82FC17082FBDD27D0F981FB662760F9E0 -:102C200085E00E94E31561E06C2786E00E94E315D1 -:102C30006D2F87E0DF91CF910C94E3150F931F93D5 -:102C4000CF93C82F61E08111682F617080E00E94EE -:102C5000E315C1FB662760F9C11101C060E081E0A6 -:102C60000E94E315C2FB662760F9C11101C060E054 -:102C700082E00E94E315C3FB662760F9C11101C021 -:102C800060E083E00E94E315C4FB662760F9C11190 -:102C900001C060E084E00E94E3154C2F50E070E03A -:102CA00060E0DB01CA01F4E0B695A795979587959A -:102CB000FA95D1F70097A105B10549F1AC01BD0125 -:102CC00084E08A019B01E2E03695279517950795E8 -:102CD000EA95D1F7011511052105310519F08E5F2F -:102CE000B901A8017695679557954795452B462BD1 -:102CF000472B09F08F5F823009F158F4882391F057 -:102D00008130B9F08C2FCF911F910F91089580E001 -:102D1000D8CF8330C1F08430A9F720E040E56FEFD1 -:102D20008AED04C020E040E56FEF82E30E94A0142A -:102D3000E9CF20E040E56FEF8CEFF8CF20E040E5F1 -:102D40006FEF80E5F3CF20E040E56FEF86E7EECF51 -:102D50000E941E1680935D040C94510C80915D04BA -:102D6000982F9670963019F488600C94A816877F77 -:102D7000FCCF21E030E001C0220F8A95EAF72095D0 -:102D800080915D0482230C94A81621E030E001C0FC -:102D9000220F8A95EAF780915D04822B0C94A81685 -:102DA00080915E048695815009F48BE061E00C947B -:102DB000B71580915E0486958F5F8C3008F081E0B6 -:102DC00061E00C94B71580915E0480FF07C0869582 -:102DD00082588F77893010F40C94D91661E082E024 -:102DE0000C94B715EEE5F4E083E0808311828FEF59 -:102DF000828380EA83831482A6E4B3E012968C91E6 -:102E00001297836012968C93608171818281938185 -:102E10000C948E1469EE7EEF90E080E00E942035E5 -:102E200060E082E090E00E94023560E083E090E0A4 -:102E30000E94023510929C0260E084E090E00E94C3 -:102E4000023560E082E290E00E94023560E085E0B9 -:102E500090E00E94023560E086E090E00E9402353A -:102E60006FEF87E090E00E94023540E050E0BA0149 -:102E700088E090E00E94143560E08DE090E00E94D0 -:102E8000023540E050E0BA0188E190E00E9414353C -:102E900060E087E190E00E94023540E050E0BA0136 -:102EA0008CE190E00E94143570E060E080E290E0F8 -:102EB0000E94203540E050E0BA0188E190E00E9495 -:102EC000143580E00E94B9130E94D11340E050E015 -:102ED000BA018FE090E00E94143540E050E0BA0162 -:102EE00083E190E00C9414350F931F93CF93DF93FD -:102EF00000D000D0CDB7DEB74091D0025091D102C2 -:102F00006091D2027091D3022FB7F89480913E0461 -:102F100090913F04A0914004B09141042FBF841BC5 -:102F2000950BA60BB70B84369105A105B10588F169 -:102F30000E944C0E882379F10E94FE086E5F7F4F3D -:102F40008F4F9F4F69837A838B839C8380912B0162 -:102F500090912C0187549D4F40912A0150E04530BB -:102F6000510510F044E050E0BE016F5F7F4F0E94BA -:102F7000533284E090E00E94D030892BD9F40E9433 -:102F8000FE086093D0027093D1028093D202909396 -:102F9000D30281E010C00E94FE080091E10210916E -:102FA000E2022091E3023091E402600F711F821F60 -:102FB000931FC4CF80E00F900F900F900F90DF9180 -:102FC000CF911F910F9108958F929F92AF92BF92D0 -:102FD000CF92DF92EF92FF920F931F93CF93DF93E5 -:102FE000EB0188809980AA80BB809FB7F894C0903D -:102FF0003E04D0903F04E0904004F09041049FBF15 -:10300000C818D908EA08FB0894E6C916D104E104F7 -:10301000F10410F4442311F1E82E082E000CFF08EF -:103020009AE08902F0011124E050FF4F83819481DE -:1030300087549D4F428150E00417150708F4A801FA -:10304000B9010E945332C7010E94D030892BA1F4EC -:103050000E94FE08688379838A839B8381E0DF91E5 -:10306000CF911F910F91FF90EF90DF90CF90BF9085 -:10307000AF909F908F90089580E0F1CF0F931F93B2 -:10308000CF93DF930F92CDB7DEB78091350489835C -:103090002091CF0290E041E02817190609F440E0A2 -:1030A00001E010E09E012F5F3F4F6CED72E087E082 -:1030B0000E94E4170F90DF91CF911F910F91089517 -:1030C0000F931F93CF93DF930F92CDB7DEB780910D -:1030D000FC02898341E09091CE02981301C040E048 -:1030E00001E010E09E012F5F3F4F68ED72E086E047 -:1030F0000E94E4170F90DF91CF911F910F910895D7 -:103100000F931F93CF93DF93CDB7DEB729970FB6F9 -:10311000F894DEBF0FBECDBF85E0EEE5F4E0DE0142 -:10312000119601900D928A95E1F780914603909156 -:103130004703A0914803B09149038E839F83A887DA -:10314000B98741E08885811101C040E009E010E0C5 -:103150009E012F5F3F4F64ED72E085E00E94E4170F -:1031600081111092480329960FB6F894DEBF0FBE66 -:10317000CDBFDF91CF911F910F9108956F927F92F4 -:103180008F929F92AF92BF92CF92DF92EF92FF9277 -:103190000F931F93CF93DF930F92CDB7DEB7862E99 -:1031A0005A016901682E880F7708C3010E94D03048 -:1031B000892B09F088C08AE0869DF001879DF00D7B -:1031C0001124E050FF4F458150E04115510511F0A9 -:1031D00041E050E08AE0869DF001879DF00D1124CA -:1031E000E050FF4F6681778167547D4FCE01019695 -:1031F0000E945332F50140815181628173812FB762 -:10320000F89480913E0490913F04A0914004B091C5 -:1032100041042FBF841B950BA60BB70B8436910579 -:10322000A105B10540F4B701C8010E944D0999817B -:10323000891709F44FC0082C000C9908C4010E949A -:10324000D030892B91F0B12C8B2D0F90DF91CF9145 -:103250001F910F91FF90EF90DF90CF90BF90AF90B4 -:103260009F908F907F906F9008958AE0889DF001E5 -:10327000899DF00D1124E050FF4F458150E0E41688 -:10328000F50608F4A7018AE0889DF001899DF00DFC -:103290001124E050FF4F6681778167547D4FC6014E -:1032A0000E945332B701C8010E944D0999818913C8 -:1032B000CACF0E94FE08F5016083718382839383E5 -:1032C000BB24B394C1CFB12CA701B801C6010E94A1 -:1032D0005332BACFBB24B394F7CFCF92DF92EF92A1 -:1032E000FF920F931F93CF93DF9300D000D00F92E4 -:1032F000CDB7DEB76B0185E0E82EF12C0AEB12E0CA -:103300009E012F5F3F4F41EB52E061E080E00E9461 -:10331000BE18882349F095E0FE013196ACEAB2E090 -:1033200001900D929A95E1F795E0ECEAF2E0D60172 -:1033300001900D929A95E1F70F900F900F900F90DA -:103340000F90DF91CF911F910F91FF90EF90DF9041 -:10335000CF90089590E080E00E94FC34893E9E4F1B -:1033600011F40C94751480E008951F920F920FB61B -:103370000F9211242F933F934F935F936F937F93FB -:103380008F939F93AF93BF93CF93DF93EF93FF936D -:10339000D091E900DF708091EC00C82FC17080FDF2 -:1033A000C0E81092E9008091F000877F8093F000E0 -:1033B00078940E94B00F1092E9008091F00088602C -:1033C0008093F000CD2BCF70C093E900FF91EF9177 -:1033D000DF91CF91BF91AF919F918F917F916F912D -:1033E0005F914F913F912F910F900FBE0F901F90C3 -:1033F00018951F920F920FB60F9211242F933F939F -:103400004F935F936F937F938F939F93AF93BF93EC -:10341000EF93FF938091E10082FF09C08091E20069 -:1034200082FF05C08091E1008B7F8093E100809155 -:10343000DA0080FF24C08091D80080FF20C08091F6 -:10344000DA008E7F8093DA008091D90080FF9BC0E4 -:1034500080E189BD82E189BD09B400FEFDCF81E034 -:103460008093530480914504811109C00E94700724 -:103470000E943B088091E20084608093E20080918A -:10348000E10080FF17C08091E20080FF13C08091AF -:10349000E2008E7F8093E2008091E2008061809361 -:1034A000E2008091D80080628093D80019BC85E04A -:1034B000809353048091E10084FF29C08091E20051 -:1034C00084FF25C080E189BD82E189BD89B5982F3F -:1034D000917080FFFBCF8091D8008F7D8093D800C2 -:1034E0008091E1008F7E8093E1008091E2008F7EE9 -:1034F0008093E2008091E20081608093E2008091FD -:103500005404882309F445C084E0809353048091D7 -:10351000E10083FF27C08091E20083FF23C08091F8 -:10352000E100877F8093E10082E080935304109252 -:1035300054048091E1008E7F8093E1008091E2004D -:103540008E7F8093E2008091E20080618093E200B0 -:1035500042E060E080E00E9409088091F00088600D -:103560008093F000FF91EF91BF91AF919F918F9168 -:103570007F916F915F914F913F912F910F900FBE6F -:103580000F901F90189519BC109253041092450487 -:1035900076CF8091E30087FD93E090935304B7CFFB -:1035A00078941F921FB61F9211248F939F93AF930D -:1035B000BF9380913E0490913F04A0914004B0914C -:1035C00041040196A11DB11D80933E0490933F04D8 -:1035D000A0934004B0934104BF91AF919F918F910C -:1035E0001F901FBE1F9018959C014FB7F8948091B3 -:1035F0003E0490913F04A0914004B09141044FBF1C -:10360000821B930B08952FB7F89480913E049091FC -:103610003F04A0914004B09141042FBF08958F92C0 -:103620009F92AF92BF92CF92DF92EF92FF920F9351 -:103630001F93CF93DF93CDB7DEB72F970FB6F894D4 -:10364000DEBF0FBECDBF8E010F5F1F4F8AE0D801D6 -:103650001D928A95E9F787E5C82E81E0D82EF12CD6 -:10366000E12CAA24A394B12CF60181916F018F3F24 -:1036700009F44AC0F894E82FE295EF70F0E021A138 -:103680008F70A50102C0440F551F8A95E2F7CA0149 -:10369000922F982B91A392A18095892382A30E94B7 -:1036A000160A00C0E0E5F1E030E020E0912C419105 -:1036B0004F3F09F47FC0A42FA295AF70B0E0909661 -:1036C0008C9190E04F7002C0959587954A95E2F7EE -:1036D00080FD70C08A2D022E01C0880F0A94EAF77F -:1036E000982A2F5F3F4F2730310509F7F6013197B0 -:1036F00080818F3F11F00E94180A50EA5A95F1F725 -:10370000F801EE0DFF1D90828FEFE81AF80A95E0A0 -:10371000E916F10409F0A8CF4AE050E0B80187EEBD -:1037200092E00E9446327C01892B41F08AE0F80148 -:10373000A7EEB2E001900D928A95E1F71091F202A6 -:10374000E114F104C9F181E080939F020E94031B00 -:1037500090939E0280939D0280919D0290919E0283 -:103760000E94F41A069778F0A7EEB2E0E12FF0E09D -:10377000E45CFC4F8CEE92E02D9121938A179B071D -:10378000D9F710929F0281E090E0EF28C9F02F96C0 -:103790000FB6F894DEBF0FBECDBFDF91CF911F9162 -:1037A0000F91FF90EF90DF90CF90BF90AF909F90E0 -:1037B0008F90089580E094CF80919F028111CCCFAB -:1037C0000E944C0EB82EE091F2028E01055F1F4F51 -:1037D000882309F4D3C085E0D8011D928A95E9F7C2 -:1037E000F0E09F01245C3C4F79018091E002AE0142 -:1037F000405F5F4F6A018A3008F098C04DE659E19A -:10380000B801C7010E94080E882309F4A6C04BE046 -:1038100056E2B801C7010E94080E882309F49DC032 -:1038200044E757E1B801C7010E94080E882309F454 -:1038300094C040E858E1B801C7010E94080E8823EF -:1038400009F48BC040E658E1B801C7010E94080E98 -:10385000882309F482C04EE358E1B801C7010E94F1 -:10386000080E882309F479C01092E002E091F10279 -:10387000F0E0AF01445C5C4FD80110E0FA01919197 -:10388000AF018D91981731F09F0121503109F90155 -:1038900080831B2DAC15BD0589F78091A202909104 -:1038A000A3020E94F41A893E934060F16091FC02E9 -:1038B000E62EF12C662777276E197F09072E000C5C -:1038C000880B990B0E94EB3527EA39E747E45DE363 -:1038D0000E94B8364B015C01B701FF0C880B990BB5 -:1038E0000E94EB359B01AC01C501B4010E94373544 -:1038F0000E94BA356093FC020E94031B9093A302BE -:103900008093A2028091A602882371F08091A40284 -:103910009091A5020E94F41A893E934028F082EE0D -:103920000E94780C1092A602812F31CF8091A002C4 -:103930009091A1020E94F41A843F914008F05ECF5A -:10394000E091F102F0E0E45CFC4FD80111921D928D -:10395000AC15BD05D9F71B2DA0CF8091E0028F3F9C -:1039600031F08F5F8093E0028A3008F47FCF0E94AD -:10397000031B9093A1028093A002E2CFF0E0E45CED -:10398000FC4FF89485E0AAEBB2E001900D928A9585 -:10399000E1F765E070E08AEB92E00E944D098093C8 -:1039A000B9020E94160AF894E091FA02F0E0E95098 -:1039B000FD4F80818B878093C00261E070E0C80179 -:1039C0000E944D098093BF020E94160AF894C0908D -:1039D000C102D090C202E090C302F090C402809174 -:1039E000A7029091A802A091A902B091AA02C816BC -:1039F000D906EA06FB06D1F0C092A702D092A8022F -:103A0000E092A902F092AA020E944C0E81110EC00F -:103A10000E94FE08C61AD70AE80AF90AC092E10213 -:103A2000D092E202E092E302F092E4020E94160ACF -:103A3000F8948091CC02882321F184FF04C09091F6 -:103A4000CD029093490380FF0DC08091C50280FF95 -:103A50002CC090915E04916090935E0460E0869526 -:103A60000E94B7158091CC0281FF09C020E04091EF -:103A7000C8026091C7028091C6020E94A0141092F1 -:103A8000CC020E94160AF8948091CE028093FC0228 -:103A90000E94160AF8948091CF02882349F00E9470 -:103AA000810D0E94160A80E072CE0E94920FDACF3A -:103AB0000E94660DF6CF5F926F927F928F929F92D7 -:103AC000AF92BF92CF92DF92EF92FF920F931F932C -:103AD000CF93DF9300D000D00F92CDB7DEB76C014B -:103AE000FC0183819481892B31F08081918189232C -:103AF0008F3F09F082C50F900F900F900F900F909D -:103B0000DF91CF911F910F91FF90EF90DF90CF90B9 -:103B1000BF90AF909F908F907F906F905F9008952F -:103B20000E941314182F682F89819A810E94250CF6 -:103B300069817A81812F0E9406148C01F6018281AD -:103B4000882309F463C0C80190568115F0E29F07ED -:103B500050F0905E811520E1920728F0915C81156C -:103B60009F4108F0A5C0C80199279C012450310944 -:103B70002432310520F08B970E9708F047C08091D2 -:103B8000A2029091A3020097D9F10E94F41A9C011D -:103B900050E040E060E67AEE80E090E00E94B831CC -:103BA000CA01B90125E030E040E050E00E94B831A0 -:103BB000E090FC022F3F310519F010F02FEF30E0BC -:103BC000F12C2E193F09B90190E080E00E94E935FF -:103BD00027EA39E747E45DE30E94B8360E94A3353F -:103BE0004B015C01B701FF0C880B990B0E94EB3570 -:103BF000A50194010E9437350E94BA356093FC02FA -:103C00000E94031B9093A3028093A202F60182817B -:103C1000882309F4E6C4C80182519F45409708F003 -:103C200071C48FEF93E00E94EE34025193EEA92EFF -:103C300092E0B92E81115FCF011143C01C821B821B -:103C4000662463948AE0582E85010F5F1F4FC501DB -:103C50000E94EE3489831A82882309F44CCF9FEFA7 -:103C6000980F9330E8F58A83698232E0A30EB11C85 -:103C7000C8010E94EE348B83882309F43CCF8E0167 -:103C80000F5F1F4FF80120812223F1F2213009F04C -:103C900061C091818281913029F50E5F1F4F6AE0EA -:103CA00070E0893311F460E570E00E947F0E20C05F -:103CB00090E080E00F3F110511F008F056CFC801E9 -:103CC00054CFA114F4E0BF0609F415CFC5010E943A -:103CD000EE34811101C001502FEFA21AB20AACCF0D -:103CE0005801CDCF923039F40E5F1F4F0E94B10CB6 -:103CF0000F5F1F4FC7CF933029F40E5F1F4F0E94F5 -:103D0000780CF6CF943019F00F5F1F4FF1CF0E5F94 -:103D10001F4F30E020E0B8016F5F7F4FF801418115 -:103D20008053990B8A30910550F02150310900F3EE -:103D30008FE99FE00197F1F700C00000F6CF529E97 -:103D4000F001539EF00D11249C012E0F3F1F842F74 -:103D50008B01E1CFE22FF0E0E054FE4F7490822F10 -:103D600086958695869590E0FC01E055FE4FE4909F -:103D70002770F12C022E02C0F594E7940A94E2F722 -:103D8000E1E0EE22FF24FC01E056FE4FC490D12C6E -:103D9000022E02C0D594C7940A94E2F7F1E0CF2234 -:103DA000DD24FC01E057FE4F8490912C02C09594D5 -:103DB00087942A95E2F721E082229924E114F10404 -:103DC00019F081EE0E94B10CC114D10419F086EEF5 -:103DD0000E94B10C39E36AE070E0731202C060E542 -:103DE00070E0872D0E947F0ECD2819F086EE0E948C -:103DF000780CEF2819F081EE0E94780C892809F4DC -:103E000077CF6AE070E08CE250CF81E00E94C51667 -:103E100003C081E00E94B9160F900F900F900F9091 -:103E20000F90DF91CF911F910F91FF90EF90DF9056 -:103E3000CF90BF90AF909F908F907F906F905F904A -:103E40000C94AE1682E0E2CF013E110509F49AC04F -:103E5000043E110509F07CC3882309F4CEC081E03B -:103E60008093FD0275C30238FFE51F0709F459C0AE -:103E700000F500383FE51307B9F101384FE51407A5 -:103E800009F066C3882309F445C08091A602811118 -:103E900006C081E08093A60282EE0E94B10C0E94CF -:103EA000031B9093A5028093A40281EE0E94B10CA3 -:103EB0002DC003385FE5150709F447C004389FE5B6 -:103EC000190709F045C3882309F482C08091430291 -:103ED000882309F45AC0809144020E94780C80EE35 -:103EE0000E94B10C8AE25EC08823B9F08091A602DC -:103EF000811106C081E08093A60282EE0E94B10C7F -:103F00000E94031B9093A5028093A4028BE20E945F -:103F1000B10C1EC381EE0E94780C8BE20E94780CDB -:103F200017C3882309F414C381EE0E94B10C83EEF9 -:103F30000E94B10C8FE40E94B10C8FE40E94780CB7 -:103F400083EE0E94780C81EEE9CF882309F400C348 -:103F500081EE0E94B10C83EE0E94B10C80E50E94BC -:103F6000B10C80E5EBCF809346021093450200939D -:103F70004402882321F081E08093FE02E9C210927E -:103F8000FE02E6C280934302F0CF8091460288236E -:103F900009F4A8CF809144020E94780C80EE0E9420 -:103FA000B10C8CE40F900F900F900F900F90DF9159 -:103FB000CF911F910F91FF90EF90DF90CF90BF9026 -:103FC000AF909F908F907F906F905F900C94B10C0A -:103FD0008AE20E94780C8CE40E94780C80EE0E94A9 -:103FE000780C80914302811105C08091460288239C -:103FF00009F481CD80914402D5CF1092FD02A8C270 -:10400000882331F081E08093000310926E01A0C2FA -:10401000109200039DC2073C2CE5120709F4AEC0C4 -:1040200008F4A7C0083C4CE5140709F4ACC0093CEF -:104030001C4509F0ADC243E555E16FE575E179C076 -:10404000043DECE51E07A8F40E3CFCE51F0708F054 -:1040500052CD0C3C2CE5120709F49FC045E955E10F -:1040600066EA75E10D3C1C4508F463C061E081E03F -:1040700046C0053D4CE5140709F43DCD08F492C057 -:104080000D351D4509F437CD83C280915E0480FF54 -:1040900031C08E7F80935E0460915E0470915F04F6 -:1040A00080916004909161040E948E148091480375 -:1040B0008160809348039FEFE0E7F2E09150E04099 -:1040C000F040E1F700C000000F900F900F900F90AC -:1040D0000F90DF91CF911F910F91FF90EF90DF90A4 -:1040E000CF90BF90AF909F908F907F906F905F9098 -:1040F0000C94940E816080935E0461E086950F902D -:104100000F900F900F900F90DF91CF911F910F9113 -:10411000FF90EF90DF90CF90BF90AF909F908F90E7 -:104120007F906F905F900C94B71540ED56E169ED6C -:1041300076E10F900F900F900F900F90DF91CF913D -:104140001F910F91FF90EF90DF90CF90BF90AF90B5 -:104150009F908F907F906F905F900C94630949EDD2 -:1041600056E160ED76E1E5CF43E855E16CE875E1B5 -:10417000E0CF4CE855E163E875E1DBCF4BE655E174 -:1041800067E775E1D6CF47E755E16BE675E1D1CF3B -:104190004FE555E163E575E1CCCF46EA55E165E9C8 -:1041A00075E1C7CF0F900F900F900F900F90DF9198 -:1041B000CF911F910F91FF90EF90DF90CF90BF9024 -:1041C000AF909F908F907F906F905F900C94E316CC -:1041D0000E3D1C4509F0DCC10F900F900F900F9021 -:1041E0000F90DF91CF911F910F91FF90EF90DF9093 -:1041F000CF90BF90AF909F908F907F906F905F9087 -:104200000C940A17C8010E94FD0BF82ECFC1092F8C -:104210000F70907F11F00295007F812F2223C9F04B -:10422000002369F090E2910F983010F011110BC04B -:1042300080914604082B009346040E94DC0B812FDA -:104240000E94B10C17C080919B02082B00939B0227 -:10425000F4CF0E94780C002369F00095105E1830AE -:1042600010F0B11027C08091460408230093460443 -:104270000E94DC0B98E0E91AF108E4E0EE16F10484 -:1042800008F039CC0E946F0E0F900F900F900F9096 -:104290000F90DF91CF911F910F91FF90EF90DF90E2 -:1042A000CF90BF90AF909F908F907F906F905F90D6 -:1042B0000C94061680919B02082300939B02D8CF92 -:1042C000892F8F70907F903211F08295807FF1E07E -:1042D000BF120CC0222329F0333060F60E946E0C0E -:1042E000C9CF323038F60E94630CC4CF222341F08C -:1042F0003323A1F340FFA3CF4F70F6014583EECFE8 -:10430000332389F3193309F0F5C0FFEF27EE33E0CB -:10431000F15020403040E1F700C00000812F0E94A2 -:10432000780CA8CF892F86958695837061F08130AF -:1043300009F0A0CF812F9370211102C090E080E09E -:104340000E940A0997CF812F9370211102C090E03B -:1043500080E00E9420098ECF892F8370A1F5211162 -:1043600089CF812F829586958770880F880F412F7E -:104370004F70082E01C0440F0A94EAF7212F2071D4 -:1043800014FF07C02FE030E001C0220F8A95EAF742 -:104390002095969596959370923081F0822F842B7C -:1043A000933030F480919C02913029F0242B8223A9 -:1043B0000E945F0C5FCF842B822BFACF242B80913D -:1043C0009C028227F5CF8695222311F0892F8170D8 -:1043D000882309F44FCF812F829586958770880FA7 -:1043E000880F412F4F70082E01C0440F0A94EAF73E -:1043F000212F207114FF07C02FE030E001C0220FF1 -:104400008A95EAF72095969596959370923081F06B -:10441000822F842B933030F480915D04913029F009 -:10442000242B82230E94A81625CF842B822BFACF1F -:10443000242B80915D048227F5CF092F0F70222352 -:1044400029F0802F0E94C516812F48CF812F0E940E -:10445000630C802F0E94B9160DCF812FE1EF1E173C -:1044600089F1E11750F0F0EF1F17B9F02223B1F1F5 -:104470003111E5CE892F8F7129C042EF141749F110 -:1044800053EF1513F3CF80E0222361F29F7181E097 -:1044900001C0880F9A95EAF7C5CF222379F0323010 -:1044A00008F0E8CE292F2F7181E090E001C0880F3D -:1044B0002A95EAF790915D048927B4CF333008F04C -:1044C000D9CEF0CF892F8F71222321F20E94C516F9 -:1044D000D1CE892F8F712223C9F3BCCF332379F03A -:1044E000893341F48FEF97EEE3E081509040E04054 -:1044F000E1F712CF8FE39CE90197F1F70DCF892FF8 -:104500008F71A8CF0031FFE51F0709F47ECC013180 -:104510002FE5120709F496CC0E94FE08609305036C -:10452000709306038093070390930803F60182813A -:10453000053E110509F417CD08F095CC003E110594 -:1045400009F48ACC08F080CC0C32110509F458CD5E -:10455000F601928191113CCE8091460482720A3C10 -:10456000FCE51F0709F414CE08F06ACD053C3CE5D4 -:10457000130709F4F9CD08F04ECD033C5CE51507AF -:1045800009F4D3CD08F0EBCD023C1C4509F47DCDF8 -:10459000F60100811181992309F434CEC8010E94EB -:1045A0001314F82E682FC8010E94250CB8018F2D16 -:1045B0000E9406140E94720A182FB82EF60122815A -:1045C0004581342F32953F70892F82958F70E82E68 -:1045D000F12C8C3008F04ECEF701E15CF84C0C94D5 -:1045E000D73100313FE5130709F413CC01314FE512 -:1045F000140709F09BCF82E00DCC85E0DE01119617 -:1046000001900D928A95E1F7F601228189819A81C4 -:10461000211186CA0E94FD0B182F8ACA1F93CF93BF -:10462000DF9380916702807FA9F4809164028823E0 -:1046300089F080919902D091680260916202709134 -:104640006302A0916502B0916602C62FC72316E0EF -:10465000D81304C0DF91CF911F91089590E0109777 -:1046600011F0CF3F19F401968770F2CF189F900197 -:10467000199F300D1124F901E759FD4F418147136E -:10468000F2CF40814613EFCF42814111ECCF4381FD -:1046900054814A1B5B0B403A510528F78091670211 -:1046A0008F70806180936702F901E259FD4F80812C -:1046B0008F708061808382E692E00E945B1DDF91B3 -:1046C000CF911F910C94F30BAF92BF92CF92DF92D8 -:1046D000EF92FF920F931F93CF93DF93CDB7DEB787 -:1046E00061970FB6F894DEBF0FBECDBF8C0185E099 -:1046F000F801DE011D9601900D928A95E1F7F8010F -:10470000E28082E6A82E82E0B82E60916502709168 -:1047100066026115710509F432C1909162024091FF -:104720006302892F84238F3F09F429C120813181BD -:10473000C380D480F0906402F601E61BF70BFF20E3 -:1047400009F4E8C080916702582F507FE03AF105E4 -:1047500008F0ABC0511177C0FE2C431321C0921357 -:104760001FC0E1101DC08F70806180936702C5017A -:104770000E945B1D80916702F80185838F2D6196F1 -:104780000FB6F894DEBF0FBECDBFDF91CF911F9162 -:104790000F91FF90EF90DF90CF90BF90AF90089572 -:1047A000CD2829F0822F83238F3F09F003C180E0B9 -:1047B000F82FF170DF2E80FF3CC08091990240916C -:1047C000680256E0841315C02D873E878D859E852F -:1047D0000E944214292F22952F702230F0F02430AD -:1047E00018F59F70F1F0F8019581907FD1F4D12CEC -:1047F0001EC090E0589FF001599FF00D1124E75919 -:10480000FD4F6181361306C06081261303C06281AB -:10481000E6120FC001968770D5CF9F7011F08823E4 -:1048200031F3805E883018F3C8010E945B1DFD2CB7 -:10483000A5CFEE2009F4A2CF80916702816080931A -:104840006702F12C9BCF431306C0921304C0F801FA -:10485000EE2009F479C0C8010E944E14882309F1A2 -:10486000EE20F9F080916702803270F020916202B0 -:104870003091630238872F831986DB86CA868C873E -:10488000CE0107960E945B1D86E0F801A2E6B2E029 -:1048900001900D928A95E1F70E940E23FF24F39474 -:1048A0006DCFC8010E945B1DF9CF51110AC082E68D -:1048B00092E00E945B1D86E0F50111928A95E9F76E -:1048C000C0CF43130FC092130DC0E1100BC0F8010D -:1048D0008583C8010E945B1D86E0F50111928A95CF -:1048E000E9F74CCFC8010E944E148823D1F2EE2084 -:1048F000C1F280916702803238F2209162023091D9 -:1049000063023A8329831B82DD82CC828E83CE01AF -:104910000196B8CFE03AF105F8F6FE2CEE2009F248 -:1049200043131FC092131DC08091670280FD10C009 -:10493000982F907F69F0F8018583903F31F0982F90 -:10494000907F905F8F70892B8583C8010E945B1DCB -:1049500086E0F801A2E6B2E001900D928A95E1F7B7 -:104960000DCFC8010E944E1481118ECF8091670235 -:10497000816080936702C8010E945B1DFFCEEE201C -:1049800009F48FCFC8010E944E14F82E882309F431 -:1049900088CF86E0F801A2E6B2E001900D928A95F8 -:1049A000E1F780916202909163020E9442140E949A -:1049B0000E23E4CE81E08E25FBCE1F93CF93DF93B1 -:1049C000CDB7DEB767970FB6F894DEBF0FBECDBF89 -:1049D0004B8B5C8B6D8B7E8B8F8B611110929B024E -:1049E0001A8A198A85E0FE017396DE011D960190F0 -:1049F0000D928A95E1F786E0FE013D96DE0117965D -:104A000001900D928A95E1F7CE0107960E946423EA -:104A1000882389F016E080919902909168028913A9 -:104A20004BC067960FB6F894DEBF0FBECDBFDF91C7 -:104A3000CF911F91089586E0FE013796DE01119611 -:104A400001900D928A95E1F78A859B85892B11F358 -:104A50008F81988589238F3FE9F22091680230E0A9 -:104A6000C901019687709927409199024817190644 -:104A700081F4109246040E94A70F109268021092CF -:104A8000990286E0E2E6F2E0DF011D928A95E9F7FD -:104A9000C1CF96E0929FD001939FB00D1124A759EA -:104AA000BD4FFE01319601900D929A95E1F78093EA -:104AB00068020E94F30BAECF819FC0011124875979 -:104AC0009D4F0E946423882309F4ABCF8091990203 -:104AD00090E0019687709927809399029CCF0F935D -:104AE0001F93CF93DF93CDB7DEB7A8970FB6F89497 -:104AF000DEBF0FBECDBF81114DC006E0662359F168 -:104B00000CA311E01DA31EA30E94031B8160782F3C -:104B100098A78FA34CA15DA16EA188A50E94DD245A -:104B20000F8F18A319A20E94031B8160782F9BA3EB -:104B30008AA34F8D58A169A18BA10E94DD2481E039 -:104B4000A8960FB6F894DEBF0FBECDBFDF91CF9110 -:104B50001F910F9108950A8F13E01B8F81E08C8FB6 -:104B60000E94031B8160782F9E8F8D8F4A8D5B8DF5 -:104B70006C8D8E8D0E94DD240D8B1E8B1F8A0E94F2 -:104B8000031B8160782F998F888F4D895E896F898B -:104B9000898DD3CF813099F66623F1F016E0188B1A -:104BA000198B8A8B0E94031B8160782F9C8B8B8BC7 -:104BB000488959896A898C890E94DD241B871C8752 -:104BC0001D860E94031B8160782F9F878E874B85EF -:104BD0005C856D858F85B1CF06E00E8318E01F835D -:104BE00088870E94031B8160782F9A8789874E816E -:104BF0005F8168858A850E94DD2409831A831B8270 -:104C00000E94031B8160782F9D838C8349815A8188 -:104C10006B818D8192CFCF92DF92EF92FF920F93B3 -:104C20001F93CF93DF930F92CDB7DEB7EE24E394BB -:104C3000F12C00EC12E09E012F5F3F4F45EB52E05C -:104C400063E082E00E94BE18082F882321F1C09003 -:104C5000F4028C2D90E09C0129503D4F790119817F -:104C6000F9018081181BD12E80E00AC0DA94F70187 -:104C700080818F5F808360E08C2D0E946F25802F64 -:104C80001D14A4F3912F17FD90E0191B11110EC0F4 -:104C900081110E94DA0B802F0F90DF91CF911F912D -:104CA0000F91FF90EF90DF90CF9008951F5FF70175 -:104CB00080818150808361E08C2D0E946F25802F40 -:104CC000E5CF1F921FB61F9211248F939F93AF932E -:104CD000BF9380913D04811113C080913E04909157 -:104CE0003F04A0914004B09141044196A11DB11D23 -:104CF00080933E0490933F04A0934004B0934104FA -:104D0000BF91AF919F918F911F901FBE1F901895DB -:104D1000CDB7DEB7E0970FB6F894DEBF0FBECDBFBC -:104D200084B7877F84BF0FB6F894A8958091600000 -:104D3000886180936000109260000FBE80E890E070 -:104D40000FB6F89480936100909361000FBE85B711 -:104D5000806885BF85B7806885BF84E19AE09093BD -:104D60003902809338020E9470070E943B088091AC -:104D7000E20084608093E200789480915304882359 -:104D8000A1F01091E9001F709091EC00892F8170C3 -:104D900090FD80E8182B1092E9008091E80083FDD7 -:104DA0000E94B00F1F701093E90082E084BD93E071 -:104DB00095BD9AEF97BD80936E001092E10210921C -:104DC000E2021092E3021092E4020E947514811133 -:104DD00002C00E94D1130E944C0E80936101809109 -:104DE0006101882309F4C6C01092760185E28093A0 -:104DF00077010E944C0E81110E94C32F80916101A6 -:104E000081112FC0FE01359686E0DF011D928A9543 -:104E1000E9F786E6898387E98A8386EC8B8384E3D6 -:104E20008C8385E38D833497A7E5B1E0CE010B96A3 -:104E300021912D938E179F07D9F787E0ECE7F1E0DA -:104E4000DE01919601900D928A95E1F7FE01B196EF -:104E5000A0E5B1E0CE01889621912D938E179F0792 -:104E6000D9F78091610195E0811190E09093F20271 -:104E700085E0891B8093F10207E511E08CE5E82EBF -:104E800081E0F82EF80181918F018F3F11F00E948F -:104E9000180AE016F106B1F700E511E0B7E5EB2ED0 -:104EA000B1E0FB2ED8018D918D018F3F11F00E9452 -:104EB000180AE016F106B1F7E7EEF2E081EF92E0B2 -:104EC000ACE3B3E011921D928E179F07D9F70E94B1 -:104ED000AA19811102C00E940A1782E090E00E9484 -:104EE000EE348093310384E090E00E94EE34182F7A -:104EF00082E290E00E94EE34982F812F9093E60298 -:104F00008093E5020E940F1BEFE7FBEB3197F1F76F -:104F100000C000000E940F1B80913C0380FF2EC048 -:104F20006FEF7FEF90E080E00E94203581E080937A -:104F3000E00080E28093D8001092C9008FE19EE4E7 -:104F40000197F1F700C0000087E090EBDC0180934F -:104F5000670690936806A0936906B0936A0688E195 -:104F60009CE00FB6F894A895809360000FBE9093D4 -:104F70006000FFCF85E28093760139CF83E090E037 -:104F80000E94EE340E945F0C80915D040E941E1608 -:104F90000E944C0E811102C00E94C62F83E08093B4 -:104FA0002C0380E280932A040E945B2E6DE070E067 -:104FB00083E592E00E94360D892BE9F580912C0360 -:104FC00063E070E081FDFCC180E592E00E94360D57 -:104FD000892B89F56DE070E080E492E00E94360D47 -:104FE000892B49F50E94FE086058774C8E4F9F4FE1 -:104FF00060933104709332048093330490933404AB -:10500000E5E6F4E080E092E0DF019C011D92215092 -:105010003040E1F7F0936606E09365068FEF9FEF6F -:10502000909364048093630481E0809336048093BA -:10503000350410922D038091F302811136C00E9435 -:10504000AA19811104C00E940A170E94F21688E072 -:1050500090E00E94F63460935E0470935F04809346 -:1050600060049093610480914803836080934803B7 -:105070006E7F71F40E94F21688E090E00E94F63490 -:1050800060935E0470935F04809360049093610466 -:105090000E94680980915E0480FF04C060E08695EC -:1050A0000E94B71581E08093F30280916101811124 -:1050B00006C084EF80936D0185EF80936C01209191 -:1050C0006D01A22FA295AF70B0E091963C9191979F -:1050D0002F7081E090E0BC01022E01C0660F0A949F -:1050E000EAF7462F4095432391964C9391979296D9 -:1050F0003C919297362B92963C93929740916C01FB -:10510000E42FE295EF70F0E031A14F70042E01C062 -:10511000880F0A94EAF7982F9095932391A392A170 -:10512000892B82A390968C9190E002C095958795EB -:105130002A95E2F7817020A130E002C035952795CD -:105140004A95E2F792E020FF90E0892B8093FB02E2 -:105150009091610181E098279093FA02891B8093D6 -:10516000F40280E692E090934B0380934A0360E060 -:105170008AE00E94B71582E691E090933A0480930A -:105180003904A0E46A2ECE0101967C01809153047B -:10519000DD24D39400E112E1853009F45EC10E9460 -:1051A0000F1BC82E81110E94FE08E2E3F3E0ACE37E -:1051B000B3E010E000E0902EBD9081918B1509F4D2 -:1051C0006FC18B25A12CDD24D3949D2D982309F448 -:1051D00062C10E944C0E882399F0A9A29AA2BD2018 -:1051E00081E009F480E08BA30E94031B8160782F8B -:1051F0009DA38CA349A15AA16BA18DA10E94DD247E -:10520000F801EE5CFC4F8081D826D0828091FB02B1 -:10521000E82FEE0FEE0F90916D01A92FA295AF70C0 -:10522000B0E090962C9130E09F7002C035952795A4 -:105230009A95E2F72170332790916C01A92FA295DE -:10524000AF70B0E090964C9150E09F7002C05595C1 -:1052500047959A95E2F7CA018170992740FF02C0ED -:1052600082E090E0822B8E2B8093FB021091FA0259 -:105270008F70E82FF0E0EC5FFD4F80819091F90294 -:10528000890F8093F902D12C84306CF0E12FF0E08B -:10529000E950FD4F80818F5F808360E0812F0E9405 -:1052A0006F25DD24D3948091F9028D3F6CF4E12FBA -:1052B000F0E0E950FD4F80818150808361E0812FD3 -:1052C0000E946F25DD24D3948091F902082E000CF2 -:1052D000990B64E070E00E94A4318093F902D11030 -:1052E0000E94DA0B80913604882351F180912E03BD -:1052F00090912F030E94F41AC29708F0E8C0209101 -:105300006304309164042115310509F046C280918F -:1053100035048823A9F00E94FE0800913104109101 -:1053200032042091330430913404601B710B820BE2 -:10533000930B6F3F7F4F8F4F9F4710F40E94660D76 -:10534000C11001C0D1100E94810D0E946F0E90917A -:105350003003891731F00E946F0E809330030E9452 -:10536000061680915304843009F010CF83E08093B7 -:10537000E9008091E80082FF09CF8091E80090E089 -:1053800085FF0CC00E948F0730E2C32ED12C8E0106 -:105390000F5F1F4F882309F4E1C291E08091E8007C -:1053A0008B778093E800992309F4F0CEE981E150EE -:1053B000E33108F035C3F0E0E55BF84C0C94D731ED -:1053C0008DE492E003CE80915304843009F435C01B -:1053D0000E94660D80E00E9406168091F6028111FF -:1053E00009C0D092F60280915E0481708093F5022C -:1053F0000E94920F10923D04A8E1B0E00FB6F8941D -:10540000A895A09360000FBE6092600083B7817F73 -:10541000846083BF83B7816083BF7894889583B7A6 -:105420008E7F83BF0FB6F894A89580916000886145 -:1054300080936000109260000FBE80915204882318 -:1054400061F00E940F1BECE3F3E08191811112C423 -:1054500026E433E02E173F07C1F7809153048530CF -:1054600009F4B1CF109246040E94A70F0E946F0E5C -:105470000E9406161092F6028091F502882309F424 -:105480008ECE80915E04816080935E0460E086959C -:105490000E94B71584CEA394DD0C37E0A31295CEFD -:1054A0000F5F1F4F0A30110509F085CE8FEF88A7D7 -:1054B00089A71AA60E94031B8160782F9CA78BA73F -:1054C00048A559A56AA58CA50E94DD249FCE0E94FF -:1054D000031B90932F0380932E0360E080E00E94D3 -:1054E00036098091FC0290E090930B0380930A03AD -:1054F0000E946F0E809309030E944C0E882331F1A5 -:1055000040910503509106036091070370910803D1 -:105510002FB7F89480913E0490913F04A0914004ED -:10552000B09141042FBF841B950BA60BB70B8133A1 -:105530009547A105B10540F00E94660D80913604A3 -:10554000882309F4E4CEDBCE0E94810D0E944C0E2C -:1055500062E0882309F4E2C080E00E94360960E03E -:1055600083E891E00E94381363E080E00E943609EE -:1055700080915D040E94250D823009F499C008F0E5 -:105580008EC0882309F494C0813009F497C066E086 -:1055900080E00E94360960E081EA91E00E943813C1 -:1055A00067E080E00E9436096091090366956170AA -:1055B00086EA91E00E94381368E080E00E94360994 -:1055C00060910903609561708BEA91E00E94381345 -:1055D00069E080E00E9436096091090362FB66275A -:1055E00060F98FEA91E00E943813409101035091D5 -:1055F000020360910303709104032FB7F894809124 -:105600003E0490913F04A0914004B09141042FBF0B -:10561000841B950BA60BB70B8D329140A105B105EC -:1056200008F48CCF0E94FE0860930103709302037C -:10563000809303039093040380910003811104C0BD -:1056400080916E01811142C06FE080E00E943609B6 -:1056500060E084EB91E00E9438136CE080E00E94EF -:10566000360981E080936E018091FF0290E00196FF -:10567000817099278093FF0221E030E0281B390BCD -:1056800040E6429FC001439F900D11242091FE02ED -:10569000222351F18E589A4F0E942D074FCF83300D -:1056A00089F0843009F073CF60E085E991E003C0B0 -:1056B00060E089E891E00E94381369CF60E08FE8EC -:1056C00091E0F9CF60E08BE991E0F5CF6CE080E00C -:1056D0000E94360960E084EB91E00E9438136DE08F -:1056E00080E00E943609C0CF2091FD02222319F0EC -:1056F0008E549B4FD1CF20910A0330910B032B3056 -:1057000031051CF48E509C4FC7CF293231051CF453 -:105710008E5C9C4FC1CF8E589D4FBECF80E00E94C3 -:10572000360960E08AEB91E00E94381363E080E084 -:105730000E94360960E080EC91E00E94381367E037 -:1057400080E00E94360982E396E00E942D076DE01A -:1057500080E00E94360980910B038F9380910A03A9 -:105760008F9386EC91E09F938F93FF92EF920E942C -:105770005C3260E0C7010E9438136EE080E00E9456 -:10578000360960E08CEC91E00E9438130F900F9086 -:105790000F900F900F900F90D1CE80912D0361E06C -:1057A00070E08111B4CD082F10E01B01082E02C05B -:1057B000220C331C0A94E2F7A90142215321452B04 -:1057C00009F448C090912C0390FD46C08295880F43 -:1057D00080768093710198013695279536952795A7 -:1057E00020937401815E809372011092750124E60A -:1057F00030E047E050E06FE671E088E70E940A2F52 -:10580000892B09F084CDA801E5E0440F551FEA95E6 -:10581000E1F780912C0380FD2DC04B595B4F04E6CE -:1058200010E020E230E060E488E70E94312F892B0D -:1058300009F06DCD0E94810DC10180959095209059 -:105840006304309064042822392230926404209248 -:1058500063045DCD8F5FA7CF880F880F880F80937B -:10586000710110927401895F8093720183E08093CB -:105870007501BDCFECE0F3E080E2DF011D928A9577 -:10588000E9F7E8E1F2E0F8ABEFA764E1462E62E069 -:10589000562E77E0A72E99249394AFA5B8A96D91C1 -:1058A000B8ABAFA7F20181912F01840F952F911D05 -:1058B0009C012B593B4F3EA72DA7E62FF0E0E45F5C -:1058C000FC4F30E020E07A2C721AB92C022E01C075 -:1058D000BB0C0A94EAF70DA51EA590E0D8018D91A6 -:1058E0008D018B21672D691B6770862E062E000C9B -:1058F000770BB82F01C0BB0F8A94EAF78B2E7195F6 -:10590000619571096770772701C086956A95EAF7F6 -:10591000882A8081882A80829F5F9830F9F62F5FDD -:105920003F4F31962830310571F6ECE1F2E02FA5BA -:1059300038A9E217F30709F0B0CF04E610E020E23F -:1059400030E04CE053E06FCF8091F100D8018D93AF -:105950008D01B1E0CB1AD10809F41FCD8091E80088 -:1059600085FDF2CF8091E8008B778093E8000E945C -:105970008F07882399F311CD1A8289E08B8311C098 -:105980008A81823009F48EC1833089F1813009F037 -:1059900047C00E94FE080E94DD316B837C838D83AB -:1059A0009E8380915304843009F0F0CB1091E9007C -:1059B0001F709091EC00892F817090FD80E8182B6A -:1059C00082E08093E9008091E80080FF0CC050E005 -:1059D00040E060E270E0C7010E94C0078091E800EB -:1059E0008E778093E8001F701093E900CFCBDE0123 -:1059F0001396ECE3F3E081918D9323E0E634F20714 -:105A0000D1F7CFCF8A81823059F46B817C818D812F -:105A10009E810E94DD3186E290E00E940235C1CF76 -:105A20008FEF8983BECF4C816B818A810E94E01306 -:105A30009827892798279E838D83B3CF0D811E8158 -:105A40001027012710278A81CB803EE0C39E60018A -:105A500011249CE8899FC00CD11C11248C8190E0FA -:105A6000880F991FC80ED91E612FC60187960E9404 -:105A70000235602FC6018896D0CF0E94641391CF63 -:105A80008A818138C1F060F4803809F08ACF20E043 -:105A90004B816091600480915F040E94A01481CFCB -:105AA0008238E9F0833809F07CCF20E0409161042E -:105AB0006C818B81F2CF60E08B810E94B7158B8166 -:105AC000811103C00E94920F6CCF80915E048160AF -:105AD00080935E0460E086950E94B71562CF8B814B -:105AE000809362045ECF8A81813899F030F48038E7 -:105AF00009F057CF8091610441CF823891F083380B -:105B000009F04FCF80915F048B83809160048C8378 -:105B100048CF80915E0480FF02C086952FCF80E041 -:105B20002DCF809162042ACF60915E0470915F0452 -:105B300080916004909161040E948E1432CF80E1C4 -:105B40008A832FCF81E08A838DE118CFAA80BB8022 -:105B5000BA24AB24BA248E010F5F1F4FCC80C00E35 -:105B6000D12ED11CC5018D519D4F0C151D0509F479 -:105B700018CFADE1AA16A1E0BA0650F40E94EE34A7 -:105B8000F8018483BFEFAB1ABB0A0F5F1F4FEACF48 -:105B9000D80114961C92F6CF0A811B811027012789 -:105BA0001027FE0131965F01CC80C00ED12ED11C92 -:105BB000C8018D519D4FC016D10609F4F2CE0D31AA -:105BC000F1E01F0728F4D50114966C910E9402356C -:105BD000BFEFAB1ABB0A0F5F1F4FEACF0E945413EF -:105BE000E0CE85E0ADCFAA80BB80BA24AB24BA2436 -:105BF0008E010F5F1F4FCC80C00ED12ED11CC5016E -:105C00008796C016D10609F4CCCEECEBAE16E2E0D6 -:105C1000BE0658F40E94EE34D80114968C93FFEF20 -:105C2000AF1ABF0A0F5F1F4FEACFF8011482F7CFF8 -:105C30000A811B811027012710279E012F5F3F4FEC -:105C40005901CC80C00ED12ED11CC8018796C01638 -:105C5000D10609F4A6CE0C3B32E0130728F4D50197 -:105C600014966C910E940235BFEFAB1ABB0A0F5F0E -:105C70001F4FEBCF09BD19BD09B400FEFDCF8091C8 -:105C8000D8008F7D8093D8008091E000826080935F -:105C9000E0008091E00081FDFCCF109246040E945C -:105CA000A70FDBCB86E290E00E94EE341B821C82C1 -:105CB0001D828E8376CE1092B9008CE08093B8005E -:105CC00008959F92AF92BF92CF92DF92EF92FF9290 -:105CD0000F931F93CF93DF93B82EEB010E94031B0A -:105CE0006C01EE24E394F12CC431D10560F025E081 -:105CF000E22EF12CCF3FDC0731F0CE0164E170E001 -:105D00000E9484317B0184EAA82E94E8992E109297 -:105D1000BC00A092BC000E94031B8C018091BC00BF -:105D200087FF0DC08091B900887F883039F180915C -:105D3000B900887F803111F10FEF1FEF09C00E9479 -:105D4000031B801B910B8E159F0540F30EEF1FEF79 -:105D5000CF3FDC07E1F2C6010E94F41A8C179D07C1 -:105D6000B0F2C801DF91CF911F910F91FF90EF909A -:105D7000DF90CF90BF90AF909F900895B092BB00FE -:105D80009092BC000E94031B8C018091BC0087FF95 -:105D90000AC08091B900887F883111F0803461F6A3 -:105DA00010E000E0DECF0E94031B801B910B8E15DC -:105DB0009F0558F3CBCF0F931F93CF93DF93EB0146 -:105DC0008093BB0084E88093BC000E94031B8C017D -:105DD0008091BC0087FF11C02091B900287F81E02D -:105DE00090E0283211F490E080E09195819591093E -:105DF000DF91CF911F910F910895CF3FDC0741F3C1 -:105E00000E94031B801B910B8C179D0708F38EEFDC -:105E10009FEFEECFCF92DF92EF92FF920F931F93FF -:105E2000CF93DF936B018A017901B9010E94612E42 -:105E3000E6010C0D1D1DC017D10761F424E9209364 -:105E4000BC00DF91CF911F910F91FF90EF90DF90F9 -:105E5000CF90089597FDF2CFB70189910E94DB2E74 -:105E6000EACFCF92DF92EF92FF920F931F93CF93DF -:105E7000DF93C62F6A017901B8010E94612E97FD58 -:105E80000CC0B8018C2F0E94DB2EE601EC0CFD1C2F -:105E9000CE15DF0511F097FF0CC024E92093BC005C -:105EA000DF91CF911F910F91FF90EF90DF90CF90F6 -:105EB0000895B80189910E94DB2EEACF84E980938E -:105EC000BC0008958EE14A9B02C08150E1F74A9BD5 -:105ED000FECF08955A9880E28A95F1F75A9A08956C -:105EE000FC013BE03A95F1F798E020E080E031E0FA -:105EF00040E14A95F1F7880F4A9B02C08160232751 -:105F000042E04A95F1F7000040E14A95F1F79150DF -:105F100079F790E19A95F1F799B132E03A95F1F776 -:105F2000000040E14A95F1F792FB992790F99227FA -:105F30002081920F90830895EF92FF920F931F9309 -:105F4000CF93DF930F92CDB7DEB719828C017C011E -:105F5000E60EF11C0E151F0561F481E09981911187 -:105F600080E00F90DF91CF911F910F91FF90EF9004 -:105F700008950E94622FCE0101960E94702FF801B1 -:105F800081938F01E7CF529A5A9A089552985A9A5C -:105F9000EA9AE9E6F0E080818F7C80830895615081 -:105FA000770B91E001C0990F6A95EAF720E031E0A4 -:105FB000911108C0222391F05A9A80E28A95F1F754 -:105FC0005A980895492F482339F05A9A232740E2D6 -:105FD0004A95F1F79695ECCF5A98F9CF5A98EDCFAC -:105FE000FF920F931F93CF93DF93EC018C01060F69 -:105FF000111DC017D10731F4DF91CF911F910F917F -:10600000FF900895F9900E946A2F68E08F2D0E94FA -:10601000CF2FEFCF1F920F920FB60F921124EF9256 -:10602000FF920F931F932F933F934F935F936F9321 -:106030007F938F939F93AF93BF93EF93FF93CF93F0 -:10604000DF930F92CDB7DEB719820E94622FCE0187 -:1060500001960E94702FA82FA695A695A695282F89 -:10606000229525709A2F9570290F922F937026955F -:106070002695920F982797708981982B09F075C003 -:10608000A93008F072C080E18A95F1F75A9A529AC5 -:10609000B2E0BA95F1F700C05A98EA2EF12CEAE086 -:1060A000AE9FD0011124A050BF4F1896ED91FC91E6 -:1060B00019973097B1F06091020270910302169621 -:1060C0002D913C911797260F371F13968D919C9118 -:1060D0001497680F791F15964C91159712968C910D -:1060E00009958AE08E9DF0018F9DF00D1124E050FE -:1060F000FF4F6581662351F0209102023091030227 -:1061000086819781820F931F0E94F02F0E946A2F31 -:10611000F0E1FA95F1F75A9852985A9A80E18A95E7 -:10612000F1F78AE08E9D80018F9D100D11240050A3 -:106130001F4FD80112966C911297662371F120912E -:1061400002023091030213968D919C91820F931F4E -:106150000E949C2FD801ED91FC91882311F088E0DA -:1061600001C082E080830E94622F0F90DF91CF9167 -:10617000FF91EF91BF91AF919F918F917F916F911F -:106180005F914F913F912F911F910F91FF90EF9051 -:106190000F900FBE0F901F901895ED91FC91DFCFDF -:1061A0000F931F93CF93DF93EC0109970CF0A9C0D5 -:1061B0008AE08C9FF0018D9FF00D1124E050FF4F7D -:1061C00080819181892B09F49CC0F894529A5A9845 -:1061D00085E08A95F1F700008C2F869585709C2FBD -:1061E0009570890F982F937086958695890F8E01EB -:1061F00093E0000F111F9A95E1F7082B0E946A2F78 -:1062000000C068E0802F0E94CF2FA0E1AA95F1F78F -:1062100052985A9A4A9B27C087E090E04A9925C035 -:106220008AE08C9F80018D9F100D112400501F4F1C -:10623000F80165816623A1F12091020230910302E9 -:1062400086819781820F931F0E949C2F811128C005 -:10625000529A5A9AD801ED91FC9182E08083789409 -:1062600082E090E016C000C0D5CF0197B9F4529AF1 -:106270005A9A8AE08C9FF0018D9FF00D1124E05016 -:10628000FF4F0190F081E02D81E08083789481E0E0 -:1062900090E0DF91CF911F910F91089500C0BECF84 -:1062A0000E94622FB0E2BA95F1F75A98529AE0E153 -:1062B000EA95F1F78AE08C9FF0018D9FF00D112493 -:1062C000E050FF4F6281662351F02091020230912D -:1062D000030283819481820F931F0E94F02F0E94FA -:1062E0006A2F8AE08C9FF0018D9FF00D1124E05001 -:1062F000FF4F0190F081E02D1082789490E080E0D3 -:10630000C8CF84E090E0C5CFAA1BBB1B51E107C0FA -:10631000AA1FBB1FA617B70710F0A61BB70B881F35 -:10632000991F5A95A9F780959095BC01CD010895C4 -:10633000991B79E004C0991F961708F0961B881FD7 -:106340007A95C9F78095089597FB072E16F4009467 -:1063500007D077FD09D00E94843107FC05D03EF4B8 -:10636000909581959F4F0895709561957F4F089501 -:10637000052E97FB1EF400940E94CF3157FD07D0E5 -:106380000E94E43107FC03D04EF40C94CF315095B9 -:106390004095309521953F4F4F4F5F4F0895909511 -:1063A0008095709561957F4F8F4F9F4F0895EE0FA9 -:1063B000FF1F0590F491E02D09946927962769271E -:1063C0007827872778270895A1E21A2EAA1BBB1BDE -:1063D000FD010DC0AA1FBB1FEE1FFF1FA217B307B1 -:1063E000E407F50720F0A21BB30BE40BF50B661FC7 -:1063F000771F881F991F1A9469F76095709580958B -:1064000090959B01AC01BD01CF0108952F923F9261 -:106410004F925F926F927F928F929F92AF92BF92B4 -:10642000CF92DF92EF92FF920F931F93CF93DF9360 -:10643000CDB7DEB7CA1BDB0B0FB6F894DEBF0FBEBD -:10644000CDBF09942A88398848885F846E847D840A -:106450008C849B84AA84B984C884DF80EE80FD800C -:106460000C811B81AA81B981CE0FD11D0FB6F89482 -:10647000DEBF0FBECDBFED010895FB01DC0102C000 -:1064800005900D9241505040D8F70895FB01DC0172 -:1064900004C08D910190801921F441505040C8F7FB -:1064A000881B990B0895FB01DC0102C001900D923D -:1064B00041505040D8F70895AEE0B0E0E2E6F2E394 -:1064C0000C9414320D891E8986E08C831A8309830B -:1064D0008FEF9FE79E838D83AE01475E5F4F6F898D -:1064E000788DCE0101960E947F322F813885020F70 -:1064F000131FF80110822E96E4E00C943032ABE0CA -:10650000B0E0E5E8F2E30C9406327C013B018A013D -:10651000FC0117821682838181FFB9C19AE0292E7E -:10652000CE0101965C01F7019381F30193FD859102 -:1065300093FF81913F01882309F446C1853239F4E4 -:1065400093FD859193FF81913F01853229F4B70135 -:1065500090E00E946034E7CF912C412C512CFFE158 -:10656000F51538F08B3209F188F4803201F183326D -:1065700021F157FC3AC020ED280F2A3040F556FE95 -:106580001FC0929C200D1124922E06C08D3291F0D6 -:10659000803379F7689450F8F30193FD859193FF68 -:1065A00081913F018111DBCF20C0689451F868943C -:1065B00052F8F2CF689453F8EFCF689454F8ECCFC8 -:1065C000429C200D1124422E689455F8E5CF8E325E -:1065D00029F456FCF9C0689456F8DECF8C3619F4CD -:1065E000689457F8D9CF8836B9F2982F9F7D955483 -:1065F0009330C0F08336A1F18337C1F1833509F0C0 -:106600005BC0F801C190D1908F01692D70E056FCFC -:1066100002C06FEF7FEFC6010E944A344C016894BC -:1066200057F80AC00C5F1F4F2FE3298388248394F7 -:10663000912C6501E89457F853FC04C048141904E0 -:1066400009F018F5342C8114910431F5332009F444 -:106650006ACFB70180E290E00E9460343A94F6CFAE -:10666000F801808189830E5F1F4FE0CFF801C19050 -:10667000D1908F01692D70E056FC02C06FEF7FEF63 -:10668000C6010E9455344C01D5CFB70180E290E09D -:106690000E9460344A94D2CFF60157FC859157FE90 -:1066A00081916F01B70190E00E94603431103A94FB -:1066B000F1E08F1A9108C7CF843619F0893609F0B6 -:1066C00074C0F80157FE6AC06191719181919191F6 -:1066D0008F01252D2F76D22E97FF09C0909580959A -:1066E000709561957F4F8F4F9F4F6894D7F82AE040 -:1066F00030E0A5010E949034C82ECA188C2C5D2C65 -:10670000D6FE0CC0E89450F8C91440F4D4FE05C07D -:10671000D2FC03C0FD2DFE7E5F2E892C54FE8FC05F -:10672000FE01EC0DF11D8081803309F081C0252D23 -:10673000297E522E852D8870382E53FC8FC050FE36 -:1067400089C09C2C841418F44C0C942C981854FE7A -:106750008BC0B70180E390E00E94603452FE09C014 -:1067600088E790E051FE02C088E590E0B7010E9402 -:106770006034C91408F484C0CA94D12C9FEFC91A9C -:10678000D90ACA0CDB1CF60182916F01B70190E0B7 -:106790000E946034AC14BD04B1F758CF619171917F -:1067A000072E000C880B990B93CFD52CE894D4F8C6 -:1067B0002AE030E0853739F1952D997FD92E8F3633 -:1067C00001F148F48835A9F0F701868197812B966D -:1067D000E2E10C942232803749F08837A9F7D4FEE1 -:1067E00002C06894D2F820E130E00DC06894D4F87B -:1067F000F6CF54FE03C0E92FE660DE2E20E132E042 -:1068000002C028E030E0F801D7FE0DC0619171911F -:10681000819191918F01A5010E949034C82ECA18D0 -:10682000E894D7F86BCF6191719190E080E0F2CF5E -:1068300052FC02C083947ECF839483947BCF852DBA -:10684000867809F477CFF6CFB70180E290E00E9416 -:10685000603483948414C0F3312C79CF342C3818ED -:10686000841408F474CFF8CF852D867809F481CF8D -:106870008BE251FE80E257FC8DE2B70190E077CFCA -:10688000B70180E390E00E9460349A9472CF8FEF5A -:106890009FEF9DCFFC010590615070400110D8F72B -:1068A000809590958E0F9F1F0895FC016150704058 -:1068B00001900110D8F7809590958E0F9F1F089535 -:1068C0000F931F93CF93DF93182F092FEB018B8129 -:1068D00081FD09C01FEF0FEF812F902FDF91CF9126 -:1068E0001F910F91089582FF14C02E813F818C81EA -:1068F0009D81281739073CF4E881F981CF01019681 -:106900009983888310838E819F8101969F838E83D4 -:10691000E3CFE885F985812F0995892BA1F3DACF9B -:10692000FA01AA27283051F1203181F1E8946F93C0 -:106930006E7F6E5F7F4F8F4F9F4FAF4FB1E03ED066 -:10694000B4E03CD0670F781F891F9A1FA11D680F04 -:10695000791F8A1F911DA11D6A0F711D811D911D37 -:10696000A11D20D009F468943F912AE0269F1124AC -:106970003019305D3193DEF6CF010895462F477010 -:10698000405D4193B3E00FD0C9F7F6CF462F4F706B -:10699000405D4A3318F0495D31FD4052419302D0C9 -:1069A000A9F7EACFB4E0A69597958795779567956F -:1069B000BA95C9F700976105710508959B01AC016F -:1069C0000A2E06945795479537952795BA95C9F796 -:1069D000620F731F841F951FA01D0895F999FECFA4 -:1069E00092BD81BDF89A992780B50895A6E1B0E0DF -:1069F00044E050E00C942835A8E1B0E042E050E0DB -:106A00000C942835262FF999FECF92BD81BDF89AB6 -:106A1000019700B4021639F01FBA20BD0FB6F894E2 -:106A2000FA9AF99A0FBE08950396272F0E9403350C -:106A30000E940235252F0E940335242F0C94033524 -:106A40000196272F0E9403350C940235DC01CB01FF -:106A5000FC01F999FECF06C0F2BDE1BDF89A31966E -:106A600000B40D9241505040B8F708955058BB27DC -:106A7000AA270E944E350C9466360E94583638F08C -:106A80000E945F3620F039F49F3F19F426F40C94ED -:106A900055360EF4E095E7FB0C942636E92F0E945C -:106AA000773658F3BA17620773078407950720F003 -:106AB00079F4A6F50C94B1360EF4E0950B2EBA2FAE -:106AC000A02D0B01B90190010C01CA01A0011124F4 -:106AD000FF27591B99F0593F50F4503E68F11A16A0 -:106AE000F040A22F232F342F4427585FF3CF469531 -:106AF00037952795A795F0405395C9F77EF41F1653 -:106B0000BA0B620B730B840BBAF09150A1F0FF0F1C -:106B1000BB1F661F771F881FC2F70EC0BA0F621F08 -:106B2000731F841F48F4879577956795B795F795F8 -:106B30009E3F08F0B0CF9395880F08F09927EE0F8D -:106B40009795879508950E94993690F09F3748F45D -:106B5000911116F40C94B23660E070E080E89FE387 -:106B6000089526F01B16611D711D811D0C942C3695 -:106B70000C9447360E947F3688F09F5798F0B92FC3 -:106B80009927B751B0F0E1F0660F771F881F991F62 -:106B90001AF0BA95C9F714C0B13091F00E94B1361D -:106BA000B1E008950C94B136672F782F8827B85F2D -:106BB00039F0B93FCCF3869577956795B395D9F7BA -:106BC0003EF490958095709561957F4F8F4F9F4FC4 -:106BD0000895E89409C097FB3EF4909580957095D0 -:106BE00061957F4F8F4F9F4F9923A9F0F92F96E919 -:106BF000BB279395F695879577956795B795F1118E -:106C0000F8CFFAF4BB0F11F460FF1BC06F5F7F4F2A -:106C10008F4F9F4F16C0882311F096E911C077233C -:106C200021F09EE8872F762F05C0662371F096E845 -:106C3000862F70E060E02AF09A95660F771F881F14 -:106C4000DAF7880F9695879597F9089597F99F67D2 -:106C500080E870E060E00895882371F4772321F0E4 -:106C60009850872B762F07C0662311F499270DC003 -:106C70009051862B70E060E02AF09A95660F771F9E -:106C8000881FDAF7880F9695879597F908959F3FA3 -:106C900031F0915020F4879577956795B795880FD7 -:106CA000911D9695879597F908959FEF80EC08952B -:106CB00000240A94161617061806090608950024DB -:106CC0000A9412161306140605060895092E039455 -:106CD000000C11F4882352F0BB0F40F4BF2B11F4C9 -:106CE00060FF04C06F5F7F4F8F4F9F4F089557FD28 -:106CF0009058440F551F59F05F3F71F04795880F2A -:106D000097FB991F61F09F3F79F0879508951216C0 -:106D100013061406551FF2CF4695F1DF08C016166C -:106D200017061806991FF1CF86957105610508941D -:106D300008950E947F36A0F0BEE7B91788F4BB27FC -:106D40009F3860F41616B11D672F782F8827985F3B -:106D5000F7CF869577956795B11D93959639C8F3CA -:106D60000895E894BB2766277727CB0197F9089504 -:106D70000E94CB360C9466360E94583638F00E943A -:106D80005F3620F0952311F00C9426360C9455367E -:106D900011240C94B2360E94773670F3959FC1F39C -:106DA000950F50E0551F629FF001729FBB27F00DB9 -:106DB000B11D639FAA27F00DB11DAA1F649F66270E -:106DC000B00DA11D661F829F2227B00DA11D621F5D -:106DD000739FB00DA11D621F839FA00D611D221F17 -:106DE000749F3327A00D611D231F849F600D211DFB -:106DF000822F762F6A2F11249F5750409AF0F1F07E -:106E000088234AF0EE0FFF1FBB1F661F771F881FE6 -:106E100091505040A9F79E3F510580F00C942636C2 -:106E20000C94B2365F3FE4F3983ED4F386957795A1 -:106E30006795B795F795E7959F5FC1F7FE2B880F8C -:106E4000911D9695879597F90895F894FFCF97101F -:106E5000BF101211BF101211F2102A1112112712B5 -:106E6000341260146014691469146B146914691481 -:106E70006914601460147014691469147014072183 -:106E800007216021602192213A213A213A21AC2147 -:106E90001D222D222D22BC2CC02C022D132D1E2D87 -:106EA0003D2D402D732D942D102D102D9F2DA22D95 -:0C6EB000A62DCC2DEE2DF12DF32D182E6B -:106EBC004202000000010000000042020000000538 -:106ECC000100000042020000000106000000420226 -:106EDC00000000010700000042020408000000004E -:106EEC0000004202090C00000000000042020115E3 -:106EFC00000000000000420201160000000000002B -:106F0C0036323331F7F6676697C634350000000029 -:106F1C000001FB08DB0DFA08D70DD30DF4F50100C9 -:106F2C0021007F220003004A004A4A01F6F7313360 -:106F3C003236674C41594552004261736520004717 -:106F4C00616D6520005261697365004C6F776572E5 -:106F5C00004C4F434B0043617073004E756D0053F2 -:106F6C0063726C00202020202000534F4C415200B3 -:106F7C00544D505354002025303364002077706DED -:106F8C0000818283E200E900EA00B500B600B70098 -:106F9C00CD008301CC008A019201940121022302CD -:106FAC0024022502260227022A02B300B4006F0035 -:106FBC007000B90200FF0100010000FFFF0000019A -:106FCC000001FF0000081018181008000001020250 -:106FDC00020202020202020240223250012E01FC85 -:086FEC0000370D500D700D007F +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000AF00AE09029D +:100BF0005B00030100A0FA090400000103010100E9 +:100C00000921110100012240000705810308000AA3 +:100C10000904010002030000000921110100012262 +:100C200022000705820320000107050303200001BD +:100C30000904020001030000000921110100012242 +:100C40007B000705840320000A1201000200000057 +:100C50000832FC87120200010200011E0353006FDC +:100C6000006C00610072006900750073005F005342 +:100C7000006F0066006C006500000010034B00650B +:100C8000007900680069007600650000000403092F +:100C9000040011241FBECFEFDAE0DEBFCDBF04B6E3 +:100CA00003FE27C08091700690917106A091720694 +:100CB000B09173068730904BA740B04BD1F410929F +:100CC000700610927106109272061092730614BE8E +:100CD00084B7877F84BF0FB6F894A8958091600091 +:100CE000886180936000109260000FBEE0E0F8E33E +:100CF000099512E0A0E0B1E0E0EDF9E602C0059050 +:100D00000D92A632B107D9F726E0A6E2B2E001C003 +:100D10001D92A037B207E1F70E945F260C94AF3412 +:100D20000C940000CF93DF9340916E0650916F06B4 +:100D30004E5654409A01205A3F4F21303240C0F065 +:100D400020E032E0241B350B60916C0470916D043F +:100D5000FC01CA01240F351FC1E0D0E082179307C0 +:100D600050F070936D0460936C04DF91CF910895FF +:100D700020E630E0E9CF4491DC01A259BB4F5C9101 +:100D8000451781F04C93AC01A5E056954795AA957F +:100D9000E1F7DE0102C0AA0FBB1F4A95E2F7AD01E1 +:100DA0006A2B752B01963196D9CFE8EDF0E0808162 +:100DB0008E7F80831092E2001092DA001092E100A0 +:100DC000A0EEB0E08C9181608C9380818F778083DE +:100DD00019BCA7EDB0E08C918E7F8C9380818F7EC3 +:100DE000808310924E0408952091E4003091E50034 +:100DF00095E6A9012091EC00822F817020FF06C0AA +:100E00008091E80080FF06C080E008952091E8000E +:100E100022FD1AC080915C04882389F0853089F016 +:100E20008091EB0085FD0FC02091E4003091E5003A +:100E300042175307F9F29150E1F684E0089582E0F9 +:100E4000089583E0089581E00895EF92FF920F9353 +:100E50001F93CF937C018B010E94F406C82F811150 +:100E600017C08091E80085FD0BC08091E8008E7767 +:100E70008093E8000E94F406882399F3C82F08C0E5 +:100E8000F70181917F018093F1000150110949F729 +:100E90008C2FCF911F910F91FF90EF90089580912B +:100EA0005E0487FF13C08091E80082FF06C0809136 +:100EB000E8008B778093E80004C080915C04811186 +:100EC000F2CF089580915C048823D9F38091E800E3 +:100ED00080FFF8CF8091E8008E77ECCF982F909329 +:100EE000E900242F762F50E0891731F07091EC0043 +:100EF0002091ED005091F00021FD07C09F5F9730D9 +:100F000071F78093E90081E008953091EB003E7F16 +:100F10003093EB003091ED003D7F3093ED00309148 +:100F2000EB0031603093EB007093EC002093ED0008 +:100F30005093F0002091EE0027FDE0CF80E008956F +:100F4000CF92DF92EF92FF920F931F93CF93DF9395 +:100F5000C8EDD0E088818F7E8883E7EDF0E0808166 +:100F60008160808384E082BF81E080934E04888129 +:100F70008E7F888302EE10E0F80110821092DA0072 +:100F800081EEC82ED12CF601108288818F7788835C +:100F900088818068888388818F7D888319BC1092BE +:100FA0005C0410925D0410925B0410925A0490EE5F +:100FB000E92EF12CF70180818B7F8083888181600D +:100FC000888342E060E080E00E946E07F601808145 +:100FD0008E7F8083F801808181608083808188603A +:100FE0008083F70180818E7F808388818061888300 +:100FF000DF91CF911F910F91FF90EF90DF90CF90F5 +:101000000895FC0180916404909165048617970708 +:10101000A0F06115710529F49091E8009E779093F6 +:10102000E80090E06115710551F4911108C08091BC +:10103000E80082FF34C080E00895BC01F2CF8091C7 +:101040005C048823C1F18530C1F18091E80083FD03 +:1010500030C08091E80082FDEACF8091E80080FFF7 +:10106000E1CF8091F3002091F200382F61157105D6 +:1010700019F02830310558F091E02830310509F099 +:1010800090E02091E8002E772093E800CBCF81916B +:101090008093F100615071092F5F3F4FE7CF80913E +:1010A0005C04882341F0853041F08091E80083FFA3 +:1010B000BECF81E0089582E0089583E00895809195 +:1010C000510408952FB7F894609147047091480433 +:1010D0008091490490914A042FBF089520914404BF +:1010E000309145042817390771F090934504809397 +:1010F0004404E0914204F0914304309721F00084CD +:10110000F185E02D09940895209140043091410427 +:101110002817390771F09093410480934004E091BF +:101120004204F0914304309721F00680F781E02DCE +:10113000099408952091330436E0839FC00111245F +:10114000629F800D911D1124811522E0920714F0F9 +:1011500090E080E082599B4F90936F0680936E06DB +:101160000895FC01680F791F8FEF91E32191822789 +:1011700028E030E087FF09C0880F89272150310916 +:10118000C9F7E617F70791F70895880FF7CFFA0127 +:10119000811101C0FB01099480916704982F9E7F03 +:1011A00061F4817082608093670480916A04813A5F +:1011B00018F080EA80936A0408958831B0F3817052 +:1011C0008661F1CFAF92BF92DF92EF92FF920F93C1 +:1011D0001F93CF93DF93082F162FE901E42FF0E040 +:1011E000E55AFA4F611110C0E4915E2F4E2F4983EA +:1011F000E8835A83DF91CF911F910F91FF90EF9079 +:10120000DF90BF90AF900895E62EF12C4491D42E3C +:10121000E42FF0E026E0829FC00111242FEF30E0A0 +:10122000B9010E94E332802F90E0880F991F55E5A5 +:10123000569FD001579FB00D11248A1B9B0B982FEE +:10124000990F890F5901AE18BF08AE9ED001AF9E0D +:10125000B00DBE9EB00D11245B2F189F800111248C +:10126000012F11275901A01AB10AAE9E8001AF9E2D +:10127000100DBE9E100D11245901A81AB108AE9C84 +:10128000C001AF9C900DBE9C900D1124892F992711 +:10129000281B390B2E9FC0012F9F900D3E9F900D54 +:1012A0001124E92F62307105A1F050F46115710528 +:1012B00009F49DCF6130710581F0EB2F512F97CF4D +:1012C0006430710569F080F06630710509F48FCFE4 +:1012D000F4CFE42F4B2F592F8ACFE42F412F87CF04 +:1012E000EB2F542F492F83CF4B2F5D2DE12F7FCF35 +:1012F00080E0089578940895F894E82FE295EF70CF +:10130000F0E031A1282F2F7081E090E001C0880F1C +:101310002A95EAF7982F9095932391A392A1892B70 +:1013200082A30C947A099091CC0292FF06C0282FD8 +:1013300028712830F9F4877F846093FF06C0282F36 +:1013400028712831F1F4877E84612091CD0220FF3D +:1013500006C0382F38713830D9F4877F816021FF7B +:1013600006C0282F28712831D1F4877E816194FD31 +:10137000877E0895282F24712430F9F68B7F8860AA +:10138000DCCF282F2471243101F78B7E8861DDCFDB +:10139000382F3171313019F78E7F8860E0CF282FD8 +:1013A0002171213121F78E7E8861E1CFCF93DF93C8 +:1013B000EC018238910581F1B0F58133910509F492 +:1013C00091C020F58932910509F485C08A9709F406 +:1013D00090C0C11521E5D20708F0AAC0C11530E5BB +:1013E000D30708F0F2C0CF3BD10508F089C0C83A56 +:1013F000D10508F0DFC0C53AD10508F0D3C0C4302C +:10140000D105F8F4C130D105E1F040C08533910534 +:1014100009F45AC0C997E9F68091CC02837089F02B +:10142000C0EED0E00EC0833E910599F170F4803E8D +:10143000910501F1823E910561F68091CC0282FD19 +:1014400021C0CE01DF91CF910895863E910561F1D3 +:10145000873E910571F1843E910509F0BACF8091E4 +:10146000CD0281FFEECF8091CC02C7EED0E084FDAB +:101470000DC0E7CF8091CC0280FDF7C09091CD02E6 +:1014800090FFDFCFC3EED0E084FFDBCFD0E0C0E041 +:10149000D8CF8091CC0282FDEBC09091CD0290FD1F +:1014A000BFCF84FFCECFF2CF8091CC0283FDDDCFC2 +:1014B000C8CF8091CC0283FDDEC09091CD0291FF18 +:1014C000F0CFC4EED0E0BDCF8091CC0285FFB9CF84 +:1014D000C9E2D0E0B6CF8091CC0285FFB2CFC5E3A0 +:1014E000D0E0AFCF8091CC0286FFABCFCAE2D0E094 +:1014F000A8CF8091CC0286FFA4CFC1E3D0E0A1CFDA +:10150000C11540E2D40760F4C11581E0D80708F0A6 +:1015100098CFCE01815E9109079708F492CFB6CF9C +:10152000C11590E4D90708F4B1CFDF70D06A89CF34 +:10153000C11524E5D20778F4C11533E5D30708F0C7 +:1015400072C0C11542E5D40708F05CC0DC2FCC277F +:10155000C16FD06A76CFC1158AE5D80778F4C11576 +:1015600099E5D90708F073C0C11528E5D20708F43A +:101570008DCFDC2FCC27C06FD06A63CFCE019056C1 +:101580008115904208F082CF8D2F8F710E949309B0 +:1015900090E0982F882788279F719C012C2BE901C8 +:1015A000D0624FCFC55AD0E0C154DE4FC881D0E0E1 +:1015B000D06447CFC85AD0E0CC0FDD1FCE53DE4FEA +:1015C0000990D881C02DD4643CCFCE0164E09695BB +:1015D00087956A95E1F783702C2F269526952370C1 +:1015E00040E2249F90011124382B8C2F8370C1E09E +:1015F000D0E002C0CC0FDD1F8A95E2F7C22BD32BBF +:10160000DC681FCFCE018370992721E030E002C053 +:10161000220F331F8A95E2F7C695C69580E2C89FD0 +:10162000E0011124EBCFCE018370992721E030E057 +:1016300002C0220F331F8A95E2F7C695C69590E245 +:10164000C99FE0011124C22BD32BDA68FACE8C2F6C +:101650008F700E94930934E0D695C7953A95E1F7CB +:10166000CF709C2FEC01D069ECCEC9E3D0E0E9CE7D +:10167000C2EED0E0E6CEC6EED0E0E3CE0C94620837 +:1016800080914F0490918902892B90918802892B37 +:1016900080932802E0914204F0914304309731F0A6 +:1016A0000280F381E02D88E292E009940895809110 +:1016B000870290915602981301C008958F5F87703A +:1016C000FACF27E0929F800D1124982F977086956E +:1016D0008695869523E0829FF0011124EB5CFD4FF7 +:1016E00050E040E080E0219130E0092E02C03695C4 +:1016F00027950A94E2F721703327042E01C0220FA8 +:101700000A94EAF7822B4F5F5F4F4330510559F738 +:10171000089527E0929F800D1124982F977041E043 +:1017200001C0440F9A95EAF786958695869593E0D1 +:10173000899FF0011124EB5CFD4F90E080E070E0A8 +:101740005191DF0111979B01082E02C03695279514 +:101750000A94E2F7217021952527242325272C932D +:1017600001968330910561F7089590E080E00E9432 +:10177000840890E080E00E946E0810928902109226 +:1017800088020C94400B80938A020C94B50B88233A +:1017900041F0809590914F04892380934F040C94DD +:1017A000400B0895882339F090914F04982B909323 +:1017B0004F040C94400B08958823B1F19CEF980FCF +:1017C000913A70F4EAE2F2E09191891303C0DF01EB +:1017D00011971C9242E0E033F407B1F70C94400BF0 +:1017E00090E2980F983088F4877021E030E0A901EA +:1017F00002C0440F551F8A95E2F7CA018095909167 +:101800004F04892380934F04E9CF9BE5980F9330D1 +:1018100020F490E080E00C948408885A873120F40A +:1018200090E080E00C946E0808950F931F93CF937F +:10183000C82F882309F469C08CEF8C0F813AB0F56A +:101840000AE212E080E392E0F8012191C21701F16F +:1018500022E0E033F207C9F7EFEF80E0D8019D9175 +:101860008D01C91781F0EF3F19F4911101C0E82FE4 +:101870008F5F863099F7EF3F31F00E2E000CFF0B93 +:10188000E85DFD4FC283CF911F910F910C94400BE7 +:10189000EAE2F2E02191C21303C0DF0111971C922A +:1018A0008E179F07B9F70E94400BD6CF80E28C0FAE +:1018B000883068F4C77021E030E001C0220FCA957B +:1018C000EAF780914F04822B80934F04DCCFEBE545 +:1018D000EC0FE33050F4F0E0E154FE4F808190E0F3 +:1018E000CF911F910F910C948408C85AC73168F4A6 +:1018F000EC2FF0E0EE0FFF1FEE53FE4F8081918141 +:10190000CF911F910F910C946E08CF911F910F9161 +:101910000895982F92959F7011F0892F94E0282FA9 +:101920002695269511F09E5F822F869509F09F5F80 +:10193000892F0895CF93DF93CDB7DEB762970FB6A7 +:10194000F894DEBF0FBECDBF96E0EAE1F3E0DE0122 +:10195000179601900D929A95E1F796E0FE01379661 +:10196000DE011D9601900D929A95E1F798858823E6 +:10197000E9F0962B9E8786E0FE013D96DE011196EA +:1019800001900D928A95E1F786E0FE013196AAE179 +:10199000B3E001900D928A95E1F762960FB6F89444 +:1019A000DEBF0FBECDBFDF91CF9108956095962326 +:1019B000E1CFDC01FB0180819181803891054CF001 +:1019C0008FE78C93808191818F57910991838083D8 +:1019D000089581382FEF92073CF481E88C93808141 +:1019E000918181589F4FF2CF8C931182108208957C +:1019F000681708F5861B682F21E0469FA001112477 +:101A0000649FF001659FF00D1124409159015091A0 +:101A10005A01E49FC001E59F900DF49F900D1124A1 +:101A2000880F892F881F990B9195222319F0919582 +:101A3000819591090895681B20E0DFCF0F931F93D4 +:101A4000CF93DF9300D000D0CDB7DEB789836A8310 +:101A50004B831C8204E610E024E030E0AE014F5FCF +:101A60005F4F60E084E10E9441300F900F900F9033 +:101A70000F90DF91CF911F910F91089580912803CE +:101A8000882329F047E669E98BE20C941E0D6091EA +:101A9000590170915A0190E080E00E94903320E05B +:101AA00030E040E05CE30E94F13320E030E040E8C9 +:101AB0005FE30E948B33882321F047EC6BE180E0E9 +:101AC000E4CF41E265EA89EDE0CFCF92DF92EF9279 +:101AD000FF920F931F93CF93DF936C017B0164E61A +:101AE00070E088E70E94292FEC0197FD12C010E0FA +:101AF00000E0F601E00FF11F849164E670E00E94BF +:101B0000A32FEC01892B29F40F5F1F4F0E151F0522 +:101B100081F70E94BD30CE01DF91CF911F910F91CF +:101B2000FF90EF90DF90CF90089580913E049091C8 +:101B30003F04911103C091E089270895882369F03B +:101B400062E070E08CEE9BE00E94650D892B19F03D +:101B500080913E04089510923E0480913E04EBCFA4 +:101B6000CF93C0913E0480913F048823D1F00E941E +:101B700062086058774C8E4F9F4F60933A04709381 +:101B80003B0480933C0490933D04C11108C062E083 +:101B900070E08AEE9BE00E94650D892B29F0C091D0 +:101BA0003E048C2FCF91089581E080933E04F7CFBF +:101BB00090915C04943029F580934B0470934D040C +:101BC00060934C049093E9008FEF9091E80081506E +:101BD00095FD06C095ED9A95F1F700008111F5CFBE +:101BE0008091E80085FF0DC050E040E063E070E0C8 +:101BF0008BE494E00E9425078091E8008E77809323 +:101C0000E8000895BC0184E00C94D80DBC0183E089 +:101C10000C94D80D9C0184E08093E9009FEF8091A3 +:101C2000E800915085FD06C085ED8A95F1F700002A +:101C30009111F5CF8091E80085FF0CC050E040E0A5 +:101C400066E070E0C9010E9425078091E8008E7768 +:101C50008093E8000895CF93DF93EC0181E08093B7 +:101C6000E9008FEF9091E800815095FD06C095ED59 +:101C70009A95F1F700008111F5CF8091E80085FF7A +:101C800014C050E040E068E070E0CE010E942507FB +:101C90008091E8008E778093E80088E0FE01A2E55D +:101CA000B4E001900D928A95E1F7DF91CF9108950C +:101CB0009F92AF92BF92CF92DF92EF92FF920F93DB +:101CC0001F93CF93DF937C015B016A018091C70270 +:101CD00001E010E08A3010F40AE010E0C1E0D0E04A +:101CE000F894B501C701F6010995982E0E947A096A +:101CF000911004C021960C171D076CF4892DDF91FB +:101D0000CF911F910F91FF90EF90DF90CF90BF90F8 +:101D1000AF909F900895CC9F9001CD9F300D300DD6 +:101D2000112490E080E045E34A95F1F70000019628 +:101D300082179307C1F7D4CF80919702811110C009 +:101D40008091D80080618093D8008AE18A95F1F76C +:101D500000C08091D90080FF0AC081E08093970283 +:101D600081E090919702913009F080E0089582E03F +:101D7000809397020E94D50610925C04F1CF0E94D6 +:101D80009C0E882351F0E0914204F0914304309777 +:101D900021F00190F081E02D099480E008951F93D7 +:101DA000CF93DF93182FEB010E94150C8FE99FE072 +:101DB0000197F1F700C000002197C1F7812FDF9153 +:101DC000CF911F910C94DC0B4F925F926F927F9298 +:101DD0008F929F92AF92BF92CF92DF92EF92FF923B +:101DE0000F931F93CF93DF93CDB7DEB7CE5DD109AD +:101DF0000FB6F894DEBF0FBECDBF5090700190912A +:101E0000670490FF5DC08090530390905403811449 +:101E1000910409F068C0E0E6F6E09E012F5F3F4FB5 +:101E2000BE0161527F4FC901A4914A2F50E0DA01EF +:101E3000AA0FBB1FA40FB51FAB5ABC4FCD90DD90AE +:101E4000EC90D901CD92DD92ED929D0131966A1709 +:101E50007B0751F720916F0143E0249F800D911D76 +:101E60001124539A2BB1277F3BB138605FB7F894A8 +:101E7000BC01549E600D711D11248617970709F04F +:101E80008EC05FBF8FE594E00197F1F700C00000BE +:101E9000C252DF4F0FB6F894DEBF0FBECDBFDF9149 +:101EA000CF911F910F91FF90EF90DF90CF90BF9057 +:101EB000AF909F908F907F906F905F904F9008951C +:101EC000809171012091720133E0839FF001112410 +:101ED000EB5AFC4F821708F096CF118210821282C3 +:101EE0008F5F3396F7CF90FF96CFD12CC12C66240D +:101EF0006394712C53E0452E8091520393010C2C76 +:101F000001C0220F0A94EAF7822309F43FC0F601C8 +:101F1000EE0FFF1FE80DF91DE590F490E114F104B8 +:101F200009F479CF45E050E0B701CE0101960E9457 +:101F3000243309810F3F51F18A81800F9927991F1E +:101F40008B34910514F08AE490E05C01AA0CBB1C70 +:101F50008A0D9B1DDC01AB5ABC4F5D01049D8001C5 +:101F600011240B5A1C4F0A151B0520F0B5E0EB0E8F +:101F7000F11CD8CF4D81413A08F040EA98016C81BC +:101F80008B810E94E2080D5F1F4FEDCFEFEFCE1A5D +:101F9000DE0AF8E0CF16D10409F0AECF3CCFFC0149 +:101FA0004191CF01E8E03BB9000000C047FF2BB9E9 +:101FB000440F000000C000C000C02BB900C0EA956B +:101FC00091F75BCFE7E6F4E080818E7F8083EFE4DA +:101FD000F3E08281816082832FEF80E792E02150DD +:101FE00080409040E1F700C000000C94E40EEAE26B +:101FF000F2E086E0DF011D928A95E9F70C94B50BBB +:102000001F93CF93DF93CDB7DEB7AA970FB6F8949F +:10201000DEBF0FBECDBF8EE594E02091F100DC0164 +:102020002D93CD01B4E086369B07B9F780915F040C +:10203000833009F471C0B8F4813009F448C08230AB +:1020400009F4B4C08091E80083FF3CC180915E0434 +:1020500090915F049A3008F035C1E92FF0E0EF5419 +:10206000FB4C0C9417338A3009F48FC08B3009F481 +:1020700070C0893039F780915E04813219F7809100 +:10208000620490916304009711F00297D9F6809151 +:10209000E800877F8093E8008091E80082FF37C0E6 +:1020A0009091F3008091F200029729F48091F10061 +:1020B0008B7F813021F48091F100809351048091D5 +:1020C000E8008B778093E8000E944F07BBCF809198 +:1020D0005E04813A09F0B6CF8091E800877F809353 +:1020E000E8008091620490916304892B61F468E0B8 +:1020F00082E594E070E00E9401088091E8008B770F +:102100008093E8009FCF60E090E080E0F3CF809183 +:102110005C048111C1CF96CF80915E04813A09F0B1 +:1021200091CF8091620490916304892B09F08ACF4A +:102130008091E800877F8093E8008091E80080FF2D +:10214000FCCF809174018093F1008091E8008E773C +:10215000B9CF80915E04813209F074CF809162041E +:1021600090916304892B09F06DCF8091E800877FFF +:102170008093E8000E944F0780916004809374016F +:1021800010924F040E94F70F5DCF80915E04813260 +:1021900009F058CF8091E800877F8093E8000E9483 +:1021A0004F0780916104809350044CCF80915E046E +:1021B000813A09F047CF8091E800877F8093E8005B +:1021C0008091E80080FFFCCF80915004BCCF803824 +:1021D00099F0823809F076C0809162048F70873060 +:1021E00008F070C08093E9008091EB0085FB8827A0 +:1021F00080F91092E90006C080915A0490915B0426 +:10220000911182609091E800977F9093E80080930D +:10221000F1001092F1008091E8008E77B5C188231B +:1022200009F4A2C1823009F04DC08091600481118F +:10223000A6C1809162048F702FEF280F263008F01E +:1022400041C08093E9002091EB0020FF98C19330BA +:1022500031F48091EB0080628093EB0090C190910B +:10226000EB0090619093EB0021E030E001C0220F81 +:102270008A95EAF72093EA001092EA008091EB0039 +:102280008860EACF81111EC0109160041F77809191 +:10229000E3008078812B8093E3008091E800877FC2 +:1022A0008093E8000E944F078091E80080FFFCCFF8 +:1022B0008091E30080688093E30082E0111183E065 +:1022C00080935C048091E80083FF0AC08091E8005D +:1022D000877F8093E8008091EB0080628093EB0021 +:1022E000AA960FB6F894DEBF0FBECDBFDF91CF9197 +:1022F0001F9108958058823028F720916004309112 +:1023000061042C3DE3E03E07A1F583E08A838AE285 +:1023100089834FB7F894DE01139620E03EE051E246 +:10232000E32FF0E050935700E49120FF03C0E295C3 +:10233000EF703F5FEF708E2F90E0EA30C0F0C796ED +:102340008D939D932F5F243159F74FBF8091E80003 +:10235000877F8093E8006AE270E0CE0101960E94D8 +:1023600001088091E8008B778093E800ABCFC0969E +:10237000E7CF8091620490916304432F5527433047 +:10238000510509F44AC078F54130510509F47AC085 +:102390008BE590E0EEEEFBE04230510509F092CF84 +:1023A0002091E800277F2093E80020916404309179 +:1023B00065048217930708F49C0140E0211531055C +:1023C00009F065C0411163C08091E80082FDC9CF6A +:1023D00080915C04882329F2853019F28091E8000D +:1023E00083FFF2CFBECF4132510509F43CC04232E7 +:1023F000510509F067CF8330910508F063CFFC01E8 +:10240000EE0FFF1FE75EFD4F0190F081E02D8A5E29 +:102410009D4FDC018C9190E01AC0332721303105AB +:10242000D1F02115310561F02230310509F04ACF94 +:10243000EBE5FCE0E4918E2F90E0EBE5FCE007C0DB +:10244000EDE8FCE0E4918E2F90E0EDE8FCE00097F1 +:1024500009F438CFA5CFEBE7FCE0E4918E2F90E0B4 +:10246000EBE7FCE0F4CF8330910508F02BCF880F29 +:10247000991FFC01E15EFD4F0190F081E02D89E0A4 +:1024800090E08ECF82E190E0E9E4FCE089CF80919A +:102490005C04882309F465CF853009F462CF80910C +:1024A000E80083FD5ECF8091E80082FD8DCF8091B2 +:1024B000E80080FF83CF9091F3008091F200211516 +:1024C000310519F08830910550F041E0089709F086 +:1024D00040E08091E8008E778093E8006FCF4491D0 +:1024E0004093F1003196215031090196E8CF8038B0 +:1024F00009F0E8CE8091E800877F8093E800809122 +:102500005D048093F10087CE8111DCCE10916004D0 +:10251000123008F0D7CE8091E800877F8093E800E2 +:1025200010935D040E944F07112311F084E005C051 +:102530008091E30087FDFACF81E080935C0442E064 +:1025400061EC81E00E946E0742E261EC84E00E944F +:102550006E0742E261EC82E00E946E0742E260ECAC +:1025600083E00E946E07AECE80916004813009F056 +:10257000A9CE81E0933009F080E080935B04109253 +:10258000E9008091E800877F8093E8000E944F0770 +:1025900099CE1F93CF93DF93162FC0916E06D091E3 +:1025A0006F068A30D1F420913304CE018E569440C8 +:1025B000622F70E00E94E332281B822F66E00E94A7 +:1025C000F732C82FC15020F4DF91CF911F910895A9 +:1025D00060E080E20E94C912F5CF8D30E9F4CE565A +:1025E000D44020913304622F70E0CE010E94E33288 +:1025F000281B822F9E01280F311D2115324018F013 +:1026000080E0D0E0C0E0C80FD11DC259DB4FD093AD +:102610006F06C0936E06D8CF96E0FE01A4E3B4E047 +:1026200001900D929A95E1F7803E90F186E0FE01CF +:1026300011928A95E9F7C0916E06D0916F0611113B +:1026400033C046E050E0BE0184E394E00E942D33A5 +:102650009E012E563440892B91F52A5F3F4F4091C1 +:102660003304642F70E0C9010E94E332481B4630F6 +:1026700010F4240F311D211572E0370710F030E0FF +:1026800020E022593B4F30936F0620936E069CCF7B +:10269000F6E08F9FB00111246655794F46E050E077 +:1026A000CE010E942433C7CF9E012A5F3F4FFE0117 +:1026B0002E173F0731F2808180958193F9CFC901B0 +:1026C00045E0969587954A95E1F741E050E0BA01DB +:1026D00002C0660F771F8A95E2F7CB0160916C0408 +:1026E00070916D04862B972BB9016B5F7F4FE5E0EE +:1026F00076956795EA95E1F702C0440F551F6A95F4 +:10270000E2F7842B952B90936D0480936C04A5CFF6 +:10271000FF920F931F93CF93DF93EC01F62EFC01F2 +:1027200001900020E9F78F0101501109C017D1076E +:1027300030F0DF91CF911F910F91FF9008956F2D91 +:1027400089910E94C912F2CFCF93DF93C3EED2E0FA +:1027500060E0CE010E9457332196C11584E0D8076E +:10276000B9F7DF91CF9108956F927F928F929F92E8 +:10277000AF92BF92CF92DF92EF92FF920F931F938F +:10278000CF93DF938AEAC82E86E0D82E91ECE92E0B +:10279000F12CE701CC58D10936011BC0F501859019 +:1027A0009490692DC8010E945733682DC801019685 +:1027B0000E94573382E0A80EB11C0E5F1F4FC01756 +:1027C000D10761F78EE0680E711C2E96CE15DF05DD +:1027D00029F08E010E5011095301E0CF7E018CE8E3 +:1027E000E80EF11C8CE8C80ED11C8DE7E81683E0DA +:1027F000F80679F6DF91CF911F910F91FF90EF903E +:10280000DF90CF90BF90AF909F908F907F906F9010 +:102810000895CF93C82F6FEF811161E283E290E0BA +:102820000E9457336FEFC11160E184E290E00E9493 +:1028300057336FEFC11161E385E290E0CF910C94C3 +:10284000573380E00E94091460E086E290E00E9425 +:1028500057330E94B4130E94A41381E00C9409140E +:102860000F931F93CF93DF93C42FD0E0CC0FDD1FC6 +:102870002EE0629FC00DD11D11243CE8839FC00D46 +:10288000D11D1124CE0187960E944333082F10E0FA +:10289000102F0027CE0188960E9443339801282BE1 +:1028A000C901DF91CF911F910F910895462F853077 +:1028B00038F47A3028F4673018F4672F0C94301409 +:1028C00090E080E00895CF92DF92FF920F931F93E4 +:1028D000CF93DF936C010091660480918A02082BEC +:1028E000C7E0D0E010E0FC2EC8010C2E02C0959588 +:1028F00087950A94E2F780FD0CC02197A0F7F12C90 +:102900008F2DDF91CF911F910F91FF90DF90CF908E +:102910000895B6018C2F0E9456140E94D609019783 +:1029200061F3EECFCF93DF93EC010E946314BE01FD +:102930000E945614DF91CF910C94D609FC0180813E +:1029400091810E949214292F2F7092959F7092501E +:102950009E3078F4E92FF0E0E554FB4C0C941733EB +:10296000803F19F020F4883E20F481E00895843FF0 +:10297000E1F380E00895883EC0F3813FD1F7F5CFC1 +:10298000822F869586958695089583E290E00E9431 +:102990004333813289F484E290E00E9443338031F2 +:1029A00059F485E290E00E94433391E0813309F0CD +:1029B00090E0892F8170089580E0FCCFCF92DF9264 +:1029C000EF92FF926B017C010E94CC08B701A60137 +:1029D00088E090E0FF90EF90DF90CF900C94693307 +:1029E000AF92BF92CF92DF92EF92FF920F931F931D +:1029F000CF93DF9300D00F92CDB7DEB7082FF62E1E +:102A0000142FE22E8091670480FF4FC0E82FE695D7 +:102A1000AE2FB0E0A65FBD4F9C9190934F038E7F89 +:102A2000823009F056C0413A08F040EA9E012F5F1B +:102A30003F4F6F2D802F0E94E2088091670480FF36 +:102A400011C02B8139814A8180917101909172016D +:102A500053E0859FF0011124EB5AFC4F891798F140 +:102A60000E94E40E80916804801308C0809169047C +:102A70008F1104C080916A04811729F0809151035D +:102A800082608093510300936804F092690410936C +:102A90006A04EE2051F0609167047091680480919F +:102AA000690490916A040E94DE140F900F900F90B9 +:102AB000DF91CF911F910F91FF90EF90DF90CF901A +:102AC000BF90AF9008954183308322838F5F339608 +:102AD000C5CF923039F6E2508E2F8170D82EE69510 +:102AE000F0E0E55AF94FA590B490C12CBB24609159 +:102AF0007301C61608F0B4CF2C2D30E0A29EC001A1 +:102B0000A39E900DB29E900D112470E00E94E332BE +:102B1000802FD11016C0860F40917101420F532FA4 +:102B2000511D9A01220F331F240F351F2B5A3C4F82 +:102B3000412F113A08F040EA6F2D0E94E208C39439 +:102B4000D6CF861BE9CFE7E6F4E0438121E1421BC3 +:102B500008F440E021E0628181810C94F014E7E602 +:102B6000F4E0438121E1420F08F44FEF21E062815C +:102B700081810C94F014E7E6F4E0628121E1621BAC +:102B800008F460E021E0438181810C94F014E7E6D1 +:102B9000F4E0628121E1620F08F46FEF21E04381EC +:102BA00081810C94F014E7E6F4E0818121E0438117 +:102BB000628188500C94F014E7E6F4E0818121E012 +:102BC00043816281885F0C94F01480916B048823A8 +:102BD00019F0815080936B046091670470916804D0 +:102BE0008091690490916A040C94DE1480916B04C6 +:102BF000833018F48F5F80936B0460916704709149 +:102C000068048091690490916A040C94DE14909198 +:102C1000670490FF27C0917081111DC0926090934E +:102C2000670480915103816080935103662351F0C2 +:102C300060916704709168048091690490916A04BE +:102C40000E94DE1420E040916A0460916904809142 +:102C500068040C94F0148C3010F09661E0CF880F6B +:102C6000982BDDCF089521E030E0A90102C0440F88 +:102C7000551F8A95E2F7CA0120915203662391F00D +:102C8000822B809352038091510380618093510382 +:102C900080915003811109C08091670460E086959E +:102CA0000C94071680958223ECCF0895CF93DF9381 +:102CB000C82FC17082FBDD27D0F981FB662760F940 +:102CC00085E00E94331661E06C2786E00E9433168F +:102CD0006D2F87E0DF91CF910C9433160F931F93E4 +:102CE000CF93C82F61E08111682F617080E00E944E +:102CF0003316C1FB662760F9C11101C060E081E0B5 +:102D00000E943316C2FB662760F9C11101C060E062 +:102D100082E00E943316C3FB662760F9C11101C02F +:102D200060E083E00E943316C4FB662760F9C1119E +:102D300001C060E084E00E9433164C2F50E070E048 +:102D400060E0DB01CA01F4E0B695A79597958795F9 +:102D5000FA95D1F70097A105B10549F1AC01BD0184 +:102D600084E08A019B01E2E0369527951795079547 +:102D7000EA95D1F7011511052105310519F08E5F8E +:102D8000B901A8017695679557954795452B462B30 +:102D9000472B09F08F5F8230A1F158F48823D1F0DE +:102DA000813041F18C2FCF911F910F91089580E0D8 +:102DB000D8CF833059F18430A9F720E040E56FEF98 +:102DC0008AED0E94F01480910001882359F310923B +:102DD00028030DC020E040E56FEF82E30E94F0146D +:102DE00080910001882399F381E0809328030E9459 +:102DF0003E0DD8CF20E040E56FEF8CEF0E94F0143D +:102E0000D1CF20E040E56FEF80E5F8CF20E040E54E +:102E10006FEF86E7F3CF0E946E16809366040C94E2 +:102E2000B50B80916604982F9670963019F48860DF +:102E30000C940B17877FFCCF21E030E001C0220FFC +:102E40008A95EAF720958091660482230C940B17EB +:102E500021E030E001C0220F8A95EAF780916604F4 +:102E6000822B0C940B17809167048695815009F48E +:102E70008BE061E00C9407168091670486958F5F64 +:102E80008C3008F081E061E00C94071680916704B3 +:102E900080FF07C0869582588F77893010F40C9494 +:102EA0003C1761E082E00C940716E7E6F4E083E06B +:102EB000808311828FEF828380EA83831482AFE460 +:102EC000B3E012968C911297836012968C93608176 +:102ED0007181828193810C94DE1469EE7EEF90E023 +:102EE00080E00E94753360E082E090E00E945733FA +:102EF00060E083E090E00E94573310928A0260E025 +:102F000084E090E00E94573360E082E290E00E940B +:102F1000573360E085E090E00E94573360E086E040 +:102F200090E00E9457336FEF87E090E00E945733A4 +:102F300040E050E0BA0188E090E00E94693360E030 +:102F40008DE090E00E94573340E050E0BA0188E104 +:102F500090E00E94693360E087E190E00E9457337F +:102F600040E050E0BA018CE190E00E94693370E0EB +:102F700060E080E290E00E94753340E050E0BA01EA +:102F800088E190E00E94693380E00E9409140E9469 +:102F9000211440E050E0BA018FE090E00E946933D4 +:102FA00040E050E0BA0183E190E00C9469330F9364 +:102FB0001F93CF93DF9300D000D0CDB7DEB7409101 +:102FC000BB025091BC026091BD027091BE022FB74E +:102FD000F8948091470490914804A0914904B091DD +:102FE0004A042FBF841B950BA60BB70B84369105A3 +:102FF000A105B10588F10E949C0E882379F10E94F9 +:1030000062086E5F7F4F8F4F9F4F69837A838B83F8 +:103010009C8380912C0190912D018B559D4F409167 +:103020002B0150E04530510510F044E050E0BE0166 +:103030006F5F7F4F0E943A3384E090E00E942F320E +:10304000892BD9F40E9462086093BB027093BC0282 +:103050008093BD029093BE0281E010C00E9462087E +:103060000091C8021091C9022091CA023091CB028E +:10307000600F711F821F931FC4CF80E00F900F90CD +:103080000F900F90DF91CF911F910F9108958F9224 +:103090009F92AF92BF92CF92DF92EF92FF920F93E7 +:1030A0001F93CF93DF93EB0188809980AA80BB8028 +:1030B0009FB7F894C0904704D0904804E09049042A +:1030C000F0904A049FBFC818D908EA08FB0894E6A4 +:1030D000C916D104E104F10410F4442311F1E82EDF +:1030E000082E000CFF089AE08902F0011124EF5F1E +:1030F000FE4F838194818B559D4F428150E0041790 +:10310000150708F4A801B9010E943A33C7010E94CB +:103110002F32892BA1F40E946208688379838A8305 +:103120009B8381E0DF91CF911F910F91FF90EF90F2 +:10313000DF90CF90BF90AF909F908F90089580E0E8 +:10314000F1CF0F931F93CF93DF930F92CDB7DEB7DD +:1031500080913E0489832091BA0290E041E02817D3 +:10316000190609F440E001E010E09E012F5F3F4F97 +:1031700063EC72E086E00E9447180F90DF91CF91D8 +:103180001F910F9108950F931F93CF93DF93CDB7A6 +:10319000DEB729970FB6F894DEBF0FBECDBF85E02E +:1031A000E7E6F4E0DE01119601900D928A95E1F7D1 +:1031B00080914F0390915003A0915103B09152031D +:1031C0008E839F83A887B98741E08885811101C0DC +:1031D00040E009E010E09E012F5F3F4F6FEB72E08F +:1031E00085E00E94471881111092510329960FB66D +:1031F000F894DEBF0FBECDBFDF91CF911F910F912D +:1032000008956F927F928F929F92AF92BF92CF92CA +:10321000DF92EF92FF920F931F93CF93DF930F9262 +:10322000CDB7DEB7862E5A016901682E880F770860 +:10323000C3010E942F32892B09F088C08AE0869D45 +:10324000F001879DF00D1124EF5FFE4F458150E0A6 +:103250004115510511F041E050E08AE0869DF001F2 +:10326000879DF00D1124EF5FFE4F668177816B55CE +:103270007D4FCE0101960E943A33F5014081518184 +:10328000628173812FB7F89480914704909148042C +:10329000A0914904B0914A042FBF841B950BA60B43 +:1032A000B70B84369105A105B10540F4B701C801FB +:1032B0000E94B1089981891709F44FC0082C000CAD +:1032C0009908C4010E942F32892B91F0B12C8B2DCB +:1032D0000F90DF91CF911F910F91FF90EF90DF90B2 +:1032E000CF90BF90AF909F908F907F906F900895F8 +:1032F0008AE0889DF001899DF00D1124EF5FFE4F5B +:10330000458150E0E416F50608F4A7018AE0889D9F +:10331000F001899DF00D1124EF5FFE4F66817781EA +:103320006B557D4FC6010E943A33B701C8010E9418 +:10333000B10899818913CACF0E946208F5016083A0 +:10334000718382839383BB24B394C1CFB12CA70133 +:10335000B801C6010E943A33BACFBB24B394F7CF69 +:10336000CF92DF92EF92FF920F931F93CF93DF9351 +:1033700000D000D00F92CDB7DEB76B0185E0E82E0C +:10338000F12C06EA12E09E012F5F3F4F4DE952E01B +:1033900061E080E00E940119882349F095E0FE0178 +:1033A0003196A8E9B2E001900D929A95E1F795E087 +:1033B000E8E9F2E0D60101900D929A95E1F70F90BD +:1033C0000F900F900F900F90DF91CF911F910F9161 +:1033D000FF90EF90DF90CF90089590E080E00E9402 +:1033E0005133893E9E4F11F40C94C51480E008952A +:1033F0001F920F920FB60F9211242F933F934F936A +:103400005F936F937F938F939F93AF93BF93CF936C +:10341000DF93EF93FF93D091E900DF708091EC0090 +:10342000C82FC17080FDC0E81092E9008091F000C3 +:10343000877F8093F00078940E9400101092E9003A +:103440008091F00088608093F000CD2BCF70C09306 +:10345000E900FF91EF91DF91CF91BF91AF919F91E3 +:103460008F917F916F915F914F913F912F910F902D +:103470000FBE0F901F9018951F920F920FB60F92CC +:1034800011242F933F934F935F936F937F938F9369 +:103490009F93AF93BF93EF93FF938091E10082FFDF +:1034A00009C08091E20082FF05C08091E1008B7F1E +:1034B0008093E1008091DA0080FF24C08091D800E1 +:1034C00080FF20C08091DA008E7F8093DA008091A7 +:1034D000D90080FF9BC080E189BD82E189BD09B42C +:1034E00000FEFDCF81E080935C0480914E04811149 +:1034F00009C00E94D5060E94A0078091E200846066 +:103500008093E2008091E10080FF17C08091E2008B +:1035100080FF13C08091E2008E7F8093E200809153 +:10352000E20080618093E2008091D8008062809305 +:10353000D80019BC85E080935C048091E10084FF91 +:1035400029C08091E20084FF25C080E189BD82E12D +:1035500089BD89B5982F917080FFFBCF8091D800ED +:103560008F7D8093D8008091E1008F7E8093E10071 +:103570008091E2008F7E8093E2008091E200816082 +:103580008093E20080915D04882309F445C084E0C3 +:1035900080935C048091E10083FF27C08091E2006A +:1035A00083FF23C08091E100877F8093E10082E068 +:1035B00080935C0410925D048091E1008E7F809383 +:1035C000E1008091E2008E7F8093E2008091E20032 +:1035D00080618093E20042E060E080E00E946E073C +:1035E0008091F00088608093F000FF91EF91BF918F +:1035F000AF919F918F917F916F915F914F913F918B +:103600002F910F900FBE0F901F90189519BC10921C +:103610005C0410924E0476CF8091E30087FD93E026 +:1036200090935C04B7CF78941F921FB61F92112419 +:103630008F939F93AF93BF938091470490914804D9 +:10364000A0914904B0914A040196A11DB11D809337 +:10365000470490934804A0934904B0934A04BF914F +:10366000AF919F918F911F901FBE1F9018959C0145 +:103670004FB7F8948091470490914804A091490471 +:10368000B0914A044FBF821B930B08952FB7F89453 +:103690008091470490914804A0914904B0914A0454 +:1036A0002FBF08959F92AF92BF92CF92DF92EF9279 +:1036B000FF920F931F93CF93DF93CDB7DEB72F9772 +:1036C0000FB6F894DEBF0FBECDBF8E010F5F1F4F48 +:1036D0008AE0D8011D928A95E9F78EE4C82E81E030 +:1036E000D82EF12CE12CAA24A394B12CF6018191BF +:1036F0006F018F3F09F44AC0F894E82FE295EF700C +:10370000F0E021A18F70A50102C0440F551F8A95DA +:10371000E2F7CA01922F982B91A392A18095892359 +:1037200082A30E947A0900C0E7E4F1E030E020E0E3 +:10373000912C41914F3F09F47DC0A42FA295AF7009 +:10374000B0E090968C9190E04F7002C0959587956F +:103750004A95E2F780FD6EC08A2D022E01C0880FC7 +:103760000A94EAF7982A2F5F3F4F2730310509F76F +:10377000F601319780818F3F11F00E947C0950EA59 +:103780005A95F1F7F801EE0DFF1D90828FEFE81AC0 +:10379000F80A95E0E916F10409F0A8CF4AE050E0F4 +:1037A000B8018EEC92E00E942D337C01892B41F010 +:1037B0008AE0F801AEECB2E001900D928A95E1F753 +:1037C0001091D902E114F104B9F181E080938D02E6 +:1037D0000E94461B90938C0280938B0280918B02F7 +:1037E00090918C020E94371B069770F0AEECB2E00D +:1037F000E12FF0E0EB5BFC4F8D91819322E0A33D44 +:10380000B207D1F710928D0281E090E0EF28C1F06D +:103810002F960FB6F894DEBF0FBECDBFDF91CF91CC +:103820001F910F91FF90EF90DF90CF90BF90AF90DE +:103830009F90089580E096CF80918D028111CECF28 +:103840000E949C0EB82EE091D9028E01055F1F4F99 +:10385000882309F495C085E0D8011D928A95E9F77F +:10386000F0E09F012B5B3C4F79018091C702AE01D4 +:10387000405F5F4F6A018A3008F05AC040EB59E15F +:10388000B801C7010E94580E882309F468C042EEAF +:1038900055E2B801C7010E94580E882309F45FC0A1 +:1038A00047ED57E1B801C7010E94580E882309F47B +:1038B00056C043EC58E1B801C7010E94580E882356 +:1038C00009F44DC041EA58E1B801C7010E94580E01 +:1038D000882309F444C01092C702E091D802F0E0B6 +:1038E000AF014B5B5C4FD80110E0FA019191AF0141 +:1038F0008D91981731F09F0121503109F901808392 +:103900001B2DAC15BD0589F780919202882371F0BB +:1039100080919002909191020E94371B893E9340C2 +:1039200028F082EE0E94DC0B10929202812F70CF61 +:1039300080918E0290918F020E94371B843F9140AC +:1039400008F09CCFE091D802F0E0EB5BFC4FD8018F +:1039500011921D92AC15BD05D9F71B2DD5CF8091C5 +:10396000C7028F3F31F08F5F8093C7028A3008F41F +:10397000B4CF0E94461B90938F0280938E02E2CFB9 +:10398000F0E0EB5BFC4FF89485E0A6EAB2E0019032 +:103990000D928A95E1F765E070E086EA92E00E9478 +:1039A000B1088093A5020E947A09F894E091E1029F +:1039B000F0E0E252FD4F80818B878093AC0261E0A2 +:1039C00070E0C8010E94B1088093AB020E947A099E +:1039D000F894C090AD02D090AE02E090AF02F090AB +:1039E000B0028091930290919402A0919502B091BF +:1039F0009602C816D906EA06FB06D1F0C0929302D9 +:103A0000D0929402E0929502F09296020E949C0E4F +:103A100081110EC00E946208C61AD70AE80AF90A84 +:103A2000C092C802D092C902E092CA02F092CB02C0 +:103A30000E947A09F8948091B802882321F184FFCA +:103A400004C09091B9029093520380FF0DC0809101 +:103A5000B10280FF25C09091670491609093670444 +:103A600060E086950E9407168091B80281FF09C028 +:103A700020E04091B4026091B3028091B2020E94B2 +:103A8000F0141092B8020E947A09F8948091BA0258 +:103A9000882349F00E94B00D0E947A0980E0B8CED8 +:103AA0000E94E20FE1CF0E94950DF6CF5F926F92D8 +:103AB0007F928F929F92AF92BF92CF92DF92EF92BE +:103AC000FF920F931F93CF93DF9300D000D00F92FC +:103AD000CDB7DEB76C01FC0183819481892B31F075 +:103AE0008081918189238F3F09F05EC50F900F90EF +:103AF0000F900F900F90DF91CF911F910F91FF903A +:103B0000EF90DF90CF90BF90AF909F908F907F907D +:103B10006F905F9008950E946314182F682F898119 +:103B20009A810E94890B69817A81812F0E945614A3 +:103B30008C01F6018281882309F42BC5C8018251CA +:103B40009F45409708F0EEC48FEF93E00E94433307 +:103B5000025193EEA92E92E0B92E8111C7CF011127 +:103B60003AC01C821B82662463948AE0582E850129 +:103B70000F5F1F4FC5010E94433389831A82882338 +:103B800009F4B4CF9FEF980F9330A0F58A83698230 +:103B900032E0A30EB11CC8010E9443338B838823FB +:103BA00009F4A4CF8E010F5F1F4FF801208122235B +:103BB000F1F2213009F058C0918182819130E1F415 +:103BC0000E5F1F4F6AE070E0893311F460E570E02A +:103BD0000E94CF0E17C0A114F4E0BF0609F486CFEF +:103BE000C5010E944333811101C001502FEFA21A79 +:103BF000B20AB5CF5801D6CF923039F40E5F1F4FBD +:103C00000E94150C0F5F1F4FD0CF933029F40E5F29 +:103C10001F4F0E94DC0BF6CF943019F00F5F1F4F3F +:103C2000F1CF0E5F1F4F30E020E0B8016F5F7F4F94 +:103C3000F80141818053990B8A30910550F0215051 +:103C4000310900F38FE99FE00197F1F700C0000010 +:103C5000F6CF529EF001539EF00D11249C012E0FC1 +:103C60003F1F842F8B01E1CFE22FF0E0E75FFD4F94 +:103C70007490822F86958695869590E0FC01E7509A +:103C8000FE4FE4902770F12C022E02C0F594E794C9 +:103C90000A94E2F7E1E0EE22FF24FC01E751FE4F37 +:103CA000C490D12C022E02C0D594C7940A94E2F796 +:103CB000F1E0CF22DD24FC01E752FE4F8490912CED +:103CC00002C0959487942A95E2F721E082229924F4 +:103CD000E114F10419F081EE0E94150CC114D10415 +:103CE00019F086EE0E94150C39E36AE070E0731259 +:103CF00002C060E570E0872D0E94CF0ECD2819F03C +:103D000086EE0E94DC0BEF2819F081EE0E94DC0B9E +:103D1000892809F477CF6AE070E08CE259CF81E01E +:103D20000E94281703C081E00E941C170F900F907B +:103D30000F900F900F90DF91CF911F910F91FF90F7 +:103D4000EF90DF90CF90BF90AF909F908F907F903B +:103D50006F905F900C94111782E0E2CF043F110541 +:103D600009F455C108F057C1053E110509F4DDC03D +:103D7000F601928191113CC280914F0482720A3CFB +:103D8000FCE51F0709F414C208F06AC1053C3CE5D4 +:103D9000130709F4F9C108F04EC1033C5CE51507AF +:103DA00009F4D3C108F0EBC1023C1C4509F47DC104 +:103DB000F60100811181992309F434C2C8010E94DF +:103DC0006314F82E682FC8010E94890BB8018F2D4B +:103DD0000E9456140E94D609182FB82EF60122818F +:103DE0004581342F32953F70892F82958F70E82E50 +:103DF000F12C8C3008F04EC2F701E753FB4C0C94C9 +:103E000017330338FFE51F0709F481C018F501389F +:103E10003FE5130709F44AC008F065C000385FE5C4 +:103E2000150709F0A5CF882309F459C080919202A3 +:103E3000811106C081E08093920282EE0E94150CEF +:103E40000E94461B90939102809390028BE20E9405 +:103E5000150C8ECF05389FE5190709F4BEC008F48C +:103E600076C00638FFE51F0709F082CF882309F4E2 +:103E7000CEC06091590170915A0190E080E00E949B +:103E8000903320E030E040E05CE30E94F13320E03A +:103E900030E040E85FE30E948B338111B5C086EECD +:103EA00090E090935A0180935901A1C08823A1F01A +:103EB00080919202811106C081E08093920282EE8D +:103EC0000E94150C0E94461B9093910280939002D1 +:103ED00081EE0E94150CBACF81EE0E94DC0B8BE2C2 +:103EE0000E94DC0B45CF882309F442CF81EE0E946B +:103EF000150C83EE0E94150C8FE40E94150C8FE4C4 +:103F00000E94DC0B83EE0E94DC0B81EEE9CF88235C +:103F100009F42ECF81EE0E94150C83EE0E94150C41 +:103F200080E50E94150C80E5EBCF8093340210935E +:103F3000330200933202882321F081E08093E4026F +:103F400017CF1092E40214CF80933102F0CF882370 +:103F500079F180913102882349F0809132020E94E8 +:103F6000DC0B80EE0E94150C8AE20CC080913402BA +:103F70008823D1F3809132020E94DC0B80EE0E94F4 +:103F8000150C8CE40F900F900F900F900F90DF9115 +:103F9000CF911F910F91FF90EF90DF90CF90BF9046 +:103FA000AF909F908F907F906F905F900C94150CC6 +:103FB0008AE20E94DC0B8CE40E94DC0B80EE0E9403 +:103FC000DC0B80913102811105C08091340288237D +:103FD00009F48CCD80913202D5CF8823C1F0809135 +:103FE0002803882339F010922803109200010E94C0 +:103FF0003E0DBECE809100018111F7CF81E080930C +:10400000280380930001F3CF80E890E04ACF61E07D +:104010000E949A0CADCE62E0FBCF64E0F9CF88231A +:1040200021F081E08093E302A3CE1092E302A0CEC0 +:104030001092E6029DCE073C2CE5120709F4AEC0B3 +:1040400008F4A7C0083C4CE5140709F4ACC0093CCF +:104050001C4509F0ADCE43EA55E16FEA75E179C040 +:10406000043DECE51E07A8F40E3CFCE51F0708F034 +:104070003DCD0C3C2CE5120709F49FC045EE55E1FF +:1040800066EF75E10D3C1C4508F463C061E081E01A +:1040900046C0053D4CE5140709F428CD08F492C04C +:1040A0000D351D4509F422CD83CE8091670480FF34 +:1040B00031C08E7F809367046091670470916804BB +:1040C0008091690490916A040E94DE1480915103EA +:1040D0008160809351039FEFE0E7F2E09150E04070 +:1040E000F040E1F700C000000F900F900F900F908C +:1040F0000F90DF91CF911F910F91FF90EF90DF9084 +:10410000CF90BF90AF909F908F907F906F905F9077 +:104110000C94E40E81608093670461E086950F90B3 +:104120000F900F900F900F90DF91CF911F910F91F3 +:10413000FF90EF90DF90CF90BF90AF909F908F90C7 +:104140007F906F905F900C94071643E357E16CE308 +:1041500077E10F900F900F900F900F90DF91CF911C +:104160001F910F91FF90EF90DF90CF90BF90AF9095 +:104170009F908F907F906F905F900C94C7084CE356 +:1041800057E163E377E1E5CF43ED55E16CED75E190 +:10419000E0CF4CED55E163ED75E1DBCF4BEB55E145 +:1041A00067EC75E1D6CF47EC55E16BEB75E1D1CF0C +:1041B0004FEA55E163EA75E1CCCF46EF55E165EE94 +:1041C00075E1C7CF0F900F900F900F900F90DF9178 +:1041D000CF911F910F91FF90EF90DF90CF90BF9004 +:1041E000AF909F908F907F906F905F900C94461748 +:1041F0000E3D1C4509F0DCCD0F900F900F900F90F5 +:104200000F90DF91CF911F910F91FF90EF90DF9072 +:10421000CF90BF90AF909F908F907F906F905F9066 +:104220000C946D17C8010E94610BF82ECFCD092F99 +:104230000F70907F11F00295007F812F2223C9F02B +:10424000002369F090E2910F983010F011110BC02B +:1042500080914F04082B00934F040E94400B812F44 +:104260000E94150C17C080918902082B00938902C7 +:10427000F4CF0E94DC0B002369F00095105E18302B +:1042800010F0B11027C080914F04082300934F0411 +:104290000E94400B98E0E91AF108E4E0EE16F10400 +:1042A00008F024CC0E94BF0E0F900F900F900F903B +:1042B0000F90DF91CF911F910F91FF90EF90DF90C2 +:1042C000CF90BF90AF909F908F907F906F905F90B6 +:1042D0000C94561680918902082300938902D8CF46 +:1042E000892F8F70907F903211F08295807FF1E05E +:1042F000BF120CC0222329F0333060F60E94D20B8B +:10430000C9CF323038F60E94C70BC4CF222341F008 +:104310003323A1F340FFA3CF4F70F6014583EECFC7 +:10432000332389F3193309F0F5C0FFEF27EE33E0AB +:10433000F15020403040E1F700C00000812F0E9482 +:10434000DC0BA8CF892F86958695837061F081302C +:1043500009F0A0CF812F9370211102C090E080E07E +:104360000E946E0897CF812F9370211102C090E0B8 +:1043700080E00E9484088ECF892F8370A1F52111DF +:1043800089CF812F829586958770880F880F412F5E +:104390004F70082E01C0440F0A94EAF7212F2071B4 +:1043A00014FF07C02FE030E001C0220F8A95EAF722 +:1043B0002095969596959370923081F0822F842B5C +:1043C000933030F480918A02913029F0242B82239B +:1043D0000E94C30B5FCF842B822BFACF242B8091BA +:1043E0008A028227F5CF8695222311F0892F8170CA +:1043F000882309F44FCF812F829586958770880F87 +:10440000880F412F4F70082E01C0440F0A94EAF71D +:10441000212F207114FF07C02FE030E001C0220FD0 +:104420008A95EAF72095969596959370923081F04B +:10443000822F842B933030F480916604913029F0E0 +:10444000242B82230E940B1725CF842B822BFACF9B +:10445000242B809166048227F5CF092F0F70222329 +:1044600029F0802F0E942817812F48CF812F0E948A +:10447000C70B802F0E941C170DCF812FE1EF1E1755 +:1044800089F1E11750F0F0EF1F17B9F02223B1F1D5 +:104490003111E5CE892F8F7129C042EF141749F1F0 +:1044A00053EF1513F3CF80E0222361F29F7181E077 +:1044B00001C0880F9A95EAF7C5CF222379F03230F0 +:1044C00008F0E8CE292F2F7181E090E001C0880F1D +:1044D0002A95EAF7909166048927B4CF333008F023 +:1044E000D9CEF0CF892F8F71222321F20E94281775 +:1044F000D1CE892F8F712223C9F3BCCF332379F01A +:10450000893341F48FEF97EEE3E081509040E04033 +:10451000E1F712CF8FE39CE90197F1F70DCF892FD7 +:104520008F71A8CF0031FFE51F0709F4F8CB0131E7 +:104530002FE5120709F410CC0E9462086093EB0289 +:104540007093EC028093ED029093EE02F60182816B +:10455000063F110509F461CD08F053CC043E110566 +:1045600009F45DCD08F0FACB003E110509F457CDF2 +:10457000013E110509F4E8CC0C32110509F0F8CB25 +:10458000882309F455CD81E08093E60210926701FB +:10459000EFCB00313FE5130709F4C5CB01314FE5FF +:1045A0001407A1F682E0C0CB85E0DE0111960190F0 +:1045B0000D928A95E1F7F601228189819A81211174 +:1045C000AACA0E94610B182FAECA1F93CF93DF9324 +:1045D00080915502807FA9F480915202882389F04E +:1045E00080918702D09156026091500270915102E1 +:1045F000A0915302B0915402C62FC72316E0D813DE +:1046000004C0DF91CF911F91089590E0109711F0B1 +:10461000CF3F19F401968770F2CF189F9001199F30 +:10462000300D1124F901E95AFD4F41814713F2CFB2 +:1046300040814613EFCF42814111ECCF4381548139 +:104640004A1B5B0B403A510528F7809155028F7049 +:10465000806180935502F901E45AFD4F80818F708B +:104660008061808380E592E00E94561DDF91CF91AA +:104670001F910C94570BAF92BF92CF92DF92EF92A3 +:10468000FF920F931F93CF93DF93CDB7DEB7619760 +:104690000FB6F894DEBF0FBECDBF8C0185E0F801E8 +:1046A000DE011D9601900D928A95E1F7F801E280F6 +:1046B00080E5A82E82E0B82E6091530270915402DA +:1046C0006115710509F432C1909150024091510277 +:1046D000892F84238F3F09F429C120813181C38030 +:1046E000D480F0905202F601E61BF70BFF2009F48C +:1046F000E8C080915502582F507FE03AF10508F04C +:10470000ABC0511177C0FE2C431321C092131FC0C0 +:10471000E1101DC08F70806180935502C5010E9419 +:10472000561D80915502F80185838F2D61960FB635 +:10473000F894DEBF0FBECDBFDF91CF911F910F91D7 +:10474000FF90EF90DF90CF90BF90AF900895CD286D +:1047500029F0822F83238F3F09F003C180E0F82FD7 +:10476000F170DF2E80FF3CC080918702409156029D +:1047700056E0841315C02D873E878D859E850E9447 +:104780009214292F22952F702230F0F0243018F542 +:104790009F70F1F0F8019581907FD1F4D12C1EC06B +:1047A00090E0589FF001599FF00D1124E95AFD4FF8 +:1047B0006181361306C06081261303C06281E61250 +:1047C0000FC001968770D5CF9F7011F0882331F309 +:1047D000805E883018F3C8010E94561DFD2CA5CFBD +:1047E000EE2009F4A2CF809155028160809355029A +:1047F000F12C9BCF431306C0921304C0F801EE20A6 +:1048000009F479C0C8010E949E14882309F1EE20A2 +:10481000F9F080915502803270F020915002309171 +:10482000510238872F831986DB86CA868C87CE0192 +:1048300007960E94561D86E0F801A0E5B2E00190BF +:104840000D928A95E1F70E94E522FF24F3946DCF43 +:10485000C8010E94561DF9CF51110AC080E592E0AF +:104860000E94561D86E0F50111928A95E9F7C0CFA6 +:1048700043130FC092130DC0E1100BC0F8018583E4 +:10488000C8010E94561D86E0F50111928A95E9F74C +:104890004CCFC8010E949E148823D1F2EE20C1F2B1 +:1048A00080915502803238F22091500230915102AD +:1048B0003A8329831B82DD82CC828E83CE010196CE +:1048C000B8CFE03AF105F8F6FE2CEE2009F24313DA +:1048D0001FC092131DC08091550280FD10C0982FFB +:1048E000907F69F0F8018583903F31F0982F907F99 +:1048F000905F8F70892B8583C8010E94561D86E0CA +:10490000F801A0E5B2E001900D928A95E1F70DCF94 +:10491000C8010E949E1481118ECF80915502816042 +:1049200080935502C8010E94561DFFCEEE2009F467 +:104930008FCFC8010E949E14F82E882309F488CFD7 +:1049400086E0F801A0E5B2E001900D928A95E1F7CA +:1049500080915002909151020E9492140E94E5228F +:10496000E4CE81E08E25FBCE1F93CF93DF93CDB7AE +:10497000DEB767970FB6F894DEBF0FBECDBF4B8B87 +:104980005C8B6D8B7E8B8F8B6111109289021A8AE2 +:10499000198A85E0FE017396DE011D9601900D9245 +:1049A0008A95E1F786E0FE013D96DE0117960190BB +:1049B0000D928A95E1F7CE0107960E943B2388234A +:1049C00089F016E0809187029091560289134BC0BE +:1049D00067960FB6F894DEBF0FBECDBFDF91CF91C3 +:1049E0001F91089586E0FE013796DE011196019031 +:1049F0000D928A95E1F78A859B85892B11F38F812A +:104A0000988589238F3FE9F22091560230E0C90151 +:104A1000019687709927409187024817190681F4FB +:104A200010924F040E94F70F1092560210928702C4 +:104A300086E0E0E5F2E0DF011D928A95E9F7C1CF5B +:104A400096E0929FD001939FB00D1124A95ABD4FBB +:104A5000FE01319601900D929A95E1F780935602EE +:104A60000E94570BAECF819FC0011124895A9D4FE0 +:104A70000E943B23882309F4ABCF8091870290E00A +:104A8000019687709927809387029CCF0F931F937D +:104A9000CF93DF93CDB7DEB7A8970FB6F894DEBFFC +:104AA0000FBECDBF81114DC006E0662359F10CA3A6 +:104AB00011E01DA31EA30E94461B8160782F98A7BA +:104AC0008FA34CA15DA16EA188A50E94B4240F8F75 +:104AD00018A319A20E94461B8160782F9BA38AA36A +:104AE0004F8D58A169A18BA10E94B42481E0A896A2 +:104AF0000FB6F894DEBF0FBECDBFDF91CF911F91EF +:104B00000F9108950A8F13E01B8F81E08C8F0E9414 +:104B1000461B8160782F9E8F8D8F4A8D5B8D6C8DAB +:104B20008E8D0E94B4240D8B1E8B1F8A0E94461B03 +:104B30008160782F998F888F4D895E896F89898DE3 +:104B4000D3CF813099F66623F1F016E0188B198BDC +:104B50008A8B0E94461B8160782F9C8B8B8B4889A7 +:104B600059896A898C890E94B4241B871C871D86F9 +:104B70000E94461B8160782F9F878E874B855C85BE +:104B80006D858F85B1CF06E00E8318E01F8388877F +:104B90000E94461B8160782F9A8789874E815F81AA +:104BA00068858A850E94B42409831A831B820E9427 +:104BB000461B8160782F9D838C8349815A816B814C +:104BC0008D8192CFCF92DF92EF92FF920F931F933E +:104BD000CF93DF930F92CDB7DEB7EE24E394F12CA1 +:104BE0000CEA12E09E012F5F3F4F41EA52E063E082 +:104BF00082E00E940119082F882321F1C090DB0276 +:104C00008C2D90E09C0122523D4F79011981F901D0 +:104C10008081181BD12E80E00AC0DA94F7018081D0 +:104C20008F5F808360E08C2D0E944625802F1D14AD +:104C3000A4F3912F17FD90E0191B11110EC08111E3 +:104C40000E943E0B802F0F90DF91CF911F910F910B +:104C5000FF90EF90DF90CF9008951F5FF701808164 +:104C60008150808361E08C2D0E944625802FE5CF06 +:104C70001F921FB61F9211248F939F93AF93BF93E0 +:104C800080914604811113C080914704909148049B +:104C9000A0914904B0914A044196A11DB11D809391 +:104CA000470490934804A0934904B0934A04BF91E9 +:104CB000AF919F918F911F901FBE1F901895CDB7F8 +:104CC000DEB7E3970FB6F894DEBF0FBECDBF84B753 +:104CD000877F84BF0FB6F894A895809160008861A3 +:104CE00080936000109260000FBE80E890E00FB6E5 +:104CF000F89480936100909361000FBE85B780683F +:104D000085BF85B7806885BF88E799E090932702C3 +:104D1000809326020E94D5060E94A0078091E2009F +:104D200084608093E200789480915C048823A1F0F1 +:104D30001091E9001F709091EC00892F817090FD17 +:104D400080E8182B1092E9008091E80083FD0E9412 +:104D500000101F701093E90082E084BD93E095BDC0 +:104D60009AEF97BD80936E001092C8021092C9020C +:104D70001092CA021092CB020E94C514811102C087 +:104D80000E9421140E949C0E80935801809158012A +:104D9000882309F4C6C010926F0185E280937001E8 +:104DA0000E949C0E81110E94223180915801811134 +:104DB0002FC0FE01359686E0DF011D928A95E9F746 +:104DC00086E6898387E98A8386EC8B8384E38C83F8 +:104DD00085E38D833497AEE4B1E0CE010B9621914B +:104DE0002D938E179F07D9F787E0E5E7F1E0DE0105 +:104DF000919601900D928A95E1F7FE01B196A7E494 +:104E0000B1E0CE01889621912D938E179F07D9F797 +:104E10008091580195E0811190E09093D90285E04E +:104E2000891B8093D8020EE411E0A3E5EA2EA1E0ED +:104E3000FA2EF80181918F018F3F11F00E947C09B9 +:104E4000E016F106B1F707E411E0FEE4EF2EF1E021 +:104E5000FF2ED8018D918D018F3F11F00E947C09AA +:104E6000E016F106B1F7EEECF2E088ED92E0A5E491 +:104E7000B3E011921D928E179F07D9F70E94ED198A +:104E8000811102C00E946D1782E090E00E944333BE +:104E900080933A0384E090E00E944333182F82E22B +:104EA00090E00E944333982F812F9093CD028093FE +:104EB000CC020E94521BEFE7FBEB3197F1F700C0E9 +:104EC00000000E94521B8091450380FF2EC06FEFAF +:104ED0007FEF90E080E00E94753381E08093E000F6 +:104EE00080E28093D8001092C9008FE19EE4019780 +:104EF000F1F700C0000087E090EBDC0180937006C2 +:104F000090937106A0937206B093730688E19CE0BB +:104F10000FB6F894A895809360000FBE9093600040 +:104F2000FFCF85E280936F0139CF83E090E00E944C +:104F300043330E94C30B809166040E946E160E9448 +:104F40009C0E811102C00E94253183E080931003E2 +:104F500080E2809333040E94232F6DE070E08CE99F +:104F600092E00E94650D892BE9F58091100363E0C2 +:104F700070E081FD8AC289E992E00E94650D892B6B +:104F800089F56DE070E089E892E00E94650D892B5B +:104F900049F50E9462086058774C8E4F9F4F60938E +:104FA0003A0470933B0480933C0490933D04EEE6F6 +:104FB000F4E080E092E0DF019C011D92215030403E +:104FC000E1F7F0936F06E0936E068FEF9FEF9093FB +:104FD0006D0480936C0481E080933F0480933E04D1 +:104FE000109211038091DA02811136C00E94ED19EE +:104FF000811104C00E946D170E94551788E090E04F +:105000000E944B3360936704709368048093690433 +:1050100090936A04809151038360809351036E7F63 +:1050200071F40E94551788E090E00E944B33609322 +:105030006704709368048093690490936A040E94E3 +:10504000CC088091670480FF04C060E086950E94D0 +:10505000071681E08093DA0280915801811106C021 +:1050600084EF8093660185EF80936501209166014E +:10507000A22FA295AF70B0E091963C9191972F70BE +:1050800081E090E0BC01022E01C0660F0A94EAF7AD +:10509000462F4095432391964C93919792963C913D +:1050A0009297362B92963C93929740916501E42F0C +:1050B000E295EF70F0E031A14F70042E01C0880F2F +:1050C0000A94EAF7982F9095932391A392A1892BA4 +:1050D00082A390968C9190E002C0959587952A9531 +:1050E000E2F7817020A130E002C0359527954A95FE +:1050F000E2F792E020FF90E0892B8093E20280911A +:10510000580111E081278093E102312F381B309341 +:10511000DB020E94232F40E060E080E00E941E0D31 +:1051200089EA92E0909354038093530360E08AE00D +:105130000E94071681E00E940B1786EE90E0909384 +:105140005A0180935901109328030E943E0D8BE56C +:1051500091E09093430480934204E0E46E2E8091AA +:105160005C04FF24F39400E112E1853009F4DFC10F +:105170000E94521BE82E81110E946208EBE3F3E0CB +:10518000A5E4B3E010E000E0B02EDD9081918D1534 +:1051900009F4F1C18D25C12CFF24F3949F2D982390 +:1051A00009F4E4C10E949C0E882399F0C8A6B9A610 +:1051B000DF2081E009F480E08AA70E94461B81601D +:1051C000782F9CA78BA748A559A56AA58CA50E94F6 +:1051D000B424F801E55CFC4F8081F826F0828091D0 +:1051E000E202E82FEE0FEE0F90916601A92FA29533 +:1051F000AF70B0E090962C9130E09F7002C0359572 +:1052000027959A95E2F72170332790916501A92F90 +:10521000A295AF70B0E090964C9150E09F7002C0A4 +:10522000559547959A95E2F7CA018170992740FFF5 +:1052300002C082E090E0822B8E2B8093E2021091DC +:10524000E1028F70E82FF0E0EE50FE4F80819091E8 +:10525000E002890F8093E002F12C84306CF0E12FA2 +:10526000F0E0E252FD4F80818F5F808360E0812F0C +:105270000E944625FF24F3948091E0028D3F6CF458 +:10528000E12FF0E0E252FD4F80818150808361E0A8 +:10529000812F0E944625FF24F3948091E002082E7E +:1052A000000C990B64E070E00E9403338093E002ED +:1052B000F1100E943E0B80913F04882351F18091B0 +:1052C0001203909113030E94371BC29708F06AC122 +:1052D00020916C0430916D042115310509F08BC2C9 +:1052E00080913E048823A9F00E94620800913A044C +:1052F00010913B0420913C0430913D04601B710BE4 +:10530000820B930B6F3F7F4F8F4F9F4710F40E948C +:10531000950DE11001C0F1100E94B00D809138038D +:105320008A3008F0A0C380913603909137030E9421 +:10533000371B089708F497C304E610E025E030E037 +:1053400041E353E064E084E10E946E30892B09F070 +:105350005BC31092380386E0EAE1F3E0DE01919648 +:1053600001900D928A95E1F786E0FE01B196DE018B +:10537000119601900D928A95E1F786E0FE01319633 +:10538000ABE2B3E001900D928A95E1F7809135038D +:1053900087FD37C38091290390912A03009709F074 +:1053A0002AC360913103809132030091330310913D +:1053B000340390912803992309F4F0C241E00E943C +:1053C000F80C2091260330912703281B390B3093CA +:1053D00027032093260341E0602F812F0E94F80CC1 +:1053E0002091240330912503281B390B309325038A +:1053F0002093240364E273E080E393E00E94D90CDD +:1054000066E273E08FE293E00E94D90C10922D03C4 +:1054100010922E0386E0EBE2F3E0DE01119601909C +:105420000D928A95E1F786E0FE013196AAE1B3E09C +:1054300001900D928A95E1F730911C0320911D0394 +:1054400090911E0380911F037091160360911703C2 +:105450004091180350911903F0911B03E09115033B +:10546000FE13D8C2332311F07313D4C2222311F0D8 +:105470002613D0C2882311F08513CCC2992319F0CA +:1054800081E04913C8C280E0C6C286E992E075CDCA +:1054900080915C04843009F43AC00E94950D40E08C +:1054A00060E080E00E941E0D80E00E945616809110 +:1054B000DD02811109C0F092DD02809167048170E4 +:1054C0008093DC020E94E20F1092460488E190E093 +:1054D0000FB6F894A895809360000FBE60926000AC +:1054E00083B7817F846083BF83B7816083BF7894F3 +:1054F000889583B78E7F83BF0FB6F894A895809167 +:105500006000886180936000109260000FBE8091FF +:105510005B04882361F00E94521BE5E4F3E0819173 +:10552000811170C4AFE4B3E0AE17BF07C1F780913B +:105530005C04853009F4ACCF10924F040E94F70F41 +:105540000E94BF0E0E9456161092DD028091DC026E +:10555000882349F08091670481608093670460E04C +:1055600086950E9407160E943E0D02CEC394FF0C42 +:1055700027E0C21213CE0F5F1F4F0A30110509F04A +:1055800003CE8FEF8DA78EA71FA60E94461B8160BA +:10559000782F99AB88AB4DA55EA56FA589A90E9410 +:1055A000B4241DCE0E94461B9093130380931203D4 +:1055B00060E080E00E949A080E94BF0E8093EF0294 +:1055C0000E949C0E882331F14091EB025091EC0235 +:1055D0006091ED027091EE022FB7F894809147042C +:1055E00090914804A0914904B0914A042FBF841BB4 +:1055F000950BA60BB70B81339547A105B10540F07C +:105600000E94950D80913F04882309F469CE60CEF5 +:105610000E94B00D0E949C0E882309F4D3C061E063 +:1056200080E00E949A0860E08CE791E00E94881375 +:1056300062E080E00E949A08809166040E94890CD2 +:10564000823009F499C008F08EC0882309F494C010 +:10565000813009F497C065E080E00E949A0860E01C +:105660008AE991E00E94881366E080E00E949A082F +:105670006091EF02669561708FE991E00E94881356 +:1056800067E080E00E949A086091EF026095617087 +:1056900084EA91E00E94881368E080E00E949A0802 +:1056A0006091EF0262FB662760F988EA91E00E9450 +:1056B00088134091E7025091E8026091E9027091ED +:1056C000EA022FB7F8948091470490914804A09182 +:1056D0004904B0914A042FBF841B950BA60BB70B4E +:1056E0008D329140A105B10508F48CCF0E9462086B +:1056F0006093E7027093E8028093E9029093EA02D4 +:105700008091E602811104C080916701811142C03D +:105710006DE080E00E949A0860E08DEA91E00E94CE +:1057200088136AE080E00E949A0881E08093670114 +:105730008091E50290E00196817099278093E502BF +:1057400021E030E0281B390B40E6429FC001439F17 +:10575000900D11242091E402222351F1855C9B4F8E +:105760000E9492064FCF833089F0843009F073CFC6 +:1057700060E08EE891E003C060E082E891E00E9482 +:10578000881369CF60E088E891E0F9CF60E084E9B0 +:1057900091E0F5CF6AE080E00E949A0860E08DEA2F +:1057A00091E00E9488136BE080E00E949A08C0CFCD +:1057B0002091E302222319F085589C4FD1CF8554C4 +:1057C0009D4FCECF64E080E00E949A0860E083EBBA +:1057D00091E00E94881365E080E00E949A0860E0F2 +:1057E00089EB91E00E94881369E080E00E949A08AA +:1057F0008BEF94E0B5CF8091110361E070E08111EF +:105800006FCD082F10E02B01082E02C0440C551C50 +:105810000A94E2F7A90144215521452B09F448C017 +:105820009091100390FD46C08295880F80768093FA +:105830006A019801369527953695279520936D0135 +:10584000815E80936B0110926E0124E630E047E0A8 +:1058500050E068E671E088E70E941A30892B09F071 +:105860003FCDA80165E0440F551F6A95E1F780918F +:10587000100380FD2DC042595B4F04E610E020E28A +:1058800030E060E488E70E944130892B09F028CDA0 +:105890000E94B00DC2018095909540906C0450908C +:1058A0006D044822592250926D0440926C0418CD28 +:1058B0008F5FA7CF880F880F880F80936A0110929F +:1058C0006D01895F80936B0183E080936E01BDCF92 +:1058D000E0EFF2E080E2DF011D928A95E9F7E6E071 +:1058E000F2E0FBABEAAB02E012E037E0A32E992432 +:1058F0009394AAA9BBA92D91BBABAAABF8012190A7 +:105900008F01240E352E311CC10182599B4F1C0181 +:10591000E22FF0E0E051FD4F30E020E07A2C721AE7 +:10592000B92C022E01C0BB0C0A94EAF7610190E089 +:10593000D6018D916D018B21672D691B6770862EB5 +:10594000062E000C770BB82F01C0BB0F8A94EAF724 +:105950008B2E7195619571096770772701C08695C7 +:105960006A95EAF7882A8081882A80829F5F98302A +:10597000F9F62F5F3F4F31962830310579F6EAE08E +:10598000F2E02AA93BA9E217F30709F0B2CF04E637 +:1059900010E020E230E040EF52E073CF45E00E949B +:1059A000F80C2091220330912303820F931F9093D0 +:1059B00023038093220345E0602F812F0E94F80C7F +:1059C0002091200330912103281B390B30932103B0 +:1059D0002093200360E273E08DE293E00E94D90CF3 +:1059E00062E273E08EE293E00E94D90C10923003E1 +:1059F00010922F030FCD019790932A0380932903D0 +:105A000009CD84E190E0F8CF809138038F5F8093D7 +:105A1000380300CD81E080FF0FC0E0914204F09197 +:105A20004304309749F082E080931A030480F581A3 +:105A3000E02D8AE193E0099510921C0310921D035A +:105A400010921E0310921F0386E0EAE1F3E0A4E146 +:105A5000B3E001900D928A95E1F70E94461B909366 +:105A60003703809336030E94BF0E90913903891744 +:105A700031F00E94BF0E809339030E945616809128 +:105A80005C04843009F06BCB83E08093E900809163 +:105A9000E80082FF64CB8091E80090E085FF05C0BC +:105AA0000E94F406882399F091E08091E8008B77BA +:105AB0008093E800992309F452CBE981E150E33166 +:105AC00008F076C0F0E0EB52FB4C0C94173300E288 +:105AD00010E0CE0101967C018091E80085FD0AC0AE +:105AE0008091E8008B778093E8000E94F406882379 +:105AF00099F3DACF8091F100D7018D937D010150A8 +:105B0000110951F7D1CF1A8289E08B8311C08A81A4 +:105B1000823009F48FC1833091F1813009F048C09F +:105B20000E9462080E941D336B837C838D839E8359 +:105B300080915C04843009F012CB1091E9001F7051 +:105B40009091EC00892F817090FD80E8182B82E005 +:105B50008093E9008091E80080FF0DC050E040E0B4 +:105B600060E270E0CE0101960E9425078091E80076 +:105B70008E778093E8001F701093E900F0CADE0171 +:105B80001396E5E4F3E081918D9323E0EF34F2077F +:105B9000D1F7CECF8A81823059F46B817C818D819F +:105BA0009E810E941D3386E290E00E945733C0CF51 +:105BB0008FEF8983BDCF4C816B818A810E94301425 +:105BC0009827892798279E838D83B2CFED80FE800A +:105BD000FE24EF24FE248A810B813EE0039F800196 +:105BE00011249CE8899F000D111D11248C8190E0E7 +:105BF000880F991F080F191F6F2DC80187960E94E3 +:105C000057336E2DC8018896D0CF0E94B41390CF21 +:105C10008A818138C1F060F4803809F089CF20E0B2 +:105C20004B8160916904809168040E94F01480CFD8 +:105C30008238E9F0833809F07BCF20E040916A0494 +:105C40006C818B81F2CF60E08B810E9407168B8183 +:105C5000811103C00E94E20F6BCF809167048160C5 +:105C60008093670460E086950E94071661CF8B8160 +:105C700080936B045DCF8A81813899F030F480384D +:105C800009F056CF80916A0440CF823891F0833872 +:105C900009F04ECF809168048B83809169048C83D6 +:105CA00047CF8091670480FF02C086952ECF80E0A9 +:105CB0002CCF80916B0429CF6091670470916804A8 +:105CC0008091690490916A040E94DE1431CF80E1D2 +:105CD0008A832ECF81E08A838DE117CFCA80DB8053 +:105CE000DC24CD24DC248E010F5F1F4FEC80E00EFE +:105CF000F12EF11CC6018D519D4F0E151F0509F4A3 +:105D000017CFADE1CA16A1E0DA0650F40E94433382 +:105D1000F8018483BFEFCB1ADB0A0F5F1F4FEACF76 +:105D2000D80114961C92F6CF0A811B8110270127F7 +:105D30001027FE0131966F01EC80E00EF12EF11C70 +:105D4000C8018D519D4FE016F10609F4F1CE0D31D9 +:105D5000F1E01F0728F4D60114966C910E94573386 +:105D6000BFEFCB1ADB0A0F5F1F4FEACF0E94A413CD +:105D7000DFCE85E0ADCFCA80DB80DC24CD24DC24FF +:105D80008E010F5F1F4FEC80E00EF12EF11CC6015B +:105D90008796E016F10609F4CBCEECEBCE16E2E0E6 +:105DA000DE0658F40E944333D80114968C93FFEF1B +:105DB000CF1ADF0A0F5F1F4FEACFF8011482F7CF27 +:105DC0000A811B811027012710279E012F5F3F4F5B +:105DD0006901EC80E00EF12EF11CC8018796E016F7 +:105DE000F10609F4A5CE0C3B32E0130728F4D601E6 +:105DF00014966C910E945733BFEFCB1ADB0A0F5FEA +:105E00001F4FEBCF09BD19BD09B400FEFDCF809136 +:105E1000D8008F7D8093D8008091E00082608093CD +:105E2000E0008091E00081FDFCCF10924F040E94C1 +:105E3000F70F7DCB86E290E00E9443331B821C82E9 +:105E40001D828E8375CE1092B9008CE08093B800CD +:105E500008959F92AF92BF92CF92DF92EF92FF92FE +:105E60000F931F93CF93DF93B82EEB010E94461B35 +:105E70006C01EE24E394F12CC431D10560F025E0EF +:105E8000E22EF12CCF3FDC0731F0CE0164E170E06F +:105E90000E94E3327B0184EAA82E94E8992E1092A6 +:105EA000BC00A092BC000E94461B8C018091BC00EB +:105EB00087FF0DC08091B900887F883039F18091CB +:105EC000B900887F803111F10FEF1FEF09C00E94E8 +:105ED000461B801B910B8E159F0540F30EEF1FEFA5 +:105EE000CF3FDC07E1F2C6010E94371B8C179D07EC +:105EF000B0F2C801DF91CF911F910F91FF90EF9009 +:105F0000DF90CF90BF90AF909F900895B092BB006C +:105F10009092BC000E94461B8C018091BC0087FFC0 +:105F20000AC08091B900887F883111F0803461F611 +:105F300010E000E0DECF0E94461B801B910B8E1507 +:105F40009F0558F3CBCF0F931F93CF93DF93EB01B4 +:105F50008093BB0084E88093BC000E94461B8C01A8 +:105F60008091BC0087FF11C02091B900287F81E09B +:105F700090E0283211F490E080E0919581959109AC +:105F8000DF91CF911F910F910895CF3FDC0741F32F +:105F90000E94461B801B910B8C179D0708F38EEF08 +:105FA0009FEFEECF0F931F93CF93DF93EC0184EC21 +:105FB0008093BC000E94461B8C018091BC0087FF2F +:105FC00008C08091BB0090E0DF91CF911F910F91AD +:105FD0000895CF3FDC0789F30E94461B801B910B7D +:105FE0008C179D0750F38EEF9FEFEECF0F931F930B +:105FF000CF93DF93EC0184E88093BC000E94461BA2 +:106000008C018091BC0087FF08C08091BB0090E0AC +:10601000DF91CF911F910F910895CF3FDC0789F356 +:106020000E94461B801B910B8C179D0750F38EEF2F +:106030009FEFEECFCF92DF92EF92FF920F931F93DD +:10604000CF93DF936B018A017901B9010E94292F57 +:10605000E6010C0D1D1DC017D10761F424E9209342 +:10606000BC00DF91CF911F910F91FF90EF90DF90D7 +:10607000CF90089597FDF2CFB70189910E94A32F89 +:10608000EACFCF92DF92EF92FF920F931F93CF93BD +:10609000DF93C62F6A017901B8010E94292F97FD6D +:1060A0000CC0B8018C2F0E94A32FE601EC0CFD1C44 +:1060B000CE15DF0511F097FF0CC024E92093BC003A +:1060C000DF91CF911F910F91FF90EF90DF90CF90D4 +:1060D0000895B80189910E94A32FEACFCF92DF9251 +:1060E000EF92FF920F931F93CF93DF93F82EE62E3C +:1060F000EA016901B8010E94292F97FD15C0B80176 +:106100008E2D0E94A32F97FD0FC0B8018F2D8160A7 +:106110000E94292FF12CE12C21E0C21AD108EC14A5 +:10612000FD0400F597FF11C024E92093BC00181668 +:10613000190614F490E080E0DF91CF911F910F9148 +:10614000FF90EF90DF90CF900895C8010E94D22F6A +:1061500097FD04C0FE01EE0DFF1D80832FEFE21AB4 +:10616000F20ADDCF97FDE0CFC8010E94F62F97FD20 +:10617000DBCFCC0DDD1D8883D7CF84E98093BC00B5 +:1061800008958EE14A9B02C08150E1F74A9BFECF01 +:1061900008955A9880E28A95F1F75A9A0895FC0179 +:1061A0003BE03A95F1F798E020E080E031E040E113 +:1061B0004A95F1F7880F4A9B02C08160232742E08D +:1061C0004A95F1F7000040E14A95F1F7915079F7CF +:1061D00090E19A95F1F799B132E03A95F1F7000024 +:1061E00040E14A95F1F792FB992790F99227208197 +:1061F000920F90830895EF92FF920F931F93CF9386 +:10620000DF930F92CDB7DEB719828C017C01E60EC9 +:10621000F11C0E151F0561F481E09981911180E058 +:106220000F90DF91CF911F910F91FF90EF90089504 +:106230000E94C130CE0101960E94CF30F8018193B7 +:106240008F01E7CF529A5A9A089552985A9AEA9A29 +:10625000E9E6F0E080818F7C808308956150770BC0 +:1062600091E001C0990F6A95EAF720E031E09111C1 +:1062700008C0222391F05A9A80E28A95F1F75A9841 +:106280000895492F482339F05A9A232740E24A9526 +:10629000F1F79695ECCF5A98F9CF5A98EDCFFF9237 +:1062A0000F931F93CF93DF93EC018C01060F111D09 +:1062B000C017D10731F4DF91CF911F910F91FF905B +:1062C0000895F9900E94C93068E08F2D0E942E3108 +:1062D000EFCF1F920F920FB60F921124EF92FF9201 +:1062E0000F931F932F933F934F935F936F937F93DE +:1062F0008F939F93AF93BF93EF93FF93CF93DF93CE +:106300000F92CDB7DEB719820E94C130CE0101963F +:106310000E94CF30A82FA695A695A695282F229546 +:1063200025709A2F9570290F922F93702695269598 +:10633000920F982797708981982B09F075C0A83023 +:1063400008F072C080E18A95F1F75A9A529AB2E049 +:10635000BA95F1F700C05A98EA2EF12CEAE0AE9F08 +:10636000D0011124AF5FBE4F1896ED91FC911997A3 +:106370003097B1F06091F0017091F10116962D9176 +:106380003C911797260F371F13968D919C91149768 +:10639000680F791F15964C91159712968C91099557 +:1063A0008AE08E9DF0018F9DF00D1124EF5FFE4F6E +:1063B0006581662351F02091F0013091F1018681D1 +:1063C0009781820F931F0E944F310E94C930F0E1E4 +:1063D000FA95F1F75A9852985A9A80E18A95F1F70E +:1063E0008AE08E9D80018F9D100D11240F5F1E4F3E +:1063F000D80112966C911297662371F12091F001E9 +:106400003091F10113968D919C91820F931F0E9400 +:10641000FB30D801ED91FC91882311F088E001C098 +:1064200082E080830E94C1300F90DF91CF91FF9175 +:10643000EF91BF91AF919F918F917F916F915F91FC +:106440004F913F912F911F910F91FF90EF900F90DF +:106450000FBE0F901F901895ED91FC91DFCF0F9319 +:106460001F93CF93DF93EC0108970CF0A9C08AE04B +:106470008C9FF0018D9FF00D1124EF5FFE4F808106 +:106480009181892B09F49CC0F894529A5A9885E01E +:106490008A95F1F700008C2F869585709C2F95705A +:1064A000890F982F937086958695890F8E0193E0BA +:1064B000000F111F9A95E1F7082B0E94C93000C008 +:1064C00068E0802F0E942E31A0E1AA95F1F7529842 +:1064D0005A9A4A9B27C087E090E04A9925C08AE0F3 +:1064E0008C9F80018D9F100D11240F5F1E4FF801AE +:1064F00065816623A1F12091F0013091F10186813F +:106500009781820F931F0E94FB30811128C0529AFD +:106510005A9AD801ED91FC9182E08083789482E0D0 +:1065200090E016C000C0D5CF0197B9F4529A5A9A9C +:106530008AE08C9FF0018D9FF00D1124EF5FFE4FDC +:106540000190F081E02D81E08083789481E090E0FB +:10655000DF91CF911F910F91089500C0BECF0E948F +:10656000C130B0E2BA95F1F75A98529AE0E1EA9553 +:10657000F1F78AE08C9FF0018D9FF00D1124EF5F01 +:10658000FE4F6281662351F02091F0013091F101BC +:1065900083819481820F931F0E944F310E94C930E2 +:1065A0008AE08C9FF0018D9FF00D1124EF5FFE4F6C +:1065B0000190F081E02D1082789490E080E0C8CFC7 +:1065C00084E090E0C5CFAA1BBB1B51E107C0AA1F06 +:1065D000BB1FA617B70710F0A61BB70B881F991F84 +:1065E0005A95A9F780959095BC01CD010895991B06 +:1065F00079E004C0991F961708F0961B881F7A95BA +:10660000C9F78095089597FB072E16F4009407D0DC +:1066100077FD09D00E94E33207FC05D03EF4909547 +:1066200081959F4F0895709561957F4F0895EE0F66 +:10663000FF1F0590F491E02D09946927962769279B +:106640007827872778270895FB01DC0102C0059091 +:106650000D9241505040D8F70895FB01DC0104C071 +:106660008D910190801921F441505040C8F7881B4A +:10667000990B0895FB01DC0102C001900D9241507D +:106680005040D8F70895F999FECF92BD81BDF89A90 +:10669000992780B50895A6E1B0E044E050E00C945D +:1066A0007D33A8E1B0E042E050E00C947D33262F2A +:1066B000F999FECF92BD81BDF89A019700B40216F8 +:1066C00039F01FBA20BD0FB6F894FA9AF99A0FBEA6 +:1066D00008950396272F0E9458330E945733252F81 +:1066E0000E945833242F0C9458330196272F0E9470 +:1066F00058330C945733DC01CB01FC01F999FECFE0 +:1067000006C0F2BDE1BDF89A319600B40D92415039 +:106710005040B8F708950E94CD3308F481E0089501 +:10672000E89409C097FB3EF490958095709561952B +:106730007F4F8F4F9F4F9923A9F0F92F96E9BB27E1 +:106740009395F695879577956795B795F111F8CF5D +:10675000FAF4BB0F11F460FF1BC06F5F7F4F8F4FC8 +:106760009F4F16C0882311F096E911C0772321F0BE +:106770009EE8872F762F05C0662371F096E8862F56 +:1067800070E060E02AF09A95660F771F881FDAF7AD +:10679000880F9695879597F90895990F0008550FDA +:1067A000AA0BE0E8FEEF16161706E807F907C0F097 +:1067B00012161306E407F50798F0621B730B840B9F +:1067C000950B39F40A2661F0232B242B252B21F479 +:1067D00008950A2609F4A140A6958FEF811D811D19 +:1067E00008950E9404340C9475340E94673438F084 +:1067F0000E946E3420F0952311F00C945E340C94BA +:10680000643411240C94A9340E94863470F3959F4B +:10681000C1F3950F50E0551F629FF001729FBB2797 +:10682000F00DB11D639FAA27F00DB11DAA1F649F33 +:106830006627B00DA11D661F829F2227B00DA11DE6 +:10684000621F739FB00DA11D621F839FA00D611D6C +:10685000221F749F3327A00D611D231F849F600D8D +:10686000211D822F762F6A2F11249F5750409AF0B6 +:10687000F1F088234AF0EE0FFF1FBB1F661F771F42 +:10688000881F91505040A9F79E3F510580F00C940D +:106890005E340C94A9345F3FE4F3983ED4F38695BC +:1068A00077956795B795F795E7959F5FC1F7FE2BAD +:1068B000880F911D9695879597F9089597F99F6789 +:1068C00080E870E060E008959FEF80EC0895002478 +:1068D0000A941616170618060906089500240A9445 +:1068E00012161306140605060895092E0394000CCB +:1068F00011F4882352F0BB0F40F4BF2B11F460FF5A +:1069000004C06F5F7F4F8F4F9F4F089557FD905882 +:10691000440F551F59F05F3F71F04795880F97FB63 +:10692000991F61F09F3F79F087950895121613061D +:106930001406551FF2CF4695F1DF08C0161617064C +:106940001806991FF1CF8695710561050894089581 +:10695000E894BB2766277727CB0197F90895F89429 +:10696000FFCFE7100F1162110F11621142117A115E +:10697000621177128412B014B014B914B914BB1494 +:10698000B914B914B914B014B014C014B914B914AA +:10699000C0141721172170217021A2214A214A21F8 +:1069A0004A21BC212D223D223D22832D872DCA2D37 +:1069B000DB2DE62D052E082E3B2E5C2ED82DD82D56 +:1069C000672E6A2E6E2E942EB62EB92EBB2EE02E7A +:1069D0000130020000000100000000300200000051 +:1069E0000501000000300200000001060000003038 +:1069F000020000000107000000300204080000004F +:106A00000000003002090C0000000000003002010C +:106A10001500000000000036323331F7F667669744 +:106A2000C6343500000000000180005F082B0E0A0C +:106A30000E060E020EF4F5010021007F2200030075 +:106A40004A004A4A01F6F731333236674C4159451C +:106A5000520042617365200047616D6520005261FC +:106A6000697365004C6F776572004C4F434B004370 +:106A7000617073004E756D005363726C00202020AE +:106A8000202000534F4C415200544D50535400812C +:106A90008283E200E900EA00B500B600B700CD004D +:106AA0008301CC008A019201940121022302240275 +:106AB0002502260227022A02B300B4006F007000EC +:106AC000A50200FF0100010000FFFF00000100011E +:106AD000FF0000081018181008000001020202024E +:106AE00002020202020240227B99017701FC0000AF +:066AF0000C190C390C002A :00000001FF From dba1037080c81fb1301f867ff7312e6242ff2188 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 31 Oct 2021 12:16:26 -0400 Subject: [PATCH 031/155] Simpler fix for trackball rotation issue. Updated readme. --- .../solartempest/sofle/keymaps/via/keymap.c | 13 +- .../sofle/keymaps/via/pimoroni_trackball.c | 201 ---- .../sofle/keymaps/via/pimoroni_trackball.h | 37 - keyboards/solartempest/sofle/readme.md | 10 +- keyboards/solartempest/sofle/rules.mk | 2 +- .../sofle/solartempest_sofle_via.hex | 932 +++++++++--------- 6 files changed, 486 insertions(+), 709 deletions(-) delete mode 100644 keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.c delete mode 100644 keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.h diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index d51ae53124a4..862f76185eba 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -29,9 +29,7 @@ #endif #ifdef POINTING_DEVICE_ENABLE - //#include "drivers/sensors/pimoroni_trackball.h" //Normally this is included, but the master code has an issue with the rotation code. - #include "pimoroni_trackball.c" //This is the master code with a workaround for scrolling rotation with inversion (line 146 only). - #include "pimoroni_trackball.h" + #include "drivers/sensors/pimoroni_trackball.h" bool was_scrolling = true; //Remember last state of trackball scrolling #endif @@ -138,6 +136,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these } pointing_device_set_report(currentReport); } + + bool pointing_device_task_user(pimoroni_data* trackball_data) { //Code from Dasky (Thanks!). This corrects the rotate/inversion scrolling issue currently in QMK Master. + if (trackball_is_scrolling()) { + pimoroni_data temp = *trackball_data; + trackball_data->up = temp.down; + trackball_data->down = temp.up; + } + return true; + } #endif diff --git a/keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.c b/keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.c deleted file mode 100644 index a706db9c804c..000000000000 --- a/keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.c +++ /dev/null @@ -1,201 +0,0 @@ -/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) - * Copyright 2021 Dasky (@daskygit) - * - * 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 . - */ -#include "pimoroni_trackball.h" -#include "i2c_master.h" -#include "print.h" - -#ifndef PIMORONI_TRACKBALL_ADDRESS -# define PIMORONI_TRACKBALL_ADDRESS 0x0A -#endif -#ifndef PIMORONI_TRACKBALL_INTERVAL_MS -# define PIMORONI_TRACKBALL_INTERVAL_MS 8 -#endif -#ifndef PIMORONI_TRACKBALL_MOUSE_SCALE -# define PIMORONI_TRACKBALL_MOUSE_SCALE 5 -#endif -#ifndef PIMORONI_TRACKBALL_SCROLL_SCALE -# define PIMORONI_TRACKBALL_SCROLL_SCALE 1 -#endif -#ifndef PIMORONI_TRACKBALL_DEBOUNCE_CYCLES -# define PIMORONI_TRACKBALL_DEBOUNCE_CYCLES 20 -#endif -#ifndef PIMORONI_TRACKBALL_ERROR_COUNT -# define PIMORONI_TRACKBALL_ERROR_COUNT 10 -#endif - -#define TRACKBALL_TIMEOUT 100 -#define TRACKBALL_REG_LED_RED 0x00 -#define TRACKBALL_REG_LED_GRN 0x01 -#define TRACKBALL_REG_LED_BLU 0x02 -#define TRACKBALL_REG_LED_WHT 0x03 -#define TRACKBALL_REG_LEFT 0x04 -#define TRACKBALL_REG_RIGHT 0x05 -#define TRACKBALL_REG_UP 0x06 -#define TRACKBALL_REG_DOWN 0x07 - -static pimoroni_data current_pimoroni_data; -static report_mouse_t mouse_report; -static bool scrolling = false; -static int16_t x_offset = 0; -static int16_t y_offset = 0; -static int16_t h_offset = 0; -static int16_t v_offset = 0; -static uint16_t precision = 128; -static uint8_t error_count = 0; - -float trackball_get_precision(void) { return ((float)precision / 128); } -void trackball_set_precision(float floatprecision) { precision = (floatprecision * 128); } -bool trackball_is_scrolling(void) { return scrolling; } -void trackball_set_scrolling(bool scroll) { scrolling = scroll; } - -void trackball_set_rgbw(uint8_t r, uint8_t g, uint8_t b, uint8_t w) { - uint8_t data[4] = {r, g, b, w}; - __attribute__((unused)) i2c_status_t status = i2c_writeReg(PIMORONI_TRACKBALL_ADDRESS << 1, TRACKBALL_REG_LED_RED, data, sizeof(data), TRACKBALL_TIMEOUT); -#ifdef TRACKBALL_DEBUG - dprintf("Trackball RGBW i2c_status_t: %d\n", status); -#endif -} - -i2c_status_t read_pimoroni_trackball(pimoroni_data* data) { - i2c_status_t status = i2c_readReg(PIMORONI_TRACKBALL_ADDRESS << 1, TRACKBALL_REG_LEFT, (uint8_t*)data, sizeof(*data), TRACKBALL_TIMEOUT); -#ifdef TRACKBALL_DEBUG - dprintf("Trackball READ i2c_status_t: %d\nLeft: %d\nRight: %d\nUp: %d\nDown: %d\nSwtich: %d\n", status, data->left, data->right, data->up, data->down, data->click); -#endif - return status; -} - -__attribute__((weak)) void pointing_device_init(void) { - i2c_init(); - trackball_set_rgbw(0x00, 0x00, 0x00, 0x00); -} - -int16_t trackball_get_offsets(uint8_t negative_dir, uint8_t positive_dir, uint8_t scale) { - uint8_t offset = 0; - bool isnegative = false; - if (negative_dir > positive_dir) { - offset = negative_dir - positive_dir; - isnegative = true; - } else { - offset = positive_dir - negative_dir; - } - uint16_t magnitude = (scale * offset * offset * precision) >> 7; - return isnegative ? -(int16_t)(magnitude) : (int16_t)(magnitude); -} - -void trackball_adapt_values(int8_t* mouse, int16_t* offset) { - if (*offset > 127) { - *mouse = 127; - *offset -= 127; - } else if (*offset < -127) { - *mouse = -127; - *offset += 127; - } else { - *mouse = *offset; - *offset = 0; - } -} - -__attribute__((weak)) void trackball_click(bool pressed, report_mouse_t* mouse) { -#ifdef PIMORONI_TRACKBALL_CLICK - if (pressed) { - mouse->buttons |= MOUSE_BTN1; - } else { - mouse->buttons &= ~MOUSE_BTN1; - } -#endif -} - -__attribute__((weak)) bool pointing_device_task_user(pimoroni_data* trackball_data) { return true; }; - -__attribute__((weak)) void pointing_device_task() { - static fast_timer_t throttle = 0; - static uint16_t debounce = 0; - - if (error_count < PIMORONI_TRACKBALL_ERROR_COUNT && timer_elapsed_fast(throttle) >= PIMORONI_TRACKBALL_INTERVAL_MS) { - i2c_status_t status = read_pimoroni_trackball(¤t_pimoroni_data); - - if (status == I2C_STATUS_SUCCESS) { - error_count = 0; - - if (pointing_device_task_user(¤t_pimoroni_data)) { - mouse_report = pointing_device_get_report(); - - if (!(current_pimoroni_data.click & 128)) { - trackball_click(false, &mouse_report); - if (!debounce) { - if (scrolling) { -#ifdef PIMORONI_TRACKBALL_INVERT_X - h_offset += trackball_get_offsets(current_pimoroni_data.right, current_pimoroni_data.left, PIMORONI_TRACKBALL_SCROLL_SCALE); -#else - h_offset -= trackball_get_offsets(current_pimoroni_data.right, current_pimoroni_data.left, PIMORONI_TRACKBALL_SCROLL_SCALE); -#endif -#if defined(PIMORONI_TRACKBALL_INVERT_Y) && !defined(PIMORONI_TRACKBALL_ROTATE) //This line was customized to correct the scroll rotation inversion issue. - v_offset += trackball_get_offsets(current_pimoroni_data.down, current_pimoroni_data.up, PIMORONI_TRACKBALL_SCROLL_SCALE); -#else - v_offset -= trackball_get_offsets(current_pimoroni_data.down, current_pimoroni_data.up, PIMORONI_TRACKBALL_SCROLL_SCALE); -#endif - } else { -#ifdef PIMORONI_TRACKBALL_INVERT_X - x_offset -= trackball_get_offsets(current_pimoroni_data.right, current_pimoroni_data.left, PIMORONI_TRACKBALL_MOUSE_SCALE); -#else - x_offset += trackball_get_offsets(current_pimoroni_data.right, current_pimoroni_data.left, PIMORONI_TRACKBALL_MOUSE_SCALE); -#endif -#ifdef PIMORONI_TRACKBALL_INVERT_Y - y_offset -= trackball_get_offsets(current_pimoroni_data.down, current_pimoroni_data.up, PIMORONI_TRACKBALL_MOUSE_SCALE); -#else - y_offset += trackball_get_offsets(current_pimoroni_data.down, current_pimoroni_data.up, PIMORONI_TRACKBALL_MOUSE_SCALE); -#endif - } - if (scrolling) { -#ifndef PIMORONI_TRACKBALL_ROTATE - trackball_adapt_values(&mouse_report.h, &h_offset); - trackball_adapt_values(&mouse_report.v, &v_offset); -#else - trackball_adapt_values(&mouse_report.h, &v_offset); - trackball_adapt_values(&mouse_report.v, &h_offset); -#endif - mouse_report.x = 0; - mouse_report.y = 0; - } else { -#ifndef PIMORONI_TRACKBALL_ROTATE - trackball_adapt_values(&mouse_report.x, &x_offset); - trackball_adapt_values(&mouse_report.y, &y_offset); -#else - trackball_adapt_values(&mouse_report.x, &y_offset); - trackball_adapt_values(&mouse_report.y, &x_offset); -#endif - mouse_report.h = 0; - mouse_report.v = 0; - } - } else { - debounce--; - } - } else { - trackball_click(true, &mouse_report); - debounce = PIMORONI_TRACKBALL_DEBOUNCE_CYCLES; - } - } - } else { - error_count++; - } - - pointing_device_set_report(mouse_report); - pointing_device_send(); - - throttle = timer_read_fast(); - } -} diff --git a/keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.h b/keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.h deleted file mode 100644 index 6b2a41425d41..000000000000 --- a/keyboards/solartempest/sofle/keymaps/via/pimoroni_trackball.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) - * Copyright 2021 Dasky (@daskygit) - * - * 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 . - */ -#pragma once - -#include "quantum.h" -#include "pointing_device.h" - -typedef struct pimoroni_data { - uint8_t left; - uint8_t right; - uint8_t up; - uint8_t down; - uint8_t click; -} pimoroni_data; - -void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white); -void trackball_click(bool pressed, report_mouse_t* mouse); -int16_t trackball_get_offsets(uint8_t negative_dir, uint8_t positive_dir, uint8_t scale); -void trackball_adapt_values(int8_t* mouse, int16_t* offset); -float trackball_get_precision(void); -void trackball_set_precision(float precision); -bool trackball_is_scrolling(void); -void trackball_set_scrolling(bool scroll); diff --git a/keyboards/solartempest/sofle/readme.md b/keyboards/solartempest/sofle/readme.md index 42a25fa17a43..78a5482c741b 100644 --- a/keyboards/solartempest/sofle/readme.md +++ b/keyboards/solartempest/sofle/readme.md @@ -1,6 +1,6 @@ # Sofle Keyboard -![SofleKeyboard version 2.1 RGB Keyhive](https://i.imgur.com/WH9OoWu.jpg) +![SofleKeyboard version 2.1 RGB Keyhive](https://i.imgur.com/utkZbYS.jpeg) Sofle is 6×4+5 keys column-staggered split keyboard. Based on Lily58, Corne and Helix keyboards. @@ -15,7 +15,6 @@ Build guide and log is available here: [SofleKeyboard build log/guide](https://j * Hardware Availability: [Keyhive](https://keyhive.xyz/shop/sofle) # Custom Features: - ### OLED Features: - Includes Snakey keyboard pet! Slithers according to WPM, bites, and sticks its tongue out at you! - OLED displays current layer, lock key status, WPM, custom logo, and custom name. @@ -24,6 +23,13 @@ Build guide and log is available here: [SofleKeyboard build log/guide](https://j - Includes working Bongocat (disable RGB for sufficient space). - Includes stock OLED code as well. +### Trackball Features: +- Supports Pimoroni Trackball installed on master side. +- Default action is scrolling. Hold Raise layer for mouse mode. +- Mouse mode and precision mode are toggleable with trackball LED indication. +- Trackball LED shuts off when computer is sleeping. +- Clicking and dragging is enabled using mouse keys on keymap. + ### RGB Features: - Adds custom layer lighting with custom gradients for each layer. - RGB underglow support and remapped to physical locations (nicer gradients and effects). diff --git a/keyboards/solartempest/sofle/rules.mk b/keyboards/solartempest/sofle/rules.mk index d33293be4db1..206552b12257 100644 --- a/keyboards/solartempest/sofle/rules.mk +++ b/keyboards/solartempest/sofle/rules.mk @@ -26,4 +26,4 @@ SPACE_CADET_ENABLE = no # Save space by not using space cadet left/right shift POINTING_DEVICE_ENABLE = yes # Enable Pimoroni Trackball QUANTUM_LIB_SRC += i2c_master.c -#SRC += drivers/sensors/pimoroni_trackball.c # There is an issue with the rotation code in the current master. Modified version included in keymap.c instead. \ No newline at end of file +SRC += drivers/sensors/pimoroni_trackball.c \ No newline at end of file diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index 8628e6281948..ff3709b3aa6b 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,4 +1,4 @@ -:100000000C9449060C9490060C9490060C9469315B +:100000000C9449060C9490060C9490060C9476314E :100010000C9490060C9490060C9490060C94900608 :100020000C9490060C9490060C943C1A0C94F819BD :100030000C9438260C9490060C9490060C94900620 @@ -205,9 +205,9 @@ :100CC000700610927106109272061092730614BE8E :100CD00084B7877F84BF0FB6F894A8958091600091 :100CE000886180936000109260000FBEE0E0F8E33E -:100CF000099512E0A0E0B1E0E0EDF9E602C0059050 +:100CF000099512E0A0E0B1E0EAEEF9E602C0059045 :100D00000D92A632B107D9F726E0A6E2B2E001C003 -:100D10001D92A037B207E1F70E945F260C94AF3412 +:100D10001D92A037B207E1F70E945F260C94BC3405 :100D20000C940000CF93DF9340916E0650916F06B4 :100D30004E5654409A01205A3F4F21303240C0F065 :100D400020E032E0241B350B60916C0470916D043F @@ -288,7 +288,7 @@ :1011F000E8835A83DF91CF911F910F91FF90EF9079 :10120000DF90BF90AF900895E62EF12C4491D42E3C :10121000E42FF0E026E0829FC00111242FEF30E0A0 -:10122000B9010E94E332802F90E0880F991F55E5A5 +:10122000B9010E94F032802F90E0880F991F55E598 :10123000569FD001579FB00D11248A1B9B0B982FEE :10124000990F890F5901AE18BF08AE9ED001AF9E0D :10125000B00DBE9EB00D11245B2F189F800111248C @@ -420,18 +420,18 @@ :101A3000819591090895681B20E0DFCF0F931F93D4 :101A4000CF93DF9300D000D0CDB7DEB789836A8310 :101A50004B831C8204E610E024E030E0AE014F5FCF -:101A60005F4F60E084E10E9441300F900F900F9033 +:101A60005F4F60E084E10E944E300F900F900F9026 :101A70000F90DF91CF911F910F91089580912803CE :101A8000882329F047E669E98BE20C941E0D6091EA -:101A9000590170915A0190E080E00E94903320E05B -:101AA00030E040E05CE30E94F13320E030E040E8C9 -:101AB0005FE30E948B33882321F047EC6BE180E0E9 +:101A9000590170915A0190E080E00E949D3320E04E +:101AA00030E040E05CE30E94FE3320E030E040E8BC +:101AB0005FE30E949833882321F047EC6BE180E0DC :101AC000E4CF41E265EA89EDE0CFCF92DF92EF9279 :101AD000FF920F931F93CF93DF936C017B0164E61A -:101AE00070E088E70E94292FEC0197FD12C010E0FA +:101AE00070E088E70E94362FEC0197FD12C010E0ED :101AF00000E0F601E00FF11F849164E670E00E94BF -:101B0000A32FEC01892B29F40F5F1F4F0E151F0522 -:101B100081F70E94BD30CE01DF91CF911F910F91CF +:101B0000B02FEC01892B29F40F5F1F4F0E151F0515 +:101B100081F70E94CA30CE01DF91CF911F910F91C2 :101B2000FF90EF90DF90CF90089580913E049091C8 :101B30003F04911103C091E089270895882369F03B :101B400062E070E08CEE9BE00E94650D892B19F03D @@ -497,7 +497,7 @@ :101F000001C0220F0A94EAF7822309F43FC0F601C8 :101F1000EE0FFF1FE80DF91DE590F490E114F104B8 :101F200009F479CF45E050E0B701CE0101960E9457 -:101F3000243309810F3F51F18A81800F9927991F1E +:101F3000313309810F3F51F18A81800F9927991F11 :101F40008B34910514F08AE490E05C01AA0CBB1C70 :101F50008A0D9B1DDC01AB5ABC4F5D01049D8001C5 :101F600011240B5A1C4F0A151B0520F0B5E0EB0E8F @@ -515,8 +515,8 @@ :102020002D93CD01B4E086369B07B9F780915F040C :10203000833009F471C0B8F4813009F448C08230AB :1020400009F4B4C08091E80083FF3CC180915E0434 -:1020500090915F049A3008F035C1E92FF0E0EF5419 -:10206000FB4C0C9417338A3009F48FC08B3009F481 +:1020500090915F049A3008F035C1E92FF0E0E25426 +:10206000FB4C0C9424338A3009F48FC08B3009F474 :1020700070C0893039F780915E04813219F7809100 :10208000620490916304009711F00297D9F6809151 :10209000E800877F8093E8008091E80082FF37C0E6 @@ -601,22 +601,22 @@ :10258000E9008091E800877F8093E8000E944F0770 :1025900099CE1F93CF93DF93162FC0916E06D091E3 :1025A0006F068A30D1F420913304CE018E569440C8 -:1025B000622F70E00E94E332281B822F66E00E94A7 -:1025C000F732C82FC15020F4DF91CF911F910895A9 +:1025B000622F70E00E94F032281B822F66E00E949A +:1025C0000433C82FC15020F4DF91CF911F9108959B :1025D00060E080E20E94C912F5CF8D30E9F4CE565A -:1025E000D44020913304622F70E0CE010E94E33288 +:1025E000D44020913304622F70E0CE010E94F0327B :1025F000281B822F9E01280F311D2115324018F013 :1026000080E0D0E0C0E0C80FD11DC259DB4FD093AD :102610006F06C0936E06D8CF96E0FE01A4E3B4E047 :1026200001900D929A95E1F7803E90F186E0FE01CF :1026300011928A95E9F7C0916E06D0916F0611113B -:1026400033C046E050E0BE0184E394E00E942D33A5 +:1026400033C046E050E0BE0184E394E00E943A3398 :102650009E012E563440892B91F52A5F3F4F4091C1 -:102660003304642F70E0C9010E94E332481B4630F6 +:102660003304642F70E0C9010E94F032481B4630E9 :1026700010F4240F311D211572E0370710F030E0FF :1026800020E022593B4F30936F0620936E069CCF7B :10269000F6E08F9FB00111246655794F46E050E077 -:1026A000CE010E942433C7CF9E012A5F3F4FFE0117 +:1026A000CE010E943133C7CF9E012A5F3F4FFE010A :1026B0002E173F0731F2808180958193F9CFC901B0 :1026C00045E0969587954A95E1F741E050E0BA01DB :1026D00002C0660F771F8A95E2F7CB0160916C0408 @@ -627,27 +627,27 @@ :1027200001900020E9F78F0101501109C017D1076E :1027300030F0DF91CF911F910F91FF9008956F2D91 :1027400089910E94C912F2CFCF93DF93C3EED2E0FA -:1027500060E0CE010E9457332196C11584E0D8076E +:1027500060E0CE010E9464332196C11584E0D80761 :10276000B9F7DF91CF9108956F927F928F929F92E8 :10277000AF92BF92CF92DF92EF92FF920F931F938F :10278000CF93DF938AEAC82E86E0D82E91ECE92E0B :10279000F12CE701CC58D10936011BC0F501859019 -:1027A0009490692DC8010E945733682DC801019685 -:1027B0000E94573382E0A80EB11C0E5F1F4FC01756 +:1027A0009490692DC8010E946433682DC801019678 +:1027B0000E94643382E0A80EB11C0E5F1F4FC01749 :1027C000D10761F78EE0680E711C2E96CE15DF05DD :1027D00029F08E010E5011095301E0CF7E018CE8E3 :1027E000E80EF11C8CE8C80ED11C8DE7E81683E0DA :1027F000F80679F6DF91CF911F910F91FF90EF903E :10280000DF90CF90BF90AF909F908F907F906F9010 :102810000895CF93C82F6FEF811161E283E290E0BA -:102820000E9457336FEFC11160E184E290E00E9493 -:1028300057336FEFC11161E385E290E0CF910C94C3 -:10284000573380E00E94091460E086E290E00E9425 -:1028500057330E94B4130E94A41381E00C9409140E +:102820000E9464336FEFC11160E184E290E00E9486 +:1028300064336FEFC11161E385E290E0CF910C94B6 +:10284000643380E00E94091460E086E290E00E9418 +:1028500064330E94B4130E94A41381E00C94091401 :102860000F931F93CF93DF93C42FD0E0CC0FDD1FC6 :102870002EE0629FC00DD11D11243CE8839FC00D46 -:10288000D11D1124CE0187960E944333082F10E0FA -:10289000102F0027CE0188960E9443339801282BE1 +:10288000D11D1124CE0187960E945033082F10E0ED +:10289000102F0027CE0188960E9450339801282BD4 :1028A000C901DF91CF911F910F910895462F853077 :1028B00038F47A3028F4673018F4672F0C94301409 :1028C00090E080E00895CF92DF92FF920F931F93E4 @@ -659,15 +659,15 @@ :1029200061F3EECFCF93DF93EC010E946314BE01FD :102930000E945614DF91CF910C94D609FC0180813E :1029400091810E949214292F2F7092959F7092501E -:102950009E3078F4E92FF0E0E554FB4C0C941733EB +:102950009E3078F4E92FF0E0E853FB4C0C942433DC :10296000803F19F020F4883E20F481E00895843FF0 :10297000E1F380E00895883EC0F3813FD1F7F5CFC1 :10298000822F869586958695089583E290E00E9431 -:102990004333813289F484E290E00E9443338031F2 -:1029A00059F485E290E00E94433391E0813309F0CD +:102990005033813289F484E290E00E9450338031D8 +:1029A00059F485E290E00E94503391E0813309F0C0 :1029B00090E0892F8170089580E0FCCFCF92DF9264 :1029C000EF92FF926B017C010E94CC08B701A60137 -:1029D00088E090E0FF90EF90DF90CF900C94693307 +:1029D00088E090E0FF90EF90DF90CF900C947633FA :1029E000AF92BF92CF92DF92EF92FF920F931F931D :1029F000CF93DF9300D00F92CDB7DEB7082FF62E1E :102A0000142FE22E8091670480FF4FC0E82FE695D7 @@ -686,7 +686,7 @@ :102AD000C5CF923039F6E2508E2F8170D82EE69510 :102AE000F0E0E55AF94FA590B490C12CBB24609159 :102AF0007301C61608F0B4CF2C2D30E0A29EC001A1 -:102B0000A39E900DB29E900D112470E00E94E332BE +:102B0000A39E900DB29E900D112470E00E94F032B1 :102B1000802FD11016C0860F40917101420F532FA4 :102B2000511D9A01220F331F240F351F2B5A3C4F82 :102B3000412F113A08F040EA6F2D0E94E208C39439 @@ -748,19 +748,19 @@ :102EB000808311828FEF828380EA83831482AFE460 :102EC000B3E012968C911297836012968C93608176 :102ED0007181828193810C94DE1469EE7EEF90E023 -:102EE00080E00E94753360E082E090E00E945733FA -:102EF00060E083E090E00E94573310928A0260E025 -:102F000084E090E00E94573360E082E290E00E940B -:102F1000573360E085E090E00E94573360E086E040 -:102F200090E00E9457336FEF87E090E00E945733A4 -:102F300040E050E0BA0188E090E00E94693360E030 -:102F40008DE090E00E94573340E050E0BA0188E104 -:102F500090E00E94693360E087E190E00E9457337F -:102F600040E050E0BA018CE190E00E94693370E0EB -:102F700060E080E290E00E94753340E050E0BA01EA -:102F800088E190E00E94693380E00E9409140E9469 -:102F9000211440E050E0BA018FE090E00E946933D4 -:102FA00040E050E0BA0183E190E00C9469330F9364 +:102EE00080E00E94823360E082E090E00E946433E0 +:102EF00060E083E090E00E94643310928A0260E018 +:102F000084E090E00E94643360E082E290E00E94FE +:102F1000643360E085E090E00E94643360E086E026 +:102F200090E00E9464336FEF87E090E00E9464338A +:102F300040E050E0BA0188E090E00E94763360E023 +:102F40008DE090E00E94643340E050E0BA0188E1F7 +:102F500090E00E94763360E087E190E00E94643365 +:102F600040E050E0BA018CE190E00E94763370E0DE +:102F700060E080E290E00E94823340E050E0BA01DD +:102F800088E190E00E94763380E00E9409140E945C +:102F9000211440E050E0BA018FE090E00E947633C7 +:102FA00040E050E0BA0183E190E00C9476330F9357 :102FB0001F93CF93DF9300D000D0CDB7DEB7409101 :102FC000BB025091BC026091BD027091BE022FB74E :102FD000F8948091470490914804A0914904B091DD @@ -769,7 +769,7 @@ :1030000062086E5F7F4F8F4F9F4F69837A838B83F8 :103010009C8380912C0190912D018B559D4F409167 :103020002B0150E04530510510F044E050E0BE0166 -:103030006F5F7F4F0E943A3384E090E00E942F320E +:103030006F5F7F4F0E94473384E090E00E943C32F4 :10304000892BD9F40E9462086093BB027093BC0282 :103050008093BD029093BE0281E010C00E9462087E :103060000091C8021091C9022091CA023091CB028E @@ -782,8 +782,8 @@ :1030D000C916D104E104F10410F4442311F1E82EDF :1030E000082E000CFF089AE08902F0011124EF5F1E :1030F000FE4F838194818B559D4F428150E0041790 -:10310000150708F4A801B9010E943A33C7010E94CB -:103110002F32892BA1F40E946208688379838A8305 +:10310000150708F4A801B9010E944733C7010E94BE +:103110003C32892BA1F40E946208688379838A83F8 :103120009B8381E0DF91CF911F910F91FF90EF90F2 :10313000DF90CF90BF90AF909F908F90089580E0E8 :10314000F1CF0F931F93CF93DF930F92CDB7DEB7DD @@ -801,25 +801,25 @@ :1032000008956F927F928F929F92AF92BF92CF92CA :10321000DF92EF92FF920F931F93CF93DF930F9262 :10322000CDB7DEB7862E5A016901682E880F770860 -:10323000C3010E942F32892B09F088C08AE0869D45 +:10323000C3010E943C32892B09F088C08AE0869D38 :10324000F001879DF00D1124EF5FFE4F458150E0A6 :103250004115510511F041E050E08AE0869DF001F2 :10326000879DF00D1124EF5FFE4F668177816B55CE -:103270007D4FCE0101960E943A33F5014081518184 +:103270007D4FCE0101960E944733F5014081518177 :10328000628173812FB7F89480914704909148042C :10329000A0914904B0914A042FBF841B950BA60B43 :1032A000B70B84369105A105B10540F4B701C801FB :1032B0000E94B1089981891709F44FC0082C000CAD -:1032C0009908C4010E942F32892B91F0B12C8B2DCB +:1032C0009908C4010E943C32892B91F0B12C8B2DBE :1032D0000F90DF91CF911F910F91FF90EF90DF90B2 :1032E000CF90BF90AF909F908F907F906F900895F8 :1032F0008AE0889DF001899DF00D1124EF5FFE4F5B :10330000458150E0E416F50608F4A7018AE0889D9F :10331000F001899DF00D1124EF5FFE4F66817781EA -:103320006B557D4FC6010E943A33B701C8010E9418 +:103320006B557D4FC6010E944733B701C8010E940B :10333000B10899818913CACF0E946208F5016083A0 :10334000718382839383BB24B394C1CFB12CA70133 -:10335000B801C6010E943A33BACFBB24B394F7CF69 +:10335000B801C6010E944733BACFBB24B394F7CF5C :10336000CF92DF92EF92FF920F931F93CF93DF9351 :1033700000D000D00F92CDB7DEB76B0185E0E82E0C :10338000F12C06EA12E09E012F5F3F4F4DE952E01B @@ -828,7 +828,7 @@ :1033B000E8E9F2E0D60101900D929A95E1F70F90BD :1033C0000F900F900F900F90DF91CF911F910F9161 :1033D000FF90EF90DF90CF90089590E080E00E9402 -:1033E0005133893E9E4F11F40C94C51480E008952A +:1033E0005E33893E9E4F11F40C94C51480E008951D :1033F0001F920F920FB60F9211242F933F934F936A :103400005F936F937F938F939F93AF93BF93CF936C :10341000DF93EF93FF93D091E900DF708091EC0090 @@ -888,7 +888,7 @@ :10377000F601319780818F3F11F00E947C0950EA59 :103780005A95F1F7F801EE0DFF1D90828FEFE81AC0 :10379000F80A95E0E916F10409F0A8CF4AE050E0F4 -:1037A000B8018EEC92E00E942D337C01892B41F010 +:1037A000B8018EEC92E00E943A337C01892B41F003 :1037B0008AE0F801AEECB2E001900D928A95E1F753 :1037C0001091D902E114F104B9F181E080938D02E6 :1037D0000E94461B90938C0280938B0280918B02F7 @@ -946,17 +946,17 @@ :103B10006F905F9008950E946314182F682F898119 :103B20009A810E94890B69817A81812F0E945614A3 :103B30008C01F6018281882309F42BC5C8018251CA -:103B40009F45409708F0EEC48FEF93E00E94433307 +:103B40009F45409708F0EEC48FEF93E00E945033FA :103B5000025193EEA92E92E0B92E8111C7CF011127 :103B60003AC01C821B82662463948AE0582E850129 -:103B70000F5F1F4FC5010E94433389831A82882338 +:103B70000F5F1F4FC5010E94503389831A8288232B :103B800009F4B4CF9FEF980F9330A0F58A83698230 -:103B900032E0A30EB11CC8010E9443338B838823FB +:103B900032E0A30EB11CC8010E9450338B838823EE :103BA00009F4A4CF8E010F5F1F4FF801208122235B :103BB000F1F2213009F058C0918182819130E1F415 :103BC0000E5F1F4F6AE070E0893311F460E570E02A :103BD0000E94CF0E17C0A114F4E0BF0609F486CFEF -:103BE000C5010E944333811101C001502FEFA21A79 +:103BE000C5010E945033811101C001502FEFA21A6C :103BF000B20AB5CF5801D6CF923039F40E5F1F4FBD :103C00000E94150C0F5F1F4FD0CF933029F40E5F29 :103C10001F4F0E94DC0BF6CF943019F00F5F1F4F3F @@ -989,8 +989,8 @@ :103DC0006314F82E682FC8010E94890BB8018F2D4B :103DD0000E9456140E94D609182FB82EF60122818F :103DE0004581342F32953F70892F82958F70E82E50 -:103DF000F12C8C3008F04EC2F701E753FB4C0C94C9 -:103E000017330338FFE51F0709F481C018F501389F +:103DF000F12C8C3008F04EC2F701EA52FB4C0C94C7 +:103E000024330338FFE51F0709F481C018F5013892 :103E10003FE5130709F44AC008F065C000385FE5C4 :103E2000150709F0A5CF882309F459C080919202A3 :103E3000811106C081E08093920282EE0E94150CEF @@ -998,8 +998,8 @@ :103E5000150C8ECF05389FE5190709F4BEC008F48C :103E600076C00638FFE51F0709F082CF882309F4E2 :103E7000CEC06091590170915A0190E080E00E949B -:103E8000903320E030E040E05CE30E94F13320E03A -:103E900030E040E85FE30E948B338111B5C086EECD +:103E80009D3320E030E040E05CE30E94FE3320E020 +:103E900030E040E85FE30E9498338111B5C086EEC0 :103EA00090E090935A0180935901A1C08823A1F01A :103EB00080919202811106C081E08093920282EE8D :103EC0000E94150C0E94461B9093910280939002D1 @@ -1240,7 +1240,7 @@ :104D70001092CA021092CB020E94C514811102C087 :104D80000E9421140E949C0E80935801809158012A :104D9000882309F4C6C010926F0185E280937001E8 -:104DA0000E949C0E81110E94223180915801811134 +:104DA0000E949C0E81110E942F3180915801811127 :104DB0002FC0FE01359686E0DF011D928A95E9F746 :104DC00086E6898387E98A8386EC8B8384E38C83F8 :104DD00085E38D833497AEE4B1E0CE010B9621914B @@ -1254,22 +1254,22 @@ :104E5000FF2ED8018D918D018F3F11F00E947C09AA :104E6000E016F106B1F7EEECF2E088ED92E0A5E491 :104E7000B3E011921D928E179F07D9F70E94ED198A -:104E8000811102C00E946D1782E090E00E944333BE -:104E900080933A0384E090E00E944333182F82E22B -:104EA00090E00E944333982F812F9093CD028093FE +:104E8000811102C00E946D1782E090E00E945033B1 +:104E900080933A0384E090E00E945033182F82E21E +:104EA00090E00E945033982F812F9093CD028093F1 :104EB000CC020E94521BEFE7FBEB3197F1F700C0E9 :104EC00000000E94521B8091450380FF2EC06FEFAF -:104ED0007FEF90E080E00E94753381E08093E000F6 +:104ED0007FEF90E080E00E94823381E08093E000E9 :104EE00080E28093D8001092C9008FE19EE4019780 :104EF000F1F700C0000087E090EBDC0180937006C2 :104F000090937106A0937206B093730688E19CE0BB :104F10000FB6F894A895809360000FBE9093600040 :104F2000FFCF85E280936F0139CF83E090E00E944C -:104F300043330E94C30B809166040E946E160E9448 -:104F40009C0E811102C00E94253183E080931003E2 -:104F500080E2809333040E94232F6DE070E08CE99F +:104F300050330E94C30B809166040E946E160E943B +:104F40009C0E811102C00E94323183E080931003D5 +:104F500080E2809333040E94302F6DE070E08CE992 :104F600092E00E94650D892BE9F58091100363E0C2 -:104F700070E081FD8AC289E992E00E94650D892B6B +:104F700070E081FD97C289E992E00E94650D892B5E :104F800089F56DE070E089E892E00E94650D892B5B :104F900049F50E9462086058774C8E4F9F4F60938E :104FA0003A0470933B0480933C0490933D04EEE6F6 @@ -1278,9 +1278,9 @@ :104FD0006D0480936C0481E080933F0480933E04D1 :104FE000109211038091DA02811136C00E94ED19EE :104FF000811104C00E946D170E94551788E090E04F -:105000000E944B3360936704709368048093690433 +:105000000E94583360936704709368048093690426 :1050100090936A04809151038360809351036E7F63 -:1050200071F40E94551788E090E00E944B33609322 +:1050200071F40E94551788E090E00E945833609315 :105030006704709368048093690490936A040E94E3 :10504000CC088091670480FF04C060E086950E94D0 :10505000071681E08093DA0280915801811106C021 @@ -1295,16 +1295,16 @@ :1050E000E2F7817020A130E002C0359527954A95FE :1050F000E2F792E020FF90E0892B8093E20280911A :10510000580111E081278093E102312F381B309341 -:10511000DB020E94232F40E060E080E00E941E0D31 +:10511000DB020E94302F40E060E080E00E941E0D24 :1051200089EA92E0909354038093530360E08AE00D :105130000E94071681E00E940B1786EE90E0909384 :105140005A0180935901109328030E943E0D8BE56C :1051500091E09093430480934204E0E46E2E8091AA -:105160005C04FF24F39400E112E1853009F4DFC10F +:105160005C04FF24F39400E112E1853009F4ECC102 :105170000E94521BE82E81110E946208EBE3F3E0CB :10518000A5E4B3E010E000E0B02EDD9081918D1534 -:1051900009F4F1C18D25C12CFF24F3949F2D982390 -:1051A00009F4E4C10E949C0E882399F0C8A6B9A610 +:1051900009F4FEC18D25C12CFF24F394982F9F2183 +:1051A00009F4F1C10E949C0E882399F0C8A6B9A603 :1051B000DF2081E009F480E08AA70E94461B81601D :1051C000782F9CA78BA748A559A56AA58CA50E94F6 :1051D000B424F801E55CFC4F8081F826F0828091D0 @@ -1320,394 +1320,396 @@ :105270000E944625FF24F3948091E0028D3F6CF458 :10528000E12FF0E0E252FD4F80818150808361E0A8 :10529000812F0E944625FF24F3948091E002082E7E -:1052A000000C990B64E070E00E9403338093E002ED +:1052A000000C990B64E070E00E9410338093E002E0 :1052B000F1100E943E0B80913F04882351F18091B0 -:1052C0001203909113030E94371BC29708F06AC122 -:1052D00020916C0430916D042115310509F08BC2C9 +:1052C0001203909113030E94371BC29708F077C115 +:1052D00020916C0430916D042115310509F098C2BC :1052E00080913E048823A9F00E94620800913A044C :1052F00010913B0420913C0430913D04601B710BE4 :10530000820B930B6F3F7F4F8F4F9F4710F40E948C :10531000950DE11001C0F1100E94B00D809138038D -:105320008A3008F0A0C380913603909137030E9421 -:10533000371B089708F497C304E610E025E030E037 -:1053400041E353E064E084E10E946E30892B09F070 -:105350005BC31092380386E0EAE1F3E0DE01919648 -:1053600001900D928A95E1F786E0FE01B196DE018B -:10537000119601900D928A95E1F786E0FE01319633 -:10538000ABE2B3E001900D928A95E1F7809135038D -:1053900087FD37C38091290390912A03009709F074 -:1053A0002AC360913103809132030091330310913D -:1053B000340390912803992309F4F0C241E00E943C -:1053C000F80C2091260330912703281B390B3093CA -:1053D00027032093260341E0602F812F0E94F80CC1 -:1053E0002091240330912503281B390B309325038A -:1053F0002093240364E273E080E393E00E94D90CDD -:1054000066E273E08FE293E00E94D90C10922D03C4 -:1054100010922E0386E0EBE2F3E0DE01119601909C -:105420000D928A95E1F786E0FE013196AAE1B3E09C -:1054300001900D928A95E1F730911C0320911D0394 -:1054400090911E0380911F037091160360911703C2 -:105450004091180350911903F0911B03E09115033B -:10546000FE13D8C2332311F07313D4C2222311F0D8 -:105470002613D0C2882311F08513CCC2992319F0CA -:1054800081E04913C8C280E0C6C286E992E075CDCA -:1054900080915C04843009F43AC00E94950D40E08C -:1054A00060E080E00E941E0D80E00E945616809110 -:1054B000DD02811109C0F092DD02809167048170E4 -:1054C0008093DC020E94E20F1092460488E190E093 -:1054D0000FB6F894A895809360000FBE60926000AC -:1054E00083B7817F846083BF83B7816083BF7894F3 -:1054F000889583B78E7F83BF0FB6F894A895809167 -:105500006000886180936000109260000FBE8091FF -:105510005B04882361F00E94521BE5E4F3E0819173 -:10552000811170C4AFE4B3E0AE17BF07C1F780913B -:105530005C04853009F4ACCF10924F040E94F70F41 -:105540000E94BF0E0E9456161092DD028091DC026E -:10555000882349F08091670481608093670460E04C -:1055600086950E9407160E943E0D02CEC394FF0C42 -:1055700027E0C21213CE0F5F1F4F0A30110509F04A -:1055800003CE8FEF8DA78EA71FA60E94461B8160BA -:10559000782F99AB88AB4DA55EA56FA589A90E9410 -:1055A000B4241DCE0E94461B9093130380931203D4 -:1055B00060E080E00E949A080E94BF0E8093EF0294 -:1055C0000E949C0E882331F14091EB025091EC0235 -:1055D0006091ED027091EE022FB7F894809147042C -:1055E00090914804A0914904B0914A042FBF841BB4 -:1055F000950BA60BB70B81339547A105B10540F07C -:105600000E94950D80913F04882309F469CE60CEF5 -:105610000E94B00D0E949C0E882309F4D3C061E063 -:1056200080E00E949A0860E08CE791E00E94881375 -:1056300062E080E00E949A08809166040E94890CD2 -:10564000823009F499C008F08EC0882309F494C010 -:10565000813009F497C065E080E00E949A0860E01C -:105660008AE991E00E94881366E080E00E949A082F -:105670006091EF02669561708FE991E00E94881356 -:1056800067E080E00E949A086091EF026095617087 -:1056900084EA91E00E94881368E080E00E949A0802 -:1056A0006091EF0262FB662760F988EA91E00E9450 -:1056B00088134091E7025091E8026091E9027091ED -:1056C000EA022FB7F8948091470490914804A09182 -:1056D0004904B0914A042FBF841B950BA60BB70B4E -:1056E0008D329140A105B10508F48CCF0E9462086B -:1056F0006093E7027093E8028093E9029093EA02D4 -:105700008091E602811104C080916701811142C03D -:105710006DE080E00E949A0860E08DEA91E00E94CE -:1057200088136AE080E00E949A0881E08093670114 -:105730008091E50290E00196817099278093E502BF -:1057400021E030E0281B390B40E6429FC001439F17 -:10575000900D11242091E402222351F1855C9B4F8E -:105760000E9492064FCF833089F0843009F073CFC6 -:1057700060E08EE891E003C060E082E891E00E9482 -:10578000881369CF60E088E891E0F9CF60E084E9B0 -:1057900091E0F5CF6AE080E00E949A0860E08DEA2F -:1057A00091E00E9488136BE080E00E949A08C0CFCD -:1057B0002091E302222319F085589C4FD1CF8554C4 -:1057C0009D4FCECF64E080E00E949A0860E083EBBA -:1057D00091E00E94881365E080E00E949A0860E0F2 -:1057E00089EB91E00E94881369E080E00E949A08AA -:1057F0008BEF94E0B5CF8091110361E070E08111EF -:105800006FCD082F10E02B01082E02C0440C551C50 -:105810000A94E2F7A90144215521452B09F448C017 -:105820009091100390FD46C08295880F80768093FA -:105830006A019801369527953695279520936D0135 -:10584000815E80936B0110926E0124E630E047E0A8 -:1058500050E068E671E088E70E941A30892B09F071 -:105860003FCDA80165E0440F551F6A95E1F780918F -:10587000100380FD2DC042595B4F04E610E020E28A -:1058800030E060E488E70E944130892B09F028CDA0 -:105890000E94B00DC2018095909540906C0450908C -:1058A0006D044822592250926D0440926C0418CD28 -:1058B0008F5FA7CF880F880F880F80936A0110929F -:1058C0006D01895F80936B0183E080936E01BDCF92 -:1058D000E0EFF2E080E2DF011D928A95E9F7E6E071 -:1058E000F2E0FBABEAAB02E012E037E0A32E992432 -:1058F0009394AAA9BBA92D91BBABAAABF8012190A7 -:105900008F01240E352E311CC10182599B4F1C0181 -:10591000E22FF0E0E051FD4F30E020E07A2C721AE7 -:10592000B92C022E01C0BB0C0A94EAF7610190E089 -:10593000D6018D916D018B21672D691B6770862EB5 -:10594000062E000C770BB82F01C0BB0F8A94EAF724 -:105950008B2E7195619571096770772701C08695C7 -:105960006A95EAF7882A8081882A80829F5F98302A -:10597000F9F62F5F3F4F31962830310579F6EAE08E -:10598000F2E02AA93BA9E217F30709F0B2CF04E637 -:1059900010E020E230E040EF52E073CF45E00E949B -:1059A000F80C2091220330912303820F931F9093D0 -:1059B00023038093220345E0602F812F0E94F80C7F -:1059C0002091200330912103281B390B30932103B0 -:1059D0002093200360E273E08DE293E00E94D90CF3 -:1059E00062E273E08EE293E00E94D90C10923003E1 -:1059F00010922F030FCD019790932A0380932903D0 -:105A000009CD84E190E0F8CF809138038F5F8093D7 -:105A1000380300CD81E080FF0FC0E0914204F09197 -:105A20004304309749F082E080931A030480F581A3 -:105A3000E02D8AE193E0099510921C0310921D035A -:105A400010921E0310921F0386E0EAE1F3E0A4E146 -:105A5000B3E001900D928A95E1F70E94461B909366 -:105A60003703809336030E94BF0E90913903891744 -:105A700031F00E94BF0E809339030E945616809128 -:105A80005C04843009F06BCB83E08093E900809163 -:105A9000E80082FF64CB8091E80090E085FF05C0BC -:105AA0000E94F406882399F091E08091E8008B77BA -:105AB0008093E800992309F452CBE981E150E33166 -:105AC00008F076C0F0E0EB52FB4C0C94173300E288 -:105AD00010E0CE0101967C018091E80085FD0AC0AE -:105AE0008091E8008B778093E8000E94F406882379 -:105AF00099F3DACF8091F100D7018D937D010150A8 -:105B0000110951F7D1CF1A8289E08B8311C08A81A4 -:105B1000823009F48FC1833091F1813009F048C09F -:105B20000E9462080E941D336B837C838D839E8359 -:105B300080915C04843009F012CB1091E9001F7051 -:105B40009091EC00892F817090FD80E8182B82E005 -:105B50008093E9008091E80080FF0DC050E040E0B4 -:105B600060E270E0CE0101960E9425078091E80076 -:105B70008E778093E8001F701093E900F0CADE0171 -:105B80001396E5E4F3E081918D9323E0EF34F2077F -:105B9000D1F7CECF8A81823059F46B817C818D819F -:105BA0009E810E941D3386E290E00E945733C0CF51 -:105BB0008FEF8983BDCF4C816B818A810E94301425 -:105BC0009827892798279E838D83B2CFED80FE800A -:105BD000FE24EF24FE248A810B813EE0039F800196 -:105BE00011249CE8899F000D111D11248C8190E0E7 -:105BF000880F991F080F191F6F2DC80187960E94E3 -:105C000057336E2DC8018896D0CF0E94B41390CF21 -:105C10008A818138C1F060F4803809F089CF20E0B2 -:105C20004B8160916904809168040E94F01480CFD8 -:105C30008238E9F0833809F07BCF20E040916A0494 -:105C40006C818B81F2CF60E08B810E9407168B8183 -:105C5000811103C00E94E20F6BCF809167048160C5 -:105C60008093670460E086950E94071661CF8B8160 -:105C700080936B045DCF8A81813899F030F480384D -:105C800009F056CF80916A0440CF823891F0833872 -:105C900009F04ECF809168048B83809169048C83D6 -:105CA00047CF8091670480FF02C086952ECF80E0A9 -:105CB0002CCF80916B0429CF6091670470916804A8 -:105CC0008091690490916A040E94DE1431CF80E1D2 -:105CD0008A832ECF81E08A838DE117CFCA80DB8053 -:105CE000DC24CD24DC248E010F5F1F4FEC80E00EFE -:105CF000F12EF11CC6018D519D4F0E151F0509F4A3 -:105D000017CFADE1CA16A1E0DA0650F40E94433382 -:105D1000F8018483BFEFCB1ADB0A0F5F1F4FEACF76 -:105D2000D80114961C92F6CF0A811B8110270127F7 -:105D30001027FE0131966F01EC80E00EF12EF11C70 -:105D4000C8018D519D4FE016F10609F4F1CE0D31D9 -:105D5000F1E01F0728F4D60114966C910E94573386 -:105D6000BFEFCB1ADB0A0F5F1F4FEACF0E94A413CD -:105D7000DFCE85E0ADCFCA80DB80DC24CD24DC24FF -:105D80008E010F5F1F4FEC80E00EF12EF11CC6015B -:105D90008796E016F10609F4CBCEECEBCE16E2E0E6 -:105DA000DE0658F40E944333D80114968C93FFEF1B -:105DB000CF1ADF0A0F5F1F4FEACFF8011482F7CF27 -:105DC0000A811B811027012710279E012F5F3F4F5B -:105DD0006901EC80E00EF12EF11CC8018796E016F7 -:105DE000F10609F4A5CE0C3B32E0130728F4D601E6 -:105DF00014966C910E945733BFEFCB1ADB0A0F5FEA -:105E00001F4FEBCF09BD19BD09B400FEFDCF809136 -:105E1000D8008F7D8093D8008091E00082608093CD -:105E2000E0008091E00081FDFCCF10924F040E94C1 -:105E3000F70F7DCB86E290E00E9443331B821C82E9 -:105E40001D828E8375CE1092B9008CE08093B800CD -:105E500008959F92AF92BF92CF92DF92EF92FF92FE -:105E60000F931F93CF93DF93B82EEB010E94461B35 -:105E70006C01EE24E394F12CC431D10560F025E0EF -:105E8000E22EF12CCF3FDC0731F0CE0164E170E06F -:105E90000E94E3327B0184EAA82E94E8992E1092A6 -:105EA000BC00A092BC000E94461B8C018091BC00EB -:105EB00087FF0DC08091B900887F883039F18091CB -:105EC000B900887F803111F10FEF1FEF09C00E94E8 -:105ED000461B801B910B8E159F0540F30EEF1FEFA5 -:105EE000CF3FDC07E1F2C6010E94371B8C179D07EC -:105EF000B0F2C801DF91CF911F910F91FF90EF9009 -:105F0000DF90CF90BF90AF909F900895B092BB006C -:105F10009092BC000E94461B8C018091BC0087FFC0 -:105F20000AC08091B900887F883111F0803461F611 -:105F300010E000E0DECF0E94461B801B910B8E1507 -:105F40009F0558F3CBCF0F931F93CF93DF93EB01B4 -:105F50008093BB0084E88093BC000E94461B8C01A8 -:105F60008091BC0087FF11C02091B900287F81E09B -:105F700090E0283211F490E080E0919581959109AC -:105F8000DF91CF911F910F910895CF3FDC0741F32F -:105F90000E94461B801B910B8C179D0708F38EEF08 -:105FA0009FEFEECF0F931F93CF93DF93EC0184EC21 -:105FB0008093BC000E94461B8C018091BC0087FF2F -:105FC00008C08091BB0090E0DF91CF911F910F91AD -:105FD0000895CF3FDC0789F30E94461B801B910B7D -:105FE0008C179D0750F38EEF9FEFEECF0F931F930B -:105FF000CF93DF93EC0184E88093BC000E94461BA2 -:106000008C018091BC0087FF08C08091BB0090E0AC -:10601000DF91CF911F910F910895CF3FDC0789F356 -:106020000E94461B801B910B8C179D0750F38EEF2F -:106030009FEFEECFCF92DF92EF92FF920F931F93DD -:10604000CF93DF936B018A017901B9010E94292F57 -:10605000E6010C0D1D1DC017D10761F424E9209342 -:10606000BC00DF91CF911F910F91FF90EF90DF90D7 -:10607000CF90089597FDF2CFB70189910E94A32F89 -:10608000EACFCF92DF92EF92FF920F931F93CF93BD -:10609000DF93C62F6A017901B8010E94292F97FD6D -:1060A0000CC0B8018C2F0E94A32FE601EC0CFD1C44 -:1060B000CE15DF0511F097FF0CC024E92093BC003A -:1060C000DF91CF911F910F91FF90EF90DF90CF90D4 -:1060D0000895B80189910E94A32FEACFCF92DF9251 -:1060E000EF92FF920F931F93CF93DF93F82EE62E3C -:1060F000EA016901B8010E94292F97FD15C0B80176 -:106100008E2D0E94A32F97FD0FC0B8018F2D8160A7 -:106110000E94292FF12CE12C21E0C21AD108EC14A5 -:10612000FD0400F597FF11C024E92093BC00181668 -:10613000190614F490E080E0DF91CF911F910F9148 -:10614000FF90EF90DF90CF900895C8010E94D22F6A -:1061500097FD04C0FE01EE0DFF1D80832FEFE21AB4 -:10616000F20ADDCF97FDE0CFC8010E94F62F97FD20 -:10617000DBCFCC0DDD1D8883D7CF84E98093BC00B5 -:1061800008958EE14A9B02C08150E1F74A9BFECF01 -:1061900008955A9880E28A95F1F75A9A0895FC0179 -:1061A0003BE03A95F1F798E020E080E031E040E113 -:1061B0004A95F1F7880F4A9B02C08160232742E08D -:1061C0004A95F1F7000040E14A95F1F7915079F7CF -:1061D00090E19A95F1F799B132E03A95F1F7000024 -:1061E00040E14A95F1F792FB992790F99227208197 -:1061F000920F90830895EF92FF920F931F93CF9386 -:10620000DF930F92CDB7DEB719828C017C01E60EC9 -:10621000F11C0E151F0561F481E09981911180E058 -:106220000F90DF91CF911F910F91FF90EF90089504 -:106230000E94C130CE0101960E94CF30F8018193B7 -:106240008F01E7CF529A5A9A089552985A9AEA9A29 -:10625000E9E6F0E080818F7C808308956150770BC0 -:1062600091E001C0990F6A95EAF720E031E09111C1 -:1062700008C0222391F05A9A80E28A95F1F75A9841 -:106280000895492F482339F05A9A232740E24A9526 -:10629000F1F79695ECCF5A98F9CF5A98EDCFFF9237 -:1062A0000F931F93CF93DF93EC018C01060F111D09 -:1062B000C017D10731F4DF91CF911F910F91FF905B -:1062C0000895F9900E94C93068E08F2D0E942E3108 -:1062D000EFCF1F920F920FB60F921124EF92FF9201 -:1062E0000F931F932F933F934F935F936F937F93DE -:1062F0008F939F93AF93BF93EF93FF93CF93DF93CE -:106300000F92CDB7DEB719820E94C130CE0101963F -:106310000E94CF30A82FA695A695A695282F229546 -:1063200025709A2F9570290F922F93702695269598 -:10633000920F982797708981982B09F075C0A83023 -:1063400008F072C080E18A95F1F75A9A529AB2E049 -:10635000BA95F1F700C05A98EA2EF12CEAE0AE9F08 -:10636000D0011124AF5FBE4F1896ED91FC911997A3 -:106370003097B1F06091F0017091F10116962D9176 -:106380003C911797260F371F13968D919C91149768 -:10639000680F791F15964C91159712968C91099557 -:1063A0008AE08E9DF0018F9DF00D1124EF5FFE4F6E -:1063B0006581662351F02091F0013091F1018681D1 -:1063C0009781820F931F0E944F310E94C930F0E1E4 -:1063D000FA95F1F75A9852985A9A80E18A95F1F70E -:1063E0008AE08E9D80018F9D100D11240F5F1E4F3E -:1063F000D80112966C911297662371F12091F001E9 -:106400003091F10113968D919C91820F931F0E9400 -:10641000FB30D801ED91FC91882311F088E001C098 -:1064200082E080830E94C1300F90DF91CF91FF9175 -:10643000EF91BF91AF919F918F917F916F915F91FC -:106440004F913F912F911F910F91FF90EF900F90DF -:106450000FBE0F901F901895ED91FC91DFCF0F9319 -:106460001F93CF93DF93EC0108970CF0A9C08AE04B -:106470008C9FF0018D9FF00D1124EF5FFE4F808106 -:106480009181892B09F49CC0F894529A5A9885E01E -:106490008A95F1F700008C2F869585709C2F95705A -:1064A000890F982F937086958695890F8E0193E0BA -:1064B000000F111F9A95E1F7082B0E94C93000C008 -:1064C00068E0802F0E942E31A0E1AA95F1F7529842 -:1064D0005A9A4A9B27C087E090E04A9925C08AE0F3 -:1064E0008C9F80018D9F100D11240F5F1E4FF801AE -:1064F00065816623A1F12091F0013091F10186813F -:106500009781820F931F0E94FB30811128C0529AFD -:106510005A9AD801ED91FC9182E08083789482E0D0 -:1065200090E016C000C0D5CF0197B9F4529A5A9A9C -:106530008AE08C9FF0018D9FF00D1124EF5FFE4FDC -:106540000190F081E02D81E08083789481E090E0FB -:10655000DF91CF911F910F91089500C0BECF0E948F -:10656000C130B0E2BA95F1F75A98529AE0E1EA9553 -:10657000F1F78AE08C9FF0018D9FF00D1124EF5F01 -:10658000FE4F6281662351F02091F0013091F101BC -:1065900083819481820F931F0E944F310E94C930E2 -:1065A0008AE08C9FF0018D9FF00D1124EF5FFE4F6C -:1065B0000190F081E02D1082789490E080E0C8CFC7 -:1065C00084E090E0C5CFAA1BBB1B51E107C0AA1F06 -:1065D000BB1FA617B70710F0A61BB70B881F991F84 -:1065E0005A95A9F780959095BC01CD010895991B06 -:1065F00079E004C0991F961708F0961B881F7A95BA -:10660000C9F78095089597FB072E16F4009407D0DC -:1066100077FD09D00E94E33207FC05D03EF4909547 -:1066200081959F4F0895709561957F4F0895EE0F66 -:10663000FF1F0590F491E02D09946927962769279B -:106640007827872778270895FB01DC0102C0059091 -:106650000D9241505040D8F70895FB01DC0104C071 -:106660008D910190801921F441505040C8F7881B4A -:10667000990B0895FB01DC0102C001900D9241507D -:106680005040D8F70895F999FECF92BD81BDF89A90 -:10669000992780B50895A6E1B0E044E050E00C945D -:1066A0007D33A8E1B0E042E050E00C947D33262F2A -:1066B000F999FECF92BD81BDF89A019700B40216F8 -:1066C00039F01FBA20BD0FB6F894FA9AF99A0FBEA6 -:1066D00008950396272F0E9458330E945733252F81 -:1066E0000E945833242F0C9458330196272F0E9470 -:1066F00058330C945733DC01CB01FC01F999FECFE0 -:1067000006C0F2BDE1BDF89A319600B40D92415039 -:106710005040B8F708950E94CD3308F481E0089501 -:10672000E89409C097FB3EF490958095709561952B -:106730007F4F8F4F9F4F9923A9F0F92F96E9BB27E1 -:106740009395F695879577956795B795F111F8CF5D -:10675000FAF4BB0F11F460FF1BC06F5F7F4F8F4FC8 -:106760009F4F16C0882311F096E911C0772321F0BE -:106770009EE8872F762F05C0662371F096E8862F56 -:1067800070E060E02AF09A95660F771F881FDAF7AD -:10679000880F9695879597F90895990F0008550FDA -:1067A000AA0BE0E8FEEF16161706E807F907C0F097 -:1067B00012161306E407F50798F0621B730B840B9F -:1067C000950B39F40A2661F0232B242B252B21F479 -:1067D00008950A2609F4A140A6958FEF811D811D19 -:1067E00008950E9404340C9475340E94673438F084 -:1067F0000E946E3420F0952311F00C945E340C94BA -:10680000643411240C94A9340E94863470F3959F4B -:10681000C1F3950F50E0551F629FF001729FBB2797 -:10682000F00DB11D639FAA27F00DB11DAA1F649F33 -:106830006627B00DA11D661F829F2227B00DA11DE6 -:10684000621F739FB00DA11D621F839FA00D611D6C -:10685000221F749F3327A00D611D231F849F600D8D -:10686000211D822F762F6A2F11249F5750409AF0B6 -:10687000F1F088234AF0EE0FFF1FBB1F661F771F42 -:10688000881F91505040A9F79E3F510580F00C940D -:106890005E340C94A9345F3FE4F3983ED4F38695BC -:1068A00077956795B795F795E7959F5FC1F7FE2BAD -:1068B000880F911D9695879597F9089597F99F6789 -:1068C00080E870E060E008959FEF80EC0895002478 -:1068D0000A941616170618060906089500240A9445 -:1068E00012161306140605060895092E0394000CCB -:1068F00011F4882352F0BB0F40F4BF2B11F460FF5A -:1069000004C06F5F7F4F8F4F9F4F089557FD905882 -:10691000440F551F59F05F3F71F04795880F97FB63 -:10692000991F61F09F3F79F087950895121613061D -:106930001406551FF2CF4695F1DF08C0161617064C -:106940001806991FF1CF8695710561050894089581 -:10695000E894BB2766277727CB0197F90895F89429 -:10696000FFCFE7100F1162110F11621142117A115E -:10697000621177128412B014B014B914B914BB1494 -:10698000B914B914B914B014B014C014B914B914AA -:10699000C0141721172170217021A2214A214A21F8 -:1069A0004A21BC212D223D223D22832D872DCA2D37 -:1069B000DB2DE62D052E082E3B2E5C2ED82DD82D56 -:1069C000672E6A2E6E2E942EB62EB92EBB2EE02E7A -:1069D0000130020000000100000000300200000051 -:1069E0000501000000300200000001060000003038 -:1069F000020000000107000000300204080000004F -:106A00000000003002090C0000000000003002010C -:106A10001500000000000036323331F7F667669744 -:106A2000C6343500000000000180005F082B0E0A0C -:106A30000E060E020EF4F5010021007F2200030075 -:106A40004A004A4A01F6F731333236674C4159451C -:106A5000520042617365200047616D6520005261FC -:106A6000697365004C6F776572004C4F434B004370 -:106A7000617073004E756D005363726C00202020AE -:106A8000202000534F4C415200544D50535400812C -:106A90008283E200E900EA00B500B600B700CD004D -:106AA0008301CC008A019201940121022302240275 -:106AB0002502260227022A02B300B4006F007000EC -:106AC000A50200FF0100010000FFFF00000100011E -:106AD000FF0000081018181008000001020202024E -:106AE00002020202020240227B99017701FC0000AF -:066AF0000C190C390C002A +:105320008A3008F0ADC380913603909137030E9414 +:10533000371B089708F4A4C304E610E025E030E02A +:1053400041E353E064E084E10E947B30892B09F063 +:1053500068C31092380320912803222359F08091CA +:105360003303909134039827892798279093340327 +:105370008093330386E0EAE1F3E0DE019196019049 +:105380000D928A95E1F786E0FE01B196DE01119655 +:1053900001900D928A95E1F786E0FE013196ABE22D +:1053A000B3E001900D928A95E1F78091350387FD76 +:1053B00035C38091290390912A03009709F028C3EF +:1053C00060913103809132030091330310913403D3 +:1053D000222309F4F0C241E00E94F80C2091260338 +:1053E00030912703281B390B309327032093260382 +:1053F00041E0602F812F0E94F80C2091240330910E +:105400002503820F931F909325038093240364E266 +:1054100073E080E393E00E94D90C66E273E08FE2D0 +:1054200093E00E94D90C10922D0310922E0386E077 +:10543000EBE2F3E0DE01119601900D928A95E1F71F +:1054400086E0FE013196AAE1B3E001900D928A95C3 +:10545000E1F730911C0320911D0390911E03809170 +:105460001F03709116036091170340911803509128 +:105470001903F0911B03E0911503FE13D8C23323E7 +:1054800011F07313D4C2222311F02613D0C2882343 +:1054900011F08513CCC2992319F081E04913C8C2D9 +:1054A00080E0C6C286E992E068CD80915C048430D9 +:1054B00009F43AC00E94950D40E060E080E00E944F +:1054C0001E0D80E00E9456168091DD02811109C0F8 +:1054D000F092DD028091670481708093DC020E946B +:1054E000E20F1092460488E190E00FB6F894A89578 +:1054F000809360000FBE6092600083B7817F8460FC +:1055000083BF83B7816083BF7894889583B78E7F8C +:1055100083BF0FB6F894A89580916000886180934E +:105520006000109260000FBE80915B04882361F0E0 +:105530000E94521BE5E4F3E08191811170C4AFE455 +:10554000B3E0AE17BF07C1F780915C04853009F462 +:10555000ACCF10924F040E94F70F0E94BF0E0E9422 +:1055600056161092DD028091DC02882349F080916A +:10557000670481608093670460E086950E94071647 +:105580000E943E0DF5CDC394FF0C27E0C21206CE5B +:105590000F5F1F4F0A30110509F0F6CD8FEF8DA771 +:1055A0008EA71FA60E94461B8160782F99AB88ABFF +:1055B0004DA55EA56FA589A90E94B42410CE0E94B6 +:1055C000461B909313038093120360E080E00E94D7 +:1055D0009A080E94BF0E8093EF020E949C0E8823BF +:1055E00031F14091EB025091EC026091ED0270912B +:1055F000EE022FB7F8948091470490914804A0914F +:105600004904B0914A042FBF841B950BA60BB70B1E +:1056100081339547A105B10540F00E94950D809119 +:105620003F04882309F45CCE53CE0E94B00D0E9443 +:105630009C0E882309F4D3C061E080E00E949A08A0 +:1056400060E08CE791E00E94881362E080E00E94B5 +:105650009A08809166040E94890C823009F499C0EE +:1056600008F08EC0882309F494C0813009F497C0F3 +:1056700065E080E00E949A0860E08AE991E00E947B +:10568000881366E080E00E949A086091EF026695B8 +:1056900061708FE991E00E94881367E080E00E94CA +:1056A0009A086091EF026095617084EA91E00E942F +:1056B000881368E080E00E949A086091EF0262FB24 +:1056C000662760F988EA91E00E9488134091E7021A +:1056D0005091E8026091E9027091EA022FB7F894C4 +:1056E0008091470490914804A0914904B0914A04E4 +:1056F0002FBF841B950BA60BB70B8D329140A105D4 +:10570000B10508F48CCF0E9462086093E7027093A1 +:10571000E8028093E9029093EA028091E602811107 +:1057200004C080916701811142C06DE080E00E9459 +:105730009A0860E08DEA91E00E9488136AE080E0B8 +:105740000E949A0881E0809367018091E50290E0D1 +:105750000196817099278093E50221E030E0281BB3 +:10576000390B40E6429FC001439F900D11242091C8 +:10577000E402222351F1855C9B4F0E9492064FCF99 +:10578000833089F0843009F073CF60E08EE891E0D7 +:1057900003C060E082E891E00E94881369CF60E076 +:1057A00088E891E0F9CF60E084E991E0F5CF6AE024 +:1057B00080E00E949A0860E08DEA91E00E948813E0 +:1057C0006BE080E00E949A08C0CF2091E302222380 +:1057D00019F085589C4FD1CF85549D4FCECF64E0B2 +:1057E00080E00E949A0860E083EB91E00E948813B9 +:1057F00065E080E00E949A0860E089EB91E00E94F9 +:10580000881369E080E00E949A088BEF94E0B5CF9E +:105810008091110361E070E0811162CD082F10E0EA +:105820002B01082E02C0440C551C0A94E2F7A90172 +:1058300044215521452B09F448C09091100390FD57 +:1058400046C08295880F807680936A0198013695CC +:1058500027953695279520936D01815E80936B0186 +:1058600010926E0124E630E047E050E068E671E017 +:1058700088E70E942730892B09F032CDA80165E026 +:10588000440F551F6A95E1F78091100380FD2DC0EC +:1058900042595B4F04E610E020E230E060E488E724 +:1058A0000E944E30892B09F01BCD0E94B00DC20121 +:1058B0008095909540906C0450906D044822592238 +:1058C00050926D0440926C040BCD8F5FA7CF880F70 +:1058D000880F880F80936A0110926D01895F809311 +:1058E0006B0183E080936E01BDCFE0EFF2E080E2D8 +:1058F000DF011D928A95E9F7E6E0F2E0FBABEAAB47 +:1059000002E012E037E0A32E99249394AAA9BBA940 +:105910002D91BBABAAABF80121908F01240E352E3F +:10592000311CC10182599B4F1C01E22FF0E0E05174 +:10593000FD4F30E020E07A2C721AB92C022E01C003 +:10594000BB0C0A94EAF7610190E0D6018D916D01DC +:105950008B21672D691B6770862E062E000C770B36 +:10596000B82F01C0BB0F8A94EAF78B2E7195619511 +:1059700071096770772701C086956A95EAF7882ACA +:105980008081882A80829F5F9830F9F62F5F3F4F91 +:1059900031962830310579F6EAE0F2E02AA93BA9F0 +:1059A000E217F30709F0B2CF04E610E020E230E09E +:1059B00040EF52E073CF45E00E94F80C20912203A3 +:1059C00030912303820F931F90932303809322032C +:1059D00045E0602F812F0E94F80C20912003309128 +:1059E0002103281B390B309321032093200360E20D +:1059F00073E08DE293E00E94D90C62E273E08EE2E4 +:105A000093E00E94D90C1092300310922F030FCD17 +:105A1000019790932A038093290309CD84E190E0B4 +:105A2000F8CF809138038F5F8093380300CD81E0F9 +:105A300080FF0FC0E0914204F0914304309749F099 +:105A400082E080931A030480F581E02D8AE193E0DF +:105A5000099510921C0310921D0310921E031092C0 +:105A60001F0386E0EAE1F3E0A4E1B3E001900D92C8 +:105A70008A95E1F70E94461B909337038093360383 +:105A80000E94BF0E90913903891731F00E94BF0E1A +:105A9000809339030E94561680915C04843009F08B +:105AA0005ECB83E08093E9008091E80082FF57CBD2 +:105AB0008091E80090E085FF05C00E94F4068823ED +:105AC00099F091E08091E8008B778093E80099232A +:105AD00009F445CBE981E150E33108F076C0F0E00C +:105AE000EE51FB4C0C94243300E210E0CE01019601 +:105AF0007C018091E80085FD0AC08091E8008B77E9 +:105B00008093E8000E94F406882399F3DACF80910D +:105B1000F100D7018D937D010150110951F7D1CFCB +:105B20001A8289E08B8311C08A81823009F48FC187 +:105B3000833091F1813009F048C00E9462080E94D0 +:105B40002A336B837C838D839E8380915C048430B5 +:105B500009F005CB1091E9001F709091EC00892F9E +:105B6000817090FD80E8182B82E08093E90080919D +:105B7000E80080FF0DC050E040E060E270E0CE0140 +:105B800001960E9425078091E8008E778093E800B7 +:105B90001F701093E900E3CADE011396E5E4F3E019 +:105BA00081918D9323E0EF34F207D1F7CECF8A8134 +:105BB000823059F46B817C818D819E810E942A33D1 +:105BC00086E290E00E946433C0CF8FEF8983BDCF1F +:105BD0004C816B818A810E943014982789279827ED +:105BE0009E838D83B2CFED80FE80FE24EF24FE24C1 +:105BF0008A810B813EE0039F800111249CE8899FEC +:105C0000000D111D11248C8190E0880F991F080F41 +:105C1000191F6F2DC80187960E9464336E2DC8012D +:105C20008896D0CF0E94B41390CF8A818138C1F07A +:105C300060F4803809F089CF20E04B8160916904DD +:105C4000809168040E94F01480CF8238E9F0833894 +:105C500009F07BCF20E040916A046C818B81F2CF08 +:105C600060E08B810E9407168B81811103C00E9426 +:105C7000E20F6BCF8091670481608093670460E0DE +:105C800086950E94071661CF8B8180936B045DCF50 +:105C90008A81813899F030F4803809F056CF8091AC +:105CA0006A0440CF823891F0833809F04ECF80915A +:105CB00068048B83809169048C8347CF809167044B +:105CC00080FF02C086952ECF80E02CCF80916B04A0 +:105CD00029CF609167047091680480916904909164 +:105CE0006A040E94DE1431CF80E18A832ECF81E0E6 +:105CF0008A838DE117CFCA80DB80DC24CD24DC24AD +:105D00008E010F5F1F4FEC80E00EF12EF11CC601DB +:105D10008D519D4F0E151F0509F417CFADE1CA1621 +:105D2000A1E0DA0650F40E945033F8018483BFEFFB +:105D3000CB1ADB0A0F5F1F4FEACFD80114961C92D3 +:105D4000F6CF0A811B81102701271027FE0131960B +:105D50006F01EC80E00EF12EF11CC8018D519D4FBA +:105D6000E016F10609F4F1CE0D31F1E01F0728F439 +:105D7000D60114966C910E946433BFEFCB1ADB0AF4 +:105D80000F5F1F4FEACF0E94A413DFCE85E0ADCF97 +:105D9000CA80DB80DC24CD24DC248E010F5F1F4F02 +:105DA000EC80E00EF12EF11CC6018796E016F1069C +:105DB00009F4CBCEECEBCE16E2E0DE0658F40E94FE +:105DC0005033D80114968C93FFEFCF1ADF0A0F5F80 +:105DD0001F4FEACFF8011482F7CF0A811B811027E9 +:105DE000012710279E012F5F3F4F6901EC80E00ED5 +:105DF000F12EF11CC8018796E016F10609F4A5CE34 +:105E00000C3B32E0130728F4D60114966C910E94E3 +:105E10006433BFEFCB1ADB0A0F5F1F4FEBCF09BD17 +:105E200019BD09B400FEFDCF8091D8008F7D80930D +:105E3000D8008091E00082608093E0008091E000D3 +:105E400081FDFCCF10924F040E94F70F7DCB86E2BC +:105E500090E00E9450331B821C821D828E8375CE7F +:105E60001092B9008CE08093B80008959F92AF9291 +:105E7000BF92CF92DF92EF92FF920F931F93CF9337 +:105E8000DF93B82EEB010E94461B6C01EE24E394D5 +:105E9000F12CC431D10560F025E0E22EF12CCF3F8A +:105EA000DC0731F0CE0164E170E00E94F0327B014A +:105EB00084EAA82E94E8992E1092BC00A092BC000F +:105EC0000E94461B8C018091BC0087FF0DC0809111 +:105ED000B900887F883039F18091B900887F80319E +:105EE00011F10FEF1FEF09C00E94461B801B910BA1 +:105EF0008E159F0540F30EEF1FEFCF3FDC07E1F259 +:105F0000C6010E94371B8C179D07B0F2C801DF91B4 +:105F1000CF911F910F91FF90EF90DF90CF90BF90A6 +:105F2000AF909F900895B092BB009092BC000E94E9 +:105F3000461B8C018091BC0087FF0AC08091B9008C +:105F4000887F883111F0803461F610E000E0DECF08 +:105F50000E94461B801B910B8E159F0558F3CBCFDB +:105F60000F931F93CF93DF93EB018093BB0084E8E3 +:105F70008093BC000E94461B8C018091BC0087FF6F +:105F800011C02091B900287F81E090E0283211F4FF +:105F900090E080E0919581959109DF91CF911F91DB +:105FA0000F910895CF3FDC0741F30E94461B801BF1 +:105FB000910B8C179D0708F38EEF9FEFEECF0F9399 +:105FC0001F93CF93DF93EC0184EC8093BC000E947D +:105FD000461B8C018091BC0087FF08C08091BB00EC +:105FE00090E0DF91CF911F910F910895CF3FDC0793 +:105FF00089F30E94461B801B910B8C179D0750F361 +:106000008EEF9FEFEECF0F931F93CF93DF93EC01B3 +:1060100084E88093BC000E94461B8C018091BC00E8 +:1060200087FF08C08091BB0090E0DF91CF911F9166 +:106030000F910895CF3FDC0789F30E94461B801B18 +:10604000910B8C179D0750F38EEF9FEFEECFCF9201 +:10605000DF92EF92FF920F931F93CF93DF936B0129 +:106060008A017901B9010E94362FE6010C0D1D1D30 +:10607000C017D10761F424E92093BC00DF91CF91D0 +:106080001F910F91FF90EF90DF90CF90089597FDB3 +:10609000F2CFB70189910E94B02FEACFCF92DF9261 +:1060A000EF92FF920F931F93CF93DF93C62F6A0156 +:1060B0007901B8010E94362F97FD0CC0B8018C2FD2 +:1060C0000E94B02FE601EC0CFD1CCE15DF0511F08F +:1060D00097FF0CC024E92093BC00DF91CF911F9162 +:1060E0000F91FF90EF90DF90CF900895B8018991C4 +:1060F0000E94B02FEACFCF92DF92EF92FF920F93E0 +:106100001F93CF93DF93F82EE62EEA016901B801C1 +:106110000E94362F97FD15C0B8018E2D0E94B02F1A +:1061200097FD0FC0B8018F2D81600E94362FF12C92 +:10613000E12C21E0C21AD108EC14FD0400F597FF10 +:1061400011C024E92093BC001816190614F490E03D +:1061500080E0DF91CF911F910F91FF90EF90DF9042 +:10616000CF900895C8010E94DF2F97FD04C0FE0163 +:10617000EE0DFF1D80832FEFE21AF20ADDCF97FDAF +:10618000E0CFC8010E94033097FDDBCFCC0DDD1DB1 +:106190008883D7CF84E98093BC0008958EE14A9B21 +:1061A00002C08150E1F74A9BFECF08955A9880E2E1 +:1061B0008A95F1F75A9A0895FC013BE03A95F1F778 +:1061C00098E020E080E031E040E14A95F1F7880F67 +:1061D0004A9B02C08160232742E04A95F1F7000004 +:1061E00040E14A95F1F7915079F790E19A95F1F7EE +:1061F00099B132E03A95F1F7000040E14A95F1F7A4 +:1062000092FB992790F992272081920F908308950D +:10621000EF92FF920F931F93CF93DF930F92CDB71F +:10622000DEB719828C017C01E60EF11C0E151F05EC +:1062300061F481E09981911180E00F90DF91CF911D +:106240001F910F91FF90EF9008950E94CE30CE01E4 +:1062500001960E94DC30F80181938F01E7CF529ABA +:106260005A9A089552985A9AEA9AE9E6F0E080819B +:106270008F7C808308956150770B91E001C0990F66 +:106280006A95EAF720E031E0911108C0222391F0ED +:106290005A9A80E28A95F1F75A980895492F48232F +:1062A00039F05A9A232740E24A95F1F79695ECCFB8 +:1062B0005A98F9CF5A98EDCFFF920F931F93CF932F +:1062C000DF93EC018C01060F111DC017D10731F4CB +:1062D000DF91CF911F910F91FF900895F9900E9447 +:1062E000D63068E08F2D0E943B31EFCF1F920F9286 +:1062F0000FB60F921124EF92FF920F931F932F93DB +:106300003F934F935F936F937F938F939F93AF933D +:10631000BF93EF93FF93CF93DF930F92CDB7DEB789 +:1063200019820E94CE30CE0101960E94DC30A82F47 +:10633000A695A695A695282F229525709A2F95703B +:10634000290F922F937026952695920F9827977074 +:106350008981982B09F075C0A83008F072C080E1DF +:106360008A95F1F75A9A529AB2E0BA95F1F700C0BD +:106370005A98EA2EF12CEAE0AE9FD0011124AF5FCB +:10638000BE4F1896ED91FC9119973097B1F060913E +:10639000F0017091F10116962D913C911797260FFF +:1063A000371F13968D919C911497680F791F15963E +:1063B0004C91159712968C9109958AE08E9DF0016B +:1063C0008F9DF00D1124EF5FFE4F6581662351F024 +:1063D0002091F0013091F10186819781820F931F06 +:1063E0000E945C310E94D630F0E1FA95F1F75A989C +:1063F00052985A9A80E18A95F1F78AE08E9D800141 +:106400008F9D100D11240F5F1E4FD80112966C91B5 +:106410001297662371F12091F0013091F1011396EA +:106420008D919C91820F931F0E940831D801ED91AC +:10643000FC91882311F088E001C082E080830E94F3 +:10644000CE300F90DF91CF91FF91EF91BF91AF913F +:106450009F918F917F916F915F914F913F912F917C +:106460001F910F91FF90EF900F900FBE0F901F9014 +:106470001895ED91FC91DFCF0F931F93CF93DF938E +:10648000EC0108970CF0A9C08AE08C9FF0018D9F69 +:10649000F00D1124EF5FFE4F80819181892B09F46B +:1064A0009CC0F894529A5A9885E08A95F1F70000BA +:1064B0008C2F869585709C2F9570890F982F9370DF +:1064C00086958695890F8E0193E0000F111F9A958E +:1064D000E1F7082B0E94D63000C068E0802F0E94B0 +:1064E0003B31A0E1AA95F1F752985A9A4A9B27C0EE +:1064F00087E090E04A9925C08AE08C9F80018D9FBB +:10650000100D11240F5F1E4FF80165816623A1F164 +:106510002091F0013091F10186819781820F931FC4 +:106520000E940831811128C0529A5A9AD801ED91DF +:10653000FC9182E08083789482E090E016C000C0F5 +:10654000D5CF0197B9F4529A5A9A8AE08C9FF001FC +:106550008D9FF00D1124EF5FFE4F0190F081E02D33 +:1065600081E08083789481E090E0DF91CF911F916A +:106570000F91089500C0BECF0E94CE30B0E2BA9510 +:10658000F1F75A98529AE0E1EA95F1F78AE08C9F88 +:10659000F0018D9FF00D1124EF5FFE4F62816623A5 +:1065A00051F02091F0013091F10183819481820FAB +:1065B000931F0E945C310E94D6308AE08C9FF001CC +:1065C0008D9FF00D1124EF5FFE4F0190F081E02DC3 +:1065D0001082789490E080E0C8CF84E090E0C5CF4E +:1065E000AA1BBB1B51E107C0AA1FBB1FA617B707F9 +:1065F00010F0A61BB70B881F991F5A95A9F7809515 +:106600009095BC01CD010895991B79E004C0991FB4 +:10661000961708F0961B881F7A95C9F780950895FC +:1066200097FB072E16F4009407D077FD09D00E943F +:10663000F03207FC05D03EF4909581959F4F089568 +:10664000709561957F4F0895EE0FFF1F0590F491AF +:10665000E02D0994692796276927782787277827C7 +:106660000895FB01DC0102C005900D92415050409D +:10667000D8F70895FB01DC0104C08D9101908019C9 +:1066800021F441505040C8F7881B990B0895FB0135 +:10669000DC0102C001900D9241505040D8F708959E +:1066A000F999FECF92BD81BDF89A992780B50895DA +:1066B000A6E1B0E044E050E00C948A33A8E1B0E0F9 +:1066C00042E050E00C948A33262FF999FECF92BD18 +:1066D00081BDF89A019700B4021639F01FBA20BDA7 +:1066E0000FB6F894FA9AF99A0FBE08950396272FD9 +:1066F0000E9465330E946433252F0E946533242F46 +:106700000C9465330196272F0E9465330C946433F3 +:10671000DC01CB01FC01F999FECF06C0F2BDE1BD61 +:10672000F89A319600B40D9241505040B8F7089550 +:106730000E94DA3308F481E00895E89409C097FBD9 +:106740003EF490958095709561957F4F8F4F9F4F48 +:106750009923A9F0F92F96E9BB279395F69587958C +:1067600077956795B795F111F8CFFAF4BB0F11F44F +:1067700060FF1BC06F5F7F4F8F4F9F4F16C08823F6 +:1067800011F096E911C0772321F09EE8872F762F2C +:1067900005C0662371F096E8862F70E060E02AF06D +:1067A0009A95660F771F881FDAF7880F9695879559 +:1067B00097F90895990F0008550FAA0BE0E8FEEF2E +:1067C00016161706E807F907C0F012161306E407B5 +:1067D000F50798F0621B730B840B950B39F40A26AE +:1067E00061F0232B242B252B21F408950A2609F48C +:1067F000A140A6958FEF811D811D08950E9411343F +:106800000C9482340E94743438F00E947B3420F05F +:10681000952311F00C946B340C94713411240C9466 +:10682000B6340E94933470F3959FC1F3950F50E0F6 +:10683000551F629FF001729FBB27F00DB11D639F32 +:10684000AA27F00DB11DAA1F649F6627B00DA11DD8 +:10685000661F829F2227B00DA11D621F739FB00D7E +:10686000A11D621F839FA00D611D221F749F3327EE +:10687000A00D611D231F849F600D211D822F762F87 +:106880006A2F11249F5750409AF0F1F088234AF064 +:10689000EE0FFF1FBB1F661F771F881F91505040D0 +:1068A000A9F79E3F510580F00C946B340C94B634DC +:1068B0005F3FE4F3983ED4F3869577956795B79557 +:1068C000F795E7959F5FC1F7FE2B880F911D969571 +:1068D000879597F9089597F99F6780E870E060E0E1 +:1068E00008959FEF80EC089500240A941616170669 +:1068F00018060906089500240A94121613061406B1 +:1069000005060895092E0394000C11F4882352F013 +:10691000BB0F40F4BF2B11F460FF04C06F5F7F4FCB +:106920008F4F9F4F089557FD9058440F551F59F0B2 +:106930005F3F71F04795880F97FB991F61F09F3F6C +:1069400079F087950895121613061406551FF2CF95 +:106950004695F1DF08C0161617061806991FF1CFE5 +:1069600086957105610508940895E894BB2766270C +:106970007727CB0197F90895F894FFCFE7100F110F +:1069800062110F11621142117A1162117712841291 +:10699000B014B014B914B914BB14B914B914B9149F +:1069A000B014B014C014B914B914C01417211721AD +:1069B00070217021A2214A214A214A21BC212D2285 +:1069C0003D223D22902D942DD72DE82DF32D122E12 +:1069D000152E482E692EE52DE52D742E772E7B2E53 +:0A69E000A12EC32EC62EC82EED2EE8 +:1069EA000130020000000100000000300200000037 +:1069FA00050100000030020000000106000000301E +:106A0A000200000001070000003002040800000034 +:106A1A000000003002090C000000000000300201F2 +:106A2A001500000000000036323331F7F66766972A +:106A3A00C6343500000000000180005F082B0E0AF2 +:106A4A000E060E020EF4F5010021007F220003005B +:106A5A004A004A4A01F6F731333236674C41594502 +:106A6A00520042617365200047616D6520005261E2 +:106A7A00697365004C6F776572004C4F434B004356 +:106A8A00617073004E756D005363726C0020202094 +:106A9A00202000534F4C415200544D505354008112 +:106AAA008283E200E900EA00B500B600B700CD0033 +:106ABA008301CC008A01920194012102230224025B +:106ACA002502260227022A02B300B4006F007000D2 +:106ADA00A50200FF0100010000FFFF000001000104 +:106AEA00FF00000810181810080000010202020234 +:106AFA0002020202020240227B99017701FC000095 +:066B0A000C190C390C000F :00000001FF From 89b22ba9d428e9bd8fe53ea1973fd17cec3c21ab Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 2 Nov 2021 14:43:24 +0800 Subject: [PATCH 032/155] Add new keyboard keychron_q1_rev_0101 for Keychron. --- keyboards/keychron/q1/config.h | 3 + keyboards/keychron/q1/q1.h | 2 + keyboards/keychron/q1/rev_0101/config.h | 37 +++++ keyboards/keychron/q1/rev_0101/info.json | 100 +++++++++++++ .../q1/rev_0101/keymaps/default/keymap.c | 100 +++++++++++++ .../keychron/q1/rev_0101/keymaps/via/keymap.c | 100 +++++++++++++ .../keychron/q1/rev_0101/keymaps/via/rules.mk | 2 + keyboards/keychron/q1/rev_0101/readme.md | 4 + keyboards/keychron/q1/rev_0101/rev_0101.c | 140 ++++++++++++++++++ keyboards/keychron/q1/rev_0101/rev_0101.h | 55 +++++++ keyboards/keychron/q1/rev_0101/rules.mk | 25 ++++ 11 files changed, 568 insertions(+) create mode 100644 keyboards/keychron/q1/rev_0101/config.h create mode 100644 keyboards/keychron/q1/rev_0101/info.json create mode 100644 keyboards/keychron/q1/rev_0101/keymaps/default/keymap.c create mode 100644 keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c create mode 100644 keyboards/keychron/q1/rev_0101/keymaps/via/rules.mk create mode 100644 keyboards/keychron/q1/rev_0101/readme.md create mode 100644 keyboards/keychron/q1/rev_0101/rev_0101.c create mode 100644 keyboards/keychron/q1/rev_0101/rev_0101.h create mode 100644 keyboards/keychron/q1/rev_0101/rules.mk diff --git a/keyboards/keychron/q1/config.h b/keyboards/keychron/q1/config.h index 2a8665c1b45b..c895fa672a0f 100644 --- a/keyboards/keychron/q1/config.h +++ b/keyboards/keychron/q1/config.h @@ -46,6 +46,9 @@ /* NKRO */ #define FORCE_NKRO +/* turn off effects when suspended */ +#define RGB_DISABLE_WHEN_USB_SUSPENDED + /* Disable a single effect */ #define DISABLE_RGB_MATRIX_ALPHAS_MODS #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN diff --git a/keyboards/keychron/q1/q1.h b/keyboards/keychron/q1/q1.h index eb9a7d69a74c..5e93377e0698 100644 --- a/keyboards/keychron/q1/q1.h +++ b/keyboards/keychron/q1/q1.h @@ -21,6 +21,8 @@ #if defined(KEYBOARD_keychron_q1_rev_0100) # include "rev_0100.h" +#elif defined(KEYBOARD_keychron_q1_rev_0101) +# include "rev_0101.h" #elif defined(KEYBOARD_keychron_q1_rev_0102) # include "rev_0102.h" #endif \ No newline at end of file diff --git a/keyboards/keychron/q1/rev_0101/config.h b/keyboards/keychron/q1/rev_0101/config.h new file mode 100644 index 000000000000..57618f7a5824 --- /dev/null +++ b/keyboards/keychron/q1/rev_0101/config.h @@ -0,0 +1,37 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x0101 +#define DEVICE_VER 0x0100 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { D3, D2, B3, B2, B1, B0 } +#define MATRIX_COL_PINS { D5, D4, D6, D7, B4, B5, B6, C6, C7, F7, F6, F5, F4, F1, F0 } + +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 59 +#define DRIVER_2_LED_TOTAL 23 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + +/* Encoder used pins */ +#define ENCODERS_PAD_A { E6 } +#define ENCODERS_PAD_B { B7 } + +/* Specifies the number of pulses the encoder registers between each detent */ +#define ENCODER_RESOLUTION 2 \ No newline at end of file diff --git a/keyboards/keychron/q1/rev_0101/info.json b/keyboards/keychron/q1/rev_0101/info.json new file mode 100644 index 000000000000..2bc549e87da8 --- /dev/null +++ b/keyboards/keychron/q1/rev_0101/info.json @@ -0,0 +1,100 @@ +{ + "keyboard_name": "Keychron Q1", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_ansi_82": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":1.25, "y":0}, + {"label":"F2", "x":2.25, "y":0}, + {"label":"F3", "x":3.25, "y":0}, + {"label":"F4", "x":4.25, "y":0}, + {"label":"F5", "x":5.5, "y":0}, + {"label":"F6", "x":6.5, "y":0}, + {"label":"F7", "x":7.5, "y":0}, + {"label":"F8", "x":8.5, "y":0}, + {"label":"F9", "x":9.75, "y":0}, + {"label":"F10", "x":10.75, "y":0}, + {"label":"F11", "x":11.75, "y":0}, + {"label":"F12", "x":12.75, "y":0}, + {"label":"Delete", "x":14, "y":0}, + + {"label":"Vol-", "x":15.25, "y":0}, + {"label":"mute", "x":16.25, "y":0}, + {"label":"Vol+", "x":17.25, "y":0}, + + {"label":"~", "x":0, "y":1}, + {"label":"!", "x":1, "y":1}, + {"label":"@", "x":2, "y":1}, + {"label":"#", "x":3, "y":1}, + {"label":"$", "x":4, "y":1}, + {"label":"%", "x":5, "y":1}, + {"label":"^", "x":6, "y":1}, + {"label":"&", "x":7, "y":1}, + {"label":"*", "x":8, "y":1}, + {"label":"(", "x":9, "y":1}, + {"label":")", "x":10, "y":1}, + {"label":"_", "x":11, "y":1}, + {"label":"+", "x":12, "y":1}, + {"label":"Backspace", "x":13, "y":1, "w":2}, + {"label":"Page Up", "x":15.25, "y":1}, + + {"label":"Tab", "x":0, "y":2, "w":1.5}, + {"label":"Q", "x":1.5, "y":2}, + {"label":"W", "x":2.5, "y":2}, + {"label":"E", "x":3.5, "y":2}, + {"label":"R", "x":4.5, "y":2}, + {"label":"T", "x":5.5, "y":2}, + {"label":"Y", "x":6.5, "y":2}, + {"label":"U", "x":7.5, "y":2}, + {"label":"I", "x":8.5, "y":2}, + {"label":"O", "x":9.5, "y":2}, + {"label":"P", "x":10.5, "y":2}, + {"label":"{", "x":11.5, "y":2}, + {"label":"}", "x":12.5, "y":2}, + {"label":"|", "x":13.5, "y":2, "w":1.5}, + {"label":"Page Down", "x":15.25, "y":2}, + + {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, + {"label":"A", "x":1.75, "y":3}, + {"label":"S", "x":2.75, "y":3}, + {"label":"D", "x":3.75, "y":3}, + {"label":"F", "x":4.75, "y":3}, + {"label":"G", "x":5.75, "y":3}, + {"label":"H", "x":6.75, "y":3}, + {"label":"J", "x":7.75, "y":3}, + {"label":"K", "x":8.75, "y":3}, + {"label":"L", "x":9.75, "y":3}, + {"label":":", "x":10.75, "y":3}, + {"label":"\"", "x":11.75, "y":3}, + {"label":"Enter", "x":12.75, "y":3, "w":2.25}, + {"label":"Home", "x":15.25, "y":3}, + + {"label":"Shift", "x":0, "y":4, "w":2.25}, + {"label":"Z", "x":2.25, "y":4}, + {"label":"X", "x":3.25, "y":4}, + {"label":"C", "x":4.25, "y":4}, + {"label":"V", "x":5.25, "y":4}, + {"label":"B", "x":6.25, "y":4}, + {"label":"N", "x":7.25, "y":4}, + {"label":"M", "x":8.25, "y":4}, + {"label":"<", "x":9.25, "y":4}, + {"label":">", "x":10.25, "y":4}, + {"label":"?", "x":11.25, "y":4}, + {"label":"Shift", "x":12.25, "y":4, "w":1.75}, + {"label":"Up", "x":14.25, "y":4.25}, + + {"label":"Ctrl", "x":0, "y":5, "w":1.25}, + {"label":"Win", "x":1.25, "y":5, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5, "w":1.25}, + {"label":"Space", "x":3.75, "y":5, "w":6.25}, + {"label":"Alt", "x":10, "y":5}, + {"label":"Fn", "x":11, "y":5}, + {"label":"Ctrl", "x":12, "y":5}, + {"label":"Left", "x":13.25, "y":5.25}, + {"label":"Down", "x":14.25, "y":5.25}, + {"label":"Right", "x":15.25, "y":5.25} ] + } + } +} \ No newline at end of file diff --git a/keyboards/keychron/q1/rev_0101/keymaps/default/keymap.c b/keyboards/keychron/q1/rev_0101/keymaps/default/keymap.c new file mode 100644 index 000000000000..9bff5e36c8ac --- /dev/null +++ b/keyboards/keychron/q1/rev_0101/keymaps/default/keymap.c @@ -0,0 +1,100 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_LAUNCHPAD +}; + +#define KC_TASK LGUI(KC_TAB) +#define KC_FLXP LGUI(KC_E) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_82( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_MUTE, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_ansi_82( + KC_TRNS, 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_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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_ansi_82( + KC_ESC, 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_DEL, KC_MUTE, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_ansi_82( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) +}; + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + } + return false; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} \ No newline at end of file diff --git a/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c new file mode 100644 index 000000000000..26fc43187d0d --- /dev/null +++ b/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c @@ -0,0 +1,100 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = USER00, + KC_LAUNCHPAD +}; + +#define KC_TASK LGUI(KC_TAB) +#define KC_FLXP LGUI(KC_E) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_82( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_MUTE, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_VOLD, KC_VOLU, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_ansi_82( + KC_TRNS, 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_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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_ansi_82( + KC_ESC, 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_DEL, KC_MUTE, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_VOLD, KC_VOLU, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_ansi_82( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) +}; + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code_delay(dynamic_keymap_get_keycode(biton32(default_layer_state), 5, 8), 10); + } else { + tap_code_delay(dynamic_keymap_get_keycode(biton32(default_layer_state), 5, 7), 10); + } + } + return false; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} \ No newline at end of file diff --git a/keyboards/keychron/q1/rev_0101/keymaps/via/rules.mk b/keyboards/keychron/q1/rev_0101/keymaps/via/rules.mk new file mode 100644 index 000000000000..bee21da5283a --- /dev/null +++ b/keyboards/keychron/q1/rev_0101/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +MOUSEKEY_ENABLE = no \ No newline at end of file diff --git a/keyboards/keychron/q1/rev_0101/readme.md b/keyboards/keychron/q1/rev_0101/readme.md new file mode 100644 index 000000000000..d7693349be86 --- /dev/null +++ b/keyboards/keychron/q1/rev_0101/readme.md @@ -0,0 +1,4 @@ +# The ANSI variant of the Keychron Q1 +- Enable EC11 rotary encoder +- Turn colckwise to increase volume and turn anti-colckwise to decrease volume +- Press top right key pushbutton to mute \ No newline at end of file diff --git a/keyboards/keychron/q1/rev_0101/rev_0101.c b/keyboards/keychron/q1/rev_0101/rev_0101.c new file mode 100644 index 000000000000..20d127b2b74d --- /dev/null +++ b/keyboards/keychron/q1/rev_0101/rev_0101.c @@ -0,0 +1,140 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include "quantum.h" + +const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, C_1, A_1, B_1}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_15, A_15, B_15}, + {0, C_16, A_16, B_16}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_14, D_14, E_14}, + {0, F_16, D_16, E_16}, + + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {0, I_5, G_5, H_5}, + {0, I_6, G_6, H_6}, + {0, I_7, G_7, H_7}, + {0, I_8, G_8, H_8}, + {0, I_9, G_9, H_9}, + {0, I_10, G_10, H_10}, + {0, I_11, G_11, H_11}, + {0, I_12, G_12, H_12}, + {0, I_13, G_13, H_13}, + {0, I_14, G_14, H_14}, + {0, I_16, G_16, H_16}, + + {0, L_1, J_1, K_1}, + {0, L_2, J_2, K_2}, + {0, L_3, J_3, K_3}, + {0, L_4, J_4, K_4}, + {0, L_5, J_5, K_5}, + {0, L_6, J_6, K_6}, + {0, L_7, J_7, K_7}, + {0, L_8, J_8, K_8}, + {0, L_9, J_9, K_9}, + {0, L_10, J_10, K_10}, + {0, L_11, J_11, K_11}, + {0, L_12, J_12, K_12}, + {0, L_14, J_14, K_14}, + {0, L_16, J_16, K_16}, + + {1, C_1, A_1, B_1}, + {1, C_3, A_3, B_3}, + {1, C_4, A_4, B_4}, + {1, C_5, A_5, B_5}, + {1, C_6, A_6, B_6}, + {1, C_7, A_7, B_7}, + {1, C_8, A_8, B_8}, + {1, C_9, A_9, B_9}, + {1, C_10, A_10, B_10}, + {1, C_11, A_11, B_11}, + {1, C_12, A_12, B_12}, + {1, C_14, A_14, B_14}, + {1, C_15, A_15, B_15}, + + {1, F_1, D_1, E_1}, + {1, F_2, D_2, E_2}, + {1, F_3, D_3, E_3}, + {1, F_7, D_7, E_7}, + {1, F_11, D_11, E_11}, + {1, F_12, D_12, E_12}, + {1, F_13, D_13, E_13}, + {1, F_14, D_14, E_14}, + {1, F_15, D_15, E_15}, + {1, F_16, D_16, E_16} +}; + +led_config_t g_led_config = { + { + { 0, NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14 }, + { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, + { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44 }, + { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 71, 57, 58 }, + { 59, NO_LED, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 80, 70, 13 }, + { 72, 73, 74, NO_LED, NO_LED, NO_LED, 75, NO_LED, NO_LED, NO_LED, 76, 77, 78, 79, 81 } + }, + { + {0, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {210, 0}, {224, 0}, + {0,13}, {15,13}, {30,13}, {45,13}, {60,13}, {75,13}, {90,13}, {105,13}, {120,13}, {135,13}, {150,13}, {165,13}, {180,13}, {195,13}, {224,13}, + {0,26}, {15,26}, {30,26}, {45,26}, {60,26}, {75,26}, {90,26}, {105,26}, {120,26}, {135,26}, {150,26}, {165,26}, {180,26}, {195,26}, {224,26}, + {0,39}, {15,39}, {30,39}, {45,39}, {60,39}, {75,39}, {90,39}, {105,39}, {120,39}, {135,39}, {150,39}, {165,39}, {195,39}, {224,39}, + {0,52}, {30,52}, {45,52}, {60,52}, {75,52}, {90,52}, {105,52}, {120,52}, {135,52}, {150,52}, {165,52}, {195,52}, {210,52}, + {0,64}, {15,64}, {30,64}, {90,64}, {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64} + }, + { + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 + } +}; \ No newline at end of file diff --git a/keyboards/keychron/q1/rev_0101/rev_0101.h b/keyboards/keychron/q1/rev_0101/rev_0101.h new file mode 100644 index 000000000000..748521cb77b2 --- /dev/null +++ b/keyboards/keychron/q1/rev_0101/rev_0101.h @@ -0,0 +1,55 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#define xxx KC_NO + +#ifdef VIA_ENABLE + #define LAYOUT_ansi_82( \ + K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K4E, K0E, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \ + K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K3C, \ + K50, K51, K52, K56, K57, K58, K5A, K5B, K5C, K5D, K4C, K5E \ + ) { \ + { K00, xxx, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \ + { K40, xxx, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }, \ + { K50, K51, K52, xxx, xxx, xxx, K56, K57, K58, xxx, K5A, K5B, K5C, K5D, K5E } \ + } +#else + #define LAYOUT_ansi_82( \ + K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K4E, K0E, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \ + K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K3C, \ + K50, K51, K52, K56, K5A, K5B, K5C, K5D, K4C, K5E \ + ) { \ + { K00, xxx, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \ + { K40, xxx, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }, \ + { K50, K51, K52, xxx, xxx, xxx, K56, xxx, xxx, xxx, K5A, K5B, K5C, K5D, K5E } \ + } +#endif \ No newline at end of file diff --git a/keyboards/keychron/q1/rev_0101/rules.mk b/keyboards/keychron/q1/rev_0101/rules.mk new file mode 100644 index 000000000000..318e1aa4c0e4 --- /dev/null +++ b/keyboards/keychron/q1/rev_0101/rules.mk @@ -0,0 +1,25 @@ +# MCU name +MCU = atmega32u4 + +# Bootloader selection +BOOTLOADER = atmel-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = no # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = yes # Enable Encoder +DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = IS31FL3733 \ No newline at end of file From 56825007c0cdf825675bb8749929979219aa271c Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 2 Nov 2021 15:27:57 +0800 Subject: [PATCH 033/155] Update keymaps of keychron_q1_rev_0100 and keychron_q1_rev_0102. --- .../q1/rev_0100/keymaps/default/keymap.c | 95 ++++++++++++------- .../keychron/q1/rev_0100/keymaps/via/keymap.c | 87 +++++++++++------ .../q1/rev_0102/keymaps/default/keymap.c | 87 +++++++++++------ .../keychron/q1/rev_0102/keymaps/via/keymap.c | 87 +++++++++++------ 4 files changed, 228 insertions(+), 128 deletions(-) diff --git a/keyboards/keychron/q1/rev_0100/keymaps/default/keymap.c b/keyboards/keychron/q1/rev_0100/keymaps/default/keymap.c index e000dd7dd7bb..d1f71e9da679 100644 --- a/keyboards/keychron/q1/rev_0100/keymaps/default/keymap.c +++ b/keyboards/keychron/q1/rev_0100/keymaps/default/keymap.c @@ -16,49 +16,74 @@ #include QMK_KEYBOARD_H - enum layers{ - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_LAUNCHPAD }; #define KC_TASK LGUI(KC_TAB) #define KC_FLXP LGUI(KC_E) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_82( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), -[MAC_BASE] = LAYOUT_ansi_82( - KC_ESC, KC_BRID, KC_BRIU, KC_F3, KC_F4, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS, - KC_GRV, 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_PGUP, - 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_PGDN, - 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_HOME, - 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_UP, - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + [MAC_FN] = LAYOUT_ansi_82( + KC_TRNS, 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_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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), -[MAC_FN] = LAYOUT_ansi_82( - KC_TRNS, 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_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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + [WIN_BASE] = LAYOUT_ansi_82( + KC_ESC, 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_DEL, KC_INS, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), -[WIN_BASE] = LAYOUT_ansi_82( - KC_ESC, 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_DEL, KC_INS, - KC_GRV, 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_PGUP, - 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_PGDN, - 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_HOME, - 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_UP, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - -[WIN_FN] = LAYOUT_ansi_82( - KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) + [WIN_FN] = LAYOUT_ansi_82( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) +}; -}; \ No newline at end of file +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c index e000dd7dd7bb..3b63c6d5dd6b 100644 --- a/keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c +++ b/keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c @@ -16,7 +16,6 @@ #include QMK_KEYBOARD_H - enum layers{ MAC_BASE, MAC_FN, @@ -24,41 +23,67 @@ enum layers{ WIN_FN }; +enum custom_keycodes { + KC_MISSION_CONTROL = USER00, + KC_LAUNCHPAD +}; + #define KC_TASK LGUI(KC_TAB) #define KC_FLXP LGUI(KC_E) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_82( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), -[MAC_BASE] = LAYOUT_ansi_82( - KC_ESC, KC_BRID, KC_BRIU, KC_F3, KC_F4, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS, - KC_GRV, 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_PGUP, - 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_PGDN, - 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_HOME, - 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_UP, - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + [MAC_FN] = LAYOUT_ansi_82( + KC_TRNS, 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_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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), -[MAC_FN] = LAYOUT_ansi_82( - KC_TRNS, 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_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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + [WIN_BASE] = LAYOUT_ansi_82( + KC_ESC, 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_DEL, KC_INS, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), -[WIN_BASE] = LAYOUT_ansi_82( - KC_ESC, 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_DEL, KC_INS, - KC_GRV, 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_PGUP, - 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_PGDN, - 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_HOME, - 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_UP, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - -[WIN_FN] = LAYOUT_ansi_82( - KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) + [WIN_FN] = LAYOUT_ansi_82( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) +}; -}; \ No newline at end of file +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q1/rev_0102/keymaps/default/keymap.c b/keyboards/keychron/q1/rev_0102/keymaps/default/keymap.c index b4a7d6442754..3d0a9e5c6f2b 100644 --- a/keyboards/keychron/q1/rev_0102/keymaps/default/keymap.c +++ b/keyboards/keychron/q1/rev_0102/keymaps/default/keymap.c @@ -16,7 +16,6 @@ #include QMK_KEYBOARD_H - enum layers{ MAC_BASE, MAC_FN, @@ -24,41 +23,67 @@ enum layers{ WIN_FN }; +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_LAUNCHPAD +}; + #define KC_TASK LGUI(KC_TAB) #define KC_FLXP LGUI(KC_E) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_iso_83( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_NUHS, KC_ENT, KC_HOME, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), -[MAC_BASE] = LAYOUT_iso_83( - KC_ESC, KC_BRID, KC_BRIU, KC_F3, KC_F4, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS, - KC_GRV, 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_PGUP, - 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_PGDN, - 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_NUHS, KC_ENT, KC_HOME, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - -[MAC_FN] = LAYOUT_iso_83( - KC_TRNS, 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_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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + [MAC_FN] = LAYOUT_iso_83( + KC_TRNS, 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_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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), -[WIN_BASE] = LAYOUT_iso_83( - KC_ESC, 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_DEL, KC_INS, - KC_GRV, 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_PGUP, - 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_PGDN, - 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_NUHS, KC_ENT, KC_HOME, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + [WIN_BASE] = LAYOUT_iso_83( + KC_ESC, 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_DEL, KC_INS, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_NUHS, KC_ENT, KC_HOME, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), -[WIN_FN] = LAYOUT_iso_83( - KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) + [WIN_FN] = LAYOUT_iso_83( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) + }; -}; \ No newline at end of file +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q1/rev_0102/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0102/keymaps/via/keymap.c index b4a7d6442754..0656a232e16e 100644 --- a/keyboards/keychron/q1/rev_0102/keymaps/via/keymap.c +++ b/keyboards/keychron/q1/rev_0102/keymaps/via/keymap.c @@ -16,7 +16,6 @@ #include QMK_KEYBOARD_H - enum layers{ MAC_BASE, MAC_FN, @@ -24,41 +23,67 @@ enum layers{ WIN_FN }; +enum custom_keycodes { + KC_MISSION_CONTROL = USER00, + KC_LAUNCHPAD +}; + #define KC_TASK LGUI(KC_TAB) #define KC_FLXP LGUI(KC_E) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_iso_83( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_NUHS, KC_ENT, KC_HOME, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), -[MAC_BASE] = LAYOUT_iso_83( - KC_ESC, KC_BRID, KC_BRIU, KC_F3, KC_F4, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS, - KC_GRV, 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_PGUP, - 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_PGDN, - 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_NUHS, KC_ENT, KC_HOME, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + [MAC_FN] = LAYOUT_iso_83( + KC_TRNS, 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_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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), -[MAC_FN] = LAYOUT_iso_83( - KC_TRNS, 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_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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + [WIN_BASE] = LAYOUT_iso_83( + KC_ESC, 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_DEL, KC_INS, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_NUHS, KC_ENT, KC_HOME, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), -[WIN_BASE] = LAYOUT_iso_83( - KC_ESC, 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_DEL, KC_INS, - KC_GRV, 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_PGUP, - 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_PGDN, - 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_NUHS, KC_ENT, KC_HOME, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - -[WIN_FN] = LAYOUT_iso_83( - KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) + [WIN_FN] = LAYOUT_iso_83( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) +}; -}; \ No newline at end of file +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} From 37d6c51b4985978f04eb56c359eb23bef6bf1b35 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Wed, 3 Nov 2021 08:33:48 +0800 Subject: [PATCH 034/155] Update keyboards/keychron/q1/rev_0101/rev_0101.h Co-authored-by: Joel Challis --- keyboards/keychron/q1/rev_0101/rev_0101.h | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/keyboards/keychron/q1/rev_0101/rev_0101.h b/keyboards/keychron/q1/rev_0101/rev_0101.h index 748521cb77b2..2a1ef3b05f74 100644 --- a/keyboards/keychron/q1/rev_0101/rev_0101.h +++ b/keyboards/keychron/q1/rev_0101/rev_0101.h @@ -20,8 +20,7 @@ #define xxx KC_NO -#ifdef VIA_ENABLE - #define LAYOUT_ansi_82( \ +#define LAYOUT_all( \ K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K4E, K0E, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, \ @@ -36,8 +35,7 @@ { K40, xxx, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }, \ { K50, K51, K52, xxx, xxx, xxx, K56, K57, K58, xxx, K5A, K5B, K5C, K5D, K5E } \ } -#else - #define LAYOUT_ansi_82( \ +#define LAYOUT_ansi_82( \ K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K4E, K0E, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, \ @@ -51,5 +49,4 @@ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \ { K40, xxx, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }, \ { K50, K51, K52, xxx, xxx, xxx, K56, xxx, xxx, xxx, K5A, K5B, K5C, K5D, K5E } \ - } -#endif \ No newline at end of file + } \ No newline at end of file From baea4f921557528c85fa810ca384cf0383db03f2 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Wed, 3 Nov 2021 08:41:35 +0800 Subject: [PATCH 035/155] Update keymap.c --- keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c index 26fc43187d0d..6577d3360560 100644 --- a/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c +++ b/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c @@ -34,7 +34,7 @@ enum custom_keycodes { #define KC_LPAD KC_LAUNCHPAD const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_ansi_82( + [MAC_BASE] = LAYOUT_all( KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_MUTE, KC_GRV, 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_PGUP, 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_PGDN, @@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_UP, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_VOLD, KC_VOLU, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - [MAC_FN] = LAYOUT_ansi_82( + [MAC_FN] = LAYOUT_all( KC_TRNS, 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_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, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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), - [WIN_BASE] = LAYOUT_ansi_82( + [WIN_BASE] = LAYOUT_all( KC_ESC, 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_DEL, KC_MUTE, KC_GRV, 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_PGUP, 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_PGDN, @@ -58,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_UP, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_VOLD, KC_VOLU, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - [WIN_FN] = LAYOUT_ansi_82( + [WIN_FN] = LAYOUT_all( KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -97,4 +97,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { default: return true; // Process all other keycodes normally } -} \ No newline at end of file +} From 0e4857fb9a4b41f55f4f5daa9ee0311295f3481a Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Wed, 3 Nov 2021 09:53:30 +0800 Subject: [PATCH 036/155] Add new info.json. --- keyboards/keychron/q1/rev_0101/info.json | 100 ------------------ .../q1/rev_0101/keymaps/default/info.json | 97 +++++++++++++++++ .../q1/rev_0101/keymaps/via/info.json | 100 ++++++++++++++++++ 3 files changed, 197 insertions(+), 100 deletions(-) delete mode 100644 keyboards/keychron/q1/rev_0101/info.json create mode 100644 keyboards/keychron/q1/rev_0101/keymaps/default/info.json create mode 100644 keyboards/keychron/q1/rev_0101/keymaps/via/info.json diff --git a/keyboards/keychron/q1/rev_0101/info.json b/keyboards/keychron/q1/rev_0101/info.json deleted file mode 100644 index 2bc549e87da8..000000000000 --- a/keyboards/keychron/q1/rev_0101/info.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "keyboard_name": "Keychron Q1", - "url": "https://github.com/Keychron", - "maintainer": "lalalademaxiya1", - "layouts": { - "LAYOUT_ansi_82": { - "layout": [ - {"label":"Esc", "x":0, "y":0}, - {"label":"F1", "x":1.25, "y":0}, - {"label":"F2", "x":2.25, "y":0}, - {"label":"F3", "x":3.25, "y":0}, - {"label":"F4", "x":4.25, "y":0}, - {"label":"F5", "x":5.5, "y":0}, - {"label":"F6", "x":6.5, "y":0}, - {"label":"F7", "x":7.5, "y":0}, - {"label":"F8", "x":8.5, "y":0}, - {"label":"F9", "x":9.75, "y":0}, - {"label":"F10", "x":10.75, "y":0}, - {"label":"F11", "x":11.75, "y":0}, - {"label":"F12", "x":12.75, "y":0}, - {"label":"Delete", "x":14, "y":0}, - - {"label":"Vol-", "x":15.25, "y":0}, - {"label":"mute", "x":16.25, "y":0}, - {"label":"Vol+", "x":17.25, "y":0}, - - {"label":"~", "x":0, "y":1}, - {"label":"!", "x":1, "y":1}, - {"label":"@", "x":2, "y":1}, - {"label":"#", "x":3, "y":1}, - {"label":"$", "x":4, "y":1}, - {"label":"%", "x":5, "y":1}, - {"label":"^", "x":6, "y":1}, - {"label":"&", "x":7, "y":1}, - {"label":"*", "x":8, "y":1}, - {"label":"(", "x":9, "y":1}, - {"label":")", "x":10, "y":1}, - {"label":"_", "x":11, "y":1}, - {"label":"+", "x":12, "y":1}, - {"label":"Backspace", "x":13, "y":1, "w":2}, - {"label":"Page Up", "x":15.25, "y":1}, - - {"label":"Tab", "x":0, "y":2, "w":1.5}, - {"label":"Q", "x":1.5, "y":2}, - {"label":"W", "x":2.5, "y":2}, - {"label":"E", "x":3.5, "y":2}, - {"label":"R", "x":4.5, "y":2}, - {"label":"T", "x":5.5, "y":2}, - {"label":"Y", "x":6.5, "y":2}, - {"label":"U", "x":7.5, "y":2}, - {"label":"I", "x":8.5, "y":2}, - {"label":"O", "x":9.5, "y":2}, - {"label":"P", "x":10.5, "y":2}, - {"label":"{", "x":11.5, "y":2}, - {"label":"}", "x":12.5, "y":2}, - {"label":"|", "x":13.5, "y":2, "w":1.5}, - {"label":"Page Down", "x":15.25, "y":2}, - - {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, - {"label":"A", "x":1.75, "y":3}, - {"label":"S", "x":2.75, "y":3}, - {"label":"D", "x":3.75, "y":3}, - {"label":"F", "x":4.75, "y":3}, - {"label":"G", "x":5.75, "y":3}, - {"label":"H", "x":6.75, "y":3}, - {"label":"J", "x":7.75, "y":3}, - {"label":"K", "x":8.75, "y":3}, - {"label":"L", "x":9.75, "y":3}, - {"label":":", "x":10.75, "y":3}, - {"label":"\"", "x":11.75, "y":3}, - {"label":"Enter", "x":12.75, "y":3, "w":2.25}, - {"label":"Home", "x":15.25, "y":3}, - - {"label":"Shift", "x":0, "y":4, "w":2.25}, - {"label":"Z", "x":2.25, "y":4}, - {"label":"X", "x":3.25, "y":4}, - {"label":"C", "x":4.25, "y":4}, - {"label":"V", "x":5.25, "y":4}, - {"label":"B", "x":6.25, "y":4}, - {"label":"N", "x":7.25, "y":4}, - {"label":"M", "x":8.25, "y":4}, - {"label":"<", "x":9.25, "y":4}, - {"label":">", "x":10.25, "y":4}, - {"label":"?", "x":11.25, "y":4}, - {"label":"Shift", "x":12.25, "y":4, "w":1.75}, - {"label":"Up", "x":14.25, "y":4.25}, - - {"label":"Ctrl", "x":0, "y":5, "w":1.25}, - {"label":"Win", "x":1.25, "y":5, "w":1.25}, - {"label":"Alt", "x":2.5, "y":5, "w":1.25}, - {"label":"Space", "x":3.75, "y":5, "w":6.25}, - {"label":"Alt", "x":10, "y":5}, - {"label":"Fn", "x":11, "y":5}, - {"label":"Ctrl", "x":12, "y":5}, - {"label":"Left", "x":13.25, "y":5.25}, - {"label":"Down", "x":14.25, "y":5.25}, - {"label":"Right", "x":15.25, "y":5.25} ] - } - } -} \ No newline at end of file diff --git a/keyboards/keychron/q1/rev_0101/keymaps/default/info.json b/keyboards/keychron/q1/rev_0101/keymaps/default/info.json new file mode 100644 index 000000000000..1c4ac6f8932b --- /dev/null +++ b/keyboards/keychron/q1/rev_0101/keymaps/default/info.json @@ -0,0 +1,97 @@ +{ + "keyboard_name": "Keychron Q1", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_ansi_82": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":1.25, "y":0}, + {"label":"F2", "x":2.25, "y":0}, + {"label":"F3", "x":3.25, "y":0}, + {"label":"F4", "x":4.25, "y":0}, + {"label":"F5", "x":5.5, "y":0}, + {"label":"F6", "x":6.5, "y":0}, + {"label":"F7", "x":7.5, "y":0}, + {"label":"F8", "x":8.5, "y":0}, + {"label":"F9", "x":9.75, "y":0}, + {"label":"F10", "x":10.75, "y":0}, + {"label":"F11", "x":11.75, "y":0}, + {"label":"F12", "x":12.75, "y":0}, + {"label":"Delete", "x":14, "y":0}, + {"label":"Mute", "x":15.25, "y":0}, + + {"label":"~", "x":0, "y":1.25}, + {"label":"!", "x":1, "y":1.25}, + {"label":"@", "x":2, "y":1.25}, + {"label":"#", "x":3, "y":1.25}, + {"label":"$", "x":4, "y":1.25}, + {"label":"%", "x":5, "y":1.25}, + {"label":"^", "x":6, "y":1.25}, + {"label":"&", "x":7, "y":1.25}, + {"label":"*", "x":8, "y":1.25}, + {"label":"(", "x":9, "y":1.25}, + {"label":")", "x":10, "y":1.25}, + {"label":"_", "x":11, "y":1.25}, + {"label":"+", "x":12, "y":1.25}, + {"label":"Backspace", "x":13, "y":1.25, "w":2}, + {"label":"Page Up", "x":15.25, "y":1.25}, + + {"label":"Tab", "x":0, "y":2.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.25}, + {"label":"W", "x":2.5, "y":2.25}, + {"label":"E", "x":3.5, "y":2.25}, + {"label":"R", "x":4.5, "y":2.25}, + {"label":"T", "x":5.5, "y":2.25}, + {"label":"Y", "x":6.5, "y":2.25}, + {"label":"U", "x":7.5, "y":2.25}, + {"label":"I", "x":8.5, "y":2.25}, + {"label":"O", "x":9.5, "y":2.25}, + {"label":"P", "x":10.5, "y":2.25}, + {"label":"{", "x":11.5, "y":2.25}, + {"label":"}", "x":12.5, "y":2.25}, + {"label":"|", "x":13.5, "y":2.25, "w":1.5}, + {"label":"Page Down", "x":15.25, "y":2.25}, + + {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, + {"label":"A", "x":1.75, "y":3.25}, + {"label":"S", "x":2.75, "y":3.25}, + {"label":"D", "x":3.75, "y":3.25}, + {"label":"F", "x":4.75, "y":3.25}, + {"label":"G", "x":5.75, "y":3.25}, + {"label":"H", "x":6.75, "y":3.25}, + {"label":"J", "x":7.75, "y":3.25}, + {"label":"K", "x":8.75, "y":3.25}, + {"label":"L", "x":9.75, "y":3.25}, + {"label":":", "x":10.75, "y":3.25}, + {"label":"\"", "x":11.75, "y":3.25}, + {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, + {"label":"Home", "x":15.25, "y":3.25}, + + {"label":"Shift", "x":0, "y":4.25, "w":2.25}, + {"label":"Z", "x":2.25, "y":4.25}, + {"label":"X", "x":3.25, "y":4.25}, + {"label":"C", "x":4.25, "y":4.25}, + {"label":"V", "x":5.25, "y":4.25}, + {"label":"B", "x":6.25, "y":4.25}, + {"label":"N", "x":7.25, "y":4.25}, + {"label":"M", "x":8.25, "y":4.25}, + {"label":"<", "x":9.25, "y":4.25}, + {"label":">", "x":10.25, "y":4.25}, + {"label":"?", "x":11.25, "y":4.25}, + {"label":"Shift", "x":12.25, "y":4.25, "w":1.75}, + {"label":"Up", "x":14.25, "y":4.5}, + + {"label":"Ctrl", "x":0, "y":5.25, "w":1 .25}, + {"label":"Win", "x":1.25, "y":5.25, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, + {"label":"Alt", "x":10, "y":5.25}, + {"label":"Fn", "x":11, "y":5.25}, + {"label":"Ctrl", "x":12, "y":5.25}, + {"label":"Left", "x":13.25, "y":5.5}, + {"label":"Down", "x":14.25, "y":5.5}, + {"label":"Right", "x":15.25, "y":5.5} ] + } + } +} \ No newline at end of file diff --git a/keyboards/keychron/q1/rev_0101/keymaps/via/info.json b/keyboards/keychron/q1/rev_0101/keymaps/via/info.json new file mode 100644 index 000000000000..aede68abad12 --- /dev/null +++ b/keyboards/keychron/q1/rev_0101/keymaps/via/info.json @@ -0,0 +1,100 @@ +{ + "keyboard_name": "Keychron Q1", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_all": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":1.25, "y":0}, + {"label":"F2", "x":2.25, "y":0}, + {"label":"F3", "x":3.25, "y":0}, + {"label":"F4", "x":4.25, "y":0}, + {"label":"F5", "x":5.5, "y":0}, + {"label":"F6", "x":6.5, "y":0}, + {"label":"F7", "x":7.5, "y":0}, + {"label":"F8", "x":8.5, "y":0}, + {"label":"F9", "x":9.75, "y":0}, + {"label":"F10", "x":10.75, "y":0}, + {"label":"F11", "x":11.75, "y":0}, + {"label":"F12", "x":12.75, "y":0}, + {"label":"Delete", "x":14, "y":0}, + + {"label":"Vol-", "x":15.25, "y":0}, + {"label":"mute", "x":16.25, "y":0}, + {"label":"Vol+", "x":17.25, "y":0}, + + {"label":"~", "x":0, "y":1.25}, + {"label":"!", "x":1, "y":1.25}, + {"label":"@", "x":2, "y":1.25}, + {"label":"#", "x":3, "y":1.25}, + {"label":"$", "x":4, "y":1.25}, + {"label":"%", "x":5, "y":1.25}, + {"label":"^", "x":6, "y":1.25}, + {"label":"&", "x":7, "y":1.25}, + {"label":"*", "x":8, "y":1.25}, + {"label":"(", "x":9, "y":1.25}, + {"label":")", "x":10, "y":1.25}, + {"label":"_", "x":11, "y":1}, + {"label":"+", "x":12, "y":1.25}, + {"label":"Backspace", "x":13, "y":1.25, "w":2}, + {"label":"Page Up", "x":15.25, "y":1.25}, + + {"label":"Tab", "x":0, "y":2.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.25}, + {"label":"W", "x":2.5, "y":2.25}, + {"label":"E", "x":3.5, "y":2.25}, + {"label":"R", "x":4.5, "y":2.25}, + {"label":"T", "x":5.5, "y":2.25}, + {"label":"Y", "x":6.5, "y":2.25}, + {"label":"U", "x":7.5, "y":2.25}, + {"label":"I", "x":8.5, "y":2.25}, + {"label":"O", "x":9.5, "y":2.25}, + {"label":"P", "x":10.5, "y":2.25}, + {"label":"{", "x":11.5, "y":2.25}, + {"label":"}", "x":12.5, "y":2.25}, + {"label":"|", "x":13.5, "y":2.25, "w":1.5}, + {"label":"Page Down", "x":15.25, "y":2.25}, + + {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, + {"label":"A", "x":1.75, "y":3.25}, + {"label":"S", "x":2.75, "y":3.25}, + {"label":"D", "x":3.75, "y":3.25}, + {"label":"F", "x":4.75, "y":3.25}, + {"label":"G", "x":5.75, "y":3.25}, + {"label":"H", "x":6.75, "y":3.25}, + {"label":"J", "x":7.75, "y":3.25}, + {"label":"K", "x":8.75, "y":3.25}, + {"label":"L", "x":9.75, "y":3.25}, + {"label":":", "x":10.75, "y":3.25}, + {"label":"\"", "x":11.75, "y":3.25}, + {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, + {"label":"Home", "x":15.25, "y":3.25}, + + {"label":"Shift", "x":0, "y":4.25, "w":2.25}, + {"label":"Z", "x":2.25, "y":4.25}, + {"label":"X", "x":3.25, "y":4.25}, + {"label":"C", "x":4.25, "y":4.25}, + {"label":"V", "x":5.25, "y":4.25}, + {"label":"B", "x":6.25, "y":4.25}, + {"label":"N", "x":7.25, "y":4.25}, + {"label":"M", "x":8.25, "y":4.25}, + {"label":"<", "x":9.25, "y":4.25}, + {"label":">", "x":10.25, "y":4.25}, + {"label":"?", "x":11.25, "y":4.25}, + {"label":"Shift", "x":12.25, "y":4.25, "w":1.75}, + {"label":"Up", "x":14.25, "y":4.5}, + + {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, + {"label":"Win", "x":1.25, "y":5.25, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, + {"label":"Alt", "x":10, "y":5.25}, + {"label":"Fn", "x":11, "y":5.25}, + {"label":"Ctrl", "x":12, "y":5.25}, + {"label":"Left", "x":13.25, "y":5.5}, + {"label":"Down", "x":14.25, "y":5.5}, + {"label":"Right", "x":15.25, "y":5.5} ] + } + } +} \ No newline at end of file From 30378835efd111becde70fc497f984118836bb97 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Wed, 3 Nov 2021 10:06:28 +0800 Subject: [PATCH 037/155] Update info.json --- keyboards/keychron/q1/rev_0101/keymaps/default/info.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/keychron/q1/rev_0101/keymaps/default/info.json b/keyboards/keychron/q1/rev_0101/keymaps/default/info.json index 1c4ac6f8932b..56bf48acc118 100644 --- a/keyboards/keychron/q1/rev_0101/keymaps/default/info.json +++ b/keyboards/keychron/q1/rev_0101/keymaps/default/info.json @@ -82,7 +82,7 @@ {"label":"Shift", "x":12.25, "y":4.25, "w":1.75}, {"label":"Up", "x":14.25, "y":4.5}, - {"label":"Ctrl", "x":0, "y":5.25, "w":1 .25}, + {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, {"label":"Win", "x":1.25, "y":5.25, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, From dc45c868035854cf8095090c83a5ebdb64c3d04c Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Thu, 4 Nov 2021 18:30:07 +0800 Subject: [PATCH 038/155] Update keyboards/keychron/q1/rev_0101/keymaps/default/keymap.c Co-authored-by: Drashna Jaelre --- .../keychron/q1/rev_0101/keymaps/default/keymap.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/keyboards/keychron/q1/rev_0101/keymaps/default/keymap.c b/keyboards/keychron/q1/rev_0101/keymaps/default/keymap.c index 9bff5e36c8ac..c9f6ecf47a24 100644 --- a/keyboards/keychron/q1/rev_0101/keymaps/default/keymap.c +++ b/keyboards/keychron/q1/rev_0101/keymaps/default/keymap.c @@ -67,16 +67,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) }; -bool encoder_update_user(uint8_t index, bool clockwise) { - if (index == 0) { /* First encoder */ - if (clockwise) { - tap_code_delay(KC_VOLU, 10); - } else { - tap_code_delay(KC_VOLD, 10); - } - } - return false; -} bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { From 0c2ebe4357f0dca9aa9d5f0be193ab97ffd7d89a Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Thu, 4 Nov 2021 18:30:13 +0800 Subject: [PATCH 039/155] Update keyboards/keychron/q1/rev_0101/rev_0101.c Co-authored-by: Drashna Jaelre --- keyboards/keychron/q1/rev_0101/rev_0101.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/keyboards/keychron/q1/rev_0101/rev_0101.c b/keyboards/keychron/q1/rev_0101/rev_0101.c index 20d127b2b74d..a45794b6ad19 100644 --- a/keyboards/keychron/q1/rev_0101/rev_0101.c +++ b/keyboards/keychron/q1/rev_0101/rev_0101.c @@ -137,4 +137,19 @@ led_config_t g_led_config = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 } -}; \ No newline at end of file +}; +#endif + +#ifdef ENCODER_ENABLE +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { return false; } + if (index == 0) { + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + } + return true; +} +#endif \ No newline at end of file From 71564e648cb0194761622bfe945eedf505d2dda5 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Thu, 4 Nov 2021 18:30:39 +0800 Subject: [PATCH 040/155] Update keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c Co-authored-by: Drashna Jaelre --- .../keychron/q1/rev_0101/keymaps/via/keymap.c | 45 ++++++++++++++++--- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c index 6577d3360560..08468736d133 100644 --- a/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c +++ b/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c @@ -67,17 +67,48 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) }; -bool encoder_update_user(uint8_t index, bool clockwise) { - if (index == 0) { /* First encoder */ - if (clockwise) { - tap_code_delay(dynamic_keymap_get_keycode(biton32(default_layer_state), 5, 8), 10); - } else { - tap_code_delay(dynamic_keymap_get_keycode(biton32(default_layer_state), 5, 7), 10); +#if defined(VIA_ENABLE) && defined(ENCODER_ENABLE) + +#define ENCODERS 1 +static uint8_t encoder_state[ENCODERS] = {0}; +static keypos_t encoder_cw[ENCODERS] = { 8, 5 }; +static keypos_t encoder_ccw[ENCODERS] = { 7, 5 }; + +void encoder_action_unregister(void) { + for (int index = 0; index < ENCODERS; ++index) { + if (encoder_state[index]) { + keyevent_t encoder_event = (keyevent_t) { + .key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], + .pressed = false, + .time = (timer_read() | 1) + }; + encoder_state[index] = 0; + action_exec(encoder_event); } } - return false; } +void encoder_action_register(uint8_t index, bool clockwise) { + keyevent_t encoder_event = (keyevent_t) { + .key = clockwise ? encoder_cw[index] : encoder_ccw[index], + .pressed = true, + .time = (timer_read() | 1) + }; + encoder_state[index] = (clockwise ^ 1) | (clockwise << 1); + action_exec(encoder_event); +} + +void matrix_scan_user(void) { + encoder_action_unregister(); +} + +bool encoder_update_user(uint8_t index, bool clockwise) { + encoder_action_register(index, clockwise); + return false; +}; + +#endif + bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case KC_MISSION_CONTROL: From c6cf4f1b8d60121cbcd62b672bcf695dc606937c Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Thu, 4 Nov 2021 18:30:48 +0800 Subject: [PATCH 041/155] Update keyboards/keychron/q1/rev_0101/rev_0101.c Co-authored-by: Drashna Jaelre --- keyboards/keychron/q1/rev_0101/rev_0101.c | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/keychron/q1/rev_0101/rev_0101.c b/keyboards/keychron/q1/rev_0101/rev_0101.c index a45794b6ad19..387e44876291 100644 --- a/keyboards/keychron/q1/rev_0101/rev_0101.c +++ b/keyboards/keychron/q1/rev_0101/rev_0101.c @@ -16,6 +16,7 @@ #include "quantum.h" +#ifdef RGB_MATRIX_ENABLE const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL] = { /* Refer to IS31 manual for these locations * driver From 8c85173269c901f73917d142b0fd0d1677437bbe Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Thu, 4 Nov 2021 19:38:02 +0800 Subject: [PATCH 042/155] Update keymap.c --- keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c index 08468736d133..c7c4d76bc95b 100644 --- a/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c +++ b/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c @@ -71,8 +71,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #define ENCODERS 1 static uint8_t encoder_state[ENCODERS] = {0}; -static keypos_t encoder_cw[ENCODERS] = { 8, 5 }; -static keypos_t encoder_ccw[ENCODERS] = { 7, 5 }; +static keypos_t encoder_cw[ENCODERS] = {{ 8, 5 }}; +static keypos_t encoder_ccw[ENCODERS] = {{ 7, 5 }}; void encoder_action_unregister(void) { for (int index = 0; index < ENCODERS; ++index) { From 4fbaac918f954a0f20548fa3ad815ccab6cebcae Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Thu, 4 Nov 2021 17:31:59 -0400 Subject: [PATCH 043/155] Adjusted trackball precision. --- keyboards/solartempest/sofle/config.h | 2 +- .../solartempest/sofle/keymaps/via/keymap.c | 10 +- .../sofle/solartempest_sofle_via.hex | 2249 +++++++++-------- 3 files changed, 1159 insertions(+), 1102 deletions(-) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index a62b250b40a1..9abf1e2a6824 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -76,7 +76,7 @@ //#define SPLIT_LAYER_STATE_ENABLE //#define SPLIT_LED_STATE_ENABLE //#define SPLIT_MODS_ENABLE - #define OLED_LOGO //Enable to print custom logo on slave side, disable to save space. + #define OLED_LOGO //Enable to print snakey custom logo on slave side, disable to save space. #endif // Combo settings diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index 862f76185eba..2b10e5887ebf 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -24,8 +24,8 @@ //Note that the keyboard animations below take a large amount of space! //#include "bongocat.c" //OLED code for Bongocat, original code by foureight84. Disable RGBLIGHT to make enough space. //#include "luna.c" //OLED code for Luna, original code by Hellsingcoder and adapted by Jackasaur. - //#include "snakey.c" //OLED code for Snakey, customized from Luna. - #include "snakey_minimal.c" //OLED code for Snakey, without WPM/related animations to save space. + //#include "snakey.c" //OLED code for Snakey, customized from Luna. If not used, do not use OLED_LOGO in config.h. + #include "snakey_minimal.c" //OLED code for Snakey, without WPM/related animations to save space. If not used, do not use OLED_LOGO in config.h. #endif #ifdef POINTING_DEVICE_ENABLE @@ -279,7 +279,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case PM_PRECISION: if (record->event.pressed) { if (trackball_get_precision()==1){ //Enable toggling for trackball precision - trackball_set_precision(1.8); + trackball_set_precision(1.75); } else{ trackball_set_precision(1); } @@ -368,8 +368,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 layer_move(0); //start on layer 0 to get the lighting activated in all cases. Remove to save a very small amount of space. #ifdef POINTING_DEVICE_ENABLE - trackball_set_precision(1.8); - trackball_set_scrolling(true); + trackball_set_precision(1.75); //Start trackball with less precision + trackball_set_scrolling(true); //Start trackball in scrolling mode run_trackball_cleanup(); #endif } diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index ff3709b3aa6b..d0f6e145a720 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,7 +1,7 @@ -:100000000C9449060C9490060C9490060C9476314E +:100000000C9449060C9490060C9490060C940732BC :100010000C9490060C9490060C9490060C94900608 :100020000C9490060C9490060C943C1A0C94F819BD -:100030000C9438260C9490060C9490060C94900620 +:100030000C94D5260C9490060C9490060C94900683 :100040000C9490060C9490060C9490060C949006D8 :100050000C9490060C94131B0C9490060C94900630 :100060000C9490060C9490060C9490060C949006B8 @@ -200,30 +200,30 @@ :100C7000006F0066006C006500000010034B00650B :100C8000007900680069007600650000000403092F :100C9000040011241FBECFEFDAE0DEBFCDBF04B6E3 -:100CA00003FE27C08091700690917106A091720694 -:100CB000B09173068730904BA740B04BD1F410929F -:100CC000700610927106109272061092730614BE8E +:100CA00003FE27C080916F0690917006A091710697 +:100CB000B09172068730904BA740B04BD1F41092A0 +:100CC0006F0610927006109271061092720614BE92 :100CD00084B7877F84BF0FB6F894A8958091600091 :100CE000886180936000109260000FBEE0E0F8E33E -:100CF000099512E0A0E0B1E0EAEEF9E602C0059045 +:100CF000099512E0A0E0B1E0E6E7FDE602C005904C :100D00000D92A632B107D9F726E0A6E2B2E001C003 -:100D10001D92A037B207E1F70E945F260C94BC3405 -:100D20000C940000CF93DF9340916E0650916F06B4 -:100D30004E5654409A01205A3F4F21303240C0F065 -:100D400020E032E0241B350B60916C0470916D043F +:100D10001D92AF36B207E1F70E94FC260C94823692 +:100D20000C940000CF93DF9340916D0650916E06B6 +:100D30004D5654409A01205A3F4F21303240C0F066 +:100D400020E032E0241B350B60916B0470916C0441 :100D5000FC01CA01240F351FC1E0D0E082179307C0 -:100D600050F070936D0460936C04DF91CF910895FF -:100D700020E630E0E9CF4491DC01A259BB4F5C9101 +:100D600050F070936C0460936B04DF91CF91089501 +:100D700020E630E0E9CF4491DC01A359BB4F5C9100 :100D8000451781F04C93AC01A5E056954795AA957F :100D9000E1F7DE0102C0AA0FBB1F4A95E2F7AD01E1 :100DA0006A2B752B01963196D9CFE8EDF0E0808162 :100DB0008E7F80831092E2001092DA001092E100A0 :100DC000A0EEB0E08C9181608C9380818F778083DE :100DD00019BCA7EDB0E08C918E7F8C9380818F7EC3 -:100DE000808310924E0408952091E4003091E50034 +:100DE000808310924D0408952091E4003091E50035 :100DF00095E6A9012091EC00822F817020FF06C0AA :100E00008091E80080FF06C080E008952091E8000E -:100E100022FD1AC080915C04882389F0853089F016 +:100E100022FD1AC080915B04882389F0853089F017 :100E20008091EB0085FD0FC02091E4003091E5003A :100E300042175307F9F29150E1F684E0089582E0F9 :100E4000089583E0089581E00895EF92FF920F9353 @@ -232,9 +232,9 @@ :100E70008093E8000E94F406882399F3C82F08C0E5 :100E8000F70181917F018093F1000150110949F729 :100E90008C2FCF911F910F91FF90EF90089580912B -:100EA0005E0487FF13C08091E80082FF06C0809136 -:100EB000E8008B778093E80004C080915C04811186 -:100EC000F2CF089580915C048823D9F38091E800E3 +:100EA0005D0487FF13C08091E80082FF06C0809137 +:100EB000E8008B778093E80004C080915B04811187 +:100EC000F2CF089580915B048823D9F38091E800E4 :100ED00080FFF8CF8091E8008E77ECCF982F909329 :100EE000E900242F762F50E0891731F07091EC0043 :100EF0002091ED005091F00021FD07C09F5F9730D9 @@ -244,51 +244,51 @@ :100F30005093F0002091EE0027FDE0CF80E008956F :100F4000CF92DF92EF92FF920F931F93CF93DF9395 :100F5000C8EDD0E088818F7E8883E7EDF0E0808166 -:100F60008160808384E082BF81E080934E04888129 +:100F60008160808384E082BF81E080934D0488812A :100F70008E7F888302EE10E0F80110821092DA0072 :100F800081EEC82ED12CF601108288818F7788835C :100F900088818068888388818F7D888319BC1092BE -:100FA0005C0410925D0410925B0410925A0490EE5F +:100FA0005B0410925C0410925A041092590490EE63 :100FB000E92EF12CF70180818B7F8083888181600D :100FC000888342E060E080E00E946E07F601808145 :100FD0008E7F8083F801808181608083808188603A :100FE0008083F70180818E7F808388818061888300 :100FF000DF91CF911F910F91FF90EF90DF90CF90F5 -:101000000895FC0180916404909165048617970708 +:101000000895FC018091630490916404861797070A :10101000A0F06115710529F49091E8009E779093F6 :10102000E80090E06115710551F4911108C08091BC :10103000E80082FF34C080E00895BC01F2CF8091C7 -:101040005C048823C1F18530C1F18091E80083FD03 +:101040005B048823C1F18530C1F18091E80083FD04 :1010500030C08091E80082FDEACF8091E80080FFF7 :10106000E1CF8091F3002091F200382F61157105D6 :1010700019F02830310558F091E02830310509F099 :1010800090E02091E8002E772093E800CBCF81916B :101090008093F100615071092F5F3F4FE7CF80913E -:1010A0005C04882341F0853041F08091E80083FFA3 +:1010A0005B04882341F0853041F08091E80083FFA4 :1010B000BECF81E0089582E0089583E00895809195 -:1010C000510408952FB7F894609147047091480433 -:1010D0008091490490914A042FBF089520914404BF -:1010E000309145042817390771F090934504809397 -:1010F0004404E0914204F0914304309721F00084CD -:10110000F185E02D09940895209140043091410427 -:101110002817390771F09093410480934004E091BF -:101120004204F0914304309721F00680F781E02DCE -:10113000099408952091330436E0839FC00111245F +:1010C000500408952FB7F894609146047091470436 +:1010D00080914804909149042FBF089520914304C2 +:1010E000309144042817390771F090934404809399 +:1010F0004304E0914104F0914204309721F00084D0 +:10110000F185E02D0994089520913F043091400429 +:101110002817390771F09093400480933F04E091C1 +:101120004104F0914204309721F00680F781E02DD0 +:10113000099408952091320436E0839FC001112460 :10114000629F800D911D1124811522E0920714F0F9 -:1011500090E080E082599B4F90936F0680936E06DB +:1011500090E080E083599B4F90936E0680936D06DC :101160000895FC01680F791F8FEF91E32191822789 :1011700028E030E087FF09C0880F89272150310916 :10118000C9F7E617F70791F70895880FF7CFFA0127 -:10119000811101C0FB01099480916704982F9E7F03 -:1011A00061F4817082608093670480916A04813A5F -:1011B00018F080EA80936A0408958831B0F3817052 +:10119000811101C0FB01099480916604982F9E7F04 +:1011A00061F4817082608093660480916904813A61 +:1011B00018F080EA8093690408958831B0F3817053 :1011C0008661F1CFAF92BF92DF92EF92FF920F93C1 :1011D0001F93CF93DF93082F162FE901E42FF0E040 :1011E000E55AFA4F611110C0E4915E2F4E2F4983EA :1011F000E8835A83DF91CF911F910F91FF90EF9079 :10120000DF90BF90AF900895E62EF12C4491D42E3C :10121000E42FF0E026E0829FC00111242FEF30E0A0 -:10122000B9010E94F032802F90E0880F991F55E598 +:10122000B9010E948133802F90E0880F991F55E506 :10123000569FD001579FB00D11248A1B9B0B982FEE :10124000990F890F5901AE18BF08AE9ED001AF9E0D :10125000B00DBE9EB00D11245B2F189F800111248C @@ -304,9 +304,9 @@ :1012F00080E0089578940895F894E82FE295EF70CF :10130000F0E031A1282F2F7081E090E001C0880F1C :101310002A95EAF7982F9095932391A392A1892B70 -:1013200082A30C947A099091CC0292FF06C0282FD8 +:1013200082A30C947A099091CF0292FF06C0282FD5 :1013300028712830F9F4877F846093FF06C0282F36 -:1013400028712831F1F4877E84612091CD0220FF3D +:1013400028712831F1F4877E84612091D00220FF3A :1013500006C0382F38713830D9F4877F816021FF7B :1013600006C0282F28712831D1F4877E816194FD31 :10137000877E0895282F24712430F9F68B7F8860AA @@ -319,21 +319,21 @@ :1013E000D30708F0F2C0CF3BD10508F089C0C83A56 :1013F000D10508F0DFC0C53AD10508F0D3C0C4302C :10140000D105F8F4C130D105E1F040C08533910534 -:1014100009F45AC0C997E9F68091CC02837089F02B +:1014100009F45AC0C997E9F68091CF02837089F028 :10142000C0EED0E00EC0833E910599F170F4803E8D -:10143000910501F1823E910561F68091CC0282FD19 +:10143000910501F1823E910561F68091CF0282FD16 :1014400021C0CE01DF91CF910895863E910561F1D3 :10145000873E910571F1843E910509F0BACF8091E4 -:10146000CD0281FFEECF8091CC02C7EED0E084FDAB -:101470000DC0E7CF8091CC0280FDF7C09091CD02E6 +:10146000D00281FFEECF8091CF02C7EED0E084FDA5 +:101470000DC0E7CF8091CF0280FDF7C09091D002E0 :1014800090FFDFCFC3EED0E084FFDBCFD0E0C0E041 -:10149000D8CF8091CC0282FDEBC09091CD0290FD1F -:1014A000BFCF84FFCECFF2CF8091CC0283FDDDCFC2 -:1014B000C8CF8091CC0283FDDEC09091CD0291FF18 -:1014C000F0CFC4EED0E0BDCF8091CC0285FFB9CF84 -:1014D000C9E2D0E0B6CF8091CC0285FFB2CFC5E3A0 -:1014E000D0E0AFCF8091CC0286FFABCFCAE2D0E094 -:1014F000A8CF8091CC0286FFA4CFC1E3D0E0A1CFDA +:10149000D8CF8091CF0282FDEBC09091D00290FD19 +:1014A000BFCF84FFCECFF2CF8091CF0283FDDDCFBF +:1014B000C8CF8091CF0283FDDEC09091D00291FF12 +:1014C000F0CFC4EED0E0BDCF8091CF0285FFB9CF81 +:1014D000C9E2D0E0B6CF8091CF0285FFB2CFC5E39D +:1014E000D0E0AFCF8091CF0286FFABCFCAE2D0E091 +:1014F000A8CF8091CF0286FFA4CFC1E3D0E0A1CFD7 :10150000C11540E2D40760F4C11581E0D80708F0A6 :1015100098CFCE01815E9109079708F492CFB6CF9C :10152000C11590E4D90708F4B1CFDF70D06A89CF34 @@ -358,8 +358,8 @@ :101650008F700E94930934E0D695C7953A95E1F7CB :10166000CF709C2FEC01D069ECCEC9E3D0E0E9CE7D :10167000C2EED0E0E6CEC6EED0E0E3CE0C94620837 -:1016800080914F0490918902892B90918802892B37 -:1016900080932802E0914204F0914304309731F0A6 +:1016800080914E0490918902892B90918802892B38 +:1016900080932802E0914104F0914204309731F0A8 :1016A0000280F381E02D88E292E009940895809110 :1016B000870290915602981301C008958F5F87703A :1016C000FACF27E0929F800D1124982F977086956E @@ -375,14 +375,14 @@ :1017600001968330910561F7089590E080E00E9432 :10177000840890E080E00E946E0810928902109226 :1017800088020C94400B80938A020C94B50B88233A -:1017900041F0809590914F04892380934F040C94DD -:1017A000400B0895882339F090914F04982B909323 -:1017B0004F040C94400B08958823B1F19CEF980FCF +:1017900041F0809590914E04892380934E040C94DF +:1017A000400B0895882339F090914E04982B909324 +:1017B0004E040C94400B08958823B1F19CEF980FD0 :1017C000913A70F4EAE2F2E09191891303C0DF01EB :1017D00011971C9242E0E033F407B1F70C94400BF0 :1017E00090E2980F983088F4877021E030E0A901EA :1017F00002C0440F551F8A95E2F7CA018095909167 -:101800004F04892380934F04E9CF9BE5980F9330D1 +:101800004E04892380934E04E9CF9BE5980F9330D3 :1018100020F490E080E00C948408885A873120F40A :1018200090E080E00C946E0808950F931F93CF937F :10183000C82F882309F469C08CEF8C0F813AB0F56A @@ -394,7 +394,7 @@ :10189000EAE2F2E02191C21303C0DF0111971C922A :1018A0008E179F07B9F70E94400BD6CF80E28C0FAE :1018B000883068F4C77021E030E001C0220FCA957B -:1018C000EAF780914F04822B80934F04DCCFEBE545 +:1018C000EAF780914E04822B80934E04DCCFEBE547 :1018D000EC0FE33050F4F0E0E154FE4F808190E0F3 :1018E000CF911F910F910C948408C85AC73168F4A6 :1018F000EC2FF0E0EE0FFF1FEE53FE4F8081918141 @@ -402,11 +402,11 @@ :101910000895982F92959F7011F0892F94E0282FA9 :101920002695269511F09E5F822F869509F09F5F80 :10193000892F0895CF93DF93CDB7DEB762970FB6A7 -:10194000F894DEBF0FBECDBF96E0EAE1F3E0DE0122 +:10194000F894DEBF0FBECDBF96E0E9E1F3E0DE0123 :10195000179601900D929A95E1F796E0FE01379661 :10196000DE011D9601900D929A95E1F798858823E6 :10197000E9F0962B9E8786E0FE013D96DE011196EA -:1019800001900D928A95E1F786E0FE013196AAE179 +:1019800001900D928A95E1F786E0FE013196A9E17A :10199000B3E001900D928A95E1F762960FB6F89444 :1019A000DEBF0FBECDBFDF91CF9108956095962326 :1019B000E1CFDC01FB0180819181803891054CF001 @@ -420,32 +420,32 @@ :101A3000819591090895681B20E0DFCF0F931F93D4 :101A4000CF93DF9300D000D0CDB7DEB789836A8310 :101A50004B831C8204E610E024E030E0AE014F5FCF -:101A60005F4F60E084E10E944E300F900F900F9026 -:101A70000F90DF91CF911F910F91089580912803CE +:101A60005F4F60E084E10E94DF300F900F900F9095 +:101A70000F90DF91CF911F910F91089580912703CF :101A8000882329F047E669E98BE20C941E0D6091EA -:101A9000590170915A0190E080E00E949D3320E04E -:101AA00030E040E05CE30E94FE3320E030E040E8BC -:101AB0005FE30E949833882321F047EC6BE180E0DC +:101A9000590170915A0190E080E00E94223520E0C7 +:101AA00030E040E05CE30E94153620E030E040E8A2 +:101AB0005FE30E94EE34882321F047EC6BE180E085 :101AC000E4CF41E265EA89EDE0CFCF92DF92EF9279 :101AD000FF920F931F93CF93DF936C017B0164E61A -:101AE00070E088E70E94362FEC0197FD12C010E0ED +:101AE00070E088E70E94C72FEC0197FD12C010E05C :101AF00000E0F601E00FF11F849164E670E00E94BF -:101B0000B02FEC01892B29F40F5F1F4F0E151F0515 -:101B100081F70E94CA30CE01DF91CF911F910F91C2 -:101B2000FF90EF90DF90CF90089580913E049091C8 -:101B30003F04911103C091E089270895882369F03B +:101B00004130EC01892B29F40F5F1F4F0E151F0583 +:101B100081F70E945B31CE01DF91CF911F910F9130 +:101B2000FF90EF90DF90CF90089580913D049091C9 +:101B30003E04911103C091E089270895882369F03C :101B400062E070E08CEE9BE00E94650D892B19F03D -:101B500080913E04089510923E0480913E04EBCFA4 -:101B6000CF93C0913E0480913F048823D1F00E941E -:101B700062086058774C8E4F9F4F60933A04709381 -:101B80003B0480933C0490933D04C11108C062E083 +:101B500080913D04089510923D0480913D04EBCFA7 +:101B6000CF93C0913D0480913E048823D1F00E9420 +:101B700062086058774C8E4F9F4F60933904709382 +:101B80003A0480933B0490933C04C11108C062E086 :101B900070E08AEE9BE00E94650D892B29F0C091D0 -:101BA0003E048C2FCF91089581E080933E04F7CFBF -:101BB00090915C04943029F580934B0470934D040C -:101BC00060934C049093E9008FEF9091E80081506E +:101BA0003D048C2FCF91089581E080933D04F7CFC1 +:101BB00090915B04943029F580934A0470934C040F +:101BC00060934B049093E9008FEF9091E80081506F :101BD00095FD06C095ED9A95F1F700008111F5CFBE :101BE0008091E80085FF0DC050E040E063E070E0C8 -:101BF0008BE494E00E9425078091E8008E77809323 +:101BF0008AE494E00E9425078091E8008E77809324 :101C0000E8000895BC0184E00C94D80DBC0183E089 :101C10000C94D80D9C0184E08093E9009FEF8091A3 :101C2000E800915085FD06C085ED8A95F1F700002A @@ -455,22 +455,22 @@ :101C6000E9008FEF9091E800815095FD06C095ED59 :101C70009A95F1F700008111F5CF8091E80085FF7A :101C800014C050E040E068E070E0CE010E942507FB -:101C90008091E8008E778093E80088E0FE01A2E55D +:101C90008091E8008E778093E80088E0FE01A1E55E :101CA000B4E001900D928A95E1F7DF91CF9108950C :101CB0009F92AF92BF92CF92DF92EF92FF920F93DB -:101CC0001F93CF93DF937C015B016A018091C70270 +:101CC0001F93CF93DF937C015B016A018091CA026D :101CD00001E010E08A3010F40AE010E0C1E0D0E04A :101CE000F894B501C701F6010995982E0E947A096A :101CF000911004C021960C171D076CF4892DDF91FB :101D0000CF911F910F91FF90EF90DF90CF90BF90F8 :101D1000AF909F900895CC9F9001CD9F300D300DD6 :101D2000112490E080E045E34A95F1F70000019628 -:101D300082179307C1F7D4CF80919702811110C009 +:101D300082179307C1F7D4CF80919A02811110C006 :101D40008091D80080618093D8008AE18A95F1F76C -:101D500000C08091D90080FF0AC081E08093970283 -:101D600081E090919702913009F080E0089582E03F -:101D7000809397020E94D50610925C04F1CF0E94D6 -:101D80009C0E882351F0E0914204F0914304309777 +:101D500000C08091D90080FF0AC081E080939A0280 +:101D600081E090919A02913009F080E0089582E03C +:101D700080939A020E94D50610925B04F1CF0E94D4 +:101D80009C0E882351F0E0914104F0914204309779 :101D900021F00190F081E02D099480E008951F93D7 :101DA000CF93DF93182FEB010E94150C8FE99FE072 :101DB0000197F1F700C000002197C1F7812FDF9153 @@ -478,10 +478,10 @@ :101DD0008F929F92AF92BF92CF92DF92EF92FF923B :101DE0000F931F93CF93DF93CDB7DEB7CE5DD109AD :101DF0000FB6F894DEBF0FBECDBF5090700190912A -:101E0000670490FF5DC08090530390905403811449 +:101E0000660490FF5DC0809052039090530381144C :101E1000910409F068C0E0E6F6E09E012F5F3F4FB5 :101E2000BE0161527F4FC901A4914A2F50E0DA01EF -:101E3000AA0FBB1FA40FB51FAB5ABC4FCD90DD90AE +:101E3000AA0FBB1FA40FB51FAC5ABC4FCD90DD90AD :101E4000EC90D901CD92DD92ED929D0131966A1709 :101E50007B0751F720916F0143E0249F800D911D76 :101E60001124539A2BB1277F3BB138605FB7F894A8 @@ -491,87 +491,87 @@ :101EA000CF911F910F91FF90EF90DF90CF90BF9057 :101EB000AF909F908F907F906F905F904F9008951C :101EC000809171012091720133E0839FF001112410 -:101ED000EB5AFC4F821708F096CF118210821282C3 +:101ED000EC5AFC4F821708F096CF118210821282C2 :101EE0008F5F3396F7CF90FF96CFD12CC12C66240D -:101EF0006394712C53E0452E8091520393010C2C76 +:101EF0006394712C53E0452E8091510393010C2C77 :101F000001C0220F0A94EAF7822309F43FC0F601C8 :101F1000EE0FFF1FE80DF91DE590F490E114F104B8 :101F200009F479CF45E050E0B701CE0101960E9457 -:101F3000313309810F3F51F18A81800F9927991F11 +:101F3000033409810F3F51F18A81800F9927991F3E :101F40008B34910514F08AE490E05C01AA0CBB1C70 -:101F50008A0D9B1DDC01AB5ABC4F5D01049D8001C5 -:101F600011240B5A1C4F0A151B0520F0B5E0EB0E8F +:101F50008A0D9B1DDC01AC5ABC4F5D01049D8001C4 +:101F600011240C5A1C4F0A151B0520F0B5E0EB0E8E :101F7000F11CD8CF4D81413A08F040EA98016C81BC :101F80008B810E94E2080D5F1F4FEDCFEFEFCE1A5D :101F9000DE0AF8E0CF16D10409F0AECF3CCFFC0149 :101FA0004191CF01E8E03BB9000000C047FF2BB9E9 :101FB000440F000000C000C000C02BB900C0EA956B -:101FC00091F75BCFE7E6F4E080818E7F8083EFE4DA +:101FC00091F75BCFE6E6F4E080818E7F8083EEE4DC :101FD000F3E08281816082832FEF80E792E02150DD :101FE00080409040E1F700C000000C94E40EEAE26B :101FF000F2E086E0DF011D928A95E9F70C94B50BBB :102000001F93CF93DF93CDB7DEB7AA970FB6F8949F -:10201000DEBF0FBECDBF8EE594E02091F100DC0164 -:102020002D93CD01B4E086369B07B9F780915F040C +:10201000DEBF0FBECDBF8DE594E02091F100DC0165 +:102020002D93CD01B4E085369B07B9F780915E040E :10203000833009F471C0B8F4813009F448C08230AB -:1020400009F4B4C08091E80083FF3CC180915E0434 -:1020500090915F049A3008F035C1E92FF0E0E25426 -:10206000FB4C0C9424338A3009F48FC08B3009F474 -:1020700070C0893039F780915E04813219F7809100 -:10208000620490916304009711F00297D9F6809151 +:1020400009F4B4C08091E80083FF3CC180915D0435 +:1020500090915E049A3008F035C1E92FF0E0EC571A +:10206000F94C0C94D4338A3009F48FC08B3009F4C6 +:1020700070C0893039F780915D04813219F7809101 +:10208000610490916204009711F00297D9F6809153 :10209000E800877F8093E8008091E80082FF37C0E6 :1020A0009091F3008091F200029729F48091F10061 -:1020B0008B7F813021F48091F100809351048091D5 +:1020B0008B7F813021F48091F100809350048091D6 :1020C000E8008B778093E8000E944F07BBCF809198 -:1020D0005E04813A09F0B6CF8091E800877F809353 -:1020E000E8008091620490916304892B61F468E0B8 -:1020F00082E594E070E00E9401088091E8008B770F +:1020D0005D04813A09F0B6CF8091E800877F809354 +:1020E000E8008091610490916204892B61F468E0BA +:1020F00081E594E070E00E9401088091E8008B7710 :102100008093E8009FCF60E090E080E0F3CF809183 -:102110005C048111C1CF96CF80915E04813A09F0B1 -:1021200091CF8091620490916304892B09F08ACF4A +:102110005B048111C1CF96CF80915D04813A09F0B3 +:1021200091CF8091610490916204892B09F08ACF4C :102130008091E800877F8093E8008091E80080FF2D :10214000FCCF809174018093F1008091E8008E773C -:10215000B9CF80915E04813209F074CF809162041E -:1021600090916304892B09F06DCF8091E800877FFF -:102170008093E8000E944F0780916004809374016F -:1021800010924F040E94F70F5DCF80915E04813260 +:10215000B9CF80915D04813209F074CF8091610420 +:1021600090916204892B09F06DCF8091E800877F00 +:102170008093E8000E944F0780915F048093740170 +:1021800010924E040E94F70F5DCF80915D04813262 :1021900009F058CF8091E800877F8093E8000E9483 -:1021A0004F0780916104809350044CCF80915E046E +:1021A0004F078091600480934F044CCF80915D0471 :1021B000813A09F047CF8091E800877F8093E8005B -:1021C0008091E80080FFFCCF80915004BCCF803824 -:1021D00099F0823809F076C0809162048F70873060 +:1021C0008091E80080FFFCCF80914F04BCCF803825 +:1021D00099F0823809F076C0809161048F70873061 :1021E00008F070C08093E9008091EB0085FB8827A0 -:1021F00080F91092E90006C080915A0490915B0426 +:1021F00080F91092E90006C08091590490915A0428 :10220000911182609091E800977F9093E80080930D :10221000F1001092F1008091E8008E77B5C188231B -:1022200009F4A2C1823009F04DC08091600481118F -:10223000A6C1809162048F702FEF280F263008F01E +:1022200009F4A2C1823009F04DC080915F04811190 +:10223000A6C1809161048F702FEF280F263008F01F :1022400041C08093E9002091EB0020FF98C19330BA :1022500031F48091EB0080628093EB0090C190910B :10226000EB0090619093EB0021E030E001C0220F81 :102270008A95EAF72093EA001092EA008091EB0039 -:102280008860EACF81111EC0109160041F77809191 +:102280008860EACF81111EC010915F041F77809192 :10229000E3008078812B8093E3008091E800877FC2 :1022A0008093E8000E944F078091E80080FFFCCFF8 :1022B0008091E30080688093E30082E0111183E065 -:1022C00080935C048091E80083FF0AC08091E8005D +:1022C00080935B048091E80083FF0AC08091E8005E :1022D000877F8093E8008091EB0080628093EB0021 :1022E000AA960FB6F894DEBF0FBECDBFDF91CF9197 -:1022F0001F9108958058823028F720916004309112 -:1023000061042C3DE3E03E07A1F583E08A838AE285 +:1022F0001F9108958058823028F720915F04309113 +:1023000060042C3DE3E03E07A1F583E08A838AE286 :1023100089834FB7F894DE01139620E03EE051E246 :10232000E32FF0E050935700E49120FF03C0E295C3 :10233000EF703F5FEF708E2F90E0EA30C0F0C796ED :102340008D939D932F5F243159F74FBF8091E80003 :10235000877F8093E8006AE270E0CE0101960E94D8 :1023600001088091E8008B778093E800ABCFC0969E -:10237000E7CF8091620490916304432F5527433047 +:10237000E7CF8091610490916204432F5527433049 :10238000510509F44AC078F54130510509F47AC085 :102390008BE590E0EEEEFBE04230510509F092CF84 -:1023A0002091E800277F2093E80020916404309179 -:1023B00065048217930708F49C0140E0211531055C +:1023A0002091E800277F2093E8002091630430917A +:1023B00064048217930708F49C0140E0211531055D :1023C00009F065C0411163C08091E80082FDC9CF6A -:1023D00080915C04882329F2853019F28091E8000D +:1023D00080915B04882329F2853019F28091E8000E :1023E00083FFF2CFBECF4132510509F43CC04232E7 :1023F000510509F067CF8330910508F063CFFC01E8 :10240000EE0FFF1FE75EFD4F0190F081E02D8A5E29 @@ -583,75 +583,75 @@ :10246000EBE7FCE0F4CF8330910508F02BCF880F29 :10247000991FFC01E15EFD4F0190F081E02D89E0A4 :1024800090E08ECF82E190E0E9E4FCE089CF80919A -:102490005C04882309F465CF853009F462CF80910C +:102490005B04882309F465CF853009F462CF80910D :1024A000E80083FD5ECF8091E80082FD8DCF8091B2 :1024B000E80080FF83CF9091F3008091F200211516 :1024C000310519F08830910550F041E0089709F086 :1024D00040E08091E8008E778093E8006FCF4491D0 :1024E0004093F1003196215031090196E8CF8038B0 :1024F00009F0E8CE8091E800877F8093E800809122 -:102500005D048093F10087CE8111DCCE10916004D0 +:102500005C048093F10087CE8111DCCE10915F04D2 :10251000123008F0D7CE8091E800877F8093E800E2 -:1025200010935D040E944F07112311F084E005C051 -:102530008091E30087FDFACF81E080935C0442E064 +:1025200010935C040E944F07112311F084E005C052 +:102530008091E30087FDFACF81E080935B0442E065 :1025400061EC81E00E946E0742E261EC84E00E944F :102550006E0742E261EC82E00E946E0742E260ECAC -:1025600083E00E946E07AECE80916004813009F056 -:10257000A9CE81E0933009F080E080935B04109253 +:1025600083E00E946E07AECE80915F04813009F057 +:10257000A9CE81E0933009F080E080935A04109254 :10258000E9008091E800877F8093E8000E944F0770 -:1025900099CE1F93CF93DF93162FC0916E06D091E3 -:1025A0006F068A30D1F420913304CE018E569440C8 -:1025B000622F70E00E94F032281B822F66E00E949A -:1025C0000433C82FC15020F4DF91CF911F9108959B -:1025D00060E080E20E94C912F5CF8D30E9F4CE565A -:1025E000D44020913304622F70E0CE010E94F0327B +:1025900099CE1F93CF93DF93162FC0916D06D091E4 +:1025A0006E068A30D1F420913204CE018D569440CB +:1025B000622F70E00E948133281B822F66E00E9408 +:1025C0009533C82FC15020F4DF91CF911F9108950A +:1025D00060E080E20E94C912F5CF8D30E9F4CD565B +:1025E000D44020913204622F70E0CE010E948133EA :1025F000281B822F9E01280F311D2115324018F013 -:1026000080E0D0E0C0E0C80FD11DC259DB4FD093AD -:102610006F06C0936E06D8CF96E0FE01A4E3B4E047 +:1026000080E0D0E0C0E0C80FD11DC359DB4FD093AC +:102610006E06C0936D06D8CF96E0FE01A3E3B4E04A :1026200001900D929A95E1F7803E90F186E0FE01CF -:1026300011928A95E9F7C0916E06D0916F0611113B -:1026400033C046E050E0BE0184E394E00E943A3398 -:102650009E012E563440892B91F52A5F3F4F4091C1 -:102660003304642F70E0C9010E94F032481B4630E9 +:1026300011928A95E9F7C0916D06D0916E0611113D +:1026400033C046E050E0BE0183E394E00E940C34C6 +:102650009E012D563440892B91F52A5F3F4F4091C2 +:102660003204642F70E0C9010E948133481B463058 :1026700010F4240F311D211572E0370710F030E0FF -:1026800020E022593B4F30936F0620936E069CCF7B +:1026800020E023593B4F30936E0620936D069CCF7C :10269000F6E08F9FB00111246655794F46E050E077 -:1026A000CE010E943133C7CF9E012A5F3F4FFE010A +:1026A000CE010E940334C7CF9E012A5F3F4FFE0137 :1026B0002E173F0731F2808180958193F9CFC901B0 :1026C00045E0969587954A95E1F741E050E0BA01DB -:1026D00002C0660F771F8A95E2F7CB0160916C0408 -:1026E00070916D04862B972BB9016B5F7F4FE5E0EE +:1026D00002C0660F771F8A95E2F7CB0160916B0409 +:1026E00070916C04862B972BB9016B5F7F4FE5E0EF :1026F00076956795EA95E1F702C0440F551F6A95F4 -:10270000E2F7842B952B90936D0480936C04A5CFF6 +:10270000E2F7842B952B90936C0480936B04A5CFF8 :10271000FF920F931F93CF93DF93EC01F62EFC01F2 :1027200001900020E9F78F0101501109C017D1076E :1027300030F0DF91CF911F910F91FF9008956F2D91 :1027400089910E94C912F2CFCF93DF93C3EED2E0FA -:1027500060E0CE010E9464332196C11584E0D80761 +:1027500060E0CE010E9436342196C11584E0D8078E :10276000B9F7DF91CF9108956F927F928F929F92E8 :10277000AF92BF92CF92DF92EF92FF920F931F938F :10278000CF93DF938AEAC82E86E0D82E91ECE92E0B :10279000F12CE701CC58D10936011BC0F501859019 -:1027A0009490692DC8010E946433682DC801019678 -:1027B0000E94643382E0A80EB11C0E5F1F4FC01749 +:1027A0009490692DC8010E943634682DC8010196A5 +:1027B0000E94363482E0A80EB11C0E5F1F4FC01776 :1027C000D10761F78EE0680E711C2E96CE15DF05DD :1027D00029F08E010E5011095301E0CF7E018CE8E3 :1027E000E80EF11C8CE8C80ED11C8DE7E81683E0DA :1027F000F80679F6DF91CF911F910F91FF90EF903E :10280000DF90CF90BF90AF909F908F907F906F9010 :102810000895CF93C82F6FEF811161E283E290E0BA -:102820000E9464336FEFC11160E184E290E00E9486 -:1028300064336FEFC11161E385E290E0CF910C94B6 -:10284000643380E00E94091460E086E290E00E9418 -:1028500064330E94B4130E94A41381E00C94091401 +:102820000E9436346FEFC11161E184E290E00E94B2 +:1028300036346FEFC11163E085E290E0CF910C94E4 +:10284000363480E00E94091460E086E290E00E9445 +:1028500036340E94B4130E94A41381E00C9409142E :102860000F931F93CF93DF93C42FD0E0CC0FDD1FC6 :102870002EE0629FC00DD11D11243CE8839FC00D46 -:10288000D11D1124CE0187960E945033082F10E0ED -:10289000102F0027CE0188960E9450339801282BD4 +:10288000D11D1124CE0187960E942234082F10E01A +:10289000102F0027CE0188960E9422349801282B01 :1028A000C901DF91CF911F910F910895462F853077 :1028B00038F47A3028F4673018F4672F0C94301409 :1028C00090E080E00895CF92DF92FF920F931F93E4 -:1028D000CF93DF936C010091660480918A02082BEC +:1028D000CF93DF936C010091650480918A02082BED :1028E000C7E0D0E010E0FC2EC8010C2E02C0959588 :1028F00087950A94E2F780FD0CC02197A0F7F12C90 :102900008F2DDF91CF911F910F91FF90DF90CF908E @@ -659,59 +659,59 @@ :1029200061F3EECFCF93DF93EC010E946314BE01FD :102930000E945614DF91CF910C94D609FC0180813E :1029400091810E949214292F2F7092959F7092501E -:102950009E3078F4E92FF0E0E853FB4C0C942433DC +:102950009E3078F4E92FF0E0E257F94C0C94D43330 :10296000803F19F020F4883E20F481E00895843FF0 :10297000E1F380E00895883EC0F3813FD1F7F5CFC1 :10298000822F869586958695089583E290E00E9431 -:102990005033813289F484E290E00E9450338031D8 -:1029A00059F485E290E00E94503391E0813309F0C0 +:102990002234813289F484E290E00E942234813131 +:1029A00059F485E290E00E94223491E0833009F0EE :1029B00090E0892F8170089580E0FCCFCF92DF9264 :1029C000EF92FF926B017C010E94CC08B701A60137 -:1029D00088E090E0FF90EF90DF90CF900C947633FA +:1029D00088E090E0FF90EF90DF90CF900C94483427 :1029E000AF92BF92CF92DF92EF92FF920F931F931D :1029F000CF93DF9300D00F92CDB7DEB7082FF62E1E -:102A0000142FE22E8091670480FF4FC0E82FE695D7 -:102A1000AE2FB0E0A65FBD4F9C9190934F038E7F89 +:102A0000142FE22E8091660480FF4FC0E82FE695D8 +:102A1000AE2FB0E0A65FBD4F9C9190934E038E7F8A :102A2000823009F056C0413A08F040EA9E012F5F1B -:102A30003F4F6F2D802F0E94E2088091670480FF36 +:102A30003F4F6F2D802F0E94E2088091660480FF37 :102A400011C02B8139814A8180917101909172016D -:102A500053E0859FF0011124EB5AFC4F891798F140 -:102A60000E94E40E80916804801308C0809169047C -:102A70008F1104C080916A04811729F0809151035D -:102A800082608093510300936804F092690410936C -:102A90006A04EE2051F0609167047091680480919F -:102AA000690490916A040E94DE140F900F900F90B9 +:102A500053E0859FF0011124EC5AFC4F891798F13F +:102A60000E94E40E80916704801308C0809168047E +:102A70008F1104C080916904811729F0809150035F +:102A800082608093500300936704F092680410936F +:102A90006904EE2051F060916604709167048091A2 +:102AA0006804909169040E94DE140F900F900F90BB :102AB000DF91CF911F910F91FF90EF90DF90CF901A :102AC000BF90AF9008954183308322838F5F339608 :102AD000C5CF923039F6E2508E2F8170D82EE69510 :102AE000F0E0E55AF94FA590B490C12CBB24609159 :102AF0007301C61608F0B4CF2C2D30E0A29EC001A1 -:102B0000A39E900DB29E900D112470E00E94F032B1 +:102B0000A39E900DB29E900D112470E00E9481331F :102B1000802FD11016C0860F40917101420F532FA4 -:102B2000511D9A01220F331F240F351F2B5A3C4F82 +:102B2000511D9A01220F331F240F351F2C5A3C4F81 :102B3000412F113A08F040EA6F2D0E94E208C39439 -:102B4000D6CF861BE9CFE7E6F4E0438121E1421BC3 -:102B500008F440E021E0628181810C94F014E7E602 +:102B4000D6CF861BE9CFE6E6F4E0438121E1421BC4 +:102B500008F440E021E0628181810C94F014E6E603 :102B6000F4E0438121E1420F08F44FEF21E062815C -:102B700081810C94F014E7E6F4E0628121E1621BAC -:102B800008F460E021E0438181810C94F014E7E6D1 +:102B700081810C94F014E6E6F4E0628121E1621BAD +:102B800008F460E021E0438181810C94F014E6E6D2 :102B9000F4E0628121E1620F08F46FEF21E04381EC -:102BA00081810C94F014E7E6F4E0818121E0438117 -:102BB000628188500C94F014E7E6F4E0818121E012 -:102BC00043816281885F0C94F01480916B048823A8 -:102BD00019F0815080936B046091670470916804D0 -:102BE0008091690490916A040C94DE1480916B04C6 -:102BF000833018F48F5F80936B0460916704709149 -:102C000068048091690490916A040C94DE14909198 -:102C1000670490FF27C0917081111DC0926090934E -:102C2000670480915103816080935103662351F0C2 -:102C300060916704709168048091690490916A04BE -:102C40000E94DE1420E040916A0460916904809142 -:102C500068040C94F0148C3010F09661E0CF880F6B +:102BA00081810C94F014E6E6F4E0818121E0438118 +:102BB000628188500C94F014E6E6F4E0818121E013 +:102BC00043816281885F0C94F01480916A048823A9 +:102BD00019F0815080936A046091660470916704D3 +:102BE00080916804909169040C94DE1480916A04C9 +:102BF000833018F48F5F80936A046091660470914B +:102C0000670480916804909169040C94DE1490919B +:102C1000660490FF27C0917081111DC0926090934F +:102C2000660480915003816080935003662351F0C5 +:102C300060916604709167048091680490916904C2 +:102C40000E94DE1420E04091690460916804809144 +:102C500067040C94F0148C3010F09661E0CF880F6C :102C6000982BDDCF089521E030E0A90102C0440F88 -:102C7000551F8A95E2F7CA0120915203662391F00D -:102C8000822B809352038091510380618093510382 -:102C900080915003811109C08091670460E086959E +:102C7000551F8A95E2F7CA0120915103662391F00E +:102C8000822B809351038091500380618093500385 +:102C900080914F03811109C08091660460E08695A0 :102CA0000C94071680958223ECCF0895CF93DF9381 :102CB000C82FC17082FBDD27D0F981FB662760F940 :102CC00085E00E94331661E06C2786E00E9433168F @@ -731,104 +731,104 @@ :102DA000813041F18C2FCF911F910F91089580E0D8 :102DB000D8CF833059F18430A9F720E040E56FEF98 :102DC0008AED0E94F01480910001882359F310923B -:102DD00028030DC020E040E56FEF82E30E94F0146D -:102DE00080910001882399F381E0809328030E9459 +:102DD00027030DC020E040E56FEF82E30E94F0146E +:102DE00080910001882399F381E0809327030E945A :102DF0003E0DD8CF20E040E56FEF8CEF0E94F0143D :102E0000D1CF20E040E56FEF80E5F8CF20E040E54E -:102E10006FEF86E7F3CF0E946E16809366040C94E2 -:102E2000B50B80916604982F9670963019F48860DF +:102E10006FEF86E7F3CF0E946E16809365040C94E3 +:102E2000B50B80916504982F9670963019F48860E0 :102E30000C940B17877FFCCF21E030E001C0220FFC -:102E40008A95EAF720958091660482230C940B17EB -:102E500021E030E001C0220F8A95EAF780916604F4 -:102E6000822B0C940B17809167048695815009F48E -:102E70008BE061E00C9407168091670486958F5F64 -:102E80008C3008F081E061E00C94071680916704B3 +:102E40008A95EAF720958091650482230C940B17EC +:102E500021E030E001C0220F8A95EAF780916504F5 +:102E6000822B0C940B17809166048695815009F48F +:102E70008BE061E00C9407168091660486958F5F65 +:102E80008C3008F081E061E00C94071680916604B4 :102E900080FF07C0869582588F77893010F40C9494 -:102EA0003C1761E082E00C940716E7E6F4E083E06B -:102EB000808311828FEF828380EA83831482AFE460 +:102EA0003C1761E082E00C940716E6E6F4E083E06C +:102EB000808311828FEF828380EA83831482AEE461 :102EC000B3E012968C911297836012968C93608176 :102ED0007181828193810C94DE1469EE7EEF90E023 -:102EE00080E00E94823360E082E090E00E946433E0 -:102EF00060E083E090E00E94643310928A0260E018 -:102F000084E090E00E94643360E082E290E00E94FE -:102F1000643360E085E090E00E94643360E086E026 -:102F200090E00E9464336FEF87E090E00E9464338A -:102F300040E050E0BA0188E090E00E94763360E023 -:102F40008DE090E00E94643340E050E0BA0188E1F7 -:102F500090E00E94763360E087E190E00E94643365 -:102F600040E050E0BA018CE190E00E94763370E0DE -:102F700060E080E290E00E94823340E050E0BA01DD -:102F800088E190E00E94763380E00E9409140E945C -:102F9000211440E050E0BA018FE090E00E947633C7 -:102FA00040E050E0BA0183E190E00C9476330F9357 +:102EE00080E00E94543460E082E090E00E9436343A +:102EF00060E083E090E00E94363410928A0260E045 +:102F000084E090E00E94363460E082E290E00E942B +:102F1000363460E085E090E00E94363460E086E080 +:102F200090E00E9436346FEF87E090E00E943634E4 +:102F300040E050E0BA0188E090E00E94483460E050 +:102F40008DE090E00E94363440E050E0BA0188E124 +:102F500090E00E94483460E087E190E00E943634BF +:102F600040E050E0BA018CE190E00E94483470E00B +:102F700060E080E290E00E94543440E050E0BA010A +:102F800088E190E00E94483480E00E9409140E9489 +:102F9000211440E050E0BA018FE090E00E944834F4 +:102FA00040E050E0BA0183E190E00C9448340F9384 :102FB0001F93CF93DF9300D000D0CDB7DEB7409101 -:102FC000BB025091BC026091BD027091BE022FB74E -:102FD000F8948091470490914804A0914904B091DD -:102FE0004A042FBF841B950BA60BB70B84369105A3 +:102FC000BE025091BF026091C0027091C1022FB742 +:102FD000F8948091460490914704A0914804B091E0 +:102FE00049042FBF841B950BA60BB70B84369105A4 :102FF000A105B10588F10E949C0E882379F10E94F9 :1030000062086E5F7F4F8F4F9F4F69837A838B83F8 -:103010009C8380912C0190912D018B559D4F409167 +:103010009C8380912C0190912D0188559D4F40916A :103020002B0150E04530510510F044E050E0BE0166 -:103030006F5F7F4F0E94473384E090E00E943C32F4 -:10304000892BD9F40E9462086093BB027093BC0282 -:103050008093BD029093BE0281E010C00E9462087E -:103060000091C8021091C9022091CA023091CB028E +:103030006F5F7F4F0E94193484E090E00E94CD3290 +:10304000892BD9F40E9462086093BE027093BF027C +:103050008093C0029093C10281E010C00E94620878 +:103060000091CB021091CC022091CD023091CE0282 :10307000600F711F821F931FC4CF80E00F900F90CD :103080000F900F90DF91CF911F910F9108958F9224 :103090009F92AF92BF92CF92DF92EF92FF920F93E7 :1030A0001F93CF93DF93EB0188809980AA80BB8028 -:1030B0009FB7F894C0904704D0904804E09049042A -:1030C000F0904A049FBFC818D908EA08FB0894E6A4 +:1030B0009FB7F894C0904604D0904704E09048042D +:1030C000F09049049FBFC818D908EA08FB0894E6A5 :1030D000C916D104E104F10410F4442311F1E82EDF :1030E000082E000CFF089AE08902F0011124EF5F1E -:1030F000FE4F838194818B559D4F428150E0041790 -:10310000150708F4A801B9010E944733C7010E94BE -:103110003C32892BA1F40E946208688379838A83F8 +:1030F000FE4F8381948188559D4F428150E0041793 +:10310000150708F4A801B9010E941934C7010E94EB +:10311000CD32892BA1F40E946208688379838A8367 :103120009B8381E0DF91CF911F910F91FF90EF90F2 :10313000DF90CF90BF90AF909F908F90089580E0E8 :10314000F1CF0F931F93CF93DF930F92CDB7DEB7DD -:1031500080913E0489832091BA0290E041E02817D3 +:1031500080913D0489832091BD0290E041E02817D1 :10316000190609F440E001E010E09E012F5F3F4F97 -:1031700063EC72E086E00E9447180F90DF91CF91D8 +:1031700066EC72E086E00E9447180F90DF91CF91D5 :103180001F910F9108950F931F93CF93DF93CDB7A6 :10319000DEB729970FB6F894DEBF0FBECDBF85E02E -:1031A000E7E6F4E0DE01119601900D928A95E1F7D1 -:1031B00080914F0390915003A0915103B09152031D +:1031A000E6E6F4E0DE01119601900D928A95E1F7D2 +:1031B00080914E0390914F03A0915003B091510321 :1031C0008E839F83A887B98741E08885811101C0DC -:1031D00040E009E010E09E012F5F3F4F6FEB72E08F -:1031E00085E00E94471881111092510329960FB66D +:1031D00040E009E010E09E012F5F3F4F62EC72E09B +:1031E00085E00E94471881111092500329960FB66E :1031F000F894DEBF0FBECDBFDF91CF911F910F912D :1032000008956F927F928F929F92AF92BF92CF92CA :10321000DF92EF92FF920F931F93CF93DF930F9262 :10322000CDB7DEB7862E5A016901682E880F770860 -:10323000C3010E943C32892B09F088C08AE0869D38 +:10323000C3010E94CD32892B09F088C08AE0869DA7 :10324000F001879DF00D1124EF5FFE4F458150E0A6 :103250004115510511F041E050E08AE0869DF001F2 -:10326000879DF00D1124EF5FFE4F668177816B55CE -:103270007D4FCE0101960E944733F5014081518177 -:10328000628173812FB7F89480914704909148042C -:10329000A0914904B0914A042FBF841B950BA60B43 +:10326000879DF00D1124EF5FFE4F668177816855D1 +:103270007D4FCE0101960E941934F50140815181A4 +:10328000628173812FB7F89480914604909147042E +:10329000A0914804B09149042FBF841B950BA60B45 :1032A000B70B84369105A105B10540F4B701C801FB :1032B0000E94B1089981891709F44FC0082C000CAD -:1032C0009908C4010E943C32892B91F0B12C8B2DBE +:1032C0009908C4010E94CD32892B91F0B12C8B2D2D :1032D0000F90DF91CF911F910F91FF90EF90DF90B2 :1032E000CF90BF90AF909F908F907F906F900895F8 :1032F0008AE0889DF001899DF00D1124EF5FFE4F5B :10330000458150E0E416F50608F4A7018AE0889D9F :10331000F001899DF00D1124EF5FFE4F66817781EA -:103320006B557D4FC6010E944733B701C8010E940B +:1033200068557D4FC6010E941934B701C8010E943B :10333000B10899818913CACF0E946208F5016083A0 :10334000718382839383BB24B394C1CFB12CA70133 -:10335000B801C6010E944733BACFBB24B394F7CF5C +:10335000B801C6010E941934BACFBB24B394F7CF89 :10336000CF92DF92EF92FF920F931F93CF93DF9351 :1033700000D000D00F92CDB7DEB76B0185E0E82E0C -:10338000F12C06EA12E09E012F5F3F4F4DE952E01B +:10338000F12C09EA12E09E012F5F3F4F40EA52E024 :1033900061E080E00E940119882349F095E0FE0178 -:1033A0003196A8E9B2E001900D929A95E1F795E087 -:1033B000E8E9F2E0D60101900D929A95E1F70F90BD +:1033A0003196ABE9B2E001900D929A95E1F795E084 +:1033B000EBE9F2E0D60101900D929A95E1F70F90BA :1033C0000F900F900F900F90DF91CF911F910F9161 :1033D000FF90EF90DF90CF90089590E080E00E9402 -:1033E0005E33893E9E4F11F40C94C51480E008951D +:1033E0003034893E9E4F11F40C94C51480E008954A :1033F0001F920F920FB60F9211242F933F934F936A :103400005F936F937F938F939F93AF93BF93CF936C :10341000DF93EF93FF93D091E900DF708091EC0090 @@ -844,872 +844,929 @@ :1034B0008093E1008091DA0080FF24C08091D800E1 :1034C00080FF20C08091DA008E7F8093DA008091A7 :1034D000D90080FF9BC080E189BD82E189BD09B42C -:1034E00000FEFDCF81E080935C0480914E04811149 +:1034E00000FEFDCF81E080935B0480914D0481114B :1034F00009C00E94D5060E94A0078091E200846066 :103500008093E2008091E10080FF17C08091E2008B :1035100080FF13C08091E2008E7F8093E200809153 :10352000E20080618093E2008091D8008062809305 -:10353000D80019BC85E080935C048091E10084FF91 +:10353000D80019BC85E080935B048091E10084FF92 :1035400029C08091E20084FF25C080E189BD82E12D :1035500089BD89B5982F917080FFFBCF8091D800ED :103560008F7D8093D8008091E1008F7E8093E10071 :103570008091E2008F7E8093E2008091E200816082 -:103580008093E20080915D04882309F445C084E0C3 -:1035900080935C048091E10083FF27C08091E2006A +:103580008093E20080915C04882309F445C084E0C4 +:1035900080935B048091E10083FF27C08091E2006B :1035A00083FF23C08091E100877F8093E10082E068 -:1035B00080935C0410925D048091E1008E7F809383 +:1035B00080935B0410925C048091E1008E7F809385 :1035C000E1008091E2008E7F8093E2008091E20032 :1035D00080618093E20042E060E080E00E946E073C :1035E0008091F00088608093F000FF91EF91BF918F :1035F000AF919F918F917F916F915F914F913F918B :103600002F910F900FBE0F901F90189519BC10921C -:103610005C0410924E0476CF8091E30087FD93E026 -:1036200090935C04B7CF78941F921FB61F92112419 -:103630008F939F93AF93BF938091470490914804D9 -:10364000A0914904B0914A040196A11DB11D809337 -:10365000470490934804A0934904B0934A04BF914F +:103610005B0410924D0476CF8091E30087FD93E028 +:1036200090935B04B7CF78941F921FB61F9211241A +:103630008F939F93AF93BF938091460490914704DB +:10364000A0914804B09149040196A11DB11D809339 +:10365000460490934704A0934804B0934904BF9153 :10366000AF919F918F911F901FBE1F9018959C0145 -:103670004FB7F8948091470490914804A091490471 -:10368000B0914A044FBF821B930B08952FB7F89453 -:103690008091470490914804A0914904B0914A0454 -:1036A0002FBF08959F92AF92BF92CF92DF92EF9279 -:1036B000FF920F931F93CF93DF93CDB7DEB72F9772 -:1036C0000FB6F894DEBF0FBECDBF8E010F5F1F4F48 -:1036D0008AE0D8011D928A95E9F78EE4C82E81E030 -:1036E000D82EF12CE12CAA24A394B12CF6018191BF -:1036F0006F018F3F09F44AC0F894E82FE295EF700C -:10370000F0E021A18F70A50102C0440F551F8A95DA -:10371000E2F7CA01922F982B91A392A18095892359 -:1037200082A30E947A0900C0E7E4F1E030E020E0E3 -:10373000912C41914F3F09F47DC0A42FA295AF7009 -:10374000B0E090968C9190E04F7002C0959587956F -:103750004A95E2F780FD6EC08A2D022E01C0880FC7 -:103760000A94EAF7982A2F5F3F4F2730310509F76F -:10377000F601319780818F3F11F00E947C0950EA59 -:103780005A95F1F7F801EE0DFF1D90828FEFE81AC0 -:10379000F80A95E0E916F10409F0A8CF4AE050E0F4 -:1037A000B8018EEC92E00E943A337C01892B41F003 -:1037B0008AE0F801AEECB2E001900D928A95E1F753 -:1037C0001091D902E114F104B9F181E080938D02E6 -:1037D0000E94461B90938C0280938B0280918B02F7 -:1037E00090918C020E94371B069770F0AEECB2E00D -:1037F000E12FF0E0EB5BFC4F8D91819322E0A33D44 -:10380000B207D1F710928D0281E090E0EF28C1F06D -:103810002F960FB6F894DEBF0FBECDBFDF91CF91CC -:103820001F910F91FF90EF90DF90CF90BF90AF90DE -:103830009F90089580E096CF80918D028111CECF28 -:103840000E949C0EB82EE091D9028E01055F1F4F99 -:10385000882309F495C085E0D8011D928A95E9F77F -:10386000F0E09F012B5B3C4F79018091C702AE01D4 -:10387000405F5F4F6A018A3008F05AC040EB59E15F -:10388000B801C7010E94580E882309F468C042EEAF -:1038900055E2B801C7010E94580E882309F45FC0A1 -:1038A00047ED57E1B801C7010E94580E882309F47B -:1038B00056C043EC58E1B801C7010E94580E882356 -:1038C00009F44DC041EA58E1B801C7010E94580E01 -:1038D000882309F444C01092C702E091D802F0E0B6 -:1038E000AF014B5B5C4FD80110E0FA019191AF0141 -:1038F0008D91981731F09F0121503109F901808392 -:103900001B2DAC15BD0589F780919202882371F0BB -:1039100080919002909191020E94371B893E9340C2 -:1039200028F082EE0E94DC0B10929202812F70CF61 -:1039300080918E0290918F020E94371B843F9140AC -:1039400008F09CCFE091D802F0E0EB5BFC4FD8018F -:1039500011921D92AC15BD05D9F71B2DD5CF8091C5 -:10396000C7028F3F31F08F5F8093C7028A3008F41F -:10397000B4CF0E94461B90938F0280938E02E2CFB9 -:10398000F0E0EB5BFC4FF89485E0A6EAB2E0019032 -:103990000D928A95E1F765E070E086EA92E00E9478 -:1039A000B1088093A5020E947A09F894E091E1029F -:1039B000F0E0E252FD4F80818B878093AC0261E0A2 -:1039C00070E0C8010E94B1088093AB020E947A099E -:1039D000F894C090AD02D090AE02E090AF02F090AB -:1039E000B0028091930290919402A0919502B091BF -:1039F0009602C816D906EA06FB06D1F0C0929302D9 -:103A0000D0929402E0929502F09296020E949C0E4F -:103A100081110EC00E946208C61AD70AE80AF90A84 -:103A2000C092C802D092C902E092CA02F092CB02C0 -:103A30000E947A09F8948091B802882321F184FFCA -:103A400004C09091B9029093520380FF0DC0809101 -:103A5000B10280FF25C09091670491609093670444 -:103A600060E086950E9407168091B80281FF09C028 -:103A700020E04091B4026091B3028091B2020E94B2 -:103A8000F0141092B8020E947A09F8948091BA0258 -:103A9000882349F00E94B00D0E947A0980E0B8CED8 -:103AA0000E94E20FE1CF0E94950DF6CF5F926F92D8 -:103AB0007F928F929F92AF92BF92CF92DF92EF92BE -:103AC000FF920F931F93CF93DF9300D000D00F92FC -:103AD000CDB7DEB76C01FC0183819481892B31F075 -:103AE0008081918189238F3F09F05EC50F900F90EF -:103AF0000F900F900F90DF91CF911F910F91FF903A -:103B0000EF90DF90CF90BF90AF909F908F907F907D -:103B10006F905F9008950E946314182F682F898119 -:103B20009A810E94890B69817A81812F0E945614A3 -:103B30008C01F6018281882309F42BC5C8018251CA -:103B40009F45409708F0EEC48FEF93E00E945033FA -:103B5000025193EEA92E92E0B92E8111C7CF011127 -:103B60003AC01C821B82662463948AE0582E850129 -:103B70000F5F1F4FC5010E94503389831A8288232B -:103B800009F4B4CF9FEF980F9330A0F58A83698230 -:103B900032E0A30EB11CC8010E9450338B838823EE -:103BA00009F4A4CF8E010F5F1F4FF801208122235B -:103BB000F1F2213009F058C0918182819130E1F415 -:103BC0000E5F1F4F6AE070E0893311F460E570E02A -:103BD0000E94CF0E17C0A114F4E0BF0609F486CFEF -:103BE000C5010E945033811101C001502FEFA21A6C -:103BF000B20AB5CF5801D6CF923039F40E5F1F4FBD -:103C00000E94150C0F5F1F4FD0CF933029F40E5F29 -:103C10001F4F0E94DC0BF6CF943019F00F5F1F4F3F -:103C2000F1CF0E5F1F4F30E020E0B8016F5F7F4F94 -:103C3000F80141818053990B8A30910550F0215051 -:103C4000310900F38FE99FE00197F1F700C0000010 -:103C5000F6CF529EF001539EF00D11249C012E0FC1 -:103C60003F1F842F8B01E1CFE22FF0E0E75FFD4F94 -:103C70007490822F86958695869590E0FC01E7509A -:103C8000FE4FE4902770F12C022E02C0F594E794C9 -:103C90000A94E2F7E1E0EE22FF24FC01E751FE4F37 -:103CA000C490D12C022E02C0D594C7940A94E2F796 -:103CB000F1E0CF22DD24FC01E752FE4F8490912CED -:103CC00002C0959487942A95E2F721E082229924F4 -:103CD000E114F10419F081EE0E94150CC114D10415 -:103CE00019F086EE0E94150C39E36AE070E0731259 -:103CF00002C060E570E0872D0E94CF0ECD2819F03C -:103D000086EE0E94DC0BEF2819F081EE0E94DC0B9E -:103D1000892809F477CF6AE070E08CE259CF81E01E -:103D20000E94281703C081E00E941C170F900F907B -:103D30000F900F900F90DF91CF911F910F91FF90F7 -:103D4000EF90DF90CF90BF90AF909F908F907F903B -:103D50006F905F900C94111782E0E2CF043F110541 -:103D600009F455C108F057C1053E110509F4DDC03D -:103D7000F601928191113CC280914F0482720A3CFB -:103D8000FCE51F0709F414C208F06AC1053C3CE5D4 -:103D9000130709F4F9C108F04EC1033C5CE51507AF -:103DA00009F4D3C108F0EBC1023C1C4509F47DC104 -:103DB000F60100811181992309F434C2C8010E94DF -:103DC0006314F82E682FC8010E94890BB8018F2D4B -:103DD0000E9456140E94D609182FB82EF60122818F -:103DE0004581342F32953F70892F82958F70E82E50 -:103DF000F12C8C3008F04EC2F701EA52FB4C0C94C7 -:103E000024330338FFE51F0709F481C018F5013892 -:103E10003FE5130709F44AC008F065C000385FE5C4 -:103E2000150709F0A5CF882309F459C080919202A3 -:103E3000811106C081E08093920282EE0E94150CEF -:103E40000E94461B90939102809390028BE20E9405 -:103E5000150C8ECF05389FE5190709F4BEC008F48C -:103E600076C00638FFE51F0709F082CF882309F4E2 -:103E7000CEC06091590170915A0190E080E00E949B -:103E80009D3320E030E040E05CE30E94FE3320E020 -:103E900030E040E85FE30E9498338111B5C086EEC0 -:103EA00090E090935A0180935901A1C08823A1F01A -:103EB00080919202811106C081E08093920282EE8D -:103EC0000E94150C0E94461B9093910280939002D1 -:103ED00081EE0E94150CBACF81EE0E94DC0B8BE2C2 -:103EE0000E94DC0B45CF882309F442CF81EE0E946B -:103EF000150C83EE0E94150C8FE40E94150C8FE4C4 -:103F00000E94DC0B83EE0E94DC0B81EEE9CF88235C -:103F100009F42ECF81EE0E94150C83EE0E94150C41 -:103F200080E50E94150C80E5EBCF8093340210935E -:103F3000330200933202882321F081E08093E4026F -:103F400017CF1092E40214CF80933102F0CF882370 -:103F500079F180913102882349F0809132020E94E8 -:103F6000DC0B80EE0E94150C8AE20CC080913402BA -:103F70008823D1F3809132020E94DC0B80EE0E94F4 -:103F8000150C8CE40F900F900F900F900F90DF9115 -:103F9000CF911F910F91FF90EF90DF90CF90BF9046 -:103FA000AF909F908F907F906F905F900C94150CC6 -:103FB0008AE20E94DC0B8CE40E94DC0B80EE0E9403 -:103FC000DC0B80913102811105C08091340288237D -:103FD00009F48CCD80913202D5CF8823C1F0809135 -:103FE0002803882339F010922803109200010E94C0 -:103FF0003E0DBECE809100018111F7CF81E080930C -:10400000280380930001F3CF80E890E04ACF61E07D -:104010000E949A0CADCE62E0FBCF64E0F9CF88231A -:1040200021F081E08093E302A3CE1092E302A0CEC0 -:104030001092E6029DCE073C2CE5120709F4AEC0B3 -:1040400008F4A7C0083C4CE5140709F4ACC0093CCF -:104050001C4509F0ADCE43EA55E16FEA75E179C040 -:10406000043DECE51E07A8F40E3CFCE51F0708F034 -:104070003DCD0C3C2CE5120709F49FC045EE55E1FF -:1040800066EF75E10D3C1C4508F463C061E081E01A -:1040900046C0053D4CE5140709F428CD08F492C04C -:1040A0000D351D4509F422CD83CE8091670480FF34 -:1040B00031C08E7F809367046091670470916804BB -:1040C0008091690490916A040E94DE1480915103EA -:1040D0008160809351039FEFE0E7F2E09150E04070 -:1040E000F040E1F700C000000F900F900F900F908C -:1040F0000F90DF91CF911F910F91FF90EF90DF9084 -:10410000CF90BF90AF909F908F907F906F905F9077 -:104110000C94E40E81608093670461E086950F90B3 -:104120000F900F900F900F90DF91CF911F910F91F3 -:10413000FF90EF90DF90CF90BF90AF909F908F90C7 -:104140007F906F905F900C94071643E357E16CE308 -:1041500077E10F900F900F900F900F90DF91CF911C -:104160001F910F91FF90EF90DF90CF90BF90AF9095 -:104170009F908F907F906F905F900C94C7084CE356 -:1041800057E163E377E1E5CF43ED55E16CED75E190 -:10419000E0CF4CED55E163ED75E1DBCF4BEB55E145 -:1041A00067EC75E1D6CF47EC55E16BEB75E1D1CF0C -:1041B0004FEA55E163EA75E1CCCF46EF55E165EE94 -:1041C00075E1C7CF0F900F900F900F900F90DF9178 -:1041D000CF911F910F91FF90EF90DF90CF90BF9004 -:1041E000AF909F908F907F906F905F900C94461748 -:1041F0000E3D1C4509F0DCCD0F900F900F900F90F5 -:104200000F90DF91CF911F910F91FF90EF90DF9072 -:10421000CF90BF90AF909F908F907F906F905F9066 -:104220000C946D17C8010E94610BF82ECFCD092F99 -:104230000F70907F11F00295007F812F2223C9F02B -:10424000002369F090E2910F983010F011110BC02B -:1042500080914F04082B00934F040E94400B812F44 -:104260000E94150C17C080918902082B00938902C7 -:10427000F4CF0E94DC0B002369F00095105E18302B -:1042800010F0B11027C080914F04082300934F0411 -:104290000E94400B98E0E91AF108E4E0EE16F10400 -:1042A00008F024CC0E94BF0E0F900F900F900F903B -:1042B0000F90DF91CF911F910F91FF90EF90DF90C2 -:1042C000CF90BF90AF909F908F907F906F905F90B6 -:1042D0000C94561680918902082300938902D8CF46 -:1042E000892F8F70907F903211F08295807FF1E05E -:1042F000BF120CC0222329F0333060F60E94D20B8B -:10430000C9CF323038F60E94C70BC4CF222341F008 -:104310003323A1F340FFA3CF4F70F6014583EECFC7 -:10432000332389F3193309F0F5C0FFEF27EE33E0AB -:10433000F15020403040E1F700C00000812F0E9482 -:10434000DC0BA8CF892F86958695837061F081302C -:1043500009F0A0CF812F9370211102C090E080E07E -:104360000E946E0897CF812F9370211102C090E0B8 -:1043700080E00E9484088ECF892F8370A1F52111DF -:1043800089CF812F829586958770880F880F412F5E -:104390004F70082E01C0440F0A94EAF7212F2071B4 -:1043A00014FF07C02FE030E001C0220F8A95EAF722 -:1043B0002095969596959370923081F0822F842B5C -:1043C000933030F480918A02913029F0242B82239B -:1043D0000E94C30B5FCF842B822BFACF242B8091BA -:1043E0008A028227F5CF8695222311F0892F8170CA -:1043F000882309F44FCF812F829586958770880F87 -:10440000880F412F4F70082E01C0440F0A94EAF71D -:10441000212F207114FF07C02FE030E001C0220FD0 -:104420008A95EAF72095969596959370923081F04B -:10443000822F842B933030F480916604913029F0E0 -:10444000242B82230E940B1725CF842B822BFACF9B -:10445000242B809166048227F5CF092F0F70222329 -:1044600029F0802F0E942817812F48CF812F0E948A -:10447000C70B802F0E941C170DCF812FE1EF1E1755 -:1044800089F1E11750F0F0EF1F17B9F02223B1F1D5 -:104490003111E5CE892F8F7129C042EF141749F1F0 -:1044A00053EF1513F3CF80E0222361F29F7181E077 -:1044B00001C0880F9A95EAF7C5CF222379F03230F0 -:1044C00008F0E8CE292F2F7181E090E001C0880F1D -:1044D0002A95EAF7909166048927B4CF333008F023 -:1044E000D9CEF0CF892F8F71222321F20E94281775 -:1044F000D1CE892F8F712223C9F3BCCF332379F01A -:10450000893341F48FEF97EEE3E081509040E04033 -:10451000E1F712CF8FE39CE90197F1F70DCF892FD7 -:104520008F71A8CF0031FFE51F0709F4F8CB0131E7 -:104530002FE5120709F410CC0E9462086093EB0289 -:104540007093EC028093ED029093EE02F60182816B -:10455000063F110509F461CD08F053CC043E110566 -:1045600009F45DCD08F0FACB003E110509F457CDF2 -:10457000013E110509F4E8CC0C32110509F0F8CB25 -:10458000882309F455CD81E08093E60210926701FB -:10459000EFCB00313FE5130709F4C5CB01314FE5FF -:1045A0001407A1F682E0C0CB85E0DE0111960190F0 -:1045B0000D928A95E1F7F601228189819A81211174 -:1045C000AACA0E94610B182FAECA1F93CF93DF9324 -:1045D00080915502807FA9F480915202882389F04E -:1045E00080918702D09156026091500270915102E1 -:1045F000A0915302B0915402C62FC72316E0D813DE -:1046000004C0DF91CF911F91089590E0109711F0B1 -:10461000CF3F19F401968770F2CF189F9001199F30 -:10462000300D1124F901E95AFD4F41814713F2CFB2 -:1046300040814613EFCF42814111ECCF4381548139 -:104640004A1B5B0B403A510528F7809155028F7049 -:10465000806180935502F901E45AFD4F80818F708B -:104660008061808380E592E00E94561DDF91CF91AA -:104670001F910C94570BAF92BF92CF92DF92EF92A3 -:10468000FF920F931F93CF93DF93CDB7DEB7619760 -:104690000FB6F894DEBF0FBECDBF8C0185E0F801E8 -:1046A000DE011D9601900D928A95E1F7F801E280F6 -:1046B00080E5A82E82E0B82E6091530270915402DA -:1046C0006115710509F432C1909150024091510277 -:1046D000892F84238F3F09F429C120813181C38030 -:1046E000D480F0905202F601E61BF70BFF2009F48C -:1046F000E8C080915502582F507FE03AF10508F04C -:10470000ABC0511177C0FE2C431321C092131FC0C0 -:10471000E1101DC08F70806180935502C5010E9419 -:10472000561D80915502F80185838F2D61960FB635 -:10473000F894DEBF0FBECDBFDF91CF911F910F91D7 -:10474000FF90EF90DF90CF90BF90AF900895CD286D -:1047500029F0822F83238F3F09F003C180E0F82FD7 -:10476000F170DF2E80FF3CC080918702409156029D -:1047700056E0841315C02D873E878D859E850E9447 -:104780009214292F22952F702230F0F0243018F542 -:104790009F70F1F0F8019581907FD1F4D12C1EC06B -:1047A00090E0589FF001599FF00D1124E95AFD4FF8 -:1047B0006181361306C06081261303C06281E61250 -:1047C0000FC001968770D5CF9F7011F0882331F309 -:1047D000805E883018F3C8010E94561DFD2CA5CFBD -:1047E000EE2009F4A2CF809155028160809355029A -:1047F000F12C9BCF431306C0921304C0F801EE20A6 -:1048000009F479C0C8010E949E14882309F1EE20A2 -:10481000F9F080915502803270F020915002309171 -:10482000510238872F831986DB86CA868C87CE0192 -:1048300007960E94561D86E0F801A0E5B2E00190BF -:104840000D928A95E1F70E94E522FF24F3946DCF43 -:10485000C8010E94561DF9CF51110AC080E592E0AF -:104860000E94561D86E0F50111928A95E9F7C0CFA6 -:1048700043130FC092130DC0E1100BC0F8018583E4 -:10488000C8010E94561D86E0F50111928A95E9F74C -:104890004CCFC8010E949E148823D1F2EE20C1F2B1 -:1048A00080915502803238F22091500230915102AD -:1048B0003A8329831B82DD82CC828E83CE010196CE -:1048C000B8CFE03AF105F8F6FE2CEE2009F24313DA -:1048D0001FC092131DC08091550280FD10C0982FFB -:1048E000907F69F0F8018583903F31F0982F907F99 -:1048F000905F8F70892B8583C8010E94561D86E0CA -:10490000F801A0E5B2E001900D928A95E1F70DCF94 -:10491000C8010E949E1481118ECF80915502816042 -:1049200080935502C8010E94561DFFCEEE2009F467 -:104930008FCFC8010E949E14F82E882309F488CFD7 -:1049400086E0F801A0E5B2E001900D928A95E1F7CA -:1049500080915002909151020E9492140E94E5228F -:10496000E4CE81E08E25FBCE1F93CF93DF93CDB7AE -:10497000DEB767970FB6F894DEBF0FBECDBF4B8B87 -:104980005C8B6D8B7E8B8F8B6111109289021A8AE2 -:10499000198A85E0FE017396DE011D9601900D9245 -:1049A0008A95E1F786E0FE013D96DE0117960190BB -:1049B0000D928A95E1F7CE0107960E943B2388234A -:1049C00089F016E0809187029091560289134BC0BE -:1049D00067960FB6F894DEBF0FBECDBFDF91CF91C3 -:1049E0001F91089586E0FE013796DE011196019031 -:1049F0000D928A95E1F78A859B85892B11F38F812A -:104A0000988589238F3FE9F22091560230E0C90151 -:104A1000019687709927409187024817190681F4FB -:104A200010924F040E94F70F1092560210928702C4 -:104A300086E0E0E5F2E0DF011D928A95E9F7C1CF5B -:104A400096E0929FD001939FB00D1124A95ABD4FBB -:104A5000FE01319601900D929A95E1F780935602EE -:104A60000E94570BAECF819FC0011124895A9D4FE0 -:104A70000E943B23882309F4ABCF8091870290E00A -:104A8000019687709927809387029CCF0F931F937D -:104A9000CF93DF93CDB7DEB7A8970FB6F894DEBFFC -:104AA0000FBECDBF81114DC006E0662359F10CA3A6 -:104AB00011E01DA31EA30E94461B8160782F98A7BA -:104AC0008FA34CA15DA16EA188A50E94B4240F8F75 -:104AD00018A319A20E94461B8160782F9BA38AA36A -:104AE0004F8D58A169A18BA10E94B42481E0A896A2 -:104AF0000FB6F894DEBF0FBECDBFDF91CF911F91EF -:104B00000F9108950A8F13E01B8F81E08C8F0E9414 -:104B1000461B8160782F9E8F8D8F4A8D5B8D6C8DAB -:104B20008E8D0E94B4240D8B1E8B1F8A0E94461B03 -:104B30008160782F998F888F4D895E896F89898DE3 -:104B4000D3CF813099F66623F1F016E0188B198BDC -:104B50008A8B0E94461B8160782F9C8B8B8B4889A7 -:104B600059896A898C890E94B4241B871C871D86F9 -:104B70000E94461B8160782F9F878E874B855C85BE -:104B80006D858F85B1CF06E00E8318E01F8388877F -:104B90000E94461B8160782F9A8789874E815F81AA -:104BA00068858A850E94B42409831A831B820E9427 -:104BB000461B8160782F9D838C8349815A816B814C -:104BC0008D8192CFCF92DF92EF92FF920F931F933E -:104BD000CF93DF930F92CDB7DEB7EE24E394F12CA1 -:104BE0000CEA12E09E012F5F3F4F41EA52E063E082 -:104BF00082E00E940119082F882321F1C090DB0276 -:104C00008C2D90E09C0122523D4F79011981F901D0 -:104C10008081181BD12E80E00AC0DA94F7018081D0 -:104C20008F5F808360E08C2D0E944625802F1D14AD -:104C3000A4F3912F17FD90E0191B11110EC08111E3 -:104C40000E943E0B802F0F90DF91CF911F910F910B -:104C5000FF90EF90DF90CF9008951F5FF701808164 -:104C60008150808361E08C2D0E944625802FE5CF06 -:104C70001F921FB61F9211248F939F93AF93BF93E0 -:104C800080914604811113C080914704909148049B -:104C9000A0914904B0914A044196A11DB11D809391 -:104CA000470490934804A0934904B0934A04BF91E9 -:104CB000AF919F918F911F901FBE1F901895CDB7F8 -:104CC000DEB7E3970FB6F894DEBF0FBECDBF84B753 -:104CD000877F84BF0FB6F894A895809160008861A3 -:104CE00080936000109260000FBE80E890E00FB6E5 -:104CF000F89480936100909361000FBE85B780683F -:104D000085BF85B7806885BF88E799E090932702C3 -:104D1000809326020E94D5060E94A0078091E2009F -:104D200084608093E200789480915C048823A1F0F1 -:104D30001091E9001F709091EC00892F817090FD17 -:104D400080E8182B1092E9008091E80083FD0E9412 -:104D500000101F701093E90082E084BD93E095BDC0 -:104D60009AEF97BD80936E001092C8021092C9020C -:104D70001092CA021092CB020E94C514811102C087 -:104D80000E9421140E949C0E80935801809158012A -:104D9000882309F4C6C010926F0185E280937001E8 -:104DA0000E949C0E81110E942F3180915801811127 -:104DB0002FC0FE01359686E0DF011D928A95E9F746 -:104DC00086E6898387E98A8386EC8B8384E38C83F8 -:104DD00085E38D833497AEE4B1E0CE010B9621914B -:104DE0002D938E179F07D9F787E0E5E7F1E0DE0105 -:104DF000919601900D928A95E1F7FE01B196A7E494 -:104E0000B1E0CE01889621912D938E179F07D9F797 -:104E10008091580195E0811190E09093D90285E04E -:104E2000891B8093D8020EE411E0A3E5EA2EA1E0ED -:104E3000FA2EF80181918F018F3F11F00E947C09B9 -:104E4000E016F106B1F707E411E0FEE4EF2EF1E021 -:104E5000FF2ED8018D918D018F3F11F00E947C09AA -:104E6000E016F106B1F7EEECF2E088ED92E0A5E491 -:104E7000B3E011921D928E179F07D9F70E94ED198A -:104E8000811102C00E946D1782E090E00E945033B1 -:104E900080933A0384E090E00E945033182F82E21E -:104EA00090E00E945033982F812F9093CD028093F1 -:104EB000CC020E94521BEFE7FBEB3197F1F700C0E9 -:104EC00000000E94521B8091450380FF2EC06FEFAF -:104ED0007FEF90E080E00E94823381E08093E000E9 -:104EE00080E28093D8001092C9008FE19EE4019780 -:104EF000F1F700C0000087E090EBDC0180937006C2 -:104F000090937106A0937206B093730688E19CE0BB -:104F10000FB6F894A895809360000FBE9093600040 -:104F2000FFCF85E280936F0139CF83E090E00E944C -:104F300050330E94C30B809166040E946E160E943B -:104F40009C0E811102C00E94323183E080931003D5 -:104F500080E2809333040E94302F6DE070E08CE992 -:104F600092E00E94650D892BE9F58091100363E0C2 -:104F700070E081FD97C289E992E00E94650D892B5E -:104F800089F56DE070E089E892E00E94650D892B5B -:104F900049F50E9462086058774C8E4F9F4F60938E -:104FA0003A0470933B0480933C0490933D04EEE6F6 -:104FB000F4E080E092E0DF019C011D92215030403E -:104FC000E1F7F0936F06E0936E068FEF9FEF9093FB -:104FD0006D0480936C0481E080933F0480933E04D1 -:104FE000109211038091DA02811136C00E94ED19EE -:104FF000811104C00E946D170E94551788E090E04F -:105000000E94583360936704709368048093690426 -:1050100090936A04809151038360809351036E7F63 -:1050200071F40E94551788E090E00E945833609315 -:105030006704709368048093690490936A040E94E3 -:10504000CC088091670480FF04C060E086950E94D0 -:10505000071681E08093DA0280915801811106C021 -:1050600084EF8093660185EF80936501209166014E -:10507000A22FA295AF70B0E091963C9191972F70BE -:1050800081E090E0BC01022E01C0660F0A94EAF7AD -:10509000462F4095432391964C93919792963C913D -:1050A0009297362B92963C93929740916501E42F0C -:1050B000E295EF70F0E031A14F70042E01C0880F2F -:1050C0000A94EAF7982F9095932391A392A1892BA4 -:1050D00082A390968C9190E002C0959587952A9531 -:1050E000E2F7817020A130E002C0359527954A95FE -:1050F000E2F792E020FF90E0892B8093E20280911A -:10510000580111E081278093E102312F381B309341 -:10511000DB020E94302F40E060E080E00E941E0D24 -:1051200089EA92E0909354038093530360E08AE00D -:105130000E94071681E00E940B1786EE90E0909384 -:105140005A0180935901109328030E943E0D8BE56C -:1051500091E09093430480934204E0E46E2E8091AA -:105160005C04FF24F39400E112E1853009F4ECC102 -:105170000E94521BE82E81110E946208EBE3F3E0CB -:10518000A5E4B3E010E000E0B02EDD9081918D1534 -:1051900009F4FEC18D25C12CFF24F394982F9F2183 -:1051A00009F4F1C10E949C0E882399F0C8A6B9A603 -:1051B000DF2081E009F480E08AA70E94461B81601D -:1051C000782F9CA78BA748A559A56AA58CA50E94F6 -:1051D000B424F801E55CFC4F8081F826F0828091D0 -:1051E000E202E82FEE0FEE0F90916601A92FA29533 -:1051F000AF70B0E090962C9130E09F7002C0359572 -:1052000027959A95E2F72170332790916501A92F90 -:10521000A295AF70B0E090964C9150E09F7002C0A4 -:10522000559547959A95E2F7CA018170992740FFF5 -:1052300002C082E090E0822B8E2B8093E2021091DC -:10524000E1028F70E82FF0E0EE50FE4F80819091E8 -:10525000E002890F8093E002F12C84306CF0E12FA2 -:10526000F0E0E252FD4F80818F5F808360E0812F0C -:105270000E944625FF24F3948091E0028D3F6CF458 -:10528000E12FF0E0E252FD4F80818150808361E0A8 -:10529000812F0E944625FF24F3948091E002082E7E -:1052A000000C990B64E070E00E9410338093E002E0 -:1052B000F1100E943E0B80913F04882351F18091B0 -:1052C0001203909113030E94371BC29708F077C115 -:1052D00020916C0430916D042115310509F098C2BC -:1052E00080913E048823A9F00E94620800913A044C -:1052F00010913B0420913C0430913D04601B710BE4 -:10530000820B930B6F3F7F4F8F4F9F4710F40E948C -:10531000950DE11001C0F1100E94B00D809138038D -:105320008A3008F0ADC380913603909137030E9414 -:10533000371B089708F4A4C304E610E025E030E02A -:1053400041E353E064E084E10E947B30892B09F063 -:1053500068C31092380320912803222359F08091CA -:105360003303909134039827892798279093340327 -:105370008093330386E0EAE1F3E0DE019196019049 -:105380000D928A95E1F786E0FE01B196DE01119655 -:1053900001900D928A95E1F786E0FE013196ABE22D -:1053A000B3E001900D928A95E1F78091350387FD76 -:1053B00035C38091290390912A03009709F028C3EF -:1053C00060913103809132030091330310913403D3 -:1053D000222309F4F0C241E00E94F80C2091260338 -:1053E00030912703281B390B309327032093260382 -:1053F00041E0602F812F0E94F80C2091240330910E -:105400002503820F931F909325038093240364E266 -:1054100073E080E393E00E94D90C66E273E08FE2D0 -:1054200093E00E94D90C10922D0310922E0386E077 -:10543000EBE2F3E0DE01119601900D928A95E1F71F -:1054400086E0FE013196AAE1B3E001900D928A95C3 -:10545000E1F730911C0320911D0390911E03809170 -:105460001F03709116036091170340911803509128 -:105470001903F0911B03E0911503FE13D8C23323E7 -:1054800011F07313D4C2222311F02613D0C2882343 -:1054900011F08513CCC2992319F081E04913C8C2D9 -:1054A00080E0C6C286E992E068CD80915C048430D9 -:1054B00009F43AC00E94950D40E060E080E00E944F -:1054C0001E0D80E00E9456168091DD02811109C0F8 -:1054D000F092DD028091670481708093DC020E946B -:1054E000E20F1092460488E190E00FB6F894A89578 -:1054F000809360000FBE6092600083B7817F8460FC -:1055000083BF83B7816083BF7894889583B78E7F8C -:1055100083BF0FB6F894A89580916000886180934E -:105520006000109260000FBE80915B04882361F0E0 -:105530000E94521BE5E4F3E08191811170C4AFE455 -:10554000B3E0AE17BF07C1F780915C04853009F462 -:10555000ACCF10924F040E94F70F0E94BF0E0E9422 -:1055600056161092DD028091DC02882349F080916A -:10557000670481608093670460E086950E94071647 -:105580000E943E0DF5CDC394FF0C27E0C21206CE5B -:105590000F5F1F4F0A30110509F0F6CD8FEF8DA771 -:1055A0008EA71FA60E94461B8160782F99AB88ABFF -:1055B0004DA55EA56FA589A90E94B42410CE0E94B6 -:1055C000461B909313038093120360E080E00E94D7 -:1055D0009A080E94BF0E8093EF020E949C0E8823BF -:1055E00031F14091EB025091EC026091ED0270912B -:1055F000EE022FB7F8948091470490914804A0914F -:105600004904B0914A042FBF841B950BA60BB70B1E -:1056100081339547A105B10540F00E94950D809119 -:105620003F04882309F45CCE53CE0E94B00D0E9443 -:105630009C0E882309F4D3C061E080E00E949A08A0 -:1056400060E08CE791E00E94881362E080E00E94B5 -:105650009A08809166040E94890C823009F499C0EE -:1056600008F08EC0882309F494C0813009F497C0F3 -:1056700065E080E00E949A0860E08AE991E00E947B -:10568000881366E080E00E949A086091EF026695B8 -:1056900061708FE991E00E94881367E080E00E94CA -:1056A0009A086091EF026095617084EA91E00E942F -:1056B000881368E080E00E949A086091EF0262FB24 -:1056C000662760F988EA91E00E9488134091E7021A -:1056D0005091E8026091E9027091EA022FB7F894C4 -:1056E0008091470490914804A0914904B0914A04E4 -:1056F0002FBF841B950BA60BB70B8D329140A105D4 -:10570000B10508F48CCF0E9462086093E7027093A1 -:10571000E8028093E9029093EA028091E602811107 -:1057200004C080916701811142C06DE080E00E9459 -:105730009A0860E08DEA91E00E9488136AE080E0B8 -:105740000E949A0881E0809367018091E50290E0D1 -:105750000196817099278093E50221E030E0281BB3 -:10576000390B40E6429FC001439F900D11242091C8 -:10577000E402222351F1855C9B4F0E9492064FCF99 -:10578000833089F0843009F073CF60E08EE891E0D7 -:1057900003C060E082E891E00E94881369CF60E076 -:1057A00088E891E0F9CF60E084E991E0F5CF6AE024 -:1057B00080E00E949A0860E08DEA91E00E948813E0 -:1057C0006BE080E00E949A08C0CF2091E302222380 -:1057D00019F085589C4FD1CF85549D4FCECF64E0B2 -:1057E00080E00E949A0860E083EB91E00E948813B9 -:1057F00065E080E00E949A0860E089EB91E00E94F9 -:10580000881369E080E00E949A088BEF94E0B5CF9E -:105810008091110361E070E0811162CD082F10E0EA -:105820002B01082E02C0440C551C0A94E2F7A90172 -:1058300044215521452B09F448C09091100390FD57 -:1058400046C08295880F807680936A0198013695CC -:1058500027953695279520936D01815E80936B0186 -:1058600010926E0124E630E047E050E068E671E017 -:1058700088E70E942730892B09F032CDA80165E026 -:10588000440F551F6A95E1F78091100380FD2DC0EC -:1058900042595B4F04E610E020E230E060E488E724 -:1058A0000E944E30892B09F01BCD0E94B00DC20121 -:1058B0008095909540906C0450906D044822592238 -:1058C00050926D0440926C040BCD8F5FA7CF880F70 -:1058D000880F880F80936A0110926D01895F809311 -:1058E0006B0183E080936E01BDCFE0EFF2E080E2D8 -:1058F000DF011D928A95E9F7E6E0F2E0FBABEAAB47 -:1059000002E012E037E0A32E99249394AAA9BBA940 -:105910002D91BBABAAABF80121908F01240E352E3F -:10592000311CC10182599B4F1C01E22FF0E0E05174 -:10593000FD4F30E020E07A2C721AB92C022E01C003 -:10594000BB0C0A94EAF7610190E0D6018D916D01DC -:105950008B21672D691B6770862E062E000C770B36 -:10596000B82F01C0BB0F8A94EAF78B2E7195619511 -:1059700071096770772701C086956A95EAF7882ACA -:105980008081882A80829F5F9830F9F62F5F3F4F91 -:1059900031962830310579F6EAE0F2E02AA93BA9F0 -:1059A000E217F30709F0B2CF04E610E020E230E09E -:1059B00040EF52E073CF45E00E94F80C20912203A3 -:1059C00030912303820F931F90932303809322032C -:1059D00045E0602F812F0E94F80C20912003309128 -:1059E0002103281B390B309321032093200360E20D -:1059F00073E08DE293E00E94D90C62E273E08EE2E4 -:105A000093E00E94D90C1092300310922F030FCD17 -:105A1000019790932A038093290309CD84E190E0B4 -:105A2000F8CF809138038F5F8093380300CD81E0F9 -:105A300080FF0FC0E0914204F0914304309749F099 -:105A400082E080931A030480F581E02D8AE193E0DF -:105A5000099510921C0310921D0310921E031092C0 -:105A60001F0386E0EAE1F3E0A4E1B3E001900D92C8 -:105A70008A95E1F70E94461B909337038093360383 -:105A80000E94BF0E90913903891731F00E94BF0E1A -:105A9000809339030E94561680915C04843009F08B -:105AA0005ECB83E08093E9008091E80082FF57CBD2 -:105AB0008091E80090E085FF05C00E94F4068823ED -:105AC00099F091E08091E8008B778093E80099232A -:105AD00009F445CBE981E150E33108F076C0F0E00C -:105AE000EE51FB4C0C94243300E210E0CE01019601 -:105AF0007C018091E80085FD0AC08091E8008B77E9 -:105B00008093E8000E94F406882399F3DACF80910D -:105B1000F100D7018D937D010150110951F7D1CFCB -:105B20001A8289E08B8311C08A81823009F48FC187 -:105B3000833091F1813009F048C00E9462080E94D0 -:105B40002A336B837C838D839E8380915C048430B5 -:105B500009F005CB1091E9001F709091EC00892F9E -:105B6000817090FD80E8182B82E08093E90080919D -:105B7000E80080FF0DC050E040E060E270E0CE0140 -:105B800001960E9425078091E8008E778093E800B7 -:105B90001F701093E900E3CADE011396E5E4F3E019 -:105BA00081918D9323E0EF34F207D1F7CECF8A8134 -:105BB000823059F46B817C818D819E810E942A33D1 -:105BC00086E290E00E946433C0CF8FEF8983BDCF1F -:105BD0004C816B818A810E943014982789279827ED -:105BE0009E838D83B2CFED80FE80FE24EF24FE24C1 -:105BF0008A810B813EE0039F800111249CE8899FEC -:105C0000000D111D11248C8190E0880F991F080F41 -:105C1000191F6F2DC80187960E9464336E2DC8012D -:105C20008896D0CF0E94B41390CF8A818138C1F07A -:105C300060F4803809F089CF20E04B8160916904DD -:105C4000809168040E94F01480CF8238E9F0833894 -:105C500009F07BCF20E040916A046C818B81F2CF08 -:105C600060E08B810E9407168B81811103C00E9426 -:105C7000E20F6BCF8091670481608093670460E0DE -:105C800086950E94071661CF8B8180936B045DCF50 -:105C90008A81813899F030F4803809F056CF8091AC -:105CA0006A0440CF823891F0833809F04ECF80915A -:105CB00068048B83809169048C8347CF809167044B -:105CC00080FF02C086952ECF80E02CCF80916B04A0 -:105CD00029CF609167047091680480916904909164 -:105CE0006A040E94DE1431CF80E18A832ECF81E0E6 -:105CF0008A838DE117CFCA80DB80DC24CD24DC24AD -:105D00008E010F5F1F4FEC80E00EF12EF11CC601DB -:105D10008D519D4F0E151F0509F417CFADE1CA1621 -:105D2000A1E0DA0650F40E945033F8018483BFEFFB -:105D3000CB1ADB0A0F5F1F4FEACFD80114961C92D3 -:105D4000F6CF0A811B81102701271027FE0131960B -:105D50006F01EC80E00EF12EF11CC8018D519D4FBA -:105D6000E016F10609F4F1CE0D31F1E01F0728F439 -:105D7000D60114966C910E946433BFEFCB1ADB0AF4 -:105D80000F5F1F4FEACF0E94A413DFCE85E0ADCF97 -:105D9000CA80DB80DC24CD24DC248E010F5F1F4F02 -:105DA000EC80E00EF12EF11CC6018796E016F1069C -:105DB00009F4CBCEECEBCE16E2E0DE0658F40E94FE -:105DC0005033D80114968C93FFEFCF1ADF0A0F5F80 -:105DD0001F4FEACFF8011482F7CF0A811B811027E9 -:105DE000012710279E012F5F3F4F6901EC80E00ED5 -:105DF000F12EF11CC8018796E016F10609F4A5CE34 -:105E00000C3B32E0130728F4D60114966C910E94E3 -:105E10006433BFEFCB1ADB0A0F5F1F4FEBCF09BD17 -:105E200019BD09B400FEFDCF8091D8008F7D80930D -:105E3000D8008091E00082608093E0008091E000D3 -:105E400081FDFCCF10924F040E94F70F7DCB86E2BC -:105E500090E00E9450331B821C821D828E8375CE7F -:105E60001092B9008CE08093B80008959F92AF9291 -:105E7000BF92CF92DF92EF92FF920F931F93CF9337 -:105E8000DF93B82EEB010E94461B6C01EE24E394D5 -:105E9000F12CC431D10560F025E0E22EF12CCF3F8A -:105EA000DC0731F0CE0164E170E00E94F0327B014A -:105EB00084EAA82E94E8992E1092BC00A092BC000F -:105EC0000E94461B8C018091BC0087FF0DC0809111 -:105ED000B900887F883039F18091B900887F80319E -:105EE00011F10FEF1FEF09C00E94461B801B910BA1 -:105EF0008E159F0540F30EEF1FEFCF3FDC07E1F259 -:105F0000C6010E94371B8C179D07B0F2C801DF91B4 -:105F1000CF911F910F91FF90EF90DF90CF90BF90A6 -:105F2000AF909F900895B092BB009092BC000E94E9 -:105F3000461B8C018091BC0087FF0AC08091B9008C -:105F4000887F883111F0803461F610E000E0DECF08 -:105F50000E94461B801B910B8E159F0558F3CBCFDB -:105F60000F931F93CF93DF93EB018093BB0084E8E3 -:105F70008093BC000E94461B8C018091BC0087FF6F -:105F800011C02091B900287F81E090E0283211F4FF -:105F900090E080E0919581959109DF91CF911F91DB -:105FA0000F910895CF3FDC0741F30E94461B801BF1 -:105FB000910B8C179D0708F38EEF9FEFEECF0F9399 -:105FC0001F93CF93DF93EC0184EC8093BC000E947D -:105FD000461B8C018091BC0087FF08C08091BB00EC -:105FE00090E0DF91CF911F910F910895CF3FDC0793 -:105FF00089F30E94461B801B910B8C179D0750F361 -:106000008EEF9FEFEECF0F931F93CF93DF93EC01B3 -:1060100084E88093BC000E94461B8C018091BC00E8 -:1060200087FF08C08091BB0090E0DF91CF911F9166 -:106030000F910895CF3FDC0789F30E94461B801B18 -:10604000910B8C179D0750F38EEF9FEFEECFCF9201 -:10605000DF92EF92FF920F931F93CF93DF936B0129 -:106060008A017901B9010E94362FE6010C0D1D1D30 -:10607000C017D10761F424E92093BC00DF91CF91D0 -:106080001F910F91FF90EF90DF90CF90089597FDB3 -:10609000F2CFB70189910E94B02FEACFCF92DF9261 -:1060A000EF92FF920F931F93CF93DF93C62F6A0156 -:1060B0007901B8010E94362F97FD0CC0B8018C2FD2 -:1060C0000E94B02FE601EC0CFD1CCE15DF0511F08F -:1060D00097FF0CC024E92093BC00DF91CF911F9162 -:1060E0000F91FF90EF90DF90CF900895B8018991C4 -:1060F0000E94B02FEACFCF92DF92EF92FF920F93E0 -:106100001F93CF93DF93F82EE62EEA016901B801C1 -:106110000E94362F97FD15C0B8018E2D0E94B02F1A -:1061200097FD0FC0B8018F2D81600E94362FF12C92 -:10613000E12C21E0C21AD108EC14FD0400F597FF10 -:1061400011C024E92093BC001816190614F490E03D -:1061500080E0DF91CF911F910F91FF90EF90DF9042 -:10616000CF900895C8010E94DF2F97FD04C0FE0163 -:10617000EE0DFF1D80832FEFE21AF20ADDCF97FDAF -:10618000E0CFC8010E94033097FDDBCFCC0DDD1DB1 -:106190008883D7CF84E98093BC0008958EE14A9B21 -:1061A00002C08150E1F74A9BFECF08955A9880E2E1 -:1061B0008A95F1F75A9A0895FC013BE03A95F1F778 -:1061C00098E020E080E031E040E14A95F1F7880F67 -:1061D0004A9B02C08160232742E04A95F1F7000004 -:1061E00040E14A95F1F7915079F790E19A95F1F7EE -:1061F00099B132E03A95F1F7000040E14A95F1F7A4 -:1062000092FB992790F992272081920F908308950D -:10621000EF92FF920F931F93CF93DF930F92CDB71F -:10622000DEB719828C017C01E60EF11C0E151F05EC -:1062300061F481E09981911180E00F90DF91CF911D -:106240001F910F91FF90EF9008950E94CE30CE01E4 -:1062500001960E94DC30F80181938F01E7CF529ABA -:106260005A9A089552985A9AEA9AE9E6F0E080819B -:106270008F7C808308956150770B91E001C0990F66 -:106280006A95EAF720E031E0911108C0222391F0ED -:106290005A9A80E28A95F1F75A980895492F48232F -:1062A00039F05A9A232740E24A95F1F79695ECCFB8 -:1062B0005A98F9CF5A98EDCFFF920F931F93CF932F -:1062C000DF93EC018C01060F111DC017D10731F4CB -:1062D000DF91CF911F910F91FF900895F9900E9447 -:1062E000D63068E08F2D0E943B31EFCF1F920F9286 -:1062F0000FB60F921124EF92FF920F931F932F93DB -:106300003F934F935F936F937F938F939F93AF933D -:10631000BF93EF93FF93CF93DF930F92CDB7DEB789 -:1063200019820E94CE30CE0101960E94DC30A82F47 -:10633000A695A695A695282F229525709A2F95703B -:10634000290F922F937026952695920F9827977074 -:106350008981982B09F075C0A83008F072C080E1DF -:106360008A95F1F75A9A529AB2E0BA95F1F700C0BD -:106370005A98EA2EF12CEAE0AE9FD0011124AF5FCB -:10638000BE4F1896ED91FC9119973097B1F060913E -:10639000F0017091F10116962D913C911797260FFF -:1063A000371F13968D919C911497680F791F15963E -:1063B0004C91159712968C9109958AE08E9DF0016B -:1063C0008F9DF00D1124EF5FFE4F6581662351F024 -:1063D0002091F0013091F10186819781820F931F06 -:1063E0000E945C310E94D630F0E1FA95F1F75A989C -:1063F00052985A9A80E18A95F1F78AE08E9D800141 -:106400008F9D100D11240F5F1E4FD80112966C91B5 -:106410001297662371F12091F0013091F1011396EA -:106420008D919C91820F931F0E940831D801ED91AC -:10643000FC91882311F088E001C082E080830E94F3 -:10644000CE300F90DF91CF91FF91EF91BF91AF913F -:106450009F918F917F916F915F914F913F912F917C -:106460001F910F91FF90EF900F900FBE0F901F9014 -:106470001895ED91FC91DFCF0F931F93CF93DF938E -:10648000EC0108970CF0A9C08AE08C9FF0018D9F69 -:10649000F00D1124EF5FFE4F80819181892B09F46B -:1064A0009CC0F894529A5A9885E08A95F1F70000BA -:1064B0008C2F869585709C2F9570890F982F9370DF -:1064C00086958695890F8E0193E0000F111F9A958E -:1064D000E1F7082B0E94D63000C068E0802F0E94B0 -:1064E0003B31A0E1AA95F1F752985A9A4A9B27C0EE -:1064F00087E090E04A9925C08AE08C9F80018D9FBB -:10650000100D11240F5F1E4FF80165816623A1F164 -:106510002091F0013091F10186819781820F931FC4 -:106520000E940831811128C0529A5A9AD801ED91DF -:10653000FC9182E08083789482E090E016C000C0F5 -:10654000D5CF0197B9F4529A5A9A8AE08C9FF001FC -:106550008D9FF00D1124EF5FFE4F0190F081E02D33 -:1065600081E08083789481E090E0DF91CF911F916A -:106570000F91089500C0BECF0E94CE30B0E2BA9510 -:10658000F1F75A98529AE0E1EA95F1F78AE08C9F88 -:10659000F0018D9FF00D1124EF5FFE4F62816623A5 -:1065A00051F02091F0013091F10183819481820FAB -:1065B000931F0E945C310E94D6308AE08C9FF001CC -:1065C0008D9FF00D1124EF5FFE4F0190F081E02DC3 -:1065D0001082789490E080E0C8CF84E090E0C5CF4E -:1065E000AA1BBB1B51E107C0AA1FBB1FA617B707F9 -:1065F00010F0A61BB70B881F991F5A95A9F7809515 -:106600009095BC01CD010895991B79E004C0991FB4 -:10661000961708F0961B881F7A95C9F780950895FC -:1066200097FB072E16F4009407D077FD09D00E943F -:10663000F03207FC05D03EF4909581959F4F089568 -:10664000709561957F4F0895EE0FFF1F0590F491AF -:10665000E02D0994692796276927782787277827C7 -:106660000895FB01DC0102C005900D92415050409D -:10667000D8F70895FB01DC0104C08D9101908019C9 -:1066800021F441505040C8F7881B990B0895FB0135 -:10669000DC0102C001900D9241505040D8F708959E -:1066A000F999FECF92BD81BDF89A992780B50895DA -:1066B000A6E1B0E044E050E00C948A33A8E1B0E0F9 -:1066C00042E050E00C948A33262FF999FECF92BD18 -:1066D00081BDF89A019700B4021639F01FBA20BDA7 -:1066E0000FB6F894FA9AF99A0FBE08950396272FD9 -:1066F0000E9465330E946433252F0E946533242F46 -:106700000C9465330196272F0E9465330C946433F3 -:10671000DC01CB01FC01F999FECF06C0F2BDE1BD61 -:10672000F89A319600B40D9241505040B8F7089550 -:106730000E94DA3308F481E00895E89409C097FBD9 -:106740003EF490958095709561957F4F8F4F9F4F48 -:106750009923A9F0F92F96E9BB279395F69587958C -:1067600077956795B795F111F8CFFAF4BB0F11F44F -:1067700060FF1BC06F5F7F4F8F4F9F4F16C08823F6 -:1067800011F096E911C0772321F09EE8872F762F2C -:1067900005C0662371F096E8862F70E060E02AF06D -:1067A0009A95660F771F881FDAF7880F9695879559 -:1067B00097F90895990F0008550FAA0BE0E8FEEF2E -:1067C00016161706E807F907C0F012161306E407B5 -:1067D000F50798F0621B730B840B950B39F40A26AE -:1067E00061F0232B242B252B21F408950A2609F48C -:1067F000A140A6958FEF811D811D08950E9411343F -:106800000C9482340E94743438F00E947B3420F05F -:10681000952311F00C946B340C94713411240C9466 -:10682000B6340E94933470F3959FC1F3950F50E0F6 -:10683000551F629FF001729FBB27F00DB11D639F32 -:10684000AA27F00DB11DAA1F649F6627B00DA11DD8 -:10685000661F829F2227B00DA11D621F739FB00D7E -:10686000A11D621F839FA00D611D221F749F3327EE -:10687000A00D611D231F849F600D211D822F762F87 -:106880006A2F11249F5750409AF0F1F088234AF064 -:10689000EE0FFF1FBB1F661F771F881F91505040D0 -:1068A000A9F79E3F510580F00C946B340C94B634DC -:1068B0005F3FE4F3983ED4F3869577956795B79557 -:1068C000F795E7959F5FC1F7FE2B880F911D969571 -:1068D000879597F9089597F99F6780E870E060E0E1 -:1068E00008959FEF80EC089500240A941616170669 -:1068F00018060906089500240A94121613061406B1 -:1069000005060895092E0394000C11F4882352F013 -:10691000BB0F40F4BF2B11F460FF04C06F5F7F4FCB -:106920008F4F9F4F089557FD9058440F551F59F0B2 -:106930005F3F71F04795880F97FB991F61F09F3F6C -:1069400079F087950895121613061406551FF2CF95 -:106950004695F1DF08C0161617061806991FF1CFE5 -:1069600086957105610508940895E894BB2766270C -:106970007727CB0197F90895F894FFCFE7100F110F -:1069800062110F11621142117A1162117712841291 -:10699000B014B014B914B914BB14B914B914B9149F -:1069A000B014B014C014B914B914C01417211721AD -:1069B00070217021A2214A214A214A21BC212D2285 -:1069C0003D223D22902D942DD72DE82DF32D122E12 -:1069D000152E482E692EE52DE52D742E772E7B2E53 -:0A69E000A12EC32EC62EC82EED2EE8 -:1069EA000130020000000100000000300200000037 -:1069FA00050100000030020000000106000000301E -:106A0A000200000001070000003002040800000034 -:106A1A000000003002090C000000000000300201F2 -:106A2A001500000000000036323331F7F66766972A -:106A3A00C6343500000000000180005F082B0E0AF2 -:106A4A000E060E020EF4F5010021007F220003005B -:106A5A004A004A4A01F6F731333236674C41594502 -:106A6A00520042617365200047616D6520005261E2 -:106A7A00697365004C6F776572004C4F434B004356 -:106A8A00617073004E756D005363726C0020202094 -:106A9A00202000534F4C415200544D505354008112 -:106AAA008283E200E900EA00B500B600B700CD0033 -:106ABA008301CC008A01920194012102230224025B -:106ACA002502260227022A02B300B4006F007000D2 -:106ADA00A50200FF0100010000FFFF000001000104 -:106AEA00FF00000810181810080000010202020234 -:106AFA0002020202020240227B99017701FC000095 -:066B0A000C190C390C000F +:103670004FB7F8948091460490914704A091480474 +:10368000B09149044FBF821B930B08952FB7F89454 +:103690008091460490914704A0914804B091490458 +:1036A0002FBF08958F929F92AF92BF92CF92DF92D9 +:1036B000EF92FF920F931F93CF93DF93CDB7DEB7B7 +:1036C0002F970FB6F894DEBF0FBECDBF8E010F5FF0 +:1036D0001F4F8AE0D8011D928A95E9F78EE4C82E23 +:1036E00081E0D82EF12CE12CAA24A394B12CF60170 +:1036F00081916F018F3F09F44AC0F894E82FE29559 +:10370000EF70F0E021A18F70A50102C0440F551F9A +:103710008A95E2F7CA01922F982B91A392A18095E6 +:10372000892382A30E947A0900C0E7E4F1E030E037 +:1037300020E0912C41914F3F09F47EC0A42FA29527 +:10374000AF70B0E090968C9190E04F7002C095956C +:1037500087954A95E2F780FD6FC08A2D022E01C041 +:10376000880F0A94EAF7982A2F5F3F4F27303105D8 +:1037700009F7F601319780818F3F11F00E947C0993 +:1037800050EA5A95F1F7F801EE0DFF1D90828FEF88 +:10379000E81AF80A95E0E916F10409F0A8CF4AE022 +:1037A00050E0B80181ED92E00E940C347C01892B3D +:1037B00041F08AE0F801A1EDB2E001900D928A9506 +:1037C000E1F71091DC02E114F104C1F181E0809392 +:1037D0008D020E94461B90938C0280938B028091F5 +:1037E0008B0290918C020E94371B069770F0A1ED1E +:1037F000B2E0E12FF0E0EC5BFC4F8D91819322E091 +:10380000A63DB207D1F710928D0281E090E0EF283B +:10381000C9F02F960FB6F894DEBF0FBECDBFDF9173 +:10382000CF911F910F91FF90EF90DF90CF90BF90BD +:10383000AF909F908F90089580E095CF80918D02FA +:103840008111CDCF0E949C0EB82EE091DC028E013A +:10385000055F1F4F882309F4CAC085E0D8011D9277 +:103860008A95E9F7F0E09F012C5B3C4F790180914C +:10387000CA02AE01405F5F4F6A018A3008F08FC014 +:1038800040EB59E1B801C7010E94580E882309F4A2 +:103890009DC04FE756E2B801C7010E94580E882329 +:1038A00009F494C047ED57E1B801C7010E94580ED2 +:1038B000882309F48BC043EC58E1B801C7010E948A +:1038C000580E882309F482C041EA58E1B801C701C3 +:1038D0000E94580E882309F479C01092CA02E09120 +:1038E000DB02F0E0AF014C5B5C4FD80110E0FA0165 +:1038F0009191AF018D91981731F09F0121503109BD +:10390000F90180831B2DAC15BD0589F780919102CB +:10391000909192020E94371B893E934060F1609122 +:103920009002E62EF12C662777276E197F09072E65 +:10393000000C880B990B0E94243527EA39E747E4ED +:103940005DE30E9415364B015C01B701FF0C880B4B +:10395000990B0E9424359B01AC01C501B4010E9462 +:103960006B340E94F334609390020E94461B909344 +:1039700092028093910280919502882371F0809148 +:103980009302909194020E94371B893E934028F045 +:1039900082EE0E94DC0B10929502812F3ACF80912B +:1039A0008E0290918F020E94371B843F914008F055 +:1039B00067CFE091DB02F0E0EC5BFC4FD8011192A5 +:1039C0001D92AC15BD05D9F71B2DA0CF8091CA0261 +:1039D0008F3F31F08F5F8093CA028A3008F47FCF27 +:1039E0000E94461B90938F0280938E02E2CFF0E0FC +:1039F000EC5BFC4FF89485E0A9EAB2E001900D92EF +:103A00008A95E1F765E070E089EA92E00E94B108EA +:103A10008093A8020E947A09F894E091E402F0E011 +:103A2000EF51FD4F80818B878093AF0261E070E0A2 +:103A3000C8010E94B1088093AE020E947A09F894EE +:103A4000C090B002D090B102E090B202F090B30208 +:103A50008091960290919702A0919802B09199025C +:103A6000C816D906EA06FB06D1F0C0929602D0929B +:103A70009702E0929802F09299020E949C0E8111A6 +:103A80000EC00E946208C61AD70AE80AF90AC09254 +:103A9000CB02D092CC02E092CD02F092CE020E94F4 +:103AA0007A09F8948091BB02882321F184FF04C035 +:103AB0009091BC029093510380FF0DC08091B4029D +:103AC00080FF25C09091660491609093660460E049 +:103AD00086950E9407168091BB0281FF09C020E0F5 +:103AE0004091B7026091B6028091B5020E94F01435 +:103AF0001092BB020E947A09F8948091BD0288233B +:103B000049F00E94B00D0E947A0980E082CE0E94A6 +:103B1000E20FE1CF0E94950DF6CF5F926F927F92F8 +:103B20008F929F92AF92BF92CF92DF92EF92FF92CD +:103B30000F931F93CF93DF9300D000D00F92CDB798 +:103B4000DEB76C01FC0183819481892B31F0808187 +:103B5000918189238F3F09F0C4C50F900F900F907A +:103B60000F900F90DF91CF911F910F91FF90EF90E9 +:103B7000DF90CF90BF90AF909F908F907F906F908D +:103B80005F9008950E946314182F682F89819A818D +:103B90000E94890B69817A81812F0E9456148C01C1 +:103BA000F6018281882309F463C0C801905681150B +:103BB000F0E29F0750F0905E811520E1920728F017 +:103BC000915C81159F4108F0A6C0C80199279C010E +:103BD000245031092432310520F08B970E9708F0DC +:103BE00047C080919102909192020097D9F10E9472 +:103BF000371B9C0150E040E060E67AEE80E090E008 +:103C00000E94B533CA01B90125E030E040E050E040 +:103C10000E94B533E09090022F3F310519F010F06B +:103C20002FEF30E0F12C2E193F09B90190E080E030 +:103C30000E94223527EA39E747E45DE30E94153602 +:103C40000E94D7344B015C01B701FF0C880B990B24 +:103C50000E942435A50194010E946B340E94F33424 +:103C6000609390020E94461B90939202809391026F +:103C7000F6018281882309F429C5980122513F4524 +:103C80002031310508F0F7C48FEF93E00E94223411 +:103C9000025193EEA92E92E0B92E81115ECF01114F +:103CA00043C01C821B82662463948AE0582E8501DF +:103CB0000F5F1F4FC5010E94223489831A82882317 +:103CC00009F44BCF9FEF980F9330E8F58A83698210 +:103CD00032E0A30EB11CC8010E9422348B838823DA +:103CE00009F43BCF8E010F5F1F4FF8012081222383 +:103CF000F1F2213009F061C091818281913029F582 +:103D00000E5F1F4F6AE070E0893311F460E570E0E8 +:103D10000E94CF0E20C090E080E00F3F110511F00F +:103D200008F055CFC80153CFA114F4E0BF0609F441 +:103D300014CFC5010E942234811101C001502FEF20 +:103D4000A21AB20AACCF5801CDCF923039F40E5F2F +:103D50001F4F0E94150C0F5F1F4FC7CF933029F4E0 +:103D60000E5F1F4F0E94DC0BF6CF943019F00F5FEF +:103D70001F4FF1CF0E5F1F4F30E020E0B8016F5FA3 +:103D80007F4FF80141818053990B8A30910550F0A3 +:103D90002150310900F38FE99FE00197F1F700C04E +:103DA0000000F6CF529EF001539EF00D11249C01AD +:103DB0002E0F3F1F842F8B01E1CFE22FF0E0E75F52 +:103DC000FD4F7490822F86958695869590E0FC0134 +:103DD000E750FE4FE4902770F12C022E02C0F594BC +:103DE000E7940A94E2F7E1E0EE22FF24FC01E751B8 +:103DF000FE4FC490D12C022E02C0D594C7940A94D1 +:103E0000E2F7F1E0CF22DD24FC01E752FE4F84907F +:103E1000912C02C0959487942A95E2F721E08222A2 +:103E20009924E114F10419F081EE0E94150CC114DB +:103E3000D10419F086EE0E94150C39E36AE070E0B7 +:103E4000731202C060E570E0872D0E94CF0ECD286E +:103E500019F086EE0E94DC0BEF2819F081EE0E942B +:103E6000DC0B892809F477CF6AE070E08CE250CF50 +:103E700081E00E94281703C081E00E941C170F9068 +:103E80000F900F900F900F90DF91CF911F910F9196 +:103E9000FF90EF90DF90CF90BF90AF909F908F906A +:103EA0007F906F905F900C94111782E0E2CF043FF7 +:103EB000110509F455C108F057C1053E110509F473 +:103EC000DDC0F601928191113CC280914E04827254 +:103ED0000A3CFCE51F0709F414C208F06AC1053C5E +:103EE0003CE5130709F4F9C108F04EC1033C5CE559 +:103EF000150709F4D3C108F0EBC1023C1C4509F4D5 +:103F00007DC1F60100811181992309F434C2C801F1 +:103F10000E946314F82E682FC8010E94890BB80113 +:103F20008F2D0E9456140E94D609182FB82EF60124 +:103F300022814581342F32953F70892F82958F7071 +:103F4000E82EF12C8C3008F04EC2F701E456F94C03 +:103F50000C94D43303384FE5140709F481C018F5E5 +:103F600001389FE5190709F44AC008F065C0003818 +:103F7000FFE51F0709F0A5CF882309F459C08091F8 +:103F80009502811106C081E08093950282EE0E9425 +:103F9000150C0E94461B90939402809393028BE22F +:103FA0000E94150C8ECF05382FE5120709F4BEC00C +:103FB00008F476C006384FE5140709F082CF88234D +:103FC00009F4CEC06091590170915A0190E080E0EF +:103FD0000E94223520E030E040E05CE30E9415368C +:103FE00020E030E040E85FE30E94EE348111B5C08C +:103FF00080EE90E090935A0180935901A1C08823EC +:10400000A1F080919502811106C081E08093950214 +:1040100082EE0E94150C0E94461B9093940280939E +:10402000930281EE0E94150CBACF81EE0E94DC0B48 +:104030008BE20E94DC0B45CF882309F442CF81EE4E +:104040000E94150C83EE0E94150C8FE40E94150C43 +:104050008FE40E94DC0B83EE0E94DC0B81EEE9CF43 +:10406000882309F42ECF81EE0E94150C83EE0E9466 +:10407000150C80E50E94150C80E5EBCF809334028F +:104080001093330200933202882321F081E0809361 +:10409000E70217CF1092E70214CF80933102F0CFDE +:1040A000882379F180913102882349F0809132028E +:1040B0000E94DC0B80EE0E94150C8AE20CC08091FD +:1040C00034028823D1F3809132020E94DC0B80EE0F +:1040D0000E94150C8CE40F900F900F900F900F9092 +:1040E000DF91CF911F910F91FF90EF90DF90CF90D4 +:1040F000BF90AF909F908F907F906F905F900C9447 +:10410000150C8AE20E94DC0B8CE40E94DC0B80EE32 +:104110000E94DC0B80913102811105C08091340234 +:10412000882309F41ACD80913202D5CF8823C1F0BB +:1041300080912703882339F0109227031092000101 +:104140000E943E0DBECE809100018111F7CF81E02B +:104150008093270380930001F3CF80E890E04ACF5B +:1041600061E00E949A0CADCE62E0FBCF64E0F9CF33 +:10417000882321F081E08093E602A3CE1092E6022C +:10418000A0CE1092E9029DCE073C2CE5120709F45F +:10419000AEC008F4A7C0083C4CE5140709F4ACC055 +:1041A000093C1C4509F0ADCE43EA55E16FEA75E1E3 +:1041B00079C0043DECE51E07A8F40E3CFCE51F07A2 +:1041C00008F0CBCC0C3C2CE5120709F49FC045EE5F +:1041D00055E166EF75E10D3C1C4508F463C061E0F4 +:1041E00081E046C0053D4CE5140709F4B6CC08F45F +:1041F00092C00D351D4509F4B0CC83CE8091660484 +:1042000080FF31C08E7F8093660460916604709158 +:10421000670480916804909169040E94DE14809183 +:1042200050038160809350039FEFE0E7F2E09150EC +:10423000E040F040E1F700C000000F900F900F90B9 +:104240000F900F90DF91CF911F910F91FF90EF9002 +:10425000DF90CF90BF90AF909F908F907F906F90A6 +:104260005F900C94E40E81608093660461E0869513 +:104270000F900F900F900F900F90DF91CF911F91A3 +:104280000F91FF90EF90DF90CF90BF90AF909F90F5 +:104290008F907F906F905F900C94071643E357E1E7 +:1042A0006CE377E10F900F900F900F900F90DF91DC +:1042B000CF911F910F91FF90EF90DF90CF90BF9023 +:1042C000AF909F908F907F906F905F900C94C708F5 +:1042D0004CE357E163E377E1E5CF43ED55E16CED66 +:1042E00075E1E0CF4CED55E163ED75E1DBCF4BEBD4 +:1042F00055E167EC75E1D6CF47EC55E16BEB75E125 +:10430000D1CF4FEA55E163EA75E1CCCF46EF55E1F5 +:1043100065EE75E1C7CF0F900F900F900F900F9043 +:10432000DF91CF911F910F91FF90EF90DF90CF9091 +:10433000BF90AF909F908F907F906F905F900C9404 +:1043400046170E3D1C4509F0DCCD0F900F900F90E5 +:104350000F900F90DF91CF911F910F91FF90EF90F1 +:10436000DF90CF90BF90AF909F908F907F906F9095 +:104370005F900C946D17C8010E94610BF82ECFCD91 +:10438000092F0F70907F11F00295007F812F22235B +:10439000C9F0002369F090E2910F983010F01111EC +:1043A0000BC080914E04082B00934E040E94400BDA +:1043B000812F0E94150C17C080918902082B009351 +:1043C0008902F4CF0E94DC0B002369F00095105E97 +:1043D000183010F0B11027C080914E0408230093CC +:1043E0004E040E94400B98E0E91AF108E4E0EE1652 +:1043F000F10408F0B2CB0E94BF0E0F900F900F9007 +:104400000F900F90DF91CF911F910F91FF90EF9040 +:10441000DF90CF90BF90AF909F908F907F906F90E4 +:104420005F900C94561680918902082300938902AC +:10443000D8CF892F8F70907F903211F08295807F36 +:10444000F1E0BF120CC0222329F0333060F60E9445 +:10445000D20BC9CF323038F60E94C70BC4CF22230B +:1044600041F03323A1F340FFA3CF4F70F601458302 +:10447000EECF332389F3193309F0F5C0FFEF27EEB0 +:1044800033E0F15020403040E1F700C00000812FC0 +:104490000E94DC0BA8CF892F86958695837061F0EA +:1044A000813009F0A0CF812F9370211102C090E0DC +:1044B00080E00E946E0897CF812F9370211102C077 +:1044C00090E080E00E9484088ECF892F8370A1F550 +:1044D000211189CF812F829586958770880F880F4B +:1044E000412F4F70082E01C0440F0A94EAF7212F84 +:1044F000207114FF07C02FE030E001C0220F8A9521 +:10450000EAF72095969596959370923081F0822FD8 +:10451000842B933030F480918A02913029F0242B3F +:1045200082230E94C30B5FCF842B822BFACF242BD4 +:1045300080918A028227F5CF8695222311F0892F58 +:104540008170882309F44FCF812F829586958770DB +:10455000880F880F412F4F70082E01C0440F0A9416 +:10456000EAF7212F207114FF07C02FE030E001C0CF +:10457000220F8A95EAF7209596959695937092303A +:1045800081F0822F842B933030F480916504913038 +:1045900029F0242B82230E940B1725CF842B822BFA +:1045A000FACF242B809165048227F5CF092F0F7055 +:1045B000222329F0802F0E942817812F48CF812F96 +:1045C0000E94C70B802F0E941C170DCF812FE1EF97 +:1045D0001E1789F1E11750F0F0EF1F17B9F02223F1 +:1045E000B1F13111E5CE892F8F7129C042EF141737 +:1045F00049F153EF1513F3CF80E0222361F29F714D +:1046000081E001C0880F9A95EAF7C5CF222379F09F +:10461000323008F0E8CE292F2F7181E090E001C000 +:10462000880F2A95EAF7909165048927B4CF333033 +:1046300008F0D9CEF0CF892F8F71222321F20E946A +:104640002817D1CE892F8F712223C9F3BCCF3323F2 +:1046500079F0893341F48FEF97EEE3E08150904099 +:10466000E040E1F712CF8FE39CE90197F1F70DCF1E +:10467000892F8F71A8CF0031FFE51F0709F4F8CB10 +:1046800001312FE5120709F410CC063F110509F49A +:104690006DCD08F05FCC043E110509F469CD08F03A +:1046A00006CC003E110509F463CD013E110509F465 +:1046B000F4CC0C32110509F004CC882309F461CD47 +:1046C00081E08093E90210926701FBCB00313FE566 +:1046D000130709F4D1CB01314FE51407B1F682E09D +:1046E000CCCB85E0DE01119601900D928A95E1F721 +:1046F000F601228189819A81211144CA0E94610BAD +:10470000182F48CA1F93CF93DF9380915502807F63 +:10471000A9F480915202882389F080918702D09178 +:1047200056026091500270915102A0915302B091D3 +:104730005402C62FC72316E0D81304C0DF91CF91CF +:104740001F91089590E0109711F0CF3F19F4019652 +:104750008770F2CF189F9001199F300D1124F90135 +:10476000E95AFD4F41814713F2CF40814613EFCF05 +:1047700042814111ECCF438154814A1B5B0B403A8B +:10478000510528F7809155028F7080618093550202 +:10479000F901E45AFD4F80818F708061808380E54C +:1047A00092E00E948D1DDF91CF911F910C94570BC9 +:1047B000AF92BF92CF92DF92EF92FF920F931F932F +:1047C000CF93DF93CDB7DEB761970FB6F894DEBF16 +:1047D0000FBECDBF8C0185E0F801DE011D96019072 +:1047E0000D928A95E1F7F801E28080E5A82E82E03B +:1047F000B82E60915302709154026115710509F44D +:1048000032C19091500240915102892F84238F3FF1 +:1048100009F429C120813181C380D480F0905202F3 +:10482000F601E61BF70BFF2009F4E8C08091550262 +:10483000582F507FE03AF10508F0ABC0511177C016 +:10484000FE2C431321C092131FC0E1101DC08F70B6 +:10485000806180935502C5010E948D1D8091550293 +:10486000F80185838F2D61960FB6F894DEBF0FBED9 +:10487000CDBFDF91CF911F910F91FF90EF90DF900F +:10488000CF90BF90AF900895CD2829F0822F832339 +:104890008F3F09F003C180E0F82FF170DF2E80FF19 +:1048A0003CC0809187024091560256E0841315C0A7 +:1048B0002D873E878D859E850E949214292F2295F3 +:1048C0002F702230F0F0243018F59F70F1F0F801CD +:1048D0009581907FD1F4D12C1EC090E0589FF001BB +:1048E000599FF00D1124E95AFD4F6181361306C01E +:1048F0006081261303C06281E6120FC001968770A3 +:10490000D5CF9F7011F0882331F3805E883018F383 +:10491000C8010E948D1DFD2CA5CFEE2009F4A2CF69 +:1049200080915502816080935502F12C9BCF4313F7 +:1049300006C0921304C0F801EE2009F479C0C80142 +:104940000E949E14882309F1EE20F9F0809155020F +:10495000803270F0209150023091510238872F83BD +:104960001986DB86CA868C87CE0107960E948D1D2C +:1049700086E0F801A0E5B2E001900D928A95E1F79A +:104980000E948223FF24F3946DCFC8010E948D1DE5 +:10499000F9CF51110AC080E592E00E948D1D86E09A +:1049A000F50111928A95E9F7C0CF43130FC0921316 +:1049B0000DC0E1100BC0F8018583C8010E948D1D58 +:1049C00086E0F50111928A95E9F74CCFC8010E9463 +:1049D0009E148823D1F2EE20C1F2809155028032DC +:1049E00038F220915002309151023A8329831B8280 +:1049F000DD82CC828E83CE010196B8CFE03AF105FC +:104A0000F8F6FE2CEE2009F243131FC092131DC0CE +:104A10008091550280FD10C0982F907F69F0F801B9 +:104A20008583903F31F0982F907F905F8F70892B16 +:104A30008583C8010E948D1D86E0F801A0E5B2E0E3 +:104A400001900D928A95E1F70DCFC8010E949E1446 +:104A500081118ECF80915502816080935502C801EB +:104A60000E948D1DFFCEEE2009F48FCFC8010E9459 +:104A70009E14F82E882309F488CF86E0F801A0E57B +:104A8000B2E001900D928A95E1F7809150029091E9 +:104A900051020E9492140E948223E4CE81E08E256E +:104AA000FBCE1F93CF93DF93CDB7DEB767970FB6DB +:104AB000F894DEBF0FBECDBF4B8B5C8B6D8B7E8BB6 +:104AC0008F8B6111109289021A8A198A85E0FE0182 +:104AD0007396DE011D9601900D928A95E1F786E0AE +:104AE000FE013D96DE01179601900D928A95E1F741 +:104AF000CE0107960E94D823882389F016E0809182 +:104B000087029091560289134BC067960FB6F894AE +:104B1000DEBF0FBECDBFDF91CF911F91089586E01C +:104B2000FE013796DE01119601900D928A95E1F70C +:104B30008A859B85892B11F38F81988589238F3FE7 +:104B4000E9F22091560230E0C90101968770992759 +:104B5000409187024817190681F410924E040E9472 +:104B6000F70F109256021092870286E0E0E5F2E01D +:104B7000DF011D928A95E9F7C1CF96E0929FD0019F +:104B8000939FB00D1124A95ABD4FFE01319601909B +:104B90000D929A95E1F7809356020E94570BAECF83 +:104BA000819FC0011124895A9D4F0E94D8238823D8 +:104BB00009F4ABCF8091870290E001968770992726 +:104BC000809387029CCF0F931F93CF93DF93CDB732 +:104BD000DEB7A8970FB6F894DEBF0FBECDBF811128 +:104BE0004DC006E0662359F10CA311E01DA31EA3DE +:104BF0000E94461B8160782F98A78FA34CA15DA1CE +:104C00006EA188A50E9451250F8F18A319A20E949A +:104C1000461B8160782F9BA38AA34F8D58A169A161 +:104C20008BA10E94512581E0A8960FB6F894DEBFB3 +:104C30000FBECDBFDF91CF911F910F9108950A8FC5 +:104C400013E01B8F81E08C8F0E94461B8160782FC0 +:104C50009E8F8D8F4A8D5B8D6C8D8E8D0E94512520 +:104C60000D8B1E8B1F8A0E94461B8160782F998FA7 +:104C7000888F4D895E896F89898DD3CF813099F670 +:104C80006623F1F016E0188B198B8A8B0E94461B65 +:104C90008160782F9C8B8B8B488959896A898C8994 +:104CA0000E9451251B871C871D860E94461B816020 +:104CB000782F9F878E874B855C856D858F85B1CFDB +:104CC00006E00E8318E01F8388870E94461B8160E0 +:104CD000782F9A8789874E815F8168858A850E94AF +:104CE000512509831A831B820E94461B8160782FFD +:104CF0009D838C8349815A816B818D8192CFCF9224 +:104D0000DF92EF92FF920F931F93CF93DF930F9257 +:104D1000CDB7DEB7EE24E394F12C0FEA12E09E014A +:104D20002F5F3F4F44EA52E063E082E00E940119A6 +:104D3000082F882321F1C090DE028C2D90E09C0189 +:104D40002F513D4F79011981F9018081181BD12E16 +:104D500080E00AC0DA94F70180818F5F808360E091 +:104D60008C2D0E94E325802F1D14A4F3912F17FD95 +:104D700090E0191B11110EC081110E943E0B802F73 +:104D80000F90DF91CF911F910F91FF90EF90DF90E7 +:104D9000CF9008951F5FF70180818150808361E08B +:104DA0008C2D0E94E325802FE5CF1F921FB61F9206 +:104DB00011248F939F93AF93BF93809145048111EA +:104DC00013C08091460490914704A0914804B0918B +:104DD00049044196A11DB11D809346049093470458 +:104DE000A0934804B0934904BF91AF919F918F91D4 +:104DF0001F901FBE1F901895CDB7DEB7E3970FB673 +:104E0000F894DEBF0FBECDBF84B7877F84BF0FB6D7 +:104E1000F894A8958091600088618093600010925A +:104E200060000FBE80E890E00FB6F89480936100B8 +:104E3000909361000FBE85B7806885BF85B7806895 +:104E400085BF88E799E090932702809326020E940D +:104E5000D5060E94A0078091E20084608093E20062 +:104E6000789480915B048823A1F01091E9001F7071 +:104E70009091EC00892F817090FD80E8182B1092A2 +:104E8000E9008091E80083FD0E9400101F701093DC +:104E9000E90082E084BD93E095BD9AEF97BD8093D1 +:104EA0006E001092CB021092CC021092CD021092A2 +:104EB000CE020E94C514811102C00E9421140E94DA +:104EC0009C0E8093580180915801882309F4C6C034 +:104ED00010926F0185E2809370010E949C0E8111F7 +:104EE0000E94C0318091580181112FC0FE0135967A +:104EF00086E0DF011D928A95E9F786E6898387E9D6 +:104F00008A8386EC8B8384E38C8385E38D8334975B +:104F1000AEE4B1E0CE010B9621912D938E179F0741 +:104F2000D9F787E0E5E7F1E0DE01919601900D9277 +:104F30008A95E1F7FE01B196A7E4B1E0CE0188962B +:104F400021912D938E179F07D9F78091580195E0F5 +:104F5000811190E09093DC0285E0891B8093DB0255 +:104F60000EE411E0A3E5EA2EA1E0FA2EF80181910A +:104F70008F018F3F11F00E947C09E016F106B1F716 +:104F800007E411E0FEE4EF2EF1E0FF2ED8018D9151 +:104F90008D018F3F11F00E947C09E016F106B1F7F8 +:104FA000E1EDF2E08BED92E0A4E4B3E011921D920A +:104FB0008E179F07D9F70E94ED19811102C00E9438 +:104FC0006D1782E090E00E9422348093390384E0E0 +:104FD00090E00E942234182F82E290E00E94223456 +:104FE000982F812F9093D0028093CF020E94521B62 +:104FF000EFE7FBEB3197F1F700C000000E94521B76 +:105000008091440380FF2EC06FEF7FEF90E080E03F +:105010000E94543481E08093E00080E28093D800C5 +:105020001092C9008FE19EE40197F1F700C00000E3 +:1050300087E090EBDC0180936F0690937006A0935D +:105040007106B093720688E19CE00FB6F894A895BB +:10505000809360000FBE90936000FFCF85E2809345 +:105060006F0139CF83E090E00E9422340E94C30B8D +:10507000809165040E946E160E949C0E811102C0F0 +:105080000E94C33183E080930F0380E28093320457 +:105090000E94C12F6DE070E08CE992E00E94650DE6 +:1050A000892BE9F580910F0363E070E081FD97C2E1 +:1050B00089E992E00E94650D892B89F56DE070E029 +:1050C00089E892E00E94650D892B49F50E946208EB +:1050D0006058774C8E4F9F4F6093390470933A0419 +:1050E00080933B0490933C04EDE6F4E080E092E092 +:1050F000DF019C011D9221503040E1F7F0936E06D4 +:10510000E0936D068FEF9FEF90936C0480936B0498 +:1051100081E080933E0480933D04109210038091BF +:10512000DD02811136C00E94ED19811104C00E9478 +:105130006D170E94551788E090E00E942A34609312 +:105140006604709367048093680490936904809167 +:1051500050038360809350036E7F71F40E94551753 +:1051600088E090E00E942A3460936604709367049C +:1051700080936804909369040E94CC08809166042F +:1051800080FF04C060E086950E94071681E080934E +:10519000DD0280915801811106C084EF8093660181 +:1051A00085EF8093650120916601A22FA295AF70D3 +:1051B000B0E091963C9191972F7081E090E0BC0116 +:1051C000022E01C0660F0A94EAF7462F409543234A +:1051D00091964C93919792963C919297362B9296FA +:1051E0003C93929740916501E42FE295EF70F0E0D7 +:1051F00031A14F70042E01C0880F0A94EAF7982F4E +:105200009095932391A392A1892B82A390968C9140 +:1052100090E002C0959587952A95E2F7817020A1CC +:1052200030E002C0359527954A95E2F792E020FFDD +:1052300090E0892B8093E5028091580111E081274D +:105240008093E402312F381B3093DE020E94C12F7D +:1052500040E060E080E00E941E0D89EA92E09093B9 +:1052600053038093520360E08AE00E94071681E0B6 +:105270000E940B1780EE90E090935A0180935901A1 +:10528000109327030E943E0D8BE591E0909342041A +:1052900080934104E0E46E2E80915B04FF24F3943C +:1052A00000E112E1853009F4ECC10E94521BE82EA6 +:1052B00081110E946208EAE3F3E0A4E4B3E010E0A5 +:1052C00000E0B02EDD9081918D1509F4FEC18D2591 +:1052D000C12CFF24F394982F9F2109F4F1C10E945F +:1052E0009C0E882399F0C8A6B9A6DF2081E009F4B6 +:1052F00080E08AA70E94461B8160782F9CA78BA71D +:1053000048A559A56AA58CA50E945125F801E65C1F +:10531000FC4F8081F826F0828091E502E82FEE0FA5 +:10532000EE0F90916601A92FA295AF70B0E0909614 +:105330002C9130E09F7002C0359527959A95E2F741 +:105340002170332790916501A92FA295AF70B0E02D +:1053500090964C9150E09F7002C0559547959A9554 +:10536000E2F7CA018170992740FF02C082E090E015 +:10537000822B8E2B8093E5021091E4028F70E82F30 +:10538000F0E0EE50FE4F80819091E302890F809310 +:10539000E302F12C84306CF0E12FF0E0EF51FD4F8F +:1053A00080818F5F808360E0812F0E94E325FF244E +:1053B000F3948091E3028D3F6CF4E12FF0E0EF5124 +:1053C000FD4F80818150808361E0812F0E94E32521 +:1053D000FF24F3948091E302082E000C990B64E003 +:1053E00070E00E94A1338093E302F1100E943E0B13 +:1053F00080913E04882351F1809111039091120312 +:105400000E94371BC29708F077C120916B0430913E +:105410006C042115310509F08CC280913D0488236C +:10542000A9F00E9462080091390410913A04209179 +:105430003B0430913C04601B710B820B930B6F3F5C +:105440007F4F8F4F9F4710F40E94950DE11001C0D0 +:10545000F1100E94B00D809137038A3008F0A1C38B +:1054600080913503909136030E94371B089708F40A +:1054700098C304E610E025E030E040E353E064E048 +:1054800084E10E940C31892B09F05CC31092370330 +:1054900020912703222359F0809132039091330306 +:1054A000982789279827909333038093320386E0C7 +:1054B000E9E1F3E0DE01919601900D928A95E1F722 +:1054C00086E0FE01B196DE01119601900D928A955B +:1054D000E1F786E0FE013196AAE2B3E001900D9279 +:1054E0008A95E1F78091340387FD29C380912803D1 +:1054F00090912903009709F01CC3609130038091BB +:1055000031030091320310913303222309F4E4C2E2 +:1055100041E00E94F80C2091250330912603281BBE +:10552000390B309326032093250341E0602F812F10 +:105530000E94F80C2091230330912403820F931FC3 +:10554000909324038093230363E273E08FE293E05C +:105550000E94D90C65E273E08EE293E00E94D90CC0 +:1055600010922C0310922D0386E0EAE2F3E0DE01B4 +:10557000119601900D928A95E1F786E0FE01319631 +:10558000A9E1B3E001900D928A95E1F730911B03F8 +:1055900020911C0390911D0380911E0370911503AF +:1055A000609116034091170350911803F0911A036C +:1055B000E0911403FE13CCC2332311F07313C8C25D +:1055C000222311F02613C4C2882311F08513C0C210 +:1055D000992319F081E04913BCC280E0BAC286E980 +:1055E00092E068CD80915B04843009F43AC00E9457 +:1055F000950D40E060E080E00E941E0D80E00E947A +:1056000056168091E002811109C0F092E00280916B +:10561000660481708093DF020E94E20F10924504BD +:1056200088E190E00FB6F894A895809360000FBED3 +:105630006092600083B7817F846083BF83B781609D +:1056400083BF7894889583B78E7F83BF0FB6F89415 +:10565000A89580916000886180936000109260003E +:105660000FBE80915A04882361F00E94521BE4E42B +:10567000F3E08191811164C4AEE4B3E0AE17BF07DB +:10568000C1F780915B04853009F4ACCF10924E04D1 +:105690000E94F70F0E94BF0E0E9456161092E00261 +:1056A0008091DF02882349F08091660481608093B5 +:1056B000660460E086950E9407160E943E0DF5CDB7 +:1056C000C394FF0C27E0C21206CE0F5F1F4F0A30B3 +:1056D000110509F0F6CD8FEF8DA78EA71FA60E94AA +:1056E000461B8160782F99AB88AB4DA55EA56FA551 +:1056F00089A90E94512510CE0E94461B9093120347 +:105700008093110360E080E00E949A080E94BF0E1F +:105710008093EE020E949C0E8823D1F02FB7F8945C +:105720008091460490914704A0914804B0914904A7 +:105730002FBF81339547A105B10540F00E94950D1B +:1057400080913E04882309F468CE5FCE0E94B00D9C +:105750000E949C0E882309F4D3C061E080E00E947F +:105760009A0860E08CE791E00E94881362E080E094 +:105770000E949A08809165040E94890C823009F485 +:1057800099C008F08EC0882309F494C0813009F4D0 +:1057900097C065E080E00E949A0860E08AE991E0A5 +:1057A0000E94881366E080E00E949A086091EE02F1 +:1057B000669561708FE991E00E94881367E080E050 +:1057C0000E949A086091EE026095617084EA91E00F +:1057D0000E94881368E080E00E949A086091EE02BF +:1057E00062FB662760F988EA91E00E948813409185 +:1057F000EA025091EB026091EC027091ED022FB73A +:10580000F8948091460490914704A0914804B09187 +:1058100049042FBF841B950BA60BB70B8D3291400B +:10582000A105B10508F48CCF0E9462086093EA02DA +:105830007093EB028093EC029093ED028091E90269 +:10584000811104C080916701811142C06DE080E048 +:105850000E949A0860E08DEA91E00E9488136AE055 +:1058600080E00E949A0881E0809367018091E802BD +:1058700090E00196817099278093E80221E030E062 +:10588000281B390B40E6429FC001439F900D112415 +:105890002091E702222351F1855C9B4F0E949206E2 +:1058A0004FCF833089F0843009F073CF60E08EE809 +:1058B00091E003C060E082E891E00E94881369CF24 +:1058C00060E088E891E0F9CF60E084E991E0F5CF0D +:1058D0006AE080E00E949A0860E08DEA91E00E9410 +:1058E00088136BE080E00E949A08C0CF2091E60206 +:1058F000222319F085589C4FD1CF85549D4FCECF90 +:1059000064E080E00E949A0860E083EB91E00E94EE +:10591000881365E080E00E949A0860E089EB91E0DE +:105920000E94881369E080E00E949A088BEF94E05F +:10593000B5CF8091100361E070E081116ECD082F2A +:1059400010E02B01082E02C0440C551C0A94E2F70B +:10595000A90144215521452B09F448C090910F031A +:1059600090FD46C08295880F807680936A019801E9 +:10597000369527953695279520936D01815E809306 +:105980006B0110926E0124E630E047E050E068E6DB +:1059900071E088E70E94B830892B09F03ECDA8015C +:1059A00065E0440F551F6A95E1F780910F0380FD74 +:1059B0002DC043595B4F04E610E020E230E060E484 +:1059C00088E70E94DF30892B09F027CD0E94B00DB7 +:1059D000C2018095909540906B0450906C044822D1 +:1059E000592250926C0440926B0417CD8F5FA7CF61 +:1059F000880F880F880F80936A0110926D01895F6C +:105A000080936B0183E080936E01BDCFEFEEF2E0F7 +:105A100080E2DF011D928A95E9F7E6E0F2E0FBAB58 +:105A2000EAAB02E012E037E0A32E99249394AAA9EE +:105A3000BBA92D91BBABAAABF80121908F01240E1D +:105A4000352E311CC10183599B4F1C01E22FF0E020 +:105A5000E151FD4F30E020E07A2C721AB92C022E71 +:105A600001C0BB0C0A94EAF7610190E0D6018D9168 +:105A70006D018B21672D691B6770862E062E000C29 +:105A8000770BB82F01C0BB0F8A94EAF78B2E719564 +:105A9000619571096770772701C086956A95EAF765 +:105AA000882A8081882A80829F5F9830F9F62F5F4C +:105AB0003F4F31962830310579F6EAE0F2E02AA925 +:105AC0003BA9E217F30709F0B2CF04E610E020E2A9 +:105AD00030E04FEE52E073CF45E00E94F80C209189 +:105AE000210330912203820F931F9093220380930E +:105AF000210345E0602F812F0E94F80C20911F03A5 +:105B000030912003281B390B3093200320931F036F +:105B10006FE173E08CE293E00E94D90C61E273E0E4 +:105B20008DE293E00E94D90C10922F0310922E0365 +:105B30001BCD0197909329038093280315CD84E111 +:105B400090E0F8CF809137038F5F809337030CCDBF +:105B500081E080FF0FC0E0914104F0914204309752 +:105B600049F082E0809319030480F581E02D89E1FA +:105B700093E0099510921B0310921C0310921D03D1 +:105B800010921E0386E0E9E1F3E0A3E1B3E00190A7 +:105B90000D928A95E1F70E94461B909336038093FD +:105BA00035030E94BF0E90913803891731F00E948F +:105BB000BF0E809338030E94561680915B04843098 +:105BC00009F06ACB83E08093E9008091E80082FFCE +:105BD00063CB8091E80090E085FF05C00E94F40649 +:105BE000882399F091E08091E8008B778093E8001A +:105BF000992309F451CBE981E150E33108F076C0F3 +:105C0000F0E0E855F94C0C94D43300E210E0CE01FA +:105C100001967C018091E80085FD0AC08091E80032 +:105C20008B778093E8000E94F406882399F3DACFFB +:105C30008091F100D7018D937D010150110951F739 +:105C4000D1CF1A8289E08B8311C08A81823009F416 +:105C50008FC1833091F1813009F048C00E94620801 +:105C60000E94DA336B837C838D839E8380915B04F7 +:105C7000843009F011CB1091E9001F709091EC0075 +:105C8000892F817090FD80E8182B82E08093E900D5 +:105C90008091E80080FF0DC050E040E060E270E0DD +:105CA000CE0101960E9425078091E8008E778093AF +:105CB000E8001F701093E900EFCADE011396E4E4D8 +:105CC000F3E081918D9323E0EE34F207D1F7CECF4C +:105CD0008A81823059F46B817C818D819E810E9402 +:105CE000DA3386E290E00E943634C0CF8FEF8983AA +:105CF000BDCF4C816B818A810E94301498278927FF +:105D000098279E838D83B2CFED80FE80FE24EF2402 +:105D1000FE248A810B813EE0039F800111249CE8D0 +:105D2000899F000D111D11248C8190E0880F991F0F +:105D3000080F191F6F2DC80187960E9436346E2DEB +:105D4000C8018896D0CF0E94B41390CF8A81813841 +:105D5000C1F060F4803809F089CF20E04B81609178 +:105D60006804809167040E94F01480CF8238E9F0C3 +:105D7000833809F07BCF20E0409169046C818B81EE +:105D8000F2CF60E08B810E9407168B81811103C0E6 +:105D90000E94E20F6BCF809166048160809366045D +:105DA00060E086950E94071661CF8B8180936A041C +:105DB0005DCF8A81813899F030F4803809F056CF70 +:105DC0008091690440CF823891F0833809F04ECF3A +:105DD000809167048B83809168048C8347CF809186 +:105DE000660480FF02C086952ECF80E02CCF809184 +:105DF0006A0429CF609166047091670480916804F9 +:105E0000909169040E94DE1431CF80E18A832ECF05 +:105E100081E08A838DE117CFCA80DB80DC24CD242A +:105E2000DC248E010F5F1F4FEC80E00EF12EF11C81 +:105E3000C6018D519D4F0E151F0509F417CFADE119 +:105E4000CA16A1E0DA0650F40E942234F8018483D5 +:105E5000BFEFCB1ADB0A0F5F1F4FEACFD8011496B2 +:105E60001C92F6CF0A811B81102701271027FE0103 +:105E700031966F01EC80E00EF12EF11CC8018D51BE +:105E80009D4FE016F10609F4F1CE0D31F1E01F0748 +:105E900028F4D60114966C910E943634BFEFCB1AC9 +:105EA000DB0A0F5F1F4FEACF0E94A413DFCE85E00D +:105EB000ADCFCA80DB80DC24CD24DC248E010F5FD3 +:105EC0001F4FEC80E00EF12EF11CC6018796E01604 +:105ED000F10609F4CBCEECEBCE16E2E0DE0658F488 +:105EE0000E942234D80114968C93FFEFCF1ADF0A58 +:105EF0000F5F1F4FEACFF8011482F7CF0A811B8191 +:105F00001027012710279E012F5F3F4F6901EC806A +:105F1000E00EF12EF11CC8018796E016F10609F497 +:105F2000A5CE0C3B32E0130728F4D60114966C91F1 +:105F30000E943634BFEFCB1ADB0A0F5F1F4FEBCF47 +:105F400009BD19BD09B400FEFDCF8091D8008F7D39 +:105F50008093D8008091E00082608093E00080917F +:105F6000E00081FDFCCF10924E040E94F70F89CB18 +:105F700086E290E00E9422341B821C821D828E8366 +:105F800075CE1092B9008CE08093B80008959F926E +:105F9000AF92BF92CF92DF92EF92FF920F931F9337 +:105FA000CF93DF93B82EEB010E94461B6C01EE24C9 +:105FB000E394F12CC431D10560F025E0E22EF12C00 +:105FC000CF3FDC0731F0CE0164E170E00E94813305 +:105FD0007B0184EAA82E94E8992E1092BC00A0922E +:105FE000BC000E94461B8C018091BC0087FF0DC045 +:105FF0008091B900887F883039F18091B900887F1D +:10600000803111F10FEF1FEF09C00E94461B801B6A +:10601000910B8E159F0540F30EEF1FEFCF3FDC076E +:10602000E1F2C6010E94371B8C179D07B0F2C80130 +:10603000DF91CF911F910F91FF90EF90DF90CF9064 +:10604000BF90AF909F900895B092BB009092BC001B +:106050000E94461B8C018091BC0087FF0AC0809182 +:10606000B900887F883111F0803461F610E000E0DB +:10607000DECF0E94461B801B910B8E159F0558F3A7 +:10608000CBCF0F931F93CF93DF93EB018093BB0094 +:1060900084E88093BC000E94461B8C018091BC0068 +:1060A00087FF11C02091B900287F81E090E028325D +:1060B00011F490E080E0919581959109DF91CF9165 +:1060C0001F910F910895CF3FDC0741F30E94461BBB +:1060D000801B910B8C179D0708F38EEF9FEFEECF7F +:1060E0000F931F93CF93DF93EC0184EC8093BC005C +:1060F0000E94461B8C018091BC0087FF08C08091E4 +:10610000BB0090E0DF91CF911F910F910895CF3F99 +:10611000DC0789F30E94461B801B910B8C179D079F +:1061200050F38EEF9FEFEECF0F931F93CF93DF933C +:10613000EC0184E88093BC000E94461B8C01809196 +:10614000BC0087FF08C08091BB0090E0DF91CF9139 +:106150001F910F910895CF3FDC0789F30E94461BE2 +:10616000801B910B8C179D0750F38EEF9FEFEECFA6 +:10617000CF92DF92EF92FF920F931F93CF93DF9313 +:106180006B018A017901B9010E94C72FE6010C0D4C +:106190001D1DC017D10761F424E92093BC00DF91D5 +:1061A000CF911F910F91FF90EF90DF90CF900895C6 +:1061B00097FDF2CFB70189910E944130EACFCF928B +:1061C000DF92EF92FF920F931F93CF93DF93C62F2F +:1061D0006A017901B8010E94C72F97FD0CC0B80170 +:1061E0008C2F0E944130E601EC0CFD1CCE15DF0522 +:1061F00011F097FF0CC024E92093BC00DF91CF91F0 +:106200001F910F91FF90EF90DF90CF900895B8010C +:1062100089910E944130EACFCF92DF92EF92FF92B4 +:106220000F931F93CF93DF93F82EE62EEA016901B7 +:10623000B8010E94C72F97FD15C0B8018E2D0E948E +:10624000413097FD0FC0B8018F2D81600E94C72F8C +:10625000F12CE12C21E0C21AD108EC14FD0400F568 +:1062600097FF11C024E92093BC001816190614F4F6 +:1062700090E080E0DF91CF911F910F91FF90EF9020 +:10628000DF90CF900895C8010E94703097FD04C040 +:10629000FE01EE0DFF1D80832FEFE21AF20ADDCF23 +:1062A00097FDE0CFC8010E94943097FDDBCFCC0D65 +:1062B000DD1D8883D7CF84E98093BC0008958EE1EB +:1062C0004A9B02C08150E1F74A9BFECF08955A983D +:1062D00080E28A95F1F75A9A0895FC013BE03A95DD +:1062E000F1F798E020E080E031E040E14A95F1F7F5 +:1062F000880F4A9B02C08160232742E04A95F1F74C +:10630000000040E14A95F1F7915079F790E19A95B4 +:10631000F1F799B132E03A95F1F7000040E14A9582 +:10632000F1F792FB992790F992272081920F9083A1 +:106330000895EF92FF920F931F93CF93DF930F92E5 +:10634000CDB7DEB719828C017C01E60EF11C0E156B +:106350001F0561F481E09981911180E00F90DF9138 +:10636000CF911F910F91FF90EF9008950E945F31A0 +:10637000CE0101960E946D31F80181938F01E7CF24 +:10638000529A5A9A089552985A9AEA9AE9E6F0E08F +:1063900080818F7C808308956150770B91E001C0EC +:1063A000990F6A95EAF720E031E0911108C02223A5 +:1063B00091F05A9A80E28A95F1F75A980895492FF8 +:1063C000482339F05A9A232740E24A95F1F79695E7 +:1063D000ECCF5A98F9CF5A98EDCFFF920F931F93B5 +:1063E000CF93DF93EC018C01060F111DC017D1076D +:1063F00031F4DF91CF911F910F91FF900895F990A3 +:106400000E94673168E08F2D0E94CC31EFCF1F9240 +:106410000F920FB60F921124EF92FF920F931F93DA +:106420002F933F934F935F936F937F938F939F939C +:10643000AF93BF93EF93FF93CF93DF930F92CDB7BB +:10644000DEB719820E945F31CE0101960E946D3144 +:10645000A82FA695A695A695282F229525709A2F48 +:106460009570290F922F937026952695920F982755 +:1064700097708981982B09F075C0A83008F072C018 +:1064800080E18A95F1F75A9A529AB2E0BA95F1F7FB +:1064900000C05A98EA2EF12CEAE0AE9FD0011124F8 +:1064A000AF5FBE4F1896ED91FC9119973097B1F000 +:1064B0006091F0017091F10116962D913C91179722 +:1064C000260F371F13968D919C911497680F791F93 +:1064D00015964C91159712968C9109958AE08E9D90 +:1064E000F0018F9DF00D1124EF5FFE4F6581662353 +:1064F00051F02091F0013091F10186819781820F56 +:10650000931F0E94ED310E946731F0E1FA95F1F797 +:106510005A9852985A9A80E18A95F1F78AE08E9DAE +:1065200080018F9D100D11240F5F1E4FD801129610 +:106530006C911297662371F12091F0013091F10175 +:1065400013968D919C91820F931F0E949931D801CF +:10655000ED91FC91882311F088E001C082E08083F6 +:106560000E945F310F90DF91CF91FF91EF91BF912A +:10657000AF919F918F917F916F915F914F913F91DB +:106580002F911F910F91FF90EF900F900FBE0F90E2 +:106590001F901895ED91FC91DFCF0F931F93CF9330 +:1065A000DF93EC0108970CF0A9C08AE08C9FF00102 +:1065B0008D9FF00D1124EF5FFE4F80819181892B1B +:1065C00009F49CC0F894529A5A9885E08A95F1F79C +:1065D00000008C2F869585709C2F9570890F982FC1 +:1065E000937086958695890F8E0193E0000F111F99 +:1065F0009A95E1F7082B0E94673100C068E0802F70 +:106600000E94CC31A0E1AA95F1F752985A9A4A9B80 +:1066100027C087E090E04A9925C08AE08C9F8001DE +:106620008D9F100D11240F5F1E4FF80165816623A9 +:10663000A1F12091F0013091F10186819781820FC3 +:10664000931F0E949931811128C0529A5A9AD801F9 +:10665000ED91FC9182E08083789482E090E016C016 +:1066600000C0D5CF0197B9F4529A5A9A8AE08C9F0C +:10667000F0018D9FF00D1124EF5FFE4F0190F0812E +:10668000E02D81E08083789481E090E0DF91CF91EC +:106690001F910F91089500C0BECF0E945F31B0E2FC +:1066A000BA95F1F75A98529AE0E1EA95F1F78AE043 +:1066B0008C9FF0018D9FF00D1124EF5FFE4F6281E2 +:1066C000662351F02091F0013091F1018381948192 +:1066D000820F931F0E94ED310E9467318AE08C9FE8 +:1066E000F0018D9FF00D1124EF5FFE4F0190F081BE +:1066F000E02D1082789490E080E0C8CF84E090E0B4 +:10670000C5CFAA1BBB1B51E107C0AA1FBB1FA61701 +:10671000B70710F0A61BB70B881F991F5A95A9F74A +:1067200080959095BC01CD010895991B79E004C036 +:10673000991F961708F0961B881F7A95C9F78095C0 +:10674000089597FB072E16F4009407D077FD09D023 +:106750000E94813307FC05D03EF4909581959F4FB0 +:106760000895709561957F4F0895052E97FB1EF44F +:1067700000940E94CC3357FD07D00E94E13307FC00 +:1067800003D04EF40C94CC33509540953095219520 +:106790003F4F4F4F5F4F089590958095709561954D +:1067A0007F4F8F4F9F4F0895EE0FFF1F0590F4917D +:1067B000E02D099469279627692778278727782766 +:1067C0000895A1E21A2EAA1BBB1BFD010DC0AA1F32 +:1067D000BB1FEE1FFF1FA217B307E407F50720F04A +:1067E000A21BB30BE40BF50B661F771F881F991FC5 +:1067F0001A9469F760957095809590959B01AC010E +:10680000BD01CF010895FB01DC0102C005900D928E +:1068100041505040D8F70895FB01DC0104C08D9130 +:106820000190801921F441505040C8F7881B990B02 +:106830000895FB01DC0102C001900D9241505040CF +:10684000D8F70895F999FECF92BD81BDF89A99279E +:1068500080B50895A6E1B0E044E050E00C945C34CB +:10686000A8E1B0E042E050E00C945C34262FF999A6 +:10687000FECF92BD81BDF89A019700B4021639F09F +:106880001FBA20BD0FB6F894FA9AF99A0FBE089570 +:106890000396272F0E9437340E943634252F0E94FA +:1068A0003734242F0C9437340196272F0E94373425 +:1068B0000C943634DC01CB01FC01F999FECF06C003 +:1068C000F2BDE1BDF89A319600B40D9241505040AE +:1068D000B8F708955058BB27AA270E9482340C9419 +:1068E000C3350E94B53538F00E94BC3520F039F42C +:1068F0009F3F19F426F40C94B2350EF4E095E7FBB3 +:106900000C948335E92F0E94D43558F3BA176207E7 +:1069100073078407950720F079F4A6F50C940E36DA +:106920000EF4E0950B2EBA2FA02D0B01B9019001AA +:106930000C01CA01A0011124FF27591B99F0593FEE +:1069400050F4503E68F11A16F040A22F232F342F36 +:106950004427585FF3CF469537952795A795F04084 +:106960005395C9F77EF41F16BA0B620B730B840B99 +:10697000BAF09150A1F0FF0FBB1F661F771F881F51 +:10698000C2F70EC0BA0F621F731F841F48F48795A9 +:1069900077956795B795F7959E3F08F0B0CF93959B +:1069A000880F08F09927EE0F9795879508950E9414 +:1069B000F63590F09F3748F4911116F40C940F3689 +:1069C00060E070E080E89FE3089526F01B16611DEB +:1069D000711D811D0C9489350C94A4350E945F357E +:1069E00008F481E008950E94DC3588F09F5798F004 +:1069F000B92F9927B751B0F0E1F0660F771F881FC4 +:106A0000991F1AF0BA95C9F714C0B13091F00E94DD +:106A10000E36B1E008950C940E36672F782F882734 +:106A2000B85F39F0B93FCCF3869577956795B39504 +:106A3000D9F73EF490958095709561957F4F8F4F73 +:106A40009F4F0895E89409C097FB3EF49095809578 +:106A5000709561957F4F8F4F9F4F9923A9F0F92F24 +:106A600096E9BB279395F695879577956795B795A2 +:106A7000F111F8CFFAF4BB0F11F460FF1BC06F5F88 +:106A80007F4F8F4F9F4F16C0882311F096E911C09A +:106A9000772321F09EE8872F762F05C0662371F0BB +:106AA00096E8862F70E060E02AF09A95660F771FCF +:106AB000881FDAF7880F9695879597F90895990FAB +:106AC0000008550FAA0BE0E8FEEF16161706E807B8 +:106AD000F907C0F012161306E407F50798F0621BD9 +:106AE000730B840B950B39F40A2661F0232B242BAE +:106AF000252B21F408950A2609F4A140A6958FEFCD +:106B0000811D811D089597F99F6780E870E060E01E +:106B10000895882371F4772321F09850872B762FDE +:106B200007C0662311F499270DC09051862B70E0A1 +:106B300060E02AF09A95660F771F881FDAF7880FB2 +:106B40009695879597F908959F3F31F0915020F4DD +:106B5000879577956795B795880F911D9695879539 +:106B600097F908959FEF80EC089500240A94161673 +:106B7000170618060906089500240A94121613062B +:106B8000140605060895092E0394000C11F48823B9 +:106B900052F0BB0F40F4BF2B11F460FF04C06F5FD5 +:106BA0007F4F8F4F9F4F089557FD9058440F551FAB +:106BB00059F05F3F71F04795880F97FB991F61F07F +:106BC0009F3F79F087950895121613061406551FF6 +:106BD000F2CF4695F1DF08C0161617061806991F62 +:106BE000F1CF869571056105089408950E94DC3502 +:106BF000A0F0BEE7B91788F4BB279F3860F41616DB +:106C0000B11D672F782F8827985FF7CF86957795E6 +:106C10006795B11D93959639C8F30895E894BB27FD +:106C200066277727CB0197F908950E9428360C94A0 +:106C3000C3350E94B53538F00E94BC3520F095234D +:106C400011F00C9483350C94B23511240C940F364A +:106C50000E94D43570F3959FC1F3950F50E0551FF6 +:106C6000629FF001729FBB27F00DB11D639FAA27A1 +:106C7000F00DB11DAA1F649F6627B00DA11D661FF0 +:106C8000829F2227B00DA11D621F739FB00DA11D11 +:106C9000621F839FA00D611D221F749F3327A00DCB +:106CA000611D231F849F600D211D822F762F6A2F67 +:106CB00011249F5750409AF0F1F088234AF0EE0FCC +:106CC000FF1FBB1F661F771F881F91505040A9F7F9 +:106CD0009E3F510580F00C9483350C940F365F3F36 +:106CE000E4F3983ED4F3869577956795B795F79535 +:106CF000E7959F5FC1F7FE2B880F911D96958795AD +:106D000097F90895F894FFCFE7100F1162110F1152 +:106D1000621142117A11621177128412B014B01408 +:106D2000B914B914BB14B914B914B914B014B0140B +:106D3000C014B914B914C014C021C02119221922D9 +:106D40004B22F321F321F3216522D622E622E6220B +:106D5000212E252E682E792E842EA32EA62ED92EF6 +:106D6000FA2E762E762E052F082F0C2F322F542F29 +:066D7000572F592F7E2F62 +:106D760001300200000001000000003002000000A7 +:106D8600050100000030020000000106000000308E +:106D960002000000010700000030020408000000A5 +:106DA6000000003002090C00000000000030020163 +:106DB6001500000000000036323331F7F66766979B +:106DC600C6343500000000000180005F082B0E0A63 +:106DD6000E060E020EF4F5010021007F22000300CC +:106DE6004A004A4A01F6F731333236674C41594573 +:106DF600520042617365200047616D652000526153 +:106E0600697365004C6F776572004C4F434B0043C6 +:106E1600617073004E756D005363726C0020202004 +:106E2600202000534F4C415200544D505354008182 +:106E36008283E200E900EA00B500B600B700CD00A3 +:106E46008301CC008A0192019401210223022402CB +:106E56002502260227022A02B300B4006F00700042 +:106E6600A80200FF0100010000FFFF000001000171 +:106E7600FF000008101818100800000102020202A4 +:106E860002020202020240227B99017701FC000005 +:066E96000C190C390C0080 :00000001FF From 806e168df26e91d2432bae528435b6aac0a346ad Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Fri, 5 Nov 2021 01:29:14 -0400 Subject: [PATCH 044/155] Added rotary encoder LED animation and stretch timer first iteration. --- keyboards/solartempest/9e/9e VIA keymap.json | 5 + keyboards/solartempest/9e/9e VIA layout.json | 2 +- keyboards/solartempest/9e/A9e.c | 45 - keyboards/solartempest/9e/A9e.h | 12 +- keyboards/solartempest/9e/config.h | 178 +- .../solartempest/9e/keymaps/via/keymap.c | 281 +- keyboards/solartempest/9e/readme.md | 4 +- keyboards/solartempest/9e/rules.mk | 32 +- .../solartempest/9e/solartempest_9e_via.hex | 2430 +++++++++-------- 9 files changed, 1509 insertions(+), 1480 deletions(-) diff --git a/keyboards/solartempest/9e/9e VIA keymap.json b/keyboards/solartempest/9e/9e VIA keymap.json index 21498184e2bd..4e0b8486d73f 100644 --- a/keyboards/solartempest/9e/9e VIA keymap.json +++ b/keyboards/solartempest/9e/9e VIA keymap.json @@ -24,6 +24,11 @@ "name": "Move Window Left", "title": "Move Window Left in Windows", "shortName": "MWL" + }, + { + "name": "Stretch Timer", + "title": "Activate Stretch Timer", + "shortName": "STRT" } ], "layouts": diff --git a/keyboards/solartempest/9e/9e VIA layout.json b/keyboards/solartempest/9e/9e VIA layout.json index cfcaec6e88ed..51cd2f2e6925 100644 --- a/keyboards/solartempest/9e/9e VIA layout.json +++ b/keyboards/solartempest/9e/9e VIA layout.json @@ -32,7 +32,7 @@ "KC_F13", "USER02", "KC_WWW_REFRESH", - "KC_BSPC", + "USER04", "KC_P0", "KC_P1", "KC_P2", diff --git a/keyboards/solartempest/9e/A9e.c b/keyboards/solartempest/9e/A9e.c index 3fc20a1961c1..584df4ba0beb 100644 --- a/keyboards/solartempest/9e/A9e.c +++ b/keyboards/solartempest/9e/A9e.c @@ -17,48 +17,3 @@ */ #include "A9e.h" - -/* #define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 31, 32, 33, 34, 35, \ - 1, 30, 4, 5, 6, 7, 8, 9, \ - 0, 3, 10, 11, 12, 13, 14, 15, \ - 2, 41, 16, 17, 18, 19, 20, 21, 23, 36, \ - 40, 39, 22, 25, \ - 24, \ - 38, 27, 37, \ - 26, 29, \ - 28 )*/ -// E2 Keys Row 1 E4 E5 -// E1 Keys Row 2 E6 -// E3 Keys Row 3 -// E8 E9 E7 - -#ifdef RGB_MATRIX_ENABLE //Add in addressable LED underglow support with physical locations - led_config_t g_led_config = { { - //Key matrix to LED index - { 36, 35, 34, 33, 32, }, - {18, 37, 5, 4, 3, 2, 1, 0, }, - {19, 21, 11, 10, 9, 8, 7, 6, }, - {20, 38, 17, 16, 15, 14, 13, 12, 22, 31, }, - { 39, 40, 23, 25, }, - { 24, }, - { 41, 26, 30, }, - { 27, 29, }, - { 28, NO_LED, NO_LED, NO_LED, } - }, { - // LED Key Index to Physical Position, calculated with Plot Digitizer and scaled PCB Image with center at {110,110} - {150,98},{132,98},{116,98},{100,98},{84,98},{60,98}, - {150,80},{132,80},{116,80},{100,80},{84,80},{60,80}, - {150,64},{132,64},{116,64},{100,64},{84,64},{60,64}, - - {16,85},{7,76},{16,66},{24,76}, {192,74},{184,62}, - {192,52},{202,62}, {192,30},{184,20},{192,8},{202,19}, - - {209,32},{211,71},{191,105},{141,105},{101,104},{76,104}, - {52,98},{30,89},{30,63},{52,50},{141,44},{181,32} - }, { // LED Index to Flag. - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, // 4 for 18-key backlight. - 1,1,1,1,1,1,1,1,1,1,1,1, // 1 for 3*4LED large rotary encoders. - 2,2,2,2,2,2,2,2,2,2,2,2 // 2 for 12-case underglow. - } }; -#endif diff --git a/keyboards/solartempest/9e/A9e.h b/keyboards/solartempest/9e/A9e.h index cc6481b19bb5..e70c429d6179 100644 --- a/keyboards/solartempest/9e/A9e.h +++ b/keyboards/solartempest/9e/A9e.h @@ -16,20 +16,18 @@ * along with this program. If not, see . */ -#ifndef A9E_H - #define A9E_H +#pragma once +#include "quantum.h" - #include "quantum.h" - - #define KEYMAP( \ + #define LAYOUT( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ K303, K304, K305, K306, K307, K308, K309, K310, K311 \ - ) { \ + ) \ + { \ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \ { KC_NO, KC_NO, KC_NO, K303, K304, K305, K306, K307, K308, K309, K310, K311 } \ } -#endif diff --git a/keyboards/solartempest/9e/config.h b/keyboards/solartempest/9e/config.h index a74b280bfb3b..a839aee2d30b 100644 --- a/keyboards/solartempest/9e/config.h +++ b/keyboards/solartempest/9e/config.h @@ -16,125 +16,81 @@ * along with this program. If not, see . */ -#ifndef CONFIG_H - #define CONFIG_H +#pragma once +#include "config_common.h" - #include "config_common.h" +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x414B // AK +#define PRODUCT_ID 0x0009 // 9e +#define DEVICE_VER 0x0001 +#define MANUFACTURER Atlantis +#define PRODUCT A9e +#define DESCRIPTION Keyboard - /* USB Device descriptor parameter */ - #define VENDOR_ID 0x414B // AK - #define PRODUCT_ID 0x0009 // 9e - #define DEVICE_VER 0x0001 - #define MANUFACTURER Atlantis - #define PRODUCT A9e - #define DESCRIPTION Keyboard +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 - /* key matrix size */ - #define MATRIX_ROWS 4 - #define MATRIX_COLS 12 +/* key matrix pins */ +#define MATRIX_ROW_PINS { F0, F1, F2, F3 } +#define MATRIX_COL_PINS { F5, F6, F7, A0, A1, A2, A3, A4, A5, B7, B6, B5 } //F5, F7, B7, B5 are unused on the MCU. They are needed for the encoder key matrix. +#define UNUSED_PINS - /* key matrix pins */ - #define MATRIX_ROW_PINS { F0, F1, F2, F3 } - #define MATRIX_COL_PINS { F5, F6, F7, A0, A1, A2, A3, A4, A5, B7, B6, B5 } //F5, F7, B7, B5 are unused on the MCU. They are needed for the encoder key matrix. - #define UNUSED_PINS +/* encoder pins */ +#define ENCODERS_PAD_A { C0, C3, C5, C7, D1, D3, D5, D6, A7 } //Encoder pads ordered so on VIA mapping it is cw/ccw and up/down rotation orientation. +#define ENCODERS_PAD_B { C1, C2, C4, C6, D0, D2, D4, D7, A6 } +#define ENCODER_RESOLUTIONS { 4, 4, 4, 4, 4, 4, 4, 2, 2 } //Better control of individual encoders and encoder types. +//#define ENCODER_RESOLUTION 4 - /* encoder pins */ - #define ENCODERS_PAD_A { C0, C3, C5, C7, D1, D3, D5, D6, A7 } //Encoder pads ordered so on VIA mapping it is cw/ccw and up/down rotation orientation. - #define ENCODERS_PAD_B { C1, C2, C4, C6, D0, D2, D4, D7, A6 } - #define ENCODER_RESOLUTIONS { 4, 4, 4, 4, 4, 4, 4, 2, 2 } //Better control of individual encoders and encoder types. - //#define ENCODER_RESOLUTION 4 +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW - /* COL2ROW or ROW2COL */ - #define DIODE_DIRECTION COL2ROW +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 - /* Set 0 if debouncing isn't needed */ - #define DEBOUNCE 5 +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE - /* 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 - /* Locking resynchronize hack */ - #define LOCKING_RESYNC_ENABLE +#define RGB_DI_PIN E6 +#define RGBLIGHT_ANIMATIONS +#define RGBLIGHT_EFFECT_SNAKE_LENGTH 1 //Default 4 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#define RGBLIGHT_LAYERS +#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF +#define RGBLIGHT_SLEEP // 18 keys, 9*3 encoders = 45 keys +#define RGBLED_NUM 42 // 18 keys + 12 encoders + 12 underglow for RGBLIGHT +#define RGBLIGHT_LIMIT_VAL 180 - #define RGB_DI_PIN E6 - #ifdef RGB_DI_PIN - #define RGBLIGHT_ANIMATIONS - #define RGBLIGHT_HUE_STEP 8 - #define RGBLIGHT_SAT_STEP 8 - #define RGBLIGHT_VAL_STEP 8 - #define RGBLIGHT_LAYERS - #define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF - #define RGBLIGHT_SLEEP // 18 keys, 9*3 encoders = 45 keys - #define RGBLED_NUM 42 // 18 keys + 12 encoders + 12 underglow for RGBLIGHT - #define RGBLIGHT_LIMIT_VAL 180 - - //RGB LED Conversion macro from physical array to electric array - //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping - #define LED_LAYOUT( \ - L01, L03, L05, L07, L08, \ - L10, L11, L12, L13, L14, L15, L16, L17, \ - L20, L21, L22, L23, L24, L25, L26, L27, \ - L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, \ - L41, L46, L47, L49, \ - L58, \ - L67, L68, L69, \ - L77, L79, \ - L88 )\ - { \ - L17,L16,L15,L14,L13,L12,L27,L26,L25,L24,L23,L22,L37,L36,L35,L34,L33,L32,L10,L20,L30,L21,L38,L47,L58,L49,L68,L77,L88,L79,L69,L39,L08,L07,L05,L03,L01,L11,L31,L41,L46,L67, \ - } - //RGB LED logical order map - //Left encoder -> keys -> right encoders -> backlight - #define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 31, 32, 33, 34, 35, \ - 1, 30, 4, 5, 6, 7, 8, 9, \ - 0, 3, 10, 11, 12, 13, 14, 15, \ - 2, 41, 16, 17, 18, 19, 20, 21, 23, 36, \ - 40, 39, 22, 25, \ - 24, \ - 38, 27, 37, \ - 26, 29, \ - 28 ) - #endif - - #ifdef RGB_MATRIX_ENABLE // For dynamic RGB Matrix effects - #define DRIVER_LED_TOTAL 42 // The number of LEDs connected for matrix, 18 keys + 12 encoders + 12 underglow - #define RGB_MATRIX_CENTER { 110, 110 }; - #define RGB_MATRIX_KEYPRESSES - #define DISABLE_RGB_MATRIX_ALPHAS_MODS //Remove effects not desired - #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN - #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT - #define DISABLE_RGB_MATRIX_BAND_SAT - #define DISABLE_RGB_MATRIX_BAND_VAL - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL - #define DISABLE_RGB_MATRIX_CYCLE_ALL - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL - #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON - #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL - #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL - #define DISABLE_RGB_MATRIX_DUAL_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS - #define DISABLE_RGB_MATRIX_RAINDROPS - #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS - #define DISABLE_RGB_MATRIX_HUE_BREATHING - #define DISABLE_RGB_MATRIX_HUE_PENDULUM - #define DISABLE_RGB_MATRIX_HUE_WAVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS - #define DISABLE_RGB_MATRIX_SPLASH - #define DISABLE_RGB_MATRIX_MULTISPLASH - #define DISABLE_RGB_MATRIX_SOLID_SPLASH - #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH - #endif - - -#endif +//RGB LED Conversion macro from physical array to electric array +//First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping +#define LED_LAYOUT( \ + L01, L03, L05, L07, L08, \ + L10, L11, L12, L13, L14, L15, L16, L17, \ + L20, L21, L22, L23, L24, L25, L26, L27, \ + L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, \ + L41, L46, L47, L49, \ + L58, \ + L67, L68, L69, \ + L77, L79, \ + L88 )\ + { \ + L17,L16,L15,L14,L13,L12,L27,L26,L25,L24,L23,L22,L37,L36,L35,L34,L33,L32,L10,L20,L30,L21,L38,L47,L58,L49,L68,L77,L88,L79,L69,L39,L08,L07,L05,L03,L11,L31,L41,L46,L67, \ + } +//RGB LED logical order map +//Left encoder -> keys -> right encoders -> backlight +#define RGBLIGHT_LED_MAP LED_LAYOUT( \ + 31, 32, 33, 34, 35, \ +3, 30, 4, 5, 6, 7, 8, 9, \ +0, 2, 10, 11, 12, 13, 14, 15, \ +1, 41, 16, 17, 18, 19, 20, 21, 25, 36, \ + 40, 39, 22, 24, \ + 23, \ + 38, 29, 37, \ + 26, 28, \ + 27 ) diff --git a/keyboards/solartempest/9e/keymaps/via/keymap.c b/keyboards/solartempest/9e/keymaps/via/keymap.c index 6b53279aa6bd..7d77a1d9e281 100644 --- a/keyboards/solartempest/9e/keymaps/via/keymap.c +++ b/keyboards/solartempest/9e/keymaps/via/keymap.c @@ -1,26 +1,57 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . +*/ + #include "A9e.h" -#include QMK_KEYBOARD_H #ifdef RGBLIGHT_ENABLE extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT + + bool is_encoder1_rotate = false; // For encoder animated LEDs + bool is_encoder6_rotate = false; + bool is_encoder7_rotate = false; + bool encoder_effect = false; + uint16_t encoder_timer = 0; + uint16_t encoder_interval = 500; #endif bool is_alt_tab_active = false; // Super Alt Tab Code uint16_t alt_tab_timer = 0; + +bool is_stretch_active = false; // Stretch Timer Code +bool is_stretch_time = false; +uint32_t stretch_timer = 0; + #ifdef VIA_ENABLE enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = USER00, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML //Move window to monitor on left + ATABF = USER00, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + STRT //Stretch Timer }; #else enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML //Move window to monitor on left + ATABF = SAFE_RANGE, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + STRT //Stretch Timer }; #endif @@ -31,7 +62,7 @@ uint16_t alt_tab_timer = 0; // E3 Keys Row 3 // E8 E9 E7 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( + [0] = LAYOUT( KC_LEFT, KC__MUTE, KC_RIGHT, //Rotary Encoder 1 TO(1), TO(2), TO(3), KC_P7, KC_P8, KC_P9, //Keys Row 1 RGB_VAD, KC_SPACE, RGB_VAI, //Rotary Encoder 4 @@ -45,7 +76,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { C(KC_PMNS), KC__MUTE, C(KC_PPLS), //Rotary Encoder 9 C(S(KC_TAB)), C(KC_T), C(KC_TAB) //Rotary Encoder 7 ), - KEYMAP( + [1] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -59,7 +90,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [2] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -73,7 +104,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [3] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -87,7 +118,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [4] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -101,7 +132,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [5] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -115,7 +146,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [6] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -129,7 +160,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [7] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -143,7 +174,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [8] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -157,7 +188,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 ), - KEYMAP( + [9] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 @@ -174,12 +205,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -/*const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { //Code is not required - switch (id) { - } - return MACRO_NONE; -}*/ - void matrix_init_user(void) { } @@ -190,6 +215,52 @@ void matrix_scan_user(void) { is_alt_tab_active = false; } } + + + #ifdef RGBLIGHT_ENABLE //Add rotation animations underneath rotary encoders when turning + if (!encoder_effect && is_encoder1_rotate) { //Turn on the effect for encoder 1 + rgblight_set_effect_range(0, 4); + rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); + is_encoder1_rotate = false; + encoder_effect = true; + } else if (!encoder_effect && is_encoder6_rotate) { //Turn on the effect for encoder 6 + rgblight_set_effect_range(22, 4); + rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); + is_encoder6_rotate = false; + encoder_effect = true; + } else if (!encoder_effect && is_encoder7_rotate) { //Turn on the effect for encoder 7 + rgblight_set_effect_range(26, 4); + rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); + is_encoder7_rotate = false; + encoder_effect = true; + } else if (!is_encoder1_rotate && !is_encoder6_rotate && !is_encoder7_rotate && timer_elapsed(encoder_timer) > encoder_interval) { //Turn off the animated LED effect + if(encoder_effect){ + rgblight_set_effect_range(0, 42); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); + if(is_stretch_time){ + rgblight_sethsv_at(0,230,100,40); //Set LED to orange to indicate timer is on + } + } + is_encoder1_rotate = false; + is_encoder6_rotate = false; + is_encoder7_rotate = false; + encoder_effect = false; + } else { + is_encoder1_rotate = false; //Wait until encoder is turned again + is_encoder6_rotate = false; + is_encoder7_rotate = false; + } + #endif + + #ifdef RGBLIGHT_ENABLE //Stretch timer code + if (is_stretch_active && !is_stretch_time) { + if (timer_elapsed(stretch_timer) > 2700000) { //Change RGB after 5s (Configurable. Test for 5s. 45 minutes is 2,700,000. 1 hour is 3,600,000) + rgblight_set_effect_range(0, 42); + rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); + is_stretch_time = true; + } + } + #endif } bool process_record_user(uint16_t keycode, keyrecord_t *record) { @@ -241,6 +312,32 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { unregister_code(KC_LSFT); } return true; + + case STRT: //Stretch timer + if (record->event.pressed) { + is_stretch_active ^= 1; + stretch_timer = timer_read(); + //rgblight_sethsv_at(75,215,80,41); + if(is_stretch_time==1) { //Check if it is time to stretch, then dismiss the animation. + rgblight_set_effect_range(0, 42); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); + rgblight_sethsv_at(0,230,100,40); //Set LED to orange to indicate timer is on + is_stretch_active = 1; + is_stretch_time = 0; + } + else if(is_stretch_active==1) { + rgblight_set_effect_range(0, 42); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); + rgblight_sethsv_at(0,230,100,40); //Set LED to orange to indicate timer is on + is_stretch_time = 0; + } + else { + rgblight_set_effect_range(0, 42); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set back to layer colours + is_stretch_time = 0; + } + } + return false; } return true; } @@ -252,10 +349,14 @@ bool encoder_update_user(uint8_t index, bool clockwise) if (clockwise) { action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + is_encoder1_rotate = true; + encoder_timer = timer_read(); } else { action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + is_encoder1_rotate = true; + encoder_timer = timer_read(); } } else if (index == 1) { /* 2 encoder */ @@ -302,20 +403,28 @@ bool encoder_update_user(uint8_t index, bool clockwise) if (clockwise) { action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + is_encoder6_rotate = true; + encoder_timer = timer_read(); } else { action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + is_encoder6_rotate = true; + encoder_timer = timer_read(); } } else if (index == 6) { /* 7 encoder */ if (clockwise) { action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + is_encoder7_rotate = true; + encoder_timer = timer_read(); } else { action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); + is_encoder7_rotate = true; + encoder_timer = timer_read(); } } else if (index == 7) { /* 8 encoder */ @@ -342,76 +451,66 @@ bool encoder_update_user(uint8_t index, bool clockwise) } -#ifdef RGBLIGHT_ENABLE - // RGB Layer Light Settings - Note that this will fix the key switches with same LED colour and brightness - const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 95,255,90}); //Spring green - const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 30,255,120}); //Yellow-orange - const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 128,255,100}); //Cyan - const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 215,255,120}); //Magenta - const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 2, 43,100,160}); //White-left caps lock indication (No dedicated LED) - const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({8, 2, 43,100,150}); //White-right num lock indication (No dedicated LED) - const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({6, 2, 43,100,160}); //White-middle scroll lock indication (No dedicated LED) - const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers - my_layer0_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_capslock_layer, //Highest status indicators override other layers - my_numlock_layer, - my_scrollock_layer - ); -#endif +// RGB Layer Light Settings - Note that this will fix the key switches with same LED colour and brightness +const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 95,255,90}); //Spring green +const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 30,255,120}); //Yellow-orange +const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 128,255,100}); //Cyan +const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 215,255,120}); //Magenta +const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 2, 43,100,160}); //White-left caps lock indication (No dedicated LED) +const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({8, 2, 43,100,150}); //White-right num lock indication (No dedicated LED) +const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({6, 2, 43,100,160}); //White-middle scroll lock indication (No dedicated LED) + + +const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers + my_layer0_layer, + my_layer1_layer, + my_layer2_layer, + my_layer3_layer, + my_capslock_layer, //Highest status indicators override other layers + my_numlock_layer, + my_scrollock_layer +); + void keyboard_post_init_user(void) { - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE rgblight_layers = my_rgb_layers;// Enable the LED layers rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 layer_move(0); //start on layer 0 to get the lighting activated - #endif } -#ifdef RGBLIGHT_ENABLE - layer_state_t layer_state_set_user(layer_state_t state) - { - rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active - rgblight_set_layer_state(1, layer_state_cmp(state, 1)); - rgblight_set_layer_state(2, layer_state_cmp(state, 2)); - rgblight_set_layer_state(3, layer_state_cmp(state, 3)); - - switch(biton32(state)){ // Change all other LEDs based on layer state as well - case 0: - rgblight_sethsv_noeeprom(50,255,30); - break; - case 1: - rgblight_sethsv_noeeprom(30,255,30); - break; - case 2: - rgblight_sethsv_noeeprom(106,255,30); - break; - case 3: - rgblight_sethsv_noeeprom(215,255,30); - break; - default: - rgblight_sethsv_noeeprom(64,255,30); - } - return state; - } +layer_state_t layer_state_set_user(layer_state_t state) +{ + rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active + rgblight_set_layer_state(1, layer_state_cmp(state, 1)); + rgblight_set_layer_state(2, layer_state_cmp(state, 2)); + rgblight_set_layer_state(3, layer_state_cmp(state, 3)); + + switch(biton32(state)){ // Change all other LEDs based on layer state as well + case 0: + rgblight_sethsv_noeeprom(50,255,30); + break; + case 1: + rgblight_sethsv_noeeprom(30,255,30); + break; + case 2: + rgblight_sethsv_noeeprom(106,255,30); + break; + case 3: + rgblight_sethsv_noeeprom(215,255,30); + break; + default: + rgblight_sethsv_noeeprom(64,255,30); + } + return state; +} - bool led_update_user(led_t led_state) - { - rgblight_set_layer_state(4, led_state.caps_lock); //Activate capslock lighting layer - rgblight_set_layer_state(5, !(led_state.num_lock)); //Invert the indication so numlock does not always appear "on". - rgblight_set_layer_state(6, led_state.scroll_lock); //Activate scrollock lighting layer - return true; - } -#endif + +bool led_update_user(led_t led_state) +{ + rgblight_set_layer_state(4, led_state.caps_lock); //Activate capslock lighting layer + rgblight_set_layer_state(5, !(led_state.num_lock)); //Invert the indication so numlock does not always appear "on". + rgblight_set_layer_state(6, led_state.scroll_lock); //Activate scrollock lighting layer + return true; +} diff --git a/keyboards/solartempest/9e/readme.md b/keyboards/solartempest/9e/readme.md index 38b472d3326a..30353b2d00a1 100644 --- a/keyboards/solartempest/9e/readme.md +++ b/keyboards/solartempest/9e/readme.md @@ -12,8 +12,9 @@ For detailed instructions on using VIA and flashing, please refer to the section # Custom Features: -- 9 remappable rotary encoder controling a variety of different things! +- 9 remappable rotary encoder controlling a variety of different things! - RGB underglow support and remapped to physical locations. +- When turning the 3 large rotary encoders the RGB LEDs underneath animate. - Adds custom layer lighting with custom gradients for each and static colours for the switches. - Adds white caps lock, scroll lock, and num lock key indicators on the top row. - VIA support included by default. @@ -32,6 +33,7 @@ Make example for this keyboard (after setting up your build environment): - You will need to use an ISP Programmer to directly flash the 9e. No board reset is required, as you will flash the MCU directly. - I used Prog ISP V2.0 but other AVR programmers will also work. - Use a 12P AWM 20624 ribbon cable with FCP-12P-1.0mm breakout board. Only 10 pins are used. +- Plug in the ribbon cable with the data pins facing away from the PCB. ## Using with VIA diff --git a/keyboards/solartempest/9e/rules.mk b/keyboards/solartempest/9e/rules.mk index 782755a42c25..5c83fafe8829 100644 --- a/keyboards/solartempest/9e/rules.mk +++ b/keyboards/solartempest/9e/rules.mk @@ -44,20 +44,18 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096 # Build Options # comment out to disable the options. -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -TERMINAL_ENABLE = no # Terminal interface feature, very large. -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -RGBLIGHT_ENABLE = no # RGB LEDs -RGB_MATRIX_ENABLE = no # RGB matrix for individual LED control (In progress only) -RGB_MATRIX_DRIVER = WS2812 # Addressable LED strand driver -RGBLIGHT_SLEEP = yes # LEDs off when sleeping -NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -KEY_LOCK_ENABLE = no # Key lock functionality -ENCODER_ENABLE = yes # Encoders -LTO_ENABLE = yes # Save space -LEADER_ENABLE = no # Leader keys -COMBO_ENABLE = no # Combo keys -UNICODE_ENABLE = no # Unicode +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +TERMINAL_ENABLE = no # Terminal interface feature, very large. +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +RGBLIGHT_ENABLE = yes # RGB LEDs +RGBLIGHT_SLEEP = yes # LEDs off when sleeping +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +KEY_LOCK_ENABLE = no # Key lock functionality +ENCODER_ENABLE = yes # Encoders +LTO_ENABLE = yes # Save space +LEADER_ENABLE = no # Leader keys +COMBO_ENABLE = no # Combo keys +UNICODE_ENABLE = no # Unicode \ No newline at end of file diff --git a/keyboards/solartempest/9e/solartempest_9e_via.hex b/keyboards/solartempest/9e/solartempest_9e_via.hex index 2a587000b62c..d2c99f66aa0c 100644 --- a/keyboards/solartempest/9e/solartempest_9e_via.hex +++ b/keyboards/solartempest/9e/solartempest_9e_via.hex @@ -1,9 +1,9 @@ :100000000C94A3040C94EA040C94EA040C94EA04FF :100010000C94EA040C94EA040C94EA040C94EA04A8 -:100020000C94EA040C94EA040C94F8280C94B42878 -:100030000C94F3290C94EA040C94EA040C94EA045A +:100020000C94EA040C94EA040C947A290C94362972 +:100030000C94752A0C94EA040C94EA040C94EA04D7 :100040000C94EA040C94EA040C94EA040C94EA0478 -:100050000C94EA040C94CF290C94EA040C94EA045E +:100050000C94EA040C94512A0C94EA040C94EA04DB :100060000C94EA040C94EA040C94EA040C94EA0458 :100070000C94EA040C94EA040C94EA040C94EA0448 :100080000C94EA040C94EA040C94EA040C94EA0438 @@ -147,22 +147,22 @@ :100920000200010803410039006500000012034184 :100930000074006C0061006E0074006900730000B8 :1009400000040309040011241FBECFEFD0E1DEBF75 -:10095000CDBF04B603FE27C080915E0390915F0374 -:10096000A0916003B09161038730904BA740B04BDA -:10097000D1F410925E0310925F0310926003109204 -:10098000610314BE84B7877F84BF0FB6F894A8951F +:10095000CDBF04B603FE27C0809164039091650368 +:10096000A0916603B09167038730904BA740B04BCE +:10097000D1F41092640310926503109266031092F2 +:10098000670314BE84B7877F84BF0FB6F894A89519 :1009900080916000886180936000109260000FBEBB :1009A000E0E0F8E7099523E0AEEBB1E001C01D926D -:1009B000AE35B207E1F711E0A0E0B1E0E6EFF3E613 -:1009C00002C005900D92AE3BB107D9F70E941A2ADA -:1009D0000C94C2310C940000E8EDF0E080818C7F33 +:1009B000A436B207E1F711E0A0E0B1E0EAEFF4E617 +:1009C00002C005900D92AE3BB107D9F70E949C2A58 +:1009D0000C9444320C940000E8EDF0E080818C7FB0 :1009E00080831092E2001092DA001092E100A0EEF3 :1009F000B0E08C9181608C9380818F77808319BC6B :100A0000A7EDB0E08C918E7F8C9380818F7E808368 -:100A100010922A0308952091E4003091E50095E6B4 +:100A10001092AD0208952091E4003091E50095E632 :100A2000A9012091EC00822F817020FF06C08091E7 :100A3000E80080FF06C080E008952091E80022FDD4 -:100A40001AC080914F03882389F0853089F0809106 +:100A40001AC08091D202882389F0853089F0809184 :100A5000EB0085FD0FC02091E4003091E5004217C6 :100A60005307F9F29150E1F684E0089582E0089589 :100A700083E0089581E00895EF92FF920F931F9312 @@ -170,10 +170,10 @@ :100A90008091E80085FD0BC08091E8008E778093FF :100AA000E8000E940B05882399F3C82F08C0F701BE :100AB00081917F018093F1000150110949F78C2F3A -:100AC000CF911F910F91FF90EF9008958091510366 +:100AC000CF911F910F91FF90EF9008958091D402E4 :100AD00087FF13C08091E80082FF06C08091E80084 -:100AE0008B778093E80004C080914F038111F2CF8F -:100AF000089580914F038823D9F38091E80080FF07 +:100AE0008B778093E80004C08091D2028111F2CF0D +:100AF00008958091D2028823D9F38091E80080FF85 :100B0000F8CF8091E8008E77ECCF982F9093E90092 :100B1000242F762F50E0891731F07091EC0020914E :100B2000ED005091F00021FD07C09F5F973071F7F5 @@ -183,49 +183,49 @@ :100B6000F0002091EE0027FDE0CF80E00895CF92C5 :100B7000DF92EF92FF920F931F93CF93DF93C8ED15 :100B8000D0E088818F7E8883E7EDF0E0808181600E -:100B9000808381E080932A0388818C7F888302EEA2 +:100B9000808381E08093AD0288818C7F888302EE20 :100BA00010E0D8011C921092DA0081EEC82ED12CF0 :100BB000D6011C9288818F7788838881806888839A :100BC00088818F7D888380818068808319BC1092A2 -:100BD0004F031092500310924E0310924D0390EE6B +:100BD000D2021092D3021092D1021092D00290EE63 :100BE000E92EF12CF70180818B7F808388818160E1 :100BF000888342E060E080E00E948505D6018C9108 :100C00008E7F8C93F80180818160808380818860F1 :100C10008083D7018C918E7F8C93888180618883BB :100C2000DF91CF911F910F91FF90EF90DF90CF90C8 -:100C30000895FC01809157039091580386179707F8 +:100C30000895FC018091DA029091DB0286179707F4 :100C4000A0F06115710529F49091E8009E779093CA :100C5000E80090E06115710551F4911108C0809190 :100C6000E80082FF33C080E00895BC01F2CF80919C -:100C70004F038823B9F18530B9F18091E80083FDF5 +:100C7000D2028823B9F18530B9F18091E80083FD73 :100C80002FC08091E80082FDEACF8091E80080FFCC :100C9000E1CF2091F2003091F3006115710519F058 :100CA0002830310558F091E02830310509F090E006 :100CB0002091E8002E772093E800CCCF819180939B -:100CC000F100615071092F5F3F4FE7CF80914F03D3 +:100CC000F100615071092F5F3F4FE7CF8091D20251 :100CD000882341F0853041F08091E80083FFBFCF49 -:100CE00081E0089582E0089583E0089580912C03C7 -:100CF00008959C014FB7F8948091210390912203AD -:100D0000A0912303B09124034FBF821B930B08953E -:100D10002FB7F8948091210390912203A09123038F -:100D2000B09124032FBF089520911E0330911F031B -:100D30002817390771F090931F0380931E03E091E9 -:100D40001C03F0911D03309721F00084F185E02D04 -:100D50000994089520911A0330911B03281739072D -:100D600071F090931B0380931A03E0911C03F091A0 -:100D70001D03309721F00680F781E02D0994089536 -:100D8000E0911C03F0911D03309721F00190F08158 +:100CE00081E0089582E0089583E008958091AF0245 +:100CF00008959C014FB7F8948091A4029091A502A9 +:100D0000A091A602B091A7024FBF821B930B08953A +:100D10002FB7F8948091A4029091A502A091A60209 +:100D2000B091A7022FBF08952091A1023091A20295 +:100D30002817390771F09093A2028093A102E091E5 +:100D40009F02F091A002309721F00084F185E02D00 +:100D50000994089520919D0230919E022817390729 +:100D600071F090939E0280939D02E0919F02F0911A +:100D7000A002309721F00680F781E02D09940895B4 +:100D8000E0919F02F091A002309721F00190F08154 :100D9000E02D099480E00895FA01811101C0FB0162 -:100DA0000994089580911503982F9E7F61F48170B6 -:100DB00082608093150380911803853B18F084EBC3 -:100DC0008093180308958A34B0F381708864F1CF5A +:100DA0000994089580915F03982F9E7F61F481706C +:100DB000826080935F0380916203853B18F084EB2F +:100DC0008093620308958A34B0F381708864F1CF10 :100DD000AF92BF92DF92EF92FF920F931F93CF9348 :100DE000DF93182F062FE901453B08F044EBE42F71 :100DF000F0E0E853FD4F011110C0E4915E2F4E2F3B :100E00004983E8835A83DF91CF911F910F91FF901F :100E1000EF90DF90BF90AF900895202F30E0449185 :100E2000D42EE42EF12C56E0159FC0011124EFEFD3 -:100E3000F0E0BF010E94C330812F90E0880F991F1E +:100E3000F0E0BF010E944531812F90E0880F991F9B :100E400055E5569FD001579FB00D11248A1B9B0B6F :100E5000982F990F890F5F01A21AB30AAE9CD00197 :100E6000AF9CB00DBE9CB00D11245B2F089F80017C @@ -238,52 +238,52 @@ :100ED00097CF6430710569F080F06630710509F4D0 :100EE0008FCFF4CFE42F4B2F592F8ACFE42F412FF0 :100EF00087CFEB2F542F492F83CF4B2F5D2DE12F21 -:100F00007FCF0E9488069C01909184028091850287 -:100F1000982B21F0309381022093800290918602D9 -:100F200080918702982B21F030937F0220937E02DC -:100F3000E0911C03F0911D03309749F082E080930B -:100F400082020480F581E02D82E892E00994089500 -:100F500040918402803F59F48091850287FF0DC043 -:100F60001092850241110BC010927C0208C0813F93 -:100F700081F48091850218169CF3442381F08091BE -:100F8000860290918702892B09F05AC010927B0249 -:100F90000895823F49F447FFF0CF10928402809178 -:100FA00085028111ECCFE0CF833F19F41416ACF326 -:100FB000E4CF90918602893F29F41916F4F6109235 -:100FC0008602DBCF8A3F19F497FFD7CFF8CF9091F5 -:100FD00087028B3F29F497FFD0CF10928702CDCFA5 +:100F00007FCF0E9488069C0190918A0280918B027B +:100F1000982B21F0309387022093860290918C02C7 +:100F200080918D02982B21F03093850220938402CA +:100F3000E0919F02F091A002309749F082E0809307 +:100F400088020480F581E02D88E892E009940895F4 +:100F500040918A02803F59F480918B0287FF0DC037 +:100F600010928B0241110BC01092820208C0813F87 +:100F700081F480918B0218169CF3442381F08091B8 +:100F80008C0290918D02892B09F05AC01092810237 +:100F90000895823F49F447FFF0CF10928A02809172 +:100FA0008B028111ECCFE0CF833F19F41416ACF320 +:100FB000E4CF90918C02893F29F41916F4F610922F +:100FC0008C02DBCF8A3F19F497FFD7CFF8CF9091EF +:100FD0008D028B3F29F497FFD0CF10928D02CDCF99 :100FE0008C3F19F41916CCF3C8CF9CE0980F9530BC :100FF00090F4845F990B21E030E0B90102C0660FE4 -:10100000771F8A95E2F7CB0180959091830289231F -:1010100080938302B2CF8D3F31F480917D028E7F29 -:1010200080937D02AACF8E3F21F480917D028D7F37 -:10103000F7CF8F3F09F0A1CF80917D028B7FF0CF5A -:10104000089580917D0280FD16C081FD16C082FD4D -:1010500016C080917B028823A1F0883280F428E0BA -:10106000829FC001112468E270E00E94D730862F71 +:10100000771F8A95E2F7CB01809590918902892319 +:1010100080938902B2CF8D3F31F4809183028E7F1D +:1010200080938302AACF8E3F21F4809183028D7F2B +:10103000F7CF8F3F09F0A1CF809183028B7FF0CF54 +:1010400008958091830280FD16C081FD16C082FD47 +:1010500016C0809181028823A1F0883280F428E0B4 +:10106000829FC001112468E270E00E945931862FEE :10107000672B39F0089582E0089584E0089588E0B0 -:10108000089581E0089580917D0280FD14C081FD66 -:1010900014C082FD16C080917C02882381F08431C7 +:10108000089581E008958091830280FD14C081FD60 +:1010900014C082FD16C080918202882381F08431C1 :1010A00080F422E3829FC001112464E170E00E9479 -:1010B000D730862F08958CE0089589E1089585E062 +:1010B0005931862F08958CE0089589E1089585E0DF :1010C000089582E30895803F31F40E94430881959A -:1010D000809385020895813F19F40E944308F8CF58 -:1010E000823F31F40E9443088195809384020895E1 +:1010D00080938B020895813F19F40E944308F8CF52 +:1010E000823F31F40E944308819580938A020895DB :1010F000833F19F40E944308F8CF893F29F40E94E6 -:1011000021088093860208958A3F21F40E942108D5 +:10110000210880938C0208958A3F21F40E942108CF :101110008195F7CF8B3F31F40E9421088195809310 -:10112000870208958C3F19F40E942108F8CF9CE0B3 +:101120008D0208958C3F19F40E942108F8CF9CE0AD :10113000980F953070F4845F990B21E030E001C086 -:10114000220F8A95EAF780918302822B8093830293 -:1011500008958D3F31F480917D02816080937D02FE -:1011600008958E3F21F480917D028260F7CF8F3FFA -:10117000B9F780917D028460F1CF80E00895F89402 +:10114000220F8A95EAF780918902822B8093890287 +:1011500008958D3F31F480918302816080938302F2 +:1011600008958E3F21F4809183028260F7CF8F3FF4 +:10117000B9F7809183028460F1CF80E00895F894FC :10118000E82FE295EF70F0E031A1282F2F7081E079 :1011900090E001C0880F2A95EAF7982F9095932345 -:1011A00091A392A1892B82A378940895909125030D +:1011A00091A392A1892B82A3789408959091A8028B :1011B00092FF06C0282F28712830F9F4877F8460B9 :1011C00093FF06C0282F28712831F1F4877E8461AF -:1011D0002091260320FF06C0382F38713830D9F40B +:1011D0002091A90220FF06C0382F38713830D9F489 :1011E000877F816021FF06C0282F28712831D1F424 :1011F000877E816194FD877E0895282F2471243095 :10120000F9F68B7F8860DCCF282F2471243101F719 @@ -296,21 +296,21 @@ :1012700008F09CC0C03ED10560F5C83AD10508F021 :1012800087C0C53AD10508F0FDC0C130D10509F1CC :101290002097F9F0C430D105E0F440C085339105C2 -:1012A00009F45AC0C997C1F680912503837089F06B +:1012A00009F45AC0C997C1F68091A802837089F0E9 :1012B000C0EED0E00EC0833E910599F170F4803EFF -:1012C000910501F1823E910539F68091250382FD59 +:1012C000910501F1823E910539F68091A80282FDD7 :1012D00021C0CE01DF91CF910895863E910561F145 :1012E000873E910571F1843E910509F0B5CF80915B -:1012F000260381FFEECF80912503C7EED0E084FD69 -:101300000DC0E7CF8091250380FD12C19091260387 +:1012F000A90281FFEECF8091A802C7EED0E084FD65 +:101300000DC0E7CF8091A80280FD12C19091A90283 :1013100090FFDFCFC3EED0E084FFDBCFD0E0C0E0B2 -:10132000D8CF8091250382FD06C19091260390FDC0 -:10133000BFCF84FFCECFF2CF8091250383FDDDCFD9 -:10134000C8CF8091250383FDF9C09091260391FFBA -:10135000F0CFC4EED0E0BDCF8091250385FFB9CF9B -:10136000C9E2D0E0B6CF8091250385FFB2CFC5E3B7 -:10137000D0E0AFCF8091250386FFABCFCAE2D0E0AB -:10138000A8CF8091250386FFA4CFC1E3D0E0A1CFF1 +:10132000D8CF8091A80282FD06C19091A90290FDBC +:10133000BFCF84FFCECFF2CF8091A80283FDDDCF57 +:10134000C8CF8091A80283FDF9C09091A90291FFB6 +:10135000F0CFC4EED0E0BDCF8091A80285FFB9CF19 +:10136000C9E2D0E0B6CF8091A80285FFB2CFC5E335 +:10137000D0E0AFCF8091A80286FFABCFCAE2D0E029 +:10138000A8CF8091A80286FFA4CFC1E3D0E0A1CF6F :10139000CF3BD10518F6C85AD0E0CC0FDD1FCF5D8A :1013A000DE4F0990D881C02DD46493CFC11540E29F :1013B000D40758F4C11581E0D80708F08ACFC03FA0 @@ -341,19 +341,19 @@ :10154000C8CE8091350281111092350208958091A4 :10155000340290913302892B90913202892B80932F :10156000C001909135029923A1F0892B8093C0018D -:1015700080911D01882341F18091250387FF24C0BC +:1015700080911D01882341F18091A80287FF24C03A :101580008EE1E2ECF1E090E0815000F591110E94D3 -:10159000A10AE0911C03F0911D033097E1F08091C6 -:1015A0001D01882359F08091250387FF07C0809192 +:10159000A10AE0919F02F091A0023097E1F08091C2 +:1015A0001D01882359F08091A80287FF07C0809110 :1015B000C0018093C10185E08093C0010280F38166 :1015C000E02D80EC91E0099486E0DBCF219122238D :1015D000D9F29F5FD9CF089590911D019923D1F041 -:1015E0009091250397FF16C0E82FE695E695E695BE +:1015E0009091A80297FF16C0E82FE695E695E6953C :1015F000EE31E0F4F0E0E054FE4F282F277081E058 :1016000090E001C0880F2A95EAF78095928189239E :1016100082830895E2ECF1E09191891303C0DF0128 :1016200011971C9291E0E83CF907B1F70895909169 -:101630001D019923C1F09091250397FF14C0E82F55 +:101630001D019923C1F09091A80297FF14C0E82FD3 :10164000E695E695E695EE31F8F4F0E0E054FE4FCD :10165000877021E030E001C0220F8A95EAF782818D :10166000822B82830895A2ECB1E0EFEF90E02D9100 @@ -373,8 +373,8 @@ :101740002527242325272C9301968430910561F7C2 :10175000089590E080E00E94AA0690E080E00E9458 :10176000940610923302109232020E94A70A86E079 -:10177000E2E8F2E0DF011D928A95E9F710927C021F -:1017800010927B0210927D020C9481079093370295 +:10177000E8E8F2E0DF011D928A95E9F71092820213 +:1017800010928102109283020C9481079093370289 :10179000809336020C94A90B882341F08095909198 :1017A00034028923809334020C94A70A0895882375 :1017B00039F090913402982B909334020C94A70A3C @@ -389,11 +389,11 @@ :10184000809590913402892380933402CBCF9BE51D :10185000980F933020F490E080E00C94AA0698E56D :10186000980F973120F490E080E00C949406803F2C -:1018700020F00E94A8070C948107089590914F03CF -:10188000943029F5809327037093290360932803EC +:1018700020F00E94A8070C94810708959091D2024D +:10188000943029F58093AA027093AC026093AB0266 :101890009093E9008FEF9091E800815095FD06C08C :1018A00095ED9A95F1F700008111F5CF8091E80050 -:1018B00085FF0DC050E040E063E070E087E293E018 +:1018B00085FF0DC050E040E063E070E08AEA92E00E :1018C0000E943C058091E8008E778093E80008959F :1018D000BC0184E00C943E0CBC0183E00C943E0CF3 :1018E0009C0184E08093E9009FEF8091E800915093 @@ -401,17 +401,17 @@ :101900008091E80085FF0CC050E040E066E070E0A8 :10191000C9010E943C058091E8008E778093E80021 :101920000895CF93DF93EC0180911D018823B1F1DD -:101930008091250387FF32C060E284E08093E90054 +:101930008091A80287FF32C060E284E08093E900D2 :101940008FEF9091E800815095FD06C095ED9A9536 :10195000F1F700008111F5CF8091E80085FF1BC0F1 :1019600080911D0170E050E040E0811104C050E022 :1019700040E068E070E0CE010E943C058091E80004 -:101980008E778093E80080E2FE01ADE2B3E0019043 +:101980008E778093E80080E2FE01A0EBB2E0019048 :101990000D928A95E1F7DF91CF91089568E081E09B :1019A000CDCF81E08093E00080E28093D800109258 :1019B000C9008FE19EE40197F1F700C0000087E0C5 -:1019C00090EBDC0180935E0390935F03A093600330 -:1019D000B093610388E19CE00FB6F894A8958093DA +:1019C00090EBDC018093640390936503A09366031E +:1019D000B093670388E19CE00FB6F894A8958093D4 :1019E00060000FBE90936000FFCFCF93C82F882375 :1019F00009F4AEC08238C1F40E94C00681FDA8C0BF :101A000089E30E94170B0E94A70A2FEF81EE94E052 @@ -423,7 +423,7 @@ :101A600087E40E94170B0E94A70A2FEF81EE94E0F3 :101A7000215080409040E1F700C0000087E4CFCFC4 :101A80008CEF8C0F813A88F580911D01882301F13C -:101A90008091250387FF1CC0EC2FE695E695E6951F +:101A90008091A80287FF1CC0EC2FE695E695E6959D :101AA000F0E0E054FE4F828190E04C2F477021E03F :101AB00030E002C0220F331F4A95E2F782239323BE :101AC000892B79F08C2F0E94EC0A0E94A70A09C08A @@ -440,10 +440,10 @@ :101B700031F4812FDF91CF911F910C94E10B8FE90C :101B80009FE00197F1F700C000002197F0CF0F937D :101B90001F93CF93DF93C62FD42F022FFC01828196 -:101BA0008823A1F060935D030E94880690935C03F4 -:101BB00080935B03C77081E001C0880FCA95EAF784 -:101BC000DF91CF911F910F910C94D70B80915D0302 -:101BD000681335C080915B0390915C030E94790685 +:101BA0008823A1F06093E0020E9488069093DF02F0 +:101BB0008093DE02C77081E001C0880FCA95EAF702 +:101BC000DF91CF911F910F910C94D70B8091E00280 +:101BD000681335C08091DE029091DF020E94790681 :101BE000883C910560F510E21D0FCD17B9F080E239 :101BF0008C0F883040F4C77081E001C0880FCA950F :101C0000EAF70E94CC0B183048F481E09D2F9770C2 @@ -452,35 +452,35 @@ :101C3000EAF7DF91CF911F910F910C94CC0BC770F5 :101C400081E001C0880FCA95EAF7F3CFDF91CF9109 :101C50001F910F910895CF93DF93C7EED3E060E01B -:101C6000CE010E944A312196C11588E0D807B9F704 +:101C6000CE010E94CC312196C11588E0D807B9F782 :101C7000DF91CF9108956F927F928F929F92AF9252 :101C8000BF92CF92DF92EF92FF920F931F93CF9369 :101C9000DF9386EFC82E84E0D82E9FE9E92EF12C41 :101CA000E701C056D10936011BC0F501859094901B -:101CB000692DC8010E944A31682DC80101960E9411 -:101CC0004A3182E0A80EB11C0E5F1F4FC017D1072A +:101CB000692DC8010E94CC31682DC80101960E948F +:101CC000CC3182E0A80EB11C0E5F1F4FC017D107A8 :101CD00061F788E1680E711C6896CE15DF0529F062 :101CE0008E01085111095301E0CF7E0180E6E80E14 :101CF000F11C80E6C80ED11C8FE5E81684E0F806DA :101D000079F6DF91CF911F910F91FF90EF90DF90C7 :101D1000CF90BF90AF909F908F907F906F900895DD :101D2000CF93C82F6FEF811161E283E290E00E94B0 -:101D30004A316FEFC11169E084E290E00E944A31BC -:101D40006FEFC11161E185E290E0CF910C944A31CF -:101D500080E00E94900E60E086E290E00E944A31AE +:101D3000CC316FEFC11161E184E290E00E94CC31BF +:101D40006FEFC11165E085E290E0CF910C94CC314A +:101D500080E00E94900E60E086E290E00E94CC312C :101D60000E943B0E0E942B0E81E00C94900ECF93AC -:101D7000C0912603C2FB992790F9981781F080FB48 -:101D8000C2F9C09326036091250384E090E00E948D -:101D90004A316C2F82E290E0CF910C944A31CF917E +:101D7000C091A902C2FB992790F9981781F080FBC6 +:101D8000C2F9C093A9026091A80284E090E00E9489 +:101D9000CC316C2F82E290E0CF910C94CC31CF917A :101DA00008950F931F93CF93DF93C42FD0E0CC0FF0 :101DB000DD1F28E1629FC00DD11D112430E6839FF5 -:101DC000C00DD11D1124CE0187960E943631082FF7 -:101DD00010E0102F0027CE0188960E94363198011E +:101DC000C00DD11D1124CE0187960E94B831082F75 +:101DD00010E0102F0027CE0188960E94B83198019C :101DE000282BC901DF91CF911F910F910895462FA4 :101DF0008A3038F4743028F46C3018F4672F0C945F :101E0000D10E90E080E00895BF92CF92DF92EF92E2 -:101E1000FF920F931F93CF93DF937C01009159039F -:101E200010915A038091360290913702082B192B9A +:101E1000FF920F931F93CF93DF937C010091DC021D +:101E20001091DD028091360290913702082B192B18 :101E3000CFE0D0E0CC24C394D12CBC2EC6010C2E14 :101E400002C0880F991F0A94E2F780239123892BFF :101E500071F4219790F7B12C8B2DDF91CF911F91C9 @@ -489,25 +489,25 @@ :101E8000CF93DF93EC010E94040FBE010E94F70E76 :101E9000DF91CF910C941909FC01808191810E94FE :101EA000400F292F2F7092959F7092509E3078F49A -:101EB000E92FF0E0EC53FE4C0C94EB30803F19F02E +:101EB000E92FF0E0EA5BFD4C0C946D31803F19F0A6 :101EC00020F4883E20F481E00895843FE1F380E02F :101ED0000895883EC0F3813FD1F7F5CF822F8695D4 -:101EE00086958695089583E290E00E94363181328E -:101EF00089F484E290E00E943631893059F485E219 -:101F000090E00E94363191E0813109F090E0892F14 +:101EE00086958695089583E290E00E94B83181320C +:101EF00089F484E290E00E94B831813159F485E29E +:101F000090E00E94B83191E0853009F090E0892F8F :101F10008170089580E0FCCFCF9384E090E00E9430 -:101F20003631C82F82E290E00E943631982F8C2FF4 -:101F3000CF91089560911503669570E04BE050E0F5 -:101F40008AE091E00E941C31892B19F481E0809392 -:101F500092020E94880690938C0280938B020895CF +:101F2000B831C82F82E290E00E94B831982F8C2FF0 +:101F3000CF91089560915F03669570E04BE050E0AB +:101F40008AE091E00E949E31892B19F481E0809310 +:101F500098020E94880690939202809391020895BD :101F60004F925F926F927F928F929F92AF92BF92A9 :101F7000CF92DF92EF92FF920F931F93CF93DF9355 :101F8000CDB7DEB7CE57D1090FB6F894DEBF0FBE7E -:101F9000CDBF509019018091150380FF5DC08090E6 -:101FA000890290908A028114910409F068C0EDECD6 +:101F9000CDBF5090190180915F0380FF5DC080909C +:101FA0008F02909090028114910409F068C0EDECCA :101FB000F3E09E012F5F3F4FBE0161587F4FC90183 :101FC000A4914A2F50E0DA01AA0FBB1FA40FB51F3E -:101FD000A956BD4FCD90DD90EC90D901CD92DD9208 +:101FD000AF51BD4FCD90DD90EC90D901CD92DD9207 :101FE000ED929D0131966A177B0751F720911801F8 :101FF00043E0249F800D911D11246E9A2EB12F7BFA :102000003EB130645FB7F894BC01549E600D711D01 @@ -516,1098 +516,1114 @@ :10203000DEBF0FBECDBFDF91CF911F910F91FF90FB :10204000EF90DF90CF90BF90AF909F908F907F9058 :102050006F905F904F90089580911A0190911B01AD -:1020600023E0829FF0011124E956FD4F891708F003 +:1020600023E0829FF0011124EF51FD4F891708F002 :1020700096CF1182108212828F5F3396F7CF8091B4 -:102080008802811194CFD12CC12C66246394712CC9 -:1020900053E0452E8091930293010C2C01C0220F36 +:102080008E02811194CFD12CC12C66246394712CC3 +:1020900053E0452E8091990293010C2C01C0220F30 :1020A0000A94EAF7822309F43CC0F601EE0FFF1F01 :1020B000E80DF91DE590F490E114F10409F477CFEF -:1020C00045E050E0B701CE0101960E94133109812D +:1020C00045E050E0B701CE0101960E9495310981AB :1020D0000F3F39F18A81800F9927991F8B32910523 :1020E00014F08AE290E05C01AA0CBB1C8A0D9B1DD7 -:1020F000DC01A956BD4F5D01049D800111240956E4 +:1020F000DC01AF51BD4F5D01049D800111240F51E2 :102100001D4F0A151B0520F0B5E0EB0EF11CD8CFD2 :1021100098014D816C818B810E94E8060D5F1F4FF5 :10212000F0CFEFEFCE1ADE0AF8E0CF16D10409F0B7 :10213000B1CF3DCFFC014191CF01E8E03EB90000B5 :1021400000C047FF2EB9440F000000C000C000C00F -:102150002EB900C0EA9591F75CCF0F931F93CF93F0 -:10216000DF93EC0110E000E090911C019017110644 -:1021700009F06CF40E94B00F8C8190E001968170A0 -:1021800099278C83DF91CF911F910F910895209112 -:102190001A01A801420F511D9A01220F331F240F6B -:1021A000351F29563D4F4C816091170380911603CE -:1021B00096959017110651F04CF0442349F0409148 -:1021C00018030E94E8060F5F1F4FCECF4423B9F3D8 -:1021D00040E0F7CF8F929F92AF92BF92CF92DF9263 -:1021E000EF92FF920F931F93CF93DF93EC014C81FB -:1021F000042F10E09801D8010E94B3319B01AC017B -:102200000E947E314B015C01E0E2F0E0E01BF10B4B -:10221000A5E5B0E0AC019B010E947E316B017C0121 -:102220009F01DF010E94F8309B01AC010E948931BF -:102230009B01AC01280D391D4A1D5B1DC701B6016C -:102240000E949131F22E822F90E039E23F1560F129 -:1022500043E0249F9001112435952795122F109566 -:1022600000E085E5E82EEF1880911C01081758F171 -:102270000E94B00F9C8181E0992319F0903219F4EB -:102280008FEF8093170180911701890F8C83DF9165 -:10229000CF911F910F91FF90EF90DF90CF90BF9063 -:1022A000AF909F908F90089525E530E0B901681BAD -:1022B000790B9B01220F331F260F371F37FFCCCF1F -:1022C0002F5F3F4FC9CF8E2D01FD8F2D20911A0119 -:1022D000622F600F7727771F9B01220F331F260F76 -:1022E000371F29563D4F412F609117030E94E80682 -:1022F0000F5FBACF0F931F93CF93DF9380911A0193 -:1023000090911B0123E0829FF0011124E956FD4FBB -:10231000891740F1C0E0D3E060911C01C61740F17D -:102320000E94B00F2091150180919502820F809339 -:10233000950290911601920F90931601191654F47C -:10234000082E000C990B40911C014150550B84172D -:1023500095071CF0219520931501DF91CF911F91D6 -:102360000F9108951182108212828F5F3396D0CF21 -:102370000C2F10E070E0C8010E94D73020911A01A4 -:10238000820F482F50E020919502022E000C330B53 -:1023900002171307BCF020911601022E000C330B1C -:1023A000201731077CF08D9F9001112429563D4F55 -:1023B0004091180360911703809116030E94E8066C -:1023C000CF5FAACFFA01EE0FFF1FE40FF51FE9560A -:1023D000FD4F118210821282F3CF1F93CF93DF93B0 -:1023E000FC018281DFEF80FFD1E0C0E01AE2909132 -:1023F0001C01C91788F00E94B00F80919402D1305F -:10240000C9F5811102C080911C0181508093940212 -:10241000DF91CF911F910895E0911A014C2F50E068 -:102420009A012E0F311DF901EE0FFF1FE20FF31F6E -:10243000E956FD4F118210821282809194028B32F4 -:10244000ACF0612F0E94B530892F082E000C990B3B -:102450004817590749F49F014091180360911703E9 -:10246000809116030E94E806CF5FC1CF87FFEDCFB2 -:10247000890FEBCF90E0019660911C0170E00E9403 -:10248000D730C4CFEF92FF921F93CF93DF93EC012D -:1024900010E0EE24EA94F12C60911C01161770F004 -:1024A0000E94B00F9A818C8190FF27C08F5F8C8330 -:1024B000DF91CF911F91FF90EF90089520911A0125 -:1024C000422F410F5527551FCA019A01220F331F72 -:1024D000280F391F29563D4F70E0C7010E94D730A1 -:1024E000962F8C814091180360911703199F800DDE -:1024F00011240E94E8061F5FCFCF8150D8CF909162 -:10250000150390FF14C090911A0120911B0133E034 -:10251000939FF0011124E956FD4F921710F00C948F -:10252000B00F8183608342839F5F3396F6CF089517 -:102530000F931F93CF93DF9300D00F92CDB7DEB7E9 -:102540008C018091960281110AC09E012F5F3F4F3E -:1025500044EB6FEF0E94E8068A8180939602F801AF -:102560006481613069F08091960240E0662361F0F9 -:1025700040E0623011F44091960280E060E004C0D7 -:102580006091960240E080E00E947F12F801848111 -:1025900090E0019663E070E00E94D73084830F9052 -:1025A0000F900F90DF91CF911F910F910895CF93CE -:1025B000DF9300D00F92CDB7DEB79091150390FF57 -:1025C0000AC09E012F5F3F4F0E94E8064B81698140 -:1025D0008A810E947F120F900F900F90DF91CF9110 -:1025E0000895CF93DF93EC01E5E1F3E0438162814D -:1025F0008C810E94D7128C818F5F8C83DF91CF9169 -:102600000895CF93DF93EC01EC81F0E0EA50FC4FAA -:102610004491E5E1F3E0628181810E94D7128C81CF -:102620008F5F8C83DF91CF910895CF92DF92EF92ED -:10263000FF926B017C010E94D206B701A60188E0DF -:1026400090E0FF90EF90DF90CF900C945C31AF92D0 -:10265000BF92CF92DF92EF92FF920F931F93CF938F -:10266000DF9300D00F92CDB7DEB7182FF62E042FD0 -:10267000E22E9091150390FF29C0E92FE695AE2F29 -:10268000B0E0A657BE4F8C91809391029E7F92300E -:1026900059F59E012F5F3F4F812F0E94E8064B8125 -:1026A00069818A810E947F1210931603F0921703AA -:1026B00000931803EE2051F06091150370911603FA -:1026C00080911703909118030E9415130F900F909B -:1026D0000F90DF91CF911F910F91FF90EF90DF90BE -:1026E000CF90BF90AF900895823019F400911803F5 -:1026F000DBCF863019F410911603D6CF8930D9F389 -:10270000893191F6E9518E2F8170D82EE695F0E04F -:10271000E853FC4FA590B490C12CBB2460911C01E0 -:10272000C61618F00E94B00FBFCF2C2D30E0A29E2D -:10273000C001A39E900DB29E900D112470E00E94E6 -:10274000C330812FD11013C0860F40911A01420F60 -:10275000532F511D9A01220F331F240F351F295665 -:102760003D4F402F6F2D0E94E806C394D7CF861BA4 -:10277000ECCFE5E1F3E0438128E0421B08F440E0C0 -:1027800021E0628181810C942713E5E1F3E043812C -:1027900028E0420F08F44FEF21E0628181810C9420 -:1027A0002713E5E1F3E0628128E0621B08F460E0B2 -:1027B00021E0438181810C942713E5E1F3E06281FC -:1027C00028E0620F08F46FEF21E0438181810C94CF -:1027D0002713E5E1F3E0818121E0438162818850A4 -:1027E0000C942713E5E1F3E0818121E043816281CC -:1027F000885F0C94271380911903882319F0815066 -:10280000809319036091150370911603809117034B -:10281000909118030C94151380911903833018F4C8 -:102820008F5F809319036091150370911603809157 -:102830001703909118030C9415139091150390FFB2 -:1028400036C09170811129C0926090931503662360 -:1028500051F06091150370911603809117039091C8 -:1028600018030E94151360911503669570E04BE004 -:1028700050E08AE091E00E941C31892BA9F010926F -:10288000920281E080938E0220E0409118036091D3 -:102890001703809116030C942713853210F0986467 -:1028A000D4CF880F982BD1CF0E949A0FEACF0895EA -:1028B00060E00C941D1421E030E0A90102C0440F37 -:1028C000551F8A95E2F7CA0120919302662391F081 -:1028D000822B8093930280919202811105C0809196 -:1028E000150386950E9458148091150380FD05C03C -:1028F0000C94B00F80958223ECCF0895CF93DF9393 -:10290000C82FC17082FBDD27D0F981FB662760F9F3 -:1029100084E00E945B1461E06C2785E00E945B14F8 -:102920006D2F86E0DF91CF910C945B140F931F9372 -:10293000CF93DF93EC0161E0009709F0682F61709D -:1029400080E00E945B1460E0209721F0BE01769544 -:102950006795617081E00E945B1460E0209731F020 -:10296000BE017695679576956795617082E00E94C5 -:102970005B1460E0209739F0BE01B3E0769567956F -:10298000BA95E1F7617083E00E945B14AE0170E0DC -:1029900060E0BB27A72F962F852F0097A105B105D3 -:1029A000D9F1AC01BD0188E08A019B01F4E03695C4 -:1029B000279517950795FA95D1F70115110521056A -:1029C000310519F08C5FB901A8018A019B01E2E091 -:1029D0003695279517950795EA95D1F701151105B5 -:1029E0002105310519F08E5FB901A801769567952B -:1029F00057954795452B462B472B09F08F5F813024 -:102A0000C9F0882359F08230D1F08330E9F020E01A -:102A10004EE16FEF80E406C080E0C6CF20E04EE1DB -:102A20006FEF82E30E942713CE01DF91CF911F91B8 -:102A30000F91089520E04EE16FEF8EE1F3CF20E09B -:102A40004EE16FEF8AE6EECF20E04EE16FEF87EDCB -:102A5000E9CF0E94961490935A03809359030C94E3 -:102A6000A90B8091590390915A039C01267033273A -:102A70002630310519F488600C942915877FFCCF26 -:102A800021E030E002C0220F331F8A95E2F7209543 -:102A900030958091590390915A03822393230C948B -:102AA0002915909131028095892380933102282F36 -:102AB000277039F4282F082E000C330B92171306B9 -:102AC00021F49091260392FF07C085958595859501 -:102AD0000E94401510923102089521E030E002C0BA -:102AE000220F331F8A95E2F78091590390915A0380 -:102AF000822B932B0C942915809115038695815078 -:102B000009F484E261E00C941D148091150386950C -:102B10008F5F853208F081E061E00C941D14909184 -:102B2000150390FF07C09695981720F0961710F49C -:102B30000C94851561E00C941D14E5E1F3E083E04D -:102B4000808311828FEF828384EB83831482608180 -:102B50007181828193810C94151369EE7EEF90E070 -:102B600080E00E94683160E082E090E00E944A319B -:102B700060E083E090E00E944A31109237021092A8 -:102B8000360260E084E090E00E944A3160E082E238 -:102B900090E00E944A3160E085E090E00E944A3176 -:102BA00060E086E090E00E944A316FEF87E090E0BD -:102BB0000E944A3140E050E0BA0188E090E00E9473 -:102BC0005C3160E08DE090E00E944A3140E050E0EE -:102BD000BA0188E190E00E945C3160E087E190E01A -:102BE0000E944A3140E050E0BA018CE190E00E943E -:102BF0005C3170E060E080E290E00E94683140E08B -:102C000050E0BA0188E190E00E945C3180E00E94CF -:102C1000900E0E94A80E40E050E0BA018FE090E0D4 -:102C20000E945C3140E050E0BA0183E190E00C94F6 -:102C30005C318F929F92AF92BF92CF92DF92EF92D0 -:102C4000FF920F931F93CF93DF93CDB7DEB72897F3 -:102C50000FB6F894DEBF0FBECDBF8E010F5F1F4FC2 -:102C600088E0F80111928A95E9F78FE4E82E81E077 -:102C7000F82E6801AA24A394B12CF70181917F0159 -:102C80008F3F09F44BC0F894E82FE295EF70F0E025 -:102C900021A18F70A50102C0440F551F8A95E2F74C -:102CA000CA01922F982B91A392A18095892382A388 -:102CB000789400C0E3E5F1E030E020E0912C812C35 -:102CC00081918F3F09F47EC0A82FA295AF70B0E02C -:102CD00090964C9150E08F7002C0559547958A951B -:102CE000E2F740FD6FC0C501022E02C0880F991F98 -:102CF0000A94E2F7882A992A2F5F3F4F2C3031053A -:102D0000F9F6F701319780818F3F11F00E94BF08DB -:102D100050EA5A95F1F7F60191828082F2E0CF0EE7 -:102D2000D11C23E5E21621E0F20609F0A6CF48E027 -:102D300050E0B80184E492E00E942931FF24F3942A -:102D4000009709F4F12C892B09F43FC088E0F801C1 -:102D5000A4E4B2E001900D928A95E1F781E08093BE -:102D60003A020E948806909339028093380280913B -:102D70003802909139020E947906059750F18091AE -:102D80004402909145029093740280937302809163 -:102D9000460290914702909376028093750280914B -:102DA0004802909149029093780280937702809133 -:102DB0004A0290914B0290937A028093790210928A -:102DC0003A0207C090E080E095CF80913A028111ED -:102DD000CECF80914302882371F08091410290917F -:102DE00042020E947906893E934028F082EE0E94BA -:102DF000E10B1092430280913F02909140029111A9 -:102E00004BC0882319F110921A0184E080931B01B2 -:102E100080931C018FE00E94581410923F0281E0C1 -:102E2000809340028F2D28960FB6F894DEBF0FBE18 -:102E3000CDBFDF91CF911F910F91FF90EF90DF9069 -:102E4000CF90BF90AF909F908F90089580913E0259 -:102E5000882379F086E180931A018AE180931B012F -:102E600084E080931C018FE00E94581410923E026F -:102E7000D6CF80913D028823A9F08AE180931A0180 -:102E80008EE180931B0184E080931C018FE00E94FF -:102E9000581410923D02C3CF811124C080913E028C -:102EA000811120C080913D0281111CC080913B02A4 -:102EB00090913C020E947906853F914098F01092D3 -:102EC0001A0189E280931B0180931C0181E20E9418 -:102ED000581410923F0210923E0210923D0210923E -:102EE0004002A0CF10923F0210923E0210923D028B -:102EF00099CF90E080E00E944431893E9E4F11F4CA -:102F00000C94730F80E008951092340280911D019B -:102F1000E2ECF1E0882359F08091250387FF07C098 -:102F20008EE1DF011D928A95E9F70C94A90B86E0EA -:102F3000F8CF1F93CF93DF93CDB7DEB7AA970FB625 -:102F4000F894DEBF0FBECDBF81E593E02091F10084 -:102F5000DC012D93CD01B3E089359B07B9F7809152 -:102F60005203833009F471C0B8F4813009F448C0C9 -:102F7000823009F4B2C08091E80083FF3AC18091A9 -:102F80005103909152039A3008F033C1E92FF0E0D9 -:102F9000EE52FE4C0C94EB308A3009F48DC08B302D -:102FA00009F470C0893039F780915103813219F7E3 -:102FB0008091550390915603009711F00297D9F62E -:102FC0008091E800877F8093E8008091E80082FF8D -:102FD00037C08091F2009091F300029729F480911C -:102FE000F1008B7F813021F48091F10080932C03DC -:102FF0008091E8008B778093E8000E946605BBCF44 -:1030000080915103813A09F0B6CF8091E800877F23 -:103010008093E8008091550390915603892B61F4C9 -:1030200060E28DE293E070E00E9419068091E80072 -:103030008B778093E8009FCF60E090E080E0F3CF53 -:1030400080914F038111C1CF96CF80915103813A76 -:1030500009F091CF8091550390915603892B09F087 -:103060008ACF8091E800877F8093E8008091E80014 -:1030700080FFFCCF80911D018093F1008091E800DA -:103080008E77B9CF80915103813209F074CF80914E -:10309000550390915603892B09F06DCF8091E8007C -:1030A000877F8093E8000E94660580915303809398 -:1030B0001D010E9484175FCF80915103813209F076 -:1030C0005ACF8091E800877F8093E8000E946605D0 -:1030D0008091540380932B034ECF80915103813A0A -:1030E00009F049CF8091E800877F8093E8008091C4 -:1030F000E80080FFFCCF80912B03BECF803899F091 -:10310000823809F076C0809155038F70873008F0BF -:1031100070C08093E9008091EB0085FB882780F9DF -:103120001092E90006C080914D0390914E039111D9 -:1031300082609091E800977F9093E8008093F1007F -:103140001092F1008091E8008E77B5C1882309F4D0 -:10315000A2C1823009F04DC0809153038111A6C1F4 -:10316000809155038F702FEF280F263008F041C053 -:103170008093E9002091EB0020FF98C1933031F457 -:103180008091EB0080628093EB0090C19091EB0006 -:1031900090619093EB0021E030E001C0220F8A950E -:1031A000EAF72093EA001092EA008091EB00886031 -:1031B000EACF81111EC0109153031F778091E30065 -:1031C0008078812B8093E3008091E800877F809353 -:1031D000E8000E9466058091E80080FFFCCF8091A6 -:1031E000E30080688093E30082E0111183E0809324 -:1031F0004F038091E80083FF0AC08091E800877F39 -:103200008093E8008091EB0080628093EB00AA96A7 -:103210000FB6F894DEBF0FBECDBFDF91CF911F91E7 -:1032200008958058823028F7209153033091540339 -:103230002C3DE3E03E07A1F583E08A838AE289839F -:103240004FB7F894DE01139620E03EE051E2E32F01 -:10325000F0E050935700E49120FF03C0E295EF7037 -:103260003F5FEF708E2F90E0EA30C0F0C7968D93ED -:103270009D932F5F243159F74FBF8091E800877FDE -:103280008093E8006AE270E0CE0101960E94190680 -:103290008091E8008B778093E800ABCFC096E7CFB2 -:1032A0008091550390915603432F55274330510584 -:1032B00009F44AC078F54130510509F47AC08BE52C -:1032C00090E0E6EBF8E04230510509F092CF209112 -:1032D000E800277F2093E80020915703309158039E -:1032E0008217930708F49C0140E02115310509F08D -:1032F00065C0411163C08091E80082FDC9CF809113 -:103300004F03882329F2853019F28091E80083FF6A -:10331000F2CFBECF4132510509F43CC042325105D3 -:1033200009F067CF8330910508F063CFFC01EE0F01 -:10333000FF1FEE54FE4F0190F081E02D81559E4F0E -:10334000DC018C9190E01AC0332721303105D1F097 -:103350002115310561F02230310509F04ACFE3E251 -:10336000F9E0E4918E2F90E0E3E2F9E007C0E1E4B8 -:10337000F9E0E4918E2F90E0E1E4F9E0009709F4A0 -:1033800038CFA5CFEDE2F9E0E4918E2F90E0EDE2A9 -:10339000F9E0F4CF8330910508F02BCF880F991F07 -:1033A000FC01E854FE4F0190F081E02D89E090E0AF -:1033B0008ECF82E190E0E1E1F9E089CF80914F0387 -:1033C000882309F465CF853009F462CF8091E80045 -:1033D00083FD5ECF8091E80082FD8DCF8091E80073 -:1033E00080FF83CF8091F2009091F3002115310589 -:1033F00019F08830910550F041E0089709F040E05D -:103400008091E8008E778093E8006FCF44914093DD -:10341000F1003196215031090196E8CF803809F04A -:10342000E8CE8091E800877F8093E8008091500388 -:103430008093F10087CE8111DCCE109153031230BE -:1034400008F0D7CE8091E800877F8093E800109342 -:1034500050030E946605112311F084E005C080919D -:10346000E30087FDFACF81E080934F0342E061ECF7 -:1034700081E00E94850542E261EC84E00E948505BE -:1034800042E261EC82E00E94850542E260EC83E06A -:103490000E948505AECE80915303813009F0A9CEFC -:1034A00081E0933009F080E080934E031092E900B0 -:1034B0008091E800877F8093E8000E94660599CE9E -:1034C0003F924F925F926F927F928F929F92AF92B4 -:1034D000BF92CF92DF92EF92FF920F931F93CF9301 -:1034E000DF9300D000D00F92CDB7DEB78C01FC0186 -:1034F00083819481892B31F08081918189238F3F51 -:1035000009F010C60F900F900F900F900F90DF9161 -:10351000CF911F910F91FF90EF90DF90CF90BF90D0 -:10352000AF909F908F907F906F905F904F903F9063 -:1035300008950E94040FF82E682F89819A810E94B5 -:103540007D0B69817A818F2D0E94F70E7C01F80135 -:103550008281882309F4D9C5970122513F45203142 -:10356000310508F09AC58FEF97E00E943631FEEEE4 -:10357000EF0E57EE852E53E0952E882381F1809132 -:103580003102877009F4BECFF8018281882309F4E3 -:10359000B9CF82E00F900F900F900F900F90DF91B6 -:1035A000CF911F910F91FF90EF90DF90CF90BF9040 -:1035B000AF909F908F907F906F905F904F903F90D3 -:1035C0000C945115811428E09206C9F2C4010E949E -:1035D0003631811101C0EA943FEF831A930AE1105A -:1035E000F1CF1C821B82442443944AE0342E7401A0 -:1035F0004FEFE41AF40AC4010E94363189831A821B -:10360000882309F4BCCF9FEF980F933000F58A838D -:10361000498252E0850E911CC7010E9436318B838E -:10362000882309F4ACCFCE0101967C01F7012081FB -:103630002223E9F2213009F049C091818281913041 -:1036400041F4F2E0EF0EF11C0E94AA0D09C04701FF -:10365000EACF923049F422E0E20EF11C0E94F50C10 -:103660003FEFE31AF30AE2CF933031F432E0E30E96 -:10367000F11C0E94E10BF4CF943021F04FEFE41ADB -:10368000F40AEECF52E0E50EF11C30E020E0B70185 -:103690006F5F7F4FF70141818053990B8A3091050D -:1036A00050F021503109E0F28FE99FE00197F1F7E6 -:1036B00000C00000F6CF329EF001339EF00D1124C1 -:1036C0009C012E0F3F1F842F7B01E1CFE22FF0E002 -:1036D000EA5DFD4F5490822F86958695869590E001 -:1036E000FC01EA5EFD4F64902770712C022E02C02F -:1036F000759467940A94E2F7E1E06E227724FC0166 -:10370000EA5FFD4FA490B12C022E02C0B594A7949D -:103710000A94E2F7F1E0AF22BB24FC01EA50FE4F2D -:10372000C490D12C02C0D594C7942A95E2F721E029 -:10373000C222DD246114710419F081EE0E94F50C9F -:10374000A114B10419F086EE0E94F50C852D0E949B -:10375000AA0DAB2819F086EE0E94E10B672819F03C -:1037600081EE0E94E10BCD2809F47ACF8CE26CCF78 -:1037700081E00E946D150E94311501CF81E00E9409 -:103780004015F9CF82E0F5CFE2E8EE16EFE5FE0650 -:1037900009F49BC0F3E8EF16FFE5FF0609F097C4B4 -:1037A000882309F181EE0E94F50C83EE0E94F50C4E -:1037B00080E50E94F50C80E595C0882309F481C05E -:1037C00080914302811106C081E08093430282EE22 -:1037D0000E94F50C0E948806909342028093410259 -:1037E0008BE20E94F50CF8018281882309F4ABC4B6 -:1037F00010925D03F2E0EF16FCE5FF0608F491C1BC -:1038000026E1E2162CE5F20630F0C7018A5F9C45FE -:10381000099708F086C10E948C0F9093260380932D -:10382000250330E1E3163CE5F30609F449C108F04D -:10383000CBC058E0E5165CE5F50609F433C108F0A5 -:1038400094C094E0E9169CE5F90609F423C108F058 -:1038500076C0F2E0EF16FCE5FF0609F415C1809191 -:103860002503826023E0E2162CE5F20609F40FC17D -:1038700060912503F090260384E090E00E944A3195 -:103880006F2D82E290E00E944A310E94841777CE29 -:103890008823A1F080914302811106C081E08093CA -:1038A000430282EE0E94F50C0E9488069093420229 -:1038B0008093410281EE0E94F50C92CF81EE0E942E -:1038C000E10B8BE20E94E10B8ECF882309F48BCFB2 -:1038D00081EE0E94F50C83EE0E94F50C8FE40E94AD -:1038E000F50C8FE40E94E10B83EE0E94E10B81EE68 -:1038F000E9CF95EFE9169CE5F906D1F0A8F027E2AB -:1039000045EE66EEF6EFEF16FCE5FF0609F06BCF2D -:10391000C8010E94C70D33CE27E245EE65EEF8CF11 -:1039200026E241EE60EEF4CF27E245EE64EEF0CF02 -:1039300026E241EE62EEECCF28E241E0EFCF80914B -:103940002503806136E0E3163CE5F30609F49FC0E9 -:1039500080912503886047E0E4164CE5F40608F4FE -:1039600096C080912503806292C0809125038D7F4F -:103970005CE0E5165CE5F50609F489C078F4809111 -:1039800025038C609AE0E9169CE5F90609F47FC0EE -:1039900008F48CC0809125038E7F79C08091250327 -:1039A000877FFEE0EF16FCE5FF0609F470C080910A -:1039B00025038B7F2FE0E2162CE5F20608F467C0A2 -:1039C000809125038F7E63C03BEFE3163CE5F30651 -:1039D00009F464C068F553E1E5165CE5F50609F401 -:1039E00077C090F491E1E9169CE5F90609F46CC002 -:1039F000E2E1EE16ECE5FE0609F03ACF0E948417EC -:103A0000809125038F7743C0F5E1EF16FCE5FF06B3 -:103A100009F466C008F47AC08091260381603AEF09 -:103A2000E3163CE5F30609F023CF8093260320CF6D -:103A30004FEFE4164CE5F40609F44EC088F48DEF20 -:103A4000E8168CE5F806C1F1809126038E7F9EEF83 -:103A5000E9169CE5F90648F3809126038360E5CFDB -:103A6000E1E0EE16EDE5FE0609F459C008F444C0A5 -:103A700060E022E0E2162DE5F20609F0F9CE8EE0D4 -:103A800090E00E944A31F4CE8091250381608093BA -:103A90002503EECE809125038460F9CF8091260323 -:103AA0008260C3CF809125038064F1CF0E94841788 -:103AB000809125038068EBCF809126038D7FB5CF61 -:103AC000809125038F7DE3CF809125038F7BDFCF0E -:103AD00080912503837FDBCF809126038C7FA5CF48 -:103AE0008091250382FB992790F921E0922790FB92 -:103AF00082F990FB83F9CBCF80912603982F909584 -:103B000091708E7F892B90FB81F98FCF0E94841753 -:103B100090912503892F97FB87F98058B8CF61E0F2 -:103B2000AECF8091340236E1E3163CE5F30609F0AE -:103B300017C38A7A91E009F490E09093E001811133 -:103B400006C089E20E94170B0E94A70A18CD85E3E0 -:103B5000F9CF85E302C38091150380FF1BC08E7FE0 -:103B600080931503609115037091160380911703DC -:103B7000909118030E941513109292024FEF50E794 -:103B800082E0415050408040E1F700C000000E94B8 -:103B9000B00FF5CC81608093150361E086950E949B -:103BA0001D14EDCC4CE755E165E875E10E94CC06AB -:103BB000E6CC45E855E16CE775E1F8CF42EF53E11B -:103BC00069EE73E1F3CF41ED53E16DED73E1EECFBB -:103BD00049EB53E165EC73E1E9CF45EC53E169EB67 -:103BE00073E1E4CF4CE054E16BEF73E1DFCF61E0D0 -:103BF00081E0D5CF65E082E00E948F15C0CC68E0FF -:103C000086E0FACF64E18FE0F7CF67E185E1F4CF9A -:103C100062E289E1F1CF61E083E2C1CF3BE5E316E7 -:103C20003DE5F30611F14CE5E4164DE5F40609F027 -:103C3000C9C28091260382FB882780F991E08927F9 -:103C40000E94B70EBFC20E9484175FEF84E39CE01E -:103C5000515080409040E1F700C000000E94D10C1C -:103C60000E94AD158CCC81E0EBCF80E0E9CFC7019D -:103C70000E94550BD82EB5C22F2D2F70C22E8F2D1E -:103C8000807F19F0C29490EFC922DD20C9F0CC20CA -:103C900069F080E28E0D883010F081100BC08091A9 -:103CA0003402C82AC09234020E94A70A8E2D0E94B4 -:103CB000F50C19C080913302C82AC0923302F4CFA8 -:103CC0008E2D0E94E10BCC2071F0C09480E28E0D0D -:103CD000883010F081103EC080913402C822C0921A -:103CE00034020E94A70AE92DE850FF0B349720F414 -:103CF0000E94C0060E947E14AA2009F403CC809181 -:103D0000310280FDFFCBF80112828595859585955E -:103D10000E946D15C8010E94601A8091310285953C -:103D2000859585950F900F900F900F900F90DF91D4 -:103D3000CF911F910F91FF90EF90DF90CF90BF90A8 -:103D4000AF909F908F907F906F905F904F903F903B -:103D50000C94401580913302C822C0923302C1CF27 -:103D60003F2D3F70B32E8F2D807F803219F0B2949B -:103D700080EFB822882071F041E0841681F1DD20C7 -:103D8000D9F1CC2091F1F801858180FF8FCF8F7020 -:103D900085832BC0DD20B1F0909135028B2D892BCE -:103DA000C11003C00E94D70B9ECF51E0C512FACFBD -:103DB0002091260322FD97CF981709F494CF809382 -:103DC000350291CFC11006C00E94A10A8B2D0E941E -:103DD000CC0B89CF81E0C81609F485CFF5CFDD2063 -:103DE00031F095E09C1508F47ECF8B2DDBCFE4E01D -:103DF000EC1508F478CFEACFCC2041F3F9E38F1229 -:103E000009C02FEF37EE43E0215030404040E1F74A -:103E100000C000008E2D0E94E10B65CF8F2D86958E -:103E20008695837061F0813009F05DCFC701937092 -:103E3000D11002C090E080E00E94940654CFC701E8 -:103E40009370D11002C090E080E00E94AA064BCF90 -:103E50008E2DDD2029F00E9463080E94810743CF48 -:103E60000E94A807FACF8F2D837009F040C0D110AF -:103E70003ACF4E2D429546954770440F440F8E2DF4 -:103E80008F7090E0042E02C0880F991F0A94E2F709 -:103E900030E020E0E4FE09C02FE030E002C0220F55 -:103EA000331F4A95E2F7209530954F2D469546955C -:103EB0004370423099F078F4609136027091370285 -:103EC000413039F0822B932B862397230E94C60B17 -:103ED0000ACF862B972B822B932BF8CF822B932BF9 -:103EE000209136023091370282279327EFCF8695B3 -:103EF000DD2011F08F2D8170882309F4F4CE4E2D32 -:103F0000429546954770440F440F8E2D8F7090E078 -:103F1000042E02C0880F991F0A94E2F730E020E0D7 -:103F2000E4FE09C02FE030E002C0220F331F4A95A3 -:103F3000E2F7209530954F2D4695469543704230D7 -:103F400099F078F46091590370915A03413039F037 -:103F5000822B932B862397230E942915C4CE862B70 -:103F6000972B822B932BF8CF822B932B20915903E5 -:103F700030915A0382279327EFCF5F2D5F70F52E84 -:103F8000DD2029F0852F0E946D158E2D0BCF8E2DF3 -:103F90000E94CC0B8F2D0E944015A5CE8E2D92EF46 -:103FA000891609F449C0981570F0E0EF8E1639F1C2 -:103FB000F1EF8F16C9F1DD2009F45FC0C11076CE94 -:103FC0008F2D8F7136C023EF8216D9F134EF831213 -:103FD000F2CFDD2009F446C0FF2DFF71FF2E8F2F99 -:103FE0000E946D158091260382FD07C028E0F29E95 -:103FF000C00111248360809331028F2D1AC0DD200F -:1040000071F044E04C1508F46ECE2F2D2F7181E035 -:1040100090E002C0880F991F2A95E2F7A7CF55E0DC -:104020005C1508F460CEF1CF8F2D8F71DD2009F47F -:10403000B2CF0E946D1557CE8F2D8F71DD20C9F341 -:10404000AACF90E080E0DD2009F486CF9F2D9F71FC -:1040500021E030E0F90102C0EE0FFF1F9A95E2F770 -:10406000CF017ACF81E00E94511531E03C1508F074 -:104070003ACE82E00E94511536CECC2059F08933D9 -:1040800009F0C8CE4FEF57EE83E0415050408040DA -:10409000E1F7BECE8F2D8F717ECFF0E1EF16FFE5F9 -:1040A000FF0609F465CB21E1E2162FE5F20609F4DB -:1040B00069CB41E8E4164FE5F40609F4E9CB08F0D2 -:1040C00063CB90E8E9169FE5F90609F476CB23EF78 -:1040D000E2162CE5F20609F423CC08F00ACC48EDF0 -:1040E000E4164CE5F40609F417CC59EDE5165CE549 -:1040F000F50609F421CC87EDE8168CE5F80609F001 -:1041000072CB26E241EE61EE03CC30E1E3163FE5EF -:10411000F30609F433CB41E1E4164FE5F40649F622 -:1041200082E02DCB85E0DE01119601900D928A95FB -:10413000E1F7F801228189819A812111FAC90E944F -:10414000550BF82EFEC9F6E1EF16FCE5FF06D1F59A -:104150008091E0018111FDCC89E20E94EC0AF4CC4F -:1041600082722CECE2162CE5F20609F43BCD08F045 -:10417000A7C046ECE4164CE5F40609F41FCD08F0A0 -:1041800076C093ECE9169CE5F90609F40BCD08F02E -:104190005DC0F2ECEF16FCE5FF0609F4DCCC9AE515 -:1041A000E9169DE5F90609F45ECD08F037CDE11476 -:1041B000FCE5FF0609F447CD2EEDE2162CE5F206EC -:1041C00009F44ECDF8018281E080F180882309F462 -:1041D0004ECDC7010E94040FD82E682FC7010E9440 -:1041E0007D0BB7018D2D0E94F70E0E9419097C01ED -:1041F000882EF801D280C580C2943FE0C32280910E -:1042000031028770A1F0AD2CDD2091F08F2D807FE1 -:10421000803421F080E28E0D883048F082E00E94E8 -:104220005115809131028770AA24A3948111A12C89 -:104230009F2C92942FE09222FBE0F91508F453CDC5 -:10424000E92DF0E0E452FE4C0C94EB3024ECE21645 -:104250002CE5F20609F4ADCC49EE53E162EF73E1CF -:1042600035ECE3163CE5F30609F4A0CC98CF49EC15 -:10427000E4164CE5F40609F4ABCC88F497ECE916A7 -:104280009CE5F90609F49FCC4DED53E161ED73E136 -:10429000E8ECEE16ECE5FE0609F488CC80CFFAECEB -:1042A000EF16FCE5FF0609F498CC4BEF53E16CE008 -:1042B00074E12BECE2162CE5F20609F477CC6FCF13 -:1042C00031EDE3163CE5F30609F49CCCB8F45EEC62 -:1042D000E5165CE5F50609F48DCC08F488CC9FEC76 -:1042E000E9169CE5F90609F48ACC6EE089E0E0ED78 -:1042F000EE16ECE5FE0609F47FCC51CFF4EDEF1697 -:10430000FCE5FF0609F484CC78F432EDE3163CE5D5 -:10431000F30609F47ACC61E088E143EDE4164CE55C -:10432000F40609F43CCC3BCF55EDE5165CE5F5060B -:1043300009F471CC8DE5E816F80609F420C92FCFF1 -:104340001F93CF93DF938091FE01807FA9F480912A -:10435000FB01882389F080913002D091FF016091A8 -:10436000F9017091FA01A091FC01B091FD01C62FF5 -:10437000C72316E0D81304C0DF91CF911F91089591 -:1043800090E0109711F0CF3F19F401968770F2CFAB -:10439000189F9001199F300D1124F901E050FE4F34 -:1043A00041814713F2CF40814613EFCF4281411143 -:1043B000ECCF438154814A1B5B0B483C510528F7E5 -:1043C0008091FE018F7080618093FE01F901EB5FA7 -:1043D000FD4F80818F708061808389EF91E00E9422 -:1043E000601ADF91CF911F910C944B0BAF92BF924B -:1043F000CF92DF92EF92FF920F931F93CF93DF93B1 -:10440000CDB7DEB761970FB6F894DEBF0FBECDBF54 -:104410008C0185E0F801DE011D9601900D928A95D0 -:10442000E1F7F801E28089EFA82E81E0B82E6091D3 -:10443000FC017091FD016115710509F432C1909183 -:10444000F9014091FA01892F84238F3F09F429C192 -:1044500020813181C380D480F090FB01F601E61BFE -:10446000F70BFF2009F4E8C08091FE01582F507F20 -:10447000E83CF10508F0ABC0511177C0FE2C4313A6 -:1044800021C092131FC0E1101DC08F708061809306 -:10449000FE01C5010E94601A8091FE01F80185832A -:1044A0008F2D61960FB6F894DEBF0FBECDBFDF91A2 -:1044B000CF911F910F91FF90EF90DF90CF90BF9021 -:1044C000AF900895CD2829F0822F83238F3F09F0E4 -:1044D00003C180E0F82FF170DF2E80FF3CC0809197 -:1044E00030024091FF0156E0841315C02D873E87AE -:1044F0008D859E850E94400F292F22952F70223096 -:10450000F0F0243018F59F70F1F0F8019581907F5C -:10451000D1F4D12C1EC090E0589FF001599FF00DAE -:104520001124E050FE4F6181361306C060812613CE -:1045300003C06281E6120FC001968770D5CF9F70CD -:1045400011F0882331F3805E883018F3C8010E948F -:10455000601AFD2CA5CFEE2009F4A2CF8091FE01B8 -:1045600081608093FE01F12C9BCF431306C0921310 -:1045700004C0F801EE2009F479C0C8010E944C0F74 -:10458000882309F1EE20F9F08091FE01803270F06D -:104590002091F9013091FA0138872F831986DB8643 -:1045A000CA868C87CE0107960E94601A86E0F801C1 -:1045B000A9EFB1E001900D928A95E1F70E94A02148 -:1045C000FF24F3946DCFC8010E94601AF9CF5111F6 -:1045D0000AC089EF91E00E94601A86E0F50111920D -:1045E0008A95E9F7C0CF43130FC092130DC0E110B5 -:1045F0000BC0F8018583C8010E94601A86E0F501AE -:1046000011928A95E9F74CCFC8010E944C0F88237C -:10461000D1F2EE20C1F28091FE01803238F2209179 -:10462000F9013091FA013A8329831B82DD82CC8221 -:104630008E83CE010196B8CFE83CF105F8F6FE2C4A -:10464000EE2009F243131FC092131DC08091FE019A -:1046500080FD10C0982F907F69F0F8018583903F0E -:1046600031F0982F907F905F8F70892B8583C801E0 -:104670000E94601A86E0F801A9EFB1E001900D9266 -:104680008A95E1F70DCFC8010E944C0F81118ECFA2 -:104690008091FE0181608093FE01C8010E94601A32 -:1046A000FFCEEE2009F48FCFC8010E944C0FF82EE8 -:1046B000882309F488CF86E0F801A9EFB1E00190E2 -:1046C0000D928A95E1F78091F9019091FA010E948B -:1046D000400F0E94A021E4CE81E08E25FBCE1F93E7 -:1046E000CF93DF93CDB7DEB767970FB6F894DEBFF1 -:1046F0000FBECDBF4B8B5C8B6D8B7E8B8F8B611117 -:10470000109233021A8A198A85E0FE017396DE013F -:104710001D9601900D928A95E1F786E0FE013D9687 -:10472000DE01179601900D928A95E1F7CE0107966A -:104730000E94F621882389F016E080913002909142 -:10474000FF01891349C067960FB6F894DEBF0FBE0C -:10475000CDBFDF91CF911F91089586E0FE0137967E -:10476000DE01119601900D928A95E1F78A859B856D -:10477000892B11F38F81988589238F3FE9F220914E -:10478000FF0130E0C90101968770992740913002FE -:104790004817190671F40E9484171092FF011092B5 -:1047A000300286E0E9EFF1E0DF011D928A95E9F73A -:1047B000C3CF96E0929FD001939FB00D1124A050DB -:1047C000BE4FFE01319601900D929A95E1F78093CC -:1047D000FF010E944B0BB0CF819FC001112480507C -:1047E0009E4F0E94F621882309F4ADCF80913002BC -:1047F00090E0019687709927809330029ECFFF92B8 -:104800000F931F93CF93DF93CDB7DEB7C45BD1096E -:104810000FB6F894DEBF0FBECDBF182F8111D7C0E1 -:10482000662309F475C0C055DF4F1882C05BD040C5 -:10483000CF54DF4F1882C15BD04011E0CE54DF4F20 -:104840001883C25BD0400E9488068160782FCD54C7 -:10485000DF4F99838883C35BD040C055DF4F4881C9 -:10486000C05BD040CF54DF4F5881C15BD040CE54A5 -:10487000DF4F6881C25BD040CC54DF4F8881C45B7E -:10488000D0400E946F23C555DF4F1882CB5AD040CD -:10489000C455DF4F1882CC5AD040C355DF4F188221 -:1048A000CD5AD0400E9488068160782FC255DF4FD4 -:1048B00099838883CE5AD040C555DF4F4881CB5A63 -:1048C000D040C455DF4F5881CC5AD040C355DF4F3C -:1048D0006881CD5AD040C155DF4F8881CF5AD04032 -:1048E0000E946F2310933F020E94880690933C021F -:1048F00080933B0281E0CC54DF4F0FB6F894DEBFCB -:104900000FBECDBFDF91CF911F910F91FF90089502 -:1049100002E0CA55DF4F0883C65AD040C955DF4F61 -:104920001882C75AD04011E0C855DF4F1883C85AC3 -:10493000D0400E9488068160782FC755DF4F998349 -:104940008883C95AD040CA55DF4F4881C65AD040E3 -:10495000C955DF4F5881C75AD040C855DF4F6881CD -:10496000C85AD040C655DF4F8881CA5AD0400E94ED -:104970006F23CF55DF4F0883C15AD040CE55DF4F4C -:104980001882C25AD040CD55DF4F1882C35AD0404A -:104990000E9488068160782FCC55DF4F99838883E9 -:1049A000C45AD040CF55DF4F4881C15AD040CE5570 -:1049B000DF4F5881C25AD040CD55DF4F6881C35A6E -:1049C000D040CB55DF4F8881C55AD04089CF813048 -:1049D00009F0C0C0662309F45FC0C456DF4F1882D7 -:1049E000CC59D040C356DF4F8883CD59D040C256F2 -:1049F000DF4F8883CE59D0400E9488068160782F8F -:104A0000C156DF4F99838883CF59D040C456DF4FBA -:104A10004881CC59D040C356DF4F5881CD59D04042 -:104A2000C256DF4F6881CE59D040C056DF4F8881D3 -:104A3000C05AD0400E946F23C956DF4F1882C75911 -:104A4000D040C856DF4F1883C859D040C756DF4FF3 -:104A50001882C959D0400E9488068160782FC656B6 -:104A6000DF4F99838883CA59D040C956DF4F4881A8 -:104A7000C759D040C856DF4F5881C859D040C75693 -:104A8000DF4F6881C959D040C556DF4F8881CB5967 -:104A9000D0400E946F232ECF02E0CE56DF4F088316 -:104AA000C259D040CD56DF4F8883C359D040CC5631 -:104AB000DF4F8883C459D0400E9488068160782FD8 -:104AC000CB56DF4F99838883C559D040CE56DF4FF0 -:104AD0004881C259D040CD56DF4F5881C359D0408C -:104AE000CC56DF4F6881C459D040CA56DF4F888109 -:104AF000C659D0400E946F23C357DF4F0883CD585B -:104B0000D040C257DF4F1883CE58D040C157DF4F37 -:104B10001882CF58D0400E9488068160782FC057F5 -:104B2000DF4F99838883C059D040C357DF4F4881F6 -:104B3000CD58D040C257DF4F5881CE58D040C157D2 -:104B4000DF4F6881CF58D040CF56DF4F8881C159A1 -:104B5000D0409FCF823009F0ABC0662309F45EC01D -:104B6000C857DF4F1882C858D040C757DF4F8883D7 -:104B7000C958D04081E0C657DF4F8883CA58D0401B -:104B80000E9488068160782FC557DF4F99838883FC -:104B9000CB58D040C857DF4F4881C858D040C7577E -:104BA000DF4F5881C958D040C657DF4F6881CA5877 -:104BB000D040C457DF4F8881CC58D0400E946F232B -:104BC000CD57DF4F1882C358D040CC57DF4F1883E2 -:104BD000C458D040CB57DF4F1882C558D0400E94F0 -:104BE00088068160782FCA57DF4F99838883C6581B -:104BF000D040CD57DF4F4881C358D040CC57DF4F0E -:104C00005881C458D040CB57DF4F6881C558D04039 -:104C1000C957DF4F8881C758D0403BCFEF968FAF41 -:104C2000EF97C158DF4F8883CF57D04081E0C058FD -:104C3000DF4F8883C058D0400E9488068160782F5B -:104C4000CF57DF4F99838883C158D040EF964FAD3F -:104C5000EF97C158DF4F5881CF57D040C058DF4F32 -:104C60006881C058D040CE57DF4F8881C258D040AD -:104C70000E946F23EA961FAFEA97EB961FAFEB9760 -:104C8000EC961FAEEC970E9488068160782FEE9616 -:104C90009FAF8EAFEE97EA964FADEA97EB965FAD7A -:104CA000EB97EC966FADEC97EE968FADEE97F1CE5D -:104CB000833009F081C0662309F43FC019E0E5960E -:104CC0001FAFE597E6961FAEE69781E0E7968FAFB8 -:104CD000E7970E9488068160782FE9969FAF8EAF94 -:104CE000E997E5964FADE597E6965FADE697E796CF -:104CF0006FADE797E9968FADE9970E946F23E09635 -:104D00001FAFE097E1961FAEE197E2961FAEE297E4 -:104D10000E9488068160782FE4969FAF8EAFE4975B -:104D2000E0964FADE097E1965FADE197E2966FAD0B -:104D3000E297E4968FADE497ACCE1BE0AB961FAF45 -:104D4000AB97AC961FAEAC9781E0AD968FAFAD97A9 -:104D50000E9488068160782FAF969FAF8EAFAF9785 -:104D6000AB964FADAB97AC965FADAC97AD966FADD4 -:104D7000AD97AF968FADAF970E946F23A6961FAFEA -:104D8000A697A7961FAEA797A8961FAEA8970E94B2 -:104D900088068160782FAA969FAF8EAFAA97A696B5 -:104DA0004FADA697A7965FADA797A8966FADA897AA -:104DB000AA968FADAA976DCE843009F081C0662384 -:104DC00009F43FC009E0A1960FAFA19711E0A296A8 -:104DD0001FAFA297A3961FAFA3970E94880681607A -:104DE000782FA5969FAF8EAFA597A1964FADA197AF -:104DF000A2965FADA297A3966FADA397A5968FAD30 -:104E0000A5970E946F236C960FAF6C976D961FAF9E -:104E10006D976E961FAE6E970E9488068160782F00 -:104E2000A0969FAF8EAFA0976C964FAD6C976D9686 -:104E30005FAD6D976E966FAD6E97A0968FADA09794 -:104E400028CE0BE067960FAF679711E068961FAF0B -:104E5000689769961FAF69970E9488068160782FCE -:104E60006B969FAF8EAF6B9767964FAD67976896BF -:104E70005FAD689769966FAD69976B968FAD6B97CD -:104E80000E946F2362960FAF629763961FAF63977E -:104E900064961FAE64970E9488068160782F66969C -:104EA0009FAF8EAF669762964FAD629763965FAD88 -:104EB000639764966FAD649766968FAD6697E9CDFC -:104EC000853009F07DC0662309F445C039E0F32E32 -:104ED0002D96FFAE2D9702E02E960FAF2E9711E084 -:104EE0002F961FAF2F970E9488068160782F6196BA -:104EF0009FAF8EAF61972D964FAD2D972E965FADDC -:104F00002E972F966FAD2F9761968FAD61970E9468 -:104F10006F232896FFAE289729960FAF29972A96D8 -:104F20001FAE2A970E9488068160782F2C969FAF2B -:104F30008EAF2C9728964FAD289729965FAD29976D -:104F40002A966FAD2A972C968FAD2C970E946F23CF -:104F500010933E02C9CC2BE0F22E2396FFAE23978E -:104F600002E024960FAF249711E025961FAF2597F6 -:104F70000E9488068160782F27969FAF8EAF279773 -:104F800023964FAD239724965FAD249725966FAD5A -:104F9000259727968FAD27970E946F23FDAE0EAF02 -:104FA0001FAE0E9488068160782F22969FAF8EAF39 -:104FB00022974DAD5EAD6FAD22968FAD2297C6CFD5 -:104FC000863009F048C0662329F199E0F92EF8AE41 -:104FD00003E009AF11E01AAF0E9488068160782FC4 -:104FE0009CAF8BAF48AD59AD6AAD8CAD0E946F23BD -:104FF000FBAA0CAB1DAA0E9488068160782F9FAB8C -:105000008EAB4BA95CA96DA98FA90E946F23109349 -:105010003D026ACC8BE0F82EFEA603E00FA711E05C -:1050200018AB0E9488068160782F9AAB89AB4EA599 -:105030005FA568A98AA90E946F23F9A60AA71BA6E3 -:105040000E9488068160782F9DA78CA749A55AA544 -:105050006BA58DA5DACF873009F041C06623F9F042 -:1050600013E01CA31DA381E08EA30E94880681602B -:10507000782F98A78FA34CA15DA16EA188A50E944F -:105080006F231F8F18A319A20E9488068160782FB2 -:105090009BA38AA34F8D58A169A18BA1FACC05E0EF -:1050A0000A8F13E01B8F81E08C8F0E94880681603D -:1050B000782F9E8F8D8F4A8D5B8D6C8D8E8D0E948B -:1050C0006F230D8B1E8B1F8A0E9488068160782FAC -:1050D000998F888F4D895E896F89898DDACC883068 -:1050E00009F008CC662301F106E0088B13E0198B68 -:1050F00081E08A8B0E9488068160782F9C8B8B8B45 -:10510000488959896A898C890E946F230B871C877B -:105110001D860E9488068160782F9F878E874B8529 -:105120005C856D858F85B5CC08E00E8313E01F8309 -:1051300081E088870E9488068160782F9A87898716 -:105140004E815F8168858A850E946F2309831A8357 -:105150001B820E9488068160782F9D838C83498101 -:105160005A816B818D8195CC1F920F920FB60F9251 -:1051700011242F933F934F935F936F937F938F935C -:105180009F93AF93BF93CF93DF93EF93FF93D09110 -:10519000E900DF708091EC00C82FC17080FDC0E88D -:1051A0001092E9008091F000877F8093F00078945E -:1051B0000E9499171092E9008091F0008860809316 -:1051C000F000CD2BCF70C093E900FF91EF91DF91FC -:1051D000CF91BF91AF919F918F917F916F915F918F -:1051E0004F913F912F910F900FBE0F901F901895E8 -:1051F0001F920F920FB60F9211242F933F934F934C -:105200005F936F937F938F939F93AF93BF93EF932E -:10521000FF938091E10082FF09C08091E20082FF4C -:1052200005C08091E1008B7F8093E1008091DA00DE -:1052300080FF24C08091D80080FF20C08091DA00D8 -:105240008E7F8093DA008091D90080FF9BC088E137 -:1052500089BD8AE189BD09B400FEFDCF81E080935C -:105260004F0380912A03811109C00E94EC040E941F -:10527000B7058091E20084608093E2008091E100B4 -:1052800080FF17C08091E20080FF13C08091E20090 -:105290008E7F8093E2008091E20080618093E20043 -:1052A0008091D80080628093D80019BC85E08093FB -:1052B0004F038091E10084FF29C08091E20084FFC8 -:1052C00025C088E189BD8AE189BD89B5982F917093 -:1052D00080FFFBCF8091D8008F7D8093D800809194 -:1052E000E1008F7E8093E1008091E2008F7E8093C9 -:1052F000E2008091E20081608093E200809150039F -:10530000882309F445C084E080934F038091E10035 -:1053100083FF27C08091E20083FF23C08091E100DA -:10532000877F8093E10082E080934F0310925003C7 -:105330008091E1008E7F8093E1008091E2008E7F7A -:105340008093E2008091E20080618093E20042E07D -:1053500060E080E00E9485058091F0008860809385 -:10536000F000FF91EF91BF91AF919F918F917F914D -:105370006F915F914F913F912F910F900FBE0F90C2 -:105380001F90189519BC10924F0310922A0376CFE4 -:105390008091E30087FD93E090934F03B7CF78941B -:1053A0001F921FB61F9211248F939F93AF93BF93A9 -:1053B0008091210390912203A0912303B0912403B3 -:1053C0000196A11DB11D8093210390932203A09308 -:1053D0002303B0932403BF91AF919F918F911F90AE -:1053E0001FBE1F9018951F921FB61F9211248F93F6 -:1053F0009F93AF93BF9380912003811113C080913D -:10540000210390912203A0912303B091240341969C -:10541000A11DB11D8093210390932203A093230328 -:10542000B0932403BF91AF919F918F911F901FBEA6 -:105430001F901895CDB7DEB7AA970FB6F894DEBFC8 -:105440000FBECDBF84B7877F84BF0FB6F894A895F1 -:1054500080916000886180936000109260000FBEB0 -:1054600080E890E00FB6F89480936100909361001B -:105470000FBE85B7806885BF85B7806885BF8DEB17 -:1054800098E09093BF018093BE010E94EC040E94BB -:10549000B7058091E20084608093E2007894809167 -:1054A0004F038823A1F01091E9001F709091EC0048 -:1054B000892F817090FD80E8182B1092E90080916F -:1054C000E80083FD0E9499171F701093E90082E0A5 -:1054D00084BD93E095BD9AEF97BD80936E000E94C6 -:1054E000730F811102C00E94A80E80EF0E94BF08B6 -:1054F00081EF0E94BF0882EF0E94BF0883EF0E94E5 -:10550000BF0803E511E06FE5E62E61E0F62ED80155 -:105510008D918D018F3F11F00E94BF08E016F106BA -:10552000B1F7109245021092440210927402109248 -:105530007302109247021092460210927602109265 -:10554000750210924902109248021092780210924D -:10555000770210924B0210924A0210927A02109235 -:1055600079020E947917811102C00E94AD1582E074 -:1055700090E00E94363180936A020E948C0F9093D3 -:105580002603809325030E941916EFE3FCE9319767 -:10559000F1F700C000000E9419168091730280FF8D -:1055A00008C06FEF7FEF90E080E00E9468310E94BA -:1055B000D10C83E090E00E94363190E00E94C60B4F -:1055C0008091590390915A030E94961480914C0245 -:1055D000811132C00E947917811104C00E94AD155B -:1055E0000E949D1588E090E00E943E316093150373 -:1055F0007093160380931703909318036E7F71F4D2 -:105600000E949D1588E090E00E943E316093150352 -:105610007093160380931703909318030E94D20689 -:10562000109292028091150380FF03C086950E941C -:10563000581481E080934C026AE871E050E6852EB0 -:1056400052E0952E28E731E0E1E8F1E041E050E05A -:105650001191812F82958F7090E0DC019196FC90E2 -:1056600091971F70E12E6A0101C0CC0C1A95EAF7E0 -:105670000C2D00950F2191960C93919792961C9169 -:1056800092971C2992961C93D901FD909D010F2D94 -:1056900002950F7010E0D8019196BC90BF2DBF709D -:1056A000FB2E6A0101C0CC0CBA95EAF7DC2CD09431 -:1056B000DB20D8019196DC9291979296DC9092979C -:1056C000DC289296DC92DC0190968C9190E002C0EE -:1056D00095958795EA94E2F78170D80190960C91A0 -:1056E00010E002C015950795FA94E2F790E000FDEE -:1056F00092E0892BD4018D934D016E177F0709F03D -:10570000A7CF86EA92E090938A028093890281E291 -:105710000E94581481E090E00E94291580E091E0F9 -:1057200090931D0380931C0380914F03FF24F394F7 -:1057300008E11AE1853009F47CC20E941916882319 -:1057400059F08FB7F8944091210350912203609152 -:105750002303709124038FBFA3E7B2E0EBE6F2E0EE -:1057600010E000E0702F8D919D91219131912817CB -:10577000390709F487C22827392760E0EE24E3942B -:10578000F12CA9014E215F21452B09F475C269A3B3 -:105790007AA39C012E213F2191E0232B09F490E074 -:1057A0009BA30E9488068160782F9DA38CA349A1AA -:1057B0005AA16BA18DA10E946F23000F111FF80148 -:1057C000E559FD4F80819181E826F926F182E0823A -:1057D000809192028823D1F180919102E09115038A -:1057E000E695E81BE0938D02823009F062C2F0E09A -:1057F000EC53FD4FE4910E2F10E041E0E42E43E125 -:10580000F42E80918E02882361F010928E020E9405 -:10581000880690938C0280938B02109290021092D3 -:105820008F020E948806E0918B02F0918C028E1B01 -:105830009F0B8F3F9F4750F4E00FF11FF0938C02B6 -:10584000E0938B028BE892E0F701099537E5E32EB0 -:1058500032E0F32E0EE412E04FE6442E41E0542EE7 -:1058600058E7652E51E0752E61E8862E61E0962E90 -:1058700070E6A72E72E0B72E212C312CD501ED91C8 -:105880005D01EE0FEE0FD4012D914D01A22FA295D7 -:10589000AF70B0E090968C9190E02F7002C095951B -:1058A00087952A95E2F781709927D3014D913D01A3 -:1058B000A42FA295AF70B0E090962C9130E04F707D -:1058C00002C0359527954A95E2F7A9014170552701 -:1058D00020FF02C042E050E0842BE82BD501119755 -:1058E000EC93D201CD902D01EF70F0E0E15AFE4F24 -:1058F0008081F7019081890F8083D12C082E000CC4 -:10590000990B20E08C159D054CF0D8018C918F5F90 -:105910008C9360E0832D0E94FF2321E0F7018081BA -:10592000082E000C990B442755274C195D09481780 -:1059300059074CF0D8018C9181508C9361E0832DF4 -:105940000E94FF2321E0F7018081082E000C990BB3 -:10595000B6010E94D730D7018D937D01222A33945E -:105960000F5F1F4FB9E03B1289CF222059F08FB74C -:10597000F894409121035091220360912303709188 -:1059800024038FBF86E0E2E8F2E0DE011196019089 -:105990000D928A95E1F7F0908402E09085021091D3 -:1059A0008602009187021092840210928502109262 -:1059B0008602109287028F2D8E2909F448C08091AB -:1059C0008002909181020E9479069C0190917C0254 -:1059D000992309F4C5C323333105C8F19F3F19F05A -:1059E0009F5F90937C02FF2059F00E9443089FEF35 -:1059F0001F140CF491E0899F802D11248093840260 -:105A0000EE2059F00E9443089FEF1E140CF491E021 -:105A1000899F802D11248093850230918402332345 -:105A2000B1F020918502222391F045EB3403C001AF -:105A30001124992309F497C19093840245EB240320 -:105A400090011124332309F492C130938502812FF0 -:105A5000802B09F448C080917E0290917F020E94C1 -:105A600079069C0190917B02992309F474C3253631 -:105A70003105C8F19F3F19F09F5F90937B0211237E -:105A800059F00E9421089FEF11160CF491E0899FB4 -:105A9000802D112480938602002359F00E94210852 -:105AA0009FEF10160CF491E0899F802D11248093B4 -:105AB0008702309186023323B1F02091870222239E -:105AC00091F045EB3403C0011124992309F453C12B -:105AD0009093860245EB240390011124332309F4AB -:105AE0004EC1309387028091840290918502892B68 -:105AF00090918602892B90918702892B11F00E9448 -:105B0000810786E0FE013196A2E8B2E001900D9295 -:105B10008A95E1F70E94C00690916902891731F0D9 -:105B20000E94C006809369020E947E1480914F03F8 -:105B3000843009F0F9CD83E08093E9008091E8009A -:105B400082FFF2CD8091E80090E085FF06C00E94C0 -:105B50000B05882309F417C191E08091E8008B7749 -:105B60008093E800992309F4DFCDE981E150E33126 -:105B700008F09DC1F0E0E851FE4C0C94EB308091B0 -:105B80004F03843009F443C080E00E947E141092D9 -:105B9000920280918802811116C0F0928802809151 -:105BA0001503982F917090934D028E7F809315036B -:105BB000BFEFE0E7F2E0B150E040F040E1F700C0B5 -:105BC00000000E94B00F1092200388E190E0A0E452 -:105BD0000FB6F894A895809360000FBEA093600064 -:105BE00083B7817F846083BF83B7816083BF7894EC -:105BF000889583B78E7F83BF0FB6F894A895809160 -:105C00006000886180936000109260000FBE8091F8 -:105C10004E03882371F00E941916E3E7F2E08191A8 -:105C20009191892B09F078C28BE792E08E179F073C -:105C3000B1F780914F03853009F4A1CF0E948417FA -:105C40000E94C0060E947E141092880280914D022C -:105C5000882359F080911503816080931503869500 -:105C60000E9458140E949A0F68CD80919302882355 -:105C7000C9F30E94B00FF6CF6F5FEE0CFF1C6C30C3 -:105C800009F07FCD0F5F1F4F0430110509F06ACD79 -:105C90008FEF8EA38FA318A60E9488068160782FAD -:105CA0009AA789A74EA15FA168A58AA50E946F2324 -:105CB0008FCD863059F4F0E0EF53FD4FE4910E2F75 -:105CC00010E031EFE32E32E1F32E9BCD893061F409 -:105CD000E695F0E0E254FD4FE4910E2F10E022E44F -:105CE000E22E22E1F22E8DCD8F3061F4E695F0E0C8 -:105CF000E554FD4FE4910E2F10E09DEEE92E91E169 -:105D0000F92E7FCD853159F4F0E0E854FD4FE49150 -:105D10000E2F10E08AE7E82E81E1F82E72CD08E21E -:105D200010E0FAEEEF2EF0E1FF2E883109F469CD94 -:105D3000833249F4E6EBF2E005911491B8E9EB2ED9 -:105D4000B2E1FB2E5ECD04EF11E0ADEAEA2EA0E158 -:105D5000FA2E843209F455CD00ED17E0E1EDEE2E78 -:105D6000E6E0FE2E4ECD81E08093840267CE81E096 -:105D7000809385026CCE81E080938602ABCE81E079 -:105D800080938702B0CE00E210E0CE0101967C0144 -:105D90008091E80085FD0AC08091E8008B778093B0 -:105DA000E8000E940B05882399F3D6CE8091F1007C -:105DB000D7018D937D010150110951F7CDCE1A8283 -:105DC00089E08B833FC08A81823009F4BBC1833074 -:105DD000A9F0813009F06BC02FB7F89460912103CE -:105DE0007091220380912303909124032FBF0E947E -:105DF000F1306B837C838D839E8324C080917302FA -:105E0000909174029827892798279C838B8380918F -:105E10007502909176029827892798279E838D8313 -:105E20008091770290917802982789279827988700 -:105E30008F838091790290917A02982789279827F9 -:105E40009A87898780914F03843009F06DCC109137 -:105E5000E9001F709091EC00892F817090FD80E81F -:105E6000182B82E08093E9008091E80080FF0DC04C -:105E700050E040E060E270E0CE0101960E943C05F7 -:105E80008091E8008E778093E8001F701093E900FE -:105E90004BCC8A81823059F46B817C818D819E81CB -:105EA0000E94F13086E290E00E944A31CBCF8FEF22 -:105EB0008983C8CF4C816B818A810E94D10E98273B -:105EC000892798279E838D83BDCFED80FE80FE2499 -:105ED000EF24FE248A810B81B8E10B9F80011124FD -:105EE000E0E68E9F000D111D11248C8190E0880F3B -:105EF000991F080F191F6F2DC80187960E944A31FC -:105F00006E2DC8018896D0CF0E943B0E9BCF8A8110 -:105F10008138C1F060F4803809F094CF20E04B81E3 -:105F200060911703809116030E9427138BCF82384C -:105F300049F1833809F086CF20E0409118036C8145 -:105F40008B81F2CF8B810E9458149B818091150325 -:105F5000911111C08E7F8093150310929202FFEF72 -:105F600020E742E0F15020404040E1F700C000004F -:105F70000E94B00F67CF81608093150386950E94C1 -:105F8000581460CF8B81809319035CCF8A8181384C -:105F900099F030F4803809F055CF8091180311CF73 -:105FA000823891F0833809F04DCF809116038B83AE -:105FB000809117038C8346CF8091150380FF02C028 -:105FC0008695FFCE80E0FDCE80911903FACE6091D8 -:105FD00015037091160380911703909118030E9486 -:105FE000151330CF80E18A832DCF84E08A8389E145 -:105FF000E8CE0A811B81102701271027CE010196C8 -:106000006C01EC80DC01AE0DB11D7D01C801895130 -:106010009C4FEC14FD0409F415CF0931B4E01B07C3 -:1060200050F40E943631F60184830F5F1F4FBFEF9B -:10603000CB1ADB0AEBCFD60114961C92F6CF0A815D -:106040001B81102701271027FE0131966F01EC807C -:10605000E00EF12EF11CC80189519C4FE016F106AB -:1060600009F4F0CE0931F4E01F0728F4D6011496A4 -:106070006C910E944A31BFEFCB1ADB0A0F5F1F4FB2 -:10608000EACF0E942B0EDECE8AE0ADCF0A811B81C3 -:10609000102701271027FE0131966F01EC80CF01F8 -:1060A0008E0D911D7C01C8018796EC14FD0409F446 -:1060B000C9CE003CA3E01A0750F40E943631F60125 -:1060C00084830F5F1F4FBFEFCB1ADB0AECCFD601E3 -:1060D00014961C92F6CF0A811B81102701271027E6 -:1060E000FE0131966F01EC80E00EF12EF11CC8012B -:1060F0008796E016F10609F4A5CE003CF3E01F07F1 -:1061000028F4D60114966C910E944A31BFEFCB1A45 -:10611000DB0A0F5F1F4FEBCF09BD19BD09B400FEAD -:10612000FDCF8091D8008F7D8093D8008091E000D2 -:1061300082608093E0008091E00081FDFCCF0E94AE -:10614000841777CD86E290E00E9436311B821C8254 -:106150001D828E8377CE2D32314008F08DCCC3CC9A -:106160002D32314008F03CCC72CC87FB082E06263D -:1061700087FD819567FD61950E9407310EF4919529 -:1061800007FC81950895AA1BBB1B51E107C0AA1FFC -:10619000BB1FA617B70710F0A61BB70B881F991FC8 -:1061A0005A95A9F780959095BC01CD01089597FB6C -:1061B000072E16F4009407D077FD09D00E94C33053 -:1061C00007FC05D03EF4909581959F4F08957095FA -:1061D00061957F4F0895EE0FFF1F0590F491E02D1C -:1061E00009946927962769277827872778270895AC -:1061F0000E94B331332312F48A1B9B0B0C9402319F -:106200000E94B331B7FF0895821B930B0895991B29 -:1062100079E004C0991F961708F0961B881F7A959D -:10622000C9F780950895FB01DC0102C005900D922D -:1062300041505040D8F70895FC014150504030F093 -:1062400001900616D1F73197CF0108958827992735 -:106250000895FB01DC0104C08D910190801921F4A7 -:1062600041505040C8F7881B990B0895F999FECF0B -:1062700092BD81BDF89A992780B50895A6E1B0E056 -:1062800044E050E00C947031A8E1B0E042E050E00E -:106290000C947031262FF999FECF92BD81BDF89AEA -:1062A000019700B4021639F01FBA20BD0FB6F8945A -:1062B000FA9AF99A0FBE08950396272F0E944B3140 -:1062C0000E944A31252F0E944B31242F0C944B31D0 -:1062D0000196272F0E944B310C944A31DC01CB01EF -:1062E000FC01F999FECF06C0F2BDE1BDF89A3196E6 -:1062F00000B40D9241505040B8F708950E94B33158 -:10630000A59F900DB49F900DA49F800D911D112409 -:106310000895B7FF0C947E310E947E31821B930B4F -:106320000895A1E21A2EAA1BBB1BFD010DC0AA1FD6 -:10633000BB1FEE1FFF1FA217B307E407F50720F0EE -:10634000A21BB30BE40BF50B661F771F881F991F69 -:106350001A9469F760957095809590959B01AC01B2 -:10636000BD01CF010895A29FB001B39FC001A39FBB -:10637000700D811D1124911DB29F700D811D11247E -:10638000911D0895F894FFCF5E0F5E0F670F670FA2 -:10639000690F670F670F670F5E0F5E0F6E0F670F56 -:1063A000670F6E0F7E18A618F918A618F918D918D5 -:1063B0001119F9180E1A1B1A3C1E3C1EB01EB01EF5 -:1063C0000E1F281F731E731E331FBD1FCE1FCE1F2F -:1063D000DF2EE32E492F5A2F652F842F872FC62FAC -:1063E000E72F572F572FF22FF52FF92F1F3041305E -:0663F000443046306B3022 -:1063F6007606910C700C6C0C680C01191A1B1C1D8E -:106406001E1F202122010201002A002A2A01818260 -:1064160083E200E900EA00B500B600B700CD0083CC -:1064260001CC008A01920194012102230224022553 -:1064360002260227022A02B300B4006F007000F0A1 -:10644600F1F2F3F5F6F700010203040537363500DD -:10645600FF0100010000FFFF0000010001FF000432 -:106466000404040404040202616264669092949730 -:106476000660636567919395960700010202020222 -:106486000606060909090909090F0F0F0F0F0F154F -:106496001515181919191919191919191923244033 -:0E64A60022B6B6019401DE00C808E108010923 +:102150002EB900C0EA9591F75CCFCF93DF9300D002 +:102160000F92CDB7DEB780915F0380FF13C09E0151 +:102170002F5F3F4F44E666EE80E00E94E8068B81C9 +:1021800099812A8120935A039093590380935B038A +:102190000E94B00F0F900F900F90DF91CF91089594 +:1021A0000F931F93CF93DF93EC0110E000E0909129 +:1021B0001C019017110609F06CF40E94B00F8C817D +:1021C00090E00196817099278C83DF91CF911F91C8 +:1021D0000F91089520911A01A801420F511D9A01F3 +:1021E000220F331F240F351F2F513D4F4C8160911B +:1021F00061038091600396959017110651F04CF0A1 +:10220000442349F0409162030E94E8060F5F1F4F8C +:10221000CECF4423B9F340E0F7CF8F929F92AF9295 +:10222000BF92CF92DF92EF92FF920F931F93CF93C3 +:10223000DF93EC014C81042F10E09801D8010E943B +:1022400035329B01AC010E9400324B015C01E0E29F +:10225000F0E0E01BF10BA5E5B0E0AC019B010E94B2 +:1022600000326B017C019F01DF010E947A319B01EA +:10227000AC010E940B329B01AC01280D391D4A1D97 +:102280005B1DC701B6010E941332F22E822F90E02F +:1022900039E23F1560F143E0249F90011124359508 +:1022A0002795122F109500E085E5E82EEF18809114 +:1022B0001C01081758F10E94B00F9C8181E09923FE +:1022C00019F0903219F48FEF809317018091170164 +:1022D000890F8C83DF91CF911F910F91FF90EF9029 +:1022E000DF90CF90BF90AF909F908F90089525E59D +:1022F00030E0B901681B790B9B01220F331F260FB9 +:10230000371F37FFCCCF2F5F3F4FC9CF8E2D01FD39 +:102310008F2D20911A01622F600F7727771F9B0165 +:10232000220F331F260F371F2F513D4F412F609132 +:1023300061030E94E8060F5FBACF0F931F93CF93FC +:10234000DF9380911A0190911B0123E0829FF0019D +:102350001124EF51FD4F891740F1C0E0D3E06091A7 +:102360001C01C61740F10E94B00F20911501809109 +:102370009B02820F80939B0290911601920F909383 +:102380001601191654F4082E000C990B40911C01EB +:102390004150550B841795071CF02195209315018A +:1023A000DF91CF911F910F910895118210821282B7 +:1023B0008F5F3396D0CF0C2F10E070E0C8010E94E1 +:1023C000593120911A01820F482F50E020919B0231 +:1023D000022E000C330B02171307BCF020911601DC +:1023E000022E000C330B201731077CF08D9F9001DB +:1023F00011242F513D4F4091620360916103809100 +:1024000060030E94E806CF5FAACFFA01EE0FFF1F1C +:10241000E40FF51FEF51FD4F118210821282F3CFAE +:102420001F93CF93DF93FC018281DFEF80FFD1E028 +:10243000C0E01AE290911C01C91788F00E94B00F09 +:1024400080919A02D130C9F5811102C080911C019E +:10245000815080939A02DF91CF911F910895E0916E +:102460001A014C2F50E09A012E0F311DF901EE0F89 +:10247000FF1FE20FF31FEF51FD4F118210821282F6 +:1024800080919A028B32ACF0612F0E943731892FF4 +:10249000082E000C990B4817590749F49F014091E9 +:1024A000620360916103809160030E94E806CF5F40 +:1024B000C1CF87FFEDCF890FEBCF90E00196609100 +:1024C0001C0170E00E945931C4CFEF92FF921F931C +:1024D000CF93DF93EC0110E0EE24EA94F12C6091AD +:1024E0001C01161770F00E94B00F9A818C8190FF2A +:1024F00027C08F5F8C83DF91CF911F91FF90EF906A +:10250000089520911A01422F410F5527551FCA01E6 +:102510009A01220F331F280F391F2F513D4F70E0B2 +:10252000C7010E945931962F8C81409162036091BE +:102530006103199F800D11240E94E8061F5FCFCF11 +:102540008150D8CF90915F0390FF14C090911A01F1 +:1025500020911B0133E0939FF0011124EF51FD4FB7 +:10256000921710F00C94B00F8183608342839F5FB9 +:102570003396F6CF08950F931F93CF93DF9300D038 +:102580000F92CDB7DEB78C0180919C0281110AC0F9 +:102590009E012F5F3F4F44EB6FEF0E94E8068A8158 +:1025A00080939C02F8016481613069F080919C0203 +:1025B00040E0662361F040E0623011F440919C02FB +:1025C00080E060E004C060919C0240E080E00E94F6 +:1025D000A212F801848190E0019663E070E00E940D +:1025E000593184830F900F900F90DF91CF911F91FD +:1025F0000F910895CF93DF9300D00F92CDB7DEB740 +:1026000090915F0390FF0AC09E012F5F3F4F0E9491 +:10261000E8064B8169818A810E94A2120F900F9077 +:102620000F90DF91CF910895CF93DF93EC01EFE509 +:10263000F3E0438162818C810E94FA128C818F5F6A +:102640008C83DF91CF910895CF93DF93EC01EC81E0 +:10265000F0E0EA50FC4F4491EFE5F3E062818181C4 +:102660000E94FA128C818F5F8C83DF91CF91089545 +:10267000CF92DF92EF92FF926B017C010E94D20613 +:10268000B701A60188E090E0FF90EF90DF90CF9037 +:102690000C94DE31AF92BF92CF92DF92EF92FF9215 +:1026A0000F931F93CF93DF9300D00F92CDB7DEB778 +:1026B000182FF62E042FE22E90915F0390FF29C071 +:1026C000E92FE695AE2FB0E0A657BE4F8C918093D0 +:1026D00097029E7F923059F59E012F5F3F4F812FC9 +:1026E0000E94E8064B8169818A810E94A2121093A0 +:1026F0006003F092610300936203EE2051F0609159 +:102700005F037091600380916103909162030E9466 +:1027100038130F900F900F90DF91CF911F910F9171 +:10272000FF90EF90DF90CF90BF90AF9008958230F0 +:1027300019F400916203DBCF863019F41091600325 +:10274000D6CF8930D9F3893191F6E9518E2F817036 +:10275000D82EE695F0E0E853FC4FA590B490C12C3C +:10276000BB2460911C01C61618F00E94B00FBFCFA9 +:102770002C2D30E0A29EC001A39E900DB29E900D24 +:10278000112470E00E944531812FD11013C0860FB3 +:1027900040911A01420F532F511D9A01220F331FEE +:1027A000240F351F2F513D4F402F6F2D0E94E806FB +:1027B000C394D7CF861BECCFEFE5F3E0438128E04D +:1027C000421B08F440E021E0628181810C944A13AD +:1027D000EFE5F3E0438128E0420F08F44FEF21E0FA +:1027E000628181810C944A13EFE5F3E0628128E075 +:1027F000621B08F460E021E0438181810C944A135C +:10280000EFE5F3E0628128E0620F08F46FEF21E06A +:10281000438181810C944A13EFE5F3E0818121E04B +:102820004381628188500C944A13EFE5F3E0818183 +:1028300021E043816281885F0C944A138091630395 +:10284000882319F081508093630360915F03709136 +:10285000600380916103909162030C94381380911E +:102860006303833018F48F5F8093630360915F0389 +:102870007091600380916103909162030C9438130E +:1028800090915F0390FF36C09170811129C09260D2 +:1028900090935F03662351F060915F037091600332 +:1028A00080916103909162030E94381360915F03ED +:1028B000669570E04BE050E08AE091E00E949E3126 +:1028C000892BA9F01092980281E08093940220E075 +:1028D0004091620360916103809160030C944A13FC +:1028E000853210F09864D4CF880F982BD1CF0E94F6 +:1028F0009A0FEACF089560E00C94401421E030E094 +:10290000A90102C0440F551F8A95E2F7CA01209120 +:102910009902662391F0822B80939902809198020C +:10292000811105C080915F0386950E947B14809180 +:102930005F0380FD05C00C94B00F80958223ECCF1F +:102940000895CF93DF93C82FC17082FBDD27D0F9A4 +:1029500081FB662760F984E00E947E1461E06C27A9 +:1029600085E00E947E146D2F86E0DF91CF910C945C +:102970007E140F931F93CF93DF93EC0161E00097D8 +:1029800009F0682F617080E00E947E1460E020975B +:1029900021F0BE0176956795617081E00E947E14FA +:1029A00060E0209731F0BE01769567957695679542 +:1029B000617082E00E947E1460E0209739F0BE01D1 +:1029C000B3E076956795BA95E1F7617083E00E9470 +:1029D0007E14AE0170E060E0BB27A72F962F852FF5 +:1029E0000097A105B105D9F1AC01BD0188E08A01CC +:1029F0009B01F4E03695279517950795FA95D1F741 +:102A0000011511052105310519F08C5FB901A801E7 +:102A10008A019B01E2E03695279517950795EA957F +:102A2000D1F7011511052105310519F08E5FB901A6 +:102A3000A8017695679557954795452B462B472BCB +:102A400009F08F5F8130C9F0882359F08230D1F0CE +:102A50008330E9F020E04EE16FEF80E406C080E0D3 +:102A6000C6CF20E04EE16FEF82E30E944A13CE0111 +:102A7000DF91CF911F910F91089520E04EE16FEF0C +:102A80008EE1F3CF20E04EE16FEF8AE6EECF20E05B +:102A90004EE16FEF87EDE9CF0E94B9149093DD020C +:102AA0008093DC020C94A90B8091DC029091DD02F2 +:102AB0009C01267033272630310519F488600C9468 +:102AC0004C15877FFCCF21E030E002C0220F331F7E +:102AD0008A95E2F7209530958091DC029091DD0295 +:102AE000822393230C944C15909131028095892375 +:102AF00080933102282F277039F4282F082E000CDC +:102B0000330B9217130621F49091A90292FF07C08C +:102B10008595859585950E946315109231020895DB +:102B200021E030E002C0220F331F8A95E2F7809146 +:102B3000DC029091DD02822B932B0C944C1580913A +:102B40005F038695815009F484E261E00C9440149F +:102B500080915F0386958F5F853208F081E061E0A8 +:102B60000C94401490915F0390FF07C096959817BE +:102B700020F0961710F40C94A81561E00C94401402 +:102B8000EFE5F3E083E0808311828FEF828384EBB3 +:102B90008383148260817181828193810C943813C4 +:102BA00069EE7EEF90E080E00E94EA3160E082E032 +:102BB00090E00E94CC3160E083E090E00E94CC3154 +:102BC000109237021092360260E084E090E00E949A +:102BD000CC3160E082E290E00E94CC3160E085E0A0 +:102BE00090E00E94CC3160E086E090E00E94CC3121 +:102BF0006FEF87E090E00E94CC3140E050E0BA01F6 +:102C000088E090E00E94DE3160E08DE090E00E947C +:102C1000CC3140E050E0BA0188E190E00E94DE3122 +:102C200060E087E190E00E94CC3140E050E0BA01E2 +:102C30008CE190E00E94DE3170E060E080E290E0A4 +:102C40000E94EA3140E050E0BA0188E190E00E9441 +:102C5000DE3180E00E94900E0E94A80E40E050E01D +:102C6000BA018FE090E00E94DE3140E050E0BA010E +:102C700083E190E00C94DE316F927F928F929F926D +:102C8000AF92BF92CF92DF92EF92FF920F931F937A +:102C9000CF93DF93CDB7DEB728970FB6F894DEBF9A +:102CA0000FBECDBF8E010F5F1F4F88E0F80111925C +:102CB0008A95E9F78FE4E82E81E0F82E680193E524 +:102CC000692E91E0792E88248394912CF7018191CB +:102CD0007F018F3F09F44BC0F894E82FE295EF7025 +:102CE000F0E021A18F70A40102C0440F551F8A9506 +:102CF000E2F7CA01922F982B91A392A18095892384 +:102D000082A3789400C0E3E5F1E030E020E0B12C4C +:102D1000A12C81918F3F09F47CC0A82FA295AF70A0 +:102D2000B0E090964C9150E08F7002C05595479559 +:102D30008A95E2F740FD6DC0C401022E02C0880FE3 +:102D4000991F0A94E2F7A82AB92A2F5F3F4F2C3027 +:102D50003105F9F6F701319780818F3F11F00E941C +:102D6000BF0850EA5A95F1F7F601B182A082F2E06D +:102D7000CF0ED11C6E147F0409F0A8CF48E050E0BC +:102D8000B8018AE492E00E94AB31FF24F3940097EB +:102D900009F4F12C892B09F43FC088E0F801AAE47A +:102DA000B2E001900D928A95E1F781E080933A02BA +:102DB0000E948806909339028093380280913802ED +:102DC000909139020E947906059750F180914A024C +:102DD00090914B0290937A028093790280914C02F9 +:102DE00090914D0290937C0280937B0280914E02E1 +:102DF00090914F0290937E0280937D0280915002C9 +:102E0000909151029093800280937F0210923A0237 +:102E100007C090E080E097CF80913A028111CECF39 +:102E200080914902882371F0809147029091480275 +:102E30000E947906893E934028F082EE0E94E10BC1 +:102E400010924902109146028091450211115BC017 +:102E5000882399F110921A0184E080931B018093DA +:102E60001C018FE00E947B141092450281E0809348 +:102E7000460280913F02882351F0809140028111E7 +:102E800006C080913B0290913C020E9479068F2DF2 +:102E900028960FB6F894DEBF0FBECDBFDF91CF915D +:102EA0001F910F91FF90EF90DF90CF90BF90AF9068 +:102EB0009F908F907F906F90089580914402882317 +:102EC00079F086E180931A018AE180931B0184E006 +:102ED00080931C018FE00E947B1410924402C6CFA5 +:102EE000809143028823A9F08AE180931A018EE140 +:102EF00080931B0184E080931C018FE00E947B146F +:102F000010924302B3CF81112BC0809144028111F2 +:102F100027C080914302811123C08091410290918A +:102F200042020E947906853F9140D0F0112379F04A +:102F300010921A018AE280931B0180931C0181E2A6 +:102F40000E947B148091400281110E94AD1010926A +:102F5000450210924402109243021092460289CF19 +:102F600010924502109244021092430282CF90E0E8 +:102F700080E00E94C631893E9E4F11F40C94730F7D +:102F800080E008951092340280911D01E2ECF1E09E +:102F9000882359F08091A80287FF07C08EE1DF01E6 +:102FA0001D928A95E9F70C94A90B86E0F8CF1F9340 +:102FB000CF93DF93CDB7DEB7AA970FB6F894DEBFF5 +:102FC0000FBECDBF84ED92E02091F100DC012D9386 +:102FD000CD01B2E08C3D9B07B9F78091D5028330DB +:102FE00009F471C0B8F4813009F448C0823009F4A2 +:102FF000B2C08091E80083FF3AC18091D4029091E1 +:10300000D5029A3008F033C1E92FF0E0EC5AFD4CBC +:103010000C946D318A3009F48DC08B3009F470C086 +:10302000893039F78091D402813219F78091D80222 +:103030009091D902009711F00297D9F68091E8009B +:10304000877F8093E8008091E80082FF37C08091FD +:10305000F2009091F300029729F48091F1008B7FA8 +:10306000813021F48091F1008093AF028091E800DB +:103070008B778093E8000E946605BBCF8091D402D5 +:10308000813A09F0B6CF8091E800877F8093E8000D +:103090008091D8029091D902892B61F460E280EB93 +:1030A00092E070E00E9419068091E8008B7780938F +:1030B000E8009FCF60E090E080E0F3CF8091D20203 +:1030C0008111C1CF96CF8091D402813A09F091CF7E +:1030D0008091D8029091D902892B09F08ACF8091F2 +:1030E000E800877F8093E8008091E80080FFFCCFB4 +:1030F00080911D018093F1008091E8008E77B9CF17 +:103100008091D402813209F074CF8091D8029091DD +:10311000D902892B09F06DCF8091E800877F8093D9 +:10312000E8000E9466058091D60280931D010E94EE +:10313000C2175FCF8091D402813209F05ACF8091BB +:10314000E800877F8093E8000E9466058091D7029F +:103150008093AE024ECF8091D402813A09F049CFDC +:103160008091E800877F8093E8008091E80080FFED +:10317000FCCF8091AE02BECF803899F0823809F042 +:1031800076C08091D8028F70873008F070C080932D +:10319000E9008091EB0085FB882780F91092E90017 +:1031A00006C08091D0029091D102911182609091DD +:1031B000E800977F9093E8008093F1001092F1006F +:1031C0008091E8008E77B5C1882309F4A2C18230CE +:1031D00009F04DC08091D6028111A6C18091D8021C +:1031E0008F702FEF280F263008F041C08093E90040 +:1031F0002091EB0020FF98C1933031F48091EB00D7 +:1032000080628093EB0090C19091EB00906190936D +:10321000EB0021E030E001C0220F8A95EAF720930D +:10322000EA001092EA008091EB008860EACF8111F9 +:103230001EC01091D6021F778091E3008078812B09 +:103240008093E3008091E800877F8093E8000E94EC +:1032500066058091E80080FFFCCF8091E3008068E4 +:103260008093E30082E0111183E08093D202809189 +:10327000E80083FF0AC08091E800877F8093E80020 +:103280008091EB0080628093EB00AA960FB6F894D1 +:10329000DEBF0FBECDBFDF91CF911F910895805843 +:1032A000823028F72091D6023091D7022C3DE3E0FE +:1032B0003E07A1F583E08A838AE289834FB7F894B9 +:1032C000DE01139620E03EE051E2E32FF0E0509360 +:1032D0005700E49120FF03C0E295EF703F5FEF706D +:1032E0008E2F90E0EA30C0F0C7968D939D932F5FAC +:1032F000243159F74FBF8091E800877F8093E80021 +:103300006AE270E0CE0101960E9419068091E80001 +:103310008B778093E800ABCFC096E7CF8091D8023F +:103320009091D902432F55274330510509F44AC0E3 +:1033300078F54130510509F47AC08BE590E0E6EB71 +:10334000F8E04230510509F092CF2091E800277F44 +:103350002093E8002091DA023091DB028217930774 +:1033600008F49C0140E02115310509F065C04111C8 +:1033700063C08091E80082FDC9CF8091D20288238A +:1033800029F2853019F28091E80083FFF2CFBECF99 +:103390004132510509F43CC04232510509F067CF72 +:1033A0008330910508F063CFFC01EE0FFF1FEE5450 +:1033B000FE4F0190F081E02D81559E4FDC018C91F4 +:1033C00090E01AC0332721303105D1F021153105A5 +:1033D00061F02230310509F04ACFE3E2F9E0E491EF +:1033E0008E2F90E0E3E2F9E007C0E1E4F9E0E49138 +:1033F0008E2F90E0E1E4F9E0009709F438CFA5CFF3 +:10340000EDE2F9E0E4918E2F90E0EDE2F9E0F4CF07 +:103410008330910508F02BCF880F991FFC01E854E9 +:10342000FE4F0190F081E02D89E090E08ECF82E1A7 +:1034300090E0E1E1F9E089CF8091D202882309F49C +:1034400065CF853009F462CF8091E80083FD5ECFBF +:103450008091E80082FD8DCF8091E80080FF83CFCE +:103460008091F2009091F3002115310519F0883018 +:10347000910550F041E0089709F040E08091E800A4 +:103480008E778093E8006FCF44914093F10031969E +:10349000215031090196E8CF803809F0E8CE8091BB +:1034A000E800877F8093E8008091D3028093F10049 +:1034B00087CE8111DCCE1091D602123008F0D7CE23 +:1034C0008091E800877F8093E8001093D3020E94E8 +:1034D0006605112311F084E005C08091E30087FDAB +:1034E000FACF81E08093D20242E061EC81E00E9459 +:1034F000850542E261EC84E00E94850542E261ECD0 +:1035000082E00E94850542E260EC83E00E9485052E +:10351000AECE8091D602813009F0A9CE81E0933001 +:1035200009F080E08093D1021092E9008091E800D8 +:10353000877F8093E8000E94660599CE3F924F9264 +:103540005F926F927F928F929F92AF92BF92CF9233 +:10355000DF92EF92FF920F931F93CF93DF9300D0F0 +:1035600000D00F92CDB7DEB78C01FC01838194812E +:10357000892B31F08081918189238F3F09F054C6D6 +:103580000F900F900F900F900F90DF91CF911F91A0 +:103590000F91FF90EF90DF90CF90BF90AF909F90F2 +:1035A0008F907F906F905F904F903F9008950E9412 +:1035B000040FF82E682F89819A810E947D0B698102 +:1035C0007A818F2D0E94F70E7C01F8018281882379 +:1035D00009F41CC6970122513F452031310508F0FE +:1035E000D4C58FEF97E00E94B831FEEEEF0E57EE94 +:1035F000852E53E0952E882381F1809131028770CA +:1036000009F4BECFF8018281882309F4B9CF82E0A2 +:103610000F900F900F900F900F90DF91CF911F910F +:103620000F91FF90EF90DF90CF90BF90AF909F9061 +:103630008F907F906F905F904F903F900C94741597 +:10364000811428E09206C9F2C4010E94B8318111A8 +:1036500001C0EA943FEF831A930AE110F1CF1C8274 +:103660001B82442443944AE0342E74014FEFE41A41 +:10367000F40AC4010E94B83189831A82882309F4AC +:10368000BCCF9FEF980F933000F58A83498252E0B8 +:10369000850E911CC7010E94B8318B83882309F4E1 +:1036A000ACCFCE0101967C01F70120812223E9F203 +:1036B000213009F049C091818281913041F4F2E0DA +:1036C000EF0EF11C0E94AA0D09C04701EACF92300B +:1036D00049F422E0E20EF11C0E94F50C3FEFE31AE0 +:1036E000F30AE2CF933031F432E0E30EF11C0E9492 +:1036F000E10BF4CF943021F04FEFE41AF40AEECF4F +:1037000052E0E50EF11C30E020E0B7016F5F7F4F23 +:10371000F70141818053990B8A30910550F0215077 +:103720003109E0F28FE99FE00197F1F700C0000056 +:10373000F6CF329EF001339EF00D11249C012E0F26 +:103740003F1F842F7B01E1CFE22FF0E0EA5DFD4FC8 +:103750005490822F86958695869590E0FC01EA5ECE +:10376000FD4F64902770712C022E02C075946794EF +:103770000A94E2F7E1E06E227724FC01EA5FFD4F54 +:10378000A490B12C022E02C0B594A7940A94E2F73B +:10379000F1E0AF22BB24FC01EA50FE4FC490D12CD3 +:1037A00002C0D594C7942A95E2F721E0C222DD2415 +:1037B0006114710419F081EE0E94F50CA114B1049A +:1037C00019F086EE0E94F50C852D0E94AA0DAB28FB +:1037D00019F086EE0E94E10B672819F081EE0E9435 +:1037E000E10BCD2809F47ACF8CE26CCF81E00E9406 +:1037F00090150E94541501CF81E00E946315F9CF06 +:1038000082E0F5CFF3E8EF16FFE5FF0609F4CEC03E +:1038100024E8E2162FE5F20609F0D7C4882309F45C +:10382000ECCEF0903F02EE24E394FE24F0923F02AF +:103830000E948806B0E0A0E080933B0290933C0297 +:10384000A0933D02B0933E028091400210921A0173 +:10385000882309F4B9C08AE280931B0180931C017C +:1038600081E20E947B140E94AD10E0923F02109210 +:103870004002C3CE882309F481C08091490281119E +:1038800006C081E08093490282EE0E94F50C0E94FE +:10389000880690934802809347028BE20E94F50CC1 +:1038A000F8018281882309F4D0C41092E002F2E08A +:1038B000EF16FCE5FF0608F4ACC126E1E2162CE5A4 +:1038C000F20630F0C7018A5F9C45099708F0A1C154 +:1038D0000E948C0F9093A9028093A80230E1E31616 +:1038E0003CE5F30609F464C108F0E6C058E0E516CB +:1038F0005CE5F50609F44EC108F0AFC094E0E916A6 +:103900009CE5F90609F43EC108F091C0F2E0EF161B +:10391000FCE5FF0609F430C18091A802826023E033 +:10392000E2162CE5F20609F42AC16091A802F09093 +:10393000A90284E090E00E94CC316F2D82E290E0F9 +:103940000E94CC310E94C21758CE8823A1F08091EA +:103950004902811106C081E08093490282EE0E94F3 +:10396000F50C0E948806909348028093470281EEEE +:103970000E94F50C92CF81EE0E94E10B8BE20E9437 +:10398000E10B8ECF882309F48BCF81EE0E94F50CDA +:1039900083EE0E94F50C8FE40E94F50C8FE40E94E8 +:1039A000E10B83EE0E94E10B81EEE9CF882309F45D +:1039B00077CF81EE0E94F50C83EE0E94F50C80E536 +:1039C0000E94F50C80E5EBCF8AE280931B01809387 +:1039D0001C0181E2FF2029F00E947B140E94AD109F +:1039E00046CF0E947B1443CFE5EFEE16ECE5FE06D2 +:1039F000B9F090F026EFE2162CE5F20609F050CF70 +:103A000027E245EE66EEFEC327E245EE65EEFAC319 +:103A100026E241EE60EEF6C327E245EE64EEF2C325 +:103A200026E241EE62EEEEC328E241E0EFCF809164 +:103A3000A802806136E0E3163CE5F30609F49FC076 +:103A40008091A802886047E0E4164CE5F40608F48B +:103A500096C08091A802806292C08091A8028D7F5A +:103A60005CE0E5165CE5F50609F489C078F4809120 +:103A7000A8028C609AE0E9169CE5F90609F47FC07B +:103A800008F48CC08091A8028E7F79C08091A80232 +:103A9000877FFEE0EF16FCE5FF0609F470C0809119 +:103AA000A8028B7F2FE0E2162CE5F20608F467C02F +:103AB0008091A8028F7E63C03BEFE3163CE5F306DE +:103AC00009F464C068F553E1E5165CE5F50609F410 +:103AD00077C090F491E1E9169CE5F90609F46CC011 +:103AE000E2E1EE16ECE5FE0609F01FCF0E94C217D8 +:103AF0008091A8028F7743C0F5E1EF16FCE5FF0641 +:103B000009F466C008F47AC08091A90281603AEF96 +:103B1000E3163CE5F30609F008CF8093A90205CF30 +:103B20004FEFE4164CE5F40609F44EC088F48DEF2F +:103B3000E8168CE5F806C1F18091A9028E7F9EEF10 +:103B4000E9169CE5F90648F38091A9028360E5CF68 +:103B5000E1E0EE16EDE5FE0609F459C008F444C0B4 +:103B600060E022E0E2162DE5F20609F0DECE8EE0FE +:103B700090E00E94CC31D9CE8091A80281608093E0 +:103B8000A802D3CE8091A8028460F9CF8091A902C7 +:103B90008260C3CF8091A8028064F1CF0E94C217D7 +:103BA0008091A8028068EBCF8091A9028D7FB5CF6C +:103BB0008091A8028F7DE3CF8091A8028F7BDFCF19 +:103BC0008091A802837FDBCF8091A9028C7FA5CF53 +:103BD0008091A80282FB992790F921E0922790FB1F +:103BE00082F990FB83F9CBCF8091A902982F909511 +:103BF00091708E7F892B90FB81F98FCF0E94C21725 +:103C00009091A802892F97FB87F98058B8CF61E07F +:103C1000AECF8091340236E1E3163CE5F30609F0BD +:103C200021C38A7A91E009F490E09093E001811138 +:103C300006C089E20E94170B0E94A70ADECC85E32A +:103C4000F9CF85E30CC380915F0380FF1BC08E7F9B +:103C500080935F0360915F037091600380916103C3 +:103C6000909162030E943813109298024FEF50E730 +:103C700082E0415050408040E1F700C000000E94C7 +:103C8000B00FBBCC816080935F0361E086950E949A +:103C90004014B3CC4FE955E168EA75E10E94CC06C7 +:103CA000ACCC48EA55E16FE975E1F8CF45E154E164 +:103CB0006CE074E1F3CF44EF53E160E074E1EECFE8 +:103CC0004CED53E168EE73E1E9CF48EE53E16CED62 +:103CD00073E1E4CF4FE254E16EE174E1DFCF61E0E4 +:103CE00081E0D5CF65E082E00E94B21586CC68E025 +:103CF00086E0FACF64E18FE0F7CF67E185E1F4CFAA +:103D000062E289E1F1CF61E083E2C1CF3BE5E316F6 +:103D10003DE5F30611F14CE5E4164DE5F40609F036 +:103D2000D3C28091A90282FB882780F991E089277C +:103D30000E94B70EC9C20E94C2175FEF84E39CE0E5 +:103D4000515080409040E1F700C000000E94D10C2B +:103D50000E94D01552CC81E0EBCF80E0E9CFC701C3 +:103D60000E94550BD82EBFC22F2D2F70C22E8F2D23 +:103D7000807F19F0C29490EFC922DD20C9F0CC20D9 +:103D800069F080E28E0D883010F081100BC08091B8 +:103D90003402C82AC09234020E94A70A8E2D0E94C3 +:103DA000F50C19C080913302C82AC0923302F4CFB7 +:103DB0008E2D0E94E10BCC2071F0C09480E28E0D1C +:103DC000883010F081103EC080913402C822C09229 +:103DD00034020E94A70AE92DE850FF0B349720F423 +:103DE0000E94C0060E94A114AA2009F4C9CB8091A8 +:103DF000310280FDC5CBF8011282859585958595A8 +:103E00000E949015C8010E949E1A809131028595EA +:103E1000859585950F900F900F900F900F90DF91E3 +:103E2000CF911F910F91FF90EF90DF90CF90BF90B7 +:103E3000AF909F908F907F906F905F904F903F904A +:103E40000C94631580913302C822C0923302C1CF13 +:103E50003F2D3F70B32E8F2D807F803219F0B294AA +:103E600080EFB822882071F041E0841681F1DD20D6 +:103E7000D9F1CC2091F1F801858180FF8FCF8F702F +:103E800085832BC0DD20B1F0909135028B2D892BDD +:103E9000C11003C00E94D70B9ECF51E0C512FACFCC +:103EA0002091A90222FD97CF981709F494CF80930F +:103EB000350291CFC11006C00E94A10A8B2D0E942D +:103EC000CC0B89CF81E0C81609F485CFF5CFDD2072 +:103ED00031F095E09C1508F47ECF8B2DDBCFE4E02C +:103EE000EC1508F478CFEACFCC2041F3F9E38F1238 +:103EF00009C02FEF37EE43E0215030404040E1F75A +:103F000000C000008E2D0E94E10B65CF8F2D86959D +:103F10008695837061F0813009F05DCFC7019370A1 +:103F2000D11002C090E080E00E94940654CFC701F7 +:103F30009370D11002C090E080E00E94AA064BCF9F +:103F40008E2DDD2029F00E9463080E94810743CF57 +:103F50000E94A807FACF8F2D837009F040C0D110BE +:103F60003ACF4E2D429546954770440F440F8E2D03 +:103F70008F7090E0042E02C0880F991F0A94E2F718 +:103F800030E020E0E4FE09C02FE030E002C0220F64 +:103F9000331F4A95E2F7209530954F2D469546956B +:103FA0004370423099F078F4609136027091370294 +:103FB000413039F0822B932B862397230E94C60B26 +:103FC0000ACF862B972B822B932BF8CF822B932B08 +:103FD000209136023091370282279327EFCF8695C2 +:103FE000DD2011F08F2D8170882309F4F4CE4E2D41 +:103FF000429546954770440F440F8E2D8F7090E088 +:10400000042E02C0880F991F0A94E2F730E020E0E6 +:10401000E4FE09C02FE030E002C0220F331F4A95B2 +:10402000E2F7209530954F2D4695469543704230E6 +:1040300099F078F46091DC027091DD02413039F042 +:10404000822B932B862397230E944C15C4CE862B5C +:10405000972B822B932BF8CF822B932B2091DC0272 +:104060003091DD0282279327EFCF5F2D5F70F52E11 +:10407000DD2029F0852F0E9490158E2D0BCF8E2DDF +:104080000E94CC0B8F2D0E946315A5CE8E2D92EF32 +:10409000891609F449C0981570F0E0EF8E1639F1D1 +:1040A000F1EF8F16C9F1DD2009F45FC0C11076CEA3 +:1040B0008F2D8F7136C023EF8216D9F134EF831222 +:1040C000F2CFDD2009F446C0FF2DFF71FF2E8F2FA8 +:1040D0000E9490158091A90282FD07C028E0F29EFF +:1040E000C00111248360809331028F2D1AC0DD201E +:1040F00071F044E04C1508F46ECE2F2D2F7181E045 +:1041000090E002C0880F991F2A95E2F7A7CF55E0EB +:104110005C1508F460CEF1CF8F2D8F71DD2009F48E +:10412000B2CF0E94901557CE8F2D8F71DD20C9F32D +:10413000AACF90E080E0DD2009F486CF9F2D9F710B +:1041400021E030E0F90102C0EE0FFF1F9A95E2F77F +:10415000CF017ACF81E00E94741531E03C1508F060 +:104160003ACE82E00E94741536CECC2059F08933C5 +:1041700009F0C8CE4FEF57EE83E0415050408040E9 +:10418000E1F7BECE8F2D8F717ECFF0E1EF16FFE508 +:10419000FF0609F42BCB21E1E2162FE5F20609F424 +:1041A0002FCB42E8E4164FE5F40609F4EBCB08F018 +:1041B00029CB90E8E9169FE5F90609F45BCBE1E825 +:1041C000EE16EFE5FE0609F4C0CB33EFE3163CE54F +:1041D000F30609F41DCC08F007CC58EDE5165CE5B4 +:1041E000F50609F411CC89EDE8168CE5F80609F41A +:1041F0001BCC97EDE9169CE5F90609F051CB26E2B8 +:1042000041EE61EEC8010E94C70DF7C930E1E31627 +:104210003FE5F30609F4F0CA41E1E4164FE5F40680 +:1042200009F0BFCF82E0E9CA85E0DE011196019076 +:104230000D928A95E1F7F801228189819A812111F5 +:10424000B6C90E94550BF82EBAC9F6E1EF16FCE587 +:10425000FF06D1F58091E0018111F3CC89E20E9443 +:10426000EC0AEACC82722CECE2162CE5F20609F498 +:1042700031CD08F0A7C046ECE4164CE5F40609F48D +:1042800015CD08F076C093ECE9169CE5F90609F423 +:1042900001CD08F05DC0F2ECEF16FCE5FF0609F475 +:1042A000D2CC9AE5E9169DE5F90609F454CD08F05B +:1042B0002DCDE114FCE5FF0609F43DCD2EEDE2160F +:1042C0002CE5F20609F444CDF8018281E080F1800A +:1042D000882309F444CDC7010E94040FD82E682F0B +:1042E000C7010E947D0BB7018D2D0E94F70E0E9421 +:1042F00019097C01882EF801D280C580C2943FE064 +:10430000C322809131028770A1F0AD2CDD2091F0A5 +:104310008F2D807F803421F080E28E0D883048F030 +:1043200082E00E947415809131028770AA24A394C0 +:104330008111A12C9F2C92942FE09222FBE0F91581 +:1043400008F449CDE92DF0E0E25AFD4C0C946D31B2 +:1043500024ECE2162CE5F20609F4A3CC4CE054E17F +:1043600065E174E135ECE3163CE5F30609F496CC1F +:1043700098CF49ECE4164CE5F40609F4A1CC88F496 +:1043800097ECE9169CE5F90609F495CC40E054E178 +:1043900064EF73E1E8ECEE16ECE5FE0609F47ECC82 +:1043A00080CFFAECEF16FCE5FF0609F48ECC4EE167 +:1043B00054E16FE274E12BECE2162CE5F20609F40D +:1043C0006DCC6FCF31EDE3163CE5F30609F492CCEA +:1043D000B8F45EECE5165CE5F50609F483CC08F468 +:1043E0007ECC9FECE9169CE5F90609F480CC6EE0E2 +:1043F00089E0E0EDEE16ECE5FE0609F475CC51CF50 +:10440000F4EDEF16FCE5FF0609F47ACC78F432ED12 +:10441000E3163CE5F30609F470CC61E088E143ED76 +:10442000E4164CE5F40609F432CC3BCF55EDE51625 +:104430005CE5F50609F467CC8DE5E816F80609F4A5 +:10444000DCC82FCF1F93CF93DF938091FE01807F35 +:10445000A9F48091FB01882389F080913002D091EA +:10446000FF016091F9017091FA01A091FC01B091F6 +:10447000FD01C62FC72316E0D81304C0DF91CF91EA +:104480001F91089590E0109711F0CF3F19F4019615 +:104490008770F2CF189F9001199F300D1124F901F8 +:1044A000E050FE4F41814713F2CF40814613EFCFDA +:1044B00042814111ECCF438154814A1B5B0B483C44 +:1044C000510528F78091FE018F7080618093FE0175 +:1044D000F901EB5FFD4F80818F708061808389EFF0 +:1044E00091E00E949E1ADF91CF911F910C944B0B8B +:1044F000AF92BF92CF92DF92EF92FF920F931F93F2 +:10450000CF93DF93CDB7DEB761970FB6F894DEBFD8 +:104510000FBECDBF8C0185E0F801DE011D96019034 +:104520000D928A95E1F7F801E28089EFA82E81E0EB +:10453000B82E6091FC017091FD016115710509F4BF +:1045400032C19091F9014091FA01892F84238F3F64 +:1045500009F429C120813181C380D480F090FB010E +:10456000F601E61BF70BFF2009F4E8C08091FE017D +:10457000582F507FE83CF10508F0ABC0511177C0CF +:10458000FE2C431321C092131FC0E1101DC08F7079 +:1045900080618093FE01C5010E949E1A8091FE01F8 +:1045A000F80185838F2D61960FB6F894DEBF0FBE9C +:1045B000CDBFDF91CF911F910F91FF90EF90DF90D2 +:1045C000CF90BF90AF900895CD2829F0822F8323FC +:1045D0008F3F09F003C180E0F82FF170DF2E80FFDC +:1045E0003CC0809130024091FF0156E0841315C019 +:1045F0002D873E878D859E850E94400F292F22950D +:104600002F702230F0F0243018F59F70F1F0F8018F +:104610009581907FD1F4D12C1EC090E0589FF0017D +:10462000599FF00D1124E050FE4F6181361306C0F2 +:104630006081261303C06281E6120FC00196877065 +:10464000D5CF9F7011F0882331F3805E883018F346 +:10465000C8010E949E1AFD2CA5CFEE2009F4A2CF1E +:104660008091FE0181608093FE01F12C9BCF43136A +:1046700006C0921304C0F801EE2009F479C0C80105 +:104680000E944C0F882309F1EE20F9F08091FE0181 +:10469000803270F02091F9013091FA0138872F8330 +:1046A0001986DB86CA868C87CE0107960E949E1AE1 +:1046B00086E0F801A9EFB1E001900D928A95E1F74B +:1046C0000E942222FF24F3946DCFC8010E949E1AFB +:1046D000F9CF51110AC089EF91E00E949E1A86E03D +:1046E000F50111928A95E9F7C0CF43130FC09213D9 +:1046F0000DC0E1100BC0F8018583C8010E949E1A0D +:1047000086E0F50111928A95E9F74CCFC8010E9425 +:104710004C0F8823D1F2EE20C1F28091FE0180324D +:1047200038F22091F9013091FA013A8329831B82F2 +:10473000DD82CC828E83CE010196B8CFE83CF105B4 +:10474000F8F6FE2CEE2009F243131FC092131DC091 +:104750008091FE0180FD10C0982F907F69F0F801D4 +:104760008583903F31F0982F907F905F8F70892BD9 +:104770008583C8010E949E1A86E0F801A9EFB1E086 +:1047800001900D928A95E1F70DCFC8010E944C0F60 +:1047900081118ECF8091FE0181608093FE01C8015E +:1047A0000E949E1AFFCEEE2009F48FCFC8010E940E +:1047B0004C0FF82E882309F488CF86E0F801A9EF82 +:1047C000B1E001900D928A95E1F78091F901909105 +:1047D000FA010E94400F0E942222E4CE81E08E2541 +:1047E000FBCE1F93CF93DF93CDB7DEB767970FB69E +:1047F000F894DEBF0FBECDBF4B8B5C8B6D8B7E8B79 +:104800008F8B6111109233021A8A198A85E0FE019A +:104810007396DE011D9601900D928A95E1F786E070 +:10482000FE013D96DE01179601900D928A95E1F703 +:10483000CE0107960E947822882389F016E08091A5 +:1048400030029091FF01891349C067960FB6F89422 +:10485000DEBF0FBECDBFDF91CF911F91089586E0DF +:10486000FE013796DE01119601900D928A95E1F7CF +:104870008A859B85892B11F38F81988589238F3FAA +:10488000E9F22091FF0130E0C90101968770992774 +:10489000409130024817190671F40E94C217109215 +:1048A000FF011092300286E0E9EFF1E0DF011D9296 +:1048B0008A95E9F7C3CF96E0929FD001939FB00D00 +:1048C0001124A050BE4FFE01319601900D929A9591 +:1048D000E1F78093FF010E944B0BB0CF819FC00195 +:1048E000112480509E4F0E947822882309F4ADCF76 +:1048F0008091300290E00196877099278093300272 +:104900009ECFFF920F931F93CF93DF93CDB7DEB768 +:10491000C45BD1090FB6F894DEBF0FBECDBF182F10 +:104920008111D7C0662309F475C0C055DF4F1882C6 +:10493000C05BD040CF54DF4F1882C15BD04011E044 +:10494000CE54DF4F1883C25BD0400E94880681603E +:10495000782FCD54DF4F99838883C35BD040C055F7 +:10496000DF4F4881C05BD040CF54DF4F5881C15BDF +:10497000D040CE54DF4F6881C25BD040CC54DF4F73 +:104980008881C45BD0400E94F123C555DF4F188257 +:10499000CB5AD040C455DF4F1882CC5AD040C355B3 +:1049A000DF4F1882CD5AD0400E9488068160782F50 +:1049B000C255DF4F99838883CE5AD040C555DF4F0B +:1049C0004881CB5AD040C455DF4F5881CC5AD04093 +:1049D000C355DF4F6881CD5AD040C155DF4F888124 +:1049E000CF5AD0400E94F123109345020E948806BE +:1049F000909342028093410281E0CC54DF4F0FB686 +:104A0000F894DEBF0FBECDBFDF91CF911F910F9104 +:104A1000FF90089502E0CA55DF4F0883C65AD04080 +:104A2000C955DF4F1882C75AD04011E0C855DF4F33 +:104A30001883C85AD0400E9488068160782FC755D5 +:104A4000DF4F99838883C95AD040CA55DF4F4881C8 +:104A5000C65AD040C955DF4F5881C75AD040C855B3 +:104A6000DF4F6881C85AD040C655DF4F8881CA5A87 +:104A7000D0400E94F123CF55DF4F0883C15AD04068 +:104A8000CE55DF4F1882C25AD040CD55DF4F188225 +:104A9000C35AD0400E9488068160782FCC55DF4FE2 +:104AA00099838883C45AD040CF55DF4F4881C15A7B +:104AB000D040CE55DF4F5881C25AD040CD55DF4F40 +:104AC0006881C35AD040CB55DF4F8881C55AD0404A +:104AD00089CF813009F0C0C0662309F45FC0C45695 +:104AE000DF4F1882CC59D040C356DF4F8883CD5951 +:104AF000D040C256DF4F8883CE59D0400E948806EE +:104B00008160782FC156DF4F99838883CF59D04079 +:104B1000C456DF4F4881CC59D040C356DF4F58812F +:104B2000CD59D040C256DF4F6881CE59D040C056D3 +:104B3000DF4F8881C05AD0400E94F123C956DF4F11 +:104B40001882C759D040C856DF4F1883C859D04083 +:104B5000C756DF4F1882C959D0400E94880681602D +:104B6000782FC656DF4F99838883CA59D040C956DB +:104B7000DF4F4881C759D040C856DF4F5881C859C8 +:104B8000D040C756DF4F6881C959D040C556DF4F66 +:104B90008881CB59D0400E94F1232ECF02E0CE561F +:104BA000DF4F0883C259D040CD56DF4F8883C359A9 +:104BB000D040CC56DF4F8883C459D0400E9488062D +:104BC0008160782FCB56DF4F99838883C559D040B9 +:104BD000CE56DF4F4881C259D040CD56DF4F588165 +:104BE000C359D040CC56DF4F6881C459D040CA5613 +:104BF000DF4F8881C659D0400E94F123C357DF4F51 +:104C00000883CD58D040C257DF4F1883CE58D040CC +:104C1000C157DF4F1882CF58D0400E94880681606C +:104C2000782FC057DF4F99838883C059D040C3572E +:104C3000DF4F4881CD58D040C257DF4F5881CE5802 +:104C4000D040C157DF4F6881CF58D040CF56DF4F9B +:104C50008881C159D0409FCF823009F0ABC0662314 +:104C600009F45EC0C857DF4F1882C858D040C757F4 +:104C7000DF4F8883C958D04081E0C657DF4F888313 +:104C8000CA58D0400E9488068160782FC557DF4FF0 +:104C900099838883CB58D040C857DF4F4881C85884 +:104CA000D040C757DF4F5881C958D040C657DF4F53 +:104CB0006881CA58D040C457DF4F8881CC58D04053 +:104CC0000E94F123CD57DF4F1882C358D040CC57F4 +:104CD000DF4F1883C458D040CB57DF4F1882C558D8 +:104CE000D0400E9488068160782FCA57DF4F998391 +:104CF0008883C658D040CD57DF4F4881C358D04035 +:104D0000CC57DF4F5881C458D040CB57DF4F688114 +:104D1000C558D040C957DF4F8881C758D0403BCFD6 +:104D2000EF968FAFEF97C158DF4F8883CF57D040B2 +:104D300081E0C058DF4F8883C058D0400E94880669 +:104D40008160782FCF57DF4F99838883C158D04037 +:104D5000EF964FADEF97C158DF4F5881CF57D040F6 +:104D6000C058DF4F6881C058D040CE57DF4F888190 +:104D7000C258D0400E94F123EA961FAFEA97EB9603 +:104D80001FAFEB97EC961FAEEC970E9488068160F0 +:104D9000782FEE969FAF8EAFEE97EA964FADEA97DB +:104DA000EB965FADEB97EC966FADEC97EE968FAD13 +:104DB000EE97F1CE833009F081C0662309F43FC03D +:104DC00019E0E5961FAFE597E6961FAEE69781E0FE +:104DD000E7968FAFE7970E9488068160782FE99663 +:104DE0009FAF8EAFE997E5964FADE597E6965FAD3D +:104DF000E697E7966FADE797E9968FADE9970E9442 +:104E0000F123E0961FAFE097E1961FAEE197E2969F +:104E10001FAEE2970E9488068160782FE4969FAFCC +:104E20008EAFE497E0964FADE097E1965FADE197E6 +:104E3000E2966FADE297E4968FADE497ACCE1BE0BF +:104E4000AB961FAFAB97AC961FAEAC9781E0AD961B +:104E50008FAFAD970E9488068160782FAF969FAF85 +:104E60008EAFAF97AB964FADAB97AC965FADAC97AF +:104E7000AD966FADAD97AF968FADAF970E94F12312 +:104E8000A6961FAFA697A7961FAEA797A8961FAE88 +:104E9000A8970E9488068160782FAA969FAF8EAF50 +:104EA000AA97A6964FADA697A7965FADA797A89687 +:104EB0006FADA897AA968FADAA976DCE843009F0F2 +:104EC00081C0662309F43FC009E0A1960FAFA19706 +:104ED00011E0A2961FAFA297A3961FAFA3970E94BF +:104EE00088068160782FA5969FAF8EAFA597A19673 +:104EF0004FADA197A2965FADA297A3966FADA39772 +:104F0000A5968FADA5970E94F1236C960FAF6C9775 +:104F10006D961FAF6D976E961FAE6E970E948806B6 +:104F20008160782FA0969FAF8EAFA0976C964FAD03 +:104F30006C976D965FAD6D976E966FAD6E97A09600 +:104F40008FADA09728CE0BE067960FAF679711E063 +:104F500068961FAF689769961FAF69970E94880689 +:104F60008160782F6B969FAF8EAF6B9767964FAD32 +:104F7000679768965FAD689769966FAD69976B960E +:104F80008FAD6B970E94F12362960FAF6297639685 +:104F90001FAF639764961FAE64970E948806816076 +:104FA000782F66969FAF8EAF669762964FAD6297E9 +:104FB00063965FAD639764966FAD649766968FADA9 +:104FC0006697E9CD853009F07DC0662309F445C0B8 +:104FD00039E0F32E2D96FFAE2D9702E02E960FAFFF +:104FE0002E9711E02F961FAF2F970E9488068160A1 +:104FF000782F61969FAF8EAF61972D964FAD2D970D +:105000002E965FAD2E972F966FAD2F9761968FAD31 +:1050100061970E94F1232896FFAE289729960FAF3B +:1050200029972A961FAE2A970E9488068160782FBA +:105030002C969FAF8EAF2C9728964FAD2897299628 +:105040005FAD29972A966FAD2A972C968FAD2C9736 +:105050000E94F12310934402C9CC2BE0F22E239638 +:10506000FFAE239702E024960FAF249711E0259618 +:105070001FAF25970E9488068160782F27969FAFE3 +:105080008EAF279723964FAD239724965FAD249735 +:1050900025966FAD259727968FAD27970E94F12310 +:1050A000FDAE0EAF1FAE0E9488068160782F22965B +:1050B0009FAF8EAF22974DAD5EAD6FAD22968FAD97 +:1050C0002297C6CF863009F048C0662329F199E0BF +:1050D000F92EF8AE03E009AF11E01AAF0E9488067E +:1050E0008160782F9CAF8BAF48AD59AD6AAD8CAD68 +:1050F0000E94F123FBAA0CAB1DAA0E9488068160C6 +:10510000782F9FAB8EAB4BA95CA96DA98FA90E948C +:10511000F123109343026ACC8BE0F82EFEA603E045 +:105120000FA711E018AB0E9488068160782F9AAB18 +:1051300089AB4EA55FA568A98AA90E94F123F9A6AB +:105140000AA71BA60E9488068160782F9DA78CA7BE +:1051500049A55AA56BA58DA5DACF873009F041C0C6 +:105160006623F9F013E01CA31DA381E08EA30E9427 +:1051700088068160782F98A78FA34CA15DA16EA1AE +:1051800088A50E94F1231F8F18A319A20E948806E8 +:105190008160782F9BA38AA34F8D58A169A18BA111 +:1051A000FACC05E00A8F13E01B8F81E08C8F0E9400 +:1051B00088068160782F9E8F8D8F4A8D5B8D6C8DD8 +:1051C0008E8D0E94F1230D8B1E8B1F8A0E948806F4 +:1051D0008160782F998F888F4D895E896F89898D3D +:1051E000DACC883009F008CC662301F106E0088BA0 +:1051F00013E0198B81E08A8B0E9488068160782FEA +:105200009C8B8B8B488959896A898C890E94F123F0 +:105210000B871C871D860E9488068160782F9F87D8 +:105220008E874B855C856D858F85B5CC08E00E83B8 +:1052300013E01F8381E088870E9488068160782FB1 +:105240009A8789874E815F8168858A850E94F123CC +:1052500009831A831B820E9488068160782F9D83B0 +:105260008C8349815A816B818D8195CC1F920F92DD +:105270000FB60F9211242F933F934F935F936F9329 +:105280007F938F939F93AF93BF93CF93DF93EF93CE +:10529000FF93D091E900DF708091EC00C82FC170BE +:1052A00080FDC0E81092E9008091F000877F809334 +:1052B000F00078940E94D7171092E9008091F000D6 +:1052C00088608093F000CD2BCF70C093E900FF91F0 +:1052D000EF91DF91CF91BF91AF919F918F917F918E +:1052E0006F915F914F913F912F910F900FBE0F9053 +:1052F0001F9018951F920F920FB60F9211242F93A3 +:105300003F934F935F936F937F938F939F93AF934D +:10531000BF93EF93FF938091E10082FF09C08091DA +:10532000E20082FF05C08091E1008B7F8093E10065 +:105330008091DA0080FF24C08091D80080FF20C0D7 +:105340008091DA008E7F8093DA008091D90080FF0F +:105350009BC088E189BD8AE189BD09B400FEFDCF0B +:1053600081E08093D2028091AD02811109C00E9438 +:10537000EC040E94B7058091E20084608093E20013 +:105380008091E10080FF17C08091E20080FF13C090 +:105390008091E2008E7F8093E2008091E200806144 +:1053A0008093E2008091D80080628093D80019BC7D +:1053B00085E08093D2028091E10084FF29C0809132 +:1053C000E20084FF25C088E189BD8AE189BD89B5F5 +:1053D000982F917080FFFBCF8091D8008F7D8093B4 +:1053E000D8008091E1008F7E8093E1008091E200FF +:1053F0008F7E8093E2008091E20081608093E200E2 +:105400008091D302882309F445C084E08093D202BE +:105410008091E10083FF27C08091E20083FF23C0D9 +:105420008091E100877F8093E10082E08093D20247 +:105430001092D3028091E1008E7F8093E1008091F1 +:10544000E2008E7F8093E2008091E2008061809391 +:10545000E20042E060E080E00E9485058091F0007B +:1054600088608093F000FF91EF91BF91AF919F9181 +:105470008F917F916F915F914F913F912F910F90FD +:105480000FBE0F901F90189519BC1092D202109267 +:10549000AD0276CF8091E30087FD93E09093D20236 +:1054A000B7CF78941F921FB61F9211248F939F93AA +:1054B000AF93BF938091A4029091A502A091A60200 +:1054C000B091A7020196A11DB11D8093A4029093F3 +:1054D000A502A093A602B093A702BF91AF919F919E +:1054E0008F911F901FBE1F9018951F921FB61F927D +:1054F00011248F939F93AF93BF938091A302811147 +:1055000013C08091A4029091A502A091A602B0912F +:10551000A7024196A11DB11D8093A4029093A502FC +:10552000A093A602B093A702BF91AF919F918F91D4 +:105530001F901FBE1F901895CDB7DEB7AA970FB664 +:10554000F894DEBF0FBECDBF84B7877F84BF0FB690 +:10555000F894A89580916000886180936000109213 +:1055600060000FBE80E890E00FB6F8948093610071 +:10557000909361000FBE85B7806885BF85B780684E +:1055800085BF8DEB98E09093BF018093BE010E9490 +:10559000EC040E94B7058091E20084608093E200F1 +:1055A00078948091D2028823A1F01091E9001F70B5 +:1055B0009091EC00892F817090FD80E8182B10925B +:1055C000E9008091E80083FD0E94D7171F701093B7 +:1055D000E90082E084BD93E095BD9AEF97BD80938A +:1055E0006E000E94730F811102C00E94A80E80EF0E +:1055F0000E94BF0881EF0E94BF0882EF0E94BF088F +:1056000083EF0E94BF0803E511E06FE5E62E61E03D +:10561000F62ED8018D918D018F3F11F00E94BF08A9 +:10562000E016F106B1F710924B0210924A02109266 +:105630007A021092790210924D0210924C0210924E +:105640007C0210927B0210924F0210924E02109236 +:105650007E0210927D02109251021092500210921E +:10566000800210927F020E94B717811102C00E942F +:10567000D01582E090E00E94B831809370020E94C1 +:105680008C0F9093A9028093A8020E943C16EFE32E +:10569000FCE93197F1F700C000000E943C168091B0 +:1056A000790280FF08C06FEF7FEF90E080E00E94FA +:1056B000EA310E94D10C83E090E00E94B83190E082 +:1056C0000E94C60B8091DC029091DD020E94B91409 +:1056D00080915202811132C00E94B717811104C01B +:1056E0000E94D0150E94C01588E090E00E94C03151 +:1056F00060935F03709360038093610390936203F0 +:105700006E7F71F40E94C01588E090E00E94C03165 +:1057100060935F03709360038093610390936203CF +:105720000E94D2061092980280915F0380FF03C00E +:1057300086950E947B1481E0809352026AE871E0B2 +:1057400056E6852E52E0952E28E731E0E1E8F1E0BB +:1057500041E050E01191812F82958F7090E0DC0143 +:105760009196FC9091971F70E12E6A0101C0CC0CBC +:105770001A95EAF70C2D00950F2191960C939197AD +:1057800092961C9192971C2992961C93D901FD9098 +:105790009D010F2D02950F7010E0D8019196BC90DD +:1057A000BF2DBF70FB2E6A0101C0CC0CBA95EAF781 +:1057B000DC2CD094DB20D8019196DC9291979296C4 +:1057C000DC909297DC289296DC92DC0190968C918A +:1057D00090E002C095958795EA94E2F78170D80130 +:1057E00090960C9110E002C015950795FA94E2F797 +:1057F00090E000FD92E0892BD4018D934D016E174E +:105800007F0709F0A7CF86EA92E0909390028093F9 +:105810008F0281E20E947B1481E090E00E944C158F +:1058200080E091E09093A00280939F028091D20249 +:10583000FF24F39408E11AE1853009F47CC20E9448 +:105840003C16882359F08FB7F8944091A4025091E8 +:10585000A5026091A6027091A7028FBFA9E7B2E0EE +:10586000E1E7F2E010E000E0702F8D919D91219131 +:1058700031912817390709F487C22827392760E0B2 +:10588000EE24E394F12CA9014E215F21452B09F46C +:1058900075C269A37AA39C012E213F2191E0232B9D +:1058A00009F490E09BA30E9488068160782F9DA355 +:1058B0008CA349A15AA16BA18DA10E94F123000FD5 +:1058C000111FF801EF58FD4F80819181E826F926DC +:1058D000F182E082809198028823D1F18091970231 +:1058E000E0915F03E695E81BE0939302823009F0B4 +:1058F00062C2F0E0EC53FD4FE4910E2F10E044E261 +:10590000E42E43E1F42E80919402882361F01092FA +:1059100094020E94880690939202809391021092C2 +:105920009602109295020E948806E0919102F091F1 +:1059300092028E1B9F0B8F3F9F4750F4E00FF11F89 +:10594000F0939202E093910281E992E0F7010995C8 +:105950003DE5E32E32E0F32E04E512E04FE6442E5F +:1059600041E0542E58E7652E51E0752E61E8862EF1 +:1059700061E0962E76E6A72E72E0B72E212C312C10 +:10598000D501ED915D01EE0FEE0FD4012D914D018A +:10599000A22FA295AF70B0E090968C9190E02F70FE +:1059A00002C0959587952A95E2F781709927D301D2 +:1059B0004D913D01A42FA295AF70B0E090962C912F +:1059C00030E04F7002C0359527954A95E2F7A9015E +:1059D0004170552720FF02C042E050E0842BE82BA5 +:1059E000D5011197EC93D201CD902D01EF70F0E02D +:1059F000E15AFE4F8081F7019081890F8083D12C7D +:105A0000082E000C990B20E08C159D054CF0D80158 +:105A10008C918F5F8C9360E0832D0E94812421E024 +:105A2000F7018081082E000C990B442755274C194B +:105A30005D09481759074CF0D8018C9181508C931F +:105A400061E0832D0E94812421E0F7018081082EEE +:105A5000000C990BB6010E945931D7018D937D013D +:105A6000222A33940F5F1F4FB9E03B1289CF2220C7 +:105A700059F08FB7F8944091A4025091A50260911B +:105A8000A6027091A7028FBF86E0E8E8F2E0DE018F +:105A9000119601900D928A95E1F7F0908A02E090BC +:105AA0008B0210918C0200918D0210928A0210924A +:105AB0008B0210928C0210928D028F2D8E2909F488 +:105AC00048C080918602909187020E9479069C01CD +:105AD00090918202992309F4C5C323333105C8F19B +:105AE0009F3F19F09F5F90938202FF2059F00E9420 +:105AF00043089FEF1F140CF491E0899F802D11241F +:105B000080938A02EE2059F00E9443089FEF1E14F2 +:105B10000CF491E0899F802D112480938B023091A9 +:105B20008A023323B1F020918B02222391F045EBBE +:105B30003403C0011124992309F497C190938A0278 +:105B400045EB240390011124332309F492C13093CF +:105B50008B02812F802B09F448C0809184029091A0 +:105B600085020E9479069C0190918102992309F493 +:105B700074C325363105C8F19F3F19F09F5F90939C +:105B80008102112359F00E9421089FEF11160CF495 +:105B900091E0899F802D112480938C02002359F07D +:105BA0000E9421089FEF10160CF491E0899F802D30 +:105BB000112480938D0230918C023323B1F0209117 +:105BC0008D02222391F045EB3403C0011124992367 +:105BD00009F453C190938C0245EB240390011124E6 +:105BE000332309F44EC130938D0280918A02909143 +:105BF0008B02892B90918C02892B90918D02892B9D +:105C000011F00E94810786E0FE013196A8E8B2E01B +:105C100001900D928A95E1F70E94C00690916F0263 +:105C2000891731F00E94C00680936F020E94A11470 +:105C30008091D202843009F0F9CD83E08093E900AD +:105C40008091E80082FFF2CD8091E80090E085FF2E +:105C500006C00E940B05882309F417C191E08091CA +:105C6000E8008B778093E800992309F4DFCDE98180 +:105C7000E150E33108F09DC1F0E0E659FD4C0C9491 +:105C80006D318091D202843009F443C080E00E94DB +:105C9000A1141092980280918E02811116C0F09288 +:105CA0008E0280915F03982F9170909353028E7FA4 +:105CB00080935F03BFEFE0E7F2E0B150E040F040D7 +:105CC000E1F700C000000E94B00F1092A30288E12B +:105CD00090E0A0E40FB6F894A895809360000FBE02 +:105CE000A093600083B7817F846083BF83B78160A6 +:105CF00083BF7894889583B78E7F83BF0FB6F8945F +:105D0000A895809160008861809360001092600087 +:105D10000FBE8091D102882371F00E943C16E9E702 +:105D2000F2E081919191892B09F078C281E892E0AB +:105D30008E179F07B1F78091D202853009F4A1CF69 +:105D40000E94C2170E94C0060E94A11410928E02E7 +:105D500080915302882359F080915F038160809382 +:105D60005F0386950E947B140E949A0F68CD8091F4 +:105D700099028823C9F30E94B00FF6CF6F5FEE0C33 +:105D8000FF1C6C3009F07FCD0F5F1F4F04301105F1 +:105D900009F06ACD8FEF8EA38FA318A60E94880604 +:105DA0008160782F9AA789A74EA15FA168A58AA5CF +:105DB0000E94F1238FCD863059F4F0E0EF53FD4F70 +:105DC000E4910E2F10E034E1E32E33E1F32E9BCD6E +:105DD000893061F4E695F0E0E254FD4FE4910E2F36 +:105DE00010E025E6E22E22E1F22E8DCD8F3061F417 +:105DF000E695F0E0E554FD4FE4910E2F10E090E1C0 +:105E0000E92E92E1F92E7FCD853159F4F0E0E85486 +:105E1000FD4FE4910E2F10E08DE9E82E81E1F82E80 +:105E200072CD08E210E0FDE0EF2EF1E1FF2E8831A7 +:105E300009F469CD833249F4E6EBF2E0059114915F +:105E4000BBEBEB2EB2E1FB2E5ECD04EF11E0A0ED3B +:105E5000EA2EA0E1FA2E843209F455CD00ED17E0C8 +:105E6000E1EDEE2EE6E0FE2E4ECD81E080938A023B +:105E700067CE81E080938B026CCE81E080938C02B0 +:105E8000ABCE81E080938D02B0CE00E210E0CE0177 +:105E900001967C018091E80085FD0AC08091E800B0 +:105EA0008B778093E8000E940B05882399F3D6CE68 +:105EB0008091F100D7018D937D010150110951F7B7 +:105EC000CDCE1A8289E08B833FC08A81823009F46B +:105ED000BBC18330A9F0813009F06BC02FB7F894B3 +:105EE0006091A4027091A5028091A6029091A702F0 +:105EF0002FBF0E9473316B837C838D839E8324C06C +:105F00008091790290917A029827892798279C831B +:105F10008B8380917B0290917C0298278927982718 +:105F20009E838D8380917D0290917E0298278927A0 +:105F3000982798878F8380917F029091800298277D +:105F4000892798279A8789878091D202843009F01F +:105F50006DCC1091E9001F709091EC00892F817039 +:105F600090FD80E8182B82E08093E9008091E800A2 +:105F700080FF0DC050E040E060E270E0CE0101968D +:105F80000E943C058091E8008E778093E8001F70A6 +:105F90001093E9004BCC8A81823059F46B817C816B +:105FA0008D819E810E94733186E290E00E94CC3107 +:105FB000CBCF8FEF8983C8CF4C816B818A810E94C0 +:105FC000D10E9827892798279E838D83BDCFED809A +:105FD000FE80FE24EF24FE248A810B81B8E10B9F12 +:105FE00080011124E0E68E9F000D111D11248C818B +:105FF00090E0880F991F080F191F6F2DC801879611 +:106000000E94CC316E2DC8018896D0CF0E943B0EE5 +:106010009BCF8A818138C1F060F4803809F094CF39 +:1060200020E04B8160916103809160030E944A13DC +:106030008BCF823849F1833809F086CF20E0409138 +:1060400062036C818B81F2CF8B810E947B149B81D8 +:1060500080915F03911111C08E7F80935F03109236 +:106060009802FFEF20E742E0F15020404040E1F786 +:1060700000C000000E94B00F67CF816080935F0373 +:1060800086950E947B1460CF8B81809363035CCFE5 +:106090008A81813899F030F4803809F055CF8091A9 +:1060A000620311CF823891F0833809F04DCF80918F +:1060B00060038B83809161038C8346CF80915F0363 +:1060C00080FF02C08695FFCE80E0FDCE8091630305 +:1060D000FACE60915F0370916003809161039091AB +:1060E00062030E94381330CF80E18A832DCF84E091 +:1060F0008A8389E1E8CE0A811B81102701271027B6 +:10610000CE0101966C01EC80DC01AE0DB11D7D016C +:10611000C80189519C4FEC14FD0409F415CF0931D5 +:10612000B4E01B0750F40E94B831F60184830F5F7E +:106130001F4FBFEFCB1ADB0AEBCFD60114961C9290 +:10614000F6CF0A811B81102701271027FE01319607 +:106150006F01EC80E00EF12EF11CC80189519C4FBB +:10616000E016F10609F4F0CE0931F4E01F0728F437 +:10617000D60114966C910E94CC31BFEFCB1ADB0A8A +:106180000F5F1F4FEACF0E942B0EDECE8AE0ADCF0D +:106190000A811B81102701271027FE0131966F010C +:1061A000EC80CF018E0D911D7C01C8018796EC1407 +:1061B000FD0409F4C9CE003CA3E01A0750F40E9484 +:1061C000B831F60184830F5F1F4FBFEFCB1ADB0A94 +:1061D000ECCFD60114961C92F6CF0A811B811027B2 +:1061E00001271027FE0131966F01EC80E00EF12EA1 +:1061F000F11CC8018796E016F10609F4A5CE003C13 +:10620000F3E01F0728F4D60114966C910E94CC315C +:10621000BFEFCB1ADB0A0F5F1F4FEBCF09BD19BDD4 +:1062200009B400FEFDCF8091D8008F7D8093D80007 +:106230008091E00082608093E0008091E00081FD29 +:10624000FCCF0E94C21777CD86E290E00E94B83161 +:106250001B821C821D828E8377CE2D32314008F046 +:106260008DCCC3CC2D32314008F03CCC72CC87FBB6 +:10627000082E062687FD819567FD61950E9489316C +:106280000EF4919507FC81950895AA1BBB1B51E163 +:1062900007C0AA1FBB1FA617B70710F0A61BB70B96 +:1062A000881F991F5A95A9F780959095BC01CD013B +:1062B000089597FB072E16F4009407D077FD09D0B8 +:1062C0000E94453107FC05D03EF4909581959F4F83 +:1062D0000895709561957F4F0895EE0FFF1F05900B +:1062E000F491E02D09946927962769277827872755 +:1062F000782708950E943532332312F48A1B9B0BB2 +:106300000C9484310E943532B7FF0895821B930BA1 +:106310000895991B79E004C0991F961708F0961B01 +:10632000881F7A95C9F780950895FB01DC0102C0AA +:1063300005900D9241505040D8F70895FC0141500E +:10634000504030F001900616D1F73197CF010895F3 +:10635000882799270895FB01DC0104C08D910190E5 +:10636000801921F441505040C8F7881B990B0895BB +:10637000F999FECF92BD81BDF89A992780B508950D +:10638000A6E1B0E044E050E00C94F231A8E1B0E0C6 +:1063900042E050E00C94F231262FF999FECF92BDE5 +:1063A00081BDF89A019700B4021639F01FBA20BDDA +:1063B0000FB6F894FA9AF99A0FBE08950396272F0C +:1063C0000E94CD310E94CC31252F0E94CD31242F47 +:1063D0000C94CD310196272F0E94CD310C94CC31F5 +:1063E000DC01CB01FC01F999FECF06C0F2BDE1BD95 +:1063F000F89A319600B40D9241505040B8F7089584 +:106400000E943532A59F900DB49F900DA49F800DE2 +:10641000911D11240895B7FF0C9400320E940032A0 +:10642000821B930B0895A1E21A2EAA1BBB1BFD0130 +:106430000DC0AA1FBB1FEE1FFF1FA217B307E40763 +:10644000F50720F0A21BB30BE40BF50B661F771FBB +:10645000881F991F1A9469F760957095809590959B +:106460009B01AC01BD01CF010895A29FB001B39F74 +:10647000C001A39F700D811D1124911DB29F700D4D +:10648000811D1124911D0895F894FFCF5E0F5E0FBA +:10649000670F670F690F670F670F670F5E0F5E0F5C +:1064A0006E0F670F670F6E0FBC18E4183719E418EA +:1064B000371917194F1937194C1A591AB41EB41E27 +:1064C000281F281F861FA01FEB1EEB1EAB1F3520A9 +:1064D00046204620612F652FCB2FDC2FE72F06307B +:1064E000093048306930D92FD92F743077307B305C +:0A64F000A130C330C630C830ED30D3 +:1064FA007606910C700C6C0C680C01191A1B1C1D89 +:10650A001E1F202122010201002A002A2A0181825B +:10651A0083E200E900EA00B500B600B700CD0083C7 +:10652A0001CC008A0192019401210223022402254E +:10653A0002260227022A02B300B4006F007000F09C +:10654A00F1F2F3F5F6F700010203040537363500D8 +:10655A00FF0100010000FFFF0000010001FF00042D +:10656A00040404040404020261626466909294972B +:10657A00066063656791939596070001020202021D +:10658A000606060909090909090F0F0F0F0F0F154A +:10659A00151518191919191919191919192324402E +:0E65AA0022B6B6019401DE00C808E10801091E :00000001FF From a7e0863cd7b062dc363dbaed31696288c5db89ce Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Fri, 5 Nov 2021 20:38:53 +0800 Subject: [PATCH 045/155] Update info.json --- keyboards/keychron/q1/rev_0101/keymaps/via/info.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/keychron/q1/rev_0101/keymaps/via/info.json b/keyboards/keychron/q1/rev_0101/keymaps/via/info.json index aede68abad12..a994185c2273 100644 --- a/keyboards/keychron/q1/rev_0101/keymaps/via/info.json +++ b/keyboards/keychron/q1/rev_0101/keymaps/via/info.json @@ -20,9 +20,9 @@ {"label":"F12", "x":12.75, "y":0}, {"label":"Delete", "x":14, "y":0}, - {"label":"Vol-", "x":15.25, "y":0}, - {"label":"mute", "x":16.25, "y":0}, - {"label":"Vol+", "x":17.25, "y":0}, + {"label":"Mute", "x":15.25, "y":0, "w":0.75}, + {"label":"Vol-", "x":16, "y":0, "w":0.75, "h":0.5}, + {"label":"Vol+", "x":16, "y":0.5, "w":0.75, "h":0.5}, {"label":"~", "x":0, "y":1.25}, {"label":"!", "x":1, "y":1.25}, @@ -97,4 +97,4 @@ {"label":"Right", "x":15.25, "y":5.5} ] } } -} \ No newline at end of file +} From 6b786caf45b76ef5b71ae41c217014fed77eff33 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Fri, 5 Nov 2021 13:03:25 -0400 Subject: [PATCH 046/155] Update stretch timer code for max timer limitations. --- .../solartempest/9e/keymaps/via/keymap.c | 13 +- .../solartempest/9e/solartempest_9e_via.hex | 1883 +++++++++-------- 2 files changed, 955 insertions(+), 941 deletions(-) diff --git a/keyboards/solartempest/9e/keymaps/via/keymap.c b/keyboards/solartempest/9e/keymaps/via/keymap.c index 7d77a1d9e281..4158b582c0b6 100644 --- a/keyboards/solartempest/9e/keymaps/via/keymap.c +++ b/keyboards/solartempest/9e/keymaps/via/keymap.c @@ -35,7 +35,8 @@ uint16_t alt_tab_timer = 0; bool is_stretch_active = false; // Stretch Timer Code bool is_stretch_time = false; -uint32_t stretch_timer = 0; +uint16_t stretch_timer = 0; +uint16_t stretch_minutes = 0; #ifdef VIA_ENABLE enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. @@ -254,10 +255,15 @@ void matrix_scan_user(void) { #ifdef RGBLIGHT_ENABLE //Stretch timer code if (is_stretch_active && !is_stretch_time) { - if (timer_elapsed(stretch_timer) > 2700000) { //Change RGB after 5s (Configurable. Test for 5s. 45 minutes is 2,700,000. 1 hour is 3,600,000) + if(timer_elapsed(stretch_timer)>60000) { //1 minute has passed. Timer is uint16 max. + stretch_minutes++; + stretch_timer = timer_read(); + } + if (stretch_minutes > 30) { //Change RGB animation effect after set number of minutes. rgblight_set_effect_range(0, 42); rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); is_stretch_time = true; + stretch_minutes = 0; } } #endif @@ -324,17 +330,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { rgblight_sethsv_at(0,230,100,40); //Set LED to orange to indicate timer is on is_stretch_active = 1; is_stretch_time = 0; + stretch_minutes = 0; } else if(is_stretch_active==1) { rgblight_set_effect_range(0, 42); rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); rgblight_sethsv_at(0,230,100,40); //Set LED to orange to indicate timer is on is_stretch_time = 0; + stretch_minutes = 0; } else { rgblight_set_effect_range(0, 42); rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set back to layer colours is_stretch_time = 0; + stretch_minutes = 0; } } return false; diff --git a/keyboards/solartempest/9e/solartempest_9e_via.hex b/keyboards/solartempest/9e/solartempest_9e_via.hex index d2c99f66aa0c..1dd8a7b014c4 100644 --- a/keyboards/solartempest/9e/solartempest_9e_via.hex +++ b/keyboards/solartempest/9e/solartempest_9e_via.hex @@ -1,9 +1,9 @@ :100000000C94A3040C94EA040C94EA040C94EA04FF :100010000C94EA040C94EA040C94EA040C94EA04A8 -:100020000C94EA040C94EA040C947A290C94362972 -:100030000C94752A0C94EA040C94EA040C94EA04D7 +:100020000C94EA040C94EA040C94A2290C945E2922 +:100030000C949D2A0C94EA040C94EA040C94EA04AF :100040000C94EA040C94EA040C94EA040C94EA0478 -:100050000C94EA040C94512A0C94EA040C94EA04DB +:100050000C94EA040C94792A0C94EA040C94EA04B3 :100060000C94EA040C94EA040C94EA040C94EA0458 :100070000C94EA040C94EA040C94EA040C94EA0448 :100080000C94EA040C94EA040C94EA040C94EA0438 @@ -153,9 +153,9 @@ :10098000670314BE84B7877F84BF0FB6F894A89519 :1009900080916000886180936000109260000FBEBB :1009A000E0E0F8E7099523E0AEEBB1E001C01D926D -:1009B000A436B207E1F711E0A0E0B1E0EAEFF4E617 -:1009C00002C005900D92AE3BB107D9F70E949C2A58 -:1009D0000C9444320C940000E8EDF0E080818C7FB0 +:1009B000A436B207E1F711E0A0E0B1E0EAE4F5E621 +:1009C00002C005900D92AE3BB107D9F70E94C42A30 +:1009D0000C946C320C940000E8EDF0E080818C7F88 :1009E00080831092E2001092DA001092E100A0EEF3 :1009F000B0E08C9181608C9380818F77808319BC6B :100A0000A7EDB0E08C918E7F8C9380818F7E808368 @@ -225,7 +225,7 @@ :100E00004983E8835A83DF91CF911F910F91FF901F :100E1000EF90DF90BF90AF900895202F30E0449185 :100E2000D42EE42EF12C56E0159FC0011124EFEFD3 -:100E3000F0E0BF010E944531812F90E0880F991F9B +:100E3000F0E0BF010E946D31812F90E0880F991F73 :100E400055E5569FD001579FB00D11248A1B9B0B6F :100E5000982F990F890F5F01A21AB30AAE9CD00197 :100E6000AF9CB00DBE9CB00D11245B2F089F80017C @@ -260,12 +260,12 @@ :10103000F7CF8F3F09F0A1CF809183028B7FF0CF54 :1010400008958091830280FD16C081FD16C082FD47 :1010500016C0809181028823A1F0883280F428E0B4 -:10106000829FC001112468E270E00E945931862FEE +:10106000829FC001112468E270E00E948131862FC6 :10107000672B39F0089582E0089584E0089588E0B0 :10108000089581E008958091830280FD14C081FD60 :1010900014C082FD16C080918202882381F08431C1 :1010A00080F422E3829FC001112464E170E00E9479 -:1010B0005931862F08958CE0089589E1089585E0DF +:1010B0008131862F08958CE0089589E1089585E0B7 :1010C000089582E30895803F31F40E94430881959A :1010D00080938B020895813F19F40E944308F8CF52 :1010E000823F31F40E944308819580938A020895DB @@ -452,30 +452,30 @@ :101C3000EAF7DF91CF911F910F910C94CC0BC770F5 :101C400081E001C0880FCA95EAF7F3CFDF91CF9109 :101C50001F910F910895CF93DF93C7EED3E060E01B -:101C6000CE010E94CC312196C11588E0D807B9F782 +:101C6000CE010E94F4312196C11588E0D807B9F75A :101C7000DF91CF9108956F927F928F929F92AF9252 :101C8000BF92CF92DF92EF92FF920F931F93CF9369 :101C9000DF9386EFC82E84E0D82E9FE9E92EF12C41 :101CA000E701C056D10936011BC0F501859094901B -:101CB000692DC8010E94CC31682DC80101960E948F -:101CC000CC3182E0A80EB11C0E5F1F4FC017D107A8 +:101CB000692DC8010E94F431682DC80101960E9467 +:101CC000F43182E0A80EB11C0E5F1F4FC017D10780 :101CD00061F788E1680E711C6896CE15DF0529F062 :101CE0008E01085111095301E0CF7E0180E6E80E14 :101CF000F11C80E6C80ED11C8FE5E81684E0F806DA :101D000079F6DF91CF911F910F91FF90EF90DF90C7 :101D1000CF90BF90AF909F908F907F906F900895DD :101D2000CF93C82F6FEF811161E283E290E00E94B0 -:101D3000CC316FEFC11161E184E290E00E94CC31BF -:101D40006FEFC11165E085E290E0CF910C94CC314A -:101D500080E00E94900E60E086E290E00E94CC312C +:101D3000F4316FEFC11161E184E290E00E94F4316F +:101D40006FEFC11165E085E290E0CF910C94F43122 +:101D500080E00E94900E60E086E290E00E94F43104 :101D60000E943B0E0E942B0E81E00C94900ECF93AC :101D7000C091A902C2FB992790F9981781F080FBC6 :101D8000C2F9C093A9026091A80284E090E00E9489 -:101D9000CC316C2F82E290E0CF910C94CC31CF917A +:101D9000F4316C2F82E290E0CF910C94F431CF912A :101DA00008950F931F93CF93DF93C42FD0E0CC0FF0 :101DB000DD1F28E1629FC00DD11D112430E6839FF5 -:101DC000C00DD11D1124CE0187960E94B831082F75 -:101DD00010E0102F0027CE0188960E94B83198019C +:101DC000C00DD11D1124CE0187960E94E031082F4D +:101DD00010E0102F0027CE0188960E94E031980174 :101DE000282BC901DF91CF911F910F910895462FA4 :101DF0008A3038F4743028F46C3018F4672F0C945F :101E0000D10E90E080E00895BF92CF92DF92EF92E2 @@ -489,16 +489,16 @@ :101E8000CF93DF93EC010E94040FBE010E94F70E76 :101E9000DF91CF910C941909FC01808191810E94FE :101EA000400F292F2F7092959F7092509E3078F49A -:101EB000E92FF0E0EA5BFD4C0C946D31803F19F0A6 +:101EB000E92FF0E0E259FD4C0C949531803F19F088 :101EC00020F4883E20F481E00895843FE1F380E02F :101ED0000895883EC0F3813FD1F7F5CF822F8695D4 -:101EE00086958695089583E290E00E94B83181320C -:101EF00089F484E290E00E94B831813159F485E29E -:101F000090E00E94B83191E0853009F090E0892F8F +:101EE00086958695089583E290E00E94E0318132E4 +:101EF00089F484E290E00E94E031813159F485E276 +:101F000090E00E94E03191E0853009F090E0892F67 :101F10008170089580E0FCCFCF9384E090E00E9430 -:101F2000B831C82F82E290E00E94B831982F8C2FF0 +:101F2000E031C82F82E290E00E94E031982F8C2FA0 :101F3000CF91089560915F03669570E04BE050E0AB -:101F40008AE091E00E949E31892B19F481E0809310 +:101F40008AE091E00E94C631892B19F481E08093E8 :101F500098020E94880690939202809391020895BD :101F60004F925F926F927F928F929F92AF92BF92A9 :101F7000CF92DF92EF92FF920F931F93CF93DF9355 @@ -522,7 +522,7 @@ :1020900053E0452E8091990293010C2C01C0220F30 :1020A0000A94EAF7822309F43CC0F601EE0FFF1F01 :1020B000E80DF91DE590F490E114F10409F477CFEF -:1020C00045E050E0B701CE0101960E9495310981AB +:1020C00045E050E0B701CE0101960E94BD31098183 :1020D0000F3F39F18A81800F9927991F8B32910523 :1020E00014F08AE290E05C01AA0CBB1C8A0D9B1DD7 :1020F000DC01AF51BD4F5D01049D800111240F51E2 @@ -546,11 +546,11 @@ :10221000CECF4423B9F340E0F7CF8F929F92AF9295 :10222000BF92CF92DF92EF92FF920F931F93CF93C3 :10223000DF93EC014C81042F10E09801D8010E943B -:1022400035329B01AC010E9400324B015C01E0E29F +:102240005D329B01AC010E9428324B015C01E0E24F :10225000F0E0E01BF10BA5E5B0E0AC019B010E94B2 -:1022600000326B017C019F01DF010E947A319B01EA -:10227000AC010E940B329B01AC01280D391D4A1D97 -:102280005B1DC701B6010E941332F22E822F90E02F +:1022600028326B017C019F01DF010E94A2319B019A +:10227000AC010E9433329B01AC01280D391D4A1D6F +:102280005B1DC701B6010E943B32F22E822F90E007 :1022900039E23F1560F143E0249F90011124359508 :1022A0002795122F109500E085E5E82EEF18809114 :1022B0001C01081758F10E94B00F9C8181E09923FE @@ -570,7 +570,7 @@ :102390004150550B841795071CF02195209315018A :1023A000DF91CF911F910F910895118210821282B7 :1023B0008F5F3396D0CF0C2F10E070E0C8010E94E1 -:1023C000593120911A01820F482F50E020919B0231 +:1023C000813120911A01820F482F50E020919B0209 :1023D000022E000C330B02171307BCF020911601DC :1023E000022E000C330B201731077CF08D9F9001DB :1023F00011242F513D4F4091620360916103809100 @@ -582,17 +582,17 @@ :10245000815080939A02DF91CF911F910895E0916E :102460001A014C2F50E09A012E0F311DF901EE0F89 :10247000FF1FE20FF31FEF51FD4F118210821282F6 -:1024800080919A028B32ACF0612F0E943731892FF4 +:1024800080919A028B32ACF0612F0E945F31892FCC :10249000082E000C990B4817590749F49F014091E9 :1024A000620360916103809160030E94E806CF5F40 :1024B000C1CF87FFEDCF890FEBCF90E00196609100 -:1024C0001C0170E00E945931C4CFEF92FF921F931C +:1024C0001C0170E00E948131C4CFEF92FF921F93F4 :1024D000CF93DF93EC0110E0EE24EA94F12C6091AD :1024E0001C01161770F00E94B00F9A818C8190FF2A :1024F00027C08F5F8C83DF91CF911F91FF90EF906A :10250000089520911A01422F410F5527551FCA01E6 :102510009A01220F331F280F391F2F513D4F70E0B2 -:10252000C7010E945931962F8C81409162036091BE +:10252000C7010E948131962F8C8140916203609196 :102530006103199F800D11240E94E8061F5FCFCF11 :102540008150D8CF90915F0390FF14C090911A01F1 :1025500020911B0133E0939FF0011124EF51FD4FB7 @@ -604,7 +604,7 @@ :1025B00040E0662361F040E0623011F440919C02FB :1025C00080E060E004C060919C0240E080E00E94F6 :1025D000A212F801848190E0019663E070E00E940D -:1025E000593184830F900F900F90DF91CF911F91FD +:1025E000813184830F900F900F90DF91CF911F91D5 :1025F0000F910895CF93DF9300D00F92CDB7DEB740 :1026000090915F0390FF0AC09E012F5F3F4F0E9491 :10261000E8064B8169818A810E94A2120F900F9077 @@ -615,7 +615,7 @@ :102660000E94FA128C818F5F8C83DF91CF91089545 :10267000CF92DF92EF92FF926B017C010E94D20613 :10268000B701A60188E090E0FF90EF90DF90CF9037 -:102690000C94DE31AF92BF92CF92DF92EF92FF9215 +:102690000C940632AF92BF92CF92DF92EF92FF92EC :1026A0000F931F93CF93DF9300D00F92CDB7DEB778 :1026B000182FF62E042FE22E90915F0390FF29C071 :1026C000E92FE695AE2FB0E0A657BE4F8C918093D0 @@ -630,7 +630,7 @@ :10275000D82EE695F0E0E853FC4FA590B490C12C3C :10276000BB2460911C01C61618F00E94B00FBFCFA9 :102770002C2D30E0A29EC001A39E900DB29E900D24 -:10278000112470E00E944531812FD11013C0860FB3 +:10278000112470E00E946D31812FD11013C0860F8B :1027900040911A01420F532F511D9A01220F331FEE :1027A000240F351F2F513D4F402F6F2D0E94E806FB :1027B000C394D7CF861BECCFEFE5F3E0438128E04D @@ -649,7 +649,7 @@ :1028800090915F0390FF36C09170811129C09260D2 :1028900090935F03662351F060915F037091600332 :1028A00080916103909162030E94381360915F03ED -:1028B000669570E04BE050E08AE091E00E949E3126 +:1028B000669570E04BE050E08AE091E00E94C631FE :1028C000892BA9F01092980281E08093940220E075 :1028D0004091620360916103809160030C944A13FC :1028E000853210F09864D4CF880F982BD1CF0E94F6 @@ -696,20 +696,20 @@ :102B700020F0961710F40C94A81561E00C94401402 :102B8000EFE5F3E083E0808311828FEF828384EBB3 :102B90008383148260817181828193810C943813C4 -:102BA00069EE7EEF90E080E00E94EA3160E082E032 -:102BB00090E00E94CC3160E083E090E00E94CC3154 +:102BA00069EE7EEF90E080E00E94123260E082E009 +:102BB00090E00E94F43160E083E090E00E94F43104 :102BC000109237021092360260E084E090E00E949A -:102BD000CC3160E082E290E00E94CC3160E085E0A0 -:102BE00090E00E94CC3160E086E090E00E94CC3121 -:102BF0006FEF87E090E00E94CC3140E050E0BA01F6 -:102C000088E090E00E94DE3160E08DE090E00E947C -:102C1000CC3140E050E0BA0188E190E00E94DE3122 -:102C200060E087E190E00E94CC3140E050E0BA01E2 -:102C30008CE190E00E94DE3170E060E080E290E0A4 -:102C40000E94EA3140E050E0BA0188E190E00E9441 -:102C5000DE3180E00E94900E0E94A80E40E050E01D -:102C6000BA018FE090E00E94DE3140E050E0BA010E -:102C700083E190E00C94DE316F927F928F929F926D +:102BD000F43160E082E290E00E94F43160E085E050 +:102BE00090E00E94F43160E086E090E00E94F431D1 +:102BF0006FEF87E090E00E94F43140E050E0BA01CE +:102C000088E090E00E94063260E08DE090E00E9453 +:102C1000F43140E050E0BA0188E190E00E940632D1 +:102C200060E087E190E00E94F43140E050E0BA01BA +:102C30008CE190E00E94063270E060E080E290E07B +:102C40000E94123240E050E0BA0188E190E00E9418 +:102C5000063280E00E94900E0E94A80E40E050E0F4 +:102C6000BA018FE090E00E94063240E050E0BA01E5 +:102C700083E190E00C9406326F927F928F929F9244 :102C8000AF92BF92CF92DF92EF92FF920F931F937A :102C9000CF93DF93CDB7DEB728970FB6F894DEBF9A :102CA0000FBECDBF8E010F5F1F4F88E0F80111925C @@ -726,7 +726,7 @@ :102D50003105F9F6F701319780818F3F11F00E941C :102D6000BF0850EA5A95F1F7F601B182A082F2E06D :102D7000CF0ED11C6E147F0409F0A8CF48E050E0BC -:102D8000B8018AE492E00E94AB31FF24F3940097EB +:102D8000B8018AE492E00E94D331FF24F3940097C3 :102D900009F4F12C892B09F43FC088E0F801AAE47A :102DA000B2E001900D928A95E1F781E080933A02BA :102DB0000E948806909339028093380280913802ED @@ -738,892 +738,897 @@ :102E100007C090E080E097CF80913A028111CECF39 :102E200080914902882371F0809147029091480275 :102E30000E947906893E934028F082EE0E94E10BC1 -:102E400010924902109146028091450211115BC017 -:102E5000882399F110921A0184E080931B018093DA -:102E60001C018FE00E947B141092450281E0809348 -:102E7000460280913F02882351F0809140028111E7 -:102E800006C080913B0290913C020E9479068F2DF2 -:102E900028960FB6F894DEBF0FBECDBFDF91CF915D -:102EA0001F910F91FF90EF90DF90CF90BF90AF9068 -:102EB0009F908F907F906F90089580914402882317 -:102EC00079F086E180931A018AE180931B0184E006 -:102ED00080931C018FE00E947B1410924402C6CFA5 -:102EE000809143028823A9F08AE180931A018EE140 -:102EF00080931B0184E080931C018FE00E947B146F -:102F000010924302B3CF81112BC0809144028111F2 -:102F100027C080914302811123C08091410290918A -:102F200042020E947906853F9140D0F0112379F04A -:102F300010921A018AE280931B0180931C0181E2A6 -:102F40000E947B148091400281110E94AD1010926A -:102F5000450210924402109243021092460289CF19 -:102F600010924502109244021092430282CF90E0E8 -:102F700080E00E94C631893E9E4F11F40C94730F7D -:102F800080E008951092340280911D01E2ECF1E09E -:102F9000882359F08091A80287FF07C08EE1DF01E6 -:102FA0001D928A95E9F70C94A90B86E0F8CF1F9340 -:102FB000CF93DF93CDB7DEB7AA970FB6F894DEBFF5 -:102FC0000FBECDBF84ED92E02091F100DC012D9386 -:102FD000CD01B2E08C3D9B07B9F78091D5028330DB -:102FE00009F471C0B8F4813009F448C0823009F4A2 -:102FF000B2C08091E80083FF3AC18091D4029091E1 -:10300000D5029A3008F033C1E92FF0E0EC5AFD4CBC -:103010000C946D318A3009F48DC08B3009F470C086 -:10302000893039F78091D402813219F78091D80222 -:103030009091D902009711F00297D9F68091E8009B -:10304000877F8093E8008091E80082FF37C08091FD -:10305000F2009091F300029729F48091F1008B7FA8 -:10306000813021F48091F1008093AF028091E800DB -:103070008B778093E8000E946605BBCF8091D402D5 -:10308000813A09F0B6CF8091E800877F8093E8000D -:103090008091D8029091D902892B61F460E280EB93 -:1030A00092E070E00E9419068091E8008B7780938F -:1030B000E8009FCF60E090E080E0F3CF8091D20203 -:1030C0008111C1CF96CF8091D402813A09F091CF7E -:1030D0008091D8029091D902892B09F08ACF8091F2 -:1030E000E800877F8093E8008091E80080FFFCCFB4 -:1030F00080911D018093F1008091E8008E77B9CF17 -:103100008091D402813209F074CF8091D8029091DD -:10311000D902892B09F06DCF8091E800877F8093D9 -:10312000E8000E9466058091D60280931D010E94EE -:10313000C2175FCF8091D402813209F05ACF8091BB -:10314000E800877F8093E8000E9466058091D7029F -:103150008093AE024ECF8091D402813A09F049CFDC -:103160008091E800877F8093E8008091E80080FFED -:10317000FCCF8091AE02BECF803899F0823809F042 -:1031800076C08091D8028F70873008F070C080932D -:10319000E9008091EB0085FB882780F91092E90017 -:1031A00006C08091D0029091D102911182609091DD -:1031B000E800977F9093E8008093F1001092F1006F -:1031C0008091E8008E77B5C1882309F4A2C18230CE -:1031D00009F04DC08091D6028111A6C18091D8021C -:1031E0008F702FEF280F263008F041C08093E90040 -:1031F0002091EB0020FF98C1933031F48091EB00D7 -:1032000080628093EB0090C19091EB00906190936D -:10321000EB0021E030E001C0220F8A95EAF720930D -:10322000EA001092EA008091EB008860EACF8111F9 -:103230001EC01091D6021F778091E3008078812B09 -:103240008093E3008091E800877F8093E8000E94EC -:1032500066058091E80080FFFCCF8091E3008068E4 -:103260008093E30082E0111183E08093D202809189 -:10327000E80083FF0AC08091E800877F8093E80020 -:103280008091EB0080628093EB00AA960FB6F894D1 -:10329000DEBF0FBECDBFDF91CF911F910895805843 -:1032A000823028F72091D6023091D7022C3DE3E0FE -:1032B0003E07A1F583E08A838AE289834FB7F894B9 -:1032C000DE01139620E03EE051E2E32FF0E0509360 -:1032D0005700E49120FF03C0E295EF703F5FEF706D -:1032E0008E2F90E0EA30C0F0C7968D939D932F5FAC -:1032F000243159F74FBF8091E800877F8093E80021 -:103300006AE270E0CE0101960E9419068091E80001 -:103310008B778093E800ABCFC096E7CF8091D8023F -:103320009091D902432F55274330510509F44AC0E3 -:1033300078F54130510509F47AC08BE590E0E6EB71 -:10334000F8E04230510509F092CF2091E800277F44 -:103350002093E8002091DA023091DB028217930774 -:1033600008F49C0140E02115310509F065C04111C8 -:1033700063C08091E80082FDC9CF8091D20288238A -:1033800029F2853019F28091E80083FFF2CFBECF99 -:103390004132510509F43CC04232510509F067CF72 -:1033A0008330910508F063CFFC01EE0FFF1FEE5450 -:1033B000FE4F0190F081E02D81559E4FDC018C91F4 -:1033C00090E01AC0332721303105D1F021153105A5 -:1033D00061F02230310509F04ACFE3E2F9E0E491EF -:1033E0008E2F90E0E3E2F9E007C0E1E4F9E0E49138 -:1033F0008E2F90E0E1E4F9E0009709F438CFA5CFF3 -:10340000EDE2F9E0E4918E2F90E0EDE2F9E0F4CF07 -:103410008330910508F02BCF880F991FFC01E854E9 -:10342000FE4F0190F081E02D89E090E08ECF82E1A7 -:1034300090E0E1E1F9E089CF8091D202882309F49C -:1034400065CF853009F462CF8091E80083FD5ECFBF -:103450008091E80082FD8DCF8091E80080FF83CFCE -:103460008091F2009091F3002115310519F0883018 -:10347000910550F041E0089709F040E08091E800A4 -:103480008E778093E8006FCF44914093F10031969E -:10349000215031090196E8CF803809F0E8CE8091BB -:1034A000E800877F8093E8008091D3028093F10049 -:1034B00087CE8111DCCE1091D602123008F0D7CE23 -:1034C0008091E800877F8093E8001093D3020E94E8 -:1034D0006605112311F084E005C08091E30087FDAB -:1034E000FACF81E08093D20242E061EC81E00E9459 -:1034F000850542E261EC84E00E94850542E261ECD0 -:1035000082E00E94850542E260EC83E00E9485052E -:10351000AECE8091D602813009F0A9CE81E0933001 -:1035200009F080E08093D1021092E9008091E800D8 -:10353000877F8093E8000E94660599CE3F924F9264 -:103540005F926F927F928F929F92AF92BF92CF9233 -:10355000DF92EF92FF920F931F93CF93DF9300D0F0 -:1035600000D00F92CDB7DEB78C01FC01838194812E -:10357000892B31F08081918189238F3F09F054C6D6 -:103580000F900F900F900F900F90DF91CF911F91A0 -:103590000F91FF90EF90DF90CF90BF90AF909F90F2 -:1035A0008F907F906F905F904F903F9008950E9412 -:1035B000040FF82E682F89819A810E947D0B698102 -:1035C0007A818F2D0E94F70E7C01F8018281882379 -:1035D00009F41CC6970122513F452031310508F0FE -:1035E000D4C58FEF97E00E94B831FEEEEF0E57EE94 -:1035F000852E53E0952E882381F1809131028770CA -:1036000009F4BECFF8018281882309F4B9CF82E0A2 -:103610000F900F900F900F900F90DF91CF911F910F -:103620000F91FF90EF90DF90CF90BF90AF909F9061 -:103630008F907F906F905F904F903F900C94741597 -:10364000811428E09206C9F2C4010E94B8318111A8 -:1036500001C0EA943FEF831A930AE110F1CF1C8274 -:103660001B82442443944AE0342E74014FEFE41A41 -:10367000F40AC4010E94B83189831A82882309F4AC -:10368000BCCF9FEF980F933000F58A83498252E0B8 -:10369000850E911CC7010E94B8318B83882309F4E1 -:1036A000ACCFCE0101967C01F70120812223E9F203 -:1036B000213009F049C091818281913041F4F2E0DA -:1036C000EF0EF11C0E94AA0D09C04701EACF92300B -:1036D00049F422E0E20EF11C0E94F50C3FEFE31AE0 -:1036E000F30AE2CF933031F432E0E30EF11C0E9492 -:1036F000E10BF4CF943021F04FEFE41AF40AEECF4F -:1037000052E0E50EF11C30E020E0B7016F5F7F4F23 -:10371000F70141818053990B8A30910550F0215077 -:103720003109E0F28FE99FE00197F1F700C0000056 -:10373000F6CF329EF001339EF00D11249C012E0F26 -:103740003F1F842F7B01E1CFE22FF0E0EA5DFD4FC8 -:103750005490822F86958695869590E0FC01EA5ECE -:10376000FD4F64902770712C022E02C075946794EF -:103770000A94E2F7E1E06E227724FC01EA5FFD4F54 -:10378000A490B12C022E02C0B594A7940A94E2F73B -:10379000F1E0AF22BB24FC01EA50FE4FC490D12CD3 -:1037A00002C0D594C7942A95E2F721E0C222DD2415 -:1037B0006114710419F081EE0E94F50CA114B1049A -:1037C00019F086EE0E94F50C852D0E94AA0DAB28FB -:1037D00019F086EE0E94E10B672819F081EE0E9435 -:1037E000E10BCD2809F47ACF8CE26CCF81E00E9406 -:1037F00090150E94541501CF81E00E946315F9CF06 -:1038000082E0F5CFF3E8EF16FFE5FF0609F4CEC03E -:1038100024E8E2162FE5F20609F0D7C4882309F45C -:10382000ECCEF0903F02EE24E394FE24F0923F02AF -:103830000E948806B0E0A0E080933B0290933C0297 -:10384000A0933D02B0933E028091400210921A0173 -:10385000882309F4B9C08AE280931B0180931C017C -:1038600081E20E947B140E94AD10E0923F02109210 -:103870004002C3CE882309F481C08091490281119E -:1038800006C081E08093490282EE0E94F50C0E94FE -:10389000880690934802809347028BE20E94F50CC1 -:1038A000F8018281882309F4D0C41092E002F2E08A -:1038B000EF16FCE5FF0608F4ACC126E1E2162CE5A4 -:1038C000F20630F0C7018A5F9C45099708F0A1C154 -:1038D0000E948C0F9093A9028093A80230E1E31616 -:1038E0003CE5F30609F464C108F0E6C058E0E516CB -:1038F0005CE5F50609F44EC108F0AFC094E0E916A6 -:103900009CE5F90609F43EC108F091C0F2E0EF161B -:10391000FCE5FF0609F430C18091A802826023E033 -:10392000E2162CE5F20609F42AC16091A802F09093 -:10393000A90284E090E00E94CC316F2D82E290E0F9 -:103940000E94CC310E94C21758CE8823A1F08091EA -:103950004902811106C081E08093490282EE0E94F3 -:10396000F50C0E948806909348028093470281EEEE -:103970000E94F50C92CF81EE0E94E10B8BE20E9437 -:10398000E10B8ECF882309F48BCF81EE0E94F50CDA -:1039900083EE0E94F50C8FE40E94F50C8FE40E94E8 -:1039A000E10B83EE0E94E10B81EEE9CF882309F45D -:1039B00077CF81EE0E94F50C83EE0E94F50C80E536 -:1039C0000E94F50C80E5EBCF8AE280931B01809387 -:1039D0001C0181E2FF2029F00E947B140E94AD109F -:1039E00046CF0E947B1443CFE5EFEE16ECE5FE06D2 -:1039F000B9F090F026EFE2162CE5F20609F050CF70 -:103A000027E245EE66EEFEC327E245EE65EEFAC319 -:103A100026E241EE60EEF6C327E245EE64EEF2C325 -:103A200026E241EE62EEEEC328E241E0EFCF809164 -:103A3000A802806136E0E3163CE5F30609F49FC076 -:103A40008091A802886047E0E4164CE5F40608F48B -:103A500096C08091A802806292C08091A8028D7F5A -:103A60005CE0E5165CE5F50609F489C078F4809120 -:103A7000A8028C609AE0E9169CE5F90609F47FC07B -:103A800008F48CC08091A8028E7F79C08091A80232 -:103A9000877FFEE0EF16FCE5FF0609F470C0809119 -:103AA000A8028B7F2FE0E2162CE5F20608F467C02F -:103AB0008091A8028F7E63C03BEFE3163CE5F306DE -:103AC00009F464C068F553E1E5165CE5F50609F410 -:103AD00077C090F491E1E9169CE5F90609F46CC011 -:103AE000E2E1EE16ECE5FE0609F01FCF0E94C217D8 -:103AF0008091A8028F7743C0F5E1EF16FCE5FF0641 -:103B000009F466C008F47AC08091A90281603AEF96 -:103B1000E3163CE5F30609F008CF8093A90205CF30 -:103B20004FEFE4164CE5F40609F44EC088F48DEF2F -:103B3000E8168CE5F806C1F18091A9028E7F9EEF10 -:103B4000E9169CE5F90648F38091A9028360E5CF68 -:103B5000E1E0EE16EDE5FE0609F459C008F444C0B4 -:103B600060E022E0E2162DE5F20609F0DECE8EE0FE -:103B700090E00E94CC31D9CE8091A80281608093E0 -:103B8000A802D3CE8091A8028460F9CF8091A902C7 -:103B90008260C3CF8091A8028064F1CF0E94C217D7 -:103BA0008091A8028068EBCF8091A9028D7FB5CF6C -:103BB0008091A8028F7DE3CF8091A8028F7BDFCF19 -:103BC0008091A802837FDBCF8091A9028C7FA5CF53 -:103BD0008091A80282FB992790F921E0922790FB1F -:103BE00082F990FB83F9CBCF8091A902982F909511 -:103BF00091708E7F892B90FB81F98FCF0E94C21725 -:103C00009091A802892F97FB87F98058B8CF61E07F -:103C1000AECF8091340236E1E3163CE5F30609F0BD -:103C200021C38A7A91E009F490E09093E001811138 -:103C300006C089E20E94170B0E94A70ADECC85E32A -:103C4000F9CF85E30CC380915F0380FF1BC08E7F9B -:103C500080935F0360915F037091600380916103C3 -:103C6000909162030E943813109298024FEF50E730 -:103C700082E0415050408040E1F700C000000E94C7 -:103C8000B00FBBCC816080935F0361E086950E949A -:103C90004014B3CC4FE955E168EA75E10E94CC06C7 -:103CA000ACCC48EA55E16FE975E1F8CF45E154E164 -:103CB0006CE074E1F3CF44EF53E160E074E1EECFE8 -:103CC0004CED53E168EE73E1E9CF48EE53E16CED62 -:103CD00073E1E4CF4FE254E16EE174E1DFCF61E0E4 -:103CE00081E0D5CF65E082E00E94B21586CC68E025 -:103CF00086E0FACF64E18FE0F7CF67E185E1F4CFAA -:103D000062E289E1F1CF61E083E2C1CF3BE5E316F6 -:103D10003DE5F30611F14CE5E4164DE5F40609F036 -:103D2000D3C28091A90282FB882780F991E089277C -:103D30000E94B70EC9C20E94C2175FEF84E39CE0E5 -:103D4000515080409040E1F700C000000E94D10C2B -:103D50000E94D01552CC81E0EBCF80E0E9CFC701C3 -:103D60000E94550BD82EBFC22F2D2F70C22E8F2D23 -:103D7000807F19F0C29490EFC922DD20C9F0CC20D9 -:103D800069F080E28E0D883010F081100BC08091B8 -:103D90003402C82AC09234020E94A70A8E2D0E94C3 -:103DA000F50C19C080913302C82AC0923302F4CFB7 -:103DB0008E2D0E94E10BCC2071F0C09480E28E0D1C -:103DC000883010F081103EC080913402C822C09229 -:103DD00034020E94A70AE92DE850FF0B349720F423 -:103DE0000E94C0060E94A114AA2009F4C9CB8091A8 -:103DF000310280FDC5CBF8011282859585958595A8 -:103E00000E949015C8010E949E1A809131028595EA -:103E1000859585950F900F900F900F900F90DF91E3 -:103E2000CF911F910F91FF90EF90DF90CF90BF90B7 -:103E3000AF909F908F907F906F905F904F903F904A -:103E40000C94631580913302C822C0923302C1CF13 -:103E50003F2D3F70B32E8F2D807F803219F0B294AA -:103E600080EFB822882071F041E0841681F1DD20D6 -:103E7000D9F1CC2091F1F801858180FF8FCF8F702F -:103E800085832BC0DD20B1F0909135028B2D892BDD -:103E9000C11003C00E94D70B9ECF51E0C512FACFCC -:103EA0002091A90222FD97CF981709F494CF80930F -:103EB000350291CFC11006C00E94A10A8B2D0E942D -:103EC000CC0B89CF81E0C81609F485CFF5CFDD2072 -:103ED00031F095E09C1508F47ECF8B2DDBCFE4E02C -:103EE000EC1508F478CFEACFCC2041F3F9E38F1238 -:103EF00009C02FEF37EE43E0215030404040E1F75A -:103F000000C000008E2D0E94E10B65CF8F2D86959D -:103F10008695837061F0813009F05DCFC7019370A1 -:103F2000D11002C090E080E00E94940654CFC701F7 -:103F30009370D11002C090E080E00E94AA064BCF9F -:103F40008E2DDD2029F00E9463080E94810743CF57 -:103F50000E94A807FACF8F2D837009F040C0D110BE -:103F60003ACF4E2D429546954770440F440F8E2D03 -:103F70008F7090E0042E02C0880F991F0A94E2F718 -:103F800030E020E0E4FE09C02FE030E002C0220F64 -:103F9000331F4A95E2F7209530954F2D469546956B -:103FA0004370423099F078F4609136027091370294 -:103FB000413039F0822B932B862397230E94C60B26 -:103FC0000ACF862B972B822B932BF8CF822B932B08 -:103FD000209136023091370282279327EFCF8695C2 -:103FE000DD2011F08F2D8170882309F4F4CE4E2D41 -:103FF000429546954770440F440F8E2D8F7090E088 -:10400000042E02C0880F991F0A94E2F730E020E0E6 -:10401000E4FE09C02FE030E002C0220F331F4A95B2 -:10402000E2F7209530954F2D4695469543704230E6 -:1040300099F078F46091DC027091DD02413039F042 -:10404000822B932B862397230E944C15C4CE862B5C -:10405000972B822B932BF8CF822B932B2091DC0272 -:104060003091DD0282279327EFCF5F2D5F70F52E11 -:10407000DD2029F0852F0E9490158E2D0BCF8E2DDF -:104080000E94CC0B8F2D0E946315A5CE8E2D92EF32 -:10409000891609F449C0981570F0E0EF8E1639F1D1 -:1040A000F1EF8F16C9F1DD2009F45FC0C11076CEA3 -:1040B0008F2D8F7136C023EF8216D9F134EF831222 -:1040C000F2CFDD2009F446C0FF2DFF71FF2E8F2FA8 -:1040D0000E9490158091A90282FD07C028E0F29EFF -:1040E000C00111248360809331028F2D1AC0DD201E -:1040F00071F044E04C1508F46ECE2F2D2F7181E045 -:1041000090E002C0880F991F2A95E2F7A7CF55E0EB -:104110005C1508F460CEF1CF8F2D8F71DD2009F48E -:10412000B2CF0E94901557CE8F2D8F71DD20C9F32D -:10413000AACF90E080E0DD2009F486CF9F2D9F710B -:1041400021E030E0F90102C0EE0FFF1F9A95E2F77F -:10415000CF017ACF81E00E94741531E03C1508F060 -:104160003ACE82E00E94741536CECC2059F08933C5 -:1041700009F0C8CE4FEF57EE83E0415050408040E9 -:10418000E1F7BECE8F2D8F717ECFF0E1EF16FFE508 -:10419000FF0609F42BCB21E1E2162FE5F20609F424 -:1041A0002FCB42E8E4164FE5F40609F4EBCB08F018 -:1041B00029CB90E8E9169FE5F90609F45BCBE1E825 -:1041C000EE16EFE5FE0609F4C0CB33EFE3163CE54F -:1041D000F30609F41DCC08F007CC58EDE5165CE5B4 -:1041E000F50609F411CC89EDE8168CE5F80609F41A -:1041F0001BCC97EDE9169CE5F90609F051CB26E2B8 -:1042000041EE61EEC8010E94C70DF7C930E1E31627 -:104210003FE5F30609F4F0CA41E1E4164FE5F40680 -:1042200009F0BFCF82E0E9CA85E0DE011196019076 -:104230000D928A95E1F7F801228189819A812111F5 -:10424000B6C90E94550BF82EBAC9F6E1EF16FCE587 -:10425000FF06D1F58091E0018111F3CC89E20E9443 -:10426000EC0AEACC82722CECE2162CE5F20609F498 -:1042700031CD08F0A7C046ECE4164CE5F40609F48D -:1042800015CD08F076C093ECE9169CE5F90609F423 -:1042900001CD08F05DC0F2ECEF16FCE5FF0609F475 -:1042A000D2CC9AE5E9169DE5F90609F454CD08F05B -:1042B0002DCDE114FCE5FF0609F43DCD2EEDE2160F -:1042C0002CE5F20609F444CDF8018281E080F1800A -:1042D000882309F444CDC7010E94040FD82E682F0B -:1042E000C7010E947D0BB7018D2D0E94F70E0E9421 -:1042F00019097C01882EF801D280C580C2943FE064 -:10430000C322809131028770A1F0AD2CDD2091F0A5 -:104310008F2D807F803421F080E28E0D883048F030 -:1043200082E00E947415809131028770AA24A394C0 -:104330008111A12C9F2C92942FE09222FBE0F91581 -:1043400008F449CDE92DF0E0E25AFD4C0C946D31B2 -:1043500024ECE2162CE5F20609F4A3CC4CE054E17F -:1043600065E174E135ECE3163CE5F30609F496CC1F -:1043700098CF49ECE4164CE5F40609F4A1CC88F496 -:1043800097ECE9169CE5F90609F495CC40E054E178 -:1043900064EF73E1E8ECEE16ECE5FE0609F47ECC82 -:1043A00080CFFAECEF16FCE5FF0609F48ECC4EE167 -:1043B00054E16FE274E12BECE2162CE5F20609F40D -:1043C0006DCC6FCF31EDE3163CE5F30609F492CCEA -:1043D000B8F45EECE5165CE5F50609F483CC08F468 -:1043E0007ECC9FECE9169CE5F90609F480CC6EE0E2 -:1043F00089E0E0EDEE16ECE5FE0609F475CC51CF50 -:10440000F4EDEF16FCE5FF0609F47ACC78F432ED12 -:10441000E3163CE5F30609F470CC61E088E143ED76 -:10442000E4164CE5F40609F432CC3BCF55EDE51625 -:104430005CE5F50609F467CC8DE5E816F80609F4A5 -:10444000DCC82FCF1F93CF93DF938091FE01807F35 -:10445000A9F48091FB01882389F080913002D091EA -:10446000FF016091F9017091FA01A091FC01B091F6 -:10447000FD01C62FC72316E0D81304C0DF91CF91EA -:104480001F91089590E0109711F0CF3F19F4019615 -:104490008770F2CF189F9001199F300D1124F901F8 -:1044A000E050FE4F41814713F2CF40814613EFCFDA -:1044B00042814111ECCF438154814A1B5B0B483C44 -:1044C000510528F78091FE018F7080618093FE0175 -:1044D000F901EB5FFD4F80818F708061808389EFF0 -:1044E00091E00E949E1ADF91CF911F910C944B0B8B -:1044F000AF92BF92CF92DF92EF92FF920F931F93F2 -:10450000CF93DF93CDB7DEB761970FB6F894DEBFD8 -:104510000FBECDBF8C0185E0F801DE011D96019034 -:104520000D928A95E1F7F801E28089EFA82E81E0EB -:10453000B82E6091FC017091FD016115710509F4BF -:1045400032C19091F9014091FA01892F84238F3F64 -:1045500009F429C120813181C380D480F090FB010E -:10456000F601E61BF70BFF2009F4E8C08091FE017D -:10457000582F507FE83CF10508F0ABC0511177C0CF -:10458000FE2C431321C092131FC0E1101DC08F7079 -:1045900080618093FE01C5010E949E1A8091FE01F8 -:1045A000F80185838F2D61960FB6F894DEBF0FBE9C -:1045B000CDBFDF91CF911F910F91FF90EF90DF90D2 -:1045C000CF90BF90AF900895CD2829F0822F8323FC -:1045D0008F3F09F003C180E0F82FF170DF2E80FFDC -:1045E0003CC0809130024091FF0156E0841315C019 -:1045F0002D873E878D859E850E94400F292F22950D -:104600002F702230F0F0243018F59F70F1F0F8018F -:104610009581907FD1F4D12C1EC090E0589FF0017D -:10462000599FF00D1124E050FE4F6181361306C0F2 -:104630006081261303C06281E6120FC00196877065 -:10464000D5CF9F7011F0882331F3805E883018F346 -:10465000C8010E949E1AFD2CA5CFEE2009F4A2CF1E -:104660008091FE0181608093FE01F12C9BCF43136A -:1046700006C0921304C0F801EE2009F479C0C80105 -:104680000E944C0F882309F1EE20F9F08091FE0181 -:10469000803270F02091F9013091FA0138872F8330 -:1046A0001986DB86CA868C87CE0107960E949E1AE1 -:1046B00086E0F801A9EFB1E001900D928A95E1F74B -:1046C0000E942222FF24F3946DCFC8010E949E1AFB -:1046D000F9CF51110AC089EF91E00E949E1A86E03D -:1046E000F50111928A95E9F7C0CF43130FC09213D9 -:1046F0000DC0E1100BC0F8018583C8010E949E1A0D -:1047000086E0F50111928A95E9F74CCFC8010E9425 -:104710004C0F8823D1F2EE20C1F28091FE0180324D -:1047200038F22091F9013091FA013A8329831B82F2 -:10473000DD82CC828E83CE010196B8CFE83CF105B4 -:10474000F8F6FE2CEE2009F243131FC092131DC091 -:104750008091FE0180FD10C0982F907F69F0F801D4 -:104760008583903F31F0982F907F905F8F70892BD9 -:104770008583C8010E949E1A86E0F801A9EFB1E086 -:1047800001900D928A95E1F70DCFC8010E944C0F60 -:1047900081118ECF8091FE0181608093FE01C8015E -:1047A0000E949E1AFFCEEE2009F48FCFC8010E940E -:1047B0004C0FF82E882309F488CF86E0F801A9EF82 -:1047C000B1E001900D928A95E1F78091F901909105 -:1047D000FA010E94400F0E942222E4CE81E08E2541 -:1047E000FBCE1F93CF93DF93CDB7DEB767970FB69E -:1047F000F894DEBF0FBECDBF4B8B5C8B6D8B7E8B79 -:104800008F8B6111109233021A8A198A85E0FE019A -:104810007396DE011D9601900D928A95E1F786E070 -:10482000FE013D96DE01179601900D928A95E1F703 -:10483000CE0107960E947822882389F016E08091A5 -:1048400030029091FF01891349C067960FB6F89422 -:10485000DEBF0FBECDBFDF91CF911F91089586E0DF -:10486000FE013796DE01119601900D928A95E1F7CF -:104870008A859B85892B11F38F81988589238F3FAA -:10488000E9F22091FF0130E0C90101968770992774 -:10489000409130024817190671F40E94C217109215 -:1048A000FF011092300286E0E9EFF1E0DF011D9296 -:1048B0008A95E9F7C3CF96E0929FD001939FB00D00 -:1048C0001124A050BE4FFE01319601900D929A9591 -:1048D000E1F78093FF010E944B0BB0CF819FC00195 -:1048E000112480509E4F0E947822882309F4ADCF76 -:1048F0008091300290E00196877099278093300272 -:104900009ECFFF920F931F93CF93DF93CDB7DEB768 -:10491000C45BD1090FB6F894DEBF0FBECDBF182F10 -:104920008111D7C0662309F475C0C055DF4F1882C6 -:10493000C05BD040CF54DF4F1882C15BD04011E044 -:10494000CE54DF4F1883C25BD0400E94880681603E -:10495000782FCD54DF4F99838883C35BD040C055F7 -:10496000DF4F4881C05BD040CF54DF4F5881C15BDF -:10497000D040CE54DF4F6881C25BD040CC54DF4F73 -:104980008881C45BD0400E94F123C555DF4F188257 -:10499000CB5AD040C455DF4F1882CC5AD040C355B3 -:1049A000DF4F1882CD5AD0400E9488068160782F50 -:1049B000C255DF4F99838883CE5AD040C555DF4F0B -:1049C0004881CB5AD040C455DF4F5881CC5AD04093 -:1049D000C355DF4F6881CD5AD040C155DF4F888124 -:1049E000CF5AD0400E94F123109345020E948806BE -:1049F000909342028093410281E0CC54DF4F0FB686 -:104A0000F894DEBF0FBECDBFDF91CF911F910F9104 -:104A1000FF90089502E0CA55DF4F0883C65AD04080 -:104A2000C955DF4F1882C75AD04011E0C855DF4F33 -:104A30001883C85AD0400E9488068160782FC755D5 -:104A4000DF4F99838883C95AD040CA55DF4F4881C8 -:104A5000C65AD040C955DF4F5881C75AD040C855B3 -:104A6000DF4F6881C85AD040C655DF4F8881CA5A87 -:104A7000D0400E94F123CF55DF4F0883C15AD04068 -:104A8000CE55DF4F1882C25AD040CD55DF4F188225 -:104A9000C35AD0400E9488068160782FCC55DF4FE2 -:104AA00099838883C45AD040CF55DF4F4881C15A7B -:104AB000D040CE55DF4F5881C25AD040CD55DF4F40 -:104AC0006881C35AD040CB55DF4F8881C55AD0404A -:104AD00089CF813009F0C0C0662309F45FC0C45695 -:104AE000DF4F1882CC59D040C356DF4F8883CD5951 -:104AF000D040C256DF4F8883CE59D0400E948806EE -:104B00008160782FC156DF4F99838883CF59D04079 -:104B1000C456DF4F4881CC59D040C356DF4F58812F -:104B2000CD59D040C256DF4F6881CE59D040C056D3 -:104B3000DF4F8881C05AD0400E94F123C956DF4F11 -:104B40001882C759D040C856DF4F1883C859D04083 -:104B5000C756DF4F1882C959D0400E94880681602D -:104B6000782FC656DF4F99838883CA59D040C956DB -:104B7000DF4F4881C759D040C856DF4F5881C859C8 -:104B8000D040C756DF4F6881C959D040C556DF4F66 -:104B90008881CB59D0400E94F1232ECF02E0CE561F -:104BA000DF4F0883C259D040CD56DF4F8883C359A9 -:104BB000D040CC56DF4F8883C459D0400E9488062D -:104BC0008160782FCB56DF4F99838883C559D040B9 -:104BD000CE56DF4F4881C259D040CD56DF4F588165 -:104BE000C359D040CC56DF4F6881C459D040CA5613 -:104BF000DF4F8881C659D0400E94F123C357DF4F51 -:104C00000883CD58D040C257DF4F1883CE58D040CC -:104C1000C157DF4F1882CF58D0400E94880681606C -:104C2000782FC057DF4F99838883C059D040C3572E -:104C3000DF4F4881CD58D040C257DF4F5881CE5802 -:104C4000D040C157DF4F6881CF58D040CF56DF4F9B -:104C50008881C159D0409FCF823009F0ABC0662314 -:104C600009F45EC0C857DF4F1882C858D040C757F4 -:104C7000DF4F8883C958D04081E0C657DF4F888313 -:104C8000CA58D0400E9488068160782FC557DF4FF0 -:104C900099838883CB58D040C857DF4F4881C85884 -:104CA000D040C757DF4F5881C958D040C657DF4F53 -:104CB0006881CA58D040C457DF4F8881CC58D04053 -:104CC0000E94F123CD57DF4F1882C358D040CC57F4 -:104CD000DF4F1883C458D040CB57DF4F1882C558D8 -:104CE000D0400E9488068160782FCA57DF4F998391 -:104CF0008883C658D040CD57DF4F4881C358D04035 -:104D0000CC57DF4F5881C458D040CB57DF4F688114 -:104D1000C558D040C957DF4F8881C758D0403BCFD6 -:104D2000EF968FAFEF97C158DF4F8883CF57D040B2 -:104D300081E0C058DF4F8883C058D0400E94880669 -:104D40008160782FCF57DF4F99838883C158D04037 -:104D5000EF964FADEF97C158DF4F5881CF57D040F6 -:104D6000C058DF4F6881C058D040CE57DF4F888190 -:104D7000C258D0400E94F123EA961FAFEA97EB9603 -:104D80001FAFEB97EC961FAEEC970E9488068160F0 -:104D9000782FEE969FAF8EAFEE97EA964FADEA97DB -:104DA000EB965FADEB97EC966FADEC97EE968FAD13 -:104DB000EE97F1CE833009F081C0662309F43FC03D -:104DC00019E0E5961FAFE597E6961FAEE69781E0FE -:104DD000E7968FAFE7970E9488068160782FE99663 -:104DE0009FAF8EAFE997E5964FADE597E6965FAD3D -:104DF000E697E7966FADE797E9968FADE9970E9442 -:104E0000F123E0961FAFE097E1961FAEE197E2969F -:104E10001FAEE2970E9488068160782FE4969FAFCC -:104E20008EAFE497E0964FADE097E1965FADE197E6 -:104E3000E2966FADE297E4968FADE497ACCE1BE0BF -:104E4000AB961FAFAB97AC961FAEAC9781E0AD961B -:104E50008FAFAD970E9488068160782FAF969FAF85 -:104E60008EAFAF97AB964FADAB97AC965FADAC97AF -:104E7000AD966FADAD97AF968FADAF970E94F12312 -:104E8000A6961FAFA697A7961FAEA797A8961FAE88 -:104E9000A8970E9488068160782FAA969FAF8EAF50 -:104EA000AA97A6964FADA697A7965FADA797A89687 -:104EB0006FADA897AA968FADAA976DCE843009F0F2 -:104EC00081C0662309F43FC009E0A1960FAFA19706 -:104ED00011E0A2961FAFA297A3961FAFA3970E94BF -:104EE00088068160782FA5969FAF8EAFA597A19673 -:104EF0004FADA197A2965FADA297A3966FADA39772 -:104F0000A5968FADA5970E94F1236C960FAF6C9775 -:104F10006D961FAF6D976E961FAE6E970E948806B6 -:104F20008160782FA0969FAF8EAFA0976C964FAD03 -:104F30006C976D965FAD6D976E966FAD6E97A09600 -:104F40008FADA09728CE0BE067960FAF679711E063 -:104F500068961FAF689769961FAF69970E94880689 -:104F60008160782F6B969FAF8EAF6B9767964FAD32 -:104F7000679768965FAD689769966FAD69976B960E -:104F80008FAD6B970E94F12362960FAF6297639685 -:104F90001FAF639764961FAE64970E948806816076 -:104FA000782F66969FAF8EAF669762964FAD6297E9 -:104FB00063965FAD639764966FAD649766968FADA9 -:104FC0006697E9CD853009F07DC0662309F445C0B8 -:104FD00039E0F32E2D96FFAE2D9702E02E960FAFFF -:104FE0002E9711E02F961FAF2F970E9488068160A1 -:104FF000782F61969FAF8EAF61972D964FAD2D970D -:105000002E965FAD2E972F966FAD2F9761968FAD31 -:1050100061970E94F1232896FFAE289729960FAF3B -:1050200029972A961FAE2A970E9488068160782FBA -:105030002C969FAF8EAF2C9728964FAD2897299628 -:105040005FAD29972A966FAD2A972C968FAD2C9736 -:105050000E94F12310934402C9CC2BE0F22E239638 -:10506000FFAE239702E024960FAF249711E0259618 -:105070001FAF25970E9488068160782F27969FAFE3 -:105080008EAF279723964FAD239724965FAD249735 -:1050900025966FAD259727968FAD27970E94F12310 -:1050A000FDAE0EAF1FAE0E9488068160782F22965B -:1050B0009FAF8EAF22974DAD5EAD6FAD22968FAD97 -:1050C0002297C6CF863009F048C0662329F199E0BF -:1050D000F92EF8AE03E009AF11E01AAF0E9488067E -:1050E0008160782F9CAF8BAF48AD59AD6AAD8CAD68 -:1050F0000E94F123FBAA0CAB1DAA0E9488068160C6 -:10510000782F9FAB8EAB4BA95CA96DA98FA90E948C -:10511000F123109343026ACC8BE0F82EFEA603E045 -:105120000FA711E018AB0E9488068160782F9AAB18 -:1051300089AB4EA55FA568A98AA90E94F123F9A6AB -:105140000AA71BA60E9488068160782F9DA78CA7BE -:1051500049A55AA56BA58DA5DACF873009F041C0C6 -:105160006623F9F013E01CA31DA381E08EA30E9427 -:1051700088068160782F98A78FA34CA15DA16EA1AE -:1051800088A50E94F1231F8F18A319A20E948806E8 -:105190008160782F9BA38AA34F8D58A169A18BA111 -:1051A000FACC05E00A8F13E01B8F81E08C8F0E9400 -:1051B00088068160782F9E8F8D8F4A8D5B8D6C8DD8 -:1051C0008E8D0E94F1230D8B1E8B1F8A0E948806F4 -:1051D0008160782F998F888F4D895E896F89898D3D -:1051E000DACC883009F008CC662301F106E0088BA0 -:1051F00013E0198B81E08A8B0E9488068160782FEA -:105200009C8B8B8B488959896A898C890E94F123F0 -:105210000B871C871D860E9488068160782F9F87D8 -:105220008E874B855C856D858F85B5CC08E00E83B8 -:1052300013E01F8381E088870E9488068160782FB1 -:105240009A8789874E815F8168858A850E94F123CC -:1052500009831A831B820E9488068160782F9D83B0 -:105260008C8349815A816B818D8195CC1F920F92DD -:105270000FB60F9211242F933F934F935F936F9329 -:105280007F938F939F93AF93BF93CF93DF93EF93CE -:10529000FF93D091E900DF708091EC00C82FC170BE -:1052A00080FDC0E81092E9008091F000877F809334 -:1052B000F00078940E94D7171092E9008091F000D6 -:1052C00088608093F000CD2BCF70C093E900FF91F0 -:1052D000EF91DF91CF91BF91AF919F918F917F918E -:1052E0006F915F914F913F912F910F900FBE0F9053 -:1052F0001F9018951F920F920FB60F9211242F93A3 -:105300003F934F935F936F937F938F939F93AF934D -:10531000BF93EF93FF938091E10082FF09C08091DA -:10532000E20082FF05C08091E1008B7F8093E10065 -:105330008091DA0080FF24C08091D80080FF20C0D7 -:105340008091DA008E7F8093DA008091D90080FF0F -:105350009BC088E189BD8AE189BD09B400FEFDCF0B -:1053600081E08093D2028091AD02811109C00E9438 -:10537000EC040E94B7058091E20084608093E20013 -:105380008091E10080FF17C08091E20080FF13C090 -:105390008091E2008E7F8093E2008091E200806144 -:1053A0008093E2008091D80080628093D80019BC7D -:1053B00085E08093D2028091E10084FF29C0809132 -:1053C000E20084FF25C088E189BD8AE189BD89B5F5 -:1053D000982F917080FFFBCF8091D8008F7D8093B4 -:1053E000D8008091E1008F7E8093E1008091E200FF -:1053F0008F7E8093E2008091E20081608093E200E2 -:105400008091D302882309F445C084E08093D202BE -:105410008091E10083FF27C08091E20083FF23C0D9 -:105420008091E100877F8093E10082E08093D20247 -:105430001092D3028091E1008E7F8093E1008091F1 -:10544000E2008E7F8093E2008091E2008061809391 -:10545000E20042E060E080E00E9485058091F0007B -:1054600088608093F000FF91EF91BF91AF919F9181 -:105470008F917F916F915F914F913F912F910F90FD -:105480000FBE0F901F90189519BC1092D202109267 -:10549000AD0276CF8091E30087FD93E09093D20236 -:1054A000B7CF78941F921FB61F9211248F939F93AA -:1054B000AF93BF938091A4029091A502A091A60200 -:1054C000B091A7020196A11DB11D8093A4029093F3 -:1054D000A502A093A602B093A702BF91AF919F919E -:1054E0008F911F901FBE1F9018951F921FB61F927D -:1054F00011248F939F93AF93BF938091A302811147 -:1055000013C08091A4029091A502A091A602B0912F -:10551000A7024196A11DB11D8093A4029093A502FC -:10552000A093A602B093A702BF91AF919F918F91D4 -:105530001F901FBE1F901895CDB7DEB7AA970FB664 -:10554000F894DEBF0FBECDBF84B7877F84BF0FB690 -:10555000F894A89580916000886180936000109213 -:1055600060000FBE80E890E00FB6F8948093610071 -:10557000909361000FBE85B7806885BF85B780684E -:1055800085BF8DEB98E09093BF018093BE010E9490 -:10559000EC040E94B7058091E20084608093E200F1 -:1055A00078948091D2028823A1F01091E9001F70B5 -:1055B0009091EC00892F817090FD80E8182B10925B -:1055C000E9008091E80083FD0E94D7171F701093B7 -:1055D000E90082E084BD93E095BD9AEF97BD80938A -:1055E0006E000E94730F811102C00E94A80E80EF0E -:1055F0000E94BF0881EF0E94BF0882EF0E94BF088F -:1056000083EF0E94BF0803E511E06FE5E62E61E03D -:10561000F62ED8018D918D018F3F11F00E94BF08A9 -:10562000E016F106B1F710924B0210924A02109266 -:105630007A021092790210924D0210924C0210924E -:105640007C0210927B0210924F0210924E02109236 -:105650007E0210927D02109251021092500210921E -:10566000800210927F020E94B717811102C00E942F -:10567000D01582E090E00E94B831809370020E94C1 -:105680008C0F9093A9028093A8020E943C16EFE32E -:10569000FCE93197F1F700C000000E943C168091B0 -:1056A000790280FF08C06FEF7FEF90E080E00E94FA -:1056B000EA310E94D10C83E090E00E94B83190E082 -:1056C0000E94C60B8091DC029091DD020E94B91409 -:1056D00080915202811132C00E94B717811104C01B -:1056E0000E94D0150E94C01588E090E00E94C03151 -:1056F00060935F03709360038093610390936203F0 -:105700006E7F71F40E94C01588E090E00E94C03165 -:1057100060935F03709360038093610390936203CF -:105720000E94D2061092980280915F0380FF03C00E -:1057300086950E947B1481E0809352026AE871E0B2 -:1057400056E6852E52E0952E28E731E0E1E8F1E0BB -:1057500041E050E01191812F82958F7090E0DC0143 -:105760009196FC9091971F70E12E6A0101C0CC0CBC -:105770001A95EAF70C2D00950F2191960C939197AD -:1057800092961C9192971C2992961C93D901FD9098 -:105790009D010F2D02950F7010E0D8019196BC90DD -:1057A000BF2DBF70FB2E6A0101C0CC0CBA95EAF781 -:1057B000DC2CD094DB20D8019196DC9291979296C4 -:1057C000DC909297DC289296DC92DC0190968C918A -:1057D00090E002C095958795EA94E2F78170D80130 -:1057E00090960C9110E002C015950795FA94E2F797 -:1057F00090E000FD92E0892BD4018D934D016E174E -:105800007F0709F0A7CF86EA92E0909390028093F9 -:105810008F0281E20E947B1481E090E00E944C158F -:1058200080E091E09093A00280939F028091D20249 -:10583000FF24F39408E11AE1853009F47CC20E9448 -:105840003C16882359F08FB7F8944091A4025091E8 -:10585000A5026091A6027091A7028FBFA9E7B2E0EE -:10586000E1E7F2E010E000E0702F8D919D91219131 -:1058700031912817390709F487C22827392760E0B2 -:10588000EE24E394F12CA9014E215F21452B09F46C -:1058900075C269A37AA39C012E213F2191E0232B9D -:1058A00009F490E09BA30E9488068160782F9DA355 -:1058B0008CA349A15AA16BA18DA10E94F123000FD5 -:1058C000111FF801EF58FD4F80819181E826F926DC -:1058D000F182E082809198028823D1F18091970231 -:1058E000E0915F03E695E81BE0939302823009F0B4 -:1058F00062C2F0E0EC53FD4FE4910E2F10E044E261 -:10590000E42E43E1F42E80919402882361F01092FA -:1059100094020E94880690939202809391021092C2 -:105920009602109295020E948806E0919102F091F1 -:1059300092028E1B9F0B8F3F9F4750F4E00FF11F89 -:10594000F0939202E093910281E992E0F7010995C8 -:105950003DE5E32E32E0F32E04E512E04FE6442E5F -:1059600041E0542E58E7652E51E0752E61E8862EF1 -:1059700061E0962E76E6A72E72E0B72E212C312C10 -:10598000D501ED915D01EE0FEE0FD4012D914D018A -:10599000A22FA295AF70B0E090968C9190E02F70FE -:1059A00002C0959587952A95E2F781709927D301D2 -:1059B0004D913D01A42FA295AF70B0E090962C912F -:1059C00030E04F7002C0359527954A95E2F7A9015E -:1059D0004170552720FF02C042E050E0842BE82BA5 -:1059E000D5011197EC93D201CD902D01EF70F0E02D -:1059F000E15AFE4F8081F7019081890F8083D12C7D -:105A0000082E000C990B20E08C159D054CF0D80158 -:105A10008C918F5F8C9360E0832D0E94812421E024 -:105A2000F7018081082E000C990B442755274C194B -:105A30005D09481759074CF0D8018C9181508C931F -:105A400061E0832D0E94812421E0F7018081082EEE -:105A5000000C990BB6010E945931D7018D937D013D -:105A6000222A33940F5F1F4FB9E03B1289CF2220C7 -:105A700059F08FB7F8944091A4025091A50260911B -:105A8000A6027091A7028FBF86E0E8E8F2E0DE018F -:105A9000119601900D928A95E1F7F0908A02E090BC -:105AA0008B0210918C0200918D0210928A0210924A -:105AB0008B0210928C0210928D028F2D8E2909F488 -:105AC00048C080918602909187020E9479069C01CD -:105AD00090918202992309F4C5C323333105C8F19B -:105AE0009F3F19F09F5F90938202FF2059F00E9420 -:105AF00043089FEF1F140CF491E0899F802D11241F -:105B000080938A02EE2059F00E9443089FEF1E14F2 -:105B10000CF491E0899F802D112480938B023091A9 -:105B20008A023323B1F020918B02222391F045EBBE -:105B30003403C0011124992309F497C190938A0278 -:105B400045EB240390011124332309F492C13093CF -:105B50008B02812F802B09F448C0809184029091A0 -:105B600085020E9479069C0190918102992309F493 -:105B700074C325363105C8F19F3F19F09F5F90939C -:105B80008102112359F00E9421089FEF11160CF495 -:105B900091E0899F802D112480938C02002359F07D -:105BA0000E9421089FEF10160CF491E0899F802D30 -:105BB000112480938D0230918C023323B1F0209117 -:105BC0008D02222391F045EB3403C0011124992367 -:105BD00009F453C190938C0245EB240390011124E6 -:105BE000332309F44EC130938D0280918A02909143 -:105BF0008B02892B90918C02892B90918D02892B9D -:105C000011F00E94810786E0FE013196A8E8B2E01B -:105C100001900D928A95E1F70E94C00690916F0263 -:105C2000891731F00E94C00680936F020E94A11470 -:105C30008091D202843009F0F9CD83E08093E900AD -:105C40008091E80082FFF2CD8091E80090E085FF2E -:105C500006C00E940B05882309F417C191E08091CA -:105C6000E8008B778093E800992309F4DFCDE98180 -:105C7000E150E33108F09DC1F0E0E659FD4C0C9491 -:105C80006D318091D202843009F443C080E00E94DB -:105C9000A1141092980280918E02811116C0F09288 -:105CA0008E0280915F03982F9170909353028E7FA4 -:105CB00080935F03BFEFE0E7F2E0B150E040F040D7 -:105CC000E1F700C000000E94B00F1092A30288E12B -:105CD00090E0A0E40FB6F894A895809360000FBE02 -:105CE000A093600083B7817F846083BF83B78160A6 -:105CF00083BF7894889583B78E7F83BF0FB6F8945F -:105D0000A895809160008861809360001092600087 -:105D10000FBE8091D102882371F00E943C16E9E702 -:105D2000F2E081919191892B09F078C281E892E0AB -:105D30008E179F07B1F78091D202853009F4A1CF69 -:105D40000E94C2170E94C0060E94A11410928E02E7 -:105D500080915302882359F080915F038160809382 -:105D60005F0386950E947B140E949A0F68CD8091F4 -:105D700099028823C9F30E94B00FF6CF6F5FEE0C33 -:105D8000FF1C6C3009F07FCD0F5F1F4F04301105F1 -:105D900009F06ACD8FEF8EA38FA318A60E94880604 -:105DA0008160782F9AA789A74EA15FA168A58AA5CF -:105DB0000E94F1238FCD863059F4F0E0EF53FD4F70 -:105DC000E4910E2F10E034E1E32E33E1F32E9BCD6E -:105DD000893061F4E695F0E0E254FD4FE4910E2F36 -:105DE00010E025E6E22E22E1F22E8DCD8F3061F417 -:105DF000E695F0E0E554FD4FE4910E2F10E090E1C0 -:105E0000E92E92E1F92E7FCD853159F4F0E0E85486 -:105E1000FD4FE4910E2F10E08DE9E82E81E1F82E80 -:105E200072CD08E210E0FDE0EF2EF1E1FF2E8831A7 -:105E300009F469CD833249F4E6EBF2E0059114915F -:105E4000BBEBEB2EB2E1FB2E5ECD04EF11E0A0ED3B -:105E5000EA2EA0E1FA2E843209F455CD00ED17E0C8 -:105E6000E1EDEE2EE6E0FE2E4ECD81E080938A023B -:105E700067CE81E080938B026CCE81E080938C02B0 -:105E8000ABCE81E080938D02B0CE00E210E0CE0177 -:105E900001967C018091E80085FD0AC08091E800B0 -:105EA0008B778093E8000E940B05882399F3D6CE68 -:105EB0008091F100D7018D937D010150110951F7B7 -:105EC000CDCE1A8289E08B833FC08A81823009F46B -:105ED000BBC18330A9F0813009F06BC02FB7F894B3 -:105EE0006091A4027091A5028091A6029091A702F0 -:105EF0002FBF0E9473316B837C838D839E8324C06C -:105F00008091790290917A029827892798279C831B -:105F10008B8380917B0290917C0298278927982718 -:105F20009E838D8380917D0290917E0298278927A0 -:105F3000982798878F8380917F029091800298277D -:105F4000892798279A8789878091D202843009F01F -:105F50006DCC1091E9001F709091EC00892F817039 -:105F600090FD80E8182B82E08093E9008091E800A2 -:105F700080FF0DC050E040E060E270E0CE0101968D -:105F80000E943C058091E8008E778093E8001F70A6 -:105F90001093E9004BCC8A81823059F46B817C816B -:105FA0008D819E810E94733186E290E00E94CC3107 -:105FB000CBCF8FEF8983C8CF4C816B818A810E94C0 -:105FC000D10E9827892798279E838D83BDCFED809A -:105FD000FE80FE24EF24FE248A810B81B8E10B9F12 -:105FE00080011124E0E68E9F000D111D11248C818B -:105FF00090E0880F991F080F191F6F2DC801879611 -:106000000E94CC316E2DC8018896D0CF0E943B0EE5 -:106010009BCF8A818138C1F060F4803809F094CF39 -:1060200020E04B8160916103809160030E944A13DC -:106030008BCF823849F1833809F086CF20E0409138 -:1060400062036C818B81F2CF8B810E947B149B81D8 -:1060500080915F03911111C08E7F80935F03109236 -:106060009802FFEF20E742E0F15020404040E1F786 -:1060700000C000000E94B00F67CF816080935F0373 -:1060800086950E947B1460CF8B81809363035CCFE5 -:106090008A81813899F030F4803809F055CF8091A9 -:1060A000620311CF823891F0833809F04DCF80918F -:1060B00060038B83809161038C8346CF80915F0363 -:1060C00080FF02C08695FFCE80E0FDCE8091630305 -:1060D000FACE60915F0370916003809161039091AB -:1060E00062030E94381330CF80E18A832DCF84E091 -:1060F0008A8389E1E8CE0A811B81102701271027B6 -:10610000CE0101966C01EC80DC01AE0DB11D7D016C -:10611000C80189519C4FEC14FD0409F415CF0931D5 -:10612000B4E01B0750F40E94B831F60184830F5F7E -:106130001F4FBFEFCB1ADB0AEBCFD60114961C9290 -:10614000F6CF0A811B81102701271027FE01319607 -:106150006F01EC80E00EF12EF11CC80189519C4FBB -:10616000E016F10609F4F0CE0931F4E01F0728F437 -:10617000D60114966C910E94CC31BFEFCB1ADB0A8A -:106180000F5F1F4FEACF0E942B0EDECE8AE0ADCF0D -:106190000A811B81102701271027FE0131966F010C -:1061A000EC80CF018E0D911D7C01C8018796EC1407 -:1061B000FD0409F4C9CE003CA3E01A0750F40E9484 -:1061C000B831F60184830F5F1F4FBFEFCB1ADB0A94 -:1061D000ECCFD60114961C92F6CF0A811B811027B2 -:1061E00001271027FE0131966F01EC80E00EF12EA1 -:1061F000F11CC8018796E016F10609F4A5CE003C13 -:10620000F3E01F0728F4D60114966C910E94CC315C -:10621000BFEFCB1ADB0A0F5F1F4FEBCF09BD19BDD4 -:1062200009B400FEFDCF8091D8008F7D8093D80007 -:106230008091E00082608093E0008091E00081FD29 -:10624000FCCF0E94C21777CD86E290E00E94B83161 -:106250001B821C821D828E8377CE2D32314008F046 -:106260008DCCC3CC2D32314008F03CCC72CC87FBB6 -:10627000082E062687FD819567FD61950E9489316C -:106280000EF4919507FC81950895AA1BBB1B51E163 -:1062900007C0AA1FBB1FA617B70710F0A61BB70B96 -:1062A000881F991F5A95A9F780959095BC01CD013B -:1062B000089597FB072E16F4009407D077FD09D0B8 -:1062C0000E94453107FC05D03EF4909581959F4F83 -:1062D0000895709561957F4F0895EE0FFF1F05900B -:1062E000F491E02D09946927962769277827872755 -:1062F000782708950E943532332312F48A1B9B0BB2 -:106300000C9484310E943532B7FF0895821B930BA1 -:106310000895991B79E004C0991F961708F0961B01 -:10632000881F7A95C9F780950895FB01DC0102C0AA -:1063300005900D9241505040D8F70895FC0141500E -:10634000504030F001900616D1F73197CF010895F3 -:10635000882799270895FB01DC0104C08D910190E5 -:10636000801921F441505040C8F7881B990B0895BB -:10637000F999FECF92BD81BDF89A992780B508950D -:10638000A6E1B0E044E050E00C94F231A8E1B0E0C6 -:1063900042E050E00C94F231262FF999FECF92BDE5 -:1063A00081BDF89A019700B4021639F01FBA20BDDA -:1063B0000FB6F894FA9AF99A0FBE08950396272F0C -:1063C0000E94CD310E94CC31252F0E94CD31242F47 -:1063D0000C94CD310196272F0E94CD310C94CC31F5 -:1063E000DC01CB01FC01F999FECF06C0F2BDE1BD95 -:1063F000F89A319600B40D9241505040B8F7089584 -:106400000E943532A59F900DB49F900DA49F800DE2 -:10641000911D11240895B7FF0C9400320E940032A0 -:10642000821B930B0895A1E21A2EAA1BBB1BFD0130 -:106430000DC0AA1FBB1FEE1FFF1FA217B307E40763 -:10644000F50720F0A21BB30BE40BF50B661F771FBB -:10645000881F991F1A9469F760957095809590959B -:106460009B01AC01BD01CF010895A29FB001B39F74 -:10647000C001A39F700D811D1124911DB29F700D4D -:10648000811D1124911D0895F894FFCF5E0F5E0FBA -:10649000670F670F690F670F670F670F5E0F5E0F5C -:1064A0006E0F670F670F6E0FBC18E4183719E418EA -:1064B000371917194F1937194C1A591AB41EB41E27 -:1064C000281F281F861FA01FEB1EEB1EAB1F3520A9 -:1064D00046204620612F652FCB2FDC2FE72F06307B -:1064E000093048306930D92FD92F743077307B305C -:0A64F000A130C330C630C830ED30D3 -:1064FA007606910C700C6C0C680C01191A1B1C1D89 -:10650A001E1F202122010201002A002A2A0181825B -:10651A0083E200E900EA00B500B600B700CD0083C7 -:10652A0001CC008A0192019401210223022402254E -:10653A0002260227022A02B300B4006F007000F09C -:10654A00F1F2F3F5F6F700010203040537363500D8 -:10655A00FF0100010000FFFF0000010001FF00042D -:10656A00040404040404020261626466909294972B -:10657A00066063656791939596070001020202021D -:10658A000606060909090909090F0F0F0F0F0F154A -:10659A00151518191919191919191919192324402E -:0E65AA0022B6B6019401DE00C808E10801091E +:102E4000109249021091460280914502111185C0ED +:102E5000882309F45CC010921A0184E080931B015E +:102E600080931C018FE00E947B141092450281E048 +:102E70008093460280913F02882399F1809140021D +:102E800081112FC080913D0290913E020E947906EF +:102E900081369A4E78F080913B0290913C020196E7 +:102EA00090933C0280933B020E94880690933E02DE +:102EB00080933D0280913B0290913C024F9788F0B5 +:102EC00010921A018AE280931B0180931C018FE00B +:102ED0000E947B1481E08093400210923C02109289 +:102EE0003B028F2D28960FB6F894DEBF0FBECDBFE4 +:102EF000DF91CF911F910F91FF90EF90DF90CF90D6 +:102F0000BF90AF909F908F907F906F900895809129 +:102F10004402882379F086E180931A018AE1809344 +:102F20001B0184E080931C018FE00E947B141092AF +:102F300044029DCF809143028823A9F08AE18093C7 +:102F40001A018EE180931B0184E080931C018FE0C5 +:102F50000E947B14109243028ACF81112BC0809172 +:102F60004402811127C080914302811123C08091C6 +:102F70004102909142020E947906853F9140D0F033 +:102F8000112379F010921A018AE280931B01809339 +:102F90001C0181E20E947B148091400281110E94F9 +:102FA000AD1010924502109244021092430210920A +:102FB000460260CF109245021092440210924302E2 +:102FC00059CF90E080E00E94EE31893E9E4F11F48F +:102FD0000C94730F80E008951092340280911D01CB +:102FE000E2ECF1E0882359F08091A80287FF07C046 +:102FF0008EE1DF011D928A95E9F70C94A90B86E01A +:10300000F8CF1F93CF93DF93CDB7DEB7AA970FB654 +:10301000F894DEBF0FBECDBF84ED92E02091F100A9 +:10302000DC012D93CD01B2E08C3D9B07B9F7809177 +:10303000D502833009F471C0B8F4813009F448C076 +:10304000823009F4B2C08091E80083FF3AC18091D8 +:10305000D4029091D5029A3008F033C1E92FF0E004 +:10306000E458FD4C0C9495318A3009F48DC08B30B6 +:1030700009F470C0893039F78091D402813219F790 +:103080008091D8029091D902009711F00297D9F659 +:103090008091E800877F8093E8008091E80082FFBC +:1030A00037C08091F2009091F300029729F480914B +:1030B000F1008B7F813021F48091F1008093AF0289 +:1030C0008091E8008B778093E8000E946605BBCF73 +:1030D0008091D402813A09F0B6CF8091E800877FD1 +:1030E0008093E8008091D8029091D902892B61F4F5 +:1030F00060E280EB92E070E00E9419068091E800A7 +:103100008B778093E8009FCF60E090E080E0F3CF82 +:103110008091D2028111C1CF96CF8091D402813AA1 +:1031200009F091CF8091D8029091D902892B09F0B2 +:103130008ACF8091E800877F8093E8008091E80043 +:1031400080FFFCCF80911D018093F1008091E80009 +:103150008E77B9CF8091D402813209F074CF8091FB +:10316000D8029091D902892B09F06DCF8091E800A7 +:10317000877F8093E8000E9466058091D602809345 +:103180001D010E94EC175FCF8091D402813209F0BB +:103190005ACF8091E800877F8093E8000E946605FF +:1031A0008091D7028093AE024ECF8091D402813AB3 +:1031B00009F049CF8091E800877F8093E8008091F3 +:1031C000E80080FFFCCF8091AE02BECF803899F03E +:1031D000823809F076C08091D8028F70873008F06D +:1031E00070C08093E9008091EB0085FB882780F90F +:1031F0001092E90006C08091D0029091D102911105 +:1032000082609091E800977F9093E8008093F100AE +:103210001092F1008091E8008E77B5C1882309F4FF +:10322000A2C1823009F04DC08091D6028111A6C1A1 +:103230008091D8028F702FEF280F263008F041C000 +:103240008093E9002091EB0020FF98C1933031F486 +:103250008091EB0080628093EB0090C19091EB0035 +:1032600090619093EB0021E030E001C0220F8A953D +:10327000EAF72093EA001092EA008091EB00886060 +:10328000EACF81111EC01091D6021F778091E30012 +:103290008078812B8093E3008091E800877F809382 +:1032A000E8000E9466058091E80080FFFCCF8091D5 +:1032B000E30080688093E30082E0111183E0809353 +:1032C000D2028091E80083FF0AC08091E800877FE6 +:1032D0008093E8008091EB0080628093EB00AA96D7 +:1032E0000FB6F894DEBF0FBECDBFDF91CF911F9117 +:1032F00008958058823028F72091D6023091D70265 +:103300002C3DE3E03E07A1F583E08A838AE28983CE +:103310004FB7F894DE01139620E03EE051E2E32F30 +:10332000F0E050935700E49120FF03C0E295EF7066 +:103330003F5FEF708E2F90E0EA30C0F0C7968D931C +:103340009D932F5F243159F74FBF8091E800877F0D +:103350008093E8006AE270E0CE0101960E941906AF +:103360008091E8008B778093E800ABCFC096E7CFE1 +:103370008091D8029091D902432F552743305105AF +:1033800009F44AC078F54130510509F47AC08BE55B +:1033900090E0E6EBF8E04230510509F092CF209141 +:1033A000E800277F2093E8002091DA023091DB02C9 +:1033B0008217930708F49C0140E02115310509F0BC +:1033C00065C0411163C08091E80082FDC9CF809142 +:1033D000D202882329F2853019F28091E80083FF18 +:1033E000F2CFBECF4132510509F43CC04232510503 +:1033F00009F067CF8330910508F063CFFC01EE0F31 +:10340000FF1FEE54FE4F0190F081E02D81559E4F3D +:10341000DC018C9190E01AC0332721303105D1F0C6 +:103420002115310561F02230310509F04ACFE3E280 +:10343000F9E0E4918E2F90E0E3E2F9E007C0E1E4E7 +:10344000F9E0E4918E2F90E0E1E4F9E0009709F4CF +:1034500038CFA5CFEDE2F9E0E4918E2F90E0EDE2D8 +:10346000F9E0F4CF8330910508F02BCF880F991F36 +:10347000FC01E854FE4F0190F081E02D89E090E0DE +:103480008ECF82E190E0E1E1F9E089CF8091D20234 +:10349000882309F465CF853009F462CF8091E80074 +:1034A00083FD5ECF8091E80082FD8DCF8091E800A2 +:1034B00080FF83CF8091F2009091F30021153105B8 +:1034C00019F08830910550F041E0089709F040E08C +:1034D0008091E8008E778093E8006FCF449140930D +:1034E000F1003196215031090196E8CF803809F07A +:1034F000E8CE8091E800877F8093E8008091D30236 +:103500008093F10087CE8111DCCE1091D60212306B +:1035100008F0D7CE8091E800877F8093E800109371 +:10352000D3020E946605112311F084E005C080914A +:10353000E30087FDFACF81E08093D20242E061ECA4 +:1035400081E00E94850542E261EC84E00E948505ED +:1035500042E261EC82E00E94850542E260EC83E099 +:103560000E948505AECE8091D602813009F0A9CEA9 +:1035700081E0933009F080E08093D1021092E9005D +:103580008091E800877F8093E8000E94660599CECD +:103590003F924F925F926F927F928F929F92AF92E3 +:1035A000BF92CF92DF92EF92FF920F931F93CF9330 +:1035B000DF9300D000D00F92CDB7DEB78C01FC01B5 +:1035C00083819481892B31F08081918189238F3F80 +:1035D00009F052C60F900F900F900F900F90DF914F +:1035E000CF911F910F91FF90EF90DF90CF90BF9000 +:1035F000AF909F908F907F906F905F904F903F9093 +:1036000008950E94040FF82E682F89819A810E94E4 +:103610007D0B69817A818F2D0E94F70E7C01F80164 +:103620008281882309F41AC6970122513F4520312F +:10363000310508F0D2C58FEF97E00E94E031FEEE31 +:10364000EF0E57EE852E53E0952E882381F1809161 +:103650003102877009F4BECFF8018281882309F412 +:10366000B9CF82E00F900F900F900F900F90DF91E5 +:10367000CF911F910F91FF90EF90DF90CF90BF906F +:10368000AF909F908F907F906F905F904F903F9002 +:103690000C947415811428E09206C9F2C4010E94AA +:1036A000E031811101C0EA943FEF831A930AE110DF +:1036B000F1CF1C821B82442443944AE0342E7401CF +:1036C0004FEFE41AF40AC4010E94E03189831A82A0 +:1036D000882309F4BCCF9FEF980F933000F58A83BD +:1036E000498252E0850E911CC7010E94E0318B8314 +:1036F000882309F4ACCFCE0101967C01F70120812B +:103700002223E9F2213009F049C091818281913070 +:1037100041F4F2E0EF0EF11C0E94AA0D09C047012E +:10372000EACF923049F422E0E20EF11C0E94F50C3F +:103730003FEFE31AF30AE2CF933031F432E0E30EC5 +:10374000F11C0E94E10BF4CF943021F04FEFE41A0A +:10375000F40AEECF52E0E50EF11C30E020E0B701B4 +:103760006F5F7F4FF70141818053990B8A3091053C +:1037700050F021503109E0F28FE99FE00197F1F715 +:1037800000C00000F6CF329EF001339EF00D1124F0 +:103790009C012E0F3F1F842F7B01E1CFE22FF0E031 +:1037A000EA5DFD4F5490822F86958695869590E030 +:1037B000FC01EA5EFD4F64902770712C022E02C05E +:1037C000759467940A94E2F7E1E06E227724FC0195 +:1037D000EA5FFD4FA490B12C022E02C0B594A794CD +:1037E0000A94E2F7F1E0AF22BB24FC01EA50FE4F5D +:1037F000C490D12C02C0D594C7942A95E2F721E059 +:10380000C222DD246114710419F081EE0E94F50CCE +:10381000A114B10419F086EE0E94F50C852D0E94CA +:10382000AA0DAB2819F086EE0E94E10B672819F06B +:1038300081EE0E94E10BCD2809F47ACF8CE26CCFA7 +:1038400081E00E9490150E94541501CF81E00E94F2 +:103850006315F9CF82E0F5CFF3E8EF16FFE5FF0639 +:1038600009F4CCC024E8E2162FE5F20609F0D5C42D +:10387000882309F4ECCEF0903F02EE24E394FE247A +:10388000F0923F020E94880690933E0280933D0290 +:103890008091400210921A01882309F4BDC08AE287 +:1038A00080931B0180931C0181E20E947B140E9483 +:1038B000AD10E0923F021092400210923C02109232 +:1038C0003B02C5CE882309F481C080914902811151 +:1038D00006C081E08093490282EE0E94F50C0E94AE +:1038E000880690934802809347028BE20E94F50C71 +:1038F000F8018281882309F4D0C41092E002F2E03A +:10390000EF16FCE5FF0608F4ACC126E1E2162CE553 +:10391000F20630F0C7018A5F9C45099708F0A1C103 +:103920000E948C0F9093A9028093A80230E1E316C5 +:103930003CE5F30609F464C108F0E6C058E0E5167A +:103940005CE5F50609F44EC108F0AFC094E0E91655 +:103950009CE5F90609F43EC108F091C0F2E0EF16CB +:10396000FCE5FF0609F430C18091A802826023E0E3 +:10397000E2162CE5F20609F42AC16091A802F09043 +:10398000A90284E090E00E94F4316F2D82E290E081 +:103990000E94F4310E94EC175ACE8823A1F0809146 +:1039A0004902811106C081E08093490282EE0E94A3 +:1039B000F50C0E948806909348028093470281EE9E +:1039C0000E94F50C92CF81EE0E94E10B8BE20E94E7 +:1039D000E10B8ECF882309F48BCF81EE0E94F50C8A +:1039E00083EE0E94F50C8FE40E94F50C8FE40E9498 +:1039F000E10B83EE0E94E10B81EEE9CF882309F40D +:103A000077CF81EE0E94F50C83EE0E94F50C80E5E5 +:103A10000E94F50C80E5EBCF8AE280931B01809336 +:103A20001C0181E2FF2029F00E947B140E94AD104E +:103A300042CF0E947B143FCFE5EFEE16ECE5FE0689 +:103A4000B9F090F026EFE2162CE5F20609F050CF1F +:103A500027E245EE66EEFEC327E245EE65EEFAC3C9 +:103A600026E241EE60EEF6C327E245EE64EEF2C3D5 +:103A700026E241EE62EEEEC328E241E0EFCF809114 +:103A8000A802806136E0E3163CE5F30609F49FC026 +:103A90008091A802886047E0E4164CE5F40608F43B +:103AA00096C08091A802806292C08091A8028D7F0A +:103AB0005CE0E5165CE5F50609F489C078F48091D0 +:103AC000A8028C609AE0E9169CE5F90609F47FC02B +:103AD00008F48CC08091A8028E7F79C08091A802E2 +:103AE000877FFEE0EF16FCE5FF0609F470C08091C9 +:103AF000A8028B7F2FE0E2162CE5F20608F467C0DF +:103B00008091A8028F7E63C03BEFE3163CE5F3068D +:103B100009F464C068F553E1E5165CE5F50609F4BF +:103B200077C090F491E1E9169CE5F90609F46CC0C0 +:103B3000E2E1EE16ECE5FE0609F01FCF0E94EC175D +:103B40008091A8028F7743C0F5E1EF16FCE5FF06F0 +:103B500009F466C008F47AC08091A90281603AEF46 +:103B6000E3163CE5F30609F008CF8093A90205CFE0 +:103B70004FEFE4164CE5F40609F44EC088F48DEFDF +:103B8000E8168CE5F806C1F18091A9028E7F9EEFC0 +:103B9000E9169CE5F90648F38091A9028360E5CF18 +:103BA000E1E0EE16EDE5FE0609F459C008F444C064 +:103BB00060E022E0E2162DE5F20609F0DECE8EE0AE +:103BC00090E00E94F431D9CE8091A8028160809368 +:103BD000A802D3CE8091A8028460F9CF8091A90277 +:103BE0008260C3CF8091A8028064F1CF0E94EC175D +:103BF0008091A8028068EBCF8091A9028D7FB5CF1C +:103C00008091A8028F7DE3CF8091A8028F7BDFCFC8 +:103C10008091A802837FDBCF8091A9028C7FA5CF02 +:103C20008091A80282FB992790F921E0922790FBCE +:103C300082F990FB83F9CBCF8091A902982F9095C0 +:103C400091708E7F892B90FB81F98FCF0E94EC17AA +:103C50009091A802892F97FB87F98058B8CF61E02F +:103C6000AECF8091340236E1E3163CE5F30609F06D +:103C700021C38A7A91E009F490E09093E0018111E8 +:103C800006C089E20E94170B0E94A70AE0CC85E3D8 +:103C9000F9CF85E30CC380915F0380FF1BC08E7F4B +:103CA00080935F0360915F03709160038091610373 +:103CB000909162030E943813109298024FEF50E7E0 +:103CC00082E0415050408040E1F700C000000E9477 +:103CD000B00FBDCC816080935F0361E086950E9448 +:103CE0004014B5CC4FE955E168EA75E10E94CC0675 +:103CF000AECC48EA55E16FE975E1F8CF45E154E112 +:103D00006CE074E1F3CF44EF53E160E074E1EECF97 +:103D10004CED53E168EE73E1E9CF48EE53E16CED11 +:103D200073E1E4CF4FE254E16EE174E1DFCF61E093 +:103D300081E0D5CF65E082E00E94B21588CC68E0D2 +:103D400086E0FACF64E18FE0F7CF67E185E1F4CF59 +:103D500062E289E1F1CF61E083E2C1CF3BE5E316A6 +:103D60003DE5F30611F14CE5E4164DE5F40609F0E6 +:103D7000D3C28091A90282FB882780F991E089272C +:103D80000E94B70EC9C20E94EC175FEF84E39CE06B +:103D9000515080409040E1F700C000000E94D10CDB +:103DA0000E94D01554CC81E0EBCF80E0E9CFC70171 +:103DB0000E94550BD82EBFC22F2D2F70C22E8F2DD3 +:103DC000807F19F0C29490EFC922DD20C9F0CC2089 +:103DD00069F080E28E0D883010F081100BC0809168 +:103DE0003402C82AC09234020E94A70A8E2D0E9473 +:103DF000F50C19C080913302C82AC0923302F4CF67 +:103E00008E2D0E94E10BCC2071F0C09480E28E0DCB +:103E1000883010F081103EC080913402C822C092D8 +:103E200034020E94A70AE92DE850FF0B349720F4D2 +:103E30000E94C0060E94A114AA2009F4CBCB809155 +:103E4000310280FDC7CBF801128285958595859555 +:103E50000E949015C8010E94C81A80913102859570 +:103E6000859585950F900F900F900F900F90DF9193 +:103E7000CF911F910F91FF90EF90DF90CF90BF9067 +:103E8000AF909F908F907F906F905F904F903F90FA +:103E90000C94631580913302C822C0923302C1CFC3 +:103EA0003F2D3F70B32E8F2D807F803219F0B2945A +:103EB00080EFB822882071F041E0841681F1DD2086 +:103EC000D9F1CC2091F1F801858180FF8FCF8F70DF +:103ED00085832BC0DD20B1F0909135028B2D892B8D +:103EE000C11003C00E94D70B9ECF51E0C512FACF7C +:103EF0002091A90222FD97CF981709F494CF8093BF +:103F0000350291CFC11006C00E94A10A8B2D0E94DC +:103F1000CC0B89CF81E0C81609F485CFF5CFDD2021 +:103F200031F095E09C1508F47ECF8B2DDBCFE4E0DB +:103F3000EC1508F478CFEACFCC2041F3F9E38F12E7 +:103F400009C02FEF37EE43E0215030404040E1F709 +:103F500000C000008E2D0E94E10B65CF8F2D86954D +:103F60008695837061F0813009F05DCFC701937051 +:103F7000D11002C090E080E00E94940654CFC701A7 +:103F80009370D11002C090E080E00E94AA064BCF4F +:103F90008E2DDD2029F00E9463080E94810743CF07 +:103FA0000E94A807FACF8F2D837009F040C0D1106E +:103FB0003ACF4E2D429546954770440F440F8E2DB3 +:103FC0008F7090E0042E02C0880F991F0A94E2F7C8 +:103FD00030E020E0E4FE09C02FE030E002C0220F14 +:103FE000331F4A95E2F7209530954F2D469546951B +:103FF0004370423099F078F4609136027091370244 +:10400000413039F0822B932B862397230E94C60BD5 +:104010000ACF862B972B822B932BF8CF822B932BB7 +:10402000209136023091370282279327EFCF869571 +:10403000DD2011F08F2D8170882309F4F4CE4E2DF0 +:10404000429546954770440F440F8E2D8F7090E037 +:10405000042E02C0880F991F0A94E2F730E020E096 +:10406000E4FE09C02FE030E002C0220F331F4A9562 +:10407000E2F7209530954F2D469546954370423096 +:1040800099F078F46091DC027091DD02413039F0F2 +:10409000822B932B862397230E944C15C4CE862B0C +:1040A000972B822B932BF8CF822B932B2091DC0222 +:1040B0003091DD0282279327EFCF5F2D5F70F52EC1 +:1040C000DD2029F0852F0E9490158E2D0BCF8E2D8F +:1040D0000E94CC0B8F2D0E946315A5CE8E2D92EFE2 +:1040E000891609F449C0981570F0E0EF8E1639F181 +:1040F000F1EF8F16C9F1DD2009F45FC0C11076CE53 +:104100008F2D8F7136C023EF8216D9F134EF8312D1 +:10411000F2CFDD2009F446C0FF2DFF71FF2E8F2F57 +:104120000E9490158091A90282FD07C028E0F29EAE +:10413000C00111248360809331028F2D1AC0DD20CD +:1041400071F044E04C1508F46ECE2F2D2F7181E0F4 +:1041500090E002C0880F991F2A95E2F7A7CF55E09B +:104160005C1508F460CEF1CF8F2D8F71DD2009F43E +:10417000B2CF0E94901557CE8F2D8F71DD20C9F3DD +:10418000AACF90E080E0DD2009F486CF9F2D9F71BB +:1041900021E030E0F90102C0EE0FFF1F9A95E2F72F +:1041A000CF017ACF81E00E94741531E03C1508F010 +:1041B0003ACE82E00E94741536CECC2059F0893375 +:1041C00009F0C8CE4FEF57EE83E041505040804099 +:1041D000E1F7BECE8F2D8F717ECFF0E1EF16FFE5B8 +:1041E000FF0609F42DCB21E1E2162FE5F20609F4D2 +:1041F00031CB42E8E4164FE5F40609F4EBCB08F0C6 +:104200002BCB90E8E9169FE5F90609F45BCBE1E8D2 +:10421000EE16EFE5FE0609F4C0CB33EFE3163CE5FE +:10422000F30609F41DCC08F007CC58EDE5165CE563 +:10423000F50609F411CC89EDE8168CE5F80609F4C9 +:104240001BCC97EDE9169CE5F90609F051CB26E267 +:1042500041EE61EEC8010E94C70DF9C930E1E316D5 +:104260003FE5F30609F4F2CA41E1E4164FE5F4062E +:1042700009F0BFCF82E0EBCA85E0DE011196019024 +:104280000D928A95E1F7F801228189819A812111A5 +:10429000B8C90E94550BF82EBCC9F6E1EF16FCE533 +:1042A000FF06D1F58091E0018111F3CC89E20E94F3 +:1042B000EC0AEACC82722CECE2162CE5F20609F448 +:1042C00031CD08F0A7C046ECE4164CE5F40609F43D +:1042D00015CD08F076C093ECE9169CE5F90609F4D3 +:1042E00001CD08F05DC0F2ECEF16FCE5FF0609F425 +:1042F000D2CC9AE5E9169DE5F90609F454CD08F00B +:104300002DCDE114FCE5FF0609F43DCD2EEDE216BE +:104310002CE5F20609F444CDF8018281E080F180B9 +:10432000882309F444CDC7010E94040FD82E682FBA +:10433000C7010E947D0BB7018D2D0E94F70E0E94D0 +:1043400019097C01882EF801D280C580C2943FE013 +:10435000C322809131028770A1F0AD2CDD2091F055 +:104360008F2D807F803421F080E28E0D883048F0E0 +:1043700082E00E947415809131028770AA24A39470 +:104380008111A12C9F2C92942FE09222FBE0F91531 +:1043900008F449CDE92DF0E0EA57FD4C0C94953135 +:1043A00024ECE2162CE5F20609F4A3CC4CE054E12F +:1043B00065E174E135ECE3163CE5F30609F496CCCF +:1043C00098CF49ECE4164CE5F40609F4A1CC88F446 +:1043D00097ECE9169CE5F90609F495CC40E054E128 +:1043E00064EF73E1E8ECEE16ECE5FE0609F47ECC32 +:1043F00080CFFAECEF16FCE5FF0609F48ECC4EE117 +:1044000054E16FE274E12BECE2162CE5F20609F4BC +:104410006DCC6FCF31EDE3163CE5F30609F492CC99 +:10442000B8F45EECE5165CE5F50609F483CC08F417 +:104430007ECC9FECE9169CE5F90609F480CC6EE091 +:1044400089E0E0EDEE16ECE5FE0609F475CC51CFFF +:10445000F4EDEF16FCE5FF0609F47ACC78F432EDC2 +:10446000E3163CE5F30609F470CC61E088E143ED26 +:10447000E4164CE5F40609F432CC3BCF55EDE516D5 +:104480005CE5F50609F467CC8DE5E816F80609F455 +:10449000DEC82FCF1F93CF93DF938091FE01807FE3 +:1044A000A9F48091FB01882389F080913002D0919A +:1044B000FF016091F9017091FA01A091FC01B091A6 +:1044C000FD01C62FC72316E0D81304C0DF91CF919A +:1044D0001F91089590E0109711F0CF3F19F40196C5 +:1044E0008770F2CF189F9001199F300D1124F901A8 +:1044F000E050FE4F41814713F2CF40814613EFCF8A +:1045000042814111ECCF438154814A1B5B0B483CF3 +:10451000510528F78091FE018F7080618093FE0124 +:10452000F901EB5FFD4F80818F708061808389EF9F +:1045300091E00E94C81ADF91CF911F910C944B0B10 +:10454000AF92BF92CF92DF92EF92FF920F931F93A1 +:10455000CF93DF93CDB7DEB761970FB6F894DEBF88 +:104560000FBECDBF8C0185E0F801DE011D960190E4 +:104570000D928A95E1F7F801E28089EFA82E81E09B +:10458000B82E6091FC017091FD016115710509F46F +:1045900032C19091F9014091FA01892F84238F3F14 +:1045A00009F429C120813181C380D480F090FB01BE +:1045B000F601E61BF70BFF2009F4E8C08091FE012D +:1045C000582F507FE83CF10508F0ABC0511177C07F +:1045D000FE2C431321C092131FC0E1101DC08F7029 +:1045E00080618093FE01C5010E94C81A8091FE017E +:1045F000F80185838F2D61960FB6F894DEBF0FBE4C +:10460000CDBFDF91CF911F910F91FF90EF90DF9081 +:10461000CF90BF90AF900895CD2829F0822F8323AB +:104620008F3F09F003C180E0F82FF170DF2E80FF8B +:104630003CC0809130024091FF0156E0841315C0C8 +:104640002D873E878D859E850E94400F292F2295BC +:104650002F702230F0F0243018F59F70F1F0F8013F +:104660009581907FD1F4D12C1EC090E0589FF0012D +:10467000599FF00D1124E050FE4F6181361306C0A2 +:104680006081261303C06281E6120FC00196877015 +:10469000D5CF9F7011F0882331F3805E883018F3F6 +:1046A000C8010E94C81AFD2CA5CFEE2009F4A2CFA4 +:1046B0008091FE0181608093FE01F12C9BCF43131A +:1046C00006C0921304C0F801EE2009F479C0C801B5 +:1046D0000E944C0F882309F1EE20F9F08091FE0131 +:1046E000803270F02091F9013091FA0138872F83E0 +:1046F0001986DB86CA868C87CE0107960E94C81A67 +:1047000086E0F801A9EFB1E001900D928A95E1F7FA +:104710000E944A22FF24F3946DCFC8010E94C81A58 +:10472000F9CF51110AC089EF91E00E94C81A86E0C2 +:10473000F50111928A95E9F7C0CF43130FC0921388 +:104740000DC0E1100BC0F8018583C8010E94C81A92 +:1047500086E0F50111928A95E9F74CCFC8010E94D5 +:104760004C0F8823D1F2EE20C1F28091FE018032FD +:1047700038F22091F9013091FA013A8329831B82A2 +:10478000DD82CC828E83CE010196B8CFE83CF10564 +:10479000F8F6FE2CEE2009F243131FC092131DC041 +:1047A0008091FE0180FD10C0982F907F69F0F80184 +:1047B0008583903F31F0982F907F905F8F70892B89 +:1047C0008583C8010E94C81A86E0F801A9EFB1E00C +:1047D00001900D928A95E1F70DCFC8010E944C0F10 +:1047E00081118ECF8091FE0181608093FE01C8010E +:1047F0000E94C81AFFCEEE2009F48FCFC8010E9494 +:104800004C0FF82E882309F488CF86E0F801A9EF31 +:10481000B1E001900D928A95E1F78091F9019091B4 +:10482000FA010E94400F0E944A22E4CE81E08E25C8 +:10483000FBCE1F93CF93DF93CDB7DEB767970FB64D +:10484000F894DEBF0FBECDBF4B8B5C8B6D8B7E8B28 +:104850008F8B6111109233021A8A198A85E0FE014A +:104860007396DE011D9601900D928A95E1F786E020 +:10487000FE013D96DE01179601900D928A95E1F7B3 +:10488000CE0107960E94A022882389F016E080912D +:1048900030029091FF01891349C067960FB6F894D2 +:1048A000DEBF0FBECDBFDF91CF911F91089586E08F +:1048B000FE013796DE01119601900D928A95E1F77F +:1048C0008A859B85892B11F38F81988589238F3F5A +:1048D000E9F22091FF0130E0C90101968770992724 +:1048E000409130024817190671F40E94EC1710929B +:1048F000FF011092300286E0E9EFF1E0DF011D9246 +:104900008A95E9F7C3CF96E0929FD001939FB00DAF +:104910001124A050BE4FFE01319601900D929A9540 +:10492000E1F78093FF010E944B0BB0CF819FC00144 +:10493000112480509E4F0E94A022882309F4ADCFFD +:104940008091300290E00196877099278093300221 +:104950009ECFFF920F931F93CF93DF93CDB7DEB718 +:10496000C45BD1090FB6F894DEBF0FBECDBF182FC0 +:104970008111D7C0662309F475C0C055DF4F188276 +:10498000C05BD040CF54DF4F1882C15BD04011E0F4 +:10499000CE54DF4F1883C25BD0400E9488068160EE +:1049A000782FCD54DF4F99838883C35BD040C055A7 +:1049B000DF4F4881C05BD040CF54DF4F5881C15B8F +:1049C000D040CE54DF4F6881C25BD040CC54DF4F23 +:1049D0008881C45BD0400E941924C555DF4F1882DE +:1049E000CB5AD040C455DF4F1882CC5AD040C35563 +:1049F000DF4F1882CD5AD0400E9488068160782F00 +:104A0000C255DF4F99838883CE5AD040C555DF4FBA +:104A10004881CB5AD040C455DF4F5881CC5AD04042 +:104A2000C355DF4F6881CD5AD040C155DF4F8881D3 +:104A3000CF5AD0400E941924109345020E94880644 +:104A4000909342028093410281E0CC54DF4F0FB635 +:104A5000F894DEBF0FBECDBFDF91CF911F910F91B4 +:104A6000FF90089502E0CA55DF4F0883C65AD04030 +:104A7000C955DF4F1882C75AD04011E0C855DF4FE3 +:104A80001883C85AD0400E9488068160782FC75585 +:104A9000DF4F99838883C95AD040CA55DF4F488178 +:104AA000C65AD040C955DF4F5881C75AD040C85563 +:104AB000DF4F6881C85AD040C655DF4F8881CA5A37 +:104AC000D0400E941924CF55DF4F0883C15AD040EF +:104AD000CE55DF4F1882C25AD040CD55DF4F1882D5 +:104AE000C35AD0400E9488068160782FCC55DF4F92 +:104AF00099838883C45AD040CF55DF4F4881C15A2B +:104B0000D040CE55DF4F5881C25AD040CD55DF4FEF +:104B10006881C35AD040CB55DF4F8881C55AD040F9 +:104B200089CF813009F0C0C0662309F45FC0C45644 +:104B3000DF4F1882CC59D040C356DF4F8883CD5900 +:104B4000D040C256DF4F8883CE59D0400E9488069D +:104B50008160782FC156DF4F99838883CF59D04029 +:104B6000C456DF4F4881CC59D040C356DF4F5881DF +:104B7000CD59D040C256DF4F6881CE59D040C05683 +:104B8000DF4F8881C05AD0400E941924C956DF4F98 +:104B90001882C759D040C856DF4F1883C859D04033 +:104BA000C756DF4F1882C959D0400E9488068160DD +:104BB000782FC656DF4F99838883CA59D040C9568B +:104BC000DF4F4881C759D040C856DF4F5881C85978 +:104BD000D040C756DF4F6881C959D040C556DF4F16 +:104BE0008881CB59D0400E9419242ECF02E0CE56A6 +:104BF000DF4F0883C259D040CD56DF4F8883C35959 +:104C0000D040CC56DF4F8883C459D0400E948806DC +:104C10008160782FCB56DF4F99838883C559D04068 +:104C2000CE56DF4F4881C259D040CD56DF4F588114 +:104C3000C359D040CC56DF4F6881C459D040CA56C2 +:104C4000DF4F8881C659D0400E941924C357DF4FD7 +:104C50000883CD58D040C257DF4F1883CE58D0407C +:104C6000C157DF4F1882CF58D0400E94880681601C +:104C7000782FC057DF4F99838883C059D040C357DE +:104C8000DF4F4881CD58D040C257DF4F5881CE58B2 +:104C9000D040C157DF4F6881CF58D040CF56DF4F4B +:104CA0008881C159D0409FCF823009F0ABC06623C4 +:104CB00009F45EC0C857DF4F1882C858D040C757A4 +:104CC000DF4F8883C958D04081E0C657DF4F8883C3 +:104CD000CA58D0400E9488068160782FC557DF4FA0 +:104CE00099838883CB58D040C857DF4F4881C85834 +:104CF000D040C757DF4F5881C958D040C657DF4F03 +:104D00006881CA58D040C457DF4F8881CC58D04002 +:104D10000E941924CD57DF4F1882C358D040CC577A +:104D2000DF4F1883C458D040CB57DF4F1882C55887 +:104D3000D0400E9488068160782FCA57DF4F998340 +:104D40008883C658D040CD57DF4F4881C358D040E4 +:104D5000CC57DF4F5881C458D040CB57DF4F6881C4 +:104D6000C558D040C957DF4F8881C758D0403BCF86 +:104D7000EF968FAFEF97C158DF4F8883CF57D04062 +:104D800081E0C058DF4F8883C058D0400E94880619 +:104D90008160782FCF57DF4F99838883C158D040E7 +:104DA000EF964FADEF97C158DF4F5881CF57D040A6 +:104DB000C058DF4F6881C058D040CE57DF4F888140 +:104DC000C258D0400E941924EA961FAFEA97EB968A +:104DD0001FAFEB97EC961FAEEC970E9488068160A0 +:104DE000782FEE969FAF8EAFEE97EA964FADEA978B +:104DF000EB965FADEB97EC966FADEC97EE968FADC3 +:104E0000EE97F1CE833009F081C0662309F43FC0EC +:104E100019E0E5961FAFE597E6961FAEE69781E0AD +:104E2000E7968FAFE7970E9488068160782FE99612 +:104E30009FAF8EAFE997E5964FADE597E6965FADEC +:104E4000E697E7966FADE797E9968FADE9970E94F1 +:104E50001924E0961FAFE097E1961FAEE197E29626 +:104E60001FAEE2970E9488068160782FE4969FAF7C +:104E70008EAFE497E0964FADE097E1965FADE19796 +:104E8000E2966FADE297E4968FADE497ACCE1BE06F +:104E9000AB961FAFAB97AC961FAEAC9781E0AD96CB +:104EA0008FAFAD970E9488068160782FAF969FAF35 +:104EB0008EAFAF97AB964FADAB97AC965FADAC975F +:104EC000AD966FADAD97AF968FADAF970E94192499 +:104ED000A6961FAFA697A7961FAEA797A8961FAE38 +:104EE000A8970E9488068160782FAA969FAF8EAF00 +:104EF000AA97A6964FADA697A7965FADA797A89637 +:104F00006FADA897AA968FADAA976DCE843009F0A1 +:104F100081C0662309F43FC009E0A1960FAFA197B5 +:104F200011E0A2961FAFA297A3961FAFA3970E946E +:104F300088068160782FA5969FAF8EAFA597A19622 +:104F40004FADA197A2965FADA297A3966FADA39721 +:104F5000A5968FADA5970E9419246C960FAF6C97FC +:104F60006D961FAF6D976E961FAE6E970E94880666 +:104F70008160782FA0969FAF8EAFA0976C964FADB3 +:104F80006C976D965FAD6D976E966FAD6E97A096B0 +:104F90008FADA09728CE0BE067960FAF679711E013 +:104FA00068961FAF689769961FAF69970E94880639 +:104FB0008160782F6B969FAF8EAF6B9767964FADE2 +:104FC000679768965FAD689769966FAD69976B96BE +:104FD0008FAD6B970E94192462960FAF629763960C +:104FE0001FAF639764961FAE64970E948806816026 +:104FF000782F66969FAF8EAF669762964FAD629799 +:1050000063965FAD639764966FAD649766968FAD58 +:105010006697E9CD853009F07DC0662309F445C067 +:1050200039E0F32E2D96FFAE2D9702E02E960FAFAE +:105030002E9711E02F961FAF2F970E948806816050 +:10504000782F61969FAF8EAF61972D964FAD2D97BC +:105050002E965FAD2E972F966FAD2F9761968FADE1 +:1050600061970E9419242896FFAE289729960FAFC2 +:1050700029972A961FAE2A970E9488068160782F6A +:105080002C969FAF8EAF2C9728964FAD28972996D8 +:105090005FAD29972A966FAD2A972C968FAD2C97E6 +:1050A0000E94192410934402C9CC2BE0F22E2396BF +:1050B000FFAE239702E024960FAF249711E02596C8 +:1050C0001FAF25970E9488068160782F27969FAF93 +:1050D0008EAF279723964FAD239724965FAD2497E5 +:1050E00025966FAD259727968FAD27970E94192497 +:1050F000FDAE0EAF1FAE0E9488068160782F22960B +:105100009FAF8EAF22974DAD5EAD6FAD22968FAD46 +:105110002297C6CF863009F048C0662329F199E06E +:10512000F92EF8AE03E009AF11E01AAF0E9488062D +:105130008160782F9CAF8BAF48AD59AD6AAD8CAD17 +:105140000E941924FBAA0CAB1DAA0E94880681604C +:10515000782F9FAB8EAB4BA95CA96DA98FA90E943C +:105160001924109343026ACC8BE0F82EFEA603E0CC +:105170000FA711E018AB0E9488068160782F9AABC8 +:1051800089AB4EA55FA568A98AA90E941924F9A632 +:105190000AA71BA60E9488068160782F9DA78CA76E +:1051A00049A55AA56BA58DA5DACF873009F041C076 +:1051B0006623F9F013E01CA31DA381E08EA30E94D7 +:1051C00088068160782F98A78FA34CA15DA16EA15E +:1051D00088A50E9419241F8F18A319A20E9488066F +:1051E0008160782F9BA38AA34F8D58A169A18BA1C1 +:1051F000FACC05E00A8F13E01B8F81E08C8F0E94B0 +:1052000088068160782F9E8F8D8F4A8D5B8D6C8D87 +:105210008E8D0E9419240D8B1E8B1F8A0E9488067A +:105220008160782F998F888F4D895E896F89898DEC +:10523000DACC883009F008CC662301F106E0088B4F +:1052400013E0198B81E08A8B0E9488068160782F99 +:105250009C8B8B8B488959896A898C890E94192477 +:105260000B871C871D860E9488068160782F9F8788 +:105270008E874B855C856D858F85B5CC08E00E8368 +:1052800013E01F8381E088870E9488068160782F61 +:105290009A8789874E815F8168858A850E94192453 +:1052A00009831A831B820E9488068160782F9D8360 +:1052B0008C8349815A816B818D8195CC1F920F928D +:1052C0000FB60F9211242F933F934F935F936F93D9 +:1052D0007F938F939F93AF93BF93CF93DF93EF937E +:1052E000FF93D091E900DF708091EC00C82FC1706E +:1052F00080FDC0E81092E9008091F000877F8093E4 +:10530000F00078940E9401181092E9008091F0005A +:1053100088608093F000CD2BCF70C093E900FF919F +:10532000EF91DF91CF91BF91AF919F918F917F913D +:105330006F915F914F913F912F910F900FBE0F9002 +:105340001F9018951F920F920FB60F9211242F9352 +:105350003F934F935F936F937F938F939F93AF93FD +:10536000BF93EF93FF938091E10082FF09C080918A +:10537000E20082FF05C08091E1008B7F8093E10015 +:105380008091DA0080FF24C08091D80080FF20C087 +:105390008091DA008E7F8093DA008091D90080FFBF +:1053A0009BC088E189BD8AE189BD09B400FEFDCFBB +:1053B00081E08093D2028091AD02811109C00E94E8 +:1053C000EC040E94B7058091E20084608093E200C3 +:1053D0008091E10080FF17C08091E20080FF13C040 +:1053E0008091E2008E7F8093E2008091E2008061F4 +:1053F0008093E2008091D80080628093D80019BC2D +:1054000085E08093D2028091E10084FF29C08091E1 +:10541000E20084FF25C088E189BD8AE189BD89B5A4 +:10542000982F917080FFFBCF8091D8008F7D809363 +:10543000D8008091E1008F7E8093E1008091E200AE +:105440008F7E8093E2008091E20081608093E20091 +:105450008091D302882309F445C084E08093D2026E +:105460008091E10083FF27C08091E20083FF23C089 +:105470008091E100877F8093E10082E08093D202F7 +:105480001092D3028091E1008E7F8093E1008091A1 +:10549000E2008E7F8093E2008091E2008061809341 +:1054A000E20042E060E080E00E9485058091F0002B +:1054B00088608093F000FF91EF91BF91AF919F9131 +:1054C0008F917F916F915F914F913F912F910F90AD +:1054D0000FBE0F901F90189519BC1092D202109217 +:1054E000AD0276CF8091E30087FD93E09093D202E6 +:1054F000B7CF78941F921FB61F9211248F939F935A +:10550000AF93BF938091A4029091A502A091A602AF +:10551000B091A7020196A11DB11D8093A4029093A2 +:10552000A502A093A602B093A702BF91AF919F914D +:105530008F911F901FBE1F9018951F921FB61F922C +:1055400011248F939F93AF93BF938091A3028111F6 +:1055500013C08091A4029091A502A091A602B091DF +:10556000A7024196A11DB11D8093A4029093A502AC +:10557000A093A602B093A702BF91AF919F918F9184 +:105580001F901FBE1F901895CDB7DEB7AA970FB614 +:10559000F894DEBF0FBECDBF84B7877F84BF0FB640 +:1055A000F894A895809160008861809360001092C3 +:1055B00060000FBE80E890E00FB6F8948093610021 +:1055C000909361000FBE85B7806885BF85B78068FE +:1055D00085BF8DEB98E09093BF018093BE010E9440 +:1055E000EC040E94B7058091E20084608093E200A1 +:1055F00078948091D2028823A1F01091E9001F7065 +:105600009091EC00892F817090FD80E8182B10920A +:10561000E9008091E80083FD0E9401181F7010933B +:10562000E90082E084BD93E095BD9AEF97BD809339 +:105630006E000E94730F811102C00E94A80E80EFBD +:105640000E94BF0881EF0E94BF0882EF0E94BF083E +:1056500083EF0E94BF0803E511E06FE5E62E61E0ED +:10566000F62ED8018D918D018F3F11F00E94BF0859 +:10567000E016F106B1F710924B0210924A02109216 +:105680007A021092790210924D0210924C021092FE +:105690007C0210927B0210924F0210924E021092E6 +:1056A0007E0210927D0210925102109250021092CE +:1056B000800210927F020E94E117811102C00E94B5 +:1056C000D01582E090E00E94E031809370020E9449 +:1056D0008C0F9093A9028093A8020E943C16EFE3DE +:1056E000FCE93197F1F700C000000E943C16809160 +:1056F000790280FF08C06FEF7FEF90E080E00E94AA +:1057000012320E94D10C83E090E00E94E03190E0E0 +:105710000E94C60B8091DC029091DD020E94B914B8 +:1057200080915202811132C00E94E117811104C0A0 +:105730000E94D0150E94C01588E090E00E94E831D8 +:1057400060935F037093600380936103909362039F +:105750006E7F71F40E94C01588E090E00E94E831ED +:1057600060935F037093600380936103909362037F +:105770000E94D2061092980280915F0380FF03C0BE +:1057800086950E947B1481E0809352026AE871E062 +:1057900056E6852E52E0952E28E731E0E1E8F1E06B +:1057A00041E050E01191812F82958F7090E0DC01F3 +:1057B0009196FC9091971F70E12E6A0101C0CC0C6C +:1057C0001A95EAF70C2D00950F2191960C9391975D +:1057D00092961C9192971C2992961C93D901FD9048 +:1057E0009D010F2D02950F7010E0D8019196BC908D +:1057F000BF2DBF70FB2E6A0101C0CC0CBA95EAF731 +:10580000DC2CD094DB20D8019196DC929197929673 +:10581000DC909297DC289296DC92DC0190968C9139 +:1058200090E002C095958795EA94E2F78170D801DF +:1058300090960C9110E002C015950795FA94E2F746 +:1058400090E000FD92E0892BD4018D934D016E17FD +:105850007F0709F0A7CF86EA92E0909390028093A9 +:105860008F0281E20E947B1481E090E00E944C153F +:1058700080E091E09093A00280939F028091D202F9 +:10588000FF24F39408E11AE1853009F47CC20E94F8 +:105890003C16882359F08FB7F8944091A402509198 +:1058A000A5026091A6027091A7028FBFA9E7B2E09E +:1058B000E1E7F2E010E000E0702F8D919D912191E1 +:1058C00031912817390709F487C22827392760E062 +:1058D000EE24E394F12CA9014E215F21452B09F41C +:1058E00075C269A37AA39C012E213F2191E0232B4D +:1058F00009F490E09BA30E9488068160782F9DA305 +:105900008CA349A15AA16BA18DA10E941924000F5B +:10591000111FF801EF58FD4F80819181E826F9268B +:10592000F182E082809198028823D1F180919702E0 +:10593000E0915F03E695E81BE0939302823009F063 +:1059400062C2F0E0EC53FD4FE4910E2F10E044E210 +:10595000E42E43E1F42E80919402882361F01092AA +:1059600094020E9488069093920280939102109272 +:105970009602109295020E948806E0919102F091A1 +:1059800092028E1B9F0B8F3F9F4750F4E00FF11F39 +:10599000F0939202E093910281E992E0F701099578 +:1059A0003DE5E32E32E0F32E04E512E04FE6442E0F +:1059B00041E0542E58E7652E51E0752E61E8862EA1 +:1059C00061E0962E76E6A72E72E0B72E212C312CC0 +:1059D000D501ED915D01EE0FEE0FD4012D914D013A +:1059E000A22FA295AF70B0E090968C9190E02F70AE +:1059F00002C0959587952A95E2F781709927D30182 +:105A00004D913D01A42FA295AF70B0E090962C91DE +:105A100030E04F7002C0359527954A95E2F7A9010D +:105A20004170552720FF02C042E050E0842BE82B54 +:105A3000D5011197EC93D201CD902D01EF70F0E0DC +:105A4000E15AFE4F8081F7019081890F8083D12C2C +:105A5000082E000C990B20E08C159D054CF0D80108 +:105A60008C918F5F8C9360E0832D0E94A92421E0AC +:105A7000F7018081082E000C990B442755274C19FB +:105A80005D09481759074CF0D8018C9181508C93CF +:105A900061E0832D0E94A92421E0F7018081082E76 +:105AA000000C990BB6010E948131D7018D937D01C5 +:105AB000222A33940F5F1F4FB9E03B1289CF222077 +:105AC00059F08FB7F8944091A4025091A5026091CB +:105AD000A6027091A7028FBF86E0E8E8F2E0DE013F +:105AE000119601900D928A95E1F7F0908A02E0906C +:105AF0008B0210918C0200918D0210928A021092FA +:105B00008B0210928C0210928D028F2D8E2909F437 +:105B100048C080918602909187020E9479069C017C +:105B200090918202992309F4C5C323333105C8F14A +:105B30009F3F19F09F5F90938202FF2059F00E94CF +:105B400043089FEF1F140CF491E0899F802D1124CE +:105B500080938A02EE2059F00E9443089FEF1E14A2 +:105B60000CF491E0899F802D112480938B02309159 +:105B70008A023323B1F020918B02222391F045EB6E +:105B80003403C0011124992309F497C190938A0228 +:105B900045EB240390011124332309F492C130937F +:105BA0008B02812F802B09F448C080918402909150 +:105BB00085020E9479069C0190918102992309F443 +:105BC00074C325363105C8F19F3F19F09F5F90934C +:105BD0008102112359F00E9421089FEF11160CF445 +:105BE00091E0899F802D112480938C02002359F02D +:105BF0000E9421089FEF10160CF491E0899F802DE0 +:105C0000112480938D0230918C023323B1F02091C6 +:105C10008D02222391F045EB3403C0011124992316 +:105C200009F453C190938C0245EB24039001112495 +:105C3000332309F44EC130938D0280918A029091F2 +:105C40008B02892B90918C02892B90918D02892B4C +:105C500011F00E94810786E0FE013196A8E8B2E0CB +:105C600001900D928A95E1F70E94C00690916F0213 +:105C7000891731F00E94C00680936F020E94A11420 +:105C80008091D202843009F0F9CD83E08093E9005D +:105C90008091E80082FFF2CD8091E80090E085FFDE +:105CA00006C00E940B05882309F417C191E080917A +:105CB000E8008B778093E800992309F4DFCDE98130 +:105CC000E150E33108F09DC1F0E0EE56FD4C0C943C +:105CD00095318091D202843009F443C080E00E9463 +:105CE000A1141092980280918E02811116C0F09238 +:105CF0008E0280915F03982F9170909353028E7F54 +:105D000080935F03BFEFE0E7F2E0B150E040F04086 +:105D1000E1F700C000000E94B00F1092A30288E1DA +:105D200090E0A0E40FB6F894A895809360000FBEB1 +:105D3000A093600083B7817F846083BF83B7816055 +:105D400083BF7894889583B78E7F83BF0FB6F8940E +:105D5000A895809160008861809360001092600037 +:105D60000FBE8091D102882371F00E943C16E9E7B2 +:105D7000F2E081919191892B09F078C281E892E05B +:105D80008E179F07B1F78091D202853009F4A1CF19 +:105D90000E94EC170E94C0060E94A11410928E026D +:105DA00080915302882359F080915F038160809332 +:105DB0005F0386950E947B140E949A0F68CD8091A4 +:105DC00099028823C9F30E94B00FF6CF6F5FEE0CE3 +:105DD000FF1C6C3009F07FCD0F5F1F4F04301105A1 +:105DE00009F06ACD8FEF8EA38FA318A60E948806B4 +:105DF0008160782F9AA789A74EA15FA168A58AA57F +:105E00000E9419248FCD863059F4F0E0EF53FD4FF6 +:105E1000E4910E2F10E034E1E32E33E1F32E9BCD1D +:105E2000893061F4E695F0E0E254FD4FE4910E2FE5 +:105E300010E025E6E22E22E1F22E8DCD8F3061F4C6 +:105E4000E695F0E0E554FD4FE4910E2F10E090E16F +:105E5000E92E92E1F92E7FCD853159F4F0E0E85436 +:105E6000FD4FE4910E2F10E08DE9E82E81E1F82E30 +:105E700072CD08E210E0FDE0EF2EF1E1FF2E883157 +:105E800009F469CD833249F4E6EBF2E0059114910F +:105E9000BBEBEB2EB2E1FB2E5ECD04EF11E0A0EDEB +:105EA000EA2EA0E1FA2E843209F455CD00ED17E078 +:105EB000E1EDEE2EE6E0FE2E4ECD81E080938A02EB +:105EC00067CE81E080938B026CCE81E080938C0260 +:105ED000ABCE81E080938D02B0CE00E210E0CE0127 +:105EE00001967C018091E80085FD0AC08091E80060 +:105EF0008B778093E8000E940B05882399F3D6CE18 +:105F00008091F100D7018D937D010150110951F766 +:105F1000CDCE1A8289E08B833FC08A81823009F41A +:105F2000BBC18330A9F0813009F06BC02FB7F89462 +:105F30006091A4027091A5028091A6029091A7029F +:105F40002FBF0E949B316B837C838D839E8324C0F3 +:105F50008091790290917A029827892798279C83CB +:105F60008B8380917B0290917C02982789279827C8 +:105F70009E838D8380917D0290917E029827892750 +:105F8000982798878F8380917F029091800298272D +:105F9000892798279A8789878091D202843009F0CF +:105FA0006DCC1091E9001F709091EC00892F8170E9 +:105FB00090FD80E8182B82E08093E9008091E80052 +:105FC00080FF0DC050E040E060E270E0CE0101963D +:105FD0000E943C058091E8008E778093E8001F7056 +:105FE0001093E9004BCC8A81823059F46B817C811B +:105FF0008D819E810E949B3186E290E00E94F43167 +:10600000CBCF8FEF8983C8CF4C816B818A810E946F +:10601000D10E9827892798279E838D83BDCFED8049 +:10602000FE80FE24EF24FE248A810B81B8E10B9FC1 +:1060300080011124E0E68E9F000D111D11248C813A +:1060400090E0880F991F080F191F6F2DC8018796C0 +:106050000E94F4316E2DC8018896D0CF0E943B0E6D +:106060009BCF8A818138C1F060F4803809F094CFE9 +:1060700020E04B8160916103809160030E944A138C +:106080008BCF823849F1833809F086CF20E04091E8 +:1060900062036C818B81F2CF8B810E947B149B8188 +:1060A00080915F03911111C08E7F80935F031092E6 +:1060B0009802FFEF20E742E0F15020404040E1F736 +:1060C00000C000000E94B00F67CF816080935F0323 +:1060D00086950E947B1460CF8B81809363035CCF95 +:1060E0008A81813899F030F4803809F055CF809159 +:1060F000620311CF823891F0833809F04DCF80913F +:1061000060038B83809161038C8346CF80915F0312 +:1061100080FF02C08695FFCE80E0FDCE80916303B4 +:10612000FACE60915F03709160038091610390915A +:1061300062030E94381330CF80E18A832DCF84E040 +:106140008A8389E1E8CE0A811B8110270127102765 +:10615000CE0101966C01EC80DC01AE0DB11D7D011C +:10616000C80189519C4FEC14FD0409F415CF093185 +:10617000B4E01B0750F40E94E031F60184830F5F06 +:106180001F4FBFEFCB1ADB0AEBCFD60114961C9240 +:10619000F6CF0A811B81102701271027FE013196B7 +:1061A0006F01EC80E00EF12EF11CC80189519C4F6B +:1061B000E016F10609F4F0CE0931F4E01F0728F4E7 +:1061C000D60114966C910E94F431BFEFCB1ADB0A12 +:1061D0000F5F1F4FEACF0E942B0EDECE8AE0ADCFBD +:1061E0000A811B81102701271027FE0131966F01BC +:1061F000EC80CF018E0D911D7C01C8018796EC14B7 +:10620000FD0409F4C9CE003CA3E01A0750F40E9433 +:10621000E031F60184830F5F1F4FBFEFCB1ADB0A1B +:10622000ECCFD60114961C92F6CF0A811B81102761 +:1062300001271027FE0131966F01EC80E00EF12E50 +:10624000F11CC8018796E016F10609F4A5CE003CC2 +:10625000F3E01F0728F4D60114966C910E94F431E4 +:10626000BFEFCB1ADB0A0F5F1F4FEBCF09BD19BD84 +:1062700009B400FEFDCF8091D8008F7D8093D800B7 +:106280008091E00082608093E0008091E00081FDD9 +:10629000FCCF0E94EC1777CD86E290E00E94E031BF +:1062A0001B821C821D828E8377CE2D32314008F0F6 +:1062B0008DCCC3CC2D32314008F03CCC72CC87FB66 +:1062C000082E062687FD819567FD61950E94B131F4 +:1062D0000EF4919507FC81950895AA1BBB1B51E113 +:1062E00007C0AA1FBB1FA617B70710F0A61BB70B46 +:1062F000881F991F5A95A9F780959095BC01CD01EB +:10630000089597FB072E16F4009407D077FD09D067 +:106310000E946D3107FC05D03EF4909581959F4F0A +:106320000895709561957F4F0895EE0FFF1F0590BA +:10633000F491E02D09946927962769277827872704 +:10634000782708950E945D32332312F48A1B9B0B39 +:106350000C94AC310E945D32B7FF0895821B930B01 +:106360000895991B79E004C0991F961708F0961BB1 +:10637000881F7A95C9F780950895FB01DC0102C05A +:1063800005900D9241505040D8F70895FC014150BE +:10639000504030F001900616D1F73197CF010895A3 +:1063A000882799270895FB01DC0104C08D91019095 +:1063B000801921F441505040C8F7881B990B08956B +:1063C000F999FECF92BD81BDF89A992780B50895BD +:1063D000A6E1B0E044E050E00C941A32A8E1B0E04D +:1063E00042E050E00C941A32262FF999FECF92BD6C +:1063F00081BDF89A019700B4021639F01FBA20BD8A +:106400000FB6F894FA9AF99A0FBE08950396272FBB +:106410000E94F5310E94F431252F0E94F531242F7E +:106420000C94F5310196272F0E94F5310C94F4312C +:10643000DC01CB01FC01F999FECF06C0F2BDE1BD44 +:10644000F89A319600B40D9241505040B8F7089533 +:106450000E945D32A59F900DB49F900DA49F800D6A +:10646000911D11240895B7FF0C9428320E94283200 +:10647000821B930B0895A1E21A2EAA1BBB1BFD01E0 +:106480000DC0AA1FBB1FEE1FFF1FA217B307E40713 +:10649000F50720F0A21BB30BE40BF50B661F771F6B +:1064A000881F991F1A9469F760957095809590954B +:1064B0009B01AC01BD01CF010895A29FB001B39F24 +:1064C000C001A39F700D811D1124911DB29F700DFD +:1064D000811D1124911D0895F894FFCF5E0F5E0F6A +:1064E000670F670F690F670F670F670F5E0F5E0F0C +:1064F0006E0F670F670F6E0FE6180E1961190E19F0 +:106500006119411979196119761A831ADC1EDC1E8A +:10651000501F501FAE1FC81F131F131FD31F5D2016 +:106520006E206E20892F8D2FF32F04300F302E30E8 +:10653000313070309130013001309C309F30A330C9 +:0A654000C930EB30EE30F0301531B9 +:10654A007606910C700C6C0C680C01191A1B1C1D38 +:10655A001E1F202122010201002A002A2A0181820B +:10656A0083E200E900EA00B500B600B700CD008377 +:10657A0001CC008A019201940121022302240225FE +:10658A0002260227022A02B300B4006F007000F04C +:10659A00F1F2F3F5F6F70001020304053736350088 +:1065AA00FF0100010000FFFF0000010001FF0004DD +:1065BA0004040404040402026162646690929497DB +:1065CA0006606365679193959607000102020202CD +:1065DA000606060909090909090F0F0F0F0F0F15FA +:1065EA0015151819191919191919191919232440DE +:0E65FA0022B6B6019401DE00C808E1080109CE :00000001FF From 3041f74b4954c87be958016e7ccae8eb1ac780f1 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 6 Nov 2021 00:06:06 -0400 Subject: [PATCH 047/155] Clean up files --- .../solartempest/9e/qmk_firmware - Shortcut.lnk | Bin 1154 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 keyboards/solartempest/9e/qmk_firmware - Shortcut.lnk diff --git a/keyboards/solartempest/9e/qmk_firmware - Shortcut.lnk b/keyboards/solartempest/9e/qmk_firmware - Shortcut.lnk deleted file mode 100644 index 15ada1df2412f92d8cb088807b89bf4901fcdffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1154 zcma)5Yesr$ zS=Ye%4CGy_rq-8Nt8<6v?~MGox4I*9)i}H>Xd&$EQegd+iI$uHS}(;55`_7!m`lc% zu-~Q6KB=HhJNR=tqK~WEU4(v`7{nuJJRCT|&JWa$BXvL>at@DJ0(wwEE-0ZG5tU{F2`7Z3iER5?v#!S;ari0*nqcVR_+W22*wDI+% z+(cOjYT$mfLp{_{ryJBMBz-x@+hfsRLjgL3$4~gWHRNm9nUdyOXRVbU(K`JBrRN6) From 4db5c3214bef4bf5d793bfebc8a42c5ac27acaa3 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 6 Nov 2021 23:56:40 -0400 Subject: [PATCH 048/155] Updated rotary encoder code with Drashna's improvements. LED status correction for stretch timer. --- .../solartempest/9e/keymaps/via/keymap.c | 191 ++++++------------ 1 file changed, 62 insertions(+), 129 deletions(-) diff --git a/keyboards/solartempest/9e/keymaps/via/keymap.c b/keyboards/solartempest/9e/keymaps/via/keymap.c index 4158b582c0b6..7d9699ec99bb 100644 --- a/keyboards/solartempest/9e/keymaps/via/keymap.c +++ b/keyboards/solartempest/9e/keymaps/via/keymap.c @@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_CAPS, KC_SLCK, KC_NLCK, KC_P4, KC_P5, KC_P6, //Keys Row 2 RGB_HUD, A(KC_F4), RGB_HUI, //Rotary Encoder 5 ATABR, KC_MSTP, ATABF, //Rotary Encoder 3 - KC_WREF, KC_MYCM, KC_P0, KC_P1, KC_P2, KC_P3, //Keys Row 3 + KC_WREF, STRT, KC_P0, KC_P1, KC_P2, KC_P3, //Keys Row 3 KC_MS_WH_UP, C(KC_W), KC_MS_WH_DOWN, //Rotary Encoder 6 C(S(KC_TAB)), KC_HOME, C(KC_TAB), //Rotary Encoder 8 C(KC_PMNS), KC__MUTE, C(KC_PPLS), //Rotary Encoder 9 @@ -206,8 +206,47 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -void matrix_init_user(void) { -} + +#ifdef ENCODER_ENABLE + static uint8_t encoder_state[9] = {0}; + static keypos_t encoder_ccw[9] = {{2, 0}, {2, 1}, {2, 2}, {11, 0}, {11, 1}, {11, 2}, {11, 3}, {5, 3}, {8, 3}}; + static keypos_t encoder_cw[9] = {{0, 0}, {0, 1}, {0, 2}, {9, 0}, {9, 1}, {9, 2}, {9, 3}, {3, 3}, {6, 3}}; + + void encoder_action_unregister(void) { + for (int index = 0; index < 9; ++index) { + if (encoder_state[index]) { + if(index==0){ //Add rotating effect + is_encoder1_rotate = true; + encoder_timer = timer_read(); + } + else if (index==5){ + is_encoder6_rotate = true; + encoder_timer = timer_read(); + } + else if(index==7){ + is_encoder7_rotate = true; + encoder_timer = timer_read(); + } + keyevent_t encoder_event = (keyevent_t){.key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], .pressed = false, .time = (timer_read() | 1)}; + encoder_state[index] = 0; + action_exec(encoder_event); + } + } + } + + void encoder_action_register(uint8_t index, bool clockwise) { + keyevent_t encoder_event = (keyevent_t){.key = clockwise ? encoder_cw[index] : encoder_ccw[index], .pressed = true, .time = (timer_read() | 1)}; + encoder_state[index] = (clockwise ^ 1) | (clockwise << 1); + action_exec(encoder_event); + } + + bool encoder_update_user(uint8_t index, bool clockwise) { + encoder_action_register(index, clockwise); + return false; + }; +#endif + + void matrix_scan_user(void) { if (is_alt_tab_active) { @@ -216,8 +255,25 @@ void matrix_scan_user(void) { is_alt_tab_active = false; } } - + + #ifdef RGBLIGHT_ENABLE //Stretch timer code + if (is_stretch_active && !is_stretch_time) { + if(timer_elapsed(stretch_timer)>60000) { //1 minute has passed. Timer is uint16 max. + stretch_minutes++; + stretch_timer = timer_read(); + } + if (stretch_minutes > 30) { //Change RGB animation effect after set number of minutes. + rgblight_set_effect_range(0, 42); + rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); + is_stretch_time = true; + stretch_minutes = 0; + } + } + #endif + + + encoder_action_unregister(); #ifdef RGBLIGHT_ENABLE //Add rotation animations underneath rotary encoders when turning if (!encoder_effect && is_encoder1_rotate) { //Turn on the effect for encoder 1 rgblight_set_effect_range(0, 4); @@ -238,8 +294,8 @@ void matrix_scan_user(void) { if(encoder_effect){ rgblight_set_effect_range(0, 42); rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); - if(is_stretch_time){ - rgblight_sethsv_at(0,230,100,40); //Set LED to orange to indicate timer is on + if(is_stretch_active){ //Maintain orange LED to indicate stretch timer is still on. + rgblight_sethsv_at(0,230,100,40); } } is_encoder1_rotate = false; @@ -252,21 +308,6 @@ void matrix_scan_user(void) { is_encoder7_rotate = false; } #endif - - #ifdef RGBLIGHT_ENABLE //Stretch timer code - if (is_stretch_active && !is_stretch_time) { - if(timer_elapsed(stretch_timer)>60000) { //1 minute has passed. Timer is uint16 max. - stretch_minutes++; - stretch_timer = timer_read(); - } - if (stretch_minutes > 30) { //Change RGB animation effect after set number of minutes. - rgblight_set_effect_range(0, 42); - rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); - is_stretch_time = true; - stretch_minutes = 0; - } - } - #endif } bool process_record_user(uint16_t keycode, keyrecord_t *record) { @@ -352,114 +393,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } -bool encoder_update_user(uint8_t index, bool clockwise) -{ - if (index == 0) { /* 1 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - is_encoder1_rotate = true; - encoder_timer = timer_read(); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - is_encoder1_rotate = true; - encoder_timer = timer_read(); - } - } - else if (index == 1) { /* 2 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 2) { /* 3 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 3) { /* 4 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 4) { /* 5 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col =9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col =9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 5) { /* 6 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - is_encoder6_rotate = true; - encoder_timer = timer_read(); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - is_encoder6_rotate = true; - encoder_timer = timer_read(); - } - } - else if (index == 6) { /* 7 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - is_encoder7_rotate = true; - encoder_timer = timer_read(); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - is_encoder7_rotate = true; - encoder_timer = timer_read(); - } - } - else if (index == 7) { /* 8 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 3}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 3}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 5}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 5}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 8) { /* 9 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 6}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 6}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 8}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 8}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - return true; -} - - // RGB Layer Light Settings - Note that this will fix the key switches with same LED colour and brightness const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 95,255,90}); //Spring green const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 30,255,120}); //Yellow-orange From e146857982041a5f51b3aa82314513fa18020920 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 6 Nov 2021 23:57:16 -0400 Subject: [PATCH 049/155] Add firmware file. --- .../solartempest/9e/solartempest_9e_via.hex | 2201 ++++++++--------- 1 file changed, 1035 insertions(+), 1166 deletions(-) diff --git a/keyboards/solartempest/9e/solartempest_9e_via.hex b/keyboards/solartempest/9e/solartempest_9e_via.hex index 1dd8a7b014c4..4c69b6ed20e3 100644 --- a/keyboards/solartempest/9e/solartempest_9e_via.hex +++ b/keyboards/solartempest/9e/solartempest_9e_via.hex @@ -1,9 +1,9 @@ :100000000C94A3040C94EA040C94EA040C94EA04FF :100010000C94EA040C94EA040C94EA040C94EA04A8 -:100020000C94EA040C94EA040C94A2290C945E2922 -:100030000C949D2A0C94EA040C94EA040C94EA04AF +:100020000C94EA040C94EA040C9438250C94F424FF +:100030000C9433260C94EA040C94EA040C94EA041D :100040000C94EA040C94EA040C94EA040C94EA0478 -:100050000C94EA040C94792A0C94EA040C94EA04B3 +:100050000C94EA040C940F260C94EA040C94EA0421 :100060000C94EA040C94EA040C94EA040C94EA0458 :100070000C94EA040C94EA040C94EA040C94EA0448 :100080000C94EA040C94EA040C94EA040C94EA0438 @@ -80,7 +80,7 @@ :1004F00029282625232250007F004F00115012503A :1005000013505F0060006100CA5C2C00C95CC45CD1 :10051000C25CC35C3900470053005C005D005E00B4 -:10052000C65C3D04C55C815FAD00805FB900B3006F +:10052000C65C3D04C55C815FAD00805FB900845F3F :10053000620059005A005B00F9001A01FA0000003D :10054000000000002B034A002B0156017F005701D9 :100550002B0317012B0101000100010010500100C5 @@ -147,22 +147,22 @@ :100920000200010803410039006500000012034184 :100930000074006C0061006E0074006900730000B8 :1009400000040309040011241FBECFEFD0E1DEBF75 -:10095000CDBF04B603FE27C0809164039091650368 -:10096000A0916603B09167038730904BA740B04BCE -:10097000D1F41092640310926503109266031092F2 -:10098000670314BE84B7877F84BF0FB6F894A89519 +:10095000CDBF04B603FE27C080919103909192030E +:10096000A0919303B09194038730904BA740B04B74 +:10097000D1F410929103109292031092930310926B +:10098000940314BE84B7877F84BF0FB6F894A895EC :1009900080916000886180936000109260000FBEBB -:1009A000E0E0F8E7099523E0AEEBB1E001C01D926D -:1009B000A436B207E1F711E0A0E0B1E0EAE4F5E621 -:1009C00002C005900D92AE3BB107D9F70E94C42A30 -:1009D0000C946C320C940000E8EDF0E080818C7F88 +:1009A000E0E0F8E7099523E0A2EEB1E001C01D9276 +:1009B000A139B207E1F711E0A0E0B1E0EAEEFCE511 +:1009C00002C005900D92A23EB107D9F70E945A26A7 +:1009D0000C943C2E0C940000E8EDF0E080818C7FBC :1009E00080831092E2001092DA001092E100A0EEF3 :1009F000B0E08C9181608C9380818F77808319BC6B :100A0000A7EDB0E08C918E7F8C9380818F7E808368 -:100A10001092AD0208952091E4003091E50095E632 +:100A10001092DA0208952091E4003091E50095E605 :100A2000A9012091EC00822F817020FF06C08091E7 :100A3000E80080FF06C080E008952091E80022FDD4 -:100A40001AC08091D202882389F0853089F0809184 +:100A40001AC08091FF02882389F0853089F0809157 :100A5000EB0085FD0FC02091E4003091E5004217C6 :100A60005307F9F29150E1F684E0089582E0089589 :100A700083E0089581E00895EF92FF920F931F9312 @@ -170,10 +170,10 @@ :100A90008091E80085FD0BC08091E8008E778093FF :100AA000E8000E940B05882399F3C82F08C0F701BE :100AB00081917F018093F1000150110949F78C2F3A -:100AC000CF911F910F91FF90EF9008958091D402E4 +:100AC000CF911F910F91FF90EF90089580910103B6 :100AD00087FF13C08091E80082FF06C08091E80084 -:100AE0008B778093E80004C08091D2028111F2CF0D -:100AF00008958091D2028823D9F38091E80080FF85 +:100AE0008B778093E80004C08091FF028111F2CFE0 +:100AF00008958091FF028823D9F38091E80080FF58 :100B0000F8CF8091E8008E77ECCF982F9093E90092 :100B1000242F762F50E0891731F07091EC0020914E :100B2000ED005091F00021FD07C09F5F973071F7F5 @@ -183,49 +183,49 @@ :100B6000F0002091EE0027FDE0CF80E00895CF92C5 :100B7000DF92EF92FF920F931F93CF93DF93C8ED15 :100B8000D0E088818F7E8883E7EDF0E0808181600E -:100B9000808381E08093AD0288818C7F888302EE20 +:100B9000808381E08093DA0288818C7F888302EEF3 :100BA00010E0D8011C921092DA0081EEC82ED12CF0 :100BB000D6011C9288818F7788838881806888839A :100BC00088818F7D888380818068808319BC1092A2 -:100BD000D2021092D3021092D1021092D00290EE63 +:100BD000FF02109200031092FE021092FD0290EEAE :100BE000E92EF12CF70180818B7F808388818160E1 :100BF000888342E060E080E00E948505D6018C9108 :100C00008E7F8C93F80180818160808380818860F1 :100C10008083D7018C918E7F8C93888180618883BB :100C2000DF91CF911F910F91FF90EF90DF90CF90C8 -:100C30000895FC018091DA029091DB0286179707F4 +:100C30000895FC0180910703909108038617970798 :100C4000A0F06115710529F49091E8009E779093CA :100C5000E80090E06115710551F4911108C0809190 :100C6000E80082FF33C080E00895BC01F2CF80919C -:100C7000D2028823B9F18530B9F18091E80083FD73 +:100C7000FF028823B9F18530B9F18091E80083FD46 :100C80002FC08091E80082FDEACF8091E80080FFCC :100C9000E1CF2091F2003091F3006115710519F058 :100CA0002830310558F091E02830310509F090E006 :100CB0002091E8002E772093E800CCCF819180939B -:100CC000F100615071092F5F3F4FE7CF8091D20251 +:100CC000F100615071092F5F3F4FE7CF8091FF0224 :100CD000882341F0853041F08091E80083FFBFCF49 -:100CE00081E0089582E0089583E008958091AF0245 -:100CF00008959C014FB7F8948091A4029091A502A9 -:100D0000A091A602B091A7024FBF821B930B08953A -:100D10002FB7F8948091A4029091A502A091A60209 -:100D2000B091A7022FBF08952091A1023091A20295 -:100D30002817390771F09093A2028093A102E091E5 -:100D40009F02F091A002309721F00084F185E02D00 -:100D50000994089520919D0230919E022817390729 -:100D600071F090939E0280939D02E0919F02F0911A -:100D7000A002309721F00680F781E02D09940895B4 -:100D8000E0919F02F091A002309721F00190F08154 +:100CE00081E0089582E0089583E008958091DC0218 +:100CF00008959C014FB7F8948091D1029091D2024F +:100D0000A091D302B091D4024FBF821B930B0895E0 +:100D10002FB7F8948091D1029091D202A091D30282 +:100D2000B091D4022FBF08952091CE023091CF020E +:100D30002817390771F09093CF028093CE02E0918B +:100D4000CC02F091CD02309721F00084F185E02DA6 +:100D5000099408952091CA023091CB0228173907CF +:100D600071F09093CB028093CA02E091CC02F09193 +:100D7000CD02309721F00680F781E02D0994089587 +:100D8000E091CC02F091CD02309721F00190F081FA :100D9000E02D099480E00895FA01811101C0FB0162 -:100DA0000994089580915F03982F9E7F61F481706C -:100DB000826080935F0380916203853B18F084EB2F -:100DC0008093620308958A34B0F381708864F1CF10 +:100DA0000994089580918903982F9E7F61F4817042 +:100DB00082608093890380918C03853B18F084EBDB +:100DC00080938C0308958A34B0F381708864F1CFE6 :100DD000AF92BF92DF92EF92FF920F931F93CF9348 :100DE000DF93182F062FE901453B08F044EBE42F71 :100DF000F0E0E853FD4F011110C0E4915E2F4E2F3B :100E00004983E8835A83DF91CF911F910F91FF901F :100E1000EF90DF90BF90AF900895202F30E0449185 :100E2000D42EE42EF12C56E0159FC0011124EFEFD3 -:100E3000F0E0BF010E946D31812F90E0880F991F73 +:100E3000F0E0BF010E943D2D812F90E0880F991FA7 :100E400055E5569FD001579FB00D11248A1B9B0B6F :100E5000982F990F890F5F01A21AB30AAE9CD00197 :100E6000AF9CB00DBE9CB00D11245B2F089F80017C @@ -238,52 +238,52 @@ :100ED00097CF6430710569F080F06630710509F4D0 :100EE0008FCFF4CFE42F4B2F592F8ACFE42F412FF0 :100EF00087CFEB2F542F492F83CF4B2F5D2DE12F21 -:100F00007FCF0E9488069C0190918A0280918B027B -:100F1000982B21F0309387022093860290918C02C7 -:100F200080918D02982B21F03093850220938402CA -:100F3000E0919F02F091A002309749F082E0809307 -:100F400088020480F581E02D88E892E009940895F4 -:100F500040918A02803F59F480918B0287FF0DC037 -:100F600010928B0241110BC01092820208C0813F87 -:100F700081F480918B0218169CF3442381F08091B8 -:100F80008C0290918D02892B09F05AC01092810237 -:100F90000895823F49F447FFF0CF10928A02809172 -:100FA0008B028111ECCFE0CF833F19F41416ACF320 -:100FB000E4CF90918C02893F29F41916F4F610922F -:100FC0008C02DBCF8A3F19F497FFD7CFF8CF9091EF -:100FD0008D028B3F29F497FFD0CF10928D02CDCF99 +:100F00007FCF0E9488069C019091B7028091B80221 +:100F1000982B21F03093B4022093B3029091B90240 +:100F20008091BA02982B21F03093B2022093B10243 +:100F3000E091CC02F091CD02309749F082E08093AD +:100F4000B5020480F581E02D85EB92E009940895C7 +:100F50004091B702803F59F48091B80287FF0DC0DD +:100F60001092B80241110BC01092AF0208C0813F2D +:100F700081F48091B80218169CF3442381F080918B +:100F8000B9029091BA02892B09F05AC01092AE02B0 +:100F90000895823F49F447FFF0CF1092B702809145 +:100FA000B8028111ECCFE0CF833F19F41416ACF3F3 +:100FB000E4CF9091B902893F29F41916F4F6109202 +:100FC000B902DBCF8A3F19F497FFD7CFF8CF9091C2 +:100FD000BA028B3F29F497FFD0CF1092BA02CDCF3F :100FE0008C3F19F41916CCF3C8CF9CE0980F9530BC :100FF00090F4845F990B21E030E0B90102C0660FE4 -:10100000771F8A95E2F7CB01809590918902892319 -:1010100080938902B2CF8D3F31F4809183028E7F1D -:1010200080938302AACF8E3F21F4809183028D7F2B -:10103000F7CF8F3F09F0A1CF809183028B7FF0CF54 -:1010400008958091830280FD16C081FD16C082FD47 -:1010500016C0809181028823A1F0883280F428E0B4 -:10106000829FC001112468E270E00E948131862FC6 +:10100000771F8A95E2F7CB0180959091B6028923EC +:101010008093B602B2CF8D3F31F48091B0028E7FC3 +:101020008093B002AACF8E3F21F48091B0028D7FD1 +:10103000F7CF8F3F09F0A1CF8091B0028B7FF0CF27 +:1010400008958091B00280FD16C081FD16C082FD1A +:1010500016C08091AE028823A1F0883280F428E087 +:10106000829FC001112468E270E00E94512D862FFA :10107000672B39F0089582E0089584E0089588E0B0 -:10108000089581E008958091830280FD14C081FD60 -:1010900014C082FD16C080918202882381F08431C1 +:10108000089581E008958091B00280FD14C081FD33 +:1010900014C082FD16C08091AF02882381F0843194 :1010A00080F422E3829FC001112464E170E00E9479 -:1010B0008131862F08958CE0089589E1089585E0B7 +:1010B000512D862F08958CE0089589E1089585E0EB :1010C000089582E30895803F31F40E94430881959A -:1010D00080938B020895813F19F40E944308F8CF52 -:1010E000823F31F40E944308819580938A020895DB +:1010D0008093B8020895813F19F40E944308F8CF25 +:1010E000823F31F40E94430881958093B7020895AE :1010F000833F19F40E944308F8CF893F29F40E94E6 -:10110000210880938C0208958A3F21F40E942108CF +:1011000021088093B90208958A3F21F40E942108A2 :101110008195F7CF8B3F31F40E9421088195809310 -:101120008D0208958C3F19F40E942108F8CF9CE0AD +:10112000BA0208958C3F19F40E942108F8CF9CE080 :10113000980F953070F4845F990B21E030E001C086 -:10114000220F8A95EAF780918902822B8093890287 -:1011500008958D3F31F480918302816080938302F2 -:1011600008958E3F21F4809183028260F7CF8F3FF4 -:10117000B9F7809183028460F1CF80E00895F894FC +:10114000220F8A95EAF78091B602822B8093B6022D +:1011500008958D3F31F48091B00281608093B00298 +:1011600008958E3F21F48091B0028260F7CF8F3FC7 +:10117000B9F78091B0028460F1CF80E00895F894CF :10118000E82FE295EF70F0E031A1282F2F7081E079 :1011900090E001C0880F2A95EAF7982F9095932345 -:1011A00091A392A1892B82A3789408959091A8028B +:1011A00091A392A1892B82A3789408959091D5025E :1011B00092FF06C0282F28712830F9F4877F8460B9 :1011C00093FF06C0282F28712831F1F4877E8461AF -:1011D0002091A90220FF06C0382F38713830D9F489 +:1011D0002091D60220FF06C0382F38713830D9F45C :1011E000877F816021FF06C0282F28712831D1F424 :1011F000877E816194FD877E0895282F2471243095 :10120000F9F68B7F8860DCCF282F2471243101F719 @@ -296,21 +296,21 @@ :1012700008F09CC0C03ED10560F5C83AD10508F021 :1012800087C0C53AD10508F0FDC0C130D10509F1CC :101290002097F9F0C430D105E0F440C085339105C2 -:1012A00009F45AC0C997C1F68091A802837089F0E9 +:1012A00009F45AC0C997C1F68091D502837089F0BC :1012B000C0EED0E00EC0833E910599F170F4803EFF -:1012C000910501F1823E910539F68091A80282FDD7 +:1012C000910501F1823E910539F68091D50282FDAA :1012D00021C0CE01DF91CF910895863E910561F145 :1012E000873E910571F1843E910509F0B5CF80915B -:1012F000A90281FFEECF8091A802C7EED0E084FD65 -:101300000DC0E7CF8091A80280FD12C19091A90283 +:1012F000D60281FFEECF8091D502C7EED0E084FD0B +:101300000DC0E7CF8091D50280FD12C19091D60229 :1013100090FFDFCFC3EED0E084FFDBCFD0E0C0E0B2 -:10132000D8CF8091A80282FD06C19091A90290FDBC -:10133000BFCF84FFCECFF2CF8091A80283FDDDCF57 -:10134000C8CF8091A80283FDF9C09091A90291FFB6 -:10135000F0CFC4EED0E0BDCF8091A80285FFB9CF19 -:10136000C9E2D0E0B6CF8091A80285FFB2CFC5E335 -:10137000D0E0AFCF8091A80286FFABCFCAE2D0E029 -:10138000A8CF8091A80286FFA4CFC1E3D0E0A1CF6F +:10132000D8CF8091D50282FD06C19091D60290FD62 +:10133000BFCF84FFCECFF2CF8091D50283FDDDCF2A +:10134000C8CF8091D50283FDF9C09091D60291FF5C +:10135000F0CFC4EED0E0BDCF8091D50285FFB9CFEC +:10136000C9E2D0E0B6CF8091D50285FFB2CFC5E308 +:10137000D0E0AFCF8091D50286FFABCFCAE2D0E0FC +:10138000A8CF8091D50286FFA4CFC1E3D0E0A1CF42 :10139000CF3BD10518F6C85AD0E0CC0FDD1FCF5D8A :1013A000DE4F0990D881C02DD46493CFC11540E29F :1013B000D40758F4C11581E0D80708F08ACFC03FA0 @@ -338,46 +338,46 @@ :10151000D06ADFCE8C2F8F700E94D60834E0D6952B :10152000C7953A95E1F7CF709C2FEC01D069D1CEE9 :10153000C9E3D0E0CECEC2EED0E0CBCEC6EED0E056 -:10154000C8CE8091350281111092350208958091A4 -:10155000340290913302892B90913202892B80932F -:10156000C001909135029923A1F0892B8093C0018D -:1015700080911D01882341F18091A80287FF24C03A -:101580008EE1E2ECF1E090E0815000F591110E94D3 -:10159000A10AE0919F02F091A0023097E1F08091C2 -:1015A0001D01882359F08091A80287FF07C0809110 -:1015B000C0018093C10185E08093C0010280F38166 -:1015C000E02D80EC91E0099486E0DBCF219122238D +:10154000C8CE80915902811110925902089580915C +:10155000580290915702892B90915602892B8093C3 +:10156000E401909159029923A1F0892B8093E40121 +:1015700080911D01882341F18091D50287FF24C00D +:101580008EE1E6EEF1E090E0815000F591110E94CD +:10159000A10AE091CC02F091CD023097E1F0809168 +:1015A0001D01882359F08091D50287FF07C08091E3 +:1015B000E4018093E50185E08093E4010280F381FA +:1015C000E02D84EE91E0099486E0DBCF2191222387 :1015D000D9F29F5FD9CF089590911D019923D1F041 -:1015E0009091A80297FF16C0E82FE695E695E6953C -:1015F000EE31E0F4F0E0E054FE4F282F277081E058 +:1015E0009091D50297FF16C0E82FE695E695E6950F +:1015F000EE31E0F4F0E0EC51FE4F282F277081E04F :1016000090E001C0880F2A95EAF78095928189239E -:1016100082830895E2ECF1E09191891303C0DF0128 -:1016200011971C9291E0E83CF907B1F70895909169 -:101630001D019923C1F09091A80297FF14C0E82FD3 -:10164000E695E695E695EE31F8F4F0E0E054FE4FCD +:1016100082830895E6EEF1E09191891303C0DF0122 +:1016200011971C9291E0EC3EF907B1F70895909163 +:101630001D019923C1F09091D50297FF14C0E82FA6 +:10164000E695E695E695EE31F8F4F0E0EC51FE4FC4 :10165000877021E030E001C0220F8A95EAF782818D -:10166000822B82830895A2ECB1E0EFEF90E02D9100 +:10166000822B82830895A6EEB1E0EFEF90E02D91FA :10167000821751F0EF3F19F4211101C0E92F9F5F4C :101680009630A9F7EF3F09F408950E2E000CFF0BDA -:10169000E054FE4FE6CF809130029091FF01981305 +:10169000EC51FE4FE6CF80915402909123029813B3 :1016A00001C008958F5F8770FACF2CE0929F800D64 :1016B0001124982F977086958695869524E0829FB1 -:1016C000F0011124EF51FE4F50E040E080E0219105 +:1016C000F0011124EB5FFD4F50E040E080E02191FC :1016D00030E0092E02C0369527950A94E2F7217072 :1016E0003327042E01C0220F0A94EAF7822B4F5FA2 :1016F0005F4F4430510559F708952CE0929F800DBB :101700001124982F977041E001C0440F9A95EAF791 -:1017100086958695869594E0899FF0011124EF5176 -:10172000FE4F90E080E070E05191DF0111979B0146 +:1017100086958695869594E0899FF0011124EB5F6C +:10172000FD4F90E080E070E05191DF0111979B0147 :10173000082E02C0369527950A94E2F7217021956C :101740002527242325272C9301968430910561F7C2 :10175000089590E080E00E94AA0690E080E00E9458 -:10176000940610923302109232020E94A70A86E079 -:10177000E8E8F2E0DF011D928A95E9F71092820213 -:1017800010928102109283020C9481079093370289 -:10179000809336020C94A90B882341F08095909198 -:1017A00034028923809334020C94A70A0895882375 -:1017B00039F090913402982B909334020C94A70A3C +:10176000940610925702109256020E94A70A86E031 +:10177000E5EBF2E0DF011D928A95E9F71092AF02E6 +:101780001092AE021092B0020C94810790935B020B +:1017900080935A020C94A90B882341F08095909174 +:1017A00058028923809358020C94A70A089588232D +:1017B00039F090915802982B909358020C94A70AF4 :1017C0000895882309F459C0823871F40E94C00634 :1017D00081FF53C089E30E94170B0E94A70A89E387 :1017E0000E94EC0A0C94A70A833859F40E94C006A0 @@ -386,14 +386,14 @@ :101810000E94170B0E94A70A87E4E2CF9CEF980F63 :10182000913AF0F290E2980F983088F4877021E0B6 :1018300030E0A90102C0440F551F8A95E2F7CA01A2 -:10184000809590913402892380933402CBCF9BE51D +:10184000809590915802892380935802CBCF9BE5D5 :10185000980F933020F490E080E00C94AA0698E56D :10186000980F973120F490E080E00C949406803F2C -:1018700020F00E94A8070C94810708959091D2024D -:10188000943029F58093AA027093AC026093AB0266 +:1018700020F00E94A8070C94810708959091FF0220 +:10188000943029F58093D7027093D9026093D802DF :101890009093E9008FEF9091E800815095FD06C08C :1018A00095ED9A95F1F700008111F5CF8091E80050 -:1018B00085FF0DC050E040E063E070E08AEA92E00E +:1018B00085FF0DC050E040E063E070E087ED92E00E :1018C0000E943C058091E8008E778093E80008959F :1018D000BC0184E00C943E0CBC0183E00C943E0CF3 :1018E0009C0184E08093E9009FEF8091E800915093 @@ -401,17 +401,17 @@ :101900008091E80085FF0CC050E040E066E070E0A8 :10191000C9010E943C058091E8008E778093E80021 :101920000895CF93DF93EC0180911D018823B1F1DD -:101930008091A80287FF32C060E284E08093E900D2 +:101930008091D50287FF32C060E284E08093E900A5 :101940008FEF9091E800815095FD06C095ED9A9536 :10195000F1F700008111F5CF8091E80085FF1BC0F1 :1019600080911D0170E050E040E0811104C050E022 :1019700040E068E070E0CE010E943C058091E80004 -:101980008E778093E80080E2FE01A0EBB2E0019048 +:101980008E778093E80080E2FE01ADEDB2E0019039 :101990000D928A95E1F7DF91CF91089568E081E09B :1019A000CDCF81E08093E00080E28093D800109258 :1019B000C9008FE19EE40197F1F700C0000087E0C5 -:1019C00090EBDC018093640390936503A09366031E -:1019D000B093670388E19CE00FB6F894A8958093D4 +:1019C00090EBDC018093910390939203A093930397 +:1019D000B093940388E19CE00FB6F894A8958093A7 :1019E00060000FBE90936000FFCFCF93C82F882375 :1019F00009F4AEC08238C1F40E94C00681FDA8C0BF :101A000089E30E94170B0E94A70A2FEF81EE94E052 @@ -423,14 +423,14 @@ :101A600087E40E94170B0E94A70A2FEF81EE94E0F3 :101A7000215080409040E1F700C0000087E4CFCFC4 :101A80008CEF8C0F813A88F580911D01882301F13C -:101A90008091A80287FF1CC0EC2FE695E695E6959D -:101AA000F0E0E054FE4F828190E04C2F477021E03F +:101A90008091D50287FF1CC0EC2FE695E695E69570 +:101AA000F0E0EC51FE4F828190E04C2F477021E036 :101AB00030E002C0220F331F4A95E2F782239323BE :101AC000892B79F08C2F0E94EC0A0E94A70A09C08A -:101AD000E2ECF1E08191C817A9F321E0E83CF207BC +:101AD000E6EEF1E08191C817A9F321E0EC3EF207B0 :101AE000C9F78C2F0E94170B9CCF80E28C0F883097 :101AF00068F4C77021E030E001C0220FCA95EAF710 -:101B000080913402822B809334028BCFEBE5EC0F73 +:101B000080915802822B809358028BCFEBE5EC0F2B :101B1000E33040F4F0E0E25EFE4F808190E0CF9150 :101B20000C94AA06E8E5EC0FE73150F4F0E0EE0F74 :101B3000FF1FEF5DFE4F80819181CF910C94940641 @@ -440,10 +440,10 @@ :101B700031F4812FDF91CF911F910C94E10B8FE90C :101B80009FE00197F1F700C000002197F0CF0F937D :101B90001F93CF93DF93C62FD42F022FFC01828196 -:101BA0008823A1F06093E0020E9488069093DF02F0 -:101BB0008093DE02C77081E001C0880FCA95EAF702 -:101BC000DF91CF911F910F910C94D70B8091E00280 -:101BD000681335C08091DE029091DF020E94790681 +:101BA0008823A1F0609390030E94880690938F038E +:101BB00080938E03C77081E001C0880FCA95EAF751 +:101BC000DF91CF911F910F910C94D70B80919003CF +:101BD000681335C080918E0390918F030E9479061F :101BE000883C910560F510E21D0FCD17B9F080E239 :101BF0008C0F883040F4C77081E001C0880FCA950F :101C0000EAF70E94CC0B183048F481E09D2F9770C2 @@ -452,35 +452,35 @@ :101C3000EAF7DF91CF911F910F910C94CC0BC770F5 :101C400081E001C0880FCA95EAF7F3CFDF91CF9109 :101C50001F910F910895CF93DF93C7EED3E060E01B -:101C6000CE010E94F4312196C11588E0D807B9F75A +:101C6000CE010E94C42D2196C11588E0D807B9F78E :101C7000DF91CF9108956F927F928F929F92AF9252 :101C8000BF92CF92DF92EF92FF920F931F93CF9369 :101C9000DF9386EFC82E84E0D82E9FE9E92EF12C41 :101CA000E701C056D10936011BC0F501859094901B -:101CB000692DC8010E94F431682DC80101960E9467 -:101CC000F43182E0A80EB11C0E5F1F4FC017D10780 +:101CB000692DC8010E94C42D682DC80101960E949B +:101CC000C42D82E0A80EB11C0E5F1F4FC017D107B4 :101CD00061F788E1680E711C6896CE15DF0529F062 :101CE0008E01085111095301E0CF7E0180E6E80E14 :101CF000F11C80E6C80ED11C8FE5E81684E0F806DA :101D000079F6DF91CF911F910F91FF90EF90DF90C7 :101D1000CF90BF90AF909F908F907F906F900895DD :101D2000CF93C82F6FEF811161E283E290E00E94B0 -:101D3000F4316FEFC11161E184E290E00E94F4316F -:101D40006FEFC11165E085E290E0CF910C94F43122 -:101D500080E00E94900E60E086E290E00E94F43104 +:101D3000C42D6FEFC11161E184E290E00E94C42DD7 +:101D40006FEFC11166E085E290E0CF910C94C42D55 +:101D500080E00E94900E60E086E290E00E94C42D38 :101D60000E943B0E0E942B0E81E00C94900ECF93AC -:101D7000C091A902C2FB992790F9981781F080FBC6 -:101D8000C2F9C093A9026091A80284E090E00E9489 -:101D9000F4316C2F82E290E0CF910C94F431CF912A +:101D7000C091D602C2FB992790F9981781F080FB99 +:101D8000C2F9C093D6026091D50284E090E00E942F +:101D9000C42D6C2F82E290E0CF910C94C42DCF9192 :101DA00008950F931F93CF93DF93C42FD0E0CC0FF0 :101DB000DD1F28E1629FC00DD11D112430E6839FF5 -:101DC000C00DD11D1124CE0187960E94E031082F4D -:101DD00010E0102F0027CE0188960E94E031980174 +:101DC000C00DD11D1124CE0187960E94B02D082F81 +:101DD00010E0102F0027CE0188960E94B02D9801A8 :101DE000282BC901DF91CF911F910F910895462FA4 :101DF0008A3038F4743028F46C3018F4672F0C945F :101E0000D10E90E080E00895BF92CF92DF92EF92E2 -:101E1000FF920F931F93CF93DF937C010091DC021D -:101E20001091DD028091360290913702082B192B18 +:101E1000FF920F931F93CF93DF937C0100910903EF +:101E200010910A0380915A0290915B02082B192BA2 :101E3000CFE0D0E0CC24C394D12CBC2EC6010C2E14 :101E400002C0880F991F0A94E2F780239123892BFF :101E500071F4219790F7B12C8B2DDF91CF911F91C9 @@ -489,25 +489,25 @@ :101E8000CF93DF93EC010E94040FBE010E94F70E76 :101E9000DF91CF910C941909FC01808191810E94FE :101EA000400F292F2F7092959F7092509E3078F49A -:101EB000E92FF0E0E259FD4C0C949531803F19F088 +:101EB000E92FF0E0E25CF14D0C94652D803F19F0C4 :101EC00020F4883E20F481E00895843FE1F380E02F :101ED0000895883EC0F3813FD1F7F5CF822F8695D4 -:101EE00086958695089583E290E00E94E0318132E4 -:101EF00089F484E290E00E94E031813159F485E276 -:101F000090E00E94E03191E0853009F090E0892F67 +:101EE00086958695089583E290E00E94B02D813218 +:101EF00089F484E290E00E94B02D813159F485E2AA +:101F000090E00E94B02D91E0863009F090E0892F9A :101F10008170089580E0FCCFCF9384E090E00E9430 -:101F2000E031C82F82E290E00E94E031982F8C2FA0 -:101F3000CF91089560915F03669570E04BE050E0AB -:101F40008AE091E00E94C631892B19F481E08093E8 -:101F500098020E94880690939202809391020895BD +:101F2000B02DC82F82E290E00E94B02D982F8C2F08 +:101F3000CF91089560918903669570E04BE050E081 +:101F40008AE091E00E94962D892B19F481E080931C +:101F5000C5020E9488069093BF028093BE02089536 :101F60004F925F926F927F928F929F92AF92BF92A9 :101F7000CF92DF92EF92FF920F931F93CF93DF9355 :101F8000CDB7DEB7CE57D1090FB6F894DEBF0FBE7E -:101F9000CDBF5090190180915F0380FF5DC080909C -:101FA0008F02909090028114910409F068C0EDECCA +:101F9000CDBF509019018091890380FF5DC0809072 +:101FA000BC029090BD028114910409F068C0EDEC70 :101FB000F3E09E012F5F3F4FBE0161587F4FC90183 :101FC000A4914A2F50E0DA01AA0FBB1FA40FB51F3E -:101FD000AF51BD4FCD90DD90EC90D901CD92DD9207 +:101FD000A55FBC4FCD90DD90EC90D901CD92DD9204 :101FE000ED929D0131966A177B0751F720911801F8 :101FF00043E0249F800D911D11246E9A2EB12F7BFA :102000003EB130645FB7F894BC01549E600D711D01 @@ -516,41 +516,41 @@ :10203000DEBF0FBECDBFDF91CF911F910F91FF90FB :10204000EF90DF90CF90BF90AF909F908F907F9058 :102050006F905F904F90089580911A0190911B01AD -:1020600023E0829FF0011124EF51FD4F891708F002 +:1020600023E0829FF0011124E55FFC4F891708F0FF :1020700096CF1182108212828F5F3396F7CF8091B4 -:102080008E02811194CFD12CC12C66246394712CC3 -:1020900053E0452E8091990293010C2C01C0220F30 +:10208000BB02811194CFD12CC12C66246394712C96 +:1020900053E0452E8091C60293010C2C01C0220F03 :1020A0000A94EAF7822309F43CC0F601EE0FFF1F01 :1020B000E80DF91DE590F490E114F10409F477CFEF -:1020C00045E050E0B701CE0101960E94BD31098183 +:1020C00045E050E0B701CE0101960E948D2D0981B7 :1020D0000F3F39F18A81800F9927991F8B32910523 :1020E00014F08AE290E05C01AA0CBB1C8A0D9B1DD7 -:1020F000DC01AF51BD4F5D01049D800111240F51E2 -:102100001D4F0A151B0520F0B5E0EB0EF11CD8CFD2 +:1020F000DC01A55FBC4F5D01049D80011124055FDB +:102100001C4F0A151B0520F0B5E0EB0EF11CD8CFD3 :1021100098014D816C818B810E94E8060D5F1F4FF5 :10212000F0CFEFEFCE1ADE0AF8E0CF16D10409F0B7 :10213000B1CF3DCFFC014191CF01E8E03EB90000B5 :1021400000C047FF2EB9440F000000C000C000C00F :102150002EB900C0EA9591F75CCFCF93DF9300D002 -:102160000F92CDB7DEB780915F0380FF13C09E0151 +:102160000F92CDB7DEB78091890380FF13C09E0127 :102170002F5F3F4F44E666EE80E00E94E8068B81C9 -:1021800099812A8120935A039093590380935B038A +:1021800099812A812093840390938303809385030C :102190000E94B00F0F900F900F90DF91CF91089594 :1021A0000F931F93CF93DF93EC0110E000E0909129 :1021B0001C019017110609F06CF40E94B00F8C817D :1021C00090E00196817099278C83DF91CF911F91C8 :1021D0000F91089520911A01A801420F511D9A01F3 -:1021E000220F331F240F351F2F513D4F4C8160911B -:1021F00061038091600396959017110651F04CF0A1 -:10220000442349F0409162030E94E8060F5F1F4F8C +:1021E000220F331F240F351F255F3C4F4C81609118 +:1021F0008B0380918A0396959017110651F04CF04D +:10220000442349F040918C030E94E8060F5F1F4F62 :10221000CECF4423B9F340E0F7CF8F929F92AF9295 :10222000BF92CF92DF92EF92FF920F931F93CF93C3 :10223000DF93EC014C81042F10E09801D8010E943B -:102240005D329B01AC010E9428324B015C01E0E24F +:102240002D2E9B01AC010E94F82D4B015C01E0E2B8 :10225000F0E0E01BF10BA5E5B0E0AC019B010E94B2 -:1022600028326B017C019F01DF010E94A2319B019A -:10227000AC010E9433329B01AC01280D391D4A1D6F -:102280005B1DC701B6010E943B32F22E822F90E007 +:10226000F82D6B017C019F01DF010E94722D9B0103 +:10227000AC010E94032E9B01AC01280D391D4A1DA3 +:102280005B1DC701B6010E940B2EF22E822F90E03B :1022900039E23F1560F143E0249F90011124359508 :1022A0002795122F109500E085E5E82EEF18809114 :1022B0001C01081758F10E94B00F9C8181E09923FE @@ -560,104 +560,104 @@ :1022F00030E0B901681B790B9B01220F331F260FB9 :10230000371F37FFCCCF2F5F3F4FC9CF8E2D01FD39 :102310008F2D20911A01622F600F7727771F9B0165 -:10232000220F331F260F371F2F513D4F412F609132 -:1023300061030E94E8060F5FBACF0F931F93CF93FC +:10232000220F331F260F371F255F3C4F412F60912F +:102330008B030E94E8060F5FBACF0F931F93CF93D2 :10234000DF9380911A0190911B0123E0829FF0019D -:102350001124EF51FD4F891740F1C0E0D3E06091A7 +:102350001124E55FFC4F891740F1C0E0D3E06091A4 :102360001C01C61740F10E94B00F20911501809109 -:102370009B02820F80939B0290911601920F909383 +:10237000C802820F8093C80290911601920F909329 :102380001601191654F4082E000C990B40911C01EB :102390004150550B841795071CF02195209315018A :1023A000DF91CF911F910F910895118210821282B7 :1023B0008F5F3396D0CF0C2F10E070E0C8010E94E1 -:1023C000813120911A01820F482F50E020919B0209 +:1023C000512D20911A01820F482F50E02091C80210 :1023D000022E000C330B02171307BCF020911601DC :1023E000022E000C330B201731077CF08D9F9001DB -:1023F00011242F513D4F4091620360916103809100 -:1024000060030E94E806CF5FAACFFA01EE0FFF1F1C -:10241000E40FF51FEF51FD4F118210821282F3CFAE +:1023F0001124255F3C4F40918C0360918B038091A9 +:102400008A030E94E806CF5FAACFFA01EE0FFF1FF2 +:10241000E40FF51FE55FFC4F118210821282F3CFAB :102420001F93CF93DF93FC018281DFEF80FFD1E028 :10243000C0E01AE290911C01C91788F00E94B00F09 -:1024400080919A02D130C9F5811102C080911C019E -:10245000815080939A02DF91CF911F910895E0916E +:102440008091C702D130C9F5811102C080911C0171 +:1024500081508093C702DF91CF911F910895E09141 :102460001A014C2F50E09A012E0F311DF901EE0F89 -:10247000FF1FE20FF31FEF51FD4F118210821282F6 -:1024800080919A028B32ACF0612F0E945F31892FCC +:10247000FF1FE20FF31FE55FFC4F118210821282F3 +:102480008091C7028B32ACF0612F0E942F2D892FD3 :10249000082E000C990B4817590749F49F014091E9 -:1024A000620360916103809160030E94E806CF5F40 +:1024A0008C0360918B0380918A030E94E806CF5FC2 :1024B000C1CF87FFEDCF890FEBCF90E00196609100 -:1024C0001C0170E00E948131C4CFEF92FF921F93F4 +:1024C0001C0170E00E94512DC4CFEF92FF921F9328 :1024D000CF93DF93EC0110E0EE24EA94F12C6091AD :1024E0001C01161770F00E94B00F9A818C8190FF2A :1024F00027C08F5F8C83DF91CF911F91FF90EF906A :10250000089520911A01422F410F5527551FCA01E6 -:102510009A01220F331F280F391F2F513D4F70E0B2 -:10252000C7010E948131962F8C8140916203609196 -:102530006103199F800D11240E94E8061F5FCFCF11 -:102540008150D8CF90915F0390FF14C090911A01F1 -:1025500020911B0133E0939FF0011124EF51FD4FB7 +:102510009A01220F331F280F391F255F3C4F70E0AF +:10252000C7010E94512D962F8C8140918C036091A0 +:102530008B03199F800D11240E94E8061F5FCFCFE7 +:102540008150D8CF9091890390FF14C090911A01C7 +:1025500020911B0133E0939FF0011124E55FFC4FB4 :10256000921710F00C94B00F8183608342839F5FB9 :102570003396F6CF08950F931F93CF93DF9300D038 -:102580000F92CDB7DEB78C0180919C0281110AC0F9 +:102580000F92CDB7DEB78C018091C90281110AC0CC :102590009E012F5F3F4F44EB6FEF0E94E8068A8158 -:1025A00080939C02F8016481613069F080919C0203 -:1025B00040E0662361F040E0623011F440919C02FB -:1025C00080E060E004C060919C0240E080E00E94F6 +:1025A0008093C902F8016481613069F08091C902A9 +:1025B00040E0662361F040E0623011F44091C902CE +:1025C00080E060E004C06091C90240E080E00E94C9 :1025D000A212F801848190E0019663E070E00E940D -:1025E000813184830F900F900F90DF91CF911F91D5 +:1025E000512D84830F900F900F90DF91CF911F9109 :1025F0000F910895CF93DF9300D00F92CDB7DEB740 -:1026000090915F0390FF0AC09E012F5F3F4F0E9491 +:102600009091890390FF0AC09E012F5F3F4F0E9467 :10261000E8064B8169818A810E94A2120F900F9077 -:102620000F90DF91CF910895CF93DF93EC01EFE509 +:102620000F90DF91CF910895CF93DF93EC01E9E80C :10263000F3E0438162818C810E94FA128C818F5F6A :102640008C83DF91CF910895CF93DF93EC01EC81E0 -:10265000F0E0EA50FC4F4491EFE5F3E062818181C4 +:10265000F0E0EA50FC4F4491E9E8F3E062818181C7 :102660000E94FA128C818F5F8C83DF91CF91089545 :10267000CF92DF92EF92FF926B017C010E94D20613 :10268000B701A60188E090E0FF90EF90DF90CF9037 -:102690000C940632AF92BF92CF92DF92EF92FF92EC +:102690000C94D62DAF92BF92CF92DF92EF92FF9221 :1026A0000F931F93CF93DF9300D00F92CDB7DEB778 -:1026B000182FF62E042FE22E90915F0390FF29C071 -:1026C000E92FE695AE2FB0E0A657BE4F8C918093D0 -:1026D00097029E7F923059F59E012F5F3F4F812FC9 +:1026B000182FF62E042FE22E9091890390FF29C047 +:1026C000E92FE695AE2FB0E0A255BE4F8C918093D6 +:1026D000C4029E7F923059F59E012F5F3F4F812F9C :1026E0000E94E8064B8169818A810E94A2121093A0 -:1026F0006003F092610300936203EE2051F0609159 -:102700005F037091600380916103909162030E9466 +:1026F0008A03F0928B0300938C03EE2051F06091DB +:10270000890370918A0380918B0390918C030E94BE :1027100038130F900F900F90DF91CF911F910F9171 :10272000FF90EF90DF90CF90BF90AF9008958230F0 -:1027300019F400916203DBCF863019F41091600325 +:1027300019F400918C03DBCF863019F410918A03D1 :10274000D6CF8930D9F3893191F6E9518E2F817036 :10275000D82EE695F0E0E853FC4FA590B490C12C3C :10276000BB2460911C01C61618F00E94B00FBFCFA9 :102770002C2D30E0A29EC001A39E900DB29E900D24 -:10278000112470E00E946D31812FD11013C0860F8B +:10278000112470E00E943D2D812FD11013C0860FBF :1027900040911A01420F532F511D9A01220F331FEE -:1027A000240F351F2F513D4F402F6F2D0E94E806FB -:1027B000C394D7CF861BECCFEFE5F3E0438128E04D +:1027A000240F351F255F3C4F402F6F2D0E94E806F8 +:1027B000C394D7CF861BECCFE9E8F3E0438128E050 :1027C000421B08F440E021E0628181810C944A13AD -:1027D000EFE5F3E0438128E0420F08F44FEF21E0FA -:1027E000628181810C944A13EFE5F3E0628128E075 +:1027D000E9E8F3E0438128E0420F08F44FEF21E0FD +:1027E000628181810C944A13E9E8F3E0628128E078 :1027F000621B08F460E021E0438181810C944A135C -:10280000EFE5F3E0628128E0620F08F46FEF21E06A -:10281000438181810C944A13EFE5F3E0818121E04B -:102820004381628188500C944A13EFE5F3E0818183 -:1028300021E043816281885F0C944A138091630395 -:10284000882319F081508093630360915F03709136 -:10285000600380916103909162030C94381380911E -:102860006303833018F48F5F8093630360915F0389 -:102870007091600380916103909162030C9438130E -:1028800090915F0390FF36C09170811129C09260D2 -:1028900090935F03662351F060915F037091600332 -:1028A00080916103909162030E94381360915F03ED -:1028B000669570E04BE050E08AE091E00E94C631FE -:1028C000892BA9F01092980281E08093940220E075 -:1028D0004091620360916103809160030C944A13FC +:10280000E9E8F3E0628128E0620F08F46FEF21E06D +:10281000438181810C944A13E9E8F3E0818121E04E +:102820004381628188500C944A13E9E8F3E0818186 +:1028300021E043816281885F0C944A1380918D036B +:10284000882319F0815080938D03609189037091E2 +:102850008A0380918B0390918C030C9438138091A0 +:102860008D03833018F48F5F80938D03609189030B +:1028700070918A0380918B0390918C030C94381390 +:102880009091890390FF36C09170811129C09260A8 +:1028900090938903662351F06091890370918A03B4 +:1028A00080918B0390918C030E943813609189036F +:1028B000669570E04BE050E08AE091E00E94962D32 +:1028C000892BA9F01092C50281E08093C10220E01B +:1028D00040918C0360918B0380918A030C944A137E :1028E000853210F09864D4CF880F982BD1CF0E94F6 :1028F0009A0FEACF089560E00C94401421E030E094 :10290000A90102C0440F551F8A95E2F7CA01209120 -:102910009902662391F0822B80939902809198020C -:10292000811105C080915F0386950E947B14809180 -:102930005F0380FD05C00C94B00F80958223ECCF1F +:10291000C602662391F0822B8093C6028091C50285 +:10292000811105C08091890386950E947B14809156 +:10293000890380FD05C00C94B00F80958223ECCFF5 :102940000895CF93DF93C82FC17082FBDD27D0F9A4 :1029500081FB662760F984E00E947E1461E06C27A9 :1029600085E00E947E146D2F86E0DF91CF910C945C @@ -679,956 +679,825 @@ :102A6000C6CF20E04EE16FEF82E30E944A13CE0111 :102A7000DF91CF911F910F91089520E04EE16FEF0C :102A80008EE1F3CF20E04EE16FEF8AE6EECF20E05B -:102A90004EE16FEF87EDE9CF0E94B9149093DD020C -:102AA0008093DC020C94A90B8091DC029091DD02F2 +:102A90004EE16FEF87EDE9CF0E94B91490930A03DE +:102AA000809309030C94A90B8091090390910A0368 :102AB0009C01267033272630310519F488600C9468 :102AC0004C15877FFCCF21E030E002C0220F331F7E -:102AD0008A95E2F7209530958091DC029091DD0295 -:102AE000822393230C944C15909131028095892375 -:102AF00080933102282F277039F4282F082E000CDC -:102B0000330B9217130621F49091A90292FF07C08C -:102B10008595859585950E946315109231020895DB +:102AD0008A95E2F7209530958091090390910A0339 +:102AE000822393230C944C15909155028095892351 +:102AF00080935502282F277039F4282F082E000CB8 +:102B0000330B9217130621F49091D60292FF07C05F +:102B10008595859585950E946315109255020895B7 :102B200021E030E002C0220F331F8A95E2F7809146 -:102B3000DC029091DD02822B932B0C944C1580913A -:102B40005F038695815009F484E261E00C9440149F -:102B500080915F0386958F5F853208F081E061E0A8 -:102B60000C94401490915F0390FF07C096959817BE +:102B3000090390910A03822B932B0C944C158091DE +:102B400089038695815009F484E261E00C94401475 +:102B50008091890386958F5F853208F081E061E07E +:102B60000C9440149091890390FF07C09695981794 :102B700020F0961710F40C94A81561E00C94401402 -:102B8000EFE5F3E083E0808311828FEF828384EBB3 +:102B8000E9E8F3E083E0808311828FEF828384EBB6 :102B90008383148260817181828193810C943813C4 -:102BA00069EE7EEF90E080E00E94123260E082E009 -:102BB00090E00E94F43160E083E090E00E94F43104 -:102BC000109237021092360260E084E090E00E949A -:102BD000F43160E082E290E00E94F43160E085E050 -:102BE00090E00E94F43160E086E090E00E94F431D1 -:102BF0006FEF87E090E00E94F43140E050E0BA01CE -:102C000088E090E00E94063260E08DE090E00E9453 -:102C1000F43140E050E0BA0188E190E00E940632D1 -:102C200060E087E190E00E94F43140E050E0BA01BA -:102C30008CE190E00E94063270E060E080E290E07B -:102C40000E94123240E050E0BA0188E190E00E9418 -:102C5000063280E00E94900E0E94A80E40E050E0F4 -:102C6000BA018FE090E00E94063240E050E0BA01E5 -:102C700083E190E00C9406326F927F928F929F9244 -:102C8000AF92BF92CF92DF92EF92FF920F931F937A -:102C9000CF93DF93CDB7DEB728970FB6F894DEBF9A -:102CA0000FBECDBF8E010F5F1F4F88E0F80111925C -:102CB0008A95E9F78FE4E82E81E0F82E680193E524 -:102CC000692E91E0792E88248394912CF7018191CB -:102CD0007F018F3F09F44BC0F894E82FE295EF7025 -:102CE000F0E021A18F70A40102C0440F551F8A9506 -:102CF000E2F7CA01922F982B91A392A18095892384 -:102D000082A3789400C0E3E5F1E030E020E0B12C4C -:102D1000A12C81918F3F09F47CC0A82FA295AF70A0 -:102D2000B0E090964C9150E08F7002C05595479559 -:102D30008A95E2F740FD6DC0C401022E02C0880FE3 -:102D4000991F0A94E2F7A82AB92A2F5F3F4F2C3027 -:102D50003105F9F6F701319780818F3F11F00E941C -:102D6000BF0850EA5A95F1F7F601B182A082F2E06D -:102D7000CF0ED11C6E147F0409F0A8CF48E050E0BC -:102D8000B8018AE492E00E94D331FF24F3940097C3 -:102D900009F4F12C892B09F43FC088E0F801AAE47A -:102DA000B2E001900D928A95E1F781E080933A02BA -:102DB0000E948806909339028093380280913802ED -:102DC000909139020E947906059750F180914A024C -:102DD00090914B0290937A028093790280914C02F9 -:102DE00090914D0290937C0280937B0280914E02E1 -:102DF00090914F0290937E0280937D0280915002C9 -:102E0000909151029093800280937F0210923A0237 -:102E100007C090E080E097CF80913A028111CECF39 -:102E200080914902882371F0809147029091480275 -:102E30000E947906893E934028F082EE0E94E10BC1 -:102E4000109249021091460280914502111185C0ED -:102E5000882309F45CC010921A0184E080931B015E -:102E600080931C018FE00E947B141092450281E048 -:102E70008093460280913F02882399F1809140021D -:102E800081112FC080913D0290913E020E947906EF -:102E900081369A4E78F080913B0290913C020196E7 -:102EA00090933C0280933B020E94880690933E02DE -:102EB00080933D0280913B0290913C024F9788F0B5 -:102EC00010921A018AE280931B0180931C018FE00B -:102ED0000E947B1481E08093400210923C02109289 -:102EE0003B028F2D28960FB6F894DEBF0FBECDBFE4 -:102EF000DF91CF911F910F91FF90EF90DF90CF90D6 -:102F0000BF90AF909F908F907F906F900895809129 -:102F10004402882379F086E180931A018AE1809344 -:102F20001B0184E080931C018FE00E947B141092AF -:102F300044029DCF809143028823A9F08AE18093C7 -:102F40001A018EE180931B0184E080931C018FE0C5 -:102F50000E947B14109243028ACF81112BC0809172 -:102F60004402811127C080914302811123C08091C6 -:102F70004102909142020E947906853F9140D0F033 -:102F8000112379F010921A018AE280931B01809339 -:102F90001C0181E20E947B148091400281110E94F9 -:102FA000AD1010924502109244021092430210920A -:102FB000460260CF109245021092440210924302E2 -:102FC00059CF90E080E00E94EE31893E9E4F11F48F -:102FD0000C94730F80E008951092340280911D01CB -:102FE000E2ECF1E0882359F08091A80287FF07C046 -:102FF0008EE1DF011D928A95E9F70C94A90B86E01A -:10300000F8CF1F93CF93DF93CDB7DEB7AA970FB654 -:10301000F894DEBF0FBECDBF84ED92E02091F100A9 -:10302000DC012D93CD01B2E08C3D9B07B9F7809177 -:10303000D502833009F471C0B8F4813009F448C076 -:10304000823009F4B2C08091E80083FF3AC18091D8 -:10305000D4029091D5029A3008F033C1E92FF0E004 -:10306000E458FD4C0C9495318A3009F48DC08B30B6 -:1030700009F470C0893039F78091D402813219F790 -:103080008091D8029091D902009711F00297D9F659 -:103090008091E800877F8093E8008091E80082FFBC -:1030A00037C08091F2009091F300029729F480914B -:1030B000F1008B7F813021F48091F1008093AF0289 -:1030C0008091E8008B778093E8000E946605BBCF73 -:1030D0008091D402813A09F0B6CF8091E800877FD1 -:1030E0008093E8008091D8029091D902892B61F4F5 -:1030F00060E280EB92E070E00E9419068091E800A7 -:103100008B778093E8009FCF60E090E080E0F3CF82 -:103110008091D2028111C1CF96CF8091D402813AA1 -:1031200009F091CF8091D8029091D902892B09F0B2 -:103130008ACF8091E800877F8093E8008091E80043 -:1031400080FFFCCF80911D018093F1008091E80009 -:103150008E77B9CF8091D402813209F074CF8091FB -:10316000D8029091D902892B09F06DCF8091E800A7 -:10317000877F8093E8000E9466058091D602809345 -:103180001D010E94EC175FCF8091D402813209F0BB -:103190005ACF8091E800877F8093E8000E946605FF -:1031A0008091D7028093AE024ECF8091D402813AB3 -:1031B00009F049CF8091E800877F8093E8008091F3 -:1031C000E80080FFFCCF8091AE02BECF803899F03E -:1031D000823809F076C08091D8028F70873008F06D -:1031E00070C08093E9008091EB0085FB882780F90F -:1031F0001092E90006C08091D0029091D102911105 -:1032000082609091E800977F9093E8008093F100AE -:103210001092F1008091E8008E77B5C1882309F4FF -:10322000A2C1823009F04DC08091D6028111A6C1A1 -:103230008091D8028F702FEF280F263008F041C000 -:103240008093E9002091EB0020FF98C1933031F486 -:103250008091EB0080628093EB0090C19091EB0035 -:1032600090619093EB0021E030E001C0220F8A953D -:10327000EAF72093EA001092EA008091EB00886060 -:10328000EACF81111EC01091D6021F778091E30012 -:103290008078812B8093E3008091E800877F809382 -:1032A000E8000E9466058091E80080FFFCCF8091D5 -:1032B000E30080688093E30082E0111183E0809353 -:1032C000D2028091E80083FF0AC08091E800877FE6 -:1032D0008093E8008091EB0080628093EB00AA96D7 -:1032E0000FB6F894DEBF0FBECDBFDF91CF911F9117 -:1032F00008958058823028F72091D6023091D70265 -:103300002C3DE3E03E07A1F583E08A838AE28983CE -:103310004FB7F894DE01139620E03EE051E2E32F30 -:10332000F0E050935700E49120FF03C0E295EF7066 -:103330003F5FEF708E2F90E0EA30C0F0C7968D931C -:103340009D932F5F243159F74FBF8091E800877F0D -:103350008093E8006AE270E0CE0101960E941906AF -:103360008091E8008B778093E800ABCFC096E7CFE1 -:103370008091D8029091D902432F552743305105AF -:1033800009F44AC078F54130510509F47AC08BE55B -:1033900090E0E6EBF8E04230510509F092CF209141 -:1033A000E800277F2093E8002091DA023091DB02C9 -:1033B0008217930708F49C0140E02115310509F0BC -:1033C00065C0411163C08091E80082FDC9CF809142 -:1033D000D202882329F2853019F28091E80083FF18 -:1033E000F2CFBECF4132510509F43CC04232510503 -:1033F00009F067CF8330910508F063CFFC01EE0F31 -:10340000FF1FEE54FE4F0190F081E02D81559E4F3D -:10341000DC018C9190E01AC0332721303105D1F0C6 -:103420002115310561F02230310509F04ACFE3E280 -:10343000F9E0E4918E2F90E0E3E2F9E007C0E1E4E7 -:10344000F9E0E4918E2F90E0E1E4F9E0009709F4CF -:1034500038CFA5CFEDE2F9E0E4918E2F90E0EDE2D8 -:10346000F9E0F4CF8330910508F02BCF880F991F36 -:10347000FC01E854FE4F0190F081E02D89E090E0DE -:103480008ECF82E190E0E1E1F9E089CF8091D20234 -:10349000882309F465CF853009F462CF8091E80074 -:1034A00083FD5ECF8091E80082FD8DCF8091E800A2 -:1034B00080FF83CF8091F2009091F30021153105B8 -:1034C00019F08830910550F041E0089709F040E08C -:1034D0008091E8008E778093E8006FCF449140930D -:1034E000F1003196215031090196E8CF803809F07A -:1034F000E8CE8091E800877F8093E8008091D30236 -:103500008093F10087CE8111DCCE1091D60212306B -:1035100008F0D7CE8091E800877F8093E800109371 -:10352000D3020E946605112311F084E005C080914A -:10353000E30087FDFACF81E08093D20242E061ECA4 -:1035400081E00E94850542E261EC84E00E948505ED -:1035500042E261EC82E00E94850542E260EC83E099 -:103560000E948505AECE8091D602813009F0A9CEA9 -:1035700081E0933009F080E08093D1021092E9005D -:103580008091E800877F8093E8000E94660599CECD -:103590003F924F925F926F927F928F929F92AF92E3 -:1035A000BF92CF92DF92EF92FF920F931F93CF9330 -:1035B000DF9300D000D00F92CDB7DEB78C01FC01B5 -:1035C00083819481892B31F08081918189238F3F80 -:1035D00009F052C60F900F900F900F900F90DF914F -:1035E000CF911F910F91FF90EF90DF90CF90BF9000 -:1035F000AF909F908F907F906F905F904F903F9093 -:1036000008950E94040FF82E682F89819A810E94E4 -:103610007D0B69817A818F2D0E94F70E7C01F80164 -:103620008281882309F41AC6970122513F4520312F -:10363000310508F0D2C58FEF97E00E94E031FEEE31 -:10364000EF0E57EE852E53E0952E882381F1809161 -:103650003102877009F4BECFF8018281882309F412 -:10366000B9CF82E00F900F900F900F900F90DF91E5 -:10367000CF911F910F91FF90EF90DF90CF90BF906F -:10368000AF909F908F907F906F905F904F903F9002 -:103690000C947415811428E09206C9F2C4010E94AA -:1036A000E031811101C0EA943FEF831A930AE110DF -:1036B000F1CF1C821B82442443944AE0342E7401CF -:1036C0004FEFE41AF40AC4010E94E03189831A82A0 -:1036D000882309F4BCCF9FEF980F933000F58A83BD -:1036E000498252E0850E911CC7010E94E0318B8314 -:1036F000882309F4ACCFCE0101967C01F70120812B -:103700002223E9F2213009F049C091818281913070 -:1037100041F4F2E0EF0EF11C0E94AA0D09C047012E -:10372000EACF923049F422E0E20EF11C0E94F50C3F -:103730003FEFE31AF30AE2CF933031F432E0E30EC5 -:10374000F11C0E94E10BF4CF943021F04FEFE41A0A -:10375000F40AEECF52E0E50EF11C30E020E0B701B4 -:103760006F5F7F4FF70141818053990B8A3091053C -:1037700050F021503109E0F28FE99FE00197F1F715 -:1037800000C00000F6CF329EF001339EF00D1124F0 -:103790009C012E0F3F1F842F7B01E1CFE22FF0E031 -:1037A000EA5DFD4F5490822F86958695869590E030 -:1037B000FC01EA5EFD4F64902770712C022E02C05E -:1037C000759467940A94E2F7E1E06E227724FC0195 -:1037D000EA5FFD4FA490B12C022E02C0B594A794CD -:1037E0000A94E2F7F1E0AF22BB24FC01EA50FE4F5D -:1037F000C490D12C02C0D594C7942A95E2F721E059 -:10380000C222DD246114710419F081EE0E94F50CCE -:10381000A114B10419F086EE0E94F50C852D0E94CA -:10382000AA0DAB2819F086EE0E94E10B672819F06B -:1038300081EE0E94E10BCD2809F47ACF8CE26CCFA7 -:1038400081E00E9490150E94541501CF81E00E94F2 -:103850006315F9CF82E0F5CFF3E8EF16FFE5FF0639 -:1038600009F4CCC024E8E2162FE5F20609F0D5C42D -:10387000882309F4ECCEF0903F02EE24E394FE247A -:10388000F0923F020E94880690933E0280933D0290 -:103890008091400210921A01882309F4BDC08AE287 -:1038A00080931B0180931C0181E20E947B140E9483 -:1038B000AD10E0923F021092400210923C02109232 -:1038C0003B02C5CE882309F481C080914902811151 -:1038D00006C081E08093490282EE0E94F50C0E94AE -:1038E000880690934802809347028BE20E94F50C71 -:1038F000F8018281882309F4D0C41092E002F2E03A -:10390000EF16FCE5FF0608F4ACC126E1E2162CE553 -:10391000F20630F0C7018A5F9C45099708F0A1C103 -:103920000E948C0F9093A9028093A80230E1E316C5 -:103930003CE5F30609F464C108F0E6C058E0E5167A -:103940005CE5F50609F44EC108F0AFC094E0E91655 -:103950009CE5F90609F43EC108F091C0F2E0EF16CB -:10396000FCE5FF0609F430C18091A802826023E0E3 -:10397000E2162CE5F20609F42AC16091A802F09043 -:10398000A90284E090E00E94F4316F2D82E290E081 -:103990000E94F4310E94EC175ACE8823A1F0809146 -:1039A0004902811106C081E08093490282EE0E94A3 -:1039B000F50C0E948806909348028093470281EE9E -:1039C0000E94F50C92CF81EE0E94E10B8BE20E94E7 -:1039D000E10B8ECF882309F48BCF81EE0E94F50C8A -:1039E00083EE0E94F50C8FE40E94F50C8FE40E9498 -:1039F000E10B83EE0E94E10B81EEE9CF882309F40D -:103A000077CF81EE0E94F50C83EE0E94F50C80E5E5 -:103A10000E94F50C80E5EBCF8AE280931B01809336 -:103A20001C0181E2FF2029F00E947B140E94AD104E -:103A300042CF0E947B143FCFE5EFEE16ECE5FE0689 -:103A4000B9F090F026EFE2162CE5F20609F050CF1F -:103A500027E245EE66EEFEC327E245EE65EEFAC3C9 -:103A600026E241EE60EEF6C327E245EE64EEF2C3D5 -:103A700026E241EE62EEEEC328E241E0EFCF809114 -:103A8000A802806136E0E3163CE5F30609F49FC026 -:103A90008091A802886047E0E4164CE5F40608F43B -:103AA00096C08091A802806292C08091A8028D7F0A -:103AB0005CE0E5165CE5F50609F489C078F48091D0 -:103AC000A8028C609AE0E9169CE5F90609F47FC02B -:103AD00008F48CC08091A8028E7F79C08091A802E2 -:103AE000877FFEE0EF16FCE5FF0609F470C08091C9 -:103AF000A8028B7F2FE0E2162CE5F20608F467C0DF -:103B00008091A8028F7E63C03BEFE3163CE5F3068D -:103B100009F464C068F553E1E5165CE5F50609F4BF -:103B200077C090F491E1E9169CE5F90609F46CC0C0 -:103B3000E2E1EE16ECE5FE0609F01FCF0E94EC175D -:103B40008091A8028F7743C0F5E1EF16FCE5FF06F0 -:103B500009F466C008F47AC08091A90281603AEF46 -:103B6000E3163CE5F30609F008CF8093A90205CFE0 -:103B70004FEFE4164CE5F40609F44EC088F48DEFDF -:103B8000E8168CE5F806C1F18091A9028E7F9EEFC0 -:103B9000E9169CE5F90648F38091A9028360E5CF18 -:103BA000E1E0EE16EDE5FE0609F459C008F444C064 -:103BB00060E022E0E2162DE5F20609F0DECE8EE0AE -:103BC00090E00E94F431D9CE8091A8028160809368 -:103BD000A802D3CE8091A8028460F9CF8091A90277 -:103BE0008260C3CF8091A8028064F1CF0E94EC175D -:103BF0008091A8028068EBCF8091A9028D7FB5CF1C -:103C00008091A8028F7DE3CF8091A8028F7BDFCFC8 -:103C10008091A802837FDBCF8091A9028C7FA5CF02 -:103C20008091A80282FB992790F921E0922790FBCE -:103C300082F990FB83F9CBCF8091A902982F9095C0 -:103C400091708E7F892B90FB81F98FCF0E94EC17AA -:103C50009091A802892F97FB87F98058B8CF61E02F -:103C6000AECF8091340236E1E3163CE5F30609F06D -:103C700021C38A7A91E009F490E09093E0018111E8 -:103C800006C089E20E94170B0E94A70AE0CC85E3D8 -:103C9000F9CF85E30CC380915F0380FF1BC08E7F4B -:103CA00080935F0360915F03709160038091610373 -:103CB000909162030E943813109298024FEF50E7E0 -:103CC00082E0415050408040E1F700C000000E9477 -:103CD000B00FBDCC816080935F0361E086950E9448 -:103CE0004014B5CC4FE955E168EA75E10E94CC0675 -:103CF000AECC48EA55E16FE975E1F8CF45E154E112 -:103D00006CE074E1F3CF44EF53E160E074E1EECF97 -:103D10004CED53E168EE73E1E9CF48EE53E16CED11 -:103D200073E1E4CF4FE254E16EE174E1DFCF61E093 -:103D300081E0D5CF65E082E00E94B21588CC68E0D2 -:103D400086E0FACF64E18FE0F7CF67E185E1F4CF59 -:103D500062E289E1F1CF61E083E2C1CF3BE5E316A6 -:103D60003DE5F30611F14CE5E4164DE5F40609F0E6 -:103D7000D3C28091A90282FB882780F991E089272C -:103D80000E94B70EC9C20E94EC175FEF84E39CE06B -:103D9000515080409040E1F700C000000E94D10CDB -:103DA0000E94D01554CC81E0EBCF80E0E9CFC70171 -:103DB0000E94550BD82EBFC22F2D2F70C22E8F2DD3 -:103DC000807F19F0C29490EFC922DD20C9F0CC2089 -:103DD00069F080E28E0D883010F081100BC0809168 -:103DE0003402C82AC09234020E94A70A8E2D0E9473 -:103DF000F50C19C080913302C82AC0923302F4CF67 -:103E00008E2D0E94E10BCC2071F0C09480E28E0DCB -:103E1000883010F081103EC080913402C822C092D8 -:103E200034020E94A70AE92DE850FF0B349720F4D2 -:103E30000E94C0060E94A114AA2009F4CBCB809155 -:103E4000310280FDC7CBF801128285958595859555 -:103E50000E949015C8010E94C81A80913102859570 -:103E6000859585950F900F900F900F900F90DF9193 -:103E7000CF911F910F91FF90EF90DF90CF90BF9067 -:103E8000AF909F908F907F906F905F904F903F90FA -:103E90000C94631580913302C822C0923302C1CFC3 -:103EA0003F2D3F70B32E8F2D807F803219F0B2945A -:103EB00080EFB822882071F041E0841681F1DD2086 -:103EC000D9F1CC2091F1F801858180FF8FCF8F70DF -:103ED00085832BC0DD20B1F0909135028B2D892B8D -:103EE000C11003C00E94D70B9ECF51E0C512FACF7C -:103EF0002091A90222FD97CF981709F494CF8093BF -:103F0000350291CFC11006C00E94A10A8B2D0E94DC -:103F1000CC0B89CF81E0C81609F485CFF5CFDD2021 -:103F200031F095E09C1508F47ECF8B2DDBCFE4E0DB -:103F3000EC1508F478CFEACFCC2041F3F9E38F12E7 -:103F400009C02FEF37EE43E0215030404040E1F709 -:103F500000C000008E2D0E94E10B65CF8F2D86954D -:103F60008695837061F0813009F05DCFC701937051 -:103F7000D11002C090E080E00E94940654CFC701A7 -:103F80009370D11002C090E080E00E94AA064BCF4F -:103F90008E2DDD2029F00E9463080E94810743CF07 -:103FA0000E94A807FACF8F2D837009F040C0D1106E -:103FB0003ACF4E2D429546954770440F440F8E2DB3 -:103FC0008F7090E0042E02C0880F991F0A94E2F7C8 -:103FD00030E020E0E4FE09C02FE030E002C0220F14 -:103FE000331F4A95E2F7209530954F2D469546951B -:103FF0004370423099F078F4609136027091370244 -:10400000413039F0822B932B862397230E94C60BD5 -:104010000ACF862B972B822B932BF8CF822B932BB7 -:10402000209136023091370282279327EFCF869571 -:10403000DD2011F08F2D8170882309F4F4CE4E2DF0 -:10404000429546954770440F440F8E2D8F7090E037 -:10405000042E02C0880F991F0A94E2F730E020E096 -:10406000E4FE09C02FE030E002C0220F331F4A9562 -:10407000E2F7209530954F2D469546954370423096 -:1040800099F078F46091DC027091DD02413039F0F2 -:10409000822B932B862397230E944C15C4CE862B0C -:1040A000972B822B932BF8CF822B932B2091DC0222 -:1040B0003091DD0282279327EFCF5F2D5F70F52EC1 -:1040C000DD2029F0852F0E9490158E2D0BCF8E2D8F -:1040D0000E94CC0B8F2D0E946315A5CE8E2D92EFE2 -:1040E000891609F449C0981570F0E0EF8E1639F181 -:1040F000F1EF8F16C9F1DD2009F45FC0C11076CE53 -:104100008F2D8F7136C023EF8216D9F134EF8312D1 -:10411000F2CFDD2009F446C0FF2DFF71FF2E8F2F57 -:104120000E9490158091A90282FD07C028E0F29EAE -:10413000C00111248360809331028F2D1AC0DD20CD -:1041400071F044E04C1508F46ECE2F2D2F7181E0F4 -:1041500090E002C0880F991F2A95E2F7A7CF55E09B -:104160005C1508F460CEF1CF8F2D8F71DD2009F43E -:10417000B2CF0E94901557CE8F2D8F71DD20C9F3DD -:10418000AACF90E080E0DD2009F486CF9F2D9F71BB -:1041900021E030E0F90102C0EE0FFF1F9A95E2F72F -:1041A000CF017ACF81E00E94741531E03C1508F010 -:1041B0003ACE82E00E94741536CECC2059F0893375 -:1041C00009F0C8CE4FEF57EE83E041505040804099 -:1041D000E1F7BECE8F2D8F717ECFF0E1EF16FFE5B8 -:1041E000FF0609F42DCB21E1E2162FE5F20609F4D2 -:1041F00031CB42E8E4164FE5F40609F4EBCB08F0C6 -:104200002BCB90E8E9169FE5F90609F45BCBE1E8D2 -:10421000EE16EFE5FE0609F4C0CB33EFE3163CE5FE -:10422000F30609F41DCC08F007CC58EDE5165CE563 -:10423000F50609F411CC89EDE8168CE5F80609F4C9 -:104240001BCC97EDE9169CE5F90609F051CB26E267 -:1042500041EE61EEC8010E94C70DF9C930E1E316D5 -:104260003FE5F30609F4F2CA41E1E4164FE5F4062E -:1042700009F0BFCF82E0EBCA85E0DE011196019024 -:104280000D928A95E1F7F801228189819A812111A5 -:10429000B8C90E94550BF82EBCC9F6E1EF16FCE533 -:1042A000FF06D1F58091E0018111F3CC89E20E94F3 -:1042B000EC0AEACC82722CECE2162CE5F20609F448 -:1042C00031CD08F0A7C046ECE4164CE5F40609F43D -:1042D00015CD08F076C093ECE9169CE5F90609F4D3 -:1042E00001CD08F05DC0F2ECEF16FCE5FF0609F425 -:1042F000D2CC9AE5E9169DE5F90609F454CD08F00B -:104300002DCDE114FCE5FF0609F43DCD2EEDE216BE -:104310002CE5F20609F444CDF8018281E080F180B9 -:10432000882309F444CDC7010E94040FD82E682FBA -:10433000C7010E947D0BB7018D2D0E94F70E0E94D0 -:1043400019097C01882EF801D280C580C2943FE013 -:10435000C322809131028770A1F0AD2CDD2091F055 -:104360008F2D807F803421F080E28E0D883048F0E0 -:1043700082E00E947415809131028770AA24A39470 -:104380008111A12C9F2C92942FE09222FBE0F91531 -:1043900008F449CDE92DF0E0EA57FD4C0C94953135 -:1043A00024ECE2162CE5F20609F4A3CC4CE054E12F -:1043B00065E174E135ECE3163CE5F30609F496CCCF -:1043C00098CF49ECE4164CE5F40609F4A1CC88F446 -:1043D00097ECE9169CE5F90609F495CC40E054E128 -:1043E00064EF73E1E8ECEE16ECE5FE0609F47ECC32 -:1043F00080CFFAECEF16FCE5FF0609F48ECC4EE117 -:1044000054E16FE274E12BECE2162CE5F20609F4BC -:104410006DCC6FCF31EDE3163CE5F30609F492CC99 -:10442000B8F45EECE5165CE5F50609F483CC08F417 -:104430007ECC9FECE9169CE5F90609F480CC6EE091 -:1044400089E0E0EDEE16ECE5FE0609F475CC51CFFF -:10445000F4EDEF16FCE5FF0609F47ACC78F432EDC2 -:10446000E3163CE5F30609F470CC61E088E143ED26 -:10447000E4164CE5F40609F432CC3BCF55EDE516D5 -:104480005CE5F50609F467CC8DE5E816F80609F455 -:10449000DEC82FCF1F93CF93DF938091FE01807FE3 -:1044A000A9F48091FB01882389F080913002D0919A -:1044B000FF016091F9017091FA01A091FC01B091A6 -:1044C000FD01C62FC72316E0D81304C0DF91CF919A -:1044D0001F91089590E0109711F0CF3F19F40196C5 -:1044E0008770F2CF189F9001199F300D1124F901A8 -:1044F000E050FE4F41814713F2CF40814613EFCF8A -:1045000042814111ECCF438154814A1B5B0B483CF3 -:10451000510528F78091FE018F7080618093FE0124 -:10452000F901EB5FFD4F80818F708061808389EF9F -:1045300091E00E94C81ADF91CF911F910C944B0B10 -:10454000AF92BF92CF92DF92EF92FF920F931F93A1 -:10455000CF93DF93CDB7DEB761970FB6F894DEBF88 -:104560000FBECDBF8C0185E0F801DE011D960190E4 -:104570000D928A95E1F7F801E28089EFA82E81E09B -:10458000B82E6091FC017091FD016115710509F46F -:1045900032C19091F9014091FA01892F84238F3F14 -:1045A00009F429C120813181C380D480F090FB01BE -:1045B000F601E61BF70BFF2009F4E8C08091FE012D -:1045C000582F507FE83CF10508F0ABC0511177C07F -:1045D000FE2C431321C092131FC0E1101DC08F7029 -:1045E00080618093FE01C5010E94C81A8091FE017E -:1045F000F80185838F2D61960FB6F894DEBF0FBE4C -:10460000CDBFDF91CF911F910F91FF90EF90DF9081 -:10461000CF90BF90AF900895CD2829F0822F8323AB -:104620008F3F09F003C180E0F82FF170DF2E80FF8B -:104630003CC0809130024091FF0156E0841315C0C8 -:104640002D873E878D859E850E94400F292F2295BC -:104650002F702230F0F0243018F59F70F1F0F8013F -:104660009581907FD1F4D12C1EC090E0589FF0012D -:10467000599FF00D1124E050FE4F6181361306C0A2 -:104680006081261303C06281E6120FC00196877015 -:10469000D5CF9F7011F0882331F3805E883018F3F6 -:1046A000C8010E94C81AFD2CA5CFEE2009F4A2CFA4 -:1046B0008091FE0181608093FE01F12C9BCF43131A -:1046C00006C0921304C0F801EE2009F479C0C801B5 -:1046D0000E944C0F882309F1EE20F9F08091FE0131 -:1046E000803270F02091F9013091FA0138872F83E0 -:1046F0001986DB86CA868C87CE0107960E94C81A67 -:1047000086E0F801A9EFB1E001900D928A95E1F7FA -:104710000E944A22FF24F3946DCFC8010E94C81A58 -:10472000F9CF51110AC089EF91E00E94C81A86E0C2 -:10473000F50111928A95E9F7C0CF43130FC0921388 -:104740000DC0E1100BC0F8018583C8010E94C81A92 -:1047500086E0F50111928A95E9F74CCFC8010E94D5 -:104760004C0F8823D1F2EE20C1F28091FE018032FD -:1047700038F22091F9013091FA013A8329831B82A2 -:10478000DD82CC828E83CE010196B8CFE83CF10564 -:10479000F8F6FE2CEE2009F243131FC092131DC041 -:1047A0008091FE0180FD10C0982F907F69F0F80184 -:1047B0008583903F31F0982F907F905F8F70892B89 -:1047C0008583C8010E94C81A86E0F801A9EFB1E00C -:1047D00001900D928A95E1F70DCFC8010E944C0F10 -:1047E00081118ECF8091FE0181608093FE01C8010E -:1047F0000E94C81AFFCEEE2009F48FCFC8010E9494 -:104800004C0FF82E882309F488CF86E0F801A9EF31 -:10481000B1E001900D928A95E1F78091F9019091B4 -:10482000FA010E94400F0E944A22E4CE81E08E25C8 -:10483000FBCE1F93CF93DF93CDB7DEB767970FB64D -:10484000F894DEBF0FBECDBF4B8B5C8B6D8B7E8B28 -:104850008F8B6111109233021A8A198A85E0FE014A -:104860007396DE011D9601900D928A95E1F786E020 -:10487000FE013D96DE01179601900D928A95E1F7B3 -:10488000CE0107960E94A022882389F016E080912D -:1048900030029091FF01891349C067960FB6F894D2 -:1048A000DEBF0FBECDBFDF91CF911F91089586E08F -:1048B000FE013796DE01119601900D928A95E1F77F -:1048C0008A859B85892B11F38F81988589238F3F5A -:1048D000E9F22091FF0130E0C90101968770992724 -:1048E000409130024817190671F40E94EC1710929B -:1048F000FF011092300286E0E9EFF1E0DF011D9246 -:104900008A95E9F7C3CF96E0929FD001939FB00DAF -:104910001124A050BE4FFE01319601900D929A9540 -:10492000E1F78093FF010E944B0BB0CF819FC00144 -:10493000112480509E4F0E94A022882309F4ADCFFD -:104940008091300290E00196877099278093300221 -:104950009ECFFF920F931F93CF93DF93CDB7DEB718 -:10496000C45BD1090FB6F894DEBF0FBECDBF182FC0 -:104970008111D7C0662309F475C0C055DF4F188276 -:10498000C05BD040CF54DF4F1882C15BD04011E0F4 -:10499000CE54DF4F1883C25BD0400E9488068160EE -:1049A000782FCD54DF4F99838883C35BD040C055A7 -:1049B000DF4F4881C05BD040CF54DF4F5881C15B8F -:1049C000D040CE54DF4F6881C25BD040CC54DF4F23 -:1049D0008881C45BD0400E941924C555DF4F1882DE -:1049E000CB5AD040C455DF4F1882CC5AD040C35563 -:1049F000DF4F1882CD5AD0400E9488068160782F00 -:104A0000C255DF4F99838883CE5AD040C555DF4FBA -:104A10004881CB5AD040C455DF4F5881CC5AD04042 -:104A2000C355DF4F6881CD5AD040C155DF4F8881D3 -:104A3000CF5AD0400E941924109345020E94880644 -:104A4000909342028093410281E0CC54DF4F0FB635 -:104A5000F894DEBF0FBECDBFDF91CF911F910F91B4 -:104A6000FF90089502E0CA55DF4F0883C65AD04030 -:104A7000C955DF4F1882C75AD04011E0C855DF4FE3 -:104A80001883C85AD0400E9488068160782FC75585 -:104A9000DF4F99838883C95AD040CA55DF4F488178 -:104AA000C65AD040C955DF4F5881C75AD040C85563 -:104AB000DF4F6881C85AD040C655DF4F8881CA5A37 -:104AC000D0400E941924CF55DF4F0883C15AD040EF -:104AD000CE55DF4F1882C25AD040CD55DF4F1882D5 -:104AE000C35AD0400E9488068160782FCC55DF4F92 -:104AF00099838883C45AD040CF55DF4F4881C15A2B -:104B0000D040CE55DF4F5881C25AD040CD55DF4FEF -:104B10006881C35AD040CB55DF4F8881C55AD040F9 -:104B200089CF813009F0C0C0662309F45FC0C45644 -:104B3000DF4F1882CC59D040C356DF4F8883CD5900 -:104B4000D040C256DF4F8883CE59D0400E9488069D -:104B50008160782FC156DF4F99838883CF59D04029 -:104B6000C456DF4F4881CC59D040C356DF4F5881DF -:104B7000CD59D040C256DF4F6881CE59D040C05683 -:104B8000DF4F8881C05AD0400E941924C956DF4F98 -:104B90001882C759D040C856DF4F1883C859D04033 -:104BA000C756DF4F1882C959D0400E9488068160DD -:104BB000782FC656DF4F99838883CA59D040C9568B -:104BC000DF4F4881C759D040C856DF4F5881C85978 -:104BD000D040C756DF4F6881C959D040C556DF4F16 -:104BE0008881CB59D0400E9419242ECF02E0CE56A6 -:104BF000DF4F0883C259D040CD56DF4F8883C35959 -:104C0000D040CC56DF4F8883C459D0400E948806DC -:104C10008160782FCB56DF4F99838883C559D04068 -:104C2000CE56DF4F4881C259D040CD56DF4F588114 -:104C3000C359D040CC56DF4F6881C459D040CA56C2 -:104C4000DF4F8881C659D0400E941924C357DF4FD7 -:104C50000883CD58D040C257DF4F1883CE58D0407C -:104C6000C157DF4F1882CF58D0400E94880681601C -:104C7000782FC057DF4F99838883C059D040C357DE -:104C8000DF4F4881CD58D040C257DF4F5881CE58B2 -:104C9000D040C157DF4F6881CF58D040CF56DF4F4B -:104CA0008881C159D0409FCF823009F0ABC06623C4 -:104CB00009F45EC0C857DF4F1882C858D040C757A4 -:104CC000DF4F8883C958D04081E0C657DF4F8883C3 -:104CD000CA58D0400E9488068160782FC557DF4FA0 -:104CE00099838883CB58D040C857DF4F4881C85834 -:104CF000D040C757DF4F5881C958D040C657DF4F03 -:104D00006881CA58D040C457DF4F8881CC58D04002 -:104D10000E941924CD57DF4F1882C358D040CC577A -:104D2000DF4F1883C458D040CB57DF4F1882C55887 -:104D3000D0400E9488068160782FCA57DF4F998340 -:104D40008883C658D040CD57DF4F4881C358D040E4 -:104D5000CC57DF4F5881C458D040CB57DF4F6881C4 -:104D6000C558D040C957DF4F8881C758D0403BCF86 -:104D7000EF968FAFEF97C158DF4F8883CF57D04062 -:104D800081E0C058DF4F8883C058D0400E94880619 -:104D90008160782FCF57DF4F99838883C158D040E7 -:104DA000EF964FADEF97C158DF4F5881CF57D040A6 -:104DB000C058DF4F6881C058D040CE57DF4F888140 -:104DC000C258D0400E941924EA961FAFEA97EB968A -:104DD0001FAFEB97EC961FAEEC970E9488068160A0 -:104DE000782FEE969FAF8EAFEE97EA964FADEA978B -:104DF000EB965FADEB97EC966FADEC97EE968FADC3 -:104E0000EE97F1CE833009F081C0662309F43FC0EC -:104E100019E0E5961FAFE597E6961FAEE69781E0AD -:104E2000E7968FAFE7970E9488068160782FE99612 -:104E30009FAF8EAFE997E5964FADE597E6965FADEC -:104E4000E697E7966FADE797E9968FADE9970E94F1 -:104E50001924E0961FAFE097E1961FAEE197E29626 -:104E60001FAEE2970E9488068160782FE4969FAF7C -:104E70008EAFE497E0964FADE097E1965FADE19796 -:104E8000E2966FADE297E4968FADE497ACCE1BE06F -:104E9000AB961FAFAB97AC961FAEAC9781E0AD96CB -:104EA0008FAFAD970E9488068160782FAF969FAF35 -:104EB0008EAFAF97AB964FADAB97AC965FADAC975F -:104EC000AD966FADAD97AF968FADAF970E94192499 -:104ED000A6961FAFA697A7961FAEA797A8961FAE38 -:104EE000A8970E9488068160782FAA969FAF8EAF00 -:104EF000AA97A6964FADA697A7965FADA797A89637 -:104F00006FADA897AA968FADAA976DCE843009F0A1 -:104F100081C0662309F43FC009E0A1960FAFA197B5 -:104F200011E0A2961FAFA297A3961FAFA3970E946E -:104F300088068160782FA5969FAF8EAFA597A19622 -:104F40004FADA197A2965FADA297A3966FADA39721 -:104F5000A5968FADA5970E9419246C960FAF6C97FC -:104F60006D961FAF6D976E961FAE6E970E94880666 -:104F70008160782FA0969FAF8EAFA0976C964FADB3 -:104F80006C976D965FAD6D976E966FAD6E97A096B0 -:104F90008FADA09728CE0BE067960FAF679711E013 -:104FA00068961FAF689769961FAF69970E94880639 -:104FB0008160782F6B969FAF8EAF6B9767964FADE2 -:104FC000679768965FAD689769966FAD69976B96BE -:104FD0008FAD6B970E94192462960FAF629763960C -:104FE0001FAF639764961FAE64970E948806816026 -:104FF000782F66969FAF8EAF669762964FAD629799 -:1050000063965FAD639764966FAD649766968FAD58 -:105010006697E9CD853009F07DC0662309F445C067 -:1050200039E0F32E2D96FFAE2D9702E02E960FAFAE -:105030002E9711E02F961FAF2F970E948806816050 -:10504000782F61969FAF8EAF61972D964FAD2D97BC -:105050002E965FAD2E972F966FAD2F9761968FADE1 -:1050600061970E9419242896FFAE289729960FAFC2 -:1050700029972A961FAE2A970E9488068160782F6A -:105080002C969FAF8EAF2C9728964FAD28972996D8 -:105090005FAD29972A966FAD2A972C968FAD2C97E6 -:1050A0000E94192410934402C9CC2BE0F22E2396BF -:1050B000FFAE239702E024960FAF249711E02596C8 -:1050C0001FAF25970E9488068160782F27969FAF93 -:1050D0008EAF279723964FAD239724965FAD2497E5 -:1050E00025966FAD259727968FAD27970E94192497 -:1050F000FDAE0EAF1FAE0E9488068160782F22960B -:105100009FAF8EAF22974DAD5EAD6FAD22968FAD46 -:105110002297C6CF863009F048C0662329F199E06E -:10512000F92EF8AE03E009AF11E01AAF0E9488062D -:105130008160782F9CAF8BAF48AD59AD6AAD8CAD17 -:105140000E941924FBAA0CAB1DAA0E94880681604C -:10515000782F9FAB8EAB4BA95CA96DA98FA90E943C -:105160001924109343026ACC8BE0F82EFEA603E0CC -:105170000FA711E018AB0E9488068160782F9AABC8 -:1051800089AB4EA55FA568A98AA90E941924F9A632 -:105190000AA71BA60E9488068160782F9DA78CA76E -:1051A00049A55AA56BA58DA5DACF873009F041C076 -:1051B0006623F9F013E01CA31DA381E08EA30E94D7 -:1051C00088068160782F98A78FA34CA15DA16EA15E -:1051D00088A50E9419241F8F18A319A20E9488066F -:1051E0008160782F9BA38AA34F8D58A169A18BA1C1 -:1051F000FACC05E00A8F13E01B8F81E08C8F0E94B0 -:1052000088068160782F9E8F8D8F4A8D5B8D6C8D87 -:105210008E8D0E9419240D8B1E8B1F8A0E9488067A -:105220008160782F998F888F4D895E896F89898DEC -:10523000DACC883009F008CC662301F106E0088B4F -:1052400013E0198B81E08A8B0E9488068160782F99 -:105250009C8B8B8B488959896A898C890E94192477 -:105260000B871C871D860E9488068160782F9F8788 -:105270008E874B855C856D858F85B5CC08E00E8368 -:1052800013E01F8381E088870E9488068160782F61 -:105290009A8789874E815F8168858A850E94192453 -:1052A00009831A831B820E9488068160782F9D8360 -:1052B0008C8349815A816B818D8195CC1F920F928D -:1052C0000FB60F9211242F933F934F935F936F93D9 -:1052D0007F938F939F93AF93BF93CF93DF93EF937E -:1052E000FF93D091E900DF708091EC00C82FC1706E -:1052F00080FDC0E81092E9008091F000877F8093E4 -:10530000F00078940E9401181092E9008091F0005A -:1053100088608093F000CD2BCF70C093E900FF919F -:10532000EF91DF91CF91BF91AF919F918F917F913D -:105330006F915F914F913F912F910F900FBE0F9002 -:105340001F9018951F920F920FB60F9211242F9352 -:105350003F934F935F936F937F938F939F93AF93FD -:10536000BF93EF93FF938091E10082FF09C080918A -:10537000E20082FF05C08091E1008B7F8093E10015 -:105380008091DA0080FF24C08091D80080FF20C087 -:105390008091DA008E7F8093DA008091D90080FFBF -:1053A0009BC088E189BD8AE189BD09B400FEFDCFBB -:1053B00081E08093D2028091AD02811109C00E94E8 -:1053C000EC040E94B7058091E20084608093E200C3 -:1053D0008091E10080FF17C08091E20080FF13C040 -:1053E0008091E2008E7F8093E2008091E2008061F4 -:1053F0008093E2008091D80080628093D80019BC2D -:1054000085E08093D2028091E10084FF29C08091E1 -:10541000E20084FF25C088E189BD8AE189BD89B5A4 -:10542000982F917080FFFBCF8091D8008F7D809363 -:10543000D8008091E1008F7E8093E1008091E200AE -:105440008F7E8093E2008091E20081608093E20091 -:105450008091D302882309F445C084E08093D2026E -:105460008091E10083FF27C08091E20083FF23C089 -:105470008091E100877F8093E10082E08093D202F7 -:105480001092D3028091E1008E7F8093E1008091A1 -:10549000E2008E7F8093E2008091E2008061809341 -:1054A000E20042E060E080E00E9485058091F0002B -:1054B00088608093F000FF91EF91BF91AF919F9131 -:1054C0008F917F916F915F914F913F912F910F90AD -:1054D0000FBE0F901F90189519BC1092D202109217 -:1054E000AD0276CF8091E30087FD93E09093D202E6 -:1054F000B7CF78941F921FB61F9211248F939F935A -:10550000AF93BF938091A4029091A502A091A602AF -:10551000B091A7020196A11DB11D8093A4029093A2 -:10552000A502A093A602B093A702BF91AF919F914D -:105530008F911F901FBE1F9018951F921FB61F922C -:1055400011248F939F93AF93BF938091A3028111F6 -:1055500013C08091A4029091A502A091A602B091DF -:10556000A7024196A11DB11D8093A4029093A502AC -:10557000A093A602B093A702BF91AF919F918F9184 -:105580001F901FBE1F901895CDB7DEB7AA970FB614 -:10559000F894DEBF0FBECDBF84B7877F84BF0FB640 -:1055A000F894A895809160008861809360001092C3 -:1055B00060000FBE80E890E00FB6F8948093610021 -:1055C000909361000FBE85B7806885BF85B78068FE -:1055D00085BF8DEB98E09093BF018093BE010E9440 -:1055E000EC040E94B7058091E20084608093E200A1 -:1055F00078948091D2028823A1F01091E9001F7065 -:105600009091EC00892F817090FD80E8182B10920A -:10561000E9008091E80083FD0E9401181F7010933B -:10562000E90082E084BD93E095BD9AEF97BD809339 -:105630006E000E94730F811102C00E94A80E80EFBD -:105640000E94BF0881EF0E94BF0882EF0E94BF083E -:1056500083EF0E94BF0803E511E06FE5E62E61E0ED -:10566000F62ED8018D918D018F3F11F00E94BF0859 -:10567000E016F106B1F710924B0210924A02109216 -:105680007A021092790210924D0210924C021092FE -:105690007C0210927B0210924F0210924E021092E6 -:1056A0007E0210927D0210925102109250021092CE -:1056B000800210927F020E94E117811102C00E94B5 -:1056C000D01582E090E00E94E031809370020E9449 -:1056D0008C0F9093A9028093A8020E943C16EFE3DE -:1056E000FCE93197F1F700C000000E943C16809160 -:1056F000790280FF08C06FEF7FEF90E080E00E94AA -:1057000012320E94D10C83E090E00E94E03190E0E0 -:105710000E94C60B8091DC029091DD020E94B914B8 -:1057200080915202811132C00E94E117811104C0A0 -:105730000E94D0150E94C01588E090E00E94E831D8 -:1057400060935F037093600380936103909362039F -:105750006E7F71F40E94C01588E090E00E94E831ED -:1057600060935F037093600380936103909362037F -:105770000E94D2061092980280915F0380FF03C0BE -:1057800086950E947B1481E0809352026AE871E062 -:1057900056E6852E52E0952E28E731E0E1E8F1E06B -:1057A00041E050E01191812F82958F7090E0DC01F3 -:1057B0009196FC9091971F70E12E6A0101C0CC0C6C -:1057C0001A95EAF70C2D00950F2191960C9391975D -:1057D00092961C9192971C2992961C93D901FD9048 -:1057E0009D010F2D02950F7010E0D8019196BC908D -:1057F000BF2DBF70FB2E6A0101C0CC0CBA95EAF731 -:10580000DC2CD094DB20D8019196DC929197929673 -:10581000DC909297DC289296DC92DC0190968C9139 -:1058200090E002C095958795EA94E2F78170D801DF -:1058300090960C9110E002C015950795FA94E2F746 -:1058400090E000FD92E0892BD4018D934D016E17FD -:105850007F0709F0A7CF86EA92E0909390028093A9 -:105860008F0281E20E947B1481E090E00E944C153F -:1058700080E091E09093A00280939F028091D202F9 -:10588000FF24F39408E11AE1853009F47CC20E94F8 -:105890003C16882359F08FB7F8944091A402509198 -:1058A000A5026091A6027091A7028FBFA9E7B2E09E -:1058B000E1E7F2E010E000E0702F8D919D912191E1 -:1058C00031912817390709F487C22827392760E062 -:1058D000EE24E394F12CA9014E215F21452B09F41C -:1058E00075C269A37AA39C012E213F2191E0232B4D -:1058F00009F490E09BA30E9488068160782F9DA305 -:105900008CA349A15AA16BA18DA10E941924000F5B -:10591000111FF801EF58FD4F80819181E826F9268B -:10592000F182E082809198028823D1F180919702E0 -:10593000E0915F03E695E81BE0939302823009F063 -:1059400062C2F0E0EC53FD4FE4910E2F10E044E210 -:10595000E42E43E1F42E80919402882361F01092AA -:1059600094020E9488069093920280939102109272 -:105970009602109295020E948806E0919102F091A1 -:1059800092028E1B9F0B8F3F9F4750F4E00FF11F39 -:10599000F0939202E093910281E992E0F701099578 -:1059A0003DE5E32E32E0F32E04E512E04FE6442E0F -:1059B00041E0542E58E7652E51E0752E61E8862EA1 -:1059C00061E0962E76E6A72E72E0B72E212C312CC0 -:1059D000D501ED915D01EE0FEE0FD4012D914D013A -:1059E000A22FA295AF70B0E090968C9190E02F70AE -:1059F00002C0959587952A95E2F781709927D30182 -:105A00004D913D01A42FA295AF70B0E090962C91DE -:105A100030E04F7002C0359527954A95E2F7A9010D -:105A20004170552720FF02C042E050E0842BE82B54 -:105A3000D5011197EC93D201CD902D01EF70F0E0DC -:105A4000E15AFE4F8081F7019081890F8083D12C2C -:105A5000082E000C990B20E08C159D054CF0D80108 -:105A60008C918F5F8C9360E0832D0E94A92421E0AC -:105A7000F7018081082E000C990B442755274C19FB -:105A80005D09481759074CF0D8018C9181508C93CF -:105A900061E0832D0E94A92421E0F7018081082E76 -:105AA000000C990BB6010E948131D7018D937D01C5 -:105AB000222A33940F5F1F4FB9E03B1289CF222077 -:105AC00059F08FB7F8944091A4025091A5026091CB -:105AD000A6027091A7028FBF86E0E8E8F2E0DE013F -:105AE000119601900D928A95E1F7F0908A02E0906C -:105AF0008B0210918C0200918D0210928A021092FA -:105B00008B0210928C0210928D028F2D8E2909F437 -:105B100048C080918602909187020E9479069C017C -:105B200090918202992309F4C5C323333105C8F14A -:105B30009F3F19F09F5F90938202FF2059F00E94CF -:105B400043089FEF1F140CF491E0899F802D1124CE -:105B500080938A02EE2059F00E9443089FEF1E14A2 -:105B60000CF491E0899F802D112480938B02309159 -:105B70008A023323B1F020918B02222391F045EB6E -:105B80003403C0011124992309F497C190938A0228 -:105B900045EB240390011124332309F492C130937F -:105BA0008B02812F802B09F448C080918402909150 -:105BB00085020E9479069C0190918102992309F443 -:105BC00074C325363105C8F19F3F19F09F5F90934C -:105BD0008102112359F00E9421089FEF11160CF445 -:105BE00091E0899F802D112480938C02002359F02D -:105BF0000E9421089FEF10160CF491E0899F802DE0 -:105C0000112480938D0230918C023323B1F02091C6 -:105C10008D02222391F045EB3403C0011124992316 -:105C200009F453C190938C0245EB24039001112495 -:105C3000332309F44EC130938D0280918A029091F2 -:105C40008B02892B90918C02892B90918D02892B4C -:105C500011F00E94810786E0FE013196A8E8B2E0CB -:105C600001900D928A95E1F70E94C00690916F0213 -:105C7000891731F00E94C00680936F020E94A11420 -:105C80008091D202843009F0F9CD83E08093E9005D -:105C90008091E80082FFF2CD8091E80090E085FFDE -:105CA00006C00E940B05882309F417C191E080917A -:105CB000E8008B778093E800992309F4DFCDE98130 -:105CC000E150E33108F09DC1F0E0EE56FD4C0C943C -:105CD00095318091D202843009F443C080E00E9463 -:105CE000A1141092980280918E02811116C0F09238 -:105CF0008E0280915F03982F9170909353028E7F54 -:105D000080935F03BFEFE0E7F2E0B150E040F04086 -:105D1000E1F700C000000E94B00F1092A30288E1DA -:105D200090E0A0E40FB6F894A895809360000FBEB1 -:105D3000A093600083B7817F846083BF83B7816055 -:105D400083BF7894889583B78E7F83BF0FB6F8940E -:105D5000A895809160008861809360001092600037 -:105D60000FBE8091D102882371F00E943C16E9E7B2 -:105D7000F2E081919191892B09F078C281E892E05B -:105D80008E179F07B1F78091D202853009F4A1CF19 -:105D90000E94EC170E94C0060E94A11410928E026D -:105DA00080915302882359F080915F038160809332 -:105DB0005F0386950E947B140E949A0F68CD8091A4 -:105DC00099028823C9F30E94B00FF6CF6F5FEE0CE3 -:105DD000FF1C6C3009F07FCD0F5F1F4F04301105A1 -:105DE00009F06ACD8FEF8EA38FA318A60E948806B4 -:105DF0008160782F9AA789A74EA15FA168A58AA57F -:105E00000E9419248FCD863059F4F0E0EF53FD4FF6 -:105E1000E4910E2F10E034E1E32E33E1F32E9BCD1D -:105E2000893061F4E695F0E0E254FD4FE4910E2FE5 -:105E300010E025E6E22E22E1F22E8DCD8F3061F4C6 -:105E4000E695F0E0E554FD4FE4910E2F10E090E16F -:105E5000E92E92E1F92E7FCD853159F4F0E0E85436 -:105E6000FD4FE4910E2F10E08DE9E82E81E1F82E30 -:105E700072CD08E210E0FDE0EF2EF1E1FF2E883157 -:105E800009F469CD833249F4E6EBF2E0059114910F -:105E9000BBEBEB2EB2E1FB2E5ECD04EF11E0A0EDEB -:105EA000EA2EA0E1FA2E843209F455CD00ED17E078 -:105EB000E1EDEE2EE6E0FE2E4ECD81E080938A02EB -:105EC00067CE81E080938B026CCE81E080938C0260 -:105ED000ABCE81E080938D02B0CE00E210E0CE0127 -:105EE00001967C018091E80085FD0AC08091E80060 -:105EF0008B778093E8000E940B05882399F3D6CE18 -:105F00008091F100D7018D937D010150110951F766 -:105F1000CDCE1A8289E08B833FC08A81823009F41A -:105F2000BBC18330A9F0813009F06BC02FB7F89462 -:105F30006091A4027091A5028091A6029091A7029F -:105F40002FBF0E949B316B837C838D839E8324C0F3 -:105F50008091790290917A029827892798279C83CB -:105F60008B8380917B0290917C02982789279827C8 -:105F70009E838D8380917D0290917E029827892750 -:105F8000982798878F8380917F029091800298272D -:105F9000892798279A8789878091D202843009F0CF -:105FA0006DCC1091E9001F709091EC00892F8170E9 -:105FB00090FD80E8182B82E08093E9008091E80052 -:105FC00080FF0DC050E040E060E270E0CE0101963D -:105FD0000E943C058091E8008E778093E8001F7056 -:105FE0001093E9004BCC8A81823059F46B817C811B -:105FF0008D819E810E949B3186E290E00E94F43167 -:10600000CBCF8FEF8983C8CF4C816B818A810E946F -:10601000D10E9827892798279E838D83BDCFED8049 -:10602000FE80FE24EF24FE248A810B81B8E10B9FC1 -:1060300080011124E0E68E9F000D111D11248C813A -:1060400090E0880F991F080F191F6F2DC8018796C0 -:106050000E94F4316E2DC8018896D0CF0E943B0E6D -:106060009BCF8A818138C1F060F4803809F094CFE9 -:1060700020E04B8160916103809160030E944A138C -:106080008BCF823849F1833809F086CF20E04091E8 -:1060900062036C818B81F2CF8B810E947B149B8188 -:1060A00080915F03911111C08E7F80935F031092E6 -:1060B0009802FFEF20E742E0F15020404040E1F736 -:1060C00000C000000E94B00F67CF816080935F0323 -:1060D00086950E947B1460CF8B81809363035CCF95 -:1060E0008A81813899F030F4803809F055CF809159 -:1060F000620311CF823891F0833809F04DCF80913F -:1061000060038B83809161038C8346CF80915F0312 -:1061100080FF02C08695FFCE80E0FDCE80916303B4 -:10612000FACE60915F03709160038091610390915A -:1061300062030E94381330CF80E18A832DCF84E040 -:106140008A8389E1E8CE0A811B8110270127102765 -:10615000CE0101966C01EC80DC01AE0DB11D7D011C -:10616000C80189519C4FEC14FD0409F415CF093185 -:10617000B4E01B0750F40E94E031F60184830F5F06 -:106180001F4FBFEFCB1ADB0AEBCFD60114961C9240 -:10619000F6CF0A811B81102701271027FE013196B7 -:1061A0006F01EC80E00EF12EF11CC80189519C4F6B -:1061B000E016F10609F4F0CE0931F4E01F0728F4E7 -:1061C000D60114966C910E94F431BFEFCB1ADB0A12 -:1061D0000F5F1F4FEACF0E942B0EDECE8AE0ADCFBD -:1061E0000A811B81102701271027FE0131966F01BC -:1061F000EC80CF018E0D911D7C01C8018796EC14B7 -:10620000FD0409F4C9CE003CA3E01A0750F40E9433 -:10621000E031F60184830F5F1F4FBFEFCB1ADB0A1B -:10622000ECCFD60114961C92F6CF0A811B81102761 -:1062300001271027FE0131966F01EC80E00EF12E50 -:10624000F11CC8018796E016F10609F4A5CE003CC2 -:10625000F3E01F0728F4D60114966C910E94F431E4 -:10626000BFEFCB1ADB0A0F5F1F4FEBCF09BD19BD84 -:1062700009B400FEFDCF8091D8008F7D8093D800B7 -:106280008091E00082608093E0008091E00081FDD9 -:10629000FCCF0E94EC1777CD86E290E00E94E031BF -:1062A0001B821C821D828E8377CE2D32314008F0F6 -:1062B0008DCCC3CC2D32314008F03CCC72CC87FB66 -:1062C000082E062687FD819567FD61950E94B131F4 -:1062D0000EF4919507FC81950895AA1BBB1B51E113 -:1062E00007C0AA1FBB1FA617B70710F0A61BB70B46 -:1062F000881F991F5A95A9F780959095BC01CD01EB -:10630000089597FB072E16F4009407D077FD09D067 -:106310000E946D3107FC05D03EF4909581959F4F0A -:106320000895709561957F4F0895EE0FFF1F0590BA -:10633000F491E02D09946927962769277827872704 -:10634000782708950E945D32332312F48A1B9B0B39 -:106350000C94AC310E945D32B7FF0895821B930B01 -:106360000895991B79E004C0991F961708F0961BB1 -:10637000881F7A95C9F780950895FB01DC0102C05A -:1063800005900D9241505040D8F70895FC014150BE -:10639000504030F001900616D1F73197CF010895A3 -:1063A000882799270895FB01DC0104C08D91019095 -:1063B000801921F441505040C8F7881B990B08956B -:1063C000F999FECF92BD81BDF89A992780B50895BD -:1063D000A6E1B0E044E050E00C941A32A8E1B0E04D -:1063E00042E050E00C941A32262FF999FECF92BD6C -:1063F00081BDF89A019700B4021639F01FBA20BD8A -:106400000FB6F894FA9AF99A0FBE08950396272FBB -:106410000E94F5310E94F431252F0E94F531242F7E -:106420000C94F5310196272F0E94F5310C94F4312C -:10643000DC01CB01FC01F999FECF06C0F2BDE1BD44 -:10644000F89A319600B40D9241505040B8F7089533 -:106450000E945D32A59F900DB49F900DA49F800D6A -:10646000911D11240895B7FF0C9428320E94283200 -:10647000821B930B0895A1E21A2EAA1BBB1BFD01E0 -:106480000DC0AA1FBB1FEE1FFF1FA217B307E40713 -:10649000F50720F0A21BB30BE40BF50B661F771F6B -:1064A000881F991F1A9469F760957095809590954B -:1064B0009B01AC01BD01CF010895A29FB001B39F24 -:1064C000C001A39F700D811D1124911DB29F700DFD -:1064D000811D1124911D0895F894FFCF5E0F5E0F6A -:1064E000670F670F690F670F670F670F5E0F5E0F0C -:1064F0006E0F670F670F6E0FE6180E1961190E19F0 -:106500006119411979196119761A831ADC1EDC1E8A -:10651000501F501FAE1FC81F131F131FD31F5D2016 -:106520006E206E20892F8D2FF32F04300F302E30E8 -:10653000313070309130013001309C309F30A330C9 -:0A654000C930EB30EE30F0301531B9 -:10654A007606910C700C6C0C680C01191A1B1C1D38 -:10655A001E1F202122010201002A002A2A0181820B -:10656A0083E200E900EA00B500B600B700CD008377 -:10657A0001CC008A019201940121022302240225FE -:10658A0002260227022A02B300B4006F007000F04C -:10659A00F1F2F3F5F6F70001020304053736350088 -:1065AA00FF0100010000FFFF0000010001FF0004DD -:1065BA0004040404040402026162646690929497DB -:1065CA0006606365679193959607000102020202CD -:1065DA000606060909090909090F0F0F0F0F0F15FA -:1065EA0015151819191919191919191919232440DE -:0E65FA0022B6B6019401DE00C808E1080109CE +:102BA00069EE7EEF90E080E00E94E22D60E082E03E +:102BB00090E00E94C42D60E083E090E00E94C42D6C +:102BC00010925B0210925A0260E084E090E00E9452 +:102BD000C42D60E082E290E00E94C42D60E085E0B8 +:102BE00090E00E94C42D60E086E090E00E94C42D39 +:102BF0006FEF87E090E00E94C42D40E050E0BA0102 +:102C000088E090E00E94D62D60E08DE090E00E9488 +:102C1000C42D40E050E0BA0188E190E00E94D62D3A +:102C200060E087E190E00E94C42D40E050E0BA01EE +:102C30008CE190E00E94D62D70E060E080E290E0B0 +:102C40000E94E22D40E050E0BA0188E190E00E944D +:102C5000D62D80E00E94900E0E94A80E40E050E029 +:102C6000BA018FE090E00E94D62D40E050E0BA011A +:102C700083E190E00C94D62D90E080E00E94BE2D80 +:102C8000893E9E4F11F40C94730F80E008951092CA +:102C9000580280911D01E6EEF1E0882359F0809101 +:102CA000D50287FF07C08EE1DF011D928A95E9F703 +:102CB0000C94A90B86E0F8CF1F93CF93DF93CDB789 +:102CC000DEB7AA970FB6F894DEBF0FBECDBF81E086 +:102CD00093E02091F100DC012D93CD01B3E0893028 +:102CE0009B07B9F780910203833009F471C0B8F4EF +:102CF000813009F448C0823009F4B2C08091E80004 +:102D000083FF3AC180910103909102039A3008F049 +:102D100033C1E92FF0E0E45BF14D0C94652D8A306E +:102D200009F48DC08B3009F470C0893039F7809177 +:102D30000103813219F780910503909106030097F2 +:102D400011F00297D9F68091E800877F8093E80020 +:102D50008091E80082FF37C08091F2009091F300EB +:102D6000029729F48091F1008B7F813021F48091CA +:102D7000F1008093DC028091E8008B778093E8007B +:102D80000E946605BBCF80910103813A09F0B6CF5E +:102D90008091E800877F8093E800809105039091FF +:102DA0000603892B61F460E28DED92E070E00E94F1 +:102DB00019068091E8008B778093E8009FCF60E050 +:102DC00090E080E0F3CF8091FF028111C1CF96CFD8 +:102DD00080910103813A09F091CF80910503909190 +:102DE0000603892B09F08ACF8091E800877F8093C2 +:102DF000E8008091E80080FFFCCF80911D01809366 +:102E0000F1008091E8008E77B9CF80910103813283 +:102E100009F074CF8091050390910603892B09F086 +:102E20006DCF8091E800877F8093E8000E9466055F +:102E30008091030380931D010E9447165FCF80910C +:102E40000103813209F05ACF8091E800877F809397 +:102E5000E8000E946605809104038093DB024ECF58 +:102E600080910103813A09F049CF8091E800877F82 +:102E70008093E8008091E80080FFFCCF8091DB0226 +:102E8000BECF803899F0823809F076C08091050372 +:102E90008F70873008F070C08093E9008091EB005C +:102EA00085FB882780F91092E90006C08091FD0219 +:102EB0009091FE02911182609091E800977F90932B +:102EC000E8008093F1001092F1008091E8008E7785 +:102ED000B5C1882309F4A2C1823009F04DC08091A8 +:102EE00003038111A6C1809105038F702FEF280F76 +:102EF000263008F041C08093E9002091EB0020FFCC +:102F000098C1933031F48091EB0080628093EB00A4 +:102F100090C19091EB0090619093EB0021E030E044 +:102F200001C0220F8A95EAF72093EA001092EA0086 +:102F30008091EB008860EACF81111EC010910303DD +:102F40001F778091E3008078812B8093E30080914C +:102F5000E800877F8093E8000E9466058091E80082 +:102F600080FFFCCF8091E30080688093E30082E0E3 +:102F7000111183E08093FF028091E80083FF0AC073 +:102F80008091E800877F8093E8008091EB00806269 +:102F90008093EB00AA960FB6F894DEBF0FBECDBFAC +:102FA000DF91CF911F9108958058823028F72091AA +:102FB0000303309104032C3DE3E03E07A1F583E0D9 +:102FC0008A838AE289834FB7F894DE01139620E062 +:102FD0003EE051E2E32FF0E050935700E49120FFF0 +:102FE00003C0E295EF703F5FEF708E2F90E0EA3004 +:102FF000C0F0C7968D939D932F5F243159F74FBF33 +:103000008091E800877F8093E8006AE270E0CE015B +:1030100001960E9419068091E8008B778093E80062 +:10302000ABCFC096E7CF8091050390910603432F65 +:1030300055274330510509F44AC078F54130510510 +:1030400009F47AC08BE590E0E6EBF8E042305105F8 +:1030500009F092CF2091E800277F2093E80020918B +:103060000703309108038217930708F49C0140E09E +:103070002115310509F065C0411163C08091E80058 +:1030800082FDC9CF8091FF02882329F2853019F291 +:103090008091E80083FFF2CFBECF4132510509F4A1 +:1030A0003CC04232510509F067CF8330910508F0EA +:1030B00063CFFC01EE0FFF1FEA52FE4F0190F0813B +:1030C000E02D8D529E4FDC018C9190E01AC0332789 +:1030D00021303105D1F02115310561F02230310563 +:1030E00009F04ACFE3E2F9E0E4918E2F90E0E3E2C9 +:1030F000F9E007C0E1E4F9E0E4918E2F90E0E1E42B +:10310000F9E0009709F438CFA5CFEDE2F9E0E491BA +:103110008E2F90E0EDE2F9E0F4CF8330910508F0D6 +:103120002BCF880F991FFC01E452FE4F0190F081D4 +:10313000E02D89E090E08ECF82E190E0E1E1F9E0DE +:1031400089CF8091FF02882309F465CF853009F487 +:1031500062CF8091E80083FD5ECF8091E80082FD20 +:103160008DCF8091E80080FF83CF8091F200909115 +:10317000F3002115310519F08830910550F041E038 +:10318000089709F040E08091E8008E778093E8008E +:103190006FCF44914093F10031962150310901964F +:1031A000E8CF803809F0E8CE8091E800877F8093EF +:1031B000E800809100038093F10087CE8111DCCE7E +:1031C00010910303123008F0D7CE8091E800877F7A +:1031D0008093E800109300030E946605112311F00C +:1031E00084E005C08091E30087FDFACF81E0809301 +:1031F000FF0242E061EC81E00E94850542E261EC61 +:1032000084E00E94850542E261EC82E00E9485052F +:1032100042E260EC83E00E948505AECE809103031C +:10322000813009F0A9CE81E0933009F080E08093ED +:10323000FE021092E9008091E800877F8093E80009 +:103240000E94660599CE3F924F925F926F927F9255 +:103250008F929F92AF92BF92CF92DF92EF92FF92A6 +:103260000F931F93CF93DF9300D000D00F92CDB771 +:10327000DEB78C01FC0183819481892B31F0808140 +:10328000918189238F3F09F052C60F900F900F90C4 +:103290000F900F90DF91CF911F910F91FF90EF90C2 +:1032A000DF90CF90BF90AF909F908F907F906F9066 +:1032B0005F904F903F9008950E94040FF82E682F62 +:1032C00089819A810E947D0B69817A818F2D0E946C +:1032D000F70E7C01F8018281882309F41AC6970150 +:1032E00022513F452031310508F0D2C58FEF97E0DC +:1032F0000E94B02DFEEEEF0E57EE852E53E0952E78 +:10330000882381F180915502877009F4BECFF801BE +:103310008281882309F4B9CF82E00F900F900F903B +:103320000F900F90DF91CF911F910F91FF90EF9031 +:10333000DF90CF90BF90AF909F908F907F906F90D5 +:103340005F904F903F900C947415811428E0920682 +:10335000C9F2C4010E94B02D811101C0EA943FEF6F +:10336000831A930AE110F1CF1C821B8244244394F8 +:103370004AE0342E74014FEFE41AF40AC4010E94AB +:10338000B02D89831A82882309F4BCCF9FEF980F50 +:10339000933000F58A83498252E0850E911CC70163 +:1033A0000E94B02D8B83882309F4ACCFCE01019607 +:1033B0007C01F70120812223E9F2213009F049C084 +:1033C00091818281913041F4F2E0EF0EF11C0E9474 +:1033D000AA0D09C04701EACF923049F422E0E20E7B +:1033E000F11C0E94F50C3FEFE31AF30AE2CF933091 +:1033F00031F432E0E30EF11C0E94E10BF4CF943083 +:1034000021F04FEFE41AF40AEECF52E0E50EF11C82 +:1034100030E020E0B7016F5F7F4FF70141818053BB +:10342000990B8A30910550F021503109E0F28FE973 +:103430009FE00197F1F700C00000F6CF329EF00147 +:10344000339EF00D11249C012E0F3F1F842F7B0112 +:10345000E1CFE22FF0E0EA5DFD4F5490822F869598 +:103460008695869590E0FC01EA5EFD4F649027709A +:10347000712C022E02C0759467940A94E2F7E1E081 +:103480006E227724FC01EA5FFD4FA490B12C022E3E +:1034900002C0B594A7940A94E2F7F1E0AF22BB24EE +:1034A000FC01EA50FE4FC490D12C02C0D594C794C1 +:1034B0002A95E2F721E0C222DD246114710419F09B +:1034C00081EE0E94F50CA114B10419F086EE0E9461 +:1034D000F50C852D0E94AA0DAB2819F086EE0E94EE +:1034E000E10B672819F081EE0E94E10BCD2809F469 +:1034F0007ACF8CE26CCF81E00E9490150E94541527 +:1035000001CF81E00E946315F9CF82E0F5CFF3E8A7 +:10351000EF16FFE5FF0609F4CCC024E8E2162FE51C +:10352000F20609F0D5C4882309F4ECCEF0906A02C3 +:10353000EE24E394FE24F0926A020E94880690939F +:103540006802809367028091690210921A018823B1 +:1035500009F4BDC08AE280931B0180931C0181E2C3 +:103560000E947B140E94AD10E0926A0210926902E0 +:103570001092660210926502C5CE882309F481C0BC +:1035800080916D02811106C081E080936D0282EE10 +:103590000E94F50C0E94880690936C0280936B0247 +:1035A0008BE20E94F50CF8018281882309F4D0C4D3 +:1035B00010929003F2E0EF16FCE5FF0608F4ACC1B0 +:1035C00026E1E2162CE5F20630F0C7018A5F9C4541 +:1035D000099708F0A1C10E948C0F9093D6028093A6 +:1035E000D50230E1E3163CE5F30609F464C108F0C6 +:1035F000E6C058E0E5165CE5F50609F44EC108F0B2 +:10360000AFC094E0E9169CE5F90609F43EC108F064 +:1036100091C0F2E0EF16FCE5FF0609F430C180919D +:10362000D502826023E0E2162CE5F20609F42AC1F5 +:103630006091D502F090D60284E090E00E94C42D03 +:103640006F2D82E290E00E94C42D0E9447165ACE50 +:103650008823A1F080916D02811106C081E08093E2 +:103660006D0282EE0E94F50C0E94880690936C0217 +:1036700080936B0281EE0E94F50C92CF81EE0E9446 +:10368000E10B8BE20E94E10B8ECF882309F48BCFF4 +:1036900081EE0E94F50C83EE0E94F50C8FE40E94EF +:1036A000F50C8FE40E94E10B83EE0E94E10B81EEAA +:1036B000E9CF882309F477CF81EE0E94F50C83EEE1 +:1036C0000E94F50C80E50E94F50C80E5EBCF8AE2C4 +:1036D00080931B0180931C0181E2FF2029F00E944E +:1036E0007B140E94AD1042CF0E947B143FCFE5EFC8 +:1036F000EE16ECE5FE06B9F090F026EFE2162CE5AA +:10370000F20609F050CF27E245EE66EEFEC327E24F +:1037100045EE65EEFAC326E241EE60EEF6C327E21F +:1037200045EE64EEF2C326E241EE62EEEEC328E21D +:1037300041E0EFCF8091D502806136E0E3163CE5B1 +:10374000F30609F49FC08091D502886047E0E41633 +:103750004CE5F40608F496C08091D502806292C0D0 +:103760008091D5028D7F5CE0E5165CE5F50609F4F5 +:1037700089C078F48091D5028C609AE0E9169CE5C6 +:10378000F90609F47FC008F48CC08091D5028E7FC1 +:1037900079C08091D502877FFEE0EF16FCE5FF0639 +:1037A00009F470C08091D5028B7F2FE0E2162CE5E2 +:1037B000F20608F467C08091D5028F7E63C03BEFAC +:1037C000E3163CE5F30609F464C068F553E1E51639 +:1037D0005CE5F50609F477C090F491E1E9169CE503 +:1037E000F90609F46CC0E2E1EE16ECE5FE0609F01C +:1037F0001FCF0E9447168091D5028F7743C0F5E115 +:10380000EF16FCE5FF0609F466C008F47AC0809163 +:10381000D60281603AEFE3163CE5F30609F008CFE3 +:103820008093D60205CF4FEFE4164CE5F40609F479 +:103830004EC088F48DEFE8168CE5F806C1F1809152 +:10384000D6028E7F9EEFE9169CE5F90648F380913B +:10385000D6028360E5CFE1E0EE16EDE5FE0609F461 +:1038600059C008F444C060E022E0E2162DE5F206FB +:1038700009F0DECE8EE090E00E94C42DD9CE80917A +:10388000D50281608093D502D3CE8091D502846029 +:10389000F9CF8091D6028260C3CF8091D502806437 +:1038A000F1CF0E9447168091D5028068EBCF8091BE +:1038B000D6028D7FB5CF8091D5028F7DE3CF8091E9 +:1038C000D5028F7BDFCF8091D502837FDBCF8091C4 +:1038D000D6028C7FA5CF8091D50282FB992790F9E3 +:1038E00021E0922790FB82F990FB83F9CBCF809166 +:1038F000D602982F909591708E7F892B90FB81F93D +:103900008FCF0E9447169091D502892F97FB87F998 +:103910008058B8CF61E0AECF8091580236E1E3160F +:103920003CE5F30609F021C38A7A91E009F490E0BE +:1039300090930402811106C089E20E94170B0E9435 +:10394000A70AE0CC85E3F9CF85E30CC38091890316 +:1039500080FF1BC08E7F80938903609189037091E3 +:103960008A0380918B0390918C030E9438131092EC +:10397000C5024FEF50E782E0415050408040E1F7F0 +:1039800000C000000E94B00FBDCC8160809389030D +:1039900061E086950E944014B5CC4FE955E168EA94 +:1039A00075E10E94CC06AECC48EA55E16FE975E1BD +:1039B000F8CF45E154E16CE074E1F3CF44EF53E11B +:1039C00060E074E1EECF4CED53E168EE73E1E9CFD6 +:1039D00048EE53E16CED73E1E4CF4FE254E16EE168 +:1039E00074E1DFCF61E081E0D5CF65E082E00E9445 +:1039F000B21588CC68E086E0FACF64E18FE0F7CFBB +:103A000067E185E1F4CF62E289E1F1CF61E083E231 +:103A1000C1CF3BE5E3163DE5F30611F14CE5E416B5 +:103A20004DE5F40609F0D3C28091D60282FB8827C7 +:103A300080F991E089270E94B70EC9C20E944716FB +:103A40005FEF84E39CE0515080409040E1F700C07C +:103A500000000E94D10C0E94D01554CC81E0EBCF25 +:103A600080E0E9CFC7010E94550BD82EBFC22F2D91 +:103A70002F70C22E8F2D807F19F0C29490EFC92233 +:103A8000DD20C9F0CC2069F080E28E0D883010F086 +:103A900081100BC080915802C82AC09258020E941F +:103AA000A70A8E2D0E94F50C19C080915702C82AD2 +:103AB000C0925702F4CF8E2D0E94E10BCC2071F002 +:103AC000C09480E28E0D883010F081103EC080914D +:103AD0005802C822C09258020E94A70AE92DE85055 +:103AE000FF0B349720F40E94C0060E94A114AA2064 +:103AF00009F4CBCB8091550280FDC7CBF80112822F +:103B00008595859585950E949015C8010E94231979 +:103B1000809155028595859585950F900F900F9012 +:103B20000F900F90DF91CF911F910F91FF90EF9029 +:103B3000DF90CF90BF90AF909F908F907F906F90CD +:103B40005F904F903F900C94631580915702C8226C +:103B5000C0925702C1CF3F2D3F70B32E8F2D807F73 +:103B6000803219F0B29480EFB822882071F041E0E1 +:103B7000841681F1DD20D9F1CC2091F1F801858105 +:103B800080FF8FCF8F7085832BC0DD20B1F09091A7 +:103B900059028B2D892BC11003C00E94D70B9ECFD9 +:103BA00051E0C512FACF2091D60222FD97CF981787 +:103BB00009F494CF8093590291CFC11006C00E949E +:103BC000A10A8B2D0E94CC0B89CF81E0C81609F485 +:103BD00085CFF5CFDD2031F095E09C1508F47ECF40 +:103BE0008B2DDBCFE4E0EC1508F478CFEACFCC20C6 +:103BF00041F3F9E38F1209C02FEF37EE43E0215074 +:103C000030404040E1F700C000008E2D0E94E10BE3 +:103C100065CF8F2D86958695837061F0813009F090 +:103C20005DCFC7019370D11002C090E080E00E9488 +:103C3000940654CFC7019370D11002C090E080E089 +:103C40000E94AA064BCF8E2DDD2029F00E9463082A +:103C50000E94810743CF0E94A807FACF8F2D83705F +:103C600009F040C0D1103ACF4E2D4295469547708D +:103C7000440F440F8E2D8F7090E0042E02C0880FE9 +:103C8000991F0A94E2F730E020E0E4FE09C02FE03B +:103C900030E002C0220F331F4A95E2F7209530959D +:103CA0004F2D469546954370423099F078F46091D7 +:103CB0005A0270915B02413039F0822B932B86239C +:103CC00097230E94C60B0ACF862B972B822B932B10 +:103CD000F8CF822B932B20915A0230915B028227DE +:103CE0009327EFCF8695DD2011F08F2D81708823EB +:103CF00009F4F4CE4E2D429546954770440F440F7B +:103D00008E2D8F7090E0042E02C0880F991F0A94A8 +:103D1000E2F730E020E0E4FE09C02FE030E002C02E +:103D2000220F331F4A95E2F7209530954F2D469587 +:103D300046954370423099F078F460910903709190 +:103D40000A03413039F0822B932B862397230E945C +:103D50004C15C4CE862B972B822B932BF8CF822B1E +:103D6000932B2091090330910A0382279327EFCFE9 +:103D70005F2D5F70F52EDD2029F0852F0E949015B4 +:103D80008E2D0BCF8E2D0E94CC0B8F2D0E94631594 +:103D9000A5CE8E2D92EF891609F449C0981570F0C2 +:103DA000E0EF8E1639F1F1EF8F16C9F1DD2009F43D +:103DB0005FC0C11076CE8F2D8F7136C023EF821673 +:103DC000D9F134EF8312F2CFDD2009F446C0FF2D84 +:103DD000FF71FF2E8F2F0E9490158091D60282FDD9 +:103DE00007C028E0F29EC001112483608093550231 +:103DF0008F2D1AC0DD2071F044E04C1508F46ECE12 +:103E00002F2D2F7181E090E002C0880F991F2A9515 +:103E1000E2F7A7CF55E05C1508F460CEF1CF8F2D07 +:103E20008F71DD2009F4B2CF0E94901557CE8F2DEF +:103E30008F71DD20C9F3AACF90E080E0DD2009F486 +:103E400086CF9F2D9F7121E030E0F90102C0EE0F77 +:103E5000FF1F9A95E2F7CF017ACF81E00E94741597 +:103E600031E03C1508F03ACE82E00E94741536CE5F +:103E7000CC2059F0893309F0C8CE4FEF57EE83E0DC +:103E8000415050408040E1F7BECE8F2D8F717ECFE4 +:103E9000F0E1EF16FFE5FF0609F42DCB21E1E21674 +:103EA0002FE5F20609F431CB42E8E4164FE5F406BB +:103EB00009F4EBCB08F02BCB90E8E9169FE5F90667 +:103EC00009F45BCBE1E8EE16EFE5FE0609F4C0CBA2 +:103ED00033EFE3163CE5F30609F41DCC08F007CCFC +:103EE00058EDE5165CE5F50609F411CC89EDE81608 +:103EF0008CE5F80609F41BCC97EDE9169CE5F9066C +:103F000009F051CB26E241EE61EEC8010E94C70DD7 +:103F1000F9C930E1E3163FE5F30609F4F2CA41E1DD +:103F2000E4164FE5F40609F0BFCF82E0EBCA85E066 +:103F3000DE01119601900D928A95E1F7F801228138 +:103F400089819A812111B8C90E94550BF82EBCC9EC +:103F5000F6E1EF16FCE5FF06D1F580910402811130 +:103F6000F3CC89E20E94EC0AEACC82722CECE216D5 +:103F70002CE5F20609F431CD08F0A7C046ECE416B2 +:103F80004CE5F40609F415CD08F076C093ECE9167B +:103F90009CE5F90609F401CD08F05DC0F2ECEF16DE +:103FA000FCE5FF0609F4D2CC9AE5E9169DE5F90691 +:103FB00009F454CD08F02DCDE114FCE5FF0609F419 +:103FC0003DCD2EEDE2162CE5F20609F444CDF801C4 +:103FD0008281E080F180882309F444CDC7010E94EA +:103FE000040FD82E682FC7010E947D0BB7018D2DBD +:103FF0000E94F70E0E9419097C01882EF801D280D8 +:10400000C580C2943FE0C322809155028770A1F021 +:10401000AD2CDD2091F08F2D807F803421F080E267 +:104020008E0D883048F082E00E9474158091550210 +:104030008770AA24A3948111A12C9F2C92942FE025 +:104040009222FBE0F91508F449CDE92DF0E0EA5A97 +:10405000F14D0C94652D24ECE2162CE5F20609F4E2 +:10406000A3CC4CE054E165E174E135ECE3163CE5AA +:10407000F30609F496CC98CF49ECE4164CE5F40627 +:1040800009F4A1CC88F497ECE9169CE5F90609F44B +:1040900095CC40E054E164EF73E1E8ECEE16ECE51A +:1040A000FE0609F47ECC80CFFAECEF16FCE5FF06A5 +:1040B00009F48ECC4EE154E16FE274E12BECE21690 +:1040C0002CE5F20609F46DCC6FCF31EDE3163CE53B +:1040D000F30609F492CCB8F45EECE5165CE5F5065F +:1040E00009F483CC08F47ECC9FECE9169CE5F90634 +:1040F00009F480CC6EE089E0E0EDEE16ECE5FE061A +:1041000009F475CC51CFF4EDEF16FCE5FF0609F488 +:104110007ACC78F432EDE3163CE5F30609F470CC82 +:1041200061E088E143EDE4164CE5F40609F432CC95 +:104130003BCF55EDE5165CE5F50609F467CC8DE55A +:10414000E816F80609F4DEC82FCF1F93CF93DF934C +:1041500080912202807FA9F480911F02882389F038 +:1041600080915402D091230260911D0270911E0231 +:10417000A0912002B0912102C62FC72316E0D813C8 +:1041800004C0DF91CF911F91089590E0109711F036 +:10419000CF3F19F401968770F2CF189F9001199FB5 +:1041A000300D1124F901EC5DFD4F41814713F2CF31 +:1041B00040814613EFCF42814111ECCF43815481BE +:1041C0004A1B5B0B483C510528F7809122028F70F7 +:1041D000806180932202F901E75DFD4F80818F703D +:1041E000806180838DE192E00E942319DF91CF915D +:1041F0001F910C944B0BAF92BF92CF92DF92EF9234 +:10420000FF920F931F93CF93DF93CDB7DEB76197E4 +:104210000FB6F894DEBF0FBECDBF8C0185E0F8016C +:10422000DE011D9601900D928A95E1F7F801E2807A +:104230008DE1A82E82E0B82E6091200270912102BB +:104240006115710509F432C190911D0240911E0261 +:10425000892F84238F3F09F429C120813181C380B4 +:10426000D480F0901F02F601E61BF70BFF2009F443 +:10427000E8C080912202582F507FE83CF10508F0F9 +:10428000ABC0511177C0FE2C431321C092131FC045 +:10429000E1101DC08F70806180932202C5010E94D1 +:1042A000231980912202F80185838F2D61960FB624 +:1042B000F894DEBF0FBECDBFDF91CF911F910F915C +:1042C000FF90EF90DF90CF90BF90AF900895CD28F2 +:1042D00029F0822F83238F3F09F003C180E0F82F5C +:1042E000F170DF2E80FF3CC0809154024091230288 +:1042F00056E0841315C02D873E878D859E850E94CC +:10430000400F292F22952F702230F0F0243018F51D +:104310009F70F1F0F8019581907FD1F4D12C1EC0EF +:1043200090E0589FF001599FF00D1124EC5DFD4F76 +:104330006181361306C06081261303C06281E612D4 +:104340000FC001968770D5CF9F7011F0882331F38D +:10435000805E883018F3C8010E942319FD2CA5CF78 +:10436000EE2009F4A2CF8091220281608093220284 +:10437000F12C9BCF431306C0921304C0F801EE202A +:1043800009F479C0C8010E944C0F882309F1EE207E +:10439000F9F080912202803270F020911D0230915C +:1043A0001E0238872F831986DB86CA868C87CE014A +:1043B00007960E94231986E0F801ADE1B2E0019072 +:1043C0000D928A95E1F70E94A520FF24F3946DCF0A +:1043D000C8010E942319F9CF51110AC08DE192E062 +:1043E0000E94231986E0F50111928A95E9F7C0CF62 +:1043F00043130FC092130DC0E1100BC0F801858369 +:10440000C8010E94231986E0F50111928A95E9F707 +:104410004CCFC8010E944C0F8823D1F2EE20C1F28C +:1044200080912202803238F220911D0230911E02CA +:104430003A8329831B82DD82CC828E83CE01019652 +:10444000B8CFE83CF105F8F6FE2CEE2009F2431354 +:104450001FC092131DC08091220280FD10C0982FB2 +:10446000907F69F0F8018583903F31F0982F907F1D +:10447000905F8F70892B8583C8010E94231986E085 +:10448000F801ADE1B2E001900D928A95E1F70DCF10 +:10449000C8010E944C0F81118ECF80912202816051 +:1044A00080932202C8010E942319FFCEEE2009F456 +:1044B0008FCFC8010E944C0FF82E882309F488CFB3 +:1044C00086E0F801ADE1B2E001900D928A95E1F746 +:1044D00080911D0290911E020E94400F0E94A52013 +:1044E000E4CE81E08E25FBCE1F93CF93DF93CDB733 +:1044F000DEB767970FB6F894DEBF0FBECDBF4B8B0C +:104500005C8B6D8B7E8B8F8B6111109257021A8A98 +:10451000198A85E0FE017396DE011D9601900D92C9 +:104520008A95E1F786E0FE013D96DE01179601903F +:104530000D928A95E1F7CE0107960E94FB20882311 +:1045400089F016E08091540290912302891349C0AA +:1045500067960FB6F894DEBF0FBECDBFDF91CF9147 +:104560001F91089586E0FE013796DE0111960190B5 +:104570000D928A95E1F78A859B85892B11F38F81AE +:10458000988589238F3FE9F22091230230E0C90109 +:10459000019687709927409154024817190671F4C3 +:1045A0000E944716109223021092540286E0EDE119 +:1045B000F2E0DF011D928A95E9F7C3CF96E0929F62 +:1045C000D001939FB00D1124AC5DBD4FFE0131961B +:1045D00001900D929A95E1F7809323020E944B0B74 +:1045E000B0CF819FC00111248C5D9D4F0E94FB20A4 +:1045F000882309F4ADCF8091540290E00196877032 +:104600009927809354029ECF6F927F928F929F92B0 +:10461000AF92BF92CF92DF92EF92FF920F931F93D0 +:10462000CF93DF93CDB7DEB72D970FB6F894DEBFEB +:104630000FBECDBF8E010F5F1F4F88E0F8011192B2 +:104640008A95E9F74FE4E42E41E0F42E680153E542 +:10465000652E51E0752E88248394912CF701819169 +:104660007F018F3F09F44BC0F894E82FE295EF707B +:10467000F0E021A18F70A40102C0440F551F8A955C +:10468000E2F7CA01922F982B91A392A180958923DA +:1046900082A3789400C0E3E5F1E030E020E0B12CA3 +:1046A000A12C81918F3F09F47CC0A82FA295AF70F7 +:1046B000B0E090964C9150E08F7002C055954795B0 +:1046C0008A95E2F740FD6DC0C401022E02C0880F3A +:1046D000991F0A94E2F7A82AB92A2F5F3F4F2C307E +:1046E0003105F9F6F701319780818F3F11F00E9473 +:1046F000BF0850EA5A95F1F7F601B182A082F2E0C4 +:10470000CF0ED11C6E147F0409F0A8CF48E050E012 +:10471000B8018EE692E00E94A32DCC24C3940097AA +:1047200009F4C12C892B09F43FC088E0F801AEE6FA +:10473000B2E001900D928A95E1F781E080935E02EC +:104740000E94880690935D0280935C0280915C02D7 +:1047500090915D020E947906059750F180916E025A +:1047600090916F029093A7028093A60280917002AD +:10477000909171029093A9028093A8028091720295 +:10478000909173029093AB028093AA02809174027D +:10479000909175029093AD028093AC0210925E02EC +:1047A00007C090E080E097CF80915E028111CECF6C +:1047B00080916D02882371F080916B0290916C0260 +:1047C0000E947906893E934028F082EE0E94E10B18 +:1047D00010926D0280916A02882399F1809169029A +:1047E00081112FC080916702909168020E94790622 +:1047F00081369A4E78F0809165029091660201961A +:1048000090936602809365020E94880690936802E6 +:104810008093670280916502909166024F9788F0BD +:1048200010921A018AE280931B0180931C018FE091 +:104830000E947B1481E080936902109266021092BC +:10484000650238E7E32E32E0F32E10E000E0BB24EF +:10485000B394F701D1907F01DD2051F101151105CD +:1048600009F058C0B09263020E94880690936002DB +:1048700080935F02D694C801880F991FDD2009F448 +:1048800056C08F589E4FFC01808191819A878987FD +:104890001B860E9488068160782F9D878C87F70190 +:1048A0003197108249855A856B858D850E947422C7 +:1048B0000F5F1F4F0930110561F61091640280915E +:1048C000630211115DC08823A9F110921A0184E0DE +:1048D00080931B0180931C018FE00E947B14109237 +:1048E000630281E0809364028C2D2D960FB6F894BC +:1048F000DEBF0FBECDBFDF91CF911F910F91FF9013 +:10490000EF90DF90CF90BF90AF909F908F907F906F +:104910006F9008950530110519F4B0926202A4CF8A +:104920000730110509F0A6CFB09261029DCF815AE0 +:104930009E4FA9CF80916202882379F086E180930F +:104940001A018AE180931B0184E080931C018FE0AF +:104950000E947B1410926202C4CF8091610288236E +:10496000A9F08AE180931A018EE180931B0184E013 +:1049700080931C018FE00E947B1410926102B1CFE2 +:1049800081112BC080916202811127C08091610248 +:10499000811123C080915F02909160020E9479068C +:1049A000853F9140D0F0112379F010921A018AE2EC +:1049B00080931B0180931C0181E20E947B148091F3 +:1049C0006A0281110E94AD1010926302109262027D +:1049D000109261021092640287CF109263021092CB +:1049E00062021092610280CF1F920F920FB60F9257 +:1049F00011242F933F934F935F936F937F938F93E4 +:104A00009F93AF93BF93CF93DF93EF93FF93D09197 +:104A1000E900DF708091EC00C82FC17080FDC0E814 +:104A20001092E9008091F000877F8093F0007894E5 +:104A30000E945C161092E9008091F00088608093DB +:104A4000F000CD2BCF70C093E900FF91EF91DF9183 +:104A5000CF91BF91AF919F918F917F916F915F9116 +:104A60004F913F912F910F900FBE0F901F9018956F +:104A70001F920F920FB60F9211242F933F934F93D3 +:104A80005F936F937F938F939F93AF93BF93EF93B6 +:104A9000FF938091E10082FF09C08091E20082FFD4 +:104AA00005C08091E1008B7F8093E1008091DA0066 +:104AB00080FF24C08091D80080FF20C08091DA0060 +:104AC0008E7F8093DA008091D90080FF9BC088E1BF +:104AD00089BD8AE189BD09B400FEFDCF81E08093E4 +:104AE000FF028091DA02811109C00E94EC040E9449 +:104AF000B7058091E20084608093E2008091E1003C +:104B000080FF17C08091E20080FF13C08091E20017 +:104B10008E7F8093E2008091E20080618093E200CA +:104B20008091D80080628093D80019BC85E0809382 +:104B3000FF028091E10084FF29C08091E20084FFA0 +:104B400025C088E189BD8AE189BD89B5982F91701A +:104B500080FFFBCF8091D8008F7D8093D80080911B +:104B6000E1008F7E8093E1008091E2008F7E809350 +:104B7000E2008091E20081608093E2008091000376 +:104B8000882309F445C084E08093FF028091E1000E +:104B900083FF27C08091E20083FF23C08091E10062 +:104BA000877F8093E10082E08093FF0210920003F0 +:104BB0008091E1008E7F8093E1008091E2008E7F02 +:104BC0008093E2008091E20080618093E20042E005 +:104BD00060E080E00E9485058091F000886080930D +:104BE000F000FF91EF91BF91AF919F918F917F91D5 +:104BF0006F915F914F913F912F910F900FBE0F904A +:104C00001F90189519BC1092FF021092DA0276CF0D +:104C10008091E30087FD93E09093FF02B7CF7894F3 +:104C20001F921FB61F9211248F939F93AF93BF9330 +:104C30008091D1029091D202A091D302B091D4027E +:104C40000196A11DB11D8093D1029093D202A09331 +:104C5000D302B093D402BF91AF919F918F911F90D7 +:104C60001FBE1F9018951F921FB61F9211248F937D +:104C70009F93AF93BF938091D002811113C0809115 +:104C8000D1029091D202A091D302B091D402419668 +:104C9000A11DB11D8093D1029093D202A093D302A3 +:104CA000B093D402BF91AF919F918F911F901FBE7F +:104CB0001F901895CDB7DEB7E0970FB6F894DEBF1A +:104CC0000FBECDBF84B7877F84BF0FB6F894A89579 +:104CD00080916000886180936000109260000FBE38 +:104CE00080E890E00FB6F8948093610090936100A3 +:104CF0000FBE85B7806885BF85B7806885BF8DEB9F +:104D000098E09093E3018093E2010E94EC040E94FA +:104D1000B7058091E20084608093E20078948091EE +:104D2000FF028823A1F01091E9001F709091EC0020 +:104D3000892F817090FD80E8182B1092E9008091F6 +:104D4000E80083FD0E945C161F701093E90082E06A +:104D500084BD93E095BD9AEF97BD80936E000E944D +:104D6000730F811102C00E94A80E80EF0E94BF083D +:104D700081EF0E94BF0882EF0E94BF0883EF0E946C +:104D8000BF0803E511E0FFE5EF2EF1E0FF2ED801AB +:104D90008D918D018F3F11F00E94BF08E016F10642 +:104DA000B1F710926F0210926E021092A702109249 +:104DB000A60210927102109270021092A902109233 +:104DC000A80210927302109272021092AB0210921B +:104DD000AA0210927502109274021092AD02109203 +:104DE000AC020E943C16811102C00E94D01582E0E4 +:104DF00090E00E94B02D80939D020E948C0F9093B2 +:104E0000D6028093D5020E940423EFE3FCE9319798 +:104E1000F1F700C000000E9404238091A60280FFE9 +:104E200008C06FEF7FEF90E080E00E94E22D0E94CB +:104E3000D10C83E090E00E94B02D90E00E94C60B60 +:104E40008091090390910A030E94B914809176021F +:104E5000811132C00E943C16811104C00E94D015FD +:104E60000E94C01588E090E00E94B82D60938903ED +:104E700070938A0380938B0390938C036E7F71F4FD +:104E80000E94C01588E090E00E94B82D60938903CD +:104E900070938A0380938B0390938C030E94D206B5 +:104EA0001092C5028091890380FF03C086950E94FD +:104EB0007B1481E0809376026EEA71E0E3E98E2E46 +:104EC000E2E09E2E2CE931E0E5EAF1E041E050E03D +:104ED0001191812F82958F7090E0DC019196FC906A +:104EE00091971F70E12E6A0101C0CC0C1A95EAF768 +:104EF0000C2D00950F2191960C93919792961C91F1 +:104F000092971C2992961C93D901FD909D010F2D1B +:104F100002950F7010E0D8019196BC90BF2DBF7024 +:104F2000FB2E6A0101C0CC0CBA95EAF7DC2CD094B8 +:104F3000DB20D8019196DC9291979296DC90929723 +:104F4000DC289296DC92DC0190968C9190E002C075 +:104F500095958795EA94E2F78170D80190960C9127 +:104F600010E002C015950795FA94E2F790E000FD75 +:104F700092E0892BD4018D934D016E177F0709F0C4 +:104F8000A7CF86EA92E09093BD028093BC0281E2B3 +:104F90000E947B1481E090E00E944C1580E091E03B +:104FA0009093CD028093CC0258E1252E312C809134 +:104FB000FF02FF24F39408E11AE1853009F4B3C23B +:104FC0000E940423882359F08FB7F8944091D102AE +:104FD0005091D2026091D3027091D4028FBFA6EAA1 +:104FE000B2E0EEE9F2E010E000E0702F8D919D91CB +:104FF000219131912817390709F4BEC22827392792 +:1050000060E0EE24E394F12CA9014E215F21452BB1 +:1050100009F4ACC269A37AA39C012E213F2191E03F +:10502000232B09F490E09BA30E9488068160782FCF +:105030009DA38CA349A15AA16BA18DA10E947422AA +:10504000000F111FF801E256FD4F80819181E82683 +:10505000F926F182E0828091C5028823D1F1809106 +:10506000C402E0918903E695E81BE093C002823018 +:1050700009F099C2F0E0EC53FD4FE4910E2F10E0DF +:1050800024E2E22E23E1F22E8091C102882361F016 +:105090001092C1020E9488069093BF028093BE02C4 +:1050A0001092C3021092C2020E948806E091BE02D2 +:1050B000F091BF028E1B9F0B8F3F9F4750F4E00F74 +:1050C000F11FF093BF02E093BE028EEB92E0F70176 +:1050D00009953AE8E32E32E0F32E01E812E048E7C2 +:1050E000842E42E0942E83E991E09CA78BA7D12CDB +:1050F000C12CACE9B1E0BEA7ADA7E5EAF1E0F8ABA1 +:10510000EFA753E9652E52E0752E512C44244394A9 +:10511000D301ED913D01EE0FEE0FAFA5B8A92D9192 +:10512000B8ABAFA7A22FA295AF70B0E090968C91CC +:1051300090E02F7002C0959587952A95E2F78170CF +:105140009927ADA5BEA54D91BEA7ADA7A42FA29549 +:10515000AF70B0E090962C9130E04F7002C0359562 +:1051600027954A95E2F7A9014170552720FF02C013 +:1051700042E050E0842BE82BD3011197EC93ABA5D0 +:10518000BCA5AD90BCA7ABA7EF70F0E0ED57FE4F0C +:105190008081F7019081890F8083B12C082E000C4B +:1051A000990B20E08A159B05DCF0D8018C918F5F6C +:1051B0008C93F601E15AFE4F808191819A83898315 +:1051C0004B820E9488068160782F9D838C83F40136 +:1051D000408249815A816B818D810E94742221E035 +:1051E000D7018C91082E000C990B442755274A199A +:1051F0005B0948175907E4F0F801808181508083EA +:10520000F601EF58FE4F808191819A8389834B820A +:105210000E9488068160782F9D838C83E2E0D40110 +:10522000EC9349815A816B818D810E94742221E027 +:10523000D7018C91082E000C990BB5010E94512DBD +:10524000F70181937F01522A0F5F1F4FFFEF8F1AE3 +:105250009F0A22E0C20ED11C42E1C416D10409F01B +:1052600057CF552059F08FB7F8944091D102509103 +:10527000D2026091D3027091D4028FBF86E0E5EB39 +:10528000F2E0DE01119601900D928A95E1F7F0901F +:10529000B702E090B8021091B9020091BA021092E0 +:1052A000B7021092B8021092B9021092BA028F2D72 +:1052B0008E2909F448C08091B3029091B4020E94F3 +:1052C00079069C019091AF02992309F4C3C323335B +:1052D0003105C8F19F3F19F09F5F9093AF02FF2007 +:1052E00059F00E9443089FEF1F140CF491E0899F2E +:1052F000802D11248093B702EE2059F00E944308BC +:105300009FEF1E140CF491E0899F802D112480934F +:10531000B8023091B7023323B1F02091B8022223B2 +:1053200091F045EB3403C0011124992309F495C190 +:105330009093B70245EB240390011124332309F421 +:1053400090C13093B802812F802B09F448C080911E +:10535000B1029091B2020E9479069C019091AE0236 +:10536000992309F472C325363105C8F19F3F19F01E +:105370009F5F9093AE02112359F00E9421089FEF86 +:1053800011160CF491E0899F802D11248093B902AD +:10539000002359F00E9421089FEF10160CF491E0B1 +:1053A000899F802D11248093BA023091B902332352 +:1053B000B1F02091BA02222391F045EB3403C001F1 +:1053C0001124992309F451C19093B90245EB2403A8 +:1053D00090011124332309F44CC13093BA02809117 +:1053E000B7029091B802892B9091B902892B9091C4 +:1053F000BA02892B11F00E94810786E0FE013196E6 +:10540000A5EBB2E001900D928A95E1F70E94C006EB +:1054100090919C02891731F00E94C00680939C02F3 +:105420000E94A1148091FF02843009F0C0CD83E076 +:105430008093E9008091E80082FFB9CD8091E80077 +:1054400090E085FF06C00E940B05882309F415C172 +:1054500091E08091E8008B778093E800992309F42C +:10546000A6CDE981E150E33108F09BC1F0E0EE59AF +:10547000F14D0C94652D8091FF02843009F441C0F8 +:1054800080E00E94A1141092C5028091BB0281119C +:1054900016C0F092BB0280918903982F917090936F +:1054A00077028E7F80938903BFEFE0E7F2E0B1508F +:1054B000E040F040E1F700C000000E94B00F109201 +:1054C000D00220E40FB6F894A895209260000FBE99 +:1054D0002093600083B7817F846083BF83B781603E +:1054E00083BF7894889583B78E7F83BF0FB6F89477 +:1054F000A8958091600088618093600010926000A0 +:105500000FBE8091FE02882371F00E940423E6EA18 +:10551000F2E081919191892B09F078C28EEA92E0B4 +:105520008E179F07B1F78091FF02853009F4A3CF52 +:105530000E9447160E94C0060E94A1141092BB024E +:1055400080917702882359F080918903816080934C +:10555000890386950E947B140E949A0F31CD809119 +:10556000C6028823C9F30E94B00FF6CF6F5FEE0C1E +:10557000FF1C6C3009F048CD0F5F1F4F0430110540 +:1055800009F033CD8FEF8EA38FA318A60E94880653 +:105590008160782F9AA789A74EA15FA168A58AA5E7 +:1055A0000E94742258CD863059F4F0E0EF53FD4F3D +:1055B000E4910E2F10E094E1E92E93E1F92E64CDF1 +:1055C000893061F4E695F0E0E254FD4FE4910E2F4E +:1055D00010E085E6E82E82E1F82E56CD8F3061F49A +:1055E000E695F0E0E554FD4FE4910E2F10E0B0E1B8 +:1055F000EB2EB2E1FB2E48CD853159F4F0E0E854B2 +:10560000FD4FE4910E2F10E0ADE9EA2EA1E1FA2E54 +:105610003BCD08E210E07DE0E72E71E1F72E883106 +:1056200009F432CD833249F4E6EBF2E005911491AE +:10563000FBEBEF2EF2E1FF2E27CD04EF11E0E0EDC2 +:10564000EE2EE0E1FE2E843209F41ECD00ED17E0CF +:1056500061EDE62E66E0F62E17CD81E08093B7026D +:1056600069CE81E08093B8026ECE81E08093B9026A +:10567000ADCE81E08093BA02B2CE00E210E0CE015E +:1056800001967C018091E80085FD0AC08091E800C8 +:105690008B778093E8000E940B05882399F3D8CE7E +:1056A0008091F100D7018D937D010150110951F7CF +:1056B000CFCE1A8289E08B833FC08A81823009F481 +:1056C000BBC18330A9F0813009F06BC02FB7F894CB +:1056D0006091D1027091D2028091D3029091D40254 +:1056E0002FBF0E946B2D6B837C838D839E8324C090 +:1056F0008091A6029091A7029827892798279C83DA +:105700008B838091A8029091A902982789279827D6 +:105710009E838D838091AA029091AB02982789275E +:10572000982798878F838091AC029091AD0298273B +:10573000892798279A8789878091FF02843009F00A +:1057400036CC1091E9001F709091EC00892F817088 +:1057500090FD80E8182B82E08093E9008091E800BA +:1057600080FF0DC050E040E060E270E0CE010196A5 +:105770000E943C058091E8008E778093E8001F70BE +:105780001093E90014CC8A81823059F46B817C81BA +:105790008D819E810E946B2D86E290E00E94C42D37 +:1057A000CBCF8FEF8983C8CF4C816B818A810E94D8 +:1057B000D10E9827892798279E838D83BDCFED80B2 +:1057C000FE80FE24EF24FE248A810B81B8E10B9F2A +:1057D00080011124E0E68E9F000D111D11248C81A3 +:1057E00090E0880F991F080F191F6F2DC801879629 +:1057F0000E94C42D6E2DC8018896D0CF0E943B0E0A +:105800009BCF8A818138C1F060F4803809F094CF51 +:1058100020E04B8160918B0380918A030E944A13A0 +:105820008BCF823849F1833809F086CF20E0409150 +:105830008C036C818B81F2CF8B810E947B149B81C6 +:1058400080918903911111C08E7F809389031092FA +:10585000C502FFEF20E742E0F15020404040E1F771 +:1058600000C000000E94B00F67CF81608093890361 +:1058700086950E947B1460CF8B8180938D035CCFD3 +:105880008A81813899F030F4803809F055CF8091C1 +:105890008C0311CF823891F0833809F04DCF80917D +:1058A0008A038B8380918B038C8346CF80918903FD +:1058B00080FF02C08695FFCE80E0FDCE80918D03F3 +:1058C000FACE6091890370918A0380918B03909145 +:1058D0008C030E94381330CF80E18A832DCF84E07F +:1058E0008A8389E1E8CE0A811B81102701271027CE +:1058F000CE0101966C01EC80DC01AE0DB11D7D0185 +:10590000C80189519C4FEC14FD0409F415CF0931ED +:10591000B4E01B0750F40E94B02DF60184830F5FA2 +:105920001F4FBFEFCB1ADB0AEBCFD60114961C92A8 +:10593000F6CF0A811B81102701271027FE0131961F +:105940006F01EC80E00EF12EF11CC80189519C4FD3 +:10595000E016F10609F4F0CE0931F4E01F0728F44F +:10596000D60114966C910E94C42DBFEFCB1ADB0AAE +:105970000F5F1F4FEACF0E942B0EDECE8AE0ADCF25 +:105980000A811B81102701271027FE0131966F0124 +:10599000EC80CF018E0D911D7C01C8018796EC141F +:1059A000FD0409F4C9CE003CA3E01A0750F40E949C +:1059B000B02DF60184830F5F1F4FBFEFCB1ADB0AB8 +:1059C000ECCFD60114961C92F6CF0A811B811027CA +:1059D00001271027FE0131966F01EC80E00EF12EB9 +:1059E000F11CC8018796E016F10609F4A5CE003C2B +:1059F000F3E01F0728F4D60114966C910E94C42D81 +:105A0000BFEFCB1ADB0A0F5F1F4FEBCF09BD19BDEC +:105A100009B400FEFDCF8091D8008F7D8093D8001F +:105A20008091E00082608093E0008091E00081FD41 +:105A3000FCCF0E94471677CD86E290E00E94B02D01 +:105A40001B821C821D828E8377CE2D32314008F05E +:105A50008FCCC5CC2D32314008F03ECC74CC87FBC6 +:105A6000082E062687FD819567FD61950E94812D90 +:105A70000EF4919507FC81950895AA1BBB1B51E17B +:105A800007C0AA1FBB1FA617B70710F0A61BB70BAE +:105A9000881F991F5A95A9F780959095BC01CD0153 +:105AA000089597FB072E16F4009407D077FD09D0D0 +:105AB0000E943D2D07FC05D03EF4909581959F4FA7 +:105AC0000895709561957F4F0895EE0FFF1F059023 +:105AD000F491E02D0994692796276927782787276D +:105AE000782708950E942D2E332312F48A1B9B0BD6 +:105AF0000C947C2D0E942D2EB7FF0895821B930BD2 +:105B00000895991B79E004C0991F961708F0961B19 +:105B1000881F7A95C9F780950895FB01DC0102C0C2 +:105B200005900D9241505040D8F70895FC01415026 +:105B3000504030F001900616D1F73197CF0108950B +:105B4000882799270895FB01DC0104C08D910190FD +:105B5000801921F441505040C8F7881B990B0895D3 +:105B6000F999FECF92BD81BDF89A992780B5089525 +:105B7000A6E1B0E044E050E00C94EA2DA8E1B0E0EA +:105B800042E050E00C94EA2D262FF999FECF92BD09 +:105B900081BDF89A019700B4021639F01FBA20BDF2 +:105BA0000FB6F894FA9AF99A0FBE08950396272F24 +:105BB0000E94C52D0E94C42D252F0E94C52D242F83 +:105BC0000C94C52D0196272F0E94C52D0C94C42D31 +:105BD000DC01CB01FC01F999FECF06C0F2BDE1BDAD +:105BE000F89A319600B40D9241505040B8F708959C +:105BF0000E942D2EA59F900DB49F900DA49F800D07 +:105C0000911D11240895B7FF0C94F82D0E94F82DD2 +:105C1000821B930B0895A1E21A2EAA1BBB1BFD0148 +:105C20000DC0AA1FBB1FEE1FFF1FA217B307E4077B +:105C3000F50720F0A21BB30BE40BF50B661F771FD3 +:105C4000881F991F1A9469F76095709580959095B3 +:105C50009B01AC01BD01CF010895A29FB001B39F8C +:105C6000C001A39F700D811D1124911DB29F700D65 +:105C7000811D1124911D0895F894FFCF5E0F5E0FD2 +:105C8000670F670F690F670F670F670F5E0F5E0F74 +:105C90006E0F670F670F6E0F41176917BC176917F3 +:105CA000BC179C17D417BC17D118DE18371D371D29 +:105CB000AB1DAB1D091E231E6E1D6E1D2E1EB81EB4 +:105CC000C91EC91E592B5D2BC32BD42BDF2BFE2BDA +:105CD000012C402C612CD12BD12B6C2C6F2C732CD4 +:0A5CE000992CBB2CBE2CC02CE52C27 +:105CEA007606910C700C6C0C680C01191A1B1C1DA1 +:105CFA001E1F202122010201002A002A2A01818274 +:105D0A0083E200E900EA00B500B600B700CD0083DF +:105D1A0001CC008A01920194012102230224022566 +:105D2A0002260227022A02B300B4006F007000F0B4 +:105D3A00F1F2F3F5F6F700010203040537363502EE +:105D4A0000020102020B000B010B020B0305030800 +:105D5A000300000001000209000901090209030306 +:105D6A0003060300FF0100010000FFFF000001001D +:105D7A0001FF00040404040404040202616264666C +:105D8A0090929497066063656791939596070001D0 +:105D9A00020202020606060909090909090F0F0F7C +:105DAA000F0F0F1515151819191919191919191984 +:105DBA001923244022B6B6019401DE00C808E1087E +:025DCA000109CD :00000001FF From 35fd55b6f23bd21837431aebc19febfa8b25f2bc Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 7 Nov 2021 00:36:34 -0400 Subject: [PATCH 050/155] Updated rotary encoder code with Drashna's improvements. Tweaked trackball interval. --- keyboards/solartempest/9e/9e VIA ayout.json | 507 ---- keyboards/solartempest/9e/9e VIA keymap.json | 39 - keyboards/solartempest/9e/A9e.c | 64 - keyboards/solartempest/9e/A9e.h | 35 - keyboards/solartempest/9e/config.h | 140 - keyboards/solartempest/9e/info.json | 12 - .../solartempest/9e/keymaps/default/keymap.c | 208 -- .../solartempest/9e/keymaps/via/config.h | 22 - .../solartempest/9e/keymaps/via/keymap.c | 417 --- .../solartempest/9e/keymaps/via/rules.mk | 1 - keyboards/solartempest/9e/readme.md | 42 - keyboards/solartempest/9e/rules.mk | 63 - keyboards/solartempest/ps17/config.h | 145 -- keyboards/solartempest/ps17/info.json | 38 - .../ps17/keymaps/default/keymap.c | 365 --- .../solartempest/ps17/keymaps/via/config.h | 22 - .../solartempest/ps17/keymaps/via/keymap.c | 507 ---- .../solartempest/ps17/keymaps/via/rules.mk | 1 - .../ps17/keymaps/via_bright/config.h | 22 - .../ps17/keymaps/via_bright/keymap.c | 332 --- .../ps17/keymaps/via_bright/rules.mk | 1 - .../solartempest/ps17/ps17 VIA keymap.json | 51 - .../solartempest/ps17/ps17 VIA layout.json | 267 -- keyboards/solartempest/ps17/ps17.c | 68 - keyboards/solartempest/ps17/ps17.h | 61 - keyboards/solartempest/ps17/readme.md | 39 - keyboards/solartempest/ps17/rules.mk | 25 - keyboards/solartempest/sofle/config.h | 1 + .../solartempest/sofle/keymaps/via/encoder.c | 47 +- .../solartempest/sofle/keymaps/via/keymap.c | 3 + .../sofle/solartempest_sofle_via.hex | 2275 ++++++++--------- 31 files changed, 1135 insertions(+), 4685 deletions(-) delete mode 100644 keyboards/solartempest/9e/9e VIA ayout.json delete mode 100644 keyboards/solartempest/9e/9e VIA keymap.json delete mode 100644 keyboards/solartempest/9e/A9e.c delete mode 100644 keyboards/solartempest/9e/A9e.h delete mode 100644 keyboards/solartempest/9e/config.h delete mode 100644 keyboards/solartempest/9e/info.json delete mode 100644 keyboards/solartempest/9e/keymaps/default/keymap.c delete mode 100644 keyboards/solartempest/9e/keymaps/via/config.h delete mode 100644 keyboards/solartempest/9e/keymaps/via/keymap.c delete mode 100644 keyboards/solartempest/9e/keymaps/via/rules.mk delete mode 100644 keyboards/solartempest/9e/readme.md delete mode 100644 keyboards/solartempest/9e/rules.mk delete mode 100644 keyboards/solartempest/ps17/config.h delete mode 100644 keyboards/solartempest/ps17/info.json delete mode 100644 keyboards/solartempest/ps17/keymaps/default/keymap.c delete mode 100644 keyboards/solartempest/ps17/keymaps/via/config.h delete mode 100644 keyboards/solartempest/ps17/keymaps/via/keymap.c delete mode 100644 keyboards/solartempest/ps17/keymaps/via/rules.mk delete mode 100644 keyboards/solartempest/ps17/keymaps/via_bright/config.h delete mode 100644 keyboards/solartempest/ps17/keymaps/via_bright/keymap.c delete mode 100644 keyboards/solartempest/ps17/keymaps/via_bright/rules.mk delete mode 100644 keyboards/solartempest/ps17/ps17 VIA keymap.json delete mode 100644 keyboards/solartempest/ps17/ps17 VIA layout.json delete mode 100644 keyboards/solartempest/ps17/ps17.c delete mode 100644 keyboards/solartempest/ps17/ps17.h delete mode 100644 keyboards/solartempest/ps17/readme.md delete mode 100644 keyboards/solartempest/ps17/rules.mk diff --git a/keyboards/solartempest/9e/9e VIA ayout.json b/keyboards/solartempest/9e/9e VIA ayout.json deleted file mode 100644 index aa58163c6e9b..000000000000 --- a/keyboards/solartempest/9e/9e VIA ayout.json +++ /dev/null @@ -1,507 +0,0 @@ -{ - "name": "A9e", - "vendorProductId": 1095434249, - "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], - "layers": [ - [ - "KC_RGHT", - "KC_MUTE", - "KC_LEFT", - "TO(1)", - "TO(2)", - "TO(3)", - "KC_P7", - "KC_P8", - "KC_P9", - "KC_WWW_BACK", - "KC_F13", - "KC_WWW_FORWARD", - "USER01", - "RGB_TOG", - "USER00", - "KC_CAPS", - "KC_NLCK", - "KC_MINS", - "KC_P4", - "KC_P5", - "KC_P6", - "KC_VOLD", - "KC_F14", - "KC_VOLU", - "USER03", - "KC_MSTP", - "USER02", - "KC_WWW_REFRESH", - "KC_BSPC", - "KC_P0", - "KC_P1", - "KC_P2", - "KC_P3", - "KC_MS_WH_UP", - "C(KC_W)", - "KC_MS_WH_DOWN", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_MS_WH_DOWN", - "KC_HOME", - "KC_MS_WH_UP", - "C(KC_PMNS)", - "C(KC_0)", - "C(KC_PPLS)", - "C(S(KC_TAB))", - "C(KC_T)", - "C(KC_TAB)" - ], - [ - "KC_RBRC", - "KC_I", - "KC_LBRC", - "TO(0)", - "KC_T", - "KC_M", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_LEFT", - "C(S(KC_B))", - "KC_RGHT", - "KC_LCBR", - "C(KC_I)", - "KC_RCBR", - "KC_B", - "KC_J", - "KC_S", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "C(S(KC_TAB))", - "C(KC_S)", - "C(KC_TAB)", - "C(KC_Z)", - "KC_X", - "C(S(KC_Z))", - "KC_LALT", - "KC_SPC", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_DOWN", - "KC_TRNS", - "KC_UP", - "KC_NO", - "KC_NO", - "KC_NO", - "C(KC_LBRC)", - "KC_DEL", - "C(KC_RBRC)", - "A(KC_LBRC)", - "C(KC_F10)", - "A(KC_RBRC)", - "C(KC_MINS)", - "C(KC_0)", - "C(KC_PPLS)" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "TO(0)", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_UP", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_LEFT", - "KC_DOWN", - "KC_RGHT", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_MS_BTN2", - "KC_PAUS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_NO", - "KC_NO", - "KC_NO", - "TO(0)", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "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_NO", - "KC_NO", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "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_NO", - "KC_NO", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "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_NO", - "KC_NO", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "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_NO", - "KC_NO", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "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_NO", - "KC_NO", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "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_NO", - "KC_NO", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ] - ] -} \ No newline at end of file diff --git a/keyboards/solartempest/9e/9e VIA keymap.json b/keyboards/solartempest/9e/9e VIA keymap.json deleted file mode 100644 index 21498184e2bd..000000000000 --- a/keyboards/solartempest/9e/9e VIA keymap.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "A9e" , - "vendorId": "0x414B", - "productId": "0x0009", - "lighting": "qmk_rgblight", - "matrix": { "rows": 4, "cols": 12 }, - "customKeycodes": [ - { - "name": "Super Alt Tab FWD", - "title": "Alt Tab Forwards in Windows", - "shortName": "ATABF" - }, - { - "name": "Super Alt Tab REV", - "title": "Alt Tab Reverse in Windows", - "shortName": "ATABR" - }, - { - "name": "Move Window Right", - "title": "Move Window Right in Windows", - "shortName": "MWR" - }, - { - "name": "Move Window Left", - "title": "Move Window Left in Windows", - "shortName": "MWL" - } - ], - "layouts": - { - "keymap": - [ - [{"x": 0.25},"0,0", {"x": 1}, "1,0",{"h": 1.5},"1,1","1,2", {"x": 1}, "0,3", "0,4", "0,5", "0,6", "0,7", "0,8", {"x": 1}, "0,9", {"h": 1.5},"0,10","0,11", {"x": 1}, "1,9",{"h": 1.5},"1,10","1,11"], - [{"w": 1.5},"0,1",{"x": 4.75}, "1,3", "1,4", "1,5", "1,6", "1,7", "1,8"], - [{"x": 0.25},"0,2", {"x": 1}, "2,0",{"h": 1.5},"2,1","2,2", {"x": 1}, "2,3", "2,4", "2,5", "2,6", "2,7", "2,8", {"x": 3}, "2,9",{"h": 1.5},"2,10","2,11"], - [{"x": 6.25, "y": 0.5}, "3,3",{"h": 1.5},"3,4","3,5", "3,6",{"h": 1.5},"3,7", "3,8", {"x": 3,"y": 1},"3,9",{"h": 1.5},"3,10","3,11"] - ] - } -} \ No newline at end of file diff --git a/keyboards/solartempest/9e/A9e.c b/keyboards/solartempest/9e/A9e.c deleted file mode 100644 index 3fc20a1961c1..000000000000 --- a/keyboards/solartempest/9e/A9e.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . -*/ - -#include "A9e.h" - -/* #define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 31, 32, 33, 34, 35, \ - 1, 30, 4, 5, 6, 7, 8, 9, \ - 0, 3, 10, 11, 12, 13, 14, 15, \ - 2, 41, 16, 17, 18, 19, 20, 21, 23, 36, \ - 40, 39, 22, 25, \ - 24, \ - 38, 27, 37, \ - 26, 29, \ - 28 )*/ -// E2 Keys Row 1 E4 E5 -// E1 Keys Row 2 E6 -// E3 Keys Row 3 -// E8 E9 E7 - -#ifdef RGB_MATRIX_ENABLE //Add in addressable LED underglow support with physical locations - led_config_t g_led_config = { { - //Key matrix to LED index - { 36, 35, 34, 33, 32, }, - {18, 37, 5, 4, 3, 2, 1, 0, }, - {19, 21, 11, 10, 9, 8, 7, 6, }, - {20, 38, 17, 16, 15, 14, 13, 12, 22, 31, }, - { 39, 40, 23, 25, }, - { 24, }, - { 41, 26, 30, }, - { 27, 29, }, - { 28, NO_LED, NO_LED, NO_LED, } - }, { - // LED Key Index to Physical Position, calculated with Plot Digitizer and scaled PCB Image with center at {110,110} - {150,98},{132,98},{116,98},{100,98},{84,98},{60,98}, - {150,80},{132,80},{116,80},{100,80},{84,80},{60,80}, - {150,64},{132,64},{116,64},{100,64},{84,64},{60,64}, - - {16,85},{7,76},{16,66},{24,76}, {192,74},{184,62}, - {192,52},{202,62}, {192,30},{184,20},{192,8},{202,19}, - - {209,32},{211,71},{191,105},{141,105},{101,104},{76,104}, - {52,98},{30,89},{30,63},{52,50},{141,44},{181,32} - }, { // LED Index to Flag. - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, // 4 for 18-key backlight. - 1,1,1,1,1,1,1,1,1,1,1,1, // 1 for 3*4LED large rotary encoders. - 2,2,2,2,2,2,2,2,2,2,2,2 // 2 for 12-case underglow. - } }; -#endif diff --git a/keyboards/solartempest/9e/A9e.h b/keyboards/solartempest/9e/A9e.h deleted file mode 100644 index cc6481b19bb5..000000000000 --- a/keyboards/solartempest/9e/A9e.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#ifndef A9E_H - #define A9E_H - - #include "quantum.h" - - #define KEYMAP( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ - K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ - K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ - K303, K304, K305, K306, K307, K308, K309, K310, K311 \ - ) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \ - { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \ - { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \ - { KC_NO, KC_NO, KC_NO, K303, K304, K305, K306, K307, K308, K309, K310, K311 } \ - } -#endif diff --git a/keyboards/solartempest/9e/config.h b/keyboards/solartempest/9e/config.h deleted file mode 100644 index a74b280bfb3b..000000000000 --- a/keyboards/solartempest/9e/config.h +++ /dev/null @@ -1,140 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . -*/ - -#ifndef CONFIG_H - #define CONFIG_H - - #include "config_common.h" - - /* USB Device descriptor parameter */ - #define VENDOR_ID 0x414B // AK - #define PRODUCT_ID 0x0009 // 9e - #define DEVICE_VER 0x0001 - #define MANUFACTURER Atlantis - #define PRODUCT A9e - #define DESCRIPTION Keyboard - - /* key matrix size */ - #define MATRIX_ROWS 4 - #define MATRIX_COLS 12 - - /* key matrix pins */ - #define MATRIX_ROW_PINS { F0, F1, F2, F3 } - #define MATRIX_COL_PINS { F5, F6, F7, A0, A1, A2, A3, A4, A5, B7, B6, B5 } //F5, F7, B7, B5 are unused on the MCU. They are needed for the encoder key matrix. - #define UNUSED_PINS - - /* encoder pins */ - #define ENCODERS_PAD_A { C0, C3, C5, C7, D1, D3, D5, D6, A7 } //Encoder pads ordered so on VIA mapping it is cw/ccw and up/down rotation orientation. - #define ENCODERS_PAD_B { C1, C2, C4, C6, D0, D2, D4, D7, A6 } - #define ENCODER_RESOLUTIONS { 4, 4, 4, 4, 4, 4, 4, 2, 2 } //Better control of individual encoders and encoder types. - //#define ENCODER_RESOLUTION 4 - - /* COL2ROW or ROW2COL */ - #define DIODE_DIRECTION COL2ROW - - /* Set 0 if debouncing isn't needed */ - #define DEBOUNCE 5 - - /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ - #define LOCKING_SUPPORT_ENABLE - - /* Locking resynchronize hack */ - #define LOCKING_RESYNC_ENABLE - - - #define RGB_DI_PIN E6 - #ifdef RGB_DI_PIN - #define RGBLIGHT_ANIMATIONS - #define RGBLIGHT_HUE_STEP 8 - #define RGBLIGHT_SAT_STEP 8 - #define RGBLIGHT_VAL_STEP 8 - #define RGBLIGHT_LAYERS - #define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF - #define RGBLIGHT_SLEEP // 18 keys, 9*3 encoders = 45 keys - #define RGBLED_NUM 42 // 18 keys + 12 encoders + 12 underglow for RGBLIGHT - #define RGBLIGHT_LIMIT_VAL 180 - - //RGB LED Conversion macro from physical array to electric array - //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping - #define LED_LAYOUT( \ - L01, L03, L05, L07, L08, \ - L10, L11, L12, L13, L14, L15, L16, L17, \ - L20, L21, L22, L23, L24, L25, L26, L27, \ - L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, \ - L41, L46, L47, L49, \ - L58, \ - L67, L68, L69, \ - L77, L79, \ - L88 )\ - { \ - L17,L16,L15,L14,L13,L12,L27,L26,L25,L24,L23,L22,L37,L36,L35,L34,L33,L32,L10,L20,L30,L21,L38,L47,L58,L49,L68,L77,L88,L79,L69,L39,L08,L07,L05,L03,L01,L11,L31,L41,L46,L67, \ - } - //RGB LED logical order map - //Left encoder -> keys -> right encoders -> backlight - #define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 31, 32, 33, 34, 35, \ - 1, 30, 4, 5, 6, 7, 8, 9, \ - 0, 3, 10, 11, 12, 13, 14, 15, \ - 2, 41, 16, 17, 18, 19, 20, 21, 23, 36, \ - 40, 39, 22, 25, \ - 24, \ - 38, 27, 37, \ - 26, 29, \ - 28 ) - #endif - - #ifdef RGB_MATRIX_ENABLE // For dynamic RGB Matrix effects - #define DRIVER_LED_TOTAL 42 // The number of LEDs connected for matrix, 18 keys + 12 encoders + 12 underglow - #define RGB_MATRIX_CENTER { 110, 110 }; - #define RGB_MATRIX_KEYPRESSES - #define DISABLE_RGB_MATRIX_ALPHAS_MODS //Remove effects not desired - #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN - #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT - #define DISABLE_RGB_MATRIX_BAND_SAT - #define DISABLE_RGB_MATRIX_BAND_VAL - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL - #define DISABLE_RGB_MATRIX_CYCLE_ALL - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL - #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON - #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL - #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL - #define DISABLE_RGB_MATRIX_DUAL_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS - #define DISABLE_RGB_MATRIX_RAINDROPS - #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS - #define DISABLE_RGB_MATRIX_HUE_BREATHING - #define DISABLE_RGB_MATRIX_HUE_PENDULUM - #define DISABLE_RGB_MATRIX_HUE_WAVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS - #define DISABLE_RGB_MATRIX_SPLASH - #define DISABLE_RGB_MATRIX_MULTISPLASH - #define DISABLE_RGB_MATRIX_SOLID_SPLASH - #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH - #endif - - -#endif diff --git a/keyboards/solartempest/9e/info.json b/keyboards/solartempest/9e/info.json deleted file mode 100644 index 82c46121d321..000000000000 --- a/keyboards/solartempest/9e/info.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "keyboard_name": "A9e", - "url": "", - "maintainer": "solartempest", - "width": 20.25, - "height": 5.5, - "layouts": { - "LAYOUT": { - "layout": [{"label":"0,0", "x":0.25, "y":0}, {"label":"1,0", "x":2.25, "y":0}, {"label":"1,1", "x":3.25, "y":0, "h":1.5}, {"label":"1,2", "x":4.25, "y":0}, {"label":"0,3", "x":6.25, "y":0}, {"label":"0,4", "x":7.25, "y":0}, {"label":"0,5", "x":8.25, "y":0}, {"label":"0,6", "x":9.25, "y":0}, {"label":"0,7", "x":10.25, "y":0}, {"label":"0,8", "x":11.25, "y":0}, {"label":"0,9", "x":13.25, "y":0}, {"label":"0,10", "x":14.25, "y":0, "h":1.5}, {"label":"0,11", "x":15.25, "y":0}, {"label":"1,9", "x":17.25, "y":0}, {"label":"1,10", "x":18.25, "y":0, "h":1.5}, {"label":"1,11", "x":19.25, "y":0}, {"label":"0,1", "x":0, "y":1, "w":1.5}, {"label":"1,3", "x":6.25, "y":1}, {"label":"1,4", "x":7.25, "y":1}, {"label":"1,5", "x":8.25, "y":1}, {"label":"1,6", "x":9.25, "y":1}, {"label":"1,7", "x":10.25, "y":1}, {"label":"1,8", "x":11.25, "y":1}, {"label":"0,2", "x":0.25, "y":2}, {"label":"2,0", "x":2.25, "y":2}, {"label":"2,1", "x":3.25, "y":2, "h":1.5}, {"label":"2,2", "x":4.25, "y":2}, {"label":"2,3", "x":6.25, "y":2}, {"label":"2,4", "x":7.25, "y":2}, {"label":"2,5", "x":8.25, "y":2}, {"label":"2,6", "x":9.25, "y":2}, {"label":"2,7", "x":10.25, "y":2}, {"label":"2,8", "x":11.25, "y":2}, {"label":"2,9", "x":15.25, "y":2}, {"label":"2,10", "x":16.25, "y":2, "h":1.5}, {"label":"2,11", "x":17.25, "y":2}, {"label":"3,3", "x":6.25, "y":3.5}, {"label":"3,4", "x":7.25, "y":3.5, "h":1.5}, {"label":"3,5", "x":8.25, "y":3.5}, {"label":"3,6", "x":9.25, "y":3.5}, {"label":"3,7", "x":10.25, "y":3.5, "h":1.5}, {"label":"3,8", "x":11.25, "y":3.5}, {"label":"3,9", "x":15.25, "y":4.5}, {"label":"3,10", "x":16.25, "y":4.5, "h":1.5}, {"label":"3,11", "x":17.25, "y":4.5}] - } - } -} diff --git a/keyboards/solartempest/9e/keymaps/default/keymap.c b/keyboards/solartempest/9e/keymaps/default/keymap.c deleted file mode 100644 index 916fa70260df..000000000000 --- a/keyboards/solartempest/9e/keymaps/default/keymap.c +++ /dev/null @@ -1,208 +0,0 @@ -#include "A9e.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - KEYMAP( - KC_L, KC_1, KC_R, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_L, KC_4, KC_R, - KC_L, KC_2, KC_R, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_L, KC_5, KC_R, - KC_L, KC_3, KC_R, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_L, KC_6, KC_R, - KC_UP, KC_8, KC_DOWN, RGB_VAI, KC_9, RGB_VAD, KC_L, KC_7, KC_R), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - - - switch (id) { - - } - return MACRO_NONE; -} - -void matrix_init_user(void) { -} - -void matrix_scan_user(void) { -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} - -void encoder_update_user(uint8_t index, bool clockwise) -{ - if (index == 0) { /* First encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 0)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 2)); - } - } else if (index == 1) { /* Second encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 0)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 2)); - }} else if (index == 2) { /* 3 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 0)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 2)); - }} else if (index == 3) { /* 4 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 9)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 11)); - }} else if (index == 4) { /* 5 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 9)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 11)); - }} else if (index == 5) { /* 6 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 9)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 11)); - }} else if (index == 6) { /* 7 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 9)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 11)); - }} else if (index == 7) { /* 8 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 3)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 5)); - }} else if (index == 8) { /* 9 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 6)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 8)); - } - } -} - - - -void led_set_user(uint8_t usb_led) { - - if (usb_led & (1 << USB_LED_NUM_LOCK)) { - - } else { - - } - - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - - } else { - - } - - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - - } else { - - } - - if (usb_led & (1 << USB_LED_COMPOSE)) { - - } else { - - } - - if (usb_led & (1 << USB_LED_KANA)) { - - } else { - - } - -} \ No newline at end of file diff --git a/keyboards/solartempest/9e/keymaps/via/config.h b/keyboards/solartempest/9e/keymaps/via/config.h deleted file mode 100644 index 8c2aeca25c0e..000000000000 --- a/keyboards/solartempest/9e/keymaps/via/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . -*/ - -#pragma once - -// Set 10 layers for VIA -#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/9e/keymaps/via/keymap.c b/keyboards/solartempest/9e/keymaps/via/keymap.c deleted file mode 100644 index 6b53279aa6bd..000000000000 --- a/keyboards/solartempest/9e/keymaps/via/keymap.c +++ /dev/null @@ -1,417 +0,0 @@ -#include "A9e.h" -#include QMK_KEYBOARD_H - -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = USER00, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML //Move window to monitor on left - }; -#else - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML //Move window to monitor on left - }; -#endif - - -//Keymap physical layout as follows: -// E2 Keys Row 1 E4 E5 -// E1 Keys Row 2 E6 -// E3 Keys Row 3 -// E8 E9 E7 -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( - KC_LEFT, KC__MUTE, KC_RIGHT, //Rotary Encoder 1 - TO(1), TO(2), TO(3), KC_P7, KC_P8, KC_P9, //Keys Row 1 - RGB_VAD, KC_SPACE, RGB_VAI, //Rotary Encoder 4 - RGB_MODE_REVERSE, RGB_TOG, RGB_MODE_FORWARD, //Rotary Encoder 2 - KC_CAPS, KC_SLCK, KC_NLCK, KC_P4, KC_P5, KC_P6, //Keys Row 2 - RGB_HUD, A(KC_F4), RGB_HUI, //Rotary Encoder 5 - ATABR, KC_MSTP, ATABF, //Rotary Encoder 3 - KC_WREF, KC_MYCM, KC_P0, KC_P1, KC_P2, KC_P3, //Keys Row 3 - KC_MS_WH_UP, C(KC_W), KC_MS_WH_DOWN, //Rotary Encoder 6 - C(S(KC_TAB)), KC_HOME, C(KC_TAB), //Rotary Encoder 8 - C(KC_PMNS), KC__MUTE, C(KC_PPLS), //Rotary Encoder 9 - C(S(KC_TAB)), C(KC_T), C(KC_TAB) //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), -}; - - -/*const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { //Code is not required - switch (id) { - } - return MACRO_NONE; -}*/ - -void matrix_init_user(void) { -} - -void matrix_scan_user(void) { - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { //For super alt tab keycodes - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - return true; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - return true; - - case NMR: //Move window to next monitor on right - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_RIGHT); - unregister_code(KC_RIGHT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - case NML: //Move window to next monitor on left - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_LEFT); - unregister_code(KC_LEFT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - } - return true; -} - - -bool encoder_update_user(uint8_t index, bool clockwise) -{ - if (index == 0) { /* 1 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 1) { /* 2 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 2) { /* 3 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 3) { /* 4 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 4) { /* 5 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col =9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col =9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 5) { /* 6 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 6) { /* 7 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 7) { /* 8 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 3}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 3}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 5}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 5}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 8) { /* 9 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 6}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 6}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 8}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 8}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - return true; -} - - -#ifdef RGBLIGHT_ENABLE - // RGB Layer Light Settings - Note that this will fix the key switches with same LED colour and brightness - const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 95,255,90}); //Spring green - const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 30,255,120}); //Yellow-orange - const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 128,255,100}); //Cyan - const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 215,255,120}); //Magenta - const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 2, 43,100,160}); //White-left caps lock indication (No dedicated LED) - const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({8, 2, 43,100,150}); //White-right num lock indication (No dedicated LED) - const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({6, 2, 43,100,160}); //White-middle scroll lock indication (No dedicated LED) - const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers - my_layer0_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_capslock_layer, //Highest status indicators override other layers - my_numlock_layer, - my_scrollock_layer - ); -#endif - -void keyboard_post_init_user(void) -{ - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_layers = my_rgb_layers;// Enable the LED layers - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 - layer_move(0); //start on layer 0 to get the lighting activated - #endif -} - - -#ifdef RGBLIGHT_ENABLE - layer_state_t layer_state_set_user(layer_state_t state) - { - rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active - rgblight_set_layer_state(1, layer_state_cmp(state, 1)); - rgblight_set_layer_state(2, layer_state_cmp(state, 2)); - rgblight_set_layer_state(3, layer_state_cmp(state, 3)); - - switch(biton32(state)){ // Change all other LEDs based on layer state as well - case 0: - rgblight_sethsv_noeeprom(50,255,30); - break; - case 1: - rgblight_sethsv_noeeprom(30,255,30); - break; - case 2: - rgblight_sethsv_noeeprom(106,255,30); - break; - case 3: - rgblight_sethsv_noeeprom(215,255,30); - break; - default: - rgblight_sethsv_noeeprom(64,255,30); - } - return state; - } - - bool led_update_user(led_t led_state) - { - rgblight_set_layer_state(4, led_state.caps_lock); //Activate capslock lighting layer - rgblight_set_layer_state(5, !(led_state.num_lock)); //Invert the indication so numlock does not always appear "on". - rgblight_set_layer_state(6, led_state.scroll_lock); //Activate scrollock lighting layer - return true; - } -#endif diff --git a/keyboards/solartempest/9e/keymaps/via/rules.mk b/keyboards/solartempest/9e/keymaps/via/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/solartempest/9e/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/solartempest/9e/readme.md b/keyboards/solartempest/9e/readme.md deleted file mode 100644 index 38b472d3326a..000000000000 --- a/keyboards/solartempest/9e/readme.md +++ /dev/null @@ -1,42 +0,0 @@ -# Atlantis 9e Macropad - -![Atlantis 9e](https://i.imgur.com/hFuZyXU.jpg) - -A 18-key macro pad with 9 pushbutton rotary encoders and underglow RGB per key RGB and for the case. - -For detailed instructions on using VIA and flashing, please refer to the sections further down the page! - -* Keyboard Maintainer: solartempest -* Hardware Supported: Atlantis 9e -* Hardware Availability: [rioo897](https://shop198276076.world.taobao.com/index.htm?spm=2013.1.w5002-23418336364.2.3f4d7d51DkVX3s) - -# Custom Features: - -- 9 remappable rotary encoder controling a variety of different things! -- RGB underglow support and remapped to physical locations. -- Adds custom layer lighting with custom gradients for each and static colours for the switches. -- Adds white caps lock, scroll lock, and num lock key indicators on the top row. -- VIA support included by default. -- Allows for remapping of per-layer rotary encoder functions in VIA. -- Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders. -- Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders. - - -## Flashing - -Make example for this keyboard (after setting up your build environment): - - qmk compile -kb solartempest/9e -km via - -- Please note that QMK toolbox and configurator cannot be used to flash this board. -- You will need to use an ISP Programmer to directly flash the 9e. No board reset is required, as you will flash the MCU directly. -- I used Prog ISP V2.0 but other AVR programmers will also work. -- Use a 12P AWM 20624 ribbon cable with FCP-12P-1.0mm breakout board. Only 10 pins are used. - -## Using with VIA - -- After flashing, in VIA make sure to Import Keymap, which is "9e VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. -- Go to Save+Load to Load Saved Layout. You can import my own layout "9e VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. -- It is a good idea to Save Current Layout after you decide on your mapping. - -See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/solartempest/9e/rules.mk b/keyboards/solartempest/9e/rules.mk deleted file mode 100644 index 782755a42c25..000000000000 --- a/keyboards/solartempest/9e/rules.mk +++ /dev/null @@ -1,63 +0,0 @@ -# MCU name -MCU = at90usb646 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. - -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -TERMINAL_ENABLE = no # Terminal interface feature, very large. -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -RGBLIGHT_ENABLE = no # RGB LEDs -RGB_MATRIX_ENABLE = no # RGB matrix for individual LED control (In progress only) -RGB_MATRIX_DRIVER = WS2812 # Addressable LED strand driver -RGBLIGHT_SLEEP = yes # LEDs off when sleeping -NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -KEY_LOCK_ENABLE = no # Key lock functionality -ENCODER_ENABLE = yes # Encoders -LTO_ENABLE = yes # Save space -LEADER_ENABLE = no # Leader keys -COMBO_ENABLE = no # Combo keys -UNICODE_ENABLE = no # Unicode diff --git a/keyboards/solartempest/ps17/config.h b/keyboards/solartempest/ps17/config.h deleted file mode 100644 index a22d17fcb719..000000000000 --- a/keyboards/solartempest/ps17/config.h +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once -#include "config_common.h" - -// USB Device descriptor parameter -#define VENDOR_ID 0x414B // "AK" -#define PRODUCT_ID 0x0015 -#define DEVICE_VER 0x0002 // Ver2 -#define MANUFACTURER ATLANTIS -#define PRODUCT PS17 - -//#define ENCODER_RESOLUTION 2 // default is 4 - -// key matrix size -#ifdef RGBLIGHT_ENABLE - #define MATRIX_ROWS 6 -#endif -#ifdef RGB_MATRIX_ENABLE - #define MATRIX_ROWS 11 //Numpad actually has 6 rows. 5 rows were added for underglow RGB matrix to work together -#endif -#define MATRIX_COLS 4 - -// Encoder matrix -#define ENCODERS_PAD_A { D1 } -#define ENCODERS_PAD_B { D2 } -//#define ENCODER_DIRECTION_FLIP - -#define MATRIX_ROW_PINS { F0, B4, B5, B6, C6, C7 } //Rotary encoder SPST is on F0,F7 -#define MATRIX_COL_PINS { F6, F7, D3, D6 } -#define UNUSED_PINS - -// COL2ROW or ROW2COL -#define DIODE_DIRECTION COL2ROW - -// For LED status indicators -#define LED_NUM_LOCK_PIN D0 -#define LED_CAPS_LOCK_PIN D5 -#define LED_SCROLL_LOCK_PIN D4 -#define LED_PIN_ON_STATE 0 - -#define RGB_DI_PIN B7 -#ifdef RGBLIGHT_ENABLE - #define RGBLED_NUM 28 // 17 key + 11 underglow for RGBLIGHT - #define RGBLIGHT_HUE_STEP 8 - #define RGBLIGHT_SAT_STEP 8 - #define RGBLIGHT_VAL_STEP 8 - #define RGBLIGHT_DEFAULT_VAL 40 // default brightness on clearing EEPROM - #define RGBLIGHT_LIMIT_VAL 180 // brightness level max is 255 - #define RGBLIGHT_LAYERS - #define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF - #define RGBLIGHT_SLEEP // if defined, RGB lighting off when host is sleeping - #define RGBLIGHT_ANIMATIONS - - //RGB LED Conversion macro from physical array to electric array - //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping - #define LED_LAYOUT( \ - L00, L05, \ - L10, L15, \ - L20, L21, L22, L23, L24, L25, \ - L31, L32, L33, L34, \ - L40, L41, L42, L43, L45, \ - L51, L52, L53, L54, \ - L60, L61, L62, L63, L65 ) \ - { \ - L21,L22,L23,L24,L31,L32,L33,L34,L41,L42,L43,L51,L52,L53,L54,L61,L63,L60,L40,L20,L10,L00,L05,L15,L25,L45,L65,L62, \ - } - //RGB LED logical order map - //Right->Left, Top->Bottom - #define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 1, 0, \ - 3, 2, \ - 9, 8, 7, 6, 5, 4, \ - 13, 12, 11, 10, \ - 18, 17, 16, 15, 14, \ - 22, 21, 20, 19, \ - 27, 26, 25, 24, 23 ) -#endif - -#ifdef RGB_MATRIX_ENABLE // For dynamic RGB Matrix effects - #define DRIVER_LED_TOTAL 28 // The number of LEDs connected for matrix, 17 key + 11 underglow - #define RGB_MATRIX_CENTER { 126, 126 }; - #define RGB_MATRIX_KEYPRESSES - #define DISABLE_RGB_MATRIX_ALPHAS_MODS //Remove effects not desired - #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN - #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT - #define DISABLE_RGB_MATRIX_BAND_SAT - #define DISABLE_RGB_MATRIX_BAND_VAL - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL - #define DISABLE_RGB_MATRIX_CYCLE_ALL - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL - #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON - #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL - #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL - #define DISABLE_RGB_MATRIX_DUAL_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS - #define DISABLE_RGB_MATRIX_RAINDROPS - #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS - #define DISABLE_RGB_MATRIX_HUE_BREATHING - #define DISABLE_RGB_MATRIX_HUE_PENDULUM - #define DISABLE_RGB_MATRIX_HUE_WAVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS - #define DISABLE_RGB_MATRIX_SPLASH - #define DISABLE_RGB_MATRIX_MULTISPLASH - #define DISABLE_RGB_MATRIX_SOLID_SPLASH - #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH -#endif - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -#define COMBO_COUNT 6 //Number of tap combos used -#define COMBO_TERM 350 //Default combo time is 200ms - -#define TAPPING_TERM 200 //Tap dance time diff --git a/keyboards/solartempest/ps17/info.json b/keyboards/solartempest/ps17/info.json deleted file mode 100644 index 2806bc0128d6..000000000000 --- a/keyboards/solartempest/ps17/info.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "keyboard_name": "Atlantis PS17 Macropad", - "url": "", - "maintainer": "solartempest", - "width": 4, - "height": 6, - "layouts": { - "LAYOUT": { - "layout": [ - {"x":0, "y":0, "h":1.5}, - {"x":0, "y":1}, - {"x":0, "y":2, "h":1.5}, - - {"x":1, "y":0}, - {"x":1, "y":1}, - {"x":1, "y":2}, - {"x":1, "y":3}, - - {"x":2, "y":0}, - {"x":2, "y":1}, - {"x":2, "y":2}, - {"x":2, "y":3, "h":2}, - - {"x":3, "y":0}, - {"x":3, "y":1}, - {"x":3, "y":2}, - - {"x":4, "y":0}, - {"x":4, "y":1}, - {"x":4, "y":2}, - {"x":4, "y":3, "h":2}, - - {"x":5, "y":0, "w":2}, - {"x":5, "y":2}, - ] - } - } -} diff --git a/keyboards/solartempest/ps17/keymaps/default/keymap.c b/keyboards/solartempest/ps17/keymaps/default/keymap.c deleted file mode 100644 index 3dc48708a4ef..000000000000 --- a/keyboards/solartempest/ps17/keymaps/default/keymap.c +++ /dev/null @@ -1,365 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include QMK_KEYBOARD_H -#include "PS17.h" -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. Don't forget to update the VIA json as well. - ATABF = USER00, //Alt tab forwards - ATABR //Alt tab reverse - }; -#else - enum custom_keycodes { //Use SAFE_RANGE when Via is disabled. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR //Alt tab reverse - }; -#endif - - -enum combos { //Tap combos - kppls_7, - kppls_8 -}; - -const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; -const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; - -combo_t key_combos[COMBO_COUNT] = { - [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), - [kppls_8] = COMBO(kppl8_combo, KC_DELETE) -}; - - -// Tap Dance declarations -enum { - TD_MINUS_NUMLOCK, -}; - -// Tap Dance definitions -qk_tap_dance_action_t tap_dance_actions[] = { - // Tap once for Escape, twice for Caps Lock - [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), -}; - -//TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode - - -enum layer_names { - _LAYER0, - _LAYER1, - _LAYER2, - _LAYER3, - _LAYER4, - _LAYER5, - _LAYER6, - _LAYER7, - _LAYER8, - _LAYER9 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAYER0] = LAYOUT( - KC_PGUP, KC__MUTE, KC_PGDOWN, - MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, TD(TD_MINUS_NUMLOCK), - KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, - KC_KP_4, KC_KP_5, KC_KP_6, - KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, - KC_KP_0, KC_KP_DOT - ), - [_LAYER1] = LAYOUT( - KC_LEFT, KC_TRNS, KC_RIGHT, - KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, - TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, RESET, - RESET, KC_TRNS - ), - [_LAYER2] = LAYOUT( - KC_TRNS, KC_TRNS, KC_TRNS, - TO(0), KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO - ), - [_LAYER3] = LAYOUT( - ATABR, KC_TRNS, ATABF, - TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), - C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, - KC_PGDOWN, KC_PGUP - ), - [_LAYER4] = LAYOUT( - ATABR, KC_TRNS, ATABF, - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_RIGHT, - C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_SCROLLLOCK, - KC_F13, KC_F14 - ), - [_LAYER5] = LAYOUT( - 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 - ), - [_LAYER6] = LAYOUT( - 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 - ), - [_LAYER7] = LAYOUT( - 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 - ), - [_LAYER8] = LAYOUT( - 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 - ), - [_LAYER9] = LAYOUT( - 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 - ) -}; - - -void matrix_init_user(void) { //run when matrix is initiated, before all features init -}; - -void matrix_scan_user(void) { //run whenever user matrix is scanned - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { //Actions to override existing key behaviours - switch (keycode) { //For super alt tab keycodes - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - break; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - break; - } - return true; -}; - - -void keyboard_post_init_user(void) { //run as last task in keyboard init - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(58, 255, 80); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_enable(); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9. Looks great this way! - rgblight_sethsv(58, 255, 30); //Set lower default brightness when connected as the right side dimming is not yet in effect - #endif -}; - - -#ifdef RGBLIGHT_ENABLE -layer_state_t layer_state_set_user(layer_state_t state) { - switch (get_highest_layer(state)) { - //This custom layer lighting is similar to RGB Light Gradient 9, but customized to separate key and case underglow brightness - static uint16_t underglow_brightness = 140; - static uint16_t perkey_brightness = 80; - static uint16_t lastrow_brightness = 15; //for less shine-through at case edges - static uint16_t current_hue = 0; //hue calculated to be used - static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue - static uint16_t layer0_hueincrement = 2; //hue gradient colour increment - static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green - static uint16_t layer1_hueincrement = 2; //hue gradient colour increment - static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) - static uint16_t layer2_hueincrement = 2; //hue gradient colour increment - static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple - static uint16_t layer3_hueincrement = 2; //hue gradient colour increment - static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red - static uint16_t layer4_hueincrement = 1; //hue gradient colour increment - - /*#define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 1, 0, \ - 3, 2, \ - 9, 8, 7, 6, 5, 4, \ - 13, 12, 11, 10, \ - 18, 17, 16, 15, 14,\ - 22, 21, 20, 19, \ - 27, 26, 25, 24, 23 )*/ - - case _LAYER0: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER1: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER2: //Photoshop custom layer (macros and keys all done in VIA) - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3) { //Underglow LEDs - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } - else if (i == 6) {rgblight_sethsv_at(148,255,perkey_brightness+15,i);} //Text - light blue - else if (i == 5) {rgblight_sethsv_at(140,255,perkey_brightness+15,i);} //New Layer - light blue - else if (i == 15) {rgblight_sethsv_at(195,255,perkey_brightness+15,i);} //Marquee - rose - else if (i == 9) {rgblight_sethsv_at(190,255,underglow_brightness,i);} //Underglow to match - else if (i == 13) {rgblight_sethsv_at(180,255,perkey_brightness+15,i);} //Healing Brush - purple - else if (i == 12) {rgblight_sethsv_at(185,255,perkey_brightness+15,i);} //Clone - else if (i == 11) {rgblight_sethsv_at(190,255,perkey_brightness+15,i);} //Default - else if (i == 7) {rgblight_sethsv_at(195,255,perkey_brightness+15,i);} //Brush - else if (i == 18) {rgblight_sethsv_at(230,255,underglow_brightness,i);} //Underglow to match - else if (i == 17) {rgblight_sethsv_at(0,255,perkey_brightness+15,i);} //copy - red - else if (i == 16) {rgblight_sethsv_at(3,255,perkey_brightness+15,i);} //Paste - else if (i == 22) {rgblight_sethsv_at(5,255,perkey_brightness+15,i);} //Undo - else if (i == 21) {rgblight_sethsv_at(0,255,perkey_brightness+15,i);} //Redo - else if (i == 26) {rgblight_sethsv_at(200,255,lastrow_brightness+15,i);} //Space - blue - else if (i == 24) {rgblight_sethsv_at(195,255,lastrow_brightness+15,i);} //Alt - else if (i == 20) {rgblight_sethsv_at(190,255,lastrow_brightness+15,i);} //Shift - else if (i == 27) {rgblight_sethsv_at(200,255,underglow_brightness,i);} //Underglow to match - else if (i == 10) {rgblight_sethsv_at(current_hue,255,lastrow_brightness,i);} //Zoom in - else if (i == 19) {rgblight_sethsv_at(current_hue,255,lastrow_brightness,i);} //Zoom out - else if (i == 25) {rgblight_sethsv_at(180,255,underglow_brightness,i);} //Underglow to match - else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code is for normal gradient colouration - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case _LAYER3: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER4: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - } - return state; - }; -#endif diff --git a/keyboards/solartempest/ps17/keymaps/via/config.h b/keyboards/solartempest/ps17/keymaps/via/config.h deleted file mode 100644 index 4bbacd9a507b..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once - -// Set 10 layers for VIA -#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/ps17/keymaps/via/keymap.c b/keyboards/solartempest/ps17/keymaps/via/keymap.c deleted file mode 100644 index b75dc6fc7272..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via/keymap.c +++ /dev/null @@ -1,507 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include QMK_KEYBOARD_H -#include "PS17.h" -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - - -// IDLE TIMEOUTS -#ifdef IDLE_TIMEOUT_ENABLE - #define TIMEOUT_THRESHOLD_DEFAULT 5 // default timeout minutes - #define TIMEOUT_THRESHOLD_MAX 140 // upper limits (2 hours and 10 minutes -- no rgb indicators above this value) - - //prototype functions - uint16_t get_timeout_threshold(void); - void timeout_reset_timer(void); - void timeout_update_threshold(bool increase); - void timeout_tick_timer(void); -#endif //IDLE_TIMEOUT_ENABLE - - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -bool spam_arrow; -uint16_t spam_timer = false; -uint16_t spam_interval = 1000; // (1000ms == 1s) -bool teams_muted; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = USER00, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. - TEAMSMUTE //MS Teams mute shortcut and simple LED status - }; -#else - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. - TEAMSMUTE //MS Teams mute shortcut and simple LED status - }; -#endif - -#ifdef COMBO_ENABLE //Tap combos - enum combos { - kppls_7, //Hold plus and 7 to backspace - kppls_8, //Hold plus and 8 to delete - kpent_4, //Hold enter and 4 for left arrow - kpent_5, //Hold enter and 5 for down arrow - kpent_6, //Hold enter and 6 for right arrow - kpent_8, //Hold enter and 4'8 for up arrow - }; - const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; - const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; - const uint16_t PROGMEM kpent4_combo[] = {KC_PENT, KC_KP_4, COMBO_END}; - const uint16_t PROGMEM kpent5_combo[] = {KC_PENT, KC_KP_5, COMBO_END}; - const uint16_t PROGMEM kpent6_combo[] = {KC_PENT, KC_KP_6, COMBO_END}; - const uint16_t PROGMEM kpent8_combo[] = {KC_PENT, KC_KP_8, COMBO_END}; - combo_t key_combos[COMBO_COUNT] = { - [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), - [kppls_8] = COMBO(kppl8_combo, KC_DELETE), - [kpent_4] = COMBO(kpent4_combo, KC_LEFT), - [kpent_5] = COMBO(kpent5_combo, KC_DOWN), - [kpent_6] = COMBO(kpent6_combo, KC_RGHT), - [kpent_8] = COMBO(kpent8_combo, KC_UP) - }; -#endif - -#ifdef TAP_DANCE_ENABLE// Tap Dance definitions. Not VIA compatible. - enum { - TD_MINUS_NUMLOCK, - }; - qk_tap_dance_action_t tap_dance_actions[] = { - // Tap once for Escape, twice for Caps Lock - [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), - }; - //TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode (non-VIA only) -#endif - - -enum layer_names { - _LAYER0, - _LAYER1, - _LAYER2, - _LAYER3, - _LAYER4, - _LAYER5, - _LAYER6, - _LAYER7, - _LAYER8, - _LAYER9 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAYER0] = LAYOUT( - KC_PGDOWN, KC__MUTE, KC_PGUP, - MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, - KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, - KC_KP_4, KC_KP_5, KC_KP_6, - KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, - KC_KP_0, KC_KP_DOT - ), - [_LAYER1] = LAYOUT( - KC_RIGHT, KC_TRNS, KC_LEFT, - KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, - TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, RESET, - RESET, KC_TRNS - ), - [_LAYER2] = LAYOUT( - KC_RBRACKET, KC_TRNS, KC_LBRACKET, - TO(0), KC_B, KC_T, C(S(KC_N)), - KC_J, KC_S, KC_D, C(KC_MINS), - C(KC_C), C(KC_V), KC_M, - C(KC_N), C(S(KC_Z)), KC_LSHIFT, C(KC_PPLS), - KC_SPACE, KC_LALT - ), - [_LAYER3] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), - C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, - KC_PGDOWN, KC_PGUP - ), - [_LAYER4] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_RIGHT, - C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_NUMLOCK, - KC_F13, KC_F14 - ), - [_LAYER5] = LAYOUT( - 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 - ), - [_LAYER6] = LAYOUT( - 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 - ), - [_LAYER7] = LAYOUT( - 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 - ), - [_LAYER8] = LAYOUT( - 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 - ), - [_LAYER9] = LAYOUT( - 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 - ) -}; - - -void matrix_init_user(void) { //run when matrix is initiated, before all features init -}; - - -// TIMEOUTS -#ifdef IDLE_TIMEOUT_ENABLE - static uint16_t timeout_timer = 0; - static uint16_t timeout_counter = 0; //in minute intervals - static uint16_t timeout_threshold = TIMEOUT_THRESHOLD_DEFAULT; - - uint16_t get_timeout_threshold(void) { - return timeout_threshold; - } - - void timeout_reset_timer(void) { - timeout_timer = timer_read(); - timeout_counter = 0; - }; - - void timeout_update_threshold(bool increase) { - if (increase && timeout_threshold < TIMEOUT_THRESHOLD_MAX) timeout_threshold++; - if (!increase && timeout_threshold > 0) timeout_threshold--; - }; - - void timeout_tick_timer(void) { - if (timeout_threshold > 0) { - if (timer_elapsed(timeout_timer) >= 60000) { // 1 minute tick - timeout_counter++; - timeout_timer = timer_read(); - } - #ifdef RGB_MATRIX_ENABLE - if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { - rgb_matrix_disable_noeeprom(); - } - #endif - #ifdef RGBLIGHT_ENABLE - if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { - rgblight_toggle_noeeprom(); - } - #endif - } // timeout_threshold = 0 will disable timeout - } - - __attribute__((weak)) void matrix_scan_keymap(void) {} -#endif // IDLE_TIMEOUT_ENABLE - - -void matrix_scan_user(void) { //run whenever user matrix is scanned - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } - if (spam_arrow && timer_elapsed(spam_timer) >= spam_interval) { - spam_timer = timer_read(); - //tap_code(KC_UP); - //tap_code(KC_DOWN); - tap_code(KC_F24); - } - - #ifdef IDLE_TIMEOUT_ENABLE - timeout_tick_timer(); - matrix_scan_keymap(); - #endif // IDLE_TIMEOUT_ENABLE -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { //For keycode overrides - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - return true; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - return true; - - case NMR: //Move window to next monitor on right - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_RIGHT); - unregister_code(KC_RIGHT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - case NML: //Move window to next monitor on left - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_LEFT); - unregister_code(KC_LEFT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - - case SPAMARROW: // Moves arrow up and down - if (record->event.pressed) { - spam_arrow ^= 1; - spam_timer = timer_read(); - if(spam_arrow==1) { //Change LED colour on bottom row and underglow to orange to indicate on - rgblight_sethsv_at(15,255,120,24); - rgblight_sethsv_at(15,255,120,25); - rgblight_sethsv_at(15,255,120,26); - rgblight_sethsv_at(15,255,120,27); - } - else { - rgblight_sethsv_at(180,255,120,24); //Set LEDs back to purple, assuming on that coloured layer - rgblight_sethsv_at(180,255,120,25); - rgblight_sethsv_at(180,255,120,26); - rgblight_sethsv_at(180,255,120,27); - } - } - return false; - - case TEAMSMUTE: //Mute MS teams and simply change LED for key 1 colour - if (record->event.pressed) { - register_code(KC_LCTRL); - register_code(KC_LSFT); - register_code(KC_M); - unregister_code(KC_M); - unregister_code(KC_LSFT); - unregister_code(KC_LCTRL); - teams_muted ^= 1; - if(teams_muted==1) { //Change LED colour on LEDs for key 1 and underglow to orange to indicate muted - rgblight_sethsv_at(15,255,120,18); - rgblight_sethsv_at(15,255,120,22); - } - else { - rgblight_sethsv_at(175,255,120,18); //Set LEDs back to violet, assuming on that coloured layer - rgblight_sethsv_at(175,255,120,22); - } - } - return true; - } - return true; -} - - -// RGB Layer Light Settings - Note that this will fix the key switch LED colour and brightness -const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Spring green (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 5,255,120}); //Yellow-orange (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); //Cyan (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); //Magenta (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 15,255,120}); //Orange-red (Code is extra for static key lighting of layers) -const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers - my_layer0_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_layer4_layer -); - - -void keyboard_post_init_user(void) { //run as last task in keyboard init - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_layers = my_rgb_layers;// Enable the LED layers - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 - layer_move(0); //start on layer 0 to get the lighting activated - #endif -}; - - -#ifdef RGBLIGHT_ENABLE -layer_state_t layer_state_set_user(layer_state_t state) { - rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active - rgblight_set_layer_state(1, layer_state_cmp(state, 1)); - rgblight_set_layer_state(2, layer_state_cmp(state, 2)); - rgblight_set_layer_state(3, layer_state_cmp(state, 3)); - rgblight_set_layer_state(4, layer_state_cmp(state, 4)); - - /*static uint16_t underglow_brightness = 140; //This code can be used to have edge and underglow LEDs selectively brighter - static uint16_t perkey_brightness = 80; - static uint16_t lastrow_brightness = 50; //for less shine-through at case edges (brighter is okay for FR4 plate) - static uint16_t current_hue = 0; //hue calculated to be used - static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue - static uint16_t layer0_hueincrement = 2; //hue gradient colour increment - static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green - static uint16_t layer1_hueincrement = 2; //hue gradient colour increment - static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) - static uint16_t layer2_hueincrement = 2; //hue gradient colour increment - static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple - static uint16_t layer3_hueincrement = 2; //hue gradient colour increment - static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red - static uint16_t layer4_hueincrement = 1; //hue gradient colour increment - */ - // This is what the LED layout is. - // 1, 0, - // 3, 2, - // 9, 8, 7, 6, 5, 4, - // 13, 12, 11, 10, - // 18, 17, 16, 15, 14, - // 22, 21, 20, 19, - // 27, 26, 25, 24, 23 - - switch(biton32(state)){ // Change all other LEDs based on layer state as well - case 0: - rgblight_sethsv_noeeprom(50,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case 1: - rgblight_sethsv_noeeprom(5,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case 2: - rgblight_sethsv_noeeprom(128,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case 3: - rgblight_sethsv_noeeprom(215,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case 4: - rgblight_sethsv_noeeprom(15,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - } - return state; - }; -#endif diff --git a/keyboards/solartempest/ps17/keymaps/via/rules.mk b/keyboards/solartempest/ps17/keymaps/via/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/config.h b/keyboards/solartempest/ps17/keymaps/via_bright/config.h deleted file mode 100644 index 4bbacd9a507b..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via_bright/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once - -// Set 10 layers for VIA -#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c b/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c deleted file mode 100644 index 6c422f8be38d..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c +++ /dev/null @@ -1,332 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include QMK_KEYBOARD_H -#include "PS17.h" -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = USER00, //Alt tab forwards - ATABR //Alt tab reverse - }; -#else - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR //Alt tab reverse - }; -#endif - - -enum combos { //Tap combos - kppls_7, - kppls_8 -}; - -const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; -const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; - -combo_t key_combos[COMBO_COUNT] = { - [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), - [kppls_8] = COMBO(kppl8_combo, KC_DELETE) -}; - - -// Tap Dance declarations -enum { - TD_MINUS_NUMLOCK, -}; - -// Tap Dance definitions. Not VIA compatible. -qk_tap_dance_action_t tap_dance_actions[] = { - // Tap once for Escape, twice for Caps Lock - [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), -}; -//TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode - - -enum layer_names { - _LAYER0, - _LAYER1, - _LAYER2, - _LAYER3, - _LAYER4, - _LAYER5, - _LAYER6, - _LAYER7, - _LAYER8, - _LAYER9 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAYER0] = LAYOUT( - KC_PGDOWN, KC__MUTE, KC_PGUP, - MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, - KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, - KC_KP_4, KC_KP_5, KC_KP_6, - KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, - KC_KP_0, KC_KP_DOT - ), - [_LAYER1] = LAYOUT( - KC_RIGHT, KC_TRNS, KC_LEFT, - KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, - TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, RESET, - RESET, KC_TRNS - ), - [_LAYER2] = LAYOUT( - KC_RBRACKET, KC_TRNS, KC_LBRACKET, - TO(0), KC_B, KC_T, C(S(KC_N)), - KC_J, KC_S, KC_D, C(KC_MINS), - C(KC_C), C(KC_V), KC_M, - C(KC_N), C(S(KC_Z)), KC_LSHIFT, C(KC_PPLS), - KC_SPACE, KC_LALT - ), - [_LAYER3] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), - C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, - KC_PGDOWN, KC_PGUP - ), - [_LAYER4] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_RIGHT, - C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_NUMLOCK, - KC_F13, KC_F14 - ), - [_LAYER5] = LAYOUT( - 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 - ), - [_LAYER6] = LAYOUT( - 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 - ), - [_LAYER7] = LAYOUT( - 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 - ), - [_LAYER8] = LAYOUT( - 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 - ), - [_LAYER9] = LAYOUT( - 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 - ) -}; - - -void matrix_init_user(void) { //run when matrix is initiated, before all features init -}; - -void matrix_scan_user(void) { //run whenever user matrix is scanned - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { //Actions to override existing key behaviours - switch (keycode) { //For super alt tab keycodes - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - break; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - break; - } - return true; -}; - - -void keyboard_post_init_user(void) { //run as last task in keyboard init - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(58, 255, 80); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_enable(); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9. Looks great this way! - rgblight_sethsv(58, 255, 100); //Set lower default brightness when connected as the right side dimming is not yet in effect - layer_move(0); //start on layer 0 to get the lighting activated - #endif -}; - - -#ifdef RGBLIGHT_ENABLE -layer_state_t layer_state_set_user(layer_state_t state) { - switch (get_highest_layer(state)) { - //This custom layer lighting is similar to RGB Light Gradient 9, but customized to separate key and case underglow brightness - static uint16_t underglow_brightness = 120; - static uint16_t perkey_brightness = 120; - static uint16_t lastrow_brightness = 30; //for less shine-through at case edges - static uint16_t current_hue = 0; //hue calculated to be used - static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue - static uint16_t layer0_hueincrement = 2; //hue gradient colour increment - static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green - static uint16_t layer1_hueincrement = 2; //hue gradient colour increment - static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) - static uint16_t layer2_hueincrement = 2; //hue gradient colour increment - static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple - static uint16_t layer3_hueincrement = 2; //hue gradient colour increment - static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red - static uint16_t layer4_hueincrement = 1; //hue gradient colour increment - - /*#define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 1, 0, \ - 3, 2, \ - 9, 8, 7, 6, 5, 4, \ - 13, 12, 11, 10, \ - 18, 17, 16, 15, 14,\ - 22, 21, 20, 19, \ - 27, 26, 25, 24, 23 )*/ - - case _LAYER0: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER1: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER2: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code is for normal gradient colouration - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER3: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER4: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - } - return state; - }; -#endif diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/rules.mk b/keyboards/solartempest/ps17/keymaps/via_bright/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via_bright/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/solartempest/ps17/ps17 VIA keymap.json b/keyboards/solartempest/ps17/ps17 VIA keymap.json deleted file mode 100644 index d906b47dbb7a..000000000000 --- a/keyboards/solartempest/ps17/ps17 VIA keymap.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "PS17" , - "vendorId": "0x414B", - "productId": "0x0015", - "lighting": "qmk_rgblight", - "matrix": { "rows": 6, "cols": 4 }, - "customKeycodes": [ - { - "name": "Super Alt Tab FWD", - "title": "Alt Tab Forwards in Windows", - "shortName": "ATABF" - }, - { - "name": "Super Alt Tab REV", - "title": "Alt Tab Reverse in Windows", - "shortName": "ATABR" - }, - { - "name": "Move Window Right", - "title": "Move Window Right in Windows", - "shortName": "MWR" - }, - { - "name": "Move Window Left", - "title": "Move Window Left in Windows", - "shortName": "MWL" - }, - { - "name": "Spam Arrow", - "title": "Toggle F24 on interval timer with Orange LED", - "shortName": "SA" - }, - { - "name": "Teams Muted", - "title": "Simply Change LED of 1 to show if muted or not", - "shortName": "TM" - } - ], - "layouts": - { - "keymap": - [ - [{"w": 1, "h":1.5},"0,0", "0,1", {"w": 1, "h":1.5},"0,2"], - [{"y":0.75}, "1,0", "1,1", "1,2", "1,3"], - [ "2,0", "2,1", "2,2", {"h":2},"2,3"], - [ "3,0","3,1","3,2"], - [ "4,0", "4,1", "4,2", {"h":2},"4,3"], - [{"w": 2},"5,0", "5,2"] - ] - } -} \ No newline at end of file diff --git a/keyboards/solartempest/ps17/ps17 VIA layout.json b/keyboards/solartempest/ps17/ps17 VIA layout.json deleted file mode 100644 index 6671cee90952..000000000000 --- a/keyboards/solartempest/ps17/ps17 VIA layout.json +++ /dev/null @@ -1,267 +0,0 @@ -{ - "name": "PS17", - "vendorProductId": 1095434261, - "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], - "layers": [ - [ - "C(KC_TAB)", - "C(KC_W)", - "C(S(KC_TAB))", - "KC_NO", - "TO(2)", - "KC_PSLS", - "KC_PAST", - "KC_PMNS", - "KC_P7", - "KC_P8", - "KC_P9", - "KC_PPLS", - "KC_P4", - "KC_P5", - "KC_P6", - "KC_NO", - "KC_P1", - "KC_P2", - "KC_P3", - "KC_PENT", - "KC_P0", - "KC_NO", - "KC_PDOT", - "KC_NO" - ], - [ - "KC_RGHT", - "KC_TRNS", - "KC_LEFT", - "KC_NO", - "TO(0)", - "KC_TRNS", - "KC_TRNS", - "KC_NLCK", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_BSPC", - "TO(5)", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "TO(2)", - "TO(3)", - "TO(4)", - "KC_TRNS", - "RESET", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_VOLU", - "KC_TRNS", - "KC_VOLD", - "KC_NO", - "TO(0)", - "KC_WWW_REFRESH", - "KC_WWW_HOME", - "C(S(KC_B))", - "C(S(KC_TAB))", - "KC_UP", - "C(KC_TAB)", - "USER04", - "KC_LEFT", - "KC_DOWN", - "KC_RGHT", - "KC_NO", - "USER05", - "KC_TRNS", - "KC_SLCK", - "KC_NLCK", - "KC_F13", - "KC_NO", - "KC_F14", - "KC_NO" - ], - [ - "USER00", - "KC_TRNS", - "USER01", - "KC_NO", - "TO(0)", - "KC_WWW_REFRESH", - "KC_HOME", - "C(KC_T)", - "C(S(KC_TAB))", - "KC_UP", - "C(KC_TAB)", - "C(KC_W)", - "KC_LEFT", - "KC_DOWN", - "KC_RGHT", - "KC_NO", - "KC_WWW_BACK", - "KC_SPC", - "KC_WWW_FORWARD", - "KC_ENT", - "KC_PGDN", - "KC_NO", - "KC_PGUP", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ] - ] -} \ No newline at end of file diff --git a/keyboards/solartempest/ps17/ps17.c b/keyboards/solartempest/ps17/ps17.c deleted file mode 100644 index 54ae3f8ab053..000000000000 --- a/keyboards/solartempest/ps17/ps17.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include "ps17.h" - -bool encoder_update_user(uint8_t index, bool clockwise) { // QMK encoder functionality - #ifdef VIA_ENABLE //Add in VIA setting of rotary encoder keymap - if (index == 0) { // First encoder - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) }); //Time is 1 tick otherwise empty event - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) }); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) }); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) }); - } - } - /*if (clockwise) { //This code only works for single keypresses with the rotary encoder - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 0)); //Allow setting of keymap in VIA - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 2)); //Allow setting of keymap in VIA - }*/ - #endif - return true; -} - -#ifdef RGB_MATRIX_ENABLE //Add in addressable LED underglow support with physical locations - led_config_t g_led_config = { { - //Key matrix to LED index - { NO_LED, NO_LED, NO_LED, NO_LED, }, - { 0, 1, 2, 3, }, - { 4, 5, 6, 7, }, - { 8, 9, 10, NO_LED, }, - { 11, 12, 13, 14, }, - { 15, NO_LED, 16, NO_LED, }, - - //Underglow matrix to LED index - { 21, NO_LED, NO_LED, 22, }, - { 20, NO_LED, NO_LED, 23, }, - { 19, NO_LED, NO_LED, 24, }, - { 18, NO_LED, NO_LED, 25, }, - { 17, 27, NO_LED, 26, } - }, { - // LED Key Index to Physical Position, calculated with Plot Digitizer and scaled PCB Image with center at {126,126} - {74,165},{108,165},{144,165},{179,165},{74,129},{109,129},{143,129},{188,121},{74,95},{109,95},{143,95},{73,60},{109,60},{144,60},{188,51},{91,25},{144,25}, - - // LED underglow - {61,26},{61,88},{61,158},{61,197},{61,232},{192,232},{192,196},{192,158},{192,87},{183,26},{127,24} - }, { - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, // LED Index to Flag. 4 for key backlight. - 2,2,2,2,2,2,2,2,2,2,2 // 2 for case underglow. - } }; -#endif diff --git a/keyboards/solartempest/ps17/ps17.h b/keyboards/solartempest/ps17/ps17.h deleted file mode 100644 index 64ebc5766887..000000000000 --- a/keyboards/solartempest/ps17/ps17.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once -#include "quantum.h" - -#ifdef RGBLIGHT_ENABLE - #define LAYOUT( \ - K00, K01, K02, \ - K10, K11, K12, K13, \ - K20, K21, K22, K23, \ - K30, K31, K32, \ - K40, K41, K42, K43, \ - K50, K52 \ - ) { \ - { K00, K01, K02, KC_NO }, \ - { K10, K11, K12, K13 }, \ - { K20, K21, K22, K23 }, \ - { K30, K31, K32, KC_NO }, \ - { K40, K41, K42, K43 }, \ - { K50, KC_NO, K52, KC_NO }, \ - } -#endif - -#ifdef RGB_MATRIX_ENABLE // Five empty rows of keys were added for RGB Matrix purposes. You must map to a key otherwise it will not work. - #define LAYOUT( \ - K00, K01, K02, \ - K10, K11, K12, K13, \ - K20, K21, K22, K23, \ - K30, K31, K32, \ - K40, K41, K42, K43, \ - K50, K52 \ - ) { \ - { K00, K01, K02, KC_NO }, \ - { K10, K11, K12, K13 }, \ - { K20, K21, K22, K23 }, \ - { K30, K31, K32, KC_NO }, \ - { K40, K41, K42, K43 }, \ - { K50, KC_NO, K52, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - } -#endif diff --git a/keyboards/solartempest/ps17/readme.md b/keyboards/solartempest/ps17/readme.md deleted file mode 100644 index bd9504222899..000000000000 --- a/keyboards/solartempest/ps17/readme.md +++ /dev/null @@ -1,39 +0,0 @@ -# Atlantis PS17 Macropad - -![Atlantis PS17](https://i.imgur.com/Y0rkPgA.jpg) - -A 17-key macro pad with pushbutton rotary encoder and underglow RGB per key RGB and for the case. - -For detailed instructions on using VIA and flashing, please refer to the sections further down the page! - -* Keyboard Maintainer: solartempest -* Hardware Supported: Atlantis PS17 v2 -* Hardware Availability: [rioo897](https://shop198276076.world.taobao.com/index.htm?spm=2013.1.w5002-23418336364.2.3f4d7d51DkVX3s) - -# Custom Features: - -- Remappable rotary encoder controls volume up/down/mute. -- Allows for remapping of per-layer rotary encoder functions in VIA. -- VIA support included by default. -- RGB underglow and matrix support and remapped to physical locations (nicer gradient and effects). -- Adds custom layer lighting with custom gradients for each. -- Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders. -- Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders. -- Adds key combo functionality for backspace, delete, and arrow keys. - -## Make and Flashing - -Make example for this keyboard (after setting up your build environment): - - qmk compile -kb solartempest/ps17 -km via - -To reset the board into bootloader mode, tap the Reset switch mounted on the bottom of the PCB. -Flash with QMK toolbox, auto-flash. - -## Using with VIA - -- After flashing, in VIA make sure to Import Keymap, which is "ps17 VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. -- Go to Save+Load to Load Saved Layout. You can import my own layout "ps17 VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. -- It is a good idea to Save Current Layout after you decide on your mapping. - -See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/solartempest/ps17/rules.mk b/keyboards/solartempest/ps17/rules.mk deleted file mode 100644 index 0b5dd1c97afa..000000000000 --- a/keyboards/solartempest/ps17/rules.mk +++ /dev/null @@ -1,25 +0,0 @@ -# MCU name -MCU = atmega32u4 - -# Bootloader selection -BOOTLOADER = atmel-dfu - -# Build Options -# change yes to no to disable -# - -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration -CONSOLE_ENABLE = no # Console for debug -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -NKRO_ENABLE = yes # USB Nkey Rollover -RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow -RGB_MATRIX_ENABLE = no # RGB matrix for individual LED control -RGB_MATRIX_DRIVER = WS2812 # Addressable LED strand driver -UNICODE_ENABLE = yes # Unicode -ENCODER_ENABLE = yes # For encoder -LTO_ENABLE = yes # Reduce firmware size -COMBO_ENABLE = yes # Combos -TAP_DANCE_ENABLE = no # Tap dance - -IDLE_TIMEOUT_ENABLE = yes # Turn LEDs off after inactive time diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index 9abf1e2a6824..08fd837bc965 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -89,6 +89,7 @@ #ifdef POINTING_DEVICE_ENABLE #define PIMORONI_TRACKBALL_ROTATE #define PIMORONI_TRACKBALL_INVERT_Y + #define PIMORONI_TRACKBALL_INTERVAL_MS 6 //Default is 8ms //#define PIMORONI_TRACKBALL_INVERT_X //#define PIMORONI_TRACKBALL_CLICK //Not compatible with having mouse keys on keymap #endif diff --git a/keyboards/solartempest/sofle/keymaps/via/encoder.c b/keyboards/solartempest/sofle/keymaps/via/encoder.c index 58bffb8e91c3..3ecbfe5d39f1 100644 --- a/keyboards/solartempest/sofle/keymaps/via/encoder.c +++ b/keyboards/solartempest/sofle/keymaps/via/encoder.c @@ -16,27 +16,30 @@ * along with this program. If not, see . */ + #ifdef ENCODER_ENABLE -bool encoder_update_user(uint8_t index, bool clockwise) { //Allows for remapping of rotary encoder functions in VIA - if (index == 0) { - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 6}, .pressed = true, .time = (timer_read() | 1) }); - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 6}, .pressed = false, .time = (timer_read() | 1) }); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 6}, .pressed = true, .time = (timer_read() | 1) }); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 6}, .pressed = false, .time = (timer_read() | 1) }); - } - } else if (index == 1) { - if (clockwise) { //Double check rotation on new flash versus via mapping - action_exec((keyevent_t){.key = (keypos_t){.row = 6, .col = 6}, .pressed = true, .time = (timer_read() | 1) }); - action_exec((keyevent_t){.key = (keypos_t){.row = 6, .col = 6}, .pressed = false, .time = (timer_read() | 1) }); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 8, .col = 6}, .pressed = true, .time = (timer_read() | 1) }); - action_exec((keyevent_t){.key = (keypos_t){.row = 8, .col = 6}, .pressed = false, .time = (timer_read() | 1) }); - } - } - return true; -} + static uint8_t encoder_state[2] = {0}; //Thanks to Drashna for this improved code with better extensibility. + static keypos_t encoder_ccw[2] = {{6, 3}, {6, 8}}; + static keypos_t encoder_cw[2] = {{6, 1}, {6, 6}}; + + void encoder_action_unregister(void) { + for (int index = 0; index < 2; ++index) { + if (encoder_state[index]) { + keyevent_t encoder_event = (keyevent_t){.key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], .pressed = false, .time = (timer_read() | 1)}; + encoder_state[index] = 0; + action_exec(encoder_event); + } + } + } + + void encoder_action_register(uint8_t index, bool clockwise) { + keyevent_t encoder_event = (keyevent_t){.key = clockwise ? encoder_cw[index] : encoder_ccw[index], .pressed = true, .time = (timer_read() | 1)}; + encoder_state[index] = (clockwise ^ 1) | (clockwise << 1); + action_exec(encoder_event); + } + + bool encoder_update_user(uint8_t index, bool clockwise) { + encoder_action_register(index, clockwise); + return false; + }; #endif diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index 2b10e5887ebf..ad9286c30fde 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -155,6 +155,9 @@ void matrix_scan_user(void) { is_alt_tab_active = false; } } + #ifdef ENCODER_ENABLE + encoder_action_unregister(); + #endif } diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index d0f6e145a720..94f281e936ba 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,7 +1,7 @@ -:100000000C9449060C9490060C9490060C940732BC +:100000000C9449060C9490060C9490060C9447317D :100010000C9490060C9490060C9490060C94900608 :100020000C9490060C9490060C943C1A0C94F819BD -:100030000C94D5260C9490060C9490060C94900683 +:100030000C9409260C9490060C9490060C9490064F :100040000C9490060C9490060C9490060C949006D8 :100050000C9490060C94131B0C9490060C94900630 :100060000C9490060C9490060C9490060C949006B8 @@ -200,30 +200,30 @@ :100C7000006F0066006C006500000010034B00650B :100C8000007900680069007600650000000403092F :100C9000040011241FBECFEFDAE0DEBFCDBF04B6E3 -:100CA00003FE27C080916F0690917006A091710697 -:100CB000B09172068730904BA740B04BD1F41092A0 -:100CC0006F0610927006109271061092720614BE92 +:100CA00003FE27C080917A0690917B06A0917C0676 +:100CB000B0917D068730904BA740B04BD1F4109295 +:100CC0007A0610927B0610927C0610927D0614BE66 :100CD00084B7877F84BF0FB6F894A8958091600091 :100CE000886180936000109260000FBEE0E0F8E33E -:100CF000099512E0A0E0B1E0E6E7FDE602C005904C -:100D00000D92A632B107D9F726E0A6E2B2E001C003 -:100D10001D92AF36B207E1F70E94FC260C94823692 -:100D20000C940000CF93DF9340916D0650916E06B6 -:100D30004D5654409A01205A3F4F21303240C0F066 -:100D400020E032E0241B350B60916B0470916C0441 +:100CF000099512E0A0E0B1E0ECE8F9E602C0059049 +:100D00000D92AE32B107D9F726E0AEE2B2E001C0F3 +:100D10001D92AA37B207E1F70E9430260C948D3459 +:100D20000C940000CF93DF934091780650917906A0 +:100D3000485754409A01205A3F4F21303240C0F06A +:100D400020E032E0241B350B60917604709177042B :100D5000FC01CA01240F351FC1E0D0E082179307C0 -:100D600050F070936C0460936B04DF91CF91089501 -:100D700020E630E0E9CF4491DC01A359BB4F5C9100 +:100D600050F07093770460937604DF91CF910895EB +:100D700020E630E0E9CF4491DC01A858BB4F5C91FC :100D8000451781F04C93AC01A5E056954795AA957F :100D9000E1F7DE0102C0AA0FBB1F4A95E2F7AD01E1 :100DA0006A2B752B01963196D9CFE8EDF0E0808162 :100DB0008E7F80831092E2001092DA001092E100A0 :100DC000A0EEB0E08C9181608C9380818F778083DE :100DD00019BCA7EDB0E08C918E7F8C9380818F7EC3 -:100DE000808310924D0408952091E4003091E50035 +:100DE00080831092580408952091E4003091E5002A :100DF00095E6A9012091EC00822F817020FF06C0AA :100E00008091E80080FF06C080E008952091E8000E -:100E100022FD1AC080915B04882389F0853089F017 +:100E100022FD1AC080916604882389F0853089F00C :100E20008091EB0085FD0FC02091E4003091E5003A :100E300042175307F9F29150E1F684E0089582E0F9 :100E4000089583E0089581E00895EF92FF920F9353 @@ -232,9 +232,9 @@ :100E70008093E8000E94F406882399F3C82F08C0E5 :100E8000F70181917F018093F1000150110949F729 :100E90008C2FCF911F910F91FF90EF90089580912B -:100EA0005D0487FF13C08091E80082FF06C0809137 -:100EB000E8008B778093E80004C080915B04811187 -:100EC000F2CF089580915B048823D9F38091E800E4 +:100EA000680487FF13C08091E80082FF06C080912C +:100EB000E8008B778093E80004C08091660481117C +:100EC000F2CF0895809166048823D9F38091E800D9 :100ED00080FFF8CF8091E8008E77ECCF982F909329 :100EE000E900242F762F50E0891731F07091EC0043 :100EF0002091ED005091F00021FD07C09F5F9730D9 @@ -244,51 +244,51 @@ :100F30005093F0002091EE0027FDE0CF80E008956F :100F4000CF92DF92EF92FF920F931F93CF93DF9395 :100F5000C8EDD0E088818F7E8883E7EDF0E0808166 -:100F60008160808384E082BF81E080934D0488812A +:100F60008160808384E082BF81E08093580488811F :100F70008E7F888302EE10E0F80110821092DA0072 :100F800081EEC82ED12CF601108288818F7788835C :100F900088818068888388818F7D888319BC1092BE -:100FA0005B0410925C0410925A041092590490EE63 +:100FA000660410926704109265041092640490EE37 :100FB000E92EF12CF70180818B7F8083888181600D :100FC000888342E060E080E00E946E07F601808145 :100FD0008E7F8083F801808181608083808188603A :100FE0008083F70180818E7F808388818061888300 :100FF000DF91CF911F910F91FF90EF90DF90CF90F5 -:101000000895FC018091630490916404861797070A +:101000000895FC0180916E0490916F0486179707F4 :10101000A0F06115710529F49091E8009E779093F6 :10102000E80090E06115710551F4911108C08091BC :10103000E80082FF34C080E00895BC01F2CF8091C7 -:101040005B048823C1F18530C1F18091E80083FD04 +:1010400066048823C1F18530C1F18091E80083FDF9 :1010500030C08091E80082FDEACF8091E80080FFF7 :10106000E1CF8091F3002091F200382F61157105D6 :1010700019F02830310558F091E02830310509F099 :1010800090E02091E8002E772093E800CBCF81916B :101090008093F100615071092F5F3F4FE7CF80913E -:1010A0005B04882341F0853041F08091E80083FFA4 +:1010A0006604882341F0853041F08091E80083FF99 :1010B000BECF81E0089582E0089583E00895809195 -:1010C000500408952FB7F894609146047091470436 -:1010D00080914804909149042FBF089520914304C2 -:1010E000309144042817390771F090934404809399 -:1010F0004304E0914104F0914204309721F00084D0 -:10110000F185E02D0994089520913F043091400429 -:101110002817390771F09093400480933F04E091C1 -:101120004104F0914204309721F00680F781E02DD0 -:10113000099408952091320436E0839FC001112460 +:1010C0005B0408952FB7F894609151047091520415 +:1010D00080915304909154042FBF089520914E04A1 +:1010E00030914F042817390771F090934F04809383 +:1010F0004E04E0914C04F0914D04309721F00084AF +:10110000F185E02D0994089520914A0430914B0413 +:101110002817390771F090934B0480934A04E091AB +:101120004C04F0914D04309721F00680F781E02DBA +:101130000994089520913D0436E0839FC001112455 :10114000629F800D911D1124811522E0920714F0F9 -:1011500090E080E083599B4F90936E0680936D06DC +:1011500090E080E088589B4F9093790680937806C2 :101160000895FC01680F791F8FEF91E32191822789 :1011700028E030E087FF09C0880F89272150310916 :10118000C9F7E617F70791F70895880FF7CFFA0127 -:10119000811101C0FB01099480916604982F9E7F04 -:1011A00061F4817082608093660480916904813A61 -:1011B00018F080EA8093690408958831B0F3817053 +:10119000811101C0FB01099480917104982F9E7FF9 +:1011A00061F4817082608093710480917404813A4B +:1011B00018F080EA8093740408958831B0F3817048 :1011C0008661F1CFAF92BF92DF92EF92FF920F93C1 :1011D0001F93CF93DF93082F162FE901E42FF0E040 :1011E000E55AFA4F611110C0E4915E2F4E2F4983EA :1011F000E8835A83DF91CF911F910F91FF90EF9079 :10120000DF90BF90AF900895E62EF12C4491D42E3C :10121000E42FF0E026E0829FC00111242FEF30E0A0 -:10122000B9010E948133802F90E0880F991F55E506 +:10122000B9010E94C132802F90E0880F991F55E5C7 :10123000569FD001579FB00D11248A1B9B0B982FEE :10124000990F890F5901AE18BF08AE9ED001AF9E0D :10125000B00DBE9EB00D11245B2F189F800111248C @@ -304,9 +304,9 @@ :1012F00080E0089578940895F894E82FE295EF70CF :10130000F0E031A1282F2F7081E090E001C0880F1C :101310002A95EAF7982F9095932391A392A1892B70 -:1013200082A30C947A099091CF0292FF06C0282FD5 +:1013200082A30C947A099091D60292FF06C0282FCE :1013300028712830F9F4877F846093FF06C0282F36 -:1013400028712831F1F4877E84612091D00220FF3A +:1013400028712831F1F4877E84612091D70220FF33 :1013500006C0382F38713830D9F4877F816021FF7B :1013600006C0282F28712831D1F4877E816194FD31 :10137000877E0895282F24712430F9F68B7F8860AA @@ -319,21 +319,21 @@ :1013E000D30708F0F2C0CF3BD10508F089C0C83A56 :1013F000D10508F0DFC0C53AD10508F0D3C0C4302C :10140000D105F8F4C130D105E1F040C08533910534 -:1014100009F45AC0C997E9F68091CF02837089F028 +:1014100009F45AC0C997E9F68091D602837089F021 :10142000C0EED0E00EC0833E910599F170F4803E8D -:10143000910501F1823E910561F68091CF0282FD16 +:10143000910501F1823E910561F68091D60282FD0F :1014400021C0CE01DF91CF910895863E910561F1D3 :10145000873E910571F1843E910509F0BACF8091E4 -:10146000D00281FFEECF8091CF02C7EED0E084FDA5 -:101470000DC0E7CF8091CF0280FDF7C09091D002E0 +:10146000D70281FFEECF8091D602C7EED0E084FD97 +:101470000DC0E7CF8091D60280FDF7C09091D702D2 :1014800090FFDFCFC3EED0E084FFDBCFD0E0C0E041 -:10149000D8CF8091CF0282FDEBC09091D00290FD19 -:1014A000BFCF84FFCECFF2CF8091CF0283FDDDCFBF -:1014B000C8CF8091CF0283FDDEC09091D00291FF12 -:1014C000F0CFC4EED0E0BDCF8091CF0285FFB9CF81 -:1014D000C9E2D0E0B6CF8091CF0285FFB2CFC5E39D -:1014E000D0E0AFCF8091CF0286FFABCFCAE2D0E091 -:1014F000A8CF8091CF0286FFA4CFC1E3D0E0A1CFD7 +:10149000D8CF8091D60282FDEBC09091D70290FD0B +:1014A000BFCF84FFCECFF2CF8091D60283FDDDCFB8 +:1014B000C8CF8091D60283FDDEC09091D70291FF04 +:1014C000F0CFC4EED0E0BDCF8091D60285FFB9CF7A +:1014D000C9E2D0E0B6CF8091D60285FFB2CFC5E396 +:1014E000D0E0AFCF8091D60286FFABCFCAE2D0E08A +:1014F000A8CF8091D60286FFA4CFC1E3D0E0A1CFD0 :10150000C11540E2D40760F4C11581E0D80708F0A6 :1015100098CFCE01815E9109079708F492CFB6CF9C :10152000C11590E4D90708F4B1CFDF70D06A89CF34 @@ -358,43 +358,43 @@ :101650008F700E94930934E0D695C7953A95E1F7CB :10166000CF709C2FEC01D069ECCEC9E3D0E0E9CE7D :10167000C2EED0E0E6CEC6EED0E0E3CE0C94620837 -:1016800080914E0490918902892B90918802892B38 -:1016900080932802E0914104F0914204309731F0A8 -:1016A0000280F381E02D88E292E009940895809110 -:1016B000870290915602981301C008958F5F87703A +:101680008091590490919102892B90919002892B1D +:1016900080933002E0914C04F0914D04309731F08A +:1016A0000280F381E02D80E392E009940895809117 +:1016B0008F0290915E02981301C008958F5F87702A :1016C000FACF27E0929F800D1124982F977086956E -:1016D0008695869523E0829FF0011124EB5CFD4FF7 +:1016D0008695869523E0829FF0011124E35CFD4FFF :1016E00050E040E080E0219130E0092E02C03695C4 :1016F00027950A94E2F721703327042E01C0220FA8 :101700000A94EAF7822B4F5F5F4F4330510559F738 :10171000089527E0929F800D1124982F977041E043 :1017200001C0440F9A95EAF786958695869593E0D1 -:10173000899FF0011124EB5CFD4F90E080E070E0A8 +:10173000899FF0011124E35CFD4F90E080E070E0B0 :101740005191DF0111979B01082E02C03695279514 :101750000A94E2F7217021952527242325272C932D :1017600001968330910561F7089590E080E00E9432 -:10177000840890E080E00E946E0810928902109226 -:1017800088020C94400B80938A020C94B50B88233A -:1017900041F0809590914E04892380934E040C94DF -:1017A000400B0895882339F090914E04982B909324 -:1017B0004E040C94400B08958823B1F19CEF980FD0 -:1017C000913A70F4EAE2F2E09191891303C0DF01EB -:1017D00011971C9242E0E033F407B1F70C94400BF0 +:10177000840890E080E00E946E081092910210921E +:1017800090020C94400B809392020C94B50B88232A +:1017900041F08095909159048923809359040C94C9 +:1017A000400B0895882339F090915904982B909319 +:1017B00059040C94400B08958823B1F19CEF980FC5 +:1017C000913A70F4E2E3F2E09191891303C0DF01F2 +:1017D00011971C9242E0E833F407B1F70C94400BE8 :1017E00090E2980F983088F4877021E030E0A901EA :1017F00002C0440F551F8A95E2F7CA018095909167 -:101800004E04892380934E04E9CF9BE5980F9330D3 +:101800005904892380935904E9CF9BE5980F9330BD :1018100020F490E080E00C948408885A873120F40A :1018200090E080E00C946E0808950F931F93CF937F :10183000C82F882309F469C08CEF8C0F813AB0F56A -:101840000AE212E080E392E0F8012191C21701F16F -:1018500022E0E033F207C9F7EFEF80E0D8019D9175 +:1018400002E312E088E392E0F8012191C21701F16E +:1018500022E0E833F207C9F7EFEF80E0D8019D916D :101860008D01C91781F0EF3F19F4911101C0E82FE4 :101870008F5F863099F7EF3F31F00E2E000CFF0B93 -:10188000E85DFD4FC283CF911F910F910C94400BE7 -:10189000EAE2F2E02191C21303C0DF0111971C922A +:10188000E05DFD4FC283CF911F910F910C94400BEF +:10189000E2E3F2E02191C21303C0DF0111971C9231 :1018A0008E179F07B9F70E94400BD6CF80E28C0FAE :1018B000883068F4C77021E030E001C0220FCA957B -:1018C000EAF780914E04822B80934E04DCCFEBE547 +:1018C000EAF780915904822B80935904DCCFEBE531 :1018D000EC0FE33050F4F0E0E154FE4F808190E0F3 :1018E000CF911F910F910C948408C85AC73168F4A6 :1018F000EC2FF0E0EE0FFF1FEE53FE4F8081918141 @@ -402,11 +402,11 @@ :101910000895982F92959F7011F0892F94E0282FA9 :101920002695269511F09E5F822F869509F09F5F80 :10193000892F0895CF93DF93CDB7DEB762970FB6A7 -:10194000F894DEBF0FBECDBF96E0E9E1F3E0DE0123 +:10194000F894DEBF0FBECDBF96E0E4E2F3E0DE0127 :10195000179601900D929A95E1F796E0FE01379661 :10196000DE011D9601900D929A95E1F798858823E6 :10197000E9F0962B9E8786E0FE013D96DE011196EA -:1019800001900D928A95E1F786E0FE013196A9E17A +:1019800001900D928A95E1F786E0FE013196A4E27E :10199000B3E001900D928A95E1F762960FB6F89444 :1019A000DEBF0FBECDBFDF91CF9108956095962326 :1019B000E1CFDC01FB0180819181803891054CF001 @@ -420,32 +420,32 @@ :101A3000819591090895681B20E0DFCF0F931F93D4 :101A4000CF93DF9300D000D0CDB7DEB789836A8310 :101A50004B831C8204E610E024E030E0AE014F5FCF -:101A60005F4F60E084E10E94DF300F900F900F9095 -:101A70000F90DF91CF911F910F91089580912703CF +:101A60005F4F60E084E10E941F300F900F900F9055 +:101A70000F90DF91CF911F910F91089580913203C4 :101A8000882329F047E669E98BE20C941E0D6091EA -:101A9000590170915A0190E080E00E94223520E0C7 -:101AA00030E040E05CE30E94153620E030E040E8A2 -:101AB0005FE30E94EE34882321F047EC6BE180E085 +:101A9000590170915A0190E080E00E946E3320E07D +:101AA00030E040E05CE30E94CF3320E030E040E8EB +:101AB0005FE30E946933882321F047EC6BE180E00B :101AC000E4CF41E265EA89EDE0CFCF92DF92EF9279 :101AD000FF920F931F93CF93DF936C017B0164E61A -:101AE00070E088E70E94C72FEC0197FD12C010E05C +:101AE00070E088E70E94072FEC0197FD12C010E01C :101AF00000E0F601E00FF11F849164E670E00E94BF -:101B00004130EC01892B29F40F5F1F4F0E151F0583 -:101B100081F70E945B31CE01DF91CF911F910F9130 -:101B2000FF90EF90DF90CF90089580913D049091C9 -:101B30003E04911103C091E089270895882369F03C +:101B0000812FEC01892B29F40F5F1F4F0E151F0544 +:101B100081F70E949B30CE01DF91CF911F910F91F1 +:101B2000FF90EF90DF90CF900895809148049091BE +:101B30004904911103C091E089270895882369F031 :101B400062E070E08CEE9BE00E94650D892B19F03D -:101B500080913D04089510923D0480913D04EBCFA7 -:101B6000CF93C0913D0480913E048823D1F00E9420 -:101B700062086058774C8E4F9F4F60933904709382 -:101B80003A0480933B0490933C04C11108C062E086 +:101B50008091480408951092480480914804EBCF86 +:101B6000CF93C0914804809149048823D1F00E940A +:101B700062086058774C8E4F9F4F60934404709377 +:101B800045048093460490934704C11108C062E065 :101B900070E08AEE9BE00E94650D892B29F0C091D0 -:101BA0003D048C2FCF91089581E080933D04F7CFC1 -:101BB00090915B04943029F580934A0470934C040F -:101BC00060934B049093E9008FEF9091E80081506F +:101BA00048048C2FCF91089581E080934804F7CFAB +:101BB00090916604943029F58093550470935704EE +:101BC000609356049093E9008FEF9091E800815064 :101BD00095FD06C095ED9A95F1F700008111F5CFBE :101BE0008091E80085FF0DC050E040E063E070E0C8 -:101BF0008AE494E00E9425078091E8008E77809324 +:101BF00085E594E00E9425078091E8008E77809328 :101C0000E8000895BC0184E00C94D80DBC0183E089 :101C10000C94D80D9C0184E08093E9009FEF8091A3 :101C2000E800915085FD06C085ED8A95F1F700002A @@ -455,22 +455,22 @@ :101C6000E9008FEF9091E800815095FD06C095ED59 :101C70009A95F1F700008111F5CF8091E80085FF7A :101C800014C050E040E068E070E0CE010E942507FB -:101C90008091E8008E778093E80088E0FE01A1E55E +:101C90008091E8008E778093E80088E0FE01ACE553 :101CA000B4E001900D928A95E1F7DF91CF9108950C :101CB0009F92AF92BF92CF92DF92EF92FF920F93DB -:101CC0001F93CF93DF937C015B016A018091CA026D +:101CC0001F93CF93DF937C015B016A018091D10266 :101CD00001E010E08A3010F40AE010E0C1E0D0E04A :101CE000F894B501C701F6010995982E0E947A096A :101CF000911004C021960C171D076CF4892DDF91FB :101D0000CF911F910F91FF90EF90DF90CF90BF90F8 :101D1000AF909F900895CC9F9001CD9F300D300DD6 :101D2000112490E080E045E34A95F1F70000019628 -:101D300082179307C1F7D4CF80919A02811110C006 +:101D300082179307C1F7D4CF8091A102811110C0FF :101D40008091D80080618093D8008AE18A95F1F76C -:101D500000C08091D90080FF0AC081E080939A0280 -:101D600081E090919A02913009F080E0089582E03C -:101D700080939A020E94D50610925B04F1CF0E94D4 -:101D80009C0E882351F0E0914104F0914204309779 +:101D500000C08091D90080FF0AC081E08093A10279 +:101D600081E09091A102913009F080E0089582E035 +:101D70008093A1020E94D50610926604F1CF0E94C2 +:101D80009C0E882351F0E0914C04F0914D04309763 :101D900021F00190F081E02D099480E008951F93D7 :101DA000CF93DF93182FEB010E94150C8FE99FE072 :101DB0000197F1F700C000002197C1F7812FDF9153 @@ -478,10 +478,10 @@ :101DD0008F929F92AF92BF92CF92DF92EF92FF923B :101DE0000F931F93CF93DF93CDB7DEB7CE5DD109AD :101DF0000FB6F894DEBF0FBECDBF5090700190912A -:101E0000660490FF5DC0809052039090530381144C +:101E0000710490FF5DC080905D0390905E0381142B :101E1000910409F068C0E0E6F6E09E012F5F3F4FB5 :101E2000BE0161527F4FC901A4914A2F50E0DA01EF -:101E3000AA0FBB1FA40FB51FAC5ABC4FCD90DD90AD +:101E3000AA0FBB1FA40FB51FA15ABC4FCD90DD90B8 :101E4000EC90D901CD92DD92ED929D0131966A1709 :101E50007B0751F720916F0143E0249F800D911D76 :101E60001124539A2BB1277F3BB138605FB7F894A8 @@ -491,167 +491,167 @@ :101EA000CF911F910F91FF90EF90DF90CF90BF9057 :101EB000AF909F908F907F906F905F904F9008951C :101EC000809171012091720133E0839FF001112410 -:101ED000EC5AFC4F821708F096CF118210821282C2 +:101ED000E15AFC4F821708F096CF118210821282CD :101EE0008F5F3396F7CF90FF96CFD12CC12C66240D -:101EF0006394712C53E0452E8091510393010C2C77 +:101EF0006394712C53E0452E80915C0393010C2C6C :101F000001C0220F0A94EAF7822309F43FC0F601C8 :101F1000EE0FFF1FE80DF91DE590F490E114F104B8 :101F200009F479CF45E050E0B701CE0101960E9457 -:101F3000033409810F3F51F18A81800F9927991F3E +:101F3000023309810F3F51F18A81800F9927991F40 :101F40008B34910514F08AE490E05C01AA0CBB1C70 -:101F50008A0D9B1DDC01AC5ABC4F5D01049D8001C4 -:101F600011240C5A1C4F0A151B0520F0B5E0EB0E8E +:101F50008A0D9B1DDC01A15ABC4F5D01049D8001CF +:101F60001124015A1C4F0A151B0520F0B5E0EB0E99 :101F7000F11CD8CF4D81413A08F040EA98016C81BC :101F80008B810E94E2080D5F1F4FEDCFEFEFCE1A5D :101F9000DE0AF8E0CF16D10409F0AECF3CCFFC0149 :101FA0004191CF01E8E03BB9000000C047FF2BB9E9 :101FB000440F000000C000C000C02BB900C0EA956B -:101FC00091F75BCFE6E6F4E080818E7F8083EEE4DC +:101FC00091F75BCFE1E7F4E080818E7F8083E9E5E4 :101FD000F3E08281816082832FEF80E792E02150DD -:101FE00080409040E1F700C000000C94E40EEAE26B +:101FE00080409040E1F700C000000C94E40EE2E372 :101FF000F2E086E0DF011D928A95E9F70C94B50BBB :102000001F93CF93DF93CDB7DEB7AA970FB6F8949F -:10201000DEBF0FBECDBF8DE594E02091F100DC0165 -:102020002D93CD01B4E085369B07B9F780915E040E +:10201000DEBF0FBECDBF88E694E02091F100DC0169 +:102020002D93CD01B4E080379B07B9F78091690407 :10203000833009F471C0B8F4813009F448C08230AB -:1020400009F4B4C08091E80083FF3CC180915D0435 -:1020500090915E049A3008F035C1E92FF0E0EC571A -:10206000F94C0C94D4338A3009F48FC08B3009F4C6 -:1020700070C0893039F780915D04813219F7809101 -:10208000610490916204009711F00297D9F6809153 +:1020400009F4B4C08091E80083FF3CC1809168042A +:10205000909169049A3008F035C1E92FF0E0E1571A +:10206000FB4C0C94F5328A3009F48FC08B3009F4A4 +:1020700070C0893039F780916804813219F78091F6 +:102080006C0490916D04009711F00297D9F680913D :10209000E800877F8093E8008091E80082FF37C0E6 :1020A0009091F3008091F200029729F48091F10061 -:1020B0008B7F813021F48091F100809350048091D6 +:1020B0008B7F813021F48091F10080935B048091CB :1020C000E8008B778093E8000E944F07BBCF809198 -:1020D0005D04813A09F0B6CF8091E800877F809354 -:1020E000E8008091610490916204892B61F468E0BA -:1020F00081E594E070E00E9401088091E8008B7710 +:1020D0006804813A09F0B6CF8091E800877F809349 +:1020E000E80080916C0490916D04892B61F468E0A4 +:1020F0008CE594E070E00E9401088091E8008B7705 :102100008093E8009FCF60E090E080E0F3CF809183 -:102110005B048111C1CF96CF80915D04813A09F0B3 -:1021200091CF8091610490916204892B09F08ACF4C +:1021100066048111C1CF96CF80916804813A09F09D +:1021200091CF80916C0490916D04892B09F08ACF36 :102130008091E800877F8093E8008091E80080FF2D :10214000FCCF809174018093F1008091E8008E773C -:10215000B9CF80915D04813209F074CF8091610420 -:1021600090916204892B09F06DCF8091E800877F00 -:102170008093E8000E944F0780915F048093740170 -:1021800010924E040E94F70F5DCF80915D04813262 +:10215000B9CF80916804813209F074CF80916C040A +:1021600090916D04892B09F06DCF8091E800877FF5 +:102170008093E8000E944F0780916A048093740165 +:10218000109259040E94F70F5DCF8091680481324C :1021900009F058CF8091E800877F8093E8000E9483 -:1021A0004F078091600480934F044CCF80915D0471 +:1021A0004F0780916B0480935A044CCF8091680450 :1021B000813A09F047CF8091E800877F8093E8005B -:1021C0008091E80080FFFCCF80914F04BCCF803825 -:1021D00099F0823809F076C0809161048F70873061 +:1021C0008091E80080FFFCCF80915A04BCCF80381A +:1021D00099F0823809F076C080916C048F70873056 :1021E00008F070C08093E9008091EB0085FB8827A0 -:1021F00080F91092E90006C08091590490915A0428 +:1021F00080F91092E90006C0809164049091650412 :10220000911182609091E800977F9093E80080930D :10221000F1001092F1008091E8008E77B5C188231B -:1022200009F4A2C1823009F04DC080915F04811190 -:10223000A6C1809161048F702FEF280F263008F01F +:1022200009F4A2C1823009F04DC080916A04811185 +:10223000A6C180916C048F702FEF280F263008F014 :1022400041C08093E9002091EB0020FF98C19330BA :1022500031F48091EB0080628093EB0090C190910B :10226000EB0090619093EB0021E030E001C0220F81 :102270008A95EAF72093EA001092EA008091EB0039 -:102280008860EACF81111EC010915F041F77809192 +:102280008860EACF81111EC010916A041F77809187 :10229000E3008078812B8093E3008091E800877FC2 :1022A0008093E8000E944F078091E80080FFFCCFF8 :1022B0008091E30080688093E30082E0111183E065 -:1022C00080935B048091E80083FF0AC08091E8005E +:1022C000809366048091E80083FF0AC08091E80053 :1022D000877F8093E8008091EB0080628093EB0021 :1022E000AA960FB6F894DEBF0FBECDBFDF91CF9197 -:1022F0001F9108958058823028F720915F04309113 -:1023000060042C3DE3E03E07A1F583E08A838AE286 +:1022F0001F9108958058823028F720916A04309108 +:102300006B042C3DE3E03E07A1F583E08A838AE27B :1023100089834FB7F894DE01139620E03EE051E246 :10232000E32FF0E050935700E49120FF03C0E295C3 :10233000EF703F5FEF708E2F90E0EA30C0F0C796ED :102340008D939D932F5F243159F74FBF8091E80003 :10235000877F8093E8006AE270E0CE0101960E94D8 :1023600001088091E8008B778093E800ABCFC0969E -:10237000E7CF8091610490916204432F5527433049 +:10237000E7CF80916C0490916D04432F5527433033 :10238000510509F44AC078F54130510509F47AC085 :102390008BE590E0EEEEFBE04230510509F092CF84 -:1023A0002091E800277F2093E8002091630430917A -:1023B00064048217930708F49C0140E0211531055D +:1023A0002091E800277F2093E80020916E0430916F +:1023B0006F048217930708F49C0140E02115310552 :1023C00009F065C0411163C08091E80082FDC9CF6A -:1023D00080915B04882329F2853019F28091E8000E +:1023D00080916604882329F2853019F28091E80003 :1023E00083FFF2CFBECF4132510509F43CC04232E7 :1023F000510509F067CF8330910508F063CFFC01E8 -:10240000EE0FFF1FE75EFD4F0190F081E02D8A5E29 +:10240000EE0FFF1FEF5DFD4F0190F081E02D825E2A :102410009D4FDC018C9190E01AC0332721303105AB :10242000D1F02115310561F02230310509F04ACF94 :10243000EBE5FCE0E4918E2F90E0EBE5FCE007C0DB :10244000EDE8FCE0E4918E2F90E0EDE8FCE00097F1 :1024500009F438CFA5CFEBE7FCE0E4918E2F90E0B4 :10246000EBE7FCE0F4CF8330910508F02BCF880F29 -:10247000991FFC01E15EFD4F0190F081E02D89E0A4 +:10247000991FFC01E95DFD4F0190F081E02D89E09D :1024800090E08ECF82E190E0E9E4FCE089CF80919A -:102490005B04882309F465CF853009F462CF80910D +:102490006604882309F465CF853009F462CF809102 :1024A000E80083FD5ECF8091E80082FD8DCF8091B2 :1024B000E80080FF83CF9091F3008091F200211516 :1024C000310519F08830910550F041E0089709F086 :1024D00040E08091E8008E778093E8006FCF4491D0 :1024E0004093F1003196215031090196E8CF8038B0 :1024F00009F0E8CE8091E800877F8093E800809122 -:102500005C048093F10087CE8111DCCE10915F04D2 +:1025000067048093F10087CE8111DCCE10916A04BC :10251000123008F0D7CE8091E800877F8093E800E2 -:1025200010935C040E944F07112311F084E005C052 -:102530008091E30087FDFACF81E080935B0442E065 +:10252000109367040E944F07112311F084E005C047 +:102530008091E30087FDFACF81E08093660442E05A :1025400061EC81E00E946E0742E261EC84E00E944F :102550006E0742E261EC82E00E946E0742E260ECAC -:1025600083E00E946E07AECE80915F04813009F057 -:10257000A9CE81E0933009F080E080935A04109254 +:1025600083E00E946E07AECE80916A04813009F04C +:10257000A9CE81E0933009F080E080936504109249 :10258000E9008091E800877F8093E8000E944F0770 -:1025900099CE1F93CF93DF93162FC0916D06D091E4 -:1025A0006E068A30D1F420913204CE018D569440CB -:1025B000622F70E00E948133281B822F66E00E9408 -:1025C0009533C82FC15020F4DF91CF911F9108950A -:1025D00060E080E20E94C912F5CF8D30E9F4CD565B -:1025E000D44020913204622F70E0CE010E948133EA +:1025900099CE1F93CF93DF93162FC0917806D091D9 +:1025A00079068A30D1F420913D04CE0188579440B9 +:1025B000622F70E00E94C132281B822F66E00E94C9 +:1025C000D532C82FC15020F4DF91CF911F910895CB +:1025D00060E080E20E94C912F5CF8D30E9F4C8575F +:1025E000D44020913D04622F70E0CE010E94C132A0 :1025F000281B822F9E01280F311D2115324018F013 -:1026000080E0D0E0C0E0C80FD11DC359DB4FD093AC -:102610006E06C0936D06D8CF96E0FE01A3E3B4E04A +:1026000080E0D0E0C0E0C80FD11DC858DB4FD093A8 +:102610007906C0937806D8CF96E0FE01AEE3B4E029 :1026200001900D929A95E1F7803E90F186E0FE01CF -:1026300011928A95E9F7C0916D06D0916E0611113D -:1026400033C046E050E0BE0183E394E00E940C34C6 -:102650009E012D563440892B91F52A5F3F4F4091C2 -:102660003204642F70E0C9010E948133481B463058 +:1026300011928A95E9F7C0917806D0917906111127 +:1026400033C046E050E0BE018EE394E00E940B33BD +:102650009E0128573440892B91F52A5F3F4F4091C6 +:102660003D04642F70E0C9010E94C132481B46300E :1026700010F4240F311D211572E0370710F030E0FF -:1026800020E023593B4F30936E0620936D069CCF7C +:1026800020E028583B4F30937906209378069CCF62 :10269000F6E08F9FB00111246655794F46E050E077 -:1026A000CE010E940334C7CF9E012A5F3F4FFE0137 +:1026A000CE010E940233C7CF9E012A5F3F4FFE0139 :1026B0002E173F0731F2808180958193F9CFC901B0 :1026C00045E0969587954A95E1F741E050E0BA01DB -:1026D00002C0660F771F8A95E2F7CB0160916B0409 -:1026E00070916C04862B972BB9016B5F7F4FE5E0EF +:1026D00002C0660F771F8A95E2F7CB0160917604FE +:1026E00070917704862B972BB9016B5F7F4FE5E0E4 :1026F00076956795EA95E1F702C0440F551F6A95F4 -:10270000E2F7842B952B90936C0480936B04A5CFF8 +:10270000E2F7842B952B9093770480937604A5CFE2 :10271000FF920F931F93CF93DF93EC01F62EFC01F2 :1027200001900020E9F78F0101501109C017D1076E :1027300030F0DF91CF911F910F91FF9008956F2D91 :1027400089910E94C912F2CFCF93DF93C3EED2E0FA -:1027500060E0CE010E9436342196C11584E0D8078E +:1027500060E0CE010E9435332196C11584E0D80790 :10276000B9F7DF91CF9108956F927F928F929F92E8 :10277000AF92BF92CF92DF92EF92FF920F931F938F :10278000CF93DF938AEAC82E86E0D82E91ECE92E0B :10279000F12CE701CC58D10936011BC0F501859019 -:1027A0009490692DC8010E943634682DC8010196A5 -:1027B0000E94363482E0A80EB11C0E5F1F4FC01776 +:1027A0009490692DC8010E943533682DC8010196A7 +:1027B0000E94353382E0A80EB11C0E5F1F4FC01778 :1027C000D10761F78EE0680E711C2E96CE15DF05DD :1027D00029F08E010E5011095301E0CF7E018CE8E3 :1027E000E80EF11C8CE8C80ED11C8DE7E81683E0DA :1027F000F80679F6DF91CF911F910F91FF90EF903E :10280000DF90CF90BF90AF909F908F907F906F9010 :102810000895CF93C82F6FEF811161E283E290E0BA -:102820000E9436346FEFC11161E184E290E00E94B2 -:1028300036346FEFC11163E085E290E0CF910C94E4 -:10284000363480E00E94091460E086E290E00E9445 -:1028500036340E94B4130E94A41381E00C9409142E +:102820000E9435336FEFC11161E184E290E00E94B4 +:1028300035336FEFC11167E085E290E0CF910C94E2 +:10284000353380E00E94091460E086E290E00E9447 +:1028500035330E94B4130E94A41381E00C94091430 :102860000F931F93CF93DF93C42FD0E0CC0FDD1FC6 :102870002EE0629FC00DD11D11243CE8839FC00D46 -:10288000D11D1124CE0187960E942234082F10E01A -:10289000102F0027CE0188960E9422349801282B01 +:10288000D11D1124CE0187960E942133082F10E01C +:10289000102F0027CE0188960E9421339801282B03 :1028A000C901DF91CF911F910F910895462F853077 :1028B00038F47A3028F4673018F4672F0C94301409 :1028C00090E080E00895CF92DF92FF920F931F93E4 -:1028D000CF93DF936C010091650480918A02082BED +:1028D000CF93DF936C010091700480919202082BDA :1028E000C7E0D0E010E0FC2EC8010C2E02C0959588 :1028F00087950A94E2F780FD0CC02197A0F7F12C90 :102900008F2DDF91CF911F910F91FF90DF90CF908E @@ -659,59 +659,59 @@ :1029200061F3EECFCF93DF93EC010E946314BE01FD :102930000E945614DF91CF910C94D609FC0180813E :1029400091810E949214292F2F7092959F7092501E -:102950009E3078F4E92FF0E0E257F94C0C94D43330 +:102950009E3078F4E92FF0E0E756FB4C0C94F5320A :10296000803F19F020F4883E20F481E00895843FF0 :10297000E1F380E00895883EC0F3813FD1F7F5CFC1 :10298000822F869586958695089583E290E00E9431 -:102990002234813289F484E290E00E942234813131 -:1029A00059F485E290E00E94223491E0833009F0EE +:102990002133813289F484E290E00E942133813135 +:1029A00059F485E290E00E94213391E0873009F0EC :1029B00090E0892F8170089580E0FCCFCF92DF9264 :1029C000EF92FF926B017C010E94CC08B701A60137 -:1029D00088E090E0FF90EF90DF90CF900C94483427 +:1029D00088E090E0FF90EF90DF90CF900C94473329 :1029E000AF92BF92CF92DF92EF92FF920F931F931D :1029F000CF93DF9300D00F92CDB7DEB7082FF62E1E -:102A0000142FE22E8091660480FF4FC0E82FE695D8 -:102A1000AE2FB0E0A65FBD4F9C9190934E038E7F8A +:102A0000142FE22E8091710480FF4FC0E82FE695CD +:102A1000AE2FB0E0AE5EBD4F9C91909359038E7F78 :102A2000823009F056C0413A08F040EA9E012F5F1B -:102A30003F4F6F2D802F0E94E2088091660480FF37 +:102A30003F4F6F2D802F0E94E2088091710480FF2C :102A400011C02B8139814A8180917101909172016D -:102A500053E0859FF0011124EC5AFC4F891798F13F -:102A60000E94E40E80916704801308C0809168047E -:102A70008F1104C080916904811729F0809150035F -:102A800082608093500300936704F092680410936F -:102A90006904EE2051F060916604709167048091A2 -:102AA0006804909169040E94DE140F900F900F90BB +:102A500053E0859FF0011124E15AFC4F891798F14A +:102A60000E94E40E80917204801308C08091730468 +:102A70008F1104C080917404811729F080915B0349 +:102A8000826080935B0300937204F092730410934E +:102A90007404EE2051F06091710470917204809181 +:102AA0007304909174040E94DE140F900F900F90A5 :102AB000DF91CF911F910F91FF90EF90DF90CF901A :102AC000BF90AF9008954183308322838F5F339608 :102AD000C5CF923039F6E2508E2F8170D82EE69510 :102AE000F0E0E55AF94FA590B490C12CBB24609159 :102AF0007301C61608F0B4CF2C2D30E0A29EC001A1 -:102B0000A39E900DB29E900D112470E00E9481331F +:102B0000A39E900DB29E900D112470E00E94C132E0 :102B1000802FD11016C0860F40917101420F532FA4 -:102B2000511D9A01220F331F240F351F2C5A3C4F81 +:102B2000511D9A01220F331F240F351F215A3C4F8C :102B3000412F113A08F040EA6F2D0E94E208C39439 -:102B4000D6CF861BE9CFE6E6F4E0438121E1421BC4 -:102B500008F440E021E0628181810C94F014E6E603 +:102B4000D6CF861BE9CFE1E7F4E0438121E1421BC8 +:102B500008F440E021E0628181810C94F014E1E707 :102B6000F4E0438121E1420F08F44FEF21E062815C -:102B700081810C94F014E6E6F4E0628121E1621BAD -:102B800008F460E021E0438181810C94F014E6E6D2 +:102B700081810C94F014E1E7F4E0628121E1621BB1 +:102B800008F460E021E0438181810C94F014E1E7D6 :102B9000F4E0628121E1620F08F46FEF21E04381EC -:102BA00081810C94F014E6E6F4E0818121E0438118 -:102BB000628188500C94F014E6E6F4E0818121E013 -:102BC00043816281885F0C94F01480916A048823A9 -:102BD00019F0815080936A046091660470916704D3 -:102BE00080916804909169040C94DE1480916A04C9 -:102BF000833018F48F5F80936A046091660470914B -:102C0000670480916804909169040C94DE1490919B -:102C1000660490FF27C0917081111DC0926090934F -:102C2000660480915003816080935003662351F0C5 -:102C300060916604709167048091680490916904C2 -:102C40000E94DE1420E04091690460916804809144 -:102C500067040C94F0148C3010F09661E0CF880F6C +:102BA00081810C94F014E1E7F4E0818121E043811C +:102BB000628188500C94F014E1E7F4E0818121E017 +:102BC00043816281885F0C94F0148091750488239E +:102BD00019F08150809375046091710470917204B2 +:102BE00080917304909174040C94DE1480917504A8 +:102BF000833018F48F5F8093750460917104709135 +:102C0000720480917304909174040C94DE1490917A +:102C1000710490FF27C0917081111DC09260909344 +:102C2000710480915B03816080935B03662351F0A4 +:102C30006091710470917204809173049091740496 +:102C40000E94DE1420E0409174046091730480912E +:102C500072040C94F0148C3010F09661E0CF880F61 :102C6000982BDDCF089521E030E0A90102C0440F88 -:102C7000551F8A95E2F7CA0120915103662391F00E -:102C8000822B809351038091500380618093500385 -:102C900080914F03811109C08091660460E08695A0 +:102C7000551F8A95E2F7CA0120915C03662391F003 +:102C8000822B80935C0380915B03806180935B0364 +:102C900080915A03811109C08091710460E086958A :102CA0000C94071680958223ECCF0895CF93DF9381 :102CB000C82FC17082FBDD27D0F981FB662760F940 :102CC00085E00E94331661E06C2786E00E9433168F @@ -731,104 +731,104 @@ :102DA000813041F18C2FCF911F910F91089580E0D8 :102DB000D8CF833059F18430A9F720E040E56FEF98 :102DC0008AED0E94F01480910001882359F310923B -:102DD00027030DC020E040E56FEF82E30E94F0146E -:102DE00080910001882399F381E0809327030E945A +:102DD00032030DC020E040E56FEF82E30E94F01463 +:102DE00080910001882399F381E0809332030E944F :102DF0003E0DD8CF20E040E56FEF8CEF0E94F0143D :102E0000D1CF20E040E56FEF80E5F8CF20E040E54E -:102E10006FEF86E7F3CF0E946E16809365040C94E3 -:102E2000B50B80916504982F9670963019F48860E0 +:102E10006FEF86E7F3CF0E946E16809370040C94D8 +:102E2000B50B80917004982F9670963019F48860D5 :102E30000C940B17877FFCCF21E030E001C0220FFC -:102E40008A95EAF720958091650482230C940B17EC -:102E500021E030E001C0220F8A95EAF780916504F5 -:102E6000822B0C940B17809166048695815009F48F -:102E70008BE061E00C9407168091660486958F5F65 -:102E80008C3008F081E061E00C94071680916604B4 +:102E40008A95EAF720958091700482230C940B17E1 +:102E500021E030E001C0220F8A95EAF780917004EA +:102E6000822B0C940B17809171048695815009F484 +:102E70008BE061E00C9407168091710486958F5F5A +:102E80008C3008F081E061E00C94071680917104A9 :102E900080FF07C0869582588F77893010F40C9494 -:102EA0003C1761E082E00C940716E6E6F4E083E06C -:102EB000808311828FEF828380EA83831482AEE461 +:102EA0003C1761E082E00C940716E1E7F4E083E070 +:102EB000808311828FEF828380EA83831482A9E565 :102EC000B3E012968C911297836012968C93608176 :102ED0007181828193810C94DE1469EE7EEF90E023 -:102EE00080E00E94543460E082E090E00E9436343A -:102EF00060E083E090E00E94363410928A0260E045 -:102F000084E090E00E94363460E082E290E00E942B -:102F1000363460E085E090E00E94363460E086E080 -:102F200090E00E9436346FEF87E090E00E943634E4 -:102F300040E050E0BA0188E090E00E94483460E050 -:102F40008DE090E00E94363440E050E0BA0188E124 -:102F500090E00E94483460E087E190E00E943634BF -:102F600040E050E0BA018CE190E00E94483470E00B -:102F700060E080E290E00E94543440E050E0BA010A -:102F800088E190E00E94483480E00E9409140E9489 -:102F9000211440E050E0BA018FE090E00E944834F4 -:102FA00040E050E0BA0183E190E00C9448340F9384 +:102EE00080E00E94533360E082E090E00E9435333E +:102EF00060E083E090E00E9435331092920260E03F +:102F000084E090E00E94353360E082E290E00E942D +:102F1000353360E085E090E00E94353360E086E084 +:102F200090E00E9435336FEF87E090E00E943533E8 +:102F300040E050E0BA0188E090E00E94473360E052 +:102F40008DE090E00E94353340E050E0BA0188E126 +:102F500090E00E94473360E087E190E00E943533C3 +:102F600040E050E0BA018CE190E00E94473370E00D +:102F700060E080E290E00E94533340E050E0BA010C +:102F800088E190E00E94473380E00E9409140E948B +:102F9000211440E050E0BA018FE090E00E944733F6 +:102FA00040E050E0BA0183E190E00C9447330F9386 :102FB0001F93CF93DF9300D000D0CDB7DEB7409101 -:102FC000BE025091BF026091C0027091C1022FB742 -:102FD000F8948091460490914704A0914804B091E0 -:102FE00049042FBF841B950BA60BB70B84369105A4 +:102FC000C5025091C6026091C7027091C8022FB726 +:102FD000F8948091510490915204A0915304B091BF +:102FE00054042FBF841B950BA60BB70B8436910599 :102FF000A105B10588F10E949C0E882379F10E94F9 :1030000062086E5F7F4F8F4F9F4F69837A838B83F8 -:103010009C8380912C0190912D0188559D4F40916A +:103010009C8380912C0190912D0181559D4F409171 :103020002B0150E04530510510F044E050E0BE0166 -:103030006F5F7F4F0E94193484E090E00E94CD3290 -:10304000892BD9F40E9462086093BE027093BF027C -:103050008093C0029093C10281E010C00E94620878 -:103060000091CB021091CC022091CD023091CE0282 +:103030006F5F7F4F0E94183384E090E00E940D3252 +:10304000892BD9F40E9462086093C5027093C6026E +:103050008093C7029093C80281E010C00E9462086A +:103060000091D2021091D3022091D4023091D50266 :10307000600F711F821F931FC4CF80E00F900F90CD :103080000F900F90DF91CF911F910F9108958F9224 :103090009F92AF92BF92CF92DF92EF92FF920F93E7 :1030A0001F93CF93DF93EB0188809980AA80BB8028 -:1030B0009FB7F894C0904604D0904704E09048042D -:1030C000F09049049FBFC818D908EA08FB0894E6A5 +:1030B0009FB7F894C0905104D0905204E09053040C +:1030C000F09054049FBFC818D908EA08FB0894E69A :1030D000C916D104E104F10410F4442311F1E82EDF :1030E000082E000CFF089AE08902F0011124EF5F1E -:1030F000FE4F8381948188559D4F428150E0041793 -:10310000150708F4A801B9010E941934C7010E94EB -:10311000CD32892BA1F40E946208688379838A8367 +:1030F000FE4F8381948181559D4F428150E004179A +:10310000150708F4A801B9010E941833C7010E94ED +:103110000D32892BA1F40E946208688379838A8327 :103120009B8381E0DF91CF911F910F91FF90EF90F2 :10313000DF90CF90BF90AF909F908F90089580E0E8 :10314000F1CF0F931F93CF93DF930F92CDB7DEB7DD -:1031500080913D0489832091BD0290E041E02817D1 +:103150008091480489832091C40290E041E02817BF :10316000190609F440E001E010E09E012F5F3F4F97 -:1031700066EC72E086E00E9447180F90DF91CF91D5 +:103170006DEC72E086E00E9447180F90DF91CF91CE :103180001F910F9108950F931F93CF93DF93CDB7A6 :10319000DEB729970FB6F894DEBF0FBECDBF85E02E -:1031A000E6E6F4E0DE01119601900D928A95E1F7D2 -:1031B00080914E0390914F03A0915003B091510321 +:1031A000E1E7F4E0DE01119601900D928A95E1F7D6 +:1031B0008091590390915A03A0915B03B0915C03F5 :1031C0008E839F83A887B98741E08885811101C0DC -:1031D00040E009E010E09E012F5F3F4F62EC72E09B -:1031E00085E00E94471881111092500329960FB66E +:1031D00040E009E010E09E012F5F3F4F69EC72E094 +:1031E00085E00E944718811110925B0329960FB663 :1031F000F894DEBF0FBECDBFDF91CF911F910F912D :1032000008956F927F928F929F92AF92BF92CF92CA :10321000DF92EF92FF920F931F93CF93DF930F9262 :10322000CDB7DEB7862E5A016901682E880F770860 -:10323000C3010E94CD32892B09F088C08AE0869DA7 +:10323000C3010E940D32892B09F088C08AE0869D67 :10324000F001879DF00D1124EF5FFE4F458150E0A6 :103250004115510511F041E050E08AE0869DF001F2 -:10326000879DF00D1124EF5FFE4F668177816855D1 -:103270007D4FCE0101960E941934F50140815181A4 -:10328000628173812FB7F89480914604909147042E -:10329000A0914804B09149042FBF841B950BA60B45 +:10326000879DF00D1124EF5FFE4F668177816155D8 +:103270007D4FCE0101960E941833F50140815181A6 +:10328000628173812FB7F894809151049091520418 +:10329000A0915304B09154042FBF841B950BA60B2F :1032A000B70B84369105A105B10540F4B701C801FB :1032B0000E94B1089981891709F44FC0082C000CAD -:1032C0009908C4010E94CD32892B91F0B12C8B2D2D +:1032C0009908C4010E940D32892B91F0B12C8B2DED :1032D0000F90DF91CF911F910F91FF90EF90DF90B2 :1032E000CF90BF90AF909F908F907F906F900895F8 :1032F0008AE0889DF001899DF00D1124EF5FFE4F5B :10330000458150E0E416F50608F4A7018AE0889D9F :10331000F001899DF00D1124EF5FFE4F66817781EA -:1033200068557D4FC6010E941934B701C8010E943B +:1033200061557D4FC6010E941833B701C8010E9444 :10333000B10899818913CACF0E946208F5016083A0 :10334000718382839383BB24B394C1CFB12CA70133 -:10335000B801C6010E941934BACFBB24B394F7CF89 +:10335000B801C6010E941833BACFBB24B394F7CF8B :10336000CF92DF92EF92FF920F931F93CF93DF9351 :1033700000D000D00F92CDB7DEB76B0185E0E82E0C -:10338000F12C09EA12E09E012F5F3F4F40EA52E024 +:10338000F12C00EB12E09E012F5F3F4F47EA52E025 :1033900061E080E00E940119882349F095E0FE0178 -:1033A0003196ABE9B2E001900D929A95E1F795E084 -:1033B000EBE9F2E0D60101900D929A95E1F70F90BA +:1033A0003196A2EAB2E001900D929A95E1F795E08C +:1033B000E2EAF2E0D60101900D929A95E1F70F90C2 :1033C0000F900F900F900F90DF91CF911F910F9161 :1033D000FF90EF90DF90CF90089590E080E00E9402 -:1033E0003034893E9E4F11F40C94C51480E008954A +:1033E0002F33893E9E4F11F40C94C51480E008954C :1033F0001F920F920FB60F9211242F933F934F936A :103400005F936F937F938F939F93AF93BF93CF936C :10341000DF93EF93FF93D091E900DF708091EC0090 @@ -844,929 +844,866 @@ :1034B0008093E1008091DA0080FF24C08091D800E1 :1034C00080FF20C08091DA008E7F8093DA008091A7 :1034D000D90080FF9BC080E189BD82E189BD09B42C -:1034E00000FEFDCF81E080935B0480914D0481114B +:1034E00000FEFDCF81E08093660480915804811135 :1034F00009C00E94D5060E94A0078091E200846066 :103500008093E2008091E10080FF17C08091E2008B :1035100080FF13C08091E2008E7F8093E200809153 :10352000E20080618093E2008091D8008062809305 -:10353000D80019BC85E080935B048091E10084FF92 +:10353000D80019BC85E0809366048091E10084FF87 :1035400029C08091E20084FF25C080E189BD82E12D :1035500089BD89B5982F917080FFFBCF8091D800ED :103560008F7D8093D8008091E1008F7E8093E10071 :103570008091E2008F7E8093E2008091E200816082 -:103580008093E20080915C04882309F445C084E0C4 -:1035900080935B048091E10083FF27C08091E2006B +:103580008093E20080916704882309F445C084E0B9 +:10359000809366048091E10083FF27C08091E20060 :1035A00083FF23C08091E100877F8093E10082E068 -:1035B00080935B0410925C048091E1008E7F809385 +:1035B00080936604109267048091E1008E7F80936F :1035C000E1008091E2008E7F8093E2008091E20032 :1035D00080618093E20042E060E080E00E946E073C :1035E0008091F00088608093F000FF91EF91BF918F :1035F000AF919F918F917F916F915F914F913F918B :103600002F910F900FBE0F901F90189519BC10921C -:103610005B0410924D0476CF8091E30087FD93E028 -:1036200090935B04B7CF78941F921FB61F9211241A -:103630008F939F93AF93BF938091460490914704DB -:10364000A0914804B09149040196A11DB11D809339 -:10365000460490934704A0934804B0934904BF9153 +:1036100066041092580476CF8091E30087FD93E012 +:1036200090936604B7CF78941F921FB61F9211240F +:103630008F939F93AF93BF938091510490915204C5 +:10364000A0915304B09154040196A11DB11D809323 +:10365000510490935204A0935304B0935404BF9127 :10366000AF919F918F911F901FBE1F9018959C0145 -:103670004FB7F8948091460490914704A091480474 -:10368000B09149044FBF821B930B08952FB7F89454 -:103690008091460490914704A0914804B091490458 -:1036A0002FBF08958F929F92AF92BF92CF92DF92D9 -:1036B000EF92FF920F931F93CF93DF93CDB7DEB7B7 -:1036C0002F970FB6F894DEBF0FBECDBF8E010F5FF0 -:1036D0001F4F8AE0D8011D928A95E9F78EE4C82E23 -:1036E00081E0D82EF12CE12CAA24A394B12CF60170 -:1036F00081916F018F3F09F44AC0F894E82FE29559 -:10370000EF70F0E021A18F70A50102C0440F551F9A -:103710008A95E2F7CA01922F982B91A392A18095E6 -:10372000892382A30E947A0900C0E7E4F1E030E037 -:1037300020E0912C41914F3F09F47EC0A42FA29527 -:10374000AF70B0E090968C9190E04F7002C095956C -:1037500087954A95E2F780FD6FC08A2D022E01C041 -:10376000880F0A94EAF7982A2F5F3F4F27303105D8 -:1037700009F7F601319780818F3F11F00E947C0993 -:1037800050EA5A95F1F7F801EE0DFF1D90828FEF88 -:10379000E81AF80A95E0E916F10409F0A8CF4AE022 -:1037A00050E0B80181ED92E00E940C347C01892B3D -:1037B00041F08AE0F801A1EDB2E001900D928A9506 -:1037C000E1F71091DC02E114F104C1F181E0809392 -:1037D0008D020E94461B90938C0280938B028091F5 -:1037E0008B0290918C020E94371B069770F0A1ED1E -:1037F000B2E0E12FF0E0EC5BFC4F8D91819322E091 -:10380000A63DB207D1F710928D0281E090E0EF283B -:10381000C9F02F960FB6F894DEBF0FBECDBFDF9173 -:10382000CF911F910F91FF90EF90DF90CF90BF90BD -:10383000AF909F908F90089580E095CF80918D02FA -:103840008111CDCF0E949C0EB82EE091DC028E013A -:10385000055F1F4F882309F4CAC085E0D8011D9277 -:103860008A95E9F7F0E09F012C5B3C4F790180914C -:10387000CA02AE01405F5F4F6A018A3008F08FC014 -:1038800040EB59E1B801C7010E94580E882309F4A2 -:103890009DC04FE756E2B801C7010E94580E882329 -:1038A00009F494C047ED57E1B801C7010E94580ED2 -:1038B000882309F48BC043EC58E1B801C7010E948A -:1038C000580E882309F482C041EA58E1B801C701C3 -:1038D0000E94580E882309F479C01092CA02E09120 -:1038E000DB02F0E0AF014C5B5C4FD80110E0FA0165 -:1038F0009191AF018D91981731F09F0121503109BD -:10390000F90180831B2DAC15BD0589F780919102CB -:10391000909192020E94371B893E934060F1609122 -:103920009002E62EF12C662777276E197F09072E65 -:10393000000C880B990B0E94243527EA39E747E4ED -:103940005DE30E9415364B015C01B701FF0C880B4B -:10395000990B0E9424359B01AC01C501B4010E9462 -:103960006B340E94F334609390020E94461B909344 -:1039700092028093910280919502882371F0809148 -:103980009302909194020E94371B893E934028F045 -:1039900082EE0E94DC0B10929502812F3ACF80912B -:1039A0008E0290918F020E94371B843F914008F055 -:1039B00067CFE091DB02F0E0EC5BFC4FD8011192A5 -:1039C0001D92AC15BD05D9F71B2DA0CF8091CA0261 -:1039D0008F3F31F08F5F8093CA028A3008F47FCF27 -:1039E0000E94461B90938F0280938E02E2CFF0E0FC -:1039F000EC5BFC4FF89485E0A9EAB2E001900D92EF -:103A00008A95E1F765E070E089EA92E00E94B108EA -:103A10008093A8020E947A09F894E091E402F0E011 -:103A2000EF51FD4F80818B878093AF0261E070E0A2 -:103A3000C8010E94B1088093AE020E947A09F894EE -:103A4000C090B002D090B102E090B202F090B30208 -:103A50008091960290919702A0919802B09199025C -:103A6000C816D906EA06FB06D1F0C0929602D0929B -:103A70009702E0929802F09299020E949C0E8111A6 -:103A80000EC00E946208C61AD70AE80AF90AC09254 -:103A9000CB02D092CC02E092CD02F092CE020E94F4 -:103AA0007A09F8948091BB02882321F184FF04C035 -:103AB0009091BC029093510380FF0DC08091B4029D -:103AC00080FF25C09091660491609093660460E049 -:103AD00086950E9407168091BB0281FF09C020E0F5 -:103AE0004091B7026091B6028091B5020E94F01435 -:103AF0001092BB020E947A09F8948091BD0288233B -:103B000049F00E94B00D0E947A0980E082CE0E94A6 -:103B1000E20FE1CF0E94950DF6CF5F926F927F92F8 -:103B20008F929F92AF92BF92CF92DF92EF92FF92CD -:103B30000F931F93CF93DF9300D000D00F92CDB798 -:103B4000DEB76C01FC0183819481892B31F0808187 -:103B5000918189238F3F09F0C4C50F900F900F907A -:103B60000F900F90DF91CF911F910F91FF90EF90E9 -:103B7000DF90CF90BF90AF909F908F907F906F908D -:103B80005F9008950E946314182F682F89819A818D -:103B90000E94890B69817A81812F0E9456148C01C1 -:103BA000F6018281882309F463C0C801905681150B -:103BB000F0E29F0750F0905E811520E1920728F017 -:103BC000915C81159F4108F0A6C0C80199279C010E -:103BD000245031092432310520F08B970E9708F0DC -:103BE00047C080919102909192020097D9F10E9472 -:103BF000371B9C0150E040E060E67AEE80E090E008 -:103C00000E94B533CA01B90125E030E040E050E040 -:103C10000E94B533E09090022F3F310519F010F06B -:103C20002FEF30E0F12C2E193F09B90190E080E030 -:103C30000E94223527EA39E747E45DE30E94153602 -:103C40000E94D7344B015C01B701FF0C880B990B24 -:103C50000E942435A50194010E946B340E94F33424 -:103C6000609390020E94461B90939202809391026F -:103C7000F6018281882309F429C5980122513F4524 -:103C80002031310508F0F7C48FEF93E00E94223411 -:103C9000025193EEA92E92E0B92E81115ECF01114F -:103CA00043C01C821B82662463948AE0582E8501DF -:103CB0000F5F1F4FC5010E94223489831A82882317 -:103CC00009F44BCF9FEF980F9330E8F58A83698210 -:103CD00032E0A30EB11CC8010E9422348B838823DA -:103CE00009F43BCF8E010F5F1F4FF8012081222383 -:103CF000F1F2213009F061C091818281913029F582 -:103D00000E5F1F4F6AE070E0893311F460E570E0E8 -:103D10000E94CF0E20C090E080E00F3F110511F00F -:103D200008F055CFC80153CFA114F4E0BF0609F441 -:103D300014CFC5010E942234811101C001502FEF20 -:103D4000A21AB20AACCF5801CDCF923039F40E5F2F -:103D50001F4F0E94150C0F5F1F4FC7CF933029F4E0 -:103D60000E5F1F4F0E94DC0BF6CF943019F00F5FEF -:103D70001F4FF1CF0E5F1F4F30E020E0B8016F5FA3 -:103D80007F4FF80141818053990B8A30910550F0A3 -:103D90002150310900F38FE99FE00197F1F700C04E -:103DA0000000F6CF529EF001539EF00D11249C01AD -:103DB0002E0F3F1F842F8B01E1CFE22FF0E0E75F52 -:103DC000FD4F7490822F86958695869590E0FC0134 -:103DD000E750FE4FE4902770F12C022E02C0F594BC -:103DE000E7940A94E2F7E1E0EE22FF24FC01E751B8 -:103DF000FE4FC490D12C022E02C0D594C7940A94D1 -:103E0000E2F7F1E0CF22DD24FC01E752FE4F84907F -:103E1000912C02C0959487942A95E2F721E08222A2 -:103E20009924E114F10419F081EE0E94150CC114DB -:103E3000D10419F086EE0E94150C39E36AE070E0B7 -:103E4000731202C060E570E0872D0E94CF0ECD286E -:103E500019F086EE0E94DC0BEF2819F081EE0E942B -:103E6000DC0B892809F477CF6AE070E08CE250CF50 -:103E700081E00E94281703C081E00E941C170F9068 -:103E80000F900F900F900F90DF91CF911F910F9196 -:103E9000FF90EF90DF90CF90BF90AF909F908F906A -:103EA0007F906F905F900C94111782E0E2CF043FF7 -:103EB000110509F455C108F057C1053E110509F473 -:103EC000DDC0F601928191113CC280914E04827254 -:103ED0000A3CFCE51F0709F414C208F06AC1053C5E -:103EE0003CE5130709F4F9C108F04EC1033C5CE559 -:103EF000150709F4D3C108F0EBC1023C1C4509F4D5 -:103F00007DC1F60100811181992309F434C2C801F1 -:103F10000E946314F82E682FC8010E94890BB80113 -:103F20008F2D0E9456140E94D609182FB82EF60124 -:103F300022814581342F32953F70892F82958F7071 -:103F4000E82EF12C8C3008F04EC2F701E456F94C03 -:103F50000C94D43303384FE5140709F481C018F5E5 -:103F600001389FE5190709F44AC008F065C0003818 -:103F7000FFE51F0709F0A5CF882309F459C08091F8 -:103F80009502811106C081E08093950282EE0E9425 -:103F9000150C0E94461B90939402809393028BE22F -:103FA0000E94150C8ECF05382FE5120709F4BEC00C -:103FB00008F476C006384FE5140709F082CF88234D -:103FC00009F4CEC06091590170915A0190E080E0EF -:103FD0000E94223520E030E040E05CE30E9415368C -:103FE00020E030E040E85FE30E94EE348111B5C08C -:103FF00080EE90E090935A0180935901A1C08823EC -:10400000A1F080919502811106C081E08093950214 -:1040100082EE0E94150C0E94461B9093940280939E -:10402000930281EE0E94150CBACF81EE0E94DC0B48 -:104030008BE20E94DC0B45CF882309F442CF81EE4E -:104040000E94150C83EE0E94150C8FE40E94150C43 -:104050008FE40E94DC0B83EE0E94DC0B81EEE9CF43 -:10406000882309F42ECF81EE0E94150C83EE0E9466 -:10407000150C80E50E94150C80E5EBCF809334028F -:104080001093330200933202882321F081E0809361 -:10409000E70217CF1092E70214CF80933102F0CFDE -:1040A000882379F180913102882349F0809132028E -:1040B0000E94DC0B80EE0E94150C8AE20CC08091FD -:1040C00034028823D1F3809132020E94DC0B80EE0F -:1040D0000E94150C8CE40F900F900F900F900F9092 -:1040E000DF91CF911F910F91FF90EF90DF90CF90D4 -:1040F000BF90AF909F908F907F906F905F900C9447 -:10410000150C8AE20E94DC0B8CE40E94DC0B80EE32 -:104110000E94DC0B80913102811105C08091340234 -:10412000882309F41ACD80913202D5CF8823C1F0BB -:1041300080912703882339F0109227031092000101 -:104140000E943E0DBECE809100018111F7CF81E02B -:104150008093270380930001F3CF80E890E04ACF5B -:1041600061E00E949A0CADCE62E0FBCF64E0F9CF33 -:10417000882321F081E08093E602A3CE1092E6022C -:10418000A0CE1092E9029DCE073C2CE5120709F45F -:10419000AEC008F4A7C0083C4CE5140709F4ACC055 -:1041A000093C1C4509F0ADCE43EA55E16FEA75E1E3 -:1041B00079C0043DECE51E07A8F40E3CFCE51F07A2 -:1041C00008F0CBCC0C3C2CE5120709F49FC045EE5F -:1041D00055E166EF75E10D3C1C4508F463C061E0F4 -:1041E00081E046C0053D4CE5140709F4B6CC08F45F -:1041F00092C00D351D4509F4B0CC83CE8091660484 -:1042000080FF31C08E7F8093660460916604709158 -:10421000670480916804909169040E94DE14809183 -:1042200050038160809350039FEFE0E7F2E09150EC -:10423000E040F040E1F700C000000F900F900F90B9 -:104240000F900F90DF91CF911F910F91FF90EF9002 -:10425000DF90CF90BF90AF909F908F907F906F90A6 -:104260005F900C94E40E81608093660461E0869513 -:104270000F900F900F900F900F90DF91CF911F91A3 -:104280000F91FF90EF90DF90CF90BF90AF909F90F5 -:104290008F907F906F905F900C94071643E357E1E7 -:1042A0006CE377E10F900F900F900F900F90DF91DC -:1042B000CF911F910F91FF90EF90DF90CF90BF9023 -:1042C000AF909F908F907F906F905F900C94C708F5 -:1042D0004CE357E163E377E1E5CF43ED55E16CED66 -:1042E00075E1E0CF4CED55E163ED75E1DBCF4BEBD4 -:1042F00055E167EC75E1D6CF47EC55E16BEB75E125 -:10430000D1CF4FEA55E163EA75E1CCCF46EF55E1F5 -:1043100065EE75E1C7CF0F900F900F900F900F9043 -:10432000DF91CF911F910F91FF90EF90DF90CF9091 -:10433000BF90AF909F908F907F906F905F900C9404 -:1043400046170E3D1C4509F0DCCD0F900F900F90E5 -:104350000F900F90DF91CF911F910F91FF90EF90F1 -:10436000DF90CF90BF90AF909F908F907F906F9095 -:104370005F900C946D17C8010E94610BF82ECFCD91 -:10438000092F0F70907F11F00295007F812F22235B -:10439000C9F0002369F090E2910F983010F01111EC -:1043A0000BC080914E04082B00934E040E94400BDA -:1043B000812F0E94150C17C080918902082B009351 -:1043C0008902F4CF0E94DC0B002369F00095105E97 -:1043D000183010F0B11027C080914E0408230093CC -:1043E0004E040E94400B98E0E91AF108E4E0EE1652 -:1043F000F10408F0B2CB0E94BF0E0F900F900F9007 -:104400000F900F90DF91CF911F910F91FF90EF9040 -:10441000DF90CF90BF90AF909F908F907F906F90E4 -:104420005F900C94561680918902082300938902AC -:10443000D8CF892F8F70907F903211F08295807F36 -:10444000F1E0BF120CC0222329F0333060F60E9445 -:10445000D20BC9CF323038F60E94C70BC4CF22230B -:1044600041F03323A1F340FFA3CF4F70F601458302 -:10447000EECF332389F3193309F0F5C0FFEF27EEB0 -:1044800033E0F15020403040E1F700C00000812FC0 -:104490000E94DC0BA8CF892F86958695837061F0EA -:1044A000813009F0A0CF812F9370211102C090E0DC -:1044B00080E00E946E0897CF812F9370211102C077 -:1044C00090E080E00E9484088ECF892F8370A1F550 -:1044D000211189CF812F829586958770880F880F4B -:1044E000412F4F70082E01C0440F0A94EAF7212F84 -:1044F000207114FF07C02FE030E001C0220F8A9521 -:10450000EAF72095969596959370923081F0822FD8 -:10451000842B933030F480918A02913029F0242B3F -:1045200082230E94C30B5FCF842B822BFACF242BD4 -:1045300080918A028227F5CF8695222311F0892F58 -:104540008170882309F44FCF812F829586958770DB -:10455000880F880F412F4F70082E01C0440F0A9416 -:10456000EAF7212F207114FF07C02FE030E001C0CF -:10457000220F8A95EAF7209596959695937092303A -:1045800081F0822F842B933030F480916504913038 -:1045900029F0242B82230E940B1725CF842B822BFA -:1045A000FACF242B809165048227F5CF092F0F7055 -:1045B000222329F0802F0E942817812F48CF812F96 -:1045C0000E94C70B802F0E941C170DCF812FE1EF97 -:1045D0001E1789F1E11750F0F0EF1F17B9F02223F1 -:1045E000B1F13111E5CE892F8F7129C042EF141737 -:1045F00049F153EF1513F3CF80E0222361F29F714D -:1046000081E001C0880F9A95EAF7C5CF222379F09F -:10461000323008F0E8CE292F2F7181E090E001C000 -:10462000880F2A95EAF7909165048927B4CF333033 -:1046300008F0D9CEF0CF892F8F71222321F20E946A -:104640002817D1CE892F8F712223C9F3BCCF3323F2 -:1046500079F0893341F48FEF97EEE3E08150904099 -:10466000E040E1F712CF8FE39CE90197F1F70DCF1E -:10467000892F8F71A8CF0031FFE51F0709F4F8CB10 -:1046800001312FE5120709F410CC063F110509F49A -:104690006DCD08F05FCC043E110509F469CD08F03A -:1046A00006CC003E110509F463CD013E110509F465 -:1046B000F4CC0C32110509F004CC882309F461CD47 -:1046C00081E08093E90210926701FBCB00313FE566 -:1046D000130709F4D1CB01314FE51407B1F682E09D -:1046E000CCCB85E0DE01119601900D928A95E1F721 -:1046F000F601228189819A81211144CA0E94610BAD -:10470000182F48CA1F93CF93DF9380915502807F63 -:10471000A9F480915202882389F080918702D09178 -:1047200056026091500270915102A0915302B091D3 -:104730005402C62FC72316E0D81304C0DF91CF91CF -:104740001F91089590E0109711F0CF3F19F4019652 -:104750008770F2CF189F9001199F300D1124F90135 -:10476000E95AFD4F41814713F2CF40814613EFCF05 -:1047700042814111ECCF438154814A1B5B0B403A8B -:10478000510528F7809155028F7080618093550202 -:10479000F901E45AFD4F80818F708061808380E54C -:1047A00092E00E948D1DDF91CF911F910C94570BC9 -:1047B000AF92BF92CF92DF92EF92FF920F931F932F -:1047C000CF93DF93CDB7DEB761970FB6F894DEBF16 -:1047D0000FBECDBF8C0185E0F801DE011D96019072 -:1047E0000D928A95E1F7F801E28080E5A82E82E03B -:1047F000B82E60915302709154026115710509F44D -:1048000032C19091500240915102892F84238F3FF1 -:1048100009F429C120813181C380D480F0905202F3 -:10482000F601E61BF70BFF2009F4E8C08091550262 -:10483000582F507FE03AF10508F0ABC0511177C016 -:10484000FE2C431321C092131FC0E1101DC08F70B6 -:10485000806180935502C5010E948D1D8091550293 -:10486000F80185838F2D61960FB6F894DEBF0FBED9 -:10487000CDBFDF91CF911F910F91FF90EF90DF900F -:10488000CF90BF90AF900895CD2829F0822F832339 -:104890008F3F09F003C180E0F82FF170DF2E80FF19 -:1048A0003CC0809187024091560256E0841315C0A7 -:1048B0002D873E878D859E850E949214292F2295F3 -:1048C0002F702230F0F0243018F59F70F1F0F801CD -:1048D0009581907FD1F4D12C1EC090E0589FF001BB -:1048E000599FF00D1124E95AFD4F6181361306C01E -:1048F0006081261303C06281E6120FC001968770A3 -:10490000D5CF9F7011F0882331F3805E883018F383 -:10491000C8010E948D1DFD2CA5CFEE2009F4A2CF69 -:1049200080915502816080935502F12C9BCF4313F7 -:1049300006C0921304C0F801EE2009F479C0C80142 -:104940000E949E14882309F1EE20F9F0809155020F -:10495000803270F0209150023091510238872F83BD -:104960001986DB86CA868C87CE0107960E948D1D2C -:1049700086E0F801A0E5B2E001900D928A95E1F79A -:104980000E948223FF24F3946DCFC8010E948D1DE5 -:10499000F9CF51110AC080E592E00E948D1D86E09A -:1049A000F50111928A95E9F7C0CF43130FC0921316 -:1049B0000DC0E1100BC0F8018583C8010E948D1D58 -:1049C00086E0F50111928A95E9F74CCFC8010E9463 -:1049D0009E148823D1F2EE20C1F2809155028032DC -:1049E00038F220915002309151023A8329831B8280 -:1049F000DD82CC828E83CE010196B8CFE03AF105FC -:104A0000F8F6FE2CEE2009F243131FC092131DC0CE -:104A10008091550280FD10C0982F907F69F0F801B9 -:104A20008583903F31F0982F907F905F8F70892B16 -:104A30008583C8010E948D1D86E0F801A0E5B2E0E3 -:104A400001900D928A95E1F70DCFC8010E949E1446 -:104A500081118ECF80915502816080935502C801EB -:104A60000E948D1DFFCEEE2009F48FCFC8010E9459 -:104A70009E14F82E882309F488CF86E0F801A0E57B -:104A8000B2E001900D928A95E1F7809150029091E9 -:104A900051020E9492140E948223E4CE81E08E256E -:104AA000FBCE1F93CF93DF93CDB7DEB767970FB6DB -:104AB000F894DEBF0FBECDBF4B8B5C8B6D8B7E8BB6 -:104AC0008F8B6111109289021A8A198A85E0FE0182 -:104AD0007396DE011D9601900D928A95E1F786E0AE -:104AE000FE013D96DE01179601900D928A95E1F741 -:104AF000CE0107960E94D823882389F016E0809182 -:104B000087029091560289134BC067960FB6F894AE -:104B1000DEBF0FBECDBFDF91CF911F91089586E01C -:104B2000FE013796DE01119601900D928A95E1F70C -:104B30008A859B85892B11F38F81988589238F3FE7 -:104B4000E9F22091560230E0C90101968770992759 -:104B5000409187024817190681F410924E040E9472 -:104B6000F70F109256021092870286E0E0E5F2E01D -:104B7000DF011D928A95E9F7C1CF96E0929FD0019F -:104B8000939FB00D1124A95ABD4FFE01319601909B -:104B90000D929A95E1F7809356020E94570BAECF83 -:104BA000819FC0011124895A9D4F0E94D8238823D8 -:104BB00009F4ABCF8091870290E001968770992726 -:104BC000809387029CCF0F931F93CF93DF93CDB732 -:104BD000DEB7A8970FB6F894DEBF0FBECDBF811128 -:104BE0004DC006E0662359F10CA311E01DA31EA3DE -:104BF0000E94461B8160782F98A78FA34CA15DA1CE -:104C00006EA188A50E9451250F8F18A319A20E949A -:104C1000461B8160782F9BA38AA34F8D58A169A161 -:104C20008BA10E94512581E0A8960FB6F894DEBFB3 -:104C30000FBECDBFDF91CF911F910F9108950A8FC5 -:104C400013E01B8F81E08C8F0E94461B8160782FC0 -:104C50009E8F8D8F4A8D5B8D6C8D8E8D0E94512520 -:104C60000D8B1E8B1F8A0E94461B8160782F998FA7 -:104C7000888F4D895E896F89898DD3CF813099F670 -:104C80006623F1F016E0188B198B8A8B0E94461B65 -:104C90008160782F9C8B8B8B488959896A898C8994 -:104CA0000E9451251B871C871D860E94461B816020 -:104CB000782F9F878E874B855C856D858F85B1CFDB -:104CC00006E00E8318E01F8388870E94461B8160E0 -:104CD000782F9A8789874E815F8168858A850E94AF -:104CE000512509831A831B820E94461B8160782FFD -:104CF0009D838C8349815A816B818D8192CFCF9224 -:104D0000DF92EF92FF920F931F93CF93DF930F9257 -:104D1000CDB7DEB7EE24E394F12C0FEA12E09E014A -:104D20002F5F3F4F44EA52E063E082E00E940119A6 -:104D3000082F882321F1C090DE028C2D90E09C0189 -:104D40002F513D4F79011981F9018081181BD12E16 -:104D500080E00AC0DA94F70180818F5F808360E091 -:104D60008C2D0E94E325802F1D14A4F3912F17FD95 -:104D700090E0191B11110EC081110E943E0B802F73 -:104D80000F90DF91CF911F910F91FF90EF90DF90E7 -:104D9000CF9008951F5FF70180818150808361E08B -:104DA0008C2D0E94E325802FE5CF1F921FB61F9206 -:104DB00011248F939F93AF93BF93809145048111EA -:104DC00013C08091460490914704A0914804B0918B -:104DD00049044196A11DB11D809346049093470458 -:104DE000A0934804B0934904BF91AF919F918F91D4 -:104DF0001F901FBE1F901895CDB7DEB7E3970FB673 -:104E0000F894DEBF0FBECDBF84B7877F84BF0FB6D7 -:104E1000F894A8958091600088618093600010925A -:104E200060000FBE80E890E00FB6F89480936100B8 -:104E3000909361000FBE85B7806885BF85B7806895 -:104E400085BF88E799E090932702809326020E940D -:104E5000D5060E94A0078091E20084608093E20062 -:104E6000789480915B048823A1F01091E9001F7071 -:104E70009091EC00892F817090FD80E8182B1092A2 -:104E8000E9008091E80083FD0E9400101F701093DC -:104E9000E90082E084BD93E095BD9AEF97BD8093D1 -:104EA0006E001092CB021092CC021092CD021092A2 -:104EB000CE020E94C514811102C00E9421140E94DA -:104EC0009C0E8093580180915801882309F4C6C034 -:104ED00010926F0185E2809370010E949C0E8111F7 -:104EE0000E94C0318091580181112FC0FE0135967A -:104EF00086E0DF011D928A95E9F786E6898387E9D6 -:104F00008A8386EC8B8384E38C8385E38D8334975B -:104F1000AEE4B1E0CE010B9621912D938E179F0741 -:104F2000D9F787E0E5E7F1E0DE01919601900D9277 -:104F30008A95E1F7FE01B196A7E4B1E0CE0188962B -:104F400021912D938E179F07D9F78091580195E0F5 -:104F5000811190E09093DC0285E0891B8093DB0255 -:104F60000EE411E0A3E5EA2EA1E0FA2EF80181910A -:104F70008F018F3F11F00E947C09E016F106B1F716 -:104F800007E411E0FEE4EF2EF1E0FF2ED8018D9151 -:104F90008D018F3F11F00E947C09E016F106B1F7F8 -:104FA000E1EDF2E08BED92E0A4E4B3E011921D920A -:104FB0008E179F07D9F70E94ED19811102C00E9438 -:104FC0006D1782E090E00E9422348093390384E0E0 -:104FD00090E00E942234182F82E290E00E94223456 -:104FE000982F812F9093D0028093CF020E94521B62 -:104FF000EFE7FBEB3197F1F700C000000E94521B76 -:105000008091440380FF2EC06FEF7FEF90E080E03F -:105010000E94543481E08093E00080E28093D800C5 -:105020001092C9008FE19EE40197F1F700C00000E3 -:1050300087E090EBDC0180936F0690937006A0935D -:105040007106B093720688E19CE00FB6F894A895BB -:10505000809360000FBE90936000FFCF85E2809345 -:105060006F0139CF83E090E00E9422340E94C30B8D -:10507000809165040E946E160E949C0E811102C0F0 -:105080000E94C33183E080930F0380E28093320457 -:105090000E94C12F6DE070E08CE992E00E94650DE6 -:1050A000892BE9F580910F0363E070E081FD97C2E1 -:1050B00089E992E00E94650D892B89F56DE070E029 -:1050C00089E892E00E94650D892B49F50E946208EB -:1050D0006058774C8E4F9F4F6093390470933A0419 -:1050E00080933B0490933C04EDE6F4E080E092E092 -:1050F000DF019C011D9221503040E1F7F0936E06D4 -:10510000E0936D068FEF9FEF90936C0480936B0498 -:1051100081E080933E0480933D04109210038091BF -:10512000DD02811136C00E94ED19811104C00E9478 -:105130006D170E94551788E090E00E942A34609312 -:105140006604709367048093680490936904809167 -:1051500050038360809350036E7F71F40E94551753 -:1051600088E090E00E942A3460936604709367049C -:1051700080936804909369040E94CC08809166042F -:1051800080FF04C060E086950E94071681E080934E -:10519000DD0280915801811106C084EF8093660181 -:1051A00085EF8093650120916601A22FA295AF70D3 -:1051B000B0E091963C9191972F7081E090E0BC0116 -:1051C000022E01C0660F0A94EAF7462F409543234A -:1051D00091964C93919792963C919297362B9296FA -:1051E0003C93929740916501E42FE295EF70F0E0D7 -:1051F00031A14F70042E01C0880F0A94EAF7982F4E -:105200009095932391A392A1892B82A390968C9140 -:1052100090E002C0959587952A95E2F7817020A1CC -:1052200030E002C0359527954A95E2F792E020FFDD -:1052300090E0892B8093E5028091580111E081274D -:105240008093E402312F381B3093DE020E94C12F7D -:1052500040E060E080E00E941E0D89EA92E09093B9 -:1052600053038093520360E08AE00E94071681E0B6 -:105270000E940B1780EE90E090935A0180935901A1 -:10528000109327030E943E0D8BE591E0909342041A -:1052900080934104E0E46E2E80915B04FF24F3943C -:1052A00000E112E1853009F4ECC10E94521BE82EA6 -:1052B00081110E946208EAE3F3E0A4E4B3E010E0A5 -:1052C00000E0B02EDD9081918D1509F4FEC18D2591 -:1052D000C12CFF24F394982F9F2109F4F1C10E945F -:1052E0009C0E882399F0C8A6B9A6DF2081E009F4B6 -:1052F00080E08AA70E94461B8160782F9CA78BA71D -:1053000048A559A56AA58CA50E945125F801E65C1F -:10531000FC4F8081F826F0828091E502E82FEE0FA5 -:10532000EE0F90916601A92FA295AF70B0E0909614 -:105330002C9130E09F7002C0359527959A95E2F741 -:105340002170332790916501A92FA295AF70B0E02D -:1053500090964C9150E09F7002C0559547959A9554 -:10536000E2F7CA018170992740FF02C082E090E015 -:10537000822B8E2B8093E5021091E4028F70E82F30 -:10538000F0E0EE50FE4F80819091E302890F809310 -:10539000E302F12C84306CF0E12FF0E0EF51FD4F8F -:1053A00080818F5F808360E0812F0E94E325FF244E -:1053B000F3948091E3028D3F6CF4E12FF0E0EF5124 -:1053C000FD4F80818150808361E0812F0E94E32521 -:1053D000FF24F3948091E302082E000C990B64E003 -:1053E00070E00E94A1338093E302F1100E943E0B13 -:1053F00080913E04882351F1809111039091120312 -:105400000E94371BC29708F077C120916B0430913E -:105410006C042115310509F08CC280913D0488236C -:10542000A9F00E9462080091390410913A04209179 -:105430003B0430913C04601B710B820B930B6F3F5C -:105440007F4F8F4F9F4710F40E94950DE11001C0D0 -:10545000F1100E94B00D809137038A3008F0A1C38B -:1054600080913503909136030E94371B089708F40A -:1054700098C304E610E025E030E040E353E064E048 -:1054800084E10E940C31892B09F05CC31092370330 -:1054900020912703222359F0809132039091330306 -:1054A000982789279827909333038093320386E0C7 -:1054B000E9E1F3E0DE01919601900D928A95E1F722 -:1054C00086E0FE01B196DE01119601900D928A955B -:1054D000E1F786E0FE013196AAE2B3E001900D9279 -:1054E0008A95E1F78091340387FD29C380912803D1 -:1054F00090912903009709F01CC3609130038091BB -:1055000031030091320310913303222309F4E4C2E2 -:1055100041E00E94F80C2091250330912603281BBE -:10552000390B309326032093250341E0602F812F10 -:105530000E94F80C2091230330912403820F931FC3 -:10554000909324038093230363E273E08FE293E05C -:105550000E94D90C65E273E08EE293E00E94D90CC0 -:1055600010922C0310922D0386E0EAE2F3E0DE01B4 -:10557000119601900D928A95E1F786E0FE01319631 -:10558000A9E1B3E001900D928A95E1F730911B03F8 -:1055900020911C0390911D0380911E0370911503AF -:1055A000609116034091170350911803F0911A036C -:1055B000E0911403FE13CCC2332311F07313C8C25D -:1055C000222311F02613C4C2882311F08513C0C210 -:1055D000992319F081E04913BCC280E0BAC286E980 -:1055E00092E068CD80915B04843009F43AC00E9457 -:1055F000950D40E060E080E00E941E0D80E00E947A -:1056000056168091E002811109C0F092E00280916B -:10561000660481708093DF020E94E20F10924504BD -:1056200088E190E00FB6F894A895809360000FBED3 -:105630006092600083B7817F846083BF83B781609D -:1056400083BF7894889583B78E7F83BF0FB6F89415 -:10565000A89580916000886180936000109260003E -:105660000FBE80915A04882361F00E94521BE4E42B -:10567000F3E08191811164C4AEE4B3E0AE17BF07DB -:10568000C1F780915B04853009F4ACCF10924E04D1 -:105690000E94F70F0E94BF0E0E9456161092E00261 -:1056A0008091DF02882349F08091660481608093B5 -:1056B000660460E086950E9407160E943E0DF5CDB7 -:1056C000C394FF0C27E0C21206CE0F5F1F4F0A30B3 -:1056D000110509F0F6CD8FEF8DA78EA71FA60E94AA -:1056E000461B8160782F99AB88AB4DA55EA56FA551 -:1056F00089A90E94512510CE0E94461B9093120347 -:105700008093110360E080E00E949A080E94BF0E1F -:105710008093EE020E949C0E8823D1F02FB7F8945C -:105720008091460490914704A0914804B0914904A7 -:105730002FBF81339547A105B10540F00E94950D1B -:1057400080913E04882309F468CE5FCE0E94B00D9C -:105750000E949C0E882309F4D3C061E080E00E947F -:105760009A0860E08CE791E00E94881362E080E094 -:105770000E949A08809165040E94890C823009F485 -:1057800099C008F08EC0882309F494C0813009F4D0 -:1057900097C065E080E00E949A0860E08AE991E0A5 -:1057A0000E94881366E080E00E949A086091EE02F1 -:1057B000669561708FE991E00E94881367E080E050 -:1057C0000E949A086091EE026095617084EA91E00F -:1057D0000E94881368E080E00E949A086091EE02BF -:1057E00062FB662760F988EA91E00E948813409185 -:1057F000EA025091EB026091EC027091ED022FB73A -:10580000F8948091460490914704A0914804B09187 -:1058100049042FBF841B950BA60BB70B8D3291400B -:10582000A105B10508F48CCF0E9462086093EA02DA -:105830007093EB028093EC029093ED028091E90269 -:10584000811104C080916701811142C06DE080E048 -:105850000E949A0860E08DEA91E00E9488136AE055 -:1058600080E00E949A0881E0809367018091E802BD -:1058700090E00196817099278093E80221E030E062 -:10588000281B390B40E6429FC001439F900D112415 -:105890002091E702222351F1855C9B4F0E949206E2 -:1058A0004FCF833089F0843009F073CF60E08EE809 -:1058B00091E003C060E082E891E00E94881369CF24 -:1058C00060E088E891E0F9CF60E084E991E0F5CF0D -:1058D0006AE080E00E949A0860E08DEA91E00E9410 -:1058E00088136BE080E00E949A08C0CF2091E60206 -:1058F000222319F085589C4FD1CF85549D4FCECF90 -:1059000064E080E00E949A0860E083EB91E00E94EE -:10591000881365E080E00E949A0860E089EB91E0DE -:105920000E94881369E080E00E949A088BEF94E05F -:10593000B5CF8091100361E070E081116ECD082F2A -:1059400010E02B01082E02C0440C551C0A94E2F70B -:10595000A90144215521452B09F448C090910F031A -:1059600090FD46C08295880F807680936A019801E9 -:10597000369527953695279520936D01815E809306 -:105980006B0110926E0124E630E047E050E068E6DB -:1059900071E088E70E94B830892B09F03ECDA8015C -:1059A00065E0440F551F6A95E1F780910F0380FD74 -:1059B0002DC043595B4F04E610E020E230E060E484 -:1059C00088E70E94DF30892B09F027CD0E94B00DB7 -:1059D000C2018095909540906B0450906C044822D1 -:1059E000592250926C0440926B0417CD8F5FA7CF61 -:1059F000880F880F880F80936A0110926D01895F6C -:105A000080936B0183E080936E01BDCFEFEEF2E0F7 -:105A100080E2DF011D928A95E9F7E6E0F2E0FBAB58 -:105A2000EAAB02E012E037E0A32E99249394AAA9EE -:105A3000BBA92D91BBABAAABF80121908F01240E1D -:105A4000352E311CC10183599B4F1C01E22FF0E020 -:105A5000E151FD4F30E020E07A2C721AB92C022E71 -:105A600001C0BB0C0A94EAF7610190E0D6018D9168 -:105A70006D018B21672D691B6770862E062E000C29 -:105A8000770BB82F01C0BB0F8A94EAF78B2E719564 -:105A9000619571096770772701C086956A95EAF765 -:105AA000882A8081882A80829F5F9830F9F62F5F4C -:105AB0003F4F31962830310579F6EAE0F2E02AA925 -:105AC0003BA9E217F30709F0B2CF04E610E020E2A9 -:105AD00030E04FEE52E073CF45E00E94F80C209189 -:105AE000210330912203820F931F9093220380930E -:105AF000210345E0602F812F0E94F80C20911F03A5 -:105B000030912003281B390B3093200320931F036F -:105B10006FE173E08CE293E00E94D90C61E273E0E4 -:105B20008DE293E00E94D90C10922F0310922E0365 -:105B30001BCD0197909329038093280315CD84E111 -:105B400090E0F8CF809137038F5F809337030CCDBF -:105B500081E080FF0FC0E0914104F0914204309752 -:105B600049F082E0809319030480F581E02D89E1FA -:105B700093E0099510921B0310921C0310921D03D1 -:105B800010921E0386E0E9E1F3E0A3E1B3E00190A7 -:105B90000D928A95E1F70E94461B909336038093FD -:105BA00035030E94BF0E90913803891731F00E948F -:105BB000BF0E809338030E94561680915B04843098 -:105BC00009F06ACB83E08093E9008091E80082FFCE -:105BD00063CB8091E80090E085FF05C00E94F40649 -:105BE000882399F091E08091E8008B778093E8001A -:105BF000992309F451CBE981E150E33108F076C0F3 -:105C0000F0E0E855F94C0C94D43300E210E0CE01FA -:105C100001967C018091E80085FD0AC08091E80032 -:105C20008B778093E8000E94F406882399F3DACFFB -:105C30008091F100D7018D937D010150110951F739 -:105C4000D1CF1A8289E08B8311C08A81823009F416 -:105C50008FC1833091F1813009F048C00E94620801 -:105C60000E94DA336B837C838D839E8380915B04F7 -:105C7000843009F011CB1091E9001F709091EC0075 -:105C8000892F817090FD80E8182B82E08093E900D5 -:105C90008091E80080FF0DC050E040E060E270E0DD -:105CA000CE0101960E9425078091E8008E778093AF -:105CB000E8001F701093E900EFCADE011396E4E4D8 -:105CC000F3E081918D9323E0EE34F207D1F7CECF4C -:105CD0008A81823059F46B817C818D819E810E9402 -:105CE000DA3386E290E00E943634C0CF8FEF8983AA -:105CF000BDCF4C816B818A810E94301498278927FF -:105D000098279E838D83B2CFED80FE80FE24EF2402 -:105D1000FE248A810B813EE0039F800111249CE8D0 -:105D2000899F000D111D11248C8190E0880F991F0F -:105D3000080F191F6F2DC80187960E9436346E2DEB -:105D4000C8018896D0CF0E94B41390CF8A81813841 -:105D5000C1F060F4803809F089CF20E04B81609178 -:105D60006804809167040E94F01480CF8238E9F0C3 -:105D7000833809F07BCF20E0409169046C818B81EE -:105D8000F2CF60E08B810E9407168B81811103C0E6 -:105D90000E94E20F6BCF809166048160809366045D -:105DA00060E086950E94071661CF8B8180936A041C -:105DB0005DCF8A81813899F030F4803809F056CF70 -:105DC0008091690440CF823891F0833809F04ECF3A -:105DD000809167048B83809168048C8347CF809186 -:105DE000660480FF02C086952ECF80E02CCF809184 -:105DF0006A0429CF609166047091670480916804F9 -:105E0000909169040E94DE1431CF80E18A832ECF05 -:105E100081E08A838DE117CFCA80DB80DC24CD242A -:105E2000DC248E010F5F1F4FEC80E00EF12EF11C81 -:105E3000C6018D519D4F0E151F0509F417CFADE119 -:105E4000CA16A1E0DA0650F40E942234F8018483D5 -:105E5000BFEFCB1ADB0A0F5F1F4FEACFD8011496B2 -:105E60001C92F6CF0A811B81102701271027FE0103 -:105E700031966F01EC80E00EF12EF11CC8018D51BE -:105E80009D4FE016F10609F4F1CE0D31F1E01F0748 -:105E900028F4D60114966C910E943634BFEFCB1AC9 -:105EA000DB0A0F5F1F4FEACF0E94A413DFCE85E00D -:105EB000ADCFCA80DB80DC24CD24DC248E010F5FD3 -:105EC0001F4FEC80E00EF12EF11CC6018796E01604 -:105ED000F10609F4CBCEECEBCE16E2E0DE0658F488 -:105EE0000E942234D80114968C93FFEFCF1ADF0A58 -:105EF0000F5F1F4FEACFF8011482F7CF0A811B8191 -:105F00001027012710279E012F5F3F4F6901EC806A -:105F1000E00EF12EF11CC8018796E016F10609F497 -:105F2000A5CE0C3B32E0130728F4D60114966C91F1 -:105F30000E943634BFEFCB1ADB0A0F5F1F4FEBCF47 -:105F400009BD19BD09B400FEFDCF8091D8008F7D39 -:105F50008093D8008091E00082608093E00080917F -:105F6000E00081FDFCCF10924E040E94F70F89CB18 -:105F700086E290E00E9422341B821C821D828E8366 -:105F800075CE1092B9008CE08093B80008959F926E -:105F9000AF92BF92CF92DF92EF92FF920F931F9337 -:105FA000CF93DF93B82EEB010E94461B6C01EE24C9 -:105FB000E394F12CC431D10560F025E0E22EF12C00 -:105FC000CF3FDC0731F0CE0164E170E00E94813305 -:105FD0007B0184EAA82E94E8992E1092BC00A0922E -:105FE000BC000E94461B8C018091BC0087FF0DC045 -:105FF0008091B900887F883039F18091B900887F1D -:10600000803111F10FEF1FEF09C00E94461B801B6A -:10601000910B8E159F0540F30EEF1FEFCF3FDC076E -:10602000E1F2C6010E94371B8C179D07B0F2C80130 -:10603000DF91CF911F910F91FF90EF90DF90CF9064 -:10604000BF90AF909F900895B092BB009092BC001B -:106050000E94461B8C018091BC0087FF0AC0809182 -:10606000B900887F883111F0803461F610E000E0DB -:10607000DECF0E94461B801B910B8E159F0558F3A7 -:10608000CBCF0F931F93CF93DF93EB018093BB0094 -:1060900084E88093BC000E94461B8C018091BC0068 -:1060A00087FF11C02091B900287F81E090E028325D -:1060B00011F490E080E0919581959109DF91CF9165 -:1060C0001F910F910895CF3FDC0741F30E94461BBB -:1060D000801B910B8C179D0708F38EEF9FEFEECF7F -:1060E0000F931F93CF93DF93EC0184EC8093BC005C -:1060F0000E94461B8C018091BC0087FF08C08091E4 -:10610000BB0090E0DF91CF911F910F910895CF3F99 -:10611000DC0789F30E94461B801B910B8C179D079F -:1061200050F38EEF9FEFEECF0F931F93CF93DF933C -:10613000EC0184E88093BC000E94461B8C01809196 -:10614000BC0087FF08C08091BB0090E0DF91CF9139 -:106150001F910F910895CF3FDC0789F30E94461BE2 -:10616000801B910B8C179D0750F38EEF9FEFEECFA6 -:10617000CF92DF92EF92FF920F931F93CF93DF9313 -:106180006B018A017901B9010E94C72FE6010C0D4C -:106190001D1DC017D10761F424E92093BC00DF91D5 -:1061A000CF911F910F91FF90EF90DF90CF900895C6 -:1061B00097FDF2CFB70189910E944130EACFCF928B -:1061C000DF92EF92FF920F931F93CF93DF93C62F2F -:1061D0006A017901B8010E94C72F97FD0CC0B80170 -:1061E0008C2F0E944130E601EC0CFD1CCE15DF0522 -:1061F00011F097FF0CC024E92093BC00DF91CF91F0 -:106200001F910F91FF90EF90DF90CF900895B8010C -:1062100089910E944130EACFCF92DF92EF92FF92B4 -:106220000F931F93CF93DF93F82EE62EEA016901B7 -:10623000B8010E94C72F97FD15C0B8018E2D0E948E -:10624000413097FD0FC0B8018F2D81600E94C72F8C -:10625000F12CE12C21E0C21AD108EC14FD0400F568 -:1062600097FF11C024E92093BC001816190614F4F6 -:1062700090E080E0DF91CF911F910F91FF90EF9020 -:10628000DF90CF900895C8010E94703097FD04C040 -:10629000FE01EE0DFF1D80832FEFE21AF20ADDCF23 -:1062A00097FDE0CFC8010E94943097FDDBCFCC0D65 -:1062B000DD1D8883D7CF84E98093BC0008958EE1EB -:1062C0004A9B02C08150E1F74A9BFECF08955A983D -:1062D00080E28A95F1F75A9A0895FC013BE03A95DD -:1062E000F1F798E020E080E031E040E14A95F1F7F5 -:1062F000880F4A9B02C08160232742E04A95F1F74C -:10630000000040E14A95F1F7915079F790E19A95B4 -:10631000F1F799B132E03A95F1F7000040E14A9582 -:10632000F1F792FB992790F992272081920F9083A1 -:106330000895EF92FF920F931F93CF93DF930F92E5 -:10634000CDB7DEB719828C017C01E60EF11C0E156B -:106350001F0561F481E09981911180E00F90DF9138 -:10636000CF911F910F91FF90EF9008950E945F31A0 -:10637000CE0101960E946D31F80181938F01E7CF24 -:10638000529A5A9A089552985A9AEA9AE9E6F0E08F -:1063900080818F7C808308956150770B91E001C0EC -:1063A000990F6A95EAF720E031E0911108C02223A5 -:1063B00091F05A9A80E28A95F1F75A980895492FF8 -:1063C000482339F05A9A232740E24A95F1F79695E7 -:1063D000ECCF5A98F9CF5A98EDCFFF920F931F93B5 -:1063E000CF93DF93EC018C01060F111DC017D1076D -:1063F00031F4DF91CF911F910F91FF900895F990A3 -:106400000E94673168E08F2D0E94CC31EFCF1F9240 -:106410000F920FB60F921124EF92FF920F931F93DA -:106420002F933F934F935F936F937F938F939F939C -:10643000AF93BF93EF93FF93CF93DF930F92CDB7BB -:10644000DEB719820E945F31CE0101960E946D3144 -:10645000A82FA695A695A695282F229525709A2F48 -:106460009570290F922F937026952695920F982755 -:1064700097708981982B09F075C0A83008F072C018 -:1064800080E18A95F1F75A9A529AB2E0BA95F1F7FB -:1064900000C05A98EA2EF12CEAE0AE9FD0011124F8 -:1064A000AF5FBE4F1896ED91FC9119973097B1F000 -:1064B0006091F0017091F10116962D913C91179722 -:1064C000260F371F13968D919C911497680F791F93 -:1064D00015964C91159712968C9109958AE08E9D90 -:1064E000F0018F9DF00D1124EF5FFE4F6581662353 -:1064F00051F02091F0013091F10186819781820F56 -:10650000931F0E94ED310E946731F0E1FA95F1F797 -:106510005A9852985A9A80E18A95F1F78AE08E9DAE -:1065200080018F9D100D11240F5F1E4FD801129610 -:106530006C911297662371F12091F0013091F10175 -:1065400013968D919C91820F931F0E949931D801CF -:10655000ED91FC91882311F088E001C082E08083F6 -:106560000E945F310F90DF91CF91FF91EF91BF912A -:10657000AF919F918F917F916F915F914F913F91DB -:106580002F911F910F91FF90EF900F900FBE0F90E2 -:106590001F901895ED91FC91DFCF0F931F93CF9330 -:1065A000DF93EC0108970CF0A9C08AE08C9FF00102 -:1065B0008D9FF00D1124EF5FFE4F80819181892B1B -:1065C00009F49CC0F894529A5A9885E08A95F1F79C -:1065D00000008C2F869585709C2F9570890F982FC1 -:1065E000937086958695890F8E0193E0000F111F99 -:1065F0009A95E1F7082B0E94673100C068E0802F70 -:106600000E94CC31A0E1AA95F1F752985A9A4A9B80 -:1066100027C087E090E04A9925C08AE08C9F8001DE -:106620008D9F100D11240F5F1E4FF80165816623A9 -:10663000A1F12091F0013091F10186819781820FC3 -:10664000931F0E949931811128C0529A5A9AD801F9 -:10665000ED91FC9182E08083789482E090E016C016 -:1066600000C0D5CF0197B9F4529A5A9A8AE08C9F0C -:10667000F0018D9FF00D1124EF5FFE4F0190F0812E -:10668000E02D81E08083789481E090E0DF91CF91EC -:106690001F910F91089500C0BECF0E945F31B0E2FC -:1066A000BA95F1F75A98529AE0E1EA95F1F78AE043 -:1066B0008C9FF0018D9FF00D1124EF5FFE4F6281E2 -:1066C000662351F02091F0013091F1018381948192 -:1066D000820F931F0E94ED310E9467318AE08C9FE8 -:1066E000F0018D9FF00D1124EF5FFE4F0190F081BE -:1066F000E02D1082789490E080E0C8CF84E090E0B4 -:10670000C5CFAA1BBB1B51E107C0AA1FBB1FA61701 -:10671000B70710F0A61BB70B881F991F5A95A9F74A -:1067200080959095BC01CD010895991B79E004C036 -:10673000991F961708F0961B881F7A95C9F78095C0 -:10674000089597FB072E16F4009407D077FD09D023 -:106750000E94813307FC05D03EF4909581959F4FB0 -:106760000895709561957F4F0895052E97FB1EF44F -:1067700000940E94CC3357FD07D00E94E13307FC00 -:1067800003D04EF40C94CC33509540953095219520 -:106790003F4F4F4F5F4F089590958095709561954D -:1067A0007F4F8F4F9F4F0895EE0FFF1F0590F4917D -:1067B000E02D099469279627692778278727782766 -:1067C0000895A1E21A2EAA1BBB1BFD010DC0AA1F32 -:1067D000BB1FEE1FFF1FA217B307E407F50720F04A -:1067E000A21BB30BE40BF50B661F771F881F991FC5 -:1067F0001A9469F760957095809590959B01AC010E -:10680000BD01CF010895FB01DC0102C005900D928E -:1068100041505040D8F70895FB01DC0104C08D9130 -:106820000190801921F441505040C8F7881B990B02 -:106830000895FB01DC0102C001900D9241505040CF -:10684000D8F70895F999FECF92BD81BDF89A99279E -:1068500080B50895A6E1B0E044E050E00C945C34CB -:10686000A8E1B0E042E050E00C945C34262FF999A6 -:10687000FECF92BD81BDF89A019700B4021639F09F -:106880001FBA20BD0FB6F894FA9AF99A0FBE089570 -:106890000396272F0E9437340E943634252F0E94FA -:1068A0003734242F0C9437340196272F0E94373425 -:1068B0000C943634DC01CB01FC01F999FECF06C003 -:1068C000F2BDE1BDF89A319600B40D9241505040AE -:1068D000B8F708955058BB27AA270E9482340C9419 -:1068E000C3350E94B53538F00E94BC3520F039F42C -:1068F0009F3F19F426F40C94B2350EF4E095E7FBB3 -:106900000C948335E92F0E94D43558F3BA176207E7 -:1069100073078407950720F079F4A6F50C940E36DA -:106920000EF4E0950B2EBA2FA02D0B01B9019001AA -:106930000C01CA01A0011124FF27591B99F0593FEE -:1069400050F4503E68F11A16F040A22F232F342F36 -:106950004427585FF3CF469537952795A795F04084 -:106960005395C9F77EF41F16BA0B620B730B840B99 -:10697000BAF09150A1F0FF0FBB1F661F771F881F51 -:10698000C2F70EC0BA0F621F731F841F48F48795A9 -:1069900077956795B795F7959E3F08F0B0CF93959B -:1069A000880F08F09927EE0F9795879508950E9414 -:1069B000F63590F09F3748F4911116F40C940F3689 -:1069C00060E070E080E89FE3089526F01B16611DEB -:1069D000711D811D0C9489350C94A4350E945F357E -:1069E00008F481E008950E94DC3588F09F5798F004 -:1069F000B92F9927B751B0F0E1F0660F771F881FC4 -:106A0000991F1AF0BA95C9F714C0B13091F00E94DD -:106A10000E36B1E008950C940E36672F782F882734 -:106A2000B85F39F0B93FCCF3869577956795B39504 -:106A3000D9F73EF490958095709561957F4F8F4F73 -:106A40009F4F0895E89409C097FB3EF49095809578 -:106A5000709561957F4F8F4F9F4F9923A9F0F92F24 -:106A600096E9BB279395F695879577956795B795A2 -:106A7000F111F8CFFAF4BB0F11F460FF1BC06F5F88 -:106A80007F4F8F4F9F4F16C0882311F096E911C09A -:106A9000772321F09EE8872F762F05C0662371F0BB -:106AA00096E8862F70E060E02AF09A95660F771FCF -:106AB000881FDAF7880F9695879597F90895990FAB -:106AC0000008550FAA0BE0E8FEEF16161706E807B8 -:106AD000F907C0F012161306E407F50798F0621BD9 -:106AE000730B840B950B39F40A2661F0232B242BAE -:106AF000252B21F408950A2609F4A140A6958FEFCD -:106B0000811D811D089597F99F6780E870E060E01E -:106B10000895882371F4772321F09850872B762FDE -:106B200007C0662311F499270DC09051862B70E0A1 -:106B300060E02AF09A95660F771F881FDAF7880FB2 -:106B40009695879597F908959F3F31F0915020F4DD -:106B5000879577956795B795880F911D9695879539 -:106B600097F908959FEF80EC089500240A94161673 -:106B7000170618060906089500240A94121613062B -:106B8000140605060895092E0394000C11F48823B9 -:106B900052F0BB0F40F4BF2B11F460FF04C06F5FD5 -:106BA0007F4F8F4F9F4F089557FD9058440F551FAB -:106BB00059F05F3F71F04795880F97FB991F61F07F -:106BC0009F3F79F087950895121613061406551FF6 -:106BD000F2CF4695F1DF08C0161617061806991F62 -:106BE000F1CF869571056105089408950E94DC3502 -:106BF000A0F0BEE7B91788F4BB279F3860F41616DB -:106C0000B11D672F782F8827985FF7CF86957795E6 -:106C10006795B11D93959639C8F30895E894BB27FD -:106C200066277727CB0197F908950E9428360C94A0 -:106C3000C3350E94B53538F00E94BC3520F095234D -:106C400011F00C9483350C94B23511240C940F364A -:106C50000E94D43570F3959FC1F3950F50E0551FF6 -:106C6000629FF001729FBB27F00DB11D639FAA27A1 -:106C7000F00DB11DAA1F649F6627B00DA11D661FF0 -:106C8000829F2227B00DA11D621F739FB00DA11D11 -:106C9000621F839FA00D611D221F749F3327A00DCB -:106CA000611D231F849F600D211D822F762F6A2F67 -:106CB00011249F5750409AF0F1F088234AF0EE0FCC -:106CC000FF1FBB1F661F771F881F91505040A9F7F9 -:106CD0009E3F510580F00C9483350C940F365F3F36 -:106CE000E4F3983ED4F3869577956795B795F79535 -:106CF000E7959F5FC1F7FE2B880F911D96958795AD -:106D000097F90895F894FFCFE7100F1162110F1152 -:106D1000621142117A11621177128412B014B01408 -:106D2000B914B914BB14B914B914B914B014B0140B -:106D3000C014B914B914C014C021C02119221922D9 -:106D40004B22F321F321F3216522D622E622E6220B -:106D5000212E252E682E792E842EA32EA62ED92EF6 -:106D6000FA2E762E762E052F082F0C2F322F542F29 -:066D7000572F592F7E2F62 -:106D760001300200000001000000003002000000A7 -:106D8600050100000030020000000106000000308E -:106D960002000000010700000030020408000000A5 -:106DA6000000003002090C00000000000030020163 -:106DB6001500000000000036323331F7F66766979B -:106DC600C6343500000000000180005F082B0E0A63 -:106DD6000E060E020EF4F5010021007F22000300CC -:106DE6004A004A4A01F6F731333236674C41594573 -:106DF600520042617365200047616D652000526153 -:106E0600697365004C6F776572004C4F434B0043C6 -:106E1600617073004E756D005363726C0020202004 -:106E2600202000534F4C415200544D505354008182 -:106E36008283E200E900EA00B500B600B700CD00A3 -:106E46008301CC008A0192019401210223022402CB -:106E56002502260227022A02B300B4006F00700042 -:106E6600A80200FF0100010000FFFF000001000171 -:106E7600FF000008101818100800000102020202A4 -:106E860002020202020240227B99017701FC000005 -:066E96000C190C390C0080 +:103670004FB7F8948091510490915204A091530453 +:10368000B09154044FBF821B930B08952FB7F89449 +:103690008091510490915204A0915304B09154042C +:1036A0002FBF08955F926F927F928F929F92AF92F9 +:1036B000BF92CF92DF92EF92FF920F931F93CF931F +:1036C000DF9300D000D00F92CDB7DEB76C01FC01C4 +:1036D00083819481892B31F08081918189238F3F6F +:1036E00009F05EC50F900F900F900F900F90DF9133 +:1036F000CF911F910F91FF90EF90DF90CF90BF90EF +:10370000AF909F908F907F906F905F9008950E94F0 +:103710006314182F682F89819A810E94890B69810F +:103720007A81812F0E9456148C01F60182818823B0 +:1037300009F42BC5C80182519F45409708F0EEC49B +:103740008FEF93E00E942133025193EEA92E92E075 +:10375000B92E8111C7CF01113AC01C821B82662489 +:1037600063948AE0582E85010F5F1F4FC5010E94A8 +:10377000213389831A82882309F4B4CF9FEF980FED +:103780009330A0F58A83698232E0A30EB11CC80190 +:103790000E9421338B83882309F4A4CF8E010F5F0D +:1037A0001F4FF80120812223F1F2213009F058C087 +:1037B000918182819130E1F40E5F1F4F6AE070E0E9 +:1037C000893311F460E570E00E94CF0E17C0A11498 +:1037D000F4E0BF0609F486CFC5010E9421338111B0 +:1037E00001C001502FEFA21AB20AB5CF5801D6CFAF +:1037F000923039F40E5F1F4F0E94150C0F5F1F4F60 +:10380000D0CF933029F40E5F1F4F0E94DC0BF6CF10 +:10381000943019F00F5F1F4FF1CF0E5F1F4F30E054 +:1038200020E0B8016F5F7F4FF80141818053990B11 +:103830008A30910550F02150310900F38FE99FE063 +:103840000197F1F700C00000F6CF529EF001539EA1 +:10385000F00D11249C012E0F3F1F842F8B01E1CF0F +:10386000E22FF0E0E75FFD4F7490822F86958695FA +:10387000869590E0FC01E750FE4FE4902770F12C14 +:10388000022E02C0F594E7940A94E2F7E1E0EE22FA +:10389000FF24FC01E751FE4FC490D12C022E02C040 +:1038A000D594C7940A94E2F7F1E0CF22DD24FC011D +:1038B000E752FE4F8490912C02C0959487942A95EC +:1038C000E2F721E082229924E114F10419F081EE5B +:1038D0000E94150CC114D10419F086EE0E94150C3B +:1038E00039E36AE070E0731202C060E570E0872D92 +:1038F0000E94CF0ECD2819F086EE0E94DC0BEF2837 +:1039000019F081EE0E94DC0B892809F477CF6AE078 +:1039100070E08CE259CF81E00E94281703C081E05B +:103920000E941C170F900F900F900F900F90DF9137 +:10393000CF911F910F91FF90EF90DF90CF90BF90AC +:10394000AF909F908F907F906F905F900C94111725 +:1039500082E0E2CF043F110509F455C108F057C1D8 +:10396000053E110509F4DDC0F601928191113CC2BA +:103970008091590482720A3CFCE51F0709F414C2C5 +:1039800008F06AC1053C3CE5130709F4F9C108F0E9 +:103990004EC1033C5CE5150709F4D3C108F0EBC147 +:1039A000023C1C4509F47DC1F60100811181992377 +:1039B00009F434C2C8010E946314F82E682FC801AC +:1039C0000E94890BB8018F2D0E9456140E94D609BF +:1039D000182FB82EF60122814581342F32953F7081 +:1039E000892F82958F70E82EF12C8C3008F04EC212 +:1039F000F701E955FB4C0C94F5320338FFE51F073E +:103A000009F481C018F501383FE5130709F44AC0ED +:103A100008F065C000385FE5150709F0A5CF8823D9 +:103A200009F459C080919C02811106C081E0809305 +:103A30009C0282EE0E94150C0E94461B90939B02F2 +:103A400080939A028BE20E94150C8ECF05389FE579 +:103A5000190709F4BEC008F476C00638FFE51F0751 +:103A600009F082CF882309F4CEC06091590170918A +:103A70005A0190E080E00E946E3320E030E040E0A8 +:103A80005CE30E94CF3320E030E040E85FE30E9437 +:103A900069338111B5C080EE90E090935A01809314 +:103AA0005901A1C08823A1F080919C02811106C018 +:103AB00081E080939C0282EE0E94150C0E94461BBE +:103AC00090939B0280939A0281EE0E94150CBACFCC +:103AD00081EE0E94DC0B8BE20E94DC0B45CF882339 +:103AE00009F442CF81EE0E94150C83EE0E94150C62 +:103AF0008FE40E94150C8FE40E94DC0B83EE0E9481 +:103B0000DC0B81EEE9CF882309F42ECF81EE0E94F1 +:103B1000150C83EE0E94150C80E50E94150C80E5C3 +:103B2000EBCF80933C0210933B0200933A02882330 +:103B300021F081E08093EE0217CF1092EE0214CFB5 +:103B400080933902F0CF882379F18091390288235C +:103B500049F080913A020E94DC0B80EE0E94150C25 +:103B60008AE20CC080913C028823D1F380913A0212 +:103B70000E94DC0B80EE0E94150C8CE40F900F90DD +:103B80000F900F900F90DF91CF911F910F91FF90A9 +:103B9000EF90DF90CF90BF90AF909F908F907F90ED +:103BA0006F905F900C94150C8AE20E94DC0B8CE401 +:103BB0000E94DC0B80EE0E94DC0B809139028111A7 +:103BC00005C080913C02882309F48CCD80913A0293 +:103BD000D5CF8823C1F080913203882339F0109229 +:103BE0003203109200010E943E0DBECE8091000172 +:103BF0008111F7CF81E08093320380930001F3CFEE +:103C000080E890E04ACF61E00E949A0CADCE62E07D +:103C1000FBCF64E0F9CF882321F081E08093ED02AF +:103C2000A3CE1092ED02A0CE1092F0029DCE073CE2 +:103C30002CE5120709F4AEC008F4A7C0083C4CE517 +:103C4000140709F4ACC0093C1C4509F0ADCE43EAA9 +:103C500055E16FEA75E179C0043DECE51E07A8F473 +:103C60000E3CFCE51F0708F03DCD0C3C2CE512078F +:103C700009F49FC045EE55E166EF75E10D3C1C452A +:103C800008F463C061E081E046C0053D4CE51407DF +:103C900009F428CD08F492C00D351D4509F422CD54 +:103CA00083CE8091710480FF31C08E7F8093710438 +:103CB0006091710470917204809173049091740406 +:103CC0000E94DE1480915B03816080935B039FEF11 +:103CD000E0E7F2E09150E040F040E1F700C0000082 +:103CE0000F900F900F900F900F90DF91CF911F9139 +:103CF0000F91FF90EF90DF90CF90BF90AF909F908B +:103D00008F907F906F905F900C94E40E8160809311 +:103D1000710461E086950F900F900F900F900F90B7 +:103D2000DF91CF911F910F91FF90EF90DF90CF9097 +:103D3000BF90AF909F908F907F906F905F900C940A +:103D4000071643E357E16CE377E10F900F900F9074 +:103D50000F900F90DF91CF911F910F91FF90EF90F7 +:103D6000DF90CF90BF90AF909F908F907F906F909B +:103D70005F900C94C7084CE357E163E377E1E5CF2C +:103D800043ED55E16CED75E1E0CF4CED55E163EDB0 +:103D900075E1DBCF4BEB55E167EC75E1D6CF47EC36 +:103DA00055E16BEB75E1D1CF4FEA55E163EA75E17F +:103DB000CCCF46EF55E165EE75E1C7CF0F900F9080 +:103DC0000F900F900F90DF91CF911F910F91FF9067 +:103DD000EF90DF90CF90BF90AF909F908F907F90AB +:103DE0006F905F900C9446170E3D1C4509F0DCCD9A +:103DF0000F900F900F900F900F90DF91CF911F9128 +:103E00000F91FF90EF90DF90CF90BF90AF909F9079 +:103E10008F907F906F905F900C946D17C8010E94F7 +:103E2000610BF82ECFCD092F0F70907F11F0029506 +:103E3000007F812F2223C9F0002369F090E2910FC7 +:103E4000983010F011110BC080915904082B009389 +:103E500059040E94400B812F0E94150C17C08091BD +:103E60009102082B00939102F4CF0E94DC0B0023F7 +:103E700069F00095105E183010F0B11027C08091E5 +:103E800059040823009359040E94400B98E0E91A52 +:103E9000F108E4E0EE16F10408F024CC0E94BF0E15 +:103EA0000F900F900F900F900F90DF91CF911F9177 +:103EB0000F91FF90EF90DF90CF90BF90AF909F90C9 +:103EC0008F907F906F905F900C9456168091910226 +:103ED000082300939102D8CF892F8F70907F903262 +:103EE00011F08295807FF1E0BF120CC0222329F0EF +:103EF000333060F60E94D20BC9CF323038F60E94C0 +:103F0000C70BC4CF222341F03323A1F340FFA3CF3B +:103F10004F70F6014583EECF332389F3193309F04F +:103F2000F5C0FFEF27EE33E0F15020403040E1F7DD +:103F300000C00000812F0E94DC0BA8CF892F86953E +:103F40008695837061F0813009F0A0CF812F937046 +:103F5000211102C090E080E00E946E0897CF812F6F +:103F60009370211102C090E080E00E9484088ECFFF +:103F7000892F8370A1F5211189CF812F8295869594 +:103F80008770880F880F412F4F70082E01C0440F93 +:103F90000A94EAF7212F207114FF07C02FE030E0C8 +:103FA00001C0220F8A95EAF7209596959695937011 +:103FB000923081F0822F842B933030F480919202E2 +:103FC000913029F0242B82230E94C30B5FCF842BD6 +:103FD000822BFACF242B809192028227F5CF8695EF +:103FE000222311F0892F8170882309F44FCF812F6C +:103FF000829586958770880F880F412F4F70082E05 +:1040000001C0440F0A94EAF7212F207114FF07C062 +:104010002FE030E001C0220F8A95EAF720959695AF +:1040200096959370923081F0822F842B933030F4E8 +:1040300080917004913029F0242B82230E940B1769 +:1040400025CF842B822BFACF242B809170048227DA +:10405000F5CF092F0F70222329F0802F0E942817F7 +:10406000812F48CF812F0E94C70B802F0E941C17E1 +:104070000DCF812FE1EF1E1789F1E11750F0F0EF1E +:104080001F17B9F02223B1F13111E5CE892F8F71BD +:1040900029C042EF141749F153EF1513F3CF80E015 +:1040A000222361F29F7181E001C0880F9A95EAF79F +:1040B000C5CF222379F0323008F0E8CE292F2F71B6 +:1040C00081E090E001C0880F2A95EAF79091700492 +:1040D0008927B4CF333008F0D9CEF0CF892F8F7134 +:1040E000222321F20E942817D1CE892F8F712223FB +:1040F000C9F3BCCF332379F0893341F48FEF97EEC6 +:10410000E3E081509040E040E1F712CF8FE39CE97B +:104110000197F1F70DCF892F8F71A8CF0031FFE5FF +:104120001F0709F4F8CB01312FE5120709F410CC71 +:104130000E9462086093F5027093F6028093F70282 +:104140009093F802F6018281063F110509F461CDD2 +:1041500008F053CC043E110509F45DCD08F0FACB0C +:10416000003E110509F457CD013E110509F4E8CCD4 +:104170000C32110509F0F8CB882309F455CD81E004 +:104180008093F00210926701EFCB00313FE51307F7 +:1041900009F4C5CB01314FE51407A1F682E0C0CB8D +:1041A00085E0DE01119601900D928A95E1F7F60106 +:1041B000228189819A812111AACA0E94610B182F3C +:1041C000AECA1F93CF93DF9380915D02807FA9F4E5 +:1041D00080915A02882389F080918F02D0915E02EB +:1041E0006091580270915902A0915B02B0915C02FB +:1041F000C62FC72316E0D81304C0DF91CF911F91BB +:10420000089590E0109711F0CF3F19F40196877050 +:10421000F2CF189F9001199F300D1124F901E15A36 +:10422000FD4F41814713F2CF40814613EFCF4281CA +:104230004111ECCF438154814A1B5B0B403A51053D +:1042400028F780915D028F70806180935D02F90193 +:10425000EC59FD4F80818F708061808388E592E00A +:104260000E94521BDF91CF911F910C94570BAF927C +:10427000BF92CF92DF92EF92FF920F931F93CF9353 +:10428000DF93CDB7DEB761970FB6F894DEBF0FBEF0 +:10429000CDBF8C0185E0F801DE011D9601900D92E5 +:1042A0008A95E1F7F801E28088E5A82E82E0B82E31 +:1042B00060915B0270915C026115710509F432C175 +:1042C0009091580240915902892F84238F3F09F41D +:1042D00029C120813181C380D480F0905A02F60137 +:1042E000E61BF70BFF2009F4E8C080915D02582F10 +:1042F000507FE03AF10508F0ABC0511177C0FE2CB9 +:10430000431321C092131FC0E1101DC08F70806144 +:1043100080935D02C5010E94521B80915D02F801ED +:1043200085838F2D61960FB6F894DEBF0FBECDBF8B +:10433000DF91CF911F910F91FF90EF90DF90CF9081 +:10434000BF90AF900895CD2829F0822F83238F3F0F +:1043500009F003C180E0F82FF170DF2E80FF3CC030 +:1043600080918F0240915E0256E0841315C02D8724 +:104370003E878D859E850E949214292F22952F704D +:104380002230F0F0243018F59F70F1F0F80195819B +:10439000907FD1F4D12C1EC090E0589FF001599F1E +:1043A000F00D1124E15AFD4F6181361306C0608182 +:1043B000261303C06281E6120FC001968770D5CF25 +:1043C0009F7011F0882331F3805E883018F3C801A4 +:1043D0000E94521BFD2CA5CFEE2009F4A2CF8091A4 +:1043E0005D02816080935D02F12C9BCF431306C078 +:1043F000921304C0F801EE2009F479C0C8010E94AC +:104400009E14882309F1EE20F9F080915D0280323C +:1044100070F0209158023091590238872F83198605 +:10442000DB86CA868C87CE0107960E94521B86E0E7 +:10443000F801A8E5B2E001900D928A95E1F70E949B +:10444000E120FF24F3946DCFC8010E94521BF9CFE5 +:1044500051110AC088E592E00E94521B86E0F501E6 +:1044600011928A95E9F7C0CF43130FC092130DC084 +:10447000E1100BC0F8018583C8010E94521B86E041 +:10448000F50111928A95E9F74CCFC8010E949E145C +:104490008823D1F2EE20C1F280915D02803238F2A1 +:1044A00020915802309159023A8329831B82DD8280 +:1044B000CC828E83CE010196B8CFE03AF105F8F6B2 +:1044C000FE2CEE2009F243131FC092131DC08091F1 +:1044D0005D0280FD10C0982F907F69F0F801858300 +:1044E000903F31F0982F907F905F8F70892B85835C +:1044F000C8010E94521B86E0F801A8E5B2E00190D5 +:104500000D928A95E1F70DCFC8010E949E1481118A +:104510008ECF80915D02816080935D02C8010E9410 +:10452000521BFFCEEE2009F48FCFC8010E949E14CB +:10453000F82E882309F488CF86E0F801A8E5B2E0D8 +:1045400001900D928A95E1F780915802909159025D +:104550000E9492140E94E120E4CE81E08E25FBCEE1 +:104560001F93CF93DF93CDB7DEB767970FB6F8945D +:10457000DEBF0FBECDBF4B8B5C8B6D8B7E8B8F8B6D +:104580006111109291021A8A198A85E0FE017396D0 +:10459000DE011D9601900D928A95E1F786E0FE01FD +:1045A0003D96DE01179601900D928A95E1F7CE01B6 +:1045B00007960E943721882389F016E080918F02A8 +:1045C00090915E0289134BC067960FB6F894DEBFD8 +:1045D0000FBECDBFDF91CF911F91089586E0FE0100 +:1045E0003796DE01119601900D928A95E1F78A8542 +:1045F0009B85892B11F38F81988589238F3FE9F261 +:1046000020915E0230E0C9010196877099274091A0 +:104610008F024817190681F4109259040E94F70F6F +:1046200010925E0210928F0286E0E8E5F2E0DF0170 +:104630001D928A95E9F7C1CF96E0929FD001939F92 +:10464000B00D1124A15ABD4FFE01319601900D927B +:104650009A95E1F780935E020E94570BAECF819F3F +:10466000C0011124815A9D4F0E943721882309F4EB +:10467000ABCF80918F0290E001968770992780934D +:104680008F029CCF9F92AF92BF92CF92DF92EF9218 +:10469000FF920F931F93CF93DF93CDB7DEB764974D +:1046A0000FB6F894DEBF0FBECDBF8E010F5F1F4F58 +:1046B0008AE0D8011D928A95E9F79EE4C92E91E01F +:1046C000D92EF12CE12CAA24A394B12CF6018191CE +:1046D0006F018F3F09F44AC0F894E82FE295EF701C +:1046E000F0E021A18F70A50102C0440F551F8A95EB +:1046F000E2F7CA01922F982B91A392A1809589236A +:1047000082A30E947A0900C0E7E4F1E030E020E0F3 +:10471000912C41914F3F09F47DC0A42FA295AF7019 +:10472000B0E090968C9190E04F7002C0959587957F +:104730004A95E2F780FD6EC08A2D022E01C0880FD7 +:104740000A94EAF7982A2F5F3F4F2730310509F77F +:10475000F601319780818F3F11F00E947C0950EA69 +:104760005A95F1F7F801EE0DFF1D90828FEFE81AD0 +:10477000F80A95E0E916F10409F0A8CF4AE050E004 +:10478000B80188ED92E00E940B337C01892B41F047 +:104790008AE0F801A8EDB2E001900D928A95E1F768 +:1047A0001091E302E114F104B9F181E080939502E4 +:1047B0000E94461B909394028093930280919302EF +:1047C000909194020E94371B069770F0A8EDB2E01A +:1047D000E12FF0E0E15BFC4F8D91819322E0AD3D54 +:1047E000B207D1F71092950281E090E0EF28C1F076 +:1047F00064960FB6F894DEBF0FBECDBFDF91CF91A8 +:104800001F910F91FF90EF90DF90CF90BF90AF90EE +:104810009F90089580E096CF809195028111CECF30 +:104820000E949C0EB82EE091E302882309F4C7C0D1 +:104830008E01005F1F4F85E0D8011D928A95E9F730 +:10484000F0E09F01215B3C4F79018091D102AE01E4 +:104850004B5E5F4F6A018A3008F086C040EB59E139 +:10486000B801C7010E94580E882309F494C043EB95 +:1048700055E2B801C7010E94580E882309F48BC085 +:1048800047ED57E1B801C7010E94580E882309F48B +:1048900082C043EC58E1B801C7010E94580E88233A +:1048A00009F479C041EA58E1B801C7010E94580EE5 +:1048B000882309F470C01092D102E091E202F0E086 +:1048C000AF01415B5C4FD80110E0FA019191AF015B +:1048D0008D91981731F09F0121503109F9018083A2 +:1048E0001B2DCA16DB0689F780919C02882371F084 +:1048F00080919A0290919B020E94371B893E9340BF +:1049000028F082EE0E94DC0B10929C0288E9C82EEF +:1049100082E0D82EF12CE12CD6018D916D018823F7 +:10492000D1F08695F70109F447C0EC50FE4F808125 +:1049300091819C878B871D860E94461B8160782F02 +:104940009F878E87F601319710824B855C856D8538 +:104950008F850E94B022B2E0EB0EF11CE4E0EE166F +:10496000F104D1F6812F44CF809196029091970265 +:104970000E94371B843F914008F070CFA091E20263 +:10498000B0E0A15BBC4FF8011D921192CE16DF067C +:10499000D9F71B2DA9CF8091D1028F3F31F08F5FC6 +:1049A0008093D1028A3008F488CF0E94461B9093EE +:1049B000970280939602E2CFE051FE4FB8CFF0E02D +:1049C000E15BFC4FF89485E0A0EBB2E001900D9222 +:1049D0008A95E1F765E070E080EB92E00E94B10813 +:1049E0008093AF020E947A09F894E091EB02F0E024 +:1049F000E851FD4F80818B878093B60261E070E0C3 +:104A0000CE010B960E94B1088093B5020E947A09EC +:104A1000F894C090B702D090B802E090B902F0903C +:104A2000BA0280919D0290919E02A0919F02B09146 +:104A3000A002C816D906EA06FB06D1F0C0929D0274 +:104A4000D0929E02E0929F02F092A0020E949C0EE1 +:104A500081110EC00E946208C61AD70AE80AF90A34 +:104A6000C092D202D092D302E092D402F092D50248 +:104A70000E947A09F8948091C202882321F184FF70 +:104A800004C09091C30290935C0380FF0DC080919D +:104A9000BB0280FF25C090917104916090937104D6 +:104AA00060E086950E9407168091C20281FF09C0CE +:104AB00020E04091BE026091BD028091BC020E9444 +:104AC000F0141092C2020E947A09F8948091C402F4 +:104AD000882349F00E94B00D0E947A0980E088CEB8 +:104AE0000E94E20FE1CF0E94950DF6CFEF92FF9268 +:104AF0000F931F93CF93DF9300D000D00F92CDB7C9 +:104B0000DEB7162FE82EF12CC701880F991F6623F8 +:104B100039F18C509E4FFC01808191819A83898369 +:104B200001E00B830E94461B8160782F9D838C835C +:104B3000F701E856FD4F0127110F102B1083498113 +:104B40005A816B818D810F900F900F900F900F9075 +:104B5000DF91CF911F910F91FF90EF900C94B022B5 +:104B600080519E4FD8CFCF92DF92EF92FF920F935A +:104B70001F93CF93DF930F92CDB7DEB7EE24E3946C +:104B8000F12C06EB12E09E012F5F3F4F4BEA52E003 +:104B900063E082E00E940119082F882321F1C09070 +:104BA000E5028C2D90E09C0128513D4F790119813F +:104BB000F9018081181BD12E80E00AC0DA94F70138 +:104BC00080818F5F808360E08C2D0E947625802F0E +:104BD0001D14A4F3912F17FD90E0191B11110EC0A5 +:104BE00081110E943E0B802F0F90DF91CF911F917A +:104BF0000F91FF90EF90DF90CF9008951F5FF70126 +:104C000080818150808361E08C2D0E947625802FE9 +:104C1000E5CF1F921FB61F9211248F939F93AF93DE +:104C2000BF9380915004811113C0809151049091E1 +:104C30005204A0915304B09154044196A11DB11D9A +:104C40008093510490935204A0935304B09354045E +:104C5000BF91AF919F918F911F901FBE1F9018958C +:104C6000CDB7DEB7E3970FB6F894DEBF0FBECDBF6A +:104C700084B7877F84BF0FB6F894A89580916000B1 +:104C8000886180936000109260000FBE80E890E021 +:104C90000FB6F89480936100909361000FBE85B7C2 +:104CA000806885BF85B7806885BF88E799E0909365 +:104CB0002F0280932E020E94D5060E94A0078091A9 +:104CC000E20084608093E2007894809166048823F7 +:104CD000A1F01091E9001F709091EC00892F817074 +:104CE00090FD80E8182B1092E9008091E80083FD88 +:104CF0000E9400101F701093E90082E084BD93E0D1 +:104D000095BD9AEF97BD80936E001092D2021092DB +:104D1000D3021092D4021092D5020E94C5148111C0 +:104D200002C00E9421140E949C0E80935801809121 +:104D30005801882309F4C6C010926F0185E2809360 +:104D400070010E949C0E81110E94003180915801D7 +:104D500081112FC0FE01359686E0DF011D928A95F4 +:104D6000E9F786E6898387E98A8386EC8B8384E387 +:104D70008C8385E38D833497AEE4B1E0CE010B964E +:104D800021912D938E179F07D9F787E0E5E7F1E092 +:104D9000DE01919601900D928A95E1F7FE01B196A0 +:104DA000A7E4B1E0CE01889621912D938E179F073D +:104DB000D9F78091580195E0811190E09093E3023A +:104DC00085E0891B8093E2020EE411E0A3E5EA2E60 +:104DD000A1E0FA2EF80181918F018F3F11F00E941E +:104DE0007C09E016F106B1F707E411E0FEE4EF2ECE +:104DF000F1E0FF2ED8018D918D018F3F11F00E94BF +:104E00007C09E016F106B1F7E8EDF2E082EE92E0FF +:104E1000AFE4B3E011921D928E179F07D9F70E945D +:104E2000ED19811102C00E946D1782E090E00E948E +:104E300021338093440384E090E00E942133182FB3 +:104E400082E290E00E942133982F812F9093D70225 +:104E50008093D6020E944223EFE7FBEB3197F1F7F4 +:104E600000C000000E94422380914F0380FF2EC0AB +:104E70006FEF7FEF90E080E00E94533381E08093FA +:104E8000E00080E28093D8001092C9008FE19EE498 +:104E90000197F1F700C0000087E090EBDC01809300 +:104EA0007A0690937B06A0937C06B0937D0688E1FA +:104EB0009CE00FB6F894A895809360000FBE909385 +:104EC0006000FFCF85E280936F0139CF83E090E0EF +:104ED0000E9421330E94C30B809170040E946E16C1 +:104EE0000E949C0E811102C00E94033183E08093D6 +:104EF0001A0380E280933D040E94012F6DE070E070 +:104F00008CE992E00E94650D892BE9F580911A03E6 +:104F100063E070E081FD97C289E992E00E94650D2F +:104F2000892B89F56DE070E089E892E00E94650DBB +:104F3000892B49F50E9462086058774C8E4F9F4F2D +:104F4000609344047093450480934604909347040F +:104F5000E8E7F4E080E092E0DF019C011D9221503F +:104F60003040E1F7F0937906E09378068FEF9FEFFA +:104F7000909377048093760481E080934904809332 +:104F8000480410921B038091E402811136C00E94F4 +:104F9000ED19811104C00E946D170E94551788E019 +:104FA00090E00E942933609371047093720480939F +:104FB00073049093740480915B03836080935B031C +:104FC0006E7F71F40E94551788E090E00E942933AB +:104FD00060937104709372048093730490937404CB +:104FE0000E94CC088091710480FF04C060E0869527 +:104FF0000E94071681E08093E4028091580181119C +:1050000006C084EF8093660185EF8093650120914F +:105010006601A22FA295AF70B0E091963C91919756 +:105020002F7081E090E0BC01022E01C0660F0A944F +:10503000EAF7462F4095432391964C939197929689 +:105040003C919297362B92963C93929740916501B2 +:10505000E42FE295EF70F0E031A14F70042E01C013 +:10506000880F0A94EAF7982F9095932391A392A121 +:10507000892B82A390968C9190E002C0959587959C +:105080002A95E2F7817020A130E002C0359527957E +:105090004A95E2F792E020FF90E0892B8093EC02A2 +:1050A0008091580111E081278093EB02312F381B4A +:1050B0003093E5020E94012F40E060E080E00E9412 +:1050C0001E0D89EA92E090935E0380935D0360E099 +:1050D0008AE00E94071681E00E940B1780EE90E0A4 +:1050E00090935A0180935901109332030E943E0D10 +:1050F0008BE591E090934D0480934C04E0E46E2E98 +:1051000080916604FF24F39400E112E1853009F4F4 +:10511000ECC10E944223E82E81110E946208E5E45E +:10512000F3E0AFE4B3E010E000E0B02EDD90819159 +:105130008D1509F4FEC18D25C12CFF24F394982F01 +:105140009F2109F4F1C10E949C0E882399F0C8A602 +:10515000B9A6DF2081E009F480E08AA70E94461BFF +:105160008160782F9CA78BA748A559A56AA58CA517 +:105170000E94B022F801EB5BFC4F8081F826F082A0 +:105180008091EC02E82FEE0FEE0F90916601A92FAF +:10519000A295AF70B0E090962C9130E09F7002C065 +:1051A000359527959A95E2F72170332790916501FF +:1051B000A92FA295AF70B0E090964C9150E09F70EF +:1051C00002C0559547959A95E2F7CA0181709927D3 +:1051D00040FF02C082E090E0822B8E2B8093EC0295 +:1051E0001091EB028F70E82FF0E0E650FE4F8081C7 +:1051F0009091EA02890F8093EA02F12C84306CF0DE +:10520000E12FF0E0E851FD4F80818F5F808360E007 +:10521000812F0E947625FF24F3948091EA028D3F2E +:105220006CF4E12FF0E0E851FD4F808181508083E4 +:1052300061E0812F0E947625FF24F3948091EA0299 +:10524000082E000C990B64E070E00E94E13280931C +:10525000EA02F1100E943E0B80914904882351F12B +:1052600080911C0390911D030E94371BC29708F088 +:1052700077C120917604309177042115310509F02A +:1052800098C2809148048823A9F00E946208009186 +:105290004404109145042091460430914704601B5A +:1052A000710B820B930B6F3F7F4F8F4F9F4710F413 +:1052B0000E94950DE11001C0F1100E94B00D809187 +:1052C00042038A3008F0ADC38091400390914103BE +:1052D0000E94371B069708F4A4C304E610E025E0FB +:1052E00030E04BE353E064E084E10E944C30892BD2 +:1052F00009F068C31092420320913203222359F02F +:1053000080913D0390913E03982789279827909399 +:105310003E0380933D0386E0E4E2F3E0DE019196F4 +:1053200001900D928A95E1F786E0FE01B196DE01CB +:10533000119601900D928A95E1F786E0FE01319673 +:10534000A5E3B3E001900D928A95E1F780913F03C8 +:1053500087FD35C38091330390913403009709F0A2 +:1053600028C360913B0380913C0300913D03109161 +:105370003E03222309F4F0C241E00E94F80C209180 +:10538000300330913103281B390B309331032093C4 +:10539000300341E0602F812F0E94F80C20912E03F2 +:1053A00030912F03820F931F90932F0380932E032E +:1053B0006EE273E08AE393E00E94D90C60E373E04D +:1053C00089E393E00E94D90C1092370310923803BE +:1053D00086E0E5E3F3E0DE01119601900D928A95F7 +:1053E000E1F786E0FE013196A4E2B3E001900D9270 +:1053F0008A95E1F7309126032091270390912803A5 +:105400008091290370912003609121034091220330 +:1054100050912303F0912503E0911F03FE13D8C29E +:10542000332311F07313D4C2222311F02613D0C2F8 +:10543000882311F08513CCC2992319F081E0491318 +:10544000C8C280E0C6C286E992E068CD8091660459 +:10545000843009F43AC00E94950D40E060E080E09D +:105460000E941E0D80E00E9456168091E702811175 +:1054700009C0F092E7028091710481708093E60286 +:105480000E94E20F1092500488E190E00FB6F89469 +:10549000A895809360000FBE6092600083B7817F03 +:1054A000846083BF83B7816083BF7894889583B716 +:1054B0008E7F83BF0FB6F894A895809160008861B5 +:1054C00080936000109260000FBE80916504882375 +:1054D00061F00E944223EFE4F3E08191811170C4F6 +:1054E000A9E5B3E0AE17BF07C1F780916604853028 +:1054F00009F4ACCF109259040E94F70F0E94BF0E1E +:105500000E9456161092E7028091E602882349F025 +:105510008091710481608093710460E086950E949F +:1055200007160E943E0DF5CDC394FF0C27E0C21272 +:1055300006CE0F5F1F4F0A30110509F0F6CD8FEF31 +:105540008DA78EA71FA60E94461B8160782F99AB5E +:1055500088AB4DA55EA56FA589A90E94B02210CE8B +:105560000E94461B90931D0380931C0360E080E023 +:105570000E949A080E94BF0E8093F9020E949C0E1E +:10558000882331F14091F5025091F6026091F702C3 +:105590007091F8022FB7F8948091510490915204C1 +:1055A000A0915304B09154042FBF841B950BA60BFC +:1055B000B70B81339547A105B10540F00E94950DC9 +:1055C00080914904882309F45CCE53CE0E94B00D2B +:1055D0000E949C0E882309F4D3C061E080E00E9401 +:1055E0009A0860E08CE791E00E94881362E080E016 +:1055F0000E949A08809170040E94890C823009F4FC +:1056000099C008F08EC0882309F494C0813009F451 +:1056100097C065E080E00E949A0860E08AE991E026 +:105620000E94881366E080E00E949A086091F90267 +:10563000669561708FE991E00E94881367E080E0D1 +:105640000E949A086091F9026095617084EA91E085 +:105650000E94881368E080E00E949A086091F90235 +:1056600062FB662760F988EA91E00E948813409106 +:10567000F1025091F2026091F3027091F4022FB79F +:10568000F8948091510490915204A0915304B091E8 +:1056900054042FBF841B950BA60BB70B8D32914082 +:1056A000A105B10508F48CCF0E9462086093F10255 +:1056B0007093F2028093F3029093F4028091F002CF +:1056C000811104C080916701811142C06DE080E0CA +:1056D0000E949A0860E08DEA91E00E9488136AE0D7 +:1056E00080E00E949A0881E0809367018091EF0238 +:1056F00090E00196817099278093EF0221E030E0DD +:10570000281B390B40E6429FC001439F900D112496 +:105710002091EE02222351F1855C9B4F0E9492065C +:105720004FCF833089F0843009F073CF60E08EE88A +:1057300091E003C060E082E891E00E94881369CFA5 +:1057400060E088E891E0F9CF60E084E991E0F5CF8E +:105750006AE080E00E949A0860E08DEA91E00E9491 +:1057600088136BE080E00E949A08C0CF2091ED0280 +:10577000222319F085589C4FD1CF85549D4FCECF11 +:1057800064E080E00E949A0860E083EB91E00E9470 +:10579000881365E080E00E949A0860E089EB91E060 +:1057A0000E94881369E080E00E949A088BEF94E0E1 +:1057B000B5CF80911B0361E070E0811162CD082FAD +:1057C00010E02B01082E02C0440C551C0A94E2F78D +:1057D000A90144215521452B09F448C090911A0391 +:1057E00090FD46C08295880F807680936A0198016B +:1057F000369527953695279520936D01815E809388 +:105800006B0110926E0124E630E047E050E068E65C +:1058100071E088E70E94F82F892B09F032CDA801AA +:1058200065E0440F551F6A95E1F780911A0380FDEA +:105830002DC048585B4F04E610E020E230E060E401 +:1058400088E70E941F30892B09F01BCD0E94B00D04 +:10585000C20180959095409076045090770448223C +:10586000592250927704409276040BCD8F5FA7CFD8 +:10587000880F880F880F80936A0110926D01895FED +:1058800080936B0183E080936E01BDCFEAEFF2E07D +:1058900080E2DF011D928A95E9F7EEE0F2E0FBABD2 +:1058A000EAAB0AE012E037E0A32E99249394AAA968 +:1058B000BBA92D91BBABAAABF80121908F01240E9F +:1058C000352E311CC10188589B4F1C01E22FF0E09E +:1058D000E650FD4F30E020E07A2C721AB92C022EEF +:1058E00001C0BB0C0A94EAF7610190E0D6018D91EA +:1058F0006D018B21672D691B6770862E062E000CAB +:10590000770BB82F01C0BB0F8A94EAF78B2E7195E5 +:10591000619571096770772701C086956A95EAF7E6 +:10592000882A8081882A80829F5F9830F9F62F5FCD +:105930003F4F31962830310579F6E2E1F2E02AA9AD +:105940003BA9E217F30709F0B2CF04E610E020E22A +:1059500030E04AEF52E073CF45E00E94F80C20910E +:105960002C0330912D03820F931F90932D0380936E +:105970002C0345E0602F812F0E94F80C20912A0310 +:1059800030912B03281B390B30932B0320932A03D0 +:105990006AE273E087E393E00E94D90C6CE273E063 +:1059A00088E393E00E94D90C10923A0310923903D5 +:1059B0000FCD0197909334038093330309CD84E195 +:1059C00090E0F8CF809142038F5F8093420300CD37 +:1059D00081E080FF0FC0E0914C04F0914D043097BE +:1059E00049F082E0809324030480F581E02D84E275 +:1059F00093E0099510922603109227031092280332 +:105A00001092290386E0E4E2F3E0AEE1B3E0019016 +:105A10000D928A95E1F70E94461B90934103809373 +:105A200040030E94BF0E90914303891731F00E94FA +:105A3000BF0E809343030E94561680916604843003 +:105A400009F05ECB83E08093E9008091E80082FF5B +:105A500057CB8091E80090E085FF05C00E94F406D6 +:105A6000882399F091E08091E8008B778093E8009B +:105A7000992309F445CBE981E150E33108F076C080 +:105A8000F0E0ED54FB4C0C94F53200E210E0CE0156 +:105A900001967C018091E80085FD0AC08091E800B4 +:105AA0008B778093E8000E94F406882399F3DACF7D +:105AB0008091F100D7018D937D010150110951F7BB +:105AC000D1CF1A8289E08B8311C08A81823009F498 +:105AD0008FC1833091F1813009F048C00E94620883 +:105AE0000E94FB326B837C838D839E83809166044E +:105AF000843009F005CB1091E9001F709091EC0003 +:105B0000892F817090FD80E8182B82E08093E90056 +:105B10008091E80080FF0DC050E040E060E270E05E +:105B2000CE0101960E9425078091E8008E77809330 +:105B3000E8001F701093E900E3CADE011396EFE45A +:105B4000F3E081918D9323E0E935F207D1F7CECFD1 +:105B50008A81823059F46B817C818D819E810E9483 +:105B6000FB3286E290E00E943533C0CF8FEF89830D +:105B7000BDCF4C816B818A810E9430149827892780 +:105B800098279E838D83B2CFED80FE80FE24EF2484 +:105B9000FE248A810B813EE0039F800111249CE852 +:105BA000899F000D111D11248C8190E0880F991F91 +:105BB000080F191F6F2DC80187960E9435336E2D6F +:105BC000C8018896D0CF0E94B41390CF8A818138C3 +:105BD000C1F060F4803809F089CF20E04B816091FA +:105BE0007304809172040E94F01480CF8238E9F02F +:105BF000833809F07BCF20E0409174046C818B8165 +:105C0000F2CF60E08B810E9407168B81811103C067 +:105C10000E94E20F6BCF80917104816080937104C8 +:105C200060E086950E94071661CF8B818093750492 +:105C30005DCF8A81813899F030F4803809F056CFF1 +:105C40008091740440CF823891F0833809F04ECFB0 +:105C5000809172048B83809173048C8347CF8091F1 +:105C6000710480FF02C086952ECF80E02CCF8091FA +:105C7000750429CF6091710470917204809173044E +:105C8000909174040E94DE1431CF80E18A832ECF7C +:105C900081E08A838DE117CFCA80DB80DC24CD24AC +:105CA000DC248E010F5F1F4FEC80E00EF12EF11C03 +:105CB000C6018D519D4F0E151F0509F417CFADE19B +:105CC000CA16A1E0DA0650F40E942133F801848359 +:105CD000BFEFCB1ADB0A0F5F1F4FEACFD801149634 +:105CE0001C92F6CF0A811B81102701271027FE0185 +:105CF00031966F01EC80E00EF12EF11CC8018D5140 +:105D00009D4FE016F10609F4F1CE0D31F1E01F07C9 +:105D100028F4D60114966C910E943533BFEFCB1A4C +:105D2000DB0A0F5F1F4FEACF0E94A413DFCE85E08E +:105D3000ADCFCA80DB80DC24CD24DC248E010F5F54 +:105D40001F4FEC80E00EF12EF11CC6018796E01685 +:105D5000F10609F4CBCEECEBCE16E2E0DE0658F409 +:105D60000E942133D80114968C93FFEFCF1ADF0ADB +:105D70000F5F1F4FEACFF8011482F7CF0A811B8112 +:105D80001027012710279E012F5F3F4F6901EC80EC +:105D9000E00EF12EF11CC8018796E016F10609F419 +:105DA000A5CE0C3B32E0130728F4D60114966C9173 +:105DB0000E943533BFEFCB1ADB0A0F5F1F4FEBCFCB +:105DC00009BD19BD09B400FEFDCF8091D8008F7DBB +:105DD0008093D8008091E00082608093E000809101 +:105DE000E00081FDFCCF109259040E94F70F7DCB9B +:105DF00086E290E00E9421331B821C821D828E83EA +:105E000075CE1092B9008CE08093B80008959F92EF +:105E1000AF92BF92CF92DF92EF92FF920F931F93B8 +:105E2000CF93DF93B82EEB010E94461B6C01EE244A +:105E3000E394F12CC431D10560F025E0E22EF12C81 +:105E4000CF3FDC0731F0CE0164E170E00E94C13247 +:105E50007B0184EAA82E94E8992E1092BC00A092AF +:105E6000BC000E94461B8C018091BC0087FF0DC0C6 +:105E70008091B900887F883039F18091B900887F9E +:105E8000803111F10FEF1FEF09C00E94461B801BEC +:105E9000910B8E159F0540F30EEF1FEFCF3FDC07F0 +:105EA000E1F2C6010E94371B8C179D07B0F2C801B2 +:105EB000DF91CF911F910F91FF90EF90DF90CF90E6 +:105EC000BF90AF909F900895B092BB009092BC009D +:105ED0000E94461B8C018091BC0087FF0AC0809104 +:105EE000B900887F883111F0803461F610E000E05D +:105EF000DECF0E94461B801B910B8E159F0558F329 +:105F0000CBCF0F931F93CF93DF93EB018093BB0015 +:105F100084E88093BC000E94461B8C018091BC00E9 +:105F200087FF11C02091B900287F81E090E02832DE +:105F300011F490E080E0919581959109DF91CF91E6 +:105F40001F910F910895CF3FDC0741F30E94461B3C +:105F5000801B910B8C179D0708F38EEF9FEFEECF00 +:105F60000F931F93CF93DF93EC0184EC8093BC00DD +:105F70000E94461B8C018091BC0087FF08C0809165 +:105F8000BB0090E0DF91CF911F910F910895CF3F1B +:105F9000DC0789F30E94461B801B910B8C179D0721 +:105FA00050F38EEF9FEFEECF0F931F93CF93DF93BE +:105FB000EC0184E88093BC000E94461B8C01809118 +:105FC000BC0087FF08C08091BB0090E0DF91CF91BB +:105FD0001F910F910895CF3FDC0789F30E94461B64 +:105FE000801B910B8C179D0750F38EEF9FEFEECF28 +:105FF000CF92DF92EF92FF920F931F93CF93DF9395 +:106000006B018A017901B9010E94072FE6010C0D8D +:106010001D1DC017D10761F424E92093BC00DF9156 +:10602000CF911F910F91FF90EF90DF90CF90089547 +:1060300097FDF2CFB70189910E94812FEACFCF92CD +:10604000DF92EF92FF920F931F93CF93DF93C62FB0 +:106050006A017901B8010E94072F97FD0CC0B801B1 +:106060008C2F0E94812FE601EC0CFD1CCE15DF0564 +:1060700011F097FF0CC024E92093BC00DF91CF9171 +:106080001F910F91FF90EF90DF90CF900895B8018E +:1060900089910E94812FEACFCF92DF92EF92FF92F7 +:1060A0000F931F93CF93DF93F82EE62EEA01690139 +:1060B000B8010E94072F97FD15C0B8018E2D0E94D0 +:1060C000812F97FD0FC0B8018F2D81600E94072F8F +:1060D000F12CE12C21E0C21AD108EC14FD0400F5EA +:1060E00097FF11C024E92093BC001816190614F478 +:1060F00090E080E0DF91CF911F910F91FF90EF90A2 +:10610000DF90CF900895C8010E94B02F97FD04C082 +:10611000FE01EE0DFF1D80832FEFE21AF20ADDCFA4 +:1061200097FDE0CFC8010E94D42F97FDDBCFCC0DA7 +:10613000DD1D8883D7CF84E98093BC0008958EE16C +:106140004A9B02C08150E1F74A9BFECF08955A98BE +:1061500080E28A95F1F75A9A0895FC013BE03A955E +:10616000F1F798E020E080E031E040E14A95F1F776 +:10617000880F4A9B02C08160232742E04A95F1F7CD +:10618000000040E14A95F1F7915079F790E19A9536 +:10619000F1F799B132E03A95F1F7000040E14A9504 +:1061A000F1F792FB992790F992272081920F908323 +:1061B0000895EF92FF920F931F93CF93DF930F9267 +:1061C000CDB7DEB719828C017C01E60EF11C0E15ED +:1061D0001F0561F481E09981911180E00F90DF91BA +:1061E000CF911F910F91FF90EF9008950E949F30E3 +:1061F000CE0101960E94AD30F80181938F01E7CF67 +:10620000529A5A9A089552985A9AEA9AE9E6F0E010 +:1062100080818F7C808308956150770B91E001C06D +:10622000990F6A95EAF720E031E0911108C0222326 +:1062300091F05A9A80E28A95F1F75A980895492F79 +:10624000482339F05A9A232740E24A95F1F7969568 +:10625000ECCF5A98F9CF5A98EDCFFF920F931F9336 +:10626000CF93DF93EC018C01060F111DC017D107EE +:1062700031F4DF91CF911F910F91FF900895F99024 +:106280000E94A73068E08F2D0E940C31EFCF1F9243 +:106290000F920FB60F921124EF92FF920F931F935C +:1062A0002F933F934F935F936F937F938F939F931E +:1062B000AF93BF93EF93FF93CF93DF930F92CDB73D +:1062C000DEB719820E949F30CE0101960E94AD3048 +:1062D000A82FA695A695A695282F229525709A2FCA +:1062E0009570290F922F937026952695920F9827D7 +:1062F00097708981982B09F075C0A83008F072C09A +:1063000080E18A95F1F75A9A529AB2E0BA95F1F77C +:1063100000C05A98EA2EF12CEAE0AE9FD001112479 +:10632000AF5FBE4F1896ED91FC9119973097B1F081 +:106330006091F8017091F90116962D913C91179793 +:10634000260F371F13968D919C911497680F791F14 +:1063500015964C91159712968C9109958AE08E9D11 +:10636000F0018F9DF00D1124EF5FFE4F65816623D4 +:1063700051F02091F8013091F90186819781820FC7 +:10638000931F0E942D310E94A730F0E1FA95F1F79A +:106390005A9852985A9A80E18A95F1F78AE08E9D30 +:1063A00080018F9D100D11240F5F1E4FD801129692 +:1063B0006C911297662371F12091F8013091F901E7 +:1063C00013968D919C91820F931F0E94D930D80112 +:1063D000ED91FC91882311F088E001C082E0808378 +:1063E0000E949F300F90DF91CF91FF91EF91BF916D +:1063F000AF919F918F917F916F915F914F913F915D +:106400002F911F910F91FF90EF900F900FBE0F9063 +:106410001F901895ED91FC91DFCF0F931F93CF93B1 +:10642000DF93EC0108970CF0A9C08AE08C9FF00183 +:106430008D9FF00D1124EF5FFE4F80819181892B9C +:1064400009F49CC0F894529A5A9885E08A95F1F71D +:1064500000008C2F869585709C2F9570890F982F42 +:10646000937086958695890F8E0193E0000F111F1A +:106470009A95E1F7082B0E94A73000C068E0802FB2 +:106480000E940C31A0E1AA95F1F752985A9A4A9BC2 +:1064900027C087E090E04A9925C08AE08C9F800160 +:1064A0008D9F100D11240F5F1E4FF801658166232B +:1064B000A1F12091F8013091F90186819781820F35 +:1064C000931F0E94D930811128C0529A5A9AD8013C +:1064D000ED91FC9182E08083789482E090E016C098 +:1064E00000C0D5CF0197B9F4529A5A9A8AE08C9F8E +:1064F000F0018D9FF00D1124EF5FFE4F0190F081B0 +:10650000E02D81E08083789481E090E0DF91CF916D +:106510001F910F91089500C0BECF0E949F30B0E23E +:10652000BA95F1F75A98529AE0E1EA95F1F78AE0C4 +:106530008C9FF0018D9FF00D1124EF5FFE4F628163 +:10654000662351F02091F8013091F9018381948103 +:10655000820F931F0E942D310E94A7308AE08C9FEA +:10656000F0018D9FF00D1124EF5FFE4F0190F0813F +:10657000E02D1082789490E080E0C8CF84E090E035 +:10658000C5CFAA1BBB1B51E107C0AA1FBB1FA61783 +:10659000B70710F0A61BB70B881F991F5A95A9F7CC +:1065A00080959095BC01CD010895991B79E004C0B8 +:1065B000991F961708F0961B881F7A95C9F7809542 +:1065C000089597FB072E16F4009407D077FD09D0A5 +:1065D0000E94C13207FC05D03EF4909581959F4FF3 +:1065E0000895709561957F4F0895EE0FFF1F0590F8 +:1065F000F491E02D09946927962769277827872742 +:1066000078270895FB01DC0102C005900D924150EE +:106610005040D8F70895FB01DC0104C08D91019032 +:10662000801921F441505040C8F7881B990B0895F8 +:10663000FB01DC0102C001900D9241505040D8F79F +:106640000895F999FECF92BD81BDF89A992780B53A +:106650000895A6E1B0E044E050E00C945B33A8E17B +:10666000B0E042E050E00C945B33262FF999FECF66 +:1066700092BD81BDF89A019700B4021639F01FBA95 +:1066800020BD0FB6F894FA9AF99A0FBE08950396B2 +:10669000272F0E9436330E943533252F0E94363330 +:1066A000242F0C9436330196272F0E9436330C94F6 +:1066B0003533DC01CB01FC01F999FECF06C0F2BDF8 +:1066C000E1BDF89A319600B40D9241505040B8F7B0 +:1066D00008950E94AB3308F481E00895E89409C05E +:1066E00097FB3EF490958095709561957F4F8F4F05 +:1066F0009F4F9923A9F0F92F96E9BB279395F6951B +:10670000879577956795B795F111F8CFFAF4BB0F98 +:1067100011F460FF1BC06F5F7F4F8F4F9F4F16C0FC +:10672000882311F096E911C0772321F09EE8872F86 +:10673000762F05C0662371F096E8862F70E060E042 +:106740002AF09A95660F771F881FDAF7880F9695BB +:10675000879597F90895990F0008550FAA0BE0E85F +:10676000FEEF16161706E807F907C0F01216130613 +:10677000E407F50798F0621B730B840B950B39F453 +:106780000A2661F0232B242B252B21F408950A26B9 +:1067900009F4A140A6958FEF811D811D08950E94E7 +:1067A000E2330C9453340E94453438F00E944C3448 +:1067B00020F0952311F00C943C340C9442341124B5 +:1067C0000C9487340E94643470F3959FC1F3950F45 +:1067D00050E0551F629FF001729FBB27F00DB11D65 +:1067E000639FAA27F00DB11DAA1F649F6627B00DF5 +:1067F000A11D661F829F2227B00DA11D621F739FDE +:10680000B00DA11D621F839FA00D611D221F749FEB +:106810003327A00D611D231F849F600D211D822F32 +:10682000762F6A2F11249F5750409AF0F1F0882359 +:106830004AF0EE0FFF1FBB1F661F771F881F915086 +:106840005040A9F79E3F510580F00C943C340C94C5 +:1068500087345F3FE4F3983ED4F386957795679548 +:10686000B795F795E7959F5FC1F7FE2B880F911DB0 +:106870009695879597F9089597F99F6780E870E056 +:1068800060E008959FEF80EC089500240A941616A6 +:10689000170618060906089500240A94121613060E +:1068A000140605060895092E0394000C11F488239C +:1068B00052F0BB0F40F4BF2B11F460FF04C06F5FB8 +:1068C0007F4F8F4F9F4F089557FD9058440F551F8E +:1068D00059F05F3F71F04795880F97FB991F61F062 +:1068E0009F3F79F087950895121613061406551FD9 +:1068F000F2CF4695F1DF08C0161617061806991F45 +:10690000F1CF86957105610508940895E894BB2739 +:1069100066277727CB0197F90895F894FFCFE71002 +:106920000F1162110F11621142117A116211771267 +:106930008412B014B014B914B914BB14B914B91436 +:10694000B914B014B014C014B914B914C014131F7E +:10695000131F6C1F6C1F9E1F461F461F461FB81F2C +:10696000292039203920612D652DA82DB92DC42D60 +:10697000E32DE62D192E3A2EB62DB62D452E482E96 +:0C6980004C2E722E942E972E992EBE2EB7 +:10698C000138020000000100000000380200000085 +:10699C00050100000038020000000106000000386C +:1069AC00020000000107000000380204080000008B +:1069BC000000003802090C00000000000038020141 +:1069CC001500000000000036323331F7F667669789 +:1069DC00C6343500000000000180005F082B0E0A51 +:1069EC000E060E020EF4F5010021007F22000300BA +:1069FC004A004A4A01F6F731333236674C41594561 +:106A0C00520042617365200047616D652000526140 +:106A1C00697365004C6F776572004C4F434B0043B4 +:106A2C00617073004E756D005363726C00202020F2 +:106A3C00202000534F4C415200544D505354008170 +:106A4C008283E200E900EA00B500B600B700CD0091 +:106A5C008301CC008A0192019401210223022402B9 +:106A6C002502260227022A02B300B4006F00700030 +:106A7C000603060806010606AF0200FF010001002E +:106A8C0000FFFF0000010001FF00000810181810A3 +:106A9C00080000010202020202020202020240226B +:0E6AAC007B99017701FC00000C190C390C00DD :00000001FF From 414b4b58a2277e7bd8d13ce1e1ac0df77315466b Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 7 Nov 2021 00:50:22 -0400 Subject: [PATCH 051/155] Fix files. --- keyboards/solartempest/ps17/config.h | 145 ----- keyboards/solartempest/ps17/info.json | 38 -- .../ps17/keymaps/default/keymap.c | 365 ------------- .../solartempest/ps17/keymaps/via/config.h | 22 - .../solartempest/ps17/keymaps/via/keymap.c | 507 ------------------ .../solartempest/ps17/keymaps/via/rules.mk | 1 - .../ps17/keymaps/via_bright/config.h | 22 - .../ps17/keymaps/via_bright/keymap.c | 332 ------------ .../ps17/keymaps/via_bright/rules.mk | 1 - .../solartempest/ps17/ps17 VIA keymap.json | 51 -- .../solartempest/ps17/ps17 VIA layout.json | 267 --------- keyboards/solartempest/ps17/ps17.c | 68 --- keyboards/solartempest/ps17/ps17.h | 61 --- keyboards/solartempest/ps17/readme.md | 39 -- keyboards/solartempest/ps17/rules.mk | 25 - 15 files changed, 1944 deletions(-) delete mode 100644 keyboards/solartempest/ps17/config.h delete mode 100644 keyboards/solartempest/ps17/info.json delete mode 100644 keyboards/solartempest/ps17/keymaps/default/keymap.c delete mode 100644 keyboards/solartempest/ps17/keymaps/via/config.h delete mode 100644 keyboards/solartempest/ps17/keymaps/via/keymap.c delete mode 100644 keyboards/solartempest/ps17/keymaps/via/rules.mk delete mode 100644 keyboards/solartempest/ps17/keymaps/via_bright/config.h delete mode 100644 keyboards/solartempest/ps17/keymaps/via_bright/keymap.c delete mode 100644 keyboards/solartempest/ps17/keymaps/via_bright/rules.mk delete mode 100644 keyboards/solartempest/ps17/ps17 VIA keymap.json delete mode 100644 keyboards/solartempest/ps17/ps17 VIA layout.json delete mode 100644 keyboards/solartempest/ps17/ps17.c delete mode 100644 keyboards/solartempest/ps17/ps17.h delete mode 100644 keyboards/solartempest/ps17/readme.md delete mode 100644 keyboards/solartempest/ps17/rules.mk diff --git a/keyboards/solartempest/ps17/config.h b/keyboards/solartempest/ps17/config.h deleted file mode 100644 index a22d17fcb719..000000000000 --- a/keyboards/solartempest/ps17/config.h +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once -#include "config_common.h" - -// USB Device descriptor parameter -#define VENDOR_ID 0x414B // "AK" -#define PRODUCT_ID 0x0015 -#define DEVICE_VER 0x0002 // Ver2 -#define MANUFACTURER ATLANTIS -#define PRODUCT PS17 - -//#define ENCODER_RESOLUTION 2 // default is 4 - -// key matrix size -#ifdef RGBLIGHT_ENABLE - #define MATRIX_ROWS 6 -#endif -#ifdef RGB_MATRIX_ENABLE - #define MATRIX_ROWS 11 //Numpad actually has 6 rows. 5 rows were added for underglow RGB matrix to work together -#endif -#define MATRIX_COLS 4 - -// Encoder matrix -#define ENCODERS_PAD_A { D1 } -#define ENCODERS_PAD_B { D2 } -//#define ENCODER_DIRECTION_FLIP - -#define MATRIX_ROW_PINS { F0, B4, B5, B6, C6, C7 } //Rotary encoder SPST is on F0,F7 -#define MATRIX_COL_PINS { F6, F7, D3, D6 } -#define UNUSED_PINS - -// COL2ROW or ROW2COL -#define DIODE_DIRECTION COL2ROW - -// For LED status indicators -#define LED_NUM_LOCK_PIN D0 -#define LED_CAPS_LOCK_PIN D5 -#define LED_SCROLL_LOCK_PIN D4 -#define LED_PIN_ON_STATE 0 - -#define RGB_DI_PIN B7 -#ifdef RGBLIGHT_ENABLE - #define RGBLED_NUM 28 // 17 key + 11 underglow for RGBLIGHT - #define RGBLIGHT_HUE_STEP 8 - #define RGBLIGHT_SAT_STEP 8 - #define RGBLIGHT_VAL_STEP 8 - #define RGBLIGHT_DEFAULT_VAL 40 // default brightness on clearing EEPROM - #define RGBLIGHT_LIMIT_VAL 180 // brightness level max is 255 - #define RGBLIGHT_LAYERS - #define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF - #define RGBLIGHT_SLEEP // if defined, RGB lighting off when host is sleeping - #define RGBLIGHT_ANIMATIONS - - //RGB LED Conversion macro from physical array to electric array - //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping - #define LED_LAYOUT( \ - L00, L05, \ - L10, L15, \ - L20, L21, L22, L23, L24, L25, \ - L31, L32, L33, L34, \ - L40, L41, L42, L43, L45, \ - L51, L52, L53, L54, \ - L60, L61, L62, L63, L65 ) \ - { \ - L21,L22,L23,L24,L31,L32,L33,L34,L41,L42,L43,L51,L52,L53,L54,L61,L63,L60,L40,L20,L10,L00,L05,L15,L25,L45,L65,L62, \ - } - //RGB LED logical order map - //Right->Left, Top->Bottom - #define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 1, 0, \ - 3, 2, \ - 9, 8, 7, 6, 5, 4, \ - 13, 12, 11, 10, \ - 18, 17, 16, 15, 14, \ - 22, 21, 20, 19, \ - 27, 26, 25, 24, 23 ) -#endif - -#ifdef RGB_MATRIX_ENABLE // For dynamic RGB Matrix effects - #define DRIVER_LED_TOTAL 28 // The number of LEDs connected for matrix, 17 key + 11 underglow - #define RGB_MATRIX_CENTER { 126, 126 }; - #define RGB_MATRIX_KEYPRESSES - #define DISABLE_RGB_MATRIX_ALPHAS_MODS //Remove effects not desired - #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN - #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT - #define DISABLE_RGB_MATRIX_BAND_SAT - #define DISABLE_RGB_MATRIX_BAND_VAL - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL - #define DISABLE_RGB_MATRIX_CYCLE_ALL - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL - #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON - #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL - #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL - #define DISABLE_RGB_MATRIX_DUAL_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS - #define DISABLE_RGB_MATRIX_RAINDROPS - #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS - #define DISABLE_RGB_MATRIX_HUE_BREATHING - #define DISABLE_RGB_MATRIX_HUE_PENDULUM - #define DISABLE_RGB_MATRIX_HUE_WAVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS - #define DISABLE_RGB_MATRIX_SPLASH - #define DISABLE_RGB_MATRIX_MULTISPLASH - #define DISABLE_RGB_MATRIX_SOLID_SPLASH - #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH -#endif - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -#define COMBO_COUNT 6 //Number of tap combos used -#define COMBO_TERM 350 //Default combo time is 200ms - -#define TAPPING_TERM 200 //Tap dance time diff --git a/keyboards/solartempest/ps17/info.json b/keyboards/solartempest/ps17/info.json deleted file mode 100644 index 2806bc0128d6..000000000000 --- a/keyboards/solartempest/ps17/info.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "keyboard_name": "Atlantis PS17 Macropad", - "url": "", - "maintainer": "solartempest", - "width": 4, - "height": 6, - "layouts": { - "LAYOUT": { - "layout": [ - {"x":0, "y":0, "h":1.5}, - {"x":0, "y":1}, - {"x":0, "y":2, "h":1.5}, - - {"x":1, "y":0}, - {"x":1, "y":1}, - {"x":1, "y":2}, - {"x":1, "y":3}, - - {"x":2, "y":0}, - {"x":2, "y":1}, - {"x":2, "y":2}, - {"x":2, "y":3, "h":2}, - - {"x":3, "y":0}, - {"x":3, "y":1}, - {"x":3, "y":2}, - - {"x":4, "y":0}, - {"x":4, "y":1}, - {"x":4, "y":2}, - {"x":4, "y":3, "h":2}, - - {"x":5, "y":0, "w":2}, - {"x":5, "y":2}, - ] - } - } -} diff --git a/keyboards/solartempest/ps17/keymaps/default/keymap.c b/keyboards/solartempest/ps17/keymaps/default/keymap.c deleted file mode 100644 index 3dc48708a4ef..000000000000 --- a/keyboards/solartempest/ps17/keymaps/default/keymap.c +++ /dev/null @@ -1,365 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include QMK_KEYBOARD_H -#include "PS17.h" -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. Don't forget to update the VIA json as well. - ATABF = USER00, //Alt tab forwards - ATABR //Alt tab reverse - }; -#else - enum custom_keycodes { //Use SAFE_RANGE when Via is disabled. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR //Alt tab reverse - }; -#endif - - -enum combos { //Tap combos - kppls_7, - kppls_8 -}; - -const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; -const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; - -combo_t key_combos[COMBO_COUNT] = { - [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), - [kppls_8] = COMBO(kppl8_combo, KC_DELETE) -}; - - -// Tap Dance declarations -enum { - TD_MINUS_NUMLOCK, -}; - -// Tap Dance definitions -qk_tap_dance_action_t tap_dance_actions[] = { - // Tap once for Escape, twice for Caps Lock - [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), -}; - -//TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode - - -enum layer_names { - _LAYER0, - _LAYER1, - _LAYER2, - _LAYER3, - _LAYER4, - _LAYER5, - _LAYER6, - _LAYER7, - _LAYER8, - _LAYER9 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAYER0] = LAYOUT( - KC_PGUP, KC__MUTE, KC_PGDOWN, - MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, TD(TD_MINUS_NUMLOCK), - KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, - KC_KP_4, KC_KP_5, KC_KP_6, - KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, - KC_KP_0, KC_KP_DOT - ), - [_LAYER1] = LAYOUT( - KC_LEFT, KC_TRNS, KC_RIGHT, - KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, - TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, RESET, - RESET, KC_TRNS - ), - [_LAYER2] = LAYOUT( - KC_TRNS, KC_TRNS, KC_TRNS, - TO(0), KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO - ), - [_LAYER3] = LAYOUT( - ATABR, KC_TRNS, ATABF, - TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), - C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, - KC_PGDOWN, KC_PGUP - ), - [_LAYER4] = LAYOUT( - ATABR, KC_TRNS, ATABF, - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_RIGHT, - C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_SCROLLLOCK, - KC_F13, KC_F14 - ), - [_LAYER5] = LAYOUT( - 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 - ), - [_LAYER6] = LAYOUT( - 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 - ), - [_LAYER7] = LAYOUT( - 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 - ), - [_LAYER8] = LAYOUT( - 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 - ), - [_LAYER9] = LAYOUT( - 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 - ) -}; - - -void matrix_init_user(void) { //run when matrix is initiated, before all features init -}; - -void matrix_scan_user(void) { //run whenever user matrix is scanned - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { //Actions to override existing key behaviours - switch (keycode) { //For super alt tab keycodes - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - break; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - break; - } - return true; -}; - - -void keyboard_post_init_user(void) { //run as last task in keyboard init - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(58, 255, 80); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_enable(); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9. Looks great this way! - rgblight_sethsv(58, 255, 30); //Set lower default brightness when connected as the right side dimming is not yet in effect - #endif -}; - - -#ifdef RGBLIGHT_ENABLE -layer_state_t layer_state_set_user(layer_state_t state) { - switch (get_highest_layer(state)) { - //This custom layer lighting is similar to RGB Light Gradient 9, but customized to separate key and case underglow brightness - static uint16_t underglow_brightness = 140; - static uint16_t perkey_brightness = 80; - static uint16_t lastrow_brightness = 15; //for less shine-through at case edges - static uint16_t current_hue = 0; //hue calculated to be used - static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue - static uint16_t layer0_hueincrement = 2; //hue gradient colour increment - static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green - static uint16_t layer1_hueincrement = 2; //hue gradient colour increment - static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) - static uint16_t layer2_hueincrement = 2; //hue gradient colour increment - static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple - static uint16_t layer3_hueincrement = 2; //hue gradient colour increment - static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red - static uint16_t layer4_hueincrement = 1; //hue gradient colour increment - - /*#define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 1, 0, \ - 3, 2, \ - 9, 8, 7, 6, 5, 4, \ - 13, 12, 11, 10, \ - 18, 17, 16, 15, 14,\ - 22, 21, 20, 19, \ - 27, 26, 25, 24, 23 )*/ - - case _LAYER0: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER1: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER2: //Photoshop custom layer (macros and keys all done in VIA) - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3) { //Underglow LEDs - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } - else if (i == 6) {rgblight_sethsv_at(148,255,perkey_brightness+15,i);} //Text - light blue - else if (i == 5) {rgblight_sethsv_at(140,255,perkey_brightness+15,i);} //New Layer - light blue - else if (i == 15) {rgblight_sethsv_at(195,255,perkey_brightness+15,i);} //Marquee - rose - else if (i == 9) {rgblight_sethsv_at(190,255,underglow_brightness,i);} //Underglow to match - else if (i == 13) {rgblight_sethsv_at(180,255,perkey_brightness+15,i);} //Healing Brush - purple - else if (i == 12) {rgblight_sethsv_at(185,255,perkey_brightness+15,i);} //Clone - else if (i == 11) {rgblight_sethsv_at(190,255,perkey_brightness+15,i);} //Default - else if (i == 7) {rgblight_sethsv_at(195,255,perkey_brightness+15,i);} //Brush - else if (i == 18) {rgblight_sethsv_at(230,255,underglow_brightness,i);} //Underglow to match - else if (i == 17) {rgblight_sethsv_at(0,255,perkey_brightness+15,i);} //copy - red - else if (i == 16) {rgblight_sethsv_at(3,255,perkey_brightness+15,i);} //Paste - else if (i == 22) {rgblight_sethsv_at(5,255,perkey_brightness+15,i);} //Undo - else if (i == 21) {rgblight_sethsv_at(0,255,perkey_brightness+15,i);} //Redo - else if (i == 26) {rgblight_sethsv_at(200,255,lastrow_brightness+15,i);} //Space - blue - else if (i == 24) {rgblight_sethsv_at(195,255,lastrow_brightness+15,i);} //Alt - else if (i == 20) {rgblight_sethsv_at(190,255,lastrow_brightness+15,i);} //Shift - else if (i == 27) {rgblight_sethsv_at(200,255,underglow_brightness,i);} //Underglow to match - else if (i == 10) {rgblight_sethsv_at(current_hue,255,lastrow_brightness,i);} //Zoom in - else if (i == 19) {rgblight_sethsv_at(current_hue,255,lastrow_brightness,i);} //Zoom out - else if (i == 25) {rgblight_sethsv_at(180,255,underglow_brightness,i);} //Underglow to match - else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code is for normal gradient colouration - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case _LAYER3: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER4: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - } - return state; - }; -#endif diff --git a/keyboards/solartempest/ps17/keymaps/via/config.h b/keyboards/solartempest/ps17/keymaps/via/config.h deleted file mode 100644 index 4bbacd9a507b..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once - -// Set 10 layers for VIA -#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/ps17/keymaps/via/keymap.c b/keyboards/solartempest/ps17/keymaps/via/keymap.c deleted file mode 100644 index b75dc6fc7272..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via/keymap.c +++ /dev/null @@ -1,507 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include QMK_KEYBOARD_H -#include "PS17.h" -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - - -// IDLE TIMEOUTS -#ifdef IDLE_TIMEOUT_ENABLE - #define TIMEOUT_THRESHOLD_DEFAULT 5 // default timeout minutes - #define TIMEOUT_THRESHOLD_MAX 140 // upper limits (2 hours and 10 minutes -- no rgb indicators above this value) - - //prototype functions - uint16_t get_timeout_threshold(void); - void timeout_reset_timer(void); - void timeout_update_threshold(bool increase); - void timeout_tick_timer(void); -#endif //IDLE_TIMEOUT_ENABLE - - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -bool spam_arrow; -uint16_t spam_timer = false; -uint16_t spam_interval = 1000; // (1000ms == 1s) -bool teams_muted; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = USER00, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. - TEAMSMUTE //MS Teams mute shortcut and simple LED status - }; -#else - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. - TEAMSMUTE //MS Teams mute shortcut and simple LED status - }; -#endif - -#ifdef COMBO_ENABLE //Tap combos - enum combos { - kppls_7, //Hold plus and 7 to backspace - kppls_8, //Hold plus and 8 to delete - kpent_4, //Hold enter and 4 for left arrow - kpent_5, //Hold enter and 5 for down arrow - kpent_6, //Hold enter and 6 for right arrow - kpent_8, //Hold enter and 4'8 for up arrow - }; - const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; - const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; - const uint16_t PROGMEM kpent4_combo[] = {KC_PENT, KC_KP_4, COMBO_END}; - const uint16_t PROGMEM kpent5_combo[] = {KC_PENT, KC_KP_5, COMBO_END}; - const uint16_t PROGMEM kpent6_combo[] = {KC_PENT, KC_KP_6, COMBO_END}; - const uint16_t PROGMEM kpent8_combo[] = {KC_PENT, KC_KP_8, COMBO_END}; - combo_t key_combos[COMBO_COUNT] = { - [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), - [kppls_8] = COMBO(kppl8_combo, KC_DELETE), - [kpent_4] = COMBO(kpent4_combo, KC_LEFT), - [kpent_5] = COMBO(kpent5_combo, KC_DOWN), - [kpent_6] = COMBO(kpent6_combo, KC_RGHT), - [kpent_8] = COMBO(kpent8_combo, KC_UP) - }; -#endif - -#ifdef TAP_DANCE_ENABLE// Tap Dance definitions. Not VIA compatible. - enum { - TD_MINUS_NUMLOCK, - }; - qk_tap_dance_action_t tap_dance_actions[] = { - // Tap once for Escape, twice for Caps Lock - [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), - }; - //TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode (non-VIA only) -#endif - - -enum layer_names { - _LAYER0, - _LAYER1, - _LAYER2, - _LAYER3, - _LAYER4, - _LAYER5, - _LAYER6, - _LAYER7, - _LAYER8, - _LAYER9 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAYER0] = LAYOUT( - KC_PGDOWN, KC__MUTE, KC_PGUP, - MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, - KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, - KC_KP_4, KC_KP_5, KC_KP_6, - KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, - KC_KP_0, KC_KP_DOT - ), - [_LAYER1] = LAYOUT( - KC_RIGHT, KC_TRNS, KC_LEFT, - KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, - TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, RESET, - RESET, KC_TRNS - ), - [_LAYER2] = LAYOUT( - KC_RBRACKET, KC_TRNS, KC_LBRACKET, - TO(0), KC_B, KC_T, C(S(KC_N)), - KC_J, KC_S, KC_D, C(KC_MINS), - C(KC_C), C(KC_V), KC_M, - C(KC_N), C(S(KC_Z)), KC_LSHIFT, C(KC_PPLS), - KC_SPACE, KC_LALT - ), - [_LAYER3] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), - C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, - KC_PGDOWN, KC_PGUP - ), - [_LAYER4] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_RIGHT, - C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_NUMLOCK, - KC_F13, KC_F14 - ), - [_LAYER5] = LAYOUT( - 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 - ), - [_LAYER6] = LAYOUT( - 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 - ), - [_LAYER7] = LAYOUT( - 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 - ), - [_LAYER8] = LAYOUT( - 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 - ), - [_LAYER9] = LAYOUT( - 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 - ) -}; - - -void matrix_init_user(void) { //run when matrix is initiated, before all features init -}; - - -// TIMEOUTS -#ifdef IDLE_TIMEOUT_ENABLE - static uint16_t timeout_timer = 0; - static uint16_t timeout_counter = 0; //in minute intervals - static uint16_t timeout_threshold = TIMEOUT_THRESHOLD_DEFAULT; - - uint16_t get_timeout_threshold(void) { - return timeout_threshold; - } - - void timeout_reset_timer(void) { - timeout_timer = timer_read(); - timeout_counter = 0; - }; - - void timeout_update_threshold(bool increase) { - if (increase && timeout_threshold < TIMEOUT_THRESHOLD_MAX) timeout_threshold++; - if (!increase && timeout_threshold > 0) timeout_threshold--; - }; - - void timeout_tick_timer(void) { - if (timeout_threshold > 0) { - if (timer_elapsed(timeout_timer) >= 60000) { // 1 minute tick - timeout_counter++; - timeout_timer = timer_read(); - } - #ifdef RGB_MATRIX_ENABLE - if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { - rgb_matrix_disable_noeeprom(); - } - #endif - #ifdef RGBLIGHT_ENABLE - if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { - rgblight_toggle_noeeprom(); - } - #endif - } // timeout_threshold = 0 will disable timeout - } - - __attribute__((weak)) void matrix_scan_keymap(void) {} -#endif // IDLE_TIMEOUT_ENABLE - - -void matrix_scan_user(void) { //run whenever user matrix is scanned - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } - if (spam_arrow && timer_elapsed(spam_timer) >= spam_interval) { - spam_timer = timer_read(); - //tap_code(KC_UP); - //tap_code(KC_DOWN); - tap_code(KC_F24); - } - - #ifdef IDLE_TIMEOUT_ENABLE - timeout_tick_timer(); - matrix_scan_keymap(); - #endif // IDLE_TIMEOUT_ENABLE -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { //For keycode overrides - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - return true; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - return true; - - case NMR: //Move window to next monitor on right - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_RIGHT); - unregister_code(KC_RIGHT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - case NML: //Move window to next monitor on left - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_LEFT); - unregister_code(KC_LEFT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - - case SPAMARROW: // Moves arrow up and down - if (record->event.pressed) { - spam_arrow ^= 1; - spam_timer = timer_read(); - if(spam_arrow==1) { //Change LED colour on bottom row and underglow to orange to indicate on - rgblight_sethsv_at(15,255,120,24); - rgblight_sethsv_at(15,255,120,25); - rgblight_sethsv_at(15,255,120,26); - rgblight_sethsv_at(15,255,120,27); - } - else { - rgblight_sethsv_at(180,255,120,24); //Set LEDs back to purple, assuming on that coloured layer - rgblight_sethsv_at(180,255,120,25); - rgblight_sethsv_at(180,255,120,26); - rgblight_sethsv_at(180,255,120,27); - } - } - return false; - - case TEAMSMUTE: //Mute MS teams and simply change LED for key 1 colour - if (record->event.pressed) { - register_code(KC_LCTRL); - register_code(KC_LSFT); - register_code(KC_M); - unregister_code(KC_M); - unregister_code(KC_LSFT); - unregister_code(KC_LCTRL); - teams_muted ^= 1; - if(teams_muted==1) { //Change LED colour on LEDs for key 1 and underglow to orange to indicate muted - rgblight_sethsv_at(15,255,120,18); - rgblight_sethsv_at(15,255,120,22); - } - else { - rgblight_sethsv_at(175,255,120,18); //Set LEDs back to violet, assuming on that coloured layer - rgblight_sethsv_at(175,255,120,22); - } - } - return true; - } - return true; -} - - -// RGB Layer Light Settings - Note that this will fix the key switch LED colour and brightness -const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Spring green (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 5,255,120}); //Yellow-orange (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); //Cyan (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); //Magenta (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 15,255,120}); //Orange-red (Code is extra for static key lighting of layers) -const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers - my_layer0_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_layer4_layer -); - - -void keyboard_post_init_user(void) { //run as last task in keyboard init - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_layers = my_rgb_layers;// Enable the LED layers - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 - layer_move(0); //start on layer 0 to get the lighting activated - #endif -}; - - -#ifdef RGBLIGHT_ENABLE -layer_state_t layer_state_set_user(layer_state_t state) { - rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active - rgblight_set_layer_state(1, layer_state_cmp(state, 1)); - rgblight_set_layer_state(2, layer_state_cmp(state, 2)); - rgblight_set_layer_state(3, layer_state_cmp(state, 3)); - rgblight_set_layer_state(4, layer_state_cmp(state, 4)); - - /*static uint16_t underglow_brightness = 140; //This code can be used to have edge and underglow LEDs selectively brighter - static uint16_t perkey_brightness = 80; - static uint16_t lastrow_brightness = 50; //for less shine-through at case edges (brighter is okay for FR4 plate) - static uint16_t current_hue = 0; //hue calculated to be used - static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue - static uint16_t layer0_hueincrement = 2; //hue gradient colour increment - static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green - static uint16_t layer1_hueincrement = 2; //hue gradient colour increment - static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) - static uint16_t layer2_hueincrement = 2; //hue gradient colour increment - static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple - static uint16_t layer3_hueincrement = 2; //hue gradient colour increment - static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red - static uint16_t layer4_hueincrement = 1; //hue gradient colour increment - */ - // This is what the LED layout is. - // 1, 0, - // 3, 2, - // 9, 8, 7, 6, 5, 4, - // 13, 12, 11, 10, - // 18, 17, 16, 15, 14, - // 22, 21, 20, 19, - // 27, 26, 25, 24, 23 - - switch(biton32(state)){ // Change all other LEDs based on layer state as well - case 0: - rgblight_sethsv_noeeprom(50,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case 1: - rgblight_sethsv_noeeprom(5,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case 2: - rgblight_sethsv_noeeprom(128,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case 3: - rgblight_sethsv_noeeprom(215,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case 4: - rgblight_sethsv_noeeprom(15,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - } - return state; - }; -#endif diff --git a/keyboards/solartempest/ps17/keymaps/via/rules.mk b/keyboards/solartempest/ps17/keymaps/via/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/config.h b/keyboards/solartempest/ps17/keymaps/via_bright/config.h deleted file mode 100644 index 4bbacd9a507b..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via_bright/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once - -// Set 10 layers for VIA -#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c b/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c deleted file mode 100644 index 6c422f8be38d..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c +++ /dev/null @@ -1,332 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include QMK_KEYBOARD_H -#include "PS17.h" -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = USER00, //Alt tab forwards - ATABR //Alt tab reverse - }; -#else - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR //Alt tab reverse - }; -#endif - - -enum combos { //Tap combos - kppls_7, - kppls_8 -}; - -const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; -const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; - -combo_t key_combos[COMBO_COUNT] = { - [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), - [kppls_8] = COMBO(kppl8_combo, KC_DELETE) -}; - - -// Tap Dance declarations -enum { - TD_MINUS_NUMLOCK, -}; - -// Tap Dance definitions. Not VIA compatible. -qk_tap_dance_action_t tap_dance_actions[] = { - // Tap once for Escape, twice for Caps Lock - [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), -}; -//TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode - - -enum layer_names { - _LAYER0, - _LAYER1, - _LAYER2, - _LAYER3, - _LAYER4, - _LAYER5, - _LAYER6, - _LAYER7, - _LAYER8, - _LAYER9 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAYER0] = LAYOUT( - KC_PGDOWN, KC__MUTE, KC_PGUP, - MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, - KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, - KC_KP_4, KC_KP_5, KC_KP_6, - KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, - KC_KP_0, KC_KP_DOT - ), - [_LAYER1] = LAYOUT( - KC_RIGHT, KC_TRNS, KC_LEFT, - KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, - TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, RESET, - RESET, KC_TRNS - ), - [_LAYER2] = LAYOUT( - KC_RBRACKET, KC_TRNS, KC_LBRACKET, - TO(0), KC_B, KC_T, C(S(KC_N)), - KC_J, KC_S, KC_D, C(KC_MINS), - C(KC_C), C(KC_V), KC_M, - C(KC_N), C(S(KC_Z)), KC_LSHIFT, C(KC_PPLS), - KC_SPACE, KC_LALT - ), - [_LAYER3] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), - C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, - KC_PGDOWN, KC_PGUP - ), - [_LAYER4] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_RIGHT, - C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_NUMLOCK, - KC_F13, KC_F14 - ), - [_LAYER5] = LAYOUT( - 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 - ), - [_LAYER6] = LAYOUT( - 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 - ), - [_LAYER7] = LAYOUT( - 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 - ), - [_LAYER8] = LAYOUT( - 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 - ), - [_LAYER9] = LAYOUT( - 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 - ) -}; - - -void matrix_init_user(void) { //run when matrix is initiated, before all features init -}; - -void matrix_scan_user(void) { //run whenever user matrix is scanned - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { //Actions to override existing key behaviours - switch (keycode) { //For super alt tab keycodes - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - break; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - break; - } - return true; -}; - - -void keyboard_post_init_user(void) { //run as last task in keyboard init - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(58, 255, 80); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_enable(); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9. Looks great this way! - rgblight_sethsv(58, 255, 100); //Set lower default brightness when connected as the right side dimming is not yet in effect - layer_move(0); //start on layer 0 to get the lighting activated - #endif -}; - - -#ifdef RGBLIGHT_ENABLE -layer_state_t layer_state_set_user(layer_state_t state) { - switch (get_highest_layer(state)) { - //This custom layer lighting is similar to RGB Light Gradient 9, but customized to separate key and case underglow brightness - static uint16_t underglow_brightness = 120; - static uint16_t perkey_brightness = 120; - static uint16_t lastrow_brightness = 30; //for less shine-through at case edges - static uint16_t current_hue = 0; //hue calculated to be used - static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue - static uint16_t layer0_hueincrement = 2; //hue gradient colour increment - static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green - static uint16_t layer1_hueincrement = 2; //hue gradient colour increment - static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) - static uint16_t layer2_hueincrement = 2; //hue gradient colour increment - static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple - static uint16_t layer3_hueincrement = 2; //hue gradient colour increment - static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red - static uint16_t layer4_hueincrement = 1; //hue gradient colour increment - - /*#define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 1, 0, \ - 3, 2, \ - 9, 8, 7, 6, 5, 4, \ - 13, 12, 11, 10, \ - 18, 17, 16, 15, 14,\ - 22, 21, 20, 19, \ - 27, 26, 25, 24, 23 )*/ - - case _LAYER0: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER1: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER2: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code is for normal gradient colouration - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER3: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER4: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - } - return state; - }; -#endif diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/rules.mk b/keyboards/solartempest/ps17/keymaps/via_bright/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via_bright/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/solartempest/ps17/ps17 VIA keymap.json b/keyboards/solartempest/ps17/ps17 VIA keymap.json deleted file mode 100644 index d906b47dbb7a..000000000000 --- a/keyboards/solartempest/ps17/ps17 VIA keymap.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "PS17" , - "vendorId": "0x414B", - "productId": "0x0015", - "lighting": "qmk_rgblight", - "matrix": { "rows": 6, "cols": 4 }, - "customKeycodes": [ - { - "name": "Super Alt Tab FWD", - "title": "Alt Tab Forwards in Windows", - "shortName": "ATABF" - }, - { - "name": "Super Alt Tab REV", - "title": "Alt Tab Reverse in Windows", - "shortName": "ATABR" - }, - { - "name": "Move Window Right", - "title": "Move Window Right in Windows", - "shortName": "MWR" - }, - { - "name": "Move Window Left", - "title": "Move Window Left in Windows", - "shortName": "MWL" - }, - { - "name": "Spam Arrow", - "title": "Toggle F24 on interval timer with Orange LED", - "shortName": "SA" - }, - { - "name": "Teams Muted", - "title": "Simply Change LED of 1 to show if muted or not", - "shortName": "TM" - } - ], - "layouts": - { - "keymap": - [ - [{"w": 1, "h":1.5},"0,0", "0,1", {"w": 1, "h":1.5},"0,2"], - [{"y":0.75}, "1,0", "1,1", "1,2", "1,3"], - [ "2,0", "2,1", "2,2", {"h":2},"2,3"], - [ "3,0","3,1","3,2"], - [ "4,0", "4,1", "4,2", {"h":2},"4,3"], - [{"w": 2},"5,0", "5,2"] - ] - } -} \ No newline at end of file diff --git a/keyboards/solartempest/ps17/ps17 VIA layout.json b/keyboards/solartempest/ps17/ps17 VIA layout.json deleted file mode 100644 index 6671cee90952..000000000000 --- a/keyboards/solartempest/ps17/ps17 VIA layout.json +++ /dev/null @@ -1,267 +0,0 @@ -{ - "name": "PS17", - "vendorProductId": 1095434261, - "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], - "layers": [ - [ - "C(KC_TAB)", - "C(KC_W)", - "C(S(KC_TAB))", - "KC_NO", - "TO(2)", - "KC_PSLS", - "KC_PAST", - "KC_PMNS", - "KC_P7", - "KC_P8", - "KC_P9", - "KC_PPLS", - "KC_P4", - "KC_P5", - "KC_P6", - "KC_NO", - "KC_P1", - "KC_P2", - "KC_P3", - "KC_PENT", - "KC_P0", - "KC_NO", - "KC_PDOT", - "KC_NO" - ], - [ - "KC_RGHT", - "KC_TRNS", - "KC_LEFT", - "KC_NO", - "TO(0)", - "KC_TRNS", - "KC_TRNS", - "KC_NLCK", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_BSPC", - "TO(5)", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "TO(2)", - "TO(3)", - "TO(4)", - "KC_TRNS", - "RESET", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_VOLU", - "KC_TRNS", - "KC_VOLD", - "KC_NO", - "TO(0)", - "KC_WWW_REFRESH", - "KC_WWW_HOME", - "C(S(KC_B))", - "C(S(KC_TAB))", - "KC_UP", - "C(KC_TAB)", - "USER04", - "KC_LEFT", - "KC_DOWN", - "KC_RGHT", - "KC_NO", - "USER05", - "KC_TRNS", - "KC_SLCK", - "KC_NLCK", - "KC_F13", - "KC_NO", - "KC_F14", - "KC_NO" - ], - [ - "USER00", - "KC_TRNS", - "USER01", - "KC_NO", - "TO(0)", - "KC_WWW_REFRESH", - "KC_HOME", - "C(KC_T)", - "C(S(KC_TAB))", - "KC_UP", - "C(KC_TAB)", - "C(KC_W)", - "KC_LEFT", - "KC_DOWN", - "KC_RGHT", - "KC_NO", - "KC_WWW_BACK", - "KC_SPC", - "KC_WWW_FORWARD", - "KC_ENT", - "KC_PGDN", - "KC_NO", - "KC_PGUP", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ] - ] -} \ No newline at end of file diff --git a/keyboards/solartempest/ps17/ps17.c b/keyboards/solartempest/ps17/ps17.c deleted file mode 100644 index 54ae3f8ab053..000000000000 --- a/keyboards/solartempest/ps17/ps17.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include "ps17.h" - -bool encoder_update_user(uint8_t index, bool clockwise) { // QMK encoder functionality - #ifdef VIA_ENABLE //Add in VIA setting of rotary encoder keymap - if (index == 0) { // First encoder - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) }); //Time is 1 tick otherwise empty event - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) }); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) }); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) }); - } - } - /*if (clockwise) { //This code only works for single keypresses with the rotary encoder - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 0)); //Allow setting of keymap in VIA - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 2)); //Allow setting of keymap in VIA - }*/ - #endif - return true; -} - -#ifdef RGB_MATRIX_ENABLE //Add in addressable LED underglow support with physical locations - led_config_t g_led_config = { { - //Key matrix to LED index - { NO_LED, NO_LED, NO_LED, NO_LED, }, - { 0, 1, 2, 3, }, - { 4, 5, 6, 7, }, - { 8, 9, 10, NO_LED, }, - { 11, 12, 13, 14, }, - { 15, NO_LED, 16, NO_LED, }, - - //Underglow matrix to LED index - { 21, NO_LED, NO_LED, 22, }, - { 20, NO_LED, NO_LED, 23, }, - { 19, NO_LED, NO_LED, 24, }, - { 18, NO_LED, NO_LED, 25, }, - { 17, 27, NO_LED, 26, } - }, { - // LED Key Index to Physical Position, calculated with Plot Digitizer and scaled PCB Image with center at {126,126} - {74,165},{108,165},{144,165},{179,165},{74,129},{109,129},{143,129},{188,121},{74,95},{109,95},{143,95},{73,60},{109,60},{144,60},{188,51},{91,25},{144,25}, - - // LED underglow - {61,26},{61,88},{61,158},{61,197},{61,232},{192,232},{192,196},{192,158},{192,87},{183,26},{127,24} - }, { - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, // LED Index to Flag. 4 for key backlight. - 2,2,2,2,2,2,2,2,2,2,2 // 2 for case underglow. - } }; -#endif diff --git a/keyboards/solartempest/ps17/ps17.h b/keyboards/solartempest/ps17/ps17.h deleted file mode 100644 index 64ebc5766887..000000000000 --- a/keyboards/solartempest/ps17/ps17.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once -#include "quantum.h" - -#ifdef RGBLIGHT_ENABLE - #define LAYOUT( \ - K00, K01, K02, \ - K10, K11, K12, K13, \ - K20, K21, K22, K23, \ - K30, K31, K32, \ - K40, K41, K42, K43, \ - K50, K52 \ - ) { \ - { K00, K01, K02, KC_NO }, \ - { K10, K11, K12, K13 }, \ - { K20, K21, K22, K23 }, \ - { K30, K31, K32, KC_NO }, \ - { K40, K41, K42, K43 }, \ - { K50, KC_NO, K52, KC_NO }, \ - } -#endif - -#ifdef RGB_MATRIX_ENABLE // Five empty rows of keys were added for RGB Matrix purposes. You must map to a key otherwise it will not work. - #define LAYOUT( \ - K00, K01, K02, \ - K10, K11, K12, K13, \ - K20, K21, K22, K23, \ - K30, K31, K32, \ - K40, K41, K42, K43, \ - K50, K52 \ - ) { \ - { K00, K01, K02, KC_NO }, \ - { K10, K11, K12, K13 }, \ - { K20, K21, K22, K23 }, \ - { K30, K31, K32, KC_NO }, \ - { K40, K41, K42, K43 }, \ - { K50, KC_NO, K52, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - } -#endif diff --git a/keyboards/solartempest/ps17/readme.md b/keyboards/solartempest/ps17/readme.md deleted file mode 100644 index bd9504222899..000000000000 --- a/keyboards/solartempest/ps17/readme.md +++ /dev/null @@ -1,39 +0,0 @@ -# Atlantis PS17 Macropad - -![Atlantis PS17](https://i.imgur.com/Y0rkPgA.jpg) - -A 17-key macro pad with pushbutton rotary encoder and underglow RGB per key RGB and for the case. - -For detailed instructions on using VIA and flashing, please refer to the sections further down the page! - -* Keyboard Maintainer: solartempest -* Hardware Supported: Atlantis PS17 v2 -* Hardware Availability: [rioo897](https://shop198276076.world.taobao.com/index.htm?spm=2013.1.w5002-23418336364.2.3f4d7d51DkVX3s) - -# Custom Features: - -- Remappable rotary encoder controls volume up/down/mute. -- Allows for remapping of per-layer rotary encoder functions in VIA. -- VIA support included by default. -- RGB underglow and matrix support and remapped to physical locations (nicer gradient and effects). -- Adds custom layer lighting with custom gradients for each. -- Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders. -- Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders. -- Adds key combo functionality for backspace, delete, and arrow keys. - -## Make and Flashing - -Make example for this keyboard (after setting up your build environment): - - qmk compile -kb solartempest/ps17 -km via - -To reset the board into bootloader mode, tap the Reset switch mounted on the bottom of the PCB. -Flash with QMK toolbox, auto-flash. - -## Using with VIA - -- After flashing, in VIA make sure to Import Keymap, which is "ps17 VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. -- Go to Save+Load to Load Saved Layout. You can import my own layout "ps17 VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. -- It is a good idea to Save Current Layout after you decide on your mapping. - -See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/solartempest/ps17/rules.mk b/keyboards/solartempest/ps17/rules.mk deleted file mode 100644 index 0b5dd1c97afa..000000000000 --- a/keyboards/solartempest/ps17/rules.mk +++ /dev/null @@ -1,25 +0,0 @@ -# MCU name -MCU = atmega32u4 - -# Bootloader selection -BOOTLOADER = atmel-dfu - -# Build Options -# change yes to no to disable -# - -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration -CONSOLE_ENABLE = no # Console for debug -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -NKRO_ENABLE = yes # USB Nkey Rollover -RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow -RGB_MATRIX_ENABLE = no # RGB matrix for individual LED control -RGB_MATRIX_DRIVER = WS2812 # Addressable LED strand driver -UNICODE_ENABLE = yes # Unicode -ENCODER_ENABLE = yes # For encoder -LTO_ENABLE = yes # Reduce firmware size -COMBO_ENABLE = yes # Combos -TAP_DANCE_ENABLE = no # Tap dance - -IDLE_TIMEOUT_ENABLE = yes # Turn LEDs off after inactive time From 6fe93751e1a766c111244db2c855575be2fbfaeb Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 7 Nov 2021 00:56:41 -0400 Subject: [PATCH 052/155] Fix files --- keyboards/solartempest/9e/9e VIA ayout.json | 507 ---------------- keyboards/solartempest/9e/9e VIA keymap.json | 39 -- keyboards/solartempest/9e/A9e.c | 64 -- keyboards/solartempest/9e/A9e.h | 35 -- keyboards/solartempest/9e/config.h | 140 ----- keyboards/solartempest/9e/info.json | 12 - .../solartempest/9e/keymaps/default/keymap.c | 208 ------- .../solartempest/9e/keymaps/via/config.h | 22 - .../solartempest/9e/keymaps/via/keymap.c | 417 ------------- .../solartempest/9e/keymaps/via/rules.mk | 1 - keyboards/solartempest/9e/readme.md | 42 -- keyboards/solartempest/9e/rules.mk | 63 -- keyboards/solartempest/ps17/config.h | 145 ----- keyboards/solartempest/ps17/info.json | 38 -- .../ps17/keymaps/default/keymap.c | 365 ------------ .../solartempest/ps17/keymaps/via/config.h | 22 - .../solartempest/ps17/keymaps/via/keymap.c | 507 ---------------- .../solartempest/ps17/keymaps/via/rules.mk | 1 - .../ps17/keymaps/via_bright/config.h | 22 - .../ps17/keymaps/via_bright/keymap.c | 332 ----------- .../ps17/keymaps/via_bright/rules.mk | 1 - .../solartempest/ps17/ps17 VIA keymap.json | 51 -- .../solartempest/ps17/ps17 VIA layout.json | 267 --------- keyboards/solartempest/ps17/ps17.c | 68 --- keyboards/solartempest/ps17/ps17.h | 61 -- keyboards/solartempest/ps17/readme.md | 39 -- keyboards/solartempest/ps17/rules.mk | 25 - keyboards/solartempest/sofle/.noci | 0 keyboards/solartempest/sofle/config.h | 119 ---- keyboards/solartempest/sofle/info.json | 12 - .../solartempest/sofle/keymaps/via/bongocat.c | 212 ------- .../solartempest/sofle/keymaps/via/config.h | 22 - .../solartempest/sofle/keymaps/via/encoder.c | 42 -- .../solartempest/sofle/keymaps/via/keymap.c | 334 ----------- .../solartempest/sofle/keymaps/via/luna.c | 309 ---------- .../sofle/keymaps/via/ocean_dream.c | 555 ------------------ .../solartempest/sofle/keymaps/via/oled.c | 82 --- .../solartempest/sofle/keymaps/via/rules.mk | 1 - .../solartempest/sofle/keymaps/via/snakey.c | 321 ---------- keyboards/solartempest/sofle/readme.md | 82 --- keyboards/solartempest/sofle/rules.mk | 25 - .../solartempest/sofle/sofle VIA keymap.json | 62 -- .../solartempest/sofle/sofle VIA layout.json | 295 ---------- keyboards/solartempest/sofle/sofle.c | 19 - keyboards/solartempest/sofle/sofle.h | 42 -- 45 files changed, 6028 deletions(-) delete mode 100644 keyboards/solartempest/9e/9e VIA ayout.json delete mode 100644 keyboards/solartempest/9e/9e VIA keymap.json delete mode 100644 keyboards/solartempest/9e/A9e.c delete mode 100644 keyboards/solartempest/9e/A9e.h delete mode 100644 keyboards/solartempest/9e/config.h delete mode 100644 keyboards/solartempest/9e/info.json delete mode 100644 keyboards/solartempest/9e/keymaps/default/keymap.c delete mode 100644 keyboards/solartempest/9e/keymaps/via/config.h delete mode 100644 keyboards/solartempest/9e/keymaps/via/keymap.c delete mode 100644 keyboards/solartempest/9e/keymaps/via/rules.mk delete mode 100644 keyboards/solartempest/9e/readme.md delete mode 100644 keyboards/solartempest/9e/rules.mk delete mode 100644 keyboards/solartempest/ps17/config.h delete mode 100644 keyboards/solartempest/ps17/info.json delete mode 100644 keyboards/solartempest/ps17/keymaps/default/keymap.c delete mode 100644 keyboards/solartempest/ps17/keymaps/via/config.h delete mode 100644 keyboards/solartempest/ps17/keymaps/via/keymap.c delete mode 100644 keyboards/solartempest/ps17/keymaps/via/rules.mk delete mode 100644 keyboards/solartempest/ps17/keymaps/via_bright/config.h delete mode 100644 keyboards/solartempest/ps17/keymaps/via_bright/keymap.c delete mode 100644 keyboards/solartempest/ps17/keymaps/via_bright/rules.mk delete mode 100644 keyboards/solartempest/ps17/ps17 VIA keymap.json delete mode 100644 keyboards/solartempest/ps17/ps17 VIA layout.json delete mode 100644 keyboards/solartempest/ps17/ps17.c delete mode 100644 keyboards/solartempest/ps17/ps17.h delete mode 100644 keyboards/solartempest/ps17/readme.md delete mode 100644 keyboards/solartempest/ps17/rules.mk delete mode 100644 keyboards/solartempest/sofle/.noci delete mode 100644 keyboards/solartempest/sofle/config.h delete mode 100644 keyboards/solartempest/sofle/info.json delete mode 100644 keyboards/solartempest/sofle/keymaps/via/bongocat.c delete mode 100644 keyboards/solartempest/sofle/keymaps/via/config.h delete mode 100644 keyboards/solartempest/sofle/keymaps/via/encoder.c delete mode 100644 keyboards/solartempest/sofle/keymaps/via/keymap.c delete mode 100644 keyboards/solartempest/sofle/keymaps/via/luna.c delete mode 100644 keyboards/solartempest/sofle/keymaps/via/ocean_dream.c delete mode 100644 keyboards/solartempest/sofle/keymaps/via/oled.c delete mode 100644 keyboards/solartempest/sofle/keymaps/via/rules.mk delete mode 100644 keyboards/solartempest/sofle/keymaps/via/snakey.c delete mode 100644 keyboards/solartempest/sofle/readme.md delete mode 100644 keyboards/solartempest/sofle/rules.mk delete mode 100644 keyboards/solartempest/sofle/sofle VIA keymap.json delete mode 100644 keyboards/solartempest/sofle/sofle VIA layout.json delete mode 100644 keyboards/solartempest/sofle/sofle.c delete mode 100644 keyboards/solartempest/sofle/sofle.h diff --git a/keyboards/solartempest/9e/9e VIA ayout.json b/keyboards/solartempest/9e/9e VIA ayout.json deleted file mode 100644 index aa58163c6e9b..000000000000 --- a/keyboards/solartempest/9e/9e VIA ayout.json +++ /dev/null @@ -1,507 +0,0 @@ -{ - "name": "A9e", - "vendorProductId": 1095434249, - "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], - "layers": [ - [ - "KC_RGHT", - "KC_MUTE", - "KC_LEFT", - "TO(1)", - "TO(2)", - "TO(3)", - "KC_P7", - "KC_P8", - "KC_P9", - "KC_WWW_BACK", - "KC_F13", - "KC_WWW_FORWARD", - "USER01", - "RGB_TOG", - "USER00", - "KC_CAPS", - "KC_NLCK", - "KC_MINS", - "KC_P4", - "KC_P5", - "KC_P6", - "KC_VOLD", - "KC_F14", - "KC_VOLU", - "USER03", - "KC_MSTP", - "USER02", - "KC_WWW_REFRESH", - "KC_BSPC", - "KC_P0", - "KC_P1", - "KC_P2", - "KC_P3", - "KC_MS_WH_UP", - "C(KC_W)", - "KC_MS_WH_DOWN", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_MS_WH_DOWN", - "KC_HOME", - "KC_MS_WH_UP", - "C(KC_PMNS)", - "C(KC_0)", - "C(KC_PPLS)", - "C(S(KC_TAB))", - "C(KC_T)", - "C(KC_TAB)" - ], - [ - "KC_RBRC", - "KC_I", - "KC_LBRC", - "TO(0)", - "KC_T", - "KC_M", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_LEFT", - "C(S(KC_B))", - "KC_RGHT", - "KC_LCBR", - "C(KC_I)", - "KC_RCBR", - "KC_B", - "KC_J", - "KC_S", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "C(S(KC_TAB))", - "C(KC_S)", - "C(KC_TAB)", - "C(KC_Z)", - "KC_X", - "C(S(KC_Z))", - "KC_LALT", - "KC_SPC", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_DOWN", - "KC_TRNS", - "KC_UP", - "KC_NO", - "KC_NO", - "KC_NO", - "C(KC_LBRC)", - "KC_DEL", - "C(KC_RBRC)", - "A(KC_LBRC)", - "C(KC_F10)", - "A(KC_RBRC)", - "C(KC_MINS)", - "C(KC_0)", - "C(KC_PPLS)" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "TO(0)", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_UP", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_LEFT", - "KC_DOWN", - "KC_RGHT", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_MS_BTN2", - "KC_PAUS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_NO", - "KC_NO", - "KC_NO", - "TO(0)", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "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_NO", - "KC_NO", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "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_NO", - "KC_NO", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "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_NO", - "KC_NO", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "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_NO", - "KC_NO", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "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_NO", - "KC_NO", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "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_NO", - "KC_NO", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ] - ] -} \ No newline at end of file diff --git a/keyboards/solartempest/9e/9e VIA keymap.json b/keyboards/solartempest/9e/9e VIA keymap.json deleted file mode 100644 index 21498184e2bd..000000000000 --- a/keyboards/solartempest/9e/9e VIA keymap.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "A9e" , - "vendorId": "0x414B", - "productId": "0x0009", - "lighting": "qmk_rgblight", - "matrix": { "rows": 4, "cols": 12 }, - "customKeycodes": [ - { - "name": "Super Alt Tab FWD", - "title": "Alt Tab Forwards in Windows", - "shortName": "ATABF" - }, - { - "name": "Super Alt Tab REV", - "title": "Alt Tab Reverse in Windows", - "shortName": "ATABR" - }, - { - "name": "Move Window Right", - "title": "Move Window Right in Windows", - "shortName": "MWR" - }, - { - "name": "Move Window Left", - "title": "Move Window Left in Windows", - "shortName": "MWL" - } - ], - "layouts": - { - "keymap": - [ - [{"x": 0.25},"0,0", {"x": 1}, "1,0",{"h": 1.5},"1,1","1,2", {"x": 1}, "0,3", "0,4", "0,5", "0,6", "0,7", "0,8", {"x": 1}, "0,9", {"h": 1.5},"0,10","0,11", {"x": 1}, "1,9",{"h": 1.5},"1,10","1,11"], - [{"w": 1.5},"0,1",{"x": 4.75}, "1,3", "1,4", "1,5", "1,6", "1,7", "1,8"], - [{"x": 0.25},"0,2", {"x": 1}, "2,0",{"h": 1.5},"2,1","2,2", {"x": 1}, "2,3", "2,4", "2,5", "2,6", "2,7", "2,8", {"x": 3}, "2,9",{"h": 1.5},"2,10","2,11"], - [{"x": 6.25, "y": 0.5}, "3,3",{"h": 1.5},"3,4","3,5", "3,6",{"h": 1.5},"3,7", "3,8", {"x": 3,"y": 1},"3,9",{"h": 1.5},"3,10","3,11"] - ] - } -} \ No newline at end of file diff --git a/keyboards/solartempest/9e/A9e.c b/keyboards/solartempest/9e/A9e.c deleted file mode 100644 index 3fc20a1961c1..000000000000 --- a/keyboards/solartempest/9e/A9e.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . -*/ - -#include "A9e.h" - -/* #define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 31, 32, 33, 34, 35, \ - 1, 30, 4, 5, 6, 7, 8, 9, \ - 0, 3, 10, 11, 12, 13, 14, 15, \ - 2, 41, 16, 17, 18, 19, 20, 21, 23, 36, \ - 40, 39, 22, 25, \ - 24, \ - 38, 27, 37, \ - 26, 29, \ - 28 )*/ -// E2 Keys Row 1 E4 E5 -// E1 Keys Row 2 E6 -// E3 Keys Row 3 -// E8 E9 E7 - -#ifdef RGB_MATRIX_ENABLE //Add in addressable LED underglow support with physical locations - led_config_t g_led_config = { { - //Key matrix to LED index - { 36, 35, 34, 33, 32, }, - {18, 37, 5, 4, 3, 2, 1, 0, }, - {19, 21, 11, 10, 9, 8, 7, 6, }, - {20, 38, 17, 16, 15, 14, 13, 12, 22, 31, }, - { 39, 40, 23, 25, }, - { 24, }, - { 41, 26, 30, }, - { 27, 29, }, - { 28, NO_LED, NO_LED, NO_LED, } - }, { - // LED Key Index to Physical Position, calculated with Plot Digitizer and scaled PCB Image with center at {110,110} - {150,98},{132,98},{116,98},{100,98},{84,98},{60,98}, - {150,80},{132,80},{116,80},{100,80},{84,80},{60,80}, - {150,64},{132,64},{116,64},{100,64},{84,64},{60,64}, - - {16,85},{7,76},{16,66},{24,76}, {192,74},{184,62}, - {192,52},{202,62}, {192,30},{184,20},{192,8},{202,19}, - - {209,32},{211,71},{191,105},{141,105},{101,104},{76,104}, - {52,98},{30,89},{30,63},{52,50},{141,44},{181,32} - }, { // LED Index to Flag. - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, // 4 for 18-key backlight. - 1,1,1,1,1,1,1,1,1,1,1,1, // 1 for 3*4LED large rotary encoders. - 2,2,2,2,2,2,2,2,2,2,2,2 // 2 for 12-case underglow. - } }; -#endif diff --git a/keyboards/solartempest/9e/A9e.h b/keyboards/solartempest/9e/A9e.h deleted file mode 100644 index cc6481b19bb5..000000000000 --- a/keyboards/solartempest/9e/A9e.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#ifndef A9E_H - #define A9E_H - - #include "quantum.h" - - #define KEYMAP( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ - K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ - K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ - K303, K304, K305, K306, K307, K308, K309, K310, K311 \ - ) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \ - { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \ - { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \ - { KC_NO, KC_NO, KC_NO, K303, K304, K305, K306, K307, K308, K309, K310, K311 } \ - } -#endif diff --git a/keyboards/solartempest/9e/config.h b/keyboards/solartempest/9e/config.h deleted file mode 100644 index a74b280bfb3b..000000000000 --- a/keyboards/solartempest/9e/config.h +++ /dev/null @@ -1,140 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . -*/ - -#ifndef CONFIG_H - #define CONFIG_H - - #include "config_common.h" - - /* USB Device descriptor parameter */ - #define VENDOR_ID 0x414B // AK - #define PRODUCT_ID 0x0009 // 9e - #define DEVICE_VER 0x0001 - #define MANUFACTURER Atlantis - #define PRODUCT A9e - #define DESCRIPTION Keyboard - - /* key matrix size */ - #define MATRIX_ROWS 4 - #define MATRIX_COLS 12 - - /* key matrix pins */ - #define MATRIX_ROW_PINS { F0, F1, F2, F3 } - #define MATRIX_COL_PINS { F5, F6, F7, A0, A1, A2, A3, A4, A5, B7, B6, B5 } //F5, F7, B7, B5 are unused on the MCU. They are needed for the encoder key matrix. - #define UNUSED_PINS - - /* encoder pins */ - #define ENCODERS_PAD_A { C0, C3, C5, C7, D1, D3, D5, D6, A7 } //Encoder pads ordered so on VIA mapping it is cw/ccw and up/down rotation orientation. - #define ENCODERS_PAD_B { C1, C2, C4, C6, D0, D2, D4, D7, A6 } - #define ENCODER_RESOLUTIONS { 4, 4, 4, 4, 4, 4, 4, 2, 2 } //Better control of individual encoders and encoder types. - //#define ENCODER_RESOLUTION 4 - - /* COL2ROW or ROW2COL */ - #define DIODE_DIRECTION COL2ROW - - /* Set 0 if debouncing isn't needed */ - #define DEBOUNCE 5 - - /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ - #define LOCKING_SUPPORT_ENABLE - - /* Locking resynchronize hack */ - #define LOCKING_RESYNC_ENABLE - - - #define RGB_DI_PIN E6 - #ifdef RGB_DI_PIN - #define RGBLIGHT_ANIMATIONS - #define RGBLIGHT_HUE_STEP 8 - #define RGBLIGHT_SAT_STEP 8 - #define RGBLIGHT_VAL_STEP 8 - #define RGBLIGHT_LAYERS - #define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF - #define RGBLIGHT_SLEEP // 18 keys, 9*3 encoders = 45 keys - #define RGBLED_NUM 42 // 18 keys + 12 encoders + 12 underglow for RGBLIGHT - #define RGBLIGHT_LIMIT_VAL 180 - - //RGB LED Conversion macro from physical array to electric array - //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping - #define LED_LAYOUT( \ - L01, L03, L05, L07, L08, \ - L10, L11, L12, L13, L14, L15, L16, L17, \ - L20, L21, L22, L23, L24, L25, L26, L27, \ - L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, \ - L41, L46, L47, L49, \ - L58, \ - L67, L68, L69, \ - L77, L79, \ - L88 )\ - { \ - L17,L16,L15,L14,L13,L12,L27,L26,L25,L24,L23,L22,L37,L36,L35,L34,L33,L32,L10,L20,L30,L21,L38,L47,L58,L49,L68,L77,L88,L79,L69,L39,L08,L07,L05,L03,L01,L11,L31,L41,L46,L67, \ - } - //RGB LED logical order map - //Left encoder -> keys -> right encoders -> backlight - #define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 31, 32, 33, 34, 35, \ - 1, 30, 4, 5, 6, 7, 8, 9, \ - 0, 3, 10, 11, 12, 13, 14, 15, \ - 2, 41, 16, 17, 18, 19, 20, 21, 23, 36, \ - 40, 39, 22, 25, \ - 24, \ - 38, 27, 37, \ - 26, 29, \ - 28 ) - #endif - - #ifdef RGB_MATRIX_ENABLE // For dynamic RGB Matrix effects - #define DRIVER_LED_TOTAL 42 // The number of LEDs connected for matrix, 18 keys + 12 encoders + 12 underglow - #define RGB_MATRIX_CENTER { 110, 110 }; - #define RGB_MATRIX_KEYPRESSES - #define DISABLE_RGB_MATRIX_ALPHAS_MODS //Remove effects not desired - #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN - #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT - #define DISABLE_RGB_MATRIX_BAND_SAT - #define DISABLE_RGB_MATRIX_BAND_VAL - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL - #define DISABLE_RGB_MATRIX_CYCLE_ALL - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL - #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON - #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL - #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL - #define DISABLE_RGB_MATRIX_DUAL_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS - #define DISABLE_RGB_MATRIX_RAINDROPS - #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS - #define DISABLE_RGB_MATRIX_HUE_BREATHING - #define DISABLE_RGB_MATRIX_HUE_PENDULUM - #define DISABLE_RGB_MATRIX_HUE_WAVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS - #define DISABLE_RGB_MATRIX_SPLASH - #define DISABLE_RGB_MATRIX_MULTISPLASH - #define DISABLE_RGB_MATRIX_SOLID_SPLASH - #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH - #endif - - -#endif diff --git a/keyboards/solartempest/9e/info.json b/keyboards/solartempest/9e/info.json deleted file mode 100644 index 82c46121d321..000000000000 --- a/keyboards/solartempest/9e/info.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "keyboard_name": "A9e", - "url": "", - "maintainer": "solartempest", - "width": 20.25, - "height": 5.5, - "layouts": { - "LAYOUT": { - "layout": [{"label":"0,0", "x":0.25, "y":0}, {"label":"1,0", "x":2.25, "y":0}, {"label":"1,1", "x":3.25, "y":0, "h":1.5}, {"label":"1,2", "x":4.25, "y":0}, {"label":"0,3", "x":6.25, "y":0}, {"label":"0,4", "x":7.25, "y":0}, {"label":"0,5", "x":8.25, "y":0}, {"label":"0,6", "x":9.25, "y":0}, {"label":"0,7", "x":10.25, "y":0}, {"label":"0,8", "x":11.25, "y":0}, {"label":"0,9", "x":13.25, "y":0}, {"label":"0,10", "x":14.25, "y":0, "h":1.5}, {"label":"0,11", "x":15.25, "y":0}, {"label":"1,9", "x":17.25, "y":0}, {"label":"1,10", "x":18.25, "y":0, "h":1.5}, {"label":"1,11", "x":19.25, "y":0}, {"label":"0,1", "x":0, "y":1, "w":1.5}, {"label":"1,3", "x":6.25, "y":1}, {"label":"1,4", "x":7.25, "y":1}, {"label":"1,5", "x":8.25, "y":1}, {"label":"1,6", "x":9.25, "y":1}, {"label":"1,7", "x":10.25, "y":1}, {"label":"1,8", "x":11.25, "y":1}, {"label":"0,2", "x":0.25, "y":2}, {"label":"2,0", "x":2.25, "y":2}, {"label":"2,1", "x":3.25, "y":2, "h":1.5}, {"label":"2,2", "x":4.25, "y":2}, {"label":"2,3", "x":6.25, "y":2}, {"label":"2,4", "x":7.25, "y":2}, {"label":"2,5", "x":8.25, "y":2}, {"label":"2,6", "x":9.25, "y":2}, {"label":"2,7", "x":10.25, "y":2}, {"label":"2,8", "x":11.25, "y":2}, {"label":"2,9", "x":15.25, "y":2}, {"label":"2,10", "x":16.25, "y":2, "h":1.5}, {"label":"2,11", "x":17.25, "y":2}, {"label":"3,3", "x":6.25, "y":3.5}, {"label":"3,4", "x":7.25, "y":3.5, "h":1.5}, {"label":"3,5", "x":8.25, "y":3.5}, {"label":"3,6", "x":9.25, "y":3.5}, {"label":"3,7", "x":10.25, "y":3.5, "h":1.5}, {"label":"3,8", "x":11.25, "y":3.5}, {"label":"3,9", "x":15.25, "y":4.5}, {"label":"3,10", "x":16.25, "y":4.5, "h":1.5}, {"label":"3,11", "x":17.25, "y":4.5}] - } - } -} diff --git a/keyboards/solartempest/9e/keymaps/default/keymap.c b/keyboards/solartempest/9e/keymaps/default/keymap.c deleted file mode 100644 index 916fa70260df..000000000000 --- a/keyboards/solartempest/9e/keymaps/default/keymap.c +++ /dev/null @@ -1,208 +0,0 @@ -#include "A9e.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - KEYMAP( - KC_L, KC_1, KC_R, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_L, KC_4, KC_R, - KC_L, KC_2, KC_R, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_L, KC_5, KC_R, - KC_L, KC_3, KC_R, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_L, KC_6, KC_R, - KC_UP, KC_8, KC_DOWN, RGB_VAI, KC_9, RGB_VAD, KC_L, KC_7, KC_R), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP( - 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, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - - - switch (id) { - - } - return MACRO_NONE; -} - -void matrix_init_user(void) { -} - -void matrix_scan_user(void) { -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} - -void encoder_update_user(uint8_t index, bool clockwise) -{ - if (index == 0) { /* First encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 0)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 2)); - } - } else if (index == 1) { /* Second encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 0)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 2)); - }} else if (index == 2) { /* 3 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 0)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 2)); - }} else if (index == 3) { /* 4 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 9)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 11)); - }} else if (index == 4) { /* 5 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 9)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 11)); - }} else if (index == 5) { /* 6 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 9)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 11)); - }} else if (index == 6) { /* 7 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 9)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 11)); - }} else if (index == 7) { /* 8 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 3)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 5)); - }} else if (index == 8) { /* 9 encoder */ - if (clockwise) { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 6)); - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 8)); - } - } -} - - - -void led_set_user(uint8_t usb_led) { - - if (usb_led & (1 << USB_LED_NUM_LOCK)) { - - } else { - - } - - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - - } else { - - } - - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - - } else { - - } - - if (usb_led & (1 << USB_LED_COMPOSE)) { - - } else { - - } - - if (usb_led & (1 << USB_LED_KANA)) { - - } else { - - } - -} \ No newline at end of file diff --git a/keyboards/solartempest/9e/keymaps/via/config.h b/keyboards/solartempest/9e/keymaps/via/config.h deleted file mode 100644 index 8c2aeca25c0e..000000000000 --- a/keyboards/solartempest/9e/keymaps/via/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . -*/ - -#pragma once - -// Set 10 layers for VIA -#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/9e/keymaps/via/keymap.c b/keyboards/solartempest/9e/keymaps/via/keymap.c deleted file mode 100644 index 6b53279aa6bd..000000000000 --- a/keyboards/solartempest/9e/keymaps/via/keymap.c +++ /dev/null @@ -1,417 +0,0 @@ -#include "A9e.h" -#include QMK_KEYBOARD_H - -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = USER00, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML //Move window to monitor on left - }; -#else - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML //Move window to monitor on left - }; -#endif - - -//Keymap physical layout as follows: -// E2 Keys Row 1 E4 E5 -// E1 Keys Row 2 E6 -// E3 Keys Row 3 -// E8 E9 E7 -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( - KC_LEFT, KC__MUTE, KC_RIGHT, //Rotary Encoder 1 - TO(1), TO(2), TO(3), KC_P7, KC_P8, KC_P9, //Keys Row 1 - RGB_VAD, KC_SPACE, RGB_VAI, //Rotary Encoder 4 - RGB_MODE_REVERSE, RGB_TOG, RGB_MODE_FORWARD, //Rotary Encoder 2 - KC_CAPS, KC_SLCK, KC_NLCK, KC_P4, KC_P5, KC_P6, //Keys Row 2 - RGB_HUD, A(KC_F4), RGB_HUI, //Rotary Encoder 5 - ATABR, KC_MSTP, ATABF, //Rotary Encoder 3 - KC_WREF, KC_MYCM, KC_P0, KC_P1, KC_P2, KC_P3, //Keys Row 3 - KC_MS_WH_UP, C(KC_W), KC_MS_WH_DOWN, //Rotary Encoder 6 - C(S(KC_TAB)), KC_HOME, C(KC_TAB), //Rotary Encoder 8 - C(KC_PMNS), KC__MUTE, C(KC_PPLS), //Rotary Encoder 9 - C(S(KC_TAB)), C(KC_T), C(KC_TAB) //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 1 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 1 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 4 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 2 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 2 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 5 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 3 - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, //Keys Row 3 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 6 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 8 - KC_TRNS, KC_TRNS, KC_TRNS, //Rotary Encoder 9 - KC_TRNS, KC_TRNS, KC_TRNS //Rotary Encoder 7 - ), -}; - - -/*const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { //Code is not required - switch (id) { - } - return MACRO_NONE; -}*/ - -void matrix_init_user(void) { -} - -void matrix_scan_user(void) { - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { //For super alt tab keycodes - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - return true; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - return true; - - case NMR: //Move window to next monitor on right - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_RIGHT); - unregister_code(KC_RIGHT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - case NML: //Move window to next monitor on left - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_LEFT); - unregister_code(KC_LEFT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - } - return true; -} - - -bool encoder_update_user(uint8_t index, bool clockwise) -{ - if (index == 0) { /* 1 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 1) { /* 2 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 2) { /* 3 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 0}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 0}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 2}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 2}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 3) { /* 4 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 4) { /* 5 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col =9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col =9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 5) { /* 6 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 2, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 6) { /* 7 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 9}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 9}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 11}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 7) { /* 8 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 3}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 3}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 5}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 5}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - else if (index == 8) { /* 9 encoder */ - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 6}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 6}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 8}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */}); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 8}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */}); - } - } - return true; -} - - -#ifdef RGBLIGHT_ENABLE - // RGB Layer Light Settings - Note that this will fix the key switches with same LED colour and brightness - const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 95,255,90}); //Spring green - const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 30,255,120}); //Yellow-orange - const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 128,255,100}); //Cyan - const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 215,255,120}); //Magenta - const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 2, 43,100,160}); //White-left caps lock indication (No dedicated LED) - const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({8, 2, 43,100,150}); //White-right num lock indication (No dedicated LED) - const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({6, 2, 43,100,160}); //White-middle scroll lock indication (No dedicated LED) - const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers - my_layer0_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_capslock_layer, //Highest status indicators override other layers - my_numlock_layer, - my_scrollock_layer - ); -#endif - -void keyboard_post_init_user(void) -{ - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_layers = my_rgb_layers;// Enable the LED layers - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 - layer_move(0); //start on layer 0 to get the lighting activated - #endif -} - - -#ifdef RGBLIGHT_ENABLE - layer_state_t layer_state_set_user(layer_state_t state) - { - rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active - rgblight_set_layer_state(1, layer_state_cmp(state, 1)); - rgblight_set_layer_state(2, layer_state_cmp(state, 2)); - rgblight_set_layer_state(3, layer_state_cmp(state, 3)); - - switch(biton32(state)){ // Change all other LEDs based on layer state as well - case 0: - rgblight_sethsv_noeeprom(50,255,30); - break; - case 1: - rgblight_sethsv_noeeprom(30,255,30); - break; - case 2: - rgblight_sethsv_noeeprom(106,255,30); - break; - case 3: - rgblight_sethsv_noeeprom(215,255,30); - break; - default: - rgblight_sethsv_noeeprom(64,255,30); - } - return state; - } - - bool led_update_user(led_t led_state) - { - rgblight_set_layer_state(4, led_state.caps_lock); //Activate capslock lighting layer - rgblight_set_layer_state(5, !(led_state.num_lock)); //Invert the indication so numlock does not always appear "on". - rgblight_set_layer_state(6, led_state.scroll_lock); //Activate scrollock lighting layer - return true; - } -#endif diff --git a/keyboards/solartempest/9e/keymaps/via/rules.mk b/keyboards/solartempest/9e/keymaps/via/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/solartempest/9e/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/solartempest/9e/readme.md b/keyboards/solartempest/9e/readme.md deleted file mode 100644 index 38b472d3326a..000000000000 --- a/keyboards/solartempest/9e/readme.md +++ /dev/null @@ -1,42 +0,0 @@ -# Atlantis 9e Macropad - -![Atlantis 9e](https://i.imgur.com/hFuZyXU.jpg) - -A 18-key macro pad with 9 pushbutton rotary encoders and underglow RGB per key RGB and for the case. - -For detailed instructions on using VIA and flashing, please refer to the sections further down the page! - -* Keyboard Maintainer: solartempest -* Hardware Supported: Atlantis 9e -* Hardware Availability: [rioo897](https://shop198276076.world.taobao.com/index.htm?spm=2013.1.w5002-23418336364.2.3f4d7d51DkVX3s) - -# Custom Features: - -- 9 remappable rotary encoder controling a variety of different things! -- RGB underglow support and remapped to physical locations. -- Adds custom layer lighting with custom gradients for each and static colours for the switches. -- Adds white caps lock, scroll lock, and num lock key indicators on the top row. -- VIA support included by default. -- Allows for remapping of per-layer rotary encoder functions in VIA. -- Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders. -- Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders. - - -## Flashing - -Make example for this keyboard (after setting up your build environment): - - qmk compile -kb solartempest/9e -km via - -- Please note that QMK toolbox and configurator cannot be used to flash this board. -- You will need to use an ISP Programmer to directly flash the 9e. No board reset is required, as you will flash the MCU directly. -- I used Prog ISP V2.0 but other AVR programmers will also work. -- Use a 12P AWM 20624 ribbon cable with FCP-12P-1.0mm breakout board. Only 10 pins are used. - -## Using with VIA - -- After flashing, in VIA make sure to Import Keymap, which is "9e VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. -- Go to Save+Load to Load Saved Layout. You can import my own layout "9e VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. -- It is a good idea to Save Current Layout after you decide on your mapping. - -See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/solartempest/9e/rules.mk b/keyboards/solartempest/9e/rules.mk deleted file mode 100644 index 782755a42c25..000000000000 --- a/keyboards/solartempest/9e/rules.mk +++ /dev/null @@ -1,63 +0,0 @@ -# MCU name -MCU = at90usb646 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. - -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -TERMINAL_ENABLE = no # Terminal interface feature, very large. -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -RGBLIGHT_ENABLE = no # RGB LEDs -RGB_MATRIX_ENABLE = no # RGB matrix for individual LED control (In progress only) -RGB_MATRIX_DRIVER = WS2812 # Addressable LED strand driver -RGBLIGHT_SLEEP = yes # LEDs off when sleeping -NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -KEY_LOCK_ENABLE = no # Key lock functionality -ENCODER_ENABLE = yes # Encoders -LTO_ENABLE = yes # Save space -LEADER_ENABLE = no # Leader keys -COMBO_ENABLE = no # Combo keys -UNICODE_ENABLE = no # Unicode diff --git a/keyboards/solartempest/ps17/config.h b/keyboards/solartempest/ps17/config.h deleted file mode 100644 index a22d17fcb719..000000000000 --- a/keyboards/solartempest/ps17/config.h +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once -#include "config_common.h" - -// USB Device descriptor parameter -#define VENDOR_ID 0x414B // "AK" -#define PRODUCT_ID 0x0015 -#define DEVICE_VER 0x0002 // Ver2 -#define MANUFACTURER ATLANTIS -#define PRODUCT PS17 - -//#define ENCODER_RESOLUTION 2 // default is 4 - -// key matrix size -#ifdef RGBLIGHT_ENABLE - #define MATRIX_ROWS 6 -#endif -#ifdef RGB_MATRIX_ENABLE - #define MATRIX_ROWS 11 //Numpad actually has 6 rows. 5 rows were added for underglow RGB matrix to work together -#endif -#define MATRIX_COLS 4 - -// Encoder matrix -#define ENCODERS_PAD_A { D1 } -#define ENCODERS_PAD_B { D2 } -//#define ENCODER_DIRECTION_FLIP - -#define MATRIX_ROW_PINS { F0, B4, B5, B6, C6, C7 } //Rotary encoder SPST is on F0,F7 -#define MATRIX_COL_PINS { F6, F7, D3, D6 } -#define UNUSED_PINS - -// COL2ROW or ROW2COL -#define DIODE_DIRECTION COL2ROW - -// For LED status indicators -#define LED_NUM_LOCK_PIN D0 -#define LED_CAPS_LOCK_PIN D5 -#define LED_SCROLL_LOCK_PIN D4 -#define LED_PIN_ON_STATE 0 - -#define RGB_DI_PIN B7 -#ifdef RGBLIGHT_ENABLE - #define RGBLED_NUM 28 // 17 key + 11 underglow for RGBLIGHT - #define RGBLIGHT_HUE_STEP 8 - #define RGBLIGHT_SAT_STEP 8 - #define RGBLIGHT_VAL_STEP 8 - #define RGBLIGHT_DEFAULT_VAL 40 // default brightness on clearing EEPROM - #define RGBLIGHT_LIMIT_VAL 180 // brightness level max is 255 - #define RGBLIGHT_LAYERS - #define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF - #define RGBLIGHT_SLEEP // if defined, RGB lighting off when host is sleeping - #define RGBLIGHT_ANIMATIONS - - //RGB LED Conversion macro from physical array to electric array - //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping - #define LED_LAYOUT( \ - L00, L05, \ - L10, L15, \ - L20, L21, L22, L23, L24, L25, \ - L31, L32, L33, L34, \ - L40, L41, L42, L43, L45, \ - L51, L52, L53, L54, \ - L60, L61, L62, L63, L65 ) \ - { \ - L21,L22,L23,L24,L31,L32,L33,L34,L41,L42,L43,L51,L52,L53,L54,L61,L63,L60,L40,L20,L10,L00,L05,L15,L25,L45,L65,L62, \ - } - //RGB LED logical order map - //Right->Left, Top->Bottom - #define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 1, 0, \ - 3, 2, \ - 9, 8, 7, 6, 5, 4, \ - 13, 12, 11, 10, \ - 18, 17, 16, 15, 14, \ - 22, 21, 20, 19, \ - 27, 26, 25, 24, 23 ) -#endif - -#ifdef RGB_MATRIX_ENABLE // For dynamic RGB Matrix effects - #define DRIVER_LED_TOTAL 28 // The number of LEDs connected for matrix, 17 key + 11 underglow - #define RGB_MATRIX_CENTER { 126, 126 }; - #define RGB_MATRIX_KEYPRESSES - #define DISABLE_RGB_MATRIX_ALPHAS_MODS //Remove effects not desired - #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN - #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT - #define DISABLE_RGB_MATRIX_BAND_SAT - #define DISABLE_RGB_MATRIX_BAND_VAL - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL - #define DISABLE_RGB_MATRIX_CYCLE_ALL - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL - #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON - #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL - #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL - #define DISABLE_RGB_MATRIX_DUAL_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS - #define DISABLE_RGB_MATRIX_RAINDROPS - #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS - #define DISABLE_RGB_MATRIX_HUE_BREATHING - #define DISABLE_RGB_MATRIX_HUE_PENDULUM - #define DISABLE_RGB_MATRIX_HUE_WAVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS - #define DISABLE_RGB_MATRIX_SPLASH - #define DISABLE_RGB_MATRIX_MULTISPLASH - #define DISABLE_RGB_MATRIX_SOLID_SPLASH - #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH -#endif - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -#define COMBO_COUNT 6 //Number of tap combos used -#define COMBO_TERM 350 //Default combo time is 200ms - -#define TAPPING_TERM 200 //Tap dance time diff --git a/keyboards/solartempest/ps17/info.json b/keyboards/solartempest/ps17/info.json deleted file mode 100644 index 2806bc0128d6..000000000000 --- a/keyboards/solartempest/ps17/info.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "keyboard_name": "Atlantis PS17 Macropad", - "url": "", - "maintainer": "solartempest", - "width": 4, - "height": 6, - "layouts": { - "LAYOUT": { - "layout": [ - {"x":0, "y":0, "h":1.5}, - {"x":0, "y":1}, - {"x":0, "y":2, "h":1.5}, - - {"x":1, "y":0}, - {"x":1, "y":1}, - {"x":1, "y":2}, - {"x":1, "y":3}, - - {"x":2, "y":0}, - {"x":2, "y":1}, - {"x":2, "y":2}, - {"x":2, "y":3, "h":2}, - - {"x":3, "y":0}, - {"x":3, "y":1}, - {"x":3, "y":2}, - - {"x":4, "y":0}, - {"x":4, "y":1}, - {"x":4, "y":2}, - {"x":4, "y":3, "h":2}, - - {"x":5, "y":0, "w":2}, - {"x":5, "y":2}, - ] - } - } -} diff --git a/keyboards/solartempest/ps17/keymaps/default/keymap.c b/keyboards/solartempest/ps17/keymaps/default/keymap.c deleted file mode 100644 index 3dc48708a4ef..000000000000 --- a/keyboards/solartempest/ps17/keymaps/default/keymap.c +++ /dev/null @@ -1,365 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include QMK_KEYBOARD_H -#include "PS17.h" -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. Don't forget to update the VIA json as well. - ATABF = USER00, //Alt tab forwards - ATABR //Alt tab reverse - }; -#else - enum custom_keycodes { //Use SAFE_RANGE when Via is disabled. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR //Alt tab reverse - }; -#endif - - -enum combos { //Tap combos - kppls_7, - kppls_8 -}; - -const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; -const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; - -combo_t key_combos[COMBO_COUNT] = { - [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), - [kppls_8] = COMBO(kppl8_combo, KC_DELETE) -}; - - -// Tap Dance declarations -enum { - TD_MINUS_NUMLOCK, -}; - -// Tap Dance definitions -qk_tap_dance_action_t tap_dance_actions[] = { - // Tap once for Escape, twice for Caps Lock - [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), -}; - -//TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode - - -enum layer_names { - _LAYER0, - _LAYER1, - _LAYER2, - _LAYER3, - _LAYER4, - _LAYER5, - _LAYER6, - _LAYER7, - _LAYER8, - _LAYER9 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAYER0] = LAYOUT( - KC_PGUP, KC__MUTE, KC_PGDOWN, - MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, TD(TD_MINUS_NUMLOCK), - KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, - KC_KP_4, KC_KP_5, KC_KP_6, - KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, - KC_KP_0, KC_KP_DOT - ), - [_LAYER1] = LAYOUT( - KC_LEFT, KC_TRNS, KC_RIGHT, - KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, - TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, RESET, - RESET, KC_TRNS - ), - [_LAYER2] = LAYOUT( - KC_TRNS, KC_TRNS, KC_TRNS, - TO(0), KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO - ), - [_LAYER3] = LAYOUT( - ATABR, KC_TRNS, ATABF, - TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), - C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, - KC_PGDOWN, KC_PGUP - ), - [_LAYER4] = LAYOUT( - ATABR, KC_TRNS, ATABF, - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_RIGHT, - C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_SCROLLLOCK, - KC_F13, KC_F14 - ), - [_LAYER5] = LAYOUT( - 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 - ), - [_LAYER6] = LAYOUT( - 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 - ), - [_LAYER7] = LAYOUT( - 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 - ), - [_LAYER8] = LAYOUT( - 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 - ), - [_LAYER9] = LAYOUT( - 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 - ) -}; - - -void matrix_init_user(void) { //run when matrix is initiated, before all features init -}; - -void matrix_scan_user(void) { //run whenever user matrix is scanned - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { //Actions to override existing key behaviours - switch (keycode) { //For super alt tab keycodes - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - break; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - break; - } - return true; -}; - - -void keyboard_post_init_user(void) { //run as last task in keyboard init - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(58, 255, 80); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_enable(); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9. Looks great this way! - rgblight_sethsv(58, 255, 30); //Set lower default brightness when connected as the right side dimming is not yet in effect - #endif -}; - - -#ifdef RGBLIGHT_ENABLE -layer_state_t layer_state_set_user(layer_state_t state) { - switch (get_highest_layer(state)) { - //This custom layer lighting is similar to RGB Light Gradient 9, but customized to separate key and case underglow brightness - static uint16_t underglow_brightness = 140; - static uint16_t perkey_brightness = 80; - static uint16_t lastrow_brightness = 15; //for less shine-through at case edges - static uint16_t current_hue = 0; //hue calculated to be used - static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue - static uint16_t layer0_hueincrement = 2; //hue gradient colour increment - static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green - static uint16_t layer1_hueincrement = 2; //hue gradient colour increment - static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) - static uint16_t layer2_hueincrement = 2; //hue gradient colour increment - static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple - static uint16_t layer3_hueincrement = 2; //hue gradient colour increment - static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red - static uint16_t layer4_hueincrement = 1; //hue gradient colour increment - - /*#define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 1, 0, \ - 3, 2, \ - 9, 8, 7, 6, 5, 4, \ - 13, 12, 11, 10, \ - 18, 17, 16, 15, 14,\ - 22, 21, 20, 19, \ - 27, 26, 25, 24, 23 )*/ - - case _LAYER0: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER1: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER2: //Photoshop custom layer (macros and keys all done in VIA) - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3) { //Underglow LEDs - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } - else if (i == 6) {rgblight_sethsv_at(148,255,perkey_brightness+15,i);} //Text - light blue - else if (i == 5) {rgblight_sethsv_at(140,255,perkey_brightness+15,i);} //New Layer - light blue - else if (i == 15) {rgblight_sethsv_at(195,255,perkey_brightness+15,i);} //Marquee - rose - else if (i == 9) {rgblight_sethsv_at(190,255,underglow_brightness,i);} //Underglow to match - else if (i == 13) {rgblight_sethsv_at(180,255,perkey_brightness+15,i);} //Healing Brush - purple - else if (i == 12) {rgblight_sethsv_at(185,255,perkey_brightness+15,i);} //Clone - else if (i == 11) {rgblight_sethsv_at(190,255,perkey_brightness+15,i);} //Default - else if (i == 7) {rgblight_sethsv_at(195,255,perkey_brightness+15,i);} //Brush - else if (i == 18) {rgblight_sethsv_at(230,255,underglow_brightness,i);} //Underglow to match - else if (i == 17) {rgblight_sethsv_at(0,255,perkey_brightness+15,i);} //copy - red - else if (i == 16) {rgblight_sethsv_at(3,255,perkey_brightness+15,i);} //Paste - else if (i == 22) {rgblight_sethsv_at(5,255,perkey_brightness+15,i);} //Undo - else if (i == 21) {rgblight_sethsv_at(0,255,perkey_brightness+15,i);} //Redo - else if (i == 26) {rgblight_sethsv_at(200,255,lastrow_brightness+15,i);} //Space - blue - else if (i == 24) {rgblight_sethsv_at(195,255,lastrow_brightness+15,i);} //Alt - else if (i == 20) {rgblight_sethsv_at(190,255,lastrow_brightness+15,i);} //Shift - else if (i == 27) {rgblight_sethsv_at(200,255,underglow_brightness,i);} //Underglow to match - else if (i == 10) {rgblight_sethsv_at(current_hue,255,lastrow_brightness,i);} //Zoom in - else if (i == 19) {rgblight_sethsv_at(current_hue,255,lastrow_brightness,i);} //Zoom out - else if (i == 25) {rgblight_sethsv_at(180,255,underglow_brightness,i);} //Underglow to match - else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code is for normal gradient colouration - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case _LAYER3: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER4: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - } - return state; - }; -#endif diff --git a/keyboards/solartempest/ps17/keymaps/via/config.h b/keyboards/solartempest/ps17/keymaps/via/config.h deleted file mode 100644 index 4bbacd9a507b..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once - -// Set 10 layers for VIA -#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/ps17/keymaps/via/keymap.c b/keyboards/solartempest/ps17/keymaps/via/keymap.c deleted file mode 100644 index b75dc6fc7272..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via/keymap.c +++ /dev/null @@ -1,507 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include QMK_KEYBOARD_H -#include "PS17.h" -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - - -// IDLE TIMEOUTS -#ifdef IDLE_TIMEOUT_ENABLE - #define TIMEOUT_THRESHOLD_DEFAULT 5 // default timeout minutes - #define TIMEOUT_THRESHOLD_MAX 140 // upper limits (2 hours and 10 minutes -- no rgb indicators above this value) - - //prototype functions - uint16_t get_timeout_threshold(void); - void timeout_reset_timer(void); - void timeout_update_threshold(bool increase); - void timeout_tick_timer(void); -#endif //IDLE_TIMEOUT_ENABLE - - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -bool spam_arrow; -uint16_t spam_timer = false; -uint16_t spam_interval = 1000; // (1000ms == 1s) -bool teams_muted; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = USER00, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. - TEAMSMUTE //MS Teams mute shortcut and simple LED status - }; -#else - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. - TEAMSMUTE //MS Teams mute shortcut and simple LED status - }; -#endif - -#ifdef COMBO_ENABLE //Tap combos - enum combos { - kppls_7, //Hold plus and 7 to backspace - kppls_8, //Hold plus and 8 to delete - kpent_4, //Hold enter and 4 for left arrow - kpent_5, //Hold enter and 5 for down arrow - kpent_6, //Hold enter and 6 for right arrow - kpent_8, //Hold enter and 4'8 for up arrow - }; - const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; - const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; - const uint16_t PROGMEM kpent4_combo[] = {KC_PENT, KC_KP_4, COMBO_END}; - const uint16_t PROGMEM kpent5_combo[] = {KC_PENT, KC_KP_5, COMBO_END}; - const uint16_t PROGMEM kpent6_combo[] = {KC_PENT, KC_KP_6, COMBO_END}; - const uint16_t PROGMEM kpent8_combo[] = {KC_PENT, KC_KP_8, COMBO_END}; - combo_t key_combos[COMBO_COUNT] = { - [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), - [kppls_8] = COMBO(kppl8_combo, KC_DELETE), - [kpent_4] = COMBO(kpent4_combo, KC_LEFT), - [kpent_5] = COMBO(kpent5_combo, KC_DOWN), - [kpent_6] = COMBO(kpent6_combo, KC_RGHT), - [kpent_8] = COMBO(kpent8_combo, KC_UP) - }; -#endif - -#ifdef TAP_DANCE_ENABLE// Tap Dance definitions. Not VIA compatible. - enum { - TD_MINUS_NUMLOCK, - }; - qk_tap_dance_action_t tap_dance_actions[] = { - // Tap once for Escape, twice for Caps Lock - [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), - }; - //TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode (non-VIA only) -#endif - - -enum layer_names { - _LAYER0, - _LAYER1, - _LAYER2, - _LAYER3, - _LAYER4, - _LAYER5, - _LAYER6, - _LAYER7, - _LAYER8, - _LAYER9 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAYER0] = LAYOUT( - KC_PGDOWN, KC__MUTE, KC_PGUP, - MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, - KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, - KC_KP_4, KC_KP_5, KC_KP_6, - KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, - KC_KP_0, KC_KP_DOT - ), - [_LAYER1] = LAYOUT( - KC_RIGHT, KC_TRNS, KC_LEFT, - KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, - TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, RESET, - RESET, KC_TRNS - ), - [_LAYER2] = LAYOUT( - KC_RBRACKET, KC_TRNS, KC_LBRACKET, - TO(0), KC_B, KC_T, C(S(KC_N)), - KC_J, KC_S, KC_D, C(KC_MINS), - C(KC_C), C(KC_V), KC_M, - C(KC_N), C(S(KC_Z)), KC_LSHIFT, C(KC_PPLS), - KC_SPACE, KC_LALT - ), - [_LAYER3] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), - C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, - KC_PGDOWN, KC_PGUP - ), - [_LAYER4] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_RIGHT, - C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_NUMLOCK, - KC_F13, KC_F14 - ), - [_LAYER5] = LAYOUT( - 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 - ), - [_LAYER6] = LAYOUT( - 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 - ), - [_LAYER7] = LAYOUT( - 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 - ), - [_LAYER8] = LAYOUT( - 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 - ), - [_LAYER9] = LAYOUT( - 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 - ) -}; - - -void matrix_init_user(void) { //run when matrix is initiated, before all features init -}; - - -// TIMEOUTS -#ifdef IDLE_TIMEOUT_ENABLE - static uint16_t timeout_timer = 0; - static uint16_t timeout_counter = 0; //in minute intervals - static uint16_t timeout_threshold = TIMEOUT_THRESHOLD_DEFAULT; - - uint16_t get_timeout_threshold(void) { - return timeout_threshold; - } - - void timeout_reset_timer(void) { - timeout_timer = timer_read(); - timeout_counter = 0; - }; - - void timeout_update_threshold(bool increase) { - if (increase && timeout_threshold < TIMEOUT_THRESHOLD_MAX) timeout_threshold++; - if (!increase && timeout_threshold > 0) timeout_threshold--; - }; - - void timeout_tick_timer(void) { - if (timeout_threshold > 0) { - if (timer_elapsed(timeout_timer) >= 60000) { // 1 minute tick - timeout_counter++; - timeout_timer = timer_read(); - } - #ifdef RGB_MATRIX_ENABLE - if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { - rgb_matrix_disable_noeeprom(); - } - #endif - #ifdef RGBLIGHT_ENABLE - if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { - rgblight_toggle_noeeprom(); - } - #endif - } // timeout_threshold = 0 will disable timeout - } - - __attribute__((weak)) void matrix_scan_keymap(void) {} -#endif // IDLE_TIMEOUT_ENABLE - - -void matrix_scan_user(void) { //run whenever user matrix is scanned - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } - if (spam_arrow && timer_elapsed(spam_timer) >= spam_interval) { - spam_timer = timer_read(); - //tap_code(KC_UP); - //tap_code(KC_DOWN); - tap_code(KC_F24); - } - - #ifdef IDLE_TIMEOUT_ENABLE - timeout_tick_timer(); - matrix_scan_keymap(); - #endif // IDLE_TIMEOUT_ENABLE -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { //For keycode overrides - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - return true; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - return true; - - case NMR: //Move window to next monitor on right - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_RIGHT); - unregister_code(KC_RIGHT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - case NML: //Move window to next monitor on left - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_LEFT); - unregister_code(KC_LEFT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - - case SPAMARROW: // Moves arrow up and down - if (record->event.pressed) { - spam_arrow ^= 1; - spam_timer = timer_read(); - if(spam_arrow==1) { //Change LED colour on bottom row and underglow to orange to indicate on - rgblight_sethsv_at(15,255,120,24); - rgblight_sethsv_at(15,255,120,25); - rgblight_sethsv_at(15,255,120,26); - rgblight_sethsv_at(15,255,120,27); - } - else { - rgblight_sethsv_at(180,255,120,24); //Set LEDs back to purple, assuming on that coloured layer - rgblight_sethsv_at(180,255,120,25); - rgblight_sethsv_at(180,255,120,26); - rgblight_sethsv_at(180,255,120,27); - } - } - return false; - - case TEAMSMUTE: //Mute MS teams and simply change LED for key 1 colour - if (record->event.pressed) { - register_code(KC_LCTRL); - register_code(KC_LSFT); - register_code(KC_M); - unregister_code(KC_M); - unregister_code(KC_LSFT); - unregister_code(KC_LCTRL); - teams_muted ^= 1; - if(teams_muted==1) { //Change LED colour on LEDs for key 1 and underglow to orange to indicate muted - rgblight_sethsv_at(15,255,120,18); - rgblight_sethsv_at(15,255,120,22); - } - else { - rgblight_sethsv_at(175,255,120,18); //Set LEDs back to violet, assuming on that coloured layer - rgblight_sethsv_at(175,255,120,22); - } - } - return true; - } - return true; -} - - -// RGB Layer Light Settings - Note that this will fix the key switch LED colour and brightness -const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Spring green (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 5,255,120}); //Yellow-orange (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); //Cyan (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); //Magenta (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 15,255,120}); //Orange-red (Code is extra for static key lighting of layers) -const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers - my_layer0_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_layer4_layer -); - - -void keyboard_post_init_user(void) { //run as last task in keyboard init - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_layers = my_rgb_layers;// Enable the LED layers - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 - layer_move(0); //start on layer 0 to get the lighting activated - #endif -}; - - -#ifdef RGBLIGHT_ENABLE -layer_state_t layer_state_set_user(layer_state_t state) { - rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active - rgblight_set_layer_state(1, layer_state_cmp(state, 1)); - rgblight_set_layer_state(2, layer_state_cmp(state, 2)); - rgblight_set_layer_state(3, layer_state_cmp(state, 3)); - rgblight_set_layer_state(4, layer_state_cmp(state, 4)); - - /*static uint16_t underglow_brightness = 140; //This code can be used to have edge and underglow LEDs selectively brighter - static uint16_t perkey_brightness = 80; - static uint16_t lastrow_brightness = 50; //for less shine-through at case edges (brighter is okay for FR4 plate) - static uint16_t current_hue = 0; //hue calculated to be used - static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue - static uint16_t layer0_hueincrement = 2; //hue gradient colour increment - static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green - static uint16_t layer1_hueincrement = 2; //hue gradient colour increment - static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) - static uint16_t layer2_hueincrement = 2; //hue gradient colour increment - static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple - static uint16_t layer3_hueincrement = 2; //hue gradient colour increment - static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red - static uint16_t layer4_hueincrement = 1; //hue gradient colour increment - */ - // This is what the LED layout is. - // 1, 0, - // 3, 2, - // 9, 8, 7, 6, 5, 4, - // 13, 12, 11, 10, - // 18, 17, 16, 15, 14, - // 22, 21, 20, 19, - // 27, 26, 25, 24, 23 - - switch(biton32(state)){ // Change all other LEDs based on layer state as well - case 0: - rgblight_sethsv_noeeprom(50,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case 1: - rgblight_sethsv_noeeprom(5,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case 2: - rgblight_sethsv_noeeprom(128,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case 3: - rgblight_sethsv_noeeprom(215,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - case 4: - rgblight_sethsv_noeeprom(15,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; - } - return state; - }; -#endif diff --git a/keyboards/solartempest/ps17/keymaps/via/rules.mk b/keyboards/solartempest/ps17/keymaps/via/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/config.h b/keyboards/solartempest/ps17/keymaps/via_bright/config.h deleted file mode 100644 index 4bbacd9a507b..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via_bright/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once - -// Set 10 layers for VIA -#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c b/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c deleted file mode 100644 index 6c422f8be38d..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via_bright/keymap.c +++ /dev/null @@ -1,332 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include QMK_KEYBOARD_H -#include "PS17.h" -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = USER00, //Alt tab forwards - ATABR //Alt tab reverse - }; -#else - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR //Alt tab reverse - }; -#endif - - -enum combos { //Tap combos - kppls_7, - kppls_8 -}; - -const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; -const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; - -combo_t key_combos[COMBO_COUNT] = { - [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), - [kppls_8] = COMBO(kppl8_combo, KC_DELETE) -}; - - -// Tap Dance declarations -enum { - TD_MINUS_NUMLOCK, -}; - -// Tap Dance definitions. Not VIA compatible. -qk_tap_dance_action_t tap_dance_actions[] = { - // Tap once for Escape, twice for Caps Lock - [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), -}; -//TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode - - -enum layer_names { - _LAYER0, - _LAYER1, - _LAYER2, - _LAYER3, - _LAYER4, - _LAYER5, - _LAYER6, - _LAYER7, - _LAYER8, - _LAYER9 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAYER0] = LAYOUT( - KC_PGDOWN, KC__MUTE, KC_PGUP, - MO(_LAYER1), KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, - KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, - KC_KP_4, KC_KP_5, KC_KP_6, - KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, - KC_KP_0, KC_KP_DOT - ), - [_LAYER1] = LAYOUT( - KC_RIGHT, KC_TRNS, KC_LEFT, - KC_TRNS, KC_MEDIA_STOP, KC_SPACE, KC_NUMLOCK, - TO(_LAYER4), TG(_LAYER2), TG(_LAYER3), KC_BSPACE, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, RESET, - RESET, KC_TRNS - ), - [_LAYER2] = LAYOUT( - KC_RBRACKET, KC_TRNS, KC_LBRACKET, - TO(0), KC_B, KC_T, C(S(KC_N)), - KC_J, KC_S, KC_D, C(KC_MINS), - C(KC_C), C(KC_V), KC_M, - C(KC_N), C(S(KC_Z)), KC_LSHIFT, C(KC_PPLS), - KC_SPACE, KC_LALT - ), - [_LAYER3] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_WWW_REFRESH, KC_HOME, C(KC_T), - C(S(KC_TAB)), KC_UP, C(KC_TAB), C(KC_W), - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_WWW_BACK, KC_SPACE, KC_WWW_FORWARD, KC_ENTER, - KC_PGDOWN, KC_PGUP - ), - [_LAYER4] = LAYOUT( - ATABF, KC_TRNS, ATABR, - TO(0), KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_RIGHT, - C(S(KC_M)), LWIN(KC_F4), KC_TRNS, KC_NUMLOCK, - KC_F13, KC_F14 - ), - [_LAYER5] = LAYOUT( - 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 - ), - [_LAYER6] = LAYOUT( - 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 - ), - [_LAYER7] = LAYOUT( - 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 - ), - [_LAYER8] = LAYOUT( - 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 - ), - [_LAYER9] = LAYOUT( - 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 - ) -}; - - -void matrix_init_user(void) { //run when matrix is initiated, before all features init -}; - -void matrix_scan_user(void) { //run whenever user matrix is scanned - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { //Actions to override existing key behaviours - switch (keycode) { //For super alt tab keycodes - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - break; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - break; - } - return true; -}; - - -void keyboard_post_init_user(void) { //run as last task in keyboard init - #ifdef RGB_MATRIX_ENABLE - //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode - //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode - //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode - rgb_matrix_sethsv_noeeprom(58, 255, 80); //sets LED to green-yellow - #endif - #ifdef RGBLIGHT_ENABLE - rgblight_enable(); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9. Looks great this way! - rgblight_sethsv(58, 255, 100); //Set lower default brightness when connected as the right side dimming is not yet in effect - layer_move(0); //start on layer 0 to get the lighting activated - #endif -}; - - -#ifdef RGBLIGHT_ENABLE -layer_state_t layer_state_set_user(layer_state_t state) { - switch (get_highest_layer(state)) { - //This custom layer lighting is similar to RGB Light Gradient 9, but customized to separate key and case underglow brightness - static uint16_t underglow_brightness = 120; - static uint16_t perkey_brightness = 120; - static uint16_t lastrow_brightness = 30; //for less shine-through at case edges - static uint16_t current_hue = 0; //hue calculated to be used - static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue - static uint16_t layer0_hueincrement = 2; //hue gradient colour increment - static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green - static uint16_t layer1_hueincrement = 2; //hue gradient colour increment - static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) - static uint16_t layer2_hueincrement = 2; //hue gradient colour increment - static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple - static uint16_t layer3_hueincrement = 2; //hue gradient colour increment - static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red - static uint16_t layer4_hueincrement = 1; //hue gradient colour increment - - /*#define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 1, 0, \ - 3, 2, \ - 9, 8, 7, 6, 5, 4, \ - 13, 12, 11, 10, \ - 18, 17, 16, 15, 14,\ - 22, 21, 20, 19, \ - 27, 26, 25, 24, 23 )*/ - - case _LAYER0: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER1: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER2: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code is for normal gradient colouration - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER3: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - break; - case _LAYER4: - for (uint8_t i = 0; i < RGBLED_NUM; i++){ - current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - }; - } - return state; - }; -#endif diff --git a/keyboards/solartempest/ps17/keymaps/via_bright/rules.mk b/keyboards/solartempest/ps17/keymaps/via_bright/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/solartempest/ps17/keymaps/via_bright/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/solartempest/ps17/ps17 VIA keymap.json b/keyboards/solartempest/ps17/ps17 VIA keymap.json deleted file mode 100644 index d906b47dbb7a..000000000000 --- a/keyboards/solartempest/ps17/ps17 VIA keymap.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "PS17" , - "vendorId": "0x414B", - "productId": "0x0015", - "lighting": "qmk_rgblight", - "matrix": { "rows": 6, "cols": 4 }, - "customKeycodes": [ - { - "name": "Super Alt Tab FWD", - "title": "Alt Tab Forwards in Windows", - "shortName": "ATABF" - }, - { - "name": "Super Alt Tab REV", - "title": "Alt Tab Reverse in Windows", - "shortName": "ATABR" - }, - { - "name": "Move Window Right", - "title": "Move Window Right in Windows", - "shortName": "MWR" - }, - { - "name": "Move Window Left", - "title": "Move Window Left in Windows", - "shortName": "MWL" - }, - { - "name": "Spam Arrow", - "title": "Toggle F24 on interval timer with Orange LED", - "shortName": "SA" - }, - { - "name": "Teams Muted", - "title": "Simply Change LED of 1 to show if muted or not", - "shortName": "TM" - } - ], - "layouts": - { - "keymap": - [ - [{"w": 1, "h":1.5},"0,0", "0,1", {"w": 1, "h":1.5},"0,2"], - [{"y":0.75}, "1,0", "1,1", "1,2", "1,3"], - [ "2,0", "2,1", "2,2", {"h":2},"2,3"], - [ "3,0","3,1","3,2"], - [ "4,0", "4,1", "4,2", {"h":2},"4,3"], - [{"w": 2},"5,0", "5,2"] - ] - } -} \ No newline at end of file diff --git a/keyboards/solartempest/ps17/ps17 VIA layout.json b/keyboards/solartempest/ps17/ps17 VIA layout.json deleted file mode 100644 index 6671cee90952..000000000000 --- a/keyboards/solartempest/ps17/ps17 VIA layout.json +++ /dev/null @@ -1,267 +0,0 @@ -{ - "name": "PS17", - "vendorProductId": 1095434261, - "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], - "layers": [ - [ - "C(KC_TAB)", - "C(KC_W)", - "C(S(KC_TAB))", - "KC_NO", - "TO(2)", - "KC_PSLS", - "KC_PAST", - "KC_PMNS", - "KC_P7", - "KC_P8", - "KC_P9", - "KC_PPLS", - "KC_P4", - "KC_P5", - "KC_P6", - "KC_NO", - "KC_P1", - "KC_P2", - "KC_P3", - "KC_PENT", - "KC_P0", - "KC_NO", - "KC_PDOT", - "KC_NO" - ], - [ - "KC_RGHT", - "KC_TRNS", - "KC_LEFT", - "KC_NO", - "TO(0)", - "KC_TRNS", - "KC_TRNS", - "KC_NLCK", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_BSPC", - "TO(5)", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "TO(2)", - "TO(3)", - "TO(4)", - "KC_TRNS", - "RESET", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_VOLU", - "KC_TRNS", - "KC_VOLD", - "KC_NO", - "TO(0)", - "KC_WWW_REFRESH", - "KC_WWW_HOME", - "C(S(KC_B))", - "C(S(KC_TAB))", - "KC_UP", - "C(KC_TAB)", - "USER04", - "KC_LEFT", - "KC_DOWN", - "KC_RGHT", - "KC_NO", - "USER05", - "KC_TRNS", - "KC_SLCK", - "KC_NLCK", - "KC_F13", - "KC_NO", - "KC_F14", - "KC_NO" - ], - [ - "USER00", - "KC_TRNS", - "USER01", - "KC_NO", - "TO(0)", - "KC_WWW_REFRESH", - "KC_HOME", - "C(KC_T)", - "C(S(KC_TAB))", - "KC_UP", - "C(KC_TAB)", - "C(KC_W)", - "KC_LEFT", - "KC_DOWN", - "KC_RGHT", - "KC_NO", - "KC_WWW_BACK", - "KC_SPC", - "KC_WWW_FORWARD", - "KC_ENT", - "KC_PGDN", - "KC_NO", - "KC_PGUP", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_NO" - ] - ] -} \ No newline at end of file diff --git a/keyboards/solartempest/ps17/ps17.c b/keyboards/solartempest/ps17/ps17.c deleted file mode 100644 index 54ae3f8ab053..000000000000 --- a/keyboards/solartempest/ps17/ps17.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include "ps17.h" - -bool encoder_update_user(uint8_t index, bool clockwise) { // QMK encoder functionality - #ifdef VIA_ENABLE //Add in VIA setting of rotary encoder keymap - if (index == 0) { // First encoder - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) }); //Time is 1 tick otherwise empty event - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) }); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) }); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) }); - } - } - /*if (clockwise) { //This code only works for single keypresses with the rotary encoder - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 0)); //Allow setting of keymap in VIA - } else { - tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 2)); //Allow setting of keymap in VIA - }*/ - #endif - return true; -} - -#ifdef RGB_MATRIX_ENABLE //Add in addressable LED underglow support with physical locations - led_config_t g_led_config = { { - //Key matrix to LED index - { NO_LED, NO_LED, NO_LED, NO_LED, }, - { 0, 1, 2, 3, }, - { 4, 5, 6, 7, }, - { 8, 9, 10, NO_LED, }, - { 11, 12, 13, 14, }, - { 15, NO_LED, 16, NO_LED, }, - - //Underglow matrix to LED index - { 21, NO_LED, NO_LED, 22, }, - { 20, NO_LED, NO_LED, 23, }, - { 19, NO_LED, NO_LED, 24, }, - { 18, NO_LED, NO_LED, 25, }, - { 17, 27, NO_LED, 26, } - }, { - // LED Key Index to Physical Position, calculated with Plot Digitizer and scaled PCB Image with center at {126,126} - {74,165},{108,165},{144,165},{179,165},{74,129},{109,129},{143,129},{188,121},{74,95},{109,95},{143,95},{73,60},{109,60},{144,60},{188,51},{91,25},{144,25}, - - // LED underglow - {61,26},{61,88},{61,158},{61,197},{61,232},{192,232},{192,196},{192,158},{192,87},{183,26},{127,24} - }, { - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, // LED Index to Flag. 4 for key backlight. - 2,2,2,2,2,2,2,2,2,2,2 // 2 for case underglow. - } }; -#endif diff --git a/keyboards/solartempest/ps17/ps17.h b/keyboards/solartempest/ps17/ps17.h deleted file mode 100644 index 64ebc5766887..000000000000 --- a/keyboards/solartempest/ps17/ps17.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once -#include "quantum.h" - -#ifdef RGBLIGHT_ENABLE - #define LAYOUT( \ - K00, K01, K02, \ - K10, K11, K12, K13, \ - K20, K21, K22, K23, \ - K30, K31, K32, \ - K40, K41, K42, K43, \ - K50, K52 \ - ) { \ - { K00, K01, K02, KC_NO }, \ - { K10, K11, K12, K13 }, \ - { K20, K21, K22, K23 }, \ - { K30, K31, K32, KC_NO }, \ - { K40, K41, K42, K43 }, \ - { K50, KC_NO, K52, KC_NO }, \ - } -#endif - -#ifdef RGB_MATRIX_ENABLE // Five empty rows of keys were added for RGB Matrix purposes. You must map to a key otherwise it will not work. - #define LAYOUT( \ - K00, K01, K02, \ - K10, K11, K12, K13, \ - K20, K21, K22, K23, \ - K30, K31, K32, \ - K40, K41, K42, K43, \ - K50, K52 \ - ) { \ - { K00, K01, K02, KC_NO }, \ - { K10, K11, K12, K13 }, \ - { K20, K21, K22, K23 }, \ - { K30, K31, K32, KC_NO }, \ - { K40, K41, K42, K43 }, \ - { K50, KC_NO, K52, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO }, \ - } -#endif diff --git a/keyboards/solartempest/ps17/readme.md b/keyboards/solartempest/ps17/readme.md deleted file mode 100644 index bd9504222899..000000000000 --- a/keyboards/solartempest/ps17/readme.md +++ /dev/null @@ -1,39 +0,0 @@ -# Atlantis PS17 Macropad - -![Atlantis PS17](https://i.imgur.com/Y0rkPgA.jpg) - -A 17-key macro pad with pushbutton rotary encoder and underglow RGB per key RGB and for the case. - -For detailed instructions on using VIA and flashing, please refer to the sections further down the page! - -* Keyboard Maintainer: solartempest -* Hardware Supported: Atlantis PS17 v2 -* Hardware Availability: [rioo897](https://shop198276076.world.taobao.com/index.htm?spm=2013.1.w5002-23418336364.2.3f4d7d51DkVX3s) - -# Custom Features: - -- Remappable rotary encoder controls volume up/down/mute. -- Allows for remapping of per-layer rotary encoder functions in VIA. -- VIA support included by default. -- RGB underglow and matrix support and remapped to physical locations (nicer gradient and effects). -- Adds custom layer lighting with custom gradients for each. -- Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders. -- Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders. -- Adds key combo functionality for backspace, delete, and arrow keys. - -## Make and Flashing - -Make example for this keyboard (after setting up your build environment): - - qmk compile -kb solartempest/ps17 -km via - -To reset the board into bootloader mode, tap the Reset switch mounted on the bottom of the PCB. -Flash with QMK toolbox, auto-flash. - -## Using with VIA - -- After flashing, in VIA make sure to Import Keymap, which is "ps17 VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. -- Go to Save+Load to Load Saved Layout. You can import my own layout "ps17 VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. -- It is a good idea to Save Current Layout after you decide on your mapping. - -See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/solartempest/ps17/rules.mk b/keyboards/solartempest/ps17/rules.mk deleted file mode 100644 index 0b5dd1c97afa..000000000000 --- a/keyboards/solartempest/ps17/rules.mk +++ /dev/null @@ -1,25 +0,0 @@ -# MCU name -MCU = atmega32u4 - -# Bootloader selection -BOOTLOADER = atmel-dfu - -# Build Options -# change yes to no to disable -# - -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration -CONSOLE_ENABLE = no # Console for debug -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -NKRO_ENABLE = yes # USB Nkey Rollover -RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow -RGB_MATRIX_ENABLE = no # RGB matrix for individual LED control -RGB_MATRIX_DRIVER = WS2812 # Addressable LED strand driver -UNICODE_ENABLE = yes # Unicode -ENCODER_ENABLE = yes # For encoder -LTO_ENABLE = yes # Reduce firmware size -COMBO_ENABLE = yes # Combos -TAP_DANCE_ENABLE = no # Tap dance - -IDLE_TIMEOUT_ENABLE = yes # Turn LEDs off after inactive time diff --git a/keyboards/solartempest/sofle/.noci b/keyboards/solartempest/sofle/.noci deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h deleted file mode 100644 index f0292a3d05e5..000000000000 --- a/keyboards/solartempest/sofle/config.h +++ /dev/null @@ -1,119 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . -*/ - -#pragma once -#include "config_common.h" - -// USB Device descriptor parameter -#define VENDOR_ID 0xFC32 -#define PRODUCT_ID 0x1287 //Original is 0x0287 but do not want to load default VIA keymap -#define DEVICE_VER 0x0002 -#define MANUFACTURER Keyhive -#define PRODUCT Solarius_Sofle //VIA version for this PCB is incorrect for the bottom row -#define DESCRIPTION Rose version of the Sofle - -// Set which side is master -//#define EE_HANDS //Use this instead for EEPROM setting -#define MASTER_LEFT - -// Key matrix size -// Rows are doubled-up. Added extra column for rotary encoder VIA mapping. -#define MATRIX_ROWS 10 -#define MATRIX_COLS 7 - -// wiring of each half -#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 } -#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, C7 } //C7 is unused on the MCU. It is needed for the encoder key matrix in via. -#define MATRIX_ROW_PINS_RIGHT { C6, D7, E6, B4, B5 } -#define MATRIX_COL_PINS_RIGHT { F6, F7, B1, B3, B2, B6, C7 } //C7 is unused on the MCU. It is needed for the encoder key matrix in via. -#define DIODE_DIRECTION COL2ROW - -#define DEBOUNCE 5 - -// Encoder support -#define ENCODERS_PAD_A { F5 } -#define ENCODERS_PAD_B { F4 } -#define ENCODERS_PAD_A_RIGHT { F4 } -#define ENCODERS_PAD_B_RIGHT { F5 } -#define ENCODER_RESOLUTIONS { 4, 2 } //Left encoder seems to have double-output issue but right does not. - -#define TAP_CODE_DELAY 10 -#define TAPPING_TOGGLE 2 //Tap TT twice to toggle layer -#define TAPPING_TERM 160 //Tapping duration in ms - -// Communication between sides -#define SOFT_SERIAL_PIN D2 - -// Disabled for LTO -#define NO_ACTION_MACRO -#define NO_ACTION_FUNCTION - -// Disabled to save space -#define NO_ACTION_ONESHOT //Save 244 bytes -#define NO_RESET //Save 40 bytes - -// OLED settings -#ifdef OLED_ENABLE - #define OLED_TIMEOUT 80000 //120000 = 2 minutes in ms. - #define OLED_BRIGHTNESS 90 // Default 100. - #define SPLIT_WPM_ENABLE //Enable WPM across split keyboards (+268). - #define SPLIT_OLED_ENABLE //Synx on/off OLED state between halves (+100). -#endif - -// Combo settings -#ifdef COMBO_ENABLE - #define COMBO_COUNT 1 //Number of tap combos used - #define COMBO_TERM 400 //Default combo time is 200ms. This is the time delay allowed between deleting each whole word with shift-backspace. -#endif - -// Add RGB underglow -#define RGB_DI_PIN D3 -#define RGBLED_NUM 74 -#define RGBLED_SPLIT {37,37} -//#define RGBLIGHT_ANIMATIONS // Very memory intensive -#define RGBLIGHT_EFFECT_STATIC_GRADIENT //Firmware size (+262) -#define RGBLIGHT_LIMIT_VAL 160 //Power draw may exceed 0.6A at max brightness with white colour. -#define RGBLIGHT_LAYERS -#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF -#define RGBLIGHT_SLEEP - - -//RGB LED Conversion macro from physical array to electric array (+146 to firmware size) -//First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping -#define LED_LAYOUT( \ - L00, L01, L02, L03, L04, L05, L08, L09, L010, L011, L012, L013, \ - L10, L12, L14, L19, L111, L113, \ - L20, L21, L22, L23, L24, L25, L28, L29, L210, L211, L212, L213, \ - L30, L31, L32, L33, L34, L35, L38, L39, L310, L311, L312, L313, \ - L40, L42, L44, L49, L411, L413, \ - L50, L51, L52, L53, L54, L55, L58, L59, L510, L511, L512, L513, \ - L62, L63, L64, L65, L66, L67, L68, L69, L610, L611, \ - L71, L76, L77, L712 )\ - { \ - L14,L12,L10,L40,L42,L44,L71,L76,L66,L65,L55,L35,L25,L05,L04,L24,L34,L54,L64,L63,L53,L33,L23,L03,L02,L22,L32,L52,L62,L51,L31,L21,L01,L00,L20,L30,L50,L19,L111,L113,L413,L411,L49,L712,L77,L67,L68,L58,L38,L28,L08,L09,L29,L39,L59,L69,L610,L510,L310,L210,L010,L011,L211,L311,L511,L611,L512,L312,L212,L012,L013,L213,L313,L513, \ - } -//RGB LED logical order map -#define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 5, 6, 17, 18, 29, 30, 43, 44, 55, 56, 67, 68, \ - 4, 16, 28, 45, 57, 69, \ - 3, 7, 15, 19, 27, 31, 42, 46, 54, 58, 66, 70, \ - 2, 8, 14, 20, 26, 32, 41, 47, 53, 59, 65, 71, \ - 1, 13, 25, 48, 60, 72, \ - 0, 9, 12, 21, 24, 33, 40, 49, 52, 61, 64, 73, \ - 11, 22, 23, 34, 35, 38, 39, 50, 51, 62, \ - 10, 36, 37, 63 ) diff --git a/keyboards/solartempest/sofle/info.json b/keyboards/solartempest/sofle/info.json deleted file mode 100644 index 16147f76dd51..000000000000 --- a/keyboards/solartempest/sofle/info.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "keyboard_name": "Solarius_Sofle", - "url": "", - "maintainer": "solartempest", - "width": 15, - "height": 8.0, - "layouts": { - "LAYOUT": { - "layout": [{"label":"0,3", "x":3.25, "y":0.5}, {"label":"5,3", "x":13.25, "y":0.5}, {"label":"0,2", "x":2.25, "y":0.63}, {"label":"0,4", "x":4.25, "y":0.63}, {"label":"5,4", "x":12.25, "y":0.63}, {"label":"5,2", "x":14.25, "y":0.63}, {"label":"0,5", "x":5.25, "y":0.73}, {"label":"5,5", "x":11.25, "y":0.73}, {"label":"0,0", "x":0.25, "y":0.86}, {"label":"0,1", "x":1.25, "y":0.86}, {"label":"5,1", "x":15.25, "y":0.86}, {"label":"5,0", "x":16.25, "y":0.86}, {"label":"1,3", "x":3.25, "y":1.46}, {"label":"1,6", "x":6.45, "y":1.46}, {"label":"6,6", "x":10.05, "y":1.46}, {"label":"6,3", "x":13.25, "y":1.46}, {"label":"1,2", "x":2.25, "y":1.56}, {"label":"1,4", "x":4.25, "y":1.56}, {"label":"6,4", "x":12.25, "y":1.56}, {"label":"6,2", "x":14.25, "y":1.56}, {"label":"1,5", "x":5.25, "y":1.66}, {"label":"6,5", "x":11.25, "y":1.66}, {"label":"1,0", "x":0.25, "y":1.76}, {"label":"1,1", "x":1.25, "y":1.76}, {"label":"6,1", "x":15.25, "y":1.76}, {"label":"6,0", "x":16.25, "y":1.76}, {"label":"2,3", "x":3.25, "y":2.36}, {"label":"4,0", "x":6.45, "y":2.36}, {"label":"9,5", "x":10.05, "y":2.36}, {"label":"7,3", "x":13.25, "y":2.36}, {"label":"2,2", "x":2.25, "y":2.46}, {"label":"2,4", "x":4.25, "y":2.46}, {"label":"7,4", "x":12.25, "y":2.46}, {"label":"7,2", "x":14.25, "y":2.46}, {"label":"2,5", "x":5.25, "y":2.56}, {"label":"7,5", "x":11.25, "y":2.56}, {"label":"2,0", "x":0.25, "y":2.66}, {"label":"2,1", "x":1.25, "y":2.66}, {"label":"7,1", "x":15.25, "y":2.66}, {"label":"7,0", "x":16.25, "y":2.66}, {"label":"3,3", "x":3.25, "y":3.26}, {"label":"3,6", "x":6.45, "y":3.26}, {"label":"8,6", "x":10.05, "y":3.26}, {"label":"8,3", "x":13.25, "y":3.26}, {"label":"3,2", "x":2.25, "y":3.36}, {"label":"3,4", "x":4.25, "y":3.36}, {"label":"8,4", "x":12.25, "y":3.36}, {"label":"8,2", "x":14.25, "y":3.36}, {"label":"3,5", "x":5.25, "y":3.46}, {"label":"8,5", "x":11.25, "y":3.46}, {"label":"3,0", "x":0.25, "y":3.56}, {"label":"3,1", "x":1.25, "y":3.56}, {"label":"8,1", "x":15.25, "y":3.56}, {"label":"8,0", "x":16.25, "y":3.56}, {"label":"4,2", "x":3.25, "y":4.26}, {"label":"9,1", "x":13.25, "y":4.26}, {"label":"4,3", "x":4.25, "y":4.36}, {"label":"9,2", "x":12.25, "y":4.36}, {"label":"4,1", "x":2.25, "y":4.36}, {"label":"9,0", "x":14.25, "y":4.36}, {"label":"4,4", "x":1, "y":9.96}, {"label":"4,5", "x":3.35, "y":8.71, "h":1.5}, {"label":"9,3", "x":0.8, "y":11.56}, {"label":"9,4", "x":-2.08, "y":11.01, "h":1.5}] - } - } -} diff --git a/keyboards/solartempest/sofle/keymaps/via/bongocat.c b/keyboards/solartempest/sofle/keymaps/via/bongocat.c deleted file mode 100644 index 0a60f6bee0e5..000000000000 --- a/keyboards/solartempest/sofle/keymaps/via/bongocat.c +++ /dev/null @@ -1,212 +0,0 @@ -/* Code is by foureight84 and modified slightly. This may need some updates for the 2021-08-30 breaking changes. -Check out their post and other work! -https://www.reddit.com/r/olkb/comments/lxw6jw/adapted_bongo_cat_animation_to_the_sofle_keyboard/ -https://github.com/foureight84/qmk_firmware/tree/sofle_foureight84 */ - -#ifdef OLED_ENABLE -char wpm_str[4]; -led_t led_usb_state; - -static void print_status_narrow(void) { -/* // Print current mode - oled_write_P(PSTR("\n\n"), false); - oled_write_ln_P(PSTR("MODE"), false); - oled_write_ln_P(PSTR(""), false); - if (keymap_config.swap_lctl_lgui) { - oled_write_ln_P(PSTR("MAC"), false); - } else { - oled_write_ln_P(PSTR("WIN"), false); - } - - switch (get_highest_layer(default_layer_state)) { - case _QWERTY: - oled_write_ln_P(PSTR("Qwrt"), false); - break; - case _COLEMAK: - oled_write_ln_P(PSTR("Clmk"), false); - break; - default: - oled_write_P(PSTR("Undef"), false); - } - oled_write_P(PSTR("\n\n"), false);*/ - // Print current layer - oled_set_cursor(0,2); - oled_write("LAYER", false); - - oled_set_cursor(0,3); - switch (get_highest_layer(layer_state)) { - case 0: - oled_write("Base ", false); - break; - case 1: - oled_write("Game ", false); - break; - case 3: - oled_write("Raise", false); - break; - case 2: - oled_write("Lower", false); - break; - } - - /* lock status */ - oled_set_cursor(0,6); - oled_write("LOCK", false); - oled_set_cursor(0,7); - oled_write("Caps", led_usb_state.caps_lock); - oled_set_cursor(0,8); - oled_write("Num", !(led_usb_state.num_lock)); - oled_set_cursor(0,9); - oled_write("Scrl", led_usb_state.scroll_lock); -} - -oled_rotation_t oled_init_user(oled_rotation_t rotation) { - return OLED_ROTATION_270; -} - -/* Animation bit by j-inc https://github.com/qmk/qmk_firmware/tree/master/keyboards/kyria/keymaps/j-inc */ -// WPM-responsive animation stuff here -#define IDLE_FRAMES 5 -#define IDLE_SPEED 20 // below this wpm value your animation will idle. Default 30. - -// #define PREP_FRAMES 1 // uncomment if >1 - -#define TAP_FRAMES 2 -#define TAP_SPEED 40 // above this wpm value typing animation to trigger. Default 60. - -#define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms -// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing -#define ANIM_SIZE 320 // number of bytes in array, minimize for adequate firmware size, max is 1024 - -uint32_t anim_timer = 0; -uint32_t anim_sleep = 0; -uint8_t current_idle_frame = 0; -// uint8_t current_prep_frame = 0; // uncomment if PREP_FRAMES >1 -uint8_t current_tap_frame = 0; - -// Implementation credit j-inc(/James Incandenza), pixelbenny, and obosob. -// Bongo cat images changed and adapted for sofle keyboard oled size. -// Original gif can be found here: https://www.pixilart.com/art/bongo-cat-bd2a8e9323aa705 -static void render_anim(void) { - static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = { - { - 0x00, 0xc0, 0x3e, 0x01, 0x00, 0x00, 0x00, 0xc0, 0xfc, 0x03, 0x00, 0x03, 0x0c, 0x30, 0xc0, 0x00, - 0xe1, 0x1e, 0x00, 0xc0, 0xbc, 0x83, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x03, 0x00, 0x00, 0x00, 0x80, 0x78, 0x87, 0x00, 0x03, 0x0c, 0x30, 0xc0, 0x00, 0xe0, 0x1f, - 0x01, 0xc0, 0x3c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x31, 0x05, 0x41, 0x12, 0x04, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0x87, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0xc0, 0x3f, 0x03, 0x80, - 0x78, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x05, - 0x00, 0x00, 0xf0, 0xcf, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0x80, 0x79, 0x07, 0x80, 0x78, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe0, 0x1e, 0x01, 0x00, 0x03, 0x0c, 0x30, 0xc0, 0x00, 0xf9, 0x07, 0x80, 0x78, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x2c, 0x32, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x03, 0x0c, 0x30, 0xc0, 0x00, 0x00, 0xf0, 0x0f, 0x80, 0x78, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x60, 0x80, 0x00, 0x00, 0xe1, 0x1e, 0x01, 0xf0, 0x8f, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x09, 0x0e, 0x0e, 0x01, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x19, - 0x19, 0x41, 0x0a, 0x22, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x70, 0x80, - 0x00, 0x00, 0xf0, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x02, 0x01, - } - }; - static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = { - { - 0x00, 0xc0, 0x3e, 0x01, 0x00, 0x00, 0x00, 0xc0, 0xfc, 0xff, 0xff, 0xff, 0x7c, 0x70, 0x40, 0x40, - 0x61, 0x5e, 0x80, 0xc0, 0xbc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x03, 0x00, 0x00, 0x00, 0x80, 0x78, 0x87, 0x00, 0x03, 0x0f, 0x3f, 0xf8, 0xf0, 0xf0, 0x20, - 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0x87, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0xc0, 0x3f, 0x03, 0x80, - 0x78, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, - 0x00, 0x00, 0xf0, 0xcf, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0x80, 0x79, 0x07, 0x80, 0x78, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe0, 0x1e, 0x01, 0x00, 0x03, 0x0c, 0x30, 0xc0, 0x00, 0xf9, 0x07, 0x80, 0x78, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x2c, 0x32, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x03, 0x0c, 0x30, 0xc0, 0x00, 0x00, 0xf0, 0x0f, 0x80, 0x78, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x60, 0x80, 0x00, 0x00, 0xe1, 0x1e, 0x01, 0xf0, 0x8f, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x09, 0x0e, 0x0e, 0x01, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x19, - 0x19, 0x41, 0x0a, 0x22, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x70, 0x80, - 0x00, 0x00, 0xf0, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x02, 0x01, - }, - { - 0x00, 0xc0, 0x3e, 0x01, 0x00, 0x00, 0x00, 0xc0, 0xfc, 0x03, 0x00, 0x03, 0x0c, 0x30, 0xc0, 0x00, - 0xe1, 0x1e, 0x00, 0xc0, 0xbc, 0x83, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x03, 0x00, 0x00, 0x00, 0x80, 0x78, 0x87, 0x00, 0x03, 0x0c, 0x30, 0xc0, 0x00, 0xe0, 0x1f, - 0x01, 0xc0, 0x3c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x31, 0x05, 0x41, 0x12, 0x04, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0x87, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0xc0, 0x3f, 0x03, 0x80, - 0x78, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x05, - 0x00, 0x00, 0xf0, 0xcf, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0x80, 0x79, 0x07, 0x80, 0x78, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe0, 0xfe, 0xff, 0xff, 0xff, 0xfc, 0xf0, 0xc0, 0x00, 0xf9, 0x07, 0x80, 0x78, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x2c, 0x32, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x03, 0x0f, 0x3f, 0xff, 0x03, 0x01, 0x03, 0x07, 0x18, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x60, 0x80, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x09, 0x0e, 0x0e, 0x01, 0xf3, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x70, 0x80, - 0x00, 0x00, 0xf0, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x02, 0x01 - }, - }; - - //assumes 1 frame prep stage - void animation_phase(void) { - if(get_current_wpm() <=IDLE_SPEED){ - /* - current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES; - oled_write_raw_P(idle[abs((IDLE_FRAMES-1)-current_idle_frame)], ANIM_SIZE); - */ - oled_write_raw_P(idle[0], ANIM_SIZE); - } - /* - if(get_current_wpm() >IDLE_SPEED && get_current_wpm() 1 - oled_write_raw_P(prep[0], ANIM_SIZE); // remove if IDLE_FRAMES >1 - }*/ - if(get_current_wpm() >=TAP_SPEED){ - current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES; - oled_write_raw_P(tap[abs((TAP_FRAMES-1)-current_tap_frame)], ANIM_SIZE); - } - } - if(get_current_wpm() != 000) { - oled_on(); // not essential but turns on animation OLED with any alpha keypress - if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { - anim_timer = timer_read32(); - animation_phase(); - } - anim_sleep = timer_read32(); - } else { - if(timer_elapsed32(anim_sleep) > OLED_TIMEOUT) { - oled_off(); - } else { - if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { - anim_timer = timer_read32(); - animation_phase(); - } - } - } -} - -void oled_task_user(void) { - led_usb_state = host_keyboard_led_state(); - if (is_keyboard_master()) { - print_status_narrow(); - } else { - oled_set_cursor(0,1); - render_anim(); - oled_set_cursor(0,13); - sprintf(wpm_str, " %03d\n WPM", get_current_wpm()); - oled_write(wpm_str, false); - } -} -#endif diff --git a/keyboards/solartempest/sofle/keymaps/via/config.h b/keyboards/solartempest/sofle/keymaps/via/config.h deleted file mode 100644 index 8970276c8774..000000000000 --- a/keyboards/solartempest/sofle/keymaps/via/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . -*/ - -#pragma once - -// Set number of layers for VIA, each is 30 bytes -#define DYNAMIC_KEYMAP_LAYER_COUNT 4 diff --git a/keyboards/solartempest/sofle/keymaps/via/encoder.c b/keyboards/solartempest/sofle/keymaps/via/encoder.c deleted file mode 100644 index 58bffb8e91c3..000000000000 --- a/keyboards/solartempest/sofle/keymaps/via/encoder.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#ifdef ENCODER_ENABLE -bool encoder_update_user(uint8_t index, bool clockwise) { //Allows for remapping of rotary encoder functions in VIA - if (index == 0) { - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 6}, .pressed = true, .time = (timer_read() | 1) }); - action_exec((keyevent_t){.key = (keypos_t){.row = 1, .col = 6}, .pressed = false, .time = (timer_read() | 1) }); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 6}, .pressed = true, .time = (timer_read() | 1) }); - action_exec((keyevent_t){.key = (keypos_t){.row = 3, .col = 6}, .pressed = false, .time = (timer_read() | 1) }); - } - } else if (index == 1) { - if (clockwise) { //Double check rotation on new flash versus via mapping - action_exec((keyevent_t){.key = (keypos_t){.row = 6, .col = 6}, .pressed = true, .time = (timer_read() | 1) }); - action_exec((keyevent_t){.key = (keypos_t){.row = 6, .col = 6}, .pressed = false, .time = (timer_read() | 1) }); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 8, .col = 6}, .pressed = true, .time = (timer_read() | 1) }); - action_exec((keyevent_t){.key = (keypos_t){.row = 8, .col = 6}, .pressed = false, .time = (timer_read() | 1) }); - } - } - return true; -} -#endif diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c deleted file mode 100644 index a61dfcd01236..000000000000 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ /dev/null @@ -1,334 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#include QMK_KEYBOARD_H -#include //This is required for OLED sprintf. -#include "encoder.c" -#ifdef OLED_ENABLE - //#include "oled.c" //Stock OLED code - //Note that the keyboard animations below take a large amount of space! - //#include "bongocat.c" //OLED code for Bongocat, original code by foureight84. Disable RGBLIGHT to make enough space. - //#include "luna.c" //OLED code for Luna, original code by Hellsingcoder and adapted by Jackasaur. - #include "snakey.c" //OLED code for Snakey, customized from Luna. -#endif - -#ifdef RGBLIGHT_ENABLE - extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT -#endif - - -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; -bool lshift_held = false; // LShift Backspace Delete whole Word Code -bool rshift_held = false; // RShift Backspace Delete whole Word Code -static uint16_t held_shift = 0; -#ifdef VIA_ENABLE - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = USER00, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SBS //Shift backspace to delete whole word (Swap KC_BPSC with this) - }; -#else - enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. - ATABF = SAFE_RANGE, //Alt tab forwards - ATABR, //Alt tab reverse - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SBS //Shift backspace to delete whole word (Swap KC_BPSC with this) - }; -#endif - - -#ifdef COMBO_ENABLE //(+42 firmware size for this combo). SBS takes care of this combo, so it is an example only and can be replaced with others as required. - enum combo_events { - sbs_delword - }; - - const uint16_t PROGMEM delword_combo[] = {KC_LSFT, KC_BSPC, COMBO_END}; //Shift-Backspace to delete whole words - combo_t key_combos[COMBO_COUNT] = { - [sbs_delword] = COMBO_ACTION(delword_combo) - }; - - void process_combo_event(uint16_t combo_index, bool pressed) { - switch(combo_index) { - case sbs_delword: - if (pressed) { - tap_code16(LCTL(KC_BSPC)); - } - break; - } - } -#endif - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these layouts to save space when using only VIA. -/* QWERTY - * ,-----------------------------------------. ,-----------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bspc | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' | - * |------+------+------+------+------+------| Enc | | Enc |------+------+------+------+------+------| - * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift| - * `-----------------------------------------/ / \ \-----------------------------------------' - * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | - * | | | | |/ / \ \ | | | | | - * `----------------------------------' '------''---------------------------' - */ -/*[0] = LAYOUT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC__VOLUP, KC_PGUP,KC_Y, KC_U, KC_I, KC_O, KC_P, SBS, - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_MUTE, KC_NO, 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__VOLDOWN,KC_PGDN,KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, - KC_LGUI,KC_LALT,KC_LCTRL,MO(2), KC_ENT, KC_SPC, MO(3), KC_RCTRL,KC_RALT,KC_RGUI -) -, -[1] = LAYOUT( - KC_PSCR, KC_5, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F4, - KC_T, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, - KC_G, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RALT, - KC_ENT, KC_B, KC_TRNS, KC_PAUS, KC_SPACE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS -), -[2] = LAYOUT( - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_RGHT, KC_TRNS,KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12, - KC_WREF, KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_TRNS, KC_TRNS,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN, KC_PIPE, - KC_TRNS, KC_EQL, KC_MINS,KC_PLUS,KC_LCBR,KC_LCBR,KC_LEFT, KC_TRNS,KC_LBRC,KC_RBRC,KC_DOT, KC_COLN,KC_BSLS, KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS -), -[3] = LAYOUT( - NML, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NMR, - KC_NLCK, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ATABF, NMR, KC_WFWD, KC_HOME, KC_UP, KC_END, KC_INS, KC_DEL, - KC_SLCK, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WBAK, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ATABR, NML, KC_CAPS, KC_PGUP, KC_TRNS, 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 -)*/ -}; - - -void matrix_init_user(void) { -} - -void matrix_scan_user(void) { - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } -} - - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - #ifdef KEYBOARD_PET - if (record->event.pressed) { //Drashna's OLED timeout off code for animations - oled_timer = timer_read32(); - } - #endif - - switch (keycode) { //For keycode overrides - case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - return true; - case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - return true; - - case NMR: //Move window to next monitor on right - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_RIGHT); - unregister_code(KC_RIGHT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - case NML: //Move window to next monitor on left - if (record->event.pressed) { - register_code(KC_LSFT); - register_code(KC_LWIN); - register_code(KC_LEFT); - unregister_code(KC_LEFT); - unregister_code(KC_LWIN); - unregister_code(KC_LSFT); - } - return true; - - case KC_RSFT: //Shift Backspace to Delete Whole Word. Inspired by Hellsingcoder. - rshift_held = record->event.pressed; - held_shift = keycode; - // KEYBOARD PET STATUS - #ifdef KEYBOARD_PET - if (record->event.pressed) { - isBarking = true; - } else { - isBarking = false; - } - #endif - return true; - case KC_LSFT: - lshift_held = record->event.pressed; - held_shift = keycode; - // KEYBOARD PET STATUS - #ifdef KEYBOARD_PET - if (record->event.pressed) { - isBarking = true; - } else { - isBarking = false; - } - #endif - return true; - case SBS: - if (record->event.pressed) { - if (lshift_held) { - unregister_code(held_shift); - register_code(KC_LCTL); - register_code(KC_BSPC); - } else if (rshift_held) { - unregister_code(held_shift); - register_code(KC_LCTL); - register_code(KC_DEL); - } else { - register_code(KC_BSPC); - } - } else { - unregister_code(KC_BSPC); - unregister_code(KC_DEL); - unregister_code(KC_LCTL); - if (lshift_held || rshift_held) { - register_code(held_shift); - } - } - return false; - - // KEYBOARD PET STATUS - #ifdef KEYBOARD_PET - case KC_LCTL: - case KC_RCTL: - if (record->event.pressed) { - isSneaking = true; - } else { - isSneaking = false; - } - return true; - case KC_SPC: - if (record->event.pressed) { - isJumping = true; - showedJump = false; - } else { - isJumping = false; - } - return true; - #endif - } - return true; -} - - -#ifdef OLED_ENABLE - void suspend_power_down_user(void) { //turn off OLEDs when computer is sleeping - oled_off(); - } -#endif - - -#ifdef RGBLIGHT_ENABLE - // RGB Layer Light Settings - Note that this will fix the key switch LED colour and brightness - const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Spring green (Change range for multiple keys with same colour) - const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 252,255,125}); //Red-orange (Change range for multiple keys with same colour) - const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); //Cyan (Change range for multiple keys with same colour) - const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); //Magenta (Change range for multiple keys with same colour) - const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 3, 43,100,170}); //White-left caps lock indication (No dedicated LED) - const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({28, 3, 43,100,170}); //White-right num lock indication (No dedicated LED). Since this indicator is inverted, it must be on the master side of the keyboard to shut off properly when the computer is sleeping. - const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({55, 3, 43,100,170}); //White-middle-right scroll lock indication (No dedicated LED) - const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers - my_layer0_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_capslock_layer, //Highest status indicators override other layers - my_numlock_layer, - my_scrollock_layer - ); - - - void keyboard_post_init_user(void) - { - rgblight_layers = my_rgb_layers;// Enable the LED layers - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 - layer_move(0); //start on layer 0 to get the lighting activated - } - - - layer_state_t layer_state_set_user(layer_state_t state) - { - rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active - rgblight_set_layer_state(1, layer_state_cmp(state, 1)); - rgblight_set_layer_state(2, layer_state_cmp(state, 2)); - rgblight_set_layer_state(3, layer_state_cmp(state, 3)); - - switch(biton32(state)){ // Change all other LEDs based on layer state as well - case 0: - rgblight_sethsv_noeeprom(50,255,80); - break; - case 1: - rgblight_sethsv_noeeprom(252,255,80); - break; - case 2: - rgblight_sethsv_noeeprom(118,255,80); - break; - case 3: - rgblight_sethsv_noeeprom(218,255,80); - } - return state; - } - - - bool led_update_user(led_t led_state) - { - rgblight_set_layer_state(4, led_state.caps_lock); //Activate capslock lighting layer - rgblight_set_layer_state(5, !(led_state.num_lock)); //Invert the indication so numlock does not always appear "on". - rgblight_set_layer_state(6, led_state.scroll_lock); //Activate scrollock lighting layer - return true; - } -#endif diff --git a/keyboards/solartempest/sofle/keymaps/via/luna.c b/keyboards/solartempest/sofle/keymaps/via/luna.c deleted file mode 100644 index 46721a60e743..000000000000 --- a/keyboards/solartempest/sofle/keymaps/via/luna.c +++ /dev/null @@ -1,309 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 Luna code adapted from HellSingCoder and Jackasaur - * 2021 QMK - * - * 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 o - * 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 . - */ - -//SSD1306 OLED update loop -#ifdef OLED_ENABLE - /* KEYBOARD PET START */ - #define KEYBOARD_PET - - /* settings */ - #define MIN_WALK_SPEED 10 - #define MIN_RUN_SPEED 40 - - /* advanced settings */ - #define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms - #define ANIM_SIZE 96 // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024 - - /* timers */ - uint32_t anim_timer = 0; - uint32_t anim_sleep = 0; - - /* current frame */ - uint8_t current_frame = 0; - - /* status variables */ - int current_wpm_read = 0; - uint32_t oled_timer = 0; //For Keyboard pet OLED timeout with animations, code by Drashna. - led_t led_usb_state; - - bool isSneaking = false; - bool isJumping = false; - bool showedJump = true; - bool isBarking = false; - - - /* logic */ - static void render_luna(int LUNA_X, int LUNA_Y) { - - /* Sit */ - static const char PROGMEM sit[2][ANIM_SIZE] = { - /* 'sit1', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, - 0x02, 0x05, 0x02, 0x24, 0x04, 0x04, 0x02, 0xa9, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x68, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x82, 0x7c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x10, 0x10, 0x20, 0x20, 0x20, 0x28, - 0x3e, 0x1c, 0x20, 0x20, 0x3e, 0x0f, 0x11, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - - /* 'sit2', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, - 0x02, 0x05, 0x02, 0x24, 0x04, 0x04, 0x02, 0xa9, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x90, 0x08, 0x18, 0x60, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0e, 0x82, 0x7c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x10, 0x10, 0x20, 0x20, 0x20, 0x28, - 0x3e, 0x1c, 0x20, 0x20, 0x3e, 0x0f, 0x11, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - } - }; - - /* Walk */ - static const char PROGMEM walk[2][ANIM_SIZE] = { - /* 'walk1', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x90, 0x90, 0x90, 0xa0, 0xc0, 0x80, 0x80, - 0x80, 0x70, 0x08, 0x14, 0x08, 0x90, 0x10, 0x10, 0x08, 0xa4, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0xea, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x20, 0x20, 0x3c, 0x0f, 0x11, 0x1f, 0x03, - 0x06, 0x18, 0x20, 0x20, 0x3c, 0x0c, 0x12, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - - /* 'walk2', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, - 0x00, 0xe0, 0x10, 0x28, 0x10, 0x20, 0x20, 0x20, 0x10, 0x48, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x20, 0xf8, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x30, 0xd5, 0x20, 0x1f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x30, 0x0c, 0x02, 0x05, 0x09, 0x12, 0x1e, - 0x02, 0x1c, 0x14, 0x08, 0x10, 0x20, 0x2c, 0x32, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; - - /* Run */ - static const char PROGMEM run[2][ANIM_SIZE] = { - /* 'run1', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x08, 0xc8, 0xb0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x40, 0x40, 0x3c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0xc4, 0xa4, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc8, 0x58, 0x28, 0x2a, 0x10, 0x0f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x09, 0x04, 0x04, 0x04, 0x04, 0x02, 0x03, 0x02, 0x01, 0x01, - 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - - /* 'run2', 32x22px */ - { - 0x00, 0x00, 0x00, 0xe0, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x80, 0x80, 0x78, 0x28, 0x08, 0x10, 0x20, 0x30, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0xb0, 0x50, 0x55, 0x20, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, - 0x02, 0x1e, 0x20, 0x20, 0x18, 0x0c, 0x14, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; - - /* Bark */ - static const char PROGMEM bark[2][ANIM_SIZE] = { - /* 'bark1', 32x22px */ - { - 0x00, 0xc0, 0x20, 0x10, 0xd0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, - 0x3c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xc8, 0x48, 0x28, 0x2a, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x02, - 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - - /* 'bark2', 32x22px */ - { - 0x00, 0xe0, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, - 0x40, 0x2c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x48, 0x28, 0x2a, 0x10, 0x0f, 0x20, 0x4a, 0x09, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x02, - 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; - - /* Sneak */ - static const char PROGMEM sneak[2][ANIM_SIZE] = { - /* 'sneak1', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc0, 0x40, 0x40, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1e, 0x21, 0xf0, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x04, - 0x04, 0x04, 0x03, 0x01, 0x00, 0x00, 0x09, 0x01, 0x80, 0x80, 0xab, 0x04, 0xf8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x20, 0x20, 0x3c, 0x0f, 0x11, 0x1f, 0x02, 0x06, - 0x18, 0x20, 0x20, 0x38, 0x08, 0x10, 0x18, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, - }, - - /* 'sneak2', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xe0, 0xa0, 0x20, 0x40, 0x80, 0xc0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3e, 0x41, 0xf0, 0x04, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x02, 0x04, - 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x40, 0x40, 0x55, 0x82, 0x7c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x30, 0x0c, 0x02, 0x05, 0x09, 0x12, 0x1e, 0x04, - 0x18, 0x10, 0x08, 0x10, 0x20, 0x28, 0x34, 0x06, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; - - /* animation */ - void animate_luna(void) { - - /* jump */ - if (isJumping || !showedJump) { - - /* clear */ - oled_set_cursor(LUNA_X,LUNA_Y +2); - oled_write(" ", false); - - oled_set_cursor(LUNA_X,LUNA_Y -1); - - showedJump = true; - } else { - - /* clear */ - oled_set_cursor(LUNA_X,LUNA_Y -1); - oled_write(" ", false); - - oled_set_cursor(LUNA_X,LUNA_Y); - } - - /* switch frame */ - current_frame = (current_frame + 1) % 2; - - /* current status */ - if(isBarking) { - oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); - - } else if(isSneaking) { - oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); - - } else if(current_wpm_read <= MIN_WALK_SPEED) { - oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); - - } else if(current_wpm_read <= MIN_RUN_SPEED) { - oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE); - - } else { - oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE); - } - } - - /* animation timer */ - if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { - anim_timer = timer_read32(); - animate_luna(); - } - } - - /* KEYBOARD PET END */ - - static void print_logo_narrow(void) { - oled_set_cursor(0,3); - oled_write("SOLAR", false); - oled_set_cursor(0,4); - oled_write("TMPST", false); - - /* wpm counter */ - char wpm_str[8]; - oled_set_cursor(0,10); - sprintf(wpm_str, " %03d", current_wpm_read); - oled_write(wpm_str, false); - oled_set_cursor(0,11); - oled_write(" wpm", false); - } - - static void print_status_narrow(void) { - /*switch (get_highest_layer(default_layer_state)) { //Not required as only one default layer is used - case 0: - oled_write("SOLAR", false); - break; - case 1: - oled_write("GAME", false); - break; - default: - oled_write("UNDEF", false); - }*/ - - /* Print current layer */ - oled_set_cursor(0,2); - oled_write("LAYER", false); - - oled_set_cursor(0,3); - switch (get_highest_layer(layer_state)) { - case 0: - oled_write("Base ", false); - break; - case 1: - oled_write("Game ", false); - break; - case 3: - oled_write("Raise", false); - break; - case 2: - oled_write("Lower", false); - break; - } - - /* lock status */ - oled_set_cursor(0,6); - oled_write("LOCK", false); - oled_set_cursor(0,7); - oled_write("Caps", led_usb_state.caps_lock); - oled_set_cursor(0,8); - oled_write("Num", !(led_usb_state.num_lock)); - oled_set_cursor(0,9); - oled_write("Scrl", led_usb_state.scroll_lock); - - /* KEYBOARD PET RENDER START */ - render_luna(0,13); - /* KEYBOARD PET RENDER END */ - } - - oled_rotation_t oled_init_user(oled_rotation_t rotation) { - return OLED_ROTATION_270; - } - - void oled_task_user(void) { - /* KEYBOARD PET VARIABLES START */ - current_wpm_read = get_current_wpm(); - led_usb_state = host_keyboard_led_state(); - /* KEYBOARD PET VARIABLES END */ - - - if (is_keyboard_master()) { //Drashna's OLED timeout off code for animations - if (timer_elapsed32(oled_timer) > 30000) { - oled_off(); - return; - } else { - oled_on(); - } - } - - if (is_keyboard_master()) { - print_status_narrow(); - } else { - print_logo_narrow(); - } - } -#endif diff --git a/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c b/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c deleted file mode 100644 index 6aa6a7a8b5b7..000000000000 --- a/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c +++ /dev/null @@ -1,555 +0,0 @@ -/* - * Copyright 2021 Tyler Thrailkill (@snowe/@snowe2010) - * - * 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 . - */ - -#include "ocean_dream.h" -#include "quantum.h" -#include "print.h" - -// Calculated Parameters -#define TWINKLE_PROBABILITY_MODULATOR 100 / TWINKLE_PROBABILITY // CALCULATED: Don't Touch -#define TOTAL_STARS STARS_PER_LINE *NUMBER_OF_STAR_LINES // CALCULATED: Don't Touch -#define OCEAN_ANIMATION_MODULATOR NUMBER_OF_FRAMES / OCEAN_ANIMATION_SPEED // CALCULATED: Don't Touch -#define SHOOTING_STAR_ANIMATION_MODULATOR NUMBER_OF_FRAMES / SHOOTING_STAR_ANIMATION_SPEED // CALCULATED: Don't Touch -#define STAR_ANIMATION_MODULATOR NUMBER_OF_FRAMES / STAR_ANIMATION_SPEED // CALCULATED: Don't Touch - -uint8_t animation_counter = 0; // global animation counter. -bool is_calm = false; -uint32_t starry_night_anim_timer = 0; -uint32_t starry_night_anim_sleep = 0; -static int current_wpm = 0; - -static uint8_t increment_counter(uint8_t counter, uint8_t max) { - counter++; - if (counter >= max) { - return 0; - } else { - return counter; - } -} - -#ifdef ENABLE_WAVE -static uint8_t decrement_counter(uint8_t counter, uint8_t max) { - counter--; - if (counter < 0 || counter > max) { - return max; - } else { - return counter; - } -} -#endif - -#ifdef ENABLE_MOON // region -# ifndef STATIC_MOON -uint8_t moon_animation_frame = 0; // keeps track of current moon frame -uint16_t moon_animation_counter = 0; // counts how many frames to wait before animating moon to next frame -# endif - -# ifdef STATIC_MOON -static const char PROGMEM moon[6] = { - 0x18, 0x7E, 0xFF, 0xC3, 0x81, 0x81, -}; -# endif - -# ifndef STATIC_MOON -static const char PROGMEM moon_animation[14][8] = { - // clang-format off - { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, - { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x42, 0x00, }, - { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xC3, 0x00, 0x00, }, - { 0x3C, 0x7E, 0xFF, 0xFF, 0xC3, 0x81, 0x00, 0x00, }, - { 0x3C, 0x7E, 0xFF, 0xC3, 0x81, 0x00, 0x00, 0x00, }, - { 0x3C, 0x7E, 0xC3, 0x81, 0x81, 0x00, 0x00, 0x00, }, - { 0x3C, 0x42, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, - { 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x42, 0x3C, }, - { 0x00, 0x00, 0x00, 0x81, 0x81, 0xC3, 0x7E, 0x3C, }, - { 0x00, 0x00, 0x00, 0x81, 0xC3, 0xFF, 0x7E, 0x3C, }, - { 0x00, 0x00, 0x81, 0xC3, 0xFF, 0xFF, 0x7E, 0x3C, }, - { 0x00, 0x00, 0xC3, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, - { 0x00, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, - // clang-format on -}; -# endif - -static void draw_moon(void) { -# ifdef STATIC_MOON - oled_set_cursor(MOON_COLUMN, MOON_LINE); - oled_write_raw_P(moon, 6); -# endif -# ifndef STATIC_MOON - moon_animation_counter = increment_counter(moon_animation_counter, ANIMATE_MOON_EVERY_N_FRAMES); - if (moon_animation_counter == 0) { - moon_animation_frame = increment_counter(moon_animation_frame, 14); - oled_set_cursor(MOON_COLUMN, MOON_LINE); - oled_write_raw_P(moon_animation[moon_animation_frame], 8); - } -# endif -} -#endif // endregion - -#ifdef ENABLE_WAVE // region -uint8_t starry_night_wave_frame_width_counter = 31; -uint8_t rough_waves_frame_counter = 0; - -// clang-format off -static const char PROGMEM ocean_top[8][32] = { - // still ocean - { - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - }, - // small ripples - { - 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - }, - // level 2 ripples - { - 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, - }, - // level 3 waves - { - 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, - }, - { - 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, - 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, - 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, - 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, - }, - { - 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, - 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, - 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, - 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, - }, -}; -static const char PROGMEM ocean_bottom[8][32] = { - // still ocean - { - 0x00, 0x40, 0x40, 0x41, 0x01, 0x01, 0x01, 0x21, - 0x20, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x44, - 0x44, 0x40, 0x40, 0x00, 0x00, 0x08, 0x08, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x40, 0x40, 0x00, 0x00, - }, - // small ripples - { - 0x00, 0x00, 0x40, 0x40, 0x01, 0x01, 0x01, 0x20, - 0x20, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, - 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, - }, - // level 2 ripples - { - 0x00, 0x00, 0x40, 0x40, 0x01, 0x01, 0x01, 0x20, - 0x20, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, - 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, - }, - // level 3 waves - { - 0x00, 0x40, 0x40, 0x42, 0x42, 0x03, 0x11, 0x11, - 0x20, 0x20, 0x00, 0x00, 0x08, 0x0C, 0x0C, 0x04, - 0x05, 0x41, 0x41, 0x21, 0x20, 0x00, 0x00, 0x08, - 0x0A, 0x0A, 0x0B, 0x41, 0x41, 0x41, 0x41, 0x00, - }, - { - 0x10, 0x10, 0x00, 0x80, 0x84, 0xC4, 0x02, 0x06, - 0x84, 0x44, 0xC0, 0x80, 0x80, 0x20, 0x20, 0x10, - 0x08, 0x12, 0x91, 0x81, 0x42, 0x40, 0x00, 0x00, - 0x10, 0x12, 0x22, 0x22, 0x24, 0x04, 0x84, 0x80, - }, - { - 0x08, 0x80, 0x80, 0x82, 0x82, 0x03, 0x21, 0x21, - 0x10, 0x10, 0x00, 0x00, 0x04, 0x04, 0x0C, 0x08, - 0x09, 0x41, 0x42, 0x22, 0x20, 0x00, 0x00, 0x08, - 0x0A, 0x0A, 0x0B, 0x41, 0x43, 0x42, 0x42, 0x00, - }, -}; -// clang-format on - -static void animate_waves(void) { - starry_night_wave_frame_width_counter = decrement_counter(starry_night_wave_frame_width_counter, WIDTH - 1); // only 3 frames for last wave type - rough_waves_frame_counter = increment_counter(rough_waves_frame_counter, 3); // only 3 frames for last wave type - - void draw_ocean(uint8_t frame, uint16_t offset, uint8_t byte_index) { - oled_write_raw_byte(pgm_read_byte(ocean_top[frame] + byte_index), offset); - oled_write_raw_byte(pgm_read_byte(ocean_bottom[frame] + byte_index), offset + WIDTH); - } - - for (int i = 0; i < WIDTH; ++i) { - uint16_t offset = OCEAN_LINE * WIDTH + i; - uint8_t byte_index = starry_night_wave_frame_width_counter + i; - if (byte_index >= WIDTH) { - byte_index = byte_index - WIDTH; - } - if (is_calm || current_wpm <= WAVE_CALM) { - draw_ocean(0, offset, byte_index); - } else if (current_wpm <= WAVE_HEAVY_STORM) { - draw_ocean(1, offset, byte_index); - } else if (current_wpm <= WAVE_HURRICANE) { - draw_ocean(2, offset, byte_index); - } else { - draw_ocean(3 + rough_waves_frame_counter, offset, byte_index); - } - } -} -#endif // endregion - -#ifdef ENABLE_ISLAND // region -uint8_t island_frame_1 = 0; - -// clang-format off -// only use 46 bytes (first 18 are blank, so we don't write them, makes it smaller and we can see the shooting stars properly!) - -// To save space and allow the shooting stars to be seen, only draw the tree on every frame. -// Tree is only 14bytes wide so we save 108 bytes on just the first row. Second row, the -// first 18 bytes is always the same piece of land, so only store that once, which saves 90 bytes -static const char PROGMEM islandRightTop[6][14] = { - {0x84, 0xEC, 0x6C, 0x3C, 0xF8, 0xFE, 0x3F, 0x6B, 0xDB, 0xB9, 0x30, 0x40, 0x00, 0x00,}, - {0x80, 0xC3, 0xEE, 0x7C, 0xB8, 0xFC, 0xFE, 0x6F, 0xDB, 0x9B, 0xB2, 0x30, 0x00, 0x00,}, - {0x00, 0xC0, 0xEE, 0x7F, 0x3D, 0xF8, 0xFC, 0x7E, 0x57, 0xDB, 0xDB, 0x8A, 0x00, 0x00,}, - {0x00, 0xC0, 0xE6, 0x7F, 0x3B, 0xF9, 0xFC, 0xFC, 0xB6, 0xB3, 0x33, 0x61, 0x00, 0x00,}, - {0x00, 0x00, 0x00, 0x00, 0x80, 0xEE, 0xFF, 0xFB, 0xF9, 0xFC, 0xDE, 0xB6, 0xB6, 0x24,}, - {0x00, 0x00, 0x00, 0x00, 0xC0, 0xEE, 0xFE, 0xFF, 0xFB, 0xFD, 0xEE, 0xB6, 0xB6, 0x92,}, -}; -static const char PROGMEM islandRightBottom[6][14] = { - {0x41, 0x40, 0x60, 0x3E, 0x3F, 0x23, 0x20, 0x60, 0x41, 0x43, 0x40, 0x40, 0x40, 0x80,}, - {0x40, 0x41, 0x60, 0x3E, 0x3F, 0x23, 0x20, 0x60, 0x40, 0x40, 0x41, 0x41, 0x40, 0x80,}, - {0x40, 0x40, 0x61, 0x3D, 0x3F, 0x27, 0x21, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80,}, - {0x40, 0x43, 0x61, 0x3C, 0x3F, 0x27, 0x21, 0x60, 0x41, 0x43, 0x43, 0x42, 0x40, 0x80,}, - {0x40, 0x40, 0x60, 0x3C, 0x3F, 0x27, 0x23, 0x63, 0x44, 0x40, 0x41, 0x41, 0x41, 0x81,}, - {0x40, 0x40, 0x60, 0x3C, 0x3F, 0x27, 0x23, 0x63, 0x42, 0x42, 0x41, 0x41, 0x41, 0x80,}, -}; -static const char PROGMEM islandLeft[18] = { - 0x80, 0x40, 0x40, 0x40, 0x40, 0x60, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x60, 0x40, 0x40, -}; -// clang-format on - -static void animate_island(void) { - if (animation_counter == 0) { - island_frame_1 = increment_counter(island_frame_1, 2); - } - - void draw_island_parts(uint8_t frame) { - oled_set_cursor(ISLAND_COLUMN + 3, ISLAND_LINE); - oled_write_raw_P(islandRightTop[frame], 14); - oled_set_cursor(ISLAND_COLUMN + 0, ISLAND_LINE + 1); - oled_write_raw_P(islandLeft, 18); - oled_set_cursor(ISLAND_COLUMN + 3, ISLAND_LINE + 1); - oled_write_raw_P(islandRightBottom[frame], 14); - } - - if (is_calm || current_wpm < ISLAND_CALM) { - draw_island_parts(0); - } else if (current_wpm >= ISLAND_CALM && current_wpm < ISLAND_HEAVY_STORM) { - draw_island_parts(island_frame_1 + 1); - } else if (current_wpm >= ISLAND_HEAVY_STORM && current_wpm < ISLAND_HURRICANE) { - draw_island_parts(island_frame_1 + 2); - } else { - draw_island_parts(island_frame_1 + 4); - } -} -#endif // endregion - -#ifdef ENABLE_STARS // region -bool stars_setup = false; // only setup stars once, then we just twinkle them -struct Coordinate { - int x; - int y; - bool exists; -}; - -struct Coordinate stars[TOTAL_STARS]; // tracks all stars/coordinates - -/** - * Setup all the initial stars on the screen - * This function divides the screen into regions based on STARS_PER_LINE and NUMBER_OF_STAR_LINES - * where each line is made up of 8x8 pixel groups, that are populated by a single star. - * - * Not sure how this function will work with larger or smaller screens. - * It should be fine, as long as the screen width is a multiple of 8 - */ -static void setup_stars(void) { - // For every line, split the line into STARS_PER_LINE, find a random point in that region, and turn the pixel on - // 36% probability it will not be added - // (said another way, 80% chance it will start out lit in the x direction, then 80% chance it will start out lit in the y direction = 64% probability it will start out lit at all) - for (int line = 0; line < NUMBER_OF_STAR_LINES; ++line) { - for (int column_group = 0; column_group < STARS_PER_LINE; ++column_group) { - uint8_t rand_column = rand() % 10; - uint8_t rand_row = rand() % 10; - if (rand_column < 8 && rand_row < 8) { - int column_adder = column_group * 8; - int line_adder = line * 8; - int x = rand_column + column_adder; - int y = rand_row + line_adder; - oled_write_pixel(x, y, true); - stars[column_group + (line * STARS_PER_LINE)].x = x; - stars[column_group + (line * STARS_PER_LINE)].y = y; - stars[column_group + (line * STARS_PER_LINE)].exists = true; - } else { - stars[column_group + (line * STARS_PER_LINE)].exists = false; - } - } - } - stars_setup = true; -} - -/** - * Twinkle the stars (move them one pixel in any direction) with a probability of 50% to twinkle any given star - */ -static void twinkle_stars(void) { - for (int line = 0; line < NUMBER_OF_STAR_LINES; ++line) { - for (int column_group = 0; column_group < STARS_PER_LINE; ++column_group) { - struct Coordinate star = stars[column_group + (line * STARS_PER_LINE)]; - - // skip stars that were never added - if (!star.exists) { - continue; - } - if (rand() % TWINKLE_PROBABILITY_MODULATOR == 0) { - oled_write_pixel(star.x, star.y, false); // black out pixel - - // don't allow stars to leave their own region - if (star.x == (column_group * 8)) { // star is the farthest left it can go in its region - star.x++; // move it right immediately - } else if (star.x == (((column_group + 1) * 8) - 1)) { // star is farthest right it can go in its region - star.x--; // move it left immediately - } - if (star.y == (line * 8)) { // star is the farthest up it can go in its region - star.y++; // move it down immediately - } else if (star.y == (((line + 1) * 8) - 1)) { // star is farthest down it can go in its region - star.y--; // move it up immediately - } - - // now decide direction - int new_x; - int x_choice = rand() % 3; - if (x_choice == 0) { - new_x = star.x - 1; - } else if (x_choice == 1) { - new_x = star.x + 1; - } else { - new_x = star.x; - } - - int new_y; - int y_choice = rand() % 3; - if (y_choice == 0) { - new_y = star.y - 1; - } else if (y_choice == 1) { - new_y = star.y + 1; - } else { - new_y = star.y; - } - - star.x = new_x; - star.y = new_y; - oled_write_pixel(new_x, new_y, true); - } - - stars[column_group + (line * STARS_PER_LINE)] = star; - } - } -} - -/** - * Setup the stars and then animate them on subsequent frames - */ -static void animate_stars(void) { - if (!stars_setup) { - setup_stars(); - } else { - twinkle_stars(); - } -} -#endif // endregion - -#ifdef ENABLE_SHOOTING_STARS // region -bool shooting_stars_setup = false; // only setup shooting stars array once with defaults - -struct ShootingStar { - int x_1; - int y_1; - int x_2; - int y_2; - bool running; - int frame; - int delay; -}; - -struct ShootingStar shooting_stars[MAX_NUMBER_OF_SHOOTING_STARS]; // tracks all the shooting stars - -static void setup_shooting_star(struct ShootingStar *shooting_star) { - int column_to_start = rand() % (WIDTH / 2); - int row_to_start = rand() % (HEIGHT - 48); // shooting_stars travel diagonally 1 down, 1 across. So the lowest a shooting_star can start and not 'hit' the ocean is 32 above the ocean. - - shooting_star->x_1 = column_to_start; - shooting_star->y_1 = row_to_start; - shooting_star->x_2 = column_to_start + 1; - shooting_star->y_2 = row_to_start + 1; - shooting_star->running = true; - shooting_star->frame++; - shooting_star->delay = rand() % SHOOTING_STAR_DELAY; -} - -static void move_shooting_star(struct ShootingStar *shooting_star) { - oled_write_pixel(shooting_star->x_1, shooting_star->y_1, false); - oled_write_pixel(shooting_star->x_2, shooting_star->y_2, false); - - shooting_star->x_1++; - shooting_star->y_1++; - shooting_star->x_2++; - shooting_star->y_2++; - shooting_star->frame++; - - oled_write_pixel(shooting_star->x_1, shooting_star->y_1, true); - oled_write_pixel(shooting_star->x_2, shooting_star->y_2, true); -} - -static void finish_shooting_star(struct ShootingStar *shooting_star) { - oled_write_pixel(shooting_star->x_1, shooting_star->y_1, false); - oled_write_pixel(shooting_star->x_2, shooting_star->y_2, false); - shooting_star->running = false; - shooting_star->frame = 0; -} - -static void animate_shooting_star(struct ShootingStar *shooting_star) { - if (shooting_star->frame > SHOOTING_STAR_FRAMES) { - finish_shooting_star(shooting_star); - return; - } else if (!shooting_star->running) { - setup_shooting_star(shooting_star); - } else { - if (shooting_star->delay == 0) { - move_shooting_star(shooting_star); - } else { - shooting_star->delay--; - } - } -} - -static void animate_shooting_stars(void) { - if (is_calm) { - return; - } - if (!shooting_stars_setup) { - for (int i = 0; i < MAX_NUMBER_OF_SHOOTING_STARS; ++i) { - shooting_stars[i].running = false; - } - shooting_stars_setup = true; - } - /** - * Fixes issue with stars that were falling _while_ the - * wpm dropped below the condition for them to keep falling - */ - void end_extra_stars(uint8_t starting_index) { - for (int shooting_star_index = starting_index; shooting_star_index < MAX_NUMBER_OF_SHOOTING_STARS; ++shooting_star_index) { - struct ShootingStar shooting_star = shooting_stars[shooting_star_index]; - if (shooting_star.running) { - finish_shooting_star(&shooting_star); - shooting_stars[shooting_star_index] = shooting_star; - } - } - } - - int number_of_shooting_stars = current_wpm / SHOOTING_STAR_WPM_INCREMENT; - number_of_shooting_stars = (number_of_shooting_stars > MAX_NUMBER_OF_SHOOTING_STARS) ? MAX_NUMBER_OF_SHOOTING_STARS : number_of_shooting_stars; - - if (number_of_shooting_stars == 0) { - // make sure all shooting_stars are ended - end_extra_stars(0); - } else { - for (int shooting_star_index = 0; shooting_star_index < number_of_shooting_stars; ++shooting_star_index) { - struct ShootingStar shooting_star = shooting_stars[shooting_star_index]; - animate_shooting_star(&shooting_star); - shooting_stars[shooting_star_index] = shooting_star; - } - end_extra_stars(number_of_shooting_stars); - } -} -#endif // endregion - -/** - * Main rendering function - * - * Calls all different animations at different rates - */ -void render_stars(void) { - // // animation timer - if (timer_elapsed32(starry_night_anim_timer) > STARRY_NIGHT_ANIM_FRAME_DURATION) { - starry_night_anim_timer = timer_read32(); - current_wpm = get_current_wpm(); - -#ifdef ENABLE_ISLAND - animate_island(); -#endif - -#ifdef ENABLE_SHOOTING_STARS - if (animation_counter % SHOOTING_STAR_ANIMATION_MODULATOR == 0) { - animate_shooting_stars(); - } -#endif - -#ifdef ENABLE_STARS - // TODO offsetting the star animation from the wave animation would look better, - // but if I do that, then the stars appear in the water because - // the ocean animation has to wait a bunch of frames to overwrite it. - // Possible solutions: - // 1. Only draw stars to the top of the island/ocean. - // 2. Draw ocean every frame, only move ocean on frames matching modulus - // Problems: - // 1. What if someone wants to move the island up a bit, or they want to have the stars reflect in the water? - // 2. More cpu intensive. And I'm already running out of cpu as it is... - if (animation_counter % STAR_ANIMATION_MODULATOR == 0) { - animate_stars(); - } -#endif - -#ifdef ENABLE_WAVE - if (animation_counter % OCEAN_ANIMATION_MODULATOR == 0) { - animate_waves(); - } -#endif - -#ifdef ENABLE_MOON - draw_moon(); -#endif - - animation_counter = increment_counter(animation_counter, NUMBER_OF_FRAMES); - } - - // this fixes the screen on and off bug - if (current_wpm > 0) { - oled_on(); - starry_night_anim_sleep = timer_read32(); - } else if (timer_elapsed32(starry_night_anim_sleep) > OLED_TIMEOUT) { - oled_off(); - } -} \ No newline at end of file diff --git a/keyboards/solartempest/sofle/keymaps/via/oled.c b/keyboards/solartempest/sofle/keymaps/via/oled.c deleted file mode 100644 index 415a82f13d08..000000000000 --- a/keyboards/solartempest/sofle/keymaps/via/oled.c +++ /dev/null @@ -1,82 +0,0 @@ - /* Copyright 2020 Josef Adamcik - * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang - * - * 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 . - */ - -//Sets up what the OLED screens display. - -#ifdef OLED_ENABLE - static void render_logo(void) { - static const char PROGMEM qmk_logo[] = { - 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, - 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, - 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0 - }; - - oled_write_P(qmk_logo, false); - } - - static void print_status_narrow(void) { - // Print current mode - oled_write_P(PSTR("\n\n"), false); - - switch (get_highest_layer(layer_state)) { - case 0: - oled_write_ln_P(PSTR("Qwrt"), false); - break; - case 1: - oled_write_ln_P(PSTR("Clmk"), false); - break; - default: - oled_write_P(PSTR("Mod\n"), false); - break; - } - oled_write_P(PSTR("\n\n"), false); - // Print current layer - oled_write_ln_P(PSTR("LAYER"), false); - switch (get_highest_layer(layer_state)) { - case 0: - case 1: - oled_write_P(PSTR("Base\n"), false); - break; - case 2: - oled_write_P(PSTR("Raise"), false); - break; - case 3: - oled_write_P(PSTR("Lower"), false); - break; - default: - oled_write_ln_P(PSTR("Undef"), false); - } - oled_write_P(PSTR("\n\n"), false); - led_t led_usb_state = host_keyboard_led_state(); - oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock); - } - - oled_rotation_t oled_init_user(oled_rotation_t rotation) { - if (is_keyboard_master()) { - return OLED_ROTATION_270; - } - return rotation; - } - - void oled_task_user(void) { - if (is_keyboard_master()) { - print_status_narrow(); - } else { - render_logo(); - } - } -#endif \ No newline at end of file diff --git a/keyboards/solartempest/sofle/keymaps/via/rules.mk b/keyboards/solartempest/sofle/keymaps/via/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/solartempest/sofle/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey.c b/keyboards/solartempest/sofle/keymaps/via/snakey.c deleted file mode 100644 index 76b292887ebf..000000000000 --- a/keyboards/solartempest/sofle/keymaps/via/snakey.c +++ /dev/null @@ -1,321 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 Luna code adapted from HellSingCoder and Jackasaur - * 2021 QMK - * - * 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 o - * 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 . - */ - -//SSD1306 OLED update loop -#ifdef OLED_ENABLE - #define KEYBOARD_PET - /* KEYBOARD PET START */ - - /* settings */ - #define MIN_WALK_SPEED 10 - #define MIN_RUN_SPEED 40 - - /* advanced settings */ - #define ANIM_FRAME_DURATION 300 // how long each frame lasts in ms. Default is 200. - #define ANIM_SIZE 96 // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024 - - /* timers */ - uint32_t anim_timer = 0; - - /* current frame */ - uint8_t current_frame = 0; - - /* status variables */ - int current_wpm_read = 0; - uint32_t oled_timer = 0; //For Keyboard pet OLED timeout with animations, code by Drashna. - led_t led_usb_state; - - bool isSneaking = false; - bool isJumping = false; - bool showedJump = true; - bool isBarking = false; - - - static void render_logo(int LUNA_X, int LUNA_Y) { - static const char PROGMEM luna_logo[] = { - 0x00, 0x00, 0x04, 0xf6, 0xb8, 0xf8, 0xd8, 0xf0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, - 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xc0, 0xe1, 0xf3, 0xfb, 0x7f, 0x1f, 0x0f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x3f, 0x03, - 0x01, 0x00, 0x00, 0x00, 0x80, 0xc1, 0xf3, 0xff, 0x7f, 0x1f, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x30, - 0x1e, 0x3f, 0x3f, 0x7f, 0xf9, 0xf0, 0xf0, 0x70, 0x78, 0x3c, 0x3f, 0x1f, 0x0f, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x3f, 0x7f, 0x7f, 0xfb, 0xf1, 0xf0, 0x78, 0x3c, 0x1e, 0x0f, 0x03, 0x00, 0x00, - }; - oled_set_cursor(LUNA_X,LUNA_Y); - oled_write_raw_P(luna_logo, sizeof(luna_logo)); - } - - /* logic */ - static void render_luna(int LUNA_X, int LUNA_Y) { - - /* Sit */ - static const char PROGMEM sit[2][ANIM_SIZE] = { - /* 'sit1', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xcc, - 0xcc, 0xf8, 0xf8, 0xf0, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3f, 0x7f, 0xfc, 0xf9, 0xf1, - 0xe1, 0xc1, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x38, 0x70, 0x60, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf9, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x7e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - - /* 'sit2', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xcc, - 0xcc, 0xf8, 0xf8, 0xf0, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3f, 0x7f, 0xfc, 0xf9, 0xf1, - 0xe1, 0xc1, 0x81, 0x00, 0x00, 0x01, 0x01, 0x02, 0x06, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x7c, 0x60, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf9, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x7e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; - - /* Walk */ - static const char PROGMEM walk[2][ANIM_SIZE] = { - /* 'walk1', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf8, 0xfc, 0xfe, 0xfe, 0x1f, 0x3f, 0x39, 0x39, 0x3f, 0x3f, 0x1e, 0x1e, 0x0c, 0x00, - 0x00, 0x00, 0x01, 0x0f, 0x3e, 0x78, 0x70, 0xf8, 0xfc, 0xfe, 0x7e, 0x3e, 0x3c, 0x3c, 0x78, 0x78, - 0x78, 0xf0, 0xf1, 0xff, 0x7f, 0x7f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - - /* 'walk2', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60, 0x60, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x20, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3e, 0x7f, 0xff, 0xff, 0xe7, 0xc7, 0x0e, 0x0e, 0x0f, 0x0f, 0x07, 0x07, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1f, 0x3e, 0x78, 0xf0, 0xfc, 0x7e, 0x1e, 0x1f, 0x0f, 0x0e, - 0x1e, 0x1c, 0x3d, 0x7f, 0xff, 0xff, 0xff, 0xfc, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; - - /* Run */ - static const char PROGMEM run[2][ANIM_SIZE] = { - /* 'run1', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xc0, 0xe0, 0xf0, 0xf0, 0xf8, 0x98, 0xf8, 0xf8, 0xf8, 0xf0, 0x70, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf0, 0xf0, 0xe0, 0xc0, - 0x87, 0x7f, 0xff, 0xff, 0xf1, 0xc3, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x1f, 0x3e, 0x78, 0xf7, 0xff, 0x7f, 0x3d, 0x03, 0x07, 0x0f, - 0x1e, 0x3d, 0x7f, 0xff, 0xff, 0xff, 0xfc, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - - /* 'run2', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xe0, 0xf0, 0xf0, 0xf8, 0x98, 0xf8, 0xf8, 0xf8, 0xf0, 0x70, 0x20, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf8, 0xfc, 0x3e, 0xde, 0xfe, 0xfc, 0xf8, 0x00, 0x00, - 0xe0, 0xfe, 0xff, 0x7f, 0x07, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x1e, 0x3c, 0x78, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x07, 0x1f, 0x3f, 0x7c, 0x78, 0xff, - 0xff, 0x7f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; - - /* Bark */ - static const char PROGMEM bark[2][ANIM_SIZE] = { - /* 'bark1', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0x30, 0x70, 0xe0, 0xe0, 0xc0, 0xc0, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0xff, 0xff, 0xe7, 0xe7, 0xef, 0xef, 0xcf, 0xcb, 0x83, 0x83, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x06, 0x1c, 0x38, 0x78, 0xf1, 0xe3, 0xe3, 0xe7, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, - 0x7f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - - /* 'bark2', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0x60, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0x9f, - 0x0f, 0x0e, 0x1f, 0x1f, 0x3f, 0x3f, 0x7e, 0xe6, 0x83, 0x03, 0x0f, 0x43, 0x43, 0x90, 0x88, 0x08, - 0x00, 0x00, 0x03, 0x1e, 0x3c, 0x78, 0xf0, 0xe0, 0xe0, 0xf0, 0xf0, 0xfb, 0xff, 0xff, 0xff, 0x7f, - 0x7f, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; - - /* Sneak */ - static const char PROGMEM sneak[2][ANIM_SIZE] = { - /* 'sneak1', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xcc, 0xf8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, - 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0x7f, 0xf1, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, - 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x01, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, - }, - - /* 'sneak2', 32x22px */ - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xe0, 0xf8, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, - 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0x7f, 0xf0, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, - 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; - - /* animation */ - void animate_luna(void) { - - /* jump */ - if (isJumping || !showedJump) { - - /* clear */ - oled_set_cursor(LUNA_X,LUNA_Y +2); - oled_write(" ", false); - - oled_set_cursor(LUNA_X,LUNA_Y -1); - - showedJump = true; - } else { - - /* clear */ - oled_set_cursor(LUNA_X,LUNA_Y -1); - oled_write(" ", false); - - oled_set_cursor(LUNA_X,LUNA_Y); - } - - /* switch frame */ - current_frame = (current_frame + 1) % 2; - - /* current status */ - if(isBarking) { - oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); - - } else if(isSneaking) { - oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); - - } else if(current_wpm_read <= MIN_WALK_SPEED) { - oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); - - } else if(current_wpm_read <= MIN_RUN_SPEED) { - oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE); - - } else { - oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE); - } - } - - /* animation timer */ - if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { - anim_timer = timer_read32(); - animate_luna(); - } - } - /* KEYBOARD PET END */ - - static void print_logo_narrow(void) { - oled_set_cursor(0,2); - oled_write("SOLAR", false); - oled_set_cursor(0,3); - oled_write("TMPST", false); - - render_logo(0,7); - - /* wpm counter */ - char wpm_str[8]; - oled_set_cursor(0,13); - sprintf(wpm_str, " %03d", current_wpm_read); - oled_write(wpm_str, false); - oled_set_cursor(0,14); - oled_write(" wpm", false); - } - - static void print_status_narrow(void) { - /*switch (get_highest_layer(default_layer_state)) { //May be useful if you use multiple non-QWERTY layouts to show which is active. - case 0: - oled_write("SOLAR", false); - break; - case 1: - oled_write("GAME", false); - break; - default: - oled_write("UNDEF", false); - }*/ - - /* Print current layer */ - oled_set_cursor(0,2); - oled_write("LAYER", false); - - oled_set_cursor(0,3); - switch (get_highest_layer(layer_state)) { - case 0: - oled_write("Base ", false); - break; - case 1: - oled_write("Game ", false); - break; - case 3: - oled_write("Raise", false); - break; - case 2: - oled_write("Lower", false); - break; - } - - /* lock status */ - oled_set_cursor(0,6); - oled_write("LOCK", false); - oled_set_cursor(0,7); - oled_write("Caps", led_usb_state.caps_lock); - oled_set_cursor(0,8); - oled_write("Num", !(led_usb_state.num_lock)); - oled_set_cursor(0,9); - oled_write("Scrl", led_usb_state.scroll_lock); - - /* KEYBOARD PET RENDER START */ - render_luna(0,13); - /* KEYBOARD PET RENDER END */ - } - - oled_rotation_t oled_init_user(oled_rotation_t rotation) { - return OLED_ROTATION_270; - } - - void oled_task_user(void) { - /* KEYBOARD PET VARIABLES START */ - current_wpm_read = get_current_wpm(); - /* KEYBOARD PET VARIABLES END */ - led_usb_state = host_keyboard_led_state(); - - if (is_keyboard_master()) { //Drashna's OLED timeout off code for animations - if (timer_elapsed32(oled_timer) > 30000) { - oled_off(); - return; - } else { - oled_on(); - } - } - - if (is_keyboard_master()) { - print_status_narrow(); - } else { - print_logo_narrow(); - } - } -#endif diff --git a/keyboards/solartempest/sofle/readme.md b/keyboards/solartempest/sofle/readme.md deleted file mode 100644 index 1593b040f746..000000000000 --- a/keyboards/solartempest/sofle/readme.md +++ /dev/null @@ -1,82 +0,0 @@ -# Sofle Keyboard - -![SofleKeyboard version 2.1 RGB Keyhive](https://i.imgur.com/WH9OoWu.jpg) - -Sofle is 6×4+5 keys column-staggered split keyboard. Based on Lily58, Corne and Helix keyboards. - -For detailed instructions on using VIA and flashing, please refer to the sections further down the page! - -For details about the keyboard design, refer to Josef's blog: [Sofle Keyboard - a split keyboard based on Lily58 and Crkbd](https://josef-adamcik.cz/electronics/let-me-introduce-you-sofle-keyboard-split-keyboard-based-on-lily58.html) - -Build guide and log is available here: [SofleKeyboard build log/guide](https://josef-adamcik.cz/electronics/soflekeyboard-build-log-and-build-guide.html) - -* Keyboard Maintainer: [Solartempest] -* Hardware Supported: SofleKeyboard V2.1 RGB PCB, ProMicro / Elite-C -* Hardware Availability: [Keyhive](https://keyhive.xyz/shop/sofle) - -# Custom Features: - -### OLED Features: -- Includes Snakey keyboard pet! Slithers according to WPM, bites, and sticks its tongue out at you! -- OLED displays current layer, lock key status, WPM, custom logo, and custom name. -- OLED shuts off on idle and when computer is sleeping. -- Includes working Luna keyboard pet. -- Includes working Bongocat (disable RGB for sufficient space). -- Includes stock OLED code as well. - -### RGB Features: -- Adds custom layer lighting with custom gradients for each layer. -- RGB underglow support and remapped to physical locations (nicer gradients and effects). -- Adds white caps lock, scroll lock, and num lock key indicators using the top row/underglow LEDs. - -### Rotary Encoder and VIA Features: -- Fully emappable left encoder controls volume up/down/mute. Right encoder PGUP/PGDOWN. -- Allows for live remapping of per-layer rotary encoder functions in VIA. -- VIA support included by default. -- This fixes the Keyhive left bottom row offset issue in VIA. You will need to import sofle.json in VIA. -- Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders. -- Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders. - -### Tap and Other Features: -- Push left-shift + backspace to delete whole words. Right-shift + backspace to delete whole words in the opposite direction. -- Double tap layers to stay on a layer instead of momentary push. -- Adds key combo functionality. -- Symmetric modifiers (CMD/Super, Alt/Opt, Ctrl, Shift). - -## Using with VIA - -- After flashing, in VIA make sure to Import Keymap, which is "sofle VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. -- Go to Save+Load to Load Saved Layout. You can import my own layout "sofle VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. -- It is a good idea to Save Current Layout after you decide on your mapping. - - -# Compiling - -Compile with the command below: - -```sh -# for Elite C with Left Side Master builds -qmk compile -kb solartempest/sofle -km via -``` - -## Flashing - -Flash using the correct command below (or use QMK Toolbox like me): - -```sh -# for pro micro-based builds -qmk flash -kb solartempest/sofle -km via -bl avrdude-split-left -qmk flash -kb solartempest/sofle -km via -bl avrdude-split-right - -# for Elite C or dfu bootloader builds -qmk flash -kb solartempest/sofle -km via -bl dfu-split-left -qmk flash -kb solartempest/sofle -km via -bl dfu-split-right -``` - -These commands can be mixed if, for example, you have an Elite C on the left and a pro micro on the right. -Press reset button on he keyboard when asked. - -Disconnect the first half, connect the second one and repeat the process. - - -See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/solartempest/sofle/rules.mk b/keyboards/solartempest/sofle/rules.mk deleted file mode 100644 index a6d0a766b59a..000000000000 --- a/keyboards/solartempest/sofle/rules.mk +++ /dev/null @@ -1,25 +0,0 @@ -MCU = atmega32u4 -BOOTLOADER = atmel-dfu - -# Build Options -# Comment out to disable the options. - -SPLIT_KEYBOARD = yes # Split keyboard -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration -CONSOLE_ENABLE = no # Console for debug -EXTRAKEY_ENABLE = yes # Audio control and System control (+450) -RGBLIGHT_ENABLE = yes # RGB lighting (+2350) -ENCODER_ENABLE = yes # Encoders -MOUSEKEY_ENABLE = no # Mouse keys (+1482) -NKRO_ENABLE = no # Has 6KRO+ already. NKRO does not work -LTO_ENABLE = yes # Save space - -OLED_ENABLE = yes # Must be disabled if OLEDs are not installed (+3608) -OLED_DRIVER = SSD1306 # Specify OLED driver -WPM_ENABLE = yes # WPM counter for keyboard pets (+1298) -COMBO_ENABLE = no # Tap combo chording, may run into space issue if also using keyboard pets (+952) - # Via_enable in keymap (+2300). VIA is required as non-via layouts are removed to save space. - -GRAVE_ESC_ENABLE = no # Save space by not using KC_GESC (+127) -MAGIC_ENABLE = no # Save space by not PROCESS_MAGIC, which is bootmagic with out the boot (+612) -SPACE_CADET_ENABLE = no # Save space by not using space cadet left/right shift (+350) diff --git a/keyboards/solartempest/sofle/sofle VIA keymap.json b/keyboards/solartempest/sofle/sofle VIA keymap.json deleted file mode 100644 index 163a23ab1b15..000000000000 --- a/keyboards/solartempest/sofle/sofle VIA keymap.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "Solarius_Sofle" , - "vendorId": "0xFC32", - "productId": "0x1287", - "lighting": "qmk_rgblight", - "matrix": { "rows": 10, "cols": 7 }, - "customKeycodes": [ - { - "name": "Super Alt Tab FWD", - "title": "Alt Tab Forwards in Windows", - "shortName": "ATABF" - }, - { - "name": "Super Alt Tab REV", - "title": "Alt Tab Reverse in Windows", - "shortName": "ATABR" - }, - { - "name": "Move Window Right", - "title": "Move Window Right in Windows", - "shortName": "MWR" - }, - { - "name": "Move Window Left", - "title": "Move Window Left in Windows", - "shortName": "MWL" - }, - { - "name": "Shift-BSPC", - "title": "Shift-Backspace to Delete Whole Words", - "shortName": "SBS" - } - ], - "layouts": - { - "keymap": - [ - [{"y":0.5,"x":3.25},"0,3",{"x":9},"5,3"], - [{"y":-0.87,"x":2.25},"0,2",{"x":1},"0,4",{"x":7},"5,4",{"x":1},"5,2"], - [{"y":-0.9,"x":5.25},"0,5",{"x":5},"5,5"], - [{"y":-0.87,"x":0.25,"c":"#777777"},"0,0",{"c":"#cccccc"},"0,1",{"x":13},"5,1",{"c":"#aaaaaa"},"5,0"], - [{"y":-0.4,"x":3.25,"c":"#cccccc"},"1,3",{"x":2.2},"1,6",{"x":2.6},"8,6",{"x":2.2},"6,3"], - [{"y":-0.9,"x":2.25},"1,2",{"x":1},"1,4",{"x":7},"6,4",{"x":1},"6,2"], - [{"y":-0.9,"x":5.25},"1,5",{"x":5},"6,5"], - [{"y":-0.9,"x":0.25,"c":"#aaaaaa"},"1,0",{"c":"#cccccc"},"1,1",{"x":13},"6,1",{"c":"#aaaaaa"},"6,0"], - [{"y":-0.4,"x":3.25,"c":"#cccccc"},"2,3",{"x":2.2},"4,0",{"x":2.6},"9,5",{"x":2.2},"7,3"], - [{"y":-0.9,"x":2.25},"2,2",{"x":1},"2,4",{"x":7},"7,4",{"x":1},"7,2"], - [{"y":-0.9,"x":5.25},"2,5",{"x":5},"7,5"], - [{"y":-0.9,"x":0.25,"c":"#aaaaaa"},"2,0",{"c":"#cccccc"},"2,1",{"x":13},"7,1",{"c":"#aaaaaa"},"7,0"], - [{"y":-0.4,"x":3.25,"c":"#cccccc"},"3,3",{"x":2.2},"3,6",{"x":2.6},"6,6",{"x":2.2},"8,3"], - [{"y":-0.9,"x":2.25},"3,2",{"x":1},"3,4",{"x":7},"8,4",{"x":1},"8,2"], - [{"y":-0.9,"x":5.25},"3,5",{"x":5},"8,5"], - [{"y":-0.9,"x":0.25,"c":"#aaaaaa"},"3,0",{"c":"#cccccc"},"3,1",{"x":13},"8,1",{"c":"#aaaaaa"},"8,0"], - [{"y":-0.3,"x":3.25},"4,2",{"x":9},"9,1"], - [{"y":-0.9,"x":2.25},"4,1",{"x":1},"4,3",{"x":7},"9,2",{"x":1},"9,0"], - [{"r":30,"rx":7.15,"y":4.6,"x":1,"c":"#777777"},"4,4"], - [{"r":45,"y":-2.25,"x":3.35,"h":1.5},"4,5"], - [{"r":-45,"y":1.3,"x":-2.08,"h":1.5},"9,4"], - [{"r":-30,"y":-0.45,"x":0.8},"9,3"] - ] - } -} diff --git a/keyboards/solartempest/sofle/sofle VIA layout.json b/keyboards/solartempest/sofle/sofle VIA layout.json deleted file mode 100644 index 42db09c8d317..000000000000 --- a/keyboards/solartempest/sofle/sofle VIA layout.json +++ /dev/null @@ -1,295 +0,0 @@ -{ - "name": "Solarius_Sofle", - "vendorProductId": 4231139975, - "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], - "layers": [ - [ - "KC_GRV", - "KC_1", - "KC_2", - "KC_3", - "KC_4", - "KC_5", - "KC_NO", - "KC_ESC", - "KC_Q", - "KC_W", - "KC_E", - "KC_R", - "KC_T", - "KC_VOLU", - "KC_TAB", - "KC_A", - "KC_S", - "KC_D", - "KC_F", - "KC_G", - "KC_F", - "KC_LSFT", - "KC_Z", - "KC_X", - "KC_C", - "KC_V", - "KC_B", - "KC_VOLD", - "KC_MUTE", - "KC_LGUI", - "KC_LALT", - "KC_LCTL", - "TT(2)", - "KC_ENT", - "KC_LALT", - "KC_MINS", - "KC_0", - "KC_9", - "KC_8", - "KC_7", - "KC_6", - "KC_0", - "USER04", - "KC_P", - "KC_O", - "KC_I", - "KC_U", - "KC_Y", - "KC_PGUP", - "KC_QUOT", - "KC_SCLN", - "KC_L", - "KC_K", - "KC_J", - "KC_H", - "KC_NO", - "KC_RSFT", - "KC_SLSH", - "KC_DOT", - "KC_COMM", - "KC_M", - "KC_N", - "KC_PGDN", - "TG(1)", - "KC_RALT", - "KC_RCTL", - "TT(3)", - "KC_SPC", - "C(KC_W)", - "KC_N" - ], - [ - "KC_PSCR", - "KC_5", - "KC_1", - "KC_2", - "KC_3", - "KC_G", - "KC_SPC", - "KC_F12", - "KC_ESC", - "KC_Q", - "KC_W", - "KC_E", - "KC_R", - "KC_TRNS", - "KC_ENT", - "KC_TAB", - "KC_A", - "KC_S", - "KC_D", - "KC_F", - "KC_NO", - "KC_LSFT", - "KC_LSFT", - "KC_Z", - "KC_X", - "KC_C", - "KC_V", - "KC_TRNS", - "KC_TRNS", - "KC_LALT", - "KC_B", - "KC_TRNS", - "KC_F22", - "KC_SPC", - "KC_NO", - "KC_F4", - "KC_F11", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "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_NO", - "KC_RALT", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "MO(3)", - "KC_TRNS", - "KC_TRNS", - "KC_NO" - ], - [ - "KC_GRV", - "KC_F1", - "KC_F2", - "KC_F3", - "KC_F4", - "KC_F5", - "KC_NO", - "KC_ESC", - "KC_1", - "KC_2", - "KC_3", - "KC_4", - "KC_5", - "C(KC_PPLS)", - "KC_TRNS", - "KC_EXLM", - "KC_AT", - "KC_HASH", - "KC_DLR", - "KC_PERC", - "KC_NO", - "KC_TRNS", - "KC_EQL", - "KC_MINS", - "KC_PLUS", - "KC_LCBR", - "KC_RCBR", - "C(KC_MINS)", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_F11", - "KC_F10", - "KC_F9", - "KC_F8", - "KC_F7", - "KC_F6", - "KC_NO", - "KC_F12", - "KC_0", - "KC_9", - "KC_8", - "KC_7", - "KC_6", - "C(S(KC_TAB))", - "KC_PIPE", - "KC_RPRN", - "KC_LPRN", - "KC_ASTR", - "KC_AMPR", - "KC_CIRC", - "KC_NO", - "KC_TRNS", - "KC_BSLS", - "KC_COLN", - "KC_DOT", - "KC_RBRC", - "KC_LBRC", - "C(KC_TAB)", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_BSPC", - "KC_TRNS", - "C(KC_T)", - "KC_NO" - ], - [ - "USER03", - "C(KC_PPLS)", - "C(KC_MINS)", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_INS", - "KC_PSCR", - "KC_APP", - "C(KC_UP)", - "C(KC_DOWN)", - "USER00", - "KC_TRNS", - "KC_LALT", - "KC_LCTL", - "KC_LSFT", - "C(KC_LEFT)", - "C(KC_RGHT)", - "KC_NO", - "KC_TRNS", - "C(KC_Z)", - "C(KC_X)", - "C(KC_C)", - "C(KC_V)", - "KC_TRNS", - "USER01", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_MYCM", - "KC_TRNS", - "KC_NO", - "USER02", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_F14", - "KC_F13", - "KC_NO", - "KC_DEL", - "KC_INS", - "KC_END", - "KC_UP", - "KC_HOME", - "KC_WWW_FORWARD", - "USER03", - "KC_BSPC", - "KC_NLCK", - "KC_RGHT", - "KC_DOWN", - "KC_LEFT", - "KC_WWW_BACK", - "KC_NO", - "KC_TRNS", - "KC_SLCK", - "KC_PGDN", - "KC_TRNS", - "KC_PGUP", - "KC_CAPS", - "USER02", - "KC_TRNS", - "KC_TRNS", - "KC_WWW_REFRESH", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_NO" - ] - ] -} \ No newline at end of file diff --git a/keyboards/solartempest/sofle/sofle.c b/keyboards/solartempest/sofle/sofle.c deleted file mode 100644 index b51a7e8a0460..000000000000 --- a/keyboards/solartempest/sofle/sofle.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . -*/ - -#include "sofle.h" diff --git a/keyboards/solartempest/sofle/sofle.h b/keyboards/solartempest/sofle/sofle.h deleted file mode 100644 index 6e9b06cef09f..000000000000 --- a/keyboards/solartempest/sofle/sofle.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once - -#include "quantum.h" - -// Extra keys are added for rotary encoder support in VIA -#define LAYOUT( \ - LA1, LA2, LA3, LA4, LA5, LA6, RA6, RA5, RA4, RA3, RA2, RA1, \ - LB1, LB2, LB3, LB4, LB5, LB6, LB7, RB7, RB6, RB5, RB4, RB3, RB2, RB1, \ - LC1, LC2, LC3, LC4, LC5, LC6, LE1, RE6, RC6, RC5, RC4, RC3, RC2, RC1, \ - LD1, LD2, LD3, LD4, LD5, LD6, LD7, RD7, RD6, RD5, RD4, RD3, RD2, RD1, \ - LE2, LE3, LE4, LE5, LE6, RE5, RE4, RE3, RE2, RE1 \ - ) \ - { \ - { LA1, LA2, LA3, LA4, LA5, LA6, KC_NO }, \ - { LB1, LB2, LB3, LB4, LB5, LB6, LB7 }, \ - { LC1, LC2, LC3, LC4, LC5, LC6, KC_NO }, \ - { LD1, LD2, LD3, LD4, LD5, LD6, LD7 }, \ - { LE1, LE2, LE3, LE4, LE5, LE6, KC_NO }, \ - { RA1, RA2, RA3, RA4, RA5, RA6, KC_NO }, \ - { RB1, RB2, RB3, RB4, RB5, RB6, RB7 }, \ - { RC1, RC2, RC3, RC4, RC5, RC6, KC_NO }, \ - { RD1, RD2, RD3, RD4, RD5, RD6, RD7 }, \ - { RE1, RE2, RE3, RE4, RE5, RE6, KC_NO } \ - } From 0ad56103193184dd8efd403c70532eaad5049d29 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 7 Nov 2021 01:17:07 -0400 Subject: [PATCH 053/155] Fix files --- .../solartempest/ak21/AK21_via_solar.json | 69 +++++++++++++++++++ keyboards/solartempest/ak21/readme.md | 18 ++--- 2 files changed, 74 insertions(+), 13 deletions(-) create mode 100644 keyboards/solartempest/ak21/AK21_via_solar.json diff --git a/keyboards/solartempest/ak21/AK21_via_solar.json b/keyboards/solartempest/ak21/AK21_via_solar.json new file mode 100644 index 000000000000..0f369e01f272 --- /dev/null +++ b/keyboards/solartempest/ak21/AK21_via_solar.json @@ -0,0 +1,69 @@ +{ + "name": "AK21", + "vendorId": "0x414B", + "productId": "0x0021", + "lighting": "qmk_rgblight", + "matrix": { "rows": 6, "cols": 4 }, + "customKeycodes": [ + { + "name": "Super Alt Tab FWD", + "title": "Alt Tab Forwards in Windows", + "shortName": "ATABF" + }, + { + "name": "Super Alt Tab REV", + "title": "Alt Tab Reverse in Windows", + "shortName": "ATABR" + } + ], + "layouts": { + "keymap": [ + [ + { + "c": "#393B3B", + "t": "#91867A" + }, + "0,0", + "0,1", + "0,2", + "0,3" + ], + [ + "1,0", + "1,1", + "1,2", + "1,3" + ], + [ + "2,0", + "2,1", + "2,2", + { + "h": 2 + }, + "2,3" + ], + [ + "3,0", + "3,1", + "3,2" + ], + [ + "4,0", + "4,1", + "4,2", + { + "h": 2 + }, + "4,3" + ], + [ + { + "w": 2 + }, + "5,1", + "5,2" + ] +] + } +} \ No newline at end of file diff --git a/keyboards/solartempest/ak21/readme.md b/keyboards/solartempest/ak21/readme.md index ab15ce05d570..ef0114b54ba6 100644 --- a/keyboards/solartempest/ak21/readme.md +++ b/keyboards/solartempest/ak21/readme.md @@ -1,28 +1,20 @@ # Atlantis AK21 Macropad -![Atlantis AK21] +![Atlantis AK21](https://update) +![Rear View](https://update) +![PCB View](https://update) +![Side View](https://update) A 21-key macro pad with pushbutton rotary encoder and underglow RGB per key RGB and for the case. -For detailed instructions on using VIA and flashing, please refer to the sections further down the page! - * Keyboard Maintainer: solartempest * Hardware Supported: Atlantis AK21 * Hardware Availability: [rioo897](https://shop198276076.world.taobao.com/index.htm?spm=2013.1.w5002-23418336364.2.3f4d7d51DkVX3s) -## Make and Flashing - Make example for this keyboard (after setting up your build environment): - qmk compile -kb solartempest/ak21 -km via + make solartempest/ak21:via To reset the board into bootloader mode, tap the Reset switch mounted on the bottom of the PCB. -Flash with QMK toolbox, auto-flash. - -## Using with VIA - -- After flashing, in VIA make sure to Import Keymap, which is "ak21 VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. -- Go to Save+Load to Load Saved Layout. You can import my own layout "as21 VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. -- It is a good idea to Save Current Layout after you decide on your mapping. See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). From 0f790d3b9a72a3df11b427f79912f4b126322c40 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 7 Nov 2021 01:32:07 -0400 Subject: [PATCH 054/155] Trying to fix commit errors --- .../solartempest/ak21/AK21_via_solar.json | 69 +++ keyboards/solartempest/ak21/readme.md | 20 + keyboards/solartempest/sofle/.noci | 0 keyboards/solartempest/sofle/info.json | 12 - .../sofle/keymaps/via/ocean_dream.c | 555 ------------------ .../solartempest/sofle/keymaps/via/rules.mk | 1 - keyboards/solartempest/sofle/sofle.c | 19 - keyboards/solartempest/sofle/sofle.h | 42 -- 8 files changed, 89 insertions(+), 629 deletions(-) create mode 100644 keyboards/solartempest/ak21/AK21_via_solar.json create mode 100644 keyboards/solartempest/ak21/readme.md delete mode 100644 keyboards/solartempest/sofle/.noci delete mode 100644 keyboards/solartempest/sofle/info.json delete mode 100644 keyboards/solartempest/sofle/keymaps/via/ocean_dream.c delete mode 100644 keyboards/solartempest/sofle/keymaps/via/rules.mk delete mode 100644 keyboards/solartempest/sofle/sofle.c delete mode 100644 keyboards/solartempest/sofle/sofle.h diff --git a/keyboards/solartempest/ak21/AK21_via_solar.json b/keyboards/solartempest/ak21/AK21_via_solar.json new file mode 100644 index 000000000000..0f369e01f272 --- /dev/null +++ b/keyboards/solartempest/ak21/AK21_via_solar.json @@ -0,0 +1,69 @@ +{ + "name": "AK21", + "vendorId": "0x414B", + "productId": "0x0021", + "lighting": "qmk_rgblight", + "matrix": { "rows": 6, "cols": 4 }, + "customKeycodes": [ + { + "name": "Super Alt Tab FWD", + "title": "Alt Tab Forwards in Windows", + "shortName": "ATABF" + }, + { + "name": "Super Alt Tab REV", + "title": "Alt Tab Reverse in Windows", + "shortName": "ATABR" + } + ], + "layouts": { + "keymap": [ + [ + { + "c": "#393B3B", + "t": "#91867A" + }, + "0,0", + "0,1", + "0,2", + "0,3" + ], + [ + "1,0", + "1,1", + "1,2", + "1,3" + ], + [ + "2,0", + "2,1", + "2,2", + { + "h": 2 + }, + "2,3" + ], + [ + "3,0", + "3,1", + "3,2" + ], + [ + "4,0", + "4,1", + "4,2", + { + "h": 2 + }, + "4,3" + ], + [ + { + "w": 2 + }, + "5,1", + "5,2" + ] +] + } +} \ No newline at end of file diff --git a/keyboards/solartempest/ak21/readme.md b/keyboards/solartempest/ak21/readme.md new file mode 100644 index 000000000000..ef0114b54ba6 --- /dev/null +++ b/keyboards/solartempest/ak21/readme.md @@ -0,0 +1,20 @@ +# Atlantis AK21 Macropad + +![Atlantis AK21](https://update) +![Rear View](https://update) +![PCB View](https://update) +![Side View](https://update) + +A 21-key macro pad with pushbutton rotary encoder and underglow RGB per key RGB and for the case. + +* Keyboard Maintainer: solartempest +* Hardware Supported: Atlantis AK21 +* Hardware Availability: [rioo897](https://shop198276076.world.taobao.com/index.htm?spm=2013.1.w5002-23418336364.2.3f4d7d51DkVX3s) + +Make example for this keyboard (after setting up your build environment): + + make solartempest/ak21:via + +To reset the board into bootloader mode, tap the Reset switch mounted on the bottom of the PCB. + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/solartempest/sofle/.noci b/keyboards/solartempest/sofle/.noci deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/keyboards/solartempest/sofle/info.json b/keyboards/solartempest/sofle/info.json deleted file mode 100644 index 16147f76dd51..000000000000 --- a/keyboards/solartempest/sofle/info.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "keyboard_name": "Solarius_Sofle", - "url": "", - "maintainer": "solartempest", - "width": 15, - "height": 8.0, - "layouts": { - "LAYOUT": { - "layout": [{"label":"0,3", "x":3.25, "y":0.5}, {"label":"5,3", "x":13.25, "y":0.5}, {"label":"0,2", "x":2.25, "y":0.63}, {"label":"0,4", "x":4.25, "y":0.63}, {"label":"5,4", "x":12.25, "y":0.63}, {"label":"5,2", "x":14.25, "y":0.63}, {"label":"0,5", "x":5.25, "y":0.73}, {"label":"5,5", "x":11.25, "y":0.73}, {"label":"0,0", "x":0.25, "y":0.86}, {"label":"0,1", "x":1.25, "y":0.86}, {"label":"5,1", "x":15.25, "y":0.86}, {"label":"5,0", "x":16.25, "y":0.86}, {"label":"1,3", "x":3.25, "y":1.46}, {"label":"1,6", "x":6.45, "y":1.46}, {"label":"6,6", "x":10.05, "y":1.46}, {"label":"6,3", "x":13.25, "y":1.46}, {"label":"1,2", "x":2.25, "y":1.56}, {"label":"1,4", "x":4.25, "y":1.56}, {"label":"6,4", "x":12.25, "y":1.56}, {"label":"6,2", "x":14.25, "y":1.56}, {"label":"1,5", "x":5.25, "y":1.66}, {"label":"6,5", "x":11.25, "y":1.66}, {"label":"1,0", "x":0.25, "y":1.76}, {"label":"1,1", "x":1.25, "y":1.76}, {"label":"6,1", "x":15.25, "y":1.76}, {"label":"6,0", "x":16.25, "y":1.76}, {"label":"2,3", "x":3.25, "y":2.36}, {"label":"4,0", "x":6.45, "y":2.36}, {"label":"9,5", "x":10.05, "y":2.36}, {"label":"7,3", "x":13.25, "y":2.36}, {"label":"2,2", "x":2.25, "y":2.46}, {"label":"2,4", "x":4.25, "y":2.46}, {"label":"7,4", "x":12.25, "y":2.46}, {"label":"7,2", "x":14.25, "y":2.46}, {"label":"2,5", "x":5.25, "y":2.56}, {"label":"7,5", "x":11.25, "y":2.56}, {"label":"2,0", "x":0.25, "y":2.66}, {"label":"2,1", "x":1.25, "y":2.66}, {"label":"7,1", "x":15.25, "y":2.66}, {"label":"7,0", "x":16.25, "y":2.66}, {"label":"3,3", "x":3.25, "y":3.26}, {"label":"3,6", "x":6.45, "y":3.26}, {"label":"8,6", "x":10.05, "y":3.26}, {"label":"8,3", "x":13.25, "y":3.26}, {"label":"3,2", "x":2.25, "y":3.36}, {"label":"3,4", "x":4.25, "y":3.36}, {"label":"8,4", "x":12.25, "y":3.36}, {"label":"8,2", "x":14.25, "y":3.36}, {"label":"3,5", "x":5.25, "y":3.46}, {"label":"8,5", "x":11.25, "y":3.46}, {"label":"3,0", "x":0.25, "y":3.56}, {"label":"3,1", "x":1.25, "y":3.56}, {"label":"8,1", "x":15.25, "y":3.56}, {"label":"8,0", "x":16.25, "y":3.56}, {"label":"4,2", "x":3.25, "y":4.26}, {"label":"9,1", "x":13.25, "y":4.26}, {"label":"4,3", "x":4.25, "y":4.36}, {"label":"9,2", "x":12.25, "y":4.36}, {"label":"4,1", "x":2.25, "y":4.36}, {"label":"9,0", "x":14.25, "y":4.36}, {"label":"4,4", "x":1, "y":9.96}, {"label":"4,5", "x":3.35, "y":8.71, "h":1.5}, {"label":"9,3", "x":0.8, "y":11.56}, {"label":"9,4", "x":-2.08, "y":11.01, "h":1.5}] - } - } -} diff --git a/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c b/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c deleted file mode 100644 index 6aa6a7a8b5b7..000000000000 --- a/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c +++ /dev/null @@ -1,555 +0,0 @@ -/* - * Copyright 2021 Tyler Thrailkill (@snowe/@snowe2010) - * - * 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 . - */ - -#include "ocean_dream.h" -#include "quantum.h" -#include "print.h" - -// Calculated Parameters -#define TWINKLE_PROBABILITY_MODULATOR 100 / TWINKLE_PROBABILITY // CALCULATED: Don't Touch -#define TOTAL_STARS STARS_PER_LINE *NUMBER_OF_STAR_LINES // CALCULATED: Don't Touch -#define OCEAN_ANIMATION_MODULATOR NUMBER_OF_FRAMES / OCEAN_ANIMATION_SPEED // CALCULATED: Don't Touch -#define SHOOTING_STAR_ANIMATION_MODULATOR NUMBER_OF_FRAMES / SHOOTING_STAR_ANIMATION_SPEED // CALCULATED: Don't Touch -#define STAR_ANIMATION_MODULATOR NUMBER_OF_FRAMES / STAR_ANIMATION_SPEED // CALCULATED: Don't Touch - -uint8_t animation_counter = 0; // global animation counter. -bool is_calm = false; -uint32_t starry_night_anim_timer = 0; -uint32_t starry_night_anim_sleep = 0; -static int current_wpm = 0; - -static uint8_t increment_counter(uint8_t counter, uint8_t max) { - counter++; - if (counter >= max) { - return 0; - } else { - return counter; - } -} - -#ifdef ENABLE_WAVE -static uint8_t decrement_counter(uint8_t counter, uint8_t max) { - counter--; - if (counter < 0 || counter > max) { - return max; - } else { - return counter; - } -} -#endif - -#ifdef ENABLE_MOON // region -# ifndef STATIC_MOON -uint8_t moon_animation_frame = 0; // keeps track of current moon frame -uint16_t moon_animation_counter = 0; // counts how many frames to wait before animating moon to next frame -# endif - -# ifdef STATIC_MOON -static const char PROGMEM moon[6] = { - 0x18, 0x7E, 0xFF, 0xC3, 0x81, 0x81, -}; -# endif - -# ifndef STATIC_MOON -static const char PROGMEM moon_animation[14][8] = { - // clang-format off - { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, - { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x42, 0x00, }, - { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xC3, 0x00, 0x00, }, - { 0x3C, 0x7E, 0xFF, 0xFF, 0xC3, 0x81, 0x00, 0x00, }, - { 0x3C, 0x7E, 0xFF, 0xC3, 0x81, 0x00, 0x00, 0x00, }, - { 0x3C, 0x7E, 0xC3, 0x81, 0x81, 0x00, 0x00, 0x00, }, - { 0x3C, 0x42, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, - { 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x42, 0x3C, }, - { 0x00, 0x00, 0x00, 0x81, 0x81, 0xC3, 0x7E, 0x3C, }, - { 0x00, 0x00, 0x00, 0x81, 0xC3, 0xFF, 0x7E, 0x3C, }, - { 0x00, 0x00, 0x81, 0xC3, 0xFF, 0xFF, 0x7E, 0x3C, }, - { 0x00, 0x00, 0xC3, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, - { 0x00, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, - // clang-format on -}; -# endif - -static void draw_moon(void) { -# ifdef STATIC_MOON - oled_set_cursor(MOON_COLUMN, MOON_LINE); - oled_write_raw_P(moon, 6); -# endif -# ifndef STATIC_MOON - moon_animation_counter = increment_counter(moon_animation_counter, ANIMATE_MOON_EVERY_N_FRAMES); - if (moon_animation_counter == 0) { - moon_animation_frame = increment_counter(moon_animation_frame, 14); - oled_set_cursor(MOON_COLUMN, MOON_LINE); - oled_write_raw_P(moon_animation[moon_animation_frame], 8); - } -# endif -} -#endif // endregion - -#ifdef ENABLE_WAVE // region -uint8_t starry_night_wave_frame_width_counter = 31; -uint8_t rough_waves_frame_counter = 0; - -// clang-format off -static const char PROGMEM ocean_top[8][32] = { - // still ocean - { - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - }, - // small ripples - { - 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - }, - // level 2 ripples - { - 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, - }, - // level 3 waves - { - 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, - }, - { - 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, - 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, - 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, - 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, - }, - { - 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, - 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, - 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, - 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, - }, -}; -static const char PROGMEM ocean_bottom[8][32] = { - // still ocean - { - 0x00, 0x40, 0x40, 0x41, 0x01, 0x01, 0x01, 0x21, - 0x20, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x44, - 0x44, 0x40, 0x40, 0x00, 0x00, 0x08, 0x08, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x40, 0x40, 0x00, 0x00, - }, - // small ripples - { - 0x00, 0x00, 0x40, 0x40, 0x01, 0x01, 0x01, 0x20, - 0x20, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, - 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, - }, - // level 2 ripples - { - 0x00, 0x00, 0x40, 0x40, 0x01, 0x01, 0x01, 0x20, - 0x20, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, - 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, - }, - // level 3 waves - { - 0x00, 0x40, 0x40, 0x42, 0x42, 0x03, 0x11, 0x11, - 0x20, 0x20, 0x00, 0x00, 0x08, 0x0C, 0x0C, 0x04, - 0x05, 0x41, 0x41, 0x21, 0x20, 0x00, 0x00, 0x08, - 0x0A, 0x0A, 0x0B, 0x41, 0x41, 0x41, 0x41, 0x00, - }, - { - 0x10, 0x10, 0x00, 0x80, 0x84, 0xC4, 0x02, 0x06, - 0x84, 0x44, 0xC0, 0x80, 0x80, 0x20, 0x20, 0x10, - 0x08, 0x12, 0x91, 0x81, 0x42, 0x40, 0x00, 0x00, - 0x10, 0x12, 0x22, 0x22, 0x24, 0x04, 0x84, 0x80, - }, - { - 0x08, 0x80, 0x80, 0x82, 0x82, 0x03, 0x21, 0x21, - 0x10, 0x10, 0x00, 0x00, 0x04, 0x04, 0x0C, 0x08, - 0x09, 0x41, 0x42, 0x22, 0x20, 0x00, 0x00, 0x08, - 0x0A, 0x0A, 0x0B, 0x41, 0x43, 0x42, 0x42, 0x00, - }, -}; -// clang-format on - -static void animate_waves(void) { - starry_night_wave_frame_width_counter = decrement_counter(starry_night_wave_frame_width_counter, WIDTH - 1); // only 3 frames for last wave type - rough_waves_frame_counter = increment_counter(rough_waves_frame_counter, 3); // only 3 frames for last wave type - - void draw_ocean(uint8_t frame, uint16_t offset, uint8_t byte_index) { - oled_write_raw_byte(pgm_read_byte(ocean_top[frame] + byte_index), offset); - oled_write_raw_byte(pgm_read_byte(ocean_bottom[frame] + byte_index), offset + WIDTH); - } - - for (int i = 0; i < WIDTH; ++i) { - uint16_t offset = OCEAN_LINE * WIDTH + i; - uint8_t byte_index = starry_night_wave_frame_width_counter + i; - if (byte_index >= WIDTH) { - byte_index = byte_index - WIDTH; - } - if (is_calm || current_wpm <= WAVE_CALM) { - draw_ocean(0, offset, byte_index); - } else if (current_wpm <= WAVE_HEAVY_STORM) { - draw_ocean(1, offset, byte_index); - } else if (current_wpm <= WAVE_HURRICANE) { - draw_ocean(2, offset, byte_index); - } else { - draw_ocean(3 + rough_waves_frame_counter, offset, byte_index); - } - } -} -#endif // endregion - -#ifdef ENABLE_ISLAND // region -uint8_t island_frame_1 = 0; - -// clang-format off -// only use 46 bytes (first 18 are blank, so we don't write them, makes it smaller and we can see the shooting stars properly!) - -// To save space and allow the shooting stars to be seen, only draw the tree on every frame. -// Tree is only 14bytes wide so we save 108 bytes on just the first row. Second row, the -// first 18 bytes is always the same piece of land, so only store that once, which saves 90 bytes -static const char PROGMEM islandRightTop[6][14] = { - {0x84, 0xEC, 0x6C, 0x3C, 0xF8, 0xFE, 0x3F, 0x6B, 0xDB, 0xB9, 0x30, 0x40, 0x00, 0x00,}, - {0x80, 0xC3, 0xEE, 0x7C, 0xB8, 0xFC, 0xFE, 0x6F, 0xDB, 0x9B, 0xB2, 0x30, 0x00, 0x00,}, - {0x00, 0xC0, 0xEE, 0x7F, 0x3D, 0xF8, 0xFC, 0x7E, 0x57, 0xDB, 0xDB, 0x8A, 0x00, 0x00,}, - {0x00, 0xC0, 0xE6, 0x7F, 0x3B, 0xF9, 0xFC, 0xFC, 0xB6, 0xB3, 0x33, 0x61, 0x00, 0x00,}, - {0x00, 0x00, 0x00, 0x00, 0x80, 0xEE, 0xFF, 0xFB, 0xF9, 0xFC, 0xDE, 0xB6, 0xB6, 0x24,}, - {0x00, 0x00, 0x00, 0x00, 0xC0, 0xEE, 0xFE, 0xFF, 0xFB, 0xFD, 0xEE, 0xB6, 0xB6, 0x92,}, -}; -static const char PROGMEM islandRightBottom[6][14] = { - {0x41, 0x40, 0x60, 0x3E, 0x3F, 0x23, 0x20, 0x60, 0x41, 0x43, 0x40, 0x40, 0x40, 0x80,}, - {0x40, 0x41, 0x60, 0x3E, 0x3F, 0x23, 0x20, 0x60, 0x40, 0x40, 0x41, 0x41, 0x40, 0x80,}, - {0x40, 0x40, 0x61, 0x3D, 0x3F, 0x27, 0x21, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80,}, - {0x40, 0x43, 0x61, 0x3C, 0x3F, 0x27, 0x21, 0x60, 0x41, 0x43, 0x43, 0x42, 0x40, 0x80,}, - {0x40, 0x40, 0x60, 0x3C, 0x3F, 0x27, 0x23, 0x63, 0x44, 0x40, 0x41, 0x41, 0x41, 0x81,}, - {0x40, 0x40, 0x60, 0x3C, 0x3F, 0x27, 0x23, 0x63, 0x42, 0x42, 0x41, 0x41, 0x41, 0x80,}, -}; -static const char PROGMEM islandLeft[18] = { - 0x80, 0x40, 0x40, 0x40, 0x40, 0x60, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x60, 0x40, 0x40, -}; -// clang-format on - -static void animate_island(void) { - if (animation_counter == 0) { - island_frame_1 = increment_counter(island_frame_1, 2); - } - - void draw_island_parts(uint8_t frame) { - oled_set_cursor(ISLAND_COLUMN + 3, ISLAND_LINE); - oled_write_raw_P(islandRightTop[frame], 14); - oled_set_cursor(ISLAND_COLUMN + 0, ISLAND_LINE + 1); - oled_write_raw_P(islandLeft, 18); - oled_set_cursor(ISLAND_COLUMN + 3, ISLAND_LINE + 1); - oled_write_raw_P(islandRightBottom[frame], 14); - } - - if (is_calm || current_wpm < ISLAND_CALM) { - draw_island_parts(0); - } else if (current_wpm >= ISLAND_CALM && current_wpm < ISLAND_HEAVY_STORM) { - draw_island_parts(island_frame_1 + 1); - } else if (current_wpm >= ISLAND_HEAVY_STORM && current_wpm < ISLAND_HURRICANE) { - draw_island_parts(island_frame_1 + 2); - } else { - draw_island_parts(island_frame_1 + 4); - } -} -#endif // endregion - -#ifdef ENABLE_STARS // region -bool stars_setup = false; // only setup stars once, then we just twinkle them -struct Coordinate { - int x; - int y; - bool exists; -}; - -struct Coordinate stars[TOTAL_STARS]; // tracks all stars/coordinates - -/** - * Setup all the initial stars on the screen - * This function divides the screen into regions based on STARS_PER_LINE and NUMBER_OF_STAR_LINES - * where each line is made up of 8x8 pixel groups, that are populated by a single star. - * - * Not sure how this function will work with larger or smaller screens. - * It should be fine, as long as the screen width is a multiple of 8 - */ -static void setup_stars(void) { - // For every line, split the line into STARS_PER_LINE, find a random point in that region, and turn the pixel on - // 36% probability it will not be added - // (said another way, 80% chance it will start out lit in the x direction, then 80% chance it will start out lit in the y direction = 64% probability it will start out lit at all) - for (int line = 0; line < NUMBER_OF_STAR_LINES; ++line) { - for (int column_group = 0; column_group < STARS_PER_LINE; ++column_group) { - uint8_t rand_column = rand() % 10; - uint8_t rand_row = rand() % 10; - if (rand_column < 8 && rand_row < 8) { - int column_adder = column_group * 8; - int line_adder = line * 8; - int x = rand_column + column_adder; - int y = rand_row + line_adder; - oled_write_pixel(x, y, true); - stars[column_group + (line * STARS_PER_LINE)].x = x; - stars[column_group + (line * STARS_PER_LINE)].y = y; - stars[column_group + (line * STARS_PER_LINE)].exists = true; - } else { - stars[column_group + (line * STARS_PER_LINE)].exists = false; - } - } - } - stars_setup = true; -} - -/** - * Twinkle the stars (move them one pixel in any direction) with a probability of 50% to twinkle any given star - */ -static void twinkle_stars(void) { - for (int line = 0; line < NUMBER_OF_STAR_LINES; ++line) { - for (int column_group = 0; column_group < STARS_PER_LINE; ++column_group) { - struct Coordinate star = stars[column_group + (line * STARS_PER_LINE)]; - - // skip stars that were never added - if (!star.exists) { - continue; - } - if (rand() % TWINKLE_PROBABILITY_MODULATOR == 0) { - oled_write_pixel(star.x, star.y, false); // black out pixel - - // don't allow stars to leave their own region - if (star.x == (column_group * 8)) { // star is the farthest left it can go in its region - star.x++; // move it right immediately - } else if (star.x == (((column_group + 1) * 8) - 1)) { // star is farthest right it can go in its region - star.x--; // move it left immediately - } - if (star.y == (line * 8)) { // star is the farthest up it can go in its region - star.y++; // move it down immediately - } else if (star.y == (((line + 1) * 8) - 1)) { // star is farthest down it can go in its region - star.y--; // move it up immediately - } - - // now decide direction - int new_x; - int x_choice = rand() % 3; - if (x_choice == 0) { - new_x = star.x - 1; - } else if (x_choice == 1) { - new_x = star.x + 1; - } else { - new_x = star.x; - } - - int new_y; - int y_choice = rand() % 3; - if (y_choice == 0) { - new_y = star.y - 1; - } else if (y_choice == 1) { - new_y = star.y + 1; - } else { - new_y = star.y; - } - - star.x = new_x; - star.y = new_y; - oled_write_pixel(new_x, new_y, true); - } - - stars[column_group + (line * STARS_PER_LINE)] = star; - } - } -} - -/** - * Setup the stars and then animate them on subsequent frames - */ -static void animate_stars(void) { - if (!stars_setup) { - setup_stars(); - } else { - twinkle_stars(); - } -} -#endif // endregion - -#ifdef ENABLE_SHOOTING_STARS // region -bool shooting_stars_setup = false; // only setup shooting stars array once with defaults - -struct ShootingStar { - int x_1; - int y_1; - int x_2; - int y_2; - bool running; - int frame; - int delay; -}; - -struct ShootingStar shooting_stars[MAX_NUMBER_OF_SHOOTING_STARS]; // tracks all the shooting stars - -static void setup_shooting_star(struct ShootingStar *shooting_star) { - int column_to_start = rand() % (WIDTH / 2); - int row_to_start = rand() % (HEIGHT - 48); // shooting_stars travel diagonally 1 down, 1 across. So the lowest a shooting_star can start and not 'hit' the ocean is 32 above the ocean. - - shooting_star->x_1 = column_to_start; - shooting_star->y_1 = row_to_start; - shooting_star->x_2 = column_to_start + 1; - shooting_star->y_2 = row_to_start + 1; - shooting_star->running = true; - shooting_star->frame++; - shooting_star->delay = rand() % SHOOTING_STAR_DELAY; -} - -static void move_shooting_star(struct ShootingStar *shooting_star) { - oled_write_pixel(shooting_star->x_1, shooting_star->y_1, false); - oled_write_pixel(shooting_star->x_2, shooting_star->y_2, false); - - shooting_star->x_1++; - shooting_star->y_1++; - shooting_star->x_2++; - shooting_star->y_2++; - shooting_star->frame++; - - oled_write_pixel(shooting_star->x_1, shooting_star->y_1, true); - oled_write_pixel(shooting_star->x_2, shooting_star->y_2, true); -} - -static void finish_shooting_star(struct ShootingStar *shooting_star) { - oled_write_pixel(shooting_star->x_1, shooting_star->y_1, false); - oled_write_pixel(shooting_star->x_2, shooting_star->y_2, false); - shooting_star->running = false; - shooting_star->frame = 0; -} - -static void animate_shooting_star(struct ShootingStar *shooting_star) { - if (shooting_star->frame > SHOOTING_STAR_FRAMES) { - finish_shooting_star(shooting_star); - return; - } else if (!shooting_star->running) { - setup_shooting_star(shooting_star); - } else { - if (shooting_star->delay == 0) { - move_shooting_star(shooting_star); - } else { - shooting_star->delay--; - } - } -} - -static void animate_shooting_stars(void) { - if (is_calm) { - return; - } - if (!shooting_stars_setup) { - for (int i = 0; i < MAX_NUMBER_OF_SHOOTING_STARS; ++i) { - shooting_stars[i].running = false; - } - shooting_stars_setup = true; - } - /** - * Fixes issue with stars that were falling _while_ the - * wpm dropped below the condition for them to keep falling - */ - void end_extra_stars(uint8_t starting_index) { - for (int shooting_star_index = starting_index; shooting_star_index < MAX_NUMBER_OF_SHOOTING_STARS; ++shooting_star_index) { - struct ShootingStar shooting_star = shooting_stars[shooting_star_index]; - if (shooting_star.running) { - finish_shooting_star(&shooting_star); - shooting_stars[shooting_star_index] = shooting_star; - } - } - } - - int number_of_shooting_stars = current_wpm / SHOOTING_STAR_WPM_INCREMENT; - number_of_shooting_stars = (number_of_shooting_stars > MAX_NUMBER_OF_SHOOTING_STARS) ? MAX_NUMBER_OF_SHOOTING_STARS : number_of_shooting_stars; - - if (number_of_shooting_stars == 0) { - // make sure all shooting_stars are ended - end_extra_stars(0); - } else { - for (int shooting_star_index = 0; shooting_star_index < number_of_shooting_stars; ++shooting_star_index) { - struct ShootingStar shooting_star = shooting_stars[shooting_star_index]; - animate_shooting_star(&shooting_star); - shooting_stars[shooting_star_index] = shooting_star; - } - end_extra_stars(number_of_shooting_stars); - } -} -#endif // endregion - -/** - * Main rendering function - * - * Calls all different animations at different rates - */ -void render_stars(void) { - // // animation timer - if (timer_elapsed32(starry_night_anim_timer) > STARRY_NIGHT_ANIM_FRAME_DURATION) { - starry_night_anim_timer = timer_read32(); - current_wpm = get_current_wpm(); - -#ifdef ENABLE_ISLAND - animate_island(); -#endif - -#ifdef ENABLE_SHOOTING_STARS - if (animation_counter % SHOOTING_STAR_ANIMATION_MODULATOR == 0) { - animate_shooting_stars(); - } -#endif - -#ifdef ENABLE_STARS - // TODO offsetting the star animation from the wave animation would look better, - // but if I do that, then the stars appear in the water because - // the ocean animation has to wait a bunch of frames to overwrite it. - // Possible solutions: - // 1. Only draw stars to the top of the island/ocean. - // 2. Draw ocean every frame, only move ocean on frames matching modulus - // Problems: - // 1. What if someone wants to move the island up a bit, or they want to have the stars reflect in the water? - // 2. More cpu intensive. And I'm already running out of cpu as it is... - if (animation_counter % STAR_ANIMATION_MODULATOR == 0) { - animate_stars(); - } -#endif - -#ifdef ENABLE_WAVE - if (animation_counter % OCEAN_ANIMATION_MODULATOR == 0) { - animate_waves(); - } -#endif - -#ifdef ENABLE_MOON - draw_moon(); -#endif - - animation_counter = increment_counter(animation_counter, NUMBER_OF_FRAMES); - } - - // this fixes the screen on and off bug - if (current_wpm > 0) { - oled_on(); - starry_night_anim_sleep = timer_read32(); - } else if (timer_elapsed32(starry_night_anim_sleep) > OLED_TIMEOUT) { - oled_off(); - } -} \ No newline at end of file diff --git a/keyboards/solartempest/sofle/keymaps/via/rules.mk b/keyboards/solartempest/sofle/keymaps/via/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/solartempest/sofle/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/solartempest/sofle/sofle.c b/keyboards/solartempest/sofle/sofle.c deleted file mode 100644 index b51a7e8a0460..000000000000 --- a/keyboards/solartempest/sofle/sofle.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . -*/ - -#include "sofle.h" diff --git a/keyboards/solartempest/sofle/sofle.h b/keyboards/solartempest/sofle/sofle.h deleted file mode 100644 index 6e9b06cef09f..000000000000 --- a/keyboards/solartempest/sofle/sofle.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright - * 2021 solartempest - * 2021 QMK - * - * 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 . - */ - -#pragma once - -#include "quantum.h" - -// Extra keys are added for rotary encoder support in VIA -#define LAYOUT( \ - LA1, LA2, LA3, LA4, LA5, LA6, RA6, RA5, RA4, RA3, RA2, RA1, \ - LB1, LB2, LB3, LB4, LB5, LB6, LB7, RB7, RB6, RB5, RB4, RB3, RB2, RB1, \ - LC1, LC2, LC3, LC4, LC5, LC6, LE1, RE6, RC6, RC5, RC4, RC3, RC2, RC1, \ - LD1, LD2, LD3, LD4, LD5, LD6, LD7, RD7, RD6, RD5, RD4, RD3, RD2, RD1, \ - LE2, LE3, LE4, LE5, LE6, RE5, RE4, RE3, RE2, RE1 \ - ) \ - { \ - { LA1, LA2, LA3, LA4, LA5, LA6, KC_NO }, \ - { LB1, LB2, LB3, LB4, LB5, LB6, LB7 }, \ - { LC1, LC2, LC3, LC4, LC5, LC6, KC_NO }, \ - { LD1, LD2, LD3, LD4, LD5, LD6, LD7 }, \ - { LE1, LE2, LE3, LE4, LE5, LE6, KC_NO }, \ - { RA1, RA2, RA3, RA4, RA5, RA6, KC_NO }, \ - { RB1, RB2, RB3, RB4, RB5, RB6, RB7 }, \ - { RC1, RC2, RC3, RC4, RC5, RC6, KC_NO }, \ - { RD1, RD2, RD3, RD4, RD5, RD6, RD7 }, \ - { RE1, RE2, RE3, RE4, RE5, RE6, KC_NO } \ - } From 5ffa35ce567f7a381004c44edad6a4e117c31575 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 7 Nov 2021 01:36:06 -0400 Subject: [PATCH 055/155] Restore files --- .../solartempest/ak21/AK21_via_solar.json | 69 ------------------- 1 file changed, 69 deletions(-) delete mode 100644 keyboards/solartempest/ak21/AK21_via_solar.json diff --git a/keyboards/solartempest/ak21/AK21_via_solar.json b/keyboards/solartempest/ak21/AK21_via_solar.json deleted file mode 100644 index 0f369e01f272..000000000000 --- a/keyboards/solartempest/ak21/AK21_via_solar.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "AK21", - "vendorId": "0x414B", - "productId": "0x0021", - "lighting": "qmk_rgblight", - "matrix": { "rows": 6, "cols": 4 }, - "customKeycodes": [ - { - "name": "Super Alt Tab FWD", - "title": "Alt Tab Forwards in Windows", - "shortName": "ATABF" - }, - { - "name": "Super Alt Tab REV", - "title": "Alt Tab Reverse in Windows", - "shortName": "ATABR" - } - ], - "layouts": { - "keymap": [ - [ - { - "c": "#393B3B", - "t": "#91867A" - }, - "0,0", - "0,1", - "0,2", - "0,3" - ], - [ - "1,0", - "1,1", - "1,2", - "1,3" - ], - [ - "2,0", - "2,1", - "2,2", - { - "h": 2 - }, - "2,3" - ], - [ - "3,0", - "3,1", - "3,2" - ], - [ - "4,0", - "4,1", - "4,2", - { - "h": 2 - }, - "4,3" - ], - [ - { - "w": 2 - }, - "5,1", - "5,2" - ] -] - } -} \ No newline at end of file From 6f39df55f892064dde96a97d9c8a81d2303a60f3 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 7 Nov 2021 01:50:21 -0400 Subject: [PATCH 056/155] Restoring files --- keyboards/solartempest/9e/info.json | 12 + .../solartempest/9e/keymaps/default/keymap.c | 208 +++ .../solartempest/9e/keymaps/via/config.h | 22 + .../solartempest/9e/keymaps/via/rules.mk | 1 + ...21_via_solar.json => ak21 VIA keymap.json} | 0 .../solartempest/ak21/ak21 VIA layout.json | 267 +++ keyboards/solartempest/ak21/ak21.c | 19 + keyboards/solartempest/ak21/ak21.h | 38 + keyboards/solartempest/ak21/config.h | 94 ++ keyboards/solartempest/ak21/info.json | 39 + .../ak21/keymaps/default/keymap.c | 293 ++++ .../solartempest/ak21/keymaps/via/config.h | 22 + .../solartempest/ak21/keymaps/via/keymap.c | 293 ++++ .../solartempest/ak21/keymaps/via/rules.mk | 1 + keyboards/solartempest/ak21/rules.mk | 28 + .../ak21/solartempest_ak21_via.hex | 1475 +++++++++++++++++ keyboards/solartempest/ps17/info.json | 38 + .../solartempest/ps17/keymaps/via/config.h | 22 + .../solartempest/ps17/keymaps/via/rules.mk | 1 + .../solartempest/ps17/ps17 VIA keymap.json | 51 + .../solartempest/ps17/ps17 VIA layout.json | 267 +++ keyboards/solartempest/ps17/ps17.h | 61 + keyboards/solartempest/ps17/readme.md | 39 + keyboards/solartempest/sofle/.noci | 0 keyboards/solartempest/sofle/info.json | 12 + .../sofle/keymaps/via/ocean_dream.c | 555 +++++++ .../solartempest/sofle/keymaps/via/rules.mk | 1 + keyboards/solartempest/sofle/sofle.c | 19 + keyboards/solartempest/sofle/sofle.h | 42 + 29 files changed, 3920 insertions(+) create mode 100644 keyboards/solartempest/9e/info.json create mode 100644 keyboards/solartempest/9e/keymaps/default/keymap.c create mode 100644 keyboards/solartempest/9e/keymaps/via/config.h create mode 100644 keyboards/solartempest/9e/keymaps/via/rules.mk rename keyboards/solartempest/ak21/{AK21_via_solar.json => ak21 VIA keymap.json} (100%) create mode 100644 keyboards/solartempest/ak21/ak21 VIA layout.json create mode 100644 keyboards/solartempest/ak21/ak21.c create mode 100644 keyboards/solartempest/ak21/ak21.h create mode 100644 keyboards/solartempest/ak21/config.h create mode 100644 keyboards/solartempest/ak21/info.json create mode 100644 keyboards/solartempest/ak21/keymaps/default/keymap.c create mode 100644 keyboards/solartempest/ak21/keymaps/via/config.h create mode 100644 keyboards/solartempest/ak21/keymaps/via/keymap.c create mode 100644 keyboards/solartempest/ak21/keymaps/via/rules.mk create mode 100644 keyboards/solartempest/ak21/rules.mk create mode 100644 keyboards/solartempest/ak21/solartempest_ak21_via.hex create mode 100644 keyboards/solartempest/ps17/info.json create mode 100644 keyboards/solartempest/ps17/keymaps/via/config.h create mode 100644 keyboards/solartempest/ps17/keymaps/via/rules.mk create mode 100644 keyboards/solartempest/ps17/ps17 VIA keymap.json create mode 100644 keyboards/solartempest/ps17/ps17 VIA layout.json create mode 100644 keyboards/solartempest/ps17/ps17.h create mode 100644 keyboards/solartempest/ps17/readme.md create mode 100644 keyboards/solartempest/sofle/.noci create mode 100644 keyboards/solartempest/sofle/info.json create mode 100644 keyboards/solartempest/sofle/keymaps/via/ocean_dream.c create mode 100644 keyboards/solartempest/sofle/keymaps/via/rules.mk create mode 100644 keyboards/solartempest/sofle/sofle.c create mode 100644 keyboards/solartempest/sofle/sofle.h diff --git a/keyboards/solartempest/9e/info.json b/keyboards/solartempest/9e/info.json new file mode 100644 index 000000000000..82c46121d321 --- /dev/null +++ b/keyboards/solartempest/9e/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "A9e", + "url": "", + "maintainer": "solartempest", + "width": 20.25, + "height": 5.5, + "layouts": { + "LAYOUT": { + "layout": [{"label":"0,0", "x":0.25, "y":0}, {"label":"1,0", "x":2.25, "y":0}, {"label":"1,1", "x":3.25, "y":0, "h":1.5}, {"label":"1,2", "x":4.25, "y":0}, {"label":"0,3", "x":6.25, "y":0}, {"label":"0,4", "x":7.25, "y":0}, {"label":"0,5", "x":8.25, "y":0}, {"label":"0,6", "x":9.25, "y":0}, {"label":"0,7", "x":10.25, "y":0}, {"label":"0,8", "x":11.25, "y":0}, {"label":"0,9", "x":13.25, "y":0}, {"label":"0,10", "x":14.25, "y":0, "h":1.5}, {"label":"0,11", "x":15.25, "y":0}, {"label":"1,9", "x":17.25, "y":0}, {"label":"1,10", "x":18.25, "y":0, "h":1.5}, {"label":"1,11", "x":19.25, "y":0}, {"label":"0,1", "x":0, "y":1, "w":1.5}, {"label":"1,3", "x":6.25, "y":1}, {"label":"1,4", "x":7.25, "y":1}, {"label":"1,5", "x":8.25, "y":1}, {"label":"1,6", "x":9.25, "y":1}, {"label":"1,7", "x":10.25, "y":1}, {"label":"1,8", "x":11.25, "y":1}, {"label":"0,2", "x":0.25, "y":2}, {"label":"2,0", "x":2.25, "y":2}, {"label":"2,1", "x":3.25, "y":2, "h":1.5}, {"label":"2,2", "x":4.25, "y":2}, {"label":"2,3", "x":6.25, "y":2}, {"label":"2,4", "x":7.25, "y":2}, {"label":"2,5", "x":8.25, "y":2}, {"label":"2,6", "x":9.25, "y":2}, {"label":"2,7", "x":10.25, "y":2}, {"label":"2,8", "x":11.25, "y":2}, {"label":"2,9", "x":15.25, "y":2}, {"label":"2,10", "x":16.25, "y":2, "h":1.5}, {"label":"2,11", "x":17.25, "y":2}, {"label":"3,3", "x":6.25, "y":3.5}, {"label":"3,4", "x":7.25, "y":3.5, "h":1.5}, {"label":"3,5", "x":8.25, "y":3.5}, {"label":"3,6", "x":9.25, "y":3.5}, {"label":"3,7", "x":10.25, "y":3.5, "h":1.5}, {"label":"3,8", "x":11.25, "y":3.5}, {"label":"3,9", "x":15.25, "y":4.5}, {"label":"3,10", "x":16.25, "y":4.5, "h":1.5}, {"label":"3,11", "x":17.25, "y":4.5}] + } + } +} diff --git a/keyboards/solartempest/9e/keymaps/default/keymap.c b/keyboards/solartempest/9e/keymaps/default/keymap.c new file mode 100644 index 000000000000..916fa70260df --- /dev/null +++ b/keyboards/solartempest/9e/keymaps/default/keymap.c @@ -0,0 +1,208 @@ +#include "A9e.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + KEYMAP( + KC_L, KC_1, KC_R, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_L, KC_4, KC_R, + KC_L, KC_2, KC_R, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_L, KC_5, KC_R, + KC_L, KC_3, KC_R, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_L, KC_6, KC_R, + KC_UP, KC_8, KC_DOWN, RGB_VAI, KC_9, RGB_VAD, KC_L, KC_7, KC_R), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + KEYMAP( + 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, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + + + switch (id) { + + } + return MACRO_NONE; +} + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void encoder_update_user(uint8_t index, bool clockwise) +{ + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 0)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 2)); + } + } else if (index == 1) { /* Second encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 0)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 2)); + }} else if (index == 2) { /* 3 encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 0)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 2)); + }} else if (index == 3) { /* 4 encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 9)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 0, 11)); + }} else if (index == 4) { /* 5 encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 9)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 1, 11)); + }} else if (index == 5) { /* 6 encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 9)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 2, 11)); + }} else if (index == 6) { /* 7 encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 9)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 11)); + }} else if (index == 7) { /* 8 encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 3)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 5)); + }} else if (index == 8) { /* 9 encoder */ + if (clockwise) { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 6)); + } else { + tap_code(dynamic_keymap_get_keycode(biton32(layer_state), 3, 8)); + } + } +} + + + +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_KANA)) { + + } else { + + } + +} \ No newline at end of file diff --git a/keyboards/solartempest/9e/keymaps/via/config.h b/keyboards/solartempest/9e/keymaps/via/config.h new file mode 100644 index 000000000000..8c2aeca25c0e --- /dev/null +++ b/keyboards/solartempest/9e/keymaps/via/config.h @@ -0,0 +1,22 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . +*/ + +#pragma once + +// Set 10 layers for VIA +#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/9e/keymaps/via/rules.mk b/keyboards/solartempest/9e/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/solartempest/9e/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/solartempest/ak21/AK21_via_solar.json b/keyboards/solartempest/ak21/ak21 VIA keymap.json similarity index 100% rename from keyboards/solartempest/ak21/AK21_via_solar.json rename to keyboards/solartempest/ak21/ak21 VIA keymap.json diff --git a/keyboards/solartempest/ak21/ak21 VIA layout.json b/keyboards/solartempest/ak21/ak21 VIA layout.json new file mode 100644 index 000000000000..dbec06309e55 --- /dev/null +++ b/keyboards/solartempest/ak21/ak21 VIA layout.json @@ -0,0 +1,267 @@ +{ + "name": "AK21", + "vendorProductId": 1095434273, + "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + "layers": [ + [ + "MO(1)", + "KC_MSTP", + "USER01", + "USER00", + "KC_NLCK", + "KC_PSLS", + "KC_PAST", + "KC_PMNS", + "KC_P7", + "KC_P8", + "KC_P9", + "KC_PPLS", + "KC_P4", + "KC_P5", + "KC_P6", + "KC_NO", + "KC_P1", + "KC_P2", + "KC_P3", + "KC_PENT", + "KC_P0", + "KC_P0", + "KC_PDOT", + "KC_NO" + ], + [ + "KC_TRNS", + "TO(2)", + "TO(3)", + "TO(4)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "RESET", + "KC_TRNS", + "KC_NO" + ], + [ + "TO(0)", + "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_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "TO(0)", + "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_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "TO(0)", + "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_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ] + ] +} \ No newline at end of file diff --git a/keyboards/solartempest/ak21/ak21.c b/keyboards/solartempest/ak21/ak21.c new file mode 100644 index 000000000000..4d53707a6fa8 --- /dev/null +++ b/keyboards/solartempest/ak21/ak21.c @@ -0,0 +1,19 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#include "ak21.h" diff --git a/keyboards/solartempest/ak21/ak21.h b/keyboards/solartempest/ak21/ak21.h new file mode 100644 index 000000000000..2bf922bf5158 --- /dev/null +++ b/keyboards/solartempest/ak21/ak21.h @@ -0,0 +1,38 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#pragma once +#include "quantum.h" + +#ifdef RGBLIGHT_ENABLE + #define LAYOUT( \ + K00, K01, K02, K03, \ + K10, K11, K12, K13, \ + K20, K21, K22, K23, \ + K30, K31, K32, \ + K40, K41, K42, K43, \ + K50, K52 \ + ) { \ + { K00, K01, K02, K03 }, \ + { K10, K11, K12, K13 }, \ + { K20, K21, K22, K23 }, \ + { K30, K31, K32, KC_NO }, \ + { K40, K41, K42, K43 }, \ + { K50, KC_NO, K52, KC_NO }, \ + } +#endif diff --git a/keyboards/solartempest/ak21/config.h b/keyboards/solartempest/ak21/config.h new file mode 100644 index 000000000000..2931a96fccf5 --- /dev/null +++ b/keyboards/solartempest/ak21/config.h @@ -0,0 +1,94 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#pragma once +#include "config_common.h" + +// USB Device descriptor parameter +#define VENDOR_ID 0x414B // "AK" +#define PRODUCT_ID 0x0021 +#define DEVICE_VER 0x0001 // Ver1 +#define MANUFACTURER ATLANTIS +#define PRODUCT AK21 + + +// key matrix size +#ifdef RGBLIGHT_ENABLE + #define MATRIX_ROWS 6 + #define MATRIX_COLS 4 +#endif + +#define MATRIX_ROW_PINS { B3, F1, F4, F5, F6, F7 } +#define MATRIX_COL_PINS { B2, F0, D6, D7 } +#define UNUSED_PINS + +// COL2ROW or ROW2COL +#define DIODE_DIRECTION ROW2COL + +// For LED status indicators +#define LED_NUM_LOCK_PIN E6 +#define LED_PIN_ON_STATE 0 + +#define RGB_DI_PIN B0 +#ifdef RGBLIGHT_ENABLE + #define RGBLED_NUM 33 // 21 key + 12 underglow for RGBLIGHT + #define RGBLIGHT_HUE_STEP 8 + #define RGBLIGHT_SAT_STEP 8 + #define RGBLIGHT_VAL_STEP 8 + #define RGBLIGHT_DEFAULT_VAL 40 // default brightness on clearing EEPROM + #define RGBLIGHT_LIMIT_VAL 200 // brightness level max is 255 + #define RGBLIGHT_SLEEP // if defined, RGB lighting off when host is sleeping + #define RGBLIGHT_ANIMATIONS + + //RGB LED Conversion macro from physical array to electric array + //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping + #define LED_LAYOUT( \ + L01, L02, L03, L04, L05, \ + L10, L11, L12, L13, L14, L15, \ + L20, L21, L22, L23, L25, \ + L30, L31, L32, L33, L34, L35, \ + L40, L41, L42, L43, L45, \ + L51, L53, L55, \ + L60, L63, L65 ) \ + { \ + L01,L02,L03,L05,L14,L13,L12,L11,L21,L22,L23,L34,L33,L32,L31,L41,L42,L43,L55,L53,L51,L60,L63,L65,L45,L35,L25,L04,L10,L20,L30,L40, \ + } + //RGB LED logical order map + //Right->Left, Top->Bottom + #define RGBLIGHT_LED_MAP LED_LAYOUT( \ + 4, 3, 2, 1, 0, \ + 10, 9, 8, 7, 6, 5, \ + 15, 14, 13, 12, 11, \ + 21, 20, 19, 18, 17, 16, \ + 26, 25, 24, 23, 22, \ + 29, 28, 27, \ + 32, 31, 30 ) +#endif + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +#define COMBO_COUNT 2 //Number of tap combos used +#define COMBO_TERM 300 //Default combo time is 200ms + +#define TAPPING_TERM 200 //Tap dance time diff --git a/keyboards/solartempest/ak21/info.json b/keyboards/solartempest/ak21/info.json new file mode 100644 index 000000000000..8ebc6f69bdc9 --- /dev/null +++ b/keyboards/solartempest/ak21/info.json @@ -0,0 +1,39 @@ +{ + "keyboard_name": "Atlantis AK21 Macropad", + "url": "", + "maintainer": "solartempest", + "width": 4, + "height": 6, + "layouts": { + "LAYOUT": { + "layout": [ + {"x":0, "y":0}, + {"x":0, "y":1}, + {"x":0, "y":2}, + {"x":0, "y":3}, + + {"x":1, "y":0}, + {"x":1, "y":1}, + {"x":1, "y":2}, + {"x":1, "y":3}, + + {"x":2, "y":0}, + {"x":2, "y":1}, + {"x":2, "y":2}, + {"x":2, "y":3, "h":2}, + + {"x":3, "y":0}, + {"x":3, "y":1}, + {"x":3, "y":2}, + + {"x":4, "y":0}, + {"x":4, "y":1}, + {"x":4, "y":2}, + {"x":4, "y":3, "h":2}, + + {"x":5, "y":0, "w":2}, + {"x":5, "y":2}, + ] + } + } +} diff --git a/keyboards/solartempest/ak21/keymaps/default/keymap.c b/keyboards/solartempest/ak21/keymaps/default/keymap.c new file mode 100644 index 000000000000..57cb17af2a32 --- /dev/null +++ b/keyboards/solartempest/ak21/keymaps/default/keymap.c @@ -0,0 +1,293 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#include QMK_KEYBOARD_H +#include "ak21.h" +#ifdef RGBLIGHT_ENABLE + extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT +#endif + +bool is_alt_tab_active = false; // Super Alt Tab Code +uint16_t alt_tab_timer = 0; +#ifdef VIA_ENABLE + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = USER00, //Alt tab forwards + ATABR //Alt tab reverse + }; +#else + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = SAFE_RANGE, //Alt tab forwards + ATABR //Alt tab reverse + }; +#endif + + +enum combos { //Tap combos + kppls_7, + kppls_8 +}; + +const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; +const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; + +combo_t key_combos[COMBO_COUNT] = { + [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), + [kppls_8] = COMBO(kppl8_combo, KC_DELETE) +}; + + +// Tap Dance declarations +enum { + TD_MINUS_NUMLOCK, +}; + +// Tap Dance definitions. Not VIA compatible. +qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for Escape, twice for Caps Lock + [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), +}; +//TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode + + +enum layer_names { + _LAYER0, + _LAYER1, + _LAYER2, + _LAYER3, + _LAYER4, + _LAYER5, + _LAYER6, + _LAYER7, + _LAYER8, + _LAYER9 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_LAYER0] = LAYOUT( + MO(_LAYER1), KC_ESC, KC_CALC, KC_BSPC, + KC_NLCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, + KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, + KC_KP_4, KC_KP_5, KC_KP_6, + KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, + KC_KP_0, KC_KP_DOT + ), + [_LAYER1] = LAYOUT( + 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, RESET, + KC_TRNS, KC_TRNS + ), + [_LAYER2] = LAYOUT( + 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 + ), + [_LAYER3] = LAYOUT( + 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 + ), + [_LAYER4] = LAYOUT( + 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 + ), + [_LAYER5] = LAYOUT( + 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 + ), + [_LAYER6] = LAYOUT( + 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 + ), + [_LAYER7] = LAYOUT( + 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 + ), + [_LAYER8] = LAYOUT( + 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 + ), + [_LAYER9] = LAYOUT( + 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 + ) +}; + + +void matrix_init_user(void) { //run when matrix is initiated, before all features init +}; + +void matrix_scan_user(void) { //run whenever user matrix is scanned + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { //Actions to override existing key behaviours + switch (keycode) { //For super alt tab keycodes + case ATABF: //Alt tab forwards + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + break; + case ATABR: //Alt tab reverse + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_LSHIFT); + register_code(KC_TAB); + } else { + unregister_code(KC_LSHIFT); + unregister_code(KC_TAB); + } + break; + } + return true; +}; + + +void keyboard_post_init_user(void) { //run as last task in keyboard init + #ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9. Looks great this way! + rgblight_sethsv(58, 255, 30); //Set lower default brightness when connected as the right side dimming is not yet in effect + #endif +}; + + +#ifdef RGBLIGHT_ENABLE +layer_state_t layer_state_set_user(layer_state_t state) { + switch (get_highest_layer(state)) { + //This custom layer lighting is similar to RGB Light Gradient 9, but customized to separate key and case underglow brightness + static uint16_t underglow_brightness = 140; + static uint16_t perkey_brightness = 80; + static uint16_t current_hue = 0; //hue calculated to be used + static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue + static uint16_t layer0_hueincrement = 2; //hue gradient colour increment + static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green + static uint16_t layer1_hueincrement = 2; //hue gradient colour increment + static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange + static uint16_t layer2_hueincrement = 2; //hue gradient colour increment + static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple + static uint16_t layer3_hueincrement = 2; //hue gradient colour increment + static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red + static uint16_t layer4_hueincrement = 1; //hue gradient colour increment + + case _LAYER0: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER1: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER2: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code is for normal gradient colouration + current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER3: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER4: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + } + return state; + }; +#endif diff --git a/keyboards/solartempest/ak21/keymaps/via/config.h b/keyboards/solartempest/ak21/keymaps/via/config.h new file mode 100644 index 000000000000..4bbacd9a507b --- /dev/null +++ b/keyboards/solartempest/ak21/keymaps/via/config.h @@ -0,0 +1,22 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#pragma once + +// Set 10 layers for VIA +#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/ak21/keymaps/via/keymap.c b/keyboards/solartempest/ak21/keymaps/via/keymap.c new file mode 100644 index 000000000000..57cb17af2a32 --- /dev/null +++ b/keyboards/solartempest/ak21/keymaps/via/keymap.c @@ -0,0 +1,293 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#include QMK_KEYBOARD_H +#include "ak21.h" +#ifdef RGBLIGHT_ENABLE + extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT +#endif + +bool is_alt_tab_active = false; // Super Alt Tab Code +uint16_t alt_tab_timer = 0; +#ifdef VIA_ENABLE + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = USER00, //Alt tab forwards + ATABR //Alt tab reverse + }; +#else + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = SAFE_RANGE, //Alt tab forwards + ATABR //Alt tab reverse + }; +#endif + + +enum combos { //Tap combos + kppls_7, + kppls_8 +}; + +const uint16_t PROGMEM kppls7_combo[] = {KC_KP_PLUS, KC_KP_7, COMBO_END}; +const uint16_t PROGMEM kppl8_combo[] = {KC_KP_PLUS, KC_KP_8, COMBO_END}; + +combo_t key_combos[COMBO_COUNT] = { + [kppls_7] = COMBO(kppls7_combo, KC_BSPACE), + [kppls_8] = COMBO(kppl8_combo, KC_DELETE) +}; + + +// Tap Dance declarations +enum { + TD_MINUS_NUMLOCK, +}; + +// Tap Dance definitions. Not VIA compatible. +qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for Escape, twice for Caps Lock + [TD_MINUS_NUMLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_KP_MINUS, KC_NUMLOCK), +}; +//TD(TD_MINUS_NUMLOCK) // Add tap dance item to your keymap in place of a keycode + + +enum layer_names { + _LAYER0, + _LAYER1, + _LAYER2, + _LAYER3, + _LAYER4, + _LAYER5, + _LAYER6, + _LAYER7, + _LAYER8, + _LAYER9 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_LAYER0] = LAYOUT( + MO(_LAYER1), KC_ESC, KC_CALC, KC_BSPC, + KC_NLCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, + KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, + KC_KP_4, KC_KP_5, KC_KP_6, + KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, + KC_KP_0, KC_KP_DOT + ), + [_LAYER1] = LAYOUT( + 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, RESET, + KC_TRNS, KC_TRNS + ), + [_LAYER2] = LAYOUT( + 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 + ), + [_LAYER3] = LAYOUT( + 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 + ), + [_LAYER4] = LAYOUT( + 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 + ), + [_LAYER5] = LAYOUT( + 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 + ), + [_LAYER6] = LAYOUT( + 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 + ), + [_LAYER7] = LAYOUT( + 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 + ), + [_LAYER8] = LAYOUT( + 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 + ), + [_LAYER9] = LAYOUT( + 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 + ) +}; + + +void matrix_init_user(void) { //run when matrix is initiated, before all features init +}; + +void matrix_scan_user(void) { //run whenever user matrix is scanned + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { //Actions to override existing key behaviours + switch (keycode) { //For super alt tab keycodes + case ATABF: //Alt tab forwards + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + break; + case ATABR: //Alt tab reverse + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_LSHIFT); + register_code(KC_TAB); + } else { + unregister_code(KC_LSHIFT); + unregister_code(KC_TAB); + } + break; + } + return true; +}; + + +void keyboard_post_init_user(void) { //run as last task in keyboard init + #ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9. Looks great this way! + rgblight_sethsv(58, 255, 30); //Set lower default brightness when connected as the right side dimming is not yet in effect + #endif +}; + + +#ifdef RGBLIGHT_ENABLE +layer_state_t layer_state_set_user(layer_state_t state) { + switch (get_highest_layer(state)) { + //This custom layer lighting is similar to RGB Light Gradient 9, but customized to separate key and case underglow brightness + static uint16_t underglow_brightness = 140; + static uint16_t perkey_brightness = 80; + static uint16_t current_hue = 0; //hue calculated to be used + static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue + static uint16_t layer0_hueincrement = 2; //hue gradient colour increment + static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green + static uint16_t layer1_hueincrement = 2; //hue gradient colour increment + static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange + static uint16_t layer2_hueincrement = 2; //hue gradient colour increment + static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple + static uint16_t layer3_hueincrement = 2; //hue gradient colour increment + static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red + static uint16_t layer4_hueincrement = 1; //hue gradient colour increment + + case _LAYER0: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER1: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER2: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code is for normal gradient colouration + current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER3: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + break; + case _LAYER4: + for (uint8_t i = 0; i < RGBLED_NUM; i++){ + current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue + if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 + if (i == 1 || i == 5 || i == 10 || i == 11 || i == 15 || i == 16|| i == 21|| i == 22|| i == 26|| i == 27|| i == 30|| i == 31|| i == 32) { + rgblight_sethsv_at(current_hue,255,underglow_brightness,i); + } else { + rgblight_sethsv_at(current_hue,255,perkey_brightness,i); + }; + }; + } + return state; + }; +#endif diff --git a/keyboards/solartempest/ak21/keymaps/via/rules.mk b/keyboards/solartempest/ak21/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/solartempest/ak21/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/solartempest/ak21/rules.mk b/keyboards/solartempest/ak21/rules.mk new file mode 100644 index 000000000000..c6bc1c8cc8cf --- /dev/null +++ b/keyboards/solartempest/ak21/rules.mk @@ -0,0 +1,28 @@ +# MCU name +MCU = atmega32u4 + +# Bootloader selection +BOOTLOADER = atmel-dfu + +# Build Options +# change yes to no to disable +# + +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration +MOUSEKEY_ENABLE = no # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +RGB_MATRIX_ENABLE = no # RGB matrix for individual LED control +RGB_MATRIX_DRIVER = WS2812 # Addressable LED strand driver (keep for RGBLIGHT too) +BLUETOOTH_ENABLE = no # Enable Bluetooth +AUDIO_ENABLE = no # Audio output +MIDI_ENABLE = no # No midi +UNICODE_ENABLE = yes # Unicode +COMBO_ENABLE = yes # Tap combo chording +TAP_DANCE_ENABLE = yes # Tap dance +LTO_ENABLE = yes # Reduce firmware size diff --git a/keyboards/solartempest/ak21/solartempest_ak21_via.hex b/keyboards/solartempest/ak21/solartempest_ak21_via.hex new file mode 100644 index 000000000000..1c6288a1558e --- /dev/null +++ b/keyboards/solartempest/ak21/solartempest_ak21_via.hex @@ -0,0 +1,1475 @@ +:100000000C9470030C94B7030C94B7030C94B703CF +:100010000C94B7030C94B7030C94B7030C94B70378 +:100020000C94B7030C94B7030C94B6260C94722668 +:100030000C94B1270C94B7030C94B7030C94B7033A +:100040000C94B7030C94B7030C94B7030C94B70348 +:100050000C94B7030C948D270C94B7030C94B7033E +:100060000C94B7030C94B7030C94B7030C94B70328 +:100070000C94B7030C94B7030C94B7030C94B70318 +:100080000C94B7030C94B7030C94B7030C94B70308 +:100090000C94B7030C94B7030C94B7030C94B703F8 +:1000A0000C94B7030C94B7030C94B703570060008B +:1000B000000057005F00000005010980A1018503D1 +:1000C00019012AB700150126B700950175108100A6 +:1000D000C0050C0901A101850419012AA00215011E +:1000E00026A002950175108100C005010906A10135 +:1000F0008505050719E029E7150025019508750113 +:1001000081020507190029EF1500250195F07501F9 +:1001100081020508190129059505750191029501CE +:1001200075039101C00660FF0961A1010962150014 +:1001300026FF009520750881020963150026FF003F +:10014000952075089102C005010906A1010507194E +:10015000E029E715002501950875018102950175D3 +:100160000881010507190029FF150026FF009506E3 +:100170007508810005081901290595057501910289 +:10018000950175039101C00000000000000000000F +:10019000000000000000000000000000000000005F +:1001A00000000000000000000000007E0F00D4FFEF +:1001B000FFFFC70000007800000000000000002AD8 +:1001C0002B280000000000000000000000000000DC +:1001D000000029000000002C1E3420212224342697 +:1001E00027252E362D3738271E1F20212223242590 +:1001F000263333362E37381F0405060708090A0B45 +:100200000C0D0E0F101112131415161718191A1BB6 +:100210001C1D2F3130232D350405060708090A0B54 +:100220000C0D0E0F101112131415161718191A1B96 +:100230001C1D2F3130354C00047F3F1F6432146485 +:100240003214783C1E1E140A05000101010101014F +:10025000010101020202020202020202030303037D +:10026000030303030404040404040405050505054D +:10027000060606060607070707070808080809090B +:1002800009090A0A0A0B0B0B0C0C0C0D0D0D0E0EB6 +:100290000E0F0F0F10101111111212131314141549 +:1002A0001516161717181819191A1A1B1B1C1D1DBD +:1002B0001E1E1F2020212222232424252626272813 +:1002C00029292A2B2C2D2D2E2F3031323233343543 +:1002D000363738393A3B3C3D3E3F40414243444546 +:1002E000464748494A4C4D4E4F5051535455565825 +:1002F000595A5B5D5E5F616264656668696B6C6DCF +:100300006F7072737577787A7B7D7E808283858744 +:10031000888A8C8E8F91939596989A9C9EA0A2A382 +:10032000A5A7A9ABADAFB1B3B5B7BABCBEC0C2C487 +:10033000C6C9CBCDCFD1D4D6D8DBDDDFE2E4E7E947 +:10034000EBEEF0F3F5F8FAFDFFFFAA7F554004034A +:100350000200060708090E0D0C11121314191817C4 +:100360001B1C1D201F1E16100B010A0F151A22231D +:10037000252628292A2C2D2F3032333536383A3B82 +:100380003D3E4042434547494A4C4E5051535557D4 +:10039000595A5C5E6062646668696B6D6F717375F3 +:1003A00077797B7D7F81838587898A8C8E909294F3 +:1003B00096989A9C9E9FA1A3A5A7A8AAACAEAFB100 +:1003C000B3B4B6B8B9BBBCBEBFC1C2C3C5C6C7C94A +:1003D000CACBCCCDCED0D1D2D2D3D4D5D6D7D7D804 +:1003E000D9D9DADADBDBDBDCDCDCDCDCDDDDDDDD56 +:1003F000DCDCDCDCDCDBDBDBDADAD9D9D8D7D7D65E +:10040000D5D4D3D2D2D1D0CECDCCCBCAC9C7C6C514 +:10041000C3C2C1BFBEBCBBB9B8B6B4B3B1AFAEAC5A +:10042000AAA8A7A5A3A19F9E9C9A98969492908E05 +:100430008C8A89878583817F7D7B79777573716FDE +:100440006D6B6968666462605E5C5A5957555351BA +:10045000504E4C4A4947454342403E3D3B3A383670 +:10046000353332302F2D2C2A2928262523220151DD +:100470002900B2002A0053005400550056005F00C6 +:100480006000610057005C005D005E0000005900E4 +:100490005A005B0058006200000063000000010089 +:1004A0000100010001000100010001000100010044 +:1004B0000100010001000100010001000000010035 +:1004C00001000100005C01000000010000000100CB +:1004D0000100010001000100010001000100010014 +:1004E0000100010001000100010001000000010005 +:1004F00001000100010001000000010000000100F6 +:1005000001000100010001000100010001000100E3 +:1005100001000100010001000100010000000100D4 +:1005200001000100010001000000010000000100C5 +:1005300001000100010001000100010001000100B3 +:1005400001000100010001000100010000000100A4 +:100550000100010001000100000001000000010095 +:100560000100010001000100010001000100010083 +:100570000100010001000100010001000000010074 +:100580000100010001000100000001000000010065 +:100590000100010001000100010001000100010053 +:1005A0000100010001000100010001000000010044 +:1005B0000100010001000100000001000000010035 +:1005C0000100010001000100010001000100010023 +:1005D0000100010001000100010001000000010014 +:1005E0000100010001000100000001000000010005 +:1005F00001000100010001000100010001000100F3 +:1006000001000100010001000100010000000100E3 +:1006100001000100010001000000010000000100D4 +:1006200001000100010001000100010001000100C2 +:1006300001000100010001000100010000000100B3 +:10064000010001000100010000000100000009029A +:100650005B00030100A0FA0904000001030101008E +:100660000921110100012240000705810308000A49 +:100670000904010002030000000921110100012208 +:100680002200070582032000010705030320000163 +:1006900009040200010300000009211101000122E8 +:1006A0006D000705840320000A120100020000000B +:1006B000084B4121000100010200010A0341004BE7 +:1006C000003200310000001203410054004C004190 +:1006D000004E0054004900530000000403090400C8 +:1006E00011241FBECFEFDAE0DEBFCDBF04B603FE9C +:1006F00027C08091800390918103A0918203B091E3 +:1007000083038730904BA740B04BD1F41092800305 +:1007100010928103109282031092830314BE84B757 +:10072000877F84BF0FB6F894A89580916000886198 +:1007300080936000109260000FBEE0E0F8E309953E +:1007400011E0A0E0B1E0E2E5FBE502C005900D920A +:10075000A23BB107D9F723E0A2EBB1E001C01D92A3 +:10076000A038B207E1F70E94D8270C94702D0C94A2 +:100770000000E8EDF0E080818E7F80831092E2003F +:100780001092DA001092E100A0EEB0E08C9181604E +:100790008C9380818F77808319BCA7EDB0E08C911A +:1007A0008E7F8C9380818F7E80831092E4020895E7 +:1007B0002091E4003091E50095E6A9012091EC003C +:1007C000822F817020FF06C08091E80080FF06C064 +:1007D00080E008952091E80022FD1AC0809109036D +:1007E000882389F0853089F08091EB0085FD0FC06A +:1007F0002091E4003091E50042175307F9F291503F +:10080000E1F684E0089582E0089583E0089581E0B0 +:100810000895EF92FF920F931F93CF937C018B016A +:100820000E94D803C82F811117C08091E80085FD70 +:100830000BC08091E8008E778093E8000E94D80377 +:10084000882399F3C82F08C0F70181917F01809315 +:10085000F1000150110949F78C2FCF911F910F9191 +:10086000FF90EF90089580910B0387FF13C0809154 +:10087000E80082FF06C08091E8008B778093E80053 +:1008800004C0809109038111F2CF0895809109037A +:100890008823D9F38091E80080FFF8CF8091E800A9 +:1008A0008E77ECCF982F9093E900242F762F50E08D +:1008B000891731F07091EC002091ED005091F0001B +:1008C00021FD07C09F5F973071F78093E90081E0B9 +:1008D00008953091EB003E7F3093EB003091ED00B6 +:1008E0003D7F3093ED003091EB0031603093EB00B1 +:1008F0007093EC002093ED005093F0002091EE00F7 +:1009000027FDE0CF80E00895CF92DF92EF92FF9233 +:100910000F931F93CF93DF93C8EDD0E088818F7E34 +:100920008883E7EDF0E080818160808384E082BF8E +:1009300081E08093E40288818E7F888302EE10E05C +:10094000F80110821092DA0081EEC82ED12CF60147 +:10095000108288818F7788838881806888838881E6 +:100960008F7D888319BC1092090310920A0310929C +:1009700008031092070390EEE92EF12CF701808115 +:100980008B7F808388818160888342E060E080E0A3 +:100990000E945204F60180818E7F8083F80180815D +:1009A00081608083808188608083F70180818E7F71 +:1009B0008083888180618883DF91CF911F910F911F +:1009C000FF90EF90DF90CF900895FC01809111038C +:1009D0009091120386179707A0F06115710529F40D +:1009E0009091E8009E779093E80090E06115710582 +:1009F00051F4911108C08091E80082FF34C080E07A +:100A00000895BC01F2CF809109038823C1F185309C +:100A1000C1F18091E80083FD30C08091E80082FD43 +:100A2000EACF8091E80080FFE1CF8091F300209130 +:100A3000F200382F6115710519F02830310558F092 +:100A400091E02830310509F090E02091E8002E7700 +:100A50002093E800CBCF81918093F1006150710920 +:100A60002F5F3F4FE7CF80910903882341F0853006 +:100A700041F08091E80083FFBECF81E0089582E0DD +:100A8000089583E00895089508958091E6020895F9 +:100A90009C014FB7F8948091DB029091DC02A09109 +:100AA000DD02B091DE024FBF821B930B08952FB77A +:100AB000F8948091DB029091DC02A091DD02B0916C +:100AC000DE022FBF08952091D8023091D902281755 +:100AD000390771F09093D9028093D802E091D60241 +:100AE000F091D702309721F00084F185E02D099430 +:100AF00008952091D4023091D5022817390771F05A +:100B00009093D5028093D402E091D602F091D7025F +:100B1000309721F00680F781E02D09940895E09147 +:100B2000D602F091D702309721F00190F081E02DAC +:100B3000099480E00895DC016091CC028091CD029F +:100B4000962F891301C00895292F30E0F901EE0F87 +:100B5000FF1FEC53FD4F408151814A175B07A1F401 +:100B600087E08A9FA0018B9F500D1124435E5E4F4A +:100B700081E0FA0184839613E6CF2F5F3F4F237005 +:100B800033272093CC0208952F5F3F4F922F93700D +:100B9000D8CF1092610210926002809122018111DF +:100BA00004C010922101109223018091290181112A +:100BB00004C01092280110922A010895FA018111AF +:100BC00001C0FB01099480917B03982F9E7F61F403 +:100BD0008170826080937B0380917E03893C18F052 +:100BE00088EC80937E0308958A34B0F38170886422 +:100BF000F1CFAF92BF92DF92EF92FF920F931F93CC +:100C0000CF93DF93182F062FE901493C08F048ECF9 +:100C1000E42FF0E0E75BFD4F011110C0E4915E2F7F +:100C20004E2F4983E8835A83DF91CF911F910F9113 +:100C3000FF90EF90DF90BF90AF900895202F30E0AD +:100C40004491D42EE42EF12C56E0159FC0011124BE +:100C5000EFEFF0E0BF010E947A2C812F90E0880F27 +:100C6000991F55E5569FD001579FB00D11248A1B3F +:100C70009B0B982F990F890F5F01A21AB30AAE9CA4 +:100C8000D001AF9CB00DBE9CB00D11245B2F089F0E +:100C900080011124012F11275F01A01AB10AAE9C17 +:100CA0008001AF9C100DBE9C100D11245F01A81A8D +:100CB000B108A29EC001A39E900DB29E900D11247A +:100CC000892F9927E81BF90BEE9DC001EF9D900D30 +:100CD000FE9D900D1124E92F62307105A1F050F4B2 +:100CE0006115710509F49DCF6130710581F0EB2F1D +:100CF000512F97CF6430710569F080F0663071052F +:100D000009F48FCFF4CFE42F4B2F592F8ACFE42F44 +:100D1000412F87CFEB2F542F492F83CF4B2F5D2DA2 +:100D2000E12F7FCF80E00895F894E82FE295EF70EF +:100D3000F0E031A1282F2F7081E090E001C0880FF2 +:100D40002A95EAF7982F9095932391A392A1892B46 +:100D500082A3789408959091DF0292FF06C0282F15 +:100D600028712830F9F4877F846093FF06C0282F0C +:100D700028712831F1F4877E84612091E00220FF00 +:100D800006C0382F38713830D9F4877F816021FF51 +:100D900006C0282F28712831D1F4877E816194FD07 +:100DA000877E0895282F24712430F9F68B7F886080 +:100DB000DCCF282F2471243101F78B7E8861DDCFB1 +:100DC000382F3171313019F78E7F8860E0CF282FAE +:100DD0002171213121F78E7E8861E1CFCF93DF939E +:100DE000EC0182389105A9F1D8F58133910509F418 +:100DF00096C048F58932910509F48AC08A9709F4AA +:100E000095C0C11522E5D20708F0B6C0C11531E57D +:100E1000D30708F026C1C83ED10508F09CC0C03EEB +:100E2000D10560F5C83AD10508F087C0C53AD105AB +:100E300008F0EFC0C130D10509F12097F9F0C430B6 +:100E4000D105E0F440C08533910509F45AC0C99733 +:100E5000C1F68091DF02837089F0C0EED0E00EC051 +:100E6000833E910599F170F4803E910501F1823E37 +:100E7000910539F68091DF0282FD21C0CE01DF911C +:100E8000CF910895863E910561F1873E910571F1FC +:100E9000843E910509F0B5CF8091E00281FFEECF4D +:100EA0008091DF02C7EED0E084FD0DC0E7CF8091D6 +:100EB000DF0280FD07C19091E00290FFDFCFC3EE1B +:100EC000D0E084FFDBCFD0E0C0E0D8CF8091DF025C +:100ED00082FDFBC09091E00290FDBFCF84FFCECF9A +:100EE000F2CF8091DF0283FDDDCFC8CF8091DF029A +:100EF00083FDEEC09091E00291FFF0CFC4EED0E010 +:100F0000BDCF8091DF0285FFB9CFC9E2D0E0B6CF77 +:100F10008091DF0285FFB2CFC5E3D0E0AFCF8091F3 +:100F2000DF0286FFABCFCAE2D0E0A8CF8091DF021C +:100F300086FFA4CFC1E3D0E0A1CFCF3BD10518F607 +:100F4000C85AD0E0CC0FDD1FCA5BDE4F0990D881B4 +:100F5000C02DD46493CFC11540E5D40708F064C018 +:100F6000C11580E4D80708F05CC0CE019A958115C0 +:100F70009F4108F483CFA7CFC11536E5D30718F5F5 +:100F8000C11545E5D40708F084C0C11584E5D8072C +:100F900008F07AC09C2F969596959E012370332772 +:100FA000C115D34508F462C0C1E0D0E002C0CC0F47 +:100FB000DD1F2A95E2F730E2939FC0011124C82B70 +:100FC000D92BDA685BCFC1158AE5D80778F4C1154B +:100FD00099E5D90708F068C0C11528E5D20708F4DB +:100FE00072CFDC2FCC27C06FD06A48CFCE0190568D +:100FF0008115904208F067CF8D2F8F710E94AB064C +:1010000090E0982F882788279F719C012C2BE9015D +:1010100049C0C55AD0E0CD5BDE4FC881D0E0D06476 +:101020002DCFDF70D06A2ACFCE01E4E09695879568 +:10103000EA95E1F783702C2F26952695237040E2E0 +:10104000249F90011124382B8C2F8370C1E0D0E0B5 +:1010500002C0CC0FDD1F8A95E2F7C22BD32BDC68D0 +:101060000DCFDC2FCC27C16FD06A08CFC1E0D0E014 +:1010700002C0CC0FDD1F2A95E2F720E2929FC0014B +:101080001124C82BD92BEBCFDC2FCC27C46FD06A0F +:10109000F5CE8C2F0E94AB06C82FD0E0DC2FCC27DA +:1010A000CC27DF71D062EACE8C2F8F700E94AB0606 +:1010B00034E0D695C7953A95E1F7CF709C2FEC01B7 +:1010C000D069DCCEC9E3D0E0D9CEC2EED0E0D6CE36 +:1010D000C6EED0E0D3CE8091310281111092310260 +:1010E000089580959091D30298239093D302089508 +:1010F0008091D3029091D202892B90913002892B5A +:101100008093B401909131029923A1F0892B8093AF +:10111000B40180914201882341F18091DF0287FF71 +:1011200024C08EE1E6EBF1E090E0815000F59111F2 +:101130000E946B08E091D602F091D7023097E1F05F +:1011400080914201882359F08091DF0287FF07C018 +:101150008091B4018093B50185E08093B401028051 +:10116000F381E02D84EB91E0099486E0DBCF2191BF +:101170002223D9F29F5FD9CF0895CF93DF93EC015B +:1011800081E0898B8091D3029F81892B8093D30248 +:101190008091D2029885892B8093D2020E94780890 +:1011A000EA81FB81309739F06C897D89CE01069602 +:1011B000DF91CF910994DF91CF910895EF92FF9243 +:1011C0000F931F93CF93DF93EC018A85811139C070 +:1011D000EB80FC8087E5F81A26E12E9DC0012F9D4B +:1011E000900D1124DC01A45DBE4F1496ED91FC918D +:1011F0001597309731F054966D917C918E5C9E4F8F +:10120000099586E18E9D80018F9D100D1124045D4E +:101210001E4FF80187810E947108F8018085982F80 +:1012200090958091D20289238093D2020E947808FF +:10123000188219861B861E821D821092D10210927E +:10124000D002DF91CF911F910F91FF90EF90089501 +:10125000909142019923D1F09091DF0297FF16C03F +:10126000E82FE695E695E695EE31E0F4F0E0EC54F3 +:10127000FE4F282F277081E090E001C0880F2A954B +:10128000EAF780959281892382830895E6EBF1E065 +:101290009191891303C0DF0111971C9291E0EC3BFF +:1012A000F907B1F70895909142019923C1F0909107 +:1012B000DF0297FF14C0E82FE695E695E695EE313C +:1012C000F8F4F0E0EC54FE4F877021E030E001C00C +:1012D000220F8A95EAF78281822B82830895A6EBFA +:1012E000B1E0EFEF90E02D91821751F0EF3F19F44C +:1012F000211101C0E92F9F5F9630A9F7EF3F09F454 +:1013000008950E2E000CFF0BEC54FE4FE6CF80919B +:101310002E029091ED01981301C008958F5F8770A0 +:10132000FACF990F990F890F982F97708695869508 +:10133000869524E0829FF0011124E752FE4F50E091 +:1013400040E080E0219130E0092E02C036952795DB +:101350000A94E2F721703327042E01C0220F0A9469 +:10136000EAF7822B4F5F5F4F4430510559F70895DC +:10137000990F990F890F982F977041E001C0440F82 +:101380009A95EAF786958695869594E0899FF0016F +:101390001124E752FE4F30E020E070E05191DF0170 +:1013A0001197CB01022E02C0969587950A94E2F719 +:1013B000817081958527842385278C932F5F3F4FEC +:1013C0002430310559F7089590E080E00E947905B6 +:1013D00090E080E00E9463051092D20210923002E9 +:1013E0000C94780890933302809332020C94E409B1 +:1013F000882341F080959091D20289238093D20274 +:101400000C9478080895882339F09091D202982B93 +:101410009093D2020C9478080895882321F00E94BA +:1014200071080C9478080895882339F09091D302BC +:10143000982B9093D3020C9478080895882309F48C +:101440004BC0823871F40E948F0581FF45C089E34B +:101450000E9453090E94780889E30E9428090C948D +:101460007808833859F40E948F0580FF35C083E5E2 +:101470000E9453090E94780883E5EFCF843859F41D +:101480000E948F0582FF28C087E40E9453090E94B2 +:10149000780887E4E2CF9CEF980F913AF0F290E25F +:1014A000980F983050F4877091E001C0990F8A9599 +:1014B000EAF7892F0E947108D2CF9BE5980F9330ED +:1014C00020F490E080E00C947905885A873120F46C +:1014D00090E080E00C946305089580FD02C0769A48 +:1014E0000895769808959C013A9521153F4150F54D +:1014F000FC01EE27F170BC0166277270AC01442735 +:1015000054709C012227387094FF0EC080E1EF2BAD +:1015100009F480E0672B09F08062452B09F08064B4 +:10152000232B89F08068089581E0EF2B09F480E097 +:10153000672B09F08260452B09F08460232B19F09A +:101540008860089580E00895CF93DF93EC010E94B6 +:101550001E0ACE010E94730A9E01205E31092830C6 +:10156000310510F0CD2B21F4DF91CF910C940D0AB1 +:10157000DF91CF910C94F809FC018081813029F42E +:10158000FB01808191810C94A40A823021F4FB013B +:1015900082819381F8CF089590910903943029F5C1 +:1015A0008093E1027093E3026093E2029093E9007A +:1015B0008FEF9091E800815095FD06C095ED9A95CA +:1015C000F1F700008111F5CF8091E80085FF0DC093 +:1015D00050E040E063E070E081EE92E00E94090498 +:1015E0008091E8008E778093E8000895BC0184E044 +:1015F0000C94CC0ABC0183E00C94CC0ACF93DF930B +:10160000EC01809142018823B1F18091DF0287FFD4 +:1016100032C060E284E08093E9008FEF9091E800AF +:10162000815095FD06C095ED9A95F1F70000811166 +:10163000F5CF8091E80085FF1BC08091420170E0EA +:1016400050E040E0811104C050E040E068E070E00C +:10165000CE010E9409048091E8008E778093E80013 +:1016600080E2FE01A7EEB2E001900D928A95E1F7CB +:10167000DF91CF91089568E081E0CDCF81E0809344 +:10168000E00080E28093D8001092C9008FE19EE4D0 +:101690000197F1F700C0000087E090EBDC01809338 +:1016A000800390938103A0938203B093830388E126 +:1016B0009CE00FB6F894A895809360000FBE9093BD +:1016C0006000FFCFAF92BF92CF92DF92EF921F9355 +:1016D000CF93DF93CDB7DEB7C356D1090FB6F894D9 +:1016E000DEBF0FBECDBF80917B0380FD0AC0E8E165 +:1016F000F3E0118210821282339683E0EB37F80711 +:10170000C1F77EE4A72E73E0B72EDE011196AE017D +:101710004C595F4F1A2F7B2FF5018491282F30E011 +:10172000C901880F991F820F931F885E9C4FFC018F +:10173000C080D180E280CD92DD92ED92FFEFAF1AB2 +:10174000BF0AA417B50741F7209A35B13E7F25B1EE +:1017500021606FB7F894812F972FFC017191CF0111 +:10176000E8E025B9000000C077FF35B9770F000029 +:1017700000C000C000C035B900C0EA9591F78417D9 +:10178000950759F76FBF8FE594E00197F1F700C017 +:101790000000CD59DF4F0FB6F894DEBF0FBECDBFAE +:1017A000DF91CF911F91EF90DF90CF90BF90AF90DE +:1017B00008951F93CF93DF9300D00F92CDB7DEB77C +:1017C000142F90917B0390FF1AC09E012F5F3F4F13 +:1017D000462F6FEF0E94F905113289F08B819981B4 +:1017E000412F50E0FA01EE0FFF1FE40FF51FE85EF6 +:1017F000FC4F2A812183908382830E94620B0F9089 +:101800000F900F90DF91CF911F910895EF92FF926B +:101810000F931F93CF93DF937C018F2D90E0C8E04F +:10182000009711F4C701C0E09C0154E0369527955C +:101830005A95E1F72115310511F0CC5FC9019C01E2 +:1018400036952795369527952115310511F0CE5FF0 +:10185000C90196958795892B09F0CF5FC23009F4AD +:101860008AC068F4CC23B1F1C13009F45BC0C70170 +:10187000DF91CF911F910F91FF90EF900895C330AA +:1018800009F4AEC0C43099F7CEE1D0E08C2F4C2FD4 +:101890004E51D093D501C093D401942F9B7F9130AA +:1018A00089F0942F9E7E9A3069F093ED9C0F9230D0 +:1018B00048F09DEC9C0F923028F094EC9C0F9330F4 +:1018C00008F0B7C06CE80E94D90B2196CF33D10540 +:1018D000E9F6CDCF08E310E01093D5010093D401D1 +:1018E000802F9C2F9B7F913081F09C2F9E7E9A3081 +:1018F00061F091EF9C0F923040F09BEE9C0F923084 +:1019000020F092EE9C0F933050F44C2F6CE80E9424 +:10191000D90BCF5F0E5F1F4FC132F1F6A8CF4C2F0E +:1019200060E5F5CF0FE010E0C0E01093D501009323 +:10193000D401802F9C2F9B7F913081F09C2F9E7E25 +:101940009A3061F091EF9C0F923040F09BEE9C0F2B +:10195000923020F092EE9C0F933050F44C2F6CE8B4 +:101960000E94D90BCF5F0E5F1F4FC132F1F67FCFC0 +:101970004C2F60E5F5CF0CED10E0C0E00F3F1105F6 +:1019800009F030F51093D5010093D4018091D40172 +:101990009C2F9B7F913091F09C2F9E7E9A3071F00E +:1019A00091EF9C0F923050F09BEE9C0F923030F0F4 +:1019B00092EE9C0F4C2F60E5933010F44C2F6CE8A6 +:1019C0000E94D90BCF5F0E5F1F4FC132B9F64FCFC8 +:1019D000C8018F5F91099093D5018093D401D6CF30 +:1019E00007E810E0C0E01093D5010093D401802FE8 +:1019F0009C2F9B7F913081F09C2F9E7E9A3061F0CE +:101A000091EF9C0F923040F09BEE9C0F923020F0B3 +:101A100092EE9C0F933050F44C2F6CE80E94D90B3F +:101A2000CF5F0E5F1F4FC132F1F621CF4C2F60E523 +:101A3000F5CF60E548CF0E94060C90931403809385 +:101A400013030C94E40980911303909114039C01F7 +:101A5000267033272630310519F488600C941B0D4D +:101A6000877FFCCF21E030E002C0220F331F8A9530 +:101A7000E2F720953095809113039091140382230F +:101A800093230C941B0D90912F02809589238093B2 +:101A90002F02282F277039F4282F082E000C330B23 +:101AA0009217130621F49091E00292FF07C08595EA +:101AB000859585950E94320D10922F02089521E0A0 +:101AC00030E002C0220F331F8A95E2F780911303A2 +:101AD00090911403822B932B0C941B0DEF92FF9289 +:101AE0000F931F93CF93DF938C01C8E1D3E0F12CC8 +:101AF000E12CF801948160917D0380917C03F0E1F9 +:101B0000EF16F104FCF49923F9F09E0140917E0355 +:101B10000E94F9052FEFE21AF20A239681E2E816F5 +:101B2000F10439F70E94620BF801848190E001967C +:101B3000817099278483DF91CF911F910F91FF903E +:101B4000EF900895992309F39E0140E0E1CF8F9231 +:101B50009F92AF92BF92CF92DF92EF92FF920F933C +:101B60001F93CF93DF93EC014C81042F10E0980179 +:101B7000D8010E94D92C9B01AC010E94EF2C4B0193 +:101B80005C01E0E2F0E0E01BF10BA5E5B0E0AC01A8 +:101B90009B010E94EF2C6B017C019F01DF010E94E1 +:101BA000D12C9B01AC010E94FA2C9B01AC01280DA9 +:101BB000391D4A1D5B1DC701B6010E94A22CF22EE1 +:101BC000822F90E039E23F15D8F143E0249F900145 +:101BD000112435952795122F109598E1C92E93E081 +:101BE000D92E00E085E5E82EEF188E2D01FD8F2D12 +:101BF0009601412F60917D030E94F9050F5F53E02C +:101C0000C50ED11C013289F70E94620B9C8181E0D4 +:101C1000992319F0903219F48FEF80931C01809171 +:101C20001C01890F8C83DF91CF911F910F91FF9041 +:101C3000EF90DF90CF90BF90AF909F908F900895DE +:101C400025E530E0A901481B590BCA019A01220F72 +:101C5000331F280F391F37FFBCCF2F5F3F4FB9CF3E +:101C60000F931F93CF93DF93C8E1D3E0FE0111825E +:101C700010821282339683E0EB37F807C1F710E049 +:101C800000E080915E02082E000C990B08171907DE +:101C90008CF180911B01082E000C990B8017910785 +:101CA0004CF19E0140917E0360917D0380917C0305 +:101CB0000E94F9050F5F1F4F23960132110509F7A6 +:101CC0000E94620B80911A0190915E02980F90938E +:101CD0005E0220911B01280F20931B01121614F4A1 +:101CE00090321CF0819580931A01DF91CF911F9162 +:101CF0000F910895198218821A82DCCFBF92CF9279 +:101D0000DF92EF92FF920F931F93CF93DF93FC012B +:101D10008281DD24DA9480FD02C0DD24D39408E1C1 +:101D200013E0D0E0C0E021E2B22EF801118210826F +:101D3000128294E0E92EF12CC12C80915D028C0D71 +:101D400082320CF43DC06B2D0E946C2C892F082E22 +:101D5000000C990B8C179D0791F480917E038E9D4A +:101D6000A0018F9D500D1124559547955595479588 +:101D7000980160917D0380917C030E94F905CD0C50 +:101D8000F1E0EF1AF108C9F621960D5F1F4FC1323D +:101D9000D10559F60E94620B80915D0291E0D91243 +:101DA00015C0811111C080E280935D02DF91CF9157 +:101DB0001F910F91FF90EF90DF90CF90BF9008950B +:101DC00087FFC5CF8F5DC3CF8150EECF90E00196E6 +:101DD000BE010E948E2CE8CFEF92FF921F93CF930B +:101DE000DF93EC0188E1E82E83E0F82E10E08C818F +:101DF000970140917E0360917D03810F0E94F90558 +:101E0000195F83E0E80EF11C173E89F70E94620B10 +:101E10009A818C8190FF08C08F5F8C83DF91CF9176 +:101E20001F91FF90EF9008958150F7CF90917B0321 +:101E300090FF0CC0E8E1F3E0818360834283339636 +:101E400093E0EB37F907C1F70C94620B08950F93F9 +:101E50001F93CF93DF9300D00F92CDB7DEB78C01E5 +:101E600080915F0281110AC09E012F5F3F4F48ECB5 +:101E70006FEF0E94F9058A8180935F02F801648107 +:101E8000613069F080915F0240E0662361F040E0DC +:101E9000623011F440915F0280E060E004C0609124 +:101EA0005F0240E080E00E94160FF801848190E01C +:101EB000019663E070E00E948E2C84830F900F9057 +:101EC0000F90DF91CF911F910F910895CF93DF93E2 +:101ED00000D00F92CDB7DEB790917B0390FF0AC080 +:101EE0009E012F5F3F4F0E94F9054B8169818A81D6 +:101EF0000E94160F0F900F900F90DF91CF910895D1 +:101F0000CF93DF93EC01EBE7F3E0438162818C81B7 +:101F10000E94660F8C818F5F8C83DF91CF91089533 +:101F2000CF93DF93EC01EC81F0E0E259FC4F449158 +:101F3000EBE7F3E0628181810E94660F8C818F5F05 +:101F40008C83DF91CF910895CF93C82F882309F414 +:101F5000A6C08238C1F40E948F0581FDA0C089E32C +:101F60000E9453090E9478082FEF81EE94E02150DF +:101F700080409040E1F700C0000089E30E942809FA +:101F8000CF910C9478088338A1F40E948F0580FDCE +:101F900086C083E50E9453090E9478082FEF81EEE6 +:101FA00094E0215080409040E1F700C0000083E5BC +:101FB000E5CF8438A1F40E948F0582FD70C087E4CC +:101FC0000E9453090E9478082FEF81EE94E021507F +:101FD00080409040E1F700C0000087E4CFCF8CEF55 +:101FE0008C0F813A88F580914201882301F180911C +:101FF000DF0287FF1CC0EC2FE695E695E695F0E042 +:10200000EC54FE4F828190E04C2F477021E030E08D +:1020100002C0220F331F4A95E2F782239323892BB4 +:1020200079F08C2F0E9428090E94780809C0E6EBFD +:10203000F1E08191C817A9F321E0EC3BF207C9F761 +:102040008C2F0E9453099CCF80E28C0F883068F45B +:10205000C77021E030E001C0220FCA95EAF78091F5 +:10206000D302822B8093D3028BCFEBE5EC0FE330CE +:1020700040F4F0E0ED5BFE4F808190E0CF910C9456 +:102080007905C85AC73158F4EC2FF0E0EE0FFF1F66 +:10209000EA5BFE4F80819181CF910C946305CF91D3 +:1020A00008951F93CF93DF93182FD0E0C0E08933BA +:1020B00011F4C0E5D0E0812F0E94A40F209731F4E5 +:1020C000812FDF91CF911F910C941E0A8FE99FE021 +:1020D0000197F1F700C000002197F0CF0F931F93F5 +:1020E000CF93DF93C62FD42F022FFC018281882348 +:1020F000A1F0609317030E945705909316038093F5 +:102100001503C77081E001C0880FCA95EAF7DF9117 +:10211000CF911F910F910C94140A809117036813AB +:1021200035C080911503909116030E944805883CA4 +:10213000910560F510E21D0FCD17B9F080E28C0F0C +:10214000883040F4C77081E001C0880FCA95EAF773 +:102150000E940D0A183048F481E09D2F977001C04D +:10216000880F9A95EAF70E94140A802F0E94511056 +:10217000183098F4D77081E001C0880FDA95EAF73B +:10218000DF91CF911F910F910C940D0AC77081E0E0 +:1021900001C0880FCA95EAF7F3CFDF91CF911F9165 +:1021A0000F910895DF92EF92FF920F931F93CF93B9 +:1021B000DF93E82FF0E0E954FE4FD490282F2695C6 +:1021C0002695269530E0F901E955FE4F0491877078 +:1021D00010E0082E02C0159507950A94E2F70170E9 +:1021E0001127F901E956FE4FE490F12C082E02C0A8 +:1021F000F594E7940A94E2F791E0E922FF24F901CB +:10220000E957FE4FC491D0E002C0D595C7958A9595 +:10221000E2F7C170DD270115110519F081EE0E946A +:10222000A40FE114F10419F086EE0E94A40F8D2D85 +:102230000E945110EF2819F086EE0E941E0A012B11 +:1022400019F081EE0E941E0ACD2B51F08CE2DF9135 +:10225000CF911F910F91FF90EF90DF900C94511050 +:10226000DF91CF911F910F91FF90EF90DF90089534 +:10227000CF93DF93EC010E94730A9E01205E310927 +:102280002830310510F0209739F40E94140A8C2F61 +:10229000DF91CF910C94A40F0E94030AF8CFFC01A8 +:1022A0008081813029F4FB01808191810C94381167 +:1022B000823021F4FB0182819381F8CF0895CF937E +:1022C000DF93EC018881823039F4FB0182819381B4 +:1022D0000E94381181E08B87DF91CF910895CF93D1 +:1022E000DF93C7E0D2E060E0CE010E94222D21966C +:1022F000C11584E0D807B9F7DF91CF9108956F92A7 +:102300007F928F929F92AF92BF92CF92DF92EF9285 +:10231000FF920F931F93CF93DF938EE6C82E84E036 +:10232000D82E0FE510E0E801E09736011CC0F5015A +:1023300085909490692DC7010E94222D682DC701B8 +:1023400001960E94222D82E0A80EB11C82E0E80EC8 +:10235000F11CCE15DF0559F788E0680E711C289630 +:102360000C171D0731F07E0188E0E81AF1085301CF +:10237000DECF005D1F4F80E3C80ED11C0F3382E01B +:10238000180789F6DF91CF911F910F91FF90EF9081 +:10239000DF90CF90BF90AF909F908F907F906F9085 +:1023A0000895CF93C82F6FEF811161E283E290E02F +:1023B0000E94222DC1110CC0CFEF6C2F84E290E05F +:1023C0000E94222D6C2F85E290E0CF910C94222D5B +:1023D000C9E0F3CF80E00E94D11160E086E290E096 +:1023E0000E94222D0E947F110E946F1181E00C94A7 +:1023F000D111CF93C091E002C2FB992790F99817B1 +:1024000081F080FBC2F9C093E0026091DF0284E0BA +:1024100090E00E94222D6C2F82E290E0CF910C94EC +:10242000222DCF9108950F931F93CF93DF9328E030 +:10243000629FE001112450E0440F551FC40FD51FC7 +:1024400030E3839FC00DD11D1124CE0187960E94D9 +:102450000E2D082F10E0102F0027CE0188960E9425 +:102460000E2D9801282BC901DF91CF911F910F915B +:102470000895462F8A3038F4763028F4643018F402 +:10248000672F0C94131290E080E00895BF92CF92D2 +:10249000DF92EF92FF920F931F93CF93DF937C0114 +:1024A0000091130310911403809132029091330232 +:1024B000082B192BCFE0D0E0CC24C394D12CBC2E18 +:1024C000C6010C2E02C0880F991F0A94E2F78023E0 +:1024D0009123892B71F4219790F7B12C8B2DDF91EB +:1024E000CF911F910F91FF90EF90DF90CF90BF9011 +:1024F0000895B7018C2F0E9439120E94EE060197B1 +:1025000051F3ECCFCF93DF93EC010E944612BE0152 +:102510000E943912DF91CF910C94EE06FC01868166 +:102520009781009779F00E94EE06292F2F709295DF +:102530009F7092509E30A0F4E92FF0E0EE58F24DDB +:102540000C94C42C808191810E948212EECF803F36 +:1025500019F020F4883E20F481E00895843FE1F3EF +:1025600080E00895883EC0F3813FD1F7F5CF822FF8 +:1025700086958695869508951F93CF93DF9300D017 +:1025800000D00F92CDB7DEB7FC012681378121152F +:10259000310541F525E0DE01119601900D922A9555 +:1025A000E1F7FC01228189819A812223B9F0662317 +:1025B000A9F00E944612182F682F89819A810E94E3 +:1025C000B80969817A81812F0F900F900F900F9039 +:1025D0000F90DF91CF911F910C9439120E949109B5 +:1025E000182FEFCFC9010F900F900F900F900F9001 +:1025F000DF91CF911F91089583E290E00E940E2D0C +:10260000813289F484E290E00E940E2D893059F4E1 +:1026100085E290E00E940E2D91E0893009F090E073 +:10262000892F8170089580E0FCCFCF9384E090E003 +:102630000E940E2DC82F82E290E00E940E2D982F4E +:102640008C2FCF91089560917B03669570E04BE0ED +:1026500050E08FE091E00E94562D892B19F481E023 +:1026600080935C020E945705909356028093550216 +:102670000895CF92DF92EF92FF926B017C010E944E +:10268000E305B701A60188E090E0FF90EF90DF90AE +:10269000CF900C94342D5F926F927F928F929F9285 +:1026A000AF92BF92CF92DF92EF92FF920F931F9360 +:1026B000CF93DF9300D00F92CDB7DEB7182F762ED1 +:1026C000042F622E90917B0390FF29C0E92FE6959D +:1026D000AE2FB0E0A258BE4F8C9180935B029E7FDC +:1026E000923081F59E012F5F3F4F812F0E94F905A7 +:1026F0004B8169818A810E94160F10937C0370922E +:102700007D0300937E03662051F060917B037091FE +:102710007C0380917D0390917E030E9439130F907A +:102720000F900F90DF91CF911F910F91FF90EF903D +:10273000DF90CF90BF90AF909F908F907F906F90E1 +:102740005F900895823019F400917E03D6CF8630D1 +:1027500019F410917C03D1CF8930D9F3893169F60E +:10276000E9518E2F8170582EE695F0E0E75BFC4F23 +:10277000A590B490BB2488E1E82E83E0F82ED12CFC +:10278000C12C91E2892E912CC601B4010E947A2CB1 +:10279000812F511013C0860F9701402F672D0E9483 +:1027A000F905CA0CDB1C83E0E80EF11C8BE7E81688 +:1027B00083E0F80649F70E94620B9FCF861BECCF9F +:1027C000EBE7F3E0438128E0421B08F440E021E01E +:1027D000628181810C944B13EBE7F3E0438128E0A5 +:1027E000420F08F44FEF21E0628181810C944B137A +:1027F000EBE7F3E0628128E0621B08F460E021E08F +:10280000438181810C944B13EBE7F3E0628128E074 +:10281000620F08F46FEF21E0438181810C944B1328 +:10282000EBE7F3E0818121E04381628188500C94E1 +:102830004B13EBE7F3E0818121E043816281885F04 +:102840000C944B1380917F03882319F0815080935F +:102850007F0360917B0370917C0380917D03909155 +:102860007E030C94391380917F03833018F48F5FBB +:1028700080937F0360917B0370917C0380917D0343 +:1028800090917E030C94391390917B0390FF36C096 +:102890009170811129C0926090937B03662351F05F +:1028A00060917B0370917C0380917D0390917E0306 +:1028B0000E94391360917B03669570E04BE050E015 +:1028C0008FE091E00E94562D892BA9F010925C02B6 +:1028D00081E08093580220E040917E0360917D0367 +:1028E00080917C030C944B13853210F09864D4CF04 +:1028F000880F982BD1CF0E942313EACF089580919F +:102900007B038695815009F484E261E00C944414C1 +:1029100080917B0386958F5F853208F081E061E0CE +:102920000C94441490917B0390FF07C096959817E0 +:1029300020F0961710F40C94881461E00C94441461 +:10294000EBE7F3E083E0808311828FEF828388E2FC +:102950008383148260817181828193810C94391305 +:1029600069EE7EEF90E080E00E94402D60E082E022 +:1029700090E00E94222D60E083E090E00E94222DF2 +:10298000109233021092320260E084E090E00E94E4 +:10299000222D60E082E290E00E94222D60E085E03E +:1029A00090E00E94222D60E086E090E00E94222DBF +:1029B0006FEF87E090E00E94222D40E050E0BA01E6 +:1029C00088E090E00E94342D60E08DE090E00E946D +:1029D000222D40E050E0BA0188E190E00E94342DC1 +:1029E00060E087E190E00E94222D40E050E0BA01D3 +:1029F0008CE190E00E94342D70E060E080E290E095 +:102A00000E94402D40E050E0BA0188E190E00E9431 +:102A1000342D80E00E94D1110E94EA1140E050E084 +:102A2000BA018FE090E00E94342D40E050E0BA01FE +:102A300083E190E00C94342D90E080E00E941C2D06 +:102A4000893E9E4F11F40C94FC1280E00895109280 +:102A5000D30280914201E6EBF1E0882359F08091A6 +:102A6000DF0287FF07C08EE1DF011D928A95E9F73B +:102A70000C94E40986E0F8CF1F93CF93DF93CDB792 +:102A8000DEB7AA970FB6F894DEBF0FBECDBF8BE0BE +:102A900093E02091F100DC012D93CD01B3E083316F +:102AA0009B07B9F780910C03833009F471C0B8F427 +:102AB000813009F448C0823009F4B2C08091E80046 +:102AC00083FF3AC180910B0390910C039A3008F078 +:102AD00033C1E92FF0E0E058F24D0C94C42C8A3059 +:102AE00009F48DC08B3009F470C0893039F78091BA +:102AF0000B03813219F780910F0390911003009717 +:102B000011F00297D9F68091E800877F8093E80062 +:102B10008091E80082FF37C09091F3008091F2002D +:102B2000029729F48091F1008B7F813021F480910C +:102B3000F1008093E6028091E8008B778093E800B3 +:102B40000E943304BBCF80910B03813A09F0B6CFCA +:102B50008091E800877F8093E80080910F03909137 +:102B60001003892B61F460E287EE92E070E00E942E +:102B7000E5048091E8008B778093E8009FCF60E0C8 +:102B800090E080E0F3CF809109038111C1CF96CF0F +:102B900080910B03813A09F091CF80910F039091BE +:102BA0001003892B09F08ACF8091E800877F8093FA +:102BB000E8008091E80080FFFCCF80914201809383 +:102BC000F1008091E8008E77B9CF80910B038132BC +:102BD00009F074CF80910F0390911003892B09F0B5 +:102BE0006DCF8091E800877F8093E8000E943304D6 +:102BF00080910D03809342010E9427155FCF809141 +:102C00000B03813209F05ACF8091E800877F8093CF +:102C1000E8000E94330480910E038093E5024ECFBA +:102C200080910B03813A09F049CF8091E800877FBA +:102C30008093E8008091E80080FFFCCF8091E5025E +:102C4000BECF803899F0823809F076C080910F03AA +:102C50008F70873008F070C08093E9008091EB009E +:102C600085FB882780F91092E90006C08091070350 +:102C700090910803911182609091E800977F909362 +:102C8000E8008093F1001092F1008091E8008E77C7 +:102C9000B5C1882309F4A2C1823009F04DC08091EA +:102CA0000D038111A6C180910F038F702FEF280FA4 +:102CB000263008F041C08093E9002091EB0020FF0E +:102CC00098C1933031F48091EB0080628093EB00E7 +:102CD00090C19091EB0090619093EB0021E030E087 +:102CE00001C0220F8A95EAF72093EA001092EA00C9 +:102CF0008091EB008860EACF81111EC010910D0316 +:102D00001F778091E3008078812B8093E30080918E +:102D1000E800877F8093E8000E9433048091E800F8 +:102D200080FFFCCF8091E30080688093E30082E025 +:102D3000111183E0809309038091E80083FF0AC0AA +:102D40008091E800877F8093E8008091EB008062AB +:102D50008093EB00AA960FB6F894DEBF0FBECDBFEE +:102D6000DF91CF911F9108958058823028F72091EC +:102D70000D0330910E032C3DE3E03E07A1F583E007 +:102D80008A838AE289834FB7F894DE01139620E0A4 +:102D90003EE051E2E32FF0E050935700E49120FF32 +:102DA00003C0E295EF703F5FEF708E2F90E0EA3046 +:102DB000C0F0C7968D939D932F5F243159F74FBF75 +:102DC0008091E800877F8093E8006AE270E0CE019E +:102DD00001960E94E5048091E8008B778093E800DB +:102DE000ABCFC096E7CF80910F0390911003432F94 +:102DF00055274330510509F44AC078F54130510553 +:102E000009F47AC08BE590E0EEE4F6E0423051053B +:102E100009F092CF2091E800277F2093E8002091CD +:102E20001103309112038217930708F49C0140E0CC +:102E30002115310509F065C0411163C08091E8009A +:102E400082FDC9CF80910903882329F2853019F2C8 +:102E50008091E80083FFF2CFBECF4132510509F4E3 +:102E60003CC04232510509F067CF8330910508F02C +:102E700063CFFC01EE0FFF1FEA55FE4F0190F0817A +:102E8000E02D8D559E4FDC018C9190E01AC03327C8 +:102E900021303105D1F02115310561F022303105A5 +:102EA00009F04ACFEBEBF6E0E4918E2F90E0EBEBEC +:102EB000F6E007C0EBEDF6E0E4918E2F90E0EBED4D +:102EC000F6E0009709F438CFA5CFE7ECF6E0E491FF +:102ED0008E2F90E0E7ECF6E0F4CF8330910508F018 +:102EE0002BCF880F991FFC01E455FE4F0190F08114 +:102EF000E02D89E090E08ECF82E190E0E9EAF6E013 +:102F000089CF80910903882309F465CF853009F4BE +:102F100062CF8091E80083FD5ECF8091E80082FD62 +:102F20008DCF8091E80080FF83CF9091F300809156 +:102F3000F2002115310519F08830910550F041E07B +:102F4000089709F040E08091E8008E778093E800D0 +:102F50006FCF44914093F100319621503109019691 +:102F6000E8CF803809F0E8CE8091E800877F809331 +:102F7000E80080910A038093F10087CE8111DCCEB6 +:102F800010910D03123008F0D7CE8091E800877FB2 +:102F90008093E80010930A030E943304112311F078 +:102FA00084E005C08091E30087FDFACF81E0809343 +:102FB000090342E061EC81E00E94520442E261ECCC +:102FC00084E00E94520442E261EC82E00E945204DA +:102FD00042E260EC83E00E945204AECE80910D0389 +:102FE000813009F0A9CE81E0933009F080E0809330 +:102FF00008031092E9008091E800877F8093E80041 +:103000000E94330499CE9F92AF92BF92CF92DF92EB +:10301000EF92FF920F931F93CF93DF9300D000D0D6 +:10302000CDB7DEB77C01DC0113968D919C9114978E +:10303000892B39F08C9111969C9189238F3F09F04F +:1030400040C60F900F900F900F90DF91CF911F917E +:103050000F91FF90EF90DF90CF90BF90AF909F9037 +:103060000895D60116968C9116978823E9F0199643 +:103070008D919C910817190739F48091D002909195 +:10308000D1020817190781F0F60197861487038784 +:103090008189811103C0C6010E94BD08C601069640 +:1030A0000E94DE081092D202FFEFAF1ABF0A26E19B +:1030B000C20ED11C1CC6980122513F45203131055A +:1030C00008F0DEC48FEF93E00E940E2D025167E0FE +:1030D000C62E62E0D62E882349F180912F02877098 +:1030E00009F4AFCFF7018281882309F4AACF82E0E7 +:1030F0000F900F900F900F90DF91CF911F910F9134 +:10310000FF90EF90DF90CF90BF90AF909F900C9486 +:10311000430DC11434E0D30601F3C6010E940E2D05 +:10312000811101C001508FEFC81AD80A0111F1CFE7 +:103130001C821B82BB24B3945AE0A52E86010F5F2C +:103140001F4FC6010E940E2D89831A82882329F2FF +:103150009FEF980F933020F58A83B98292E0C90ED1 +:10316000D11CC8010E940E2D8B83882309F4B5CF92 +:103170008E010F5F1F4FD8018C918823F9F28130A7 +:1031800009F046C011969C91119712968C9191303E +:1031900049F40E5F1F4F0E9451100F5F1F4FEBCF7E +:1031A0006801E6CF923029F40E5F1F4F0E94A40FF2 +:1031B000F4CF933029F40E5F1F4F0E941E0AEDCF0B +:1031C000943019F00F5F1F4FE8CF0E5F1F4F30E0B4 +:1031D00020E0B8016F5F7F4FF80141818053990B68 +:1031E0008A30910550F021503109B8F28FE99FE003 +:1031F0000197F1F700C00000F6CFA29EF001A39E58 +:10320000F00D11249C012E0F3F1F842F8B01E1CF65 +:103210000E94D210C2CF81E00E945F0D0E94230D58 +:103220005CCF81E00E94320DF9CF82E0F5CF882398 +:1032300069F180913902811106C081E080933902E1 +:1032400082EE0E94A40F0E9457059093380280934B +:1032500037028BE20E94A40F27C48823A1F080913B +:103260003902811106C081E08093390282EE0E940A +:10327000A40F0E945705909338028093370281EE85 +:103280000E94A40FE6CF81EE0E941E0A8BE20E94EC +:103290001E0A0AC4882309F455C4F60181898823CB +:1032A00009F450C4C5018E5C9E4F0E94DE084AC4DA +:1032B00082EE0E94A40F82C488E193E00E9438113C +:1032C00088E193E00E94A40A79C482EE0E94A40FD0 +:1032D00087E50E94511072C486EE0E94511088E169 +:1032E000F8CF895A85C482EE0E941E0A99C48CE2E6 +:1032F0000E9451108091D701882309F491C489E379 +:103300000E9451108DC488E2FBCF033FBCE51B0730 +:1033100039F188F4083DFCE51F07F1F0093D2CE583 +:10332000120751F1073D3CE5130709F07DC426E281 +:1033300041EE61EE0DC0053F8CE51807C9F0A0F025 +:1033400027E245EE66EE063FACE51A0709F06CC4CD +:10335000C7010E946E10C1CE27E245EE65EEF8CFA0 +:1033600026E241EE60EEF4CF27E245EE64EEF0CFC8 +:1033700026E241EE62EEECCF28E241E0EFCF809111 +:10338000DF02806106303CE5130709F487C008F4CA +:103390008CC08091DF02806281C08091DF028D7FCE +:1033A0000C309CE5190709F479C070F48091DF02B4 +:1033B0008C600A30BCE51B0709F470C008F481C0BA +:1033C0008091DF028E7F6AC08091DF02877F0E309E +:1033D000FCE51F0709F462C08091DF028B7F0F308C +:1033E0001C4508F45BC08091DF028F7E57C00B3F05 +:1033F0003CE5130709F45DC030F503319CE519077E +:1034000009F46DC078F40131BCE51B0709F463C011 +:1034100002311C4509F045C40E9427158091DF0246 +:103420008F773CC00531FCE51F0709F460C008F444 +:1034300074C08091E00281600A3F1C4509F031C4EC +:103440008093E0022EC40F3F8CE5180709F44BC0AF +:1034500088F48091E0028D7F0D3FACE51A0781F37F +:103460008091E0028E7F0E3F1C4550F38091E00278 +:103470008360E6CF0130EDE51E0709F457C008F47C +:1034800042C060E002301D4509F00BC48EE090E0C0 +:103490000E94222D06C48091DF0281608093DF02AA +:1034A00000C48091DF028460F9CF8091DF028860E0 +:1034B000F5CF8091E0028260C3CF8091DF0280640B +:1034C000EDCF0E9427158091DF028068E7CF8091C1 +:1034D000DF028F7DE3CF8091DF028F7BDFCF809192 +:1034E000DF02837FDBCF8091E0028C7FA9CF8091C8 +:1034F000DF0282FB992790F921E0922790FB82F965 +:1035000090FB83F9CBCF8091E002982F909591703A +:103510008E7F892B90FB81F993CF0E942715909184 +:10352000DF02892F97FB87F98058B8CF61E0AECFD3 +:103530008091D30206313CE5130709F0FCC38A7A77 +:1035400091E009F490E09093D801811106C089E2DE +:103550000E9453090E947808C0CD85E3F9CF85E326 +:10356000E7C380917B0380FF1BC08E7F80937B032A +:1035700060917B0370917C0380917D0390917E0329 +:103580000E94391310925C028FEF90E7A2E0815005 +:103590009040A040E1F700C000000E94620B9DCD6A +:1035A000816080937B0361E086950E94441495CDF1 +:1035B0004FE754E168E874E10E94DE058ECD48E8EB +:1035C00054E16FE774E1F8CF49E154E160E174E15F +:1035D000F3CF48EF53E164E074E1EECF40EE53E106 +:1035E0006CEE73E1E9CF4CEE53E160EE73E1E4CFB2 +:1035F00043E354E162E274E1DFCF61E081E0D5CFE3 +:1036000065E082E00E94921468CD68E086E0FACF1F +:1036100064E18FE0F7CF67E185E1F4CF62E289E111 +:10362000F1CF61E083E2C1CF0B353DE5130701F136 +:103630000C351D4509F0AAC38091E00282FB882762 +:1036400080F991E089270E94F911A0C30E942715F3 +:103650009FEFA4E3BCE09150A040B040E1F700C070 +:1036600000000E943E0B0E94B01437CD81E0EBCFEA +:1036700080E0E9CFF701828100811181882369F020 +:10368000C8010E944612D82E682FC8010E94B809AE +:10369000B8018D2D0E94391280C3C8010E94910982 +:1036A000D82EF6CFE12FEF70CE2E107F19F0C294F6 +:1036B00090EFC922DD20C9F0CC2069F080E2800FB4 +:1036C000883010F001110BC08091D302C82AC0923B +:1036D000D3020E947808802F0E94A40F16C0809108 +:1036E000D202C82AC092D202F4CF802F0E941E0AB2 +:1036F000CC2059F080E2800F883010F0011138C0E2 +:103700008C2D0E9471080E947808A92DA850BB0B2F +:10371000149720F40E948F050E946D0AAA20A9F038 +:1037200080912F0280FD11C0F70112828595859549 +:1037300085950E945F0DC7010E94031880912F029A +:103740008595859585950E94320D60E0C7010F90A3 +:103750000F900F900F90DF91CF911F910F91FF90DD +:10376000EF90DF90CF90BF90AF909F900C94BC12E1 +:10377000C0948091D202C822C092D202C4CFF12F4D +:10378000FF70BF2E107F103219F0B29480EFB82274 +:10379000002381F0013099F1DD20F1F1CC20A9F175 +:1037A000D70115968C91159780FF95CF8F70159640 +:1037B0008C932BC0DD20B1F0909131028B2D892BA1 +:1037C000C11003C00E94140AA0CF21E0C212FACF98 +:1037D0002091E00222FD99CF981709F496CF8093AB +:1037E000310293CFC11006C00E946B088B2D0E943E +:1037F0000D0A8BCF31E0C31609F487CFF5CFDD205A +:1038000031F085E08C1508F480CF8B2DDBCF94E070 +:103810009C1508F47ACFEACFCC2041F3093349F460 +:10382000BFEFE7EEF3E0B150E040F040E1F700C059 +:103830000000802F0E941E0A68CF812F86958695F2 +:10384000837061F0813009F060CFC8019370D110AE +:1038500002C090E080E00E94630557CFC8019370DA +:10386000D11002C090E080E00E9479054ECF812FF8 +:10387000837009F03FC0D11048CF402F4295469544 +:103880004770440F440F802F8F7090E0042E02C0C9 +:10389000880F991F0A94E2F730E020E004FF09C086 +:1038A0002FE030E002C0220F331F4A95E2F7209547 +:1038B0003095169516951370123099F078F4409162 +:1038C000320250913302113039F0822B932B842332 +:1038D00095230E94F20919CF842B952B822B932BD1 +:1038E000F8CF822B932B2091320230913302822722 +:1038F0009327EFCF8695DD2011F0812F81708823EB +:1039000009F403CF402F429546954770440F440F6A +:10391000802F8F7090E0042E02C0880F991F0A94A8 +:10392000E2F730E020E004FF09C02FE030E002C001 +:10393000220F331F4A95E2F720953095169516957C +:103940001370123099F078F44091130350911403DE +:10395000113039F0822B932B842395230E941B0D69 +:10396000D4CE842B952B822B932BF8CF822B932BA9 +:10397000209113033091140382279327EFCF1F70F8 +:10398000DD2029F0812F0E945F0D802F1BCF802F1B +:103990000E940D0A812F0E94320DB7CE023F09F41A +:1039A00041C060F4003F11F1013FA1F1DD2009F4B5 +:1039B00057C0C11090CE812F8F7131C0033FB9F134 +:1039C000043FA1F7DD2009F440C01F71812F0E9440 +:1039D0005F0D8091E00282FD07C0A8E01A9FC00140 +:1039E0001124836080932F02812F19C0DD2069F09C +:1039F00024E02C1508F489CE1F7181E090E002C00C +:103A0000880F991F1A95E2F7B3CF35E03C1508F4FB +:103A10007CCEF2CF812F8F71DD2009F4BCCF0E94C4 +:103A20005F0D73CE812F8F71DD20C9F3B4CF90E08D +:103A300080E0DD2009F492CF1F7181E090E002C0A8 +:103A4000880F991F1A95E2F789CF81E00E94430DF4 +:103A5000B1E0BC1508F059CE82E00E94430D55CE6E +:103A6000CC2059F0093309F0E4CEEFEFF7EE23E074 +:103A7000E150F0402040E1F7DACE812F8F718BCFFB +:103A80000031FFE51F0709F4C6CB01312FE512070E +:103A900009F4CBCB0038AFE51A0709F4C8CB0138DD +:103AA000BFE51B0709F4D9CBC80197558F3F910596 +:103AB00011F008F047C020910401022E000C330BD6 +:103AC0002817390714F480930401F701228136E1A5 +:103AD000389F5001399FB00C1124C501845D9E4F61 +:103AE0006C01DC0150962C935097928116968C9124 +:103AF0001697992309F4CECB1A961C930E93199717 +:103B00008F5F16968C930E945705F60196878587DE +:103B10008091310287838091D2029091D302892BC8 +:103B200080870190F081E02D309741F0D6015496C6 +:103B30006D917C91C5018E5C9E4F09951093D102C9 +:103B40000093D002D70112968C91882369F0C801A6 +:103B5000815E9C45059740F46FE1600F60933A02E7 +:103B60008CE090E00E94222D17FFCFCBF7018281DD +:103B7000882309F459C00E948F058695817080932F +:103B8000D70190913A02913029F4882319F089E302 +:103B90000E9451108091D3028093D6011092D302DB +:103BA00080913A02813009F487CB882309F480CBD5 +:103BB000823009F48ACB843009F48ECB8FE39CE900 +:103BC0000197F1F700C000005801E894B7F84CE005 +:103BD000C42ED12CC5010C2C02C0969587950A9451 +:103BE000E2F78F7096EF980F963008F47ACB805DED +:103BF0000E94D21094E0C91AD108ACEFCA16AFEFF8 +:103C0000DA0641F780913A02813009F470CB8823BB +:103C100009F469CB823009F466CB843009F473CBA4 +:103C20008091D6018093D302F7018281882309F421 +:103C300077C0109217030230FCE51F0708F478CC18 +:103C400006312CE5120730F0C8018A5F9C450997C0 +:103C500008F06ECC0E9415139093E0028093DF026F +:103C600000313CE5130709F432CC08F0C0CB083032 +:103C70009CE5190709F421CC08F08FCB0430BCE592 +:103C80001B0709F40ECC08F07ACB0230FCE51F07C5 +:103C900009F401CC8091DF02826003301C4509F4F5 +:103CA000FDCB6091DF021091E00284E090E00E9481 +:103CB000222D612F82E290E00E94222D0E94271582 +:103CC0000CCA61E0C7010E94BC128C01D701129698 +:103CD0008C918823A9F0809104018F3F89F07CE2C8 +:103CE000C72E71E0D72EB12CA12C992493948091EA +:103CF0000401082E000C990B8A159B050CF0B1C924 +:103D0000F70182818111D7C900313FE5130709F41A +:103D100088CA01319FE5190709F0BCCE82E082CA4A +:103D200006311C4599F58091D801811118CC89E2A2 +:103D30000E9428090FCC82720C3CECE51E0709F4A6 +:103D400057CC08F090C0063C2CE5120709F43CCC97 +:103D500008F065C0033C9CE5190709F429CC08F07C +:103D60004FC0023CBCE51B0709F4FBCB0A35BDE59F +:103D70001B0709F47BCC08F057CC0115FCE51F07A5 +:103D800009F464CC0E3D1C4509F46DCCD7011696A0 +:103D90008D919C91009709F46DCC0E94EE068C01E8 +:103DA000D7011296DC9012971596CC90C2943FE002 +:103DB000C32280912F028770A1F0AD2CDD2091F0FD +:103DC000812F807F803421F080E2800F883048F09E +:103DD00082E00E94430D80912F028770AA24A39451 +:103DE0008111A12C912E92942FE09222BBE0B91563 +:103DF00008F48BCCE92DF0E0E657F24D0C94C42C7E +:103E0000043CECE51E0709F4DACB40E154E169E13A +:103E100074E1053CFCE51F0709F4CECBA7CF093CB4 +:103E20002CE5120709F4DACB78F4073C9CE5190776 +:103E300009F4CFCB44E054E168EF73E1083CACE512 +:103E40001A0709F4B9CB92CF0A3CBCE51B0709F469 +:103E5000CACB42E254E163E374E10B3CECE51E079C +:103E600009F4AACB83CF013DFCE51F0709F4D0CBB1 +:103E7000A0F40E3C3CE5130709F4C2CB08F4BDCB1B +:103E80000F3C9CE5190709F4C0CB6EE089E0003DCA +:103E9000ACE51A0709F4B6CB69CF043DBCE51B07B6 +:103EA00009F4BCCB68F4023DFCE51F0709F4B3CB71 +:103EB00061E088E1033D2CE5120709F476CB56CF8B +:103EC000053D3CE5130709F4ACCB0D35100709F4AB +:103ED00004C94CCFCF93DF938091EA01807FA1F496 +:103EE0008091E701882381F080912E02D091ED012D +:103EF0006091E5017091E601A091E801B091E901BE +:103F0000C62FC723D81303C0DF91CF91089590E047 +:103F1000109711F0CF3F19F401968770F3CF9C01F1 +:103F200043E0220F331F4A95E1F7F901E251FE4FBA +:103F300041814713F1CF40814613EECF42814111B9 +:103F4000EBCF438154814A1B5B0B483C510520F762 +:103F50008091EA018F7080618093EA01F901ED5050 +:103F6000FE4F80818F708061808385EE91E00E949A +:103F70000318DF91CF910C948709AF92BF92CF9233 +:103F8000DF92EF92FF920F931F93CF93DF93CDB702 +:103F9000DEB765970FB6F894DEBF0FBECDBF8C01BC +:103FA00085E0F801DE01519601900D928A95E1F7C6 +:103FB000F801E28065EEA62E61E0B62E6091E80180 +:103FC0007091E9016115710509F468C19091E501ED +:103FD0004091E601892F84238F3F09F45FC120813E +:103FE0003181C380D480F090E701F601E61BF70B26 +:103FF000FF2009F41DC18091EA01582F507FE83C51 +:10400000F10508F0D0C0511181C0FE2C43132BC024 +:10401000921329C06091EB017091EC01F801468187 +:10402000578164177507F9F4E1101DC08F70806126 +:104030008093EA01C5010E9403188091EA01F8010A +:1040400085838F2D65960FB6F894DEBF0FBECDBF6A +:10405000DF91CF911F910F91FF90EF90DF90CF9064 +:10406000BF90AF900895CD2829F0822F83238F3FF2 +:1040700009F02FC180E0F82FF170DF2E80FF3CC0E7 +:1040800080912E024091ED01841315C0298B3A8B4B +:1040900089899A890E948212292F22952F702230B5 +:1040A000F8F0243020F59F70F9F0F8019581907FA9 +:1040B000D9F4D12C1FC090E0FC0153E0EE0FFF1F9C +:1040C0005A95E1F7E251FE4F5181351306C05081F8 +:1040D000251303C05281E5120FC001968770D4CF1B +:1040E0009F7011F0882329F3805E883010F3C80197 +:1040F0000E940318FD2CA5CFEE2009F4A2CF8091D9 +:10410000EA0181608093EA01F12C9BCF43131BC02D +:10411000921319C04091EB015091EC01F8012681F6 +:1041200037814217530779F4E1100DC08583C80128 +:104130000E94031888E0F801A5EEB1E001900D920D +:104140008A95E1F77ECFC8010E948E12882339F14B +:10415000EE2029F18091EA018032A0F02091E50162 +:104160003091E6013A8729871B86DD86CC868E87CB +:104170008091EB019091EC01988B8F87CE0109968D +:104180000E94031888E0F801A5EEB1E001900D92BD +:104190008A95E1F70E946A1FFF24F39452CFC80169 +:1041A0000E940318F9CF51110AC085EE91E00E94D8 +:1041B000031888E0F50111928A95E9F7A5CF43131A +:1041C00018C0921316C04091EB015091EC01F80118 +:1041D000268137814217530761F4E1100AC08583B5 +:1041E000C8010E94031888E0F50111928A95E9F749 +:1041F00028CFC8010E948E12882389F2EE2079F21E +:104200008091EA01803208F4BDCF2091E501309120 +:10421000E6013A8329831B82DD82CC828E838091E2 +:10422000EB019091EC0198878F83CE010196A8CF86 +:10423000E83CF105C0F6FE2CEE2009F4B0CF4313A4 +:104240001FC092131DC02091EB013091EC01F801C9 +:10425000868197812817390799F49091EA0190FD9A +:1042600069CF907F09F466CF8091EA018583903F02 +:1042700009F45DCF982F907F905F8F70892B56CF78 +:10428000C8010E948E1281117DCF8091EA01816068 +:104290008093EA01C8010E940318D3CEEE2009F4EE +:1042A0007ECFC8010E948E12F82E882309F477CFA2 +:1042B00088E0F801A5EEB1E001900D928A95E1F752 +:1042C0008091E5019091E6010E9482120E946A1F8E +:1042D000B8CE81E08E25CFCECF93DF93CDB7DEB7BA +:1042E00060970FB6F894DEBF0FBECDBF29873A871F +:1042F0004B875C876D877E878F87988BCE01099669 +:104300000E94BD1F811112C088E0FE013996DE01B6 +:10431000119601900D928A95E1F78C859D85892BE8 +:1043200029F089859A8589238F3FA9F580912E02EE +:104330009091ED0189131CC060960FB6F894DEBF12 +:104340000FBECDBFDF91CF91089593E0AA0FBB1FA1 +:104350009A95E1F7A251BE4F98E0FE013196019087 +:104360000D929A95E1F78093ED010E948709DECFC7 +:10437000B8E08B9FC001112482519E4F0E94BD1F47 +:104380008823D1F280912E0290E0019687709927C0 +:1043900080932E02CBCFA091ED01B0E0CD0101962C +:1043A0008770992720912E022817190671F60E940E +:1043B00027151092ED0110922E0288E0E5EEF1E053 +:1043C000DF011D928A95E9F7B1CF0F931F93CF9329 +:1043D000DF9380916302E0916202CCE081111AC008 +:1043E000DF91CF911F910F910895D1E0DE0FD0930F +:1043F00062020E2F10E0EC9FF0011124EC59FD4FEA +:1044000083819481892B29F08081918189238F3F39 +:1044100051F4ED2F80916302E81738F31092630294 +:1044200010926202DDCFC09FD001C19FB00D112458 +:10443000AC59BD4F16968D919C911797892B29F4F5 +:1044400018968D919C91019651F420813181428181 +:10445000538164817581868197810E946C21C09F00 +:10446000F001C19FF00D1124EC59FD4F148213820D +:10447000D0CF1092CF021092CE0210922B018091D9 +:10448000CD028093CC020E94C9050C94E5212F92A5 +:104490003F924F925F926F927F928F929F92AF92D4 +:1044A000BF92CF92DF92EF92FF920F931F93CF9321 +:1044B000DF93C091CC02E7E0FE2E01E010E0FCE0CB +:1044C0002F2EAEEFEA2E8091CD028C1316C00E94E3 +:1044D000E521DF91CF911F910F91FF90EF90DF9039 +:1044E000CF90BF90AF909F908F907F906F905F9094 +:1044F0004F903F902F900C94C905D0E0FE01EE0F35 +:10450000FF1FEC53FD4F80819181F89EF001F99ED1 +:10451000F00D1124E35EFE4F2481211158C030902C +:104520006302A4E6B2E030E020E0412C5F012315F5 +:1045300008F04BC01A966D907C901B97F501808017 +:1045400091804FEF5FEF512CC52CD12CF601EE0F6F +:10455000FF1FE80DF91D659174916616770609F441 +:10456000A601672B11F05394EFCF4F3F5407B1F1E1 +:10457000B80102C0660F771F4A95E2F7462AA801E4 +:1045800002C0440F551F5A94E2F741505109441696 +:10459000150601F5229EF001239EF00D1124EC5921 +:1045A000FD4FF89ED001F99EB00D1124A35EBE4FC1 +:1045B00012962D913C91139737832683E082E182F6 +:1045C0009187808771E015967C930E949B052196C8 +:1045D000C37079CF14961C921E9213972F5F3F4F92 +:1045E0001C96A5CFAF92BF92CF92DF92EF92FF922F +:1045F0000F931F93CF93DF9300D000D000D0CDB79F +:10460000DEB78E010F5F1F4F86E0D8011D928A959D +:10461000E9F724E7C22E21E0D22EF12CE12CAA24C6 +:10462000A394B12CF60181916F018F3F09F44BC027 +:10463000F894E82FE295EF70F0E021A18F70A501CA +:1046400002C0440F551F8A95E2F7CA01922F982B9A +:1046500091A392A18095892382A3789400C0C5017B +:104660000E2C01C0880F0A94EAF7382F282F2095C6 +:1046700068E771E0F801DB019D91BD0180819F3FFA +:1046800009F46BC0492F42954F7050E0DA019096C3 +:104690004C9150E09F7002C0559547959A95E2F76E +:1046A00040FD5BC0832B80833196B1E06E377B0782 +:1046B00011F7F601319780818F3F11F00E94940627 +:1046C000E0EAEA95F1F7FFEFEF1AFF0A24E0E216BD +:1046D000F10409F0A7CF46E050E0B8018EE392E084 +:1046E0000E94632DDD24D394009709F4D12C892BEB +:1046F000B1F186E0F801AEE3B2E001900D928A9547 +:10470000E1F781E0809336020E94570590933502CD +:104710008093340280913402909135020E944805C2 +:10472000059708F180913E0280934F0280913F02ED +:104730008093500280914002809351028091410207 +:1047400080935202809142028093530280914302EF +:10475000809354021092360206C08223A4CF809127 +:1047600036028111D7CF809104018F3F09F06AC0D2 +:1047700080912B0181116AC080913902882371F0E8 +:1047800080913702909138020E944805893E9340FB +:1047900028F082EE0E941E0A109239028D2D269674 +:1047A0000FB6F894DEBF0FBECDBFDF91CF911F9142 +:1047B0000F91FF90EF90DF90CF90BF90AF90089552 +:1047C000E29EF001E39EF00D1124E45DFE4FA2880D +:1047D000B388A114B10419F498ECA92EB12CE29E6F +:1047E0008001E39E100D1124045D1E4FD801169622 +:1047F0008C9116978823C9F01D968D919C910E94EB +:104800004805A816B90688F4FE9C50011124F80149 +:104810008189811105C0C501845D9E4F0E94BD083C +:10482000C5018E5C9E4F0E94DE08F3942F2D30E070 +:1048300080910401082E000C990B821793070CF04D +:10484000BFCF96CFF12C86E1E82EF0CF8091CE023B +:104850009091CF02009709F48FCF0E9448052091D4 +:104860006002309161022817390708F085CF9091D6 +:10487000CC028091CD02981759F00E9447221092E5 +:104880006102109260021092CF021092CE0274CF99 +:104890000E94E5211092CF021092CE020E94C9051B +:1048A0006BCF2F923F924F925F926F927F928F9237 +:1048B0009F92AF92BF92CF92DF92EF92FF920F93AF +:1048C0001F93CF93DF93CDB7DEB769970FB6F894F8 +:1048D000DEBF0FBECDBF498B5A8B6B8B7C8B8D8B14 +:1048E00061111092D2021D861E861F86188A85E0ED +:1048F000FE017196DE01199601900D928A95E1F7FD +:104900008C859D85892B31F089859A8589238F3FF8 +:1049100009F0D4C129853A854B855C856D857E85F6 +:104920008F8598890E946C21C3C028EFC2162CE5A0 +:10493000D20629F4882379F00E943922EBCF39EF8F +:10494000C3163CE5D30639F4882329F080912B0166 +:104950008111F2CFC3C10DE111E0E12CB12CA12CEA +:1049600088248394912C2EEF522E44244394F801F2 +:104970006081718166246A94762C20E0422F50E099 +:10498000FA01EE0FFF1FE60FF71F85919491C816ED +:10499000D90609F43A01892B31F02F5FEFCFAA2411 +:1049A000A394B12CE4CFF12CFFEF6F167F0609F42E +:1049B00045C0F8014481F0902B018F2D411180E01A +:1049C000F82FF170FF2EF801258086819B859923B1 +:1049D00009F404C1FF2009F401C1211014C0A4018D +:1049E00001C0440F6A94EAF7842B868380916002A9 +:1049F000909161028C32914030F44CE251E050933E +:104A0000610240936002C40102C0880F991F2A9579 +:104A1000E2F70197F80126812817190679F48091A9 +:104A2000CE029091CF02009709F45BC00E94480526 +:104A30008D32914008F455C0F8014482EF28095F97 +:104A40001F4FAA94AB2809F0AACF8B85882309F4BD +:104A500020C1EE2009F41DC10E9457059093CF029A +:104A60008093CE0280916302883010F591E0980F18 +:104A70009093630298E0FE013996DE011196019051 +:104A80000D929A95E1F72CE0829FC00111248C5978 +:104A90009D4F28E0FE013196DC0101900D922A9590 +:104AA000E1F72FEF3FEFFC0131872087D386C286E5 +:104AB00069960FB6F894DEBF0FBECDBFDF91CF91E0 +:104AC0001F910F91FF90EF90DF90CF90BF90AF902C +:104AD0009F908F907F906F905F904F903F902F901E +:104AE00008958091CC026090CD02982FF0E0E0E034 +:104AF000861114C09093CC020E171F0709F49ECFA5 +:104B000090E0FC01EE0FFF1FEC53FD4FB182A0823D +:104B10000196837099278093CD0290CF282E312C57 +:104B2000F101EE0FFF1FEC53FD4F20813181F7E0C3 +:104B3000F29FD001F39FB00D1124A35EBE4F2D91C3 +:104B40003C911197398F288F712C60E070E0E72F2E +:104B5000F0E0EE0FFF1F288D398DE20FF31F259136 +:104B6000349121153105E1F0F8010190F081E02D3B +:104B7000FF8BEE8B60E005C02417350709F47F2C0E +:104B80006F5FE62FF0E0EE0FFF1F4E895F89E40FA5 +:104B9000F51F459154914115510571F77F5FD7CFAE +:104BA0007720C9F0F801671708F0FD0144820E175D +:104BB0001F0721F49093CC02F72C40CF981305C027 +:104BC000AE17BF0711F49F5F937091012F5F3F4FA6 +:104BD000822F83708DCFF0E0E0E0F7CF90E02110DE +:104BE0001FC0B40102C0660F771F2A95E2F79B0130 +:104BF000215031092817390731F4442309F447C0FB +:104C0000C5010E949B05C40101C0880F6A94EAF7A0 +:104C1000982F9095F801868189238683F22C0ECFF8 +:104C20009C01062C02C0359527950A94E2F7A9014C +:104C300041705527BC016150710986239723892B48 +:104C400011F5452B01F1F80182819381892BC1F087 +:104C50001B821C821D821E8259825A820E94570525 +:104C60008160582F9D838C83F801828193818F838B +:104C7000988729813A814B816D817E810E946C21C8 +:104C8000F8011582C0CFF22FF1702F2EBCCF2F2C40 +:104C9000BACF9091CC028091CD02981731F00E944A +:104CA0004722EE2009F436CE03CF0E94E521109270 +:104CB000CF021092CE020E94C905F3CF61E0CE016F +:104CC00009960E94BC126C018B85F7EFCF16FCE5AC +:104CD000DF0609F02ACE882309F43DCE81E08093D7 +:104CE0002B0118CE1F920F920FB60F9211242F9303 +:104CF0003F934F935F936F937F938F939F93AF9364 +:104D0000BF93CF93DF93EF93FF93D091E900DF70D0 +:104D10008091EC00C82FC17080FDC0E81092E900BE +:104D20008091F000877F8093F00078940E943C157A +:104D30001092E9008091F00088608093F000CD2B04 +:104D4000CF70C093E900FF91EF91DF91CF91BF91B8 +:104D5000AF919F918F917F916F915F914F913F9113 +:104D60002F910F900FBE0F901F9018951F920F92CA +:104D70000FB60F9211242F933F934F935F936F932E +:104D80007F938F939F93AF93BF93EF93FF93809104 +:104D9000E10082FF09C08091E20082FF05C080919E +:104DA000E1008B7F8093E1008091DA0080FF24C0D6 +:104DB0008091D80080FF20C08091DA008E7F8093A0 +:104DC000DA008091D90080FF9BC080E189BD82E13B +:104DD00089BD09B400FEFDCF81E080930903809175 +:104DE000E402811109C00E94B9030E9484048091E9 +:104DF000E20084608093E2008091E10080FF17C0B0 +:104E00008091E20080FF13C08091E2008E7F80934A +:104E1000E2008091E20080618093E2008091D800FE +:104E200080628093D80019BC85E08093090380914B +:104E3000E10084FF29C08091E20084FF25C080E169 +:104E400089BD82E189BD89B5982F917080FFFBCF24 +:104E50008091D8008F7D8093D8008091E1008F7E73 +:104E60008093E1008091E2008F7E8093E200809148 +:104E7000E20081608093E20080910A03882309F4B4 +:104E800045C084E0809309038091E10083FF27C03F +:104E90008091E20083FF23C08091E100877F8093AF +:104EA000E10082E08093090310920A038091E100FF +:104EB0008E7F8093E1008091E2008E7F8093E200FC +:104EC0008091E20080618093E20042E060E080E057 +:104ED0000E9452048091F00088608093F000FF915E +:104EE000EF91BF91AF919F918F917F916F915F9162 +:104EF0004F913F912F910F900FBE0F901F901895DB +:104F000019BC109209031092E40276CF8091E3005D +:104F100087FD93E090930903B7CF78941F921FB653 +:104F20001F9211248F939F93AF93BF938091DB02C5 +:104F30009091DC02A091DD02B091DE020196A11DEC +:104F4000B11D8093DB029093DC02A093DD02B0934D +:104F5000DE02BF91AF919F918F911F901FBE1F9056 +:104F600018951F921FB61F9211248F939F93AF9392 +:104F7000BF938091DA02811113C08091DB0290917E +:104F8000DC02A091DD02B091DE024196A11DB11DAF +:104F90008093DB029093DC02A093DD02B093DE02EB +:104FA000BF91AF919F918F911F901FBE1F90189539 +:104FB000CDB7DEB7AA970FB6F894DEBF0FBECDBF50 +:104FC00084B7877F84BF0FB6F894A895809160005E +:104FD000886180936000109260000FBE80E890E0CE +:104FE0000FB6F89480936100909361000FBE85B76F +:104FF000806885BF85B7806885BF82E996E0909319 +:10500000B3018093B2010E94B9030E94840480918D +:10501000E20084608093E200789480910903882301 +:10502000A1F01091E9001F709091EC00892F817020 +:1050300090FD80E8182B1092E9008091E80083FD34 +:105040000E943C151F701093E90082E084BD93E03C +:1050500095BD9AEF97BD80936E000E94FC1281115E +:1050600002C00E94EA1182E30E94940680EF0E942F +:10507000940686E90E94940687E90E94940608E750 +:1050800011E02EE7E22E21E0F22EF80181918F014E +:105090008F3F11F00E949406E016F106B1F7EEE39F +:1050A000F2E084E492E0AFE4B2E011921D928E1738 +:1050B0009F07D9F70E941C15811102C00E94B014ED +:1050C00082E090E00E940E2D809348020E9415130A +:1050D0009093E0028093DF020E94F2228FE39CE92A +:1050E0000197F1F700C000000E94F22280914F0268 +:1050F00080FF08C06FEF7FEF90E080E00E94402DBE +:105100000E943E0B83E090E00E940E2D90E00E94F2 +:10511000F20980911303909114030E94060C6E9A79 +:10512000769A8CE090E00E940E2D90E0B0E0A0E036 +:1051300080933A0290933B02A0933C02B0933D02CD +:1051400080914402811133C00E941C15811104C05A +:105150000E94B0140E94A01488E090E00E94162DD6 +:1051600060937B0370937C0380937D0390937E0315 +:105170006E7F71F40E94A01488E090E00E94162DCA +:1051800060937B0370937C0380937D0390937E03F5 +:105190000E94E30510925C0280917B0380FF04C0B3 +:1051A00060E086950E94441481E0809344028091DF +:1051B0007B03816080937B0361E086950E944414A9 +:1051C00060E081E20E94441421E04EE16FEF8AE347 +:1051D0000E944B1385E091E09093D7028093D60212 +:1051E00018E1E12EF12C00E4C02E8FE492E096E06D +:1051F000D92ED80E80910903BB24B39400E112E1AB +:10520000853009F402C10E94F222882359F08FB739 +:10521000F8944091DB025091DC026091DD027091C4 +:10522000DE028FBFE9E4F2E0AFE4B2E010E000E0BC +:10523000302F8D919191981709F409C1292F2827B2 +:1052400090E0BB24B394422F4B2109F4FBC099A3F7 +:105250003AA38B2191E009F490E09BA30E945705AB +:105260008160782F9DA38CA349A15AA16BA18DA128 +:105270000E945124F801E75BFD4F8081B826B0827F +:1052800080915C028823D1F180915B02E0917B03E5 +:10529000E695E81BE0935702823009F0EFC0F0E09A +:1052A000EB5BFD4FE4910E2F10E0B0E9AB2EBFE0B9 +:1052B000BB2E80915802882361F0109258020E9400 +:1052C0005705909356028093550210925A021092FD +:1052D00059020E945705E0915502F09156028E1B2B +:1052E0009F0B8F3F9F4750F4E00FF11FF093560242 +:1052F000E093550285E592E0F50109950E948F053E +:1053000090914702891731F00E948F0580934702E0 +:105310000E946D0A80910903843009F06BCF83E00D +:105320008093E9008091E80082FF64CF8091E800DB +:1053300090E085FF06C00E94D803882309F4F8C0D6 +:1053400091E08091E8008B778093E800992309F43D +:1053500051CFE981E150E33108F06CC1F0E0EA5649 +:10536000F24D0C94C42C80910903843009F440C0A0 +:1053700080E00E946D0A10925C02809146028111C9 +:1053800016C0B092460280917B03982F9170909343 +:1053900045028E7F80937B039FEFE0E7F2E0915020 +:1053A000E040F040E1F700C000000E94620B109264 +:1053B000DA020FB6F894A895E09260000FBEC09292 +:1053C000600083B7817F846083BF83B7816083BFC0 +:1053D0007894889583B78E7F83BF0FB6F894A8958D +:1053E00080916000886180936000109260000FBE21 +:1053F00080910803882349F00E94F222EFE4F2E052 +:10540000819181114AC2DE12FBCF80910903853060 +:1054100009F4A9CF0E9427150E948F050E946D0AEA +:105420001092460280914502882349F080917B03C7 +:10543000816080937B0360E086950E9444140E9403 +:105440002313E1CE9F5FBB0C943009F0FCCE0F5FBD +:105450001F4F0630110509F0EBCE8FEF8EA38FA3FF +:1054600018A60E9457058160782F9AA789A74EA198 +:105470005FA168A58AA50E94512402CF863059F405 +:10548000F0E0EE5BFD4FE4910E2F10E0A0E8AA2EB5 +:10549000AFE0BA2E0ECF893061F4E695F0E0E15C22 +:1054A000FD4FE4910E2F10E0FCEEAF2EFEE0BF2E7C +:1054B00000CF8F3061F4E695F0E0E45CFD4FE491BD +:1054C0000E2F10E0EEE7AE2EEEE0BE2EF2CE8531CE +:1054D00059F4F0E0E75CFD4FE4910E2F10E070E32B +:1054E000A72E7EE0B72EE5CE08E210E047EAA42E14 +:1054F0004DE0B42E883109F4DCCE833249F4E7E381 +:10550000F2E00591149167E2A62E6FE0B62ED1CE9F +:1055100004EF11E05EE6A52E5DE0B52E843209F4BD +:10552000C8CE00ED17E033E4A32E35E0B32EC1CE94 +:1055300000E210E0CE0101965C018091E80085FD5B +:105540000AC08091E8008B778093E8000E94D8031E +:10555000882399F3F5CE8091F100F50181935F01E5 +:105560000150110951F7ECCE1A8289E08B832DC0CE +:105570008A81823009F4A7C18330A9F0813009F013 +:1055800059C02FB7F8946091DB027091DC028091D2 +:10559000DD029091DE022FBF0E94CA2C6B837C83B8 +:1055A0008D839E8312C080914F028B838091500225 +:1055B0008C83809151028D83809152028E838091E1 +:1055C00053028F838091540288878091090384302D +:1055D00009F010CE1091E9001F709091EC00892F16 +:1055E000817090FD80E8182B82E08093E900809123 +:1055F000E80080FF0DC050E040E060E270E0CE01C6 +:1056000001960E9409048091E8008E778093E8005B +:105610001F701093E900EECD8A81823059F46B81BE +:105620007C818D819E810E94CA2C86E290E00E943E +:10563000222DCBCF8FEF8983C8CF4C816B818A819C +:105640000E9413129827892798279E838D83BDCFA8 +:10565000AD80BE80BA24AB24BA248A810B81F8E0E5 +:105660000F9F8001112420E3829F000D111D112442 +:105670008C8190E0880F991F080F191F6B2DC801AE +:1056800087960E94222D6A2DC8018896D0CF0E944D +:105690007F119BCF8A818138C1F060F4803809F096 +:1056A00094CF20E04B8160917D0380917C030E9428 +:1056B0004B138BCF823859F1833809F086CF20E025 +:1056C00040917E036C818B81F2CF60E08B810E94E0 +:1056D00044149B8180917B03911111C08E7F809334 +:1056E0007B0310925C028FEF90E7E2E081509040E4 +:1056F000E040E1F700C000000E94620B66CF8160CD +:1057000080937B0360E086950E9444145ECF8B817A +:1057100080937F035ACF8A81813899F030F48038A2 +:1057200009F053CF80917E0321CF823891F08338E6 +:1057300009F04BCF80917C038B8380917D038C8318 +:1057400044CF80917B0380FF02C086950FCF80E01D +:105750000DCF80917F030ACF60917B0370917C0312 +:1057600080917D0390917E030E9439132ECF80E1BA +:105770008A832BCF81E08A8389EFF8CEAA80BB8011 +:10578000BA24AB24BA248E010F5F1F4F8C80800E89 +:10579000912E911CC501895F9D4F8016910609F4D9 +:1057A00014CFF9EFAF16F1E0BF0650F40E940E2DB2 +:1057B000F8018483FFEFAF1ABF0A0F5F1F4FEACFD4 +:1057C000F8011482F7CF0A811B81102701271027C7 +:1057D000CE0101964C01AC80A00EB12EB11CC801C7 +:1057E000895F9D4FA016B10609F4EFCE093FE1E0B5 +:1057F0001E0720F4F40164810E94222DFFEF8F1A0E +:105800009F0A0F5F1F4FEBCF0E946F11DECE8AE021 +:10581000AFCFAA80BB80BA24AB24BA248E010F5F1D +:105820001F4F8C80800E912E911CC501879680168B +:10583000910609F4CACE20EEA21621E0B20650F479 +:105840000E940E2DF8018483FFEFAF1ABF0A0F5F8D +:105850001F4FEBCFF8011482F7CF0A811B8110276D +:1058600001271027CE0101964C01AC80A00EB12E6D +:10587000B11CC8018796A016B10609F4A6CE003E59 +:10588000E1E01E0720F4F40164810E94222DFFEF65 +:105890008F1A9F0A0F5F1F4FECCF09BD19BD09B4C6 +:1058A00000FEFDCF8091D8008F7D8093D80080913D +:1058B000E00082608093E0008091E00081FDFCCFF9 +:1058C0000E942715A2CD86E290E00E940E2D1B8239 +:1058D0001C821D828E8379CE87FB082E062687FDCB +:1058E000819567FD61950E94022D0EF4919507FC4C +:1058F00081950895AA1BBB1B51E107C0AA1FBB1FBE +:10590000A617B70710F0A61BB70B881F991F5A954B +:10591000A9F780959095BC01CD01089597FB072EBE +:1059200016F4009407D077FD09D00E947A2C07FC6A +:1059300005D03EF4909581959F4F0895709561959F +:105940007F4F0895A1E21A2EAA1BBB1BFD010DC0BB +:10595000AA1FBB1FEE1FFF1FA217B307E407F5071F +:1059600020F0A21BB30BE40BF50B661F771F881FFB +:10597000991F1A9469F760957095809590959B0191 +:10598000AC01BD01CF010895EE0FFF1F0590F4910A +:10599000E02D099469279627692778278727782794 +:1059A00008950E94D92C332312F48A1B9B0B0C946C +:1059B000EA2CA29FB001B39FC001A39F700D811D6F +:1059C0001124911DB29F700D811D1124911D089508 +:1059D0000E94D92CB7FF0895821B930B08950E9453 +:1059E000D92CA59F900DB49F900DA49F800D911D63 +:1059F00011240895B7FF0C94EF2C0E94EF2C821B0A +:105A0000930B0895991B79E004C0991F961708F02D +:105A1000961B881F7A95C9F780950895F999FECF4E +:105A200092BD81BDF89A992780B50895A6E1B0E0AE +:105A300044E050E00C94482DA8E1B0E042E050E092 +:105A40000C94482D262FF999FECF92BD81BDF89A6E +:105A5000019700B4021639F01FBA20BD0FB6F894B2 +:105A6000FA9AF99A0FBE08950396272F0E94232DC4 +:105A70000E94222D252F0E94232D242F0C94232DAC +:105A80000196272F0E94232D0C94222DDC01CB019F +:105A9000FC01F999FECF06C0F2BDE1BDF89A31963E +:105AA00000B40D9241505040B8F70895FC014150A8 +:105AB000504030F001900616D1F73197CF0108958C +:105AC000882799270895FB01DC0104C08D9101907E +:105AD000801921F441505040C8F7881B990B089554 +:105AE000F894FFCFA712A712B012B012B212B012E0 +:105AF000B012B012A712A712B712B012B012B7129A +:105B0000211649169C1649169C167C16B4169C162E +:105B1000B117BE17521B521BBF1BBF1B1D1C851B81 +:105B2000851B851B371CBF1CCE1CCE1CB42AB82A73 +:105B30000C2B1D2B282B472B4A2B8B2BAC2B1A2BDA +:105B40001A2BB72BBA2BBE2BE32B042C072C092CBA +:025B50002D2CFA +:105B520056005300FF4505FE0A4405FA0AF60A01FB +:105B6200191A1B1C1D1E1F202122010201B2002A2C +:105B720000000000AC004C00000000015F114F115A +:105B8200BC0A00000000000000000000000000004D +:105B9200000101818283E200E900EA00B500B6005B +:105BA200B700CD008301CC008A0192019401210249 +:105BB200230224022502260227022A02B300B4008D +:105BC2006F00700032F0969733F1F4F5F6F70001AA +:105BD200020202020606060909090909090F0F0F46 +:105BE2000F0F0F151515181919191919191919194E +:105BF20019232440226D47012501B8006006790669 +:025C0200990601 +:00000001FF diff --git a/keyboards/solartempest/ps17/info.json b/keyboards/solartempest/ps17/info.json new file mode 100644 index 000000000000..2806bc0128d6 --- /dev/null +++ b/keyboards/solartempest/ps17/info.json @@ -0,0 +1,38 @@ +{ + "keyboard_name": "Atlantis PS17 Macropad", + "url": "", + "maintainer": "solartempest", + "width": 4, + "height": 6, + "layouts": { + "LAYOUT": { + "layout": [ + {"x":0, "y":0, "h":1.5}, + {"x":0, "y":1}, + {"x":0, "y":2, "h":1.5}, + + {"x":1, "y":0}, + {"x":1, "y":1}, + {"x":1, "y":2}, + {"x":1, "y":3}, + + {"x":2, "y":0}, + {"x":2, "y":1}, + {"x":2, "y":2}, + {"x":2, "y":3, "h":2}, + + {"x":3, "y":0}, + {"x":3, "y":1}, + {"x":3, "y":2}, + + {"x":4, "y":0}, + {"x":4, "y":1}, + {"x":4, "y":2}, + {"x":4, "y":3, "h":2}, + + {"x":5, "y":0, "w":2}, + {"x":5, "y":2}, + ] + } + } +} diff --git a/keyboards/solartempest/ps17/keymaps/via/config.h b/keyboards/solartempest/ps17/keymaps/via/config.h new file mode 100644 index 000000000000..4bbacd9a507b --- /dev/null +++ b/keyboards/solartempest/ps17/keymaps/via/config.h @@ -0,0 +1,22 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#pragma once + +// Set 10 layers for VIA +#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/ps17/keymaps/via/rules.mk b/keyboards/solartempest/ps17/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/solartempest/ps17/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/solartempest/ps17/ps17 VIA keymap.json b/keyboards/solartempest/ps17/ps17 VIA keymap.json new file mode 100644 index 000000000000..d906b47dbb7a --- /dev/null +++ b/keyboards/solartempest/ps17/ps17 VIA keymap.json @@ -0,0 +1,51 @@ +{ + "name": "PS17" , + "vendorId": "0x414B", + "productId": "0x0015", + "lighting": "qmk_rgblight", + "matrix": { "rows": 6, "cols": 4 }, + "customKeycodes": [ + { + "name": "Super Alt Tab FWD", + "title": "Alt Tab Forwards in Windows", + "shortName": "ATABF" + }, + { + "name": "Super Alt Tab REV", + "title": "Alt Tab Reverse in Windows", + "shortName": "ATABR" + }, + { + "name": "Move Window Right", + "title": "Move Window Right in Windows", + "shortName": "MWR" + }, + { + "name": "Move Window Left", + "title": "Move Window Left in Windows", + "shortName": "MWL" + }, + { + "name": "Spam Arrow", + "title": "Toggle F24 on interval timer with Orange LED", + "shortName": "SA" + }, + { + "name": "Teams Muted", + "title": "Simply Change LED of 1 to show if muted or not", + "shortName": "TM" + } + ], + "layouts": + { + "keymap": + [ + [{"w": 1, "h":1.5},"0,0", "0,1", {"w": 1, "h":1.5},"0,2"], + [{"y":0.75}, "1,0", "1,1", "1,2", "1,3"], + [ "2,0", "2,1", "2,2", {"h":2},"2,3"], + [ "3,0","3,1","3,2"], + [ "4,0", "4,1", "4,2", {"h":2},"4,3"], + [{"w": 2},"5,0", "5,2"] + ] + } +} \ No newline at end of file diff --git a/keyboards/solartempest/ps17/ps17 VIA layout.json b/keyboards/solartempest/ps17/ps17 VIA layout.json new file mode 100644 index 000000000000..6671cee90952 --- /dev/null +++ b/keyboards/solartempest/ps17/ps17 VIA layout.json @@ -0,0 +1,267 @@ +{ + "name": "PS17", + "vendorProductId": 1095434261, + "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + "layers": [ + [ + "C(KC_TAB)", + "C(KC_W)", + "C(S(KC_TAB))", + "KC_NO", + "TO(2)", + "KC_PSLS", + "KC_PAST", + "KC_PMNS", + "KC_P7", + "KC_P8", + "KC_P9", + "KC_PPLS", + "KC_P4", + "KC_P5", + "KC_P6", + "KC_NO", + "KC_P1", + "KC_P2", + "KC_P3", + "KC_PENT", + "KC_P0", + "KC_NO", + "KC_PDOT", + "KC_NO" + ], + [ + "KC_RGHT", + "KC_TRNS", + "KC_LEFT", + "KC_NO", + "TO(0)", + "KC_TRNS", + "KC_TRNS", + "KC_NLCK", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_BSPC", + "TO(5)", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "TO(2)", + "TO(3)", + "TO(4)", + "KC_TRNS", + "RESET", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_VOLU", + "KC_TRNS", + "KC_VOLD", + "KC_NO", + "TO(0)", + "KC_WWW_REFRESH", + "KC_WWW_HOME", + "C(S(KC_B))", + "C(S(KC_TAB))", + "KC_UP", + "C(KC_TAB)", + "USER04", + "KC_LEFT", + "KC_DOWN", + "KC_RGHT", + "KC_NO", + "USER05", + "KC_TRNS", + "KC_SLCK", + "KC_NLCK", + "KC_F13", + "KC_NO", + "KC_F14", + "KC_NO" + ], + [ + "USER00", + "KC_TRNS", + "USER01", + "KC_NO", + "TO(0)", + "KC_WWW_REFRESH", + "KC_HOME", + "C(KC_T)", + "C(S(KC_TAB))", + "KC_UP", + "C(KC_TAB)", + "C(KC_W)", + "KC_LEFT", + "KC_DOWN", + "KC_RGHT", + "KC_NO", + "KC_WWW_BACK", + "KC_SPC", + "KC_WWW_FORWARD", + "KC_ENT", + "KC_PGDN", + "KC_NO", + "KC_PGUP", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ], + [ + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_NO", + "KC_TRNS", + "KC_NO" + ] + ] +} \ No newline at end of file diff --git a/keyboards/solartempest/ps17/ps17.h b/keyboards/solartempest/ps17/ps17.h new file mode 100644 index 000000000000..64ebc5766887 --- /dev/null +++ b/keyboards/solartempest/ps17/ps17.h @@ -0,0 +1,61 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#pragma once +#include "quantum.h" + +#ifdef RGBLIGHT_ENABLE + #define LAYOUT( \ + K00, K01, K02, \ + K10, K11, K12, K13, \ + K20, K21, K22, K23, \ + K30, K31, K32, \ + K40, K41, K42, K43, \ + K50, K52 \ + ) { \ + { K00, K01, K02, KC_NO }, \ + { K10, K11, K12, K13 }, \ + { K20, K21, K22, K23 }, \ + { K30, K31, K32, KC_NO }, \ + { K40, K41, K42, K43 }, \ + { K50, KC_NO, K52, KC_NO }, \ + } +#endif + +#ifdef RGB_MATRIX_ENABLE // Five empty rows of keys were added for RGB Matrix purposes. You must map to a key otherwise it will not work. + #define LAYOUT( \ + K00, K01, K02, \ + K10, K11, K12, K13, \ + K20, K21, K22, K23, \ + K30, K31, K32, \ + K40, K41, K42, K43, \ + K50, K52 \ + ) { \ + { K00, K01, K02, KC_NO }, \ + { K10, K11, K12, K13 }, \ + { K20, K21, K22, K23 }, \ + { K30, K31, K32, KC_NO }, \ + { K40, K41, K42, K43 }, \ + { K50, KC_NO, K52, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO }, \ + } +#endif diff --git a/keyboards/solartempest/ps17/readme.md b/keyboards/solartempest/ps17/readme.md new file mode 100644 index 000000000000..bd9504222899 --- /dev/null +++ b/keyboards/solartempest/ps17/readme.md @@ -0,0 +1,39 @@ +# Atlantis PS17 Macropad + +![Atlantis PS17](https://i.imgur.com/Y0rkPgA.jpg) + +A 17-key macro pad with pushbutton rotary encoder and underglow RGB per key RGB and for the case. + +For detailed instructions on using VIA and flashing, please refer to the sections further down the page! + +* Keyboard Maintainer: solartempest +* Hardware Supported: Atlantis PS17 v2 +* Hardware Availability: [rioo897](https://shop198276076.world.taobao.com/index.htm?spm=2013.1.w5002-23418336364.2.3f4d7d51DkVX3s) + +# Custom Features: + +- Remappable rotary encoder controls volume up/down/mute. +- Allows for remapping of per-layer rotary encoder functions in VIA. +- VIA support included by default. +- RGB underglow and matrix support and remapped to physical locations (nicer gradient and effects). +- Adds custom layer lighting with custom gradients for each. +- Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders. +- Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders. +- Adds key combo functionality for backspace, delete, and arrow keys. + +## Make and Flashing + +Make example for this keyboard (after setting up your build environment): + + qmk compile -kb solartempest/ps17 -km via + +To reset the board into bootloader mode, tap the Reset switch mounted on the bottom of the PCB. +Flash with QMK toolbox, auto-flash. + +## Using with VIA + +- After flashing, in VIA make sure to Import Keymap, which is "ps17 VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. +- Go to Save+Load to Load Saved Layout. You can import my own layout "ps17 VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. +- It is a good idea to Save Current Layout after you decide on your mapping. + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/solartempest/sofle/.noci b/keyboards/solartempest/sofle/.noci new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/keyboards/solartempest/sofle/info.json b/keyboards/solartempest/sofle/info.json new file mode 100644 index 000000000000..16147f76dd51 --- /dev/null +++ b/keyboards/solartempest/sofle/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "Solarius_Sofle", + "url": "", + "maintainer": "solartempest", + "width": 15, + "height": 8.0, + "layouts": { + "LAYOUT": { + "layout": [{"label":"0,3", "x":3.25, "y":0.5}, {"label":"5,3", "x":13.25, "y":0.5}, {"label":"0,2", "x":2.25, "y":0.63}, {"label":"0,4", "x":4.25, "y":0.63}, {"label":"5,4", "x":12.25, "y":0.63}, {"label":"5,2", "x":14.25, "y":0.63}, {"label":"0,5", "x":5.25, "y":0.73}, {"label":"5,5", "x":11.25, "y":0.73}, {"label":"0,0", "x":0.25, "y":0.86}, {"label":"0,1", "x":1.25, "y":0.86}, {"label":"5,1", "x":15.25, "y":0.86}, {"label":"5,0", "x":16.25, "y":0.86}, {"label":"1,3", "x":3.25, "y":1.46}, {"label":"1,6", "x":6.45, "y":1.46}, {"label":"6,6", "x":10.05, "y":1.46}, {"label":"6,3", "x":13.25, "y":1.46}, {"label":"1,2", "x":2.25, "y":1.56}, {"label":"1,4", "x":4.25, "y":1.56}, {"label":"6,4", "x":12.25, "y":1.56}, {"label":"6,2", "x":14.25, "y":1.56}, {"label":"1,5", "x":5.25, "y":1.66}, {"label":"6,5", "x":11.25, "y":1.66}, {"label":"1,0", "x":0.25, "y":1.76}, {"label":"1,1", "x":1.25, "y":1.76}, {"label":"6,1", "x":15.25, "y":1.76}, {"label":"6,0", "x":16.25, "y":1.76}, {"label":"2,3", "x":3.25, "y":2.36}, {"label":"4,0", "x":6.45, "y":2.36}, {"label":"9,5", "x":10.05, "y":2.36}, {"label":"7,3", "x":13.25, "y":2.36}, {"label":"2,2", "x":2.25, "y":2.46}, {"label":"2,4", "x":4.25, "y":2.46}, {"label":"7,4", "x":12.25, "y":2.46}, {"label":"7,2", "x":14.25, "y":2.46}, {"label":"2,5", "x":5.25, "y":2.56}, {"label":"7,5", "x":11.25, "y":2.56}, {"label":"2,0", "x":0.25, "y":2.66}, {"label":"2,1", "x":1.25, "y":2.66}, {"label":"7,1", "x":15.25, "y":2.66}, {"label":"7,0", "x":16.25, "y":2.66}, {"label":"3,3", "x":3.25, "y":3.26}, {"label":"3,6", "x":6.45, "y":3.26}, {"label":"8,6", "x":10.05, "y":3.26}, {"label":"8,3", "x":13.25, "y":3.26}, {"label":"3,2", "x":2.25, "y":3.36}, {"label":"3,4", "x":4.25, "y":3.36}, {"label":"8,4", "x":12.25, "y":3.36}, {"label":"8,2", "x":14.25, "y":3.36}, {"label":"3,5", "x":5.25, "y":3.46}, {"label":"8,5", "x":11.25, "y":3.46}, {"label":"3,0", "x":0.25, "y":3.56}, {"label":"3,1", "x":1.25, "y":3.56}, {"label":"8,1", "x":15.25, "y":3.56}, {"label":"8,0", "x":16.25, "y":3.56}, {"label":"4,2", "x":3.25, "y":4.26}, {"label":"9,1", "x":13.25, "y":4.26}, {"label":"4,3", "x":4.25, "y":4.36}, {"label":"9,2", "x":12.25, "y":4.36}, {"label":"4,1", "x":2.25, "y":4.36}, {"label":"9,0", "x":14.25, "y":4.36}, {"label":"4,4", "x":1, "y":9.96}, {"label":"4,5", "x":3.35, "y":8.71, "h":1.5}, {"label":"9,3", "x":0.8, "y":11.56}, {"label":"9,4", "x":-2.08, "y":11.01, "h":1.5}] + } + } +} diff --git a/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c b/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c new file mode 100644 index 000000000000..6aa6a7a8b5b7 --- /dev/null +++ b/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c @@ -0,0 +1,555 @@ +/* + * Copyright 2021 Tyler Thrailkill (@snowe/@snowe2010) + * + * 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 . + */ + +#include "ocean_dream.h" +#include "quantum.h" +#include "print.h" + +// Calculated Parameters +#define TWINKLE_PROBABILITY_MODULATOR 100 / TWINKLE_PROBABILITY // CALCULATED: Don't Touch +#define TOTAL_STARS STARS_PER_LINE *NUMBER_OF_STAR_LINES // CALCULATED: Don't Touch +#define OCEAN_ANIMATION_MODULATOR NUMBER_OF_FRAMES / OCEAN_ANIMATION_SPEED // CALCULATED: Don't Touch +#define SHOOTING_STAR_ANIMATION_MODULATOR NUMBER_OF_FRAMES / SHOOTING_STAR_ANIMATION_SPEED // CALCULATED: Don't Touch +#define STAR_ANIMATION_MODULATOR NUMBER_OF_FRAMES / STAR_ANIMATION_SPEED // CALCULATED: Don't Touch + +uint8_t animation_counter = 0; // global animation counter. +bool is_calm = false; +uint32_t starry_night_anim_timer = 0; +uint32_t starry_night_anim_sleep = 0; +static int current_wpm = 0; + +static uint8_t increment_counter(uint8_t counter, uint8_t max) { + counter++; + if (counter >= max) { + return 0; + } else { + return counter; + } +} + +#ifdef ENABLE_WAVE +static uint8_t decrement_counter(uint8_t counter, uint8_t max) { + counter--; + if (counter < 0 || counter > max) { + return max; + } else { + return counter; + } +} +#endif + +#ifdef ENABLE_MOON // region +# ifndef STATIC_MOON +uint8_t moon_animation_frame = 0; // keeps track of current moon frame +uint16_t moon_animation_counter = 0; // counts how many frames to wait before animating moon to next frame +# endif + +# ifdef STATIC_MOON +static const char PROGMEM moon[6] = { + 0x18, 0x7E, 0xFF, 0xC3, 0x81, 0x81, +}; +# endif + +# ifndef STATIC_MOON +static const char PROGMEM moon_animation[14][8] = { + // clang-format off + { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, + { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x42, 0x00, }, + { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xC3, 0x00, 0x00, }, + { 0x3C, 0x7E, 0xFF, 0xFF, 0xC3, 0x81, 0x00, 0x00, }, + { 0x3C, 0x7E, 0xFF, 0xC3, 0x81, 0x00, 0x00, 0x00, }, + { 0x3C, 0x7E, 0xC3, 0x81, 0x81, 0x00, 0x00, 0x00, }, + { 0x3C, 0x42, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, + { 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x42, 0x3C, }, + { 0x00, 0x00, 0x00, 0x81, 0x81, 0xC3, 0x7E, 0x3C, }, + { 0x00, 0x00, 0x00, 0x81, 0xC3, 0xFF, 0x7E, 0x3C, }, + { 0x00, 0x00, 0x81, 0xC3, 0xFF, 0xFF, 0x7E, 0x3C, }, + { 0x00, 0x00, 0xC3, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, + { 0x00, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, + // clang-format on +}; +# endif + +static void draw_moon(void) { +# ifdef STATIC_MOON + oled_set_cursor(MOON_COLUMN, MOON_LINE); + oled_write_raw_P(moon, 6); +# endif +# ifndef STATIC_MOON + moon_animation_counter = increment_counter(moon_animation_counter, ANIMATE_MOON_EVERY_N_FRAMES); + if (moon_animation_counter == 0) { + moon_animation_frame = increment_counter(moon_animation_frame, 14); + oled_set_cursor(MOON_COLUMN, MOON_LINE); + oled_write_raw_P(moon_animation[moon_animation_frame], 8); + } +# endif +} +#endif // endregion + +#ifdef ENABLE_WAVE // region +uint8_t starry_night_wave_frame_width_counter = 31; +uint8_t rough_waves_frame_counter = 0; + +// clang-format off +static const char PROGMEM ocean_top[8][32] = { + // still ocean + { + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + }, + // small ripples + { + 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + }, + // level 2 ripples + { + 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, + 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, + 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, + 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, + }, + // level 3 waves + { + 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, + }, + { + 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, + 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, + 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, + 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, + }, + { + 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, + 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, + 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, + 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, + }, +}; +static const char PROGMEM ocean_bottom[8][32] = { + // still ocean + { + 0x00, 0x40, 0x40, 0x41, 0x01, 0x01, 0x01, 0x21, + 0x20, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x44, + 0x44, 0x40, 0x40, 0x00, 0x00, 0x08, 0x08, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x40, 0x40, 0x00, 0x00, + }, + // small ripples + { + 0x00, 0x00, 0x40, 0x40, 0x01, 0x01, 0x01, 0x20, + 0x20, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, + 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, + }, + // level 2 ripples + { + 0x00, 0x00, 0x40, 0x40, 0x01, 0x01, 0x01, 0x20, + 0x20, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, + 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, + }, + // level 3 waves + { + 0x00, 0x40, 0x40, 0x42, 0x42, 0x03, 0x11, 0x11, + 0x20, 0x20, 0x00, 0x00, 0x08, 0x0C, 0x0C, 0x04, + 0x05, 0x41, 0x41, 0x21, 0x20, 0x00, 0x00, 0x08, + 0x0A, 0x0A, 0x0B, 0x41, 0x41, 0x41, 0x41, 0x00, + }, + { + 0x10, 0x10, 0x00, 0x80, 0x84, 0xC4, 0x02, 0x06, + 0x84, 0x44, 0xC0, 0x80, 0x80, 0x20, 0x20, 0x10, + 0x08, 0x12, 0x91, 0x81, 0x42, 0x40, 0x00, 0x00, + 0x10, 0x12, 0x22, 0x22, 0x24, 0x04, 0x84, 0x80, + }, + { + 0x08, 0x80, 0x80, 0x82, 0x82, 0x03, 0x21, 0x21, + 0x10, 0x10, 0x00, 0x00, 0x04, 0x04, 0x0C, 0x08, + 0x09, 0x41, 0x42, 0x22, 0x20, 0x00, 0x00, 0x08, + 0x0A, 0x0A, 0x0B, 0x41, 0x43, 0x42, 0x42, 0x00, + }, +}; +// clang-format on + +static void animate_waves(void) { + starry_night_wave_frame_width_counter = decrement_counter(starry_night_wave_frame_width_counter, WIDTH - 1); // only 3 frames for last wave type + rough_waves_frame_counter = increment_counter(rough_waves_frame_counter, 3); // only 3 frames for last wave type + + void draw_ocean(uint8_t frame, uint16_t offset, uint8_t byte_index) { + oled_write_raw_byte(pgm_read_byte(ocean_top[frame] + byte_index), offset); + oled_write_raw_byte(pgm_read_byte(ocean_bottom[frame] + byte_index), offset + WIDTH); + } + + for (int i = 0; i < WIDTH; ++i) { + uint16_t offset = OCEAN_LINE * WIDTH + i; + uint8_t byte_index = starry_night_wave_frame_width_counter + i; + if (byte_index >= WIDTH) { + byte_index = byte_index - WIDTH; + } + if (is_calm || current_wpm <= WAVE_CALM) { + draw_ocean(0, offset, byte_index); + } else if (current_wpm <= WAVE_HEAVY_STORM) { + draw_ocean(1, offset, byte_index); + } else if (current_wpm <= WAVE_HURRICANE) { + draw_ocean(2, offset, byte_index); + } else { + draw_ocean(3 + rough_waves_frame_counter, offset, byte_index); + } + } +} +#endif // endregion + +#ifdef ENABLE_ISLAND // region +uint8_t island_frame_1 = 0; + +// clang-format off +// only use 46 bytes (first 18 are blank, so we don't write them, makes it smaller and we can see the shooting stars properly!) + +// To save space and allow the shooting stars to be seen, only draw the tree on every frame. +// Tree is only 14bytes wide so we save 108 bytes on just the first row. Second row, the +// first 18 bytes is always the same piece of land, so only store that once, which saves 90 bytes +static const char PROGMEM islandRightTop[6][14] = { + {0x84, 0xEC, 0x6C, 0x3C, 0xF8, 0xFE, 0x3F, 0x6B, 0xDB, 0xB9, 0x30, 0x40, 0x00, 0x00,}, + {0x80, 0xC3, 0xEE, 0x7C, 0xB8, 0xFC, 0xFE, 0x6F, 0xDB, 0x9B, 0xB2, 0x30, 0x00, 0x00,}, + {0x00, 0xC0, 0xEE, 0x7F, 0x3D, 0xF8, 0xFC, 0x7E, 0x57, 0xDB, 0xDB, 0x8A, 0x00, 0x00,}, + {0x00, 0xC0, 0xE6, 0x7F, 0x3B, 0xF9, 0xFC, 0xFC, 0xB6, 0xB3, 0x33, 0x61, 0x00, 0x00,}, + {0x00, 0x00, 0x00, 0x00, 0x80, 0xEE, 0xFF, 0xFB, 0xF9, 0xFC, 0xDE, 0xB6, 0xB6, 0x24,}, + {0x00, 0x00, 0x00, 0x00, 0xC0, 0xEE, 0xFE, 0xFF, 0xFB, 0xFD, 0xEE, 0xB6, 0xB6, 0x92,}, +}; +static const char PROGMEM islandRightBottom[6][14] = { + {0x41, 0x40, 0x60, 0x3E, 0x3F, 0x23, 0x20, 0x60, 0x41, 0x43, 0x40, 0x40, 0x40, 0x80,}, + {0x40, 0x41, 0x60, 0x3E, 0x3F, 0x23, 0x20, 0x60, 0x40, 0x40, 0x41, 0x41, 0x40, 0x80,}, + {0x40, 0x40, 0x61, 0x3D, 0x3F, 0x27, 0x21, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80,}, + {0x40, 0x43, 0x61, 0x3C, 0x3F, 0x27, 0x21, 0x60, 0x41, 0x43, 0x43, 0x42, 0x40, 0x80,}, + {0x40, 0x40, 0x60, 0x3C, 0x3F, 0x27, 0x23, 0x63, 0x44, 0x40, 0x41, 0x41, 0x41, 0x81,}, + {0x40, 0x40, 0x60, 0x3C, 0x3F, 0x27, 0x23, 0x63, 0x42, 0x42, 0x41, 0x41, 0x41, 0x80,}, +}; +static const char PROGMEM islandLeft[18] = { + 0x80, 0x40, 0x40, 0x40, 0x40, 0x60, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x60, 0x40, 0x40, +}; +// clang-format on + +static void animate_island(void) { + if (animation_counter == 0) { + island_frame_1 = increment_counter(island_frame_1, 2); + } + + void draw_island_parts(uint8_t frame) { + oled_set_cursor(ISLAND_COLUMN + 3, ISLAND_LINE); + oled_write_raw_P(islandRightTop[frame], 14); + oled_set_cursor(ISLAND_COLUMN + 0, ISLAND_LINE + 1); + oled_write_raw_P(islandLeft, 18); + oled_set_cursor(ISLAND_COLUMN + 3, ISLAND_LINE + 1); + oled_write_raw_P(islandRightBottom[frame], 14); + } + + if (is_calm || current_wpm < ISLAND_CALM) { + draw_island_parts(0); + } else if (current_wpm >= ISLAND_CALM && current_wpm < ISLAND_HEAVY_STORM) { + draw_island_parts(island_frame_1 + 1); + } else if (current_wpm >= ISLAND_HEAVY_STORM && current_wpm < ISLAND_HURRICANE) { + draw_island_parts(island_frame_1 + 2); + } else { + draw_island_parts(island_frame_1 + 4); + } +} +#endif // endregion + +#ifdef ENABLE_STARS // region +bool stars_setup = false; // only setup stars once, then we just twinkle them +struct Coordinate { + int x; + int y; + bool exists; +}; + +struct Coordinate stars[TOTAL_STARS]; // tracks all stars/coordinates + +/** + * Setup all the initial stars on the screen + * This function divides the screen into regions based on STARS_PER_LINE and NUMBER_OF_STAR_LINES + * where each line is made up of 8x8 pixel groups, that are populated by a single star. + * + * Not sure how this function will work with larger or smaller screens. + * It should be fine, as long as the screen width is a multiple of 8 + */ +static void setup_stars(void) { + // For every line, split the line into STARS_PER_LINE, find a random point in that region, and turn the pixel on + // 36% probability it will not be added + // (said another way, 80% chance it will start out lit in the x direction, then 80% chance it will start out lit in the y direction = 64% probability it will start out lit at all) + for (int line = 0; line < NUMBER_OF_STAR_LINES; ++line) { + for (int column_group = 0; column_group < STARS_PER_LINE; ++column_group) { + uint8_t rand_column = rand() % 10; + uint8_t rand_row = rand() % 10; + if (rand_column < 8 && rand_row < 8) { + int column_adder = column_group * 8; + int line_adder = line * 8; + int x = rand_column + column_adder; + int y = rand_row + line_adder; + oled_write_pixel(x, y, true); + stars[column_group + (line * STARS_PER_LINE)].x = x; + stars[column_group + (line * STARS_PER_LINE)].y = y; + stars[column_group + (line * STARS_PER_LINE)].exists = true; + } else { + stars[column_group + (line * STARS_PER_LINE)].exists = false; + } + } + } + stars_setup = true; +} + +/** + * Twinkle the stars (move them one pixel in any direction) with a probability of 50% to twinkle any given star + */ +static void twinkle_stars(void) { + for (int line = 0; line < NUMBER_OF_STAR_LINES; ++line) { + for (int column_group = 0; column_group < STARS_PER_LINE; ++column_group) { + struct Coordinate star = stars[column_group + (line * STARS_PER_LINE)]; + + // skip stars that were never added + if (!star.exists) { + continue; + } + if (rand() % TWINKLE_PROBABILITY_MODULATOR == 0) { + oled_write_pixel(star.x, star.y, false); // black out pixel + + // don't allow stars to leave their own region + if (star.x == (column_group * 8)) { // star is the farthest left it can go in its region + star.x++; // move it right immediately + } else if (star.x == (((column_group + 1) * 8) - 1)) { // star is farthest right it can go in its region + star.x--; // move it left immediately + } + if (star.y == (line * 8)) { // star is the farthest up it can go in its region + star.y++; // move it down immediately + } else if (star.y == (((line + 1) * 8) - 1)) { // star is farthest down it can go in its region + star.y--; // move it up immediately + } + + // now decide direction + int new_x; + int x_choice = rand() % 3; + if (x_choice == 0) { + new_x = star.x - 1; + } else if (x_choice == 1) { + new_x = star.x + 1; + } else { + new_x = star.x; + } + + int new_y; + int y_choice = rand() % 3; + if (y_choice == 0) { + new_y = star.y - 1; + } else if (y_choice == 1) { + new_y = star.y + 1; + } else { + new_y = star.y; + } + + star.x = new_x; + star.y = new_y; + oled_write_pixel(new_x, new_y, true); + } + + stars[column_group + (line * STARS_PER_LINE)] = star; + } + } +} + +/** + * Setup the stars and then animate them on subsequent frames + */ +static void animate_stars(void) { + if (!stars_setup) { + setup_stars(); + } else { + twinkle_stars(); + } +} +#endif // endregion + +#ifdef ENABLE_SHOOTING_STARS // region +bool shooting_stars_setup = false; // only setup shooting stars array once with defaults + +struct ShootingStar { + int x_1; + int y_1; + int x_2; + int y_2; + bool running; + int frame; + int delay; +}; + +struct ShootingStar shooting_stars[MAX_NUMBER_OF_SHOOTING_STARS]; // tracks all the shooting stars + +static void setup_shooting_star(struct ShootingStar *shooting_star) { + int column_to_start = rand() % (WIDTH / 2); + int row_to_start = rand() % (HEIGHT - 48); // shooting_stars travel diagonally 1 down, 1 across. So the lowest a shooting_star can start and not 'hit' the ocean is 32 above the ocean. + + shooting_star->x_1 = column_to_start; + shooting_star->y_1 = row_to_start; + shooting_star->x_2 = column_to_start + 1; + shooting_star->y_2 = row_to_start + 1; + shooting_star->running = true; + shooting_star->frame++; + shooting_star->delay = rand() % SHOOTING_STAR_DELAY; +} + +static void move_shooting_star(struct ShootingStar *shooting_star) { + oled_write_pixel(shooting_star->x_1, shooting_star->y_1, false); + oled_write_pixel(shooting_star->x_2, shooting_star->y_2, false); + + shooting_star->x_1++; + shooting_star->y_1++; + shooting_star->x_2++; + shooting_star->y_2++; + shooting_star->frame++; + + oled_write_pixel(shooting_star->x_1, shooting_star->y_1, true); + oled_write_pixel(shooting_star->x_2, shooting_star->y_2, true); +} + +static void finish_shooting_star(struct ShootingStar *shooting_star) { + oled_write_pixel(shooting_star->x_1, shooting_star->y_1, false); + oled_write_pixel(shooting_star->x_2, shooting_star->y_2, false); + shooting_star->running = false; + shooting_star->frame = 0; +} + +static void animate_shooting_star(struct ShootingStar *shooting_star) { + if (shooting_star->frame > SHOOTING_STAR_FRAMES) { + finish_shooting_star(shooting_star); + return; + } else if (!shooting_star->running) { + setup_shooting_star(shooting_star); + } else { + if (shooting_star->delay == 0) { + move_shooting_star(shooting_star); + } else { + shooting_star->delay--; + } + } +} + +static void animate_shooting_stars(void) { + if (is_calm) { + return; + } + if (!shooting_stars_setup) { + for (int i = 0; i < MAX_NUMBER_OF_SHOOTING_STARS; ++i) { + shooting_stars[i].running = false; + } + shooting_stars_setup = true; + } + /** + * Fixes issue with stars that were falling _while_ the + * wpm dropped below the condition for them to keep falling + */ + void end_extra_stars(uint8_t starting_index) { + for (int shooting_star_index = starting_index; shooting_star_index < MAX_NUMBER_OF_SHOOTING_STARS; ++shooting_star_index) { + struct ShootingStar shooting_star = shooting_stars[shooting_star_index]; + if (shooting_star.running) { + finish_shooting_star(&shooting_star); + shooting_stars[shooting_star_index] = shooting_star; + } + } + } + + int number_of_shooting_stars = current_wpm / SHOOTING_STAR_WPM_INCREMENT; + number_of_shooting_stars = (number_of_shooting_stars > MAX_NUMBER_OF_SHOOTING_STARS) ? MAX_NUMBER_OF_SHOOTING_STARS : number_of_shooting_stars; + + if (number_of_shooting_stars == 0) { + // make sure all shooting_stars are ended + end_extra_stars(0); + } else { + for (int shooting_star_index = 0; shooting_star_index < number_of_shooting_stars; ++shooting_star_index) { + struct ShootingStar shooting_star = shooting_stars[shooting_star_index]; + animate_shooting_star(&shooting_star); + shooting_stars[shooting_star_index] = shooting_star; + } + end_extra_stars(number_of_shooting_stars); + } +} +#endif // endregion + +/** + * Main rendering function + * + * Calls all different animations at different rates + */ +void render_stars(void) { + // // animation timer + if (timer_elapsed32(starry_night_anim_timer) > STARRY_NIGHT_ANIM_FRAME_DURATION) { + starry_night_anim_timer = timer_read32(); + current_wpm = get_current_wpm(); + +#ifdef ENABLE_ISLAND + animate_island(); +#endif + +#ifdef ENABLE_SHOOTING_STARS + if (animation_counter % SHOOTING_STAR_ANIMATION_MODULATOR == 0) { + animate_shooting_stars(); + } +#endif + +#ifdef ENABLE_STARS + // TODO offsetting the star animation from the wave animation would look better, + // but if I do that, then the stars appear in the water because + // the ocean animation has to wait a bunch of frames to overwrite it. + // Possible solutions: + // 1. Only draw stars to the top of the island/ocean. + // 2. Draw ocean every frame, only move ocean on frames matching modulus + // Problems: + // 1. What if someone wants to move the island up a bit, or they want to have the stars reflect in the water? + // 2. More cpu intensive. And I'm already running out of cpu as it is... + if (animation_counter % STAR_ANIMATION_MODULATOR == 0) { + animate_stars(); + } +#endif + +#ifdef ENABLE_WAVE + if (animation_counter % OCEAN_ANIMATION_MODULATOR == 0) { + animate_waves(); + } +#endif + +#ifdef ENABLE_MOON + draw_moon(); +#endif + + animation_counter = increment_counter(animation_counter, NUMBER_OF_FRAMES); + } + + // this fixes the screen on and off bug + if (current_wpm > 0) { + oled_on(); + starry_night_anim_sleep = timer_read32(); + } else if (timer_elapsed32(starry_night_anim_sleep) > OLED_TIMEOUT) { + oled_off(); + } +} \ No newline at end of file diff --git a/keyboards/solartempest/sofle/keymaps/via/rules.mk b/keyboards/solartempest/sofle/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/solartempest/sofle/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/solartempest/sofle/sofle.c b/keyboards/solartempest/sofle/sofle.c new file mode 100644 index 000000000000..b51a7e8a0460 --- /dev/null +++ b/keyboards/solartempest/sofle/sofle.c @@ -0,0 +1,19 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . +*/ + +#include "sofle.h" diff --git a/keyboards/solartempest/sofle/sofle.h b/keyboards/solartempest/sofle/sofle.h new file mode 100644 index 000000000000..6e9b06cef09f --- /dev/null +++ b/keyboards/solartempest/sofle/sofle.h @@ -0,0 +1,42 @@ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ + +#pragma once + +#include "quantum.h" + +// Extra keys are added for rotary encoder support in VIA +#define LAYOUT( \ + LA1, LA2, LA3, LA4, LA5, LA6, RA6, RA5, RA4, RA3, RA2, RA1, \ + LB1, LB2, LB3, LB4, LB5, LB6, LB7, RB7, RB6, RB5, RB4, RB3, RB2, RB1, \ + LC1, LC2, LC3, LC4, LC5, LC6, LE1, RE6, RC6, RC5, RC4, RC3, RC2, RC1, \ + LD1, LD2, LD3, LD4, LD5, LD6, LD7, RD7, RD6, RD5, RD4, RD3, RD2, RD1, \ + LE2, LE3, LE4, LE5, LE6, RE5, RE4, RE3, RE2, RE1 \ + ) \ + { \ + { LA1, LA2, LA3, LA4, LA5, LA6, KC_NO }, \ + { LB1, LB2, LB3, LB4, LB5, LB6, LB7 }, \ + { LC1, LC2, LC3, LC4, LC5, LC6, KC_NO }, \ + { LD1, LD2, LD3, LD4, LD5, LD6, LD7 }, \ + { LE1, LE2, LE3, LE4, LE5, LE6, KC_NO }, \ + { RA1, RA2, RA3, RA4, RA5, RA6, KC_NO }, \ + { RB1, RB2, RB3, RB4, RB5, RB6, RB7 }, \ + { RC1, RC2, RC3, RC4, RC5, RC6, KC_NO }, \ + { RD1, RD2, RD3, RD4, RD5, RD6, RD7 }, \ + { RE1, RE2, RE3, RE4, RE5, RE6, KC_NO } \ + } From 45c8e9c1e86bd1a7913cffe54163bad42741ab48 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 7 Nov 2021 01:54:36 -0400 Subject: [PATCH 057/155] Update for stretch timer --- keyboards/solartempest/9e/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/solartempest/9e/readme.md b/keyboards/solartempest/9e/readme.md index 30353b2d00a1..6fd810b711d2 100644 --- a/keyboards/solartempest/9e/readme.md +++ b/keyboards/solartempest/9e/readme.md @@ -21,6 +21,7 @@ For detailed instructions on using VIA and flashing, please refer to the section - Allows for remapping of per-layer rotary encoder functions in VIA. - Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders. - Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders. +- Stretch timer (reminder to stop sitting) animates LEDS after 30 minute interval. LED indicator is red and timer is toggled. ## Flashing From e08817bc2fab93d67976fc5ced707737adae8dee Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 7 Nov 2021 14:04:09 -0500 Subject: [PATCH 058/155] Correct encoder index for animation --- keyboards/solartempest/9e/keymaps/via/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/solartempest/9e/keymaps/via/keymap.c b/keyboards/solartempest/9e/keymaps/via/keymap.c index 7d9699ec99bb..fbf943a926a7 100644 --- a/keyboards/solartempest/9e/keymaps/via/keymap.c +++ b/keyboards/solartempest/9e/keymaps/via/keymap.c @@ -223,7 +223,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { is_encoder6_rotate = true; encoder_timer = timer_read(); } - else if(index==7){ + else if(index==6){ is_encoder7_rotate = true; encoder_timer = timer_read(); } From a97aebc9ac31adb69983229a9090ee731ffe9e68 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 7 Nov 2021 14:04:44 -0500 Subject: [PATCH 059/155] Correct encoder index for animation. Add firmware file. --- .../solartempest/9e/solartempest_9e_via.hex | 1385 +++++++++-------- 1 file changed, 693 insertions(+), 692 deletions(-) diff --git a/keyboards/solartempest/9e/solartempest_9e_via.hex b/keyboards/solartempest/9e/solartempest_9e_via.hex index 4c69b6ed20e3..2efaf70534e8 100644 --- a/keyboards/solartempest/9e/solartempest_9e_via.hex +++ b/keyboards/solartempest/9e/solartempest_9e_via.hex @@ -1,9 +1,9 @@ :100000000C94A3040C94EA040C94EA040C94EA04FF :100010000C94EA040C94EA040C94EA040C94EA04A8 -:100020000C94EA040C94EA040C9438250C94F424FF -:100030000C9433260C94EA040C94EA040C94EA041D +:100020000C94EA040C94EA040C9443250C94FF24E9 +:100030000C943E260C94EA040C94EA040C94EA0412 :100040000C94EA040C94EA040C94EA040C94EA0478 -:100050000C94EA040C940F260C94EA040C94EA0421 +:100050000C94EA040C941A260C94EA040C94EA0416 :100060000C94EA040C94EA040C94EA040C94EA0458 :100070000C94EA040C94EA040C94EA040C94EA0448 :100080000C94EA040C94EA040C94EA040C94EA0438 @@ -153,9 +153,9 @@ :10098000940314BE84B7877F84BF0FB6F894A895EC :1009900080916000886180936000109260000FBEBB :1009A000E0E0F8E7099523E0A2EEB1E001C01D9276 -:1009B000A139B207E1F711E0A0E0B1E0EAEEFCE511 -:1009C00002C005900D92A23EB107D9F70E945A26A7 -:1009D0000C943C2E0C940000E8EDF0E080818C7FBC +:1009B000A139B207E1F711E0A0E0B1E0E0E0FDE528 +:1009C00002C005900D92A23EB107D9F70E9465269C +:1009D0000C94472E0C940000E8EDF0E080818C7FB1 :1009E00080831092E2001092DA001092E100A0EEF3 :1009F000B0E08C9181608C9380818F77808319BC6B :100A0000A7EDB0E08C918E7F8C9380818F7E808368 @@ -225,7 +225,7 @@ :100E00004983E8835A83DF91CF911F910F91FF901F :100E1000EF90DF90BF90AF900895202F30E0449185 :100E2000D42EE42EF12C56E0159FC0011124EFEFD3 -:100E3000F0E0BF010E943D2D812F90E0880F991FA7 +:100E3000F0E0BF010E94482D812F90E0880F991F9C :100E400055E5569FD001579FB00D11248A1B9B0B6F :100E5000982F990F890F5F01A21AB30AAE9CD00197 :100E6000AF9CB00DBE9CB00D11245B2F089F80017C @@ -260,12 +260,12 @@ :10103000F7CF8F3F09F0A1CF8091B0028B7FF0CF27 :1010400008958091B00280FD16C081FD16C082FD1A :1010500016C08091AE028823A1F0883280F428E087 -:10106000829FC001112468E270E00E94512D862FFA +:10106000829FC001112468E270E00E945C2D862FEF :10107000672B39F0089582E0089584E0089588E0B0 :10108000089581E008958091B00280FD14C081FD33 :1010900014C082FD16C08091AF02882381F0843194 :1010A00080F422E3829FC001112464E170E00E9479 -:1010B000512D862F08958CE0089589E1089585E0EB +:1010B0005C2D862F08958CE0089589E1089585E0E0 :1010C000089582E30895803F31F40E94430881959A :1010D0008093B8020895813F19F40E944308F8CF25 :1010E000823F31F40E94430881958093B7020895AE @@ -452,30 +452,30 @@ :101C3000EAF7DF91CF911F910F910C94CC0BC770F5 :101C400081E001C0880FCA95EAF7F3CFDF91CF9109 :101C50001F910F910895CF93DF93C7EED3E060E01B -:101C6000CE010E94C42D2196C11588E0D807B9F78E +:101C6000CE010E94CF2D2196C11588E0D807B9F783 :101C7000DF91CF9108956F927F928F929F92AF9252 :101C8000BF92CF92DF92EF92FF920F931F93CF9369 :101C9000DF9386EFC82E84E0D82E9FE9E92EF12C41 :101CA000E701C056D10936011BC0F501859094901B -:101CB000692DC8010E94C42D682DC80101960E949B -:101CC000C42D82E0A80EB11C0E5F1F4FC017D107B4 +:101CB000692DC8010E94CF2D682DC80101960E9490 +:101CC000CF2D82E0A80EB11C0E5F1F4FC017D107A9 :101CD00061F788E1680E711C6896CE15DF0529F062 :101CE0008E01085111095301E0CF7E0180E6E80E14 :101CF000F11C80E6C80ED11C8FE5E81684E0F806DA :101D000079F6DF91CF911F910F91FF90EF90DF90C7 :101D1000CF90BF90AF909F908F907F906F900895DD :101D2000CF93C82F6FEF811161E283E290E00E94B0 -:101D3000C42D6FEFC11161E184E290E00E94C42DD7 -:101D40006FEFC11166E085E290E0CF910C94C42D55 -:101D500080E00E94900E60E086E290E00E94C42D38 +:101D3000CF2D6FEFC11161E184E290E00E94CF2DC1 +:101D40006FEFC11167E085E290E0CF910C94CF2D49 +:101D500080E00E94900E60E086E290E00E94CF2D2D :101D60000E943B0E0E942B0E81E00C94900ECF93AC :101D7000C091D602C2FB992790F9981781F080FB99 :101D8000C2F9C093D6026091D50284E090E00E942F -:101D9000C42D6C2F82E290E0CF910C94C42DCF9192 +:101D9000CF2D6C2F82E290E0CF910C94CF2DCF917C :101DA00008950F931F93CF93DF93C42FD0E0CC0FF0 :101DB000DD1F28E1629FC00DD11D112430E6839FF5 -:101DC000C00DD11D1124CE0187960E94B02D082F81 -:101DD00010E0102F0027CE0188960E94B02D9801A8 +:101DC000C00DD11D1124CE0187960E94BB2D082F76 +:101DD00010E0102F0027CE0188960E94BB2D98019D :101DE000282BC901DF91CF911F910F910895462FA4 :101DF0008A3038F4743028F46C3018F4672F0C945F :101E0000D10E90E080E00895BF92CF92DF92EF92E2 @@ -489,16 +489,16 @@ :101E8000CF93DF93EC010E94040FBE010E94F70E76 :101E9000DF91CF910C941909FC01808191810E94FE :101EA000400F292F2F7092959F7092509E3078F49A -:101EB000E92FF0E0E25CF14D0C94652D803F19F0C4 +:101EB000E92FF0E0E75BF14D0C94702D803F19F0B5 :101EC00020F4883E20F481E00895843FE1F380E02F :101ED0000895883EC0F3813FD1F7F5CF822F8695D4 -:101EE00086958695089583E290E00E94B02D813218 -:101EF00089F484E290E00E94B02D813159F485E2AA -:101F000090E00E94B02D91E0863009F090E0892F9A +:101EE00086958695089583E290E00E94BB2D81320D +:101EF00089F484E290E00E94BB2D813159F485E29F +:101F000090E00E94BB2D91E0873009F090E0892F8E :101F10008170089580E0FCCFCF9384E090E00E9430 -:101F2000B02DC82F82E290E00E94B02D982F8C2F08 +:101F2000BB2DC82F82E290E00E94BB2D982F8C2FF2 :101F3000CF91089560918903669570E04BE050E081 -:101F40008AE091E00E94962D892B19F481E080931C +:101F40008AE091E00E94A12D892B19F481E0809311 :101F5000C5020E9488069093BF028093BE02089536 :101F60004F925F926F927F928F929F92AF92BF92A9 :101F7000CF92DF92EF92FF920F931F93CF93DF9355 @@ -522,7 +522,7 @@ :1020900053E0452E8091C60293010C2C01C0220F03 :1020A0000A94EAF7822309F43CC0F601EE0FFF1F01 :1020B000E80DF91DE590F490E114F10409F477CFEF -:1020C00045E050E0B701CE0101960E948D2D0981B7 +:1020C00045E050E0B701CE0101960E94982D0981AC :1020D0000F3F39F18A81800F9927991F8B32910523 :1020E00014F08AE290E05C01AA0CBB1C8A0D9B1DD7 :1020F000DC01A55FBC4F5D01049D80011124055FDB @@ -546,11 +546,11 @@ :10221000CECF4423B9F340E0F7CF8F929F92AF9295 :10222000BF92CF92DF92EF92FF920F931F93CF93C3 :10223000DF93EC014C81042F10E09801D8010E943B -:102240002D2E9B01AC010E94F82D4B015C01E0E2B8 +:10224000382E9B01AC010E94032E4B015C01E0E2A1 :10225000F0E0E01BF10BA5E5B0E0AC019B010E94B2 -:10226000F82D6B017C019F01DF010E94722D9B0103 -:10227000AC010E94032E9B01AC01280D391D4A1DA3 -:102280005B1DC701B6010E940B2EF22E822F90E03B +:10226000032E6B017C019F01DF010E947D2D9B01EC +:10227000AC010E940E2E9B01AC01280D391D4A1D98 +:102280005B1DC701B6010E94162EF22E822F90E030 :1022900039E23F1560F143E0249F90011124359508 :1022A0002795122F109500E085E5E82EEF18809114 :1022B0001C01081758F10E94B00F9C8181E09923FE @@ -570,7 +570,7 @@ :102390004150550B841795071CF02195209315018A :1023A000DF91CF911F910F910895118210821282B7 :1023B0008F5F3396D0CF0C2F10E070E0C8010E94E1 -:1023C000512D20911A01820F482F50E02091C80210 +:1023C0005C2D20911A01820F482F50E02091C80205 :1023D000022E000C330B02171307BCF020911601DC :1023E000022E000C330B201731077CF08D9F9001DB :1023F0001124255F3C4F40918C0360918B038091A9 @@ -582,17 +582,17 @@ :1024500081508093C702DF91CF911F910895E09141 :102460001A014C2F50E09A012E0F311DF901EE0F89 :10247000FF1FE20FF31FE55FFC4F118210821282F3 -:102480008091C7028B32ACF0612F0E942F2D892FD3 +:102480008091C7028B32ACF0612F0E943A2D892FC8 :10249000082E000C990B4817590749F49F014091E9 :1024A0008C0360918B0380918A030E94E806CF5FC2 :1024B000C1CF87FFEDCF890FEBCF90E00196609100 -:1024C0001C0170E00E94512DC4CFEF92FF921F9328 +:1024C0001C0170E00E945C2DC4CFEF92FF921F931D :1024D000CF93DF93EC0110E0EE24EA94F12C6091AD :1024E0001C01161770F00E94B00F9A818C8190FF2A :1024F00027C08F5F8C83DF91CF911F91FF90EF906A :10250000089520911A01422F410F5527551FCA01E6 :102510009A01220F331F280F391F255F3C4F70E0AF -:10252000C7010E94512D962F8C8140918C036091A0 +:10252000C7010E945C2D962F8C8140918C03609195 :102530008B03199F800D11240E94E8061F5FCFCFE7 :102540008150D8CF9091890390FF14C090911A01C7 :1025500020911B0133E0939FF0011124E55FFC4FB4 @@ -604,7 +604,7 @@ :1025B00040E0662361F040E0623011F44091C902CE :1025C00080E060E004C06091C90240E080E00E94C9 :1025D000A212F801848190E0019663E070E00E940D -:1025E000512D84830F900F900F90DF91CF911F9109 +:1025E0005C2D84830F900F900F90DF91CF911F91FE :1025F0000F910895CF93DF9300D00F92CDB7DEB740 :102600009091890390FF0AC09E012F5F3F4F0E9467 :10261000E8064B8169818A810E94A2120F900F9077 @@ -615,7 +615,7 @@ :102660000E94FA128C818F5F8C83DF91CF91089545 :10267000CF92DF92EF92FF926B017C010E94D20613 :10268000B701A60188E090E0FF90EF90DF90CF9037 -:102690000C94D62DAF92BF92CF92DF92EF92FF9221 +:102690000C94E12DAF92BF92CF92DF92EF92FF9216 :1026A0000F931F93CF93DF9300D00F92CDB7DEB778 :1026B000182FF62E042FE22E9091890390FF29C047 :1026C000E92FE695AE2FB0E0A255BE4F8C918093D6 @@ -630,7 +630,7 @@ :10275000D82EE695F0E0E853FC4FA590B490C12C3C :10276000BB2460911C01C61618F00E94B00FBFCFA9 :102770002C2D30E0A29EC001A39E900DB29E900D24 -:10278000112470E00E943D2D812FD11013C0860FBF +:10278000112470E00E94482D812FD11013C0860FB4 :1027900040911A01420F532F511D9A01220F331FEE :1027A000240F351F255F3C4F402F6F2D0E94E806F8 :1027B000C394D7CF861BECCFE9E8F3E0438128E050 @@ -649,7 +649,7 @@ :102880009091890390FF36C09170811129C09260A8 :1028900090938903662351F06091890370918A03B4 :1028A00080918B0390918C030E943813609189036F -:1028B000669570E04BE050E08AE091E00E94962D32 +:1028B000669570E04BE050E08AE091E00E94A12D27 :1028C000892BA9F01092C50281E08093C10220E01B :1028D00040918C0360918B0380918A030C944A137E :1028E000853210F09864D4CF880F982BD1CF0E94F6 @@ -696,20 +696,20 @@ :102B700020F0961710F40C94A81561E00C94401402 :102B8000E9E8F3E083E0808311828FEF828384EBB6 :102B90008383148260817181828193810C943813C4 -:102BA00069EE7EEF90E080E00E94E22D60E082E03E -:102BB00090E00E94C42D60E083E090E00E94C42D6C +:102BA00069EE7EEF90E080E00E94ED2D60E082E033 +:102BB00090E00E94CF2D60E083E090E00E94CF2D56 :102BC00010925B0210925A0260E084E090E00E9452 -:102BD000C42D60E082E290E00E94C42D60E085E0B8 -:102BE00090E00E94C42D60E086E090E00E94C42D39 -:102BF0006FEF87E090E00E94C42D40E050E0BA0102 -:102C000088E090E00E94D62D60E08DE090E00E9488 -:102C1000C42D40E050E0BA0188E190E00E94D62D3A -:102C200060E087E190E00E94C42D40E050E0BA01EE -:102C30008CE190E00E94D62D70E060E080E290E0B0 -:102C40000E94E22D40E050E0BA0188E190E00E944D -:102C5000D62D80E00E94900E0E94A80E40E050E029 -:102C6000BA018FE090E00E94D62D40E050E0BA011A -:102C700083E190E00C94D62D90E080E00E94BE2D80 +:102BD000CF2D60E082E290E00E94CF2D60E085E0A2 +:102BE00090E00E94CF2D60E086E090E00E94CF2D23 +:102BF0006FEF87E090E00E94CF2D40E050E0BA01F7 +:102C000088E090E00E94E12D60E08DE090E00E947D +:102C1000CF2D40E050E0BA0188E190E00E94E12D24 +:102C200060E087E190E00E94CF2D40E050E0BA01E3 +:102C30008CE190E00E94E12D70E060E080E290E0A5 +:102C40000E94ED2D40E050E0BA0188E190E00E9442 +:102C5000E12D80E00E94900E0E94A80E40E050E01E +:102C6000BA018FE090E00E94E12D40E050E0BA010F +:102C700083E190E00C94E12D90E080E00E94C92D6A :102C8000893E9E4F11F40C94730F80E008951092CA :102C9000580280911D01E6EEF1E0882359F0809101 :102CA000D50287FF07C08EE1DF011D928A95E9F703 @@ -719,7 +719,7 @@ :102CE0009B07B9F780910203833009F471C0B8F4EF :102CF000813009F448C0823009F4B2C08091E80004 :102D000083FF3AC180910103909102039A3008F049 -:102D100033C1E92FF0E0E45BF14D0C94652D8A306E +:102D100033C1E92FF0E0E95AF14D0C94702D8A305F :102D200009F48DC08B3009F470C0893039F7809177 :102D30000103813219F780910503909106030097F2 :102D400011F00297D9F68091E800877F8093E80020 @@ -806,25 +806,25 @@ :103250008F929F92AF92BF92CF92DF92EF92FF92A6 :103260000F931F93CF93DF9300D000D00F92CDB771 :10327000DEB78C01FC0183819481892B31F0808140 -:10328000918189238F3F09F052C60F900F900F90C4 +:10328000918189238F3F09F05DC60F900F900F90B9 :103290000F900F90DF91CF911F910F91FF90EF90C2 :1032A000DF90CF90BF90AF909F908F907F906F9066 :1032B0005F904F903F9008950E94040FF82E682F62 :1032C00089819A810E947D0B69817A818F2D0E946C -:1032D000F70E7C01F8018281882309F41AC6970150 -:1032E00022513F452031310508F0D2C58FEF97E0DC -:1032F0000E94B02DFEEEEF0E57EE852E53E0952E78 +:1032D000F70E7C01F8018281882309F425C6970145 +:1032E00022513F452031310508F0DDC58FEF97E0D1 +:1032F0000E94BB2DFEEEEF0E57EE852E53E0952E6D :10330000882381F180915502877009F4BECFF801BE :103310008281882309F4B9CF82E00F900F900F903B :103320000F900F90DF91CF911F910F91FF90EF9031 :10333000DF90CF90BF90AF909F908F907F906F90D5 :103340005F904F903F900C947415811428E0920682 -:10335000C9F2C4010E94B02D811101C0EA943FEF6F +:10335000C9F2C4010E94BB2D811101C0EA943FEF64 :10336000831A930AE110F1CF1C821B8244244394F8 :103370004AE0342E74014FEFE41AF40AC4010E94AB -:10338000B02D89831A82882309F4BCCF9FEF980F50 +:10338000BB2D89831A82882309F4BCCF9FEF980F45 :10339000933000F58A83498252E0850E911CC70163 -:1033A0000E94B02D8B83882309F4ACCFCE01019607 +:1033A0000E94BB2D8B83882309F4ACCFCE010196FC :1033B0007C01F70120812223E9F2213009F049C084 :1033C00091818281913041F4F2E0EF0EF11C0E9474 :1033D000AA0D09C04701EACF923049F422E0E20E7B @@ -848,7 +848,7 @@ :1034F0007ACF8CE26CCF81E00E9490150E94541527 :1035000001CF81E00E946315F9CF82E0F5CFF3E8A7 :10351000EF16FFE5FF0609F4CCC024E8E2162FE51C -:10352000F20609F0D5C4882309F4ECCEF0906A02C3 +:10352000F20609F0E0C4882309F4ECCEF0906A02B8 :10353000EE24E394FE24F0926A020E94880690939F :103540006802809367028091690210921A018823B1 :1035500009F4BDC08AE280931B0180931C0181E2C3 @@ -856,17 +856,17 @@ :103570001092660210926502C5CE882309F481C0BC :1035800080916D02811106C081E080936D0282EE10 :103590000E94F50C0E94880690936C0280936B0247 -:1035A0008BE20E94F50CF8018281882309F4D0C4D3 -:1035B00010929003F2E0EF16FCE5FF0608F4ACC1B0 -:1035C00026E1E2162CE5F20630F0C7018A5F9C4541 -:1035D000099708F0A1C10E948C0F9093D6028093A6 -:1035E000D50230E1E3163CE5F30609F464C108F0C6 -:1035F000E6C058E0E5165CE5F50609F44EC108F0B2 -:10360000AFC094E0E9169CE5F90609F43EC108F064 -:1036100091C0F2E0EF16FCE5FF0609F430C180919D -:10362000D502826023E0E2162CE5F20609F42AC1F5 -:103630006091D502F090D60284E090E00E94C42D03 -:103640006F2D82E290E00E94C42D0E9447165ACE50 +:1035A0008BE20E94F50CF8018281882309F4DBC4C8 +:1035B00010929003F3E0EF16FDE5FF0608F0BAC0A5 +:1035C0002AEFE2162CE5F20630F4C70182509C4542 +:1035D000449708F0B5C00E948C0F9093D602809358 +:1035E000D50240E1E4164CE5F40609F491C108F077 +:1035F000FFC088E0E8168CE5F80609F477C108F00A +:10360000CBC0E4E0EE16ECE5FE0609F461C108F07B +:10361000ADC022E0E2162CE5F20609F453C1809118 +:10362000D502826033E0E3163CE5F30609F44DC1B0 +:103630006091D502F090D60284E090E00E94CF2DF8 +:103640006F2D82E290E00E94CF2D0E9447165ACE45 :103650008823A1F080916D02811106C081E08093E2 :103660006D0282EE0E94F50C0E94880690936C0217 :1036700080936B0281EE0E94F50C92CF81EE0E9446 @@ -878,626 +878,627 @@ :1036D00080931B0180931C0181E2FF2029F00E944E :1036E0007B140E94AD1042CF0E947B143FCFE5EFC8 :1036F000EE16ECE5FE06B9F090F026EFE2162CE5AA -:10370000F20609F050CF27E245EE66EEFEC327E24F -:1037100045EE65EEFAC326E241EE60EEF6C327E21F -:1037200045EE64EEF2C326E241EE62EEEEC328E21D -:1037300041E0EFCF8091D502806136E0E3163CE5B1 -:10374000F30609F49FC08091D502886047E0E41633 -:103750004CE5F40608F496C08091D502806292C0D0 -:103760008091D5028D7F5CE0E5165CE5F50609F4F5 -:1037700089C078F48091D5028C609AE0E9169CE5C6 -:10378000F90609F47FC008F48CC08091D5028E7FC1 -:1037900079C08091D502877FFEE0EF16FCE5FF0639 -:1037A00009F470C08091D5028B7F2FE0E2162CE5E2 -:1037B000F20608F467C08091D5028F7E63C03BEFAC -:1037C000E3163CE5F30609F464C068F553E1E51639 -:1037D0005CE5F50609F477C090F491E1E9169CE503 -:1037E000F90609F46CC0E2E1EE16ECE5FE0609F01C -:1037F0001FCF0E9447168091D5028F7743C0F5E115 -:10380000EF16FCE5FF0609F466C008F47AC0809163 -:10381000D60281603AEFE3163CE5F30609F008CFE3 -:103820008093D60205CF4FEFE4164CE5F40609F479 -:103830004EC088F48DEFE8168CE5F806C1F1809152 -:10384000D6028E7F9EEFE9169CE5F90648F380913B -:10385000D6028360E5CFE1E0EE16EDE5FE0609F461 -:1038600059C008F444C060E022E0E2162DE5F206FB -:1038700009F0DECE8EE090E00E94C42DD9CE80917A -:10388000D50281608093D502D3CE8091D502846029 -:10389000F9CF8091D6028260C3CF8091D502806437 -:1038A000F1CF0E9447168091D5028068EBCF8091BE -:1038B000D6028D7FB5CF8091D5028F7DE3CF8091E9 -:1038C000D5028F7BDFCF8091D502837FDBCF8091C4 -:1038D000D6028C7FA5CF8091D50282FB992790F9E3 -:1038E00021E0922790FB82F990FB83F9CBCF809166 -:1038F000D602982F909591708E7F892B90FB81F93D -:103900008FCF0E9447169091D502892F97FB87F998 -:103910008058B8CF61E0AECF8091580236E1E3160F -:103920003CE5F30609F021C38A7A91E009F490E0BE -:1039300090930402811106C089E20E94170B0E9435 -:10394000A70AE0CC85E3F9CF85E30CC38091890316 -:1039500080FF1BC08E7F80938903609189037091E3 -:103960008A0380918B0390918C030E9438131092EC -:10397000C5024FEF50E782E0415050408040E1F7F0 -:1039800000C000000E94B00FBDCC8160809389030D -:1039900061E086950E944014B5CC4FE955E168EA94 -:1039A00075E10E94CC06AECC48EA55E16FE975E1BD -:1039B000F8CF45E154E16CE074E1F3CF44EF53E11B -:1039C00060E074E1EECF4CED53E168EE73E1E9CFD6 -:1039D00048EE53E16CED73E1E4CF4FE254E16EE168 -:1039E00074E1DFCF61E081E0D5CF65E082E00E9445 -:1039F000B21588CC68E086E0FACF64E18FE0F7CFBB -:103A000067E185E1F4CF62E289E1F1CF61E083E231 -:103A1000C1CF3BE5E3163DE5F30611F14CE5E416B5 -:103A20004DE5F40609F0D3C28091D60282FB8827C7 -:103A300080F991E089270E94B70EC9C20E944716FB -:103A40005FEF84E39CE0515080409040E1F700C07C -:103A500000000E94D10C0E94D01554CC81E0EBCF25 -:103A600080E0E9CFC7010E94550BD82EBFC22F2D91 -:103A70002F70C22E8F2D807F19F0C29490EFC92233 -:103A8000DD20C9F0CC2069F080E28E0D883010F086 -:103A900081100BC080915802C82AC09258020E941F -:103AA000A70A8E2D0E94F50C19C080915702C82AD2 -:103AB000C0925702F4CF8E2D0E94E10BCC2071F002 -:103AC000C09480E28E0D883010F081103EC080914D -:103AD0005802C822C09258020E94A70AE92DE85055 -:103AE000FF0B349720F40E94C0060E94A114AA2064 -:103AF00009F4CBCB8091550280FDC7CBF80112822F -:103B00008595859585950E949015C8010E94231979 -:103B1000809155028595859585950F900F900F9012 -:103B20000F900F90DF91CF911F910F91FF90EF9029 -:103B3000DF90CF90BF90AF909F908F907F906F90CD -:103B40005F904F903F900C94631580915702C8226C -:103B5000C0925702C1CF3F2D3F70B32E8F2D807F73 -:103B6000803219F0B29480EFB822882071F041E0E1 -:103B7000841681F1DD20D9F1CC2091F1F801858105 -:103B800080FF8FCF8F7085832BC0DD20B1F09091A7 -:103B900059028B2D892BC11003C00E94D70B9ECFD9 -:103BA00051E0C512FACF2091D60222FD97CF981787 -:103BB00009F494CF8093590291CFC11006C00E949E -:103BC000A10A8B2D0E94CC0B89CF81E0C81609F485 -:103BD00085CFF5CFDD2031F095E09C1508F47ECF40 -:103BE0008B2DDBCFE4E0EC1508F478CFEACFCC20C6 -:103BF00041F3F9E38F1209C02FEF37EE43E0215074 -:103C000030404040E1F700C000008E2D0E94E10BE3 -:103C100065CF8F2D86958695837061F0813009F090 -:103C20005DCFC7019370D11002C090E080E00E9488 -:103C3000940654CFC7019370D11002C090E080E089 -:103C40000E94AA064BCF8E2DDD2029F00E9463082A -:103C50000E94810743CF0E94A807FACF8F2D83705F -:103C600009F040C0D1103ACF4E2D4295469547708D -:103C7000440F440F8E2D8F7090E0042E02C0880FE9 -:103C8000991F0A94E2F730E020E0E4FE09C02FE03B -:103C900030E002C0220F331F4A95E2F7209530959D -:103CA0004F2D469546954370423099F078F46091D7 -:103CB0005A0270915B02413039F0822B932B86239C -:103CC00097230E94C60B0ACF862B972B822B932B10 -:103CD000F8CF822B932B20915A0230915B028227DE -:103CE0009327EFCF8695DD2011F08F2D81708823EB -:103CF00009F4F4CE4E2D429546954770440F440F7B -:103D00008E2D8F7090E0042E02C0880F991F0A94A8 -:103D1000E2F730E020E0E4FE09C02FE030E002C02E -:103D2000220F331F4A95E2F7209530954F2D469587 -:103D300046954370423099F078F460910903709190 -:103D40000A03413039F0822B932B862397230E945C -:103D50004C15C4CE862B972B822B932BF8CF822B1E -:103D6000932B2091090330910A0382279327EFCFE9 -:103D70005F2D5F70F52EDD2029F0852F0E949015B4 -:103D80008E2D0BCF8E2D0E94CC0B8F2D0E94631594 -:103D9000A5CE8E2D92EF891609F449C0981570F0C2 -:103DA000E0EF8E1639F1F1EF8F16C9F1DD2009F43D -:103DB0005FC0C11076CE8F2D8F7136C023EF821673 -:103DC000D9F134EF8312F2CFDD2009F446C0FF2D84 -:103DD000FF71FF2E8F2F0E9490158091D60282FDD9 -:103DE00007C028E0F29EC001112483608093550231 -:103DF0008F2D1AC0DD2071F044E04C1508F46ECE12 -:103E00002F2D2F7181E090E002C0880F991F2A9515 -:103E1000E2F7A7CF55E05C1508F460CEF1CF8F2D07 -:103E20008F71DD2009F4B2CF0E94901557CE8F2DEF -:103E30008F71DD20C9F3AACF90E080E0DD2009F486 -:103E400086CF9F2D9F7121E030E0F90102C0EE0F77 -:103E5000FF1F9A95E2F7CF017ACF81E00E94741597 -:103E600031E03C1508F03ACE82E00E94741536CE5F -:103E7000CC2059F0893309F0C8CE4FEF57EE83E0DC -:103E8000415050408040E1F7BECE8F2D8F717ECFE4 -:103E9000F0E1EF16FFE5FF0609F42DCB21E1E21674 -:103EA0002FE5F20609F431CB42E8E4164FE5F406BB -:103EB00009F4EBCB08F02BCB90E8E9169FE5F90667 -:103EC00009F45BCBE1E8EE16EFE5FE0609F4C0CBA2 -:103ED00033EFE3163CE5F30609F41DCC08F007CCFC -:103EE00058EDE5165CE5F50609F411CC89EDE81608 -:103EF0008CE5F80609F41BCC97EDE9169CE5F9066C -:103F000009F051CB26E241EE61EEC8010E94C70DD7 -:103F1000F9C930E1E3163FE5F30609F4F2CA41E1DD -:103F2000E4164FE5F40609F0BFCF82E0EBCA85E066 -:103F3000DE01119601900D928A95E1F7F801228138 -:103F400089819A812111B8C90E94550BF82EBCC9EC -:103F5000F6E1EF16FCE5FF06D1F580910402811130 -:103F6000F3CC89E20E94EC0AEACC82722CECE216D5 -:103F70002CE5F20609F431CD08F0A7C046ECE416B2 -:103F80004CE5F40609F415CD08F076C093ECE9167B -:103F90009CE5F90609F401CD08F05DC0F2ECEF16DE -:103FA000FCE5FF0609F4D2CC9AE5E9169DE5F90691 -:103FB00009F454CD08F02DCDE114FCE5FF0609F419 -:103FC0003DCD2EEDE2162CE5F20609F444CDF801C4 -:103FD0008281E080F180882309F444CDC7010E94EA -:103FE000040FD82E682FC7010E947D0BB7018D2DBD -:103FF0000E94F70E0E9419097C01882EF801D280D8 -:10400000C580C2943FE0C322809155028770A1F021 -:10401000AD2CDD2091F08F2D807F803421F080E267 -:104020008E0D883048F082E00E9474158091550210 -:104030008770AA24A3948111A12C9F2C92942FE025 -:104040009222FBE0F91508F449CDE92DF0E0EA5A97 -:10405000F14D0C94652D24ECE2162CE5F20609F4E2 -:10406000A3CC4CE054E165E174E135ECE3163CE5AA -:10407000F30609F496CC98CF49ECE4164CE5F40627 -:1040800009F4A1CC88F497ECE9169CE5F90609F44B -:1040900095CC40E054E164EF73E1E8ECEE16ECE51A -:1040A000FE0609F47ECC80CFFAECEF16FCE5FF06A5 -:1040B00009F48ECC4EE154E16FE274E12BECE21690 -:1040C0002CE5F20609F46DCC6FCF31EDE3163CE53B -:1040D000F30609F492CCB8F45EECE5165CE5F5065F -:1040E00009F483CC08F47ECC9FECE9169CE5F90634 -:1040F00009F480CC6EE089E0E0EDEE16ECE5FE061A -:1041000009F475CC51CFF4EDEF16FCE5FF0609F488 -:104110007ACC78F432EDE3163CE5F30609F470CC82 -:1041200061E088E143EDE4164CE5F40609F432CC95 -:104130003BCF55EDE5165CE5F50609F467CC8DE55A -:10414000E816F80609F4DEC82FCF1F93CF93DF934C -:1041500080912202807FA9F480911F02882389F038 -:1041600080915402D091230260911D0270911E0231 -:10417000A0912002B0912102C62FC72316E0D813C8 -:1041800004C0DF91CF911F91089590E0109711F036 -:10419000CF3F19F401968770F2CF189F9001199FB5 -:1041A000300D1124F901EC5DFD4F41814713F2CF31 -:1041B00040814613EFCF42814111ECCF43815481BE -:1041C0004A1B5B0B483C510528F7809122028F70F7 -:1041D000806180932202F901E75DFD4F80818F703D -:1041E000806180838DE192E00E942319DF91CF915D -:1041F0001F910C944B0BAF92BF92CF92DF92EF9234 -:10420000FF920F931F93CF93DF93CDB7DEB76197E4 -:104210000FB6F894DEBF0FBECDBF8C0185E0F8016C -:10422000DE011D9601900D928A95E1F7F801E2807A -:104230008DE1A82E82E0B82E6091200270912102BB -:104240006115710509F432C190911D0240911E0261 -:10425000892F84238F3F09F429C120813181C380B4 -:10426000D480F0901F02F601E61BF70BFF2009F443 -:10427000E8C080912202582F507FE83CF10508F0F9 -:10428000ABC0511177C0FE2C431321C092131FC045 -:10429000E1101DC08F70806180932202C5010E94D1 -:1042A000231980912202F80185838F2D61960FB624 -:1042B000F894DEBF0FBECDBFDF91CF911F910F915C -:1042C000FF90EF90DF90CF90BF90AF900895CD28F2 -:1042D00029F0822F83238F3F09F003C180E0F82F5C -:1042E000F170DF2E80FF3CC0809154024091230288 -:1042F00056E0841315C02D873E878D859E850E94CC -:10430000400F292F22952F702230F0F0243018F51D -:104310009F70F1F0F8019581907FD1F4D12C1EC0EF -:1043200090E0589FF001599FF00D1124EC5DFD4F76 -:104330006181361306C06081261303C06281E612D4 -:104340000FC001968770D5CF9F7011F0882331F38D -:10435000805E883018F3C8010E942319FD2CA5CF78 -:10436000EE2009F4A2CF8091220281608093220284 -:10437000F12C9BCF431306C0921304C0F801EE202A -:1043800009F479C0C8010E944C0F882309F1EE207E -:10439000F9F080912202803270F020911D0230915C -:1043A0001E0238872F831986DB86CA868C87CE014A -:1043B00007960E94231986E0F801ADE1B2E0019072 -:1043C0000D928A95E1F70E94A520FF24F3946DCF0A -:1043D000C8010E942319F9CF51110AC08DE192E062 -:1043E0000E94231986E0F50111928A95E9F7C0CF62 -:1043F00043130FC092130DC0E1100BC0F801858369 -:10440000C8010E94231986E0F50111928A95E9F707 -:104410004CCFC8010E944C0F8823D1F2EE20C1F28C -:1044200080912202803238F220911D0230911E02CA -:104430003A8329831B82DD82CC828E83CE01019652 -:10444000B8CFE83CF105F8F6FE2CEE2009F2431354 -:104450001FC092131DC08091220280FD10C0982FB2 -:10446000907F69F0F8018583903F31F0982F907F1D -:10447000905F8F70892B8583C8010E94231986E085 -:10448000F801ADE1B2E001900D928A95E1F70DCF10 -:10449000C8010E944C0F81118ECF80912202816051 -:1044A00080932202C8010E942319FFCEEE2009F456 -:1044B0008FCFC8010E944C0FF82E882309F488CFB3 -:1044C00086E0F801ADE1B2E001900D928A95E1F746 -:1044D00080911D0290911E020E94400F0E94A52013 -:1044E000E4CE81E08E25FBCE1F93CF93DF93CDB733 -:1044F000DEB767970FB6F894DEBF0FBECDBF4B8B0C -:104500005C8B6D8B7E8B8F8B6111109257021A8A98 -:10451000198A85E0FE017396DE011D9601900D92C9 -:104520008A95E1F786E0FE013D96DE01179601903F -:104530000D928A95E1F7CE0107960E94FB20882311 -:1045400089F016E08091540290912302891349C0AA -:1045500067960FB6F894DEBF0FBECDBFDF91CF9147 -:104560001F91089586E0FE013796DE0111960190B5 -:104570000D928A95E1F78A859B85892B11F38F81AE -:10458000988589238F3FE9F22091230230E0C90109 -:10459000019687709927409154024817190671F4C3 -:1045A0000E944716109223021092540286E0EDE119 -:1045B000F2E0DF011D928A95E9F7C3CF96E0929F62 -:1045C000D001939FB00D1124AC5DBD4FFE0131961B -:1045D00001900D929A95E1F7809323020E944B0B74 -:1045E000B0CF819FC00111248C5D9D4F0E94FB20A4 -:1045F000882309F4ADCF8091540290E00196877032 -:104600009927809354029ECF6F927F928F929F92B0 -:10461000AF92BF92CF92DF92EF92FF920F931F93D0 -:10462000CF93DF93CDB7DEB72D970FB6F894DEBFEB -:104630000FBECDBF8E010F5F1F4F88E0F8011192B2 -:104640008A95E9F74FE4E42E41E0F42E680153E542 -:10465000652E51E0752E88248394912CF701819169 -:104660007F018F3F09F44BC0F894E82FE295EF707B -:10467000F0E021A18F70A40102C0440F551F8A955C -:10468000E2F7CA01922F982B91A392A180958923DA -:1046900082A3789400C0E3E5F1E030E020E0B12CA3 -:1046A000A12C81918F3F09F47CC0A82FA295AF70F7 -:1046B000B0E090964C9150E08F7002C055954795B0 -:1046C0008A95E2F740FD6DC0C401022E02C0880F3A -:1046D000991F0A94E2F7A82AB92A2F5F3F4F2C307E -:1046E0003105F9F6F701319780818F3F11F00E9473 -:1046F000BF0850EA5A95F1F7F601B182A082F2E0C4 -:10470000CF0ED11C6E147F0409F0A8CF48E050E012 -:10471000B8018EE692E00E94A32DCC24C3940097AA -:1047200009F4C12C892B09F43FC088E0F801AEE6FA -:10473000B2E001900D928A95E1F781E080935E02EC -:104740000E94880690935D0280935C0280915C02D7 -:1047500090915D020E947906059750F180916E025A -:1047600090916F029093A7028093A60280917002AD -:10477000909171029093A9028093A8028091720295 -:10478000909173029093AB028093AA02809174027D -:10479000909175029093AD028093AC0210925E02EC -:1047A00007C090E080E097CF80915E028111CECF6C -:1047B00080916D02882371F080916B0290916C0260 -:1047C0000E947906893E934028F082EE0E94E10B18 -:1047D00010926D0280916A02882399F1809169029A -:1047E00081112FC080916702909168020E94790622 -:1047F00081369A4E78F0809165029091660201961A -:1048000090936602809365020E94880690936802E6 -:104810008093670280916502909166024F9788F0BD -:1048200010921A018AE280931B0180931C018FE091 -:104830000E947B1481E080936902109266021092BC -:10484000650238E7E32E32E0F32E10E000E0BB24EF -:10485000B394F701D1907F01DD2051F101151105CD -:1048600009F058C0B09263020E94880690936002DB -:1048700080935F02D694C801880F991FDD2009F448 -:1048800056C08F589E4FFC01808191819A878987FD -:104890001B860E9488068160782F9D878C87F70190 -:1048A0003197108249855A856B858D850E947422C7 -:1048B0000F5F1F4F0930110561F61091640280915E -:1048C000630211115DC08823A9F110921A0184E0DE -:1048D00080931B0180931C018FE00E947B14109237 -:1048E000630281E0809364028C2D2D960FB6F894BC -:1048F000DEBF0FBECDBFDF91CF911F910F91FF9013 -:10490000EF90DF90CF90BF90AF909F908F907F906F -:104910006F9008950530110519F4B0926202A4CF8A -:104920000730110509F0A6CFB09261029DCF815AE0 -:104930009E4FA9CF80916202882379F086E180930F -:104940001A018AE180931B0184E080931C018FE0AF -:104950000E947B1410926202C4CF8091610288236E -:10496000A9F08AE180931A018EE180931B0184E013 -:1049700080931C018FE00E947B1410926102B1CFE2 -:1049800081112BC080916202811127C08091610248 -:10499000811123C080915F02909160020E9479068C -:1049A000853F9140D0F0112379F010921A018AE2EC -:1049B00080931B0180931C0181E20E947B148091F3 -:1049C0006A0281110E94AD1010926302109262027D -:1049D000109261021092640287CF109263021092CB -:1049E00062021092610280CF1F920F920FB60F9257 -:1049F00011242F933F934F935F936F937F938F93E4 -:104A00009F93AF93BF93CF93DF93EF93FF93D09197 -:104A1000E900DF708091EC00C82FC17080FDC0E814 -:104A20001092E9008091F000877F8093F0007894E5 -:104A30000E945C161092E9008091F00088608093DB -:104A4000F000CD2BCF70C093E900FF91EF91DF9183 -:104A5000CF91BF91AF919F918F917F916F915F9116 -:104A60004F913F912F910F900FBE0F901F9018956F -:104A70001F920F920FB60F9211242F933F934F93D3 -:104A80005F936F937F938F939F93AF93BF93EF93B6 -:104A9000FF938091E10082FF09C08091E20082FFD4 -:104AA00005C08091E1008B7F8093E1008091DA0066 -:104AB00080FF24C08091D80080FF20C08091DA0060 -:104AC0008E7F8093DA008091D90080FF9BC088E1BF -:104AD00089BD8AE189BD09B400FEFDCF81E08093E4 -:104AE000FF028091DA02811109C00E94EC040E9449 -:104AF000B7058091E20084608093E2008091E1003C -:104B000080FF17C08091E20080FF13C08091E20017 -:104B10008E7F8093E2008091E20080618093E200CA -:104B20008091D80080628093D80019BC85E0809382 -:104B3000FF028091E10084FF29C08091E20084FFA0 -:104B400025C088E189BD8AE189BD89B5982F91701A -:104B500080FFFBCF8091D8008F7D8093D80080911B -:104B6000E1008F7E8093E1008091E2008F7E809350 -:104B7000E2008091E20081608093E2008091000376 -:104B8000882309F445C084E08093FF028091E1000E -:104B900083FF27C08091E20083FF23C08091E10062 -:104BA000877F8093E10082E08093FF0210920003F0 -:104BB0008091E1008E7F8093E1008091E2008E7F02 -:104BC0008093E2008091E20080618093E20042E005 -:104BD00060E080E00E9485058091F000886080930D -:104BE000F000FF91EF91BF91AF919F918F917F91D5 -:104BF0006F915F914F913F912F910F900FBE0F904A -:104C00001F90189519BC1092FF021092DA0276CF0D -:104C10008091E30087FD93E09093FF02B7CF7894F3 -:104C20001F921FB61F9211248F939F93AF93BF9330 -:104C30008091D1029091D202A091D302B091D4027E -:104C40000196A11DB11D8093D1029093D202A09331 -:104C5000D302B093D402BF91AF919F918F911F90D7 -:104C60001FBE1F9018951F921FB61F9211248F937D -:104C70009F93AF93BF938091D002811113C0809115 -:104C8000D1029091D202A091D302B091D402419668 -:104C9000A11DB11D8093D1029093D202A093D302A3 -:104CA000B093D402BF91AF919F918F911F901FBE7F -:104CB0001F901895CDB7DEB7E0970FB6F894DEBF1A -:104CC0000FBECDBF84B7877F84BF0FB6F894A89579 -:104CD00080916000886180936000109260000FBE38 -:104CE00080E890E00FB6F8948093610090936100A3 -:104CF0000FBE85B7806885BF85B7806885BF8DEB9F -:104D000098E09093E3018093E2010E94EC040E94FA -:104D1000B7058091E20084608093E20078948091EE -:104D2000FF028823A1F01091E9001F709091EC0020 -:104D3000892F817090FD80E8182B1092E9008091F6 -:104D4000E80083FD0E945C161F701093E90082E06A -:104D500084BD93E095BD9AEF97BD80936E000E944D -:104D6000730F811102C00E94A80E80EF0E94BF083D -:104D700081EF0E94BF0882EF0E94BF0883EF0E946C -:104D8000BF0803E511E0FFE5EF2EF1E0FF2ED801AB -:104D90008D918D018F3F11F00E94BF08E016F10642 -:104DA000B1F710926F0210926E021092A702109249 -:104DB000A60210927102109270021092A902109233 -:104DC000A80210927302109272021092AB0210921B -:104DD000AA0210927502109274021092AD02109203 -:104DE000AC020E943C16811102C00E94D01582E0E4 -:104DF00090E00E94B02D80939D020E948C0F9093B2 -:104E0000D6028093D5020E940423EFE3FCE9319798 -:104E1000F1F700C000000E9404238091A60280FFE9 -:104E200008C06FEF7FEF90E080E00E94E22D0E94CB -:104E3000D10C83E090E00E94B02D90E00E94C60B60 -:104E40008091090390910A030E94B914809176021F -:104E5000811132C00E943C16811104C00E94D015FD -:104E60000E94C01588E090E00E94B82D60938903ED -:104E700070938A0380938B0390938C036E7F71F4FD -:104E80000E94C01588E090E00E94B82D60938903CD -:104E900070938A0380938B0390938C030E94D206B5 -:104EA0001092C5028091890380FF03C086950E94FD -:104EB0007B1481E0809376026EEA71E0E3E98E2E46 -:104EC000E2E09E2E2CE931E0E5EAF1E041E050E03D -:104ED0001191812F82958F7090E0DC019196FC906A -:104EE00091971F70E12E6A0101C0CC0C1A95EAF768 -:104EF0000C2D00950F2191960C93919792961C91F1 -:104F000092971C2992961C93D901FD909D010F2D1B -:104F100002950F7010E0D8019196BC90BF2DBF7024 -:104F2000FB2E6A0101C0CC0CBA95EAF7DC2CD094B8 -:104F3000DB20D8019196DC9291979296DC90929723 -:104F4000DC289296DC92DC0190968C9190E002C075 -:104F500095958795EA94E2F78170D80190960C9127 -:104F600010E002C015950795FA94E2F790E000FD75 -:104F700092E0892BD4018D934D016E177F0709F0C4 -:104F8000A7CF86EA92E09093BD028093BC0281E2B3 -:104F90000E947B1481E090E00E944C1580E091E03B -:104FA0009093CD028093CC0258E1252E312C809134 -:104FB000FF02FF24F39408E11AE1853009F4B3C23B -:104FC0000E940423882359F08FB7F8944091D102AE -:104FD0005091D2026091D3027091D4028FBFA6EAA1 -:104FE000B2E0EEE9F2E010E000E0702F8D919D91CB -:104FF000219131912817390709F4BEC22827392792 -:1050000060E0EE24E394F12CA9014E215F21452BB1 -:1050100009F4ACC269A37AA39C012E213F2191E03F -:10502000232B09F490E09BA30E9488068160782FCF -:105030009DA38CA349A15AA16BA18DA10E947422AA -:10504000000F111FF801E256FD4F80819181E82683 -:10505000F926F182E0828091C5028823D1F1809106 -:10506000C402E0918903E695E81BE093C002823018 -:1050700009F099C2F0E0EC53FD4FE4910E2F10E0DF -:1050800024E2E22E23E1F22E8091C102882361F016 -:105090001092C1020E9488069093BF028093BE02C4 -:1050A0001092C3021092C2020E948806E091BE02D2 -:1050B000F091BF028E1B9F0B8F3F9F4750F4E00F74 -:1050C000F11FF093BF02E093BE028EEB92E0F70176 -:1050D00009953AE8E32E32E0F32E01E812E048E7C2 -:1050E000842E42E0942E83E991E09CA78BA7D12CDB -:1050F000C12CACE9B1E0BEA7ADA7E5EAF1E0F8ABA1 -:10510000EFA753E9652E52E0752E512C44244394A9 -:10511000D301ED913D01EE0FEE0FAFA5B8A92D9192 -:10512000B8ABAFA7A22FA295AF70B0E090968C91CC -:1051300090E02F7002C0959587952A95E2F78170CF -:105140009927ADA5BEA54D91BEA7ADA7A42FA29549 -:10515000AF70B0E090962C9130E04F7002C0359562 -:1051600027954A95E2F7A9014170552720FF02C013 -:1051700042E050E0842BE82BD3011197EC93ABA5D0 -:10518000BCA5AD90BCA7ABA7EF70F0E0ED57FE4F0C -:105190008081F7019081890F8083B12C082E000C4B -:1051A000990B20E08A159B05DCF0D8018C918F5F6C -:1051B0008C93F601E15AFE4F808191819A83898315 -:1051C0004B820E9488068160782F9D838C83F40136 -:1051D000408249815A816B818D810E94742221E035 -:1051E000D7018C91082E000C990B442755274A199A -:1051F0005B0948175907E4F0F801808181508083EA -:10520000F601EF58FE4F808191819A8389834B820A -:105210000E9488068160782F9D838C83E2E0D40110 -:10522000EC9349815A816B818D810E94742221E027 -:10523000D7018C91082E000C990BB5010E94512DBD -:10524000F70181937F01522A0F5F1F4FFFEF8F1AE3 -:105250009F0A22E0C20ED11C42E1C416D10409F01B -:1052600057CF552059F08FB7F8944091D102509103 -:10527000D2026091D3027091D4028FBF86E0E5EB39 -:10528000F2E0DE01119601900D928A95E1F7F0901F -:10529000B702E090B8021091B9020091BA021092E0 -:1052A000B7021092B8021092B9021092BA028F2D72 -:1052B0008E2909F448C08091B3029091B4020E94F3 -:1052C00079069C019091AF02992309F4C3C323335B -:1052D0003105C8F19F3F19F09F5F9093AF02FF2007 -:1052E00059F00E9443089FEF1F140CF491E0899F2E -:1052F000802D11248093B702EE2059F00E944308BC -:105300009FEF1E140CF491E0899F802D112480934F -:10531000B8023091B7023323B1F02091B8022223B2 -:1053200091F045EB3403C0011124992309F495C190 -:105330009093B70245EB240390011124332309F421 -:1053400090C13093B802812F802B09F448C080911E -:10535000B1029091B2020E9479069C019091AE0236 -:10536000992309F472C325363105C8F19F3F19F01E -:105370009F5F9093AE02112359F00E9421089FEF86 -:1053800011160CF491E0899F802D11248093B902AD -:10539000002359F00E9421089FEF10160CF491E0B1 -:1053A000899F802D11248093BA023091B902332352 -:1053B000B1F02091BA02222391F045EB3403C001F1 -:1053C0001124992309F451C19093B90245EB2403A8 -:1053D00090011124332309F44CC13093BA02809117 -:1053E000B7029091B802892B9091B902892B9091C4 -:1053F000BA02892B11F00E94810786E0FE013196E6 -:10540000A5EBB2E001900D928A95E1F70E94C006EB -:1054100090919C02891731F00E94C00680939C02F3 -:105420000E94A1148091FF02843009F0C0CD83E076 -:105430008093E9008091E80082FFB9CD8091E80077 -:1054400090E085FF06C00E940B05882309F415C172 -:1054500091E08091E8008B778093E800992309F42C -:10546000A6CDE981E150E33108F09BC1F0E0EE59AF -:10547000F14D0C94652D8091FF02843009F441C0F8 -:1054800080E00E94A1141092C5028091BB0281119C -:1054900016C0F092BB0280918903982F917090936F -:1054A00077028E7F80938903BFEFE0E7F2E0B1508F -:1054B000E040F040E1F700C000000E94B00F109201 -:1054C000D00220E40FB6F894A895209260000FBE99 -:1054D0002093600083B7817F846083BF83B781603E -:1054E00083BF7894889583B78E7F83BF0FB6F89477 -:1054F000A8958091600088618093600010926000A0 -:105500000FBE8091FE02882371F00E940423E6EA18 -:10551000F2E081919191892B09F078C28EEA92E0B4 -:105520008E179F07B1F78091FF02853009F4A3CF52 -:105530000E9447160E94C0060E94A1141092BB024E -:1055400080917702882359F080918903816080934C -:10555000890386950E947B140E949A0F31CD809119 -:10556000C6028823C9F30E94B00FF6CF6F5FEE0C1E -:10557000FF1C6C3009F048CD0F5F1F4F0430110540 -:1055800009F033CD8FEF8EA38FA318A60E94880653 -:105590008160782F9AA789A74EA15FA168A58AA5E7 -:1055A0000E94742258CD863059F4F0E0EF53FD4F3D -:1055B000E4910E2F10E094E1E92E93E1F92E64CDF1 -:1055C000893061F4E695F0E0E254FD4FE4910E2F4E -:1055D00010E085E6E82E82E1F82E56CD8F3061F49A -:1055E000E695F0E0E554FD4FE4910E2F10E0B0E1B8 -:1055F000EB2EB2E1FB2E48CD853159F4F0E0E854B2 -:10560000FD4FE4910E2F10E0ADE9EA2EA1E1FA2E54 -:105610003BCD08E210E07DE0E72E71E1F72E883106 -:1056200009F432CD833249F4E6EBF2E005911491AE -:10563000FBEBEF2EF2E1FF2E27CD04EF11E0E0EDC2 -:10564000EE2EE0E1FE2E843209F41ECD00ED17E0CF -:1056500061EDE62E66E0F62E17CD81E08093B7026D -:1056600069CE81E08093B8026ECE81E08093B9026A -:10567000ADCE81E08093BA02B2CE00E210E0CE015E -:1056800001967C018091E80085FD0AC08091E800C8 -:105690008B778093E8000E940B05882399F3D8CE7E -:1056A0008091F100D7018D937D010150110951F7CF -:1056B000CFCE1A8289E08B833FC08A81823009F481 -:1056C000BBC18330A9F0813009F06BC02FB7F894CB -:1056D0006091D1027091D2028091D3029091D40254 -:1056E0002FBF0E946B2D6B837C838D839E8324C090 -:1056F0008091A6029091A7029827892798279C83DA -:105700008B838091A8029091A902982789279827D6 -:105710009E838D838091AA029091AB02982789275E -:10572000982798878F838091AC029091AD0298273B -:10573000892798279A8789878091FF02843009F00A -:1057400036CC1091E9001F709091EC00892F817088 -:1057500090FD80E8182B82E08093E9008091E800BA -:1057600080FF0DC050E040E060E270E0CE010196A5 -:105770000E943C058091E8008E778093E8001F70BE -:105780001093E90014CC8A81823059F46B817C81BA -:105790008D819E810E946B2D86E290E00E94C42D37 -:1057A000CBCF8FEF8983C8CF4C816B818A810E94D8 -:1057B000D10E9827892798279E838D83BDCFED80B2 -:1057C000FE80FE24EF24FE248A810B81B8E10B9F2A -:1057D00080011124E0E68E9F000D111D11248C81A3 -:1057E00090E0880F991F080F191F6F2DC801879629 -:1057F0000E94C42D6E2DC8018896D0CF0E943B0E0A -:105800009BCF8A818138C1F060F4803809F094CF51 -:1058100020E04B8160918B0380918A030E944A13A0 -:105820008BCF823849F1833809F086CF20E0409150 -:105830008C036C818B81F2CF8B810E947B149B81C6 -:1058400080918903911111C08E7F809389031092FA -:10585000C502FFEF20E742E0F15020404040E1F771 -:1058600000C000000E94B00F67CF81608093890361 -:1058700086950E947B1460CF8B8180938D035CCFD3 -:105880008A81813899F030F4803809F055CF8091C1 -:105890008C0311CF823891F0833809F04DCF80917D -:1058A0008A038B8380918B038C8346CF80918903FD -:1058B00080FF02C08695FFCE80E0FDCE80918D03F3 -:1058C000FACE6091890370918A0380918B03909145 -:1058D0008C030E94381330CF80E18A832DCF84E07F -:1058E0008A8389E1E8CE0A811B81102701271027CE -:1058F000CE0101966C01EC80DC01AE0DB11D7D0185 -:10590000C80189519C4FEC14FD0409F415CF0931ED -:10591000B4E01B0750F40E94B02DF60184830F5FA2 -:105920001F4FBFEFCB1ADB0AEBCFD60114961C92A8 -:10593000F6CF0A811B81102701271027FE0131961F -:105940006F01EC80E00EF12EF11CC80189519C4FD3 -:10595000E016F10609F4F0CE0931F4E01F0728F44F -:10596000D60114966C910E94C42DBFEFCB1ADB0AAE -:105970000F5F1F4FEACF0E942B0EDECE8AE0ADCF25 -:105980000A811B81102701271027FE0131966F0124 -:10599000EC80CF018E0D911D7C01C8018796EC141F -:1059A000FD0409F4C9CE003CA3E01A0750F40E949C -:1059B000B02DF60184830F5F1F4FBFEFCB1ADB0AB8 -:1059C000ECCFD60114961C92F6CF0A811B811027CA -:1059D00001271027FE0131966F01EC80E00EF12EB9 -:1059E000F11CC8018796E016F10609F4A5CE003C2B -:1059F000F3E01F0728F4D60114966C910E94C42D81 -:105A0000BFEFCB1ADB0A0F5F1F4FEBCF09BD19BDEC -:105A100009B400FEFDCF8091D8008F7D8093D8001F -:105A20008091E00082608093E0008091E00081FD41 -:105A3000FCCF0E94471677CD86E290E00E94B02D01 -:105A40001B821C821D828E8377CE2D32314008F05E -:105A50008FCCC5CC2D32314008F03ECC74CC87FBC6 -:105A6000082E062687FD819567FD61950E94812D90 -:105A70000EF4919507FC81950895AA1BBB1B51E17B -:105A800007C0AA1FBB1FA617B70710F0A61BB70BAE -:105A9000881F991F5A95A9F780959095BC01CD0153 -:105AA000089597FB072E16F4009407D077FD09D0D0 -:105AB0000E943D2D07FC05D03EF4909581959F4FA7 -:105AC0000895709561957F4F0895EE0FFF1F059023 -:105AD000F491E02D0994692796276927782787276D -:105AE000782708950E942D2E332312F48A1B9B0BD6 -:105AF0000C947C2D0E942D2EB7FF0895821B930BD2 -:105B00000895991B79E004C0991F961708F0961B19 -:105B1000881F7A95C9F780950895FB01DC0102C0C2 -:105B200005900D9241505040D8F70895FC01415026 -:105B3000504030F001900616D1F73197CF0108950B -:105B4000882799270895FB01DC0104C08D910190FD -:105B5000801921F441505040C8F7881B990B0895D3 -:105B6000F999FECF92BD81BDF89A992780B5089525 -:105B7000A6E1B0E044E050E00C94EA2DA8E1B0E0EA -:105B800042E050E00C94EA2D262FF999FECF92BD09 -:105B900081BDF89A019700B4021639F01FBA20BDF2 -:105BA0000FB6F894FA9AF99A0FBE08950396272F24 -:105BB0000E94C52D0E94C42D252F0E94C52D242F83 -:105BC0000C94C52D0196272F0E94C52D0C94C42D31 -:105BD000DC01CB01FC01F999FECF06C0F2BDE1BDAD -:105BE000F89A319600B40D9241505040B8F708959C -:105BF0000E942D2EA59F900DB49F900DA49F800D07 -:105C0000911D11240895B7FF0C94F82D0E94F82DD2 -:105C1000821B930B0895A1E21A2EAA1BBB1BFD0148 -:105C20000DC0AA1FBB1FEE1FFF1FA217B307E4077B -:105C3000F50720F0A21BB30BE40BF50B661F771FD3 -:105C4000881F991F1A9469F76095709580959095B3 -:105C50009B01AC01BD01CF010895A29FB001B39F8C -:105C6000C001A39F700D811D1124911DB29F700D65 -:105C7000811D1124911D0895F894FFCF5E0F5E0FD2 -:105C8000670F670F690F670F670F670F5E0F5E0F74 -:105C90006E0F670F670F6E0F41176917BC176917F3 -:105CA000BC179C17D417BC17D118DE18371D371D29 -:105CB000AB1DAB1D091E231E6E1D6E1D2E1EB81EB4 -:105CC000C91EC91E592B5D2BC32BD42BDF2BFE2BDA -:105CD000012C402C612CD12BD12B6C2C6F2C732CD4 -:0A5CE000992CBB2CBE2CC02CE52C27 -:105CEA007606910C700C6C0C680C01191A1B1C1DA1 -:105CFA001E1F202122010201002A002A2A01818274 -:105D0A0083E200E900EA00B500B600B700CD0083DF -:105D1A0001CC008A01920194012102230224022566 -:105D2A0002260227022A02B300B4006F007000F0B4 -:105D3A00F1F2F3F5F6F700010203040537363502EE -:105D4A0000020102020B000B010B020B0305030800 -:105D5A000300000001000209000901090209030306 -:105D6A0003060300FF0100010000FFFF000001001D -:105D7A0001FF00040404040404040202616264666C -:105D8A0090929497066063656791939596070001D0 -:105D9A00020202020606060909090909090F0F0F7C -:105DAA000F0F0F1515151819191919191919191984 -:105DBA001923244022B6B6019401DE00C808E1087E -:025DCA000109CD +:10370000F20609F050CF27E245EE66EE09C427E243 +:1037100045EE65EE05C426E241EE60EE01C427E207 +:1037200045EE64EEFDC326E241EE62EEF9C328E207 +:1037300041E0EFCF31E6E3163DE5F30609F44BCF68 +:103740008091580246E1E4164CE5F40609F018C4ED +:103750008A7A91E009F490E0909304028111FDC00F +:1037600089E20E94170B0E94A70ACCCD8091D50256 +:10377000806146E0E4164CE5F40609F4A6C08091A9 +:10378000D502886057E0E5165CE5F50608F49DC0B3 +:103790008091D502806299C08CE0E8168CE5F8062D +:1037A00009F4AEC078F48091D5028C60EAE0EE16A0 +:1037B000ECE5FE0609F489C008F49CC08091D502AE +:1037C0008E7F83C08091D502877F2EE0E2162CE5A4 +:1037D000F20609F47AC08091D5028B7F3FE0E316B0 +:1037E0003CE5F30608F471C08091D5028F7E6DC070 +:1037F0004CEFE4164CE5F40609F486C0A0F584E12C +:10380000E8168CE5F80609F497C098F4E2E1EE16A4 +:10381000ECE5FE0609F480C08091D5028F7BF3E1D0 +:10382000EF16FCE5FF0608F450C08091D502837FB7 +:103830004CC02AEFE2162CE5F20609F44DC008F060 +:1038400051C045E1E4164CE5F40609F0F1CE809153 +:10385000D50282FB992790F921E0922790FB82F90B +:1038600090FB83F932C0E1145DE5F50609F45AC016 +:10387000A0F48091D60283609EEFE9169CE5F906DC +:1038800071F18091D6028D7FEFEFEE16ECE5FE062A +:1038900030F18091D6028C7F22C0F2E0EF16FDE578 +:1038A000FF0609F458C008F450C031E6E3163DE5C0 +:1038B000F30609F0BDCE9091D502892F8F7E94FF3B +:1038C000806103C08091D50281608093D502B0CE23 +:1038D0008091D5028460F9CF8091D6028160809377 +:1038E000D602A6CE8091D6028260F9CF8091D50211 +:1038F0008064EBCF0E9447168091D5028068E5CFA7 +:103900008091D5028D7FE1CF8091D6028E7FE7CF67 +:103910008091D5028F7DD9CF0E9447168091D50224 +:103920008F77D3CF8091D602982F909591708E7F0C +:10393000892B90FB81F9D3CF0E9447169091D50235 +:10394000892F97FB87F98058C0CF61E08EE090E027 +:103950000E94CF2D6DCE60E0F9CF85E302CF85E3E5 +:103960000CC38091890380FF1BC08E7F80938903E5 +:103970006091890370918A0380918B0390918C03ED +:103980000E9438131092C5025FEF80E792E0515019 +:1039900080409040E1F700C000000E94B00FB2CC20 +:1039A00081608093890361E086950E944014AACCCF +:1039B0004FE955E168EA75E10E94CC06A3CC48EADC +:1039C00055E16FE975E1F8CF45E154E16CE074E150 +:1039D000F3CF44EF53E160E074E1EECF4CED53E1FF +:1039E00068EE73E1E9CF48EE53E16CED73E1E4CFAB +:1039F0004FE254E16EE174E1DFCF61E081E0D5CFC9 +:103A000065E082E00E94B2157DCC68E086E0FACFE6 +:103A100064E18FE0F7CF67E185E1F4CF62E289E10D +:103A2000F1CF61E083E2C1CF4BE5E4164DE5F4064A +:103A300011F15CE5E5165DE5F50609F0D3C280916C +:103A4000D60282FB882780F991E089270E94B70E71 +:103A5000C9C20E9447168FEF94E3ECE0815090407A +:103A6000E040E1F700C000000E94D10C0E94D01598 +:103A700049CC81E0EBCF80E0E9CFC7010E94550B34 +:103A8000D82EBFC22F2D2F70C22E8F2D807F19F000 +:103A9000C29490EFC922DD20C9F0CC2069F080E209 +:103AA0008E0D883010F081100BC080915802C82A0A +:103AB000C09258020E94A70A8E2D0E94F50C19C0D0 +:103AC00080915702C82AC0925702F4CF8E2D0E94CF +:103AD000E10BCC2071F0C09480E28E0D883010F0A4 +:103AE00081103EC080915802C822C09258020E94A4 +:103AF000A70AE92DE850FF0B349720F40E94C00676 +:103B00000E94A114AA2009F4C0CB8091550280FD27 +:103B1000BCCBF80112828595859585950E949015FC +:103B2000C8010E9423198091550285958595859538 +:103B30000F900F900F900F900F90DF91CF911F91EA +:103B40000F91FF90EF90DF90CF90BF90AF909F903C +:103B50008F907F906F905F904F903F900C94631583 +:103B600080915702C822C0925702C1CF3F2D3F70AB +:103B7000B32E8F2D807F803219F0B29480EFB8225F +:103B8000882071F041E0841681F1DD20D9F1CC204C +:103B900091F1F801858180FF8FCF8F7085832BC0D5 +:103BA000DD20B1F0909159028B2D892BC11003C0FB +:103BB0000E94D70B9ECF51E0C512FACF2091D602BA +:103BC00022FD97CF981709F494CF8093590291CF93 +:103BD000C11006C00E94A10A8B2D0E94CC0B89CF78 +:103BE00081E0C81609F485CFF5CFDD2031F095E0EE +:103BF0009C1508F47ECF8B2DDBCFE4E0EC1508F4A8 +:103C000078CFEACFCC2041F3F9E38F1209C02FEF30 +:103C100037EE43E0215030404040E1F700C0000063 +:103C20008E2D0E94E10B65CF8F2D86958695837032 +:103C300061F0813009F05DCFC7019370D11002C0EF +:103C400090E080E00E94940654CFC7019370D11099 +:103C500002C090E080E00E94AA064BCF8E2DDD20AE +:103C600029F00E9463080E94810743CF0E94A807A1 +:103C7000FACF8F2D837009F040C0D1103ACF4E2D6E +:103C8000429546954770440F440F8E2D8F7090E0FB +:103C9000042E02C0880F991F0A94E2F730E020E05A +:103CA000E4FE09C02FE030E002C0220F331F4A9526 +:103CB000E2F7209530954F2D46954695437042305A +:103CC00099F078F460915A0270915B02413039F0BA +:103CD000822B932B862397230E94C60B0ACF862B19 +:103CE000972B822B932BF8CF822B932B20915A0268 +:103CF00030915B0282279327EFCF8695DD2011F06C +:103D00008F2D8170882309F4F4CE4E2D429546956F +:103D10004770440F440F8E2D8F7090E0042E02C028 +:103D2000880F991F0A94E2F730E020E0E4FE09C012 +:103D30002FE030E002C0220F331F4A95E2F72095B2 +:103D400030954F2D469546954370423099F078F462 +:103D50006091090370910A03413039F0822B932B53 +:103D6000862397230E944C15C4CE862B972B822B3B +:103D7000932BF8CF822B932B2091090330910A03C8 +:103D800082279327EFCF5F2D5F70F52EDD2029F07E +:103D9000852F0E9490158E2D0BCF8E2D0E94CC0B5F +:103DA0008F2D0E946315A5CE8E2D92EF891609F4F2 +:103DB00049C0981570F0E0EF8E1639F1F1EF8F16CB +:103DC000C9F1DD2009F45FC0C11076CE8F2D8F714F +:103DD00036C023EF8216D9F134EF8312F2CFDD2003 +:103DE00009F446C0FF2DFF71FF2E8F2F0E94901502 +:103DF0008091D60282FD07C028E0F29EC001112406 +:103E00008360809355028F2D1AC0DD2071F044E04D +:103E10004C1508F46ECE2F2D2F7181E090E002C07A +:103E2000880F991F2A95E2F7A7CF55E05C1508F493 +:103E300060CEF1CF8F2D8F71DD2009F4B2CF0E94BB +:103E4000901557CE8F2D8F71DD20C9F3AACF90E04A +:103E500080E0DD2009F486CF9F2D9F7121E030E0C6 +:103E6000F90102C0EE0FFF1F9A95E2F7CF017ACF5A +:103E700081E00E94741531E03C1508F03ACE82E0F2 +:103E80000E94741536CECC2059F0893309F0C8CE83 +:103E90004FEF57EE83E0415050408040E1F7BECEF7 +:103EA0008F2D8F717ECFF0E1EF16FFE5FF0609F44D +:103EB00022CB21E1E2162FE5F20609F426CB42E8F7 +:103EC000E4164FE5F40609F4E0CB08F020CB90E8C7 +:103ED000E9169FE5F90609F450CBE1E8EE16EFE5A7 +:103EE000FE0609F4B5CB33EFE3163CE5F30609F41F +:103EF00012CC08F0FCCB58EDE5165CE5F50609F4AC +:103F000006CC89EDE8168CE5F80609F410CC97ED9F +:103F1000E9169CE5F90609F046CB26E241EE61EE92 +:103F2000C8010E94C70DEEC930E1E3163FE5F30674 +:103F300009F4E7CA41E1E4164FE5F40609F0BFCF02 +:103F400082E0E0CA85E0DE01119601900D928A952B +:103F5000E1F7F801228189819A812111ADC90E947E +:103F6000550BF82EB1C9F6E1EF16FCE5FF06D1F5C9 +:103F7000809104028111F3CC89E20E94EC0AF3CB18 +:103F800082722CECE2162CE5F20609F431CD08F031 +:103F9000A7C046ECE4164CE5F40609F415CD08F08C +:103FA00076C093ECE9169CE5F90609F401CD08F01A +:103FB0005DC0F2ECEF16FCE5FF0609F4D2CCEAE5B1 +:103FC000EE16EDE5FE0609F454CD08F02DCDE11412 +:103FD0002CE5F20609F43DCD3EEDE3163CE5F30693 +:103FE00009F444CDF8018281E080F180882309F44E +:103FF00044CDC7010E94040FD82E682FC7010E942C +:104000007D0BB7018D2D0E94F70E0E9419097C01CE +:10401000882EF801D280C580C2943FE0C3228091EF +:1040200055028770A1F0AD2CDD2091F08F2D807F9F +:10403000803421F080E28E0D883048F082E00E94CA +:104040007415809155028770AA24A3948111A12C24 +:104050009F2C92942FE09222FBE0F91508F449CDB1 +:10406000E92DF0E0EF59F14D0C94702D24ECE2169F +:104070002CE5F20609F4A3CC4CE054E165E174E1CF +:1040800035ECE3163CE5F30609F496CC98CF49EC01 +:10409000E4164CE5F40609F4A1CC88F497ECE91693 +:1040A0009CE5F90609F495CC40E054E164EF73E136 +:1040B000E8ECEE16ECE5FE0609F47ECC80CFFAECD7 +:1040C000EF16FCE5FF0609F48ECC4EE154E16FE2F9 +:1040D00074E12BECE2162CE5F20609F46DCC6FCFFF +:1040E00031EDE3163CE5F30609F492CCB8F45EEC4E +:1040F000E5165CE5F50609F483CC08F47ECC9FEC6C +:10410000E9169CE5F90609F480CC6EE089E0E0ED63 +:10411000EE16ECE5FE0609F475CC51CFF4EDEF1682 +:10412000FCE5FF0609F47ACC78F432EDE3163CE5C1 +:10413000F30609F470CC61E088E143EDE4164CE548 +:10414000F40609F432CC3BCF55EDE5165CE5F506F7 +:1041500009F467CC8DE5E816F80609F4D3C82FCF2B +:104160001F93CF93DF9380912202807FA9F48091E7 +:104170001F02882389F080915402D091230260911C +:104180001D0270911E02A0912002B0912102C62F43 +:10419000C72316E0D81304C0DF91CF911F91089573 +:1041A00090E0109711F0CF3F19F401968770F2CF8D +:1041B000189F9001199F300D1124F901EC5DFD4FFE +:1041C00041814713F2CF40814613EFCF4281411125 +:1041D000ECCF438154814A1B5B0B483C510528F7C7 +:1041E000809122028F70806180932202F901E75D45 +:1041F000FD4F80818F70806180838DE192E00E940D +:104200002319DF91CF911F910C944B0BAF92BF926A +:10421000CF92DF92EF92FF920F931F93CF93DF9392 +:10422000CDB7DEB761970FB6F894DEBF0FBECDBF36 +:104230008C0185E0F801DE011D9601900D928A95B2 +:10424000E1F7F801E2808DE1A82E82E0B82E6091BE +:104250002002709121026115710509F432C190911B +:104260001D0240911E02892F84238F3F09F429C12A +:1042700020813181C380D480F0901F02F601E61BBB +:10428000F70BFF2009F4E8C080912202582F507FDD +:10429000E83CF10508F0ABC0511177C0FE2C431388 +:1042A00021C092131FC0E1101DC08F7080618093E8 +:1042B0002202C5010E94231980912202F801858300 +:1042C0008F2D61960FB6F894DEBF0FBECDBFDF9184 +:1042D000CF911F910F91FF90EF90DF90CF90BF9003 +:1042E000AF900895CD2829F0822F83238F3F09F0C6 +:1042F00003C180E0F82FF170DF2E80FF3CC0809179 +:1043000054024091230256E0841315C02D873E8746 +:104310008D859E850E94400F292F22952F70223077 +:10432000F0F0243018F59F70F1F0F8019581907F3E +:10433000D1F4D12C1EC090E0589FF001599FF00D90 +:104340001124EC5DFD4F6181361306C06081261398 +:1043500003C06281E6120FC001968770D5CF9F70AF +:1043600011F0882331F3805E883018F3C8010E9471 +:104370002319FD2CA5CFEE2009F4A2CF80912202B3 +:10438000816080932202F12C9BCF431306C09213CD +:1043900004C0F801EE2009F479C0C8010E944C0F56 +:1043A000882309F1EE20F9F080912202803270F02A +:1043B00020911D0230911E0238872F831986DB86DB +:1043C000CA868C87CE0107960E94231986E0F801E1 +:1043D000ADE1B2E001900D928A95E1F70E94B02024 +:1043E000FF24F3946DCFC8010E942319F9CF511116 +:1043F0000AC08DE192E00E94231986E0F501119236 +:104400008A95E9F7C0CF43130FC092130DC0E11096 +:104410000BC0F8018583C8010E94231986E0F501CD +:1044200011928A95E9F74CCFC8010E944C0F88235E +:10443000D1F2EE20C1F280912202803238F2209136 +:104440001D0230911E023A8329831B82DD82CC82B9 +:104450008E83CE010196B8CFE83CF105F8F6FE2C2C +:10446000EE2009F243131FC092131DC08091220257 +:1044700080FD10C0982F907F69F0F8018583903FF0 +:1044800031F0982F907F905F8F70892B8583C801C2 +:104490000E94231986E0F801ADE1B2E001900D928F +:1044A0008A95E1F70DCFC8010E944C0F81118ECF84 +:1044B00080912202816080932202C8010E94231908 +:1044C000FFCEEE2009F48FCFC8010E944C0FF82ECA +:1044D000882309F488CF86E0F801ADE1B2E00190CD +:1044E0000D928A95E1F780911D0290911E020E9423 +:1044F000400F0E94B020E4CE81E08E25FBCE1F93BA +:10450000CF93DF93CDB7DEB767970FB6F894DEBFD2 +:104510000FBECDBF4B8B5C8B6D8B7E8B8F8B6111F8 +:10452000109257021A8A198A85E0FE017396DE01FD +:104530001D9601900D928A95E1F786E0FE013D9669 +:10454000DE01179601900D928A95E1F7CE0107964C +:104550000E940621882389F016E0809154029091F0 +:104560002302891349C067960FB6F894DEBF0FBEC9 +:10457000CDBFDF91CF911F91089586E0FE01379660 +:10458000DE01119601900D928A95E1F78A859B854F +:10459000892B11F38F81988589238F3FE9F2209130 +:1045A000230230E0C9010196877099274091540297 +:1045B0004817190671F40E944716109223021092B0 +:1045C000540286E0EDE1F2E0DF011D928A95E9F701 +:1045D000C3CF96E0929FD001939FB00D1124AC5DA4 +:1045E000BD4FFE01319601900D929A95E1F78093AF +:1045F00023020E944B0BB0CF819FC00111248C5D20 +:104600009D4F0E940621882309F4ADCF809154026A +:1046100090E0019687709927809354029ECF6F9205 +:104620007F928F929F92AF92BF92CF92DF92EF9242 +:10463000FF920F931F93CF93DF93CDB7DEB72D97E4 +:104640000FB6F894DEBF0FBECDBF8E010F5F1F4FB8 +:1046500088E0F80111928A95E9F74FE4E42E41E0F1 +:10466000F42E680153E5652E51E0752E882483945D +:10467000912CF70181917F018F3F09F44BC0F89491 +:10468000E82FE295EF70F0E021A18F70A40102C045 +:10469000440F551F8A95E2F7CA01922F982B91A3D8 +:1046A00092A18095892382A3789400C0E3E5F1E08C +:1046B00030E020E0B12CA12C81918F3F09F47CC027 +:1046C000A82FA295AF70B0E090964C9150E08F70FB +:1046D00002C0559547958A95E2F740FD6DC0C4012B +:1046E000022E02C0880F991F0A94E2F7A82AB92A5D +:1046F0002F5F3F4F2C303105F9F6F701319780815C +:104700008F3F11F00E94BF0850EA5A95F1F7F60169 +:10471000B182A082F2E0CF0ED11C6E147F0409F0AA +:10472000A8CF48E050E0B8018EE692E00E94AE2D9E +:10473000CC24C394009709F4C12C892B09F43FC001 +:1047400088E0F801AEE6B2E001900D928A95E1F7BB +:1047500081E080935E020E94880690935D028093C0 +:104760005C0280915C0290915D020E94790605973F +:1047700050F180916E0290916F029093A702809306 +:10478000A60280917002909171029093A902809389 +:10479000A80280917202909173029093AB02809371 +:1047A000AA0280917402909175029093AD02809359 +:1047B000AC0210925E0207C090E080E097CF80913B +:1047C0005E028111CECF80916D02882371F08091BD +:1047D0006B0290916C020E947906893E934028F00A +:1047E00082EE0E94E10B10926D0280916A02882392 +:1047F00099F18091690281112FC080916702909197 +:1048000068020E94790681369A4E78F0809165029E +:1048100090916602019690936602809365020E94D1 +:104820008806909368028093670280916502909158 +:1048300066024F9788F010921A018AE280931B015A +:1048400080931C018FE00E947B1481E080936902B9 +:10485000109266021092650238E7E32E32E0F32EE2 +:1048600010E000E0BB24B394F701D1907F01DD207C +:1048700051F10115110509F058C0B09263020E9470 +:1048800088069093600280935F02D694C801880FD7 +:10489000991FDD2009F456C08F589E4FFC0180817E +:1048A00091819A8789871B860E9488068160782F6C +:1048B0009D878C87F7013197108249855A856B85D2 +:1048C0008D850E947F220F5F1F4F0930110561F611 +:1048D000109164028091630211115DC08823A9F1D7 +:1048E00010921A0184E080931B0180931C018FE0D9 +:1048F0000E947B141092630281E0809364028C2DED +:104900002D960FB6F894DEBF0FBECDBFDF91CF91CD +:104910001F910F91FF90EF90DF90CF90BF90AF90DD +:104920009F908F907F906F9008950530110519F436 +:10493000B0926202A4CF0630110509F0A6CFB09262 +:1049400061029DCF815A9E4FA9CF80916202882338 +:1049500079F086E180931A018AE180931B0184E05B +:1049600080931C018FE00E947B1410926202C4CFDE +:10497000809161028823A9F08AE180931A018EE177 +:1049800080931B0184E080931C018FE00E947B14C4 +:1049900010926102B1CF81112BC08091620281110E +:1049A00027C080916102811123C080915F029091A4 +:1049B00060020E947906853F9140D0F0112379F082 +:1049C00010921A018AE280931B0180931C0181E2FC +:1049D0000E947B1480916A0281110E94AD10109296 +:1049E000630210926202109261021092640287CFF9 +:1049F00010926302109262021092610280CF1F92A5 +:104A00000F920FB60F9211242F933F934F935F9302 +:104A10006F937F938F939F93AF93BF93CF93DF93C6 +:104A2000EF93FF93D091E900DF708091EC00C82FE5 +:104A3000C17080FDC0E81092E9008091F000877F8E +:104A40008093F00078940E945C161092E9008091A7 +:104A5000F00088608093F000CD2BCF70C093E90008 +:104A6000FF91EF91DF91CF91BF91AF919F918F9186 +:104A70007F916F915F914F913F912F910F900FBE5A +:104A80000F901F9018951F920F920FB60F9211243E +:104A90002F933F934F935F936F937F938F939F9346 +:104AA000AF93BF93EF93FF938091E10082FF09C022 +:104AB0008091E20082FF05C08091E1008B7F8093AE +:104AC000E1008091DA0080FF24C08091D80080FF4F +:104AD00020C08091DA008E7F8093DA008091D90027 +:104AE00080FF9BC088E189BD8AE189BD09B400FED1 +:104AF000FDCF81E08093FF028091DA02811109C02D +:104B00000E94EC040E94B7058091E20084608093CB +:104B1000E2008091E10080FF17C08091E20080FFF9 +:104B200013C08091E2008E7F8093E2008091E200CA +:104B300080618093E2008091D80080628093D800E9 +:104B400019BC85E08093FF028091E10084FF29C0B9 +:104B50008091E20084FF25C088E189BD8AE189BD9A +:104B600089B5982F917080FFFBCF8091D8008F7D01 +:104B70008093D8008091E1008F7E8093E100809146 +:104B8000E2008F7E8093E2008091E200816080935A +:104B9000E20080910003882309F445C084E08093FB +:104BA000FF028091E10083FF27C08091E20083FF34 +:104BB00023C08091E100877F8093E10082E08093B1 +:104BC000FF02109200038091E1008E7F8093E1004C +:104BD0008091E2008E7F8093E2008091E20080610C +:104BE0008093E20042E060E080E00E9485058091D1 +:104BF000F00088608093F000FF91EF91BF91AF913A +:104C00009F918F917F916F915F914F913F912F91E4 +:104C10000F900FBE0F901F90189519BC1092FF02B5 +:104C20001092DA0276CF8091E30087FD93E09093B3 +:104C3000FF02B7CF78941F921FB61F9211248F9353 +:104C40009F93AF93BF938091D1029091D202A09194 +:104C5000D302B091D4020196A11DB11D8093D1025F +:104C60009093D202A093D302B093D402BF91AF919C +:104C70009F918F911F901FBE1F9018951F921FB676 +:104C80001F9211248F939F93AF93BF938091D00273 +:104C9000811113C08091D1029091D202A091D302D0 +:104CA000B091D4024196A11DB11D8093D102909381 +:104CB000D202A093D302B093D402BF91AF919F913F +:104CC0008F911F901FBE1F901895CDB7DEB7E0974C +:104CD0000FB6F894DEBF0FBECDBF84B7877F84BF09 +:104CE0000FB6F894A8958091600088618093600069 +:104CF000109260000FBE80E890E00FB6F8948093A9 +:104D00006100909361000FBE85B7806885BF85B74D +:104D1000806885BF8DEB98E09093E3018093E2017A +:104D20000E94EC040E94B7058091E20084608093A9 +:104D3000E20078948091FF028823A1F01091E900AD +:104D40001F709091EC00892F817090FD80E8182BE6 +:104D50001092E9008091E80083FD0E945C161F70AC +:104D60001093E90082E084BD93E095BD9AEF97BD72 +:104D700080936E000E94730F811102C00E94A80EE2 +:104D800080EF0E94BF0881EF0E94BF0882EF0E945F +:104D9000BF0883EF0E94BF0803E511E0FFE5EF2E97 +:104DA000F1E0FF2ED8018D918D018F3F11F00E940F +:104DB000BF08E016F106B1F710926F0210926E0272 +:104DC0001092A7021092A602109271021092700225 +:104DD0001092A9021092A80210927302109272020D +:104DE0001092AB021092AA021092750210927402F5 +:104DF0001092AD021092AC020E943C16811102C0CA +:104E00000E94D01582E090E00E94BB2D80939D020D +:104E10000E948C0F9093D6028093D5020E940F239C +:104E2000EFE3FCE93197F1F700C000000E940F2387 +:104E30008091A60280FF08C06FEF7FEF90E080E0D6 +:104E40000E94ED2D0E94D10C83E090E00E94BB2DCA +:104E500090E00E94C60B8091090390910A030E9482 +:104E6000B91480917602811132C00E943C168111E2 +:104E700004C00E94D0150E94C01588E090E00E94F6 +:104E8000C32D6093890370938A0380938B0390935F +:104E90008C036E7F71F40E94C01588E090E00E9440 +:104EA000C32D6093890370938A0380938B0390933F +:104EB0008C030E94D2061092C5028091890380FF64 +:104EC00003C086950E947B1481E0809376026EEA8F +:104ED00071E0E3E98E2EE2E09E2E2CE931E0E5EA76 +:104EE000F1E041E050E01191812F82958F7090E0C8 +:104EF000DC019196FC9091971F70E12E6A0101C030 +:104F0000CC0C1A95EAF70C2D00950F2191960C9375 +:104F1000919792961C9192971C2992961C93D90175 +:104F2000FD909D010F2D02950F7010E0D801919614 +:104F3000BC90BF2DBF70FB2E6A0101C0CC0CBA958E +:104F4000EAF7DC2CD094DB20D8019196DC92919783 +:104F50009296DC909297DC289296DC92DC019096F7 +:104F60008C9190E002C095958795EA94E2F7817064 +:104F7000D80190960C9110E002C015950795FA940F +:104F8000E2F790E000FD92E0892BD4018D934D0172 +:104F90006E177F0709F0A7CF86EA92E09093BD02D3 +:104FA0008093BC0281E20E947B1481E090E00E9429 +:104FB0004C1580E091E09093CD028093CC0258E1B3 +:104FC000252E312C8091FF02FF24F39408E11AE191 +:104FD000853009F4B3C20E940F23882359F08FB79C +:104FE000F8944091D1025091D2026091D302709115 +:104FF000D4028FBFA6EAB2E0EEE9F2E010E000E0F2 +:10500000702F8D919D91219131912817390709F4C5 +:10501000BEC22827392760E0EE24E394F12CA901D1 +:105020004E215F21452B09F4ACC269A37AA39C01F0 +:105030002E213F2191E0232B09F490E09BA30E94B5 +:1050400088068160782F9DA38CA349A15AA16BA1EA +:105050008DA10E947F22000F111FF801E256FD4F23 +:1050600080819181E826F926F182E0828091C50253 +:105070008823D1F18091C402E0918903E695E81B71 +:10508000E093C002823009F099C2F0E0EC53FD4F8A +:10509000E4910E2F10E024E2E22E23E1F22E809123 +:1050A000C102882361F01092C1020E948806909389 +:1050B000BF028093BE021092C3021092C2020E94ED +:1050C0008806E091BE02F091BF028E1B9F0B8F3FBE +:1050D0009F4750F4E00FF11FF093BF02E093BE0230 +:1050E0008EEB92E0F70109953AE8E32E32E0F32ED9 +:1050F00001E812E048E7842E42E0942E83E991E033 +:105100009CA78BA7D12CC12CACE9B1E0BEA7ADA761 +:10511000E5EAF1E0F8ABEFA753E9652E52E0752E12 +:10512000512C44244394D301ED913D01EE0FEE0F39 +:10513000AFA5B8A92D91B8ABAFA7A22FA295AF701C +:10514000B0E090968C9190E02F7002C09595879575 +:105150002A95E2F781709927ADA5BEA54D91BEA70E +:10516000ADA7A42FA295AF70B0E090962C9130E03F +:105170004F7002C0359527954A95E2F7A901417015 +:10518000552720FF02C042E050E0842BE82BD301DA +:105190001197EC93ABA5BCA5AD90BCA7ABA7EF70E6 +:1051A000F0E0ED57FE4F8081F7019081890F8083F9 +:1051B000B12C082E000C990B20E08A159B05DCF021 +:1051C000D8018C918F5F8C93F601E15AFE4F80815C +:1051D00091819A8389834B820E9488068160782F0F +:1051E0009D838C83F401408249815A816B818D813A +:1051F0000E947F2221E0D7018C91082E000C990B90 +:10520000442755274A195B0948175907E4F0F80164 +:10521000808181508083F601EF58FE4F808191811B +:105220009A8389834B820E9488068160782F9D83B0 +:105230008C83E2E0D401EC9349815A816B818D81AA +:105240000E947F2221E0D7018C91082E000C990B3F +:10525000B5010E945C2DF70181937F01522A0F5FF7 +:105260001F4FFFEF8F1A9F0A22E0C20ED11C42E1AE +:10527000C416D10409F057CF552059F08FB7F894D0 +:105280004091D1025091D2026091D3027091D40228 +:105290008FBF86E0E5EBF2E0DE01119601900D9202 +:1052A0008A95E1F7F090B702E090B8021091B90248 +:1052B0000091BA021092B7021092B8021092B9028D +:1052C0001092BA028F2D8E2909F448C08091B30242 +:1052D0009091B4020E9479069C019091AF029923AB +:1052E00009F4C3C323333105C8F19F3F19F09F5F11 +:1052F0009093AF02FF2059F00E9443089FEF1F14C4 +:105300000CF491E0899F802D11248093B702EE2048 +:1053100059F00E9443089FEF1E140CF491E0899FFE +:10532000802D11248093B8023091B7023323B1F05D +:105330002091B802222391F045EB3403C0011124DF +:10534000992309F495C19093B70245EB240390018A +:105350001124332309F490C13093B802812F802B9C +:1053600009F448C08091B1029091B2020E9479067E +:105370009C019091AE02992309F472C32536310540 +:10538000C8F19F3F19F09F5F9093AE02112359F02F +:105390000E9421089FEF11160CF491E0899F802D47 +:1053A00011248093B902002359F00E9421089FEF35 +:1053B00010160CF491E0899F802D11248093BA027D +:1053C0003091B9023323B1F02091BA02222391F037 +:1053D00045EB3403C0011124992309F451C1909382 +:1053E000B90245EB240390011124332309F44CC185 +:1053F0003093BA028091B7029091B802892B9091B4 +:10540000B902892B9091BA02892B11F00E94810771 +:1054100086E0FE013196A5EBB2E001900D928A95EF +:10542000E1F70E94C00690919C02891731F00E941A +:10543000C00680939C020E94A1148091FF028430D8 +:1054400009F0C0CD83E08093E9008091E80082FFFD +:10545000B9CD8091E80090E085FF06C00E940B0561 +:10546000882309F415C191E08091E8008B7780933F +:10547000E800992309F4A6CDE981E150E33108F071 +:105480009BC1F0E0E359F14D0C94702D8091FF0227 +:10549000843009F441C080E00E94A1141092C5023A +:1054A0008091BB02811116C0F092BB0280918903EA +:1054B000982F9170909377028E7F80938903BFEF2E +:1054C000E0E7F2E0B150E040F040E1F700C000005A +:1054D0000E94B00F1092D00220E40FB6F894A89565 +:1054E000209260000FBE2093600083B7817F8460AC +:1054F00083BF83B7816083BF7894889583B78E7F9D +:1055000083BF0FB6F894A89580916000886180935E +:105510006000109260000FBE8091FE02882371F03F +:105520000E940F23E6EAF2E081919191892B09F024 +:1055300078C28EEA92E08E179F07B1F78091FF0242 +:10554000853009F4A3CF0E9447160E94C0060E942E +:10555000A1141092BB0280917702882359F08091A8 +:10556000890381608093890386950E947B140E9441 +:105570009A0F31CD8091C6028823C9F30E94B00FE3 +:10558000F6CF6F5FEE0CFF1C6C3009F048CD0F5F5B +:105590001F4F0430110509F033CD8FEF8EA38FA379 +:1055A00018A60E9488068160782F9AA789A74EA125 +:1055B0005FA168A58AA50E947F2258CD863059F444 +:1055C000F0E0EF53FD4FE4910E2F10E094E1E92E4F +:1055D00093E1F92E64CD893061F4E695F0E0E25470 +:1055E000FD4FE4910E2F10E085E6E82E82E1F82EC3 +:1055F00056CD8F3061F4E695F0E0E554FD4FE4912F +:105600000E2F10E0B0E1EB2EB2E1FB2E48CD85313C +:1056100059F4F0E0E854FD4FE4910E2F10E0ADE9AD +:10562000EA2EA1E1FA2E3BCD08E210E07DE0E72E64 +:1056300071E1F72E883109F432CD833249F4E6EB7B +:10564000F2E005911491FBEBEF2EF2E1FF2E27CD56 +:1056500004EF11E0E0EDEE2EE0E1FE2E843209F4DD +:105660001ECD00ED17E061EDE62E66E0F62E17CDBB +:1056700081E08093B70269CE81E08093B8026ECE5C +:1056800081E08093B902ADCE81E08093BA02B2CEC0 +:1056900000E210E0CE0101967C018091E80085FDDA +:1056A0000AC08091E8008B778093E8000E940B0588 +:1056B000882399F3D8CE8091F100D7018D937D0195 +:1056C0000150110951F7CFCE1A8289E08B833FC078 +:1056D0008A81823009F4BBC18330A9F0813009F09E +:1056E0006BC02FB7F8946091D1027091D202809173 +:1056F000D3029091D4022FBF0E94762D6B837C83BE +:105700008D839E8324C08091A6029091A702982742 +:10571000892798279C838B838091A8029091A90266 +:105720009827892798279E838D838091AA0290913C +:10573000AB0298278927982798878F838091AC029E +:105740009091AD029827892798279A878987809119 +:10575000FF02843009F036CC1091E9001F7090915F +:10576000EC00892F817090FD80E8182B82E08093F7 +:10577000E9008091E80080FF0DC050E040E060E269 +:1057800070E0CE0101960E943C058091E8008E7782 +:105790008093E8001F701093E90014CC8A81823056 +:1057A00059F46B817C818D819E810E94762D86E2E9 +:1057B00090E00E94CF2DCBCF8FEF8983C8CF4C8153 +:1057C0006B818A810E94D10E9827892798279E8312 +:1057D0008D83BDCFED80FE80FE24EF24FE248A81E0 +:1057E0000B81B8E10B9F80011124E0E68E9F000D34 +:1057F000111D11248C8190E0880F991F080F191F2B +:105800006F2DC80187960E94CF2D6E2DC8018896F6 +:10581000D0CF0E943B0E9BCF8A818138C1F060F4CB +:10582000803809F094CF20E04B8160918B03809108 +:105830008A030E944A138BCF823849F1833809F0DA +:1058400086CF20E040918C036C818B81F2CF8B81DD +:105850000E947B149B8180918903911111C08E7FDE +:10586000809389031092C502FFEF20E742E0F150D8 +:1058700020404040E1F700C000000E94B00F67CF19 +:1058800081608093890386950E947B1460CF8B8111 +:1058900080938D035CCF8A81813899F030F4803811 +:1058A00009F055CF80918C0311CF823891F0833865 +:1058B00009F04DCF80918A038B8380918B038C8379 +:1058C00046CF8091890380FF02C08695FFCE80E09D +:1058D000FDCE80918D03FACE6091890370918A0389 +:1058E00080918B0390918C030E94381330CF80E11C +:1058F0008A832DCF84E08A8389E1E8CE0A811B81E7 +:10590000102701271027CE0101966C01EC80DC01E5 +:10591000AE0DB11D7D01C80189519C4FEC14FD04F1 +:1059200009F415CF0931B4E01B0750F40E94BB2DD8 +:10593000F60184830F5F1F4FBFEFCB1ADB0AEBCF5B +:10594000D60114961C92F6CF0A811B8110270127DD +:105950001027FE0131966F01EC80E00EF12EF11C54 +:10596000C80189519C4FE016F10609F4F0CE0931C7 +:10597000F4E01F0728F4D60114966C910E94CF2DF5 +:10598000BFEFCB1ADB0A0F5F1F4FEACF0E942B0E2F +:10599000DECE8AE0ADCF0A811B81102701271027B8 +:1059A000FE0131966F01EC80CF018E0D911D7C01BF +:1059B000C8018796EC14FD0409F4C9CE003CA3E0AD +:1059C0001A0750F40E94BB2DF60184830F5F1F4F0E +:1059D000BFEFCB1ADB0AECCFD60114961C92F6CFA0 +:1059E0000A811B81102701271027FE0131966F01C4 +:1059F000EC80E00EF12EF11CC8018796E016F1064E +:105A000009F4A5CE003CF3E01F0728F4D601149654 +:105A10006C910E94CF2DBFEFCB1ADB0A0F5F1F4F97 +:105A2000EBCF09BD19BD09B400FEFDCF8091D800B0 +:105A30008F7D8093D8008091E00082608093E000A9 +:105A40008091E00081FDFCCF0E94471677CD86E271 +:105A500090E00E94BB2D1B821C821D828E8377CE1C +:105A60002D32314008F08FCCC5CC2D32314008F0BA +:105A70003ECC74CC87FB082E062687FD819567FDFA +:105A800061950E948C2D0EF4919507FC81950895E7 +:105A9000AA1BBB1B51E107C0AA1FBB1FA617B70754 +:105AA00010F0A61BB70B881F991F5A95A9F7809570 +:105AB0009095BC01CD01089597FB072E16F4009434 +:105AC00007D077FD09D00E94482D07FC05D03EF491 +:105AD000909581959F4F0895709561957F4F08959A +:105AE000EE0FFF1F0590F491E02D0994692796278A +:105AF000692778278727782708950E94382E33232F +:105B000012F48A1B9B0B0C94872D0E94382EB7FF32 +:105B10000895821B930B0895991B79E004C0991F87 +:105B2000961708F0961B881F7A95C9F780950895F7 +:105B3000FB01DC0102C005900D9241505040D8F7A6 +:105B40000895FC014150504030F001900616D1F705 +:105B50003197CF010895882799270895FB01DC012B +:105B600004C08D910190801921F441505040C8F734 +:105B7000881B990B0895F999FECF92BD81BDF89AC3 +:105B8000992780B50895A6E1B0E044E050E00C9478 +:105B9000F52DA8E1B0E042E050E00C94F52D262F61 +:105BA000F999FECF92BD81BDF89A019700B4021613 +:105BB00039F01FBA20BD0FB6F894FA9AF99A0FBEC1 +:105BC00008950396272F0E94D02D0E94CF2D252FB8 +:105BD0000E94D02D242F0C94D02D0196272F0E94A7 +:105BE000D02D0C94CF2DDC01CB01FC01F999FECF17 +:105BF00006C0F2BDE1BDF89A319600B40D92415055 +:105C00005040B8F708950E94382EA59F900DB49F7C +:105C1000900DA49F800D911D11240895B7FF0C9441 +:105C2000032E0E94032E821B930B0895A1E21A2ECD +:105C3000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F30 +:105C4000A217B307E407F50720F0A21BB30BE40B80 +:105C5000F50B661F771F881F991F1A9469F76095C7 +:105C60007095809590959B01AC01BD01CF01089581 +:105C7000A29FB001B39FC001A39F700D811D11248D +:105C8000911DB29F700D811D1124911D0895F894EE +:105C9000FFCF5E0F5E0F670F670F690F670F670F0C +:105CA000670F5E0F5E0F6E0F670F670F6E0F411766 +:105CB0006917BC176917BC179C17D417BC17D118E4 +:105CC000DE18421D421DB61DB61D141E2E1E791D66 +:105CD000791D391EC31ED41ED41E642B682BCE2BF7 +:105CE000DF2BEA2B092C0C2C4B2C6C2CDC2BDC2B0B +:105CF000772C7A2C7E2CA42CC62CC92CCB2CF02CE7 +:105D00007606910C700C6C0C680C01191A1B1C1D8A +:105D10001E1F202122010201002A002A2A0181825D +:105D200083E200E900EA00B500B600B700CD0083C9 +:105D300001CC008A01920194012102230224022550 +:105D400002260227022A02B300B4006F007000F09E +:105D5000F1F2F3F5F6F700010203040537363502D8 +:105D600000020102020B000B010B020B03050308EA +:105D700003000000010002090009010902090303F0 +:105D800003060300FF0100010000FFFF0000010007 +:105D900001FF000404040404040402026162646656 +:105DA00090929497066063656791939596070001BA +:105DB000020202020606060909090909090F0F0F66 +:105DC0000F0F0F151515181919191919191919196E +:105DD0001923244022B6B6019401DE00C808E10868 +:025DE0000109B7 :00000001FF From 956be50afae36c287623155e24b455e8c665fe02 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Mon, 8 Nov 2021 15:10:07 -0500 Subject: [PATCH 060/155] Correct file link (Courtesy of xen). Code cleanup for clarity. --- keyboards/solartempest/ps17/config.h | 2 +- .../solartempest/ps17/keymaps/via/keymap.c | 110 +- .../solartempest/ps17/ps17 VIA layout.json | 8 +- .../ps17/solartempest_ps17_via.hex | 3078 ++++++++--------- 4 files changed, 1541 insertions(+), 1657 deletions(-) diff --git a/keyboards/solartempest/ps17/config.h b/keyboards/solartempest/ps17/config.h index 25a2d3b89897..5baf2cc7f6b7 100644 --- a/keyboards/solartempest/ps17/config.h +++ b/keyboards/solartempest/ps17/config.h @@ -93,7 +93,7 @@ 27, 26, 25, 24, 23 ) #endif -#ifdef RGB_MATRIX_ENABLE // For dynamic RGB Matrix effects +#ifdef RGB_MATRIX_ENABLE // For dynamic/reactive RGB Matrix effects #define DRIVER_LED_TOTAL 28 // The number of LEDs connected for matrix, 17 key + 11 underglow #define RGB_MATRIX_CENTER { 126, 126 }; #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/solartempest/ps17/keymaps/via/keymap.c b/keyboards/solartempest/ps17/keymaps/via/keymap.c index c68c32710e5b..8077ca9122c8 100644 --- a/keyboards/solartempest/ps17/keymaps/via/keymap.c +++ b/keyboards/solartempest/ps17/keymaps/via/keymap.c @@ -17,7 +17,7 @@ */ #include QMK_KEYBOARD_H -#include "PS17.h" +#include "ps17.h" #ifdef RGBLIGHT_ENABLE extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT #endif @@ -25,9 +25,11 @@ bool is_alt_tab_active = false; // Super Alt Tab Code uint16_t alt_tab_timer = 0; + bool spam_arrow; uint16_t spam_timer = false; uint16_t spam_interval = 1000; // (1000ms == 1s) + bool teams_muted; #ifdef VIA_ENABLE enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. @@ -183,10 +185,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -void matrix_init_user(void) { //run when matrix is initiated, before all features init -}; - - void matrix_scan_user(void) { //run whenever user matrix is scanned if (is_alt_tab_active) { if (timer_elapsed(alt_tab_timer) > 1000) { @@ -196,8 +194,6 @@ void matrix_scan_user(void) { //run whenever user matrix is scanned } if (spam_arrow && timer_elapsed(spam_timer) >= spam_interval) { spam_timer = timer_read(); - //tap_code(KC_UP); - //tap_code(KC_DOWN); tap_code(KC_F24); } }; @@ -295,32 +291,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } -// RGB Layer Light Settings - Note that this will fix the key switch LED colour and brightness -const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Spring green (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 5,255,120}); //Yellow-orange (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); //Cyan (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); //Magenta (Code is extra for static key lighting of layers) -const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 15,255,120}); //Orange-red (Code is extra for static key lighting of layers) -const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers - my_layer0_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_layer4_layer -); - void keyboard_post_init_user(void) { //run as last task in keyboard init #ifdef RGB_MATRIX_ENABLE //NOTE 1: Layer lighting doesn't work in RGB matrix mode - //NOTE 2: VIA lighting tab doesn't work and will crash in RGB matrix mode + //NOTE 2: VIA lighting tab doesn't work and might crash in RGB matrix mode //NOTE 3: VIA layers doesn't seem to work properly in RGB matrix mode //rgb_matrix_enable_noeeprom(); //turn on RGB matrix based on previous state rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE); //set initial RGB matrix mode rgb_matrix_sethsv_noeeprom(50, 255, 100); //sets LED to green-yellow #endif #ifdef RGBLIGHT_ENABLE - rgblight_layers = my_rgb_layers;// Enable the LED layers + //rgblight_layers = my_rgb_layers;// Enable the LED layers rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 layer_move(0); //start on layer 0 to get the lighting activated #endif @@ -335,21 +317,6 @@ layer_state_t layer_state_set_user(layer_state_t state) { rgblight_set_layer_state(3, layer_state_cmp(state, 3)); rgblight_set_layer_state(4, layer_state_cmp(state, 4)); - /*static uint16_t underglow_brightness = 140; //This code can be used to have edge and underglow LEDs selectively brighter - static uint16_t perkey_brightness = 80; - static uint16_t lastrow_brightness = 50; //for less shine-through at case edges (brighter is okay for FR4 plate) - static uint16_t current_hue = 0; //hue calculated to be used - static uint16_t layer0_huestart = 56; //hue gradient starting colour - green/blue - static uint16_t layer0_hueincrement = 2; //hue gradient colour increment - static uint16_t layer1_huestart = 15; //hue gradient starting colour - orange/green - static uint16_t layer1_hueincrement = 2; //hue gradient colour increment - static uint16_t layer2_huestart = 220; //hue gradient starting colour - magenta/orange (this layer is for photoshop) - static uint16_t layer2_hueincrement = 2; //hue gradient colour increment - static uint16_t layer3_huestart = 135; //hue gradient starting colour - blue/purple - static uint16_t layer3_hueincrement = 2; //hue gradient colour increment - static uint16_t layer4_huestart = 30; //hue gradient starting colour - orange/red - static uint16_t layer4_hueincrement = 1; //hue gradient colour increment - */ // This is what the LED layout is. // 1, 0, // 3, 2, @@ -362,83 +329,18 @@ layer_state_t layer_state_set_user(layer_state_t state) { switch(biton32(state)){ // Change all other LEDs based on layer state as well case 0: rgblight_sethsv_noeeprom(50,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer0_hueincrement+layer0_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ + //You can selectively decrease certain LEDs if you are have a clear acrylic case and the shine-through bothers you. Rgblight_sethsv_at() can be used here for those LEDs (0, 2, 4, 14, and 23). Otherwise some black tape on the acrylic plate or foam underneath the FR4 will do the trick. break; case 1: rgblight_sethsv_noeeprom(5,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer1_hueincrement+layer1_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ - break; case 2: rgblight_sethsv_noeeprom(128,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer2_hueincrement+layer2_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ break; case 3: rgblight_sethsv_noeeprom(215,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer3_hueincrement+layer3_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ break; case 4: rgblight_sethsv_noeeprom(15,255,100); - /*for (uint8_t i = 0; i < RGBLED_NUM; i++){ //This code can be used to have edge and underglow LEDs selectively brighter - current_hue=i*layer4_hueincrement+layer4_huestart; //Determine the calculated hue - if(current_hue>255){current_hue=current_hue-255;}; //Roll over max hue of 256 - if (i == 1 || i == 3 || i == 9 || i == 18 || i == 25 || i == 27) { - rgblight_sethsv_at(current_hue,255,underglow_brightness,i); - } else if (i == 0 || i == 2 || i == 4 || i == 14 || i == 23) { //make right side of the numpad underglow darker - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else if (i == 26 || i == 24 || i == 19 || i ==10) { //make per key end LEDs lighter to reduce glare - rgblight_sethsv_at(current_hue,255,lastrow_brightness,i); - } else { - rgblight_sethsv_at(current_hue,255,perkey_brightness,i); - }; - };*/ break; } return state; diff --git a/keyboards/solartempest/ps17/ps17 VIA layout.json b/keyboards/solartempest/ps17/ps17 VIA layout.json index 6671cee90952..bdebf13b15c1 100644 --- a/keyboards/solartempest/ps17/ps17 VIA layout.json +++ b/keyboards/solartempest/ps17/ps17 VIA layout.json @@ -63,19 +63,19 @@ "TO(0)", "KC_WWW_REFRESH", "KC_WWW_HOME", - "C(S(KC_B))", + "C(S(KC_H))", "C(S(KC_TAB))", "KC_UP", "C(KC_TAB)", - "USER04", + "KC_CAPS", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_NO", "USER05", - "KC_TRNS", - "KC_SLCK", "KC_NLCK", + "KC_SLCK", + "USER04", "KC_F13", "KC_NO", "KC_F14", diff --git a/keyboards/solartempest/ps17/solartempest_ps17_via.hex b/keyboards/solartempest/ps17/solartempest_ps17_via.hex index ee4f5cf5db02..de3de60dfe06 100644 --- a/keyboards/solartempest/ps17/solartempest_ps17_via.hex +++ b/keyboards/solartempest/ps17/solartempest_ps17_via.hex @@ -1,1549 +1,1531 @@ -:100000000C94BD030C9404040C9404040C94040498 -:100010000C9404040C9404040C9404040C94040440 -:100020000C9404040C9404040C9477270C94332748 -:100030000C9472280C9404040C9404040C9404048E -:100040000C9404040C9404040C9404040C94040410 -:100050000C9404040C944E280C9404040C94040492 -:100060000C9404040C9404040C9404040C940404F0 -:100070000C9404040C9404040C9404040C940404E0 -:100080000C9404040C9404040C9404040C940404D0 -:100090000C9404040C9404040C9404040C940404C0 -:1000A0000C9404040C9404040C94040400000FFF4A -:1000B00078FF000000000000D7FF78FF000000007C -:1000C000000080FF64FF00000000000005FF78FFD3 -:1000D0000000000000005FFF5AFF00000000580011 -:1000E0006000000058005E00000058005D00000045 -:1000F00058005C00000057006000000057005F00DF -:10010000000005010902A10185020901A1000509FC -:1001100019012908150025019508750181020501BD -:10012000093009311581257F950275088106093846 -:100130001581257F950175088106050C0A38021581 -:1001400081257F950175088106C0C005010980A140 -:1001500001850319012AB700150126B7009501751D -:10016000108100C0050C0901A101850419012AA014 -:1001700002150126A002950175108100C005010934 -:1001800006A1018505050719E029E7150025019558 -:1001900008750181020507190029EF150025019551 -:1001A000F075018102050819012905950575019170 -:1001B00002950175039101C00660FF0961A1010963 -:1001C00062150026FF00952075088102096315005D -:1001D00026FF00952075089102C005010906A101BE -:1001E000050719E029E71500250195087501810229 -:1001F0009501750881010507190029FF150026FFE3 -:1002000000950675088100050819012905950575F1 -:10021000019102950175039101C0000000000000EA -:1002200000000000000000000000000000000000CE -:1002300000000000000000000000000000007E0F31 -:1002400000D4FFFFFFC7000000780000000000009E -:1002500000002A2B28000000000000000000000021 -:10026000000000000029000000002C1E3420212284 -:1002700024342627252E362D3738271E1F202122ED -:10028000232425263333362E37381F040506070866 -:10029000090A0B0C0D0E0F10111213141516171856 -:1002A000191A1B1C1D2F3130232D35040506070894 -:1002B000090A0B0C0D0E0F10111213141516171836 -:1002C000191A1B1C1D2F3130354CD400CA00C00038 -:1002D000B600AC00000000047F3F1F64321464329B -:1002E00014783C1E1E140A050001010101010101E0 -:1002F00001010202020202020202020303030303DB -:1003000003030304040404040404050505050506A9 -:100310000606060607070707070808080809090967 -:10032000090A0A0A0B0B0B0C0C0C0D0D0D0E0E0E10 -:100330000F0F0F10101111111212131314141515A1 -:1003400016161717181819191A1A1B1B1C1D1D1E13 -:100350001E1F202021222223242425262627282967 -:10036000292A2B2C2D2D2E2F303132323334353695 -:100370003738393A3B3C3D3E3F4041424344454695 -:100380004748494A4C4D4E4F505153545556585971 -:100390005A5B5D5E5F616264656668696B6C6D6F18 -:1003A0007072737577787A7B7D7E8082838587888B -:1003B0008A8C8E8F91939596989A9C9EA0A2A3A5C5 -:1003C000A7A9ABADAFB1B3B5B7BABCBEC0C2C4C6C6 -:1003D000C9CBCDCFD1D4D6D8DBDDDFE2E4E7E9EB82 -:1003E000EEF0F3F5F8FAFDFFFFAA7F554008070687 -:1003F000050D0C0B0A11100F161514131A181B12E9 -:100400000903010002040E17192223252628292A90 -:100410002C2D2F3032333536383A3B3D3E40424367 -:100420004547494A4C4E5051535557595A5C5E60A6 -:1004300062646668696B6D6F71737577797B7D7FB8 -:1004400081838587898A8C8E90929496989A9C9EB7 -:100450009FA1A3A5A7A8AAACAEAFB1B3B4B6B8B9D3 -:10046000BBBCBEBFC1C2C3C5C6C7C9CACBCCCDCE3B -:10047000D0D1D2D2D3D4D5D6D7D7D8D9D9DADADB1E -:10048000DBDBDCDCDCDCDCDDDDDDDDDCDCDCDCDCAA -:10049000DBDBDBDADAD9D9D8D7D7D6D5D4D3D2D2E9 -:1004A000D1D0CECDCCCBCAC9C7C6C5C3C2C1BFBED1 -:1004B000BCBBB9B8B6B4B3B1AFAEACAAA8A7A5A33C -:1004C000A19F9E9C9A98969492908E8C8A898785FB -:1004D00083817F7D7B79777573716F6D6B696866DA -:1004E0006462605E5C5A5957555351504E4C4A49AC -:1004F00047454342403E3D3B3A3836353332302F54 -:100500002D2C2A2928262523224E007F004B00006F -:100510000001515400550056005F00600061005713 -:10052000005C005D005E00000059005A005B00584E -:100530000062000000630000004F00010050000056 -:10054000000100AD002C0053001450025303532A45 -:100550000001000100010000000100010001000095 -:100560005C005C000001000000300001002F000072 -:100570000010500500170011030D00160007002D94 -:1005800001060119011000000011011D03E10057CF -:10059000012C000000E2000000805F0100815F008C -:1005A000001050B9004A0017012B0352002B011A0A -:1005B00001500051004F000000B6002C00B7002889 -:1005C000004E0000004B000000805F0100815F00D2 -:1005D0000010500100010001000100520001000163 -:1005E00000500051004F00000010033D080100536F -:1005F0000068000000690000000100010001000027 -:1006000000010001000100010001000100010001E2 -:1006100000010001000100000001000100010001D3 -:1006200000010000000100000001000100010000C5 -:1006300000010001000100010001000100010001B2 -:1006400000010001000100000001000100010001A3 -:100650000001000000010000000100010001000095 -:100660000001000100010001000100010001000182 -:100670000001000100010000000100010001000173 -:100680000001000000010000000100010001000065 -:100690000001000100010001000100010001000152 -:1006A0000001000100010000000100010001000143 -:1006B0000001000000010000000100010001000035 -:1006C0000001000100010001000100010001000122 -:1006D0000001000100010000000100010001000113 -:1006E00000010000000100000009025B000301009E -:1006F000A0FA090400000103010100092111010011 -:10070000012240000705810308000A0904010002D4 -:1007100003000000092111010001222200070582C7 -:100720000320000107050303200001090402000162 -:100730000300000009211101000122B60007058411 -:100740000320000A12010002000000084B411500BE -:100750000200010200010A0350005300310037007B -:1007600000001203410054004C0041004E005400B0 -:100770004900530000000403090411241FBECFEFF9 -:10078000DAE0DEBFCDBF04B603FE27C0809196033A -:1007900090919703A0919803B09199038730904B63 -:1007A000A740B04BD1F41092960310929703109289 -:1007B00098031092990314BE84B7877F84BF0FB645 -:1007C000F894A895809160008861809360001092F1 -:1007D00060000FBEE0E0F8E3099511E0A0E0B1E0B1 -:1007E000E4EEFFE502C005900D92A43CB107D9F7F5 -:1007F00023E0A4ECB1E001C01D92A639B207E1F7F5 -:100800000E9499280C94B92F0C940000E8EDF0E0B8 -:1008100080818E7F80831092E2001092DA00109225 -:10082000E100A0EEB0E08C9181608C9380818F77A5 -:10083000808319BCA7EDB0E08C918E7F8C93808172 -:100840008F7E80831092090308952091E4003091F7 -:10085000E50095E6A9012091EC00822F817020FF30 -:1008600006C08091E80080FF06C080E008952091D6 -:10087000E80022FD1AC080912E03882389F085307C -:1008800089F08091EB0085FD0FC02091E40030914C -:10089000E50042175307F9F29150E1F684E008951C -:1008A00082E0089583E0089581E00895EF92FF9239 -:1008B0000F931F93CF937C018B010E942504C82FB7 -:1008C000811117C08091E80085FD0BC08091E80080 -:1008D0008E778093E8000E942504882399F3C82F1F -:1008E00008C0F70181917F018093F1000150110947 -:1008F00049F78C2FCF911F910F91FF90EF900895A2 -:100900008091300387FF13C08091E80082FF06C00A -:100910008091E8008B778093E80004C080912E03DB -:100920008111F2CF089580912E038823D9F380910D -:10093000E80080FFF8CF8091E8008E77ECCF982F09 -:100940009093E900242F762F50E0891731F07091B1 -:10095000EC002091ED005091F00021FD07C09F5F59 -:10096000973071F78093E90081E008953091EB00B2 -:100970003E7F3093EB003091ED003D7F3093ED00F2 -:100980003091EB0031603093EB007093EC002093DA -:10099000ED005093F0002091EE0027FDE0CF80E0C5 -:1009A0000895CF92DF92EF92FF920F931F93CF9310 -:1009B000DF93C8EDD0E088818F7E8883E7EDF0E09B -:1009C00080818160808384E082BF81E0809309031D -:1009D00088818E7F888302EE10E0F80110821092E9 -:1009E000DA0081EEC82ED12CF601108288818F7733 -:1009F000888388818068888388818F7D888319BCFB -:100A000010922E0310922F0310922D0310922C039C -:100A100090EEE92EF12CF70180818B7F8083888115 -:100A20008160888342E060E080E00E949F04F601DC -:100A300080818E7F8083F8018081816080838081C6 -:100A400088608083F70180818E7F808388818061C8 -:100A50008883DF91CF911F910F91FF90EF90DF90EE -:100A6000CF900895FC01809136039091370386174B -:100A70009707A0F06115710529F49091E8009E7721 -:100A80009093E80090E06115710551F4911108C050 -:100A90008091E80082FF34C080E00895BC01F2CF6D -:100AA00080912E038823C1F18530C1F18091E80047 -:100AB00083FD30C08091E80082FDEACF8091E8009C -:100AC00080FFE1CF8091F3002091F200382F611573 -:100AD000710519F02830310558F091E028303105C2 -:100AE00009F090E02091E8002E772093E800CBCF2A -:100AF00081918093F100615071092F5F3F4FE7CFE3 -:100B000080912E03882341F0853041F08091E800E8 -:100B100083FFBECF81E0089582E0089583E00895C9 -:100B200080910B0308959C014FB7F89480910003C6 -:100B300090910103A0910203B09103034FBF821B68 -:100B4000930B08952FB7F8948091000390910103BF -:100B5000A0910203B09103032FBF08952091FD02DD -:100B60003091FE022817390771F09093FE028093AE -:100B7000FD02E091FB02F091FC02309721F000842D -:100B8000F185E02D099408952091F9023091FA023F -:100B90002817390771F09093FA028093F902E091D7 -:100BA000FB02F091FC02309721F00680F781E02DE6 -:100BB00009940895E091FB02F091FC02309721F036 -:100BC0000190F081E02D099480E00895DC016091AE -:100BD000F5028091F602962F891301C00895292FFE -:100BE00030E0F901EE0FFF1FE351FD4F40815181CD -:100BF0004A175B07A1F487E08A9FA0018B9F500DE5 -:100C00001124485E5E4F81E0FA0184839613E6CF9B -:100C10002F5F3F4F237033272093F50208952F5FF6 -:100C20003F4F922F9370D8CF10928A021092890270 -:100C3000E8E1F1E08581811102C0148216823796C5 -:100C400081E0E234F807B1F70895FA01811101C09B -:100C5000FB010994089580918E03982F9E7F61F483 -:100C60008170826080938E0380919103853B18F0A0 -:100C700084EB8093910308958A34B0F38170886483 -:100C8000F1CFAF92BF92DF92EF92FF920F931F933B -:100C9000CF93DF93182F062FE901453B08F044EB73 -:100CA000E42FF0E0E851FD4F011110C0E4915E2FF8 -:100CB0004E2F4983E8835A83DF91CF911F910F9183 -:100CC000FF90EF90DF90BF90AF900895202F30E01D -:100CD0004491D42EE42EF12C56E0159FC00111242E -:100CE000EFEFF0E0BF010E94BA2E812F90E0880F55 -:100CF000991F55E5569FD001579FB00D11248A1BAF -:100D00009B0B982F990F890F5F01A21AB30AAE9C13 -:100D1000D001AF9CB00DBE9CB00D11245B2F089F7D -:100D200080011124012F11275F01A01AB10AAE9C86 -:100D30008001AF9C100DBE9C100D11245F01A81AFC -:100D4000B108A29EC001A39E900DB29E900D1124E9 -:100D5000892F9927E81BF90BEE9DC001EF9D900D9F -:100D6000FE9D900D1124E92F62307105A1F050F421 -:100D70006115710509F49DCF6130710581F0EB2F8C -:100D8000512F97CF6430710569F080F0663071059E -:100D900009F48FCFF4CFE42F4B2F592F8ACFE42FB4 -:100DA000412F87CFEB2F542F492F83CF4B2F5D2D12 -:100DB000E12F7FCF0E94A2059C0190917602809145 -:100DC0007702982B21F03093730220937202909156 -:100DD000780280917902982B21F030937102209350 -:100DE0007002E091FB02F091FC02309749F082E042 -:100DF000809374020480F581E02D84E792E00994E9 -:100E0000089540917602803F59F48091770287FFE0 -:100E10000DC01092770241110BC010926E0208C0F3 -:100E2000813F81F48091770218169CF3442381F06E -:100E30008091780290917902892B09F05AC0109222 -:100E40006D020895823F49F447FFF0CF1092760279 -:100E5000809177028111ECCFE0CF833F19F4141613 -:100E6000ACF3E4CF90917802893F29F41916F4F697 -:100E700010927802DBCF8A3F19F497FFD7CFF8CFD3 -:100E8000909179028B3F29F497FFD0CF109279028D -:100E9000CDCF8C3F19F41916CCF3C8CF9CE0980F36 -:100EA000953090F4845F990B21E030E0B90102C0E5 -:100EB000660F771F8A95E2F7CB01809590917502B6 -:100EC000892380937502B2CF8D3F31F480916F02F8 -:100ED0008E7F80936F02AACF8E3F21F480916F02A4 -:100EE0008D7FF7CF8F3F09F0A1CF80916F028B7F6D -:100EF000F0CF089580916F0280FD16C081FD16C06D -:100F000082FD16C080916D028823A1F0883280F4A2 -:100F100028E0829FC001112468E270E00E94CE2E7A -:100F2000862F672B39F0089582E0089584E00895B4 -:100F300088E0089581E0089580916F0280FD14C0DB -:100F400081FD14C082FD16C080916E02882381F05D -:100F5000843180F422E3829FC001112464E170E0B7 -:100F60000E94CE2E862F08958CE0089589E1089581 -:100F700085E0089582E30895803F31F40E949C0744 -:100F80008195809377020895813F19F40E949C0710 -:100F9000F8CF823F31F40E949C07819580937602BE -:100FA0000895833F19F40E949C07F8CF893F29F4E4 -:100FB0000E947A078093780208958A3F21F40E9464 -:100FC0007A078195F7CF8B3F31F40E947A0781959C -:100FD0008093790208958C3F19F40E947A07F8CF24 -:100FE0009CE0980F953070F4845F990B21E030E01D -:100FF00001C0220F8A95EAF780917502822B8093B7 -:10100000750208958D3F31F480916F028160809365 -:101010006F0208958E3F21F480916F028260F7CFB6 -:101020008F3FB9F780916F028460F1CF80E008951F -:10103000F894E82FE295EF70F0E031A1282F2F709F -:1010400081E090E001C0880F2A95EAF7982F9095EB -:10105000932391A392A1892B82A3789408959091D0 -:10106000040392FF06C0282F28712830F9F4877FE7 -:10107000846093FF06C0282F28712831F1F4877E01 -:1010800084612091050320FF06C0382F3871383065 -:10109000D9F4877F816021FF06C0282F287128316D -:1010A000D1F4877E816194FD877E0895282F247175 -:1010B0002430F9F68B7F8860DCCF282F247124310F -:1010C00001F78B7E8861DDCF382F3171313019F710 -:1010D0008E7F8860E0CF282F2171213121F78E7E0D -:1010E0008861E1CFCF93DF93EC0182389105A9F1BC -:1010F000D8F58133910509F496C048F589329105F8 -:1011000009F48AC08A9709F495C0C11521E5D20770 -:1011100008F0BCC0C11530E5D30708F014C1C83EC3 -:10112000D10508F09CC0C03ED10560F5C83AD10594 -:1011300008F087C0C53AD10508F0FDC0C130D1051F -:1011400009F12097F9F0C430D105E0F440C08533AF -:10115000910509F45AC0C997C1F6809104038370C0 -:1011600089F0C0EED0E00EC0833E910599F170F495 -:10117000803E910501F1823E910539F6809104038C -:1011800082FD21C0CE01DF91CF910895863E910569 -:1011900061F1873E910571F1843E910509F0B5CF6B -:1011A0008091050381FFEECF80910403C7EED0E06C -:1011B00084FD0DC0E7CF8091040380FD12C19091A2 -:1011C000050390FFDFCFC3EED0E084FFDBCFD0E09C -:1011D000C0E0D8CF8091040382FD06C19091050341 -:1011E00090FDBFCF84FFCECFF2CF8091040383FD6B -:1011F000DDCFC8CF8091040383FDF9C09091050332 -:1012000091FFF0CFC4EED0E0BDCF8091040385FF05 -:10121000B9CFC9E2D0E0B6CF8091040385FFB2CF49 -:10122000C5E3D0E0AFCF8091040386FFABCFCAE225 -:10123000D0E0A8CF8091040386FFA4CFC1E3D0E023 -:10124000A1CFCF3BD10518F6C85AD0E0CC0FDD1F97 -:10125000C95BDE4F0990D881C02DD46493CFC115EE -:1012600040E2D40758F4C11581E0D80708F08ACFCE -:10127000C03FD10508F4ABCFD06584CFC11590E451 -:10128000D90708F4A4CFDF70D06A7CCFC11525E55B -:10129000D20700F5C11534E5D30708F08AC0C1159F -:1012A00043E5D40708F071C0C11582E5D80708F4FA -:1012B00067C0CE018370992721E030E002C0220F81 -:1012C000331F8A95E2F7C695C69580E2C89FE00174 -:1012D000112452C0C11599E5D907A8F4C11528E514 -:1012E000D20708F06BC0C11536E5D30708F06FCF01 -:1012F0008C2F0E942F08C82FD0E0DC2FCC27CC27C2 -:10130000DF71D0623FCFC1154AE5D40708F45BC056 -:10131000CE0190568115904208F059CF8D2F8F71D4 -:101320000E942F0890E0982F882788279F719C01A2 -:101330002C2BE901E6CFC55AD0E0CC5BDE4FC8814B -:10134000D0E0D0641FCFCE01E4E096958795EA9572 -:10135000E1F783702C2F26952695237040E2249F79 -:1013600090011124382B8C2F8370C1E0D0E002C093 -:10137000CC0FDD1F8A95E2F7C22BD32BDC6802CF9E -:10138000DC2FCC27C16FD06AFDCECE0183709927A8 -:1013900021E030E002C0220F331F8A95E2F7C695A4 -:1013A000C69590E2C99FE0011124C22BD32BDA68C5 -:1013B000E9CEDC2FCC27C46FD06AE4CEDC2FCC275B -:1013C000C06FD06ADFCE8C2F8F700E942F0834E060 -:1013D000D695C7953A95E1F7CF709C2FEC01D0696F -:1013E000D1CEC9E3D0E0CECEC2EED0E0CBCEC6EEB9 -:1013F000D0E0C8CE80914402811110924402089539 -:101400008091430290914202892B90914102892B55 -:101410008093C601909144029923A1F0892B809377 -:10142000C60180914301882341F18091040387FF25 -:1014300024C08EE1E8ECF1E090E0815000F59111DC -:101440000E94FA09E091FB02F091FC023097E1F072 -:1014500080914301882359F08091040387FF07C0DE -:101460008091C6018093C70185E08093C601028008 -:10147000F381E02D86EC91E0099486E0DBCF2191A9 -:101480002223D9F29F5FD9CF0895909143019923E8 -:10149000D1F09091040397FF16C0E82FE695E695EA -:1014A000E695EE31E0F4F0E0EA53FE4F282F277086 -:1014B00081E090E001C0880F2A95EAF7809592813B -:1014C000892382830895E8ECF1E09191891303C0A8 -:1014D000DF0111971C9291E0EE3CF907B1F70895F6 -:1014E000909143019923C1F09091040397FF14C098 -:1014F000E82FE695E695E695EE31F8F4F0E0EA534C -:10150000FE4F877021E030E001C0220F8A95EAF794 -:101510008281822B82830895A8ECB1E0EFEF90E006 -:101520002D91821751F0EF3F19F4211101C0E92FDD -:101530009F5F9630A9F7EF3F09F408950E2E000C37 -:10154000FF0BEA53FE4FE6CF80913F029091FE01E0 -:10155000981301C008958F5F8770FACF990F990F84 -:10156000890F982F977086958695869524E0829F9F -:10157000F0011124E651FE4F50E040E080E021915F -:1015800030E0092E02C0369527950A94E2F72170C3 -:101590003327042E01C0220F0A94EAF7822B4F5FF3 -:1015A0005F4F4430510559F70895990F990F890FEE -:1015B000982F977041E001C0440F9A95EAF78695FD -:1015C0008695869594E0899FF0011124E651FE4F9F -:1015D00030E020E070E05191DF011197CB01022E45 -:1015E00002C0969587950A94E2F7817081958527C8 -:1015F000842385278C932F5F3F4F2430310559F783 -:10160000089590E080E00E94C40590E080E00E9490 -:10161000AE0510924202109241020E94000A86E03A -:10162000E4E7F2E0DF011D928A95E9F710926E027D -:1016300010926D0210926F020C94DA06909346029B -:10164000809345020C94010B882341F08095909182 -:1016500042028923809342020C94000A0895882351 -:1016600039F090914202982B909342020C94000A18 -:101670000895882341F080959091430289238093B7 -:1016800043020C94000A0895882339F09091430294 -:10169000982B909343020C94000A0895882309F430 -:1016A00059C0823871F40E94DA0581FF53C089E382 -:1016B0000E94700A0E94000A89E30E94450A0C9465 -:1016C000000A833859F40E94DA0580FF43C083E59D -:1016D0000E94700A0E94000A83E5EFCF843859F413 -:1016E0000E94DA0582FF36C087E40E94700A0E94D9 -:1016F000000A87E4E2CF9CEF980F913AF0F290E273 -:10170000980F983088F4877021E030E0A90102C07A -:10171000440F551F8A95E2F7CA01809590914302C4 -:10172000892380934302CBCF9BE5980F933020F41D -:1017300090E080E00C94C40598E5980F973120F470 -:1017400090E080E00C94AE05803F20F00E940107FD -:101750000C94DA060895809580FF08C0589A81FF9E -:1017600007C05D9A82FF06C05C9A08955898F7CF2B -:101770005D98F8CF5C98089590912E03943029F5E8 -:101780008093060370930803609307039093E90026 -:101790008FEF9091E800815095FD06C095ED9A95E8 -:1017A000F1F700008111F5CF8091E80085FF0DC0B1 -:1017B00050E040E063E070E086E093E00E94560471 -:1017C0008091E8008E778093E8000895BC0184E062 -:1017D0000C94BC0BBC0183E00C94BC0B9C0184E01A -:1017E0008093E9009FEF8091E800915085FD06C04D -:1017F00085ED8A95F1F700009111F5CF8091E80011 -:1018000085FF0CC050E040E066E070E0C9010E9436 -:1018100056048091E8008E778093E8000895CF9376 -:10182000DF93EC01809143018823B1F1809104039F -:1018300087FF32C060E284E08093E9008FEF9091EF -:10184000E800815095FD06C095ED9A95F1F70000EE -:101850008111F5CF8091E80085FF1BC08091430185 -:1018600070E050E040E0811104C050E040E068E0EA -:1018700070E0CE010E9456048091E8008E7780933C -:10188000E80080E2FE01ACE0B3E001900D928A95A1 -:10189000E1F7DF91CF91089568E081E0CDCF81E05D -:1018A0008093E00080E28093D8001092C9008FE11D -:1018B0009EE40197F1F700C0000087E090EBDC01A7 -:1018C0008093960390939703A0939803B093990302 -:1018D00088E19CE00FB6F894A895809360000FBE55 -:1018E00090936000FFCFCF93C82F882309F4AEC038 -:1018F0008238C1F40E94DA0581FDA8C089E30E9404 -:10190000700A0E94000A2FEF81EE94E0215080407F -:101910009040E1F700C0000089E30E94450ACF91A2 -:101920000C94000A8338A1F40E94DA0580FD8EC071 -:1019300083E50E94700A0E94000A2FEF81EE94E076 -:10194000215080409040E1F700C0000083E5E5CFE2 -:101950008438A1F40E94DA0582FD78C087E40E94F1 -:10196000700A0E94000A2FEF81EE94E0215080401F -:101970009040E1F700C0000087E4CFCF8CEF8C0FE0 -:10198000813A88F580914301882301F18091040315 -:1019900087FF1CC0EC2FE695E695E695F0E0EA534C -:1019A000FE4F828190E04C2F477021E030E002C072 -:1019B000220F331F4A95E2F782239323892B79F074 -:1019C0008C2F0E94450A0E94000A09C0E8ECF1E051 -:1019D0008191C817A9F321E0EE3CF207C9F78C2FDB -:1019E0000E94700A9CCF80E28C0F883068F4C77028 -:1019F00021E030E001C0220FCA95EAF7809143024E -:101A0000822B809343028BCFEBE5EC0FE33040F465 -:101A1000F0E0EC5BFE4F808190E0CF910C94C40528 -:101A2000E8E5EC0FE73150F4F0E0EE0FFF1FE95B63 -:101A3000FE4F80819181CF910C94AE05C03F30F074 -:101A40008C2F0E94BC07CF910C94DA06CF91089599 -:101A50001F93CF93DF93182FD0E0C0E0893311F4A8 -:101A6000C0E5D0E0812F0E94730C209731F4812FC4 -:101A7000DF91CF911F910C944E0B8FE99FE001975E -:101A8000F1F700C000002197F0CF0F931F93CF9381 -:101A9000DF93C62FD42F022FFC0182818823A1F06F -:101AA000609395030E94A2059093940380939303FF -:101AB000C77081E001C0880FCA95EAF7DF91CF9126 -:101AC0001F910F910C94440B80919503681335C0BE -:101AD00080919303909194030E949305883C910513 -:101AE00060F510E21D0FCD17B9F080E28C0F883041 -:101AF00040F4C77081E001C0880FCA95EAF70E94E0 -:101B0000390B183048F481E09D2F977001C0880F81 -:101B10009A95EAF70E94440B802F0E94280D1830F6 -:101B200098F4D77081E001C0880FDA95EAF7DF9169 -:101B3000CF911F910F910C94390BC77081E001C0B8 -:101B4000880FCA95EAF7F3CFDF91CF911F910F91DC -:101B50000895DF92EF92FF920F931F93CF93DF933D -:101B6000E82FF0E0E65BFD4FD490282F26952695D0 -:101B7000269530E0F901E65CFD4F0491877010E096 -:101B8000082E02C0159507950A94E2F701701127F7 -:101B9000F901E65DFD4FE490F12C082E02C0F594AA -:101BA000E7940A94E2F791E0E922FF24F901E65E66 -:101BB000FD4FC491D0E002C0D595C7958A95E2F754 -:101BC000C170DD270115110519F081EE0E94730C1B -:101BD000E114F10419F086EE0E94730C8D2D0E9421 -:101BE000280DEF2819F086EE0E944E0B012B19F0FC -:101BF00081EE0E944E0BCD2B51F08CE2DF91CF9104 -:101C00001F910F91FF90EF90DF900C94280DDF91C2 -:101C1000CF911F910F91FF90EF90DF900895CF9398 -:101C2000DF93C7E0D2E060E0CE010E94852F2196CD -:101C3000C11584E0D807B9F7DF91CF9108956F926D -:101C40007F928F929F92AF92BF92CF92DF92EF924C -:101C5000FF920F931F93CF93DF9389E0C82E85E007 -:101C6000D82E0FE510E0E801E09736011CC0F50121 -:101C700085909490692DC7010E94852F682DC7011A -:101C800001960E94852F82E0A80EB11C82E0E80E2A -:101C9000F11CCE15DF0559F788E0680E711C2896F7 -:101CA0000C171D0731F07E0188E0E81AF108530196 -:101CB000DECF005D1F4F80E3C80ED11C0F3382E0E2 -:101CC000180789F6DF91CF911F910F91FF90EF9048 -:101CD000DF90CF90BF90AF909F908F907F906F904C -:101CE0000895CF93C82F6FEF811161E283E290E0F6 -:101CF0000E94852F6FEFC11169E084E290E00E949D -:101D0000852F6FEFC11167E285E290E0CF910C94CF -:101D1000852F80E00E94710E60E086E290E00E94D4 -:101D2000852F0E941F0E0E940F0E81E00C94710EF1 -:101D3000CF93C0910503C2FB992790F9981781F0C2 -:101D400080FBC2F9C09305036091040384E090E036 -:101D50000E94852F6C2F82E290E0CF910C94852F0A -:101D6000CF9108950F931F93CF93DF9328E0629F45 -:101D7000E001112450E0440F551FC40FD51F30E37C -:101D8000839FC00DD11D1124CE0187960E94712F13 -:101D9000082F10E0102F0027CE0188960E94712F87 -:101DA0009801282BC901DF91CF911F910F910895C0 -:101DB000462F8A3038F4763028F4643018F4672FD0 -:101DC0000C94B20E90E080E00895BF92CF92DF9223 -:101DD000EF92FF920F931F93CF93DF937C010091BB -:101DE0003803109139038091450290914602082BE7 -:101DF000192BCFE0D0E0CC24C394D12CBC2EC6014B -:101E00000C2E02C0880F991F0A94E2F780239123B9 -:101E1000892B71F4219790F7B12C8B2DDF91CF9105 -:101E20001F910F91FF90EF90DF90CF90BF9008959A -:101E3000B7018C2F0E94D80E0E947208019751F3AF -:101E4000ECCFCF93DF93EC010E94E50EBE010E9420 -:101E5000D80EDF91CF910C947208FC018681978196 -:101E6000009779F00E947208292F2F7092959F7029 -:101E700092509E30A0F4E92FF0E0E554F04D0C9420 -:101E8000042F808191810E94210FEECF803F19F0B5 -:101E900020F4883E20F481E00895843FE1F380E05F -:101EA0000895883EC0F3813FD1F7F5CF822F869504 -:101EB0008695869508951F93CF93DF9300D000D029 -:101EC0000F92CDB7DEB7FC01268137812115310590 -:101ED00041F525E0DE01119601900D922A95E1F77A -:101EE000FC01228189819A812223B9F06623A9F01D -:101EF0000E94E50E182F682F89819A810E94D50AC9 -:101F000069817A81812F0F900F900F900F900F9021 -:101F1000DF91CF911F910C94D80E0E94AE0A182F1A -:101F2000EFCFC9010F900F900F900F900F90DF919E -:101F3000CF911F91089583E290E00E94712F81322A -:101F400089F484E290E00E94712F893059F485E28F -:101F500090E00E94712F91E0873209F090E0892F84 -:101F60008170089580E0FCCFCF9384E090E00E94E0 -:101F7000712FC82F82E290E00E94712F982F8C2F32 -:101F8000CF91089560918E03669570E04BE050E02C -:101F90008AE091E00E94572F892B19F481E0809309 -:101FA00084020E94A20590937E0280937D02089590 -:101FB0005F926F927F928F929F92AF92BF92CF92D9 -:101FC000DF92EF92FF920F931F93CF93DF93CDB7E2 -:101FD000DEB7C455D1090FB6F894DEBF0FBECDBF32 -:101FE00080918E0380FD0AC0EAE3F3E01182108243 -:101FF0001282339623E0EE38F207C1F780907B021D -:1020000090907C028114910409F459C080917A0265 -:10201000811155C0D12CC12C66246394712C13E01E -:10202000512E8091850293010C2C01C0220F0A943D -:10203000EAF7822309F43BC0F601EE0FFF1FE80D1B -:10204000F91DE590F490E114F104C9F145E050E088 -:10205000B701CE0101960E944E2F09810F3F39F141 -:102060008A81800F9927991F8D31910514F08CE199 -:1020700090E05C01AA0CBB1C8A0D9B1DFC01E65C78 -:10208000FC4F5F01059D80011124065C1C4F0A1561 -:102090001B0520F0F5E0EF0EF11CD8CF98014D8123 -:1020A0006C818B810E9441060D5F1F4FF0CF2FEF97 -:1020B000C21AD20A38E0C316D10409F0B2CF7DEEBD -:1020C000A72E73E0B72EDE011196AE014B5A5F4F7B -:1020D0001A2F7B2FF5018491282F30E0C901880F3A -:1020E000991F820F931F865C9C4FFC01C080D1809A -:1020F000E280CD92DD92ED92FFEFAF1ABF0AA417F6 -:10210000B50741F7279A35B13F7725B120686FB7FA -:10211000F894812F972FFC017191CF01E8E025B948 -:10212000000000C077FF35B9770F000000C000C085 -:1021300000C035B900C0EA9591F78417950759F7A3 -:102140006FBF8FE594E00197F1F700C00000CC5A13 -:10215000DF4F0FB6F894DEBF0FBECDBFDF91CF913A -:102160001F910F91FF90EF90DF90CF90BF90AF90B5 -:102170009F908F907F906F905F9008951F93CF9363 -:10218000DF9300D00F92CDB7DEB7162F90918E035C -:1021900090FF18C09E012F5F3F4F48E76FEF0E94EE -:1021A00041068B819981612F70E0FB01EE0FFF1FCB -:1021B000E60FF71FE65CFC4F2A8121839083828320 -:1021C0000E94D80F0F900F900F90DF91CF911F9129 -:1021D0000895EF92FF920F931F93CF93DF938C019B -:1021E000CAE3D3E0F12CE12CF801948160919003D3 -:1021F00080918F03FEE0EF16F104FCF49923F9F0CF -:102200009E01409191030E9441062FEFE21AF20ACB -:1022100023968CE1E816F10439F70E94D80FF801F3 -:10222000848190E00196817099278483DF91CF911A -:102230001F910F91FF90EF900895992309F39E014C -:1022400040E0E1CF8F929F92AF92BF92CF92DF9208 -:10225000EF92FF920F931F93CF93DF93EC014C818A -:10226000042F10E09801D8010E94192F9B01AC01A6 -:102270000E942F2F4B015C01E0E2F0E0E01BF10B2C -:10228000A5E5B0E0AC019B010E942F2F6B017C0102 -:102290009F01DF010E94112F9B01AC010E943A2F88 -:1022A0009B01AC01280D391D4A1D5B1DC701B601FC -:1022B0000E94E22EF22E822F90E039E23F15D8F1F3 -:1022C00043E0249F9001112435952795122F1095F6 -:1022D0009AE3C92E93E0D92E00E085E5E82EEF18A9 -:1022E0008E2D01FD8F2D9601412F609190030E944C -:1022F00041060F5F53E0C50ED11C0C3189F70E94D7 -:10230000D80F9C8181E0992319F0903219F48FEF56 -:102310008093170180911701890F8C83DF91CF91F2 -:102320001F910F91FF90EF90DF90CF90BF90AF90F3 -:102330009F908F90089525E530E0A901481B590B27 -:10234000CA019A01220F331F280F391F37FFBCCF54 -:102350002F5F3F4FB9CF0F931F93CF93DF93CAE304 -:10236000D3E0FE01118210821282339683E0EE38B0 -:10237000F807C1F710E000E080918702082E000CFA -:10238000990B081719078CF180911601082E000C83 -:10239000990B801791074CF19E0140919103609138 -:1023A000900380918F030E9441060F5F1F4F239679 -:1023B0000C31110509F70E94D80F809115019091F9 -:1023C0008702980F9093870220911601280F20937F -:1023D0001601121614F49B311CF08195809315019F -:1023E000DF91CF911F910F910895198218821A825F -:1023F000DCCFBF92CF92DF92EF92FF920F931F93A9 -:10240000CF93DF93FC018281DD24DA9480FD02C04A -:10241000DD24D3940AE313E0D0E0C0E02CE1B22E37 -:10242000F80111821082128294E0E92EF12CC12C65 -:10243000809186028C0D8D310CF43DC06B2D0E9475 -:10244000AC2E892F082E000C990B8C179D0791F448 -:10245000809191038E9DA0018F9D500D1124559563 -:1024600047955595479598016091900380918F030A -:102470000E944106CD0CF1E0EF1AF108C9F6219651 -:102480000D5F1F4FCC31D10559F60E94D80F8091B6 -:10249000860291E0D91215C0811111C08BE18093A1 -:1024A0008602DF91CF911F910F91FF90EF90DF9007 -:1024B000CF90BF90089587FFC5CF845EC3CF815072 -:1024C000EECF90E00196BE010E94CE2EE8CFEF92B3 -:1024D000FF921F93CF93DF93EC018AE3E82E83E012 -:1024E000F82E10E08C819701409191036091900348 -:1024F000810F0E944106175F83E0E80EF11C1C3F2C -:1025000089F70E94D80F9A818C8190FF08C08F5F55 -:102510008C83DF91CF911F91FF90EF9008958150B0 -:10252000F7CF90918E0390FF0CC0EAE3F3E0818334 -:1025300060834283339693E0EE38F907C1F70C9439 -:10254000D80F08950F931F93CF93DF9300D00F926E -:10255000CDB7DEB78C018091880281110AC09E013F -:102560002F5F3F4F44EB6FEF0E9441068A818093BB -:102570008802F8016481613069F08091880240E04E -:10258000662361F040E0623011F44091880280E0FF -:1025900060E004C06091880240E080E00E949112F7 -:1025A000F801848190E0019663E070E00E94CE2EF5 -:1025B00084830F900F900F90DF91CF911F910F9117 -:1025C0000895CF93DF9300D00F92CDB7DEB79091EF -:1025D0008E0390FF0AC09E012F5F3F4F0E9441066D -:1025E0004B8169818A810E9491120F900F900F9008 -:1025F000DF91CF910895CF93DF93EC01EEE8F3E004 -:10260000438162818C810E94E1128C818F5F8C8377 -:10261000DF91CF910895CF93DF93EC01EC81F0E04F -:10262000E75FFB4F4491EEE8F3E0628181810E9415 -:10263000E1128C818F5F8C83DF91CF910895CF92CF -:10264000DF92EF92FF926B017C010E942B06B70193 -:10265000A60188E090E0FF90EF90DF90CF900C947F -:10266000972F5F926F927F928F929F92AF92BF92BD -:10267000CF92DF92EF92FF920F931F93CF93DF934E -:1026800000D00F92CDB7DEB7182F762E042F622E12 -:1026900090918E0390FF29C0E92FE695AE2FB0E010 -:1026A000A157BE4F8C91809383029E7F923081F51B -:1026B0009E012F5F3F4F812F0E9441064B81698110 -:1026C0008A810E94911210938F037092900300935D -:1026D0009103662051F060918E0370918F03809179 -:1026E0009003909191030E941F130F900F900F90F1 -:1026F000DF91CF911F910F91FF90EF90DF90CF90DE -:10270000BF90AF909F908F907F906F905F90089553 -:10271000823019F400919103D6CF863019F41091CC -:102720008F03D1CF8930D9F3893169F6E9518E2FE2 -:102730008170582EE695F0E0E851FC4FA590B490DA -:10274000BB248AE3E82E83E0F82ED12CC12C9CE137 -:10275000892E912CC601B4010E94BA2E812F5110EE -:1027600013C0860F9701402F672D0E944106CA0CA7 -:10277000DB1C83E0E80EF11C8EE8E81683E0F80627 -:1027800049F70E94D80F9FCF861BECCFEEE8F3E00D -:10279000438128E0421B08F440E021E0628181810E -:1027A0000C943113EEE8F3E0438128E0420F08F483 -:1027B0004FEF21E0628181810C943113EEE8F3E068 -:1027C000628128E0621B08F460E021E0438181819E -:1027D0000C943113EEE8F3E0628128E0620F08F414 -:1027E0006FEF21E0438181810C943113EEE8F3E037 -:1027F000818121E04381628188500C943113EEE89D -:10280000F3E0818121E043816281885F0C94311380 -:1028100080919203882319F08150809392036091F4 -:102820008E0370918F0380919003909191030C948B -:102830001F1380919203833018F48F5F809392036B -:1028400060918E0370918F0380919003909191031A -:102850000C941F1390918E0390FF36C091708111DC -:1028600029C0926090938E03662351F060918E038D -:1028700070918F0380919003909191030E941F1398 -:1028800060918E03669570E04BE050E08AE091E045 -:102890000E94572F892BA9F01092840281E0809327 -:1028A000800220E0409191036091900380918F031A -:1028B0000C943113853210F09864D4CF880F982B84 -:1028C000D1CF0E94C20FEACF089521E030E0A901E4 -:1028D00002C0440F551F8A95E2F7CA012091850274 -:1028E000662399F0822B8093850280918402811166 -:1028F00006C080918E0360E086950E942A14809124 -:102900008E0380FD05C00C94D80F80958223EBCFF9 -:1029100008950F931F93CF93DF93EC0161E000972D -:1029200009F0682F617080E00E94651460E02097D4 -:1029300021F0BE0176956795617081E00E94651473 -:1029400060E0209731F0BE017695679576956795A2 -:10295000617082E00E94651460E0209739F0BE014A -:1029600013E0769567951A95E1F7617083E00E9410 -:10297000651460E0209739F0BE01B4E07695679564 -:10298000BA95E1F7617084E00E946514AE0170E0D1 -:1029900060E0BB27A72F962F852F0097A105B105D3 -:1029A000D9F1AC01BD0188E08A019B01F4E03695C4 -:1029B000279517950795FA95D1F70115110521056A -:1029C000310519F08C5FB901A8018A019B01E2E091 -:1029D0003695279517950795EA95D1F701151105B5 -:1029E0002105310519F08E5FB901A801769567952B -:1029F00057954795452B462B472B09F08F5F823023 -:102A000011F160F4882399F08130C1F0CE01DF919B -:102A1000CF911F910F91089580E0C6CF8330C1F010 -:102A20008430A1F720E044E66FEF8FE004C020E09F -:102A300044E66FEF82E30E943113E8CF20E044E6E2 -:102A40006FEF85E0F8CF20E044E66FEF80E8F3CF4A -:102A500020E044E66FEF87EDEECF0E94891490935B -:102A60003903809338030C94010B809138039091C3 -:102A700039039C01267033272630310519F488600C -:102A80000C942D15877FFCCF21E030E002C0220F8F -:102A9000331F8A95E2F72095309580913803909105 -:102AA0003903822393230C942D1590914002809535 -:102AB000892380934002282F277039F4282F082E6D -:102AC000000C330B9217130621F49091050392FF2B -:102AD00007C08595859585950E9444151092400202 -:102AE000089521E030E002C0220F331F8A95E2F7FB -:102AF0008091380390913903822B932B0C942D15E0 -:102B000080918E038695815009F484E261E00C94F3 -:102B10002A1480918E0386958F5F853208F081E0BC -:102B200061E00C942A1490918E0390FF07C0969553 -:102B3000981720F0961710F40C94891561E00C9406 -:102B40002A14EEE8F3E083E0808311828FEF828322 -:102B500088E28383148260817181828193810C94E5 -:102B60001F1369EE7EEF90E080E00E94A32F60E0EB -:102B700082E090E00E94852F60E083E090E00E9478 -:102B8000852F109246021092450260E084E090E0AA -:102B90000E94852F60E082E290E00E94852F60E035 -:102BA00085E090E00E94852F60E086E090E00E9442 -:102BB000852F6FEF87E090E00E94852F40E050E086 -:102BC000BA0188E090E00E94972F60E08DE090E0ED -:102BD0000E94852F40E050E0BA0188E190E00E9419 -:102BE000972F60E087E190E00E94852F40E050E061 -:102BF000BA018CE190E00E94972F70E060E080E2E3 -:102C000090E00E94A32F40E050E0BA0188E190E0FC -:102C10000E94972F80E00E94710E0E94890E40E072 -:102C200050E0BA018FE090E00E94972F40E050E022 -:102C3000BA0183E190E00C94972F90E080E00E942D -:102C40007F2F893E9E4F11F40C949B0F80E00895D6 -:102C50001092430280914301E8ECF1E0882359F09F -:102C60008091040387FF07C08EE1DF011D928A95E2 -:102C7000E9F70C94010B86E0F8CF1F93CF93DF9315 -:102C8000CDB7DEB7AA970FB6F894DEBF0FBECDBFA3 -:102C900080E393E02091F100DC012D93CD01B3E0BE -:102CA00088339B07B9F780913103833009F471C0F1 -:102CB000B8F4813009F448C0823009F4B2C0809180 -:102CC000E80083FF3AC180913003909131039A303C -:102CD00008F033C1E92FF0E0E753F04D0C94042FD6 -:102CE0008A3009F48DC08B3009F470C0893039F70F -:102CF00080913003813219F780913403909135032C -:102D0000009711F00297D9F68091E800877F8093B1 -:102D1000E8008091E80082FF37C09091F300809135 -:102D2000F200029729F48091F1008B7F813021F429 -:102D30008091F10080930B038091E8008B77809362 -:102D4000E8000E948004BBCF80913003813A09F0F3 -:102D5000B6CF8091E800877F8093E80080913403AC -:102D600090913503892B61F460E28CE093E070E090 -:102D70000E9432058091E8008B778093E8009FCF16 -:102D800060E090E080E0F3CF80912E038111C1CF0D -:102D900096CF80913003813A09F091CF809134032E -:102DA00090913503892B09F08ACF8091E800877FC5 -:102DB0008093E8008091E80080FFFCCF8091430180 -:102DC0008093F1008091E8008E77B9CF8091300335 -:102DD000813209F074CF8091340390913503892BAF -:102DE00009F06DCF8091E800877F8093E8000E9412 -:102DF000800480913203809343010E9428165FCFA4 -:102E000080913003813209F05ACF8091E800877FAA -:102E10008093E8000E9480048091330380930A032A -:102E20004ECF80913003813A09F049CF8091E8007C -:102E3000877F8093E8008091E80080FFFCCF80913D -:102E40000A03BECF803899F0823809F076C08091AD -:102E500034038F70873008F070C08093E900809150 -:102E6000EB0085FB882780F91092E90006C080916D -:102E70002C0390912D03911182609091E800977F2F -:102E80009093E8008093F1001092F1008091E800A7 -:102E90008E77B5C1882309F4A2C1823009F04DC0F4 -:102EA000809132038111A6C1809134038F702FEF7E -:102EB000280F263008F041C08093E9002091EB00F4 -:102EC00020FF98C1933031F48091EB0080628093B1 -:102ED000EB0090C19091EB0090619093EB0021E0AA -:102EE00030E001C0220F8A95EAF72093EA001092A1 -:102EF000EA008091EB008860EACF81111EC010913A -:102F000032031F778091E3008078812B8093E30068 -:102F10008091E800877F8093E8000E948004809180 -:102F2000E80080FFFCCF8091E30080688093E3009D -:102F300082E0111183E080932E038091E80083FFEB -:102F40000AC08091E800877F8093E8008091EB00C1 -:102F500080628093EB00AA960FB6F894DEBF0FBE96 -:102F6000CDBFDF91CF911F9108958058823028F70F -:102F700020913203309133032C3DE3E03E07A1F56D -:102F800083E08A838AE289834FB7F894DE0113963F -:102F900020E03EE051E2E32FF0E050935700E4914F -:102FA00020FF03C0E295EF703F5FEF708E2F90E03F -:102FB000EA30C0F0C7968D939D932F5F243159F767 -:102FC0004FBF8091E800877F8093E8006AE270E05D -:102FD000CE0101960E9432058091E8008B778093A4 -:102FE000E800ABCFC096E7CF8091340390913503D2 -:102FF000432F55274330510509F44AC078F5413035 -:10300000510509F47AC08BE590E0E9EEF6E0423034 -:10301000510509F092CF2091E800277F2093E80026 -:1030200020913603309137038217930708F49C01EF -:1030300040E02115310509F065C0411163C0809160 -:10304000E80082FDC9CF80912E03882329F28530C4 -:1030500019F28091E80083FFF2CFBECF41325105D3 -:1030600009F43CC04232510509F067CF8330910525 -:1030700008F063CFFC01EE0FFF1FE954FE4F0190F3 -:10308000F081E02D8C549E4FDC018C9190E01AC0B1 -:10309000332721303105D1F02115310561F022307F -:1030A000310509F04ACFE6E5F7E0E4918E2F90E094 -:1030B000E6E5F7E007C0E6E7F7E0E4918E2F90E061 -:1030C000E6E7F7E0009709F438CFA5CFE2E6F7E0AE -:1030D000E4918E2F90E0E2E6F7E0F4CF83309105A3 -:1030E00008F02BCF880F991FFC01E354FE4F01908D -:1030F000F081E02D89E090E08ECF82E190E0E4E481 -:10310000F7E089CF80912E03882309F465CF8530BD -:1031100009F462CF8091E80083FD5ECF8091E800E2 -:1031200082FD8DCF8091E80080FF83CF9091F300E6 -:103130008091F2002115310519F08830910550F089 -:1031400041E0089709F040E08091E8008E77809395 -:10315000E8006FCF44914093F1003196215031093E -:103160000196E8CF803809F0E8CE8091E800877FAB -:103170008093E80080912F038093F10087CE811126 -:10318000DCCE10913203123008F0D7CE8091E800E7 -:10319000877F8093E80010932F030E9480041123FF -:1031A00011F084E005C08091E30087FDFACF81E053 -:1031B00080932E0342E061EC81E00E949F0442E292 -:1031C00061EC84E00E949F0442E261EC82E00E9494 -:1031D0009F0442E260EC83E00E949F04AECE8091A7 -:1031E0003203813009F0A9CE81E0933009F080E00C -:1031F00080932D031092E9008091E800877F8093EF -:10320000E8000E94800499CE9F92AF92BF92CF9225 -:10321000DF92EF92FF920F931F93CF93DF9300D033 -:1032200000D0CDB7DEB77C01FC0183819481892B6E -:1032300031F08081918189238F3F09F0F0C50F9093 -:103240000F900F900F90DF91CF911F910F91FF90F2 -:10325000EF90DF90CF90BF90AF909F90089598012E -:1032600022513F452031310508F0CEC58FEF93E064 -:103270000E94712F025167E0C62E62E0D62E88238D -:1032800039F1809140028770D1F2F7018281882361 -:10329000B1F282E00F900F900F900F90DF91CF91DD -:1032A0001F910F91FF90EF90DF90CF90BF90AF9064 -:1032B0009F900C945515C114F4E0DF0611F3C6017C -:1032C0000E94712F811101C001502FEFC21AD20A42 -:1032D0000111F1CF1C821B82BB24B3945AE0A52EAE -:1032E00086010F5F1F4FC6010E94712F89831A82CA -:1032F000882339F29FEF980F933008F58A83B982BB -:1033000032E0C30ED11CC8010E94712F8B83882329 -:1033100009F4B7CF8E010F5F1F4FF801808188231A -:10332000F9F2813009F043C091818281913049F4F2 -:103330000E5F1F4F0E94280D0F5F1F4FEECF6801D9 -:10334000E9CF923029F40E5F1F4F0E94730CF4CF27 -:10335000933029F40E5F1F4F0E944E0BEDCF943037 -:1033600019F00F5F1F4FE8CF0E5F1F4F30E020E0D6 -:10337000B8016F5F7F4FF80141818053990B8A300C -:10338000910550F021503109B8F28FE99FE0019783 -:10339000F1F700C00000F6CFA29EF001A39EF00D51 -:1033A00011249C012E0F3F1F842F8B01E1CF0E941F -:1033B000A90DC2CF81E00E9471150E94351561CF21 -:1033C00081E00E944415F9CF82E0FBCF04389FE5ED -:1033D000190709F483C008F473C00538FFE51F0717 -:1033E00009F041C5882309F43EC580EE0E94730CA4 -:1033F00081EE0E94730C80E10E94730C80E10E94B8 -:103400004E0B81EE0E944E0B80EE0E944E0B80917F -:10341000E60191E062E189278093E601882309F4BF -:103420008DC08FE00E94BE1066E18FE00E94BE104A -:103430001AC5882369F180914F02811106C081E08D -:1034400080934F0282EE0E94730C0E94A20590931B -:103450004E0280934D028BE20E94730C04C58823B8 -:10346000A1F080914F02811106C081E080934F024C -:1034700082EE0E94730C0E94A20590934E028093EC -:103480004D0281EE0E94730CE6CF81EE0E944E0B3E -:103490008BE20E944E0BE7C4882309F4E4C481EE5A -:1034A0000E94730C83EE0E94730C8FE40E94730CD5 -:1034B0008FE40E944E0B83EE0E944E0B81EEE9CF0B -:1034C000882309F4D0C481EE0E94730C83EE0E941D -:1034D000730C80E50E94730C80E5EBCF882309F420 -:1034E000D0CE10914C0281E0182710934C020E941C -:1034F000A20590934B0280934A0268E1112381F068 -:103500008FE00E94BE1069E18FE00E94BE106AE168 -:103510008FE00E94BE106BE18FE00E94BE10B1CE22 -:1035200084EB0E94BE1069E184EB0E94BE106AE148 -:1035300084EB0E94BE106BE184EBEFCF8FEA0E9418 -:10354000BE1066E18FEA72CF82EE0E94730CC6C491 -:1035500083E00E942F0B88E10E94730C88E10E9497 -:103560004E0B83E00E94240BB9C482EE0E94730CC0 -:1035700087E50E94280DB2C486EE0E94280D88E1DE -:10358000F8CF895AC5C482EE0E944E0BD9C48CE292 -:103590000E94280D8091E801882309F4D1C489E3B1 -:1035A0000E94280DCDC488E2FBCF033FFCE51F0736 -:1035B00039F1A0F4083D3CE51307F1F0093D8CE535 -:1035C000180751F1073D9CE5190709F0BDC426E233 -:1035D00041EE61EEC7010E94450D53CE053FECE57B -:1035E0001E07B1F088F0063F2CE5120709F0ACC4C5 -:1035F00027E245EE66EEEECF27E245EE65EEEACF36 -:1036000026E241EE60EEE6CF27E245EE64EEE2CF41 -:1036100026E241EE62EEDECF28E241E0EFCF80917C -:103620000403806106309CE5190709F48CC0809181 -:103630000403886007301C4508F485C080910403AA -:10364000806281C0809104038D7F0C30FCE51F07F0 -:1036500009F479C070F4809104038C600A303CE571 -:10366000130709F470C008F481C0809104038E7FB1 -:103670006AC080910403877F0E309CE5190709F426 -:1036800062C0809104038B7F0F301C4508F45BC03F -:10369000809104038F7E57C00B3FFCE51F0709F4A0 -:1036A0005DC030F503313CE5130709F46DC078F4D3 -:1036B00001319CE5190709F463C002311C4509F08A -:1036C0007EC40E942816809104038F773CC0053188 -:1036D000FCE51F0709F460C008F474C0809105037D -:1036E00081600A3F1C4509F06AC48093050367C4E2 -:1036F0000F3F8CE5180709F44BC088F4809105034F -:103700008D7F0D3FECE51E0781F3809105038E7FD1 -:103710000E3F1C4550F3809105038360E6CF0130D6 -:103720002DE5120709F457C008F442C060E00230EA -:103730001D4509F044C48EE090E00E94852F3FC4EF -:103740008091040381608093040339C48091040351 -:103750008260F9CF809104038460F5CF80910503E6 -:103760008260C3CF809104038064EDCF0E9428164D -:10377000809104038068E7CF809104038F7DE3CFBD -:10378000809104038F7BDFCF80910403837FDBCFA5 -:10379000809105038C7FA9CF8091040382FB992738 -:1037A00090F921E0922790FB82F990FB83F9CBCF2F -:1037B00080910503982F909591708E7F892B90FBB7 -:1037C00081F993CF0E94281690910403892F97FBCB -:1037D00087F98058B8CF61E0AECF882309F402C4DE -:1037E000809143028A7A91E009F490E09093E90194 -:1037F000811106C089E20E94700A0E94000A41CD30 -:1038000085E3F9CF85E3F3C3043CFCE51F0709F426 -:1038100093C046EF53E16FEF73E1053C2CE51207CF -:1038200009F00AC40E9425062CCD093C3CE513078B -:1038300009F491C070F4073CECE51E0709F486C05A -:103840004AEE53E16EED73E1083CFCE51F0751F3CE -:10385000F3C30A3C2CE5120709F482C048E054E1A6 -:1038600069E174E10B3C3CE51307E1F2E5C3013D7E -:103870008CE5180709F487C0B0F40E3CECE51E0790 -:1038800009F47BC008F476C00F3C2CE5120709F45C -:1038900077C06EE089E0003D3CE5130709F0CCC33A -:1038A0000E949315EECC043D8CE5180709F471C015 -:1038B00078F4023DECE51E0709F468C061E088E198 -:1038C000033DFCE51F0709F0B7C30E942A14D9CCB9 -:1038D000053D2CE5120709F45FC00D35100709F40A -:1038E000D0CCAAC380918E0380FF1BC08E7F8093B3 -:1038F0008E0360918E0370918F038091900390915D -:1039000091030E941F13109284028FEF90E7E2E070 -:1039100081509040E040E1F700C000000E94D80FC5 -:10392000B0CC816080938E0361E08695CECF40E875 -:1039300055E169E875E176CF49E855E160E875E160 -:1039400071CF4FEF53E166EF73E16CCF4EED53E172 -:103950006AEE73E167CF46EC53E162ED73E162CF4B -:1039600042ED53E166EC73E15DCF49E154E168E07B -:1039700074E158CF61E081E0A8CF65E082E090CFAC -:1039800068E086E08DCF64E18FE08ACF67E185E172 -:1039900087CF62E289E184CF61E083E296CF0B3585 -:1039A0009DE5190701F10C351D4509F055C38091BE -:1039B000050382FB882780F991E089270E94980EF1 -:1039C0004BC30E942816FFEF24E33CE0F150204057 -:1039D0003040E1F700C000000E944F0C0E94B1157A -:1039E00050CC81E0EBCF80E0E9CF82810081118172 -:1039F000882369F0C8010E94E50ED82E682FC801FF -:103A00000E94D50AB8018D2D0E94D80E2BC3C80183 -:103A10000E94AE0AD82EF6CF212F2F70C22E107F13 -:103A200019F0C29490EFC922DD20C9F0CC2069F0D2 -:103A300080E2800F883010F001110BC080914302AA -:103A4000C82AC09243020E94000A802F0E94730C71 -:103A500019C080914202C82AC0924202F4CF802F3E -:103A60000E944E0BCC2071F0C09480E2800F883011 -:103A700010F001113AC080914302C822C092430263 -:103A80000E94000AE92DE850FF0B349720F40E94B1 -:103A9000DA050E94AB0BAA20A9F08091400280FDBC -:103AA00011C0F70112828595859585950E94711543 -:103AB000C7010E94041980914002859585958595DE -:103AC0000E94441560E0C7010F900F900F900F9077 -:103AD000DF91CF911F910F91FF90EF90DF90CF90EA -:103AE000BF90AF909F900C945B0F80914202C822D0 -:103AF000C0924202C5CF312F3F70B32E107F1032DB -:103B000019F0B29480EFB822002369F0013081F1FE -:103B1000DD20D9F1CC2091F1F701858180FF95CF8F -:103B20008F7085832BC0DD20B1F0909144028B2DE6 -:103B3000892BC11003C00E94440BA4CFE1E0CE1238 -:103B4000FACF2091050322FD9DCF891709F49ACF62 -:103B50008093440297CFC11006C00E94FA098B2DB2 -:103B60000E94390B8FCFF1E0CF1609F48BCFF5CF40 -:103B7000DD2031F025E02C1508F484CF8B2DDBCF30 -:103B800034E03C1508F47ECFEACFCC2041F3093372 -:103B900049F4FFEF27EE33E0F15020403040E1F7E9 -:103BA00000C00000802F0E944E0B6CCF812F8695A5 -:103BB0008695837061F0813009F064CFC8019370FD -:103BC000D11002C090E080E00E94AE055BCFC8013A -:103BD0009370D11002C090E080E00E94C40552CFE3 -:103BE000802FDD2029F00E94BC070E94DA064ACF10 -:103BF0000E940107FACF812F837009F03FC0D110D6 -:103C000041CF402F429546954770440F440F802F77 -:103C10008F7090E0042E02C0880F991F0A94E2F77B -:103C200030E020E004FF09C02FE030E002C0220FA6 -:103C3000331F4A95E2F72095309516951695137027 -:103C4000123099F078F440914502509146021130BB -:103C500039F0822B932B842395230E941E0B12CFC5 -:103C6000842B952B822B932BF8CF822B932B209197 -:103C700045023091460282279327EFCF8695DD20BB -:103C800011F0812F8170882309F4FCCE402F4295DA -:103C900046954770440F440F802F8F7090E0042E9C -:103CA00002C0880F991F0A94E2F730E020E004FF79 -:103CB00009C02FE030E002C0220F331F4A95E2F71F -:103CC00020953095169516951370123099F078F46A -:103CD0004091380350913903113039F0822B932BE6 -:103CE000842395230E942D15CDCE842B952B822BDA -:103CF000932BF8CF822B932B2091380330913903EB -:103D000082279327EFCF1F70DD2029F0812F0E949B -:103D10007115802F10CF802F0E94390B812F0E94A8 -:103D20004415B0CE023F09F441C060F4003F11F1E8 -:103D3000013FA1F1DD2009F457C0C11086CE812FCB -:103D40008F7131C0033FB9F1043FA1F7DD2009F4C1 -:103D500040C01F71812F0E9471158091050382FD63 -:103D600007C0E8E01E9FC0011124836080934002D9 -:103D7000812F19C0DD2069F084E08C1508F482CE13 -:103D80001F7181E090E002C0880F991F1A95E2F739 -:103D9000B3CF95E09C1508F475CEF2CF812F8F71CB -:103DA000DD2009F4BCCF0E9471156CCE812F8F717C -:103DB000DD20C9F3B4CF90E080E0DD2009F492CF9C -:103DC0001F7181E090E002C0880F991F1A95E2F7F9 -:103DD00089CF81E00E945515F1E0FC1508F052CE24 -:103DE00082E00E9455154ECECC2059F0093309F0DF -:103DF000D9CE2FEF37EE83E0215030408040E1F7FD -:103E0000CFCE812F8F718BCF00313FE5130709F49F -:103E1000D1CA01319FE51907A9F482E0CCCA61E05B -:103E2000C7010E945B0F8C01F7018281811117CAC3 -:103E30000031FFE51F0709F4C3CA01312FE512075E -:103E400009F4C2CA0238EFE51E0709F425CB08F0D1 -:103E5000BDCA00382FE5120709F4EBCA01383FE567 -:103E6000130709F4FCCAF7018281882369F0C801AD -:103E7000815E9C45059740F46FE1600F60935002AE -:103E80008CE090E00E94852F17FF8FCBF701828195 -:103E9000882309F459C00E94DA05869581708093C1 -:103EA000E80190915002913029F4882319F089E3B8 -:103EB0000E94280D809143028093E70110924302F3 -:103EC00080915002813009F443CB882309F43CCB24 -:103ED000823009F44ACB843009F44ECB8FE39CE95D -:103EE0000197F1F700C000005801E894B7F84CE0E2 -:103EF000C42ED12CC5010C2C02C0969587950A942E -:103F0000E2F78F7096EF980F963008F43ACB805D09 -:103F10000E94A90D94E0C91AD108ECEFCE16EFEF7C -:103F2000DE0641F780915002813009F430CB8823BE -:103F300009F429CB823009F426CB843009F433CB41 -:103F40008091E70180934302F7018281882309F47D -:103F500046C0109295030230FCE51F0708F44AC0E2 -:103F600006312CE5120738F098012A5F3C452930CC -:103F7000310508F03FC00E94B40F90930503809371 -:103F8000040300313CE5130709F4F6CB08F084CBB9 -:103F900008309CE5190709F4E5CB08F053CB043051 -:103FA000FCE51F0709F4D6CB08F039CB02303CE51D -:103FB000130709F4C5CB03301C4509F4C7CB609146 -:103FC00004031091050384E090E00E94852F612F87 -:103FD00082E290E00E94852F0E94281652C9063185 -:103FE0001C45D1F58091E90181110CCC89E20E9438 -:103FF000450A03CC06312CE5120709F4EECB80917B -:10400000430282720C3C9CE5190709F4AECC08F01F -:104010002ECC063CFCE51F0709F493CC08F005CC38 -:10402000033C3CE5130709F482CC08F0EDCB023CDD -:10403000ECE51E0709F456CC0A35FDE51F0709F427 -:10404000D0CC08F0ACCC01153CE5130709F4B9CC91 -:104050000E3D1C4509F4C2CCF7018681978100977B -:1040600009F4C3CC0E9472088C01F701D280C5808C -:10407000C2943FE0C322809140028770A1F0AD2C32 -:10408000DD2091F0812F807F803421F080E2800F4D -:10409000883048F082E00E94551580914002877078 -:1040A000AA24A3948111A12C912E92942FE0922204 -:1040B000FBE0F91508F4E6CCE92DF0E0ED52F04D07 -:1040C0000C94042FCF93DF938091FB01807FA1F4A8 -:1040D0008091F801882381F080913F02D091FE0108 -:1040E0006091F6017091F701A091F901B091FA0188 -:1040F000C62FC723D81303C0DF91CF91089590E056 -:10410000109711F0CF3F19F401968770F3CF9C01FF -:1041100043E0220F331F4A95E1F7F901E150FE4FCA -:1041200041814713F1CF40814613EECF42814111C7 -:10413000EBCF438154814A1B5B0B483C510520F770 -:104140008091FB018F7080618093FB01F901EC5F2E -:10415000FD4F80818F708061808386EF91E00E94A7 -:104160000419DF91CF910C94A40AAF92BF92CF9221 -:10417000DF92EF92FF920F931F93CF93DF93CDB710 -:10418000DEB765970FB6F894DEBF0FBECDBF8C01CA -:1041900085E0F801DE01519601900D928A95E1F7D4 -:1041A000F801E28066EFA62E61E0B62E6091F9017B -:1041B0007091FA016115710509F468C19091F601D9 -:1041C0004091F701892F84238F3F09F45FC120813B -:1041D0003181C380D480F090F801F601E61BF70B23 -:1041E000FF2009F41DC18091FB01582F507FE83C4E -:1041F000F10508F0D0C0511181C0FE2C43132BC033 -:10420000921329C06091FC017091FD01F801468173 -:10421000578164177507F9F4E1101DC08F70806134 -:104220008093FB01C5010E9404198091FB01F801F4 -:1042300085838F2D65960FB6F894DEBF0FBECDBF78 -:10424000DF91CF911F910F91FF90EF90DF90CF9072 -:10425000BF90AF900895CD2829F0822F83238F3F00 -:1042600009F02FC180E0F82FF170DF2E80FF3CC0F5 -:1042700080913F024091FE01841315C0298B3A8B37 -:1042800089899A890E94210F292F22952F70223027 -:10429000F8F0243020F59F70F9F0F8019581907FB7 -:1042A000D9F4D12C1FC090E0FC0153E0EE0FFF1FAA -:1042B0005A95E1F7E150FE4F5181351306C0508108 -:1042C000251303C05281E5120FC001968770D4CF29 -:1042D0009F7011F0882329F3805E883010F3C801A5 -:1042E0000E940419FD2CA5CFEE2009F4A2CF8091E5 -:1042F000FB0181608093FB01F12C9BCF43131BC01A -:10430000921319C04091FC015091FD01F8012681E2 -:1043100037814217530779F4E1100DC08583C80136 -:104320000E94041988E0F801A6EFB1E001900D9217 -:104330008A95E1F77ECFC8010E942D0F882339F1BD -:10434000EE2029F18091FB018032A0F02091F6014E -:104350003091F7013A8729871B86DD86CC868E87C8 -:104360008091FC019091FD01988B8F87CE01099679 -:104370000E94041988E0F801A6EFB1E001900D92C7 -:104380008A95E1F70E946220FF24F39452CFC8017E -:104390000E940419F9CF51110AC086EF91E00E94E2 -:1043A000041988E0F50111928A95E9F7A5CF431326 -:1043B00018C0921316C04091FC015091FD01F80104 -:1043C000268137814217530761F4E1100AC08583C3 -:1043D000C8010E94041988E0F50111928A95E9F755 -:1043E00028CFC8010E942D0F882389F2EE2079F290 -:1043F0008091FB01803208F4BDCF2091F60130910D -:10440000F7013A8329831B82DD82CC828E838091DF -:10441000FC019091FD0198878F83CE010196A8CF72 -:10442000E83CF105C0F6FE2CEE2009F4B0CF4313B2 -:104430001FC092131DC02091FC013091FD01F801B5 -:10444000868197812817390799F49091FB0190FD97 -:1044500069CF907F09F466CF8091FB018583903FFF -:1044600009F45DCF982F907F905F8F70892B56CF86 -:10447000C8010E942D0F81117DCF8091FB018160C9 -:104480008093FB01C8010E940419D3CEEE2009F4E9 -:104490007ECFC8010E942D0FF82E882309F477CF14 -:1044A00088E0F801A6EFB1E001900D928A95E1F75E -:1044B0008091F6019091F7010E94210F0E946220E5 -:1044C000B8CE81E08E25CFCECF93DF93CDB7DEB7C8 -:1044D00060970FB6F894DEBF0FBECDBF29873A872D -:1044E0004B875C876D877E878F87988BCE01099677 -:1044F0000E94B520811112C088E0FE013996DE01CC -:10450000119601900D928A95E1F78C859D85892BF6 -:1045100029F089859A8589238F3FA9F580913F02EB -:104520009091FE0189131CC060960FB6F894DEBF0F -:104530000FBECDBFDF91CF91089593E0AA0FBB1FAF -:104540009A95E1F7A150BE4F98E0FE013196019097 -:104550000D929A95E1F78093FE010E94A40ADECFA6 -:10456000B8E08B9FC001112481509E4F0E94B5205E -:104570008823D1F280913F0290E0019687709927BD -:1045800080933F02CBCFA091FE01B0E0CD01019618 -:104590008770992720913F022817190671F60E940B -:1045A00028161092FE0110923F0288E0E6EFF1E03B -:1045B000DF011D928A95E9F7B1CF0F931F93CF9337 -:1045C000DF9380918C02E0918B02CCE081111AC0C4 -:1045D000DF91CF911F910F910895D1E0DE0FD0931D -:1045E0008B020E2F10E0EC9FF0011124E357FD4FDA -:1045F00083819481892B29F08081918189238F3F48 -:1046000051F4ED2F80918C02E81738F310928C0250 -:1046100010928B02DDCFC09FD001C19FB00D11243D -:10462000A357BD4F16968D919C911797892B29F40E -:1046300018968D919C91019651F42081318142818F -:10464000538164817581868197810E946422C09F15 -:10465000F001C19FF00D1124E357FD4F1482138226 -:10466000D0CF1092F8021092F7021092420180917E -:10467000F6028093F5020E9414060C94DD222F921C -:104680003F924F925F926F927F928F929F92AF92E2 -:10469000BF92CF92DF92EF92FF920F931F93CF932F -:1046A000DF93C091F502E7E0FE2E01E010E0FCE0B0 -:1046B0002F2EAEEFEA2E8091F6028C1316C00E94C8 -:1046C000DD22DF91CF911F910F91FF90EF90DF904E -:1046D000CF90BF90AF909F908F907F906F905F90A2 -:1046E0004F903F902F900C941406D0E0FE01EE0FF7 -:1046F000FF1FE351FD4F80819181F89EF001F99EEB -:10470000F00D1124E85EFE4F2481211158C0309035 -:104710008C02ADE8B2E030E020E0412C5F012315CF -:1047200008F04BC01A966D907C901B97F501808025 -:1047300091804FEF5FEF512CC52CD12CF601EE0F7D -:10474000FF1FE80DF91D659174916616770609F44F -:10475000A601672B11F05394EFCF4F3F5407B1F1EF -:10476000B80102C0660F771F4A95E2F7462AA801F2 -:1047700002C0440F551F5A94E2F7415051094416A4 -:10478000150601F5229EF001239EF00D1124E3573A -:10479000FD4FF89ED001F99EB00D1124A85EBE4FCA -:1047A00012962D913C91139737832683E082E18204 -:1047B0009187808771E015967C930E94E60521968B -:1047C000C37079CF14961C921E9213972F5F3F4FA0 -:1047D0001C96A5CF9F92AF92BF92CF92DF92EF929D -:1047E000FF920F931F93CF93DF9300D000D000D0A0 -:1047F000CDB7DEB78E010F5F1F4F86E0F801119233 -:104800008A95E9F785E7C82E81E0D82EF12CE12CB6 -:10481000AA24A394B12CF60181916F018F3F09F472 -:1048200049C0F894E82FE295EF70F0E021A18F7075 -:10483000A50102C0440F551F8A95E2F7CA01922FC5 -:10484000982B91A392A18095892382A3789400C08C -:10485000EBE7F1E030E020E0912C41914F3F09F48B -:1048600073C0A42FA295AF70B0E090968C9190E0A9 -:104870004F7002C0959587954A95E2F780FD64C018 -:104880008A2D022E01C0880F0A94EAF7982A2F5F1A -:104890003F4F2430310509F7F601319780818F3F72 -:1048A00011F00E94180850EA5A95F1F7F801EE0D40 -:1048B000FF1D90828FEFE81AF80AE6E0EE16F10489 -:1048C00009F0A9CF46E050E0B80184E592E00E94EB -:1048D000642FFF24F394009709F4F12C892BB1F194 -:1048E00086E0F801A4E5B2E001900D928A95E1F727 -:1048F00081E0809349020E94A20590934802809330 -:10490000470280914702909148020E9493050597C3 -:1049100008F1809154028093670280915502809340 -:1049200068028091560280936902809157028093B9 -:104930006A028091580280936B02809159028093A1 -:104940006C021092490206C080E0A0CF809149021B -:104950008111D7CF80914201882301F18091F70224 -:104960009091F8020097D1F00E949305209189025E -:1049700030918A022817390788F49091F5028091C6 -:10498000F602981709F445C00E943F2310928A024C -:10499000109289021092F8021092F70280914F0251 -:1049A000882371F080914D0290914E020E949305F0 -:1049B000893E934028F082EE0E944E0B10924F02E7 -:1049C00080914C02882391F080914A0290914B0291 -:1049D0000E949305883E934048F00E94A205909360 -:1049E0004B0280934A0283E70E94280D8F2D269662 -:1049F0000FB6F894DEBF0FBECDBFDF91CF911F91F0 -:104A00000F91FF90EF90DF90CF90BF90AF909F906D -:104A100008950E94DD221092F8021092F7020E947F -:104A20001406BCCF2F923F924F925F926F927F926B -:104A30008F929F92AF92BF92CF92DF92EF92FF92AE -:104A40000F931F93CF93DF93CDB7DEB769970FB660 -:104A5000F894DEBF0FBECDBF498B5A8B6B8B7C8B1E -:104A60008D8B6111109242021D861E861F86188A48 -:104A700085E0FE017196DE01199601900D928A95EE -:104A8000E1F78C859D85892B31F089859A8589236D -:104A90008F3F09F0D4C129853A854B855C856D85AA -:104AA0007E858F8598890E946422C3C028EFC21634 -:104AB0002CE5D20629F4882379F00E943123EBCF2C -:104AC00039EFC3163CE5D30639F4882329F08091E9 -:104AD00042018111F2CFC3C108E111E0E12CB12CF8 -:104AE000A12C88248394912C9EEF592E4424439426 -:104AF000F8016081718166246A94762C20E0422F4F -:104B000050E0FA01EE0FFF1FE60FF71F8591949119 -:104B1000C816D90609F43A01892B11F02F5FEFCF9F -:104B2000F12CFFEF6F167F0609F445C0F8014481B0 -:104B3000F09042018F2D411180E0F82FF170FF2E8F -:104B4000F801258086819B85992309F408C1FF20FF -:104B500009F405C1211014C0A40101C0440F6A94D6 -:104B6000EAF7842B86838091890290918A028039AA -:104B7000914030F440E951E050938A024093890219 -:104B8000C40102C0880F991F2A95E2F70197F80126 -:104B900026812817190679F48091F7029091F8027E -:104BA000009709F45FC00E9493058139914008F491 -:104BB00059C0F8014482EF28FFEFAF1ABF0A095F1E -:104BC0001F4F26E0A216B10409F092CF8B858823EF -:104BD00009F420C1EE2009F41DC10E94A2059093A2 -:104BE000F8028093F70280918C02883010F591E0F2 -:104BF000980F90938C0298E0FE013996DE01119691 -:104C000001900D929A95E1F73CE0839FC001112439 -:104C100083579D4F28E0FE013196DC0101900D92F3 -:104C20002A95E1F72FEF3FEFFC0131872087D386EC -:104C3000C28669960FB6F894DEBF0FBECDBFDF9176 -:104C4000CF911F910F91FF90EF90DF90CF90BF9089 -:104C5000AF909F908F907F906F905F904F903F901C -:104C60002F9008958091F5026090F602982FF0E061 -:104C7000E0E0861114C09093F5020E171F0709F4A7 -:104C80009ACF90E0FC01EE0FFF1FE351FD4FB18280 -:104C9000A0820196837099278093F6028CCF282EEC -:104CA000312CF101EE0FFF1FE351FD4F20813181C7 -:104CB000F7E0F29FD001F39FB00D1124A85EBE4F24 -:104CC0002D913C911197398F288F712C60E070E005 -:104CD000E72FF0E0EE0FFF1F288D398DE20FF31F55 -:104CE0002591349121153105E1F0F8010190F08111 -:104CF000E02DFF8BEE8B60E005C02417350709F42B -:104D00007F2C6F5FE62FF0E0EE0FFF1F4E895F896B -:104D1000E40FF51F459154914115510571F77F5FDF -:104D2000D7CF7720C9F0F801671708F0FD0144825A -:104D30000E171F0721F49093F502F72C3CCF981320 -:104D400005C0AE17BF0711F49F5F937091012F5FED -:104D50003F4F822F83708DCFF0E0E0E0F7CF90E0FF -:104D600021101FC0B40102C0660F771F2A95E2F719 -:104D70009B01215031092817390731F4442309F4E4 -:104D800047C0C5010E94E605C40101C0880F6A94AE -:104D9000EAF7982F9095F801868189238683F22C73 -:104DA0000ACF9C01062C02C0359527950A94E2F79C -:104DB000A90141705527BC016150710986239723D1 -:104DC000892B11F5452B01F1F80182819381892B03 -:104DD000C1F01B821C821D821E8259825A820E944F -:104DE000A2058160582F9D838C83F8018281938175 -:104DF0008F83988729813A814B816D817E810E94C2 -:104E00006422F8011582C0CFF22FF1702F2EBCCF93 -:104E10002F2CBACF9091F5028091F602981731F0BD -:104E20000E943F23EE2009F436CE03CF0E94DD22FC -:104E30001092F8021092F7020E941406F3CF61E07C -:104E4000CE0109960E945B0F6C018B85F7EFCF16A0 -:104E5000FCE5DF0609F02ACE882309F43DCE81E087 -:104E60008093420118CE1F920F920FB60F92112419 -:104E70002F933F934F935F936F937F938F939F9362 -:104E8000AF93BF93CF93DF93EF93FF93D091E9005C -:104E9000DF708091EC00C82FC17080FDC0E81092D7 -:104EA000E9008091F000877F8093F00078940E9461 -:104EB0003D161092E9008091F00088608093F00028 -:104EC000CD2BCF70C093E900FF91EF91DF91CF918F -:104ED000BF91AF919F918F917F916F915F914F9112 -:104EE0003F912F910F900FBE0F901F9018951F921A -:104EF0000F920FB60F9211242F933F934F935F930E -:104F00006F937F938F939F93AF93BF93EF93FF9391 -:104F10008091E10082FF09C08091E20082FF05C01C -:104F20008091E1008B7F8093E1008091DA0080FF27 -:104F300024C08091D80080FF20C08091DA008E7F4D -:104F40008093DA008091D90080FF9BC080E189BD09 -:104F500082E189BD09B400FEFDCF81E080932E037C -:104F600080910903811109C00E9406040E94D104A6 -:104F70008091E20084608093E2008091E10080FFF4 -:104F800017C08091E20080FF13C08091E2008E7F05 -:104F90008093E2008091E20080618093E200809142 -:104FA000D80080628093D80019BC85E080932E03DE -:104FB0008091E10084FF29C08091E20084FF25C038 -:104FC00080E189BD82E189BD89B5982F917080FF0C -:104FD000FBCF8091D8008F7D8093D8008091E10035 -:104FE0008F7E8093E1008091E2008F7E8093E200CB -:104FF0008091E20081608093E20080912F038823FA -:1050000009F445C084E080932E038091E10083FF82 -:1050100027C08091E20083FF23C08091E100877F59 -:105020008093E10082E080932E0310922F03809101 -:10503000E1008E7F8093E1008091E2008E7F80937B -:10504000E2008091E20080618093E20042E060E053 -:1050500080E00E949F048091F00088608093F000BF -:10506000FF91EF91BF91AF919F918F917F916F9140 -:105070005F914F913F912F910F900FBE0F901F9016 -:10508000189519BC10922E031092090376CF8091C7 -:10509000E30087FD93E090932E03B7CF78941F929F -:1050A0001FB61F9211248F939F93AF93BF9380914C -:1050B000000390910103A0910203B09103030196B4 -:1050C000A11DB11D8093000390930103A0930203DF -:1050D000B0930303BF91AF919F918F911F901FBE1B -:1050E0001F9018951F921FB61F9211248F939F93A4 -:1050F000AF93BF938091FF02811113C08091000391 -:1051000090910103A0910203B09103034196A11D68 -:10511000B11D8093000390930103A0930203B09309 -:105120000303BF91AF919F918F911F901FBE1F905E -:105130001895CDB7DEB7EE970FB6F894DEBF0FBE69 -:10514000CDBF84B7877F84BF0FB6F894A8958091B0 -:105150006000886180936000109260000FBE80E85C -:1051600090E00FB6F89480936100909361000FBEB9 -:1051700085B7806885BF85B7806885BF86E198E080 -:105180009093C5018093C4010E9406040E94D1043B -:105190008091E20084608093E200789480912E03F5 -:1051A0008823A1F01091E9001F709091EC00892FE5 -:1051B000817090FD80E8182B1092E9008091E80042 -:1051C00083FD0E943D161F701093E90082E084BDAC -:1051D00093E095BD9AEF97BD80936E000E949B0F60 -:1051E000811102C00E94890E05E711E02BE7C22E53 -:1051F00021E0D22EF80181918F018F3F11F00E94A2 -:105200001808C016D106B1F786EF0E94180887EF7C -:105210000E94180883E90E94180886E90E9418086D -:10522000E4E5F2E08AE592E0A7E6B2E011921D9291 -:105230008E179F07D9F70E941D16811102C00E9488 -:10524000B11582E090E00E94712F809360020E946D -:10525000B40F90930503809304030E94EA238FE325 -:105260009CE90197F1F700C000000E94EA238091B9 -:10527000670280FF08C06FEF7FEF90E080E00E9440 -:10528000A32F0E944F0C83E090E00E94712F90E0CA -:105290000E941E0B80913803909139030E9489145B -:1052A000509A589A559A5D9A549A5C9A8CE090E07C -:1052B0000E94712F90E0B0E0A0E0809350029093A4 -:1052C0005102A0935202B093530280915A0281116D -:1052D00033C00E941D16811104C00E94B1150E94A6 -:1052E000A11588E090E00E94792F60938E0370935F -:1052F0008F0380939003909391036E7F71F40E94CB -:10530000A11588E090E00E94792F60938E0370933E -:105310008F0380939003909391030E942B06109229 -:10532000840280918E0380FF04C060E086950E9415 -:105330002A1481E080935A025198599A52985A9AA5 -:1053400089B1869581704A9928C290E0892B809313 -:105350005E028AEC92E090937C0280937B0260E094 -:1053600081E20E942A1481E090E00E942D1580E0E5 -:1053700091E09093FC028093FB0218E1C12ED12CA6 -:1053800000E4A02E87E692E096E0B92EB80E809158 -:105390002E039924939400E112E1853009F451C25F -:1053A0000E94EA23882359F08FB7F89440910003B4 -:1053B0005091010360910203709103038FBFE1E6F6 -:1053C000F2E0A7E6B2E010E000E0302F8D9191917D -:1053D000981709F45FC2292F282790E09924939405 -:1053E000422F492109F451C29DAB3EAB892191E086 -:1053F00009F490E09FAB0E94A2058160782F99AFDD -:1054000088AF4DA95EA96FA989AD0E941225F80148 -:10541000EF59FD4F808198269082809184028823E5 -:10542000D1F180918302E0918E03E695E81BE09331 -:105430007F02823009F045C2F0E0EC51FD4FE4916B -:105440000E2F10E0BBE08B2EB3E19B2E80918002EB -:10545000882361F0109280020E94A20590937E0240 -:1054600080937D0210928202109281020E94A20516 -:10547000E0917D02F0917E028E1B9F0B8F3F9F4734 -:1054800050F4E00FF11FF0937E02E0937D028DE770 -:1054900092E0F4010995E0915E02EE0FEE0FE093C9 -:1054A0005E0289B181FBEE24E0F84A9964C280E093 -:1054B0008E29E82BE0935E02EF70F0E0E158FE4F9A -:1054C000808190915D02890F80935D0220E084309D -:1054D00034F180915C028F5F80935C0212E018AB24 -:1054E00019AA81E08AAB0E94A2058160782F9CAB4B -:1054F0008BAB48A959A96AA98CA90E9412251BA7A0 -:105500001CA61DA60E94A2058160782F9FA78EA7CA -:105510004BA55CA56DA58FA50E94122521E0809169 -:105520005D028D3F2CF580915C02815080935C027E -:105530001EA21FA281E088A70E94A2058160782F89 -:105540009AA789A74EA15FA168A58AA50E941225E6 -:1055500019A21AA21BA20E94A2058160782F9DA306 -:105560008CA349A15AA16BA18DA10E94122521E013 -:1055700080915D02082E000C990B64E070E00E949F -:10558000CE2E80935D02222359F08FB7F89440917C -:1055900000035091010360910203709103038FBFD8 -:1055A00086E0E4E7F2E0DE01119601900D928A9523 -:1055B000E1F7909076028090770210917802009146 -:1055C000790210927602109277021092780210926D -:1055D0007902892D882909F448C08091720290913E -:1055E00073020E9493059C0190916E02992309F425 -:1055F000AEC323333105C8F19F3F19F09F5F9093ED -:105600006E02992059F00E949C079FEF19140CF428 -:1056100091E0899F802D112480937602882059F093 -:105620000E949C079FEF18140CF491E0899F802D35 -:10563000112480937702309176023323B1F02091C8 -:105640007702222391F045EB3403C0011124992302 -:1056500009F494C19093760245EB24039001112440 -:10566000332309F48FC130937702812F802B09F403 -:1056700048C080917002909171020E9493059C0134 -:1056800090916D02992309F45DC325363105C8F167 -:105690009F3F19F09F5F90936D02112359F00E9474 -:1056A0007A079FEF11160CF491E0899F802D112449 -:1056B00080937802002359F00E947A079FEF10161A -:1056C0000CF491E0899F802D112480937902309110 -:1056D00078023323B1F020917902222391F045EB37 -:1056E0003403C0011124992309F450C19093780226 -:1056F00045EB240390011124332309F44BC130936B -:1057000079028091760290917702892B90917802AC -:10571000892B90917902892B11F00E94DA0686E09C -:10572000FE013196A4E7B2E001900D928A95E1F76F -:105730000E94DA0590915F02891731F00E94DA0524 -:1057400080935F020E94AB0B80912E03843009F09E -:105750001ECE83E08093E9008091E80082FF17CE9F -:105760008091E80090E085FF06C00E942504882310 -:1057700009F414C191E08091E8008B778093E800F0 -:10578000992309F404CEE981E150E33108F088C19E -:10579000F0E0E152F04D0C94042F92E0D7CD8091CF -:1057A0002E03843009F440C080E00E94AB0B1092BD -:1057B000840280917A02811116C090927A028091BF -:1057C0008E03982F917090935B028E7F80938E034F -:1057D0009FEFE0E7F2E09150E040F040E1F700C0D9 -:1057E00000000E94D80F1092FF020FB6F894A895FF -:1057F000C09260000FBEA092600083B7817F84607A -:1058000083BF83B7816083BF7894889583B78E7F89 -:1058100083BF0FB6F894A89580916000886180934B -:105820006000109260000FBE80912D03882349F024 -:105830000E94EA23E7E6F2E08191811164C2BE1280 -:10584000FBCF80912E03853009F4A9CF0E94281642 -:105850000E94DA050E94AB0B10927A0280915B02E3 -:10586000882361F080918E03816080938E0360E0D5 -:1058700086950E942A140E94C20F92CD80918502C3 -:105880008823C9F30E94D80FF6CF9F5F990C9430FC -:1058900009F0A6CD0F5F1F4F0630110509F095CD19 -:1058A0008FEF8AAF8BAF1CAE0E94A2058160782F6C -:1058B0009EAF8DAF4AAD5BAD6CAD8EAD0E94122533 -:1058C000ACCD863059F4F0E0EF51FD4FE4910E2F4E -:1058D00010E0ABEF8A2EA2E19A2EB8CD893061F4A8 -:1058E000E695F0E0E252FD4FE4910E2F10E0F7E66E -:1058F0008F2EF2E19F2EAACD8F3061F4E695F0E075 -:10590000E552FD4FE4910E2F10E0E9EF8E2EE1E11C -:105910009E2E9CCD853159F4F0E0E852FD4FE49184 -:105920000E2F10E07BEA872E71E1972E8FCD08E2D3 -:1059300010E042E2842E41E1942E883109F486CDB4 -:10594000833249F4E6EDF2E00591149162EA862E85 -:1059500062E1962E7BCD04EF11E059EE852E50E1E9 -:10596000952E843209F472CD00ED17E03AE2832ED1 -:1059700036E0932E6BCD82E090E09ACD81E080936B -:1059800076026ACE81E0809377026FCE81E08093C9 -:105990007802AECE81E080937902B3CE00E210E0CF -:1059A000CE0101964C018091E80085FD0AC08091EE -:1059B000E8008B778093E8000E942504882399F300 -:1059C000D9CE8091F100F40181934F01015011096A -:1059D00051F7D0CE1A8289E08B832DC08A81823024 -:1059E00009F4A7C18330A9F0813009F059C02FB75D -:1059F000F8946091000370910103809102039091EB -:105A000003032FBF0E940A2F6B837C838D839E83A9 -:105A100012C0809167028B83809168028C83809191 -:105A200069028D8380916A028E8380916B028F83DD -:105A300080916C02888780912E03843009F0A7CC76 -:105A40001091E9001F709091EC00892F817090FDFA -:105A500080E8182B82E08093E9008091E80080FFC5 -:105A60000DC050E040E060E270E0CE0101960E947F -:105A700056048091E8008E778093E8001F701093A1 -:105A8000E90085CC8A81823059F46B817C818D81DB -:105A90009E810E940A2F86E290E00E94852FCBCF44 -:105AA0008FEF8983C8CF4C816B818A810E94B20EAF -:105AB0009827892798279E838D83BDCF8D809E80D0 -:105AC0009824892498248A810B81F8E00F9F800113 -:105AD000112420E3829F000D111D11248C8190E080 -:105AE000880F991F080F191F692DC80187960E94FA -:105AF000852F682DC8018896D0CF0E941F0E9BCF9E -:105B00008A818138C1F060F4803809F094CF20E0B8 -:105B10004B816091900380918F030E9431138BCF52 -:105B2000823859F1833809F086CF20E04091910303 -:105B30006C818B81F2CF60E08B810E942A149B8163 -:105B400080918E03911111C08E7F80938E031092ED -:105B500084024FEF80E792E0415080409040E1F7AF -:105B600000C000000E94D80F66CF816080938E0332 -:105B700060E086950E942A145ECF8B818093920309 -:105B80005ACF8A81813899F030F4803809F053CFA8 -:105B90008091910321CF823891F0833809F04BCF67 -:105BA00080918F038B83809190038C8344CF80916D -:105BB0008E0380FF02C086950FCF80E00DCF8091CD -:105BC00092030ACF60918E0370918F0380919003AE -:105BD000909191030E941F132ECF80E18A832BCFD7 -:105BE00081E08A8389EFF8CE0A811B811027012783 -:105BF0001027FE0131963F018C80CF01880D911D49 -:105C00004C01C801895F9D4F8614970409F413CF96 -:105C1000093FE1E01E0750F40E94712FF3018483D5 -:105C20000F5F1F4FFFEF6F1A7F0AEBCFF301148254 -:105C3000F7CF0A811B81102701271027CE0101967B -:105C40003C018C80800E912E911CC801895F9D4F74 -:105C50008016910609F4EFCE093FE1E01E0720F41B -:105C6000F30164810E94852FFFEF6F1A7F0A0F5F97 -:105C70001F4FEBCF0E940F0EDECE8AE0AFCF0A811E -:105C80001B81102701271027CE0101963C018C8033 -:105C9000FC01E80DF11D4F01C80187968614970499 -:105CA00009F4C9CE003EF1E01F0750F40E94712FA5 -:105CB000F30184830F5F1F4FFFEF6F1A7F0AECCF52 -:105CC000F3011482F7CF0A811B81102701271027C7 -:105CD000CE0101963C018C80800E912E911CC80152 -:105CE00087968016910609F4A6CE003EE1E01E07D5 -:105CF00020F4F30164810E94852FFFEF6F1A7F0A61 -:105D00000F5F1F4FECCF09BD19BD09B400FEFDCFD9 -:105D10008091D8008F7D8093D8008091E0008260D0 -:105D20008093E0008091E00081FDFCCF0E94281666 -:105D300088CD86E290E00E94712F1B821C821D821A -:105D40008E8379CE2D32314008F0A4CCDACC2D32BE -:105D5000314008F053CC89CC87FB082E062687FDFE -:105D6000819567FD61950E94422F0EF4919507FC85 -:105D700081950895AA1BBB1B51E107C0AA1FBB1F39 -:105D8000A617B70710F0A61BB70B881F991F5A95C7 -:105D9000A9F780959095BC01CD01089597FB072E3A -:105DA00016F4009407D077FD09D00E94BA2E07FCA4 -:105DB00005D03EF4909581959F4F0895709561951B -:105DC0007F4F0895A1E21A2EAA1BBB1BFD010DC037 -:105DD000AA1FBB1FEE1FFF1FA217B307E407F5079B -:105DE00020F0A21BB30BE40BF50B661F771F881F77 -:105DF000991F1A9469F760957095809590959B010D -:105E0000AC01BD01CF010895EE0FFF1F0590F49185 -:105E1000E02D09946927962769277827872778270F -:105E200008950E94192F332312F48A1B9B0B0C94A4 -:105E30002A2FA29FB001B39FC001A39F700D811DA7 -:105E40001124911DB29F700D811D1124911D089583 -:105E50000E94192FB7FF0895821B930B08950E948B -:105E6000192FA59F900DB49F900DA49F800D911D9B -:105E700011240895B7FF0C942F2F0E942F2F821BFF -:105E8000930B0895991B79E004C0991F961708F0A9 -:105E9000961B881F7A95C9F780950895FB01DC0150 -:105EA00002C005900D9241505040D8F70895FC0172 -:105EB0004150504030F001900616D1F73197CF0194 -:105EC0000895882799270895FB01DC0104C08D916E -:105ED0000190801921F441505040C8F7881B990B5C -:105EE0000895F999FECF92BD81BDF89A992780B5A2 -:105EF0000895A6E1B0E044E050E00C94AB2FA8E197 -:105F0000B0E042E050E00C94AB2F262FF999FECF81 -:105F100092BD81BDF89A019700B4021639F01FBAFC -:105F200020BD0FB6F894FA9AF99A0FBE0895039619 -:105F3000272F0E94862F0E94852F252F0E94862FB3 -:105F4000242F0C94862F0196272F0E94862F0C94C5 -:105F5000852FDC01CB01FC01F999FECF06C0F2BD13 -:105F6000E1BDF89A319600B40D9241505040B8F717 -:105F70000895F894FFCF460F460F4F0F4F0F510F64 -:105F80004F0F4F0F4F0F460F460F560F4F0F4F0F2C -:105F9000560F22174A179D174A179D177D17B517D9 -:105FA0009D17B218BF180C1D0C1D7B1D7B1DD61D27 -:105FB000F01D421D421DFB1D831E921E921EEA2CE7 -:105FC000EE2C422D532D5E2D7D2D802DC12DE22DE9 -:105FD000502D502DED2DF02DF42D192E3A2E3D2E55 -:045FE0003F2E632EBF -:105FE40090050F0CEE0BEA0BE60B01191A1B1C1D96 -:105FF4001E1F202122010201FC002A00000000F6DD -:10600400004C00000000F0005000000000EA0051C5 -:1060140000000000E4004F00000000DE0052000019 -:1060240000000101818283E200E900EA00B500B6C4 -:1060340000B700CD008301CC008A019201940121B4 -:1060440002230224022502260227022A02B300B4F4 -:10605400006F007000F03435366667F6F7939600EB -:10606400FF0100010000FFFF0000010001FF00002C -:1060740001020202020606060909090909090F0FAD -:106084000F0F0F0F151515181919191919191919B1 -:10609400191923244022B6DA01B8010201FB0614BF -:0460A40007340700B6 +:100000000C949E030C94E5030C94E5030C94E50317 +:100010000C94E5030C94E5030C94E5030C94E503C0 +:100020000C94E5030C94E5030C94F6260C94B2268C +:100030000C94F1270C94E5030C94E5030C94E50370 +:100040000C94E5030C94E5030C94E5030C94E50390 +:100050000C94E5030C94CD270C94E5030C94E50374 +:100060000C94E5030C94E5030C94E5030C94E50370 +:100070000C94E5030C94E5030C94E5030C94E50360 +:100080000C94E5030C94E5030C94E5030C94E50350 +:100090000C94E5030C94E5030C94E5030C94E50340 +:1000A0000C94E5030C94E5030C94E5035800600000 +:1000B000000058005E00000058005D00000058007D +:1000C0005C00000057006000000057005F00000067 +:1000D00005010902A10185020901A1000509190113 +:1000E00029081500250195087501810205010930CF +:1000F00009311581257F950275088106093815811A +:10010000257F950175088106050C0A3802158125A1 +:100110007F950175088106C0C005010980A1018590 +:100120000319012AB700150126B700950175108142 +:1001300000C0050C0901A101850419012AA00215BE +:100140000126A002950175108100C005010906A1D4 +:10015000018505050719E029E715002501950875B2 +:100160000181020507190029EF1500250195F07599 +:10017000018102050819012905950575019102956E +:100180000175039101C00660FF0961A101096215B3 +:100190000026FF009520750881020963150026FFDF +:1001A00000952075089102C005010906A101050707 +:1001B00019E029E7150025019508750181029501CF +:1001C000750881010507190029FF150026FF009514 +:1001D0000675088100050819012905950575019125 +:1001E00002950175039101C00000000000000000AD +:1001F00000000000000000000000000000000000FF +:100200000000000000000000000000007E0F00D48D +:10021000FFFFFFC7000000780000000000000000A2 +:100220002A2B280000000000000000000000000051 +:1002300000000029000000002C1E3420212224345C +:100240002627252E362D3738271E1F20212223242E +:1002500025263333362E37381F0405060708090ACA +:100260000B0C0D0E0F101112131415161718191A66 +:100270001B1C1D2F3130232D350405060708090AE4 +:100280000B0C0D0E0F101112131415161718191A46 +:100290001B1C1D2F3130354C00047F3F1F6432146E +:1002A000643214783C1E1E140A050001010101018C +:1002B000010101010202020202020202020303031F +:1002C00003030303030404040404040405050505EF +:1002D00005060606060607070707070808080809AF +:1002E0000909090A0A0A0B0B0B0C0C0C0D0D0D0E5B +:1002F0000E0E0F0F0F1010111111121213131414F0 +:10030000151516161717181819191A1A1B1B1C1D64 +:100310001D1E1E1F202021222223242425262627BD +:100320002829292A2B2C2D2D2E2F303132323334EF +:1003300035363738393A3B3C3D3E3F4041424344F5 +:1003400045464748494A4C4D4E4F505153545556D7 +:1003500058595A5B5D5E5F616264656668696B6C83 +:100360006D6F7072737577787A7B7D7E80828385FE +:1003700087888A8C8E8F91939596989A9C9EA0A23E +:10038000A3A5A7A9ABADAFB1B3B5B7BABCBEC0C248 +:10039000C4C6C9CBCDCFD1D4D6D8DBDDDFE2E4E70C +:1003A000E9EBEEF0F3F5F8FAFDFFFFAA7F55400800 +:1003B0000706050D0C0B0A11100F161514131A1849 +:1003C0001B120903010002040E17192223252628F7 +:1003D000292A2C2D2F3032333536383A3B3D3E40DA +:1003E00042434547494A4C4E5051535557595A5C20 +:1003F0005E6062646668696B6D6F71737577797B37 +:100400007D7F81838587898A8C8E90929496989A35 +:100410009C9E9FA1A3A5A7A8AAACAEAFB1B3B4B64A +:10042000B8B9BBBCBEBFC1C2C3C5C6C7C9CACBCCA5 +:10043000CDCED0D1D2D2D3D4D5D6D7D7D8D9D9DA78 +:10044000DADBDBDBDCDCDCDCDCDDDDDDDDDCDCDCED +:10045000DCDCDBDBDBDADAD9D9D8D7D7D6D5D4D315 +:10046000D2D2D1D0CECDCCCBCAC9C7C6C5C3C2C1EA +:10047000BFBEBCBBB9B8B6B4B3B1AFAEACAAA8A747 +:10048000A5A3A19F9E9C9A98969492908E8C8A89FF +:10049000878583817F7D7B79777573716F6D6B69DC +:1004A00068666462605E5C5A5957555351504E4CB1 +:1004B0004A4947454342403E3D3B3A383635333260 +:1004C000302F2D2C2A2928262523224E007F004B51 +:1004D00000000001515400550056005F00600061AB +:1004E0000057005C005D005E00000059005A005B90 +:1004F00000580062000000630000004F000100503F +:100500000000000100AD002C005300145002530302 +:10051000532A000100010001000000010001000158 +:1005200000005C005C000001000000300001002FB2 +:1005300000000010500500170011030D0016000701 +:10054000002D01060119011000000011011D03E139 +:100550000057012C000000E2000000805F010081D4 +:100560005F00001050B9004A0017012B0352002B06 +:10057000011A01500051004F000000B6002C00B7D6 +:100580000028004E0000004B000000805F01008149 +:100590005F00001050010001000100010052000145 +:1005A000000100500051004F00000010033D080101 +:1005B0000053006800000069000000010001000114 +:1005C0000000000100010001000100010001000124 +:1005D0000001000100010001000000010001000114 +:1005E0000001000100000001000000010001000105 +:1005F00000000001000100010001000100010001F4 +:1006000000010001000100010000000100010001E3 +:1006100000010001000000010000000100010001D4 +:1006200000000001000100010001000100010001C3 +:1006300000010001000100010000000100010001B3 +:1006400000010001000000010000000100010001A4 +:100650000000000100010001000100010001000193 +:100660000001000100010001000000010001000183 +:100670000001000100000001000000010001000174 +:100680000000000100010001000100010001000163 +:100690000001000100010001000000010001000153 +:1006A000000100010000000100000009025B0003DE +:1006B0000100A0FA09040000010301010009211151 +:1006C0000100012240000705810308000A09040116 +:1006D000000203000000092111010001222200078D +:1006E000058203200001070503032000010904021D +:1006F00000010300000009211101000122B60007DA +:1007000005840320000A12010002000000084B418A +:1007100015000200010200010A03500053003100DD +:10072000370000001203410054004C0041004E000D +:1007300054004900530000000403090411241FBEA3 +:10074000CFEFDAE0DEBFCDBF04B603FE27C0809155 +:10075000940390919503A0919603B09197038730ED +:10076000904BA740B04BD1F4109294031092950394 +:10077000109296031092970314BE84B7877F84BFAC +:100780000FB6F894A895809160008861809360000E +:10079000109260000FBEE0E0F8E3099511E0A0E0E0 +:1007A000B1E0E4ECFEE502C005900D92A43CB10777 +:1007B000D9F723E0A4ECB1E001C01D92A439B2073F +:1007C000E1F70E9418280C94292F0C940000E8ED02 +:1007D000F0E080818E7F80831092E2001092DA0038 +:1007E0001092E100A0EEB0E08C9181608C9380814A +:1007F0008F77808319BCA7EDB0E08C918E7F8C93AE +:1008000080818F7E80831092070308952091E400F9 +:100810003091E50095E6A9012091EC00822F8170CE +:1008200020FF06C08091E80080FF06C080E00895A8 +:100830002091E80022FD1AC080912C03882389F0C2 +:10084000853089F08091EB0085FD0FC02091E40098 +:100850003091E50042175307F9F29150E1F684E038 +:10086000089582E0089583E0089581E00895EF926D +:10087000FF920F931F93CF937C018B010E9406047C +:10088000C82F811117C08091E80085FD0BC08091B1 +:10089000E8008E778093E8000E940604882399F38D +:1008A000C82F08C0F70181917F018093F1000150AA +:1008B000110949F78C2FCF911F910F91FF90EF9065 +:1008C000089580912E0387FF13C08091E80082FF76 +:1008D00006C08091E8008B778093E80004C0809187 +:1008E0002C038111F2CF089580912C038823D9F332 +:1008F0008091E80080FFF8CF8091E8008E77ECCF00 +:10090000982F9093E900242F762F50E0891731F02B +:100910007091EC002091ED005091F00021FD07C096 +:100920009F5F973071F78093E90081E008953091DF +:10093000EB003E7F3093EB003091ED003D7F309334 +:10094000ED003091EB0031603093EB007093EC00E0 +:100950002093ED005093F0002091EE0027FDE0CFB2 +:1009600080E00895CF92DF92EF92FF920F931F9352 +:10097000CF93DF93C8EDD0E088818F7E8883E7ED49 +:10098000F0E080818160808384E082BF81E0809399 +:10099000070388818E7F888302EE10E0F8011082C1 +:1009A0001092DA0081EEC82ED12CF60110828881D7 +:1009B0008F77888388818068888388818F7D88830A +:1009C00019BC10922C0310922D0310922B0310923D +:1009D0002A0390EEE92EF12CF70180818B7F808332 +:1009E00088818160888342E060E080E00E9480042A +:1009F000F60180818E7F8083F80180818160808311 +:100A0000808188608083F70180818E7F80838881E8 +:100A100080618883DF91CF911F910F91FF90EF90BC +:100A2000DF90CF900895FC018091340390913503BD +:100A300086179707A0F06115710529F49091E800D9 +:100A40009E779093E80090E06115710551F4911143 +:100A500008C08091E80082FF34C080E00895BC01A6 +:100A6000F2CF80912C038823C1F18530C1F18091B0 +:100A7000E80083FD30C08091E80082FDEACF8091DC +:100A8000E80080FFE1CF8091F3002091F200382F41 +:100A90006115710519F02830310558F091E02830C2 +:100AA000310509F090E02091E8002E772093E800CE +:100AB000CBCF81918093F100615071092F5F3F4F3F +:100AC000E7CF80912C03882341F0853041F080915D +:100AD000E80083FFBECF81E0089582E0089583E0BF +:100AE00008958091090308959C014FB7F89480916F +:100AF000FE029091FF02A0910003B09101034FBF4D +:100B0000821B930B08952FB7F8948091FE02909169 +:100B1000FF02A0910003B09101032FBF089520911F +:100B2000FB023091FC022817390771F09093FC0208 +:100B30008093FB02E091F902F091FA02309721F0E4 +:100B40000084F185E02D099408952091F7023091F9 +:100B5000F8022817390771F09093F8028093F70292 +:100B6000E091F902F091FA02309721F00680F781C6 +:100B7000E02D09940895E091F902F091FA0230977E +:100B800021F00190F081E02D099480E00895DC01CE +:100B90006091F3028091F402962F891301C00895A9 +:100BA000292F30E0F901EE0FFF1FE551FD4F408185 +:100BB00051814A175B07A1F487E08A9FA0018B9FB0 +:100BC000500D1124485E5E4F81E0FA018483961334 +:100BD000E6CF2F5F3F4F237033272093F302089512 +:100BE0002F5F3F4F922F9370D8CF109288021092B0 +:100BF0008702E8E1F1E08581811102C0148216824A +:100C0000379681E0E234F807B1F70895FA018111CF +:100C100001C0FB010994089580918C03982F9E7F59 +:100C200061F48170826080938C0380918F03853B97 +:100C300018F084EB80938F0308958A34B0F38170A9 +:100C40008864F1CFAF92BF92DF92EF92FF920F9341 +:100C50001F93CF93DF93182F062FE901453B08F030 +:100C600044EBE42FF0E0E655FD4F011110C0E49194 +:100C70005E2F4E2F4983E8835A83DF91CF911F91D6 +:100C80000F91FF90EF90DF90BF90AF900895202FCD +:100C900030E04491D42EE42EF12C56E0159FC00193 +:100CA0001124EFEFF0E0BF010E94332E812F90E07E +:100CB000880F991F55E5569FD001579FB00D1124FD +:100CC0008A1B9B0B982F990F890F5F01A21AB30AF9 +:100CD000AE9CD001AF9CB00DBE9CB00D11245B2F1B +:100CE000089F80011124012F11275F01A01AB10A6A +:100CF000AE9C8001AF9C100DBE9C100D11245F01B5 +:100D0000A81AB108A29EC001A39E900DB29E900D9C +:100D10001124892F9927E81BF90BEE9DC001EF9D47 +:100D2000900DFE9D900D1124E92F62307105A1F008 +:100D300050F46115710509F49DCF6130710581F0A2 +:100D4000EB2F512F97CF6430710569F080F066303A +:100D5000710509F48FCFF4CFE42F4B2F592F8ACF91 +:100D6000E42F412F87CFEB2F542F492F83CF4B2FC9 +:100D70005D2DE12F7FCF0E9483059C01909176022B +:100D800080917702982B21F03093730220937202A6 +:100D90009091780280917902982B21F03093710222 +:100DA00020937002E091F902F091FA02309749F035 +:100DB00082E0809374020480F581E02D84E792E064 +:100DC0000994089540917602803F59F4809177020A +:100DD00087FF0DC01092770241110BC010926E0276 +:100DE00008C0813F81F48091770218169CF3442358 +:100DF00081F08091780290917902892B09F05AC094 +:100E000010926D020895823F49F447FFF0CF10928F +:100E10007602809177028111ECCFE0CF833F19F405 +:100E20001416ACF3E4CF90917802893F29F4191697 +:100E3000F4F610927802DBCF8A3F19F497FFD7CFF0 +:100E4000F8CF909179028B3F29F497FFD0CF109281 +:100E50007902CDCF8C3F19F41916CCF3C8CF9CE0A2 +:100E6000980F953090F4845F990B21E030E0B90140 +:100E700002C0660F771F8A95E2F7CB0180959091AB +:100E80007502892380937502B2CF8D3F31F4809132 +:100E90006F028E7F80936F02AACF8E3F21F48091E4 +:100EA0006F028D7FF7CF8F3F09F0A1CF80916F0246 +:100EB0008B7FF0CF089580916F0280FD16C081FD79 +:100EC00016C082FD16C080916D028823A1F0883281 +:100ED00080F428E0829FC001112468E270E00E9443 +:100EE000472E862F672B39F0089582E0089584E01D +:100EF000089588E0089581E0089580916F0280FD53 +:100F000014C081FD14C082FD16C080916E0288233A +:100F100081F0843180F422E3829FC001112464E1D6 +:100F200070E00E94472E862F08958CE0089589E195 +:100F3000089585E0089582E30895803F31F40E948A +:100F40007D078195809377020895813F19F40E946F +:100F50007D07F8CF823F31F40E947D078195809311 +:100F600076020895833F19F40E947D07F8CF893FE8 +:100F700029F40E945B078093780208958A3F21F448 +:100F80000E945B078195F7CF8B3F31F40E945B078E +:100F900081958093790208958C3F19F40E945B0734 +:100FA000F8CF9CE0980F953070F4845F990B21E0A6 +:100FB00030E001C0220F8A95EAF780917502822BFA +:100FC0008093750208958D3F31F480916F028160A6 +:100FD00080936F0208958E3F21F480916F028260AA +:100FE000F7CF8F3FB9F780916F028460F1CF80E037 +:100FF0000895F894E82FE295EF70F0E031A1282FE2 +:101000002F7081E090E001C0880F2A95EAF7982FB1 +:101010009095932391A392A1892B82A3789408950C +:101020009091020392FF06C0282F28712830F9F40E +:10103000877F846093FF06C0282F28712831F1F440 +:10104000877E84612091030320FF06C0382F38710A +:101050003830D9F4877F816021FF06C0282F28719E +:101060002831D1F4877E816194FD877E0895282FF1 +:1010700024712430F9F68B7F8860DCCF282F24710F +:10108000243101F78B7E8861DDCF382F317131300B +:1010900019F78E7F8860E0CF282F2171213121F749 +:1010A0008E7E8861E1CFCF93DF93EC01823891058A +:1010B000A9F1D8F58133910509F496C048F5893234 +:1010C000910509F48AC08A9709F495C0C11521E5F4 +:1010D000D20708F0BCC0C11530E5D30708F014C131 +:1010E000C83ED10508F09CC0C03ED10560F5C83AA5 +:1010F000D10508F087C0C53AD10508F0FDC0C13060 +:10110000D10509F12097F9F0C430D105E0F440C0D1 +:101110008533910509F45AC0C997C1F6809102033D +:10112000837089F0C0EED0E00EC0833E910599F146 +:1011300070F4803E910501F1823E910539F680916F +:10114000020382FD21C0CE01DF91CF910895863E3A +:10115000910561F1873E910571F1843E910509F099 +:10116000B5CF8091030381FFEECF80910203C7EEDC +:10117000D0E084FD0DC0E7CF8091020380FD12C155 +:101180009091030390FFDFCFC3EED0E084FFDBCF6D +:10119000D0E0C0E0D8CF8091020382FD06C19091DB +:1011A000030390FDBFCF84FFCECFF2CF8091020327 +:1011B00083FDDDCFC8CF8091020383FDF9C09091FC +:1011C000030391FFF0CFC4EED0E0BDCF80910203C6 +:1011D00085FFB9CFC9E2D0E0B6CF8091020385FF89 +:1011E000B2CFC5E3D0E0AFCF8091020386FFABCF93 +:1011F000CAE2D0E0A8CF8091020386FFA4CFC1E36A +:10120000D0E0A1CFCF3BD10518F6C85AD0E0CC0F23 +:10121000DD1FC95BDE4F0990D881C02DD46493CF08 +:10122000C11540E2D40758F4C11581E0D80708F091 +:101230008ACFC03FD10508F4ABCFD06584CFC115AC +:1012400090E4D90708F4A4CFDF70D06A7CCFC11531 +:1012500025E5D20700F5C11534E5D30708F08AC0AB +:10126000C11543E5D40708F071C0C11582E5D80760 +:1012700008F467C0CE018370992721E030E002C0F6 +:10128000220F331F8A95E2F7C695C69580E2C89F64 +:10129000E001112452C0C11599E5D907A8F4C11580 +:1012A00028E5D20708F06BC0C11536E5D30708F072 +:1012B0006FCF8C2F0E941008C82FD0E0DC2FCC27D6 +:1012C000CC27DF71D0623FCFC1154AE5D40708F4BF +:1012D0005BC0CE0190568115904208F059CF8D2FFA +:1012E0008F710E94100890E0982F882788279F719F +:1012F0009C012C2BE901E6CFC55AD0E0CC5BDE4F38 +:10130000C881D0E0D0641FCFCE01E4E096958795E8 +:10131000EA95E1F783702C2F26952695237040E2FD +:10132000249F90011124382B8C2F8370C1E0D0E0D2 +:1013300002C0CC0FDD1F8A95E2F7C22BD32BDC68ED +:1013400002CFDC2FCC27C16FD06AFDCECE018370D7 +:10135000992721E030E002C0220F331F8A95E2F77F +:10136000C695C69590E2C99FE0011124C22BD32BEC +:10137000DA68E9CEDC2FCC27C46FD06AE4CEDC2F4C +:10138000CC27C06FD06ADFCE8C2F8F700E941008E0 +:1013900034E0D695C7953A95E1F7CF709C2FEC01D4 +:1013A000D069D1CEC9E3D0E0CECEC2EED0E0CBCE74 +:1013B000C6EED0E0C8CE8091440281111092440262 +:1013C00008958091430290914202892B90914102AD +:1013D000892B8093C601909144029923A1F0892B17 +:1013E0008093C60180914301882341F180910203DB +:1013F00087FF24C08EE1E8ECF1E090E0815000F539 +:1014000091110E94DB09E091F902F091FA02309704 +:10141000E1F080914301882359F08091020387FF16 +:1014200007C08091C6018093C70185E08093C60103 +:101430000280F381E02D86EC91E0099486E0DBCF19 +:1014400021912223D9F29F5FD9CF08959091430132 +:101450009923D1F09091020397FF16C0E82FE695EB +:10146000E695E695EE31E0F4F0E0EA53FE4F282FE2 +:10147000277081E090E001C0880F2A95EAF78095F7 +:101480009281892382830895E8ECF1E09191891398 +:1014900003C0DF0111971C9291E0EE3CF907B1F710 +:1014A0000895909143019923C1F09091020397FF11 +:1014B00014C0E82FE695E695E695EE31F8F4F0E0F5 +:1014C000EA53FE4F877021E030E001C0220F8A9579 +:1014D000EAF78281822B82830895A8ECB1E0EFEFD6 +:1014E00090E02D91821751F0EF3F19F4211101C0C6 +:1014F000E92F9F5F9630A9F7EF3F09F408950E2E6C +:10150000000CFF0BEA53FE4FE6CF80913F02909113 +:10151000FE01981301C008958F5F8770FACF990F6D +:10152000990F890F982F977086958695869524E058 +:10153000829FF0011124E651FE4F50E040E080E030 +:10154000219130E0092E02C0369527950A94E2F7E2 +:1015500021703327042E01C0220F0A94EAF7822B50 +:101560004F5F5F4F4430510559F70895990F990F18 +:10157000890F982F977041E001C0440F9A95EAF7C0 +:1015800086958695869594E0899FF0011124E65111 +:10159000FE4F30E020E070E05191DF011197CB0168 +:1015A000022E02C0969587950A94E2F78170819584 +:1015B0008527842385278C932F5F3F4F2430310567 +:1015C00059F7089590E080E00E94A50590E080E042 +:1015D0000E948F0510924202109241020E94E1097E +:1015E00086E0E4E7F2E0DF011D928A95E9F71092C8 +:1015F0006E0210926D0210926F020C94BB069093D3 +:101600004602809345020C94E20A882341F08095BB +:10161000909142028923809342020C94E10908953B +:10162000882339F090914202982B909342020C94B7 +:10163000E1090895882341F0809590914302892320 +:10164000809343020C94E1090895882339F0909126 +:101650004302982B909343020C94E1090895882348 +:1016600009F459C0823871F40E94BB0581FF53C050 +:1016700089E30E94510A0E94E10989E30E94260A37 +:101680000C94E109833859F40E94BB0580FF43C0E4 +:1016900083E50E94510A0E94E10983E5EFCF843877 +:1016A00059F40E94BB0582FF36C087E40E94510AAC +:1016B0000E94E10987E4E2CF9CEF980F913AF0F2A3 +:1016C00090E2980F983088F4877021E030E0A9010B +:1016D00002C0440F551F8A95E2F7CA018095909188 +:1016E0004302892380934302CBCF9BE5980F93302D +:1016F00020F490E080E00C94A50598E5980F9731D0 +:1017000020F490E080E00C948F05803F20F00E9450 +:10171000E2060C94BB060895809580FF08C0589A95 +:1017200081FF07C05D9A82FF06C05C9A08955898B1 +:10173000F7CF5D98F8CF5C98089590912C03943082 +:1017400029F5809304037093060360930503909337 +:10175000E9008FEF9091E800815095FD06C095ED6E +:101760009A95F1F700008111F5CF8091E80085FF8F +:101770000DC050E040E063E070E084E093E00E9440 +:1017800037048091E8008E778093E8000895BC01CB +:1017900084E00C949D0BBC0183E00C949D0B9C0198 +:1017A00084E08093E9009FEF8091E800915085FDEF +:1017B00006C085ED8A95F1F700009111F5CF809173 +:1017C000E80085FF0CC050E040E066E070E0C90131 +:1017D0000E9437048091E8008E778093E800089596 +:1017E000CF93DF93EC01809143018823B1F1809185 +:1017F000020387FF32C060E284E08093E9008FEF4C +:101800009091E800815095FD06C095ED9A95F1F70D +:1018100000008111F5CF8091E80085FF1BC0809109 +:10182000430170E050E040E0811104C050E040E02E +:1018300068E070E0CE010E9437048091E8008E7766 +:101840008093E80080E2FE01AAE0B3E001900D92EF +:101850008A95E1F7DF91CF91089568E081E0CDCFDF +:1018600081E08093E00080E28093D8001092C9006C +:101870008FE19EE40197F1F700C0000087E090EB54 +:10188000DC018093940390939503A0939603B09307 +:10189000970388E19CE00FB6F894A89580936000C8 +:1018A0000FBE90936000FFCFCF93C82F882309F419 +:1018B000AEC08238C1F40E94BB0581FDA8C089E397 +:1018C0000E94510A0E94E1092FEF81EE94E021501D +:1018D00080409040E1F700C0000089E30E94260AA2 +:1018E000CF910C94E1098338A1F40E94BB0580FDDF +:1018F0008EC083E50E94510A0E94E1092FEF81EE1C +:1019000094E0215080409040E1F700C0000083E562 +:10191000E5CF8438A1F40E94BB0582FD78C087E43E +:101920000E94510A0E94E1092FEF81EE94E02150BC +:1019300080409040E1F700C0000087E4CFCF8CEFFB +:101940008C0F813A88F580914301882301F18091C1 +:10195000020387FF1CC0EC2FE695E695E695F0E0C4 +:10196000EA53FE4F828190E04C2F477021E030E037 +:1019700002C0220F331F4A95E2F782239323892B5B +:1019800079F08C2F0E94260A0E94E10909C0E8EC38 +:10199000F1E08191C817A9F321E0EE3CF207C9F705 +:1019A0008C2F0E94510A9CCF80E28C0F883068F403 +:1019B000C77021E030E001C0220FCA95EAF780919C +:1019C0004302822B809343028BCFEBE5EC0FE33095 +:1019D00040F4F0E0EC5BFE4F808190E0CF910C94FE +:1019E000A505E8E5EC0FE73150F4F0E0EE0FFF1F3E +:1019F000E95BFE4F80819181CF910C948F05C03FB0 +:101A000030F08C2F0E949D07CF910C94BB06CF9194 +:101A100008951F93CF93DF93182FD0E0C0E0893350 +:101A200011F4C0E5D0E0812F0E94540C209731F4CE +:101A3000812FDF91CF911F910C942F0B8FE99FE0A5 +:101A40000197F1F700C000002197F0CF0F931F938B +:101A5000CF93DF93C62FD42F022FFC0182818823DE +:101A6000A1F0609393030E94830590939203809367 +:101A70009103C77081E001C0880FCA95EAF7DF9132 +:101A8000CF911F910F910C94250B809193036813B4 +:101A900035C080919103909192030E947405883C17 +:101AA000910560F510E21D0FCD17B9F080E28C0FA3 +:101AB000883040F4C77081E001C0880FCA95EAF70A +:101AC0000E941A0B183048F481E09D2F977001C0D6 +:101AD000880F9A95EAF70E94250B802F0E94090D26 +:101AE000183098F4D77081E001C0880FDA95EAF7D2 +:101AF000DF91CF911F910F910C941A0BC77081E069 +:101B000001C0880FCA95EAF7F3CFDF91CF911F91FB +:101B10000F910895DF92EF92FF920F931F93CF934F +:101B2000DF93E82FF0E0E85EFD4FD490282F269554 +:101B30002695269530E0F901E85FFD4F0491877006 +:101B400010E0082E02C0159507950A94E2F701707F +:101B50001127F901E850FE4FE490F12C082E02C045 +:101B6000F594E7940A94E2F791E0E922FF24F90161 +:101B7000E851FE4FC491D0E002C0D595C7958A9533 +:101B8000E2F7C170DD270115110519F081EE0E9401 +:101B9000540CE114F10419F086EE0E94540C8D2DC2 +:101BA0000E94090DEF2819F086EE0E942F0B012BE1 +:101BB00019F081EE0E942F0BCD2B51F08CE2DF91BA +:101BC000CF911F910F91FF90EF90DF900C94090D32 +:101BD000DF91CF911F910F91FF90EF90DF900895CB +:101BE000CF93DF93C7E0D2E060E0CE010E94F52EF4 +:101BF0002196C11584E0D807B9F7DF91CF910895F8 +:101C00006F927F928F929F92AF92BF92CF92DF920C +:101C1000EF92FF920F931F93CF93DF938BECC82E1D +:101C200084E0D82E0FE510E0E801E09736011CC0F3 +:101C3000F50185909490692DC7010E94F52E682DBD +:101C4000C70101960E94F52E82E0A80EB11C82E029 +:101C5000E80EF11CCE15DF0559F788E0680E711CFF +:101C600028960C171D0731F07E0188E0E81AF1086C +:101C70005301DECF005D1F4F80E3C80ED11C0F3330 +:101C800082E0180789F6DF91CF911F910F91FF90A5 +:101C9000EF90DF90CF90BF90AF909F908F907F900C +:101CA0006F900895CF93C82F6FEF811161E283E2A7 +:101CB00090E00E94F52E6FEFC11161E184E290E0A7 +:101CC0000E94F52E6FEFC11168E085E290E0CF91A0 +:101CD0000C94F52E80E00E94520E60E086E290E0C7 +:101CE0000E94F52E0E94000E0E94F00D81E00C94DF +:101CF000520ECF93C0910303C2FB992790F9981716 +:101D000081F080FBC2F9C09303036091020384E079 +:101D100090E00E94F52E6C2F82E290E0CF910C941F +:101D2000F52ECF9108950F931F93CF93DF9328E063 +:101D3000629FE001112450E0440F551FC40FD51FCE +:101D400030E3839FC00DD11D1124CE0187960E94E0 +:101D5000E12E082F10E0102F0027CE0188960E9458 +:101D6000E12E9801282BC901DF91CF911F910F918E +:101D70000895462F8A3038F4763028F4643018F409 +:101D8000672F0C94930E90E080E00895BF92CF925D +:101D9000DF92EF92FF920F931F93CF93DF937C011B +:101DA00000913603109137038091450290914602CD +:101DB000082B192BCFE0D0E0CC24C394D12CBC2E1F +:101DC000C6010C2E02C0880F991F0A94E2F78023E7 +:101DD0009123892B71F4219790F7B12C8B2DDF91F2 +:101DE000CF911F910F91FF90EF90DF90CF90BF9018 +:101DF0000895B7018C2F0E94B90E0E9453080197D5 +:101E000051F3ECCFCF93DF93EC010E94C60EBE01DD +:101E10000E94B90EDF91CF910C945308FC0186818A +:101E20009781009779F00E945308292F2F7092957F +:101E30009F7092509E30A0F4E92FF0E0E55DF04DE8 +:101E40000C947D2E808191810E94020FEECF803F05 +:101E500019F020F4883E20F481E00895843FE1F3F6 +:101E600080E00895883EC0F3813FD1F7F5CF822FFF +:101E700086958695869508951F93CF93DF9300D01E +:101E800000D00F92CDB7DEB7FC0126813781211536 +:101E9000310541F525E0DE01119601900D922A955C +:101EA000E1F7FC01228189819A812223B9F066231E +:101EB000A9F00E94C60E182F682F89819A810E946E +:101EC000B60A69817A81812F0F900F900F900F9041 +:101ED0000F90DF91CF911F910C94B90E0E948F0A41 +:101EE000182FEFCFC9010F900F900F900F900F9008 +:101EF000DF91CF911F91089583E290E00E94E12E3F +:101F0000813289F484E290E00E94E12E813159F41B +:101F100085E290E00E94E12E91E0883009F090E0A7 +:101F2000892F8170089580E0FCCFCF9384E090E00A +:101F30000E94E12EC82F82E290E00E94E12E982FAD +:101F40008C2FCF91089560918C03669570E04BE0E3 +:101F500050E08AE091E00E94C72E892B19F481E0BD +:101F6000809382020E94830590937C0280937B027F +:101F70000895AF92BF92CF92DF92EF921F93CF93CB +:101F8000DF93CDB7DEB7C455D1090FB6F894DEBFE5 +:101F90000FBECDBF80918C0380FD0AC0E8E3F3E063 +:101FA000118210821282339683E0EC38F807C1F771 +:101FB0007FEAA72E73E0B72EDE011196AE014B5AD1 +:101FC0005F4F1A2F7B2FF5018491282F30E0C90134 +:101FD000880F991F820F931F885C9C4FFC01C08063 +:101FE000D180E280CD92DD92ED92FFEFAF1ABF0A71 +:101FF000A417B50741F7279A35B13F7725B1206877 +:102000006FB7F894812F972FFC017191CF01E8E011 +:1020100025B9000000C077FF35B9770F000000C078 +:1020200000C000C035B900C0EA9591F78417950744 +:1020300059F76FBF8FE594E00197F1F700C00000FA +:10204000CC5ADF4F0FB6F894DEBF0FBECDBFDF9185 +:10205000CF911F91EF90DF90CF90BF90AF900895F8 +:102060001F93CF93DF9300D00F92CDB7DEB7162F1B +:1020700090918C0390FF18C09E012F5F3F4F48E75F +:102080006FEF0E9422068B819981612F70E0FB0126 +:10209000EE0FFF1FE60FF71FE85CFC4F2A8121833C +:1020A000908382830E94B90F0F900F900F90DF9161 +:1020B000CF911F910895EF92FF920F931F93CF93AB +:1020C000DF938C01C8E3D3E0F12CE12CF80194817B +:1020D00060918E0380918D03FEE0EF16F104FCF415 +:1020E0009923F9F09E0140918F030E9422062FEF61 +:1020F000E21AF20A23968CE1E816F10439F70E94FD +:10210000B90FF801848190E001968170992784834A +:10211000DF91CF911F910F91FF90EF900895992338 +:1021200009F39E0140E0E1CF8F929F92AF92BF9260 +:10213000CF92DF92EF92FF920F931F93CF93DF9393 +:10214000EC014C81042F10E09801D8010E94922EDE +:102150009B01AC010E94A82E4B015C01E0E2F0E083 +:10216000E01BF10BA5E5B0E0AC019B010E94A82E9D +:102170006B017C019F01DF010E948A2E9B01AC0153 +:102180000E94B32E9B01AC01280D391D4A1D5B1D19 +:10219000C701B6010E945B2EF22E822F90E039E239 +:1021A0003F15D8F143E0249F9001112435952795E0 +:1021B000122F109598E3C92E93E0D92E00E085E503 +:1021C000E82EEF188E2D01FD8F2D9601412F609185 +:1021D0008E030E9422060F5F53E0C50ED11C0C3106 +:1021E00089F70E94B90F9C8181E0992319F0903200 +:1021F00019F48FEF8093170180911701890F8C8359 +:10220000DF91CF911F910F91FF90EF90DF90CF90D2 +:10221000BF90AF909F908F90089525E530E0A90181 +:10222000481B590BCA019A01220F331F280F391F6F +:1022300037FFBCCF2F5F3F4FB9CF0F931F93CF9383 +:10224000DF93C8E3D3E0FE0111821082128233963D +:1022500083E0EC38F807C1F710E000E080918502D8 +:10226000082E000C990B081719078CF180911601A4 +:10227000082E000C990B801791074CF19E0140919C +:102280008F0360918E0380918D030E9422060F5F61 +:102290001F4F23960C31110509F70E94B90F809149 +:1022A000150190918502980F909385022091160157 +:1022B000280F20931601121614F49B311CF08195FF +:1022C00080931501DF91CF911F910F91089519828D +:1022D00018821A82DCCFBF92CF92DF92EF92FF92E8 +:1022E0000F931F93CF93DF93FC018281DD24DA9457 +:1022F00080FD02C0DD24D39408E313E0D0E0C0E009 +:102300002CE1B22EF80111821082128294E0E92EA3 +:10231000F12CC12C809184028C0D8D310CF43DC0C8 +:102320006B2D0E94252E892F082E000C990B8C17DF +:102330009D0791F480918F038E9DA0018F9D500D7C +:1023400011245595479555954795980160918E03B1 +:1023500080918D030E942206CD0CF1E0EF1AF10866 +:10236000C9F621960D5F1F4FCC31D10559F60E9459 +:10237000B90F8091840291E0D91215C0811111C06A +:102380008BE180938402DF91CF911F910F91FF9099 +:10239000EF90DF90CF90BF90089587FFC5CF845E08 +:1023A000C3CF8150EECF90E00196BE010E94472E30 +:1023B000E8CFEF92FF921F93CF93DF93EC0188E376 +:1023C000E82E83E0F82E10E08C81970140918F0376 +:1023D00060918E03810F0E942206175F83E0E80E52 +:1023E000F11C1C3F89F70E94B90F9A818C8190FFE4 +:1023F00008C08F5F8C83DF91CF911F91FF90EF908A +:1024000008958150F7CF90918C0390FF0CC0E8E3C2 +:10241000F3E0818360834283339693E0EC38F907DD +:10242000C1F70C94B90F08950F931F93CF93DF93C7 +:1024300000D00F92CDB7DEB78C018091860281115A +:102440000AC09E012F5F3F4F44EB6FEF0E942206B0 +:102450008A8180938602F8016481613069F08091FD +:10246000860240E0662361F040E0623011F4409162 +:10247000860280E060E004C06091860240E080E077 +:102480000E940312F801848190E0019663E070E0FD +:102490000E94472E84830F900F900F90DF91CF9171 +:1024A0001F910F910895CF93DF9300D00F92CDB776 +:1024B000DEB790918C0390FF0AC09E012F5F3F4FC3 +:1024C0000E9422064B8169818A810E9403120F902B +:1024D0000F900F90DF91CF910895CF93DF93EC0190 +:1024E000ECE8F3E0438162818C810E9453128C817D +:1024F0008F5F8C83DF91CF910895CF93DF93EC01B1 +:10250000EC81F0E0E553FC4F4491ECE8F3E06281AC +:1025100081810E9453128C818F5F8C83DF91CF91D8 +:102520000895CF92DF92EF92FF926B017C010E949F +:102530000C06B701A60188E090E0FF90EF90DF90D5 +:10254000CF900C94072F5F926F927F928F929F9201 +:10255000AF92BF92CF92DF92EF92FF920F931F93B1 +:10256000CF93DF9300D00F92CDB7DEB7182F762E22 +:10257000042F622E90918C0390FF29C0E92FE695DD +:10258000AE2FB0E0A157BE4F8C91809381029E7F09 +:10259000923081F59E012F5F3F4F812F0E942206CE +:1025A0004B8169818A810E94031210938D0370927E +:1025B0008E0300938F03662051F060918C0370911D +:1025C0008D0380918E0390918F030E9491120F9042 +:1025D0000F900F90DF91CF911F910F91FF90EF908F +:1025E000DF90CF90BF90AF909F908F907F906F9033 +:1025F0005F900895823019F400918F03D6CF863012 +:1026000019F410918D03D1CF8930D9F3893169F64E +:10261000E9518E2F8170582EE695F0E0E655FC4F7B +:10262000A590B490BB2488E3E82E83E0F82ED12C4B +:10263000C12C9CE1892E912CC601B4010E94332E3D +:10264000812F511013C0860F9701402F672D0E94D4 +:102650002206CA0CDB1C83E0E80EF11C8CE8E816AD +:1026600083E0F80649F70E94B90F9FCF861BECCF95 +:10267000ECE8F3E0438128E0421B08F440E021E06D +:10268000628181810C94A312ECE8F3E0438128E09D +:10269000420F08F44FEF21E0628181810C94A31274 +:1026A000ECE8F3E0628128E0621B08F460E021E0DE +:1026B000438181810C94A312ECE8F3E0628128E06D +:1026C000620F08F46FEF21E0438181810C94A31223 +:1026D000ECE8F3E0818121E04381628188500C9431 +:1026E000A312ECE8F3E0818121E043816281885FFD +:1026F0000C94A31280919003882319F08150809349 +:10270000900360918C0370918D0380918E03909162 +:102710008F030C94911280919003833018F48F5F93 +:102720008093900360918C0370918D0380918E0350 +:1027300090918F030C94911290918C0390FF36C06E +:102740009170811129C0926090938C03662351F09F +:1027500060918C0370918D0380918E0390918F0313 +:102760000E94911260918C03669570E04BE050E0FE +:102770008AE091E00E94C72E892BA9F01092820274 +:1027800081E080937E0220E040918F0360918E0370 +:1027900080918D030C94A312853210F09864D4CFED +:1027A000880F982BD1CF0E94A30FEACF089521E084 +:1027B00030E0A90102C0440F551F8A95E2F7CA0113 +:1027C00020918302662399F0822B8093830280916B +:1027D0008202811106C080918C0360E086950E9480 +:1027E0009C1380918C0380FD05C00C94B90F8095DB +:1027F0008223EBCF08950F931F93CF93DF93EC01C8 +:1028000061E0009709F0682F617080E00E94D713A3 +:1028100060E0209721F0BE0176956795617081E0B8 +:102820000E94D71360E0209731F0BE01769567953E +:1028300076956795617082E00E94D71360E02097DB +:1028400039F0BE0113E0769567951A95E1F761704E +:1028500083E00E94D71360E0209739F0BE01B4E016 +:1028600076956795BA95E1F7617084E00E94D71379 +:10287000AE0170E060E0BB27A72F962F852F009751 +:10288000A105B105D9F1AC01BD0188E08A019B0128 +:10289000F4E03695279517950795FA95D1F7011528 +:1028A00011052105310519F08C5FB901A8018A01D4 +:1028B0009B01E2E03695279517950795EA95D1F7A4 +:1028C000011511052105310519F08E5FB901A80127 +:1028D0007695679557954795452B462B472B09F0DD +:1028E0008F5F823019F160F4882399F08130C1F054 +:1028F000CE01DF91CF911F910F91089580E0C6CF57 +:102900008330C9F08430A1F720E044E66FEF8FE018 +:1029100004C020E044E66FEF82E30E94A312E8CFF8 +:1029200020E044E66FEF85E00E94A31220E044E639 +:102930006FEF80E8F2CF20E044E66FEF87EDEDCF58 +:102940000E94FB1390933703809336030C94E20AA2 +:1029500080913603909137039C01267033272630EF +:10296000310519F488600C94A014877FFCCF21E016 +:1029700030E002C0220F331F8A95E2F72095309590 +:102980008091360390913703822393230C94A014F3 +:10299000909140028095892380934002282F2770D0 +:1029A00039F4282F082E000C330B9217130621F44C +:1029B0009091030392FF07C08595859585950E94A8 +:1029C000B71410924002089521E030E002C0220FB7 +:1029D000331F8A95E2F78091360390913703822B5B +:1029E000932B0C94A01480918C038695815009F44C +:1029F00084E261E00C949C1380918C0386958F5F38 +:102A0000853208F081E061E00C949C1390918C0376 +:102A100090FF07C09695981720F0961710F40C9425 +:102A2000FC1461E00C949C13ECE8F3E083E08083F9 +:102A300011828FEF828388E28383148260817181A7 +:102A4000828193810C94911269EE7EEF90E080E098 +:102A50000E94132F60E082E090E00E94F52E60E07B +:102A600083E090E00E94F52E1092460210924502FB +:102A700060E084E090E00E94F52E60E082E290E069 +:102A80000E94F52E60E085E090E00E94F52E60E067 +:102A900086E090E00E94F52E6FEF87E090E00E94C4 +:102AA000F52E40E050E0BA0188E090E00E94072F48 +:102AB00060E08DE090E00E94F52E40E050E0BA0129 +:102AC00088E190E00E94072F60E087E190E00E949B +:102AD000F52E40E050E0BA018CE190E00E94072F13 +:102AE00070E060E080E290E00E94132F40E050E050 +:102AF000BA0188E190E00E94072F80E00E94520E08 +:102B00000E946A0E40E050E0BA018FE090E00E941F +:102B1000072F40E050E0BA0183E190E00C94072FCA +:102B200090E080E00E94EF2E893E9E4F11F40C94BD +:102B30007C0F80E008951092430280914301E8ECFD +:102B4000F1E0882359F08091020387FF07C08EE1EE +:102B5000DF011D928A95E9F70C94E20A86E0F8CF2E +:102B60001F93CF93DF93CDB7DEB7AA970FB6F89434 +:102B7000DEBF0FBECDBF8EE293E02091F100DC01FD +:102B80002D93CD01B3E086339B07B9F780912F03D6 +:102B9000833009F471C0B8F4813009F448C0823040 +:102BA00009F4B2C08091E80083FF3AC180912E03FE +:102BB00090912F039A3008F033C1E92FF0E0E75CE1 +:102BC000F04D0C947D2E8A3009F48DC08B3009F4C1 +:102BD00070C0893039F780912E03813219F78091C6 +:102BE000320390913303009711F00297D9F6809148 +:102BF000E800877F8093E8008091E80082FF37C07B +:102C00009091F3008091F200029729F48091F100F5 +:102C10008B7F813021F48091F100809309038091B2 +:102C2000E8008B778093E8000E946104BBCF80911D +:102C30002E03813A09F0B6CF8091E800877F809318 +:102C4000E8008091320390913303892B61F460E2B4 +:102C50008AE093E070E00E9413058091E8008B7792 +:102C60008093E8009FCF60E090E080E0F3CF809118 +:102C70002C038111C1CF96CF80912E03813A09F0A8 +:102C800091CF8091320390913303892B09F08ACF41 +:102C90008091E800877F8093E8008091E80080FFC2 +:102CA000FCCF809143018093F1008091E8008E7702 +:102CB000B9CF80912E03813209F074CF8091320315 +:102CC00090913303892B09F06DCF8091E800877FC5 +:102CD0008093E8000E946104809130038093430157 +:102CE0000E949B155FCF80912E03813209F05ACF4D +:102CF0008091E800877F8093E8000E9461048091C2 +:102D00003103809308034ECF80912E03813A09F05E +:102D100049CF8091E800877F8093E8008091E800A8 +:102D200080FFFCCF80910803BECF803899F08238B5 +:102D300009F076C0809132038F70873008F070C040 +:102D40008093E9008091EB0085FB882780F9109241 +:102D5000E90006C080912A0390912B0391118260B3 +:102D60009091E800977F9093E8008093F100109293 +:102D7000F1008091E8008E77B5C1882309F4A2C1E3 +:102D8000823009F04DC0809130038111A6C180913D +:102D900032038F702FEF280F263008F041C0809348 +:102DA000E9002091EB0020FF98C1933031F480912D +:102DB000EB0080628093EB0090C19091EB009061FA +:102DC0009093EB0021E030E001C0220F8A95EAF7F2 +:102DD0002093EA001092EA008091EB008860EACF2D +:102DE00081111EC0109130031F778091E30080781D +:102DF000812B8093E3008091E800877F8093E80037 +:102E00000E9461048091E80080FFFCCF8091E30084 +:102E100080688093E30082E0111183E080932C03AB +:102E20008091E80083FF0AC08091E800877F80934B +:102E3000E8008091EB0080628093EB00AA960FB6C9 +:102E4000F894DEBF0FBECDBFDF91CF911F910895E3 +:102E50008058823028F720913003309131032C3D87 +:102E6000E3E03E07A1F583E08A838AE289834FB7D6 +:102E7000F894DE01139620E03EE051E2E32FF0E00B +:102E800050935700E49120FF03C0E295EF703F5F3D +:102E9000EF708E2F90E0EA30C0F0C7968D939D932F +:102EA0002F5F243159F74FBF8091E800877F8093CF +:102EB000E8006AE270E0CE0101960E94130580915D +:102EC000E8008B778093E800ABCFC096E7CF809186 +:102ED000320390913303432F55274330510509F4B2 +:102EE0004AC078F54130510509F47AC08BE590E08D +:102EF000EBEAF6E04230510509F092CF2091E8006C +:102F0000277F2093E8002091340330913503821706 +:102F1000930708F49C0140E02115310509F065C0D4 +:102F2000411163C08091E80082FDC9CF80912C03DC +:102F3000882329F2853019F28091E80083FFF2CFCF +:102F4000BECF4132510509F43CC04232510509F06F +:102F500067CF8330910508F063CFFC01EE0FFF1FB0 +:102F6000E954FE4F0190F081E02D8C549E4FDC011E +:102F70008C9190E01AC0332721303105D1F0211512 +:102F8000310561F02230310509F04ACFE8E1F7E080 +:102F9000E4918E2F90E0E8E1F7E007C0E8E3F7E086 +:102FA000E4918E2F90E0E8E3F7E0009709F438CF42 +:102FB000A5CFE4E2F7E0E4918E2F90E0E4E2F7E0C1 +:102FC000F4CF8330910508F02BCF880F991FFC01B7 +:102FD000E354FE4F0190F081E02D89E090E08ECF28 +:102FE00082E190E0E6E0F7E089CF80912C0388232E +:102FF00009F465CF853009F462CF8091E80083FD44 +:103000005ECF8091E80082FD8DCF8091E80080FF47 +:1030100083CF9091F3008091F2002115310519F0D2 +:103020008830910550F041E0089709F040E0809128 +:10303000E8008E778093E8006FCF44914093F100D1 +:103040003196215031090196E8CF803809F0E8CE59 +:103050008091E800877F8093E80080912D03809322 +:10306000F10087CE8111DCCE10913003123008F0D0 +:10307000D7CE8091E800877F8093E80010932D03DE +:103080000E946104112311F084E005C08091E300E7 +:1030900087FDFACF81E080932C0342E061EC81E070 +:1030A0000E94800442E261EC84E00E94800442E2DB +:1030B00061EC82E00E94800442E260EC83E00E94C6 +:1030C0008004AECE80913003813009F0A9CE81E03A +:1030D000933009F080E080932B031092E9008091F7 +:1030E000E800877F8093E8000E94610499CE9F9258 +:1030F000AF92BF92CF92DF92EF92FF920F931F9306 +:10310000CF93DF9300D000D0CDB7DEB77C01FC01B8 +:1031100083819481892B31F08081918189238F3F34 +:1031200009F060C60F900F900F900F90DF91CF9134 +:103130001F910F91FF90EF90DF90CF90BF90AF90D5 +:103140009F900895980122513F452031310508F0A4 +:103150003EC68FEF93E00E94E12E025167E0C62E3B +:1031600062E0D62E882339F1809140028770D1F237 +:10317000F70182818823B1F282E00F900F900F90C7 +:103180000F90DF91CF911F910F91FF90EF90DF9003 +:10319000CF90BF90AF909F900C94C814C114F4E0EE +:1031A000DF0611F3C6010E94E12E811101C001501A +:1031B0002FEFC21AD20A0111F1CF1C821B82BB244D +:1031C000B3945AE0A52E86010F5F1F4FC6010E94DF +:1031D000E12E89831A82882339F29FEF980F93306A +:1031E00008F58A83B98232E0C30ED11CC8010E945F +:1031F000E12E8B83882309F4B7CF8E010F5F1F4F19 +:10320000F80180818823F9F2813009F043C091816F +:103210008281913049F40E5F1F4F0E94090D0F5FAC +:103220001F4FEECF6801E9CF923029F40E5F1F4F98 +:103230000E94540CF4CF933029F40E5F1F4F0E946C +:103240002F0BEDCF943019F00F5F1F4FE8CF0E5FBB +:103250001F4F30E020E0B8016F5F7F4FF8014181E0 +:103260008053990B8A30910550F021503109B8F202 +:103270008FE99FE00197F1F700C00000F6CFA29E12 +:10328000F001A39EF00D11249C012E0F3F1F842FEF +:103290008B01E1CF0E948A0DC2CF81E00E94E4142D +:1032A0000E94A81461CF81E00E94B714F9CF82E098 +:1032B000FBCF04389FE5190709F483C008F473C0F5 +:1032C0000538FFE51F0709F0B1C5882309F4AEC52D +:1032D00080EE0E94540C81EE0E94540C80E10E940A +:1032E000540C80E10E942F0B81EE0E942F0B80EE88 +:1032F0000E942F0B8091E60191E062E18927809383 +:10330000E601882309F48DC08FE00E94301066E149 +:103310008FE00E9430108AC5882369F180914F02A6 +:10332000811106C081E080934F0282EE0E94540C0E +:103330000E94830590934E0280934D028BE20E947F +:10334000540C74C58823A1F080914F02811106C0EE +:1033500081E080934F0282EE0E94540C0E9483050C +:1033600090934E0280934D0281EE0E94540CE6CF62 +:1033700081EE0E942F0B8BE20E942F0B57C58823F2 +:1033800009F454C581EE0E94540C83EE0E94540C43 +:103390008FE40E94540C8FE40E942F0B83EE0E9456 +:1033A0002F0B81EEE9CF882309F440C581EE0E94FE +:1033B000540C83EE0E94540C80E50E94540C80E56E +:1033C000EBCF882309F4D0CE10914C0281E018276E +:1033D00010934C020E94830590934B0280934A0203 +:1033E00068E1112381F08FE00E94301069E18FE0E5 +:1033F0000E9430106AE18FE00E9430106BE18FE094 +:103400000E943010B1CE84EB0E94301069E184EB51 +:103410000E9430106AE184EB0E9430106BE184EB73 +:10342000EFCF8FEA0E94301066E18FEA72CF82EE12 +:103430000E94540C36C583E00E94100B88E10E9464 +:10344000540C88E10E942F0B83E00E94050B29C5D4 +:1034500082EE0E94540C87E50E94090D22C586EE7B +:103460000E94090D88E1F8CF895A35C582EE0E9485 +:103470002F0B49C58CE20E94090D8091E801882339 +:1034800009F441C589E30E94090D3DC588E2FBCFDF +:10349000033FFCE51F0739F1A0F4083D3CE51307A5 +:1034A000F1F0093D8CE5180751F1073D9CE519073E +:1034B00009F02DC526E241EE61EEC7010E94260DFE +:1034C00053CE053FECE51E07B1F088F0063F2CE532 +:1034D000120709F01CC527E245EE66EEEECF27E2A3 +:1034E00045EE65EEEACF26E241EE60EEE6CF27E25A +:1034F00045EE64EEE2CF26E241EE62EEDECF28E258 +:1035000041E0EFCF01363DE5130709F417C5063159 +:103510002CE5120709F444C18091430282720C3CED +:10352000ECE51E0709F404C208F084C1063C2CE552 +:10353000120709F4E9C108F05BC1033C9CE51907D7 +:1035400009F4D8C108F043C1023CFCE51F0709F4A7 +:10355000ACC10A353DE5130709F426C208F002C2E2 +:1035600001159CE5190709F40FC20E3D1C4509F42D +:1035700018C2F70186819781009709F419C20E9449 +:1035800053088C01F701D280C580C2943FE0C3226A +:10359000809140028770A1F0AD2CDD2091F0812F49 +:1035A000807F803421F080E2800F883048F082E014 +:1035B0000E94C814809140028770AA24A3948111AC +:1035C000A12C912E92942FE09222FBE0F91508F4A1 +:1035D0003CC2E92DF0E0ED5BF04D0C947D2E809126 +:1035E000020380610630ECE51E0709F491C080916A +:1035F0000203886007301C4508F48AC080910203EA +:10360000806286C0809102038D7F0C302CE512070A +:1036100009F47EC058F40A308CE5180709F493C009 +:1036200008F48BC0809102038E7F72C080910203E8 +:10363000877F0E30ECE51E0709F46AC08091020313 +:103640008B7F0F301C4508F463C0809102038F7E8E +:103650005FC00C3F2CE5120709F479C068F504310E +:103660008CE5180709F48BC080F40231ECE51E07E5 +:1036700009F475C0809102038F7B03311C4508F467 +:1036800047C080910203837F43C00A3F2CE51207A5 +:1036900009F445C008F049C005311C4509F075C45E +:1036A0008091020382FB992790F921E0922790FBF9 +:1036B00082F990FB83F92CC001159DE5190709F4E7 +:1036C00054C088F48091030383600E3FFCE51F071C +:1036D00049F1809103038D7F0F3F1C4518F18091C4 +:1036E00003038C7F1FC002303DE5130709F456C069 +:1036F00008F44EC001361D4509F047C490910203FD +:10370000892F8F7E94FF806103C0809102038160C6 +:10371000809302033AC4809102038460F9CF8091C0 +:10372000030381608093030330C4809103038260AC +:10373000F9CF809102038064EBCF0E949B158091AA +:1037400002038068E5CF809102038C60E1CF809115 +:1037500003038E7FE7CF809102038F7DD9CF0E9434 +:103760009B15809102038F77D3CF80910303982F0D +:10377000909591708E7F892B90FB81F9D3CF0E9419 +:103780009B1590910203892F97FB87F98058C0CF32 +:1037900061E08EE090E00E94F52EF7C360E0F9CF83 +:1037A000882309F406C4809143028A7A91E009F4DF +:1037B00090E09093E901811106C089E20E94510ACC +:1037C0000E94E109D1CC85E3F9CF85E3F7C3043C3E +:1037D0002CE5120709F493C048E653E161E773E171 +:1037E000053C3CE5130709F0B4CE0E940606BCCCAC +:1037F000093C9CE5190709F491C070F4073CFCE50D +:103800001F0709F486C04CE553E160E573E1083C0D +:103810002CE5120751F39DCE0A3C3CE5130709F451 +:1038200082C04AE753E16BE873E10B3C9CE5190762 +:10383000E1F28FCE013DECE51E0709F487C0B0F43C +:103840000E3C2CE5120709F47BC008F476C00F3C4F +:103850008CE5180709F477C06EE089E0003D9CE52F +:10386000190709F076CE0E9406157ECC043DECE5E2 +:103870001E0709F471C078F4023D2CE5120709F423 +:1038800068C061E088E1033D3CE5130709F061CEC3 +:103890000E949C1369CC053D8CE5180709F45FC0B4 +:1038A0000D35100709F460CC54CE80918C0380FF55 +:1038B0001BC08E7F80938C0360918C0370918D036D +:1038C00080918E0390918F030E9491121092820238 +:1038D000EFEFF0E722E0E150F0402040E1F700C0D8 +:1038E00000000E94B90F40CC816080938C0361E09E +:1038F0008695CECF43EF54E16CEF74E176CF4CEF79 +:1039000054E163EF74E171CF41E753E168E673E19D +:103910006CCF40E553E16CE573E167CF48E353E1D9 +:1039200064E473E162CF44E453E168E373E15DCFA3 +:103930004BE853E16AE773E158CF61E081E0A8CF3B +:1039400065E082E090CF68E086E08DCF64E18FE0B3 +:103950008ACF67E185E187CF62E289E184CF61E0C8 +:1039600083E296CF0B35FDE51F0701F10C351D45B0 +:1039700009F0FFCD8091030382FB882780F991E055 +:1039800089270E94790EF5CD0E949B153FEF84E3B5 +:103990009CE0315080409040E1F700C000000E9460 +:1039A000300C0E942415E0CB81E0EBCF80E0E9CF22 +:1039B000828100811181882369F0C8010E94C60EAE +:1039C000D82E682FC8010E94B60AB8018D2D0E941A +:1039D000B90ED5CDC8010E948F0AD82EF6CF212F5F +:1039E0002F70C22E107F19F0C29490EFC922DD20F3 +:1039F000C9F0CC2069F080E2800F883010F001110E +:103A00000BC080914302C82AC09243020E94E10980 +:103A1000802F0E94540C19C080914202C82AC09283 +:103A20004202F4CF802F0E942F0BCC2071F0C09463 +:103A300080E2800F883010F001113AC0809143027B +:103A4000C822C09243020E94E109E92DE850FF0B11 +:103A5000349720F40E94BB050E948C0BAA20A9F089 +:103A60008091400280FD11C0F701128285958595F5 +:103A700085950E94E414C7010E9477188091400246 +:103A80008595859585950E94B71460E0C7010F90D4 +:103A90000F900F900F90DF91CF911F910F91FF909A +:103AA000EF90DF90CF90BF90AF909F900C943C0F21 +:103AB00080914202C822C0924202C5CF312F3F708E +:103AC000B32E107F103219F0B29480EFB822002389 +:103AD00069F0013081F1DD20D9F1CC2091F1F701BD +:103AE000858180FF95CF8F7085832BC0DD20B1F05D +:103AF00090914402892F8B29C11003C00E94250B8D +:103B0000A4CFE1E0CE12FACF2091030322FD9DCF96 +:103B1000981709F49ACF8093440297CFC11006C03A +:103B20000E94DB098B2D0E941A0B8FCFF1E0CF167C +:103B300009F48BCFF5CFDD2031F025E02C1508F40A +:103B400084CF8B2DDBCF34E03C1508F47ECFEACF59 +:103B5000CC2041F3093349F4FFEF27EE33E0F15075 +:103B600020403040E1F700C00000802F0E942F0B62 +:103B70006CCF812F86958695837061F0813009F036 +:103B800064CFC8019370D11002C090E080E00E9421 +:103B90008F055BCFC8019370D11002C090E080E028 +:103BA0000E94A50552CF802FDD2029F00E949D079D +:103BB0000E94BB064ACF0E94E206FACF812F837093 +:103BC00009F03FC0D11041CF402F42954695477034 +:103BD000440F440F802F8F7090E0042E02C0880F96 +:103BE000991F0A94E2F730E020E004FF09C02FE0BB +:103BF00030E002C0220F331F4A95E2F7209530953E +:103C0000169516951370123099F078F4409145028C +:103C100050914602113039F0822B932B8423952347 +:103C20000E94FF0A12CF842B952B822B932BF8CF67 +:103C3000822B932B209145023091460282279327B5 +:103C4000EFCF8695DD2011F0812F8170882309F454 +:103C5000FCCE402F429546954770440F440F802F6D +:103C60008F7090E0042E02C0880F991F0A94E2F72B +:103C700030E020E004FF09C02FE030E002C0220F56 +:103C8000331F4A95E2F720953095169516951370D7 +:103C9000123099F078F44091360350913703113087 +:103CA00039F0822B932B842395230E94A014CDCE30 +:103CB000842B952B822B932BF8CF822B932B209147 +:103CC00036033091370382279327EFCF1F70DD2013 +:103CD00029F0812F0E94E414802F10CF802F0E94A2 +:103CE0001A0B812F0E94B714B0CE023F09F441C0D5 +:103CF00060F4003F11F1013FA1F1DD2009F457C04C +:103D0000C11086CE812F8F7131C0033FB9F1043FBE +:103D1000A1F7DD2009F440C01F71812F0E94E41437 +:103D20008091030382FD07C0E8E01E9FC0011124BB +:103D3000836080934002812F19C0DD2069F084E008 +:103D40008C1508F482CE1F7181E090E002C0880FCC +:103D5000991F1A95E2F7B3CF95E09C1508F475CE3C +:103D6000F2CF812F8F71DD2009F4BCCF0E94E414C3 +:103D70006CCE812F8F71DD20C9F3B4CF90E080E04D +:103D8000DD2009F492CF1F7181E090E002C0880F1E +:103D9000991F1A95E2F789CF81E00E94C814F1E0DB +:103DA000FC1508F052CE82E00E94C8144ECECC2002 +:103DB00059F0093309F0D9CE2FEF37EE83E02150C7 +:103DC00030408040E1F7CFCE812F8F718BCF003113 +:103DD0003FE5130709F461CA01319FE51907A9F40A +:103DE00082E05CCA61E0C7010E943C0F8C01F701D0 +:103DF00082818111A7C90031FFE51F0709F453CA69 +:103E000001312FE5120709F452CA0238EFE51E0707 +:103E100009F4B5CA08F04DCA00382FE5120709F4B5 +:103E20007BCA01383FE5130709F48CCAF701828188 +:103E3000882369F0C801815E9C45059740F46FE1D5 +:103E4000600F609350028CE090E00E94F52E17FF07 +:103E50001FCBF7018281882309F459C00E94BB055A +:103E6000869581708093E80190915002913029F4F9 +:103E7000882319F089E30E94090D80914302809301 +:103E8000E7011092430280915002813009F4D3CAB5 +:103E9000882309F4CCCA823009F4DACA843009F4E0 +:103EA000DECA8FE39CE90197F1F700C000005801DA +:103EB000E894B7F84CE0C42ED12CC5010C2C02C0FC +:103EC000969587950A94E2F78F7096EF980F963043 +:103ED00008F4CACA805D0E948A0D94E0C91AD1080C +:103EE000ECEFCE16EFEFDE0641F780915002813005 +:103EF00009F4C0CA882309F4B9CA823009F4B6CAE1 +:103F0000843009F4C3CA8091E70180934302F7012A +:103F10008281882309F449C0109293030330FDE5A0 +:103F20001F0708F0EFCA0A3F2CE5120738F4980182 +:103F300022503C452431310508F0E9CA0E94950F12 +:103F4000909303038093020300318CE5180709F472 +:103F500002CC08F07ECB0830ECE51E0709F4E9CB73 +:103F600008F050CB04302CE5120709F4D4CB08F04C +:103F700036CB02308CE5180709F4C7CB80910203D9 +:103F8000826003301C4509F4C3CB60910203109199 +:103F9000030384E090E00E94F52E612F82E290E01E +:103FA0000E94F52E0E949B15DFC806311C4509F0C2 +:103FB000E0CA8091E901811108CC89E20E94260AB9 +:103FC000FFCBCF93DF938091FB01807FA1F48091A1 +:103FD000F801882381F080913F02D091FE01609129 +:103FE000F6017091F701A091F901B091FA01C62F85 +:103FF000C723D81303C0DF91CF91089590E01097A5 +:1040000011F0CF3F19F401968770F3CF9C0143E084 +:10401000220F331F4A95E1F7F901E150FE4F41812C +:104020004713F1CF40814613EECF42814111EBCFD0 +:10403000438154814A1B5B0B483C510520F780911A +:10404000FB018F7080618093FB01F901EC5FFD4FF4 +:1040500080818F708061808386EF91E00E94771865 +:10406000DF91CF910C94850AAF92BF92CF92DF92ED +:10407000EF92FF920F931F93CF93DF93CDB7DEB7ED +:1040800065970FB6F894DEBF0FBECDBF8C0185E0FB +:10409000F801DE01519601900D928A95E1F7F80141 +:1040A000E28066EFA62E61E0B62E6091F901709174 +:1040B000FA016115710509F468C19091F60140910A +:1040C000F701892F84238F3F09F45FC1208131815B +:1040D000C380D480F090F801F601E61BF70BFF20B7 +:1040E00009F41DC18091FB01582F507FE83CF10578 +:1040F00008F0D0C0511181C0FE2C43132BC0921385 +:1041000029C06091FC017091FD01F8014681578141 +:1041100064177507F9F4E1101DC08F7080618093FA +:10412000FB01C5010E9477188091FB01F80185838E +:104130008F2D65960FB6F894DEBF0FBECDBFDF9111 +:10414000CF911F910F91FF90EF90DF90CF90BF9094 +:10415000AF900895CD2829F0822F83238F3F09F057 +:104160002FC180E0F82FF170DF2E80FF3CC08091DE +:104170003F024091FE01841315C0298B3A8B898937 +:104180009A890E94020F292F22952F702230F8F071 +:10419000243020F59F70F9F0F8019581907FD9F4D3 +:1041A000D12C1FC090E0FC0153E0EE0FFF1F5A9589 +:1041B000E1F7E150FE4F5181351306C050812513C0 +:1041C00003C05281E5120FC001968770D4CF9F7053 +:1041D00011F0882329F3805E883010F3C8010E9413 +:1041E0007718FD2CA5CFEE2009F4A2CF8091FB011A +:1041F00081608093FB01F12C9BCF43131BC0921372 +:1042000019C04091FC015091FD01F80126813781D0 +:104210004217530779F4E1100DC08583C8010E944D +:10422000771888E0F801A6EFB1E001900D928A9529 +:10423000E1F77ECFC8010E940E0F882339F1EE20EE +:1042400029F18091FB018032A0F02091F60130919C +:10425000F7013A8729871B86DD86CC868E87809179 +:10426000FC019091FD01988B8F87CE0109960E94E9 +:10427000771888E0F801A6EFB1E001900D928A95D9 +:10428000E1F70E94E11FFF24F39452CFC8010E947E +:104290007718F9CF51110AC086EF91E00E94771884 +:1042A00088E0F50111928A95E9F7A5CF431318C06C +:1042B000921316C04091FC015091FD01F801268136 +:1042C00037814217530761F4E1100AC08583C801A2 +:1042D0000E94771888E0F50111928A95E9F728CFB6 +:1042E000C8010E940E0F882389F2EE2079F2809196 +:1042F000FB01803208F4BDCF2091F6013091F70127 +:104300003A8329831B82DD82CC828E838091FC01DB +:104310009091FD0198878F83CE010196A8CFE83C4C +:10432000F105C0F6FE2CEE2009F4B0CF43131FC0F8 +:1043300092131DC02091FC013091FD01F80186818E +:1043400097812817390799F49091FB0190FD69CF67 +:10435000907F09F466CF8091FB018583903F09F43B +:104360005DCF982F907F905F8F70892B56CFC801BB +:104370000E940E0F81117DCF8091FB01816080939F +:10438000FB01C8010E947718D3CEEE2009F47ECF3E +:10439000C8010E940E0FF82E882309F477CF88E019 +:1043A000F801A6EFB1E001900D928A95E1F78091B6 +:1043B000F6019091F7010E94020F0E94E11FB8CE12 +:1043C00081E08E25CFCECF93DF93CDB7DEB7609758 +:1043D0000FB6F894DEBF0FBECDBF29873A874B8753 +:1043E0005C876D877E878F87988BCE0109960E94A8 +:1043F0003420811112C088E0FE013996DE01119649 +:1044000001900D928A95E1F78C859D85892B29F085 +:1044100089859A8589238F3FA9F580913F029091E4 +:10442000FE0189131CC060960FB6F894DEBF0FBE64 +:10443000CDBFDF91CF91089593E0AA0FBB1F9A954E +:10444000E1F7A150BE4F98E0FE01319601900D9228 +:104450009A95E1F78093FE010E94850ADECFB8E0CD +:104460008B9FC001112481509E4F0E9434208823CD +:10447000D1F280913F0290E0019687709927809356 +:104480003F02CBCFA091FE01B0E0CD010196877035 +:10449000992720913F022817190671F60E949B1553 +:1044A0001092FE0110923F0288E0E6EFF1E0DF019A +:1044B0001D928A95E9F7B1CF0F931F93CF93DF93A6 +:1044C00080918A02E0918902CCE081111AC0DF91CB +:1044D000CF911F910F910895D1E0DE0FD093890203 +:1044E0000E2F10E0EC9FF0011124E557FD4F838162 +:1044F0009481892B29F08081918189238F3F51F408 +:10450000ED2F80918A02E81738F310928A021092F8 +:104510008902DDCFC09FD001C19FB00D1124A557E6 +:10452000BD4F16968D919C911797892B29F418965B +:104530008D919C91019651F420813181428153816A +:1045400064817581868197810E94E321C09FF0017B +:10455000C19FF00D1124E557FD4F14821382D0CF77 +:104560001092F6021092F502109242018091F4022C +:104570008093F3020E94F5050C945C222F923F92E7 +:104580004F925F926F927F928F929F92AF92BF9263 +:10459000CF92DF92EF92FF920F931F93CF93DF930F +:1045A000C091F302E7E0FE2E01E010E0FCE02F2EC8 +:1045B000AEEFEA2E8091F4028C1316C00E945C22AA +:1045C000DF91CF911F910F91FF90EF90DF90CF90EF +:1045D000BF90AF909F908F907F906F905F904F9023 +:1045E0003F902F900C94F505D0E0FE01EE0FFF1FD9 +:1045F000E551FD4F80819181F89EF001F99EF00D0B +:104600001124E85EFE4F2481211158C030908A02A7 +:10461000ABE8B2E030E020E0412C5F01231508F068 +:104620004BC01A966D907C901B97F501808091800D +:104630004FEF5FEF512CC52CD12CF601EE0FFF1F71 +:10464000E80DF91D659174916616770609F4A601C7 +:10465000672B11F05394EFCF4F3F5407B1F1B801DE +:1046600002C0660F771F4A95E2F7462AA80102C0EA +:10467000440F551F5A94E2F741505109441615064C +:1046800001F5229EF001239EF00D1124E557FD4F08 +:10469000F89ED001F99EB00D1124A85EBE4F12966F +:1046A0002D913C91139737832683E082E182918795 +:1046B000808771E015967C930E94C7052196C37090 +:1046C00079CF14961C921E9213972F5F3F4F1C9622 +:1046D000A5CF9F92AF92BF92CF92DF92EF92FF92BF +:1046E0000F931F93CF93DF9300D000D000D0CDB7AE +:1046F000DEB78E010F5F1F4F86E0F80111928A9599 +:10470000E9F785E7C82E81E0D82EF12CE12CAA2408 +:10471000A394B12CF60181916F018F3F09F449C038 +:10472000F894E82FE295EF70F0E021A18F70A501D9 +:1047300002C0440F551F8A95E2F7CA01922F982BA9 +:1047400091A392A18095892382A3789400C0EBE77E +:10475000F1E030E020E0912C41914F3F09F473C02B +:10476000A42FA295AF70B0E090968C9190E04F701E +:1047700002C0959587954A95E2F780FD64C08A2D21 +:10478000022E01C0880F0A94EAF7982A2F5F3F4F44 +:104790002430310509F7F601319780818F3F11F000 +:1047A0000E94F90750EA5A95F1F7F801EE0DFF1D46 +:1047B00090828FEFE81AF80AE6E0EE16F10409F0AD +:1047C000A9CF46E050E0B80184E592E00E94D42EE3 +:1047D000FF24F394009709F4F12C892BB1F186E0C2 +:1047E000F801A4E5B2E001900D928A95E1F781E02D +:1047F000809349020E948305909348028093470268 +:1048000080914702909148020E947405059708F133 +:1048100080915402809367028091550280936802D0 +:1048200080915602809369028091570280936A02B8 +:104830008091580280936B028091590280936C02A0 +:104840001092490206C080E0A0CF809149028111F8 +:10485000D7CF80914201882301F18091F502909198 +:10486000F6020097D1F00E947405209187023091E2 +:1048700088022817390788F49091F3028091F40296 +:10488000981709F445C00E94BE2210928802109227 +:1048900087021092F6021092F50280914F0288234F +:1048A00071F080914D0290914E020E947405893EF4 +:1048B000934028F082EE0E942F0B10924F028091BD +:1048C0004C02882391F080914A0290914B020E9401 +:1048D0007405883E934048F00E94830590934B02F4 +:1048E00080934A0283E70E94090D8F2D26960FB60A +:1048F000F894DEBF0FBECDBFDF91CF911F910F9116 +:10490000FF90EF90DF90CF90BF90AF909F90089571 +:104910000E945C221092F6021092F5020E94F505A8 +:10492000BCCF2F923F924F925F926F927F928F9265 +:104930009F92AF92BF92CF92DF92EF92FF920F932E +:104940001F93CF93DF93CDB7DEB769970FB6F89477 +:10495000DEBF0FBECDBF498B5A8B6B8B7C8B8D8B93 +:104960006111109242021D861E861F86188A85E0FC +:10497000FE017196DE01199601900D928A95E1F77C +:104980008C859D85892B31F089859A8589238F3F78 +:1049900009F0D4C129853A854B855C856D857E8576 +:1049A0008F8598890E94E321C3C028EFC2162CE5A9 +:1049B000D20629F4882379F00E94B022EBCF39EF98 +:1049C000C3163CE5D30639F4882329F080914201CF +:1049D0008111F2CFC3C108E111E0E12CB12CA12C6F +:1049E00088248394912C9EEF592E44244394F801FB +:1049F0006081718166246A94762C20E0422F50E019 +:104A0000FA01EE0FFF1FE60FF71F85919491C8166C +:104A1000D90609F43A01892B11F02F5FEFCFF12C61 +:104A2000FFEF6F167F0609F445C0F8014481F0904E +:104A300042018F2D411180E0F82FF170FF2EF80117 +:104A4000258086819B85992309F408C1FF2009F4FC +:104A500005C1211014C0A40101C0440F6A94EAF7F3 +:104A6000842B8683809187029091880280399140BF +:104A700030F440E951E05093880240938702C4012A +:104A800002C0880F991F2A95E2F70197F801268145 +:104A90002817190679F48091F5029091F602009793 +:104AA00009F45FC00E9474058139914008F459C02F +:104AB000F8014482EF28FFEFAF1ABF0A095F1F4FCA +:104AC00026E0A216B10409F092CF8B85882309F461 +:104AD00020C1EE2009F41DC10E9483059093F602C7 +:104AE0008093F50280918A02883010F591E0980F4A +:104AF00090938A0298E0FE013996DE0111960190AA +:104B00000D929A95E1F73CE0839FC00111248557EF +:104B10009D4F28E0FE013196DC0101900D922A950F +:104B2000E1F72FEF3FEFFC0131872087D386C28664 +:104B300069960FB6F894DEBF0FBECDBFDF91CF915F +:104B40001F910F91FF90EF90DF90CF90BF90AF90AB +:104B50009F908F907F906F905F904F903F902F909D +:104B600008958091F3026090F402982FF0E0E0E065 +:104B7000861114C09093F3020E171F0709F49ACF01 +:104B800090E0FC01EE0FFF1FE551FD4FB182A082C6 +:104B90000196837099278093F4028CCF282E312CB4 +:104BA000F101EE0FFF1FE551FD4F20813181F7E04C +:104BB000F29FD001F39FB00D1124A85EBE4F2D913E +:104BC0003C911197398F288F712C60E070E0E72FAE +:104BD000F0E0EE0FFF1F288D398DE20FF31F2591B6 +:104BE000349121153105E1F0F8010190F081E02DBB +:104BF000FF8BEE8B60E005C02417350709F47F2C8E +:104C00006F5FE62FF0E0EE0FFF1F4E895F89E40F24 +:104C1000F51F459154914115510571F77F5FD7CF2D +:104C20007720C9F0F801671708F0FD0144820E17DC +:104C30001F0721F49093F302F72C3CCF981305C083 +:104C4000AE17BF0711F49F5F937091012F5F3F4F25 +:104C5000822F83708DCFF0E0E0E0F7CF90E021105D +:104C60001FC0B40102C0660F771F2A95E2F79B01AF +:104C7000215031092817390731F4442309F447C07A +:104C8000C5010E94C705C40101C0880F6A94EAF7F4 +:104C9000982F9095F801868189238683F22C0ACF7C +:104CA0009C01062C02C0359527950A94E2F7A901CC +:104CB00041705527BC016150710986239723892BC8 +:104CC00011F5452B01F1F80182819381892BC1F007 +:104CD0001B821C821D821E8259825A820E94830579 +:104CE0008160582F9D838C83F801828193818F830B +:104CF000988729813A814B816D817E810E94E321D1 +:104D0000F8011582C0CFF22FF1702F2EBCCF2F2CBF +:104D1000BACF9091F3028091F402981731F00E947B +:104D2000BE22EE2009F436CE03CF0E945C22109200 +:104D3000F6021092F5020E94F505F3CF61E0CE0174 +:104D400009960E943C0F6C018B85F7EFCF16FCE5AE +:104D5000DF0609F02ACE882309F43DCE81E0809356 +:104D6000420118CE1F920F920FB60F9211242F936B +:104D70003F934F935F936F937F938F939F93AF93E3 +:104D8000BF93CF93DF93EF93FF93D091E900DF7050 +:104D90008091EC00C82FC17080FDC0E81092E9003E +:104DA0008091F000877F8093F00078940E94B01586 +:104DB0001092E9008091F00088608093F000CD2B84 +:104DC000CF70C093E900FF91EF91DF91CF91BF9138 +:104DD000AF919F918F917F916F915F914F913F9193 +:104DE0002F910F900FBE0F901F9018951F920F924A +:104DF0000FB60F9211242F933F934F935F936F93AE +:104E00007F938F939F93AF93BF93EF93FF93809183 +:104E1000E10082FF09C08091E20082FF05C080911D +:104E2000E1008B7F8093E1008091DA0080FF24C055 +:104E30008091D80080FF20C08091DA008E7F80931F +:104E4000DA008091D90080FF9BC080E189BD82E1BA +:104E500089BD09B400FEFDCF81E080932C038091D1 +:104E60000703811109C00E94E7030E94B2048091E8 +:104E7000E20084608093E2008091E10080FF17C02F +:104E80008091E20080FF13C08091E2008E7F8093CA +:104E9000E2008091E20080618093E2008091D8007E +:104EA00080628093D80019BC85E080932C038091A8 +:104EB000E10084FF29C08091E20084FF25C080E1E9 +:104EC00089BD82E189BD89B5982F917080FFFBCFA4 +:104ED0008091D8008F7D8093D8008091E1008F7EF3 +:104EE0008093E1008091E2008F7E8093E2008091C8 +:104EF000E20081608093E20080912D03882309F411 +:104F000045C084E080932C038091E10083FF27C09B +:104F10008091E20083FF23C08091E100877F80932E +:104F2000E10082E080932C0310922D038091E10038 +:104F30008E7F8093E1008091E2008E7F8093E2007B +:104F40008091E20080618093E20042E060E080E0D6 +:104F50000E9480048091F00088608093F000FF91AF +:104F6000EF91BF91AF919F918F917F916F915F91E1 +:104F70004F913F912F910F900FBE0F901F9018955A +:104F800019BC10922C031092070376CF8091E30096 +:104F900087FD93E090932C03B7CF78941F921FB6B0 +:104FA0001F9211248F939F93AF93BF938091FE0222 +:104FB0009091FF02A0910003B09101030196A11D01 +:104FC000B11D8093FE029093FF02A0930003B09363 +:104FD0000103BF91AF919F918F911F901FBE1F90B2 +:104FE00018951F921FB61F9211248F939F93AF9312 +:104FF000BF938091FD02811113C08091FE029091B8 +:10500000FF02A0910003B09101034196A11DB11DC3 +:105010008093FE029093FF02A0930003B0930103DC +:10502000BF91AF919F918F911F901FBE1F901895B8 +:10503000CDB7DEB7EE970FB6F894DEBF0FBECDBF8B +:1050400084B7877F84BF0FB6F894A89580916000DD +:10505000886180936000109260000FBE80E890E04D +:105060000FB6F89480936100909361000FBE85B7EE +:10507000806885BF85B7806885BF87EF97E090938C +:10508000C5018093C4010E94E7030E94B20480918D +:10509000E20084608093E200789480912C0388235E +:1050A000A1F01091E9001F709091EC00892F8170A0 +:1050B00090FD80E8182B1092E9008091E80083FDB4 +:1050C0000E94B0151F701093E90082E084BD93E048 +:1050D00095BD9AEF97BD80936E000E947C0F811161 +:1050E00002C00E946A0E05E711E02BE7C22E21E004 +:1050F000D22EF80181918F018F3F11F00E94F907A4 +:10510000C016D106B1F786EF0E94F90787EF0E941B +:10511000F90783E90E94F90786E90E94F907E4E5A7 +:10512000F2E08AE592E0A7E6B2E011921D928E17B6 +:105130009F07D9F70E949015811102C00E94241583 +:1051400082E090E00E94E12E809360020E94950F21 +:1051500090930303809302030E9469238FE39CE9E9 +:105160000197F1F700C000000E9469238091670257 +:1051700080FF08C06FEF7FEF90E080E00E94132F68 +:105180000E94300C83E090E00E94E12E90E00E94AB +:10519000FF0A80913603909137030E94FB13509AC7 +:1051A000589A559A5D9A549A5C9A8CE090E00E94C5 +:1051B000E12E90E0B0E0A0E0809350029093510285 +:1051C000A0935202B093530280915A02811133C0CE +:1051D0000E949015811104C00E9424150E9414158C +:1051E00088E090E00E94E92E60938C0370938D0319 +:1051F00080938E0390938F036E7F71F40E94141539 +:1052000088E090E00E94E92E60938C0370938D03F8 +:1052100080938E0390938F030E940C06109282025B +:1052200080918C0380FF04C060E086950E949C13EF +:1052300081E080935A025198599A52985A9A89B1AA +:10524000869581704A9922C290E0892B80935E02F4 +:1052500060E081E20E949C1381E090E00E94A01433 +:1052600080E091E09093FA028093F90218E1C12E58 +:10527000D12C00E4A02E87E692E096E0B92EB80E7D +:1052800080912C039924939400E112E1853009F474 +:1052900051C20E946923882359F08FB7F894409136 +:1052A000FE025091FF0260910003709101038FBFD5 +:1052B000E1E6F2E0A7E6B2E010E000E0302F8D91E9 +:1052C0009191981709F45FC2292F282790E099241B +:1052D0009394422F492109F451C29DAB3EAB8921E1 +:1052E00091E009F490E09FAB0E9483058160782FE4 +:1052F00099AF88AF4DA95EA96FA989AD0E9491248D +:10530000F801EF59FD4F80819826908280918202AA +:105310008823D1F180918102E0918C03E695E81B0E +:10532000E0937D02823009F045C2F0E0EA55FD4F7E +:10533000E4910E2F10E0BDE78B2EB2E19B2E809101 +:105340007E02882361F010927E020E948305909372 +:105350007C0280937B021092800210927F020E9456 +:105360008305E0917B02F0917C028E1B9F0B8F3FA7 +:105370009F4750F4E00FF11FF0937C02E0937B0213 +:105380008BE792E0F4010995E0915E02EE0FEE0FDB +:10539000E0935E0289B181FBEE24E0F84A9964C291 +:1053A00080E08E29E82BE0935E02EF70F0E0E15898 +:1053B000FE4F808190915D02890F80935D0220E015 +:1053C000843034F180915C028F5F80935C0212E044 +:1053D00018AB19AA81E08AAB0E9483058160782FFF +:1053E0009CAB8BAB48A959A96AA98CA90E949124AE +:1053F0001BA71CA61DA60E9483058160782F9FA76E +:105400008EA74BA55CA56DA58FA50E94912421E0D8 +:1054100080915D028D3F2CF580915C0281508093DC +:105420005C021EA21FA281E088A70E948305816002 +:10543000782F9AA789A74EA15FA168A58AA50E9487 +:10544000912419A21AA21BA20E9483058160782FC1 +:105450009DA38CA349A15AA16BA18DA10E94912467 +:1054600021E080915D02082E000C990B64E070E051 +:105470000E94472E80935D02222359F08FB7F89443 +:105480004091FE025091FF02609100037091010370 +:105490008FBF86E0E4E7F2E0DE01119601900D9205 +:1054A0008A95E1F7909076028090770210917802C9 +:1054B000009179021092760210927702109278028F +:1054C00010927902892D882909F448C080917202CE +:1054D000909173020E9474059C0190916E02992331 +:1054E00009F4AEC323333105C8F19F3F19F09F5F24 +:1054F00090936E02992059F00E947D079FEF191436 +:105500000CF491E0899F802D1124809376028820ED +:1055100059F00E947D079FEF18140CF491E0899FC9 +:10552000802D112480937702309176023323B1F0DD +:1055300020917702222391F045EB3403C00111241E +:10554000992309F494C19093760245EB24039001CA +:105550001124332309F48FC130937702812F802BDC +:1055600009F448C080917002909171020E94740504 +:105570009C0190916D02992309F45DC32536310594 +:10558000C8F19F3F19F09F5F90936D02112359F06E +:105590000E945B079FEF11160CF491E0899F802D0C +:1055A000112480937802002359F00E945B079FEF3B +:1055B00010160CF491E0899F802D112480937902BC +:1055C000309178023323B1F020917902222391F0B7 +:1055D00045EB3403C0011124992309F450C1909381 +:1055E000780245EB240390011124332309F44BC1C5 +:1055F000309379028091760290917702892B909175 +:105600007802892B90917902892B11F00E94BB06B8 +:1056100086E0FE013196A4E7B2E001900D928A95F2 +:10562000E1F70E94BB0590915F02891731F00E945B +:10563000BB0580935F020E948C0B80912C03843009 +:1056400009F01ECE83E08093E9008091E80082FF9C +:1056500017CE8091E80090E085FF06C00E94060406 +:10566000882309F414C191E08091E8008B7780933E +:10567000E800992309F404CEE981E150E33108F010 +:1056800088C1F0E0E15BF04D0C947D2E92E0DDCD21 +:1056900080912C03843009F440C080E00E948C0B80 +:1056A0001092820280917A02811116C090927A0241 +:1056B00080918C03982F917090935B028E7F8093E2 +:1056C0008C039FEFE0E7F2E09150E040F040E1F71B +:1056D00000C000000E94B90F1092FD020FB6F894AE +:1056E000A895C09260000FBEA092600083B7817F32 +:1056F000846083BF83B7816083BF7894889583B7C4 +:105700008E7F83BF0FB6F894A89580916000886162 +:1057100080936000109260000FBE80912B0388235D +:1057200049F00E946923E7E6F2E08191811164C2A9 +:10573000BE12FBCF80912C03853009F4A9CF0E94C3 +:105740009B150E94BB050E948C0B10927A028091DF +:105750005B02882361F080918C03816080938C03CD +:1057600060E086950E949C130E94A30F92CD8091C9 +:1057700083028823C9F30E94B90FF6CF9F5F990C6B +:10578000943009F0A6CD0F5F1F4F0630110509F0C8 +:1057900095CD8FEF8AAF8BAF1CAE0E9483058160E1 +:1057A000782F9EAF8DAF4AAD5BAD6CAD8EAD0E94D4 +:1057B0009124ACCD863059F4F0E0ED55FD4FE491E5 +:1057C0000E2F10E0ADE68A2EA2E19A2EB8CD8930D8 +:1057D00061F4E695F0E0E056FD4FE4910E2F10E005 +:1057E000F9ED8F2EF1E19F2EAACD8F3061F4E69571 +:1057F000F0E0E356FD4FE4910E2F10E0EBE68E2E25 +:10580000E1E19E2E9CCD853159F4F0E0E656FD4F46 +:10581000E4910E2F10E07DE1872E71E1972E8FCD60 +:1058200008E210E044E9842E40E1942E883109F426 +:1058300086CD833249F4E8E9F2E00591149164E100 +:10584000862E62E1962E7BCD04EF11E05BE5852E7E +:1058500050E1952E843209F472CD00ED17E03BE063 +:10586000832E36E0932E6BCD82E090E09ACD81E0DE +:10587000809376026ACE81E0809377026FCE81E0DA +:1058800080937802AECE81E080937902B3CE00E2BD +:1058900010E0CE0101964C018091E80085FD0AC020 +:1058A0008091E8008B778093E8000E9406048823AB +:1058B00099F3D9CE8091F100F40181934F01015009 +:1058C000110951F7D0CE1A8289E08B832DC08A81CD +:1058D000823009F4A7C18330A9F0813009F059C0A2 +:1058E0002FB7F8946091FE027091FF02809100033F +:1058F000909101032FBF0E94832E6B837C838D8345 +:105900009E8312C0809167028B83809168028C8392 +:10591000809169028D8380916A028E8380916B02EF +:105920008F8380916C02888780912C03843009F0EA +:10593000A7CC1091E9001F709091EC00892F817025 +:1059400090FD80E8182B82E08093E9008091E800C8 +:1059500080FF0DC050E040E060E270E0CE010196B3 +:105960000E9437048091E8008E778093E8001F70D2 +:105970001093E90085CC8A81823059F46B817C8157 +:105980008D819E810E94832E86E290E00E94F52EFA +:10599000CBCF8FEF8983C8CF4C816B818A810E94E6 +:1059A000930E9827892798279E838D83BDCF8D805E +:1059B0009E809824892498248A810B81F8E00F9F87 +:1059C0008001112420E3829F000D111D11248C8180 +:1059D00090E0880F991F080F191F692DC80187963D +:1059E0000E94F52E682DC8018896D0CF0E94000E27 +:1059F0009BCF8A818138C1F060F4803809F094CF60 +:105A000020E04B8160918E0380918D030E94A31250 +:105A10008BCF823859F1833809F086CF20E040914E +:105A20008F036C818B81F2CF60E08B810E949C138D +:105A30009B8180918C03911111C08E7F80938C0388 +:105A4000109282024FEF80E792E0415080409040F8 +:105A5000E1F700C000000E94B90F66CF816080931B +:105A60008C0360E086950E949C135ECF8B818093AF +:105A700090035ACF8A81813899F030F4803809F048 +:105A800053CF80918F0321CF823891F0833809F072 +:105A90004BCF80918D038B8380918E038C8344CF79 +:105AA00080918C0380FF02C086950FCF80E00DCFE0 +:105AB000809190030ACF60918C0370918D03809147 +:105AC0008E0390918F030E9491122ECF80E18A83E2 +:105AD0002BCF81E08A8389EFF8CE0A811B811027C2 +:105AE00001271027FE0131963F018C80CF01880DE0 +:105AF000911D4C01C801895F9D4F8614970409F4DC +:105B000013CF093FE1E01E0750F40E94E12EF3019C +:105B100084830F5F1F4FFFEF6F1A7F0AEBCFF301F4 +:105B20001482F7CF0A811B81102701271027CE018D +:105B300001963C018C80800E912E911CC801895FDA +:105B40009D4F8016910609F4EFCE093FE1E01E0754 +:105B500020F4F30164810E94F52EFFEF6F1A7F0A93 +:105B60000F5F1F4FEBCF0E94F00DDECE8AE0AFCF6C +:105B70000A811B81102701271027CE0101963C01C5 +:105B80008C80FC01E80DF11D4F01C8018796861439 +:105B9000970409F4C9CE003EF1E01F0750F40E94BB +:105BA000E12EF30184830F5F1F4FFFEF6F1A7F0A0F +:105BB000ECCFF3011482F7CF0A811B811027012754 +:105BC0001027CE0101963C018C80800E912E911CF5 +:105BD000C80187968016910609F4A6CE003EE1E042 +:105BE0001E0720F4F30164810E94F52EFFEF6F1A67 +:105BF0007F0A0F5F1F4FECCF09BD19BD09B400FE2E +:105C0000FDCF8091D8008F7D8093D8008091E000F7 +:105C100082608093E0008091E00081FDFCCF0E94D3 +:105C20009B1588CD86E290E00E94E12E1B821C82AB +:105C30001D828E8379CE2D32314008F0A4CCDACC8F +:105C40002D32314008F053CC89CC87FB082E062634 +:105C500087FD819567FD61950E94BB2E0EF491959D +:105C600007FC81950895AA1BBB1B51E107C0AA1F21 +:105C7000BB1FA617B70710F0A61BB70B881F991FED +:105C80005A95A9F780959095BC01CD01089597FB91 +:105C9000072E16F4009407D077FD09D00E94332E0A +:105CA00007FC05D03EF4909581959F4F089570951F +:105CB00061957F4F0895A1E21A2EAA1BBB1BFD011F +:105CC0000DC0AA1FBB1FEE1FFF1FA217B307E407DB +:105CD000F50720F0A21BB30BE40BF50B661F771F33 +:105CE000881F991F1A9469F7609570958095909513 +:105CF0009B01AC01BD01CF010895EE0FFF1F059080 +:105D0000F491E02D0994692796276927782787273A +:105D1000782708950E94922E332312F48A1B9B0B3E +:105D20000C94A32EA29FB001B39FC001A39F700D3E +:105D3000811D1124911DB29F700D811D1124911D93 +:105D400008950E94922EB7FF0895821B930B089529 +:105D50000E94922EA59F900DB49F900DA49F800D40 +:105D6000911D11240895B7FF0C94A82E0E94A82E0F +:105D7000821B930B0895991B79E004C0991F961715 +:105D800008F0961B881F7A95C9F780950895FC0145 +:105D90004150504030F001900616D1F73197CF01B5 +:105DA0000895882799270895FB01DC0104C08D918F +:105DB0000190801921F441505040C8F7881B990B7D +:105DC0000895F999FECF92BD81BDF89A992780B5C3 +:105DD0000895A6E1B0E044E050E00C941B2FA8E148 +:105DE000B0E042E050E00C941B2F262FF999FECF33 +:105DF00092BD81BDF89A019700B4021639F01FBA1E +:105E000020BD0FB6F894FA9AF99A0FBE089503963A +:105E1000272F0E94F62E0E94F52E252F0E94F62E87 +:105E2000242F0C94F62E0196272F0E94F62E0C9408 +:105E3000F52EDC01CB01FC01F999FECF06C0F2BDC5 +:105E4000E1BDF89A319600B40D9241505040B8F738 +:105E50000895F894FFCF270F270F300F300F320F20 +:105E6000300F300F300F270F270F370F300F300F45 +:105E7000370F9516BD161017BD161017F0162817F8 +:105E8000101725183218EF1CEF1C5E1D5E1DB91D82 +:105E9000D31D251D251DDE1D661E751E751E632C5A +:105EA000672CBB2CCC2CD72CF62CF92C3A2D5B2D47 +:105EB000C92CC92C662D692D6D2D922DB32DB62DB3 +:045EC000B82DDC2DF0 +:105EC4007105F00BCF0BCB0BC70B01191A1B1C1D53 +:105ED4001E1F202122010201CA002A00000000C462 +:105EE400004C00000000BE005000000000B800514B +:105EF40000000000B2004F00000000AC005200009F +:105F040000000101818283E200E900EA00B500B6E5 +:105F140000B700CD008301CC008A019201940121D5 +:105F240002230224022502260227022A02B300B415 +:105F3400006F007000F03435366667F6F79396000C +:105F4400FF0100010000FFFF0000010001FF00004D +:105F540001020202020606060909090909090F0FCE +:105F64000F0F0F0F151515181919191919191919D2 +:105F7400191923244022B6A8018601D000BD06D6F3 +:045F840006F6060017 :00000001FF From ae8f23f90bdc4cd55e4112bb440445f9db188a81 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Fri, 12 Nov 2021 12:36:52 -0500 Subject: [PATCH 061/155] Add trackball click support for mouse buttons and key codes. --- keyboards/solartempest/sofle/config.h | 2 +- .../solartempest/sofle/keymaps/via/keymap.c | 21 +- .../sofle/solartempest_sofle_via.hex | 982 +++++++++--------- 3 files changed, 508 insertions(+), 497 deletions(-) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index 08fd837bc965..a9a274e6378c 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -91,7 +91,7 @@ #define PIMORONI_TRACKBALL_INVERT_Y #define PIMORONI_TRACKBALL_INTERVAL_MS 6 //Default is 8ms //#define PIMORONI_TRACKBALL_INVERT_X - //#define PIMORONI_TRACKBALL_CLICK //Not compatible with having mouse keys on keymap + //#define PIMORONI_TRACKBALL_CLICK //Not compatible with having mouse keys in keymap. Use trackball_register_button() and trackball_click() in keymap.c instead. #endif diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index ad9286c30fde..40c1aa0396a9 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -122,6 +122,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these trackball_set_rgbw(RGB_GOLDENROD, 0x00); } } + + bool pointing_device_task_user(pimoroni_data* trackball_data) { //Code from Dasky (Thanks!). This corrects the rotate/inversion scrolling issue currently in QMK Master. + if (trackball_is_scrolling()) { + pimoroni_data temp = *trackball_data; + trackball_data->up = temp.down; + trackball_data->down = temp.up; + } + return true; + } #if !defined(MOUSEKEY_ENABLE) //Allows for button clicks on keymap even though mousekeys is not defined. static bool mouse_button_one, trackball_button_one; @@ -137,13 +146,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these pointing_device_set_report(currentReport); } - bool pointing_device_task_user(pimoroni_data* trackball_data) { //Code from Dasky (Thanks!). This corrects the rotate/inversion scrolling issue currently in QMK Master. - if (trackball_is_scrolling()) { - pimoroni_data temp = *trackball_data; - trackball_data->up = temp.down; - trackball_data->down = temp.up; + void trackball_click(bool pressed, report_mouse_t* mouse) { //Use for single mouse button and key presses. Click and drag is done with keys elsewhere. + if (pressed) { //trackball pressed + //tap_code_delay(KC_A,300); //Use delay as simple debounce for key strokes + mouse->buttons |= MOUSE_BTN1; + } else { //released + mouse->buttons &= ~MOUSE_BTN1; } - return true; } #endif diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index 94f281e936ba..8dd1c8159991 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,4 +1,4 @@ -:100000000C9449060C9490060C9490060C9447317D +:100000000C9449060C9490060C9490060C94543170 :100010000C9490060C9490060C9490060C94900608 :100020000C9490060C9490060C943C1A0C94F819BD :100030000C9409260C9490060C9490060C9490064F @@ -205,9 +205,9 @@ :100CC0007A0610927B0610927C0610927D0614BE66 :100CD00084B7877F84BF0FB6F894A8958091600091 :100CE000886180936000109260000FBEE0E0F8E33E -:100CF000099512E0A0E0B1E0ECE8F9E602C0059049 +:100CF000099512E0A0E0B1E0E6EAF9E602C005904D :100D00000D92AE32B107D9F726E0AEE2B2E001C0F3 -:100D10001D92AA37B207E1F70E9430260C948D3459 +:100D10001D92AA37B207E1F70E9430260C949A344C :100D20000C940000CF93DF934091780650917906A0 :100D3000485754409A01205A3F4F21303240C0F06A :100D400020E032E0241B350B60917604709177042B @@ -288,7 +288,7 @@ :1011F000E8835A83DF91CF911F910F91FF90EF9079 :10120000DF90BF90AF900895E62EF12C4491D42E3C :10121000E42FF0E026E0829FC00111242FEF30E0A0 -:10122000B9010E94C132802F90E0880F991F55E5C7 +:10122000B9010E94CE32802F90E0880F991F55E5BA :10123000569FD001579FB00D11248A1B9B0B982FEE :10124000990F890F5901AE18BF08AE9ED001AF9E0D :10125000B00DBE9EB00D11245B2F189F800111248C @@ -420,18 +420,18 @@ :101A3000819591090895681B20E0DFCF0F931F93D4 :101A4000CF93DF9300D000D0CDB7DEB789836A8310 :101A50004B831C8204E610E024E030E0AE014F5FCF -:101A60005F4F60E084E10E941F300F900F900F9055 +:101A60005F4F60E084E10E942C300F900F900F9048 :101A70000F90DF91CF911F910F91089580913203C4 :101A8000882329F047E669E98BE20C941E0D6091EA -:101A9000590170915A0190E080E00E946E3320E07D -:101AA00030E040E05CE30E94CF3320E030E040E8EB -:101AB0005FE30E946933882321F047EC6BE180E00B +:101A9000590170915A0190E080E00E947B3320E070 +:101AA00030E040E05CE30E94DC3320E030E040E8DE +:101AB0005FE30E947633882321F047EC6BE180E0FE :101AC000E4CF41E265EA89EDE0CFCF92DF92EF9279 :101AD000FF920F931F93CF93DF936C017B0164E61A -:101AE00070E088E70E94072FEC0197FD12C010E01C +:101AE00070E088E70E94142FEC0197FD12C010E00F :101AF00000E0F601E00FF11F849164E670E00E94BF -:101B0000812FEC01892B29F40F5F1F4F0E151F0544 -:101B100081F70E949B30CE01DF91CF911F910F91F1 +:101B00008E2FEC01892B29F40F5F1F4F0E151F0537 +:101B100081F70E94A830CE01DF91CF911F910F91E4 :101B2000FF90EF90DF90CF900895809148049091BE :101B30004904911103C091E089270895882369F031 :101B400062E070E08CEE9BE00E94650D892B19F03D @@ -497,7 +497,7 @@ :101F000001C0220F0A94EAF7822309F43FC0F601C8 :101F1000EE0FFF1FE80DF91DE590F490E114F104B8 :101F200009F479CF45E050E0B701CE0101960E9457 -:101F3000023309810F3F51F18A81800F9927991F40 +:101F30000F3309810F3F51F18A81800F9927991F33 :101F40008B34910514F08AE490E05C01AA0CBB1C70 :101F50008A0D9B1DDC01A15ABC4F5D01049D8001CF :101F60001124015A1C4F0A151B0520F0B5E0EB0E99 @@ -515,8 +515,8 @@ :102020002D93CD01B4E080379B07B9F78091690407 :10203000833009F471C0B8F4813009F448C08230AB :1020400009F4B4C08091E80083FF3CC1809168042A -:10205000909169049A3008F035C1E92FF0E0E1571A -:10206000FB4C0C94F5328A3009F48FC08B3009F4A4 +:10205000909169049A3008F035C1E92FF0E0E45618 +:10206000FB4C0C9402338A3009F48FC08B3009F496 :1020700070C0893039F780916804813219F78091F6 :102080006C0490916D04009711F00297D9F680913D :10209000E800877F8093E8008091E80082FF37C0E6 @@ -601,22 +601,22 @@ :10258000E9008091E800877F8093E8000E944F0770 :1025900099CE1F93CF93DF93162FC0917806D091D9 :1025A00079068A30D1F420913D04CE0188579440B9 -:1025B000622F70E00E94C132281B822F66E00E94C9 -:1025C000D532C82FC15020F4DF91CF911F910895CB +:1025B000622F70E00E94CE32281B822F66E00E94BC +:1025C000E232C82FC15020F4DF91CF911F910895BE :1025D00060E080E20E94C912F5CF8D30E9F4C8575F -:1025E000D44020913D04622F70E0CE010E94C132A0 +:1025E000D44020913D04622F70E0CE010E94CE3293 :1025F000281B822F9E01280F311D2115324018F013 :1026000080E0D0E0C0E0C80FD11DC858DB4FD093A8 :102610007906C0937806D8CF96E0FE01AEE3B4E029 :1026200001900D929A95E1F7803E90F186E0FE01CF :1026300011928A95E9F7C0917806D0917906111127 -:1026400033C046E050E0BE018EE394E00E940B33BD +:1026400033C046E050E0BE018EE394E00E941833B0 :102650009E0128573440892B91F52A5F3F4F4091C6 -:102660003D04642F70E0C9010E94C132481B46300E +:102660003D04642F70E0C9010E94CE32481B463001 :1026700010F4240F311D211572E0370710F030E0FF :1026800020E028583B4F30937906209378069CCF62 :10269000F6E08F9FB00111246655794F46E050E077 -:1026A000CE010E940233C7CF9E012A5F3F4FFE0139 +:1026A000CE010E940F33C7CF9E012A5F3F4FFE012C :1026B0002E173F0731F2808180958193F9CFC901B0 :1026C00045E0969587954A95E1F741E050E0BA01DB :1026D00002C0660F771F8A95E2F7CB0160917604FE @@ -627,27 +627,27 @@ :1027200001900020E9F78F0101501109C017D1076E :1027300030F0DF91CF911F910F91FF9008956F2D91 :1027400089910E94C912F2CFCF93DF93C3EED2E0FA -:1027500060E0CE010E9435332196C11584E0D80790 +:1027500060E0CE010E9442332196C11584E0D80783 :10276000B9F7DF91CF9108956F927F928F929F92E8 :10277000AF92BF92CF92DF92EF92FF920F931F938F :10278000CF93DF938AEAC82E86E0D82E91ECE92E0B :10279000F12CE701CC58D10936011BC0F501859019 -:1027A0009490692DC8010E943533682DC8010196A7 -:1027B0000E94353382E0A80EB11C0E5F1F4FC01778 +:1027A0009490692DC8010E944233682DC80101969A +:1027B0000E94423382E0A80EB11C0E5F1F4FC0176B :1027C000D10761F78EE0680E711C2E96CE15DF05DD :1027D00029F08E010E5011095301E0CF7E018CE8E3 :1027E000E80EF11C8CE8C80ED11C8DE7E81683E0DA :1027F000F80679F6DF91CF911F910F91FF90EF903E :10280000DF90CF90BF90AF909F908F907F906F9010 :102810000895CF93C82F6FEF811161E283E290E0BA -:102820000E9435336FEFC11161E184E290E00E94B4 -:1028300035336FEFC11167E085E290E0CF910C94E2 -:10284000353380E00E94091460E086E290E00E9447 -:1028500035330E94B4130E94A41381E00C94091430 +:102820000E9442336FEFC11161E184E290E00E94A7 +:1028300042336FEFC11162E185E290E0CF910C94D9 +:10284000423380E00E94091460E086E290E00E943A +:1028500042330E94B4130E94A41381E00C94091423 :102860000F931F93CF93DF93C42FD0E0CC0FDD1FC6 :102870002EE0629FC00DD11D11243CE8839FC00D46 -:10288000D11D1124CE0187960E942133082F10E01C -:10289000102F0027CE0188960E9421339801282B03 +:10288000D11D1124CE0187960E942E33082F10E00F +:10289000102F0027CE0188960E942E339801282BF6 :1028A000C901DF91CF911F910F910895462F853077 :1028B00038F47A3028F4673018F4672F0C94301409 :1028C00090E080E00895CF92DF92FF920F931F93E4 @@ -659,15 +659,15 @@ :1029200061F3EECFCF93DF93EC010E946314BE01FD :102930000E945614DF91CF910C94D609FC0180813E :1029400091810E949214292F2F7092959F7092501E -:102950009E3078F4E92FF0E0E756FB4C0C94F5320A +:102950009E3078F4E92FF0E0EA55FB4C0C940233FA :10296000803F19F020F4883E20F481E00895843FF0 :10297000E1F380E00895883EC0F3813FD1F7F5CFC1 :10298000822F869586958695089583E290E00E9431 -:102990002133813289F484E290E00E942133813135 -:1029A00059F485E290E00E94213391E0873009F0EC +:102990002E33813289F484E290E00E942E3381311B +:1029A00059F485E290E00E942E3391E0823109F0E3 :1029B00090E0892F8170089580E0FCCFCF92DF9264 :1029C000EF92FF926B017C010E94CC08B701A60137 -:1029D00088E090E0FF90EF90DF90CF900C94473329 +:1029D00088E090E0FF90EF90DF90CF900C9454331C :1029E000AF92BF92CF92DF92EF92FF920F931F931D :1029F000CF93DF9300D00F92CDB7DEB7082FF62E1E :102A0000142FE22E8091710480FF4FC0E82FE695CD @@ -686,7 +686,7 @@ :102AD000C5CF923039F6E2508E2F8170D82EE69510 :102AE000F0E0E55AF94FA590B490C12CBB24609159 :102AF0007301C61608F0B4CF2C2D30E0A29EC001A1 -:102B0000A39E900DB29E900D112470E00E94C132E0 +:102B0000A39E900DB29E900D112470E00E94CE32D3 :102B1000802FD11016C0860F40917101420F532FA4 :102B2000511D9A01220F331F240F351F215A3C4F8C :102B3000412F113A08F040EA6F2D0E94E208C39439 @@ -748,19 +748,19 @@ :102EB000808311828FEF828380EA83831482A9E565 :102EC000B3E012968C911297836012968C93608176 :102ED0007181828193810C94DE1469EE7EEF90E023 -:102EE00080E00E94533360E082E090E00E9435333E -:102EF00060E083E090E00E9435331092920260E03F -:102F000084E090E00E94353360E082E290E00E942D -:102F1000353360E085E090E00E94353360E086E084 -:102F200090E00E9435336FEF87E090E00E943533E8 -:102F300040E050E0BA0188E090E00E94473360E052 -:102F40008DE090E00E94353340E050E0BA0188E126 -:102F500090E00E94473360E087E190E00E943533C3 -:102F600040E050E0BA018CE190E00E94473370E00D -:102F700060E080E290E00E94533340E050E0BA010C -:102F800088E190E00E94473380E00E9409140E948B -:102F9000211440E050E0BA018FE090E00E944733F6 -:102FA00040E050E0BA0183E190E00C9447330F9386 +:102EE00080E00E94603360E082E090E00E94423324 +:102EF00060E083E090E00E9442331092920260E032 +:102F000084E090E00E94423360E082E290E00E9420 +:102F1000423360E085E090E00E94423360E086E06A +:102F200090E00E9442336FEF87E090E00E944233CE +:102F300040E050E0BA0188E090E00E94543360E045 +:102F40008DE090E00E94423340E050E0BA0188E119 +:102F500090E00E94543360E087E190E00E944233A9 +:102F600040E050E0BA018CE190E00E94543370E000 +:102F700060E080E290E00E94603340E050E0BA01FF +:102F800088E190E00E94543380E00E9409140E947E +:102F9000211440E050E0BA018FE090E00E945433E9 +:102FA00040E050E0BA0183E190E00C9454330F9379 :102FB0001F93CF93DF9300D000D0CDB7DEB7409101 :102FC000C5025091C6026091C7027091C8022FB726 :102FD000F8948091510490915204A0915304B091BF @@ -769,7 +769,7 @@ :1030000062086E5F7F4F8F4F9F4F69837A838B83F8 :103010009C8380912C0190912D0181559D4F409171 :103020002B0150E04530510510F044E050E0BE0166 -:103030006F5F7F4F0E94183384E090E00E940D3252 +:103030006F5F7F4F0E94253384E090E00E941A3238 :10304000892BD9F40E9462086093C5027093C6026E :103050008093C7029093C80281E010C00E9462086A :103060000091D2021091D3022091D4023091D50266 @@ -782,8 +782,8 @@ :1030D000C916D104E104F10410F4442311F1E82EDF :1030E000082E000CFF089AE08902F0011124EF5F1E :1030F000FE4F8381948181559D4F428150E004179A -:10310000150708F4A801B9010E941833C7010E94ED -:103110000D32892BA1F40E946208688379838A8327 +:10310000150708F4A801B9010E942533C7010E94E0 +:103110001A32892BA1F40E946208688379838A831A :103120009B8381E0DF91CF911F910F91FF90EF90F2 :10313000DF90CF90BF90AF909F908F90089580E0E8 :10314000F1CF0F931F93CF93DF930F92CDB7DEB7DD @@ -801,25 +801,25 @@ :1032000008956F927F928F929F92AF92BF92CF92CA :10321000DF92EF92FF920F931F93CF93DF930F9262 :10322000CDB7DEB7862E5A016901682E880F770860 -:10323000C3010E940D32892B09F088C08AE0869D67 +:10323000C3010E941A32892B09F088C08AE0869D5A :10324000F001879DF00D1124EF5FFE4F458150E0A6 :103250004115510511F041E050E08AE0869DF001F2 :10326000879DF00D1124EF5FFE4F668177816155D8 -:103270007D4FCE0101960E941833F50140815181A6 +:103270007D4FCE0101960E942533F5014081518199 :10328000628173812FB7F894809151049091520418 :10329000A0915304B09154042FBF841B950BA60B2F :1032A000B70B84369105A105B10540F4B701C801FB :1032B0000E94B1089981891709F44FC0082C000CAD -:1032C0009908C4010E940D32892B91F0B12C8B2DED +:1032C0009908C4010E941A32892B91F0B12C8B2DE0 :1032D0000F90DF91CF911F910F91FF90EF90DF90B2 :1032E000CF90BF90AF909F908F907F906F900895F8 :1032F0008AE0889DF001899DF00D1124EF5FFE4F5B :10330000458150E0E416F50608F4A7018AE0889D9F :10331000F001899DF00D1124EF5FFE4F66817781EA -:1033200061557D4FC6010E941833B701C8010E9444 +:1033200061557D4FC6010E942533B701C8010E9437 :10333000B10899818913CACF0E946208F5016083A0 :10334000718382839383BB24B394C1CFB12CA70133 -:10335000B801C6010E941833BACFBB24B394F7CF8B +:10335000B801C6010E942533BACFBB24B394F7CF7E :10336000CF92DF92EF92FF920F931F93CF93DF9351 :1033700000D000D00F92CDB7DEB76B0185E0E82E0C :10338000F12C00EB12E09E012F5F3F4F47EA52E025 @@ -828,7 +828,7 @@ :1033B000E2EAF2E0D60101900D929A95E1F70F90C2 :1033C0000F900F900F900F90DF91CF911F910F9161 :1033D000FF90EF90DF90CF90089590E080E00E9402 -:1033E0002F33893E9E4F11F40C94C51480E008954C +:1033E0003C33893E9E4F11F40C94C51480E008953F :1033F0001F920F920FB60F9211242F933F934F936A :103400005F936F937F938F939F93AF93BF93CF936C :10341000DF93EF93FF93D091E900DF708091EC0090 @@ -882,16 +882,16 @@ :103710006314182F682F89819A810E94890B69810F :103720007A81812F0E9456148C01F60182818823B0 :1037300009F42BC5C80182519F45409708F0EEC49B -:103740008FEF93E00E942133025193EEA92E92E075 +:103740008FEF93E00E942E33025193EEA92E92E068 :10375000B92E8111C7CF01113AC01C821B82662489 :1037600063948AE0582E85010F5F1F4FC5010E94A8 -:10377000213389831A82882309F4B4CF9FEF980FED +:103770002E3389831A82882309F4B4CF9FEF980FE0 :103780009330A0F58A83698232E0A30EB11CC80190 -:103790000E9421338B83882309F4A4CF8E010F5F0D +:103790000E942E338B83882309F4A4CF8E010F5F00 :1037A0001F4FF80120812223F1F2213009F058C087 :1037B000918182819130E1F40E5F1F4F6AE070E0E9 :1037C000893311F460E570E00E94CF0E17C0A11498 -:1037D000F4E0BF0609F486CFC5010E9421338111B0 +:1037D000F4E0BF0609F486CFC5010E942E338111A3 :1037E00001C001502FEFA21AB20AB5CF5801D6CFAF :1037F000923039F40E5F1F4F0E94150C0F5F1F4F60 :10380000D0CF933029F40E5F1F4F0E94DC0BF6CF10 @@ -925,7 +925,7 @@ :1039C0000E94890BB8018F2D0E9456140E94D609BF :1039D000182FB82EF60122814581342F32953F7081 :1039E000892F82958F70E82EF12C8C3008F04EC212 -:1039F000F701E955FB4C0C94F5320338FFE51F073E +:1039F000F701EC54FB4C0C9402330338FFE51F072E :103A000009F481C018F501383FE5130709F44AC0ED :103A100008F065C000385FE5150709F0A5CF8823D9 :103A200009F459C080919C02811106C081E0809305 @@ -933,9 +933,9 @@ :103A400080939A028BE20E94150C8ECF05389FE579 :103A5000190709F4BEC008F476C00638FFE51F0751 :103A600009F082CF882309F4CEC06091590170918A -:103A70005A0190E080E00E946E3320E030E040E0A8 -:103A80005CE30E94CF3320E030E040E85FE30E9437 -:103A900069338111B5C080EE90E090935A01809314 +:103A70005A0190E080E00E947B3320E030E040E09B +:103A80005CE30E94DC3320E030E040E85FE30E942A +:103A900076338111B5C080EE90E090935A01809307 :103AA0005901A1C08823A1F080919C02811106C018 :103AB00081E080939C0282EE0E94150C0E94461BBE :103AC00090939B0280939A0281EE0E94150CBACFCC @@ -1142,7 +1142,7 @@ :10475000F601319780818F3F11F00E947C0950EA69 :104760005A95F1F7F801EE0DFF1D90828FEFE81AD0 :10477000F80A95E0E916F10409F0A8CF4AE050E004 -:10478000B80188ED92E00E940B337C01892B41F047 +:10478000B80188ED92E00E9418337C01892B41F03A :104790008AE0F801A8EDB2E001900D928A95E1F768 :1047A0001091E302E114F104B9F181E080939502E4 :1047B0000E94461B909394028093930280919302EF @@ -1220,7 +1220,7 @@ :104C30005204A0915304B09154044196A11DB11D9A :104C40008093510490935204A0935304B09354045E :104C5000BF91AF919F918F911F901FBE1F9018958C -:104C6000CDB7DEB7E3970FB6F894DEBF0FBECDBF6A +:104C6000CDB7DEB7E9970FB6F894DEBF0FBECDBF64 :104C700084B7877F84BF0FB6F894A89580916000B1 :104C8000886180936000109260000FBE80E890E021 :104C90000FB6F89480936100909361000FBE85B7C2 @@ -1234,7 +1234,7 @@ :104D1000D3021092D4021092D5020E94C5148111C0 :104D200002C00E9421140E949C0E80935801809121 :104D30005801882309F4C6C010926F0185E2809360 -:104D400070010E949C0E81110E94003180915801D7 +:104D400070010E949C0E81110E940D3180915801CA :104D500081112FC0FE01359686E0DF011D928A95F4 :104D6000E9F786E6898387E98A8386EC8B8384E387 :104D70008C8385E38D833497AEE4B1E0CE010B964E @@ -1249,21 +1249,21 @@ :104E00007C09E016F106B1F7E8EDF2E082EE92E0FF :104E1000AFE4B3E011921D928E179F07D9F70E945D :104E2000ED19811102C00E946D1782E090E00E948E -:104E300021338093440384E090E00E942133182FB3 -:104E400082E290E00E942133982F812F9093D70225 +:104E30002E338093440384E090E00E942E33182F99 +:104E400082E290E00E942E33982F812F9093D70218 :104E50008093D6020E944223EFE7FBEB3197F1F7F4 :104E600000C000000E94422380914F0380FF2EC0AB -:104E70006FEF7FEF90E080E00E94533381E08093FA +:104E70006FEF7FEF90E080E00E94603381E08093ED :104E8000E00080E28093D8001092C9008FE19EE498 :104E90000197F1F700C0000087E090EBDC01809300 :104EA0007A0690937B06A0937C06B0937D0688E1FA :104EB0009CE00FB6F894A895809360000FBE909385 :104EC0006000FFCF85E280936F0139CF83E090E0EF -:104ED0000E9421330E94C30B809170040E946E16C1 -:104EE0000E949C0E811102C00E94033183E08093D6 -:104EF0001A0380E280933D040E94012F6DE070E070 +:104ED0000E942E330E94C30B809170040E946E16B4 +:104EE0000E949C0E811102C00E94103183E08093C9 +:104EF0001A0380E280933D040E940E2F6DE070E063 :104F00008CE992E00E94650D892BE9F580911A03E6 -:104F100063E070E081FD97C289E992E00E94650D2F +:104F100063E070E081FD9EC289E992E00E94650D28 :104F2000892B89F56DE070E089E892E00E94650DBB :104F3000892B49F50E9462086058774C8E4F9F4F2D :104F4000609344047093450480934604909347040F @@ -1272,9 +1272,9 @@ :104F7000909377048093760481E080934904809332 :104F8000480410921B038091E402811136C00E94F4 :104F9000ED19811104C00E946D170E94551788E019 -:104FA00090E00E942933609371047093720480939F +:104FA00090E00E9436336093710470937204809392 :104FB00073049093740480915B03836080935B031C -:104FC0006E7F71F40E94551788E090E00E942933AB +:104FC0006E7F71F40E94551788E090E00E9436339E :104FD00060937104709372048093730490937404CB :104FE0000E94CC088091710480FF04C060E0869527 :104FF0000E94071681E08093E4028091580181119C @@ -1289,421 +1289,423 @@ :105080002A95E2F7817020A130E002C0359527957E :105090004A95E2F792E020FF90E0892B8093EC02A2 :1050A0008091580111E081278093EB02312F381B4A -:1050B0003093E5020E94012F40E060E080E00E9412 +:1050B0003093E5020E940E2F40E060E080E00E9405 :1050C0001E0D89EA92E090935E0380935D0360E099 :1050D0008AE00E94071681E00E940B1780EE90E0A4 :1050E00090935A0180935901109332030E943E0D10 -:1050F0008BE591E090934D0480934C04E0E46E2E98 -:1051000080916604FF24F39400E112E1853009F4F4 -:10511000ECC10E944223E82E81110E946208E5E45E -:10512000F3E0AFE4B3E010E000E0B02EDD90819159 -:105130008D1509F4FEC18D25C12CFF24F394982F01 -:105140009F2109F4F1C10E949C0E882399F0C8A602 -:10515000B9A6DF2081E009F480E08AA70E94461BFF -:105160008160782F9CA78BA748A559A56AA58CA517 -:105170000E94B022F801EB5BFC4F8081F826F082A0 -:105180008091EC02E82FEE0FEE0F90916601A92FAF -:10519000A295AF70B0E090962C9130E09F7002C065 -:1051A000359527959A95E2F72170332790916501FF -:1051B000A92FA295AF70B0E090964C9150E09F70EF -:1051C00002C0559547959A95E2F7CA0181709927D3 -:1051D00040FF02C082E090E0822B8E2B8093EC0295 -:1051E0001091EB028F70E82FF0E0E650FE4F8081C7 -:1051F0009091EA02890F8093EA02F12C84306CF0DE -:10520000E12FF0E0E851FD4F80818F5F808360E007 -:10521000812F0E947625FF24F3948091EA028D3F2E -:105220006CF4E12FF0E0E851FD4F808181508083E4 -:1052300061E0812F0E947625FF24F3948091EA0299 -:10524000082E000C990B64E070E00E94E13280931C -:10525000EA02F1100E943E0B80914904882351F12B -:1052600080911C0390911D030E94371BC29708F088 -:1052700077C120917604309177042115310509F02A -:1052800098C2809148048823A9F00E946208009186 -:105290004404109145042091460430914704601B5A -:1052A000710B820B930B6F3F7F4F8F4F9F4710F413 -:1052B0000E94950DE11001C0F1100E94B00D809187 -:1052C00042038A3008F0ADC38091400390914103BE -:1052D0000E94371B069708F4A4C304E610E025E0FB -:1052E00030E04BE353E064E084E10E944C30892BD2 -:1052F00009F068C31092420320913203222359F02F -:1053000080913D0390913E03982789279827909399 -:105310003E0380933D0386E0E4E2F3E0DE019196F4 -:1053200001900D928A95E1F786E0FE01B196DE01CB -:10533000119601900D928A95E1F786E0FE01319673 -:10534000A5E3B3E001900D928A95E1F780913F03C8 -:1053500087FD35C38091330390913403009709F0A2 -:1053600028C360913B0380913C0300913D03109161 -:105370003E03222309F4F0C241E00E94F80C209180 -:10538000300330913103281B390B309331032093C4 -:10539000300341E0602F812F0E94F80C20912E03F2 -:1053A00030912F03820F931F90932F0380932E032E -:1053B0006EE273E08AE393E00E94D90C60E373E04D -:1053C00089E393E00E94D90C1092370310923803BE -:1053D00086E0E5E3F3E0DE01119601900D928A95F7 -:1053E000E1F786E0FE013196A4E2B3E001900D9270 -:1053F0008A95E1F7309126032091270390912803A5 -:105400008091290370912003609121034091220330 -:1054100050912303F0912503E0911F03FE13D8C29E -:10542000332311F07313D4C2222311F02613D0C2F8 -:10543000882311F08513CCC2992319F081E0491318 -:10544000C8C280E0C6C286E992E068CD8091660459 -:10545000843009F43AC00E94950D40E060E080E09D -:105460000E941E0D80E00E9456168091E702811175 -:1054700009C0F092E7028091710481708093E60286 -:105480000E94E20F1092500488E190E00FB6F89469 -:10549000A895809360000FBE6092600083B7817F03 -:1054A000846083BF83B7816083BF7894889583B716 -:1054B0008E7F83BF0FB6F894A895809160008861B5 -:1054C00080936000109260000FBE80916504882375 -:1054D00061F00E944223EFE4F3E08191811170C4F6 -:1054E000A9E5B3E0AE17BF07C1F780916604853028 -:1054F00009F4ACCF109259040E94F70F0E94BF0E1E -:105500000E9456161092E7028091E602882349F025 -:105510008091710481608093710460E086950E949F -:1055200007160E943E0DF5CDC394FF0C27E0C21272 -:1055300006CE0F5F1F4F0A30110509F0F6CD8FEF31 -:105540008DA78EA71FA60E94461B8160782F99AB5E -:1055500088AB4DA55EA56FA589A90E94B02210CE8B -:105560000E94461B90931D0380931C0360E080E023 -:105570000E949A080E94BF0E8093F9020E949C0E1E -:10558000882331F14091F5025091F6026091F702C3 -:105590007091F8022FB7F8948091510490915204C1 -:1055A000A0915304B09154042FBF841B950BA60BFC -:1055B000B70B81339547A105B10540F00E94950DC9 -:1055C00080914904882309F45CCE53CE0E94B00D2B -:1055D0000E949C0E882309F4D3C061E080E00E9401 -:1055E0009A0860E08CE791E00E94881362E080E016 -:1055F0000E949A08809170040E94890C823009F4FC -:1056000099C008F08EC0882309F494C0813009F451 -:1056100097C065E080E00E949A0860E08AE991E026 -:105620000E94881366E080E00E949A086091F90267 -:10563000669561708FE991E00E94881367E080E0D1 -:105640000E949A086091F9026095617084EA91E085 -:105650000E94881368E080E00E949A086091F90235 -:1056600062FB662760F988EA91E00E948813409106 -:10567000F1025091F2026091F3027091F4022FB79F -:10568000F8948091510490915204A0915304B091E8 -:1056900054042FBF841B950BA60BB70B8D32914082 -:1056A000A105B10508F48CCF0E9462086093F10255 -:1056B0007093F2028093F3029093F4028091F002CF -:1056C000811104C080916701811142C06DE080E0CA -:1056D0000E949A0860E08DEA91E00E9488136AE0D7 -:1056E00080E00E949A0881E0809367018091EF0238 -:1056F00090E00196817099278093EF0221E030E0DD -:10570000281B390B40E6429FC001439F900D112496 -:105710002091EE02222351F1855C9B4F0E9492065C -:105720004FCF833089F0843009F073CF60E08EE88A -:1057300091E003C060E082E891E00E94881369CFA5 -:1057400060E088E891E0F9CF60E084E991E0F5CF8E -:105750006AE080E00E949A0860E08DEA91E00E9491 -:1057600088136BE080E00E949A08C0CF2091ED0280 -:10577000222319F085589C4FD1CF85549D4FCECF11 -:1057800064E080E00E949A0860E083EB91E00E9470 -:10579000881365E080E00E949A0860E089EB91E060 -:1057A0000E94881369E080E00E949A088BEF94E0E1 -:1057B000B5CF80911B0361E070E0811162CD082FAD -:1057C00010E02B01082E02C0440C551C0A94E2F78D -:1057D000A90144215521452B09F448C090911A0391 -:1057E00090FD46C08295880F807680936A0198016B -:1057F000369527953695279520936D01815E809388 -:105800006B0110926E0124E630E047E050E068E65C -:1058100071E088E70E94F82F892B09F032CDA801AA -:1058200065E0440F551F6A95E1F780911A0380FDEA -:105830002DC048585B4F04E610E020E230E060E401 -:1058400088E70E941F30892B09F01BCD0E94B00D04 -:10585000C20180959095409076045090770448223C -:10586000592250927704409276040BCD8F5FA7CFD8 -:10587000880F880F880F80936A0110926D01895FED -:1058800080936B0183E080936E01BDCFEAEFF2E07D -:1058900080E2DF011D928A95E9F7EEE0F2E0FBABD2 -:1058A000EAAB0AE012E037E0A32E99249394AAA968 -:1058B000BBA92D91BBABAAABF80121908F01240E9F -:1058C000352E311CC10188589B4F1C01E22FF0E09E -:1058D000E650FD4F30E020E07A2C721AB92C022EEF -:1058E00001C0BB0C0A94EAF7610190E0D6018D91EA -:1058F0006D018B21672D691B6770862E062E000CAB -:10590000770BB82F01C0BB0F8A94EAF78B2E7195E5 -:10591000619571096770772701C086956A95EAF7E6 -:10592000882A8081882A80829F5F9830F9F62F5FCD -:105930003F4F31962830310579F6E2E1F2E02AA9AD -:105940003BA9E217F30709F0B2CF04E610E020E22A -:1059500030E04AEF52E073CF45E00E94F80C20910E -:105960002C0330912D03820F931F90932D0380936E -:105970002C0345E0602F812F0E94F80C20912A0310 -:1059800030912B03281B390B30932B0320932A03D0 -:105990006AE273E087E393E00E94D90C6CE273E063 -:1059A00088E393E00E94D90C10923A0310923903D5 -:1059B0000FCD0197909334038093330309CD84E195 -:1059C00090E0F8CF809142038F5F8093420300CD37 -:1059D00081E080FF0FC0E0914C04F0914D043097BE -:1059E00049F082E0809324030480F581E02D84E275 -:1059F00093E0099510922603109227031092280332 -:105A00001092290386E0E4E2F3E0AEE1B3E0019016 -:105A10000D928A95E1F70E94461B90934103809373 -:105A200040030E94BF0E90914303891731F00E94FA -:105A3000BF0E809343030E94561680916604843003 -:105A400009F05ECB83E08093E9008091E80082FF5B -:105A500057CB8091E80090E085FF05C00E94F406D6 -:105A6000882399F091E08091E8008B778093E8009B -:105A7000992309F445CBE981E150E33108F076C080 -:105A8000F0E0ED54FB4C0C94F53200E210E0CE0156 -:105A900001967C018091E80085FD0AC08091E800B4 -:105AA0008B778093E8000E94F406882399F3DACF7D -:105AB0008091F100D7018D937D010150110951F7BB -:105AC000D1CF1A8289E08B8311C08A81823009F498 -:105AD0008FC1833091F1813009F048C00E94620883 -:105AE0000E94FB326B837C838D839E83809166044E -:105AF000843009F005CB1091E9001F709091EC0003 -:105B0000892F817090FD80E8182B82E08093E90056 -:105B10008091E80080FF0DC050E040E060E270E05E -:105B2000CE0101960E9425078091E8008E77809330 -:105B3000E8001F701093E900E3CADE011396EFE45A -:105B4000F3E081918D9323E0E935F207D1F7CECFD1 -:105B50008A81823059F46B817C818D819E810E9483 -:105B6000FB3286E290E00E943533C0CF8FEF89830D -:105B7000BDCF4C816B818A810E9430149827892780 -:105B800098279E838D83B2CFED80FE80FE24EF2484 -:105B9000FE248A810B813EE0039F800111249CE852 -:105BA000899F000D111D11248C8190E0880F991F91 -:105BB000080F191F6F2DC80187960E9435336E2D6F -:105BC000C8018896D0CF0E94B41390CF8A818138C3 -:105BD000C1F060F4803809F089CF20E04B816091FA -:105BE0007304809172040E94F01480CF8238E9F02F -:105BF000833809F07BCF20E0409174046C818B8165 -:105C0000F2CF60E08B810E9407168B81811103C067 -:105C10000E94E20F6BCF80917104816080937104C8 -:105C200060E086950E94071661CF8B818093750492 -:105C30005DCF8A81813899F030F4803809F056CFF1 -:105C40008091740440CF823891F0833809F04ECFB0 -:105C5000809172048B83809173048C8347CF8091F1 -:105C6000710480FF02C086952ECF80E02CCF8091FA -:105C7000750429CF6091710470917204809173044E -:105C8000909174040E94DE1431CF80E18A832ECF7C -:105C900081E08A838DE117CFCA80DB80DC24CD24AC -:105CA000DC248E010F5F1F4FEC80E00EF12EF11C03 -:105CB000C6018D519D4F0E151F0509F417CFADE19B -:105CC000CA16A1E0DA0650F40E942133F801848359 -:105CD000BFEFCB1ADB0A0F5F1F4FEACFD801149634 -:105CE0001C92F6CF0A811B81102701271027FE0185 -:105CF00031966F01EC80E00EF12EF11CC8018D5140 -:105D00009D4FE016F10609F4F1CE0D31F1E01F07C9 -:105D100028F4D60114966C910E943533BFEFCB1A4C -:105D2000DB0A0F5F1F4FEACF0E94A413DFCE85E08E -:105D3000ADCFCA80DB80DC24CD24DC248E010F5F54 -:105D40001F4FEC80E00EF12EF11CC6018796E01685 -:105D5000F10609F4CBCEECEBCE16E2E0DE0658F409 -:105D60000E942133D80114968C93FFEFCF1ADF0ADB -:105D70000F5F1F4FEACFF8011482F7CF0A811B8112 -:105D80001027012710279E012F5F3F4F6901EC80EC -:105D9000E00EF12EF11CC8018796E016F10609F419 -:105DA000A5CE0C3B32E0130728F4D60114966C9173 -:105DB0000E943533BFEFCB1ADB0A0F5F1F4FEBCFCB -:105DC00009BD19BD09B400FEFDCF8091D8008F7DBB -:105DD0008093D8008091E00082608093E000809101 -:105DE000E00081FDFCCF109259040E94F70F7DCB9B -:105DF00086E290E00E9421331B821C821D828E83EA -:105E000075CE1092B9008CE08093B80008959F92EF -:105E1000AF92BF92CF92DF92EF92FF920F931F93B8 -:105E2000CF93DF93B82EEB010E94461B6C01EE244A -:105E3000E394F12CC431D10560F025E0E22EF12C81 -:105E4000CF3FDC0731F0CE0164E170E00E94C13247 -:105E50007B0184EAA82E94E8992E1092BC00A092AF -:105E6000BC000E94461B8C018091BC0087FF0DC0C6 -:105E70008091B900887F883039F18091B900887F9E -:105E8000803111F10FEF1FEF09C00E94461B801BEC -:105E9000910B8E159F0540F30EEF1FEFCF3FDC07F0 -:105EA000E1F2C6010E94371B8C179D07B0F2C801B2 -:105EB000DF91CF911F910F91FF90EF90DF90CF90E6 -:105EC000BF90AF909F900895B092BB009092BC009D -:105ED0000E94461B8C018091BC0087FF0AC0809104 -:105EE000B900887F883111F0803461F610E000E05D -:105EF000DECF0E94461B801B910B8E159F0558F329 -:105F0000CBCF0F931F93CF93DF93EB018093BB0015 -:105F100084E88093BC000E94461B8C018091BC00E9 -:105F200087FF11C02091B900287F81E090E02832DE -:105F300011F490E080E0919581959109DF91CF91E6 -:105F40001F910F910895CF3FDC0741F30E94461B3C -:105F5000801B910B8C179D0708F38EEF9FEFEECF00 -:105F60000F931F93CF93DF93EC0184EC8093BC00DD -:105F70000E94461B8C018091BC0087FF08C0809165 -:105F8000BB0090E0DF91CF911F910F910895CF3F1B -:105F9000DC0789F30E94461B801B910B8C179D0721 -:105FA00050F38EEF9FEFEECF0F931F93CF93DF93BE -:105FB000EC0184E88093BC000E94461B8C01809118 -:105FC000BC0087FF08C08091BB0090E0DF91CF91BB -:105FD0001F910F910895CF3FDC0789F30E94461B64 -:105FE000801B910B8C179D0750F38EEF9FEFEECF28 -:105FF000CF92DF92EF92FF920F931F93CF93DF9395 -:106000006B018A017901B9010E94072FE6010C0D8D -:106010001D1DC017D10761F424E92093BC00DF9156 -:10602000CF911F910F91FF90EF90DF90CF90089547 -:1060300097FDF2CFB70189910E94812FEACFCF92CD -:10604000DF92EF92FF920F931F93CF93DF93C62FB0 -:106050006A017901B8010E94072F97FD0CC0B801B1 -:106060008C2F0E94812FE601EC0CFD1CCE15DF0564 -:1060700011F097FF0CC024E92093BC00DF91CF9171 -:106080001F910F91FF90EF90DF90CF900895B8018E -:1060900089910E94812FEACFCF92DF92EF92FF92F7 -:1060A0000F931F93CF93DF93F82EE62EEA01690139 -:1060B000B8010E94072F97FD15C0B8018E2D0E94D0 -:1060C000812F97FD0FC0B8018F2D81600E94072F8F -:1060D000F12CE12C21E0C21AD108EC14FD0400F5EA -:1060E00097FF11C024E92093BC001816190614F478 -:1060F00090E080E0DF91CF911F910F91FF90EF90A2 -:10610000DF90CF900895C8010E94B02F97FD04C082 -:10611000FE01EE0DFF1D80832FEFE21AF20ADDCFA4 -:1061200097FDE0CFC8010E94D42F97FDDBCFCC0DA7 -:10613000DD1D8883D7CF84E98093BC0008958EE16C -:106140004A9B02C08150E1F74A9BFECF08955A98BE -:1061500080E28A95F1F75A9A0895FC013BE03A955E -:10616000F1F798E020E080E031E040E14A95F1F776 -:10617000880F4A9B02C08160232742E04A95F1F7CD -:10618000000040E14A95F1F7915079F790E19A9536 -:10619000F1F799B132E03A95F1F7000040E14A9504 -:1061A000F1F792FB992790F992272081920F908323 -:1061B0000895EF92FF920F931F93CF93DF930F9267 -:1061C000CDB7DEB719828C017C01E60EF11C0E15ED -:1061D0001F0561F481E09981911180E00F90DF91BA -:1061E000CF911F910F91FF90EF9008950E949F30E3 -:1061F000CE0101960E94AD30F80181938F01E7CF67 -:10620000529A5A9A089552985A9AEA9AE9E6F0E010 -:1062100080818F7C808308956150770B91E001C06D -:10622000990F6A95EAF720E031E0911108C0222326 -:1062300091F05A9A80E28A95F1F75A980895492F79 -:10624000482339F05A9A232740E24A95F1F7969568 -:10625000ECCF5A98F9CF5A98EDCFFF920F931F9336 -:10626000CF93DF93EC018C01060F111DC017D107EE -:1062700031F4DF91CF911F910F91FF900895F99024 -:106280000E94A73068E08F2D0E940C31EFCF1F9243 -:106290000F920FB60F921124EF92FF920F931F935C -:1062A0002F933F934F935F936F937F938F939F931E -:1062B000AF93BF93EF93FF93CF93DF930F92CDB73D -:1062C000DEB719820E949F30CE0101960E94AD3048 -:1062D000A82FA695A695A695282F229525709A2FCA -:1062E0009570290F922F937026952695920F9827D7 -:1062F00097708981982B09F075C0A83008F072C09A -:1063000080E18A95F1F75A9A529AB2E0BA95F1F77C -:1063100000C05A98EA2EF12CEAE0AE9FD001112479 -:10632000AF5FBE4F1896ED91FC9119973097B1F081 -:106330006091F8017091F90116962D913C91179793 -:10634000260F371F13968D919C911497680F791F14 -:1063500015964C91159712968C9109958AE08E9D11 -:10636000F0018F9DF00D1124EF5FFE4F65816623D4 -:1063700051F02091F8013091F90186819781820FC7 -:10638000931F0E942D310E94A730F0E1FA95F1F79A -:106390005A9852985A9A80E18A95F1F78AE08E9D30 -:1063A00080018F9D100D11240F5F1E4FD801129692 -:1063B0006C911297662371F12091F8013091F901E7 -:1063C00013968D919C91820F931F0E94D930D80112 -:1063D000ED91FC91882311F088E001C082E0808378 -:1063E0000E949F300F90DF91CF91FF91EF91BF916D -:1063F000AF919F918F917F916F915F914F913F915D -:106400002F911F910F91FF90EF900F900FBE0F9063 -:106410001F901895ED91FC91DFCF0F931F93CF93B1 -:10642000DF93EC0108970CF0A9C08AE08C9FF00183 -:106430008D9FF00D1124EF5FFE4F80819181892B9C -:1064400009F49CC0F894529A5A9885E08A95F1F71D -:1064500000008C2F869585709C2F9570890F982F42 -:10646000937086958695890F8E0193E0000F111F1A -:106470009A95E1F7082B0E94A73000C068E0802FB2 -:106480000E940C31A0E1AA95F1F752985A9A4A9BC2 -:1064900027C087E090E04A9925C08AE08C9F800160 -:1064A0008D9F100D11240F5F1E4FF801658166232B -:1064B000A1F12091F8013091F90186819781820F35 -:1064C000931F0E94D930811128C0529A5A9AD8013C -:1064D000ED91FC9182E08083789482E090E016C098 -:1064E00000C0D5CF0197B9F4529A5A9A8AE08C9F8E -:1064F000F0018D9FF00D1124EF5FFE4F0190F081B0 -:10650000E02D81E08083789481E090E0DF91CF916D -:106510001F910F91089500C0BECF0E949F30B0E23E -:10652000BA95F1F75A98529AE0E1EA95F1F78AE0C4 -:106530008C9FF0018D9FF00D1124EF5FFE4F628163 -:10654000662351F02091F8013091F9018381948103 -:10655000820F931F0E942D310E94A7308AE08C9FEA -:10656000F0018D9FF00D1124EF5FFE4F0190F0813F -:10657000E02D1082789490E080E0C8CF84E090E035 -:10658000C5CFAA1BBB1B51E107C0AA1FBB1FA61783 -:10659000B70710F0A61BB70B881F991F5A95A9F7CC -:1065A00080959095BC01CD010895991B79E004C0B8 -:1065B000991F961708F0961B881F7A95C9F7809542 -:1065C000089597FB072E16F4009407D077FD09D0A5 -:1065D0000E94C13207FC05D03EF4909581959F4FF3 -:1065E0000895709561957F4F0895EE0FFF1F0590F8 -:1065F000F491E02D09946927962769277827872742 -:1066000078270895FB01DC0102C005900D924150EE -:106610005040D8F70895FB01DC0104C08D91019032 -:10662000801921F441505040C8F7881B990B0895F8 -:10663000FB01DC0102C001900D9241505040D8F79F -:106640000895F999FECF92BD81BDF89A992780B53A -:106650000895A6E1B0E044E050E00C945B33A8E17B -:10666000B0E042E050E00C945B33262FF999FECF66 -:1066700092BD81BDF89A019700B4021639F01FBA95 -:1066800020BD0FB6F894FA9AF99A0FBE08950396B2 -:10669000272F0E9436330E943533252F0E94363330 -:1066A000242F0C9436330196272F0E9436330C94F6 -:1066B0003533DC01CB01FC01F999FECF06C0F2BDF8 -:1066C000E1BDF89A319600B40D9241505040B8F7B0 -:1066D00008950E94AB3308F481E00895E89409C05E -:1066E00097FB3EF490958095709561957F4F8F4F05 -:1066F0009F4F9923A9F0F92F96E9BB279395F6951B -:10670000879577956795B795F111F8CFFAF4BB0F98 -:1067100011F460FF1BC06F5F7F4F8F4F9F4F16C0FC -:10672000882311F096E911C0772321F09EE8872F86 -:10673000762F05C0662371F096E8862F70E060E042 -:106740002AF09A95660F771F881FDAF7880F9695BB -:10675000879597F90895990F0008550FAA0BE0E85F -:10676000FEEF16161706E807F907C0F01216130613 -:10677000E407F50798F0621B730B840B950B39F453 -:106780000A2661F0232B242B252B21F408950A26B9 -:1067900009F4A140A6958FEF811D811D08950E94E7 -:1067A000E2330C9453340E94453438F00E944C3448 -:1067B00020F0952311F00C943C340C9442341124B5 -:1067C0000C9487340E94643470F3959FC1F3950F45 -:1067D00050E0551F629FF001729FBB27F00DB11D65 -:1067E000639FAA27F00DB11DAA1F649F6627B00DF5 -:1067F000A11D661F829F2227B00DA11D621F739FDE -:10680000B00DA11D621F839FA00D611D221F749FEB -:106810003327A00D611D231F849F600D211D822F32 -:10682000762F6A2F11249F5750409AF0F1F0882359 -:106830004AF0EE0FFF1FBB1F661F771F881F915086 -:106840005040A9F79E3F510580F00C943C340C94C5 -:1068500087345F3FE4F3983ED4F386957795679548 -:10686000B795F795E7959F5FC1F7FE2B880F911DB0 -:106870009695879597F9089597F99F6780E870E056 -:1068800060E008959FEF80EC089500240A941616A6 -:10689000170618060906089500240A94121613060E -:1068A000140605060895092E0394000C11F488239C -:1068B00052F0BB0F40F4BF2B11F460FF04C06F5FB8 -:1068C0007F4F8F4F9F4F089557FD9058440F551F8E -:1068D00059F05F3F71F04795880F97FB991F61F062 -:1068E0009F3F79F087950895121613061406551FD9 -:1068F000F2CF4695F1DF08C0161617061806991F45 -:10690000F1CF86957105610508940895E894BB2739 -:1069100066277727CB0197F90895F894FFCFE71002 -:106920000F1162110F11621142117A116211771267 -:106930008412B014B014B914B914BB14B914B91436 -:10694000B914B014B014C014B914B914C014131F7E -:10695000131F6C1F6C1F9E1F461F461F461FB81F2C -:10696000292039203920612D652DA82DB92DC42D60 -:10697000E32DE62D192E3A2EB62DB62D452E482E96 -:0C6980004C2E722E942E972E992EBE2EB7 -:10698C000138020000000100000000380200000085 -:10699C00050100000038020000000106000000386C -:1069AC00020000000107000000380204080000008B -:1069BC000000003802090C00000000000038020141 -:1069CC001500000000000036323331F7F667669789 -:1069DC00C6343500000000000180005F082B0E0A51 -:1069EC000E060E020EF4F5010021007F22000300BA -:1069FC004A004A4A01F6F731333236674C41594561 -:106A0C00520042617365200047616D652000526140 -:106A1C00697365004C6F776572004C4F434B0043B4 -:106A2C00617073004E756D005363726C00202020F2 -:106A3C00202000534F4C415200544D505354008170 -:106A4C008283E200E900EA00B500B600B700CD0091 -:106A5C008301CC008A0192019401210223022402B9 -:106A6C002502260227022A02B300B4006F00700030 -:106A7C000603060806010606AF0200FF010001002E -:106A8C0000FFFF0000010001FF00000810181810A3 -:106A9C00080000010202020202020202020240226B -:0E6AAC007B99017701FC00000C190C390C00DD +:1050F0008BE591E090934D0480934C043E018DE349 +:10510000680E711C80916604FF24F39400E112E1A3 +:10511000853009F4F2C10E944223E82E81110E94D9 +:105120006208E5E4F3E0AFE4B3E010E000E0B02EA5 +:10513000DD9081918D1509F404C28D25C12CFF24C9 +:10514000F394982F9F2109F4F7C10E949C0E8823A5 +:1051500099F0CEA6BFA6DF2081E009F480E088ABFD +:105160000E94461B8160782F9AAB89AB4EA55FA544 +:1051700068A98AA90E94B022F801EB5BFC4F8081EC +:10518000F826F0828091EC02E82FEE0FEE0F90915E +:105190006601A92FA295AF70B0E090962C9130E0F7 +:1051A0009F7002C0359527959A95E2F721703327B5 +:1051B00090916501A92FA295AF70B0E090964C91A7 +:1051C00050E09F7002C0559547959A95E2F7CA0145 +:1051D0008170992740FF02C082E090E0822B8E2BE5 +:1051E0008093EC021091EB028F70E82FF0E0E65014 +:1051F000FE4F80819091EA02890F8093EA02F12CA0 +:1052000084306CF0E12FF0E0E851FD4F80818F5F3A +:10521000808360E0812F0E947625FF24F3948091A3 +:10522000EA028D3F6CF4E12FF0E0E851FD4F808100 +:105230008150808361E0812F0E947625FF24F394C2 +:105240008091EA02082E000C990B64E070E00E9445 +:10525000EE328093EA02F1100E943E0B80914904E5 +:10526000882351F180911C0390911D030E94371BEC +:10527000C29708F07DC12091760430917704211502 +:10528000310509F0A0C2809148048823A9F00E944A +:105290006208009144041091450420914604309125 +:1052A0004704601B710B820B930B6F3F7F4F8F4F37 +:1052B0009F4710F40E94950DE11001C0F1100E946B +:1052C000B00D809142038A3008F0B7C3809140034B +:1052D000909141030E94371B069708F4AEC304E681 +:1052E00010E025E030E04BE353E064E084E10E940D +:1052F0005930892B09F072C3109242032091320376 +:10530000222359F080913D0390913E0398278927ED +:10531000982790933E0380933D0386E0E4E2F3E018 +:10532000DE01919601900D928A95E1F786E0FE01EB +:10533000B196DE01119601900D928A95E1F786E013 +:10534000FE013196A5E3B3E001900D928A95E1F755 +:1053500090913F038091360397FD3AC38E7F8093EF +:1053600036038091330390913403009709F02AC3E8 +:1053700060913B0380913C0300913D0310913E03FB +:10538000222309F4F2C241E00E94F80C209130037C +:1053900030913103281B390B3093310320933003B4 +:1053A00041E0602F812F0E94F80C20912E03309154 +:1053B0002F03820F931F90932F0380932E036EE28F +:1053C00073E08AE393E00E94D90C60E373E089E321 +:1053D00093E00E94D90C109237031092380386E0B4 +:1053E000E5E3F3E0DE01119601900D928A95E1F775 +:1053F00086E0FE013196A4E2B3E001900D928A9519 +:10540000E1F73091260320912703909128038091A2 +:105410002903709120036091210340912203509150 +:105420002303F0912503E0911F03FE13DDC2332314 +:1054300011F07313D9C2222311F02613D5C2882389 +:1054400011F08513D1C2992319F081E04913CDC21F +:1054500080E0CBC286E992E061CD80916604843021 +:1054600009F43BC00E94950D40E060E080E00E949E +:105470001E0D80E00E9456168091E702811109C03E +:10548000F092E7028091710481708093E6020E949D +:10549000E20F10925004A8E1B0E0E0E40FB6F894F7 +:1054A000A895A09360000FBEE093600083B7817F52 +:1054B000846083BF83B7816083BF7894889583B706 +:1054C0008E7F83BF0FB6F894A895809160008861A5 +:1054D00080936000109260000FBE80916504882365 +:1054E00061F00E944223EFE4F3E08191811175C4E1 +:1054F00029E533E02E173F07C1F780916604853018 +:1055000009F4ABCF109259040E94F70F0E94BF0E0E +:105510000E9456161092E7028091E602882349F015 +:105520008091710481608093710460E086950E948F +:1055300007160E943E0DEFCDC394FF0C37E0C31257 +:1055400000CE0F5F1F4F0A30110509F0F0CD8FEF2D +:105550008BAB8CAB1DAA0E94461B8160782F9FAB42 +:105560008EAB4BA95CA96DA98FA90E94B0220ACE6F +:105570000E94461B90931D0380931C0360E080E013 +:105580000E949A080E94BF0E8093F9020E949C0E0E +:10559000882331F14091F5025091F6026091F702B3 +:1055A0007091F8022FB7F8948091510490915204B1 +:1055B000A0915304B09154042FBF841B950BA60BEC +:1055C000B70B81339547A105B10540F00E94950DB9 +:1055D00080914904882309F456CE4DCE0E94B00D27 +:1055E0000E949C0E882309F4D5C061E080E00E94EF +:1055F0009A0860E08CE791E00E94881362E080E006 +:105600000E949A08809170040E94890C823009F4EB +:105610009BC008F090C0882309F496C0813009F43B +:1056200099C065E080E00E949A0860E08AE991E014 +:105630000E94881366E080E00E949A086091F90257 +:10564000669561708FE991E00E94881367E080E0C1 +:105650000E949A086091F9026095617084EA91E075 +:105660000E94881368E080E00E949A086091F90225 +:1056700062FB662760F988EA91E00E9488137DA6A4 +:105680006CA64091F1025091F2026091F302709188 +:10569000F4022FB7F8948091510490915204A09194 +:1056A0005304B09154042FBF841B950BA60BB70B6A +:1056B0008D329140A105B10508F48ACF0E9462089D +:1056C0006093F1027093F2028093F3029093F402DC +:1056D0008091F002811104C080916701811142C064 +:1056E0006DE080E00E949A0860E08DEA91E00E94FF +:1056F00088136AE080E00E949A0881E08093670145 +:105700008091EF0290E00196817099278093EF02DB +:1057100021E030E0281B390B40E6429FC001439F47 +:10572000900D11242091EE02222351F1855C9B4FB4 +:105730000E9492064DCF833089F0843009F071CFFA +:1057400060E08EE891E003C060E082E891E00E94B2 +:10575000881367CF60E088E891E0F9CF60E084E9E2 +:1057600091E0F5CF6AE080E00E949A0860E08DEA5F +:1057700091E00E9488136BE080E00E949A08C0CFFD +:105780002091ED02222319F085589C4FD1CF8554EA +:105790009D4FCECF64E080E00E949A0860E083EBEA +:1057A00091E00E94881365E080E00E949A0860E022 +:1057B00089EB91E00E94881369E080E00E949A08DA +:1057C0008BEF94E0B5CF80911B0361E070E0811115 +:1057D0005ACD082F10E02B01082E02C0440C551C96 +:1057E0000A94E2F7A90144215521452B09F448C048 +:1057F00090911A0390FD46C08295880F8076809321 +:105800006A019801369527953695279520936D0165 +:10581000815E80936B0110926E0124E630E047E0D8 +:1058200050E068E671E088E70E940530892B09F0B6 +:105830002ACDA80175E0440F551F7A95E1F78091B4 +:105840001A0380FD2DC048585B4F04E610E020E2AB +:1058500030E060E488E70E942C30892B09F013CDFA +:105860000E94B00DC20180959095409076045090B2 +:10587000770448225922509277044092760403CD4F +:105880008F5FA7CF880F880F880F80936A011092CF +:105890006D01895F80936B0183E080936E01BDCFC2 +:1058A000EAEFF2E080E2DF011D928A95E9F7EEE08F +:1058B000F2E0F9AFE8AF0AE012E099249394A8ADC2 +:1058C000B9AD2D91B9AFA8AFF80121908F01240E89 +:1058D000352E311CC10188589B4F1C01E22FF0E08E +:1058E000E650FD4F30E020E067E0A62EA21AB92C6A +:1058F000022E01C0BB0C0A94EAF7610190E0D601C8 +:105900008D916D018B216A2D691B6770862E062E85 +:10591000000C770BB82F01C0BB0F8A94EAF78B2ECF +:105920007195619571096770772701C086956A95B1 +:10593000EAF7882A8081882A80829F5F9830F9F66A +:105940002F5F3F4F31962830310571F6E2E1F2E0EA +:1059500028AD39ADE217F30709F0B1CF04E610E046 +:1059600020E230E04AEF52E074CF45E00E94F80CAC +:1059700020912C0330912D03820F931F90932D03C0 +:1059800080932C0345E0602F812F0E94F80C20911A +:105990002A0330912B03281B390B30932B032093C0 +:1059A0002A036AE273E087E393E00E94D90C6CE279 +:1059B00073E088E393E00E94D90C10923A031092AE +:1059C00039030DCD0197909334038093330307CDB2 +:1059D00081608093360384E190E0F5CF80914203AB +:1059E0008F5F80934203FBCC81E080FF0FC0E0918A +:1059F0004C04F0914D04309749F082E080932403E9 +:105A00000480F581E02D84E293E00995109226034D +:105A100010922703109228031092290386E0E4E2F3 +:105A2000F3E0AEE1B3E001900D928A95E1F70E94B8 +:105A3000461B90934103809340030E94BF0E9091B8 +:105A40004303891731F00E94BF0E809343030E94E5 +:105A5000561680916604843009F054CB83E080931D +:105A6000E9008091E80082FF4DCB8091E80090E052 +:105A700085FF0BC00E94F40630E2E32EF12C8E016C +:105A80000F5F1F4F8823E1F091E08091E8008B7752 +:105A90008093E800992309F435CBE981E150E331A3 +:105AA00008F071C0F0E0E054FB4C0C94023380919C +:105AB000F100D8018D938D01B1E0EB1AF10821F3CB +:105AC0008091E80085FDF3CF8091E8008B7780938B +:105AD000E8000E94F406882399F3D6CF1A8289E061 +:105AE0008B8311C08A81823009F48FC1833091F198 +:105AF000813009F048C00E9462080E9408336B831D +:105B00007C838D839E8380916604843009F0FACA79 +:105B10001091E9001F709091EC00892F817090FD29 +:105B200080E8182B82E08093E9008091E80080FFF4 +:105B30000DC050E040E060E270E0CE0101960E94AE +:105B400025078091E8008E778093E8001F701093FE +:105B5000E900D8CADE011396EFE4F3E081918D935A +:105B600023E0E935F207D1F7CECF8A81823059F4AC +:105B70006B817C818D819E810E94083386E290E05A +:105B80000E944233C0CF8FEF8983BDCF4C816B81A0 +:105B90008A810E9430149827892798279E838D83B5 +:105BA000B2CF0D811E811027012710278A81EB803B +:105BB0003EE0E39E700111249CE8899FE00CF11CFB +:105BC00011248C8190E0880F991FE80EF91E612F37 +:105BD000C70187960E944233602FC7018896D0CFB5 +:105BE0000E94B41390CF8A818138C1F060F480386C +:105BF00009F089CF20E04B81609173048091720499 +:105C00000E94F01480CF8238E9F0833809F07BCF0E +:105C100020E0409174046C818B81F2CF60E08B8135 +:105C20000E9407168B81811103C00E94E20F6BCF87 +:105C30008091710481608093710460E086950E9478 +:105C4000071661CF8B81809375045DCF8A8181387F +:105C500099F030F4803809F056CF8091740440CF29 +:105C6000823891F0833809F04ECF809172048B8393 +:105C7000809173048C8347CF8091710480FF02C0B0 +:105C800086952ECF80E02CCF8091750429CF60912E +:105C900071047091720480917304909174040E9455 +:105CA000DE1431CF80E18A832ECF81E08A838DE1BB +:105CB00017CFCA80DB80DC24CD24DC248E010F5F6B +:105CC0001F4FEC80E00EF12EF11CC6018D519D4F4F +:105CD0000E151F0509F417CFADE1CA16A1E0DA06CB +:105CE00050F40E942E33F8018483BFEFCB1ADB0AF5 +:105CF0000F5F1F4FEACFD80114961C92F6CF0A818E +:105D00001B81102701271027FE0131966F01EC80BF +:105D1000E00EF12EF11CC8018D519D4FE016F106E9 +:105D200009F4F1CE0D31F1E01F0728F4D6011496E5 +:105D30006C910E944233BFEFCB1ADB0A0F5F1F4FFB +:105D4000EACF0E94A413DFCE85E0ADCFCA80DB800E +:105D5000DC24CD24DC248E010F5F1F4FEC80E00E8D +:105D6000F12EF11CC6018796E016F10609F4CBCEA0 +:105D7000ECEBCE16E2E0DE0658F40E942E33D8019A +:105D800014968C93FFEFCF1ADF0A0F5F1F4FEACFF5 +:105D9000F8011482F7CF0A811B81102701271027F1 +:105DA0009E012F5F3F4F6901EC80E00EF12EF11C48 +:105DB000C8018796E016F10609F4A5CE0C3B32E047 +:105DC000130728F4D60114966C910E944233BFEF5A +:105DD000CB1ADB0A0F5F1F4FEBCF09BD19BD09B40A +:105DE00000FEFDCF8091D8008F7D8093D8008091F8 +:105DF000E00082608093E0008091E00081FDFCCFB4 +:105E0000109259040E94F70F78CB86E290E00E942E +:105E10002E331B821C821D828E8375CE1092B90098 +:105E20008CE08093B80008959F92AF92BF92CF927A +:105E3000DF92EF92FF920F931F93CF93DF93B82ED1 +:105E4000EB010E94461B6C01EE24E394F12CC4315B +:105E5000D10560F025E0E22EF12CCF3FDC0731F0D8 +:105E6000CE0164E170E00E94CE327B0184EAA82E6C +:105E700094E8992E1092BC00A092BC000E94461B90 +:105E80008C018091BC0087FF0DC08091B900887F94 +:105E9000883039F18091B900887F803111F10FEF9E +:105EA0001FEF09C00E94461B801B910B8E159F059A +:105EB00040F30EEF1FEFCF3FDC07E1F2C6010E9477 +:105EC000371B8C179D07B0F2C801DF91CF911F914E +:105ED0000F91FF90EF90DF90CF90BF90AF909F9089 +:105EE0000895B092BB009092BC000E94461B8C01AA +:105EF0008091BC0087FF0AC08091B900887F8831FB +:105F000011F0803461F610E000E0DECF0E94461B05 +:105F1000801B910B8E159F0558F3CBCF0F931F93CA +:105F2000CF93DF93EB018093BB0084E88093BC00A8 +:105F30000E94461B8C018091BC0087FF11C02091FC +:105F4000B900287F81E090E0283211F490E080E0F1 +:105F5000919581959109DF91CF911F910F910895AE +:105F6000CF3FDC0741F30E94461B801B910B8C172F +:105F70009D0708F38EEF9FEFEECF0F931F93CF9304 +:105F8000DF93EC0184EC8093BC000E94461B8C01E3 +:105F90008091BC0087FF08C08091BB0090E0DF913A +:105FA000CF911F910F910895CF3FDC0789F30E9495 +:105FB000461B801B910B8C179D0750F38EEF9FEFB4 +:105FC000EECF0F931F93CF93DF93EC0184E8809380 +:105FD000BC000E94461B8C018091BC0087FF08C05A +:105FE0008091BB0090E0DF91CF911F910F910895B8 +:105FF000CF3FDC0789F30E94461B801B910B8C1757 +:106000009D0750F38EEF9FEFEECFCF92DF92EF928E +:10601000FF920F931F93CF93DF936B018A01790156 +:10602000B9010E94142FE6010C0D1D1DC017D107E8 +:1060300061F424E92093BC00DF91CF911F910F916F +:10604000FF90EF90DF90CF90089597FDF2CFB701CA +:1060500089910E948E2FEACFCF92DF92EF92FF922A +:106060000F931F93CF93DF93C62F6A017901B80175 +:106070000E94142F97FD0CC0B8018C2F0E948E2F08 +:10608000E601EC0CFD1CCE15DF0511F097FF0CC0EE +:1060900024E92093BC00DF91CF911F910F91FF90D5 +:1060A000EF90DF90CF900895B80189910E948E2FD4 +:1060B000EACFCF92DF92EF92FF920F931F93CF938D +:1060C000DF93F82EE62EEA016901B8010E94142F31 +:1060D00097FD15C0B8018E2D0E948E2F97FD0FC021 +:1060E000B8018F2D81600E94142FF12CE12C21E04A +:1060F000C21AD108EC14FD0400F597FF11C024E981 +:106100002093BC001816190614F490E080E0DF918B +:10611000CF911F910F91FF90EF90DF90CF90089556 +:10612000C8010E94BD2F97FD04C0FE01EE0DFF1DAA +:1061300080832FEFE21AF20ADDCF97FDE0CFC8018E +:106140000E94E12F97FDDBCFCC0DDD1D8883D7CFDB +:1061500084E98093BC0008958EE14A9B02C081507F +:10616000E1F74A9BFECF08955A9880E28A95F1F7AD +:106170005A9A0895FC013BE03A95F1F798E020E047 +:1061800080E031E040E14A95F1F7880F4A9B02C078 +:106190008160232742E04A95F1F7000040E14A95EB +:1061A000F1F7915079F790E19A95F1F799B132E0D2 +:1061B0003A95F1F7000040E14A95F1F792FB9927F3 +:1061C00090F992272081920F90830895EF92FF9289 +:1061D0000F931F93CF93DF930F92CDB7DEB7198242 +:1061E0008C017C01E60EF11C0E151F0561F481E0A7 +:1061F0009981911180E00F90DF91CF911F910F91C4 +:10620000FF90EF9008950E94AC30CE0101960E945D +:10621000BA30F80181938F01E7CF529A5A9A0895C4 +:1062200052985A9AEA9AE9E6F0E080818F7C80835E +:1062300008956150770B91E001C0990F6A95EAF7D4 +:1062400020E031E0911108C0222391F05A9A80E2B7 +:106250008A95F1F75A980895492F482339F05A9AA8 +:10626000232740E24A95F1F79695ECCF5A98F9CF5B +:106270005A98EDCFFF920F931F93CF93DF93EC01CA +:106280008C01060F111DC017D10731F4DF91CF919A +:106290001F910F91FF900895F9900E94B43068E02B +:1062A0008F2D0E941931EFCF1F920F920FB60F92D0 +:1062B0001124EF92FF920F931F932F933F934F93CD +:1062C0005F936F937F938F939F93AF93BF93EF935E +:1062D000FF93CF93DF930F92CDB7DEB719820E9461 +:1062E000AC30CE0101960E94BA30A82FA695A69593 +:1062F000A695282F229525709A2F9570290F922FF9 +:10630000937026952695920F982797708981982BE0 +:1063100009F075C0A83008F072C080E18A95F1F7E5 +:106320005A9A529AB2E0BA95F1F700C05A98EA2EFA +:10633000F12CEAE0AE9FD0011124AF5FBE4F18965A +:10634000ED91FC9119973097B1F06091F80170913F +:10635000F90116962D913C911797260F371F13962A +:106360008D919C911497680F791F15964C911597F4 +:1063700012968C9109958AE08E9DF0018F9DF00D0B +:106380001124EF5FFE4F6581662351F02091F801E3 +:106390003091F90186819781820F931F0E943A31D3 +:1063A0000E94B430F0E1FA95F1F75A9852985A9A4F +:1063B00080E18A95F1F78AE08E9D80018F9D100D16 +:1063C00011240F5F1E4FD80112966C91129766230D +:1063D00071F12091F8013091F90113968D919C9102 +:1063E000820F931F0E94E630D801ED91FC91882323 +:1063F00011F088E001C082E080830E94AC300F90F1 +:10640000DF91CF91FF91EF91BF91AF919F918F91CC +:106410007F916F915F914F913F912F911F910F91BC +:10642000FF90EF900F900FBE0F901F901895ED9179 +:10643000FC91DFCF0F931F93CF93DF93EC0108976D +:106440000CF0A9C08AE08C9FF0018D9FF00D112403 +:10645000EF5FFE4F80819181892B09F49CC0F894F5 +:10646000529A5A9885E08A95F1F700008C2F86950C +:1064700085709C2F9570890F982F937086958695BF +:10648000890F8E0193E0000F111F9A95E1F7082BF9 +:106490000E94B43000C068E0802F0E941931A0E152 +:1064A000AA95F1F752985A9A4A9B27C087E090E044 +:1064B0004A9925C08AE08C9F80018D9F100D112480 +:1064C0000F5F1E4FF80165816623A1F12091F8014D +:1064D0003091F90186819781820F931F0E94E630E7 +:1064E000811128C0529A5A9AD801ED91FC9182E00C +:1064F0008083789482E090E016C000C0D5CF0197E9 +:10650000B9F4529A5A9A8AE08C9FF0018D9FF00D4F +:106510001124EF5FFE4F0190F081E02D81E0808338 +:10652000789481E090E0DF91CF911F910F910895D1 +:1065300000C0BECF0E94AC30B0E2BA95F1F75A98D5 +:10654000529AE0E1EA95F1F78AE08C9FF0018D9F85 +:10655000F00D1124EF5FFE4F6281662351F0209110 +:10656000F8013091F90183819481820F931F0E9479 +:106570003A310E94B4308AE08C9FF0018D9FF00D7B +:106580001124EF5FFE4F0190F081E02D108278948E +:1065900090E080E0C8CF84E090E0C5CFAA1BBB1B91 +:1065A00051E107C0AA1FBB1FA617B70710F0A61B13 +:1065B000B70B881F991F5A95A9F780959095BC0134 +:1065C000CD010895991B79E004C0991F961708F032 +:1065D000961B881F7A95C9F78095089597FB072E1B +:1065E00016F4009407D077FD09D00E94CE3207FC44 +:1065F00005D03EF4909581959F4F089570956195D3 +:106600007F4F0895EE0FFF1F0590F491E02D099440 +:106610006927962769277827872778270895FB0118 +:10662000DC0102C005900D9241505040D8F708950A +:10663000FB01DC0104C08D910190801921F44150CF +:106640005040C8F7881B990B0895FB01DC0102C07C +:1066500001900D9241505040D8F70895F999FECF1E +:1066600092BD81BDF89A992780B50895A6E1B0E062 +:1066700044E050E00C946833A8E1B0E042E050E020 +:106680000C946833262FF999FECF92BD81BDF89AFC +:10669000019700B4021639F01FBA20BD0FB6F89466 +:1066A000FA9AF99A0FBE08950396272F0E94433352 +:1066B0000E944233252F0E944333242F0C944333EE +:1066C0000196272F0E9443330C944233DC01CB0107 +:1066D000FC01F999FECF06C0F2BDE1BDF89A3196F2 +:1066E00000B40D9241505040B8F708950E94B8335D +:1066F00008F481E00895E89409C097FB3EF4909572 +:106700008095709561957F4F8F4F9F4F9923A9F08A +:10671000F92F96E9BB279395F69587957795679519 +:10672000B795F111F8CFFAF4BB0F11F460FF1BC05D +:106730006F5F7F4F8F4F9F4F16C0882311F096E9F0 +:1067400011C0772321F09EE8872F762F05C066239E +:1067500071F096E8862F70E060E02AF09A95660F57 +:10676000771F881FDAF7880F9695879597F9089510 +:10677000990F0008550FAA0BE0E8FEEF1616170652 +:10678000E807F907C0F012161306E407F50798F0BA +:10679000621B730B840B950B39F40A2661F0232BD3 +:1067A000242B252B21F408950A2609F4A140A6954F +:1067B0008FEF811D811D08950E94EF330C9460348A +:1067C0000E94523438F00E94593420F0952311F081 +:1067D0000C9449340C944F3411240C9494340E943A +:1067E000713470F3959FC1F3950F50E0551F629F70 +:1067F000F001729FBB27F00DB11D639FAA27F00D1A +:10680000B11DAA1F649F6627B00DA11D661F829F40 +:106810002227B00DA11D621F739FB00DA11D621F25 +:10682000839FA00D611D221F749F3327A00D611D42 +:10683000231F849F600D211D822F762F6A2F112424 +:106840009F5750409AF0F1F088234AF0EE0FFF1F57 +:10685000BB1F661F771F881F91505040A9F79E3FAE +:10686000510580F00C9449340C9494345F3FE4F368 +:10687000983ED4F3869577956795B795F795E79504 +:106880009F5FC1F7FE2B880F911D9695879597F90D +:10689000089597F99F6780E870E060E008959FEFA2 +:1068A00080EC089500240A941616170618060906A7 +:1068B000089500240A941216130614060506089576 +:1068C000092E0394000C11F4882352F0BB0F40F4FE +:1068D000BF2B11F460FF04C06F5F7F4F8F4F9F4F3E +:1068E000089557FD9058440F551F59F05F3F71F0C0 +:1068F0004795880F97FB991F61F09F3F79F0879527 +:106900000895121613061406551FF2CF4695F1DFAF +:1069100008C0161617061806991FF1CF869571053F +:10692000610508940895E894BB2766277727CB0173 +:1069300097F90895F894FFCFE7100F1162110F1126 +:10694000621142117A11621177128412B014B014DC +:10695000B914B914BB14B914B914B914B014B014DF +:10696000C014B914B914C014131F131F6C1F6C1F6B +:106970009E1F461F461F461FB81F29203920392059 +:106980006E2D722DB52DC62DD12DF02DF32D262E69 +:10699000472EC32DC32D522E552E592E7F2EA12E9C +:0669A000A42EA62ECB2E52 +:1069A600013802000000010000000038020000006B +:1069B6000501000000380200000001060000003852 +:1069C6000200000001070000003802040800000071 +:1069D6000000003802090C00000000000038020127 +:1069E6001500000000000036323331F7F66766976F +:1069F600C6343500000000000180005F082B0E0A37 +:106A06000E060E020EF4F5010021007F220003009F +:106A16004A004A4A01F6F731333236674C41594546 +:106A2600520042617365200047616D652000526126 +:106A3600697365004C6F776572004C4F434B00439A +:106A4600617073004E756D005363726C00202020D8 +:106A5600202000534F4C415200544D505354008156 +:106A66008283E200E900EA00B500B600B700CD0077 +:106A76008301CC008A01920194012102230224029F +:106A86002502260227022A02B300B4006F00700016 +:106A96000603060806010606AF0200FF0100010014 +:106AA60000FFFF0000010001FF0000081018181089 +:106AB6000800000102020202020202020202402251 +:0E6AC6007B99017701FC00000C190C390C00C3 :00000001FF From 19522836c02886e9755a2ea1c2ea9adaa4c03682 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 13 Nov 2021 23:17:14 -0500 Subject: [PATCH 062/155] Add support for haptic feedback. --- keyboards/solartempest/sofle/config.h | 30 +- .../solartempest/sofle/keymaps/via/keymap.c | 79 +- .../solartempest/sofle/keymaps/via/snakey.c | 40 +- .../sofle/keymaps/via/snakey_minimal.c | 28 +- keyboards/solartempest/sofle/readme.md | 13 +- keyboards/solartempest/sofle/rules.mk | 14 +- .../sofle/solartempest_sofle_via.hex | 3004 +++++++++-------- 7 files changed, 1675 insertions(+), 1533 deletions(-) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index a9a274e6378c..753ac13cd681 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -76,7 +76,27 @@ //#define SPLIT_LAYER_STATE_ENABLE //#define SPLIT_LED_STATE_ENABLE //#define SPLIT_MODS_ENABLE - #define OLED_LOGO //Enable to print snakey custom logo on slave side, disable to save space. + #define OLED_LOGO //Enable to print snakey custom logo on slave side (+108). + //#define OLED_NO_SLAVE //Enable for snakey to not render slave OLED (-160). +#endif + +//Haptic feedback settings +#ifdef HAPTIC_ENABLE + #define FB_ERM_LRA 1 + #define FB_BRAKEFACTOR 3 // For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 + #define FB_LOOPGAIN 0 // For Low:0, Medium:1, High:2, Very High:3 + + // Please refer to your datasheet for the optimal setting for your specific motor. + #define RATED_VOLTAGE 3 + #define V_RMS 2.0 + #define V_PEAK 2.1 + #define F_LRA 205 //resonance freq + + #define NO_HAPTIC_PUNCTUATION + #define NO_HAPTIC_ALPHA + #define NO_HAPTIC_MOD + //#define NO_HAPTIC_NUMERIC + //#define NO_HAPTIC_NAV #endif // Combo settings @@ -87,11 +107,11 @@ // Pimoroni trackball settings #ifdef POINTING_DEVICE_ENABLE - #define PIMORONI_TRACKBALL_ROTATE - #define PIMORONI_TRACKBALL_INVERT_Y #define PIMORONI_TRACKBALL_INTERVAL_MS 6 //Default is 8ms - //#define PIMORONI_TRACKBALL_INVERT_X - //#define PIMORONI_TRACKBALL_CLICK //Not compatible with having mouse keys in keymap. Use trackball_register_button() and trackball_click() in keymap.c instead. + //#define PIMORONI_TRACKBALL_ROTATE + #define PIMORONI_TRACKBALL_INVERT_Y + #define PIMORONI_TRACKBALL_INVERT_X + //#define PIMORONI_TRACKBALL_CLICK //Incompatible with keymap mouse keys. Use trackball_register_button() and trackball_click() instead. #endif diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index 40c1aa0396a9..4498d8c7a67d 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -33,6 +33,10 @@ bool was_scrolling = true; //Remember last state of trackball scrolling #endif +#ifdef HAPTIC_ENABLE + #include "drivers/haptic/DRV2605L.h" +#endif + #ifdef RGBLIGHT_ENABLE extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT #endif @@ -123,14 +127,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these } } - bool pointing_device_task_user(pimoroni_data* trackball_data) { //Code from Dasky (Thanks!). This corrects the rotate/inversion scrolling issue currently in QMK Master. - if (trackball_is_scrolling()) { - pimoroni_data temp = *trackball_data; - trackball_data->up = temp.down; - trackball_data->down = temp.up; + #if defined(PIMORONI_TRACKBALL_ROTATE) || defined(PIMORONI_TRACKBALL_INVERT_Y) + bool pointing_device_task_user(pimoroni_data* trackball_data) { //Code from Dasky (Thanks!). This corrects the rotate/inversion scrolling issue currently in QMK Master. + if (trackball_is_scrolling()) { + pimoroni_data temp = *trackball_data; + #ifdef PIMORONI_TRACKBALL_ROTATE + trackball_data->up = temp.down; + trackball_data->down = temp.up; + #endif + #ifdef PIMORONI_TRACKBALL_INVERT_Y + trackball_data->left = temp.right; + trackball_data->right = temp.left; + #endif + } + return true; } - return true; - } + #endif #if !defined(MOUSEKEY_ENABLE) //Allows for button clicks on keymap even though mousekeys is not defined. static bool mouse_button_one, trackball_button_one; @@ -140,16 +152,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these report_mouse_t currentReport = pointing_device_get_report(); if (pressed) { currentReport.buttons |= button; + #ifdef HAPTIC_ENABLE + DRV_pulse(4); + #endif } else { currentReport.buttons &= ~button; } pointing_device_set_report(currentReport); } - void trackball_click(bool pressed, report_mouse_t* mouse) { //Use for single mouse button and key presses. Click and drag is done with keys elsewhere. + void trackball_click(bool pressed, report_mouse_t* mouse) { //Use for single mouse button and key presses. Click and drag is done with keymap. if (pressed) { //trackball pressed //tap_code_delay(KC_A,300); //Use delay as simple debounce for key strokes mouse->buttons |= MOUSE_BTN1; + #ifdef HAPTIC_ENABLE + DRV_pulse(4); + #endif } else { //released mouse->buttons &= ~MOUSE_BTN1; } @@ -301,7 +319,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { # if !defined(MOUSEKEY_ENABLE) //Allow for using mouse buttons in the keymap when mouse keys is not enabled. case KC_MS_BTN1: mouse_button_one = record->event.pressed; - trackball_register_button(mouse_button_one | trackball_button_one, MOUSE_BTN1); + trackball_button_one = record->event.pressed; + //trackball_register_button(mouse_button_one | trackball_button_one, MOUSE_BTN1); + trackball_register_button(mouse_button_one, MOUSE_BTN1); break; case KC_MS_BTN2: trackball_register_button(record->event.pressed, MOUSE_BTN2); @@ -311,7 +331,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; # endif #endif - + #ifdef KEYBOARD_PET // KEYBOARD PET STATUS case KC_LCTL: case KC_RCTL: @@ -395,33 +415,48 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { rgblight_set_layer_state(3, layer_state_cmp(state, 3)); rgblight_set_layer_state(4, layer_state_cmp(state, 4)); - switch(biton32(state)){ // Change all other LEDs based on layer state as well case 0: rgblight_sethsv_noeeprom(50,255,80); - if (was_scrolling==true){ //Check if was scrolling when layer was left - trackball_set_scrolling(true); - run_trackball_cleanup(); - } else{ - trackball_set_scrolling(false); - run_trackball_cleanup(); - } + #ifdef POINTING_DEVICE_ENABLE + if (was_scrolling==true){ //Check if was scrolling when layer was left + trackball_set_scrolling(true); + run_trackball_cleanup(); + } else{ + trackball_set_scrolling(false); + run_trackball_cleanup(); + } + #endif break; case 1: rgblight_sethsv_noeeprom(252,255,80); + #ifdef HAPTIC_ENABLE + DRV_pulse(69); + #endif break; case 2: rgblight_sethsv_noeeprom(80,255,80); + #ifdef HAPTIC_ENABLE + DRV_pulse(37); + #endif break; case 3: rgblight_sethsv_noeeprom(118,255,80); + #ifdef HAPTIC_ENABLE + DRV_pulse(31); + #endif break; case 4: rgblight_sethsv_noeeprom(218,255,80); - if (was_scrolling==true){ //Check if was scrolling when layer is activated - trackball_set_scrolling(false); - run_trackball_cleanup(); - } + #ifdef HAPTIC_ENABLE + DRV_pulse(7); + #endif + #ifdef POINTING_DEVICE_ENABLE + if (was_scrolling==true){ //Check if was scrolling when layer is activated + trackball_set_scrolling(false); + run_trackball_cleanup(); + } + #endif } return state; } diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey.c b/keyboards/solartempest/sofle/keymaps/via/snakey.c index de47c3c01f63..6380e5c24b7c 100644 --- a/keyboards/solartempest/sofle/keymaps/via/snakey.c +++ b/keyboards/solartempest/sofle/keymaps/via/snakey.c @@ -46,7 +46,7 @@ bool showedJump = true; bool isBarking = false; - #ifdef OLED_LOGO + #if defined(OLED_LOGO) && !defined(OLED_NO_SLAVE) static void render_logo(int LUNA_X, int LUNA_Y) { static const char PROGMEM luna_logo[] = { 0x00, 0x00, 0x04, 0xf6, 0xb8, 0xf8, 0xd8, 0xf0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, @@ -230,24 +230,26 @@ } // KEYBOARD PET END - static void print_logo_narrow(void) { - oled_set_cursor(0,2); - oled_write("SOLAR", false); - oled_set_cursor(0,3); - oled_write("TMPST", false); - - #ifdef OLED_LOGO - render_logo(0,7); //Not defining this in config.h will save 112 bytes. - #endif - - /* wpm counter */ - char wpm_str[8]; - oled_set_cursor(0,13); - sprintf(wpm_str, " %03d", current_wpm_read); - oled_write(wpm_str, false); - oled_set_cursor(0,14); - oled_write(" wpm", false); - } + #ifndef OLED_NO_SLAVE + static void print_logo_narrow(void) { + oled_set_cursor(0,2); + oled_write("SOLAR", false); + oled_set_cursor(0,3); + oled_write("TMPST", false); + + #ifdef OLED_LOGO + render_logo(0,7); //Not defining this in config.h will save 112 bytes. + #endif + + /* wpm counter */ + char wpm_str[8]; + oled_set_cursor(0,13); + sprintf(wpm_str, " %03d", current_wpm_read); + oled_write(wpm_str, false); + oled_set_cursor(0,14); + oled_write(" wpm", false); + } + #endif static void print_status_narrow(void) { /*switch (get_highest_layer(default_layer_state)) { //May be useful if you use multiple non-QWERTY layouts to show which is active. diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c b/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c index b5457bb280f1..885c9621ceaa 100644 --- a/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c +++ b/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c @@ -45,7 +45,7 @@ bool showedJump = true; bool isBarking = false; - #ifdef OLED_LOGO + #if defined(OLED_LOGO) && !defined(OLED_NO_SLAVE) static void render_logo(int LUNA_X, int LUNA_Y) { static const char PROGMEM luna_logo[] = { 0x00, 0x00, 0x04, 0xf6, 0xb8, 0xf8, 0xd8, 0xf0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, @@ -233,16 +233,18 @@ } // KEYBOARD PET END - static void print_logo_narrow(void) { - oled_set_cursor(0,4); - oled_write("SOLAR", false); - oled_set_cursor(0,5); - oled_write("TMPST", false); - - #ifdef OLED_LOGO - render_logo(0,9); //Not defining this in config.h will save 112 bytes. - #endif - } + #ifndef OLED_NO_SLAVE + static void print_logo_narrow(void) { + oled_set_cursor(0,4); + oled_write("SOLAR", false); + oled_set_cursor(0,5); + oled_write("TMPST", false); + + #ifdef OLED_LOGO + render_logo(0,9); //Not defining this in config.h will save 112 bytes. + #endif + } + #endif static void print_status_narrow(void) { /*switch (get_highest_layer(default_layer_state)) { //May be useful if you use multiple non-QWERTY layouts to show which is active. @@ -311,7 +313,9 @@ if (is_keyboard_master()) { print_status_narrow(); } else { - print_logo_narrow(); + #ifndef OLED_NO_SLAVE + print_logo_narrow(); + #endif } } #endif diff --git a/keyboards/solartempest/sofle/readme.md b/keyboards/solartempest/sofle/readme.md index 78a5482c741b..ca44ed9ef8e4 100644 --- a/keyboards/solartempest/sofle/readme.md +++ b/keyboards/solartempest/sofle/readme.md @@ -4,7 +4,7 @@ Sofle is 6×4+5 keys column-staggered split keyboard. Based on Lily58, Corne and Helix keyboards. -For detailed instructions on using VIA and flashing, please refer to the sections further down the page! +## When flashing, MAKE SURE to load the VIA keymap and layout otherwise your keys won't work! Please refer to the sections further down the page. For details about the keyboard design, refer to Josef's blog: [Sofle Keyboard - a split keyboard based on Lily58 and Crkbd](https://josef-adamcik.cz/electronics/let-me-introduce-you-sofle-keyboard-split-keyboard-based-on-lily58.html) @@ -17,10 +17,11 @@ Build guide and log is available here: [SofleKeyboard build log/guide](https://j # Custom Features: ### OLED Features: - Includes Snakey keyboard pet! Slithers according to WPM, bites, and sticks its tongue out at you! +- Includes Snakey minimal version, with less animations and WPM-free to allow for more free space. - OLED displays current layer, lock key status, WPM, custom logo, and custom name. - OLED shuts off on idle and when computer is sleeping. - Includes working Luna keyboard pet. -- Includes working Bongocat (disable RGB for sufficient space). +- Includes working Bongocat (disable other features for sufficient space). - Includes stock OLED code as well. ### Trackball Features: @@ -43,10 +44,14 @@ Build guide and log is available here: [SofleKeyboard build log/guide](https://j - Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders. - Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders. +### Haptic Feedback Features: +- Supports Pimoroni Haptic Bzzz installed on master side. +- Different vibrations when layers are activated. +- Provides tactile feedback when trackball is clicked or mouse keys are used. + ### Tap and Other Features: - Push left-shift + backspace to delete whole words. Right-shift + backspace to delete whole words in the opposite direction. - Double tap layers to stay on a layer instead of momentary push. -- Adds key combo functionality. - Symmetric modifiers (CMD/Super, Alt/Opt, Ctrl, Shift). ## Using with VIA @@ -67,7 +72,7 @@ qmk compile -kb solartempest/sofle -km via ## Flashing -Flash using the correct command below or use QMK Toolbox. Specifying side during compile is unnecessary as Master Left is defined: +Flash using the correct command below or use QMK Toolbox. Specifying side during compile is unnecessary as Master Left is defined by default: ```sh # for pro micro-based builds diff --git a/keyboards/solartempest/sofle/rules.mk b/keyboards/solartempest/sofle/rules.mk index 206552b12257..47a32403e539 100644 --- a/keyboards/solartempest/sofle/rules.mk +++ b/keyboards/solartempest/sofle/rules.mk @@ -10,20 +10,22 @@ CONSOLE_ENABLE = no # Console for debug EXTRAKEY_ENABLE = yes # Audio control and System control (+450) RGBLIGHT_ENABLE = yes # RGB lighting (+2350) ENCODER_ENABLE = yes # Encoders -MOUSEKEY_ENABLE = no # Mouse keys (+1482) -NKRO_ENABLE = no # Has 6KRO+ already. NKRO does not work +MOUSEKEY_ENABLE = no # Mouse keys (+1482). Not required for trackball usage. +NKRO_ENABLE = no # Has 6KRO+ already. NKRO does not work for the sofle. +COMBO_ENABLE = no # Tap combo chording (+952) LTO_ENABLE = yes # Save space -OLED_ENABLE = yes # Must be disabled if OLEDs are not installed (+3608) +OLED_ENABLE = yes # Must be disabled if OLEDs are not installed (+3608-4774) OLED_DRIVER = SSD1306 # Specify OLED driver WPM_ENABLE = no # WPM counter for keyboard pets (+1298) -COMBO_ENABLE = no # Tap combo chording, may run into space issue if also using keyboard pets (+952) # Via_enable in keymap (+2300). VIA is required as non-via layouts are removed to save space. GRAVE_ESC_ENABLE = no # Save space by not using KC_GESC (+127) MAGIC_ENABLE = no # Save space by not PROCESS_MAGIC, which is bootmagic with out the boot (+612) SPACE_CADET_ENABLE = no # Save space by not using space cadet left/right shift (+350) -POINTING_DEVICE_ENABLE = yes # Enable Pimoroni Trackball +POINTING_DEVICE_ENABLE = yes # Enable Pimoroni Trackball (+2304) QUANTUM_LIB_SRC += i2c_master.c -SRC += drivers/sensors/pimoroni_trackball.c \ No newline at end of file +SRC += drivers/sensors/pimoroni_trackball.c + +HAPTIC_ENABLE += DRV2605L # Enable Pimoroni Haptic Bzzz LRA (+1192) diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index 8dd1c8159991..70b29c001c47 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,9 +1,9 @@ -:100000000C9449060C9490060C9490060C94543170 +:100000000C9449060C9490060C9490060C949B3327 :100010000C9490060C9490060C9490060C94900608 -:100020000C9490060C9490060C943C1A0C94F819BD -:100030000C9409260C9490060C9490060C9490064F +:100020000C9490060C9490060C94001B0C94BC1A33 +:100030000C94FB270C9490060C9490060C9490065C :100040000C9490060C9490060C9490060C949006D8 -:100050000C9490060C94131B0C9490060C94900630 +:100050000C9490060C94D71B0C9490060C9490066C :100060000C9490060C9490060C9490060C949006B8 :100070000C9490060C9490060C9490060C949006A8 :100080000C9490060C9490060C9490060C94900698 @@ -200,30 +200,30 @@ :100C7000006F0066006C006500000010034B00650B :100C8000007900680069007600650000000403092F :100C9000040011241FBECFEFDAE0DEBFCDBF04B6E3 -:100CA00003FE27C080917A0690917B06A0917C0676 -:100CB000B0917D068730904BA740B04BD1F4109295 -:100CC0007A0610927B0610927C0610927D0614BE66 +:100CA00003FE27C08091800690918106A091820664 +:100CB000B09183068730904BA740B04BD1F410928F +:100CC000800610928106109282061092830614BE4E :100CD00084B7877F84BF0FB6F894A8958091600091 :100CE000886180936000109260000FBEE0E0F8E33E -:100CF000099512E0A0E0B1E0E6EAF9E602C005904D +:100CF000099512E0A0E0B1E0EEE4FEE602C0059046 :100D00000D92AE32B107D9F726E0AEE2B2E001C0F3 -:100D10001D92AA37B207E1F70E9430260C949A344C -:100D20000C940000CF93DF934091780650917906A0 -:100D3000485754409A01205A3F4F21303240C0F06A -:100D400020E032E0241B350B60917604709177042B +:100D10001D92A038B207E1F70E9422280C94E13618 +:100D20000C940000CF93DF9340917E0650917F0694 +:100D30004E5754409A01205A3F4F21303240C0F064 +:100D400020E032E0241B350B60917C0470917D041F :100D5000FC01CA01240F351FC1E0D0E082179307C0 -:100D600050F07093770460937604DF91CF910895EB -:100D700020E630E0E9CF4491DC01A858BB4F5C91FC +:100D600050F070937D0460937C04DF91CF910895DF +:100D700020E630E0E9CF4491DC01A258BB4F5C9102 :100D8000451781F04C93AC01A5E056954795AA957F :100D9000E1F7DE0102C0AA0FBB1F4A95E2F7AD01E1 :100DA0006A2B752B01963196D9CFE8EDF0E0808162 :100DB0008E7F80831092E2001092DA001092E100A0 :100DC000A0EEB0E08C9181608C9380818F778083DE :100DD00019BCA7EDB0E08C918E7F8C9380818F7EC3 -:100DE00080831092580408952091E4003091E5002A +:100DE000808310925E0408952091E4003091E50024 :100DF00095E6A9012091EC00822F817020FF06C0AA :100E00008091E80080FF06C080E008952091E8000E -:100E100022FD1AC080916604882389F0853089F00C +:100E100022FD1AC080916C04882389F0853089F006 :100E20008091EB0085FD0FC02091E4003091E5003A :100E300042175307F9F29150E1F684E0089582E0F9 :100E4000089583E0089581E00895EF92FF920F9353 @@ -232,9 +232,9 @@ :100E70008093E8000E94F406882399F3C82F08C0E5 :100E8000F70181917F018093F1000150110949F729 :100E90008C2FCF911F910F91FF90EF90089580912B -:100EA000680487FF13C08091E80082FF06C080912C -:100EB000E8008B778093E80004C08091660481117C -:100EC000F2CF0895809166048823D9F38091E800D9 +:100EA0006E0487FF13C08091E80082FF06C0809126 +:100EB000E8008B778093E80004C080916C04811176 +:100EC000F2CF089580916C048823D9F38091E800D3 :100ED00080FFF8CF8091E8008E77ECCF982F909329 :100EE000E900242F762F50E0891731F07091EC0043 :100EF0002091ED005091F00021FD07C09F5F9730D9 @@ -244,1468 +244,1542 @@ :100F30005093F0002091EE0027FDE0CF80E008956F :100F4000CF92DF92EF92FF920F931F93CF93DF9395 :100F5000C8EDD0E088818F7E8883E7EDF0E0808166 -:100F60008160808384E082BF81E08093580488811F +:100F60008160808384E082BF81E080935E04888119 :100F70008E7F888302EE10E0F80110821092DA0072 :100F800081EEC82ED12CF601108288818F7788835C :100F900088818068888388818F7D888319BC1092BE -:100FA000660410926704109265041092640490EE37 +:100FA0006C0410926D0410926B0410926A0490EE1F :100FB000E92EF12CF70180818B7F8083888181600D :100FC000888342E060E080E00E946E07F601808145 :100FD0008E7F8083F801808181608083808188603A :100FE0008083F70180818E7F808388818061888300 :100FF000DF91CF911F910F91FF90EF90DF90CF90F5 -:101000000895FC0180916E0490916F0486179707F4 +:101000000895FC01809174049091750486179707E8 :10101000A0F06115710529F49091E8009E779093F6 :10102000E80090E06115710551F4911108C08091BC :10103000E80082FF34C080E00895BC01F2CF8091C7 -:1010400066048823C1F18530C1F18091E80083FDF9 +:101040006C048823C1F18530C1F18091E80083FDF3 :1010500030C08091E80082FDEACF8091E80080FFF7 :10106000E1CF8091F3002091F200382F61157105D6 :1010700019F02830310558F091E02830310509F099 :1010800090E02091E8002E772093E800CBCF81916B :101090008093F100615071092F5F3F4FE7CF80913E -:1010A0006604882341F0853041F08091E80083FF99 +:1010A0006C04882341F0853041F08091E80083FF93 :1010B000BECF81E0089582E0089583E00895809195 -:1010C0005B0408952FB7F894609151047091520415 -:1010D00080915304909154042FBF089520914E04A1 -:1010E00030914F042817390771F090934F04809383 -:1010F0004E04E0914C04F0914D04309721F00084AF -:10110000F185E02D0994089520914A0430914B0413 -:101110002817390771F090934B0480934A04E091AB -:101120004C04F0914D04309721F00680F781E02DBA -:101130000994089520913D0436E0839FC001112455 +:1010C000610408952FB7F894609157047091580403 +:1010D0008091590490915A042FBF0895209154048F +:1010E000309155042817390771F090935504809377 +:1010F0005404E0915204F0915304309721F000849D +:10110000F185E02D09940895209150043091510407 +:101110002817390771F09093510480935004E0919F +:101120005204F0915304309721F00680F781E02DAE +:10113000099408952091430436E0839FC00111244F :10114000629F800D911D1124811522E0920714F0F9 -:1011500090E080E088589B4F9093790680937806C2 -:101160000895FC01680F791F8FEF91E32191822789 -:1011700028E030E087FF09C0880F89272150310916 -:10118000C9F7E617F70791F70895880FF7CFFA0127 -:10119000811101C0FB01099480917104982F9E7FF9 -:1011A00061F4817082608093710480917404813A4B -:1011B00018F080EA8093740408958831B0F3817048 -:1011C0008661F1CFAF92BF92DF92EF92FF920F93C1 -:1011D0001F93CF93DF93082F162FE901E42FF0E040 -:1011E000E55AFA4F611110C0E4915E2F4E2F4983EA -:1011F000E8835A83DF91CF911F910F91FF90EF9079 -:10120000DF90BF90AF900895E62EF12C4491D42E3C -:10121000E42FF0E026E0829FC00111242FEF30E0A0 -:10122000B9010E94CE32802F90E0880F991F55E5BA -:10123000569FD001579FB00D11248A1B9B0B982FEE -:10124000990F890F5901AE18BF08AE9ED001AF9E0D -:10125000B00DBE9EB00D11245B2F189F800111248C -:10126000012F11275901A01AB10AAE9E8001AF9E2D -:10127000100DBE9E100D11245901A81AB108AE9C84 -:10128000C001AF9C900DBE9C900D1124892F992711 -:10129000281B390B2E9FC0012F9F900D3E9F900D54 -:1012A0001124E92F62307105A1F050F46115710528 -:1012B00009F49DCF6130710581F0EB2F512F97CF4D -:1012C0006430710569F080F06630710509F48FCFE4 -:1012D000F4CFE42F4B2F592F8ACFE42F412F87CF04 -:1012E000EB2F542F492F83CF4B2F5D2DE12F7FCF35 -:1012F00080E0089578940895F894E82FE295EF70CF -:10130000F0E031A1282F2F7081E090E001C0880F1C -:101310002A95EAF7982F9095932391A392A1892B70 -:1013200082A30C947A099091D60292FF06C0282FCE -:1013300028712830F9F4877F846093FF06C0282F36 -:1013400028712831F1F4877E84612091D70220FF33 -:1013500006C0382F38713830D9F4877F816021FF7B -:1013600006C0282F28712831D1F4877E816194FD31 -:10137000877E0895282F24712430F9F68B7F8860AA -:10138000DCCF282F2471243101F78B7E8861DDCFDB -:10139000382F3171313019F78E7F8860E0CF282FD8 -:1013A0002171213121F78E7E8861E1CFCF93DF93C8 -:1013B000EC018238910581F1B0F58133910509F492 -:1013C00091C020F58932910509F485C08A9709F406 -:1013D00090C0C11521E5D20708F0AAC0C11530E5BB -:1013E000D30708F0F2C0CF3BD10508F089C0C83A56 -:1013F000D10508F0DFC0C53AD10508F0D3C0C4302C -:10140000D105F8F4C130D105E1F040C08533910534 -:1014100009F45AC0C997E9F68091D602837089F021 -:10142000C0EED0E00EC0833E910599F170F4803E8D -:10143000910501F1823E910561F68091D60282FD0F -:1014400021C0CE01DF91CF910895863E910561F1D3 -:10145000873E910571F1843E910509F0BACF8091E4 -:10146000D70281FFEECF8091D602C7EED0E084FD97 -:101470000DC0E7CF8091D60280FDF7C09091D702D2 -:1014800090FFDFCFC3EED0E084FFDBCFD0E0C0E041 -:10149000D8CF8091D60282FDEBC09091D70290FD0B -:1014A000BFCF84FFCECFF2CF8091D60283FDDDCFB8 -:1014B000C8CF8091D60283FDDEC09091D70291FF04 -:1014C000F0CFC4EED0E0BDCF8091D60285FFB9CF7A -:1014D000C9E2D0E0B6CF8091D60285FFB2CFC5E396 -:1014E000D0E0AFCF8091D60286FFABCFCAE2D0E08A -:1014F000A8CF8091D60286FFA4CFC1E3D0E0A1CFD0 -:10150000C11540E2D40760F4C11581E0D80708F0A6 -:1015100098CFCE01815E9109079708F492CFB6CF9C -:10152000C11590E4D90708F4B1CFDF70D06A89CF34 -:10153000C11524E5D20778F4C11533E5D30708F0C7 -:1015400072C0C11542E5D40708F05CC0DC2FCC277F -:10155000C16FD06A76CFC1158AE5D80778F4C11576 -:1015600099E5D90708F073C0C11528E5D20708F43A -:101570008DCFDC2FCC27C06FD06A63CFCE019056C1 -:101580008115904208F082CF8D2F8F710E949309B0 -:1015900090E0982F882788279F719C012C2BE901C8 -:1015A000D0624FCFC55AD0E0C154DE4FC881D0E0E1 -:1015B000D06447CFC85AD0E0CC0FDD1FCE53DE4FEA -:1015C0000990D881C02DD4643CCFCE0164E09695BB -:1015D00087956A95E1F783702C2F269526952370C1 -:1015E00040E2249F90011124382B8C2F8370C1E09E -:1015F000D0E002C0CC0FDD1F8A95E2F7C22BD32BBF -:10160000DC681FCFCE018370992721E030E002C053 -:10161000220F331F8A95E2F7C695C69580E2C89FD0 -:10162000E0011124EBCFCE018370992721E030E057 -:1016300002C0220F331F8A95E2F7C695C69590E245 -:10164000C99FE0011124C22BD32BDA68FACE8C2F6C -:101650008F700E94930934E0D695C7953A95E1F7CB -:10166000CF709C2FEC01D069ECCEC9E3D0E0E9CE7D -:10167000C2EED0E0E6CEC6EED0E0E3CE0C94620837 -:101680008091590490919102892B90919002892B1D -:1016900080933002E0914C04F0914D04309731F08A -:1016A0000280F381E02D80E392E009940895809117 -:1016B0008F0290915E02981301C008958F5F87702A -:1016C000FACF27E0929F800D1124982F977086956E -:1016D0008695869523E0829FF0011124E35CFD4FFF -:1016E00050E040E080E0219130E0092E02C03695C4 -:1016F00027950A94E2F721703327042E01C0220FA8 -:101700000A94EAF7822B4F5F5F4F4330510559F738 -:10171000089527E0929F800D1124982F977041E043 -:1017200001C0440F9A95EAF786958695869593E0D1 -:10173000899FF0011124E35CFD4F90E080E070E0B0 -:101740005191DF0111979B01082E02C03695279514 -:101750000A94E2F7217021952527242325272C932D -:1017600001968330910561F7089590E080E00E9432 -:10177000840890E080E00E946E081092910210921E -:1017800090020C94400B809392020C94B50B88232A -:1017900041F08095909159048923809359040C94C9 -:1017A000400B0895882339F090915904982B909319 -:1017B00059040C94400B08958823B1F19CEF980FC5 -:1017C000913A70F4E2E3F2E09191891303C0DF01F2 -:1017D00011971C9242E0E833F407B1F70C94400BE8 -:1017E00090E2980F983088F4877021E030E0A901EA -:1017F00002C0440F551F8A95E2F7CA018095909167 -:101800005904892380935904E9CF9BE5980F9330BD -:1018100020F490E080E00C948408885A873120F40A -:1018200090E080E00C946E0808950F931F93CF937F -:10183000C82F882309F469C08CEF8C0F813AB0F56A -:1018400002E312E088E392E0F8012191C21701F16E -:1018500022E0E833F207C9F7EFEF80E0D8019D916D -:101860008D01C91781F0EF3F19F4911101C0E82FE4 -:101870008F5F863099F7EF3F31F00E2E000CFF0B93 -:10188000E05DFD4FC283CF911F910F910C94400BEF -:10189000E2E3F2E02191C21303C0DF0111971C9231 -:1018A0008E179F07B9F70E94400BD6CF80E28C0FAE -:1018B000883068F4C77021E030E001C0220FCA957B -:1018C000EAF780915904822B80935904DCCFEBE531 -:1018D000EC0FE33050F4F0E0E154FE4F808190E0F3 -:1018E000CF911F910F910C948408C85AC73168F4A6 -:1018F000EC2FF0E0EE0FFF1FEE53FE4F8081918141 -:10190000CF911F910F910C946E08CF911F910F9161 -:101910000895982F92959F7011F0892F94E0282FA9 -:101920002695269511F09E5F822F869509F09F5F80 -:10193000892F0895CF93DF93CDB7DEB762970FB6A7 -:10194000F894DEBF0FBECDBF96E0E4E2F3E0DE0127 -:10195000179601900D929A95E1F796E0FE01379661 -:10196000DE011D9601900D929A95E1F798858823E6 -:10197000E9F0962B9E8786E0FE013D96DE011196EA -:1019800001900D928A95E1F786E0FE013196A4E27E -:10199000B3E001900D928A95E1F762960FB6F89444 -:1019A000DEBF0FBECDBFDF91CF9108956095962326 -:1019B000E1CFDC01FB0180819181803891054CF001 -:1019C0008FE78C93808191818F57910991838083D8 -:1019D000089581382FEF92073CF481E88C93808141 -:1019E000918181589F4FF2CF8C931182108208957C -:1019F000681708F5861B682F21E0469FA001112477 -:101A0000649FF001659FF00D1124409159015091A0 -:101A10005A01E49FC001E59F900DF49F900D1124A1 -:101A2000880F892F881F990B9195222319F0919582 -:101A3000819591090895681B20E0DFCF0F931F93D4 -:101A4000CF93DF9300D000D0CDB7DEB789836A8310 -:101A50004B831C8204E610E024E030E0AE014F5FCF -:101A60005F4F60E084E10E942C300F900F900F9048 -:101A70000F90DF91CF911F910F91089580913203C4 -:101A8000882329F047E669E98BE20C941E0D6091EA -:101A9000590170915A0190E080E00E947B3320E070 -:101AA00030E040E05CE30E94DC3320E030E040E8DE -:101AB0005FE30E947633882321F047EC6BE180E0FE -:101AC000E4CF41E265EA89EDE0CFCF92DF92EF9279 -:101AD000FF920F931F93CF93DF936C017B0164E61A -:101AE00070E088E70E94142FEC0197FD12C010E00F -:101AF00000E0F601E00FF11F849164E670E00E94BF -:101B00008E2FEC01892B29F40F5F1F4F0E151F0537 -:101B100081F70E94A830CE01DF91CF911F910F91E4 -:101B2000FF90EF90DF90CF900895809148049091BE -:101B30004904911103C091E089270895882369F031 -:101B400062E070E08CEE9BE00E94650D892B19F03D -:101B50008091480408951092480480914804EBCF86 -:101B6000CF93C0914804809149048823D1F00E940A -:101B700062086058774C8E4F9F4F60934404709377 -:101B800045048093460490934704C11108C062E065 -:101B900070E08AEE9BE00E94650D892B29F0C091D0 -:101BA00048048C2FCF91089581E080934804F7CFAB -:101BB00090916604943029F58093550470935704EE -:101BC000609356049093E9008FEF9091E800815064 -:101BD00095FD06C095ED9A95F1F700008111F5CFBE -:101BE0008091E80085FF0DC050E040E063E070E0C8 -:101BF00085E594E00E9425078091E8008E77809328 -:101C0000E8000895BC0184E00C94D80DBC0183E089 -:101C10000C94D80D9C0184E08093E9009FEF8091A3 -:101C2000E800915085FD06C085ED8A95F1F700002A -:101C30009111F5CF8091E80085FF0CC050E040E0A5 -:101C400066E070E0C9010E9425078091E8008E7768 -:101C50008093E8000895CF93DF93EC0181E08093B7 -:101C6000E9008FEF9091E800815095FD06C095ED59 -:101C70009A95F1F700008111F5CF8091E80085FF7A -:101C800014C050E040E068E070E0CE010E942507FB -:101C90008091E8008E778093E80088E0FE01ACE553 -:101CA000B4E001900D928A95E1F7DF91CF9108950C -:101CB0009F92AF92BF92CF92DF92EF92FF920F93DB -:101CC0001F93CF93DF937C015B016A018091D10266 -:101CD00001E010E08A3010F40AE010E0C1E0D0E04A -:101CE000F894B501C701F6010995982E0E947A096A -:101CF000911004C021960C171D076CF4892DDF91FB -:101D0000CF911F910F91FF90EF90DF90CF90BF90F8 -:101D1000AF909F900895CC9F9001CD9F300D300DD6 -:101D2000112490E080E045E34A95F1F70000019628 -:101D300082179307C1F7D4CF8091A102811110C0FF -:101D40008091D80080618093D8008AE18A95F1F76C -:101D500000C08091D90080FF0AC081E08093A10279 -:101D600081E09091A102913009F080E0089582E035 -:101D70008093A1020E94D50610926604F1CF0E94C2 -:101D80009C0E882351F0E0914C04F0914D04309763 -:101D900021F00190F081E02D099480E008951F93D7 -:101DA000CF93DF93182FEB010E94150C8FE99FE072 -:101DB0000197F1F700C000002197C1F7812FDF9153 -:101DC000CF911F910C94DC0B4F925F926F927F9298 -:101DD0008F929F92AF92BF92CF92DF92EF92FF923B -:101DE0000F931F93CF93DF93CDB7DEB7CE5DD109AD -:101DF0000FB6F894DEBF0FBECDBF5090700190912A -:101E0000710490FF5DC080905D0390905E0381142B -:101E1000910409F068C0E0E6F6E09E012F5F3F4FB5 -:101E2000BE0161527F4FC901A4914A2F50E0DA01EF -:101E3000AA0FBB1FA40FB51FA15ABC4FCD90DD90B8 -:101E4000EC90D901CD92DD92ED929D0131966A1709 -:101E50007B0751F720916F0143E0249F800D911D76 -:101E60001124539A2BB1277F3BB138605FB7F894A8 -:101E7000BC01549E600D711D11248617970709F04F -:101E80008EC05FBF8FE594E00197F1F700C00000BE -:101E9000C252DF4F0FB6F894DEBF0FBECDBFDF9149 -:101EA000CF911F910F91FF90EF90DF90CF90BF9057 -:101EB000AF909F908F907F906F905F904F9008951C -:101EC000809171012091720133E0839FF001112410 -:101ED000E15AFC4F821708F096CF118210821282CD -:101EE0008F5F3396F7CF90FF96CFD12CC12C66240D -:101EF0006394712C53E0452E80915C0393010C2C6C -:101F000001C0220F0A94EAF7822309F43FC0F601C8 -:101F1000EE0FFF1FE80DF91DE590F490E114F104B8 -:101F200009F479CF45E050E0B701CE0101960E9457 -:101F30000F3309810F3F51F18A81800F9927991F33 -:101F40008B34910514F08AE490E05C01AA0CBB1C70 -:101F50008A0D9B1DDC01A15ABC4F5D01049D8001CF -:101F60001124015A1C4F0A151B0520F0B5E0EB0E99 -:101F7000F11CD8CF4D81413A08F040EA98016C81BC -:101F80008B810E94E2080D5F1F4FEDCFEFEFCE1A5D -:101F9000DE0AF8E0CF16D10409F0AECF3CCFFC0149 -:101FA0004191CF01E8E03BB9000000C047FF2BB9E9 -:101FB000440F000000C000C000C02BB900C0EA956B -:101FC00091F75BCFE1E7F4E080818E7F8083E9E5E4 -:101FD000F3E08281816082832FEF80E792E02150DD -:101FE00080409040E1F700C000000C94E40EE2E372 -:101FF000F2E086E0DF011D928A95E9F70C94B50BBB -:102000001F93CF93DF93CDB7DEB7AA970FB6F8949F -:10201000DEBF0FBECDBF88E694E02091F100DC0169 -:102020002D93CD01B4E080379B07B9F78091690407 -:10203000833009F471C0B8F4813009F448C08230AB -:1020400009F4B4C08091E80083FF3CC1809168042A -:10205000909169049A3008F035C1E92FF0E0E45618 -:10206000FB4C0C9402338A3009F48FC08B3009F496 -:1020700070C0893039F780916804813219F78091F6 -:102080006C0490916D04009711F00297D9F680913D -:10209000E800877F8093E8008091E80082FF37C0E6 -:1020A0009091F3008091F200029729F48091F10061 -:1020B0008B7F813021F48091F10080935B048091CB -:1020C000E8008B778093E8000E944F07BBCF809198 -:1020D0006804813A09F0B6CF8091E800877F809349 -:1020E000E80080916C0490916D04892B61F468E0A4 -:1020F0008CE594E070E00E9401088091E8008B7705 -:102100008093E8009FCF60E090E080E0F3CF809183 -:1021100066048111C1CF96CF80916804813A09F09D -:1021200091CF80916C0490916D04892B09F08ACF36 -:102130008091E800877F8093E8008091E80080FF2D -:10214000FCCF809174018093F1008091E8008E773C -:10215000B9CF80916804813209F074CF80916C040A -:1021600090916D04892B09F06DCF8091E800877FF5 -:102170008093E8000E944F0780916A048093740165 -:10218000109259040E94F70F5DCF8091680481324C -:1021900009F058CF8091E800877F8093E8000E9483 -:1021A0004F0780916B0480935A044CCF8091680450 -:1021B000813A09F047CF8091E800877F8093E8005B -:1021C0008091E80080FFFCCF80915A04BCCF80381A -:1021D00099F0823809F076C080916C048F70873056 -:1021E00008F070C08093E9008091EB0085FB8827A0 -:1021F00080F91092E90006C0809164049091650412 -:10220000911182609091E800977F9093E80080930D -:10221000F1001092F1008091E8008E77B5C188231B -:1022200009F4A2C1823009F04DC080916A04811185 -:10223000A6C180916C048F702FEF280F263008F014 -:1022400041C08093E9002091EB0020FF98C19330BA -:1022500031F48091EB0080628093EB0090C190910B -:10226000EB0090619093EB0021E030E001C0220F81 -:102270008A95EAF72093EA001092EA008091EB0039 -:102280008860EACF81111EC010916A041F77809187 -:10229000E3008078812B8093E3008091E800877FC2 -:1022A0008093E8000E944F078091E80080FFFCCFF8 -:1022B0008091E30080688093E30082E0111183E065 -:1022C000809366048091E80083FF0AC08091E80053 -:1022D000877F8093E8008091EB0080628093EB0021 -:1022E000AA960FB6F894DEBF0FBECDBFDF91CF9197 -:1022F0001F9108958058823028F720916A04309108 -:102300006B042C3DE3E03E07A1F583E08A838AE27B -:1023100089834FB7F894DE01139620E03EE051E246 -:10232000E32FF0E050935700E49120FF03C0E295C3 -:10233000EF703F5FEF708E2F90E0EA30C0F0C796ED -:102340008D939D932F5F243159F74FBF8091E80003 -:10235000877F8093E8006AE270E0CE0101960E94D8 -:1023600001088091E8008B778093E800ABCFC0969E -:10237000E7CF80916C0490916D04432F5527433033 -:10238000510509F44AC078F54130510509F47AC085 -:102390008BE590E0EEEEFBE04230510509F092CF84 -:1023A0002091E800277F2093E80020916E0430916F -:1023B0006F048217930708F49C0140E02115310552 -:1023C00009F065C0411163C08091E80082FDC9CF6A -:1023D00080916604882329F2853019F28091E80003 -:1023E00083FFF2CFBECF4132510509F43CC04232E7 -:1023F000510509F067CF8330910508F063CFFC01E8 -:10240000EE0FFF1FEF5DFD4F0190F081E02D825E2A -:102410009D4FDC018C9190E01AC0332721303105AB -:10242000D1F02115310561F02230310509F04ACF94 -:10243000EBE5FCE0E4918E2F90E0EBE5FCE007C0DB -:10244000EDE8FCE0E4918E2F90E0EDE8FCE00097F1 -:1024500009F438CFA5CFEBE7FCE0E4918E2F90E0B4 -:10246000EBE7FCE0F4CF8330910508F02BCF880F29 -:10247000991FFC01E95DFD4F0190F081E02D89E09D -:1024800090E08ECF82E190E0E9E4FCE089CF80919A -:102490006604882309F465CF853009F462CF809102 -:1024A000E80083FD5ECF8091E80082FD8DCF8091B2 -:1024B000E80080FF83CF9091F3008091F200211516 -:1024C000310519F08830910550F041E0089709F086 -:1024D00040E08091E8008E778093E8006FCF4491D0 -:1024E0004093F1003196215031090196E8CF8038B0 -:1024F00009F0E8CE8091E800877F8093E800809122 -:1025000067048093F10087CE8111DCCE10916A04BC -:10251000123008F0D7CE8091E800877F8093E800E2 -:10252000109367040E944F07112311F084E005C047 -:102530008091E30087FDFACF81E08093660442E05A -:1025400061EC81E00E946E0742E261EC84E00E944F -:102550006E0742E261EC82E00E946E0742E260ECAC -:1025600083E00E946E07AECE80916A04813009F04C -:10257000A9CE81E0933009F080E080936504109249 -:10258000E9008091E800877F8093E8000E944F0770 -:1025900099CE1F93CF93DF93162FC0917806D091D9 -:1025A00079068A30D1F420913D04CE0188579440B9 -:1025B000622F70E00E94CE32281B822F66E00E94BC -:1025C000E232C82FC15020F4DF91CF911F910895BE -:1025D00060E080E20E94C912F5CF8D30E9F4C8575F -:1025E000D44020913D04622F70E0CE010E94CE3293 -:1025F000281B822F9E01280F311D2115324018F013 -:1026000080E0D0E0C0E0C80FD11DC858DB4FD093A8 -:102610007906C0937806D8CF96E0FE01AEE3B4E029 -:1026200001900D929A95E1F7803E90F186E0FE01CF -:1026300011928A95E9F7C0917806D0917906111127 -:1026400033C046E050E0BE018EE394E00E941833B0 -:102650009E0128573440892B91F52A5F3F4F4091C6 -:102660003D04642F70E0C9010E94CE32481B463001 -:1026700010F4240F311D211572E0370710F030E0FF -:1026800020E028583B4F30937906209378069CCF62 -:10269000F6E08F9FB00111246655794F46E050E077 -:1026A000CE010E940F33C7CF9E012A5F3F4FFE012C -:1026B0002E173F0731F2808180958193F9CFC901B0 -:1026C00045E0969587954A95E1F741E050E0BA01DB -:1026D00002C0660F771F8A95E2F7CB0160917604FE -:1026E00070917704862B972BB9016B5F7F4FE5E0E4 -:1026F00076956795EA95E1F702C0440F551F6A95F4 -:10270000E2F7842B952B9093770480937604A5CFE2 -:10271000FF920F931F93CF93DF93EC01F62EFC01F2 -:1027200001900020E9F78F0101501109C017D1076E -:1027300030F0DF91CF911F910F91FF9008956F2D91 -:1027400089910E94C912F2CFCF93DF93C3EED2E0FA -:1027500060E0CE010E9442332196C11584E0D80783 -:10276000B9F7DF91CF9108956F927F928F929F92E8 -:10277000AF92BF92CF92DF92EF92FF920F931F938F -:10278000CF93DF938AEAC82E86E0D82E91ECE92E0B -:10279000F12CE701CC58D10936011BC0F501859019 -:1027A0009490692DC8010E944233682DC80101969A -:1027B0000E94423382E0A80EB11C0E5F1F4FC0176B -:1027C000D10761F78EE0680E711C2E96CE15DF05DD -:1027D00029F08E010E5011095301E0CF7E018CE8E3 -:1027E000E80EF11C8CE8C80ED11C8DE7E81683E0DA -:1027F000F80679F6DF91CF911F910F91FF90EF903E -:10280000DF90CF90BF90AF909F908F907F906F9010 -:102810000895CF93C82F6FEF811161E283E290E0BA -:102820000E9442336FEFC11161E184E290E00E94A7 -:1028300042336FEFC11162E185E290E0CF910C94D9 -:10284000423380E00E94091460E086E290E00E943A -:1028500042330E94B4130E94A41381E00C94091423 -:102860000F931F93CF93DF93C42FD0E0CC0FDD1FC6 -:102870002EE0629FC00DD11D11243CE8839FC00D46 -:10288000D11D1124CE0187960E942E33082F10E00F -:10289000102F0027CE0188960E942E339801282BF6 -:1028A000C901DF91CF911F910F910895462F853077 -:1028B00038F47A3028F4673018F4672F0C94301409 -:1028C00090E080E00895CF92DF92FF920F931F93E4 -:1028D000CF93DF936C010091700480919202082BDA -:1028E000C7E0D0E010E0FC2EC8010C2E02C0959588 -:1028F00087950A94E2F780FD0CC02197A0F7F12C90 -:102900008F2DDF91CF911F910F91FF90DF90CF908E -:102910000895B6018C2F0E9456140E94D609019783 -:1029200061F3EECFCF93DF93EC010E946314BE01FD -:102930000E945614DF91CF910C94D609FC0180813E -:1029400091810E949214292F2F7092959F7092501E -:102950009E3078F4E92FF0E0EA55FB4C0C940233FA -:10296000803F19F020F4883E20F481E00895843FF0 -:10297000E1F380E00895883EC0F3813FD1F7F5CFC1 -:10298000822F869586958695089583E290E00E9431 -:102990002E33813289F484E290E00E942E3381311B -:1029A00059F485E290E00E942E3391E0823109F0E3 -:1029B00090E0892F8170089580E0FCCFCF92DF9264 -:1029C000EF92FF926B017C010E94CC08B701A60137 -:1029D00088E090E0FF90EF90DF90CF900C9454331C -:1029E000AF92BF92CF92DF92EF92FF920F931F931D -:1029F000CF93DF9300D00F92CDB7DEB7082FF62E1E -:102A0000142FE22E8091710480FF4FC0E82FE695CD -:102A1000AE2FB0E0AE5EBD4F9C91909359038E7F78 -:102A2000823009F056C0413A08F040EA9E012F5F1B -:102A30003F4F6F2D802F0E94E2088091710480FF2C -:102A400011C02B8139814A8180917101909172016D -:102A500053E0859FF0011124E15AFC4F891798F14A -:102A60000E94E40E80917204801308C08091730468 -:102A70008F1104C080917404811729F080915B0349 -:102A8000826080935B0300937204F092730410934E -:102A90007404EE2051F06091710470917204809181 -:102AA0007304909174040E94DE140F900F900F90A5 -:102AB000DF91CF911F910F91FF90EF90DF90CF901A -:102AC000BF90AF9008954183308322838F5F339608 -:102AD000C5CF923039F6E2508E2F8170D82EE69510 -:102AE000F0E0E55AF94FA590B490C12CBB24609159 -:102AF0007301C61608F0B4CF2C2D30E0A29EC001A1 -:102B0000A39E900DB29E900D112470E00E94CE32D3 -:102B1000802FD11016C0860F40917101420F532FA4 -:102B2000511D9A01220F331F240F351F215A3C4F8C -:102B3000412F113A08F040EA6F2D0E94E208C39439 -:102B4000D6CF861BE9CFE1E7F4E0438121E1421BC8 -:102B500008F440E021E0628181810C94F014E1E707 -:102B6000F4E0438121E1420F08F44FEF21E062815C -:102B700081810C94F014E1E7F4E0628121E1621BB1 -:102B800008F460E021E0438181810C94F014E1E7D6 -:102B9000F4E0628121E1620F08F46FEF21E04381EC -:102BA00081810C94F014E1E7F4E0818121E043811C -:102BB000628188500C94F014E1E7F4E0818121E017 -:102BC00043816281885F0C94F0148091750488239E -:102BD00019F08150809375046091710470917204B2 -:102BE00080917304909174040C94DE1480917504A8 -:102BF000833018F48F5F8093750460917104709135 -:102C0000720480917304909174040C94DE1490917A -:102C1000710490FF27C0917081111DC09260909344 -:102C2000710480915B03816080935B03662351F0A4 -:102C30006091710470917204809173049091740496 -:102C40000E94DE1420E0409174046091730480912E -:102C500072040C94F0148C3010F09661E0CF880F61 -:102C6000982BDDCF089521E030E0A90102C0440F88 -:102C7000551F8A95E2F7CA0120915C03662391F003 -:102C8000822B80935C0380915B03806180935B0364 -:102C900080915A03811109C08091710460E086958A -:102CA0000C94071680958223ECCF0895CF93DF9381 -:102CB000C82FC17082FBDD27D0F981FB662760F940 -:102CC00085E00E94331661E06C2786E00E9433168F -:102CD0006D2F87E0DF91CF910C9433160F931F93E4 -:102CE000CF93C82F61E08111682F617080E00E944E -:102CF0003316C1FB662760F9C11101C060E081E0B5 -:102D00000E943316C2FB662760F9C11101C060E062 -:102D100082E00E943316C3FB662760F9C11101C02F -:102D200060E083E00E943316C4FB662760F9C1119E -:102D300001C060E084E00E9433164C2F50E070E048 -:102D400060E0DB01CA01F4E0B695A79597958795F9 -:102D5000FA95D1F70097A105B10549F1AC01BD0184 -:102D600084E08A019B01E2E0369527951795079547 -:102D7000EA95D1F7011511052105310519F08E5F8E -:102D8000B901A8017695679557954795452B462B30 -:102D9000472B09F08F5F8230A1F158F48823D1F0DE -:102DA000813041F18C2FCF911F910F91089580E0D8 -:102DB000D8CF833059F18430A9F720E040E56FEF98 -:102DC0008AED0E94F01480910001882359F310923B -:102DD00032030DC020E040E56FEF82E30E94F01463 -:102DE00080910001882399F381E0809332030E944F -:102DF0003E0DD8CF20E040E56FEF8CEF0E94F0143D -:102E0000D1CF20E040E56FEF80E5F8CF20E040E54E -:102E10006FEF86E7F3CF0E946E16809370040C94D8 -:102E2000B50B80917004982F9670963019F48860D5 -:102E30000C940B17877FFCCF21E030E001C0220FFC -:102E40008A95EAF720958091700482230C940B17E1 -:102E500021E030E001C0220F8A95EAF780917004EA -:102E6000822B0C940B17809171048695815009F484 -:102E70008BE061E00C9407168091710486958F5F5A -:102E80008C3008F081E061E00C94071680917104A9 -:102E900080FF07C0869582588F77893010F40C9494 -:102EA0003C1761E082E00C940716E1E7F4E083E070 -:102EB000808311828FEF828380EA83831482A9E565 -:102EC000B3E012968C911297836012968C93608176 -:102ED0007181828193810C94DE1469EE7EEF90E023 -:102EE00080E00E94603360E082E090E00E94423324 -:102EF00060E083E090E00E9442331092920260E032 -:102F000084E090E00E94423360E082E290E00E9420 -:102F1000423360E085E090E00E94423360E086E06A -:102F200090E00E9442336FEF87E090E00E944233CE -:102F300040E050E0BA0188E090E00E94543360E045 -:102F40008DE090E00E94423340E050E0BA0188E119 -:102F500090E00E94543360E087E190E00E944233A9 -:102F600040E050E0BA018CE190E00E94543370E000 -:102F700060E080E290E00E94603340E050E0BA01FF -:102F800088E190E00E94543380E00E9409140E947E -:102F9000211440E050E0BA018FE090E00E945433E9 -:102FA00040E050E0BA0183E190E00C9454330F9379 -:102FB0001F93CF93DF9300D000D0CDB7DEB7409101 -:102FC000C5025091C6026091C7027091C8022FB726 -:102FD000F8948091510490915204A0915304B091BF -:102FE00054042FBF841B950BA60BB70B8436910599 -:102FF000A105B10588F10E949C0E882379F10E94F9 -:1030000062086E5F7F4F8F4F9F4F69837A838B83F8 -:103010009C8380912C0190912D0181559D4F409171 -:103020002B0150E04530510510F044E050E0BE0166 -:103030006F5F7F4F0E94253384E090E00E941A3238 -:10304000892BD9F40E9462086093C5027093C6026E -:103050008093C7029093C80281E010C00E9462086A -:103060000091D2021091D3022091D4023091D50266 -:10307000600F711F821F931FC4CF80E00F900F90CD -:103080000F900F90DF91CF911F910F9108958F9224 -:103090009F92AF92BF92CF92DF92EF92FF920F93E7 -:1030A0001F93CF93DF93EB0188809980AA80BB8028 -:1030B0009FB7F894C0905104D0905204E09053040C -:1030C000F09054049FBFC818D908EA08FB0894E69A -:1030D000C916D104E104F10410F4442311F1E82EDF -:1030E000082E000CFF089AE08902F0011124EF5F1E -:1030F000FE4F8381948181559D4F428150E004179A -:10310000150708F4A801B9010E942533C7010E94E0 -:103110001A32892BA1F40E946208688379838A831A -:103120009B8381E0DF91CF911F910F91FF90EF90F2 -:10313000DF90CF90BF90AF909F908F90089580E0E8 -:10314000F1CF0F931F93CF93DF930F92CDB7DEB7DD -:103150008091480489832091C40290E041E02817BF -:10316000190609F440E001E010E09E012F5F3F4F97 -:103170006DEC72E086E00E9447180F90DF91CF91CE -:103180001F910F9108950F931F93CF93DF93CDB7A6 -:10319000DEB729970FB6F894DEBF0FBECDBF85E02E -:1031A000E1E7F4E0DE01119601900D928A95E1F7D6 -:1031B0008091590390915A03A0915B03B0915C03F5 -:1031C0008E839F83A887B98741E08885811101C0DC -:1031D00040E009E010E09E012F5F3F4F69EC72E094 -:1031E00085E00E944718811110925B0329960FB663 -:1031F000F894DEBF0FBECDBFDF91CF911F910F912D -:1032000008956F927F928F929F92AF92BF92CF92CA -:10321000DF92EF92FF920F931F93CF93DF930F9262 -:10322000CDB7DEB7862E5A016901682E880F770860 -:10323000C3010E941A32892B09F088C08AE0869D5A -:10324000F001879DF00D1124EF5FFE4F458150E0A6 -:103250004115510511F041E050E08AE0869DF001F2 -:10326000879DF00D1124EF5FFE4F668177816155D8 -:103270007D4FCE0101960E942533F5014081518199 -:10328000628173812FB7F894809151049091520418 -:10329000A0915304B09154042FBF841B950BA60B2F -:1032A000B70B84369105A105B10540F4B701C801FB -:1032B0000E94B1089981891709F44FC0082C000CAD -:1032C0009908C4010E941A32892B91F0B12C8B2DE0 -:1032D0000F90DF91CF911F910F91FF90EF90DF90B2 -:1032E000CF90BF90AF909F908F907F906F900895F8 -:1032F0008AE0889DF001899DF00D1124EF5FFE4F5B -:10330000458150E0E416F50608F4A7018AE0889D9F -:10331000F001899DF00D1124EF5FFE4F66817781EA -:1033200061557D4FC6010E942533B701C8010E9437 -:10333000B10899818913CACF0E946208F5016083A0 -:10334000718382839383BB24B394C1CFB12CA70133 -:10335000B801C6010E942533BACFBB24B394F7CF7E -:10336000CF92DF92EF92FF920F931F93CF93DF9351 -:1033700000D000D00F92CDB7DEB76B0185E0E82E0C -:10338000F12C00EB12E09E012F5F3F4F47EA52E025 -:1033900061E080E00E940119882349F095E0FE0178 -:1033A0003196A2EAB2E001900D929A95E1F795E08C -:1033B000E2EAF2E0D60101900D929A95E1F70F90C2 -:1033C0000F900F900F900F90DF91CF911F910F9161 -:1033D000FF90EF90DF90CF90089590E080E00E9402 -:1033E0003C33893E9E4F11F40C94C51480E008953F -:1033F0001F920F920FB60F9211242F933F934F936A -:103400005F936F937F938F939F93AF93BF93CF936C -:10341000DF93EF93FF93D091E900DF708091EC0090 -:10342000C82FC17080FDC0E81092E9008091F000C3 -:10343000877F8093F00078940E9400101092E9003A -:103440008091F00088608093F000CD2BCF70C09306 -:10345000E900FF91EF91DF91CF91BF91AF919F91E3 -:103460008F917F916F915F914F913F912F910F902D -:103470000FBE0F901F9018951F920F920FB60F92CC -:1034800011242F933F934F935F936F937F938F9369 -:103490009F93AF93BF93EF93FF938091E10082FFDF -:1034A00009C08091E20082FF05C08091E1008B7F1E -:1034B0008093E1008091DA0080FF24C08091D800E1 -:1034C00080FF20C08091DA008E7F8093DA008091A7 -:1034D000D90080FF9BC080E189BD82E189BD09B42C -:1034E00000FEFDCF81E08093660480915804811135 -:1034F00009C00E94D5060E94A0078091E200846066 -:103500008093E2008091E10080FF17C08091E2008B -:1035100080FF13C08091E2008E7F8093E200809153 -:10352000E20080618093E2008091D8008062809305 -:10353000D80019BC85E0809366048091E10084FF87 -:1035400029C08091E20084FF25C080E189BD82E12D -:1035500089BD89B5982F917080FFFBCF8091D800ED -:103560008F7D8093D8008091E1008F7E8093E10071 -:103570008091E2008F7E8093E2008091E200816082 -:103580008093E20080916704882309F445C084E0B9 -:10359000809366048091E10083FF27C08091E20060 -:1035A00083FF23C08091E100877F8093E10082E068 -:1035B00080936604109267048091E1008E7F80936F -:1035C000E1008091E2008E7F8093E2008091E20032 -:1035D00080618093E20042E060E080E00E946E073C -:1035E0008091F00088608093F000FF91EF91BF918F -:1035F000AF919F918F917F916F915F914F913F918B -:103600002F910F900FBE0F901F90189519BC10921C -:1036100066041092580476CF8091E30087FD93E012 -:1036200090936604B7CF78941F921FB61F9211240F -:103630008F939F93AF93BF938091510490915204C5 -:10364000A0915304B09154040196A11DB11D809323 -:10365000510490935204A0935304B0935404BF9127 -:10366000AF919F918F911F901FBE1F9018959C0145 -:103670004FB7F8948091510490915204A091530453 -:10368000B09154044FBF821B930B08952FB7F89449 -:103690008091510490915204A0915304B09154042C -:1036A0002FBF08955F926F927F928F929F92AF92F9 -:1036B000BF92CF92DF92EF92FF920F931F93CF931F -:1036C000DF9300D000D00F92CDB7DEB76C01FC01C4 -:1036D00083819481892B31F08081918189238F3F6F -:1036E00009F05EC50F900F900F900F900F90DF9133 -:1036F000CF911F910F91FF90EF90DF90CF90BF90EF -:10370000AF909F908F907F906F905F9008950E94F0 -:103710006314182F682F89819A810E94890B69810F -:103720007A81812F0E9456148C01F60182818823B0 -:1037300009F42BC5C80182519F45409708F0EEC49B -:103740008FEF93E00E942E33025193EEA92E92E068 -:10375000B92E8111C7CF01113AC01C821B82662489 -:1037600063948AE0582E85010F5F1F4FC5010E94A8 -:103770002E3389831A82882309F4B4CF9FEF980FE0 -:103780009330A0F58A83698232E0A30EB11CC80190 -:103790000E942E338B83882309F4A4CF8E010F5F00 -:1037A0001F4FF80120812223F1F2213009F058C087 -:1037B000918182819130E1F40E5F1F4F6AE070E0E9 -:1037C000893311F460E570E00E94CF0E17C0A11498 -:1037D000F4E0BF0609F486CFC5010E942E338111A3 -:1037E00001C001502FEFA21AB20AB5CF5801D6CFAF -:1037F000923039F40E5F1F4F0E94150C0F5F1F4F60 -:10380000D0CF933029F40E5F1F4F0E94DC0BF6CF10 -:10381000943019F00F5F1F4FF1CF0E5F1F4F30E054 -:1038200020E0B8016F5F7F4FF80141818053990B11 -:103830008A30910550F02150310900F38FE99FE063 -:103840000197F1F700C00000F6CF529EF001539EA1 -:10385000F00D11249C012E0F3F1F842F8B01E1CF0F -:10386000E22FF0E0E75FFD4F7490822F86958695FA -:10387000869590E0FC01E750FE4FE4902770F12C14 -:10388000022E02C0F594E7940A94E2F7E1E0EE22FA -:10389000FF24FC01E751FE4FC490D12C022E02C040 -:1038A000D594C7940A94E2F7F1E0CF22DD24FC011D -:1038B000E752FE4F8490912C02C0959487942A95EC -:1038C000E2F721E082229924E114F10419F081EE5B -:1038D0000E94150CC114D10419F086EE0E94150C3B -:1038E00039E36AE070E0731202C060E570E0872D92 -:1038F0000E94CF0ECD2819F086EE0E94DC0BEF2837 -:1039000019F081EE0E94DC0B892809F477CF6AE078 -:1039100070E08CE259CF81E00E94281703C081E05B -:103920000E941C170F900F900F900F900F90DF9137 -:10393000CF911F910F91FF90EF90DF90CF90BF90AC -:10394000AF909F908F907F906F905F900C94111725 -:1039500082E0E2CF043F110509F455C108F057C1D8 -:10396000053E110509F4DDC0F601928191113CC2BA -:103970008091590482720A3CFCE51F0709F414C2C5 -:1039800008F06AC1053C3CE5130709F4F9C108F0E9 -:103990004EC1033C5CE5150709F4D3C108F0EBC147 -:1039A000023C1C4509F47DC1F60100811181992377 -:1039B00009F434C2C8010E946314F82E682FC801AC -:1039C0000E94890BB8018F2D0E9456140E94D609BF -:1039D000182FB82EF60122814581342F32953F7081 -:1039E000892F82958F70E82EF12C8C3008F04EC212 -:1039F000F701EC54FB4C0C9402330338FFE51F072E -:103A000009F481C018F501383FE5130709F44AC0ED -:103A100008F065C000385FE5150709F0A5CF8823D9 -:103A200009F459C080919C02811106C081E0809305 -:103A30009C0282EE0E94150C0E94461B90939B02F2 -:103A400080939A028BE20E94150C8ECF05389FE579 -:103A5000190709F4BEC008F476C00638FFE51F0751 -:103A600009F082CF882309F4CEC06091590170918A -:103A70005A0190E080E00E947B3320E030E040E09B -:103A80005CE30E94DC3320E030E040E85FE30E942A -:103A900076338111B5C080EE90E090935A01809307 -:103AA0005901A1C08823A1F080919C02811106C018 -:103AB00081E080939C0282EE0E94150C0E94461BBE -:103AC00090939B0280939A0281EE0E94150CBACFCC -:103AD00081EE0E94DC0B8BE20E94DC0B45CF882339 -:103AE00009F442CF81EE0E94150C83EE0E94150C62 -:103AF0008FE40E94150C8FE40E94DC0B83EE0E9481 -:103B0000DC0B81EEE9CF882309F42ECF81EE0E94F1 -:103B1000150C83EE0E94150C80E50E94150C80E5C3 -:103B2000EBCF80933C0210933B0200933A02882330 -:103B300021F081E08093EE0217CF1092EE0214CFB5 -:103B400080933902F0CF882379F18091390288235C -:103B500049F080913A020E94DC0B80EE0E94150C25 -:103B60008AE20CC080913C028823D1F380913A0212 -:103B70000E94DC0B80EE0E94150C8CE40F900F90DD -:103B80000F900F900F90DF91CF911F910F91FF90A9 -:103B9000EF90DF90CF90BF90AF909F908F907F90ED -:103BA0006F905F900C94150C8AE20E94DC0B8CE401 -:103BB0000E94DC0B80EE0E94DC0B809139028111A7 -:103BC00005C080913C02882309F48CCD80913A0293 -:103BD000D5CF8823C1F080913203882339F0109229 -:103BE0003203109200010E943E0DBECE8091000172 -:103BF0008111F7CF81E08093320380930001F3CFEE -:103C000080E890E04ACF61E00E949A0CADCE62E07D -:103C1000FBCF64E0F9CF882321F081E08093ED02AF -:103C2000A3CE1092ED02A0CE1092F0029DCE073CE2 -:103C30002CE5120709F4AEC008F4A7C0083C4CE517 -:103C4000140709F4ACC0093C1C4509F0ADCE43EAA9 -:103C500055E16FEA75E179C0043DECE51E07A8F473 -:103C60000E3CFCE51F0708F03DCD0C3C2CE512078F -:103C700009F49FC045EE55E166EF75E10D3C1C452A -:103C800008F463C061E081E046C0053D4CE51407DF -:103C900009F428CD08F492C00D351D4509F422CD54 -:103CA00083CE8091710480FF31C08E7F8093710438 -:103CB0006091710470917204809173049091740406 -:103CC0000E94DE1480915B03816080935B039FEF11 -:103CD000E0E7F2E09150E040F040E1F700C0000082 -:103CE0000F900F900F900F900F90DF91CF911F9139 -:103CF0000F91FF90EF90DF90CF90BF90AF909F908B -:103D00008F907F906F905F900C94E40E8160809311 -:103D1000710461E086950F900F900F900F900F90B7 -:103D2000DF91CF911F910F91FF90EF90DF90CF9097 -:103D3000BF90AF909F908F907F906F905F900C940A -:103D4000071643E357E16CE377E10F900F900F9074 -:103D50000F900F90DF91CF911F910F91FF90EF90F7 -:103D6000DF90CF90BF90AF909F908F907F906F909B -:103D70005F900C94C7084CE357E163E377E1E5CF2C -:103D800043ED55E16CED75E1E0CF4CED55E163EDB0 -:103D900075E1DBCF4BEB55E167EC75E1D6CF47EC36 -:103DA00055E16BEB75E1D1CF4FEA55E163EA75E17F -:103DB000CCCF46EF55E165EE75E1C7CF0F900F9080 -:103DC0000F900F900F90DF91CF911F910F91FF9067 -:103DD000EF90DF90CF90BF90AF909F908F907F90AB -:103DE0006F905F900C9446170E3D1C4509F0DCCD9A -:103DF0000F900F900F900F900F90DF91CF911F9128 -:103E00000F91FF90EF90DF90CF90BF90AF909F9079 -:103E10008F907F906F905F900C946D17C8010E94F7 -:103E2000610BF82ECFCD092F0F70907F11F0029506 -:103E3000007F812F2223C9F0002369F090E2910FC7 -:103E4000983010F011110BC080915904082B009389 -:103E500059040E94400B812F0E94150C17C08091BD -:103E60009102082B00939102F4CF0E94DC0B0023F7 -:103E700069F00095105E183010F0B11027C08091E5 -:103E800059040823009359040E94400B98E0E91A52 -:103E9000F108E4E0EE16F10408F024CC0E94BF0E15 -:103EA0000F900F900F900F900F90DF91CF911F9177 -:103EB0000F91FF90EF90DF90CF90BF90AF909F90C9 -:103EC0008F907F906F905F900C9456168091910226 -:103ED000082300939102D8CF892F8F70907F903262 -:103EE00011F08295807FF1E0BF120CC0222329F0EF -:103EF000333060F60E94D20BC9CF323038F60E94C0 -:103F0000C70BC4CF222341F03323A1F340FFA3CF3B -:103F10004F70F6014583EECF332389F3193309F04F -:103F2000F5C0FFEF27EE33E0F15020403040E1F7DD -:103F300000C00000812F0E94DC0BA8CF892F86953E -:103F40008695837061F0813009F0A0CF812F937046 -:103F5000211102C090E080E00E946E0897CF812F6F -:103F60009370211102C090E080E00E9484088ECFFF -:103F7000892F8370A1F5211189CF812F8295869594 -:103F80008770880F880F412F4F70082E01C0440F93 -:103F90000A94EAF7212F207114FF07C02FE030E0C8 -:103FA00001C0220F8A95EAF7209596959695937011 -:103FB000923081F0822F842B933030F480919202E2 -:103FC000913029F0242B82230E94C30B5FCF842BD6 -:103FD000822BFACF242B809192028227F5CF8695EF -:103FE000222311F0892F8170882309F44FCF812F6C -:103FF000829586958770880F880F412F4F70082E05 -:1040000001C0440F0A94EAF7212F207114FF07C062 -:104010002FE030E001C0220F8A95EAF720959695AF -:1040200096959370923081F0822F842B933030F4E8 -:1040300080917004913029F0242B82230E940B1769 -:1040400025CF842B822BFACF242B809170048227DA -:10405000F5CF092F0F70222329F0802F0E942817F7 -:10406000812F48CF812F0E94C70B802F0E941C17E1 -:104070000DCF812FE1EF1E1789F1E11750F0F0EF1E -:104080001F17B9F02223B1F13111E5CE892F8F71BD -:1040900029C042EF141749F153EF1513F3CF80E015 -:1040A000222361F29F7181E001C0880F9A95EAF79F -:1040B000C5CF222379F0323008F0E8CE292F2F71B6 -:1040C00081E090E001C0880F2A95EAF79091700492 -:1040D0008927B4CF333008F0D9CEF0CF892F8F7134 -:1040E000222321F20E942817D1CE892F8F712223FB -:1040F000C9F3BCCF332379F0893341F48FEF97EEC6 -:10410000E3E081509040E040E1F712CF8FE39CE97B -:104110000197F1F70DCF892F8F71A8CF0031FFE5FF -:104120001F0709F4F8CB01312FE5120709F410CC71 -:104130000E9462086093F5027093F6028093F70282 -:104140009093F802F6018281063F110509F461CDD2 -:1041500008F053CC043E110509F45DCD08F0FACB0C -:10416000003E110509F457CD013E110509F4E8CCD4 -:104170000C32110509F0F8CB882309F455CD81E004 -:104180008093F00210926701EFCB00313FE51307F7 -:1041900009F4C5CB01314FE51407A1F682E0C0CB8D -:1041A00085E0DE01119601900D928A95E1F7F60106 -:1041B000228189819A812111AACA0E94610B182F3C -:1041C000AECA1F93CF93DF9380915D02807FA9F4E5 -:1041D00080915A02882389F080918F02D0915E02EB -:1041E0006091580270915902A0915B02B0915C02FB -:1041F000C62FC72316E0D81304C0DF91CF911F91BB -:10420000089590E0109711F0CF3F19F40196877050 -:10421000F2CF189F9001199F300D1124F901E15A36 -:10422000FD4F41814713F2CF40814613EFCF4281CA -:104230004111ECCF438154814A1B5B0B403A51053D -:1042400028F780915D028F70806180935D02F90193 -:10425000EC59FD4F80818F708061808388E592E00A -:104260000E94521BDF91CF911F910C94570BAF927C -:10427000BF92CF92DF92EF92FF920F931F93CF9353 -:10428000DF93CDB7DEB761970FB6F894DEBF0FBEF0 -:10429000CDBF8C0185E0F801DE011D9601900D92E5 -:1042A0008A95E1F7F801E28088E5A82E82E0B82E31 -:1042B00060915B0270915C026115710509F432C175 -:1042C0009091580240915902892F84238F3F09F41D -:1042D00029C120813181C380D480F0905A02F60137 -:1042E000E61BF70BFF2009F4E8C080915D02582F10 -:1042F000507FE03AF10508F0ABC0511177C0FE2CB9 -:10430000431321C092131FC0E1101DC08F70806144 -:1043100080935D02C5010E94521B80915D02F801ED -:1043200085838F2D61960FB6F894DEBF0FBECDBF8B -:10433000DF91CF911F910F91FF90EF90DF90CF9081 -:10434000BF90AF900895CD2829F0822F83238F3F0F -:1043500009F003C180E0F82FF170DF2E80FF3CC030 -:1043600080918F0240915E0256E0841315C02D8724 -:104370003E878D859E850E949214292F22952F704D -:104380002230F0F0243018F59F70F1F0F80195819B -:10439000907FD1F4D12C1EC090E0589FF001599F1E -:1043A000F00D1124E15AFD4F6181361306C0608182 -:1043B000261303C06281E6120FC001968770D5CF25 -:1043C0009F7011F0882331F3805E883018F3C801A4 -:1043D0000E94521BFD2CA5CFEE2009F4A2CF8091A4 -:1043E0005D02816080935D02F12C9BCF431306C078 -:1043F000921304C0F801EE2009F479C0C8010E94AC -:104400009E14882309F1EE20F9F080915D0280323C -:1044100070F0209158023091590238872F83198605 -:10442000DB86CA868C87CE0107960E94521B86E0E7 -:10443000F801A8E5B2E001900D928A95E1F70E949B -:10444000E120FF24F3946DCFC8010E94521BF9CFE5 -:1044500051110AC088E592E00E94521B86E0F501E6 -:1044600011928A95E9F7C0CF43130FC092130DC084 -:10447000E1100BC0F8018583C8010E94521B86E041 -:10448000F50111928A95E9F74CCFC8010E949E145C -:104490008823D1F2EE20C1F280915D02803238F2A1 -:1044A00020915802309159023A8329831B82DD8280 -:1044B000CC828E83CE010196B8CFE03AF105F8F6B2 -:1044C000FE2CEE2009F243131FC092131DC08091F1 -:1044D0005D0280FD10C0982F907F69F0F801858300 -:1044E000903F31F0982F907F905F8F70892B85835C -:1044F000C8010E94521B86E0F801A8E5B2E00190D5 -:104500000D928A95E1F70DCFC8010E949E1481118A -:104510008ECF80915D02816080935D02C8010E9410 -:10452000521BFFCEEE2009F48FCFC8010E949E14CB -:10453000F82E882309F488CF86E0F801A8E5B2E0D8 -:1045400001900D928A95E1F780915802909159025D -:104550000E9492140E94E120E4CE81E08E25FBCEE1 -:104560001F93CF93DF93CDB7DEB767970FB6F8945D -:10457000DEBF0FBECDBF4B8B5C8B6D8B7E8B8F8B6D -:104580006111109291021A8A198A85E0FE017396D0 -:10459000DE011D9601900D928A95E1F786E0FE01FD -:1045A0003D96DE01179601900D928A95E1F7CE01B6 -:1045B00007960E943721882389F016E080918F02A8 -:1045C00090915E0289134BC067960FB6F894DEBFD8 -:1045D0000FBECDBFDF91CF911F91089586E0FE0100 -:1045E0003796DE01119601900D928A95E1F78A8542 -:1045F0009B85892B11F38F81988589238F3FE9F261 -:1046000020915E0230E0C9010196877099274091A0 -:104610008F024817190681F4109259040E94F70F6F -:1046200010925E0210928F0286E0E8E5F2E0DF0170 -:104630001D928A95E9F7C1CF96E0929FD001939F92 -:10464000B00D1124A15ABD4FFE01319601900D927B -:104650009A95E1F780935E020E94570BAECF819F3F -:10466000C0011124815A9D4F0E943721882309F4EB -:10467000ABCF80918F0290E001968770992780934D -:104680008F029CCF9F92AF92BF92CF92DF92EF9218 -:10469000FF920F931F93CF93DF93CDB7DEB764974D -:1046A0000FB6F894DEBF0FBECDBF8E010F5F1F4F58 -:1046B0008AE0D8011D928A95E9F79EE4C92E91E01F -:1046C000D92EF12CE12CAA24A394B12CF6018191CE -:1046D0006F018F3F09F44AC0F894E82FE295EF701C -:1046E000F0E021A18F70A50102C0440F551F8A95EB -:1046F000E2F7CA01922F982B91A392A1809589236A -:1047000082A30E947A0900C0E7E4F1E030E020E0F3 -:10471000912C41914F3F09F47DC0A42FA295AF7019 -:10472000B0E090968C9190E04F7002C0959587957F -:104730004A95E2F780FD6EC08A2D022E01C0880FD7 -:104740000A94EAF7982A2F5F3F4F2730310509F77F -:10475000F601319780818F3F11F00E947C0950EA69 -:104760005A95F1F7F801EE0DFF1D90828FEFE81AD0 -:10477000F80A95E0E916F10409F0A8CF4AE050E004 -:10478000B80188ED92E00E9418337C01892B41F03A -:104790008AE0F801A8EDB2E001900D928A95E1F768 -:1047A0001091E302E114F104B9F181E080939502E4 -:1047B0000E94461B909394028093930280919302EF -:1047C000909194020E94371B069770F0A8EDB2E01A -:1047D000E12FF0E0E15BFC4F8D91819322E0AD3D54 -:1047E000B207D1F71092950281E090E0EF28C1F076 -:1047F00064960FB6F894DEBF0FBECDBFDF91CF91A8 -:104800001F910F91FF90EF90DF90CF90BF90AF90EE -:104810009F90089580E096CF809195028111CECF30 -:104820000E949C0EB82EE091E302882309F4C7C0D1 -:104830008E01005F1F4F85E0D8011D928A95E9F730 -:10484000F0E09F01215B3C4F79018091D102AE01E4 -:104850004B5E5F4F6A018A3008F086C040EB59E139 -:10486000B801C7010E94580E882309F494C043EB95 -:1048700055E2B801C7010E94580E882309F48BC085 -:1048800047ED57E1B801C7010E94580E882309F48B -:1048900082C043EC58E1B801C7010E94580E88233A -:1048A00009F479C041EA58E1B801C7010E94580EE5 -:1048B000882309F470C01092D102E091E202F0E086 -:1048C000AF01415B5C4FD80110E0FA019191AF015B -:1048D0008D91981731F09F0121503109F9018083A2 -:1048E0001B2DCA16DB0689F780919C02882371F084 -:1048F00080919A0290919B020E94371B893E9340BF -:1049000028F082EE0E94DC0B10929C0288E9C82EEF -:1049100082E0D82EF12CE12CD6018D916D018823F7 -:10492000D1F08695F70109F447C0EC50FE4F808125 -:1049300091819C878B871D860E94461B8160782F02 -:104940009F878E87F601319710824B855C856D8538 -:104950008F850E94B022B2E0EB0EF11CE4E0EE166F -:10496000F104D1F6812F44CF809196029091970265 -:104970000E94371B843F914008F070CFA091E20263 -:10498000B0E0A15BBC4FF8011D921192CE16DF067C -:10499000D9F71B2DA9CF8091D1028F3F31F08F5FC6 -:1049A0008093D1028A3008F488CF0E94461B9093EE -:1049B000970280939602E2CFE051FE4FB8CFF0E02D -:1049C000E15BFC4FF89485E0A0EBB2E001900D9222 -:1049D0008A95E1F765E070E080EB92E00E94B10813 -:1049E0008093AF020E947A09F894E091EB02F0E024 -:1049F000E851FD4F80818B878093B60261E070E0C3 -:104A0000CE010B960E94B1088093B5020E947A09EC -:104A1000F894C090B702D090B802E090B902F0903C -:104A2000BA0280919D0290919E02A0919F02B09146 -:104A3000A002C816D906EA06FB06D1F0C0929D0274 -:104A4000D0929E02E0929F02F092A0020E949C0EE1 -:104A500081110EC00E946208C61AD70AE80AF90A34 -:104A6000C092D202D092D302E092D402F092D50248 -:104A70000E947A09F8948091C202882321F184FF70 -:104A800004C09091C30290935C0380FF0DC080919D -:104A9000BB0280FF25C090917104916090937104D6 -:104AA00060E086950E9407168091C20281FF09C0CE -:104AB00020E04091BE026091BD028091BC020E9444 -:104AC000F0141092C2020E947A09F8948091C402F4 -:104AD000882349F00E94B00D0E947A0980E088CEB8 -:104AE0000E94E20FE1CF0E94950DF6CFEF92FF9268 -:104AF0000F931F93CF93DF9300D000D00F92CDB7C9 -:104B0000DEB7162FE82EF12CC701880F991F6623F8 -:104B100039F18C509E4FFC01808191819A83898369 -:104B200001E00B830E94461B8160782F9D838C835C -:104B3000F701E856FD4F0127110F102B1083498113 -:104B40005A816B818D810F900F900F900F900F9075 -:104B5000DF91CF911F910F91FF90EF900C94B022B5 -:104B600080519E4FD8CFCF92DF92EF92FF920F935A -:104B70001F93CF93DF930F92CDB7DEB7EE24E3946C -:104B8000F12C06EB12E09E012F5F3F4F4BEA52E003 -:104B900063E082E00E940119082F882321F1C09070 -:104BA000E5028C2D90E09C0128513D4F790119813F -:104BB000F9018081181BD12E80E00AC0DA94F70138 -:104BC00080818F5F808360E08C2D0E947625802F0E -:104BD0001D14A4F3912F17FD90E0191B11110EC0A5 -:104BE00081110E943E0B802F0F90DF91CF911F917A -:104BF0000F91FF90EF90DF90CF9008951F5FF70126 -:104C000080818150808361E08C2D0E947625802FE9 -:104C1000E5CF1F921FB61F9211248F939F93AF93DE -:104C2000BF9380915004811113C0809151049091E1 -:104C30005204A0915304B09154044196A11DB11D9A -:104C40008093510490935204A0935304B09354045E -:104C5000BF91AF919F918F911F901FBE1F9018958C -:104C6000CDB7DEB7E9970FB6F894DEBF0FBECDBF64 -:104C700084B7877F84BF0FB6F894A89580916000B1 -:104C8000886180936000109260000FBE80E890E021 -:104C90000FB6F89480936100909361000FBE85B7C2 -:104CA000806885BF85B7806885BF88E799E0909365 -:104CB0002F0280932E020E94D5060E94A0078091A9 -:104CC000E20084608093E2007894809166048823F7 -:104CD000A1F01091E9001F709091EC00892F817074 -:104CE00090FD80E8182B1092E9008091E80083FD88 -:104CF0000E9400101F701093E90082E084BD93E0D1 -:104D000095BD9AEF97BD80936E001092D2021092DB -:104D1000D3021092D4021092D5020E94C5148111C0 -:104D200002C00E9421140E949C0E80935801809121 -:104D30005801882309F4C6C010926F0185E2809360 -:104D400070010E949C0E81110E940D3180915801CA -:104D500081112FC0FE01359686E0DF011D928A95F4 -:104D6000E9F786E6898387E98A8386EC8B8384E387 -:104D70008C8385E38D833497AEE4B1E0CE010B964E -:104D800021912D938E179F07D9F787E0E5E7F1E092 -:104D9000DE01919601900D928A95E1F7FE01B196A0 -:104DA000A7E4B1E0CE01889621912D938E179F073D -:104DB000D9F78091580195E0811190E09093E3023A -:104DC00085E0891B8093E2020EE411E0A3E5EA2E60 -:104DD000A1E0FA2EF80181918F018F3F11F00E941E -:104DE0007C09E016F106B1F707E411E0FEE4EF2ECE -:104DF000F1E0FF2ED8018D918D018F3F11F00E94BF -:104E00007C09E016F106B1F7E8EDF2E082EE92E0FF -:104E1000AFE4B3E011921D928E179F07D9F70E945D -:104E2000ED19811102C00E946D1782E090E00E948E -:104E30002E338093440384E090E00E942E33182F99 -:104E400082E290E00E942E33982F812F9093D70218 -:104E50008093D6020E944223EFE7FBEB3197F1F7F4 -:104E600000C000000E94422380914F0380FF2EC0AB -:104E70006FEF7FEF90E080E00E94603381E08093ED -:104E8000E00080E28093D8001092C9008FE19EE498 -:104E90000197F1F700C0000087E090EBDC01809300 -:104EA0007A0690937B06A0937C06B0937D0688E1FA -:104EB0009CE00FB6F894A895809360000FBE909385 -:104EC0006000FFCF85E280936F0139CF83E090E0EF -:104ED0000E942E330E94C30B809170040E946E16B4 -:104EE0000E949C0E811102C00E94103183E08093C9 -:104EF0001A0380E280933D040E940E2F6DE070E063 -:104F00008CE992E00E94650D892BE9F580911A03E6 -:104F100063E070E081FD9EC289E992E00E94650D28 -:104F2000892B89F56DE070E089E892E00E94650DBB -:104F3000892B49F50E9462086058774C8E4F9F4F2D -:104F4000609344047093450480934604909347040F -:104F5000E8E7F4E080E092E0DF019C011D9221503F -:104F60003040E1F7F0937906E09378068FEF9FEFFA -:104F7000909377048093760481E080934904809332 -:104F8000480410921B038091E402811136C00E94F4 -:104F9000ED19811104C00E946D170E94551788E019 -:104FA00090E00E9436336093710470937204809392 -:104FB00073049093740480915B03836080935B031C -:104FC0006E7F71F40E94551788E090E00E9436339E -:104FD00060937104709372048093730490937404CB -:104FE0000E94CC088091710480FF04C060E0869527 -:104FF0000E94071681E08093E4028091580181119C -:1050000006C084EF8093660185EF8093650120914F -:105010006601A22FA295AF70B0E091963C91919756 -:105020002F7081E090E0BC01022E01C0660F0A944F -:10503000EAF7462F4095432391964C939197929689 -:105040003C919297362B92963C93929740916501B2 -:10505000E42FE295EF70F0E031A14F70042E01C013 -:10506000880F0A94EAF7982F9095932391A392A121 -:10507000892B82A390968C9190E002C0959587959C -:105080002A95E2F7817020A130E002C0359527957E -:105090004A95E2F792E020FF90E0892B8093EC02A2 -:1050A0008091580111E081278093EB02312F381B4A -:1050B0003093E5020E940E2F40E060E080E00E9405 -:1050C0001E0D89EA92E090935E0380935D0360E099 -:1050D0008AE00E94071681E00E940B1780EE90E0A4 -:1050E00090935A0180935901109332030E943E0D10 -:1050F0008BE591E090934D0480934C043E018DE349 -:10510000680E711C80916604FF24F39400E112E1A3 -:10511000853009F4F2C10E944223E82E81110E94D9 -:105120006208E5E4F3E0AFE4B3E010E000E0B02EA5 -:10513000DD9081918D1509F404C28D25C12CFF24C9 -:10514000F394982F9F2109F4F7C10E949C0E8823A5 -:1051500099F0CEA6BFA6DF2081E009F480E088ABFD -:105160000E94461B8160782F9AAB89AB4EA55FA544 -:1051700068A98AA90E94B022F801EB5BFC4F8081EC -:10518000F826F0828091EC02E82FEE0FEE0F90915E -:105190006601A92FA295AF70B0E090962C9130E0F7 -:1051A0009F7002C0359527959A95E2F721703327B5 -:1051B00090916501A92FA295AF70B0E090964C91A7 -:1051C00050E09F7002C0559547959A95E2F7CA0145 -:1051D0008170992740FF02C082E090E0822B8E2BE5 -:1051E0008093EC021091EB028F70E82FF0E0E65014 -:1051F000FE4F80819091EA02890F8093EA02F12CA0 -:1052000084306CF0E12FF0E0E851FD4F80818F5F3A -:10521000808360E0812F0E947625FF24F3948091A3 -:10522000EA028D3F6CF4E12FF0E0E851FD4F808100 -:105230008150808361E0812F0E947625FF24F394C2 -:105240008091EA02082E000C990B64E070E00E9445 -:10525000EE328093EA02F1100E943E0B80914904E5 -:10526000882351F180911C0390911D030E94371BEC -:10527000C29708F07DC12091760430917704211502 -:10528000310509F0A0C2809148048823A9F00E944A -:105290006208009144041091450420914604309125 -:1052A0004704601B710B820B930B6F3F7F4F8F4F37 -:1052B0009F4710F40E94950DE11001C0F1100E946B -:1052C000B00D809142038A3008F0B7C3809140034B -:1052D000909141030E94371B069708F4AEC304E681 -:1052E00010E025E030E04BE353E064E084E10E940D -:1052F0005930892B09F072C3109242032091320376 -:10530000222359F080913D0390913E0398278927ED -:10531000982790933E0380933D0386E0E4E2F3E018 -:10532000DE01919601900D928A95E1F786E0FE01EB -:10533000B196DE01119601900D928A95E1F786E013 -:10534000FE013196A5E3B3E001900D928A95E1F755 -:1053500090913F038091360397FD3AC38E7F8093EF -:1053600036038091330390913403009709F02AC3E8 -:1053700060913B0380913C0300913D0310913E03FB -:10538000222309F4F2C241E00E94F80C209130037C -:1053900030913103281B390B3093310320933003B4 -:1053A00041E0602F812F0E94F80C20912E03309154 -:1053B0002F03820F931F90932F0380932E036EE28F -:1053C00073E08AE393E00E94D90C60E373E089E321 -:1053D00093E00E94D90C109237031092380386E0B4 -:1053E000E5E3F3E0DE01119601900D928A95E1F775 -:1053F00086E0FE013196A4E2B3E001900D928A9519 -:10540000E1F73091260320912703909128038091A2 -:105410002903709120036091210340912203509150 -:105420002303F0912503E0911F03FE13DDC2332314 -:1054300011F07313D9C2222311F02613D5C2882389 -:1054400011F08513D1C2992319F081E04913CDC21F -:1054500080E0CBC286E992E061CD80916604843021 -:1054600009F43BC00E94950D40E060E080E00E949E -:105470001E0D80E00E9456168091E702811109C03E -:10548000F092E7028091710481708093E6020E949D -:10549000E20F10925004A8E1B0E0E0E40FB6F894F7 -:1054A000A895A09360000FBEE093600083B7817F52 -:1054B000846083BF83B7816083BF7894889583B706 -:1054C0008E7F83BF0FB6F894A895809160008861A5 -:1054D00080936000109260000FBE80916504882365 -:1054E00061F00E944223EFE4F3E08191811175C4E1 -:1054F00029E533E02E173F07C1F780916604853018 -:1055000009F4ABCF109259040E94F70F0E94BF0E0E -:105510000E9456161092E7028091E602882349F015 -:105520008091710481608093710460E086950E948F -:1055300007160E943E0DEFCDC394FF0C37E0C31257 -:1055400000CE0F5F1F4F0A30110509F0F0CD8FEF2D -:105550008BAB8CAB1DAA0E94461B8160782F9FAB42 -:105560008EAB4BA95CA96DA98FA90E94B0220ACE6F -:105570000E94461B90931D0380931C0360E080E013 -:105580000E949A080E94BF0E8093F9020E949C0E0E -:10559000882331F14091F5025091F6026091F702B3 -:1055A0007091F8022FB7F8948091510490915204B1 -:1055B000A0915304B09154042FBF841B950BA60BEC -:1055C000B70B81339547A105B10540F00E94950DB9 -:1055D00080914904882309F456CE4DCE0E94B00D27 -:1055E0000E949C0E882309F4D5C061E080E00E94EF -:1055F0009A0860E08CE791E00E94881362E080E006 -:105600000E949A08809170040E94890C823009F4EB -:105610009BC008F090C0882309F496C0813009F43B -:1056200099C065E080E00E949A0860E08AE991E014 -:105630000E94881366E080E00E949A086091F90257 -:10564000669561708FE991E00E94881367E080E0C1 -:105650000E949A086091F9026095617084EA91E075 -:105660000E94881368E080E00E949A086091F90225 -:1056700062FB662760F988EA91E00E9488137DA6A4 -:105680006CA64091F1025091F2026091F302709188 -:10569000F4022FB7F8948091510490915204A09194 -:1056A0005304B09154042FBF841B950BA60BB70B6A -:1056B0008D329140A105B10508F48ACF0E9462089D -:1056C0006093F1027093F2028093F3029093F402DC -:1056D0008091F002811104C080916701811142C064 -:1056E0006DE080E00E949A0860E08DEA91E00E94FF -:1056F00088136AE080E00E949A0881E08093670145 -:105700008091EF0290E00196817099278093EF02DB -:1057100021E030E0281B390B40E6429FC001439F47 -:10572000900D11242091EE02222351F1855C9B4FB4 -:105730000E9492064DCF833089F0843009F071CFFA -:1057400060E08EE891E003C060E082E891E00E94B2 -:10575000881367CF60E088E891E0F9CF60E084E9E2 -:1057600091E0F5CF6AE080E00E949A0860E08DEA5F -:1057700091E00E9488136BE080E00E949A08C0CFFD -:105780002091ED02222319F085589C4FD1CF8554EA -:105790009D4FCECF64E080E00E949A0860E083EBEA -:1057A00091E00E94881365E080E00E949A0860E022 -:1057B00089EB91E00E94881369E080E00E949A08DA -:1057C0008BEF94E0B5CF80911B0361E070E0811115 -:1057D0005ACD082F10E02B01082E02C0440C551C96 -:1057E0000A94E2F7A90144215521452B09F448C048 -:1057F00090911A0390FD46C08295880F8076809321 -:105800006A019801369527953695279520936D0165 -:10581000815E80936B0110926E0124E630E047E0D8 -:1058200050E068E671E088E70E940530892B09F0B6 -:105830002ACDA80175E0440F551F7A95E1F78091B4 -:105840001A0380FD2DC048585B4F04E610E020E2AB -:1058500030E060E488E70E942C30892B09F013CDFA -:105860000E94B00DC20180959095409076045090B2 -:10587000770448225922509277044092760403CD4F -:105880008F5FA7CF880F880F880F80936A011092CF -:105890006D01895F80936B0183E080936E01BDCFC2 -:1058A000EAEFF2E080E2DF011D928A95E9F7EEE08F -:1058B000F2E0F9AFE8AF0AE012E099249394A8ADC2 -:1058C000B9AD2D91B9AFA8AFF80121908F01240E89 -:1058D000352E311CC10188589B4F1C01E22FF0E08E -:1058E000E650FD4F30E020E067E0A62EA21AB92C6A -:1058F000022E01C0BB0C0A94EAF7610190E0D601C8 -:105900008D916D018B216A2D691B6770862E062E85 -:10591000000C770BB82F01C0BB0F8A94EAF78B2ECF -:105920007195619571096770772701C086956A95B1 -:10593000EAF7882A8081882A80829F5F9830F9F66A -:105940002F5F3F4F31962830310571F6E2E1F2E0EA -:1059500028AD39ADE217F30709F0B1CF04E610E046 -:1059600020E230E04AEF52E074CF45E00E94F80CAC -:1059700020912C0330912D03820F931F90932D03C0 -:1059800080932C0345E0602F812F0E94F80C20911A -:105990002A0330912B03281B390B30932B032093C0 -:1059A0002A036AE273E087E393E00E94D90C6CE279 -:1059B00073E088E393E00E94D90C10923A031092AE -:1059C00039030DCD0197909334038093330307CDB2 -:1059D00081608093360384E190E0F5CF80914203AB -:1059E0008F5F80934203FBCC81E080FF0FC0E0918A -:1059F0004C04F0914D04309749F082E080932403E9 -:105A00000480F581E02D84E293E00995109226034D -:105A100010922703109228031092290386E0E4E2F3 -:105A2000F3E0AEE1B3E001900D928A95E1F70E94B8 -:105A3000461B90934103809340030E94BF0E9091B8 -:105A40004303891731F00E94BF0E809343030E94E5 -:105A5000561680916604843009F054CB83E080931D -:105A6000E9008091E80082FF4DCB8091E80090E052 -:105A700085FF0BC00E94F40630E2E32EF12C8E016C -:105A80000F5F1F4F8823E1F091E08091E8008B7752 -:105A90008093E800992309F435CBE981E150E331A3 -:105AA00008F071C0F0E0E054FB4C0C94023380919C -:105AB000F100D8018D938D01B1E0EB1AF10821F3CB -:105AC0008091E80085FDF3CF8091E8008B7780938B -:105AD000E8000E94F406882399F3D6CF1A8289E061 -:105AE0008B8311C08A81823009F48FC1833091F198 -:105AF000813009F048C00E9462080E9408336B831D -:105B00007C838D839E8380916604843009F0FACA79 -:105B10001091E9001F709091EC00892F817090FD29 -:105B200080E8182B82E08093E9008091E80080FFF4 -:105B30000DC050E040E060E270E0CE0101960E94AE -:105B400025078091E8008E778093E8001F701093FE -:105B5000E900D8CADE011396EFE4F3E081918D935A -:105B600023E0E935F207D1F7CECF8A81823059F4AC -:105B70006B817C818D819E810E94083386E290E05A -:105B80000E944233C0CF8FEF8983BDCF4C816B81A0 -:105B90008A810E9430149827892798279E838D83B5 -:105BA000B2CF0D811E811027012710278A81EB803B -:105BB0003EE0E39E700111249CE8899FE00CF11CFB -:105BC00011248C8190E0880F991FE80EF91E612F37 -:105BD000C70187960E944233602FC7018896D0CFB5 -:105BE0000E94B41390CF8A818138C1F060F480386C -:105BF00009F089CF20E04B81609173048091720499 -:105C00000E94F01480CF8238E9F0833809F07BCF0E -:105C100020E0409174046C818B81F2CF60E08B8135 -:105C20000E9407168B81811103C00E94E20F6BCF87 -:105C30008091710481608093710460E086950E9478 -:105C4000071661CF8B81809375045DCF8A8181387F -:105C500099F030F4803809F056CF8091740440CF29 -:105C6000823891F0833809F04ECF809172048B8393 -:105C7000809173048C8347CF8091710480FF02C0B0 -:105C800086952ECF80E02CCF8091750429CF60912E -:105C900071047091720480917304909174040E9455 -:105CA000DE1431CF80E18A832ECF81E08A838DE1BB -:105CB00017CFCA80DB80DC24CD24DC248E010F5F6B -:105CC0001F4FEC80E00EF12EF11CC6018D519D4F4F -:105CD0000E151F0509F417CFADE1CA16A1E0DA06CB -:105CE00050F40E942E33F8018483BFEFCB1ADB0AF5 -:105CF0000F5F1F4FEACFD80114961C92F6CF0A818E -:105D00001B81102701271027FE0131966F01EC80BF -:105D1000E00EF12EF11CC8018D519D4FE016F106E9 -:105D200009F4F1CE0D31F1E01F0728F4D6011496E5 -:105D30006C910E944233BFEFCB1ADB0A0F5F1F4FFB -:105D4000EACF0E94A413DFCE85E0ADCFCA80DB800E -:105D5000DC24CD24DC248E010F5F1F4FEC80E00E8D -:105D6000F12EF11CC6018796E016F10609F4CBCEA0 -:105D7000ECEBCE16E2E0DE0658F40E942E33D8019A -:105D800014968C93FFEFCF1ADF0A0F5F1F4FEACFF5 -:105D9000F8011482F7CF0A811B81102701271027F1 -:105DA0009E012F5F3F4F6901EC80E00EF12EF11C48 -:105DB000C8018796E016F10609F4A5CE0C3B32E047 -:105DC000130728F4D60114966C910E944233BFEF5A -:105DD000CB1ADB0A0F5F1F4FEBCF09BD19BD09B40A -:105DE00000FEFDCF8091D8008F7D8093D8008091F8 -:105DF000E00082608093E0008091E00081FDFCCFB4 -:105E0000109259040E94F70F78CB86E290E00E942E -:105E10002E331B821C821D828E8375CE1092B90098 -:105E20008CE08093B80008959F92AF92BF92CF927A -:105E3000DF92EF92FF920F931F93CF93DF93B82ED1 -:105E4000EB010E94461B6C01EE24E394F12CC4315B -:105E5000D10560F025E0E22EF12CCF3FDC0731F0D8 -:105E6000CE0164E170E00E94CE327B0184EAA82E6C -:105E700094E8992E1092BC00A092BC000E94461B90 -:105E80008C018091BC0087FF0DC08091B900887F94 -:105E9000883039F18091B900887F803111F10FEF9E -:105EA0001FEF09C00E94461B801B910B8E159F059A -:105EB00040F30EEF1FEFCF3FDC07E1F2C6010E9477 -:105EC000371B8C179D07B0F2C801DF91CF911F914E -:105ED0000F91FF90EF90DF90CF90BF90AF909F9089 -:105EE0000895B092BB009092BC000E94461B8C01AA -:105EF0008091BC0087FF0AC08091B900887F8831FB -:105F000011F0803461F610E000E0DECF0E94461B05 -:105F1000801B910B8E159F0558F3CBCF0F931F93CA -:105F2000CF93DF93EB018093BB0084E88093BC00A8 -:105F30000E94461B8C018091BC0087FF11C02091FC -:105F4000B900287F81E090E0283211F490E080E0F1 -:105F5000919581959109DF91CF911F910F910895AE -:105F6000CF3FDC0741F30E94461B801B910B8C172F -:105F70009D0708F38EEF9FEFEECF0F931F93CF9304 -:105F8000DF93EC0184EC8093BC000E94461B8C01E3 -:105F90008091BC0087FF08C08091BB0090E0DF913A -:105FA000CF911F910F910895CF3FDC0789F30E9495 -:105FB000461B801B910B8C179D0750F38EEF9FEFB4 -:105FC000EECF0F931F93CF93DF93EC0184E8809380 -:105FD000BC000E94461B8C018091BC0087FF08C05A -:105FE0008091BB0090E0DF91CF911F910F910895B8 -:105FF000CF3FDC0789F30E94461B801B910B8C1757 -:106000009D0750F38EEF9FEFEECFCF92DF92EF928E -:10601000FF920F931F93CF93DF936B018A01790156 -:10602000B9010E94142FE6010C0D1D1DC017D107E8 -:1060300061F424E92093BC00DF91CF911F910F916F -:10604000FF90EF90DF90CF90089597FDF2CFB701CA -:1060500089910E948E2FEACFCF92DF92EF92FF922A -:106060000F931F93CF93DF93C62F6A017901B80175 -:106070000E94142F97FD0CC0B8018C2F0E948E2F08 -:10608000E601EC0CFD1CCE15DF0511F097FF0CC0EE -:1060900024E92093BC00DF91CF911F910F91FF90D5 -:1060A000EF90DF90CF900895B80189910E948E2FD4 -:1060B000EACFCF92DF92EF92FF920F931F93CF938D -:1060C000DF93F82EE62EEA016901B8010E94142F31 -:1060D00097FD15C0B8018E2D0E948E2F97FD0FC021 -:1060E000B8018F2D81600E94142FF12CE12C21E04A -:1060F000C21AD108EC14FD0400F597FF11C024E981 -:106100002093BC001816190614F490E080E0DF918B -:10611000CF911F910F91FF90EF90DF90CF90089556 -:10612000C8010E94BD2F97FD04C0FE01EE0DFF1DAA -:1061300080832FEFE21AF20ADDCF97FDE0CFC8018E -:106140000E94E12F97FDDBCFCC0DDD1D8883D7CFDB -:1061500084E98093BC0008958EE14A9B02C081507F -:10616000E1F74A9BFECF08955A9880E28A95F1F7AD -:106170005A9A0895FC013BE03A95F1F798E020E047 -:1061800080E031E040E14A95F1F7880F4A9B02C078 -:106190008160232742E04A95F1F7000040E14A95EB -:1061A000F1F7915079F790E19A95F1F799B132E0D2 -:1061B0003A95F1F7000040E14A95F1F792FB9927F3 -:1061C00090F992272081920F90830895EF92FF9289 -:1061D0000F931F93CF93DF930F92CDB7DEB7198242 -:1061E0008C017C01E60EF11C0E151F0561F481E0A7 -:1061F0009981911180E00F90DF91CF911F910F91C4 -:10620000FF90EF9008950E94AC30CE0101960E945D -:10621000BA30F80181938F01E7CF529A5A9A0895C4 -:1062200052985A9AEA9AE9E6F0E080818F7C80835E -:1062300008956150770B91E001C0990F6A95EAF7D4 -:1062400020E031E0911108C0222391F05A9A80E2B7 -:106250008A95F1F75A980895492F482339F05A9AA8 -:10626000232740E24A95F1F79695ECCF5A98F9CF5B -:106270005A98EDCFFF920F931F93CF93DF93EC01CA -:106280008C01060F111DC017D10731F4DF91CF919A -:106290001F910F91FF900895F9900E94B43068E02B -:1062A0008F2D0E941931EFCF1F920F920FB60F92D0 -:1062B0001124EF92FF920F931F932F933F934F93CD -:1062C0005F936F937F938F939F93AF93BF93EF935E -:1062D000FF93CF93DF930F92CDB7DEB719820E9461 -:1062E000AC30CE0101960E94BA30A82FA695A69593 -:1062F000A695282F229525709A2F9570290F922FF9 -:10630000937026952695920F982797708981982BE0 -:1063100009F075C0A83008F072C080E18A95F1F7E5 -:106320005A9A529AB2E0BA95F1F700C05A98EA2EFA -:10633000F12CEAE0AE9FD0011124AF5FBE4F18965A -:10634000ED91FC9119973097B1F06091F80170913F -:10635000F90116962D913C911797260F371F13962A -:106360008D919C911497680F791F15964C911597F4 -:1063700012968C9109958AE08E9DF0018F9DF00D0B -:106380001124EF5FFE4F6581662351F02091F801E3 -:106390003091F90186819781820F931F0E943A31D3 -:1063A0000E94B430F0E1FA95F1F75A9852985A9A4F -:1063B00080E18A95F1F78AE08E9D80018F9D100D16 -:1063C00011240F5F1E4FD80112966C91129766230D -:1063D00071F12091F8013091F90113968D919C9102 -:1063E000820F931F0E94E630D801ED91FC91882323 -:1063F00011F088E001C082E080830E94AC300F90F1 -:10640000DF91CF91FF91EF91BF91AF919F918F91CC -:106410007F916F915F914F913F912F911F910F91BC -:10642000FF90EF900F900FBE0F901F901895ED9179 -:10643000FC91DFCF0F931F93CF93DF93EC0108976D -:106440000CF0A9C08AE08C9FF0018D9FF00D112403 -:10645000EF5FFE4F80819181892B09F49CC0F894F5 -:10646000529A5A9885E08A95F1F700008C2F86950C -:1064700085709C2F9570890F982F937086958695BF -:10648000890F8E0193E0000F111F9A95E1F7082BF9 -:106490000E94B43000C068E0802F0E941931A0E152 -:1064A000AA95F1F752985A9A4A9B27C087E090E044 -:1064B0004A9925C08AE08C9F80018D9F100D112480 -:1064C0000F5F1E4FF80165816623A1F12091F8014D -:1064D0003091F90186819781820F931F0E94E630E7 -:1064E000811128C0529A5A9AD801ED91FC9182E00C -:1064F0008083789482E090E016C000C0D5CF0197E9 -:10650000B9F4529A5A9A8AE08C9FF0018D9FF00D4F -:106510001124EF5FFE4F0190F081E02D81E0808338 -:10652000789481E090E0DF91CF911F910F910895D1 -:1065300000C0BECF0E94AC30B0E2BA95F1F75A98D5 -:10654000529AE0E1EA95F1F78AE08C9FF0018D9F85 -:10655000F00D1124EF5FFE4F6281662351F0209110 -:10656000F8013091F90183819481820F931F0E9479 -:106570003A310E94B4308AE08C9FF0018D9FF00D7B -:106580001124EF5FFE4F0190F081E02D108278948E -:1065900090E080E0C8CF84E090E0C5CFAA1BBB1B91 -:1065A00051E107C0AA1FBB1FA617B70710F0A61B13 -:1065B000B70B881F991F5A95A9F780959095BC0134 -:1065C000CD010895991B79E004C0991F961708F032 -:1065D000961B881F7A95C9F78095089597FB072E1B -:1065E00016F4009407D077FD09D00E94CE3207FC44 -:1065F00005D03EF4909581959F4F089570956195D3 -:106600007F4F0895EE0FFF1F0590F491E02D099440 -:106610006927962769277827872778270895FB0118 -:10662000DC0102C005900D9241505040D8F708950A -:10663000FB01DC0104C08D910190801921F44150CF -:106640005040C8F7881B990B0895FB01DC0102C07C -:1066500001900D9241505040D8F70895F999FECF1E -:1066600092BD81BDF89A992780B50895A6E1B0E062 -:1066700044E050E00C946833A8E1B0E042E050E020 -:106680000C946833262FF999FECF92BD81BDF89AFC -:10669000019700B4021639F01FBA20BD0FB6F89466 -:1066A000FA9AF99A0FBE08950396272F0E94433352 -:1066B0000E944233252F0E944333242F0C944333EE -:1066C0000196272F0E9443330C944233DC01CB0107 -:1066D000FC01F999FECF06C0F2BDE1BDF89A3196F2 -:1066E00000B40D9241505040B8F708950E94B8335D -:1066F00008F481E00895E89409C097FB3EF4909572 -:106700008095709561957F4F8F4F9F4F9923A9F08A -:10671000F92F96E9BB279395F69587957795679519 -:10672000B795F111F8CFFAF4BB0F11F460FF1BC05D -:106730006F5F7F4F8F4F9F4F16C0882311F096E9F0 -:1067400011C0772321F09EE8872F762F05C066239E -:1067500071F096E8862F70E060E02AF09A95660F57 -:10676000771F881FDAF7880F9695879597F9089510 -:10677000990F0008550FAA0BE0E8FEEF1616170652 -:10678000E807F907C0F012161306E407F50798F0BA -:10679000621B730B840B950B39F40A2661F0232BD3 -:1067A000242B252B21F408950A2609F4A140A6954F -:1067B0008FEF811D811D08950E94EF330C9460348A -:1067C0000E94523438F00E94593420F0952311F081 -:1067D0000C9449340C944F3411240C9494340E943A -:1067E000713470F3959FC1F3950F50E0551F629F70 -:1067F000F001729FBB27F00DB11D639FAA27F00D1A -:10680000B11DAA1F649F6627B00DA11D661F829F40 -:106810002227B00DA11D621F739FB00DA11D621F25 -:10682000839FA00D611D221F749F3327A00D611D42 -:10683000231F849F600D211D822F762F6A2F112424 -:106840009F5750409AF0F1F088234AF0EE0FFF1F57 -:10685000BB1F661F771F881F91505040A9F79E3FAE -:10686000510580F00C9449340C9494345F3FE4F368 -:10687000983ED4F3869577956795B795F795E79504 -:106880009F5FC1F7FE2B880F911D9695879597F90D -:10689000089597F99F6780E870E060E008959FEFA2 -:1068A00080EC089500240A941616170618060906A7 -:1068B000089500240A941216130614060506089576 -:1068C000092E0394000C11F4882352F0BB0F40F4FE -:1068D000BF2B11F460FF04C06F5F7F4F8F4F9F4F3E -:1068E000089557FD9058440F551F59F05F3F71F0C0 -:1068F0004795880F97FB991F61F09F3F79F0879527 -:106900000895121613061406551FF2CF4695F1DFAF -:1069100008C0161617061806991FF1CF869571053F -:10692000610508940895E894BB2766277727CB0173 -:1069300097F90895F894FFCFE7100F1162110F1126 -:10694000621142117A11621177128412B014B014DC -:10695000B914B914BB14B914B914B914B014B014DF -:10696000C014B914B914C014131F131F6C1F6C1F6B -:106970009E1F461F461F461FB81F29203920392059 -:106980006E2D722DB52DC62DD12DF02DF32D262E69 -:10699000472EC32DC32D522E552E592E7F2EA12E9C -:0669A000A42EA62ECB2E52 -:1069A600013802000000010000000038020000006B -:1069B6000501000000380200000001060000003852 -:1069C6000200000001070000003802040800000071 -:1069D6000000003802090C00000000000038020127 -:1069E6001500000000000036323331F7F66766976F -:1069F600C6343500000000000180005F082B0E0A37 -:106A06000E060E020EF4F5010021007F220003009F -:106A16004A004A4A01F6F731333236674C41594546 -:106A2600520042617365200047616D652000526126 -:106A3600697365004C6F776572004C4F434B00439A -:106A4600617073004E756D005363726C00202020D8 -:106A5600202000534F4C415200544D505354008156 -:106A66008283E200E900EA00B500B600B700CD0077 -:106A76008301CC008A01920194012102230224029F -:106A86002502260227022A02B300B4006F00700016 -:106A96000603060806010606AF0200FF0100010014 -:106AA60000FFFF0000010001FF0000081018181089 -:106AB6000800000102020202020202020202402251 -:0E6AC6007B99017701FC00000C190C390C00C3 +:1011500090E080E082589B4F90937F0680937E06BC +:101160000895883E9105C8F4803E910548F48B327D +:10117000910540F48832910518F404974A9758F481 +:1011800080E008958C32910530F089339105C0F3E9 +:1011900084369105A9F381E011C0811522E59207FB +:1011A00070F48115E1E59E0758F790548115904140 +:1011B00090F7FB019581907F81E011F308958115EF +:1011C00028E5920740F38115E9E59E0728F090563F +:1011D0008115904270F3DFCFFB019581907F81E014 +:1011E000903271F6EBCFFC01680F791F8FEF91E31E +:1011F0002191822728E030E087FF09C0880F8927E6 +:1012000021503109C9F7E617F70791F70895880FBC +:10121000F7CFFA01811101C0FB0109948091770495 +:10122000982F9E7F61F48170826080937704809113 +:101230007A04813A18F080EA80937A04089588311C +:10124000B0F381708661F1CFAF92BF92DF92EF92DF +:10125000FF920F931F93CF93DF93082F162FE9016F +:10126000E42FF0E0E55AFA4F611110C0E4915E2FCF +:101270004E2F4983E8835A83DF91CF911F910F91BD +:10128000FF90EF90DF90BF90AF900895E62EF12C85 +:101290004491D42EE42FF0E026E0829FC001112477 +:1012A0002FEF30E0B9010E941535802F90E0880FB4 +:1012B000991F55E5569FD001579FB00D11248A1BE9 +:1012C0009B0B982F990F890F5901AE18BF08AE9E3E +:1012D000D001AF9EB00DBE9EB00D11245B2F189FA4 +:1012E00080011124012F11275901A01AB10AAE9EC5 +:1012F0008001AF9E100DBE9E100D11245901A81A39 +:10130000B108AE9CC001AF9C900DBE9C900D112405 +:10131000892F9927281B390B2E9FC0012F9F900DD5 +:101320003E9F900D1124E92F62307105A1F050F419 +:101330006115710509F49DCF6130710581F0EB2FC6 +:10134000512F97CF6430710569F080F066307105D8 +:1013500009F48FCFF4CFE42F4B2F592F8ACFE42FEE +:10136000412F87CFEB2F542F492F83CF4B2F5D2D4C +:10137000E12F7FCF80E0089578940895F894E82FC6 +:10138000E295EF70F0E031A1282F2F7081E090E01E +:1013900001C0880F2A95EAF7982F9095932391A37F +:1013A00092A1892B82A30C94BC099091D60292FF42 +:1013B00006C0282F28712830F9F4877F846093FFB6 +:1013C00006C0282F28712831F1F4877E846120918E +:1013D000D70220FF06C0382F38713830D9F4877F04 +:1013E000816021FF06C0282F28712831D1F4877E23 +:1013F000816194FD877E0895282F24712430F9F6A9 +:101400008B7F8860DCCF282F2471243101F78B7EFD +:101410008861DDCF382F3171313019F78E7F8860C8 +:10142000E0CF282F2171213121F78E7E8861E1CF15 +:10143000CF93DF93EC018238910581F1B0F58133D0 +:10144000910509F491C020F58932910509F485C010 +:101450008A9709F490C0C11521E5D20708F0AAC007 +:10146000C11530E5D30708F0F2C0CF3BD10508F035 +:1014700089C0C83AD10508F0DFC0C53AD10508F0E7 +:10148000D3C0C430D105F8F4C130D105E1F040C07B +:101490008533910509F45AC0C997E9F68091D602BF +:1014A000837089F0C0EED0E00EC0833E910599F1C3 +:1014B00070F4803E910501F1823E910561F68091C4 +:1014C000D60282FD21C0CE01DF91CF910895863EE4 +:1014D000910561F1873E910571F1843E910509F016 +:1014E000BACF8091D70281FFEECF8091D602C7EEAE +:1014F000D0E084FD0DC0E7CF8091D60280FDF7C01B +:101500009091D70290FFDFCFC3EED0E084FFDBCF16 +:10151000D0E0C0E0D8CF8091D60282FDEBC09091A0 +:10152000D70290FDBFCF84FFCECFF2CF8091D602FD +:1015300083FDDDCFC8CF8091D60283FDDEC09091C0 +:10154000D70291FFF0CFC4EED0E0BDCF8091D6029C +:1015500085FFB9CFC9E2D0E0B6CF8091D60285FF32 +:10156000B2CFC5E3D0E0AFCF8091D60286FFABCF3C +:10157000CAE2D0E0A8CF8091D60286FFA4CFC1E313 +:10158000D0E0A1CFC11540E2D40760F4C11581E0DD +:10159000D80708F098CFCE01815E9109079708F42B +:1015A00092CFB6CFC11590E4D90708F4B1CFDF7060 +:1015B000D06A89CFC11524E5D20778F4C11533E587 +:1015C000D30708F072C0C11542E5D40708F05CC02B +:1015D000DC2FCC27C16FD06A76CFC1158AE5D8073A +:1015E00078F4C11599E5D90708F073C0C11528E54D +:1015F000D20708F48DCFDC2FCC27C06FD06A63CF21 +:10160000CE0190568115904208F082CF8D2F8F71B8 +:101610000E94D50990E0982F882788279F719C0108 +:101620002C2BE901D0624FCFC55AD0E0C154DE4F18 +:10163000C881D0E0D06447CFC85AD0E0CC0FDD1FBE +:10164000CE53DE4F0990D881C02DD4643CCFCE015B +:1016500064E0969587956A95E1F783702C2F26951F +:101660002695237040E2249F90011124382B8C2F63 +:101670008370C1E0D0E002C0CC0FDD1F8A95E2F795 +:10168000C22BD32BDC681FCFCE018370992721E0BA +:1016900030E002C0220F331F8A95E2F7C695C69547 +:1016A00080E2C89FE0011124EBCFCE01837099271F +:1016B00021E030E002C0220F331F8A95E2F7C69581 +:1016C000C69590E2C99FE0011124C22BD32BDA68A2 +:1016D000FACE8C2F8F700E94D50934E0D695C7952D +:1016E0003A95E1F7CF709C2FEC01D069ECCEC9E3BD +:1016F000D0E0E9CEC2EED0E0E6CEC6EED0E0E3CE5A +:101700000C94620880915F0490919102892B9091D2 +:101710009002892B80933002E0915204F09153049F +:10172000309731F00280F381E02D80E392E009945C +:10173000089580918F0290915E02981301C00895E0 +:101740008F5F8770FACF27E0929F800D1124982F2A +:10175000977086958695869523E0829FF0011124E7 +:10176000E35CFD4F50E040E080E0219130E0092E45 +:1017700002C0369527950A94E2F721703327042E8C +:1017800001C0220F0A94EAF7822B4F5F5F4F43306C +:10179000510559F7089527E0929F800D1124982F45 +:1017A000977041E001C0440F9A95EAF786958695B7 +:1017B000869593E0899FF0011124E35CFD4F90E052 +:1017C00080E070E05191DF0111979B01082E02C06B +:1017D000369527950A94E2F7217021952527242331 +:1017E00025272C9301968330910561F7089590E0A9 +:1017F00080E00E94840890E080E00E946E081092D1 +:101800009102109290020C94820B809392020C949D +:10181000F70B882341F0809590915F048923809392 +:101820005F040C94820B0895882339F090915F0433 +:10183000982B90935F040C94820B08958823B1F148 +:101840009CEF980F913A70F4E2E3F2E091918913E2 +:1018500003C0DF0111971C9242E0E833F407B1F7AF +:101860000C94820B90E2980F983088F4877021E0F6 +:1018700030E0A90102C0440F551F8A95E2F7CA0162 +:10188000809590915F04892380935F04E9CF9BE565 +:10189000980F933020F490E080E00C948408885AEC +:1018A000873120F490E080E00C946E0808950F9347 +:1018B0001F93CF93C82F882309F469C08CEF8C0F36 +:1018C000813AB0F502E312E088E392E0F801219159 +:1018D000C21701F122E0E833F207C9F7EFEF80E029 +:1018E000D8019D918D01C91781F0EF3F19F4911135 +:1018F00001C0E82F8F5F863099F7EF3F31F00E2E51 +:10190000000CFF0BE05DFD4FC283CF911F910F9143 +:101910000C94820BE2E3F2E02191C21303C0DF01D9 +:1019200011971C928E179F07B9F70E94820BD6CF92 +:1019300080E28C0F883068F4C77021E030E001C08D +:10194000220FCA95EAF780915F04822B80935F048F +:10195000DCCFEBE5EC0FE33050F4F0E0E154FE4F68 +:10196000808190E0CF911F910F910C948408C85A08 +:10197000C73168F4EC2FF0E0EE0FFF1FEE53FE4F7F +:1019800080819181CF911F910F910C946E08CF911E +:101990001F910F910895982F92959F7011F0892FA4 +:1019A00094E0282F2695269511F09E5F822F86952C +:1019B00009F09F5F892F0895DC01FB0180819181EF +:1019C000803891054CF08FE78C93808191818F57FF +:1019D000910991838083089581382FEF92073CF419 +:1019E00081E88C938081918181589F4FF2CF8C93B5 +:1019F000118210820895681708F5861B682F21E070 +:101A0000469FA0011124649FF001659FF00D1124F1 +:101A10004091590150915A01E49FC001E59F900DFA +:101A2000F49F900D1124880F892F881F990B919591 +:101A3000222319F09195819591090895681B20E062 +:101A4000DFCF0F931F93CF93DF9300D000D0CDB79C +:101A5000DEB789836A834B831C8204E610E024E0AE +:101A600030E0AE014F5F5F4F60E084E10E9473326F +:101A70000F900F900F900F90DF91CF911F910F91CA +:101A8000089580913203882329F047E669E98BE2C3 +:101A90000C94210D6091590170915A0190E080E001 +:101AA0000E94C23520E030E040E05CE30E94233633 +:101AB00020E030E040E85FE30E94BD35882321F05C +:101AC00047EC6BE180E0E4CF41E265EA89EDE0CFED +:101AD000CF92DF92EF92FF920F931F93CF93DF93FA +:101AE0006C017B0164E670E088E70E945B31EC01E9 +:101AF00097FD12C010E000E0F601E00FF11F8491A5 +:101B000064E670E00E94D531EC01892B29F40F5F67 +:101B10001F4F0E151F0581F70E94EF32CE01DF9196 +:101B2000CF911F910F91FF90EF90DF90CF9008958C +:101B300080914E0490914F04911103C091E0892748 +:101B40000895882369F062E070E08CEE9BE00E94CB +:101B5000680D892B19F080914E04089510924E045F +:101B600080914E04EBCFCF93C0914E0480914F04EF +:101B70008823D1F00E9462086058774C8E4F9F4FA7 +:101B800060934A0470934B0480934C0490934D04EB +:101B9000C11108C062E070E08AEE9BE00E94680D0F +:101BA000892B29F0C0914E048C2FCF91089581E0AC +:101BB00080934E04F7CF90916C04943029F5809374 +:101BC0005B0470935D0460935C049093E9008FEF75 +:101BD0009091E800815095FD06C095ED9A95F1F73A +:101BE00000008111F5CF8091E80085FF0DC050E025 +:101BF00040E063E070E08BE594E00E94250780916F +:101C0000E8008E778093E8000895BC0184E00C948E +:101C1000DB0DBC0183E00C94DB0D9C0184E0809320 +:101C2000E9009FEF8091E800915085FD06C085EDA9 +:101C30008A95F1F700009111F5CF8091E80085FFBA +:101C40000CC050E040E066E070E0C9010E9425074A +:101C50008091E8008E778093E8000895CF93DF931A +:101C6000EC0181E08093E9008FEF9091E8008150D2 +:101C700095FD06C095ED9A95F1F700008111F5CF1D +:101C80008091E80085FF14C050E040E068E070E01B +:101C9000CE010E9425078091E8008E778093E800AE +:101CA00088E0FE01A2E6B4E001900D928A95E1F78A +:101CB000DF91CF9108959F92AF92BF92CF92DF9222 +:101CC000EF92FF920F931F93CF93DF937C015B0101 +:101CD0006A018091D10201E010E08A3010F40AE03C +:101CE00010E0C1E0D0E0F894B501C701F601099514 +:101CF000982E0E94BC09911004C021960C171D0754 +:101D00006CF4892DDF91CF911F910F91FF90EF908F +:101D1000DF90CF90BF90AF909F900895CC9F90019F +:101D2000CD9F300D300D112490E080E045E34A95C1 +:101D3000F1F70000019682179307C1F7D4CF809185 +:101D4000A102811110C08091D80080618093D800D9 +:101D50008AE18A95F1F700C08091D90080FF0AC01E +:101D600081E08093A10281E09091A102913009F07D +:101D700080E0089582E08093A1020E94D50610922F +:101D80006C04F1CF0E949F0E882351F0E091520421 +:101D9000F0915304309721F00190F081E02D0994E7 +:101DA00080E008951F93CF93DF93182FEB010E94DB +:101DB000570C8FE99FE00197F1F700C000002197D1 +:101DC000C1F7812FDF91CF911F910C941E0C4F9280 +:101DD0005F926F927F928F929F92AF92BF92CF92BB +:101DE000DF92EF92FF920F931F93CF93DF93CDB7C4 +:101DF000DEB7CE5DD1090FB6F894DEBF0FBECDBF02 +:101E0000509070019091770490FF5DC080905D03C9 +:101E100090905E038114910409F068C0E0E6F6E05A +:101E20009E012F5F3F4FBE0161527F4FC901A491B8 +:101E30004A2F50E0DA01AA0FBB1FA40FB51FA15A09 +:101E4000BC4FCD90DD90EC90D901CD92DD92ED921A +:101E50009D0131966A177B0751F720916F0143E08E +:101E6000249F800D911D1124539A2BB1277F3BB1E4 +:101E700038605FB7F894BC01549E600D711D112449 +:101E80008617970709F08EC05FBF8FE594E0019732 +:101E9000F1F700C00000C252DF4F0FB6F894DEBF6A +:101EA0000FBECDBFDF91CF911F910F91FF90EF90AB +:101EB000DF90CF90BF90AF909F908F907F906F906A +:101EC0005F904F900895809171012091720133E0ED +:101ED000839FF0011124E15AFC4F821708F096CF3E +:101EE0001182108212828F5F3396F7CF90FF96CFC8 +:101EF000D12CC12C66246394712C53E0452E809123 +:101F00005C0393010C2C01C0220F0A94EAF7822390 +:101F100009F43FC0F601EE0FFF1FE80DF91DE59033 +:101F2000F490E114F10409F479CF45E050E0B701F1 +:101F3000CE0101960E94563509810F3F51F18A81E9 +:101F4000800F9927991F8B34910514F08AE490E053 +:101F50005C01AA0CBB1C8A0D9B1DDC01A15ABC4F65 +:101F60005D01049D80011124015A1C4F0A151B05B7 +:101F700020F0B5E0EB0EF11CD8CF4D81413A08F0CE +:101F800040EA98016C818B810E9424090D5F1F4FEC +:101F9000EDCFEFEFCE1ADE0AF8E0CF16D10409F04C +:101FA000AECF3CCFFC014191CF01E8E03BB900004E +:101FB00000C047FF2BB9440F000000C000C000C0A4 +:101FC0002BB900C0EA9591F75BCFE7E7F4E0808199 +:101FD0008E7F8083E9E5F3E08281816082832FEF49 +:101FE00080E792E0215080409040E1F700C000007F +:101FF0000C94E70EE2E3F2E086E0DF011D928A95A1 +:10200000E9F70C94F70B1F93CF93DF93CDB7DEB7AF +:10201000AA970FB6F894DEBF0FBECDBF8EE694E050 +:102020002091F100DC012D93CD01B4E086379B07B0 +:10203000B9F780916F04833009F471C0B8F481302E +:1020400009F448C0823009F4B4C08091E80083FFED +:102050003CC180916E0490916F049A3008F035C1B4 +:10206000E92FF0E0ED51F94C0C9449358A3009F430 +:102070008FC08B3009F470C0893039F780916E04BD +:10208000813219F78091720490917304009711F0D6 +:102090000297D9F68091E800877F8093E8008091CD +:1020A000E80082FF37C09091F3008091F200029720 +:1020B00029F48091F1008B7F813021F48091F1002F +:1020C000809361048091E8008B778093E8000E9400 +:1020D0004F07BBCF80916E04813A09F0B6CF809153 +:1020E000E800877F8093E8008091720490917304E8 +:1020F000892B61F468E082E694E070E00E940108B8 +:102100008091E8008B778093E8009FCF60E090E0BB +:1021100080E0F3CF80916C048111C1CF96CF809184 +:102120006E04813A09F091CF80917204909173040A +:10213000892B09F08ACF8091E800877F8093E8009F +:102140008091E80080FFFCCF809174018093F100C2 +:102150008091E8008E77B9CF80916E04813209F0CA +:1021600074CF8091720490917304892B09F06DCF24 +:102170008091E800877F8093E8000E944F0780915C +:1021800070048093740110925F040E94FA0F5DCF77 +:1021900080916E04813209F058CF8091E800877FEA +:1021A0008093E8000E944F0780917104809360043F +:1021B0004CCF80916E04813A09F047CF8091E800BE +:1021C000877F8093E8008091E80080FFFCCF8091BA +:1021D0006004BCCF803899F0823809F076C08091D5 +:1021E00072048F70873008F070C08093E90080918E +:1021F000EB0085FB882780F91092E90006C08091EA +:102200006A0490916B04911182609091E800977F2D +:102210009093E8008093F1001092F1008091E80023 +:102220008E77B5C1882309F4A2C1823009F04DC070 +:10223000809170048111A6C1809172048F702FEF7C +:10224000280F263008F041C08093E9002091EB0070 +:1022500020FF98C1933031F48091EB00806280932D +:10226000EB0090C19091EB0090619093EB0021E026 +:1022700030E001C0220F8A95EAF72093EA0010921D +:10228000EA008091EB008860EACF81111EC01091B6 +:1022900070041F778091E3008078812B8093E300A6 +:1022A0008091E800877F8093E8000E944F0780912B +:1022B000E80080FFFCCF8091E30080688093E3001A +:1022C00082E0111183E080936C048091E80083FF29 +:1022D0000AC08091E800877F8093E8008091EB003E +:1022E00080628093EB00AA960FB6F894DEBF0FBE13 +:1022F000CDBFDF91CF911F9108958058823028F78C +:1023000020917004309171042C3DE3E03E07A1F56B +:1023100083E08A838AE289834FB7F894DE011396BB +:1023200020E03EE051E2E32FF0E050935700E491CB +:1023300020FF03C0E295EF703F5FEF708E2F90E0BB +:10234000EA30C0F0C7968D939D932F5F243159F7E3 +:102350004FBF8091E800877F8093E8006AE270E0D9 +:10236000CE0101960E9401088091E8008B7780934E +:10237000E800ABCFC096E7CF8091720490917304D0 +:10238000432F55274330510509F44AC078F54130B1 +:10239000510509F47AC08BE590E0EEEEFBE04230A7 +:1023A000510509F092CF2091E800277F2093E800A3 +:1023B00020917404309175048217930708F49C01EE +:1023C00040E02115310509F065C0411163C08091DD +:1023D000E80082FDC9CF80916C04882329F2853002 +:1023E00019F28091E80083FFF2CFBECF4132510550 +:1023F00009F43CC04232510509F067CF83309105A2 +:1024000008F063CFFC01EE0FFF1FEF5DFD4F019061 +:10241000F081E02D825E9D4FDC018C9190E01AC02E +:10242000332721303105D1F02115310561F02230FB +:10243000310509F04ACFEBE5FCE0E4918E2F90E006 +:10244000EBE5FCE007C0EDE8FCE0E4918E2F90E0C6 +:10245000EDE8FCE0009709F438CFA5CFEBE7FCE00E +:10246000E4918E2F90E0EBE7FCE0F4CF8330910510 +:1024700008F02BCF880F991FFC01E95DFD4F0190FB +:10248000F081E02D89E090E08ECF82E190E0E9E4F8 +:10249000FCE089CF80916C04882309F465CF8530F6 +:1024A00009F462CF8091E80083FD5ECF8091E8005F +:1024B00082FD8DCF8091E80080FF83CF9091F30063 +:1024C0008091F2002115310519F08830910550F006 +:1024D00041E0089709F040E08091E8008E77809312 +:1024E000E8006FCF44914093F100319621503109BB +:1024F0000196E8CF803809F0E8CE8091E800877F28 +:102500008093E80080916D048093F10087CE811163 +:10251000DCCE10917004123008F0D7CE8091E80024 +:10252000877F8093E80010936D040E944F0711236A +:1025300011F084E005C08091E30087FDFACF81E0CF +:1025400080936C0442E061EC81E00E946E0742E2FD +:1025500061EC84E00E946E0742E261EC82E00E943E +:102560006E0742E260EC83E00E946E07AECE80917F +:102570007004813009F0A9CE81E0933009F080E049 +:1025800080936B041092E9008091E800877F80932C +:10259000E8000E944F0799CE1F93CF93DF93162F29 +:1025A000C0917E06D0917F068A30D1F420914304F9 +:1025B000CE018E579440622F70E00E941535281B83 +:1025C000822F66E00E942935C82FC15020F4DF9188 +:1025D000CF911F91089560E080E20E94CC12F5CF68 +:1025E0008D30E9F4CE57D44020914304622F70E03F +:1025F000CE010E941535281B822F9E01280F311D08 +:102600002115324018F080E0D0E0C0E0C80FD11DA5 +:10261000C258DB4FD0937F06C0937E06D8CF96E09A +:10262000FE01A4E4B4E001900D929A95E1F7803E9A +:1026300090F186E0FE0111928A95E9F7C0917E063D +:10264000D0917F06111133C046E050E0BE0184E412 +:1026500094E00E945F359E012E573440892B91F5FE +:102660002A5F3F4F40914304642F70E0C9010E94EC +:102670001535481B463010F4240F311D211572E02A +:10268000370710F030E020E022583B4F30937F06B0 +:1026900020937E069CCFF6E08F9FB00111246655F3 +:1026A000794F46E050E0CE010E945635C7CF9E01DB +:1026B0002A5F3F4FFE012E173F0731F28081809540 +:1026C0008193F9CFC90145E0969587954A95E1F741 +:1026D00041E050E0BA0102C0660F771F8A95E2F729 +:1026E000CB0160917C0470917D04862B972BB901FE +:1026F0006B5F7F4FE5E076956795EA95E1F702C05D +:10270000440F551F6A95E2F7842B952B90937D0417 +:1027100080937C04A5CFFF920F931F93CF93DF93F9 +:10272000EC01F62EFC0101900020E9F78F01015029 +:102730001109C017D10730F0DF91CF911F910F9190 +:10274000FF9008956F2D89910E94CC12F2CFE1E4A1 +:10275000F4E08083618324E630E042E050E0BF0192 +:1027600084EB0C944C32CF93C82F60E08CE00E9435 +:10277000A7136C2F84E00E94A71361E08CE0CF9137 +:102780000C94A7131F93CF93DF93CDB7DEB7629757 +:102790000FB6F894DEBF0FBECDBF96E0E4E2F3E0E3 +:1027A000DE01179601900D929A95E1F796E0FE01F1 +:1027B0003796DE011D9601900D929A95E1F71885E6 +:1027C000882309F1162B84E00E94B3131E8786E04C +:1027D000FE013D96DE01119601900D928A95E1F77A +:1027E00086E0FE013196A4E2B3E001900D928A9555 +:1027F000E1F762960FB6F894DEBF0FBECDBFDF9152 +:10280000CF911F91089560951623E0CFCF93DF936A +:10281000C3EED2E060E0CE010E9489352196C11559 +:1028200084E0D807B9F7DF91CF9108956F927F9236 +:102830008F929F92AF92BF92CF92DF92EF92FF92D0 +:102840000F931F93CF93DF938AEAC82E86E0D82E8A +:1028500091ECE92EF12CE701CC58D10936011BC0CF +:10286000F50185909490692DC8010E948935682DE5 +:10287000C80101960E94893582E0A80EB11C0E5F46 +:102880001F4FC017D10761F78EE0680E711C2E969E +:10289000CE15DF0529F08E010E5011095301E0CF4E +:1028A0007E018CE8E80EF11C8CE8C80ED11C8DE787 +:1028B000E81683E0F80679F6DF91CF911F910F912A +:1028C000FF90EF90DF90CF90BF90AF909F908F9050 +:1028D0007F906F900895CF93C82F6FEF811161E2C1 +:1028E00083E290E00E9489356FEFC11161E184E2DB +:1028F00090E00E9489356FEFC11163E185E290E0BD +:10290000CF910C94893580E00E946B1460E086E2E0 +:1029100090E00E9489350E9416140E94061481E0FE +:102920000C946B140F931F93CF93DF93C42FD0E0BD +:10293000CC0FDD1F2EE0629FC00DD11D11243CE89D +:10294000839FC00DD11D1124CE0187960E9475353D +:10295000082F10E0102F0027CE0188960E947535B1 +:102960009801282BC901DF91CF911F910F910895F4 +:10297000462F853038F47A3028F4673018F4672F02 +:102980000C94921490E080E00895CF92DF92FF9231 +:102990000F931F93CF93DF936C0100917604809186 +:1029A0009202082BC7E0D0E010E0FC2EC8010C2EEC +:1029B00002C0959587950A94E2F780FD0CC0219797 +:1029C000A0F7F12C8F2DDF91CF911F910F91FF90E8 +:1029D000DF90CF900895B6018C2F0E94B8140E940A +:1029E000180A019761F3EECFCF93DF93EC010E94B9 +:1029F000C514BE010E94B814DF91CF910C94180A3F +:102A0000FC01808191810E94F414292F2F709295EE +:102A10009F7092509E3078F4E92FF0E0E351F94C2A +:102A20000C944935803F19F020F4883E20F481E071 +:102A30000895843FE1F380E00895883EC0F3813F2C +:102A4000D1F7F5CF822F869586958695089583E2F6 +:102A500090E00E947535813289F484E290E00E9412 +:102A60007535813159F485E290E00E94753591E029 +:102A7000833109F090E0892F8170089580E0FCCFC8 +:102A8000CF92DF92EF92FF926B017C010E940E09C0 +:102A9000B701A60188E090E0FF90EF90DF90CF9023 +:102AA0000C949B35AF92BF92CF92DF92EF92FF9240 +:102AB0000F931F93CF93DF9300D00F92CDB7DEB764 +:102AC000082FF62E142FE22E8091770480FF4FC03E +:102AD000E82FE695AE2FB0E0AE5EBD4F9C9190938F +:102AE00059038E7F823009F056C0413A08F040EA1F +:102AF0009E012F5F3F4F6F2D802F0E9424098091F0 +:102B0000770480FF11C02B8139814A818091710146 +:102B10009091720153E0859FF0011124E15AFC4F1E +:102B2000891798F10E94E70E80917804801308C0FD +:102B3000809179048F1104C080917A04811729F063 +:102B400080915B03826080935B0300937804F09232 +:102B5000790410937A04EE2051F06091770470911B +:102B600078048091790490917A040E9440150F9026 +:102B70000F900F90DF91CF911F910F91FF90EF90E9 +:102B8000DF90CF90BF90AF90089541833083228330 +:102B90008F5F3396C5CF923039F6E2508E2F817019 +:102BA000D82EE695F0E0E55AF94FA590B490C12CE7 +:102BB000BB2460917301C61608F0B4CF2C2D30E011 +:102BC000A29EC001A39E900DB29E900D112470E0B4 +:102BD0000E941535802FD11016C0860F40917101CB +:102BE000420F532F511D9A01220F331F240F351FFF +:102BF000215A3C4F412F113A08F040EA6F2D0E94B4 +:102C00002409C394D6CF861BE9CFE7E7F4E04381DC +:102C100021E1421B08F440E021E0628181810C94B3 +:102C20005215E7E7F4E0438121E1420F08F44FEF4A +:102C300021E0628181810C945215E7E7F4E0628122 +:102C400021E1621B08F460E021E0438181810C9462 +:102C50005215E7E7F4E0628121E1620F08F46FEFBB +:102C600021E0438181810C945215E7E7F4E08181F2 +:102C700021E04381628188500C945215E7E7F4E02B +:102C8000818121E043816281885F0C94521580919B +:102C90007B04882319F0815080937B046091770432 +:102CA000709178048091790490917A040C94401585 +:102CB00080917B04833018F48F5F80937B04609154 +:102CC0007704709178048091790490917A040C943F +:102CD00040159091770490FF27C0917081111DC01D +:102CE00092609093770480915B03816080935B0393 +:102CF000662351F060917704709178048091790493 +:102D000090917A040E94401520E040917A046091ED +:102D10007904809178040C9452158C3010F09661EF +:102D2000E0CF880F982BDDCF089521E030E0A90196 +:102D300002C0440F551F8A95E2F7CA0120915C0337 +:102D4000662391F0822B80935C0380915B0380610A +:102D500080935B0380915A03811109C080917704AD +:102D600060E086950C94691680958223ECCF0895D7 +:102D7000CF93DF93C82FC17082FBDD27D0F981FB91 +:102D8000662760F985E00E94951661E06C2786E071 +:102D90000E9495166D2F87E0DF91CF910C949516C8 +:102DA0000F931F93CF93C82F61E08111682F61703B +:102DB00080E00E949516C1FB662760F9C11101C031 +:102DC00060E081E00E949516C2FB662760F9C111A0 +:102DD00001C060E082E00E949516C3FB662760F99F +:102DE000C11101C060E083E00E949516C4FB662714 +:102DF00060F9C11101C060E084E00E9495164C2F7B +:102E000050E070E060E0DB01CA01F4E0B695A79500 +:102E100097958795FA95D1F70097A105B10549F1E6 +:102E2000AC01BD0184E08A019B01E2E03695279563 +:102E300017950795EA95D1F701151105210531057B +:102E400019F08E5FB901A80176956795579547955A +:102E5000452B462B472B09F08F5F8230D1F158F478 +:102E60008823E9F0813059F18C2FCF911F910F9178 +:102E7000089580E0D8CF8330A1F18430A9F720E015 +:102E800040E56FEF8AED0E94521587E00E94B31370 +:102E900080910001882341F3109232030DC020E09D +:102EA00040E56FEF82E30E94521580910001882374 +:102EB00099F381E0809332030E94410DD5CF20E049 +:102EC00040E56FEF8CEF0E94521585E40E94B3132A +:102ED000CBCF20E040E56FEF80E50E94521585E200 +:102EE000F5CF20E040E56FEF86E70E9452158FE1B5 +:102EF000EDCF0E94D016809376040C94F70B80914E +:102F00007604982F9670963019F488600C9479178F +:102F1000877FFCCF21E030E001C0220F8A95EAF7DD +:102F200020958091760482230C94791721E030E07B +:102F300001C0220F8A95EAF780917604822B0C94C7 +:102F40007917809177048695815009F48BE061E0D0 +:102F50000C9469168091770486958F5F8C3008F009 +:102F600081E061E00C9469168091770480FF07C0CE +:102F7000869582588F77893010F40C94AA1761E0F7 +:102F800082E00C946916E7E7F4E083E08083118225 +:102F90008FEF828380EA83831482A9E5B3E01296DF +:102FA0008C911297836012968C93608171818281DB +:102FB00093810C944015AB01BC0188E190E00C9426 +:102FC0009B35CF93C82FEFE3F4E0982F990F990F1B +:102FD000990F80818770892B8083E0E4F4E09C2F37 +:102FE0009295969597708081887F892B80836091D8 +:102FF0003D0470913E0480913F04909140040E94F2 +:10300000DB176C2F82E0CF910C94A713EDE3F4E073 +:1030100089E88083118282818C7F828360913D0464 +:1030200070913E0480913F04909140040C94DB1712 +:10303000EDE3F4E080818E7F808360913D047091A8 +:103040003E0480913F04909140040C94DB17EDE323 +:10305000F4E080818160808360913D0470913E0442 +:1030600080913F04909140040C94DB1769EE7EEF51 +:1030700090E080E00E94A73560E082E090E00E944E +:10308000893560E083E090E00E94893510929202D9 +:1030900060E084E090E00E94893560E082E290E0A8 +:1030A0000E94893560E085E090E00E94893560E00B +:1030B00086E090E00E9489356FEF87E090E00E9403 +:1030C000893540E050E0BA0188E090E00E949B35ED +:1030D00060E08DE090E00E94893540E050E0BA0168 +:1030E00088E190E00E949B3560E087E190E00E94DB +:1030F000893540E050E0BA018CE190E00E949B35B8 +:1031000070E060E080E290E00E94A7350E9406181F +:1031100080E00E946B140E94831440E050E0BA01EA +:103120008FE090E00E949B3540E050E0BA0183E1DF +:1031300090E00C949B350F931F93CF93DF9300D0B7 +:1031400000D0CDB7DEB74091C5025091C602609164 +:10315000C7027091C8022FB7F894809157049091DC +:103160005804A0915904B0915A042FBF841B950BA9 +:10317000A60BB70B84369105A105B10588F10E9415 +:103180009F0E882379F10E9462086E5F7F4F8F4FF8 +:103190009F4F69837A838B839C8380912C019091CC +:1031A0002D0181559D4F40912B0150E04530510537 +:1031B00010F044E050E0BE016F5F7F4F0E946C351D +:1031C00084E090E00E946134892BD9F40E94620867 +:1031D0006093C5027093C6028093C7029093C802A1 +:1031E00081E010C00E9462080091D2021091D302C7 +:1031F0002091D4023091D502600F711F821F931F5E +:10320000C4CF80E00F900F900F900F90DF91CF917F +:103210001F910F9108958F929F92AF92BF92CF927C +:10322000DF92EF92FF920F931F93CF93DF93EB0107 +:1032300088809980AA80BB809FB7F894C09057047B +:10324000D0905804E0905904F0905A049FBFC818D9 +:10325000D908EA08FB0894E6C916D104E104F10490 +:1032600010F4442311F1E82E082E000CFF089AE018 +:103270008902F0011124EF5FFE4F83819481815513 +:103280009D4F428150E00417150708F4A801B901C9 +:103290000E946C35C7010E946134892BA1F40E9401 +:1032A0006208688379838A839B8381E0DF91CF9171 +:1032B0001F910F91FF90EF90DF90CF90BF90AF9054 +:1032C0009F908F90089580E0F1CF0F931F93CF933D +:1032D000DF930F92CDB7DEB780914E0489832091A2 +:1032E000C40290E041E02817190609F440E001E02B +:1032F00010E09E012F5F3F4F6DEC72E086E00E9470 +:103300000B190F90DF91CF911F910F9108950F939B +:103310001F93CF93DF93CDB7DEB729970FB6F894FD +:10332000DEBF0FBECDBF85E0E7E7F4E0DE0111961A +:1033300001900D928A95E1F78091590390915A037B +:10334000A0915B03B0915C038E839F83A887B987AC +:1033500041E08885811101C040E009E010E09E0154 +:103360002F5F3F4F69EC72E085E00E940B198111DD +:1033700010925B0329960FB6F894DEBF0FBECDBF47 +:10338000DF91CF911F910F9108956F927F928F924D +:103390009F92AF92BF92CF92DF92EF92FF920F93E4 +:1033A0001F93CF93DF930F92CDB7DEB7862E5A01CE +:1033B0006901682E880F7708C3010E946134892B48 +:1033C00009F088C08AE0869DF001879DF00D1124E8 +:1033D000EF5FFE4F458150E04115510511F041E08E +:1033E00050E08AE0869DF001879DF00D1124EF5F8B +:1033F000FE4F6681778161557D4FCE0101960E9417 +:103400006C35F50140815181628173812FB7F89449 +:103410008091570490915804A0915904B0915A0496 +:103420002FBF841B950BA60BB70B84369105A10506 +:10343000B10540F4B701C8010E94F30899818917CA +:1034400009F44FC0082C000C9908C4010E94613493 +:10345000892B91F0B12C8B2D0F90DF91CF911F9183 +:103460000F91FF90EF90DF90CF90BF90AF909F9023 +:103470008F907F906F9008958AE0889DF001899DDC +:10348000F00D1124EF5FFE4F458150E0E416F50684 +:1034900008F4A7018AE0889DF001899DF00D1124B0 +:1034A000EF5FFE4F6681778161557D4FC6010E94B7 +:1034B0006C35B701C8010E94F30899818913CACFFE +:1034C0000E946208F5016083718382839383BB2429 +:1034D000B394C1CFB12CA701B801C6010E946C35CD +:1034E000BACFBB24B394F7CFCF92DF92EF92FF9283 +:1034F0000F931F93CF93DF9300D000D00F92CDB7DF +:10350000DEB76B0185E0E82EF12C00EB12E09E01A6 +:103510002F5F3F4F47EA52E061E080E00E94C5190B +:10352000882349F095E0FE013196A2EAB2E00190CD +:103530000D929A95E1F795E0E2EAF2E0D60101906A +:103540000D929A95E1F70F900F900F900F900F90BA +:10355000DF91CF911F910F91FF90EF90DF90CF906F +:10356000089590E080E00E948335893E9E4F11F4DB +:103570000C94271580E008951F920F920FB60F92BA +:1035800011242F933F934F935F936F937F938F9368 +:103590009F93AF93BF93CF93DF93EF93FF93D0911C +:1035A000E900DF708091EC00C82FC17080FDC0E899 +:1035B0001092E9008091F000877F8093F00078946A +:1035C0000E9403101092E9008091F00088608093BF +:1035D000F000CD2BCF70C093E900FF91EF91DF9108 +:1035E000CF91BF91AF919F918F917F916F915F919B +:1035F0004F913F912F910F900FBE0F901F901895F4 +:103600001F920F920FB60F9211242F933F934F9357 +:103610005F936F937F938F939F93AF93BF93EF933A +:10362000FF938091E10082FF09C08091E20082FF58 +:1036300005C08091E1008B7F8093E1008091DA00EA +:1036400080FF24C08091D80080FF20C08091DA00E4 +:103650008E7F8093DA008091D90080FF9BC080E14B +:1036600089BD82E189BD09B400FEFDCF81E0809370 +:103670006C0480915E04811109C00E94D5060E94ED +:10368000A0078091E20084608093E2008091E100D5 +:1036900080FF17C08091E20080FF13C08091E2009C +:1036A0008E7F8093E2008091E20080618093E2004F +:1036B0008091D80080628093D80019BC85E0809307 +:1036C0006C048091E10084FF29C08091E20084FFB6 +:1036D00025C080E189BD82E189BD89B5982F9170AF +:1036E00080FFFBCF8091D8008F7D8093D8008091A0 +:1036F000E1008F7E8093E1008091E2008F7E8093D5 +:10370000E2008091E20081608093E20080916D048C +:10371000882309F445C084E080936C048091E10023 +:1037200083FF27C08091E20083FF23C08091E100E6 +:10373000877F8093E10082E080936C0410926D0497 +:103740008091E1008E7F8093E1008091E2008E7F86 +:103750008093E2008091E20080618093E20042E089 +:1037600060E080E00E946E078091F00088608093A6 +:10377000F000FF91EF91BF91AF919F918F917F9159 +:103780006F915F914F913F912F910F900FBE0F90CE +:103790001F90189519BC10926C0410925E0476CF9D +:1037A0008091E30087FD93E090936C04B7CF789409 +:1037B0001F921FB61F9211248F939F93AF93BF93B5 +:1037C0008091570490915804A0915904B0915A04E3 +:1037D0000196A11DB11D8093570490935804A093A6 +:1037E0005904B0935A04BF91AF919F918F911F904C +:1037F0001FBE1F9018959C014FB7F89480915704F5 +:1038000090915804A0915904B0915A044FBF821B63 +:10381000930B08952FB7F894809157049091580412 +:10382000A0915904B0915A042FBF08955F926F92EE +:103830007F928F929F92AF92BF92CF92DF92EF9240 +:10384000FF920F931F93CF93DF9300D000D00F927E +:10385000CDB7DEB77C01FC0183819481892B31F0E7 +:103860008081918189238F3F09F08CC60F900F9042 +:103870000F900F900F90DF91CF911F910F91FF90BC +:10388000EF90DF90CF90BF90AF909F908F907F9000 +:103890006F905F9008950E94C514182F682F89813A +:1038A0009A810E94CB0B69817A81812F0E94B81482 +:1038B0008C01F7018281882361F0F801E65EFC4506 +:1038C000ED30F10530F4E550F94C0C9449350E9487 +:1038D0002718D0903D04D0FE1CC08D2D8695837096 +:1038E000F7019281992309F460C1823090F4B70105 +:1038F000C8010E94B108882361F0D694D694D6946A +:1039000080913E0483708295880F807E8D290E946D +:10391000B313F7018281882309F429C6C8018251B3 +:103920009F45409708F0ECC58FEF93E00E947535F6 +:10393000025193EEA92E92E0B92E811197CF011179 +:1039400038C11C821B82662463948AE0582E85014C +:103950000F5F1F4FC5010E94753589831A82882326 +:1039600009F484CF9FEF980F933008F031C18A8318 +:10397000698232E0A30EB11CC8010E9475358B83A9 +:10398000882309F473CF8E010F5F1F4FF801208148 +:103990002223E9F2213009F055C1918182819130D1 +:1039A00009F018C10E5F1F4F6AE070E0893311F40F +:1039B00060E570E00E94D20E13C10E94181889CFF2 +:1039C00080913D0480FF0DC00E94181860913D0455 +:1039D00070913E0480913F04909140040E94DB1757 +:1039E00078CF0E942718F2CF0E94061872CF9091CC +:1039F0003D04892F86958F5F8370880F997F892B6F +:103A000080933D04982F9670963001F7897F8093BC +:103A10003D04DCCF90913E04892F8B7F92FF846020 +:103A200080933E04D3CF80913D04982F9695969530 +:103A3000969580913E0483708295880F807E892BB5 +:103A40008C3798F48F5F282F220F220F220F90912E +:103A50003D049770922B90933D04829586958370D8 +:103A600090913E049C7F892BDBCF81E0ECCF80914D +:103A70003D04982F96959695969580913E04837077 +:103A80008295880F807E892B11F08150DCCF8BE7E7 +:103A9000DACF30913E04932F969596959695209186 +:103AA0003F04822F83708295880F807E892B90E05F +:103AB0000196482F440F440F440F3770342B309336 +:103AC0003E0435E0969587953A95E1F783702C7F13 +:103AD000822B80933F047ACF30913E04932F9695AA +:103AE0009695969520913F04822F83708295880F3A +:103AF000807E892B8150990BDCCF80913F0482FF1F +:103B000012C08B7F80933F0460913D0470913E040E +:103B100080913F04909140040E94DB1760E081E0B7 +:103B20000E94A713D6CE846080933F0460913D0429 +:103B300070913E0480913F04909140040E94DB17F5 +:103B400060E08CE00E94A71364E182E00E94A7136A +:103B500065E081E00E94A71361E08CE0E1CF8091F5 +:103B60003F04982F9695969596958091400482955E +:103B7000880F807E892B883720F4865F0E94E117AA +:103B8000A8CE88E7FBCF80913F04982F9695969515 +:103B90009695809140048295880F807E892B843190 +:103BA00010F08A50EBCF84E1E9CF882309F4B1CE3D +:103BB0009ECEA114F4E0BF0609F458CEC5010E94C0 +:103BC0007535811101C001502FEFA21AB20AB7CE8C +:103BD0005801D9CE923039F40E5F1F4F0E94570C16 +:103BE0000F5F1F4FD3CE933029F40E5F1F4F0E94FB +:103BF0001E0CF6CF943019F00F5F1F4FF1CF0E5F00 +:103C00001F4F30E020E0B8016F5F7F4FF801418126 +:103C10008053990B8A30910550F02150310900F3FF +:103C20008FE99FE00197F1F700C00000F6CF529EA8 +:103C3000F001539EF00D11249C012E0F3F1F842F85 +:103C40008B01E1CFE22FF0E0E75FFD4F7490822F10 +:103C500086958695869590E0FC01E750FE4FE490AE +:103C60002770F12C022E02C0F594E7940A94E2F733 +:103C7000E1E0EE22FF24FC01E751FE4FC490D12C7D +:103C8000022E02C0D594C7940A94E2F7F1E0CF2245 +:103C9000DD24FC01E752FE4F8490912C02C09594E4 +:103CA00087942A95E2F721E082229924E114F10415 +:103CB00019F081EE0E94570CC114D10419F086EE60 +:103CC0000E94570C39E36AE070E0731202C060E5AD +:103CD00070E0872D0E94D20ECD2819F086EE0E944A +:103CE0001E0CEF2819F081EE0E941E0C892809F4A1 +:103CF00077CF6AE070E08CE25DCE81E00E9496179B +:103D000003C081E00E948A170F900F900F900F90D0 +:103D10000F90DF91CF911F910F91FF90EF90DF9067 +:103D2000CF90BF90AF909F908F907F906F905F905B +:103D30000C947F1782E0E2CF043F110509F455C1CE +:103D400008F057C1053E110509F4DDC0F701928165 +:103D500091113CC280915F0482720A3CFCE51F070E +:103D600009F414C208F06AC1053C3CE5130709F4E4 +:103D7000F9C108F04EC1033C5CE5150709F4D3C155 +:103D800008F0EBC1023C1C4509F47DC1F70100813C +:103D90001181992309F434C2C8010E94C514D82E98 +:103DA000682FC8010E94CB0BB8018D2D0E94B8145A +:103DB0000E94180A182FB82EF70122814581342F4E +:103DC00032953F70892F82958F70C82ED12C8C3000 +:103DD00008F04EC2F601E85FF84C0C944935033800 +:103DE000FFE51F0709F481C018F501383FE5130707 +:103DF00009F44AC008F065C000385FE5150709F00E +:103E0000A5CF882309F459C080919C02811106C076 +:103E100081E080939C0282EE0E94570C0E940A1C53 +:103E200090939B0280939A028BE20E94570C8ECF54 +:103E300005389FE5190709F4BEC008F476C00638B6 +:103E4000FFE51F0709F082CF882309F4CEC06091F7 +:103E5000590170915A0190E080E00E94C23520E043 +:103E600030E040E05CE30E94233620E030E040E8B0 +:103E70005FE30E94BD358111B5C080EE90E0909364 +:103E80005A0180935901A1C08823A1F080919C021E +:103E9000811106C081E080939C0282EE0E94570C43 +:103EA0000E940A1C90939B0280939A0281EE0E94CA +:103EB000570CBACF81EE0E941E0C8BE20E941E0CA2 +:103EC00045CF882309F442CF81EE0E94570C83EE40 +:103ED0000E94570C8FE40E94570C8FE40E941E0C26 +:103EE00083EE0E941E0C81EEE9CF882309F42ECFC9 +:103EF00081EE0E94570C83EE0E94570C80E50E94D1 +:103F0000570C80E5EBCF80933C0210933B0200936B +:103F10003A02882321F081E08093EE0217CF1092BD +:103F2000EE0214CF80933902F0CF882379F180918B +:103F30003902882349F080913A020E941E0C80EEDB +:103F40000E94570C8AE20CC080913C028823D1F376 +:103F500080913A020E941E0C80EE0E94570C8CE465 +:103F60000F900F900F900F900F90DF91CF911F91B6 +:103F70000F91FF90EF90DF90CF90BF90AF909F9008 +:103F80008F907F906F905F900C94570C8AE20E9404 +:103F90001E0C8CE40E941E0C80EE0E941E0C809170 +:103FA0003902811105C080913C02882309F45ECC5E +:103FB00080913A02D5CF8823C1F0809132038823C3 +:103FC00039F010923203109200010E94410DBECED2 +:103FD000809100018111F7CF81E0809332038093BB +:103FE0000001F3CF80E890E04ACF61E00E94C21365 +:103FF000ADCE62E0FBCF64E0F9CF882321F081E011 +:104000008093ED02A3CE1092ED02A0CE1092F002AA +:104010009DCE073C2CE5120709F4AEC008F4A7C0FA +:10402000083C4CE5140709F4ACC0093C1C4509F0F8 +:10403000ADCE45E056E161E176E179C0043DECE5C5 +:104040001E07A8F40E3CFCE51F0708F00FCC0C3C43 +:104050002CE5120709F49FC047E456E168E576E1D4 +:104060000D3C1C4508F463C061E081E046C0053D9D +:104070004CE5140709F4FACB08F492C00D351D4540 +:1040800009F4F4CB83CE8091770480FF31C08E7F1A +:10409000809377046091770470917804809179041B +:1040A00090917A040E94401580915B038160809317 +:1040B0005B039FEFE0E7F2E09150E040F040E1F772 +:1040C00000C000000F900F900F900F900F90DF91A5 +:1040D000CF911F910F91FF90EF90DF90CF90BF9005 +:1040E000AF909F908F907F906F905F900C94E70EB1 +:1040F00081608093770461E086950F900F900F9018 +:104100000F900F90DF91CF911F910F91FF90EF9043 +:10411000DF90CF90BF90AF909F908F907F906F90E7 +:104120005F900C94691641EA57E16AEA77E10F90D3 +:104130000F900F900F900F90DF91CF911F910F91E3 +:10414000FF90EF90DF90CF90BF90AF909F908F90B7 +:104150007F906F905F900C9409094AEA57E161EAF9 +:1041600077E1E5CF45E356E16EE376E1E0CF4EE35C +:1041700056E165E376E1DBCF4DE156E169E276E1B8 +:10418000D6CF49E256E16DE176E1D1CF41E156E18A +:1041900065E076E1CCCF48E556E167E476E1C7CF4C +:1041A0000F900F900F900F900F90DF91CF911F9174 +:1041B0000F91FF90EF90DF90CF90BF90AF909F90C6 +:1041C0008F907F906F905F900C94B4170E3D1C45BC +:1041D00009F0DCCD0F900F900F900F900F90DF91B2 +:1041E000CF911F910F91FF90EF90DF90CF90BF90F4 +:1041F000AF909F908F907F906F905F900C94361847 +:10420000C8010E94A30BD82ECFCD092F0F70907F2D +:1042100011F00295007F812F2223C9F0002369F05D +:1042200090E2910F983010F011110BC080915F0453 +:10423000082B00935F040E94820B812F0E94570C71 +:1042400017C080919102082B00939102F4CF0E9435 +:104250001E0C002369F00095105E183010F0B110AC +:1042600027C080915F04082300935F040E94820BA3 +:1042700098E0C91AD108E4E0CE16D10408F0F6CAD5 +:104280000E94C20E0F900F900F900F900F90DF9131 +:10429000CF911F910F91FF90EF90DF90CF90BF9043 +:1042A000AF909F908F907F906F905F900C94B81616 +:1042B00080919102082300939102D8CF892F8F70AB +:1042C000907F903211F08295807FF1E0BF120CC098 +:1042D000222329F0333060F60E94140CC9CF32300B +:1042E00038F60E94090CC4CF222341F03323A1F3F6 +:1042F00040FFA3CF4F70F7014583EECF332389F3FF +:10430000193309F0F5C0FFEF27EE33E0F1502040FC +:104310003040E1F700C00000812F0E941E0CA8CFA2 +:10432000892F86958695837061F0813009F0A0CF42 +:10433000812F9370211102C090E080E00E946E08EE +:1043400097CF812F9370211102C090E080E00E94EE +:1043500084088ECF892F8370A1F5211189CF812FF9 +:10436000829586958770880F880F412F4F70082E91 +:1043700001C0440F0A94EAF7212F207114FF07C0EF +:104380002FE030E001C0220F8A95EAF7209596953C +:1043900096959370923081F0822F842B933030F475 +:1043A00080919202913029F0242B82230E94050CE7 +:1043B0005FCF842B822BFACF242B8091920282270D +:1043C000F5CF8695222311F0892F8170882309F477 +:1043D0004FCF812F829586958770880F880F412F48 +:1043E0004F70082E01C0440F0A94EAF7212F207164 +:1043F00014FF07C02FE030E001C0220F8A95EAF7D2 +:104400002095969596959370923081F0822F842B0B +:10441000933030F480917604913029F0242B82235C +:104420000E94791725CF842B822BFACF242B8091E1 +:1044300076048227F5CF092F0F70222329F0802FD1 +:104440000E949617812F48CF812F0E94090C802F40 +:104450000E948A170DCF812FE1EF1E1789F1E11716 +:1044600050F0F0EF1F17B9F02223B1F13111E5CE72 +:10447000892F8F7129C042EF141749F153EF15139B +:10448000F3CF80E0222361F29F7181E001C0880FA9 +:104490009A95EAF7C5CF222379F0323008F0E8CEBA +:1044A000292F2F7181E090E001C0880F2A95EAF74B +:1044B000909176048927B4CF333008F0D9CEF0CF6D +:1044C000892F8F71222321F20E949617D1CE892F36 +:1044D0008F712223C9F3BCCF332379F0893341F4A0 +:1044E0008FEF97EEE3E081509040E040E1F712CF8C +:1044F0008FE39CE90197F1F70DCF892F8F71A8CF3A +:104500000031FFE51F0709F4F8CB01312FE5120751 +:1045100009F410CC0E9462086093F5027093F602D1 +:104520008093F7029093F802F7018281063F11050C +:1045300009F461CD08F053CC043E110509F45DCDBA +:1045400008F0FACB003E110509F457CD013E1105E4 +:1045500009F4E8CC0C32110509F0F8CB882309F4F2 +:1045600055CD81E08093F00210926701EFCB0031CE +:104570003FE5130709F4C5CB01314FE51407A1F658 +:1045800082E0C0CB85E0DE01119601900D928A9504 +:10459000E1F7F701228189819A8121117CC90E946A +:1045A000A30B182F80C91F93CF93DF9380915D02D7 +:1045B000807FA9F480915A02882389F080918F022C +:1045C000D0915E026091580270915902A0915B02F5 +:1045D000B0915C02C62FC72316E0D81304C0DF9148 +:1045E000CF911F91089590E0109711F0CF3F19F4EB +:1045F00001968770F2CF189F9001199F300D1124FA +:10460000F901E15AFD4F41814713F2CF4081461332 +:10461000EFCF42814111ECCF438154814A1B5B0BA8 +:10462000403A510528F780915D028F708061809338 +:104630005D02F901EC59FD4F80818F7080618083AC +:1046400088E592E00E94161CDF91CF911F910C9497 +:10465000990BAF92BF92CF92DF92EF92FF920F939E +:104660001F93CF93DF93CDB7DEB761970FB6F89462 +:10467000DEBF0FBECDBF8C0185E0F801DE011D96C7 +:1046800001900D928A95E1F7F801E28088E5A82E65 +:1046900082E0B82E60915B0270915C026115710539 +:1046A00009F432C19091580240915902892F842314 +:1046B0008F3F09F429C120813181C380D480F090DB +:1046C0005A02F601E61BF70BFF2009F4E8C08091BF +:1046D0005D02582F507FE03AF10508F0ABC0511150 +:1046E00077C0FE2C431321C092131FC0E1101DC0E0 +:1046F0008F70806180935D02C5010E94161C8091BD +:104700005D02F80185838F2D61960FB6F894DEBFA8 +:104710000FBECDBFDF91CF911F910F91FF90EF9012 +:10472000DF90CF90BF90AF900895CD2829F0822FD1 +:1047300083238F3F09F003C180E0F82FF170DF2E53 +:1047400080FF3CC080918F0240915E0256E084134E +:1047500015C02D873E878D859E850E94F414292FD4 +:1047600022952F702230F0F0243018F59F70F1F070 +:10477000F8019581907FD1F4D12C1EC090E0589F14 +:10478000F001599FF00D1124E15AFD4F618136135C +:1047900006C06081261303C06281E6120FC0019635 +:1047A0008770D5CF9F7011F0882331F3805E8830F9 +:1047B00018F3C8010E94161CFD2CA5CFEE2009F4A9 +:1047C000A2CF80915D02816080935D02F12C9BCF2E +:1047D000431306C0921304C0F801EE2009F479C017 +:1047E000C8010E940015882309F1EE20F9F080919C +:1047F0005D02803270F02091580230915902388762 +:104800002F831986DB86CA868C87CE0107960E9485 +:10481000161C86E0F801A8E5B2E001900D928A9599 +:10482000E1F70E94D322FF24F3946DCFC8010E94C8 +:10483000161CF9CF51110AC088E592E00E94161C9F +:1048400086E0F50111928A95E9F7C0CF43130FC0B6 +:1048500092130DC0E1100BC0F8018583C8010E94BE +:10486000161C86E0F50111928A95E9F74CCFC80134 +:104870000E9400158823D1F2EE20C1F280915D02E2 +:10488000803238F220915802309159023A832983BC +:104890001B82DD82CC828E83CE010196B8CFE03AB6 +:1048A000F105F8F6FE2CEE2009F243131FC0921317 +:1048B0001DC080915D0280FD10C0982F907F69F02F +:1048C000F8018583903F31F0982F907F905F8F7033 +:1048D000892B8583C8010E94161C86E0F801A8E593 +:1048E000B2E001900D928A95E1F70DCFC8010E94C8 +:1048F000001581118ECF80915D02816080935D02F1 +:10490000C8010E94161CFFCEEE2009F48FCFC8010B +:104910000E940015F82E882309F488CF86E0F8015C +:10492000A8E5B2E001900D928A95E1F780915802D6 +:10493000909159020E94F4140E94D322E4CE81E0A7 +:104940008E25FBCE1F93CF93DF93CDB7DEB767974E +:104950000FB6F894DEBF0FBECDBF4B8B5C8B6D8B5B +:104960007E8B8F8B6111109291021A8A198A85E0D1 +:10497000FE017396DE011D9601900D928A95E1F776 +:1049800086E0FE013D96DE01179601900D928A9514 +:10499000E1F7CE0107960E942923882389F016E0CB +:1049A00080918F0290915E0289134BC067960FB67B +:1049B000F894DEBF0FBECDBFDF91CF911F91089558 +:1049C00086E0FE013796DE01119601900D928A95E0 +:1049D000E1F78A859B85892B11F38F81988589233F +:1049E0008F3FE9F220915E0230E0C90101968770A5 +:1049F000992740918F024817190681F410925F049D +:104A00000E94FA0F10925E0210928F0286E0E8E593 +:104A1000F2E0DF011D928A95E9F7C1CF96E0929FFF +:104A2000D001939FB00D1124A15ABD4FFE013196C4 +:104A300001900D929A95E1F780935E020E94990B86 +:104A4000AECF819FC0011124815A9D4F0E9429231E +:104A5000882309F4ABCF80918F0290E00196877094 +:104A6000992780938F029CCF9F92AF92BF92CF9253 +:104A7000DF92EF92FF920F931F93CF93DF93CDB707 +:104A8000DEB764970FB6F894DEBF0FBECDBF8E01C0 +:104A90000F5F1F4F8AE0D8011D928A95E9F79EE4C7 +:104AA000C92E91E0D92EF12CE12CAA24A394B12C8B +:104AB000F60181916F018F3F09F44AC0F894E82F05 +:104AC000E295EF70F0E021A18F70A50102C0440FC4 +:104AD000551F8A95E2F7CA01922F982B91A392A1B4 +:104AE0008095892382A30E94BC0900C0E7E4F1E01D +:104AF00030E020E0912C41914F3F09F47DC0A42F7C +:104B0000A295AF70B0E090968C9190E04F7002C08B +:104B1000959587954A95E2F780FD6EC08A2D022E05 +:104B200001C0880F0A94EAF7982A2F5F3F4F273079 +:104B3000310509F7F601319780818F3F11F00E940E +:104B4000BE0950EA5A95F1F7F801EE0DFF1D90826B +:104B50008FEFE81AF80A95E0E916F10409F0A8CFFA +:104B60004AE050E0B80188ED92E00E945F357C0198 +:104B7000892B41F08AE0F801A8EDB2E001900D9296 +:104B80008A95E1F71091E302E114F104B9F181E0B3 +:104B9000809395020E940A1C909394028093930242 +:104BA00080919302909194020E94FB1B069770F0F3 +:104BB000A8EDB2E0E12FF0E0E15BFC4F8D91819335 +:104BC00022E0AD3DB207D1F71092950281E090E06E +:104BD000EF28C1F064960FB6F894DEBF0FBECDBFCC +:104BE000DF91CF911F910F91FF90EF90DF90CF90C9 +:104BF000BF90AF909F90089580E096CF80919502EE +:104C00008111CECF0E949F0EB82EE091E30288233F +:104C100009F4C7C08E01005F1F4F85E0D8011D92C7 +:104C20008A95E9F7F0E09F01215B3C4F7901809183 +:104C3000D102AE014B5E5F4F6A018A3008F086C038 +:104C400044E75AE1B801C7010E945B0E882309F4CA +:104C500094C045EA57E2B801C7010E945B0E882361 +:104C600009F48BC04BE958E1B801C7010E945B0E03 +:104C7000882309F482C047E859E1B801C7010E94BE +:104C80005B0E882309F479C045E659E1B801C701F4 +:104C90000E945B0E882309F470C01092D102E0914B +:104CA000E202F0E0AF01415B5C4FD80110E0FA0195 +:104CB0009191AF018D91981731F09F0121503109E9 +:104CC000F90180831B2DCA16DB0689F780919C02AF +:104CD000882371F080919A0290919B020E94FB1BA5 +:104CE000893E934028F082EE0E941E0C10929C0296 +:104CF00088E9C82E82E0D82EF12CE12CD6018D91C6 +:104D00006D018823D1F08695F70109F447C0EC5076 +:104D1000FE4F808191819C878B871D860E940A1C93 +:104D20008160782F9F878E87F601319710824B859F +:104D30005C856D858F850E94A224B2E0EB0EF11C8C +:104D4000E4E0EE16F104D1F6812F44CF8091960273 +:104D5000909197020E94FB1B843F914008F070CF16 +:104D6000A091E202B0E0A15BBC4FF8011D9211924C +:104D7000CE16DF06D9F71B2DA9CF8091D1028F3F28 +:104D800031F08F5F8093D1028A3008F488CF0E947F +:104D90000A1C9093970280939602E2CFE051FE4F57 +:104DA000B8CFF0E0E15BFC4FF89485E0A0EBB2E017 +:104DB00001900D928A95E1F765E070E080EB92E05A +:104DC0000E94F3088093AF020E94BC09F894E0911E +:104DD000EB02F0E0E851FD4F80818B878093B602B3 +:104DE00061E070E0CE010B960E94F3088093B5025B +:104DF0000E94BC09F894C090B702D090B802E0902D +:104E0000B902F090BA0280919D0290919E02A09109 +:104E10009F02B091A002C816D906EA06FB06D1F09F +:104E2000C0929D02D0929E02E0929F02F092A00258 +:104E30000E949F0E81110EC00E946208C61AD70AF6 +:104E4000E80AF90AC092D202D092D302E092D402C8 +:104E5000F092D5020E94BC09F8948091C202882386 +:104E600021F184FF04C09091C30290935C0380FF02 +:104E70000DC08091BB0280FF25C0909177049160A6 +:104E80009093770460E086950E9469168091C20233 +:104E900081FF09C020E04091BE026091BD02809177 +:104EA000BC020E9452151092C2020E94BC09F894E2 +:104EB0008091C402882349F00E94B30D0E94BC096E +:104EC00080E088CE0E94E50FE1CF0E94980DF6CFDA +:104ED000EF92FF920F931F93CF93DF9300D000D0F8 +:104EE0000F92CDB7DEB7162FE82EF12CC701880F31 +:104EF000991F662339F18C509E4FFC01808191816E +:104F00009A83898301E00B830E940A1C8160782FB9 +:104F10009D838C83F701E856FD4F0127110F102B5D +:104F2000108349815A816B818D810F900F900F9072 +:104F30000F900F90DF91CF911F910F91FF90EF9005 +:104F40000C94A22480519E4FD8CFCF92DF92EF9243 +:104F5000FF920F931F93CF93DF930F92CDB7DEB7DE +:104F6000EE24E394F12C06EB12E09E012F5F3F4FFD +:104F70004BEA52E063E082E00E94C519082F8823C3 +:104F800021F1C090E5028C2D90E09C0128513D4F0D +:104F900079011981F9018081181BD12E80E00AC0A6 +:104FA000DA94F70180818F5F808360E08C2D0E940E +:104FB0006827802F1D14A4F3912F17FD90E0191B73 +:104FC00011110EC081110E94800B802F0F90DF9174 +:104FD000CF911F910F91FF90EF90DF90CF900895A8 +:104FE0001F5FF70180818150808361E08C2D0E94DA +:104FF0006827802FE5CF1F921FB61F9211248F9331 +:105000009F93AF93BF9380915604811113C08091F9 +:10501000570490915804A0915904B0915A044196B4 +:10502000A11DB11D8093570490935804A093590477 +:10503000B0935A04BF91AF919F918F911F901FBE63 +:105040001F901895CDB7DEB7E9970FB6F894DEBF7D +:105050000FBECDBF84B7877F84BF0FB6F894A895E5 +:1050600080916000886180936000109260000FBEA4 +:1050700080E890E00FB6F89480936100909361000F +:105080000FBE85B7806885BF85B7806885BF8AEB0E +:1050900099E090932F0280932E020E94D5060E94E1 +:1050A000A0078091E20084608093E2007894809170 +:1050B0006C048823A1F01091E9001F709091EC001E +:1050C000892F817090FD80E8182B1092E900809163 +:1050D000E80083FD0E9403101F701093E90082E036 +:1050E00084BD93E095BD9AEF97BD80936E001092BA +:1050F000D2021092D3021092D4021092D5020E94D2 +:105100002715811102C00E9483140E949F0E809374 +:10511000580180915801882309F4C6C010926F018C +:1051200085E2809370010E949F0E81110E9454338A +:105130008091580181112FC0FE01359686E0DF0174 +:105140001D928A95E9F786E6898387E98A8386EC4A +:105150008B8384E38C8385E38D833497AEE4B1E065 +:10516000CE010B9621912D938E179F07D9F787E0DB +:10517000E5E7F1E0DE01919601900D928A95E1F765 +:10518000FE01B196A7E4B1E0CE01889621912D935E +:105190008E179F07D9F78091580195E0811190E013 +:1051A0009093E30285E0891B8093E2020EE411E014 +:1051B000A3E5EA2EA1E0FA2EF80181918F018F3F3D +:1051C00011F00E94BE09E016F106B1F707E411E004 +:1051D000FEE4EF2EF1E0FF2ED8018D918D018F3F7F +:1051E00011F00E94BE09E016F106B1F7E8EDF2E019 +:1051F00082EE92E0AFE4B3E011921D928E179F070A +:10520000D9F70E94B11A811102C00E94361882E0BB +:1052100090E00E9475358093440384E090E00E9402 +:105220007535182F82E290E00E947535982F812FF6 +:105230009093D7028093D6020E943425EFE7FBEBD0 +:105240003197F1F700C000000E94342580914F0390 +:1052500080FF2EC06FEF7FEF90E080E00E94A735C7 +:1052600081E08093E00080E28093D8001092C90032 +:105270008FE19EE40197F1F700C0000087E090EB1A +:10528000DC018093800690938106A0938206B09300 +:10529000830688E19CE00FB6F894A895809360009F +:1052A0000FBE90936000FFCF85E280936F0139CFEE +:1052B00083E090E00E9475350E94050C8091760491 +:1052C0000E94D0160E94B11A811102C00E943618A5 +:1052D00088E190E00E947D3560933D0470933E0428 +:1052E00080933F0490934004672B682B692B11F443 +:1052F0000E9406180E94553167E081E00E94A713C2 +:1053000060E586E10E94A7136BE687E10E94A71380 +:1053100060EB8AE10E94A71369E98BE10E94A71361 +:1053200065EF8CE10E94A71360EA8DE10E94A7134C +:1053300060E38EE10E94A71366E083E00E94A7135A +:1053400061E08CE00E94A71360E081E00E94A71357 +:1053500060E08CE00E94A7136FE084E00E94A71336 +:1053600061E08CE00E94A7130E949F0E811102C091 +:105370000E94573383E080931A0380E280934304B2 +:105380000E9455316DE070E08CE992E00E94680D5A +:10539000892BE9F580911A0363E070E081FD9EC2DC +:1053A00089E992E00E94680D892B89F56DE070E033 +:1053B00089E892E00E94680D892B49F50E946208F5 +:1053C0006058774C8E4F9F4F60934A0470934B0404 +:1053D00080934C0490934D04EEE7F4E080E092E07B +:1053E000DF019C011D9221503040E1F7F0937F06D0 +:1053F000E0937E068FEF9FEF90937D0480937C0473 +:1054000081E080934F0480934E0410921B0380919F +:10541000E402811136C00E94B11A811104C00E94B9 +:1054200036180E94C31788E090E00E947D35609393 +:105430007704709378048093790490937A04809130 +:105440005B03836080935B036E7F71F40E94C317DC +:1054500088E090E00E947D35609377047093780433 +:105460008093790490937A040E940E0980917704C6 +:1054700080FF04C060E086950E94691681E08093F9 +:10548000E40280915801811106C084EF8093660187 +:1054900085EF8093650120916601A22FA295AF70E0 +:1054A000B0E091963C9191972F7081E090E0BC0123 +:1054B000022E01C0660F0A94EAF7462F4095432357 +:1054C00091964C93919792963C919297362B929607 +:1054D0003C93929740916501E42FE295EF70F0E0E4 +:1054E00031A14F70042E01C0880F0A94EAF7982F5B +:1054F0009095932391A392A1892B82A390968C914E +:1055000090E002C0959587952A95E2F7817020A1D9 +:1055100030E002C0359527954A95E2F792E020FFEA +:1055200090E0892B8093EC028091580111E0812753 +:105530008093EB02312F381B3093E5020E945531E6 +:1055400040E060E080E00E94210D89EA92E09093C3 +:105550005E0380935D0360E08AE00E94691681E04B +:105560000E94791780EE90E090935A018093590140 +:10557000109332030E94410D8BE591E09093530408 +:10558000809352043E018DE3680E711C80916C047F +:10559000FF24F39400E112E1853009F4F2C10E9486 +:1055A0003425E82E81110E946208E5E4F3E0AFE4BF +:1055B000B3E010E000E0B02EDD9081918D1509F48C +:1055C00004C28D25C12CFF24F394982F9F2109F448 +:1055D000F7C10E949F0E882399F0CEA6BFA6DF20B8 +:1055E00081E009F480E088AB0E940A1C8160782F7A +:1055F0009AAB89AB4EA55FA568A98AA90E94A2248F +:10560000F801EB5BFC4F8081F826F0828091EC0280 +:10561000E82FEE0FEE0F90916601A92FA295AF70C3 +:10562000B0E090962C9130E09F7002C035952795A0 +:105630009A95E2F72170332790916501A92FA295E1 +:10564000AF70B0E090964C9150E09F7002C05595BD +:1056500047959A95E2F7CA018170992740FF02C0E9 +:1056600082E090E0822B8E2B8093EC021091EB0273 +:105670008F70E82FF0E0E650FE4F80819091EA02B3 +:10568000890F8093EA02F12C84306CF0E12FF0E076 +:10569000E851FD4F80818F5F808360E0812F0E9401 +:1056A0006827FF24F3948091EA028D3F6CF4E12F88 +:1056B000F0E0E851FD4F80818150808361E0812FCF +:1056C0000E946827FF24F3948091EA02082E000CC0 +:1056D000990B64E070E00E9435358093EA02F11086 +:1056E0000E94800B80914F04882351F180911C030C +:1056F00090911D030E94FB1BC29708F07DC1209171 +:105700007C0430917D042115310509F0A0C28091FF +:105710004E048823A9F00E94620800914A04109167 +:105720004B0420914C0430914D04601B710B820B93 +:10573000930B6F3F7F4F8F4F9F4710F40E94980D40 +:10574000E11001C0F1100E94B30D809142038A3034 +:1057500008F0BAC380914003909141030E94FB1B63 +:10576000069708F4B1C304E610E025E030E04BE30F +:1057700053E064E084E10E94A032892B09F075C3F4 +:105780001092420320913203222359F080913B036F +:1057900090913C0398278927982790933C03809306 +:1057A0003B0386E0E4E2F3E0DE01919601900D9286 +:1057B0008A95E1F786E0FE01B196DE01119601902F +:1057C0000D928A95E1F786E0FE013196A5E3B3E0FC +:1057D00001900D928A95E1F790913F0380913603F5 +:1057E00097FD3AC38E7F8093360380913303909167 +:1057F0003403009709F02AC360913B0380913C0376 +:1058000000913D0310913E03222309F4F2C241E0CE +:105810000E94FB0C2091300330913103820F931FC3 +:10582000909331038093300341E0602F812F0E94D9 +:10583000FB0C20912E0330912F03820F931F909326 +:105840002F0380932E0360E373E08AE393E00E94CA +:10585000DC0C6EE273E089E393E00E94DC0C1092B2 +:1058600037031092380386E0E5E3F3E0DE0111969A +:1058700001900D928A95E1F786E0FE013196A4E24F +:10588000B3E001900D928A95E1F7309126032091C3 +:105890002703909128038091290370912003609140 +:1058A00021034091220350912303F0912503E091BD +:1058B0001F03FE13E0C2332311F07313DCC2222353 +:1058C00011F02613D8C2882311F08513D4C299236E +:1058D00019F081E04913D0C280E0CEC286E992E09F +:1058E00061CD80916C04843009F43BC00E94980D16 +:1058F00040E060E080E00E94210D80E00E94B81648 +:105900008091E702811109C0F092E702809177044B +:1059100081708093E6020E94E50F10925604A8E180 +:10592000B0E0E0E40FB6F894A895A09360000FBE35 +:10593000E093600083B7817F846083BF83B7816019 +:1059400083BF7894889583B78E7F83BF0FB6F89412 +:10595000A89580916000886180936000109260003B +:105960000FBE80916B04882361F00E943425EFE420 +:10597000F3E08191811178C429E533E02E173F07C8 +:10598000C1F780916C04853009F4ABCF10925F04AD +:105990000E94FA0F0E94C20E0E94B8161092E702EF +:1059A0008091E602882349F080917704816080939A +:1059B000770460E086950E9469160E94410DEFCD44 +:1059C000C394FF0C37E0C31200CE0F5F1F4F0A30A5 +:1059D000110509F0F0CD8FEF8BAB8CAB1DAA0E94A7 +:1059E0000A1C8160782F9FAB8EAB4BA95CA96DA977 +:1059F0008FA90E94A2240ACE0E940A1C90931D0324 +:105A000080931C0360E080E00E949A080E94C20E0E +:105A10008093F9020E949F0E882331F14091F50294 +:105A20005091F6026091F7027091F8022FB7F89446 +:105A30008091570490915804A0915904B0915A0450 +:105A40002FBF841B950BA60BB70B81339547A10580 +:105A5000B10540F00E94980D80914F04882309F40D +:105A600056CE4DCE0E94B30D0E949F0E882309F49E +:105A7000D5C061E080E00E949A0860E08CE791E088 +:105A80000E948B1362E080E00E949A088091760465 +:105A90000E94CB0C823009F49BC008F090C0882390 +:105AA00009F496C0813009F499C065E080E00E9455 +:105AB0009A0860E08AE991E00E948B1366E080E03A +:105AC0000E949A086091F902669561708FE991E0F1 +:105AD0000E948B1367E080E00E949A086091F902AF +:105AE0006095617084EA91E00E948B1368E080E029 +:105AF0000E949A086091F90262FB662760F988EAC1 +:105B000091E00E948B137DA66CA64091F10250910A +:105B1000F2026091F3027091F4022FB7F894809131 +:105B2000570490915804A0915904B0915A042FBF82 +:105B3000841B950BA60BB70B8D329140A105B105C7 +:105B400008F48ACF0E9462086093F1027093F20217 +:105B50008093F3029093F4028091F002811104C0CB +:105B600080916701811142C06DE080E00E949A0837 +:105B700060E08DEA91E00E948B136AE080E00E9471 +:105B80009A0881E0809367018091EF0290E001968E +:105B9000817099278093EF0221E030E0281B390BB8 +:105BA00040E6429FC001439F900D11242091EE02D8 +:105BB000222351F1855C9B4F0E9492064DCF83308A +:105BC00089F0843009F071CF60E08EE891E003C085 +:105BD00060E082E891E00E948B1367CF60E088E884 +:105BE00091E0F9CF60E084E991E0F5CF6AE080E0F0 +:105BF0000E949A0860E08DEA91E00E948B136BE0AE +:105C000080E00E949A08C0CF2091ED02222319F073 +:105C100085589C4FD1CF85549D4FCECF64E080E016 +:105C20000E949A0860E083EB91E00E948B1365E08C +:105C300080E00E949A0860E089EB91E00E948B135B +:105C400069E080E00E949A088BEF94E0B5CF8091E4 +:105C50001B0361E070E081115ACD082F10E02B0189 +:105C6000082E02C0440C551C0A94E2F7A9014421F5 +:105C70005521452B09F448C090911A0390FD46C068 +:105C80008295880F807680936A01980136952795D2 +:105C90003695279520936D01815E80936B0110925C +:105CA0006E0124E630E047E050E068E671E088E706 +:105CB0000E944C32892B09F02ACDA80175E0440FCF +:105CC000551F7A95E1F780911A0380FD2DC0425847 +:105CD0005B4F04E610E020E230E060E488E70E94D9 +:105CE0007332892B09F013CD0E94B30DC201809548 +:105CF000909540907C0450907D0448225922509207 +:105D00007D0440927C0403CD8F5FA7CF880F880F5E +:105D1000880F80936A0110926D01895F80936B01F7 +:105D200083E080936E01BDCFEAEFF2E080E2DF0115 +:105D30001D928A95E9F7EEE0F2E0F9AFE8AF0AE0EC +:105D400012E099249394A8ADB9AD2D91B9AFA8AF45 +:105D5000F80121908F01240E352E311CC10182588B +:105D60009B4F1C01E22FF0E0E650FD4F30E020E0B9 +:105D700067E0A62EA21AB92C022E01C0BB0C0A9411 +:105D8000EAF7610190E0D6018D916D018B216A2DBA +:105D9000691B6770862E062E000C770BB82F01C08A +:105DA000BB0F8A94EAF78B2E719561957109677024 +:105DB000772701C086956A95EAF7882A8081882A24 +:105DC00080829F5F9830F9F62F5F3F4F31962830E1 +:105DD000310571F6E2E1F2E028AD39ADE217F307E3 +:105DE00009F0B1CF04E610E020E230E04AEF52E0E3 +:105DF00074CF45E00E94FB0C20912C0330912D03C1 +:105E0000281B390B30932D0320932C0345E0602F82 +:105E1000812F0E94FB0C20912A0330912B03281B19 +:105E2000390B30932B0320932A036CE273E087E352 +:105E300093E00E94DC0C6AE273E088E393E00E9446 +:105E4000DC0C10923A03109239030DCD0197909318 +:105E500034038093330307CD81608093360384E05D +:105E60000E94B31384E190E0F2CF809142038F5FF0 +:105E700080934203F8CC81E080FF0FC0E091520490 +:105E8000F0915304309749F082E08093240304801A +:105E9000F581E02D84E293E009951092260310929B +:105EA0002703109228031092290386E0E4E2F3E02E +:105EB000AEE1B3E001900D928A95E1F70E940A1CD1 +:105EC00090934103809340030E94C20E909143033C +:105ED000891731F00E94C20E809343030E94B816C6 +:105EE00080916C04843009F051CB83E08093E90009 +:105EF0008091E80082FF4ACB8091E80090E085FF26 +:105F00000BC00E94F40630E2E32EF12C8E010F5FED +:105F10001F4F8823E1F091E08091E8008B77809318 +:105F2000E800992309F432CBE981E150E33108F02C +:105F300071C0F0E0EC5EF84C0C9449358091F100B2 +:105F4000D8018D938D01B1E0EB1AF10821F3809116 +:105F5000E80085FDF3CF8091E8008B778093E8001F +:105F60000E94F406882399F3D6CF1A8289E08B83A6 +:105F700011C08A81823009F48FC1833091F1813060 +:105F800009F048C00E9462080E944F356B837C83F1 +:105F90008D839E8380916C04843009F0F7CA109140 +:105FA000E9001F709091EC00892F817090FD80E8CE +:105FB000182B82E08093E9008091E80080FF0DC0FB +:105FC00050E040E060E270E0CE0101960E942507BB +:105FD0008091E8008E778093E8001F701093E900AD +:105FE000D5CADE011396EFE4F3E081918D9323E0AF +:105FF000E935F207D1F7CECF8A81823059F46B812F +:106000007C818D819E810E944F3586E290E00E94C6 +:106010008935C0CF8FEF8983BDCF4C816B818A8159 +:106020000E9492149827892798279E838D83B2CF48 +:106030000D811E811027012710278A81EB803EE009 +:10604000E39E700111249CE8899FE00CF11C11244F +:106050008C8190E0880F991FE80EF91E612FC7010F +:1060600087960E948935602FC7018896D0CF0E94FD +:10607000161490CF8A818138C1F060F4803809F01D +:1060800089CF20E04B8160917904809178040E944F +:10609000521580CF8238E9F0833809F07BCF20E0B9 +:1060A00040917A046C818B81F2CF60E08B810E94F9 +:1060B00069168B81811103C00E94E50F6BCF80911F +:1060C000770481608093770460E086950E9469166A +:1060D00061CF8B8180937B045DCF8A81813899F079 +:1060E00030F4803809F056CF80917A0440CF82385E +:1060F00091F0833809F04ECF809178048B838091A2 +:1061000079048C8347CF8091770480FF02C0869505 +:106110002ECF80E02CCF80917B0429CF6091770433 +:10612000709178048091790490917A040E944015CE +:1061300031CF80E18A832ECF81E08A838DE117CF32 +:10614000CA80DB80DC24CD24DC248E010F5F1F4F4E +:10615000EC80E00EF12EF11CC6018D519D4F0E1505 +:106160001F0509F417CFADE1CA16A1E0DA0650F415 +:106170000E947535F8018483BFEFCB1ADB0A0F5FED +:106180001F4FEACFD80114961C92F6CF0A811B81CB +:10619000102701271027FE0131966F01EC80E00ED9 +:1061A000F12EF11CC8018D519D4FE016F10609F446 +:1061B000F1CE0D31F1E01F0728F4D60114966C9151 +:1061C0000E948935BFEFCB1ADB0A0F5F1F4FEACF62 +:1061D0000E940614DFCE85E0ADCFCA80DB80DC24D0 +:1061E000CD24DC248E010F5F1F4FEC80E00EF12EDA +:1061F000F11CC6018796E016F10609F4CBCEECEB54 +:10620000CE16E2E0DE0658F40E947535D8011496E9 +:106210008C93FFEFCF1ADF0A0F5F1F4FEACFF80111 +:106220001482F7CF0A811B811027012710279E01B6 +:106230002F5F3F4F6901EC80E00EF12EF11CC80189 +:106240008796E016F10609F4A5CE0C3B32E0130761 +:1062500028F4D60114966C910E948935BFEFCB1AB1 +:10626000DB0A0F5F1F4FEBCF09BD19BD09B400FE5C +:10627000FDCF8091D8008F7D8093D8008091E00081 +:1062800082608093E0008091E00081FDFCCF10925D +:106290005F040E94FA0F75CB86E290E00E9475358C +:1062A0001B821C821D828E8375CE1092B9008CE0F9 +:1062B0008093B80008959F92AF92BF92CF92DF92E1 +:1062C000EF92FF920F931F93CF93DF93B82EEB01C2 +:1062D0000E940A1C6C01EE24E394F12CC431D10518 +:1062E00060F025E0E22EF12CCF3FDC0731F0CE014B +:1062F00064E170E00E9415357B0184EAA82E94E8E1 +:10630000992E1092BC00A092BC000E940A1C8C0125 +:106310008091BC0087FF0DC08091B900887F8830D4 +:1063200039F18091B900887F803111F10FEF1FEFB3 +:1063300009C00E940A1C801B910B8E159F0540F31B +:106340000EEF1FEFCF3FDC07E1F2C6010E94FB1BFF +:106350008C179D07B0F2C801DF91CF911F910F916B +:10636000FF90EF90DF90CF90BF90AF909F900895F7 +:10637000B092BB009092BC000E940A1C8C018091DC +:10638000BC0087FF0AC08091B900887F883111F076 +:10639000803461F610E000E0DECF0E940A1C801B12 +:1063A000910B8E159F0558F3CBCF0F931F93CF936F +:1063B000DF93EB018093BB0084E88093BC000E94D4 +:1063C0000A1C8C018091BC0087FF11C02091B9008C +:1063D000287F81E090E0283211F490E080E09195F0 +:1063E00081959109DF91CF911F910F910895CF3F32 +:1063F000DC0741F30E940A1C801B910B8C179D0740 +:1064000008F38EEF9FEFEECF0F931F93CF93DF93A1 +:10641000EC0184EC8093BC000E940A1C8C018091EA +:10642000BC0087FF08C08091BB0090E0DF91CF9156 +:106430001F910F910895CF3FDC0789F30E940A1C3A +:10644000801B910B8C179D0750F38EEF9FEFEECFC3 +:106450000F931F93CF93DF93EC0184E88093BC00EC +:106460000E940A1C8C018091BC0087FF08C08091AB +:10647000BB0090E0DF91CF911F910F910895CF3F26 +:10648000DC0789F30E940A1C801B910B8C179D0767 +:1064900050F38EEF9FEFEECFCF92DF92EF92FF920D +:1064A0000F931F93CF93DF936B018A017901B90199 +:1064B0000E945B31E6010C0D1D1DC017D10761F470 +:1064C00024E92093BC00DF91CF911F910F91FF90A1 +:1064D000EF90DF90CF90089597FDF2CFB7018991AB +:1064E0000E94D531EACFCF92DF92EF92FF920F93C5 +:1064F0001F93CF93DF93C62F6A017901B8010E94E1 +:106500005B3197FD0CC0B8018C2F0E94D531E6019C +:10651000EC0CFD1CCE15DF0511F097FF0CC024E933 +:106520002093BC00DF91CF911F910F91FF90EF90CE +:10653000DF90CF900895B80189910E94D531EACFBC +:10654000CF92DF92EF92FF920F931F93CF93DF933F +:10655000F82EE62EEA016901B8010E945B3197FD31 +:1065600015C0B8018E2D0E94D53197FD0FC0B8011E +:106570008F2D81600E945B31F12CE12C21E0C21A49 +:10658000D108EC14FD0400F597FF11C024E9209315 +:10659000BC001816190614F490E080E0DF91CF914A +:1065A0001F910F91FF90EF90DF90CF900895C80159 +:1065B0000E94043297FD04C0FE01EE0DFF1D808392 +:1065C0002FEFE21AF20ADDCF97FDE0CFC8010E945B +:1065D000283297FDDBCFCC0DDD1D8883D7CF84E932 +:1065E0008093BC0008958EE14A9B02C08150E1F780 +:1065F0004A9BFECF08955A9880E28A95F1F75A9AFD +:106600000895FC013BE03A95F1F798E020E080E046 +:1066100031E040E14A95F1F7880F4A9B02C0816062 +:10662000232742E04A95F1F7000040E14A95F1F74F +:10663000915079F790E19A95F1F799B132E03A9556 +:10664000F1F7000040E14A95F1F792FB992790F9A4 +:1066500092272081920F90830895EF92FF920F93DB +:106660001F93CF93DF930F92CDB7DEB719828C01C2 +:106670007C01E60EF11C0E151F0561F481E0998185 +:10668000911180E00F90DF91CF911F910F91FF90BA +:10669000EF9008950E94F332CE0101960E940133DB +:1066A000F80181938F01E7CF529A5A9A0895529830 +:1066B0005A9AEA9AE9E6F0E080818F7C8083089517 +:1066C0006150770B91E001C0990F6A95EAF720E0DD +:1066D00031E0911108C0222391F05A9A80E28A9504 +:1066E000F1F75A980895492F482339F05A9A2327E9 +:1066F00040E24A95F1F79695ECCF5A98F9CF5A981F +:10670000EDCFFF920F931F93CF93DF93EC018C019A +:10671000060F111DC017D10731F4DF91CF911F91E2 +:106720000F91FF900895F9900E94FB3268E08F2D41 +:106730000E946033EFCF1F920F920FB60F92112479 +:10674000EF92FF920F931F932F933F934F935F937B +:106750006F937F938F939F93AF93BF93EF93FF9329 +:10676000CF93DF930F92CDB7DEB719820E94F33239 +:10677000CE0101960E940133A82FA695A695A69555 +:10678000282F229525709A2F9570290F922F93709C +:1067900026952695920F982797708981982B09F056 +:1067A00075C0A83008F072C080E18A95F1F75A9A56 +:1067B000529AB2E0BA95F1F700C05A98EA2EF12C3D +:1067C000EAE0AE9FD0011124AF5FBE4F1896ED9165 +:1067D000FC9119973097B1F06091F8017091F9012F +:1067E00016962D913C911797260F371F13968D9172 +:1067F0009C911497680F791F15964C9115971296D6 +:106800008C9109958AE08E9DF0018F9DF00D1124E9 +:10681000EF5FFE4F6581662351F02091F8013091C2 +:10682000F90186819781820F931F0E9481330E9414 +:10683000FB32F0E1FA95F1F75A9852985A9A80E1B2 +:106840008A95F1F78AE08E9D80018F9D100D1124AD +:106850000F5F1E4FD80112966C911297662371F14B +:106860002091F8013091F90113968D919C91820F3E +:10687000931F0E942D33D801ED91FC91882311F0D4 +:1068800088E001C082E080830E94F3320F90DF91A4 +:10689000CF91FF91EF91BF91AF919F918F917F9198 +:1068A0006F915F914F913F912F911F910F91FF90A9 +:1068B000EF900F900FBE0F901F901895ED91FC91E7 +:1068C000DFCF0F931F93CF93DF93EC0108970CF06A +:1068D000A9C08AE08C9FF0018D9FF00D1124EF5F1D +:1068E000FE4F80819181892B09F49CC0F894529AC3 +:1068F0005A9885E08A95F1F700008C2F869585706F +:106900009C2F9570890F982F937086958695890F87 +:106910008E0193E0000F111F9A95E1F7082B0E945A +:10692000FB3200C068E0802F0E946033A0E1AA958E +:10693000F1F752985A9A4A9B27C087E090E04A990B +:1069400025C08AE08C9F80018D9F100D11240F5F60 +:106950001E4FF80165816623A1F12091F801309165 +:10696000F90186819781820F931F0E942D33811137 +:1069700028C0529A5A9AD801ED91FC9182E0808306 +:10698000789482E090E016C000C0D5CF0197B9F4AA +:10699000529A5A9A8AE08C9FF0018D9FF00D112433 +:1069A000EF5FFE4F0190F081E02D81E080837894CD +:1069B00081E090E0DF91CF911F910F91089500C089 +:1069C000BECF0E94F332B0E2BA95F1F75A98529ACC +:1069D000E0E1EA95F1F78AE08C9FF0018D9FF00DE0 +:1069E0001124EF5FFE4F6281662351F02091F80180 +:1069F0003091F90183819481820F931F0E9481332A +:106A00000E94FB328AE08C9FF0018D9FF00D1124D3 +:106A1000EF5FFE4F0190F081E02D1082789490E0BE +:106A200080E0C8CF84E090E0C5CFAA1BBB1B51E13A +:106A300007C0AA1FBB1FA617B70710F0A61BB70BEE +:106A4000881F991F5A95A9F780959095BC01CD0193 +:106A50000895991B79E004C0991F961708F0961BBA +:106A6000881F7A95C9F78095089597FB072E16F42D +:106A7000009407D077FD09D00E94153507FC05D09A +:106A80003EF4909581959F4F0895709561957F4F45 +:106A90000895EE0FFF1F0590F491E02D09946927EA +:106AA000962769277827872778270895FB01DC0137 +:106AB00002C005900D9241505040D8F70895FB0157 +:106AC000DC0104C08D910190801921F441505040A7 +:106AD000C8F7881B990B0895FB01DC0102C00190E7 +:106AE0000D9241505040D8F70895F999FECF92BDCC +:106AF00081BDF89A992780B50895A6E1B0E044E0F9 +:106B000050E00C94AF35A8E1B0E042E050E00C94C6 +:106B1000AF35262FF999FECF92BD81BDF89A019726 +:106B200000B4021639F01FBA20BD0FB6F894FA9AD5 +:106B3000F99A0FBE08950396272F0E948A350E9466 +:106B40008935252F0E948A35242F0C948A35019689 +:106B5000272F0E948A350C948935DC01CB01FC017A +:106B6000F999FECF06C0F2BDE1BDF89A319600B4A6 +:106B70000D9241505040B8F708950E94FF3508F437 +:106B800081E00895E89409C097FB3EF490958095C4 +:106B9000709561957F4F8F4F9F4F9923A9F0F92FE3 +:106BA00096E9BB279395F695879577956795B79561 +:106BB000F111F8CFFAF4BB0F11F460FF1BC06F5F47 +:106BC0007F4F8F4F9F4F16C0882311F096E911C059 +:106BD000772321F09EE8872F762F05C0662371F07A +:106BE00096E8862F70E060E02AF09A95660F771F8E +:106BF000881FDAF7880F9695879597F90895990F6A +:106C00000008550FAA0BE0E8FEEF16161706E80776 +:106C1000F907C0F012161306E407F50798F0621B97 +:106C2000730B840B950B39F40A2661F0232B242B6C +:106C3000252B21F408950A2609F4A140A6958FEF8B +:106C4000811D811D08950E9436360C94A7360E943E +:106C5000993638F00E94A03620F0952311F00C945C +:106C600090360C94963611240C94DB360E94B8367C +:106C700070F3959FC1F3950F50E0551F629FF0018F +:106C8000729FBB27F00DB11D639FAA27F00DB11DA8 +:106C9000AA1F649F6627B00DA11D661F829F222731 +:106CA000B00DA11D621F739FB00DA11D621F839FB8 +:106CB000A00D611D221F749F3327A00D611D231F8E +:106CC000849F600D211D822F762F6A2F11249F57DC +:106CD00050409AF0F1F088234AF0EE0FFF1FBB1FDF +:106CE000661F771F881F91505040A9F79E3F51059E +:106CF00080F00C9490360C94DB365F3FE4F3983EC2 +:106D0000D4F3869577956795B795F795E7959F5F47 +:106D1000C1F7FE2B880F911D9695879597F90895D9 +:106D200097F99F6780E870E060E008959FEF80EC3E +:106D3000089500240A9416161706180609060895E1 +:106D400000240A9412161306140605060895092E47 +:106D50000394000C11F4882352F0BB0F40F4BF2BB6 +:106D600011F460FF04C06F5F7F4F8F4F9F4F0895F6 +:106D700057FD9058440F551F59F05F3F71F04795EC +:106D8000880F97FB991F61F09F3F79F087950895D1 +:106D9000121613061406551FF2CF4695F1DF08C0F0 +:106DA000161617061806991FF1CF8695710561050D +:106DB00008940895E894BB2766277727CB0197F9B5 +:106DC0000895F894FFCFEA101211651112116511A0 +:106DD00045117D1165117A128712121512151B15B6 +:106DE0001B151D151B151B151B151215121522152C +:106DF0001B151B152215671CDD1CE01CF41CF71C61 +:106E00000A1D131D371D7D1DAF1DC31D491D6C1DA2 +:106E1000052105215E215E2190213821382138216C +:106E2000AA211B222B222B22B52FB92FFC2F0D308C +:106E3000183037303A306D308E300A300A309930A1 +:0E6E40009C30A030C630E830EB30ED3012311F +:106E4E0001380200000001000000003802000000BE +:106E5E0005010000003802000000010600000038A5 +:106E6E0002000000010700000038020408000000C4 +:106E7E000000003802090C0000000000003802017A +:106E8E001500000000000036323331F7F6676697C2 +:106E9E00C6343500000000000180005F082E0E0D84 +:106EAE000E090E050EF4F5010021007F22000300ED +:106EBE004A004A4A01F6F731333236674C4159459A +:106ECE00520042617365200047616D65200052617A +:106EDE00697365004C6F776572004C4F434B0043EE +:106EEE00617073004E756D005363726C002020202C +:106EFE00202000534F4C415200544D5053540081AA +:106F0E008283E200E900EA00B500B600B700CD00CA +:106F1E008301CC008A0192019401210223022402F2 +:106F2E002502260227022A02B300B4006F00700069 +:106F3E000603060806010606AF0200FF0100010067 +:106F4E0000FFFF0000010001FF00000810181810DC +:106F5E0008000001020202020202020202024022A4 +:0E6F6E007B99017701FC00000C190C390C0016 :00000001FF From 785f8f64a39ff8f1310133724433bba103326b73 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 13 Nov 2021 23:19:32 -0500 Subject: [PATCH 063/155] Update readme notes. --- keyboards/solartempest/sofle/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/solartempest/sofle/readme.md b/keyboards/solartempest/sofle/readme.md index ca44ed9ef8e4..4a15f178d90f 100644 --- a/keyboards/solartempest/sofle/readme.md +++ b/keyboards/solartempest/sofle/readme.md @@ -1,11 +1,11 @@ +### [ Note: When flashing, make sure to load the VIA keymap and layout otherwise your keys won't work! Please refer to the sections further down the page. ] + # Sofle Keyboard ![SofleKeyboard version 2.1 RGB Keyhive](https://i.imgur.com/utkZbYS.jpeg) Sofle is 6×4+5 keys column-staggered split keyboard. Based on Lily58, Corne and Helix keyboards. -## When flashing, MAKE SURE to load the VIA keymap and layout otherwise your keys won't work! Please refer to the sections further down the page. - For details about the keyboard design, refer to Josef's blog: [Sofle Keyboard - a split keyboard based on Lily58 and Crkbd](https://josef-adamcik.cz/electronics/let-me-introduce-you-sofle-keyboard-split-keyboard-based-on-lily58.html) Build guide and log is available here: [SofleKeyboard build log/guide](https://josef-adamcik.cz/electronics/soflekeyboard-build-log-and-build-guide.html) From 63155e920727158b14464185c8cc5757c45ffb43 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 13 Nov 2021 23:21:59 -0500 Subject: [PATCH 064/155] Update readme notes. --- keyboards/solartempest/sofle/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/solartempest/sofle/readme.md b/keyboards/solartempest/sofle/readme.md index 4a15f178d90f..d05c79545053 100644 --- a/keyboards/solartempest/sofle/readme.md +++ b/keyboards/solartempest/sofle/readme.md @@ -1,10 +1,10 @@ -### [ Note: When flashing, make sure to load the VIA keymap and layout otherwise your keys won't work! Please refer to the sections further down the page. ] +### [ Note: When flashing this firmware, make sure to load the VIA keymap and layout otherwise your keys won't work! Please refer to the sections further down the page. ] # Sofle Keyboard ![SofleKeyboard version 2.1 RGB Keyhive](https://i.imgur.com/utkZbYS.jpeg) -Sofle is 6×4+5 keys column-staggered split keyboard. Based on Lily58, Corne and Helix keyboards. +Sofle is a 58-key column-staggered split keyboard with 2 rotary encoders, 2 OLEDs, trackball, and haptic feedback. Based on Lily58, Corne and Helix keyboards. For details about the keyboard design, refer to Josef's blog: [Sofle Keyboard - a split keyboard based on Lily58 and Crkbd](https://josef-adamcik.cz/electronics/let-me-introduce-you-sofle-keyboard-split-keyboard-based-on-lily58.html) From f75e3eb57603edc6261d36ac133a35d1bb4e0955 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 13 Nov 2021 23:23:19 -0500 Subject: [PATCH 065/155] Update readme notes. --- keyboards/solartempest/sofle/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/solartempest/sofle/readme.md b/keyboards/solartempest/sofle/readme.md index d05c79545053..e350685e1dc8 100644 --- a/keyboards/solartempest/sofle/readme.md +++ b/keyboards/solartempest/sofle/readme.md @@ -1,10 +1,10 @@ -### [ Note: When flashing this firmware, make sure to load the VIA keymap and layout otherwise your keys won't work! Please refer to the sections further down the page. ] +### -- Note: When flashing this firmware, be sure to load the VIA keymap and layout files otherwise your keys won't work! Please refer to the sections below. -- # Sofle Keyboard ![SofleKeyboard version 2.1 RGB Keyhive](https://i.imgur.com/utkZbYS.jpeg) -Sofle is a 58-key column-staggered split keyboard with 2 rotary encoders, 2 OLEDs, trackball, and haptic feedback. Based on Lily58, Corne and Helix keyboards. +Sofle is a 58-key column-staggered split keyboard with rotary encoders, OLEDs, trackball, and haptic feedback. Based on Lily58, Corne and Helix keyboards. For details about the keyboard design, refer to Josef's blog: [Sofle Keyboard - a split keyboard based on Lily58 and Crkbd](https://josef-adamcik.cz/electronics/let-me-introduce-you-sofle-keyboard-split-keyboard-based-on-lily58.html) From 6a719a89d5be39bbb21fbdd1025c12b9ecbd40a8 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 13 Nov 2021 23:24:53 -0500 Subject: [PATCH 066/155] Update readme notes. --- keyboards/solartempest/sofle/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/solartempest/sofle/readme.md b/keyboards/solartempest/sofle/readme.md index e350685e1dc8..582b48601d40 100644 --- a/keyboards/solartempest/sofle/readme.md +++ b/keyboards/solartempest/sofle/readme.md @@ -1,10 +1,10 @@ -### -- Note: When flashing this firmware, be sure to load the VIA keymap and layout files otherwise your keys won't work! Please refer to the sections below. -- +### --- Note: When flashing this firmware, be sure to load the VIA keymap and layout files otherwise your keys won't work! Please refer to the sections below. --- # Sofle Keyboard ![SofleKeyboard version 2.1 RGB Keyhive](https://i.imgur.com/utkZbYS.jpeg) -Sofle is a 58-key column-staggered split keyboard with rotary encoders, OLEDs, trackball, and haptic feedback. Based on Lily58, Corne and Helix keyboards. +Sofle is a 58-key column-staggered split keyboard with rotary encoders and OLEDs with support for a trackball and haptic feedback. Based on Lily58, Corne and Helix keyboards. For details about the keyboard design, refer to Josef's blog: [Sofle Keyboard - a split keyboard based on Lily58 and Crkbd](https://josef-adamcik.cz/electronics/let-me-introduce-you-sofle-keyboard-split-keyboard-based-on-lily58.html) From 75f6034c9b36a3cf504e4879615eb5fe0a07ee34 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 13 Nov 2021 23:26:14 -0500 Subject: [PATCH 067/155] Update readme notes. --- keyboards/solartempest/sofle/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/solartempest/sofle/readme.md b/keyboards/solartempest/sofle/readme.md index 582b48601d40..beeeb5f10f05 100644 --- a/keyboards/solartempest/sofle/readme.md +++ b/keyboards/solartempest/sofle/readme.md @@ -54,7 +54,7 @@ Build guide and log is available here: [SofleKeyboard build log/guide](https://j - Double tap layers to stay on a layer instead of momentary push. - Symmetric modifiers (CMD/Super, Alt/Opt, Ctrl, Shift). -## Using with VIA +## Using with VIA (Important! Please Read.) - After flashing, in VIA make sure to Import Keymap, which is "sofle VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. - Go to Save+Load to Load Saved Layout. You can import my own layout "sofle VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. From ea02e0a973d4ce33924c731fe1627717af53aef2 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 13 Nov 2021 23:26:55 -0500 Subject: [PATCH 068/155] Update readme notes. --- keyboards/solartempest/sofle/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/solartempest/sofle/readme.md b/keyboards/solartempest/sofle/readme.md index beeeb5f10f05..6513a217e0e3 100644 --- a/keyboards/solartempest/sofle/readme.md +++ b/keyboards/solartempest/sofle/readme.md @@ -1,4 +1,4 @@ -### --- Note: When flashing this firmware, be sure to load the VIA keymap and layout files otherwise your keys won't work! Please refer to the sections below. --- +### --- Note: When flashing this firmware, be sure to load the VIA keymap and layout files otherwise your keys won't work! Please refer to the VIA section below. --- # Sofle Keyboard From 2e9de99767bb7c187517d9c5b575a02021203c0e Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Thu, 25 Nov 2021 01:28:45 -0500 Subject: [PATCH 069/155] Space optimizations, code cleanup, added code comments. --- keyboards/solartempest/sofle/config.h | 165 +- .../solartempest/sofle/keymaps/via/config.h | 2 +- .../solartempest/sofle/keymaps/via/encoder.c | 8 +- .../solartempest/sofle/keymaps/via/keymap.c | 124 +- .../sofle/keymaps/via/ocean_dream.c | 555 --- .../solartempest/sofle/keymaps/via/snakey.c | 14 +- .../sofle/keymaps/via/snakey_minimal.c | 84 +- keyboards/solartempest/sofle/rules.mk | 28 +- .../sofle/solartempest_sofle_via.hex | 3553 ++++++++--------- 9 files changed, 1954 insertions(+), 2579 deletions(-) delete mode 100644 keyboards/solartempest/sofle/keymaps/via/ocean_dream.c diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index 753ac13cd681..59542d516202 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -19,78 +19,87 @@ #pragma once #include "config_common.h" -// USB Device descriptor parameter +// USB Device descriptor parameters #define VENDOR_ID 0xFC32 -#define PRODUCT_ID 0x1287 //Original is 0x0287 but do not want to load default VIA keymap +#define PRODUCT_ID 0x1287 //Original is 0x0287 but we do not want to load default VIA keymap as it has errors for the bottom row #define DEVICE_VER 0x0002 #define MANUFACTURER Keyhive -#define PRODUCT Solarius_Sofle //VIA version for this PCB is incorrect for the bottom row +#define PRODUCT Solarius_Sofle //New unique name #define DESCRIPTION Rose version of the Sofle // Set which side is master -//#define EE_HANDS //Use this instead for EEPROM setting #define MASTER_LEFT +//#define EE_HANDS //Use this if EEPROM setting is desired instead -// Key matrix size -// Rows are doubled-up. Added extra column for rotary encoder VIA mapping. +// Key Matrix Settings +// Rows are doubled-up for split keyboards. Added extra column for rotary encoder VIA mapping. #define MATRIX_ROWS 10 #define MATRIX_COLS 7 - -// wiring of each half #define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 } #define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, C7 } //C7 is unused on the MCU. It is needed for the encoder key matrix in via. #define MATRIX_ROW_PINS_RIGHT { C6, D7, E6, B4, B5 } #define MATRIX_COL_PINS_RIGHT { F6, F7, B1, B3, B2, B6, C7 } //C7 is unused on the MCU. It is needed for the encoder key matrix in via. #define DIODE_DIRECTION COL2ROW - #define DEBOUNCE 6 //Default is 5 -// Encoder support -#define ENCODERS_PAD_A { F5 } -#define ENCODERS_PAD_B { F4 } -#define ENCODERS_PAD_A_RIGHT { F4 } -#define ENCODERS_PAD_B_RIGHT { F5 } -#define ENCODER_RESOLUTIONS { 4, 2 } //Left encoder seems to have double-output issue but right does not. +// NKRO Settings +#ifdef NKRO_ENABLE + #define FORCE_NKRO //Force NKRO if enabled. +#endif +// Tapping settings #define TAP_CODE_DELAY 10 #define TAPPING_TOGGLE 2 //Tap TT twice to toggle layer #define TAPPING_TERM 160 //Tapping duration in ms -// Communication between sides -#define SOFT_SERIAL_PIN D2 +// Combo settings +#ifdef COMBO_ENABLE + #define COMBO_COUNT 1 //Number of tap combos used + #define COMBO_TERM 400 //Default combo time is 200ms. This is the time delay allowed between deleting each whole word with shift-backspace. +#endif // Disabled for LTO #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION // Disabled to save space -#define NO_ACTION_ONESHOT //Save 244 bytes -#define NO_RESET //Save 40 bytes +#define NO_ACTION_ONESHOT //Save 244 bytes (-244). +#define NO_RESET //Save 40 bytes (-40). + +// Encoder support +#define ENCODERS_PAD_A { F5 } +#define ENCODERS_PAD_B { F4 } +#define ENCODERS_PAD_A_RIGHT { F4 } +#define ENCODERS_PAD_B_RIGHT { F5 } +#define ENCODER_RESOLUTIONS { 4, 2 } //Left encoder seems to have double-output issue but right does not. This resolves that issue. + +// Communication between sides +#define SOFT_SERIAL_PIN D2 // OLED settings #ifdef OLED_ENABLE - #define OLED_TIMEOUT 80000 //120000 = 2 minutes in ms. - #define OLED_BRIGHTNESS 90 // Default 100. - #define SPLIT_OLED_ENABLE //Synx on/off OLED state between halves (+100). - //#define SPLIT_WPM_ENABLE //Enable WPM across split keyboards (+268). - //#define SPLIT_LAYER_STATE_ENABLE - //#define SPLIT_LED_STATE_ENABLE - //#define SPLIT_MODS_ENABLE - #define OLED_LOGO //Enable to print snakey custom logo on slave side (+108). - //#define OLED_NO_SLAVE //Enable for snakey to not render slave OLED (-160). + #define OLED_TIMEOUT 80000 //80000 = 80secs, 120000 = 2mins in ms. + #define OLED_BRIGHTNESS 90 //Default is 100. + #define SPLIT_OLED_ENABLE //Synx on/off OLED state between halves (+100). + //#define SPLIT_WPM_ENABLE //Enable WPM across split keyboards (+106-268). + //#define SPLIT_LAYER_STATE_ENABLE //Keep on master to save space (+142). + //#define SPLIT_LED_STATE_ENABLE //Keep on master to save space (+112). + //#define SPLIT_MODS_ENABLE //Keep on master to save space (+138). + #define OLED_LOGO //Enable to print snakey custom logo on slave side (+108). + //#define OLED_NO_SLAVE //Enable for snakey to not render slave OLED (-160). #endif -//Haptic feedback settings +// Haptic feedback settings #ifdef HAPTIC_ENABLE #define FB_ERM_LRA 1 - #define FB_BRAKEFACTOR 3 // For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 - #define FB_LOOPGAIN 0 // For Low:0, Medium:1, High:2, Very High:3 - - // Please refer to your datasheet for the optimal setting for your specific motor. - #define RATED_VOLTAGE 3 - #define V_RMS 2.0 - #define V_PEAK 2.1 - #define F_LRA 205 //resonance freq + #define FB_BRAKEFACTOR 2 // For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 + #define FB_LOOPGAIN 0 // For Low:0, Medium:1, High:2, Very High:3 + + // Refer to datasheet for the optimal setting for specific motors. + #define RATED_VOLTAGE 2 //2Vrms per ELV1411A datasheet, which is the LRA used for the Pimoroni Haptic Bzzz driver DRV2605. + #define V_PEAK 2.0 //Per QMK docs. + #define V_RMS 2.0 //Per ELV1411A datasheet. + #define F_LRA 150 //Resonant frequency per ELV1411A datasheet. #define NO_HAPTIC_PUNCTUATION #define NO_HAPTIC_ALPHA @@ -99,55 +108,49 @@ //#define NO_HAPTIC_NAV #endif -// Combo settings -#ifdef COMBO_ENABLE - #define COMBO_COUNT 1 //Number of tap combos used - #define COMBO_TERM 400 //Default combo time is 200ms. This is the time delay allowed between deleting each whole word with shift-backspace. -#endif - // Pimoroni trackball settings #ifdef POINTING_DEVICE_ENABLE #define PIMORONI_TRACKBALL_INTERVAL_MS 6 //Default is 8ms - //#define PIMORONI_TRACKBALL_ROTATE + //#define PIMORONI_TRACKBALL_ROTATE //Change according to your particular installed trackball orientation. #define PIMORONI_TRACKBALL_INVERT_Y #define PIMORONI_TRACKBALL_INVERT_X //#define PIMORONI_TRACKBALL_CLICK //Incompatible with keymap mouse keys. Use trackball_register_button() and trackball_click() instead. #endif - -// Add RGB underglow -#define RGB_DI_PIN D3 -#define RGBLED_NUM 74 -#define RGBLED_SPLIT {37,37} -//#define RGBLIGHT_ANIMATIONS // Very memory intensive -#define RGBLIGHT_EFFECT_STATIC_GRADIENT //Firmware size (+262) -#define RGBLIGHT_LIMIT_VAL 160 //Power draw may exceed 0.6A at max brightness with white colour. -#define RGBLIGHT_LAYERS -#define RGBLIGHT_SLEEP -//#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF //Shows lock key lighting status even when RGB is off - - -//RGB LED Conversion macro from physical array to electric array (+146 to firmware size) -//First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping -#define LED_LAYOUT( \ - L00, L01, L02, L03, L04, L05, L08, L09, L010, L011, L012, L013, \ - L10, L12, L14, L19, L111, L113, \ - L20, L21, L22, L23, L24, L25, L28, L29, L210, L211, L212, L213, \ - L30, L31, L32, L33, L34, L35, L38, L39, L310, L311, L312, L313, \ - L40, L42, L44, L49, L411, L413, \ - L50, L51, L52, L53, L54, L55, L58, L59, L510, L511, L512, L513, \ - L62, L63, L64, L65, L66, L67, L68, L69, L610, L611, \ - L71, L76, L77, L712 )\ - { \ - L14,L12,L10,L40,L42,L44,L71,L76,L66,L65,L55,L35,L25,L05,L04,L24,L34,L54,L64,L63,L53,L33,L23,L03,L02,L22,L32,L52,L62,L51,L31,L21,L01,L00,L20,L30,L50,L19,L111,L113,L413,L411,L49,L712,L77,L67,L68,L58,L38,L28,L08,L09,L29,L39,L59,L69,L610,L510,L310,L210,L010,L011,L211,L311,L511,L611,L512,L312,L212,L012,L013,L213,L313,L513, \ - } -//RGB LED logical order map -#define RGBLIGHT_LED_MAP LED_LAYOUT( \ - 5, 6, 17, 18, 29, 30, 43, 44, 55, 56, 67, 68, \ - 4, 16, 28, 45, 57, 69, \ - 3, 7, 15, 19, 27, 31, 42, 46, 54, 58, 66, 70, \ - 2, 8, 14, 20, 26, 32, 41, 47, 53, 59, 65, 71, \ - 1, 13, 25, 48, 60, 72, \ - 0, 9, 12, 21, 24, 33, 40, 49, 52, 61, 64, 73, \ - 11, 22, 23, 34, 35, 38, 39, 50, 51, 62, \ - 10, 36, 37, 63 ) +// RGB settings +#ifdef RGBLIGHT_ENABLE + #define RGB_DI_PIN D3 + #define RGBLED_NUM 74 + #define RGBLED_SPLIT {37,37} + //#define RGBLIGHT_ANIMATIONS // Very memory intensive (+2604) + #define RGBLIGHT_EFFECT_STATIC_GRADIENT //Preferred RGB effect (+262) + #define RGBLIGHT_LIMIT_VAL 160 //Power draw may still exceed the USB limitations of 0.6A at max brightness with white colour with this setting. + #define RGBLIGHT_LAYERS //Enable layer light indicators + #define RGBLIGHT_SLEEP //Turn off LEDs when computer sleeping (+72) + //#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF //Shows lock key lighting status even when RGB is off + + //RGB LED Conversion macro from physical array to electric array (+146). This results in better looking animated effects. + //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping + #define LED_LAYOUT( \ + L00, L01, L02, L03, L04, L05, L08, L09, L010, L011, L012, L013, \ + L10, L12, L14, L19, L111, L113, \ + L20, L21, L22, L23, L24, L25, L28, L29, L210, L211, L212, L213, \ + L30, L31, L32, L33, L34, L35, L38, L39, L310, L311, L312, L313, \ + L40, L42, L44, L49, L411, L413, \ + L50, L51, L52, L53, L54, L55, L58, L59, L510, L511, L512, L513, \ + L62, L63, L64, L65, L66, L67, L68, L69, L610, L611, \ + L71, L76, L77, L712 )\ + { \ + L14,L12,L10,L40,L42,L44,L71,L76,L66,L65,L55,L35,L25,L05,L04,L24,L34,L54,L64,L63,L53,L33,L23,L03,L02,L22,L32,L52,L62,L51,L31,L21,L01,L00,L20,L30,L50,L19,L111,L113,L413,L411,L49,L712,L77,L67,L68,L58,L38,L28,L08,L09,L29,L39,L59,L69,L610,L510,L310,L210,L010,L011,L211,L311,L511,L611,L512,L312,L212,L012,L013,L213,L313,L513, \ + } + //RGB LED logical order map + #define RGBLIGHT_LED_MAP LED_LAYOUT( \ + 5, 6, 17, 18, 29, 30, 43, 44, 55, 56, 67, 68, \ + 4, 16, 28, 45, 57, 69, \ + 3, 7, 15, 19, 27, 31, 42, 46, 54, 58, 66, 70, \ + 2, 8, 14, 20, 26, 32, 41, 47, 53, 59, 65, 71, \ + 1, 13, 25, 48, 60, 72, \ + 0, 9, 12, 21, 24, 33, 40, 49, 52, 61, 64, 73, \ + 11, 22, 23, 34, 35, 38, 39, 50, 51, 62, \ + 10, 36, 37, 63 ) +#endif diff --git a/keyboards/solartempest/sofle/keymaps/via/config.h b/keyboards/solartempest/sofle/keymaps/via/config.h index d9c79020c416..15790961fa5e 100644 --- a/keyboards/solartempest/sofle/keymaps/via/config.h +++ b/keyboards/solartempest/sofle/keymaps/via/config.h @@ -18,5 +18,5 @@ #pragma once -// Set number of layers for VIA, each is 30 bytes +// Set number of layers for VIA (+30 per layer) #define DYNAMIC_KEYMAP_LAYER_COUNT 5 diff --git a/keyboards/solartempest/sofle/keymaps/via/encoder.c b/keyboards/solartempest/sofle/keymaps/via/encoder.c index 3ecbfe5d39f1..e309b919f1f9 100644 --- a/keyboards/solartempest/sofle/keymaps/via/encoder.c +++ b/keyboards/solartempest/sofle/keymaps/via/encoder.c @@ -18,15 +18,15 @@ #ifdef ENCODER_ENABLE - static uint8_t encoder_state[2] = {0}; //Thanks to Drashna for this improved code with better extensibility. - static keypos_t encoder_ccw[2] = {{6, 3}, {6, 8}}; + static uint8_t encoder_state[2] = {0}; + static keypos_t encoder_ccw[2] = {{6, 3}, {6, 8}}; //Use these keymap positions to specify the encoder functions on rotate. static keypos_t encoder_cw[2] = {{6, 1}, {6, 6}}; void encoder_action_unregister(void) { for (int index = 0; index < 2; ++index) { if (encoder_state[index]) { keyevent_t encoder_event = (keyevent_t){.key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], .pressed = false, .time = (timer_read() | 1)}; - encoder_state[index] = 0; + encoder_state[index] = 0; action_exec(encoder_event); } } @@ -34,7 +34,7 @@ void encoder_action_register(uint8_t index, bool clockwise) { keyevent_t encoder_event = (keyevent_t){.key = clockwise ? encoder_cw[index] : encoder_ccw[index], .pressed = true, .time = (timer_read() | 1)}; - encoder_state[index] = (clockwise ^ 1) | (clockwise << 1); + encoder_state[index] = (clockwise ^ 1) | (clockwise << 1); action_exec(encoder_event); } diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index 4498d8c7a67d..721ed049eac8 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -18,7 +18,11 @@ #include QMK_KEYBOARD_H #include //This is required for OLED sprintf. -#include "encoder.c" + +#ifdef ENCODER_ENABLE + #include "encoder.c" +#endif + #ifdef OLED_ENABLE //#include "oled.c" //Stock OLED code //Note that the keyboard animations below take a large amount of space! @@ -30,22 +34,26 @@ #ifdef POINTING_DEVICE_ENABLE #include "drivers/sensors/pimoroni_trackball.h" - bool was_scrolling = true; //Remember last state of trackball scrolling + bool was_scrolling = true; //Remember preferred state of trackball scrolling #endif #ifdef HAPTIC_ENABLE #include "drivers/haptic/DRV2605L.h" #endif -#ifdef RGBLIGHT_ENABLE +#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS) extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT #endif + +//Variables for custom keycodes bool is_alt_tab_active = false; // Super Alt Tab Code uint16_t alt_tab_timer = 0; bool lshift_held = false; // LShift Backspace Delete whole Word Code bool rshift_held = false; // RShift Backspace Delete whole Word Code static uint16_t held_shift = 0; + + #ifdef VIA_ENABLE enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. ATABF = USER00, //Alt tab forwards @@ -69,7 +77,7 @@ static uint16_t held_shift = 0; #endif -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these layouts to save space when using only VIA. +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these hard-coded layouts to save space when using only VIA (+700). /* QWERTY * ,-----------------------------------------. ,-----------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | @@ -90,8 +98,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_MUTE, KC_NO, 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__VOLDOWN,KC_PGDN,KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_LGUI,KC_LALT,KC_LCTRL,MO(2), KC_ENT, KC_SPC, MO(3), KC_RCTRL,KC_RALT,KC_RGUI -) -, +), [1] = LAYOUT( KC_PSCR, KC_5, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F4, KC_T, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, @@ -112,23 +119,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these KC_SLCK, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WBAK, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ATABR, NML, KC_CAPS, KC_PGUP, KC_TRNS, 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 +), +[4] = LAYOUT( + 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_NLCK, 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_SLCK, 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, KC_TRNS, KC_TRNS, KC_TRNS )*/ }; #ifdef POINTING_DEVICE_ENABLE - void run_trackball_cleanup(void) { //Code by Drasnha. Sets colour of trackball LED. + void run_trackball_cleanup(void) { //Set colour of trackball LED. Does not require RGBLIGHT_ENABLE if colour shorthands are not used. + #ifdef POINTING_DEVICE_ENABLE if (trackball_is_scrolling()) { trackball_set_rgbw(43, 153, 103, 0x00); } else if (trackball_get_precision() != 1.0) { trackball_set_rgbw(0, 27, 199, 0x00); } else { - trackball_set_rgbw(RGB_GOLDENROD, 0x00); + trackball_set_rgbw(217, 165, 33, 0x00); //RGB_GOLDENROD in number form. } + #endif } #if defined(PIMORONI_TRACKBALL_ROTATE) || defined(PIMORONI_TRACKBALL_INVERT_Y) - bool pointing_device_task_user(pimoroni_data* trackball_data) { //Code from Dasky (Thanks!). This corrects the rotate/inversion scrolling issue currently in QMK Master. + bool pointing_device_task_user(pimoroni_data* trackball_data) { //Code from Dasky. This corrects the rotate/inversion scrolling issue currently in QMK Master. if (trackball_is_scrolling()) { pimoroni_data temp = *trackball_data; #ifdef PIMORONI_TRACKBALL_ROTATE @@ -148,12 +164,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these static bool mouse_button_one, trackball_button_one; #endif - void trackball_register_button(bool pressed, enum mouse_buttons button) { //Allows for clicking with mousekey and dragging with trackball. + void trackball_register_button(bool pressed, enum mouse_buttons button) { //Register mouse keys for trackball. report_mouse_t currentReport = pointing_device_get_report(); if (pressed) { currentReport.buttons |= button; - #ifdef HAPTIC_ENABLE - DRV_pulse(4); + #ifdef HAPTIC_ENABLE //Haptic feedback when trackball button is pressed + DRV_pulse(4); //sharp_click #endif } else { currentReport.buttons &= ~button; @@ -161,12 +177,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these pointing_device_set_report(currentReport); } - void trackball_click(bool pressed, report_mouse_t* mouse) { //Use for single mouse button and key presses. Click and drag is done with keymap. + void trackball_click(bool pressed, report_mouse_t* mouse) { //Use for mouse buttons. Click+drag is done with keymap and not compatible with trackball click functions. if (pressed) { //trackball pressed //tap_code_delay(KC_A,300); //Use delay as simple debounce for key strokes mouse->buttons |= MOUSE_BTN1; - #ifdef HAPTIC_ENABLE - DRV_pulse(4); + #ifdef HAPTIC_ENABLE //Haptic feedback when trackball button is pressed + DRV_pulse(4); //sharp_click #endif } else { //released mouse->buttons &= ~MOUSE_BTN1; @@ -372,44 +388,26 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif -#ifdef RGBLIGHT_ENABLE - // RGB Layer Light Settings - Note that this will fix the key switch LED colour and brightness - const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Change range for multiple keys with same colour - const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 252,255,125}); //Change range for multiple keys with same colour - const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Change range for multiple keys with same colour - const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); //Change range for multiple keys with same colour - const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); //Change range for multiple keys with same colour - const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 3, 43,100,170}); //White-left caps lock indication (No dedicated LED) - const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({28, 3, 43,100,170}); //White-right num lock indication (No dedicated LED). Since this indicator is inverted, it must be on the master side of the keyboard to shut off properly when the computer is sleeping. - const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({55, 3, 43,100,170}); //White-middle-right scroll lock indication (No dedicated LED) +#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS) + //LED Lock keys status indicators are used since the sofle doesn't have dedicated LEDS for this. + //Note 1: These will assign static colour and brightness to the LED range specified. + //Note 2: Base layer0 is required for lock layers to work, even if range for static LED colours is set to 0,0. + const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //RGB colour is ignored as range is 0,0. + const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 3, 43,100,170}); //White-left caps lock indication + const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({28, 3, 43,100,170}); //White-right num lock indication. Since this indicator is inverted, it must be on the master side of the keyboard to shut off properly when the computer is sleeping. + const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({55, 3, 43,100,170}); //White-middle-right scroll lock indication const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers - my_layer0_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_layer4_layer, - my_capslock_layer, //Highest status indicators override other layers + my_layer0_layer, //Base layer with no indications + my_capslock_layer, //Highest status indicators override other layers my_numlock_layer, my_scrollock_layer ); +#endif - - void keyboard_post_init_user(void) - { - rgblight_layers = my_rgb_layers;// Enable the LED layers - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 - layer_move(0); //start on layer 0 to get the lighting activated in all cases. Remove to save a very small amount of space. - #ifdef POINTING_DEVICE_ENABLE - trackball_set_precision(1.75); //Start trackball with less precision - trackball_set_scrolling(true); //Start trackball in scrolling mode - run_trackball_cleanup(); - #endif - } - - - layer_state_t layer_state_set_user(layer_state_t state) +#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS) + layer_state_t layer_state_set_user(layer_state_t state) //Use for layer lighting. This is independent from lock key LED indicators. { - rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active + rgblight_set_layer_state(0, layer_state_cmp(state, 0)); rgblight_set_layer_state(1, layer_state_cmp(state, 1)); rgblight_set_layer_state(2, layer_state_cmp(state, 2)); rgblight_set_layer_state(3, layer_state_cmp(state, 3)); @@ -430,29 +428,29 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; case 1: rgblight_sethsv_noeeprom(252,255,80); - #ifdef HAPTIC_ENABLE - DRV_pulse(69); + #ifdef HAPTIC_ENABLE //Set different patterns for haptic feedback layer indication + DRV_pulse(69); //transition_hum_10 #endif break; case 2: rgblight_sethsv_noeeprom(80,255,80); #ifdef HAPTIC_ENABLE - DRV_pulse(37); + DRV_pulse(37); //lg_dblclick_str #endif break; case 3: rgblight_sethsv_noeeprom(118,255,80); #ifdef HAPTIC_ENABLE - DRV_pulse(31); + DRV_pulse(31); //sh_dblclick_med #endif break; case 4: rgblight_sethsv_noeeprom(218,255,80); #ifdef HAPTIC_ENABLE - DRV_pulse(7); + DRV_pulse(7); //soft_bump #endif - #ifdef POINTING_DEVICE_ENABLE - if (was_scrolling==true){ //Check if was scrolling when layer is activated + #ifdef POINTING_DEVICE_ENABLE //Set trackball mouse mode when layer 4 is activated + if (was_scrolling==true){ //Check if in scrolling mode when layer was activated trackball_set_scrolling(false); run_trackball_cleanup(); } @@ -461,7 +459,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return state; } - bool led_update_user(led_t led_state) { rgblight_set_layer_state(5, led_state.caps_lock); //Activate capslock lighting layer @@ -470,3 +467,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; } #endif + + +void keyboard_post_init_user(void) +{ + #ifdef RGBLIGHT_ENABLE + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 + #endif + #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS) + rgblight_layers = my_rgb_layers; //Enable LED layer lighting + #endif + layer_move(0); //Start on layer0 by default to set LED colours. Can remove to save a very small amount of space. + #ifdef POINTING_DEVICE_ENABLE + trackball_set_precision(1.75); //Start trackball with lower precision mode + trackball_set_scrolling(true); //Start trackball in scrolling mode + run_trackball_cleanup(); + #endif +} diff --git a/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c b/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c deleted file mode 100644 index 6aa6a7a8b5b7..000000000000 --- a/keyboards/solartempest/sofle/keymaps/via/ocean_dream.c +++ /dev/null @@ -1,555 +0,0 @@ -/* - * Copyright 2021 Tyler Thrailkill (@snowe/@snowe2010) - * - * 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 . - */ - -#include "ocean_dream.h" -#include "quantum.h" -#include "print.h" - -// Calculated Parameters -#define TWINKLE_PROBABILITY_MODULATOR 100 / TWINKLE_PROBABILITY // CALCULATED: Don't Touch -#define TOTAL_STARS STARS_PER_LINE *NUMBER_OF_STAR_LINES // CALCULATED: Don't Touch -#define OCEAN_ANIMATION_MODULATOR NUMBER_OF_FRAMES / OCEAN_ANIMATION_SPEED // CALCULATED: Don't Touch -#define SHOOTING_STAR_ANIMATION_MODULATOR NUMBER_OF_FRAMES / SHOOTING_STAR_ANIMATION_SPEED // CALCULATED: Don't Touch -#define STAR_ANIMATION_MODULATOR NUMBER_OF_FRAMES / STAR_ANIMATION_SPEED // CALCULATED: Don't Touch - -uint8_t animation_counter = 0; // global animation counter. -bool is_calm = false; -uint32_t starry_night_anim_timer = 0; -uint32_t starry_night_anim_sleep = 0; -static int current_wpm = 0; - -static uint8_t increment_counter(uint8_t counter, uint8_t max) { - counter++; - if (counter >= max) { - return 0; - } else { - return counter; - } -} - -#ifdef ENABLE_WAVE -static uint8_t decrement_counter(uint8_t counter, uint8_t max) { - counter--; - if (counter < 0 || counter > max) { - return max; - } else { - return counter; - } -} -#endif - -#ifdef ENABLE_MOON // region -# ifndef STATIC_MOON -uint8_t moon_animation_frame = 0; // keeps track of current moon frame -uint16_t moon_animation_counter = 0; // counts how many frames to wait before animating moon to next frame -# endif - -# ifdef STATIC_MOON -static const char PROGMEM moon[6] = { - 0x18, 0x7E, 0xFF, 0xC3, 0x81, 0x81, -}; -# endif - -# ifndef STATIC_MOON -static const char PROGMEM moon_animation[14][8] = { - // clang-format off - { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, - { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x42, 0x00, }, - { 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xC3, 0x00, 0x00, }, - { 0x3C, 0x7E, 0xFF, 0xFF, 0xC3, 0x81, 0x00, 0x00, }, - { 0x3C, 0x7E, 0xFF, 0xC3, 0x81, 0x00, 0x00, 0x00, }, - { 0x3C, 0x7E, 0xC3, 0x81, 0x81, 0x00, 0x00, 0x00, }, - { 0x3C, 0x42, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, - { 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x42, 0x3C, }, - { 0x00, 0x00, 0x00, 0x81, 0x81, 0xC3, 0x7E, 0x3C, }, - { 0x00, 0x00, 0x00, 0x81, 0xC3, 0xFF, 0x7E, 0x3C, }, - { 0x00, 0x00, 0x81, 0xC3, 0xFF, 0xFF, 0x7E, 0x3C, }, - { 0x00, 0x00, 0xC3, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, - { 0x00, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, }, - // clang-format on -}; -# endif - -static void draw_moon(void) { -# ifdef STATIC_MOON - oled_set_cursor(MOON_COLUMN, MOON_LINE); - oled_write_raw_P(moon, 6); -# endif -# ifndef STATIC_MOON - moon_animation_counter = increment_counter(moon_animation_counter, ANIMATE_MOON_EVERY_N_FRAMES); - if (moon_animation_counter == 0) { - moon_animation_frame = increment_counter(moon_animation_frame, 14); - oled_set_cursor(MOON_COLUMN, MOON_LINE); - oled_write_raw_P(moon_animation[moon_animation_frame], 8); - } -# endif -} -#endif // endregion - -#ifdef ENABLE_WAVE // region -uint8_t starry_night_wave_frame_width_counter = 31; -uint8_t rough_waves_frame_counter = 0; - -// clang-format off -static const char PROGMEM ocean_top[8][32] = { - // still ocean - { - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - }, - // small ripples - { - 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - }, - // level 2 ripples - { - 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, - 0x20, 0x60, 0x40, 0x40, 0x20, 0x60, 0x40, 0x40, - }, - // level 3 waves - { - 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x20, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, - }, - { - 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, - 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, - 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, - 0x40, 0x40, 0x20, 0x10, 0x28, 0x50, 0x40, 0x40, - }, - { - 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, - 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, - 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, - 0x40, 0x40, 0x40, 0x20, 0x10, 0x30, 0x70, 0x60, - }, -}; -static const char PROGMEM ocean_bottom[8][32] = { - // still ocean - { - 0x00, 0x40, 0x40, 0x41, 0x01, 0x01, 0x01, 0x21, - 0x20, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x44, - 0x44, 0x40, 0x40, 0x00, 0x00, 0x08, 0x08, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x40, 0x40, 0x00, 0x00, - }, - // small ripples - { - 0x00, 0x00, 0x40, 0x40, 0x01, 0x01, 0x01, 0x20, - 0x20, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, - 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, - }, - // level 2 ripples - { - 0x00, 0x00, 0x40, 0x40, 0x01, 0x01, 0x01, 0x20, - 0x20, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, - 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, - }, - // level 3 waves - { - 0x00, 0x40, 0x40, 0x42, 0x42, 0x03, 0x11, 0x11, - 0x20, 0x20, 0x00, 0x00, 0x08, 0x0C, 0x0C, 0x04, - 0x05, 0x41, 0x41, 0x21, 0x20, 0x00, 0x00, 0x08, - 0x0A, 0x0A, 0x0B, 0x41, 0x41, 0x41, 0x41, 0x00, - }, - { - 0x10, 0x10, 0x00, 0x80, 0x84, 0xC4, 0x02, 0x06, - 0x84, 0x44, 0xC0, 0x80, 0x80, 0x20, 0x20, 0x10, - 0x08, 0x12, 0x91, 0x81, 0x42, 0x40, 0x00, 0x00, - 0x10, 0x12, 0x22, 0x22, 0x24, 0x04, 0x84, 0x80, - }, - { - 0x08, 0x80, 0x80, 0x82, 0x82, 0x03, 0x21, 0x21, - 0x10, 0x10, 0x00, 0x00, 0x04, 0x04, 0x0C, 0x08, - 0x09, 0x41, 0x42, 0x22, 0x20, 0x00, 0x00, 0x08, - 0x0A, 0x0A, 0x0B, 0x41, 0x43, 0x42, 0x42, 0x00, - }, -}; -// clang-format on - -static void animate_waves(void) { - starry_night_wave_frame_width_counter = decrement_counter(starry_night_wave_frame_width_counter, WIDTH - 1); // only 3 frames for last wave type - rough_waves_frame_counter = increment_counter(rough_waves_frame_counter, 3); // only 3 frames for last wave type - - void draw_ocean(uint8_t frame, uint16_t offset, uint8_t byte_index) { - oled_write_raw_byte(pgm_read_byte(ocean_top[frame] + byte_index), offset); - oled_write_raw_byte(pgm_read_byte(ocean_bottom[frame] + byte_index), offset + WIDTH); - } - - for (int i = 0; i < WIDTH; ++i) { - uint16_t offset = OCEAN_LINE * WIDTH + i; - uint8_t byte_index = starry_night_wave_frame_width_counter + i; - if (byte_index >= WIDTH) { - byte_index = byte_index - WIDTH; - } - if (is_calm || current_wpm <= WAVE_CALM) { - draw_ocean(0, offset, byte_index); - } else if (current_wpm <= WAVE_HEAVY_STORM) { - draw_ocean(1, offset, byte_index); - } else if (current_wpm <= WAVE_HURRICANE) { - draw_ocean(2, offset, byte_index); - } else { - draw_ocean(3 + rough_waves_frame_counter, offset, byte_index); - } - } -} -#endif // endregion - -#ifdef ENABLE_ISLAND // region -uint8_t island_frame_1 = 0; - -// clang-format off -// only use 46 bytes (first 18 are blank, so we don't write them, makes it smaller and we can see the shooting stars properly!) - -// To save space and allow the shooting stars to be seen, only draw the tree on every frame. -// Tree is only 14bytes wide so we save 108 bytes on just the first row. Second row, the -// first 18 bytes is always the same piece of land, so only store that once, which saves 90 bytes -static const char PROGMEM islandRightTop[6][14] = { - {0x84, 0xEC, 0x6C, 0x3C, 0xF8, 0xFE, 0x3F, 0x6B, 0xDB, 0xB9, 0x30, 0x40, 0x00, 0x00,}, - {0x80, 0xC3, 0xEE, 0x7C, 0xB8, 0xFC, 0xFE, 0x6F, 0xDB, 0x9B, 0xB2, 0x30, 0x00, 0x00,}, - {0x00, 0xC0, 0xEE, 0x7F, 0x3D, 0xF8, 0xFC, 0x7E, 0x57, 0xDB, 0xDB, 0x8A, 0x00, 0x00,}, - {0x00, 0xC0, 0xE6, 0x7F, 0x3B, 0xF9, 0xFC, 0xFC, 0xB6, 0xB3, 0x33, 0x61, 0x00, 0x00,}, - {0x00, 0x00, 0x00, 0x00, 0x80, 0xEE, 0xFF, 0xFB, 0xF9, 0xFC, 0xDE, 0xB6, 0xB6, 0x24,}, - {0x00, 0x00, 0x00, 0x00, 0xC0, 0xEE, 0xFE, 0xFF, 0xFB, 0xFD, 0xEE, 0xB6, 0xB6, 0x92,}, -}; -static const char PROGMEM islandRightBottom[6][14] = { - {0x41, 0x40, 0x60, 0x3E, 0x3F, 0x23, 0x20, 0x60, 0x41, 0x43, 0x40, 0x40, 0x40, 0x80,}, - {0x40, 0x41, 0x60, 0x3E, 0x3F, 0x23, 0x20, 0x60, 0x40, 0x40, 0x41, 0x41, 0x40, 0x80,}, - {0x40, 0x40, 0x61, 0x3D, 0x3F, 0x27, 0x21, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80,}, - {0x40, 0x43, 0x61, 0x3C, 0x3F, 0x27, 0x21, 0x60, 0x41, 0x43, 0x43, 0x42, 0x40, 0x80,}, - {0x40, 0x40, 0x60, 0x3C, 0x3F, 0x27, 0x23, 0x63, 0x44, 0x40, 0x41, 0x41, 0x41, 0x81,}, - {0x40, 0x40, 0x60, 0x3C, 0x3F, 0x27, 0x23, 0x63, 0x42, 0x42, 0x41, 0x41, 0x41, 0x80,}, -}; -static const char PROGMEM islandLeft[18] = { - 0x80, 0x40, 0x40, 0x40, 0x40, 0x60, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x60, 0x40, 0x40, -}; -// clang-format on - -static void animate_island(void) { - if (animation_counter == 0) { - island_frame_1 = increment_counter(island_frame_1, 2); - } - - void draw_island_parts(uint8_t frame) { - oled_set_cursor(ISLAND_COLUMN + 3, ISLAND_LINE); - oled_write_raw_P(islandRightTop[frame], 14); - oled_set_cursor(ISLAND_COLUMN + 0, ISLAND_LINE + 1); - oled_write_raw_P(islandLeft, 18); - oled_set_cursor(ISLAND_COLUMN + 3, ISLAND_LINE + 1); - oled_write_raw_P(islandRightBottom[frame], 14); - } - - if (is_calm || current_wpm < ISLAND_CALM) { - draw_island_parts(0); - } else if (current_wpm >= ISLAND_CALM && current_wpm < ISLAND_HEAVY_STORM) { - draw_island_parts(island_frame_1 + 1); - } else if (current_wpm >= ISLAND_HEAVY_STORM && current_wpm < ISLAND_HURRICANE) { - draw_island_parts(island_frame_1 + 2); - } else { - draw_island_parts(island_frame_1 + 4); - } -} -#endif // endregion - -#ifdef ENABLE_STARS // region -bool stars_setup = false; // only setup stars once, then we just twinkle them -struct Coordinate { - int x; - int y; - bool exists; -}; - -struct Coordinate stars[TOTAL_STARS]; // tracks all stars/coordinates - -/** - * Setup all the initial stars on the screen - * This function divides the screen into regions based on STARS_PER_LINE and NUMBER_OF_STAR_LINES - * where each line is made up of 8x8 pixel groups, that are populated by a single star. - * - * Not sure how this function will work with larger or smaller screens. - * It should be fine, as long as the screen width is a multiple of 8 - */ -static void setup_stars(void) { - // For every line, split the line into STARS_PER_LINE, find a random point in that region, and turn the pixel on - // 36% probability it will not be added - // (said another way, 80% chance it will start out lit in the x direction, then 80% chance it will start out lit in the y direction = 64% probability it will start out lit at all) - for (int line = 0; line < NUMBER_OF_STAR_LINES; ++line) { - for (int column_group = 0; column_group < STARS_PER_LINE; ++column_group) { - uint8_t rand_column = rand() % 10; - uint8_t rand_row = rand() % 10; - if (rand_column < 8 && rand_row < 8) { - int column_adder = column_group * 8; - int line_adder = line * 8; - int x = rand_column + column_adder; - int y = rand_row + line_adder; - oled_write_pixel(x, y, true); - stars[column_group + (line * STARS_PER_LINE)].x = x; - stars[column_group + (line * STARS_PER_LINE)].y = y; - stars[column_group + (line * STARS_PER_LINE)].exists = true; - } else { - stars[column_group + (line * STARS_PER_LINE)].exists = false; - } - } - } - stars_setup = true; -} - -/** - * Twinkle the stars (move them one pixel in any direction) with a probability of 50% to twinkle any given star - */ -static void twinkle_stars(void) { - for (int line = 0; line < NUMBER_OF_STAR_LINES; ++line) { - for (int column_group = 0; column_group < STARS_PER_LINE; ++column_group) { - struct Coordinate star = stars[column_group + (line * STARS_PER_LINE)]; - - // skip stars that were never added - if (!star.exists) { - continue; - } - if (rand() % TWINKLE_PROBABILITY_MODULATOR == 0) { - oled_write_pixel(star.x, star.y, false); // black out pixel - - // don't allow stars to leave their own region - if (star.x == (column_group * 8)) { // star is the farthest left it can go in its region - star.x++; // move it right immediately - } else if (star.x == (((column_group + 1) * 8) - 1)) { // star is farthest right it can go in its region - star.x--; // move it left immediately - } - if (star.y == (line * 8)) { // star is the farthest up it can go in its region - star.y++; // move it down immediately - } else if (star.y == (((line + 1) * 8) - 1)) { // star is farthest down it can go in its region - star.y--; // move it up immediately - } - - // now decide direction - int new_x; - int x_choice = rand() % 3; - if (x_choice == 0) { - new_x = star.x - 1; - } else if (x_choice == 1) { - new_x = star.x + 1; - } else { - new_x = star.x; - } - - int new_y; - int y_choice = rand() % 3; - if (y_choice == 0) { - new_y = star.y - 1; - } else if (y_choice == 1) { - new_y = star.y + 1; - } else { - new_y = star.y; - } - - star.x = new_x; - star.y = new_y; - oled_write_pixel(new_x, new_y, true); - } - - stars[column_group + (line * STARS_PER_LINE)] = star; - } - } -} - -/** - * Setup the stars and then animate them on subsequent frames - */ -static void animate_stars(void) { - if (!stars_setup) { - setup_stars(); - } else { - twinkle_stars(); - } -} -#endif // endregion - -#ifdef ENABLE_SHOOTING_STARS // region -bool shooting_stars_setup = false; // only setup shooting stars array once with defaults - -struct ShootingStar { - int x_1; - int y_1; - int x_2; - int y_2; - bool running; - int frame; - int delay; -}; - -struct ShootingStar shooting_stars[MAX_NUMBER_OF_SHOOTING_STARS]; // tracks all the shooting stars - -static void setup_shooting_star(struct ShootingStar *shooting_star) { - int column_to_start = rand() % (WIDTH / 2); - int row_to_start = rand() % (HEIGHT - 48); // shooting_stars travel diagonally 1 down, 1 across. So the lowest a shooting_star can start and not 'hit' the ocean is 32 above the ocean. - - shooting_star->x_1 = column_to_start; - shooting_star->y_1 = row_to_start; - shooting_star->x_2 = column_to_start + 1; - shooting_star->y_2 = row_to_start + 1; - shooting_star->running = true; - shooting_star->frame++; - shooting_star->delay = rand() % SHOOTING_STAR_DELAY; -} - -static void move_shooting_star(struct ShootingStar *shooting_star) { - oled_write_pixel(shooting_star->x_1, shooting_star->y_1, false); - oled_write_pixel(shooting_star->x_2, shooting_star->y_2, false); - - shooting_star->x_1++; - shooting_star->y_1++; - shooting_star->x_2++; - shooting_star->y_2++; - shooting_star->frame++; - - oled_write_pixel(shooting_star->x_1, shooting_star->y_1, true); - oled_write_pixel(shooting_star->x_2, shooting_star->y_2, true); -} - -static void finish_shooting_star(struct ShootingStar *shooting_star) { - oled_write_pixel(shooting_star->x_1, shooting_star->y_1, false); - oled_write_pixel(shooting_star->x_2, shooting_star->y_2, false); - shooting_star->running = false; - shooting_star->frame = 0; -} - -static void animate_shooting_star(struct ShootingStar *shooting_star) { - if (shooting_star->frame > SHOOTING_STAR_FRAMES) { - finish_shooting_star(shooting_star); - return; - } else if (!shooting_star->running) { - setup_shooting_star(shooting_star); - } else { - if (shooting_star->delay == 0) { - move_shooting_star(shooting_star); - } else { - shooting_star->delay--; - } - } -} - -static void animate_shooting_stars(void) { - if (is_calm) { - return; - } - if (!shooting_stars_setup) { - for (int i = 0; i < MAX_NUMBER_OF_SHOOTING_STARS; ++i) { - shooting_stars[i].running = false; - } - shooting_stars_setup = true; - } - /** - * Fixes issue with stars that were falling _while_ the - * wpm dropped below the condition for them to keep falling - */ - void end_extra_stars(uint8_t starting_index) { - for (int shooting_star_index = starting_index; shooting_star_index < MAX_NUMBER_OF_SHOOTING_STARS; ++shooting_star_index) { - struct ShootingStar shooting_star = shooting_stars[shooting_star_index]; - if (shooting_star.running) { - finish_shooting_star(&shooting_star); - shooting_stars[shooting_star_index] = shooting_star; - } - } - } - - int number_of_shooting_stars = current_wpm / SHOOTING_STAR_WPM_INCREMENT; - number_of_shooting_stars = (number_of_shooting_stars > MAX_NUMBER_OF_SHOOTING_STARS) ? MAX_NUMBER_OF_SHOOTING_STARS : number_of_shooting_stars; - - if (number_of_shooting_stars == 0) { - // make sure all shooting_stars are ended - end_extra_stars(0); - } else { - for (int shooting_star_index = 0; shooting_star_index < number_of_shooting_stars; ++shooting_star_index) { - struct ShootingStar shooting_star = shooting_stars[shooting_star_index]; - animate_shooting_star(&shooting_star); - shooting_stars[shooting_star_index] = shooting_star; - } - end_extra_stars(number_of_shooting_stars); - } -} -#endif // endregion - -/** - * Main rendering function - * - * Calls all different animations at different rates - */ -void render_stars(void) { - // // animation timer - if (timer_elapsed32(starry_night_anim_timer) > STARRY_NIGHT_ANIM_FRAME_DURATION) { - starry_night_anim_timer = timer_read32(); - current_wpm = get_current_wpm(); - -#ifdef ENABLE_ISLAND - animate_island(); -#endif - -#ifdef ENABLE_SHOOTING_STARS - if (animation_counter % SHOOTING_STAR_ANIMATION_MODULATOR == 0) { - animate_shooting_stars(); - } -#endif - -#ifdef ENABLE_STARS - // TODO offsetting the star animation from the wave animation would look better, - // but if I do that, then the stars appear in the water because - // the ocean animation has to wait a bunch of frames to overwrite it. - // Possible solutions: - // 1. Only draw stars to the top of the island/ocean. - // 2. Draw ocean every frame, only move ocean on frames matching modulus - // Problems: - // 1. What if someone wants to move the island up a bit, or they want to have the stars reflect in the water? - // 2. More cpu intensive. And I'm already running out of cpu as it is... - if (animation_counter % STAR_ANIMATION_MODULATOR == 0) { - animate_stars(); - } -#endif - -#ifdef ENABLE_WAVE - if (animation_counter % OCEAN_ANIMATION_MODULATOR == 0) { - animate_waves(); - } -#endif - -#ifdef ENABLE_MOON - draw_moon(); -#endif - - animation_counter = increment_counter(animation_counter, NUMBER_OF_FRAMES); - } - - // this fixes the screen on and off bug - if (current_wpm > 0) { - oled_on(); - starry_night_anim_sleep = timer_read32(); - } else if (timer_elapsed32(starry_night_anim_sleep) > OLED_TIMEOUT) { - oled_off(); - } -} \ No newline at end of file diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey.c b/keyboards/solartempest/sofle/keymaps/via/snakey.c index 6380e5c24b7c..8f1f59dba073 100644 --- a/keyboards/solartempest/sofle/keymaps/via/snakey.c +++ b/keyboards/solartempest/sofle/keymaps/via/snakey.c @@ -25,7 +25,7 @@ // KEYBOARD PET START #define KEYBOARD_PET - // settings + // settings for WPM-reactive animations #define MIN_WALK_SPEED 10 #define MIN_RUN_SPEED 40 @@ -181,23 +181,17 @@ // animation void animate_luna(void) { - // jump if (isJumping || !showedJump) { - // clear oled_set_cursor(LUNA_X,LUNA_Y +2); oled_write(" ", false); - oled_set_cursor(LUNA_X,LUNA_Y -1); - showedJump = true; } else { - // clear oled_set_cursor(LUNA_X,LUNA_Y -1); oled_write(" ", false); - oled_set_cursor(LUNA_X,LUNA_Y); } @@ -207,16 +201,12 @@ // current status if(isBarking) { oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); - } else if(isSneaking) { oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); - } else if(current_wpm_read <= MIN_WALK_SPEED) { oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); - } else if(current_wpm_read <= MIN_RUN_SPEED) { oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE); - } else { oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE); } @@ -238,7 +228,7 @@ oled_write("TMPST", false); #ifdef OLED_LOGO - render_logo(0,7); //Not defining this in config.h will save 112 bytes. + render_logo(0,7); //Not defining this in config.h will save space (+112). #endif /* wpm counter */ diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c b/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c index 885c9621ceaa..ab2069a2fde6 100644 --- a/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c +++ b/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c @@ -25,16 +25,13 @@ #define KEYBOARD_PET // KEYBOARD PET START - // settings - #define MIN_WALK_SPEED 10 - #define MIN_RUN_SPEED 40 - // advanced settings #define ANIM_FRAME_DURATION 300 // how long each frame lasts in ms. Default is 200. #define ANIM_SIZE 96 // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024 // timers uint32_t anim_timer = 0; + uint32_t text_timer = 0; // current frame uint8_t current_frame = 0; @@ -85,52 +82,8 @@ 0xff, 0xff, 0xff, 0xff, 0x7e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, } }; - /* - // Walk - static const char PROGMEM walk[2][ANIM_SIZE] = { - // 'walk1', 32x22px - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf8, 0xfc, 0xfe, 0xfe, 0x1f, 0x3f, 0x39, 0x39, 0x3f, 0x3f, 0x1e, 0x1e, 0x0c, 0x00, - 0x00, 0x00, 0x01, 0x0f, 0x3e, 0x78, 0x70, 0xf8, 0xfc, 0xfe, 0x7e, 0x3e, 0x3c, 0x3c, 0x78, 0x78, - 0x78, 0xf0, 0xf1, 0xff, 0x7f, 0x7f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - - // 'walk2', 32x22px - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60, 0x60, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x20, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3e, 0x7f, 0xff, 0xff, 0xe7, 0xc7, 0x0e, 0x0e, 0x0f, 0x0f, 0x07, 0x07, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1f, 0x3e, 0x78, 0xf0, 0xfc, 0x7e, 0x1e, 0x1f, 0x0f, 0x0e, - 0x1e, 0x1c, 0x3d, 0x7f, 0xff, 0xff, 0xff, 0xfc, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; - - // Run - static const char PROGMEM run[2][ANIM_SIZE] = { - // 'run1', 32x22px - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xc0, 0xe0, 0xf0, 0xf0, 0xf8, 0x98, 0xf8, 0xf8, 0xf8, 0xf0, 0x70, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf0, 0xf0, 0xe0, 0xc0, - 0x87, 0x7f, 0xff, 0xff, 0xf1, 0xc3, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x1f, 0x3e, 0x78, 0xf7, 0xff, 0x7f, 0x3d, 0x03, 0x07, 0x0f, - 0x1e, 0x3d, 0x7f, 0xff, 0xff, 0xff, 0xfc, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - - // 'run2', 32x22px - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xe0, 0xf0, 0xf0, 0xf8, 0x98, 0xf8, 0xf8, 0xf8, 0xf0, 0x70, 0x20, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf8, 0xfc, 0x3e, 0xde, 0xfe, 0xfc, 0xf8, 0x00, 0x00, - 0xe0, 0xfe, 0xff, 0x7f, 0x07, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x1e, 0x3c, 0x78, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x07, 0x1f, 0x3f, 0x7c, 0x78, 0xff, - 0xff, 0x7f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - };*/ + + //Walk and run animations have been removed to save space. // Bark static const char PROGMEM bark[2][ANIM_SIZE] = { @@ -180,23 +133,17 @@ // animation void animate_luna(void) { - // jump if (isJumping || !showedJump) { - // clear oled_set_cursor(LUNA_X,LUNA_Y +2); oled_write(" ", false); - oled_set_cursor(LUNA_X,LUNA_Y -1); - showedJump = true; } else { - // clear oled_set_cursor(LUNA_X,LUNA_Y -1); oled_write(" ", false); - oled_set_cursor(LUNA_X,LUNA_Y); } @@ -209,20 +156,9 @@ } else if(isSneaking) { oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); - /* - } else if(current_wpm_read <= MIN_WALK_SPEED) { - oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); - - } else if(current_wpm_read <= MIN_RUN_SPEED) { - oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE); - - } else { - oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE); - }*/ } else { oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); } - } // animation timer @@ -232,6 +168,7 @@ } } // KEYBOARD PET END + #ifndef OLED_NO_SLAVE static void print_logo_narrow(void) { @@ -241,23 +178,12 @@ oled_write("TMPST", false); #ifdef OLED_LOGO - render_logo(0,9); //Not defining this in config.h will save 112 bytes. + render_logo(0,9); //Not defining this in config.h will save space (+112). #endif } #endif static void print_status_narrow(void) { - /*switch (get_highest_layer(default_layer_state)) { //May be useful if you use multiple non-QWERTY layouts to show which is active. - case 0: - oled_write("SOLAR", false); - break; - case 1: - oled_write("GAME", false); - break; - default: - oled_write("UNDEF", false); - }*/ - // Print current layer oled_set_cursor(0,1); oled_write("LAYER", false); diff --git a/keyboards/solartempest/sofle/rules.mk b/keyboards/solartempest/sofle/rules.mk index 47a32403e539..0fa232935525 100644 --- a/keyboards/solartempest/sofle/rules.mk +++ b/keyboards/solartempest/sofle/rules.mk @@ -5,26 +5,26 @@ BOOTLOADER = atmel-dfu # Comment out to disable the options. SPLIT_KEYBOARD = yes # Split keyboard -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration -CONSOLE_ENABLE = no # Console for debug +CONSOLE_ENABLE = no # Console for debug (+4686) +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration (+644) +MAGIC_ENABLE = no # Save space by not PROCESS_MAGIC, which is bootmagic with out the boot (+634) +GRAVE_ESC_ENABLE = no # Save space by not using KC_GESC (+127) +SPACE_CADET_ENABLE = no # Save space by not using space cadet left/right shift (+350) +LTO_ENABLE = yes # Save space by link time optimization + EXTRAKEY_ENABLE = yes # Audio control and System control (+450) -RGBLIGHT_ENABLE = yes # RGB lighting (+2350) -ENCODER_ENABLE = yes # Encoders +RGBLIGHT_ENABLE = yes # RGB lighting (+3826) +ENCODER_ENABLE = yes # Rotary encoders (+1112) MOUSEKEY_ENABLE = no # Mouse keys (+1482). Not required for trackball usage. -NKRO_ENABLE = no # Has 6KRO+ already. NKRO does not work for the sofle. +NKRO_ENABLE = no # 6KRO by default. NKRO works if enabled (+328) COMBO_ENABLE = no # Tap combo chording (+952) -LTO_ENABLE = yes # Save space +#VIA # VIA_ENABLE with the keymap (+2300). Note: VIA is required as non-via layouts were removed to save space. -OLED_ENABLE = yes # Must be disabled if OLEDs are not installed (+3608-4774) +OLED_ENABLE = yes # Must be disabled if OLEDs are not installed (+3608-4774 with pet) OLED_DRIVER = SSD1306 # Specify OLED driver -WPM_ENABLE = no # WPM counter for keyboard pets (+1298) - # Via_enable in keymap (+2300). VIA is required as non-via layouts are removed to save space. - -GRAVE_ESC_ENABLE = no # Save space by not using KC_GESC (+127) -MAGIC_ENABLE = no # Save space by not PROCESS_MAGIC, which is bootmagic with out the boot (+612) -SPACE_CADET_ENABLE = no # Save space by not using space cadet left/right shift (+350) +WPM_ENABLE = no # WPM counter for typing-speed-reactive keyboard pets (+1298) -POINTING_DEVICE_ENABLE = yes # Enable Pimoroni Trackball (+2304) +POINTING_DEVICE_ENABLE = yes # Enable Pimoroni Trackball on master (+2304) QUANTUM_LIB_SRC += i2c_master.c SRC += drivers/sensors/pimoroni_trackball.c diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index 70b29c001c47..70ededaff297 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,1785 +1,1782 @@ -:100000000C9449060C9490060C9490060C949B3327 -:100010000C9490060C9490060C9490060C94900608 -:100020000C9490060C9490060C94001B0C94BC1A33 -:100030000C94FB270C9490060C9490060C9490065C -:100040000C9490060C9490060C9490060C949006D8 -:100050000C9490060C94D71B0C9490060C9490066C -:100060000C9490060C9490060C9490060C949006B8 -:100070000C9490060C9490060C9490060C949006A8 -:100080000C9490060C9490060C9490060C94900698 -:100090000C9490060C9490060C9490060C94900688 -:1000A0000C9490060C9490060C94900637032B64E5 +:100000000C9431060C9478060C9478060C94833387 +:100010000C9478060C9478060C9478060C94780668 +:100020000C9478060C9478060C94E81A0C94A41A94 +:100030000C94E3270C9478060C9478060C947806BC +:100040000C9478060C9478060C9478060C94780638 +:100050000C9478060C94BF1B0C9478060C947806CC +:100060000C9478060C9478060C9478060C94780618 +:100070000C9478060C9478060C9478060C94780608 +:100080000C9478060C9478060C9478060C947806F8 +:100090000C9478060C9478060C9478060C947806E8 +:1000A0000C9478060C9478060C94780637032B642D :1000B000AAFF000000001C032B64AAFF0000000040 -:1000C00004032B64AAFF000000000000D7FF78FFA4 -:1000D00000000000000080FF64FF0000000000003E -:1000E0005FFF5AFF000000000000FCFF7DFF0000E2 -:1000F000000000005FFF5AFF000000000501090238 -:10010000A10185020901A1000509190129081500AD -:100110002501950875018102050109300931158114 -:10012000257F95027508810609381581257F95017F -:1001300075088106050C0A38021581257F95017521 -:10014000088106C0C005010980A101850319012AA3 -:10015000B700150126B700950175108100C0050C88 -:100160000901A101850419012AA002150126A00296 -:10017000950175108100C00660FF0961A101096247 -:10018000150026FF009520750881020963150026D9 -:10019000FF00952075089102C005010906A101051F -:1001A0000719E029E71500250195087501810295D9 -:1001B00001750881010507190029FF150026FF00B8 -:1001C0009506750881000508190129059505750131 -:1001D0009102950175039101C0000000000000002C -:1001E000000000000000000000000000000000000F -:1001F000000000000000000000000000007E0F0072 -:10020000D4FFFFFFC70000007800000000000000DE -:10021000002A2B2800000000000000000000000061 -:100220000000000029000000002C1E3420212224A0 -:10023000342627252E362D3738271E1F202122232E -:100240002425263333362E37381F040506070809C0 -:100250000A0B0C0D0E0F1011121314151617181986 -:100260001A1B1C1D2F3130232D35040506070809E4 -:100270000A0B0C0D0E0F1011121314151617181966 -:100280001A1B1C1D2F3130354C00DA02815AD9F16E -:10029000DB20A4A62EAF00A0C000A1C800AED58070 -:1002A000A81FD300408D142000F200E800DE00D427 -:1002B00000CA00C000B600AC000000000000000052 -:1002C0000000000000E0F0F0F8F8CCCCF8F8F0F016 -:1002D00060000000000000000000000000000000BE -:1002E00000000000000F3F7FFCF9F1E1C181000038 -:1002F00000000000000000000000000000000000FE -:100300000C387060E0E0F0F0F8F9FFFFFFFFFF7ECF -:100310001C000000000000000000000000000000C1 -:100320000000000000E0F0F0F8F8CCCCF8F8F0F0B5 -:10033000600000000000000000000000000000005D -:1003400000000000000F3F7FFCF9F1E1C1810000D7 -:10035000010102060C040000000000000000000083 -:1003600000387C60E0E0F0F0F8F9FFFFFFFFFF7E6F -:100370001C00000000000000000000000000000061 -:10038000000000000000000000000000000000006D -:100390000000000000000000000000000000CCF899 -:1003A00070000000000000C0F0F8F87CFCEEE6FCF5 -:1003B000FC7878B00000000000000000003F7FF1F2 -:1003C000F8F87C7CF8F0F0F1E7EFEFFEFEFEFCFCC5 -:1003D000F8F06000010306020000000000000000C9 -:1003E000000000000000000000000000000000000D -:1003F0000000000000000000000000000080E0F8A5 -:100400001C000000000000C0F0F8F87CFCEEE6FCE8 -:10041000FC7878300000000000000000003F7FF012 -:10042000F8F87C7CF8F0F0F1E7EFEFFEFEFEFCFC64 -:10043000F8F0600000000000000000000000000074 -:1004400080C0C0E0E03070E0E0C0C080000000008C -:100450000000000000000000000000000000001F7D -:100460007FFFFFE7E7EFEFCFCB83830100000000C2 -:1004700000000000000000000000000000061C3822 -:1004800078F1E3E3E7F7F7FFFFFFFF7F3E000000AF -:10049000000000000000000000000000000000005C -:1004A0000000000000000000000000000080C0E02C -:1004B000E060E0C0C080800000000000000000009C -:1004C0000000000020F8FEFFFFFF9F0F0E1F1F3FE0 -:1004D0003F7EE683030F43439088080000031E3CE1 -:1004E00078F0E0E0F0F0FBFFFFFF7F7F38000000D6 -:1004F0000000000000000000000000000004F6B84A -:10050000F8D8F0E0C000000080C0E0E0F0F0F0F0CB -:10051000E0E0C080000000000000000080C0E1F3C7 -:10052000FB7F1F0F0000F0FFFF3F03010000008072 -:10053000C1F3FF7F1F000080C0E0301E3F3F7FF906 -:10054000F0F070783C3F1F0F03000000001C3F7F5D -:100550007FFBF1F0783C1E0F030000000101010158 -:10056000010101010102020202020202020203036E -:10057000030303030303040404040404040505053E -:100580000505060606060607070707070808080800 -:10059000090909090A0A0A0B0B0B0C0C0C0D0D0DAD -:1005A0000E0E0E0F0F0F1010111111121213131443 -:1005B00014151516161717181819191A1A1B1B1CBB -:1005C0001D1D1E1E1F202021222223242425262615 -:1005D000272829292A2B2C2D2D2E2F30313232334A -:1005E0003435363738393A3B3C3D3E3F4041424353 -:1005F0004445464748494A4C4D4E4F505153545537 -:100600005658595A5B5D5E5F616264656668696BE6 -:100610006C6D6F7072737577787A7B7D7E80828364 -:100620008587888A8C8E8F91939596989A9C9EA0A8 -:10063000A2A3A5A7A9ABADAFB1B3B5B7BABCBEC0B5 -:10064000C2C4C6C9CBCDCFD1D4D6D8DBDDDFE2E47E -:10065000E7E9EBEEF0F3F5F8FAFDFFFFAA7F55406E -:100660001C1004010D190A24232221201F1E1D1B0A -:100670001A18171615141312110F0E0C0B09080770 -:1006800006050302002D3945483C303F2526272822 -:10069000292A2B2C2E2F31323334353637383A3B3A -:1006A0003D3E404142434446474907087F08070012 -:1006B0003E5B4F5B3E003E6B4F6B3E001C3E7C3E04 -:1006C0001C00183C7E3C18001C577D571C001C5E0B -:1006D0007F5E1C0000183C180000FFE7C3E7FF0026 -:1006E000001824180000FFE7DBE7FF0030483A0657 -:1006F0000E00262979292600407F05050700407F46 -:1007000005253F005A3CE73C5A007F3E1C1C080070 -:10071000081C1C3E7F0014227F2214005F5F005FD4 -:100720005F0006097F017F00006689956A006060AE -:100730006060600094A2FFA2940008047E04080098 -:1007400010207E20100008082A1C0800081C2A0817 -:1007500008001E10101010000C1E0C1E0C0030386B -:100760003E383000060E3E0E06000000000000007D -:1007700000005F000000000700070000147F147FE6 -:100780001400242A7F2A12002313086462003649C9 -:1007900056205000000807030000001C2241000002 -:1007A0000041221C00002A1C7F1C2A0008083E0869 -:1007B00008000080703000000808080808000000E9 -:1007C000606000002010080402003E5149453E00D0 -:1007D00000427F4000007249494946002141494D8D -:1007E00033001814127F10002745454539003C4A54 -:1007F000494931004121110907003649494936006C -:10080000464949291E000000140000000040340041 -:1008100000000008142241001414141414000041B4 -:10082000221408000201590906003E415D594E009C -:100830007C1211127C007F49494936003E414141FA -:1008400022007F4141413E007F49494941007F09E3 -:10085000090901003E41415173007F0808087F00EB -:1008600000417F4100002040413F01007F081422E9 -:1008700041007F40404040007F021C027F007F0417 -:1008800008107F003E4141413E007F0909090600F2 -:100890003E4151215E007F091929460026494949F8 -:1008A000320003017F0103003F4040403F001F2012 -:1008B00040201F003F4038403F006314081463008D -:1008C0000304780403006159494D4300007F41410E -:1008D0004100020408102000004141417F00040251 -:1008E00001020400404040404000000307080000AF -:1008F0002054547840007F2844443800384444440D -:100900002800384444287F00385454541800000804 -:100910007E09020018A4A49C78007F0804047800D3 -:1009200000447D4000002040403D00007F102844EE -:10093000000000417F4000007C04780478007C08BF -:1009400004047800384444443800FC182424180077 -:1009500018242418FC007C0804040800485454544B -:10096000240004043F4424003C4040207C001C2020 -:1009700040201C003C4030403C00442810284400EB -:100980004C9090907C004464544C440000083641E4 -:10099000000000007700000000413608000002015E -:1009A000020402003C2623263C0000000000000058 -:1009B000404040F0F8F8FF38FFF8F83FF8F8FF380B -:1009C000FFF8F8F040404000000000000080C0C088 -:1009D000C0800000C0C08000000080C0C000C0C057 -:1009E000000080C0C00000000000C0C0C0C0C00047 -:1009F000C0C0000000000000000000000000000077 -:100A000000000000000000000000000000000000E6 -:100A100000000000000000000000000000000000D6 -:100A2000000000000000000000C0F0F8FC3E1E06C0 -:100A3000010000007F4141417F007F4141417F0033 -:100A40000080C0E07E5B4F5BFEC00000C000DCD7D2 -:100A5000DEDEDED7DC00C000000000000000000089 -:100A60000000000000000000000000000000000086 -:100A7000494949FFFFFFFFE0DFBFBF00BFBFDFE025 -:100A8000FFFFFFFF49494900000000001F3F606071 -:100A9000E0BF1F007F7F071E381E077F7F007F7F1C -:100AA0000E1F3B716000000000007F7F0C0C0C00EB -:100AB0007E7E007F7E0303007F7E03037E7E030332 -:100AC0007F7E000F3E703C063C703E0F00327B493B -:100AD000493F7E007F7E0303001E3F69696F260049 -:100AE000000000000000000000030F1F3F3C787072 -:100AF000600000007F4141417F007F4141417F0014 -:100B0000307B7F7830202030787F3B0003000F7FE0 -:100B10000F0F0F7F0F000300000000000000000017 -:100B200000000000000000000000000000000000C5 -:100B3000010101070F0F7F0F7F0F0F7E0F0F7F0F38 -:100B40007F0F0F07010101000000000000000000FE -:100B50000001010000000000000000000000000093 +:1000C00004032B64AAFF0000000000005FFF5AFF3A +:1000D0000000000005010902A10185020901A1003B +:1000E00005091901290815002501950875018102E6 +:1000F0000501093009311581257F950275088106B2 +:1001000009381581257F950175088106050C0A3887 +:10011000021581257F950175088106C0C00501097A +:1001200080A101850319012AB700150126B70095A2 +:100130000175108100C0050C0901A1018504190198 +:100140002AA002150126A002950175108100C006A3 +:1001500060FF0961A1010962150026FF0095207565 +:100160000881020963150026FF0095207508910299 +:10017000C005010906A101050719E029E7150025B9 +:10018000019508750181029501750881010507191E +:100190000029FF150026FF00950675088100050857 +:1001A00019012905950575019102950175039101C4 +:1001B000C00000000000000000000000000000007F +:1001C000000000000000000000000000000000002F +:1001D00000000000007E0F00D4FFFFFFC7000000FA +:1001E0007800000000000000002A2B28000000001A +:1001F00000000000000000000000000029000000D6 +:10020000002C1E3420212224342627252E362D377B +:1002100038271E1F202122232425263333362E374C +:10022000381F0405060708090A0B0C0D0E0F1011E4 +:1002300012131415161718191A1B1C1D2F313023F1 +:100240002D350405060708090A0B0C0D0E0F1011B9 +:1002500012131415161718191A1B1C1D2F313035BF +:100260004C00DA02815AD9F1DB20A4A62EAF00A0FF +:10027000C000A1C800AED580A81FD300408D1420B7 +:1002800000CA00C000B600AC000000000000000082 +:100290000000000000E0F0F0F8F8CCCCF8F8F0F046 +:1002A00060000000000000000000000000000000EE +:1002B00000000000000F3F7FFCF9F1E1C181000068 +:1002C000000000000000000000000000000000002E +:1002D0000C387060E0E0F0F0F8F9FFFFFFFFFF7E00 +:1002E0001C000000000000000000000000000000F2 +:1002F0000000000000E0F0F0F8F8CCCCF8F8F0F0E6 +:10030000600000000000000000000000000000008D +:1003100000000000000F3F7FFCF9F1E1C181000007 +:10032000010102060C0400000000000000000000B3 +:1003300000387C60E0E0F0F0F8F9FFFFFFFFFF7E9F +:100340001C00000000000000000000000000000091 +:10035000000000000000000000000000000000009D +:100360000000000000000000000000000000CCF8C9 +:1003700070000000000000C0F0F8F87CFCEEE6FC25 +:10038000FC7878B00000000000000000003F7FF122 +:10039000F8F87C7CF8F0F0F1E7EFEFFEFEFEFCFCF5 +:1003A000F8F06000010306020000000000000000F9 +:1003B000000000000000000000000000000000003D +:1003C0000000000000000000000000000080E0F8D5 +:1003D0001C000000000000C0F0F8F87CFCEEE6FC19 +:1003E000FC7878300000000000000000003F7FF043 +:1003F000F8F87C7CF8F0F0F1E7EFEFFEFEFEFCFC95 +:10040000F8F06000000000000000000000000000A4 +:1004100080C0C0E0E03070E0E0C0C08000000000BC +:100420000000000000000000000000000000001FAD +:100430007FFFFFE7E7EFEFCFCB83830100000000F2 +:1004400000000000000000000000000000061C3852 +:1004500078F1E3E3E7F7F7FFFFFFFF7F3E000000DF +:10046000000000000000000000000000000000008C +:100470000000000000000000000000000080C0E05C +:10048000E060E0C0C08080000000000000000000CC +:100490000000000020F8FEFFFFFF9F0F0E1F1F3F10 +:1004A0003F7EE683030F43439088080000031E3C11 +:1004B00078F0E0E0F0F0FBFFFFFF7F7F3800000006 +:1004C0000000000000000000000000000004F6B87A +:1004D000F8D8F0E0C000000080C0E0E0F0F0F0F0FC +:1004E000E0E0C080000000000000000080C0E1F3F8 +:1004F000FB7F1F0F0000F0FFFF3F030100000080A3 +:10050000C1F3FF7F1F000080C0E0301E3F3F7FF936 +:10051000F0F070783C3F1F0F03000000001C3F7F8D +:100520007FFBF1F0783C1E0F030000000101010188 +:10053000010101010102020202020202020203039E +:10054000030303030303040404040404040505056E +:100550000505060606060607070707070808080830 +:10056000090909090A0A0A0B0B0B0C0C0C0D0D0DDD +:100570000E0E0E0F0F0F1010111111121213131473 +:1005800014151516161717181819191A1A1B1B1CEB +:100590001D1D1E1E1F202021222223242425262645 +:1005A000272829292A2B2C2D2D2E2F30313232337A +:1005B0003435363738393A3B3C3D3E3F4041424383 +:1005C0004445464748494A4C4D4E4F505153545567 +:1005D0005658595A5B5D5E5F616264656668696B17 +:1005E0006C6D6F7072737577787A7B7D7E80828395 +:1005F0008587888A8C8E8F91939596989A9C9EA0D9 +:10060000A2A3A5A7A9ABADAFB1B3B5B7BABCBEC0E5 +:10061000C2C4C6C9CBCDCFD1D4D6D8DBDDDFE2E4AE +:10062000E7E9EBEEF0F3F5F8FAFDFFFFAA7F55409E +:100630001C1004010D190A24232221201F1E1D1B3A +:100640001A18171615141312110F0E0C0B090807A0 +:1006500006050302002D3945483C303F2526272852 +:10066000292A2B2C2E2F31323334353637383A3B6A +:100670003D3E404142434446474907087F08070042 +:100680003E5B4F5B3E003E6B4F6B3E001C3E7C3E34 +:100690001C00183C7E3C18001C577D571C001C5E3B +:1006A0007F5E1C0000183C180000FFE7C3E7FF0056 +:1006B000001824180000FFE7DBE7FF0030483A0687 +:1006C0000E00262979292600407F05050700407F76 +:1006D00005253F005A3CE73C5A007F3E1C1C0800A1 +:1006E000081C1C3E7F0014227F2214005F5F005F05 +:1006F0005F0006097F017F00006689956A006060DF +:100700006060600094A2FFA2940008047E040800C8 +:1007100010207E20100008082A1C0800081C2A0847 +:1007200008001E10101010000C1E0C1E0C0030389B +:100730003E383000060E3E0E0600000000000000AD +:1007400000005F000000000700070000147F147F16 +:100750001400242A7F2A12002313086462003649F9 +:1007600056205000000807030000001C2241000032 +:100770000041221C00002A1C7F1C2A0008083E0899 +:100780000800008070300000080808080800000019 +:10079000606000002010080402003E5149453E0000 +:1007A00000427F4000007249494946002141494DBD +:1007B00033001814127F10002745454539003C4A84 +:1007C000494931004121110907003649494936009C +:1007D000464949291E000000140000000040340072 +:1007E00000000008142241001414141414000041E5 +:1007F000221408000201590906003E415D594E00CD +:100800007C1211127C007F49494936003E4141412A +:1008100022007F4141413E007F49494941007F0913 +:10082000090901003E41415173007F0808087F001B +:1008300000417F4100002040413F01007F08142219 +:1008400041007F40404040007F021C027F007F0447 +:1008500008107F003E4141413E007F090909060022 +:100860003E4151215E007F09192946002649494928 +:10087000320003017F0103003F4040403F001F2042 +:1008800040201F003F4038403F00631408146300BD +:100890000304780403006159494D4300007F41413E +:1008A0004100020408102000004141417F00040281 +:1008B00001020400404040404000000307080000DF +:1008C0002054547840007F2844443800384444443D +:1008D0002800384444287F00385454541800000835 +:1008E0007E09020018A4A49C78007F080404780004 +:1008F00000447D4000002040403D00007F1028441F +:10090000000000417F4000007C04780478007C08EF +:1009100004047800384444443800FC1824241800A7 +:1009200018242418FC007C0804040800485454547B +:10093000240004043F4424003C4040207C001C2050 +:1009400040201C003C4030403C004428102844001B +:100950004C9090907C004464544C44000008364114 +:10096000000000007700000000413608000002018E +:10097000020402003C2623263C0000000000000088 +:10098000404040F0F8F8FF38FFF8F83FF8F8FF383B +:10099000FFF8F8F040404000000000000080C0C0B8 +:1009A000C0800000C0C08000000080C0C000C0C087 +:1009B000000080C0C00000000000C0C0C0C0C00077 +:1009C000C0C00000000000000000000000000000A7 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F000000000000000000000C0F0F8FC3E1E06F1 +:100A0000010000007F4141417F007F4141417F0063 +:100A10000080C0E07E5B4F5BFEC00000C000DCD702 +:100A2000DEDEDED7DC00C0000000000000000000B9 +:100A300000000000000000000000000000000000B6 +:100A4000494949FFFFFFFFE0DFBFBF00BFBFDFE055 +:100A5000FFFFFFFF49494900000000001F3F6060A1 +:100A6000E0BF1F007F7F071E381E077F7F007F7F4C +:100A70000E1F3B716000000000007F7F0C0C0C001B +:100A80007E7E007F7E0303007F7E03037E7E030362 +:100A90007F7E000F3E703C063C703E0F00327B496B +:100AA000493F7E007F7E0303001E3F69696F260079 +:100AB000000000000000000000030F1F3F3C7870A2 +:100AC000600000007F4141417F007F4141417F0044 +:100AD000307B7F7830202030787F3B0003000F7F11 +:100AE0000F0F0F7F0F000300000000000000000048 +:100AF00000000000000000000000000000000000F6 +:100B0000010101070F0F7F0F7F0F0F7E0F0F7F0F68 +:100B10007F0F0F070101010000000000000000002E +:100B200000010100000000000000000000000000C3 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 :100B60000000000000000000000000000000000085 :100B70000000000000000000000000000000000075 :100B80000000000000000000000000000000000065 :100B90000000000000000000000000000000000055 :100BA0000000000000000000000000000000000045 -:100BB0000000000000000000000000000000000035 -:100BC0000000000000000000000000000000000025 -:100BD0000000000000000000000000000000000015 -:100BE0000000000000000000000000AF00AE09029D -:100BF0005B00030100A0FA090400000103010100E9 -:100C00000921110100012240000705810308000AA3 -:100C10000904010002030000000921110100012262 -:100C200022000705820320000107050303200001BD -:100C30000904020001030000000921110100012242 -:100C40007B000705840320000A1201000200000057 -:100C50000832FC87120200010200011E0353006FDC -:100C6000006C00610072006900750073005F005342 -:100C7000006F0066006C006500000010034B00650B -:100C8000007900680069007600650000000403092F -:100C9000040011241FBECFEFDAE0DEBFCDBF04B6E3 -:100CA00003FE27C08091800690918106A091820664 -:100CB000B09183068730904BA740B04BD1F410928F -:100CC000800610928106109282061092830614BE4E -:100CD00084B7877F84BF0FB6F894A8958091600091 -:100CE000886180936000109260000FBEE0E0F8E33E -:100CF000099512E0A0E0B1E0EEE4FEE602C0059046 -:100D00000D92AE32B107D9F726E0AEE2B2E001C0F3 -:100D10001D92A038B207E1F70E9422280C94E13618 -:100D20000C940000CF93DF9340917E0650917F0694 -:100D30004E5754409A01205A3F4F21303240C0F064 -:100D400020E032E0241B350B60917C0470917D041F -:100D5000FC01CA01240F351FC1E0D0E082179307C0 -:100D600050F070937D0460937C04DF91CF910895DF -:100D700020E630E0E9CF4491DC01A258BB4F5C9102 -:100D8000451781F04C93AC01A5E056954795AA957F -:100D9000E1F7DE0102C0AA0FBB1F4A95E2F7AD01E1 -:100DA0006A2B752B01963196D9CFE8EDF0E0808162 -:100DB0008E7F80831092E2001092DA001092E100A0 -:100DC000A0EEB0E08C9181608C9380818F778083DE -:100DD00019BCA7EDB0E08C918E7F8C9380818F7EC3 -:100DE000808310925E0408952091E4003091E50024 -:100DF00095E6A9012091EC00822F817020FF06C0AA -:100E00008091E80080FF06C080E008952091E8000E -:100E100022FD1AC080916C04882389F0853089F006 -:100E20008091EB0085FD0FC02091E4003091E5003A -:100E300042175307F9F29150E1F684E0089582E0F9 -:100E4000089583E0089581E00895EF92FF920F9353 -:100E50001F93CF937C018B010E94F406C82F811150 -:100E600017C08091E80085FD0BC08091E8008E7767 -:100E70008093E8000E94F406882399F3C82F08C0E5 -:100E8000F70181917F018093F1000150110949F729 -:100E90008C2FCF911F910F91FF90EF90089580912B -:100EA0006E0487FF13C08091E80082FF06C0809126 -:100EB000E8008B778093E80004C080916C04811176 -:100EC000F2CF089580916C048823D9F38091E800D3 -:100ED00080FFF8CF8091E8008E77ECCF982F909329 -:100EE000E900242F762F50E0891731F07091EC0043 -:100EF0002091ED005091F00021FD07C09F5F9730D9 -:100F000071F78093E90081E008953091EB003E7F16 -:100F10003093EB003091ED003D7F3093ED00309148 -:100F2000EB0031603093EB007093EC002093ED0008 -:100F30005093F0002091EE0027FDE0CF80E008956F -:100F4000CF92DF92EF92FF920F931F93CF93DF9395 -:100F5000C8EDD0E088818F7E8883E7EDF0E0808166 -:100F60008160808384E082BF81E080935E04888119 -:100F70008E7F888302EE10E0F80110821092DA0072 -:100F800081EEC82ED12CF601108288818F7788835C -:100F900088818068888388818F7D888319BC1092BE -:100FA0006C0410926D0410926B0410926A0490EE1F -:100FB000E92EF12CF70180818B7F8083888181600D -:100FC000888342E060E080E00E946E07F601808145 -:100FD0008E7F8083F801808181608083808188603A -:100FE0008083F70180818E7F808388818061888300 -:100FF000DF91CF911F910F91FF90EF90DF90CF90F5 -:101000000895FC01809174049091750486179707E8 -:10101000A0F06115710529F49091E8009E779093F6 -:10102000E80090E06115710551F4911108C08091BC -:10103000E80082FF34C080E00895BC01F2CF8091C7 -:101040006C048823C1F18530C1F18091E80083FDF3 -:1010500030C08091E80082FDEACF8091E80080FFF7 -:10106000E1CF8091F3002091F200382F61157105D6 -:1010700019F02830310558F091E02830310509F099 -:1010800090E02091E8002E772093E800CBCF81916B -:101090008093F100615071092F5F3F4FE7CF80913E -:1010A0006C04882341F0853041F08091E80083FF93 -:1010B000BECF81E0089582E0089583E00895809195 -:1010C000610408952FB7F894609157047091580403 -:1010D0008091590490915A042FBF0895209154048F -:1010E000309155042817390771F090935504809377 -:1010F0005404E0915204F0915304309721F000849D -:10110000F185E02D09940895209150043091510407 -:101110002817390771F09093510480935004E0919F -:101120005204F0915304309721F00680F781E02DAE -:10113000099408952091430436E0839FC00111244F -:10114000629F800D911D1124811522E0920714F0F9 -:1011500090E080E082589B4F90937F0680937E06BC -:101160000895883E9105C8F4803E910548F48B327D -:10117000910540F48832910518F404974A9758F481 -:1011800080E008958C32910530F089339105C0F3E9 -:1011900084369105A9F381E011C0811522E59207FB -:1011A00070F48115E1E59E0758F790548115904140 -:1011B00090F7FB019581907F81E011F308958115EF -:1011C00028E5920740F38115E9E59E0728F090563F -:1011D0008115904270F3DFCFFB019581907F81E014 -:1011E000903271F6EBCFFC01680F791F8FEF91E31E -:1011F0002191822728E030E087FF09C0880F8927E6 -:1012000021503109C9F7E617F70791F70895880FBC -:10121000F7CFFA01811101C0FB0109948091770495 -:10122000982F9E7F61F48170826080937704809113 -:101230007A04813A18F080EA80937A04089588311C -:10124000B0F381708661F1CFAF92BF92DF92EF92DF -:10125000FF920F931F93CF93DF93082F162FE9016F -:10126000E42FF0E0E55AFA4F611110C0E4915E2FCF -:101270004E2F4983E8835A83DF91CF911F910F91BD -:10128000FF90EF90DF90BF90AF900895E62EF12C85 -:101290004491D42EE42FF0E026E0829FC001112477 -:1012A0002FEF30E0B9010E941535802F90E0880FB4 -:1012B000991F55E5569FD001579FB00D11248A1BE9 -:1012C0009B0B982F990F890F5901AE18BF08AE9E3E -:1012D000D001AF9EB00DBE9EB00D11245B2F189FA4 -:1012E00080011124012F11275901A01AB10AAE9EC5 -:1012F0008001AF9E100DBE9E100D11245901A81A39 -:10130000B108AE9CC001AF9C900DBE9C900D112405 -:10131000892F9927281B390B2E9FC0012F9F900DD5 -:101320003E9F900D1124E92F62307105A1F050F419 -:101330006115710509F49DCF6130710581F0EB2FC6 -:10134000512F97CF6430710569F080F066307105D8 -:1013500009F48FCFF4CFE42F4B2F592F8ACFE42FEE -:10136000412F87CFEB2F542F492F83CF4B2F5D2D4C -:10137000E12F7FCF80E0089578940895F894E82FC6 -:10138000E295EF70F0E031A1282F2F7081E090E01E -:1013900001C0880F2A95EAF7982F9095932391A37F -:1013A00092A1892B82A30C94BC099091D60292FF42 -:1013B00006C0282F28712830F9F4877F846093FFB6 -:1013C00006C0282F28712831F1F4877E846120918E -:1013D000D70220FF06C0382F38713830D9F4877F04 -:1013E000816021FF06C0282F28712831D1F4877E23 -:1013F000816194FD877E0895282F24712430F9F6A9 -:101400008B7F8860DCCF282F2471243101F78B7EFD -:101410008861DDCF382F3171313019F78E7F8860C8 -:10142000E0CF282F2171213121F78E7E8861E1CF15 -:10143000CF93DF93EC018238910581F1B0F58133D0 -:10144000910509F491C020F58932910509F485C010 -:101450008A9709F490C0C11521E5D20708F0AAC007 -:10146000C11530E5D30708F0F2C0CF3BD10508F035 -:1014700089C0C83AD10508F0DFC0C53AD10508F0E7 -:10148000D3C0C430D105F8F4C130D105E1F040C07B -:101490008533910509F45AC0C997E9F68091D602BF -:1014A000837089F0C0EED0E00EC0833E910599F1C3 -:1014B00070F4803E910501F1823E910561F68091C4 -:1014C000D60282FD21C0CE01DF91CF910895863EE4 -:1014D000910561F1873E910571F1843E910509F016 -:1014E000BACF8091D70281FFEECF8091D602C7EEAE -:1014F000D0E084FD0DC0E7CF8091D60280FDF7C01B -:101500009091D70290FFDFCFC3EED0E084FFDBCF16 -:10151000D0E0C0E0D8CF8091D60282FDEBC09091A0 -:10152000D70290FDBFCF84FFCECFF2CF8091D602FD -:1015300083FDDDCFC8CF8091D60283FDDEC09091C0 -:10154000D70291FFF0CFC4EED0E0BDCF8091D6029C -:1015500085FFB9CFC9E2D0E0B6CF8091D60285FF32 -:10156000B2CFC5E3D0E0AFCF8091D60286FFABCF3C -:10157000CAE2D0E0A8CF8091D60286FFA4CFC1E313 -:10158000D0E0A1CFC11540E2D40760F4C11581E0DD -:10159000D80708F098CFCE01815E9109079708F42B -:1015A00092CFB6CFC11590E4D90708F4B1CFDF7060 -:1015B000D06A89CFC11524E5D20778F4C11533E587 -:1015C000D30708F072C0C11542E5D40708F05CC02B -:1015D000DC2FCC27C16FD06A76CFC1158AE5D8073A -:1015E00078F4C11599E5D90708F073C0C11528E54D -:1015F000D20708F48DCFDC2FCC27C06FD06A63CF21 -:10160000CE0190568115904208F082CF8D2F8F71B8 -:101610000E94D50990E0982F882788279F719C0108 -:101620002C2BE901D0624FCFC55AD0E0C154DE4F18 -:10163000C881D0E0D06447CFC85AD0E0CC0FDD1FBE -:10164000CE53DE4F0990D881C02DD4643CCFCE015B -:1016500064E0969587956A95E1F783702C2F26951F -:101660002695237040E2249F90011124382B8C2F63 -:101670008370C1E0D0E002C0CC0FDD1F8A95E2F795 -:10168000C22BD32BDC681FCFCE018370992721E0BA -:1016900030E002C0220F331F8A95E2F7C695C69547 -:1016A00080E2C89FE0011124EBCFCE01837099271F -:1016B00021E030E002C0220F331F8A95E2F7C69581 -:1016C000C69590E2C99FE0011124C22BD32BDA68A2 -:1016D000FACE8C2F8F700E94D50934E0D695C7952D -:1016E0003A95E1F7CF709C2FEC01D069ECCEC9E3BD -:1016F000D0E0E9CEC2EED0E0E6CEC6EED0E0E3CE5A -:101700000C94620880915F0490919102892B9091D2 -:101710009002892B80933002E0915204F09153049F -:10172000309731F00280F381E02D80E392E009945C -:10173000089580918F0290915E02981301C00895E0 -:101740008F5F8770FACF27E0929F800D1124982F2A -:10175000977086958695869523E0829FF0011124E7 -:10176000E35CFD4F50E040E080E0219130E0092E45 -:1017700002C0369527950A94E2F721703327042E8C -:1017800001C0220F0A94EAF7822B4F5F5F4F43306C -:10179000510559F7089527E0929F800D1124982F45 -:1017A000977041E001C0440F9A95EAF786958695B7 -:1017B000869593E0899FF0011124E35CFD4F90E052 -:1017C00080E070E05191DF0111979B01082E02C06B -:1017D000369527950A94E2F7217021952527242331 -:1017E00025272C9301968330910561F7089590E0A9 -:1017F00080E00E94840890E080E00E946E081092D1 -:101800009102109290020C94820B809392020C949D -:10181000F70B882341F0809590915F048923809392 -:101820005F040C94820B0895882339F090915F0433 -:10183000982B90935F040C94820B08958823B1F148 -:101840009CEF980F913A70F4E2E3F2E091918913E2 -:1018500003C0DF0111971C9242E0E833F407B1F7AF -:101860000C94820B90E2980F983088F4877021E0F6 -:1018700030E0A90102C0440F551F8A95E2F7CA0162 -:10188000809590915F04892380935F04E9CF9BE565 -:10189000980F933020F490E080E00C948408885AEC -:1018A000873120F490E080E00C946E0808950F9347 -:1018B0001F93CF93C82F882309F469C08CEF8C0F36 -:1018C000813AB0F502E312E088E392E0F801219159 -:1018D000C21701F122E0E833F207C9F7EFEF80E029 -:1018E000D8019D918D01C91781F0EF3F19F4911135 -:1018F00001C0E82F8F5F863099F7EF3F31F00E2E51 -:10190000000CFF0BE05DFD4FC283CF911F910F9143 -:101910000C94820BE2E3F2E02191C21303C0DF01D9 -:1019200011971C928E179F07B9F70E94820BD6CF92 -:1019300080E28C0F883068F4C77021E030E001C08D -:10194000220FCA95EAF780915F04822B80935F048F -:10195000DCCFEBE5EC0FE33050F4F0E0E154FE4F68 -:10196000808190E0CF911F910F910C948408C85A08 -:10197000C73168F4EC2FF0E0EE0FFF1FEE53FE4F7F -:1019800080819181CF911F910F910C946E08CF911E -:101990001F910F910895982F92959F7011F0892FA4 -:1019A00094E0282F2695269511F09E5F822F86952C -:1019B00009F09F5F892F0895DC01FB0180819181EF -:1019C000803891054CF08FE78C93808191818F57FF -:1019D000910991838083089581382FEF92073CF419 -:1019E00081E88C938081918181589F4FF2CF8C93B5 -:1019F000118210820895681708F5861B682F21E070 -:101A0000469FA0011124649FF001659FF00D1124F1 -:101A10004091590150915A01E49FC001E59F900DFA -:101A2000F49F900D1124880F892F881F990B919591 -:101A3000222319F09195819591090895681B20E062 -:101A4000DFCF0F931F93CF93DF9300D000D0CDB79C -:101A5000DEB789836A834B831C8204E610E024E0AE -:101A600030E0AE014F5F5F4F60E084E10E9473326F -:101A70000F900F900F900F90DF91CF911F910F91CA -:101A8000089580913203882329F047E669E98BE2C3 -:101A90000C94210D6091590170915A0190E080E001 -:101AA0000E94C23520E030E040E05CE30E94233633 -:101AB00020E030E040E85FE30E94BD35882321F05C -:101AC00047EC6BE180E0E4CF41E265EA89EDE0CFED -:101AD000CF92DF92EF92FF920F931F93CF93DF93FA -:101AE0006C017B0164E670E088E70E945B31EC01E9 -:101AF00097FD12C010E000E0F601E00FF11F8491A5 -:101B000064E670E00E94D531EC01892B29F40F5F67 -:101B10001F4F0E151F0581F70E94EF32CE01DF9196 -:101B2000CF911F910F91FF90EF90DF90CF9008958C -:101B300080914E0490914F04911103C091E0892748 -:101B40000895882369F062E070E08CEE9BE00E94CB -:101B5000680D892B19F080914E04089510924E045F -:101B600080914E04EBCFCF93C0914E0480914F04EF -:101B70008823D1F00E9462086058774C8E4F9F4FA7 -:101B800060934A0470934B0480934C0490934D04EB -:101B9000C11108C062E070E08AEE9BE00E94680D0F -:101BA000892B29F0C0914E048C2FCF91089581E0AC -:101BB00080934E04F7CF90916C04943029F5809374 -:101BC0005B0470935D0460935C049093E9008FEF75 -:101BD0009091E800815095FD06C095ED9A95F1F73A -:101BE00000008111F5CF8091E80085FF0DC050E025 -:101BF00040E063E070E08BE594E00E94250780916F -:101C0000E8008E778093E8000895BC0184E00C948E -:101C1000DB0DBC0183E00C94DB0D9C0184E0809320 -:101C2000E9009FEF8091E800915085FD06C085EDA9 -:101C30008A95F1F700009111F5CF8091E80085FFBA -:101C40000CC050E040E066E070E0C9010E9425074A -:101C50008091E8008E778093E8000895CF93DF931A -:101C6000EC0181E08093E9008FEF9091E8008150D2 -:101C700095FD06C095ED9A95F1F700008111F5CF1D -:101C80008091E80085FF14C050E040E068E070E01B -:101C9000CE010E9425078091E8008E778093E800AE -:101CA00088E0FE01A2E6B4E001900D928A95E1F78A -:101CB000DF91CF9108959F92AF92BF92CF92DF9222 -:101CC000EF92FF920F931F93CF93DF937C015B0101 -:101CD0006A018091D10201E010E08A3010F40AE03C -:101CE00010E0C1E0D0E0F894B501C701F601099514 -:101CF000982E0E94BC09911004C021960C171D0754 -:101D00006CF4892DDF91CF911F910F91FF90EF908F -:101D1000DF90CF90BF90AF909F900895CC9F90019F -:101D2000CD9F300D300D112490E080E045E34A95C1 -:101D3000F1F70000019682179307C1F7D4CF809185 -:101D4000A102811110C08091D80080618093D800D9 -:101D50008AE18A95F1F700C08091D90080FF0AC01E -:101D600081E08093A10281E09091A102913009F07D -:101D700080E0089582E08093A1020E94D50610922F -:101D80006C04F1CF0E949F0E882351F0E091520421 -:101D9000F0915304309721F00190F081E02D0994E7 -:101DA00080E008951F93CF93DF93182FEB010E94DB -:101DB000570C8FE99FE00197F1F700C000002197D1 -:101DC000C1F7812FDF91CF911F910C941E0C4F9280 -:101DD0005F926F927F928F929F92AF92BF92CF92BB -:101DE000DF92EF92FF920F931F93CF93DF93CDB7C4 -:101DF000DEB7CE5DD1090FB6F894DEBF0FBECDBF02 -:101E0000509070019091770490FF5DC080905D03C9 -:101E100090905E038114910409F068C0E0E6F6E05A -:101E20009E012F5F3F4FBE0161527F4FC901A491B8 -:101E30004A2F50E0DA01AA0FBB1FA40FB51FA15A09 -:101E4000BC4FCD90DD90EC90D901CD92DD92ED921A -:101E50009D0131966A177B0751F720916F0143E08E -:101E6000249F800D911D1124539A2BB1277F3BB1E4 -:101E700038605FB7F894BC01549E600D711D112449 -:101E80008617970709F08EC05FBF8FE594E0019732 -:101E9000F1F700C00000C252DF4F0FB6F894DEBF6A -:101EA0000FBECDBFDF91CF911F910F91FF90EF90AB -:101EB000DF90CF90BF90AF909F908F907F906F906A -:101EC0005F904F900895809171012091720133E0ED -:101ED000839FF0011124E15AFC4F821708F096CF3E -:101EE0001182108212828F5F3396F7CF90FF96CFC8 -:101EF000D12CC12C66246394712C53E0452E809123 -:101F00005C0393010C2C01C0220F0A94EAF7822390 -:101F100009F43FC0F601EE0FFF1FE80DF91DE59033 -:101F2000F490E114F10409F479CF45E050E0B701F1 -:101F3000CE0101960E94563509810F3F51F18A81E9 -:101F4000800F9927991F8B34910514F08AE490E053 -:101F50005C01AA0CBB1C8A0D9B1DDC01A15ABC4F65 -:101F60005D01049D80011124015A1C4F0A151B05B7 -:101F700020F0B5E0EB0EF11CD8CF4D81413A08F0CE -:101F800040EA98016C818B810E9424090D5F1F4FEC -:101F9000EDCFEFEFCE1ADE0AF8E0CF16D10409F04C -:101FA000AECF3CCFFC014191CF01E8E03BB900004E -:101FB00000C047FF2BB9440F000000C000C000C0A4 -:101FC0002BB900C0EA9591F75BCFE7E7F4E0808199 -:101FD0008E7F8083E9E5F3E08281816082832FEF49 -:101FE00080E792E0215080409040E1F700C000007F -:101FF0000C94E70EE2E3F2E086E0DF011D928A95A1 -:10200000E9F70C94F70B1F93CF93DF93CDB7DEB7AF -:10201000AA970FB6F894DEBF0FBECDBF8EE694E050 -:102020002091F100DC012D93CD01B4E086379B07B0 -:10203000B9F780916F04833009F471C0B8F481302E -:1020400009F448C0823009F4B4C08091E80083FFED -:102050003CC180916E0490916F049A3008F035C1B4 -:10206000E92FF0E0ED51F94C0C9449358A3009F430 -:102070008FC08B3009F470C0893039F780916E04BD -:10208000813219F78091720490917304009711F0D6 -:102090000297D9F68091E800877F8093E8008091CD -:1020A000E80082FF37C09091F3008091F200029720 -:1020B00029F48091F1008B7F813021F48091F1002F -:1020C000809361048091E8008B778093E8000E9400 -:1020D0004F07BBCF80916E04813A09F0B6CF809153 -:1020E000E800877F8093E8008091720490917304E8 -:1020F000892B61F468E082E694E070E00E940108B8 -:102100008091E8008B778093E8009FCF60E090E0BB -:1021100080E0F3CF80916C048111C1CF96CF809184 -:102120006E04813A09F091CF80917204909173040A -:10213000892B09F08ACF8091E800877F8093E8009F -:102140008091E80080FFFCCF809174018093F100C2 -:102150008091E8008E77B9CF80916E04813209F0CA -:1021600074CF8091720490917304892B09F06DCF24 -:102170008091E800877F8093E8000E944F0780915C -:1021800070048093740110925F040E94FA0F5DCF77 -:1021900080916E04813209F058CF8091E800877FEA -:1021A0008093E8000E944F0780917104809360043F -:1021B0004CCF80916E04813A09F047CF8091E800BE -:1021C000877F8093E8008091E80080FFFCCF8091BA -:1021D0006004BCCF803899F0823809F076C08091D5 -:1021E00072048F70873008F070C08093E90080918E -:1021F000EB0085FB882780F91092E90006C08091EA -:102200006A0490916B04911182609091E800977F2D -:102210009093E8008093F1001092F1008091E80023 -:102220008E77B5C1882309F4A2C1823009F04DC070 -:10223000809170048111A6C1809172048F702FEF7C -:10224000280F263008F041C08093E9002091EB0070 -:1022500020FF98C1933031F48091EB00806280932D -:10226000EB0090C19091EB0090619093EB0021E026 -:1022700030E001C0220F8A95EAF72093EA0010921D -:10228000EA008091EB008860EACF81111EC01091B6 -:1022900070041F778091E3008078812B8093E300A6 -:1022A0008091E800877F8093E8000E944F0780912B -:1022B000E80080FFFCCF8091E30080688093E3001A -:1022C00082E0111183E080936C048091E80083FF29 -:1022D0000AC08091E800877F8093E8008091EB003E -:1022E00080628093EB00AA960FB6F894DEBF0FBE13 -:1022F000CDBFDF91CF911F9108958058823028F78C -:1023000020917004309171042C3DE3E03E07A1F56B -:1023100083E08A838AE289834FB7F894DE011396BB -:1023200020E03EE051E2E32FF0E050935700E491CB -:1023300020FF03C0E295EF703F5FEF708E2F90E0BB -:10234000EA30C0F0C7968D939D932F5F243159F7E3 -:102350004FBF8091E800877F8093E8006AE270E0D9 -:10236000CE0101960E9401088091E8008B7780934E -:10237000E800ABCFC096E7CF8091720490917304D0 -:10238000432F55274330510509F44AC078F54130B1 -:10239000510509F47AC08BE590E0EEEEFBE04230A7 -:1023A000510509F092CF2091E800277F2093E800A3 -:1023B00020917404309175048217930708F49C01EE -:1023C00040E02115310509F065C0411163C08091DD -:1023D000E80082FDC9CF80916C04882329F2853002 -:1023E00019F28091E80083FFF2CFBECF4132510550 -:1023F00009F43CC04232510509F067CF83309105A2 -:1024000008F063CFFC01EE0FFF1FEF5DFD4F019061 -:10241000F081E02D825E9D4FDC018C9190E01AC02E -:10242000332721303105D1F02115310561F02230FB -:10243000310509F04ACFEBE5FCE0E4918E2F90E006 -:10244000EBE5FCE007C0EDE8FCE0E4918E2F90E0C6 -:10245000EDE8FCE0009709F438CFA5CFEBE7FCE00E -:10246000E4918E2F90E0EBE7FCE0F4CF8330910510 -:1024700008F02BCF880F991FFC01E95DFD4F0190FB -:10248000F081E02D89E090E08ECF82E190E0E9E4F8 -:10249000FCE089CF80916C04882309F465CF8530F6 -:1024A00009F462CF8091E80083FD5ECF8091E8005F -:1024B00082FD8DCF8091E80080FF83CF9091F30063 -:1024C0008091F2002115310519F08830910550F006 -:1024D00041E0089709F040E08091E8008E77809312 -:1024E000E8006FCF44914093F100319621503109BB -:1024F0000196E8CF803809F0E8CE8091E800877F28 -:102500008093E80080916D048093F10087CE811163 -:10251000DCCE10917004123008F0D7CE8091E80024 -:10252000877F8093E80010936D040E944F0711236A -:1025300011F084E005C08091E30087FDFACF81E0CF -:1025400080936C0442E061EC81E00E946E0742E2FD -:1025500061EC84E00E946E0742E261EC82E00E943E -:102560006E0742E260EC83E00E946E07AECE80917F -:102570007004813009F0A9CE81E0933009F080E049 -:1025800080936B041092E9008091E800877F80932C -:10259000E8000E944F0799CE1F93CF93DF93162F29 -:1025A000C0917E06D0917F068A30D1F420914304F9 -:1025B000CE018E579440622F70E00E941535281B83 -:1025C000822F66E00E942935C82FC15020F4DF9188 -:1025D000CF911F91089560E080E20E94CC12F5CF68 -:1025E0008D30E9F4CE57D44020914304622F70E03F -:1025F000CE010E941535281B822F9E01280F311D08 -:102600002115324018F080E0D0E0C0E0C80FD11DA5 -:10261000C258DB4FD0937F06C0937E06D8CF96E09A -:10262000FE01A4E4B4E001900D929A95E1F7803E9A -:1026300090F186E0FE0111928A95E9F7C0917E063D -:10264000D0917F06111133C046E050E0BE0184E412 -:1026500094E00E945F359E012E573440892B91F5FE -:102660002A5F3F4F40914304642F70E0C9010E94EC -:102670001535481B463010F4240F311D211572E02A -:10268000370710F030E020E022583B4F30937F06B0 -:1026900020937E069CCFF6E08F9FB00111246655F3 -:1026A000794F46E050E0CE010E945635C7CF9E01DB -:1026B0002A5F3F4FFE012E173F0731F28081809540 -:1026C0008193F9CFC90145E0969587954A95E1F741 -:1026D00041E050E0BA0102C0660F771F8A95E2F729 -:1026E000CB0160917C0470917D04862B972BB901FE -:1026F0006B5F7F4FE5E076956795EA95E1F702C05D -:10270000440F551F6A95E2F7842B952B90937D0417 -:1027100080937C04A5CFFF920F931F93CF93DF93F9 -:10272000EC01F62EFC0101900020E9F78F01015029 -:102730001109C017D10730F0DF91CF911F910F9190 -:10274000FF9008956F2D89910E94CC12F2CFE1E4A1 -:10275000F4E08083618324E630E042E050E0BF0192 -:1027600084EB0C944C32CF93C82F60E08CE00E9435 -:10277000A7136C2F84E00E94A71361E08CE0CF9137 -:102780000C94A7131F93CF93DF93CDB7DEB7629757 -:102790000FB6F894DEBF0FBECDBF96E0E4E2F3E0E3 -:1027A000DE01179601900D929A95E1F796E0FE01F1 -:1027B0003796DE011D9601900D929A95E1F71885E6 -:1027C000882309F1162B84E00E94B3131E8786E04C -:1027D000FE013D96DE01119601900D928A95E1F77A -:1027E00086E0FE013196A4E2B3E001900D928A9555 -:1027F000E1F762960FB6F894DEBF0FBECDBFDF9152 -:10280000CF911F91089560951623E0CFCF93DF936A -:10281000C3EED2E060E0CE010E9489352196C11559 -:1028200084E0D807B9F7DF91CF9108956F927F9236 -:102830008F929F92AF92BF92CF92DF92EF92FF92D0 -:102840000F931F93CF93DF938AEAC82E86E0D82E8A -:1028500091ECE92EF12CE701CC58D10936011BC0CF -:10286000F50185909490692DC8010E948935682DE5 -:10287000C80101960E94893582E0A80EB11C0E5F46 -:102880001F4FC017D10761F78EE0680E711C2E969E -:10289000CE15DF0529F08E010E5011095301E0CF4E -:1028A0007E018CE8E80EF11C8CE8C80ED11C8DE787 -:1028B000E81683E0F80679F6DF91CF911F910F912A -:1028C000FF90EF90DF90CF90BF90AF909F908F9050 -:1028D0007F906F900895CF93C82F6FEF811161E2C1 -:1028E00083E290E00E9489356FEFC11161E184E2DB -:1028F00090E00E9489356FEFC11163E185E290E0BD -:10290000CF910C94893580E00E946B1460E086E2E0 -:1029100090E00E9489350E9416140E94061481E0FE -:102920000C946B140F931F93CF93DF93C42FD0E0BD -:10293000CC0FDD1F2EE0629FC00DD11D11243CE89D -:10294000839FC00DD11D1124CE0187960E9475353D -:10295000082F10E0102F0027CE0188960E947535B1 -:102960009801282BC901DF91CF911F910F910895F4 -:10297000462F853038F47A3028F4673018F4672F02 -:102980000C94921490E080E00895CF92DF92FF9231 -:102990000F931F93CF93DF936C0100917604809186 -:1029A0009202082BC7E0D0E010E0FC2EC8010C2EEC -:1029B00002C0959587950A94E2F780FD0CC0219797 -:1029C000A0F7F12C8F2DDF91CF911F910F91FF90E8 -:1029D000DF90CF900895B6018C2F0E94B8140E940A -:1029E000180A019761F3EECFCF93DF93EC010E94B9 -:1029F000C514BE010E94B814DF91CF910C94180A3F -:102A0000FC01808191810E94F414292F2F709295EE -:102A10009F7092509E3078F4E92FF0E0E351F94C2A -:102A20000C944935803F19F020F4883E20F481E071 -:102A30000895843FE1F380E00895883EC0F3813F2C -:102A4000D1F7F5CF822F869586958695089583E2F6 -:102A500090E00E947535813289F484E290E00E9412 -:102A60007535813159F485E290E00E94753591E029 -:102A7000833109F090E0892F8170089580E0FCCFC8 -:102A8000CF92DF92EF92FF926B017C010E940E09C0 -:102A9000B701A60188E090E0FF90EF90DF90CF9023 -:102AA0000C949B35AF92BF92CF92DF92EF92FF9240 -:102AB0000F931F93CF93DF9300D00F92CDB7DEB764 -:102AC000082FF62E142FE22E8091770480FF4FC03E -:102AD000E82FE695AE2FB0E0AE5EBD4F9C9190938F -:102AE00059038E7F823009F056C0413A08F040EA1F -:102AF0009E012F5F3F4F6F2D802F0E9424098091F0 -:102B0000770480FF11C02B8139814A818091710146 -:102B10009091720153E0859FF0011124E15AFC4F1E -:102B2000891798F10E94E70E80917804801308C0FD -:102B3000809179048F1104C080917A04811729F063 -:102B400080915B03826080935B0300937804F09232 -:102B5000790410937A04EE2051F06091770470911B -:102B600078048091790490917A040E9440150F9026 -:102B70000F900F90DF91CF911F910F91FF90EF90E9 -:102B8000DF90CF90BF90AF90089541833083228330 -:102B90008F5F3396C5CF923039F6E2508E2F817019 -:102BA000D82EE695F0E0E55AF94FA590B490C12CE7 -:102BB000BB2460917301C61608F0B4CF2C2D30E011 -:102BC000A29EC001A39E900DB29E900D112470E0B4 -:102BD0000E941535802FD11016C0860F40917101CB -:102BE000420F532F511D9A01220F331F240F351FFF -:102BF000215A3C4F412F113A08F040EA6F2D0E94B4 -:102C00002409C394D6CF861BE9CFE7E7F4E04381DC -:102C100021E1421B08F440E021E0628181810C94B3 -:102C20005215E7E7F4E0438121E1420F08F44FEF4A -:102C300021E0628181810C945215E7E7F4E0628122 -:102C400021E1621B08F460E021E0438181810C9462 -:102C50005215E7E7F4E0628121E1620F08F46FEFBB -:102C600021E0438181810C945215E7E7F4E08181F2 -:102C700021E04381628188500C945215E7E7F4E02B -:102C8000818121E043816281885F0C94521580919B -:102C90007B04882319F0815080937B046091770432 -:102CA000709178048091790490917A040C94401585 -:102CB00080917B04833018F48F5F80937B04609154 -:102CC0007704709178048091790490917A040C943F -:102CD00040159091770490FF27C0917081111DC01D -:102CE00092609093770480915B03816080935B0393 -:102CF000662351F060917704709178048091790493 -:102D000090917A040E94401520E040917A046091ED -:102D10007904809178040C9452158C3010F09661EF -:102D2000E0CF880F982BDDCF089521E030E0A90196 -:102D300002C0440F551F8A95E2F7CA0120915C0337 -:102D4000662391F0822B80935C0380915B0380610A -:102D500080935B0380915A03811109C080917704AD -:102D600060E086950C94691680958223ECCF0895D7 -:102D7000CF93DF93C82FC17082FBDD27D0F981FB91 -:102D8000662760F985E00E94951661E06C2786E071 -:102D90000E9495166D2F87E0DF91CF910C949516C8 -:102DA0000F931F93CF93C82F61E08111682F61703B -:102DB00080E00E949516C1FB662760F9C11101C031 -:102DC00060E081E00E949516C2FB662760F9C111A0 -:102DD00001C060E082E00E949516C3FB662760F99F -:102DE000C11101C060E083E00E949516C4FB662714 -:102DF00060F9C11101C060E084E00E9495164C2F7B -:102E000050E070E060E0DB01CA01F4E0B695A79500 -:102E100097958795FA95D1F70097A105B10549F1E6 -:102E2000AC01BD0184E08A019B01E2E03695279563 -:102E300017950795EA95D1F701151105210531057B -:102E400019F08E5FB901A80176956795579547955A -:102E5000452B462B472B09F08F5F8230D1F158F478 -:102E60008823E9F0813059F18C2FCF911F910F9178 -:102E7000089580E0D8CF8330A1F18430A9F720E015 -:102E800040E56FEF8AED0E94521587E00E94B31370 -:102E900080910001882341F3109232030DC020E09D -:102EA00040E56FEF82E30E94521580910001882374 -:102EB00099F381E0809332030E94410DD5CF20E049 -:102EC00040E56FEF8CEF0E94521585E40E94B3132A -:102ED000CBCF20E040E56FEF80E50E94521585E200 -:102EE000F5CF20E040E56FEF86E70E9452158FE1B5 -:102EF000EDCF0E94D016809376040C94F70B80914E -:102F00007604982F9670963019F488600C9479178F -:102F1000877FFCCF21E030E001C0220F8A95EAF7DD -:102F200020958091760482230C94791721E030E07B -:102F300001C0220F8A95EAF780917604822B0C94C7 -:102F40007917809177048695815009F48BE061E0D0 -:102F50000C9469168091770486958F5F8C3008F009 -:102F600081E061E00C9469168091770480FF07C0CE -:102F7000869582588F77893010F40C94AA1761E0F7 -:102F800082E00C946916E7E7F4E083E08083118225 -:102F90008FEF828380EA83831482A9E5B3E01296DF -:102FA0008C911297836012968C93608171818281DB -:102FB00093810C944015AB01BC0188E190E00C9426 -:102FC0009B35CF93C82FEFE3F4E0982F990F990F1B -:102FD000990F80818770892B8083E0E4F4E09C2F37 -:102FE0009295969597708081887F892B80836091D8 -:102FF0003D0470913E0480913F04909140040E94F2 -:10300000DB176C2F82E0CF910C94A713EDE3F4E073 -:1030100089E88083118282818C7F828360913D0464 -:1030200070913E0480913F04909140040C94DB1712 -:10303000EDE3F4E080818E7F808360913D047091A8 -:103040003E0480913F04909140040C94DB17EDE323 -:10305000F4E080818160808360913D0470913E0442 -:1030600080913F04909140040C94DB1769EE7EEF51 -:1030700090E080E00E94A73560E082E090E00E944E -:10308000893560E083E090E00E94893510929202D9 -:1030900060E084E090E00E94893560E082E290E0A8 -:1030A0000E94893560E085E090E00E94893560E00B -:1030B00086E090E00E9489356FEF87E090E00E9403 -:1030C000893540E050E0BA0188E090E00E949B35ED -:1030D00060E08DE090E00E94893540E050E0BA0168 -:1030E00088E190E00E949B3560E087E190E00E94DB -:1030F000893540E050E0BA018CE190E00E949B35B8 -:1031000070E060E080E290E00E94A7350E9406181F -:1031100080E00E946B140E94831440E050E0BA01EA -:103120008FE090E00E949B3540E050E0BA0183E1DF -:1031300090E00C949B350F931F93CF93DF9300D0B7 -:1031400000D0CDB7DEB74091C5025091C602609164 -:10315000C7027091C8022FB7F894809157049091DC -:103160005804A0915904B0915A042FBF841B950BA9 -:10317000A60BB70B84369105A105B10588F10E9415 -:103180009F0E882379F10E9462086E5F7F4F8F4FF8 -:103190009F4F69837A838B839C8380912C019091CC -:1031A0002D0181559D4F40912B0150E04530510537 -:1031B00010F044E050E0BE016F5F7F4F0E946C351D -:1031C00084E090E00E946134892BD9F40E94620867 -:1031D0006093C5027093C6028093C7029093C802A1 -:1031E00081E010C00E9462080091D2021091D302C7 -:1031F0002091D4023091D502600F711F821F931F5E -:10320000C4CF80E00F900F900F900F90DF91CF917F -:103210001F910F9108958F929F92AF92BF92CF927C -:10322000DF92EF92FF920F931F93CF93DF93EB0107 -:1032300088809980AA80BB809FB7F894C09057047B -:10324000D0905804E0905904F0905A049FBFC818D9 -:10325000D908EA08FB0894E6C916D104E104F10490 -:1032600010F4442311F1E82E082E000CFF089AE018 -:103270008902F0011124EF5FFE4F83819481815513 -:103280009D4F428150E00417150708F4A801B901C9 -:103290000E946C35C7010E946134892BA1F40E9401 -:1032A0006208688379838A839B8381E0DF91CF9171 -:1032B0001F910F91FF90EF90DF90CF90BF90AF9054 -:1032C0009F908F90089580E0F1CF0F931F93CF933D -:1032D000DF930F92CDB7DEB780914E0489832091A2 -:1032E000C40290E041E02817190609F440E001E02B -:1032F00010E09E012F5F3F4F6DEC72E086E00E9470 -:103300000B190F90DF91CF911F910F9108950F939B -:103310001F93CF93DF93CDB7DEB729970FB6F894FD -:10332000DEBF0FBECDBF85E0E7E7F4E0DE0111961A -:1033300001900D928A95E1F78091590390915A037B -:10334000A0915B03B0915C038E839F83A887B987AC -:1033500041E08885811101C040E009E010E09E0154 -:103360002F5F3F4F69EC72E085E00E940B198111DD -:1033700010925B0329960FB6F894DEBF0FBECDBF47 -:10338000DF91CF911F910F9108956F927F928F924D -:103390009F92AF92BF92CF92DF92EF92FF920F93E4 -:1033A0001F93CF93DF930F92CDB7DEB7862E5A01CE -:1033B0006901682E880F7708C3010E946134892B48 -:1033C00009F088C08AE0869DF001879DF00D1124E8 -:1033D000EF5FFE4F458150E04115510511F041E08E -:1033E00050E08AE0869DF001879DF00D1124EF5F8B -:1033F000FE4F6681778161557D4FCE0101960E9417 -:103400006C35F50140815181628173812FB7F89449 -:103410008091570490915804A0915904B0915A0496 -:103420002FBF841B950BA60BB70B84369105A10506 -:10343000B10540F4B701C8010E94F30899818917CA -:1034400009F44FC0082C000C9908C4010E94613493 -:10345000892B91F0B12C8B2D0F90DF91CF911F9183 -:103460000F91FF90EF90DF90CF90BF90AF909F9023 -:103470008F907F906F9008958AE0889DF001899DDC -:10348000F00D1124EF5FFE4F458150E0E416F50684 -:1034900008F4A7018AE0889DF001899DF00D1124B0 -:1034A000EF5FFE4F6681778161557D4FC6010E94B7 -:1034B0006C35B701C8010E94F30899818913CACFFE -:1034C0000E946208F5016083718382839383BB2429 -:1034D000B394C1CFB12CA701B801C6010E946C35CD -:1034E000BACFBB24B394F7CFCF92DF92EF92FF9283 -:1034F0000F931F93CF93DF9300D000D00F92CDB7DF -:10350000DEB76B0185E0E82EF12C00EB12E09E01A6 -:103510002F5F3F4F47EA52E061E080E00E94C5190B -:10352000882349F095E0FE013196A2EAB2E00190CD -:103530000D929A95E1F795E0E2EAF2E0D60101906A -:103540000D929A95E1F70F900F900F900F900F90BA -:10355000DF91CF911F910F91FF90EF90DF90CF906F -:10356000089590E080E00E948335893E9E4F11F4DB -:103570000C94271580E008951F920F920FB60F92BA -:1035800011242F933F934F935F936F937F938F9368 -:103590009F93AF93BF93CF93DF93EF93FF93D0911C -:1035A000E900DF708091EC00C82FC17080FDC0E899 -:1035B0001092E9008091F000877F8093F00078946A -:1035C0000E9403101092E9008091F00088608093BF -:1035D000F000CD2BCF70C093E900FF91EF91DF9108 -:1035E000CF91BF91AF919F918F917F916F915F919B -:1035F0004F913F912F910F900FBE0F901F901895F4 -:103600001F920F920FB60F9211242F933F934F9357 -:103610005F936F937F938F939F93AF93BF93EF933A -:10362000FF938091E10082FF09C08091E20082FF58 -:1036300005C08091E1008B7F8093E1008091DA00EA -:1036400080FF24C08091D80080FF20C08091DA00E4 -:103650008E7F8093DA008091D90080FF9BC080E14B -:1036600089BD82E189BD09B400FEFDCF81E0809370 -:103670006C0480915E04811109C00E94D5060E94ED -:10368000A0078091E20084608093E2008091E100D5 -:1036900080FF17C08091E20080FF13C08091E2009C -:1036A0008E7F8093E2008091E20080618093E2004F -:1036B0008091D80080628093D80019BC85E0809307 -:1036C0006C048091E10084FF29C08091E20084FFB6 -:1036D00025C080E189BD82E189BD89B5982F9170AF -:1036E00080FFFBCF8091D8008F7D8093D8008091A0 -:1036F000E1008F7E8093E1008091E2008F7E8093D5 -:10370000E2008091E20081608093E20080916D048C -:10371000882309F445C084E080936C048091E10023 -:1037200083FF27C08091E20083FF23C08091E100E6 -:10373000877F8093E10082E080936C0410926D0497 -:103740008091E1008E7F8093E1008091E2008E7F86 -:103750008093E2008091E20080618093E20042E089 -:1037600060E080E00E946E078091F00088608093A6 -:10377000F000FF91EF91BF91AF919F918F917F9159 -:103780006F915F914F913F912F910F900FBE0F90CE -:103790001F90189519BC10926C0410925E0476CF9D -:1037A0008091E30087FD93E090936C04B7CF789409 -:1037B0001F921FB61F9211248F939F93AF93BF93B5 -:1037C0008091570490915804A0915904B0915A04E3 -:1037D0000196A11DB11D8093570490935804A093A6 -:1037E0005904B0935A04BF91AF919F918F911F904C -:1037F0001FBE1F9018959C014FB7F89480915704F5 -:1038000090915804A0915904B0915A044FBF821B63 -:10381000930B08952FB7F894809157049091580412 -:10382000A0915904B0915A042FBF08955F926F92EE -:103830007F928F929F92AF92BF92CF92DF92EF9240 -:10384000FF920F931F93CF93DF9300D000D00F927E -:10385000CDB7DEB77C01FC0183819481892B31F0E7 -:103860008081918189238F3F09F08CC60F900F9042 -:103870000F900F900F90DF91CF911F910F91FF90BC -:10388000EF90DF90CF90BF90AF909F908F907F9000 -:103890006F905F9008950E94C514182F682F89813A -:1038A0009A810E94CB0B69817A81812F0E94B81482 -:1038B0008C01F7018281882361F0F801E65EFC4506 -:1038C000ED30F10530F4E550F94C0C9449350E9487 -:1038D0002718D0903D04D0FE1CC08D2D8695837096 -:1038E000F7019281992309F460C1823090F4B70105 -:1038F000C8010E94B108882361F0D694D694D6946A -:1039000080913E0483708295880F807E8D290E946D -:10391000B313F7018281882309F429C6C8018251B3 -:103920009F45409708F0ECC58FEF93E00E947535F6 -:10393000025193EEA92E92E0B92E811197CF011179 -:1039400038C11C821B82662463948AE0582E85014C -:103950000F5F1F4FC5010E94753589831A82882326 -:1039600009F484CF9FEF980F933008F031C18A8318 -:10397000698232E0A30EB11CC8010E9475358B83A9 -:10398000882309F473CF8E010F5F1F4FF801208148 -:103990002223E9F2213009F055C1918182819130D1 -:1039A00009F018C10E5F1F4F6AE070E0893311F40F -:1039B00060E570E00E94D20E13C10E94181889CFF2 -:1039C00080913D0480FF0DC00E94181860913D0455 -:1039D00070913E0480913F04909140040E94DB1757 -:1039E00078CF0E942718F2CF0E94061872CF9091CC -:1039F0003D04892F86958F5F8370880F997F892B6F -:103A000080933D04982F9670963001F7897F8093BC -:103A10003D04DCCF90913E04892F8B7F92FF846020 -:103A200080933E04D3CF80913D04982F9695969530 -:103A3000969580913E0483708295880F807E892BB5 -:103A40008C3798F48F5F282F220F220F220F90912E -:103A50003D049770922B90933D04829586958370D8 -:103A600090913E049C7F892BDBCF81E0ECCF80914D -:103A70003D04982F96959695969580913E04837077 -:103A80008295880F807E892B11F08150DCCF8BE7E7 -:103A9000DACF30913E04932F969596959695209186 -:103AA0003F04822F83708295880F807E892B90E05F -:103AB0000196482F440F440F440F3770342B309336 -:103AC0003E0435E0969587953A95E1F783702C7F13 -:103AD000822B80933F047ACF30913E04932F9695AA -:103AE0009695969520913F04822F83708295880F3A -:103AF000807E892B8150990BDCCF80913F0482FF1F -:103B000012C08B7F80933F0460913D0470913E040E -:103B100080913F04909140040E94DB1760E081E0B7 -:103B20000E94A713D6CE846080933F0460913D0429 -:103B300070913E0480913F04909140040E94DB17F5 -:103B400060E08CE00E94A71364E182E00E94A7136A -:103B500065E081E00E94A71361E08CE0E1CF8091F5 -:103B60003F04982F9695969596958091400482955E -:103B7000880F807E892B883720F4865F0E94E117AA -:103B8000A8CE88E7FBCF80913F04982F9695969515 -:103B90009695809140048295880F807E892B843190 -:103BA00010F08A50EBCF84E1E9CF882309F4B1CE3D -:103BB0009ECEA114F4E0BF0609F458CEC5010E94C0 -:103BC0007535811101C001502FEFA21AB20AB7CE8C -:103BD0005801D9CE923039F40E5F1F4F0E94570C16 -:103BE0000F5F1F4FD3CE933029F40E5F1F4F0E94FB -:103BF0001E0CF6CF943019F00F5F1F4FF1CF0E5F00 -:103C00001F4F30E020E0B8016F5F7F4FF801418126 -:103C10008053990B8A30910550F02150310900F3FF -:103C20008FE99FE00197F1F700C00000F6CF529EA8 -:103C3000F001539EF00D11249C012E0F3F1F842F85 -:103C40008B01E1CFE22FF0E0E75FFD4F7490822F10 -:103C500086958695869590E0FC01E750FE4FE490AE -:103C60002770F12C022E02C0F594E7940A94E2F733 -:103C7000E1E0EE22FF24FC01E751FE4FC490D12C7D -:103C8000022E02C0D594C7940A94E2F7F1E0CF2245 -:103C9000DD24FC01E752FE4F8490912C02C09594E4 -:103CA00087942A95E2F721E082229924E114F10415 -:103CB00019F081EE0E94570CC114D10419F086EE60 -:103CC0000E94570C39E36AE070E0731202C060E5AD -:103CD00070E0872D0E94D20ECD2819F086EE0E944A -:103CE0001E0CEF2819F081EE0E941E0C892809F4A1 -:103CF00077CF6AE070E08CE25DCE81E00E9496179B -:103D000003C081E00E948A170F900F900F900F90D0 -:103D10000F90DF91CF911F910F91FF90EF90DF9067 -:103D2000CF90BF90AF909F908F907F906F905F905B -:103D30000C947F1782E0E2CF043F110509F455C1CE -:103D400008F057C1053E110509F4DDC0F701928165 -:103D500091113CC280915F0482720A3CFCE51F070E -:103D600009F414C208F06AC1053C3CE5130709F4E4 -:103D7000F9C108F04EC1033C5CE5150709F4D3C155 -:103D800008F0EBC1023C1C4509F47DC1F70100813C -:103D90001181992309F434C2C8010E94C514D82E98 -:103DA000682FC8010E94CB0BB8018D2D0E94B8145A -:103DB0000E94180A182FB82EF70122814581342F4E -:103DC00032953F70892F82958F70C82ED12C8C3000 -:103DD00008F04EC2F601E85FF84C0C944935033800 -:103DE000FFE51F0709F481C018F501383FE5130707 -:103DF00009F44AC008F065C000385FE5150709F00E -:103E0000A5CF882309F459C080919C02811106C076 -:103E100081E080939C0282EE0E94570C0E940A1C53 -:103E200090939B0280939A028BE20E94570C8ECF54 -:103E300005389FE5190709F4BEC008F476C00638B6 -:103E4000FFE51F0709F082CF882309F4CEC06091F7 -:103E5000590170915A0190E080E00E94C23520E043 -:103E600030E040E05CE30E94233620E030E040E8B0 -:103E70005FE30E94BD358111B5C080EE90E0909364 -:103E80005A0180935901A1C08823A1F080919C021E -:103E9000811106C081E080939C0282EE0E94570C43 -:103EA0000E940A1C90939B0280939A0281EE0E94CA -:103EB000570CBACF81EE0E941E0C8BE20E941E0CA2 -:103EC00045CF882309F442CF81EE0E94570C83EE40 -:103ED0000E94570C8FE40E94570C8FE40E941E0C26 -:103EE00083EE0E941E0C81EEE9CF882309F42ECFC9 -:103EF00081EE0E94570C83EE0E94570C80E50E94D1 -:103F0000570C80E5EBCF80933C0210933B0200936B -:103F10003A02882321F081E08093EE0217CF1092BD -:103F2000EE0214CF80933902F0CF882379F180918B -:103F30003902882349F080913A020E941E0C80EEDB -:103F40000E94570C8AE20CC080913C028823D1F376 -:103F500080913A020E941E0C80EE0E94570C8CE465 -:103F60000F900F900F900F900F90DF91CF911F91B6 -:103F70000F91FF90EF90DF90CF90BF90AF909F9008 -:103F80008F907F906F905F900C94570C8AE20E9404 -:103F90001E0C8CE40E941E0C80EE0E941E0C809170 -:103FA0003902811105C080913C02882309F45ECC5E -:103FB00080913A02D5CF8823C1F0809132038823C3 -:103FC00039F010923203109200010E94410DBECED2 -:103FD000809100018111F7CF81E0809332038093BB -:103FE0000001F3CF80E890E04ACF61E00E94C21365 -:103FF000ADCE62E0FBCF64E0F9CF882321F081E011 -:104000008093ED02A3CE1092ED02A0CE1092F002AA -:104010009DCE073C2CE5120709F4AEC008F4A7C0FA -:10402000083C4CE5140709F4ACC0093C1C4509F0F8 -:10403000ADCE45E056E161E176E179C0043DECE5C5 -:104040001E07A8F40E3CFCE51F0708F00FCC0C3C43 -:104050002CE5120709F49FC047E456E168E576E1D4 -:104060000D3C1C4508F463C061E081E046C0053D9D -:104070004CE5140709F4FACB08F492C00D351D4540 -:1040800009F4F4CB83CE8091770480FF31C08E7F1A -:10409000809377046091770470917804809179041B -:1040A00090917A040E94401580915B038160809317 -:1040B0005B039FEFE0E7F2E09150E040F040E1F772 -:1040C00000C000000F900F900F900F900F90DF91A5 -:1040D000CF911F910F91FF90EF90DF90CF90BF9005 -:1040E000AF909F908F907F906F905F900C94E70EB1 -:1040F00081608093770461E086950F900F900F9018 -:104100000F900F90DF91CF911F910F91FF90EF9043 -:10411000DF90CF90BF90AF909F908F907F906F90E7 -:104120005F900C94691641EA57E16AEA77E10F90D3 -:104130000F900F900F900F90DF91CF911F910F91E3 -:10414000FF90EF90DF90CF90BF90AF909F908F90B7 -:104150007F906F905F900C9409094AEA57E161EAF9 -:1041600077E1E5CF45E356E16EE376E1E0CF4EE35C -:1041700056E165E376E1DBCF4DE156E169E276E1B8 -:10418000D6CF49E256E16DE176E1D1CF41E156E18A -:1041900065E076E1CCCF48E556E167E476E1C7CF4C -:1041A0000F900F900F900F900F90DF91CF911F9174 -:1041B0000F91FF90EF90DF90CF90BF90AF909F90C6 -:1041C0008F907F906F905F900C94B4170E3D1C45BC -:1041D00009F0DCCD0F900F900F900F900F90DF91B2 -:1041E000CF911F910F91FF90EF90DF90CF90BF90F4 -:1041F000AF909F908F907F906F905F900C94361847 -:10420000C8010E94A30BD82ECFCD092F0F70907F2D -:1042100011F00295007F812F2223C9F0002369F05D -:1042200090E2910F983010F011110BC080915F0453 -:10423000082B00935F040E94820B812F0E94570C71 -:1042400017C080919102082B00939102F4CF0E9435 -:104250001E0C002369F00095105E183010F0B110AC -:1042600027C080915F04082300935F040E94820BA3 -:1042700098E0C91AD108E4E0CE16D10408F0F6CAD5 -:104280000E94C20E0F900F900F900F900F90DF9131 -:10429000CF911F910F91FF90EF90DF90CF90BF9043 -:1042A000AF909F908F907F906F905F900C94B81616 -:1042B00080919102082300939102D8CF892F8F70AB -:1042C000907F903211F08295807FF1E0BF120CC098 -:1042D000222329F0333060F60E94140CC9CF32300B -:1042E00038F60E94090CC4CF222341F03323A1F3F6 -:1042F00040FFA3CF4F70F7014583EECF332389F3FF -:10430000193309F0F5C0FFEF27EE33E0F1502040FC -:104310003040E1F700C00000812F0E941E0CA8CFA2 -:10432000892F86958695837061F0813009F0A0CF42 -:10433000812F9370211102C090E080E00E946E08EE -:1043400097CF812F9370211102C090E080E00E94EE -:1043500084088ECF892F8370A1F5211189CF812FF9 -:10436000829586958770880F880F412F4F70082E91 -:1043700001C0440F0A94EAF7212F207114FF07C0EF -:104380002FE030E001C0220F8A95EAF7209596953C -:1043900096959370923081F0822F842B933030F475 -:1043A00080919202913029F0242B82230E94050CE7 -:1043B0005FCF842B822BFACF242B8091920282270D -:1043C000F5CF8695222311F0892F8170882309F477 -:1043D0004FCF812F829586958770880F880F412F48 -:1043E0004F70082E01C0440F0A94EAF7212F207164 -:1043F00014FF07C02FE030E001C0220F8A95EAF7D2 -:104400002095969596959370923081F0822F842B0B -:10441000933030F480917604913029F0242B82235C -:104420000E94791725CF842B822BFACF242B8091E1 -:1044300076048227F5CF092F0F70222329F0802FD1 -:104440000E949617812F48CF812F0E94090C802F40 -:104450000E948A170DCF812FE1EF1E1789F1E11716 -:1044600050F0F0EF1F17B9F02223B1F13111E5CE72 -:10447000892F8F7129C042EF141749F153EF15139B -:10448000F3CF80E0222361F29F7181E001C0880FA9 -:104490009A95EAF7C5CF222379F0323008F0E8CEBA -:1044A000292F2F7181E090E001C0880F2A95EAF74B -:1044B000909176048927B4CF333008F0D9CEF0CF6D -:1044C000892F8F71222321F20E949617D1CE892F36 -:1044D0008F712223C9F3BCCF332379F0893341F4A0 -:1044E0008FEF97EEE3E081509040E040E1F712CF8C -:1044F0008FE39CE90197F1F70DCF892F8F71A8CF3A -:104500000031FFE51F0709F4F8CB01312FE5120751 -:1045100009F410CC0E9462086093F5027093F602D1 -:104520008093F7029093F802F7018281063F11050C -:1045300009F461CD08F053CC043E110509F45DCDBA -:1045400008F0FACB003E110509F457CD013E1105E4 -:1045500009F4E8CC0C32110509F0F8CB882309F4F2 -:1045600055CD81E08093F00210926701EFCB0031CE -:104570003FE5130709F4C5CB01314FE51407A1F658 -:1045800082E0C0CB85E0DE01119601900D928A9504 -:10459000E1F7F701228189819A8121117CC90E946A -:1045A000A30B182F80C91F93CF93DF9380915D02D7 -:1045B000807FA9F480915A02882389F080918F022C -:1045C000D0915E026091580270915902A0915B02F5 -:1045D000B0915C02C62FC72316E0D81304C0DF9148 -:1045E000CF911F91089590E0109711F0CF3F19F4EB -:1045F00001968770F2CF189F9001199F300D1124FA -:10460000F901E15AFD4F41814713F2CF4081461332 -:10461000EFCF42814111ECCF438154814A1B5B0BA8 -:10462000403A510528F780915D028F708061809338 -:104630005D02F901EC59FD4F80818F7080618083AC -:1046400088E592E00E94161CDF91CF911F910C9497 -:10465000990BAF92BF92CF92DF92EF92FF920F939E -:104660001F93CF93DF93CDB7DEB761970FB6F89462 -:10467000DEBF0FBECDBF8C0185E0F801DE011D96C7 -:1046800001900D928A95E1F7F801E28088E5A82E65 -:1046900082E0B82E60915B0270915C026115710539 -:1046A00009F432C19091580240915902892F842314 -:1046B0008F3F09F429C120813181C380D480F090DB -:1046C0005A02F601E61BF70BFF2009F4E8C08091BF -:1046D0005D02582F507FE03AF10508F0ABC0511150 -:1046E00077C0FE2C431321C092131FC0E1101DC0E0 -:1046F0008F70806180935D02C5010E94161C8091BD -:104700005D02F80185838F2D61960FB6F894DEBFA8 -:104710000FBECDBFDF91CF911F910F91FF90EF9012 -:10472000DF90CF90BF90AF900895CD2829F0822FD1 -:1047300083238F3F09F003C180E0F82FF170DF2E53 -:1047400080FF3CC080918F0240915E0256E084134E -:1047500015C02D873E878D859E850E94F414292FD4 -:1047600022952F702230F0F0243018F59F70F1F070 -:10477000F8019581907FD1F4D12C1EC090E0589F14 -:10478000F001599FF00D1124E15AFD4F618136135C -:1047900006C06081261303C06281E6120FC0019635 -:1047A0008770D5CF9F7011F0882331F3805E8830F9 -:1047B00018F3C8010E94161CFD2CA5CFEE2009F4A9 -:1047C000A2CF80915D02816080935D02F12C9BCF2E -:1047D000431306C0921304C0F801EE2009F479C017 -:1047E000C8010E940015882309F1EE20F9F080919C -:1047F0005D02803270F02091580230915902388762 -:104800002F831986DB86CA868C87CE0107960E9485 -:10481000161C86E0F801A8E5B2E001900D928A9599 -:10482000E1F70E94D322FF24F3946DCFC8010E94C8 -:10483000161CF9CF51110AC088E592E00E94161C9F -:1048400086E0F50111928A95E9F7C0CF43130FC0B6 -:1048500092130DC0E1100BC0F8018583C8010E94BE -:10486000161C86E0F50111928A95E9F74CCFC80134 -:104870000E9400158823D1F2EE20C1F280915D02E2 -:10488000803238F220915802309159023A832983BC -:104890001B82DD82CC828E83CE010196B8CFE03AB6 -:1048A000F105F8F6FE2CEE2009F243131FC0921317 -:1048B0001DC080915D0280FD10C0982F907F69F02F -:1048C000F8018583903F31F0982F907F905F8F7033 -:1048D000892B8583C8010E94161C86E0F801A8E593 -:1048E000B2E001900D928A95E1F70DCFC8010E94C8 -:1048F000001581118ECF80915D02816080935D02F1 -:10490000C8010E94161CFFCEEE2009F48FCFC8010B -:104910000E940015F82E882309F488CF86E0F8015C -:10492000A8E5B2E001900D928A95E1F780915802D6 -:10493000909159020E94F4140E94D322E4CE81E0A7 -:104940008E25FBCE1F93CF93DF93CDB7DEB767974E -:104950000FB6F894DEBF0FBECDBF4B8B5C8B6D8B5B -:104960007E8B8F8B6111109291021A8A198A85E0D1 -:10497000FE017396DE011D9601900D928A95E1F776 -:1049800086E0FE013D96DE01179601900D928A9514 -:10499000E1F7CE0107960E942923882389F016E0CB -:1049A00080918F0290915E0289134BC067960FB67B -:1049B000F894DEBF0FBECDBFDF91CF911F91089558 -:1049C00086E0FE013796DE01119601900D928A95E0 -:1049D000E1F78A859B85892B11F38F81988589233F -:1049E0008F3FE9F220915E0230E0C90101968770A5 -:1049F000992740918F024817190681F410925F049D -:104A00000E94FA0F10925E0210928F0286E0E8E593 -:104A1000F2E0DF011D928A95E9F7C1CF96E0929FFF -:104A2000D001939FB00D1124A15ABD4FFE013196C4 -:104A300001900D929A95E1F780935E020E94990B86 -:104A4000AECF819FC0011124815A9D4F0E9429231E -:104A5000882309F4ABCF80918F0290E00196877094 -:104A6000992780938F029CCF9F92AF92BF92CF9253 -:104A7000DF92EF92FF920F931F93CF93DF93CDB707 -:104A8000DEB764970FB6F894DEBF0FBECDBF8E01C0 -:104A90000F5F1F4F8AE0D8011D928A95E9F79EE4C7 -:104AA000C92E91E0D92EF12CE12CAA24A394B12C8B -:104AB000F60181916F018F3F09F44AC0F894E82F05 -:104AC000E295EF70F0E021A18F70A50102C0440FC4 -:104AD000551F8A95E2F7CA01922F982B91A392A1B4 -:104AE0008095892382A30E94BC0900C0E7E4F1E01D -:104AF00030E020E0912C41914F3F09F47DC0A42F7C -:104B0000A295AF70B0E090968C9190E04F7002C08B -:104B1000959587954A95E2F780FD6EC08A2D022E05 -:104B200001C0880F0A94EAF7982A2F5F3F4F273079 -:104B3000310509F7F601319780818F3F11F00E940E -:104B4000BE0950EA5A95F1F7F801EE0DFF1D90826B -:104B50008FEFE81AF80A95E0E916F10409F0A8CFFA -:104B60004AE050E0B80188ED92E00E945F357C0198 -:104B7000892B41F08AE0F801A8EDB2E001900D9296 -:104B80008A95E1F71091E302E114F104B9F181E0B3 -:104B9000809395020E940A1C909394028093930242 -:104BA00080919302909194020E94FB1B069770F0F3 -:104BB000A8EDB2E0E12FF0E0E15BFC4F8D91819335 -:104BC00022E0AD3DB207D1F71092950281E090E06E -:104BD000EF28C1F064960FB6F894DEBF0FBECDBFCC -:104BE000DF91CF911F910F91FF90EF90DF90CF90C9 -:104BF000BF90AF909F90089580E096CF80919502EE -:104C00008111CECF0E949F0EB82EE091E30288233F -:104C100009F4C7C08E01005F1F4F85E0D8011D92C7 -:104C20008A95E9F7F0E09F01215B3C4F7901809183 -:104C3000D102AE014B5E5F4F6A018A3008F086C038 -:104C400044E75AE1B801C7010E945B0E882309F4CA -:104C500094C045EA57E2B801C7010E945B0E882361 -:104C600009F48BC04BE958E1B801C7010E945B0E03 -:104C7000882309F482C047E859E1B801C7010E94BE -:104C80005B0E882309F479C045E659E1B801C701F4 -:104C90000E945B0E882309F470C01092D102E0914B -:104CA000E202F0E0AF01415B5C4FD80110E0FA0195 -:104CB0009191AF018D91981731F09F0121503109E9 -:104CC000F90180831B2DCA16DB0689F780919C02AF -:104CD000882371F080919A0290919B020E94FB1BA5 -:104CE000893E934028F082EE0E941E0C10929C0296 -:104CF00088E9C82E82E0D82EF12CE12CD6018D91C6 -:104D00006D018823D1F08695F70109F447C0EC5076 -:104D1000FE4F808191819C878B871D860E940A1C93 -:104D20008160782F9F878E87F601319710824B859F -:104D30005C856D858F850E94A224B2E0EB0EF11C8C -:104D4000E4E0EE16F104D1F6812F44CF8091960273 -:104D5000909197020E94FB1B843F914008F070CF16 -:104D6000A091E202B0E0A15BBC4FF8011D9211924C -:104D7000CE16DF06D9F71B2DA9CF8091D1028F3F28 -:104D800031F08F5F8093D1028A3008F488CF0E947F -:104D90000A1C9093970280939602E2CFE051FE4F57 -:104DA000B8CFF0E0E15BFC4FF89485E0A0EBB2E017 -:104DB00001900D928A95E1F765E070E080EB92E05A -:104DC0000E94F3088093AF020E94BC09F894E0911E -:104DD000EB02F0E0E851FD4F80818B878093B602B3 -:104DE00061E070E0CE010B960E94F3088093B5025B -:104DF0000E94BC09F894C090B702D090B802E0902D -:104E0000B902F090BA0280919D0290919E02A09109 -:104E10009F02B091A002C816D906EA06FB06D1F09F -:104E2000C0929D02D0929E02E0929F02F092A00258 -:104E30000E949F0E81110EC00E946208C61AD70AF6 -:104E4000E80AF90AC092D202D092D302E092D402C8 -:104E5000F092D5020E94BC09F8948091C202882386 -:104E600021F184FF04C09091C30290935C0380FF02 -:104E70000DC08091BB0280FF25C0909177049160A6 -:104E80009093770460E086950E9469168091C20233 -:104E900081FF09C020E04091BE026091BD02809177 -:104EA000BC020E9452151092C2020E94BC09F894E2 -:104EB0008091C402882349F00E94B30D0E94BC096E -:104EC00080E088CE0E94E50FE1CF0E94980DF6CFDA -:104ED000EF92FF920F931F93CF93DF9300D000D0F8 -:104EE0000F92CDB7DEB7162FE82EF12CC701880F31 -:104EF000991F662339F18C509E4FFC01808191816E -:104F00009A83898301E00B830E940A1C8160782FB9 -:104F10009D838C83F701E856FD4F0127110F102B5D -:104F2000108349815A816B818D810F900F900F9072 -:104F30000F900F90DF91CF911F910F91FF90EF9005 -:104F40000C94A22480519E4FD8CFCF92DF92EF9243 -:104F5000FF920F931F93CF93DF930F92CDB7DEB7DE -:104F6000EE24E394F12C06EB12E09E012F5F3F4FFD -:104F70004BEA52E063E082E00E94C519082F8823C3 -:104F800021F1C090E5028C2D90E09C0128513D4F0D -:104F900079011981F9018081181BD12E80E00AC0A6 -:104FA000DA94F70180818F5F808360E08C2D0E940E -:104FB0006827802F1D14A4F3912F17FD90E0191B73 -:104FC00011110EC081110E94800B802F0F90DF9174 -:104FD000CF911F910F91FF90EF90DF90CF900895A8 -:104FE0001F5FF70180818150808361E08C2D0E94DA -:104FF0006827802FE5CF1F921FB61F9211248F9331 -:105000009F93AF93BF9380915604811113C08091F9 -:10501000570490915804A0915904B0915A044196B4 -:10502000A11DB11D8093570490935804A093590477 -:10503000B0935A04BF91AF919F918F911F901FBE63 -:105040001F901895CDB7DEB7E9970FB6F894DEBF7D -:105050000FBECDBF84B7877F84BF0FB6F894A895E5 -:1050600080916000886180936000109260000FBEA4 -:1050700080E890E00FB6F89480936100909361000F -:105080000FBE85B7806885BF85B7806885BF8AEB0E -:1050900099E090932F0280932E020E94D5060E94E1 -:1050A000A0078091E20084608093E2007894809170 -:1050B0006C048823A1F01091E9001F709091EC001E -:1050C000892F817090FD80E8182B1092E900809163 -:1050D000E80083FD0E9403101F701093E90082E036 -:1050E00084BD93E095BD9AEF97BD80936E001092BA -:1050F000D2021092D3021092D4021092D5020E94D2 -:105100002715811102C00E9483140E949F0E809374 -:10511000580180915801882309F4C6C010926F018C -:1051200085E2809370010E949F0E81110E9454338A -:105130008091580181112FC0FE01359686E0DF0174 -:105140001D928A95E9F786E6898387E98A8386EC4A -:105150008B8384E38C8385E38D833497AEE4B1E065 -:10516000CE010B9621912D938E179F07D9F787E0DB -:10517000E5E7F1E0DE01919601900D928A95E1F765 -:10518000FE01B196A7E4B1E0CE01889621912D935E -:105190008E179F07D9F78091580195E0811190E013 -:1051A0009093E30285E0891B8093E2020EE411E014 -:1051B000A3E5EA2EA1E0FA2EF80181918F018F3F3D -:1051C00011F00E94BE09E016F106B1F707E411E004 -:1051D000FEE4EF2EF1E0FF2ED8018D918D018F3F7F -:1051E00011F00E94BE09E016F106B1F7E8EDF2E019 -:1051F00082EE92E0AFE4B3E011921D928E179F070A -:10520000D9F70E94B11A811102C00E94361882E0BB -:1052100090E00E9475358093440384E090E00E9402 -:105220007535182F82E290E00E947535982F812FF6 -:105230009093D7028093D6020E943425EFE7FBEBD0 -:105240003197F1F700C000000E94342580914F0390 -:1052500080FF2EC06FEF7FEF90E080E00E94A735C7 -:1052600081E08093E00080E28093D8001092C90032 -:105270008FE19EE40197F1F700C0000087E090EB1A -:10528000DC018093800690938106A0938206B09300 -:10529000830688E19CE00FB6F894A895809360009F -:1052A0000FBE90936000FFCF85E280936F0139CFEE -:1052B00083E090E00E9475350E94050C8091760491 -:1052C0000E94D0160E94B11A811102C00E943618A5 -:1052D00088E190E00E947D3560933D0470933E0428 -:1052E00080933F0490934004672B682B692B11F443 -:1052F0000E9406180E94553167E081E00E94A713C2 -:1053000060E586E10E94A7136BE687E10E94A71380 -:1053100060EB8AE10E94A71369E98BE10E94A71361 -:1053200065EF8CE10E94A71360EA8DE10E94A7134C -:1053300060E38EE10E94A71366E083E00E94A7135A -:1053400061E08CE00E94A71360E081E00E94A71357 -:1053500060E08CE00E94A7136FE084E00E94A71336 -:1053600061E08CE00E94A7130E949F0E811102C091 -:105370000E94573383E080931A0380E280934304B2 -:105380000E9455316DE070E08CE992E00E94680D5A -:10539000892BE9F580911A0363E070E081FD9EC2DC -:1053A00089E992E00E94680D892B89F56DE070E033 -:1053B00089E892E00E94680D892B49F50E946208F5 -:1053C0006058774C8E4F9F4F60934A0470934B0404 -:1053D00080934C0490934D04EEE7F4E080E092E07B -:1053E000DF019C011D9221503040E1F7F0937F06D0 -:1053F000E0937E068FEF9FEF90937D0480937C0473 -:1054000081E080934F0480934E0410921B0380919F -:10541000E402811136C00E94B11A811104C00E94B9 -:1054200036180E94C31788E090E00E947D35609393 -:105430007704709378048093790490937A04809130 -:105440005B03836080935B036E7F71F40E94C317DC -:1054500088E090E00E947D35609377047093780433 -:105460008093790490937A040E940E0980917704C6 -:1054700080FF04C060E086950E94691681E08093F9 -:10548000E40280915801811106C084EF8093660187 -:1054900085EF8093650120916601A22FA295AF70E0 -:1054A000B0E091963C9191972F7081E090E0BC0123 -:1054B000022E01C0660F0A94EAF7462F4095432357 -:1054C00091964C93919792963C919297362B929607 -:1054D0003C93929740916501E42FE295EF70F0E0E4 -:1054E00031A14F70042E01C0880F0A94EAF7982F5B -:1054F0009095932391A392A1892B82A390968C914E -:1055000090E002C0959587952A95E2F7817020A1D9 -:1055100030E002C0359527954A95E2F792E020FFEA -:1055200090E0892B8093EC028091580111E0812753 -:105530008093EB02312F381B3093E5020E945531E6 -:1055400040E060E080E00E94210D89EA92E09093C3 -:105550005E0380935D0360E08AE00E94691681E04B -:105560000E94791780EE90E090935A018093590140 -:10557000109332030E94410D8BE591E09093530408 -:10558000809352043E018DE3680E711C80916C047F -:10559000FF24F39400E112E1853009F4F2C10E9486 -:1055A0003425E82E81110E946208E5E4F3E0AFE4BF -:1055B000B3E010E000E0B02EDD9081918D1509F48C -:1055C00004C28D25C12CFF24F394982F9F2109F448 -:1055D000F7C10E949F0E882399F0CEA6BFA6DF20B8 -:1055E00081E009F480E088AB0E940A1C8160782F7A -:1055F0009AAB89AB4EA55FA568A98AA90E94A2248F -:10560000F801EB5BFC4F8081F826F0828091EC0280 -:10561000E82FEE0FEE0F90916601A92FA295AF70C3 -:10562000B0E090962C9130E09F7002C035952795A0 -:105630009A95E2F72170332790916501A92FA295E1 -:10564000AF70B0E090964C9150E09F7002C05595BD -:1056500047959A95E2F7CA018170992740FF02C0E9 -:1056600082E090E0822B8E2B8093EC021091EB0273 -:105670008F70E82FF0E0E650FE4F80819091EA02B3 -:10568000890F8093EA02F12C84306CF0E12FF0E076 -:10569000E851FD4F80818F5F808360E0812F0E9401 -:1056A0006827FF24F3948091EA028D3F6CF4E12F88 -:1056B000F0E0E851FD4F80818150808361E0812FCF -:1056C0000E946827FF24F3948091EA02082E000CC0 -:1056D000990B64E070E00E9435358093EA02F11086 -:1056E0000E94800B80914F04882351F180911C030C -:1056F00090911D030E94FB1BC29708F07DC1209171 -:105700007C0430917D042115310509F0A0C28091FF -:105710004E048823A9F00E94620800914A04109167 -:105720004B0420914C0430914D04601B710B820B93 -:10573000930B6F3F7F4F8F4F9F4710F40E94980D40 -:10574000E11001C0F1100E94B30D809142038A3034 -:1057500008F0BAC380914003909141030E94FB1B63 -:10576000069708F4B1C304E610E025E030E04BE30F -:1057700053E064E084E10E94A032892B09F075C3F4 -:105780001092420320913203222359F080913B036F -:1057900090913C0398278927982790933C03809306 -:1057A0003B0386E0E4E2F3E0DE01919601900D9286 -:1057B0008A95E1F786E0FE01B196DE01119601902F -:1057C0000D928A95E1F786E0FE013196A5E3B3E0FC -:1057D00001900D928A95E1F790913F0380913603F5 -:1057E00097FD3AC38E7F8093360380913303909167 -:1057F0003403009709F02AC360913B0380913C0376 -:1058000000913D0310913E03222309F4F2C241E0CE -:105810000E94FB0C2091300330913103820F931FC3 -:10582000909331038093300341E0602F812F0E94D9 -:10583000FB0C20912E0330912F03820F931F909326 -:105840002F0380932E0360E373E08AE393E00E94CA -:10585000DC0C6EE273E089E393E00E94DC0C1092B2 -:1058600037031092380386E0E5E3F3E0DE0111969A -:1058700001900D928A95E1F786E0FE013196A4E24F -:10588000B3E001900D928A95E1F7309126032091C3 -:105890002703909128038091290370912003609140 -:1058A00021034091220350912303F0912503E091BD -:1058B0001F03FE13E0C2332311F07313DCC2222353 -:1058C00011F02613D8C2882311F08513D4C299236E -:1058D00019F081E04913D0C280E0CEC286E992E09F -:1058E00061CD80916C04843009F43BC00E94980D16 -:1058F00040E060E080E00E94210D80E00E94B81648 -:105900008091E702811109C0F092E702809177044B -:1059100081708093E6020E94E50F10925604A8E180 -:10592000B0E0E0E40FB6F894A895A09360000FBE35 -:10593000E093600083B7817F846083BF83B7816019 -:1059400083BF7894889583B78E7F83BF0FB6F89412 -:10595000A89580916000886180936000109260003B -:105960000FBE80916B04882361F00E943425EFE420 -:10597000F3E08191811178C429E533E02E173F07C8 -:10598000C1F780916C04853009F4ABCF10925F04AD -:105990000E94FA0F0E94C20E0E94B8161092E702EF -:1059A0008091E602882349F080917704816080939A -:1059B000770460E086950E9469160E94410DEFCD44 -:1059C000C394FF0C37E0C31200CE0F5F1F4F0A30A5 -:1059D000110509F0F0CD8FEF8BAB8CAB1DAA0E94A7 -:1059E0000A1C8160782F9FAB8EAB4BA95CA96DA977 -:1059F0008FA90E94A2240ACE0E940A1C90931D0324 -:105A000080931C0360E080E00E949A080E94C20E0E -:105A10008093F9020E949F0E882331F14091F50294 -:105A20005091F6026091F7027091F8022FB7F89446 -:105A30008091570490915804A0915904B0915A0450 -:105A40002FBF841B950BA60BB70B81339547A10580 -:105A5000B10540F00E94980D80914F04882309F40D -:105A600056CE4DCE0E94B30D0E949F0E882309F49E -:105A7000D5C061E080E00E949A0860E08CE791E088 -:105A80000E948B1362E080E00E949A088091760465 -:105A90000E94CB0C823009F49BC008F090C0882390 -:105AA00009F496C0813009F499C065E080E00E9455 -:105AB0009A0860E08AE991E00E948B1366E080E03A -:105AC0000E949A086091F902669561708FE991E0F1 -:105AD0000E948B1367E080E00E949A086091F902AF -:105AE0006095617084EA91E00E948B1368E080E029 -:105AF0000E949A086091F90262FB662760F988EAC1 -:105B000091E00E948B137DA66CA64091F10250910A -:105B1000F2026091F3027091F4022FB7F894809131 -:105B2000570490915804A0915904B0915A042FBF82 -:105B3000841B950BA60BB70B8D329140A105B105C7 -:105B400008F48ACF0E9462086093F1027093F20217 -:105B50008093F3029093F4028091F002811104C0CB -:105B600080916701811142C06DE080E00E949A0837 -:105B700060E08DEA91E00E948B136AE080E00E9471 -:105B80009A0881E0809367018091EF0290E001968E -:105B9000817099278093EF0221E030E0281B390BB8 -:105BA00040E6429FC001439F900D11242091EE02D8 -:105BB000222351F1855C9B4F0E9492064DCF83308A -:105BC00089F0843009F071CF60E08EE891E003C085 -:105BD00060E082E891E00E948B1367CF60E088E884 -:105BE00091E0F9CF60E084E991E0F5CF6AE080E0F0 -:105BF0000E949A0860E08DEA91E00E948B136BE0AE -:105C000080E00E949A08C0CF2091ED02222319F073 -:105C100085589C4FD1CF85549D4FCECF64E080E016 -:105C20000E949A0860E083EB91E00E948B1365E08C -:105C300080E00E949A0860E089EB91E00E948B135B -:105C400069E080E00E949A088BEF94E0B5CF8091E4 -:105C50001B0361E070E081115ACD082F10E02B0189 -:105C6000082E02C0440C551C0A94E2F7A9014421F5 -:105C70005521452B09F448C090911A0390FD46C068 -:105C80008295880F807680936A01980136952795D2 -:105C90003695279520936D01815E80936B0110925C -:105CA0006E0124E630E047E050E068E671E088E706 -:105CB0000E944C32892B09F02ACDA80175E0440FCF -:105CC000551F7A95E1F780911A0380FD2DC0425847 -:105CD0005B4F04E610E020E230E060E488E70E94D9 -:105CE0007332892B09F013CD0E94B30DC201809548 -:105CF000909540907C0450907D0448225922509207 -:105D00007D0440927C0403CD8F5FA7CF880F880F5E -:105D1000880F80936A0110926D01895F80936B01F7 -:105D200083E080936E01BDCFEAEFF2E080E2DF0115 -:105D30001D928A95E9F7EEE0F2E0F9AFE8AF0AE0EC -:105D400012E099249394A8ADB9AD2D91B9AFA8AF45 -:105D5000F80121908F01240E352E311CC10182588B -:105D60009B4F1C01E22FF0E0E650FD4F30E020E0B9 -:105D700067E0A62EA21AB92C022E01C0BB0C0A9411 -:105D8000EAF7610190E0D6018D916D018B216A2DBA -:105D9000691B6770862E062E000C770BB82F01C08A -:105DA000BB0F8A94EAF78B2E719561957109677024 -:105DB000772701C086956A95EAF7882A8081882A24 -:105DC00080829F5F9830F9F62F5F3F4F31962830E1 -:105DD000310571F6E2E1F2E028AD39ADE217F307E3 -:105DE00009F0B1CF04E610E020E230E04AEF52E0E3 -:105DF00074CF45E00E94FB0C20912C0330912D03C1 -:105E0000281B390B30932D0320932C0345E0602F82 -:105E1000812F0E94FB0C20912A0330912B03281B19 -:105E2000390B30932B0320932A036CE273E087E352 -:105E300093E00E94DC0C6AE273E088E393E00E9446 -:105E4000DC0C10923A03109239030DCD0197909318 -:105E500034038093330307CD81608093360384E05D -:105E60000E94B31384E190E0F2CF809142038F5FF0 -:105E700080934203F8CC81E080FF0FC0E091520490 -:105E8000F0915304309749F082E08093240304801A -:105E9000F581E02D84E293E009951092260310929B -:105EA0002703109228031092290386E0E4E2F3E02E -:105EB000AEE1B3E001900D928A95E1F70E940A1CD1 -:105EC00090934103809340030E94C20E909143033C -:105ED000891731F00E94C20E809343030E94B816C6 -:105EE00080916C04843009F051CB83E08093E90009 -:105EF0008091E80082FF4ACB8091E80090E085FF26 -:105F00000BC00E94F40630E2E32EF12C8E010F5FED -:105F10001F4F8823E1F091E08091E8008B77809318 -:105F2000E800992309F432CBE981E150E33108F02C -:105F300071C0F0E0EC5EF84C0C9449358091F100B2 -:105F4000D8018D938D01B1E0EB1AF10821F3809116 -:105F5000E80085FDF3CF8091E8008B778093E8001F -:105F60000E94F406882399F3D6CF1A8289E08B83A6 -:105F700011C08A81823009F48FC1833091F1813060 -:105F800009F048C00E9462080E944F356B837C83F1 -:105F90008D839E8380916C04843009F0F7CA109140 -:105FA000E9001F709091EC00892F817090FD80E8CE -:105FB000182B82E08093E9008091E80080FF0DC0FB -:105FC00050E040E060E270E0CE0101960E942507BB -:105FD0008091E8008E778093E8001F701093E900AD -:105FE000D5CADE011396EFE4F3E081918D9323E0AF -:105FF000E935F207D1F7CECF8A81823059F46B812F -:106000007C818D819E810E944F3586E290E00E94C6 -:106010008935C0CF8FEF8983BDCF4C816B818A8159 -:106020000E9492149827892798279E838D83B2CF48 -:106030000D811E811027012710278A81EB803EE009 -:10604000E39E700111249CE8899FE00CF11C11244F -:106050008C8190E0880F991FE80EF91E612FC7010F -:1060600087960E948935602FC7018896D0CF0E94FD -:10607000161490CF8A818138C1F060F4803809F01D -:1060800089CF20E04B8160917904809178040E944F -:10609000521580CF8238E9F0833809F07BCF20E0B9 -:1060A00040917A046C818B81F2CF60E08B810E94F9 -:1060B00069168B81811103C00E94E50F6BCF80911F -:1060C000770481608093770460E086950E9469166A -:1060D00061CF8B8180937B045DCF8A81813899F079 -:1060E00030F4803809F056CF80917A0440CF82385E -:1060F00091F0833809F04ECF809178048B838091A2 -:1061000079048C8347CF8091770480FF02C0869505 -:106110002ECF80E02CCF80917B0429CF6091770433 -:10612000709178048091790490917A040E944015CE -:1061300031CF80E18A832ECF81E08A838DE117CF32 -:10614000CA80DB80DC24CD24DC248E010F5F1F4F4E -:10615000EC80E00EF12EF11CC6018D519D4F0E1505 -:106160001F0509F417CFADE1CA16A1E0DA0650F415 -:106170000E947535F8018483BFEFCB1ADB0A0F5FED -:106180001F4FEACFD80114961C92F6CF0A811B81CB -:10619000102701271027FE0131966F01EC80E00ED9 -:1061A000F12EF11CC8018D519D4FE016F10609F446 -:1061B000F1CE0D31F1E01F0728F4D60114966C9151 -:1061C0000E948935BFEFCB1ADB0A0F5F1F4FEACF62 -:1061D0000E940614DFCE85E0ADCFCA80DB80DC24D0 -:1061E000CD24DC248E010F5F1F4FEC80E00EF12EDA -:1061F000F11CC6018796E016F10609F4CBCEECEB54 -:10620000CE16E2E0DE0658F40E947535D8011496E9 -:106210008C93FFEFCF1ADF0A0F5F1F4FEACFF80111 -:106220001482F7CF0A811B811027012710279E01B6 -:106230002F5F3F4F6901EC80E00EF12EF11CC80189 -:106240008796E016F10609F4A5CE0C3B32E0130761 -:1062500028F4D60114966C910E948935BFEFCB1AB1 -:10626000DB0A0F5F1F4FEBCF09BD19BD09B400FE5C -:10627000FDCF8091D8008F7D8093D8008091E00081 -:1062800082608093E0008091E00081FDFCCF10925D -:106290005F040E94FA0F75CB86E290E00E9475358C -:1062A0001B821C821D828E8375CE1092B9008CE0F9 -:1062B0008093B80008959F92AF92BF92CF92DF92E1 -:1062C000EF92FF920F931F93CF93DF93B82EEB01C2 -:1062D0000E940A1C6C01EE24E394F12CC431D10518 -:1062E00060F025E0E22EF12CCF3FDC0731F0CE014B -:1062F00064E170E00E9415357B0184EAA82E94E8E1 -:10630000992E1092BC00A092BC000E940A1C8C0125 -:106310008091BC0087FF0DC08091B900887F8830D4 -:1063200039F18091B900887F803111F10FEF1FEFB3 -:1063300009C00E940A1C801B910B8E159F0540F31B -:106340000EEF1FEFCF3FDC07E1F2C6010E94FB1BFF -:106350008C179D07B0F2C801DF91CF911F910F916B -:10636000FF90EF90DF90CF90BF90AF909F900895F7 -:10637000B092BB009092BC000E940A1C8C018091DC -:10638000BC0087FF0AC08091B900887F883111F076 -:10639000803461F610E000E0DECF0E940A1C801B12 -:1063A000910B8E159F0558F3CBCF0F931F93CF936F -:1063B000DF93EB018093BB0084E88093BC000E94D4 -:1063C0000A1C8C018091BC0087FF11C02091B9008C -:1063D000287F81E090E0283211F490E080E09195F0 -:1063E00081959109DF91CF911F910F910895CF3F32 -:1063F000DC0741F30E940A1C801B910B8C179D0740 -:1064000008F38EEF9FEFEECF0F931F93CF93DF93A1 -:10641000EC0184EC8093BC000E940A1C8C018091EA -:10642000BC0087FF08C08091BB0090E0DF91CF9156 -:106430001F910F910895CF3FDC0789F30E940A1C3A -:10644000801B910B8C179D0750F38EEF9FEFEECFC3 -:106450000F931F93CF93DF93EC0184E88093BC00EC -:106460000E940A1C8C018091BC0087FF08C08091AB -:10647000BB0090E0DF91CF911F910F910895CF3F26 -:10648000DC0789F30E940A1C801B910B8C179D0767 -:1064900050F38EEF9FEFEECFCF92DF92EF92FF920D -:1064A0000F931F93CF93DF936B018A017901B90199 -:1064B0000E945B31E6010C0D1D1DC017D10761F470 -:1064C00024E92093BC00DF91CF911F910F91FF90A1 -:1064D000EF90DF90CF90089597FDF2CFB7018991AB -:1064E0000E94D531EACFCF92DF92EF92FF920F93C5 -:1064F0001F93CF93DF93C62F6A017901B8010E94E1 -:106500005B3197FD0CC0B8018C2F0E94D531E6019C -:10651000EC0CFD1CCE15DF0511F097FF0CC024E933 -:106520002093BC00DF91CF911F910F91FF90EF90CE -:10653000DF90CF900895B80189910E94D531EACFBC -:10654000CF92DF92EF92FF920F931F93CF93DF933F -:10655000F82EE62EEA016901B8010E945B3197FD31 -:1065600015C0B8018E2D0E94D53197FD0FC0B8011E -:106570008F2D81600E945B31F12CE12C21E0C21A49 -:10658000D108EC14FD0400F597FF11C024E9209315 -:10659000BC001816190614F490E080E0DF91CF914A -:1065A0001F910F91FF90EF90DF90CF900895C80159 -:1065B0000E94043297FD04C0FE01EE0DFF1D808392 -:1065C0002FEFE21AF20ADDCF97FDE0CFC8010E945B -:1065D000283297FDDBCFCC0DDD1D8883D7CF84E932 -:1065E0008093BC0008958EE14A9B02C08150E1F780 -:1065F0004A9BFECF08955A9880E28A95F1F75A9AFD -:106600000895FC013BE03A95F1F798E020E080E046 -:1066100031E040E14A95F1F7880F4A9B02C0816062 -:10662000232742E04A95F1F7000040E14A95F1F74F -:10663000915079F790E19A95F1F799B132E03A9556 -:10664000F1F7000040E14A95F1F792FB992790F9A4 -:1066500092272081920F90830895EF92FF920F93DB -:106660001F93CF93DF930F92CDB7DEB719828C01C2 -:106670007C01E60EF11C0E151F0561F481E0998185 -:10668000911180E00F90DF91CF911F910F91FF90BA -:10669000EF9008950E94F332CE0101960E940133DB -:1066A000F80181938F01E7CF529A5A9A0895529830 -:1066B0005A9AEA9AE9E6F0E080818F7C8083089517 -:1066C0006150770B91E001C0990F6A95EAF720E0DD -:1066D00031E0911108C0222391F05A9A80E28A9504 -:1066E000F1F75A980895492F482339F05A9A2327E9 -:1066F00040E24A95F1F79695ECCF5A98F9CF5A981F -:10670000EDCFFF920F931F93CF93DF93EC018C019A -:10671000060F111DC017D10731F4DF91CF911F91E2 -:106720000F91FF900895F9900E94FB3268E08F2D41 -:106730000E946033EFCF1F920F920FB60F92112479 -:10674000EF92FF920F931F932F933F934F935F937B -:106750006F937F938F939F93AF93BF93EF93FF9329 -:10676000CF93DF930F92CDB7DEB719820E94F33239 -:10677000CE0101960E940133A82FA695A695A69555 -:10678000282F229525709A2F9570290F922F93709C -:1067900026952695920F982797708981982B09F056 -:1067A00075C0A83008F072C080E18A95F1F75A9A56 -:1067B000529AB2E0BA95F1F700C05A98EA2EF12C3D -:1067C000EAE0AE9FD0011124AF5FBE4F1896ED9165 -:1067D000FC9119973097B1F06091F8017091F9012F -:1067E00016962D913C911797260F371F13968D9172 -:1067F0009C911497680F791F15964C9115971296D6 -:106800008C9109958AE08E9DF0018F9DF00D1124E9 -:10681000EF5FFE4F6581662351F02091F8013091C2 -:10682000F90186819781820F931F0E9481330E9414 -:10683000FB32F0E1FA95F1F75A9852985A9A80E1B2 -:106840008A95F1F78AE08E9D80018F9D100D1124AD -:106850000F5F1E4FD80112966C911297662371F14B -:106860002091F8013091F90113968D919C91820F3E -:10687000931F0E942D33D801ED91FC91882311F0D4 -:1068800088E001C082E080830E94F3320F90DF91A4 -:10689000CF91FF91EF91BF91AF919F918F917F9198 -:1068A0006F915F914F913F912F911F910F91FF90A9 -:1068B000EF900F900FBE0F901F901895ED91FC91E7 -:1068C000DFCF0F931F93CF93DF93EC0108970CF06A -:1068D000A9C08AE08C9FF0018D9FF00D1124EF5F1D -:1068E000FE4F80819181892B09F49CC0F894529AC3 -:1068F0005A9885E08A95F1F700008C2F869585706F -:106900009C2F9570890F982F937086958695890F87 -:106910008E0193E0000F111F9A95E1F7082B0E945A -:10692000FB3200C068E0802F0E946033A0E1AA958E -:10693000F1F752985A9A4A9B27C087E090E04A990B -:1069400025C08AE08C9F80018D9F100D11240F5F60 -:106950001E4FF80165816623A1F12091F801309165 -:10696000F90186819781820F931F0E942D33811137 -:1069700028C0529A5A9AD801ED91FC9182E0808306 -:10698000789482E090E016C000C0D5CF0197B9F4AA -:10699000529A5A9A8AE08C9FF0018D9FF00D112433 -:1069A000EF5FFE4F0190F081E02D81E080837894CD -:1069B00081E090E0DF91CF911F910F91089500C089 -:1069C000BECF0E94F332B0E2BA95F1F75A98529ACC -:1069D000E0E1EA95F1F78AE08C9FF0018D9FF00DE0 -:1069E0001124EF5FFE4F6281662351F02091F80180 -:1069F0003091F90183819481820F931F0E9481332A -:106A00000E94FB328AE08C9FF0018D9FF00D1124D3 -:106A1000EF5FFE4F0190F081E02D1082789490E0BE -:106A200080E0C8CF84E090E0C5CFAA1BBB1B51E13A -:106A300007C0AA1FBB1FA617B70710F0A61BB70BEE -:106A4000881F991F5A95A9F780959095BC01CD0193 -:106A50000895991B79E004C0991F961708F0961BBA -:106A6000881F7A95C9F78095089597FB072E16F42D -:106A7000009407D077FD09D00E94153507FC05D09A -:106A80003EF4909581959F4F0895709561957F4F45 -:106A90000895EE0FFF1F0590F491E02D09946927EA -:106AA000962769277827872778270895FB01DC0137 -:106AB00002C005900D9241505040D8F70895FB0157 -:106AC000DC0104C08D910190801921F441505040A7 -:106AD000C8F7881B990B0895FB01DC0102C00190E7 -:106AE0000D9241505040D8F70895F999FECF92BDCC -:106AF00081BDF89A992780B50895A6E1B0E044E0F9 -:106B000050E00C94AF35A8E1B0E042E050E00C94C6 -:106B1000AF35262FF999FECF92BD81BDF89A019726 -:106B200000B4021639F01FBA20BD0FB6F894FA9AD5 -:106B3000F99A0FBE08950396272F0E948A350E9466 -:106B40008935252F0E948A35242F0C948A35019689 -:106B5000272F0E948A350C948935DC01CB01FC017A -:106B6000F999FECF06C0F2BDE1BDF89A319600B4A6 -:106B70000D9241505040B8F708950E94FF3508F437 -:106B800081E00895E89409C097FB3EF490958095C4 -:106B9000709561957F4F8F4F9F4F9923A9F0F92FE3 -:106BA00096E9BB279395F695879577956795B79561 -:106BB000F111F8CFFAF4BB0F11F460FF1BC06F5F47 -:106BC0007F4F8F4F9F4F16C0882311F096E911C059 -:106BD000772321F09EE8872F762F05C0662371F07A -:106BE00096E8862F70E060E02AF09A95660F771F8E -:106BF000881FDAF7880F9695879597F90895990F6A -:106C00000008550FAA0BE0E8FEEF16161706E80776 -:106C1000F907C0F012161306E407F50798F0621B97 -:106C2000730B840B950B39F40A2661F0232B242B6C -:106C3000252B21F408950A2609F4A140A6958FEF8B -:106C4000811D811D08950E9436360C94A7360E943E -:106C5000993638F00E94A03620F0952311F00C945C -:106C600090360C94963611240C94DB360E94B8367C -:106C700070F3959FC1F3950F50E0551F629FF0018F -:106C8000729FBB27F00DB11D639FAA27F00DB11DA8 -:106C9000AA1F649F6627B00DA11D661F829F222731 -:106CA000B00DA11D621F739FB00DA11D621F839FB8 -:106CB000A00D611D221F749F3327A00D611D231F8E -:106CC000849F600D211D822F762F6A2F11249F57DC -:106CD00050409AF0F1F088234AF0EE0FFF1FBB1FDF -:106CE000661F771F881F91505040A9F79E3F51059E -:106CF00080F00C9490360C94DB365F3FE4F3983EC2 -:106D0000D4F3869577956795B795F795E7959F5F47 -:106D1000C1F7FE2B880F911D9695879597F90895D9 -:106D200097F99F6780E870E060E008959FEF80EC3E -:106D3000089500240A9416161706180609060895E1 -:106D400000240A9412161306140605060895092E47 -:106D50000394000C11F4882352F0BB0F40F4BF2BB6 -:106D600011F460FF04C06F5F7F4F8F4F9F4F0895F6 -:106D700057FD9058440F551F59F05F3F71F04795EC -:106D8000880F97FB991F61F09F3F79F087950895D1 -:106D9000121613061406551FF2CF4695F1DF08C0F0 -:106DA000161617061806991FF1CF8695710561050D -:106DB00008940895E894BB2766277727CB0197F9B5 -:106DC0000895F894FFCFEA101211651112116511A0 -:106DD00045117D1165117A128712121512151B15B6 -:106DE0001B151D151B151B151B151215121522152C -:106DF0001B151B152215671CDD1CE01CF41CF71C61 -:106E00000A1D131D371D7D1DAF1DC31D491D6C1DA2 -:106E1000052105215E215E2190213821382138216C -:106E2000AA211B222B222B22B52FB92FFC2F0D308C -:106E3000183037303A306D308E300A300A309930A1 -:0E6E40009C30A030C630E830EB30ED3012311F -:106E4E0001380200000001000000003802000000BE -:106E5E0005010000003802000000010600000038A5 -:106E6E0002000000010700000038020408000000C4 -:106E7E000000003802090C0000000000003802017A -:106E8E001500000000000036323331F7F6676697C2 -:106E9E00C6343500000000000180005F082E0E0D84 -:106EAE000E090E050EF4F5010021007F22000300ED -:106EBE004A004A4A01F6F731333236674C4159459A -:106ECE00520042617365200047616D65200052617A -:106EDE00697365004C6F776572004C4F434B0043EE -:106EEE00617073004E756D005363726C002020202C -:106EFE00202000534F4C415200544D5053540081AA -:106F0E008283E200E900EA00B500B600B700CD00CA -:106F1E008301CC008A0192019401210223022402F2 -:106F2E002502260227022A02B300B4006F00700069 -:106F3E000603060806010606AF0200FF0100010067 -:106F4E0000FFFF0000010001FF00000810181810DC -:106F5E0008000001020202020202020202024022A4 -:0E6F6E007B99017701FC00000C190C390C0016 +:100BB0000000000000000000000000AF00AE0902CD +:100BC0005B00030100A0FA09040000010301010019 +:100BD0000921110100012240000705810308000AD4 +:100BE0000904010002030000000921110100012293 +:100BF00022000705820320000107050303200001EE +:100C00000904020001030000000921110100012272 +:100C10007B000705840320000A1201000200000087 +:100C20000832FC87120200010200011E0353006F0C +:100C3000006C00610072006900750073005F005372 +:100C4000006F0066006C006500000010034B00653B +:100C5000007900680069007600650000000403095F +:100C6000040011241FBECFEFDAE0DEBFCDBF04B613 +:100C700003FE27C08091800690918106A091820694 +:100C8000B09183068730904BA740B04BD1F41092BF +:100C9000800610928106109282061092830614BE7E +:100CA00084B7877F84BF0FB6F894A89580916000C1 +:100CB000886180936000109260000FBEE0E0F8E36E +:100CC000099512E0A0E0B1E0EEE1FEE602C0059079 +:100CD0000D92AE32B107D9F726E0AEE2B2E001C024 +:100CE0001D92A038B207E1F70E940A280C94C93679 +:100CF0000C940000CF93DF9340917E0650917F06C5 +:100D00004E5754409A01205A3F4F21303240C0F094 +:100D100020E032E0241B350B60917C0470917D044F +:100D2000FC01CA01240F351FC1E0D0E082179307F0 +:100D300050F070937D0460937C04DF91CF9108950F +:100D400020E630E0E9CF4491DC01A258BB4F5C9132 +:100D5000451781F04C93AC01A5E056954795AA95AF +:100D6000E1F7DE0102C0AA0FBB1F4A95E2F7AD0111 +:100D70006A2B752B01963196D9CFE8EDF0E0808192 +:100D80008E7F80831092E2001092DA001092E100D0 +:100D9000A0EEB0E08C9181608C9380818F7780830E +:100DA00019BCA7EDB0E08C918E7F8C9380818F7EF3 +:100DB000808310925E0408952091E4003091E50054 +:100DC00095E6A9012091EC00822F817020FF06C0DA +:100DD0008091E80080FF06C080E008952091E8003F +:100DE00022FD1AC080916C04882389F0853089F037 +:100DF0008091EB0085FD0FC02091E4003091E5006B +:100E000042175307F9F29150E1F684E0089582E029 +:100E1000089583E0089581E00895EF92FF920F9383 +:100E20001F93CF937C018B010E94DC06C82F811198 +:100E300017C08091E80085FD0BC08091E8008E7797 +:100E40008093E8000E94DC06882399F3C82F08C02D +:100E5000F70181917F018093F1000150110949F759 +:100E60008C2FCF911F910F91FF90EF90089580915B +:100E70006E0487FF13C08091E80082FF06C0809156 +:100E8000E8008B778093E80004C080916C048111A6 +:100E9000F2CF089580916C048823D9F38091E80003 +:100EA00080FFF8CF8091E8008E77ECCF982F909359 +:100EB000E900242F762F50E0891731F07091EC0073 +:100EC0002091ED005091F00021FD07C09F5F973009 +:100ED00071F78093E90081E008953091EB003E7F47 +:100EE0003093EB003091ED003D7F3093ED00309179 +:100EF000EB0031603093EB007093EC002093ED0039 +:100F00005093F0002091EE0027FDE0CF80E008959F +:100F1000CF92DF92EF92FF920F931F93CF93DF93C5 +:100F2000C8EDD0E088818F7E8883E7EDF0E0808196 +:100F30008160808384E082BF81E080935E04888149 +:100F40008E7F888302EE10E0F80110821092DA00A2 +:100F500081EEC82ED12CF601108288818F7788838C +:100F600088818068888388818F7D888319BC1092EE +:100F70006C0410926D0410926B0410926A0490EE4F +:100F8000E92EF12CF70180818B7F8083888181603D +:100F9000888342E060E080E00E945607F60180818D +:100FA0008E7F8083F801808181608083808188606A +:100FB0008083F70180818E7F808388818061888330 +:100FC000DF91CF911F910F91FF90EF90DF90CF9025 +:100FD0000895FC0180917404909175048617970719 +:100FE000A0F06115710529F49091E8009E77909327 +:100FF000E80090E06115710551F4911108C08091ED +:10100000E80082FF34C080E00895BC01F2CF8091F7 +:101010006C048823C1F18530C1F18091E80083FD23 +:1010200030C08091E80082FDEACF8091E80080FF27 +:10103000E1CF8091F3002091F200382F6115710506 +:1010400019F02830310558F091E02830310509F0C9 +:1010500090E02091E8002E772093E800CBCF81919B +:101060008093F100615071092F5F3F4FE7CF80916E +:101070006C04882341F0853041F08091E80083FFC3 +:10108000BECF81E0089582E0089583E008958091C5 +:10109000610408952FB7F894609157047091580433 +:1010A0008091590490915A042FBF089520915404BF +:1010B000309155042817390771F0909355048093A7 +:1010C0005404E0915204F0915304309721F00084CD +:1010D000F185E02D09940895209150043091510438 +:1010E0002817390771F09093510480935004E091D0 +:1010F0005204F0915304309721F00680F781E02DDF +:10110000099408952091430436E0839FC00111247F +:10111000629F800D911D1124811522E0920714F029 +:1011200090E080E082589B4F90937F0680937E06EC +:101130000895883E9105C8F4803E910548F48B32AD +:10114000910540F48832910518F404974A9758F4B1 +:1011500080E008958C32910530F089339105C0F319 +:1011600084369105A9F381E011C0811522E592072B +:1011700070F48115E1E59E0758F790548115904170 +:1011800090F7FB019581907F81E011F3089581151F +:1011900028E5920740F38115E9E59E0728F090566F +:1011A0008115904270F3DFCFFB019581907F81E044 +:1011B000903271F6EBCFFC01680F791F8FEF91E34E +:1011C0002191822728E030E087FF09C0880F892716 +:1011D00021503109C9F7E617F70791F70895880FED +:1011E000F7CFFA01811101C0FB01099480917704C6 +:1011F000982F9E7F61F48170826080937704809144 +:101200007A04813A18F080EA80937A04089588314C +:10121000B0F381708661F1CFAF92BF92DF92EF920F +:10122000FF920F931F93CF93DF93082F162FE9019F +:10123000E42FF0E0E55DFA4F611110C0E4915E2FFC +:101240004E2F4983E8835A83DF91CF911F910F91ED +:10125000FF90EF90DF90BF90AF900895E62EF12CB5 +:101260004491D42EE42FF0E026E0829FC0011124A7 +:101270002FEF30E0B9010E94FD34802F90E0880FFD +:10128000991F55E5569FD001579FB00D11248A1B19 +:101290009B0B982F990F890F5901AE18BF08AE9E6E +:1012A000D001AF9EB00DBE9EB00D11245B2F189FD4 +:1012B00080011124012F11275901A01AB10AAE9EF5 +:1012C0008001AF9E100DBE9E100D11245901A81A69 +:1012D000B108AE9CC001AF9C900DBE9C900D112436 +:1012E000892F9927281B390B2E9FC0012F9F900D06 +:1012F0003E9F900D1124E92F62307105A1F050F44A +:101300006115710509F49DCF6130710581F0EB2FF6 +:10131000512F97CF6430710569F080F06630710508 +:1013200009F48FCFF4CFE42F4B2F592F8ACFE42F1E +:10133000412F87CFEB2F542F492F83CF4B2F5D2D7C +:10134000E12F7FCF80E0089578940895F894E82FF6 +:10135000E295EF70F0E031A1282F2F7081E090E04E +:1013600001C0880F2A95EAF7982F9095932391A3AF +:1013700092A1892B82A30C94A4099091D60292FF8A +:1013800006C0282F28712830F9F4877F846093FFE6 +:1013900006C0282F28712831F1F4877E84612091BE +:1013A000D70220FF06C0382F38713830D9F4877F34 +:1013B000816021FF06C0282F28712831D1F4877E53 +:1013C000816194FD877E0895282F24712430F9F6D9 +:1013D0008B7F8860DCCF282F2471243101F78B7E2E +:1013E0008861DDCF382F3171313019F78E7F8860F9 +:1013F000E0CF282F2171213121F78E7E8861E1CF46 +:10140000CF93DF93EC018238910581F1B0F5813300 +:10141000910509F491C020F58932910509F485C040 +:101420008A9709F490C0C11521E5D20708F0AAC037 +:10143000C11530E5D30708F0F2C0CF3BD10508F065 +:1014400089C0C83AD10508F0DFC0C53AD10508F017 +:10145000D3C0C430D105F8F4C130D105E1F040C0AB +:101460008533910509F45AC0C997E9F68091D602EF +:10147000837089F0C0EED0E00EC0833E910599F1F3 +:1014800070F4803E910501F1823E910561F68091F4 +:10149000D60282FD21C0CE01DF91CF910895863E14 +:1014A000910561F1873E910571F1843E910509F046 +:1014B000BACF8091D70281FFEECF8091D602C7EEDE +:1014C000D0E084FD0DC0E7CF8091D60280FDF7C04B +:1014D0009091D70290FFDFCFC3EED0E084FFDBCF47 +:1014E000D0E0C0E0D8CF8091D60282FDEBC09091D1 +:1014F000D70290FDBFCF84FFCECFF2CF8091D6022E +:1015000083FDDDCFC8CF8091D60283FDDEC09091F0 +:10151000D70291FFF0CFC4EED0E0BDCF8091D602CC +:1015200085FFB9CFC9E2D0E0B6CF8091D60285FF62 +:10153000B2CFC5E3D0E0AFCF8091D60286FFABCF6C +:10154000CAE2D0E0A8CF8091D60286FFA4CFC1E343 +:10155000D0E0A1CFC11540E2D40760F4C11581E00D +:10156000D80708F098CFCE01815E9109079708F45B +:1015700092CFB6CFC11590E4D90708F4B1CFDF7090 +:10158000D06A89CFC11524E5D20778F4C11533E5B7 +:10159000D30708F072C0C11542E5D40708F05CC05B +:1015A000DC2FCC27C16FD06A76CFC1158AE5D8076A +:1015B00078F4C11599E5D90708F073C0C11528E57D +:1015C000D20708F48DCFDC2FCC27C06FD06A63CF51 +:1015D000CE0190568115904208F082CF8D2F8F71E9 +:1015E0000E94BD0990E0982F882788279F719C0151 +:1015F0002C2BE901D0624FCFC55AD0E0C154DE4F49 +:10160000C881D0E0D06447CFC85AD0E0CC0FDD1FEE +:10161000CE53DE4F0990D881C02DD4643CCFCE018B +:1016200064E0969587956A95E1F783702C2F26954F +:101630002695237040E2249F90011124382B8C2F93 +:101640008370C1E0D0E002C0CC0FDD1F8A95E2F7C5 +:10165000C22BD32BDC681FCFCE018370992721E0EA +:1016600030E002C0220F331F8A95E2F7C695C69577 +:1016700080E2C89FE0011124EBCFCE01837099274F +:1016800021E030E002C0220F331F8A95E2F7C695B1 +:10169000C69590E2C99FE0011124C22BD32BDA68D2 +:1016A000FACE8C2F8F700E94BD0934E0D695C79575 +:1016B0003A95E1F7CF709C2FEC01D069ECCEC9E3ED +:1016C000D0E0E9CEC2EED0E0E6CEC6EED0E0E3CE8A +:1016D0000C944A0880915F0490919102892B90911B +:1016E0009002892B80933002E0915204F0915304D0 +:1016F000309731F00280F381E02D80E392E009948D +:10170000089580918F0290915E02981301C0089510 +:101710008F5F8770FACF27E0929F800D1124982F5A +:10172000977086958695869523E0829FF001112417 +:10173000E35CFD4F50E040E080E0219130E0092E75 +:1017400002C0369527950A94E2F721703327042EBC +:1017500001C0220F0A94EAF7822B4F5F5F4F43309C +:10176000510559F7089527E0929F800D1124982F75 +:10177000977041E001C0440F9A95EAF786958695E7 +:10178000869593E0899FF0011124E35CFD4F90E082 +:1017900080E070E05191DF0111979B01082E02C09B +:1017A000369527950A94E2F7217021952527242361 +:1017B00025272C9301968330910561F7089590E0D9 +:1017C00080E00E946C0890E080E00E945608109231 +:1017D0009102109290020C946A0B809392020C94E6 +:1017E000DF0B882341F0809590915F0489238093DB +:1017F0005F040C946A0B0895882339F090915F047C +:10180000982B90935F040C946A0B08958823B1F190 +:101810009CEF980F913A70F4E2E3F2E09191891312 +:1018200003C0DF0111971C9242E0E833F407B1F7DF +:101830000C946A0B90E2980F983088F4877021E03E +:1018400030E0A90102C0440F551F8A95E2F7CA0192 +:10185000809590915F04892380935F04E9CF9BE595 +:10186000980F933020F490E080E00C946C08885A34 +:10187000873120F490E080E00C94560808950F938F +:101880001F93CF93C82F882309F469C08CEF8C0F66 +:10189000813AB0F502E312E088E392E0F801219189 +:1018A000C21701F122E0E833F207C9F7EFEF80E059 +:1018B000D8019D918D01C91781F0EF3F19F4911165 +:1018C00001C0E82F8F5F863099F7EF3F31F00E2E81 +:1018D000000CFF0BE05DFD4FC283CF911F910F9174 +:1018E0000C946A0BE2E3F2E02191C21303C0DF0122 +:1018F00011971C928E179F07B9F70E946A0BD6CFDB +:1019000080E28C0F883068F4C77021E030E001C0BD +:10191000220FCA95EAF780915F04822B80935F04BF +:10192000DCCFEBE5EC0FE33050F4F0E0E154FE4F98 +:10193000808190E0CF911F910F910C946C08C85A50 +:10194000C73168F4EC2FF0E0EE0FFF1FEE53FE4FAF +:1019500080819181CF911F910F910C945608CF9166 +:101960001F910F910895982F92959F7011F0892FD4 +:1019700094E0282F2695269511F09E5F822F86955C +:1019800009F09F5F892F0895DC01FB01808191811F +:10199000803891054CF08FE78C93808191818F572F +:1019A000910991838083089581382FEF92073CF449 +:1019B00081E88C938081918181589F4FF2CF8C93E5 +:1019C000118210820895681708F5861B682F21E0A0 +:1019D000469FA0011124649FF001659FF00D112422 +:1019E0004091590150915A01E49FC001E59F900D2B +:1019F000F49F900D1124880F892F881F990B9195C2 +:101A0000222319F09195819591090895681B20E092 +:101A1000DFCF0F931F93CF93DF9300D000D0CDB7CC +:101A2000DEB789836A834B831C8204E610E024E0DE +:101A300030E0AE014F5F5F4F60E084E10E945B32B7 +:101A40000F900F900F900F90DF91CF911F910F91FA +:101A5000089580913203882329F047E669E98BE2F3 +:101A60000C94090D6091590170915A0190E080E049 +:101A70000E94AA3520E030E040E05CE30E940B3693 +:101A800020E030E040E85FE30E94A535882321F0A4 +:101A900047EC6BE180E0E4CF41E265EA89EDE0CF1D +:101AA000CF92DF92EF92FF920F931F93CF93DF932A +:101AB0006C017B0164E670E088E70E944331EC0131 +:101AC00097FD12C010E000E0F601E00FF11F8491D5 +:101AD00064E670E00E94BD31EC01892B29F40F5FB0 +:101AE0001F4F0E151F0581F70E94D732CE01DF91DF +:101AF000CF911F910F91FF90EF90DF90CF900895BD +:101B000080914E0490914F04911103C091E0892778 +:101B10000895882369F062E070E08CEB9BE00E94FE +:101B2000500D892B19F080914E04089510924E04A7 +:101B300080914E04EBCFCF93C0914E0480914F041F +:101B40008823D1F00E944A086058774C8E4F9F4FEF +:101B500060934A0470934B0480934C0490934D041B +:101B6000C11108C062E070E08AEB9BE00E94500D5A +:101B7000892B29F0C0914E048C2FCF91089581E0DC +:101B800080934E04F7CF90916C04943029F58093A4 +:101B90005B0470935D0460935C049093E9008FEFA5 +:101BA0009091E800815095FD06C095ED9A95F1F76A +:101BB00000008111F5CF8091E80085FF0DC050E055 +:101BC00040E063E070E08BE594E00E940D078091B7 +:101BD000E8008E778093E8000895BC0184E00C94BF +:101BE000C30DBC0183E00C94C30D9C0184E0809381 +:101BF000E9009FEF8091E800915085FD06C085EDDA +:101C00008A95F1F700009111F5CF8091E80085FFEA +:101C10000CC050E040E066E070E0C9010E940D0792 +:101C20008091E8008E778093E8000895CF93DF934A +:101C3000EC0181E08093E9008FEF9091E800815002 +:101C400095FD06C095ED9A95F1F700008111F5CF4D +:101C50008091E80085FF14C050E040E068E070E04B +:101C6000CE010E940D078091E8008E778093E800F6 +:101C700088E0FE01A2E6B4E001900D928A95E1F7BA +:101C8000DF91CF9108959F92AF92BF92CF92DF9252 +:101C9000EF92FF920F931F93CF93DF937C015B0131 +:101CA0006A018091D10201E010E08A3010F40AE06C +:101CB00010E0C1E0D0E0F894B501C701F601099544 +:101CC000982E0E94A409911004C021960C171D079C +:101CD0006CF4892DDF91CF911F910F91FF90EF90C0 +:101CE000DF90CF90BF90AF909F900895CC9F9001D0 +:101CF000CD9F300D300D112490E080E045E34A95F2 +:101D0000F1F70000019682179307C1F7D4CF8091B5 +:101D1000A102811110C08091D80080618093D80009 +:101D20008AE18A95F1F700C08091D90080FF0AC04E +:101D300081E08093A10281E09091A102913009F0AD +:101D400080E0089582E08093A1020E94BD06109277 +:101D50006C04F1CF0E94870E882351F0E091520469 +:101D6000F0915304309721F00190F081E02D099417 +:101D700080E008951F93CF93DF93182FEB010E940B +:101D80003F0C8FE99FE00197F1F700C00000219719 +:101D9000C1F7812FDF91CF911F910C94060C4F92C8 +:101DA0005F926F927F928F929F92AF92BF92CF92EB +:101DB000DF92EF92FF920F931F93CF93DF93CDB7F4 +:101DC000DEB7CE5DD1090FB6F894DEBF0FBECDBF32 +:101DD000509070019091770490FF5DC080905D03FA +:101DE00090905E038114910409F068C0E0E3F6E08E +:101DF0009E012F5F3F4FBE0161527F4FC901A491E9 +:101E00004A2F50E0DA01AA0FBB1FA40FB51FA15A39 +:101E1000BC4FCD90DD90EC90D901CD92DD92ED924A +:101E20009D0131966A177B0751F720916F0143E0BE +:101E3000249F800D911D1124539A2BB1277F3BB114 +:101E400038605FB7F894BC01549E600D711D112479 +:101E50008617970709F08EC05FBF8FE594E0019762 +:101E6000F1F700C00000C252DF4F0FB6F894DEBF9A +:101E70000FBECDBFDF91CF911F910F91FF90EF90DB +:101E8000DF90CF90BF90AF909F908F907F906F909A +:101E90005F904F900895809171012091720133E01D +:101EA000839FF0011124E15AFC4F821708F096CF6E +:101EB0001182108212828F5F3396F7CF90FF96CFF8 +:101EC000D12CC12C66246394712C53E0452E809153 +:101ED0005C0393010C2C01C0220F0A94EAF78223C1 +:101EE00009F43FC0F601EE0FFF1FE80DF91DE59064 +:101EF000F490E114F10409F479CF45E050E0B70122 +:101F0000CE0101960E943E3509810F3F51F18A8131 +:101F1000800F9927991F8B34910514F08AE490E083 +:101F20005C01AA0CBB1C8A0D9B1DDC01A15ABC4F95 +:101F30005D01049D80011124015A1C4F0A151B05E7 +:101F400020F0B5E0EB0EF11CD8CF4D81413A08F0FE +:101F500040EA98016C818B810E940C090D5F1F4F34 +:101F6000EDCFEFEFCE1ADE0AF8E0CF16D10409F07C +:101F7000AECF3CCFFC014191CF01E8E03BB900007E +:101F800000C047FF2BB9440F000000C000C000C0D4 +:101F90002BB900C0EA9591F75BCFE7E7F4E08081C9 +:101FA0008E7F8083E9E5F3E08281816082832FEF79 +:101FB00080E792E0215080409040E1F700C00000AF +:101FC0000C94CF0EE2E3F2E086E0DF011D928A95E9 +:101FD000E9F70C94DF0B1F93CF93DF93CDB7DEB7F8 +:101FE000AA970FB6F894DEBF0FBECDBF8EE694E081 +:101FF0002091F100DC012D93CD01B4E086379B07E1 +:10200000B9F780916F04833009F471C0B8F481305E +:1020100009F448C0823009F4B4C08091E80083FF1D +:102020003CC180916E0490916F049A3008F035C1E4 +:10203000E92FF0E0E553F94C0C9431358A3009F47E +:102040008FC08B3009F470C0893039F780916E04ED +:10205000813219F78091720490917304009711F006 +:102060000297D9F68091E800877F8093E8008091FD +:10207000E80082FF37C09091F3008091F200029750 +:1020800029F48091F1008B7F813021F48091F1005F +:10209000809361048091E8008B778093E8000E9430 +:1020A0003707BBCF80916E04813A09F0B6CF80919B +:1020B000E800877F8093E800809172049091730418 +:1020C000892B61F468E082E694E070E00E94E90701 +:1020D0008091E8008B778093E8009FCF60E090E0EC +:1020E00080E0F3CF80916C048111C1CF96CF8091B5 +:1020F0006E04813A09F091CF80917204909173043B +:10210000892B09F08ACF8091E800877F8093E800CF +:102110008091E80080FFFCCF809174018093F100F2 +:102120008091E8008E77B9CF80916E04813209F0FA +:1021300074CF8091720490917304892B09F06DCF54 +:102140008091E800877F8093E8000E9437078091A4 +:1021500070048093740110925F040E94E20F5DCFBF +:1021600080916E04813209F058CF8091E800877F1A +:102170008093E8000E943707809171048093600487 +:102180004CCF80916E04813A09F047CF8091E800EE +:10219000877F8093E8008091E80080FFFCCF8091EA +:1021A0006004BCCF803899F0823809F076C0809105 +:1021B00072048F70873008F070C08093E9008091BE +:1021C000EB0085FB882780F91092E90006C080911A +:1021D0006A0490916B04911182609091E800977F5E +:1021E0009093E8008093F1001092F1008091E80054 +:1021F0008E77B5C1882309F4A2C1823009F04DC0A1 +:10220000809170048111A6C1809172048F702FEFAC +:10221000280F263008F041C08093E9002091EB00A0 +:1022200020FF98C1933031F48091EB00806280935D +:10223000EB0090C19091EB0090619093EB0021E056 +:1022400030E001C0220F8A95EAF72093EA0010924D +:10225000EA008091EB008860EACF81111EC01091E6 +:1022600070041F778091E3008078812B8093E300D6 +:102270008091E800877F8093E8000E943707809173 +:10228000E80080FFFCCF8091E30080688093E3004A +:1022900082E0111183E080936C048091E80083FF59 +:1022A0000AC08091E800877F8093E8008091EB006E +:1022B00080628093EB00AA960FB6F894DEBF0FBE43 +:1022C000CDBFDF91CF911F9108958058823028F7BC +:1022D00020917004309171042C3DE3E03E07A1F59C +:1022E00083E08A838AE289834FB7F894DE011396EC +:1022F00020E03EE051E2E32FF0E050935700E491FC +:1023000020FF03C0E295EF703F5FEF708E2F90E0EB +:10231000EA30C0F0C7968D939D932F5F243159F713 +:102320004FBF8091E800877F8093E8006AE270E009 +:10233000CE0101960E94E9078091E8008B77809397 +:10234000E800ABCFC096E7CF809172049091730400 +:10235000432F55274330510509F44AC078F54130E1 +:10236000510509F47AC08BE590E0EEEBFBE04230DA +:10237000510509F092CF2091E800277F2093E800D3 +:1023800020917404309175048217930708F49C011E +:1023900040E02115310509F065C0411163C080910D +:1023A000E80082FDC9CF80916C04882329F2853032 +:1023B00019F28091E80083FFF2CFBECF4132510580 +:1023C00009F43CC04232510509F067CF83309105D2 +:1023D00008F063CFFC01EE0FFF1FEF5DFD4F019092 +:1023E000F081E02D825E9D4FDC018C9190E01AC05F +:1023F000332721303105D1F02115310561F022302C +:10240000310509F04ACFEBE2FCE0E4918E2F90E039 +:10241000EBE2FCE007C0EDE5FCE0E4918E2F90E0FC +:10242000EDE5FCE0009709F438CFA5CFEBE4FCE044 +:10243000E4918E2F90E0EBE4FCE0F4CF8330910543 +:1024400008F02BCF880F991FFC01E95DFD4F01902B +:10245000F081E02D89E090E08ECF82E190E0E9E12B +:10246000FCE089CF80916C04882309F465CF853026 +:1024700009F462CF8091E80083FD5ECF8091E8008F +:1024800082FD8DCF8091E80080FF83CF9091F30093 +:102490008091F2002115310519F08830910550F036 +:1024A00041E0089709F040E08091E8008E77809342 +:1024B000E8006FCF44914093F100319621503109EB +:1024C0000196E8CF803809F0E8CE8091E800877F58 +:1024D0008093E80080916D048093F10087CE811194 +:1024E000DCCE10917004123008F0D7CE8091E80055 +:1024F000877F8093E80010936D040E9437071123B3 +:1025000011F084E005C08091E30087FDFACF81E0FF +:1025100080936C0442E061EC81E00E94560742E245 +:1025200061EC84E00E94560742E261EC82E00E9486 +:10253000560742E260EC83E00E945607AECE8091DF +:102540007004813009F0A9CE81E0933009F080E079 +:1025500080936B041092E9008091E800877F80935C +:10256000E8000E94370799CE1F93CF93DF93162F71 +:10257000C0917E06D0917F068A30D1F42091430429 +:10258000CE018E579440622F70E00E94FD34281BCC +:10259000822F66E00E941135C82FC15020F4DF91D0 +:1025A000CF911F91089560E080E20E94B412F5CFB0 +:1025B0008D30E9F4CE57D44020914304622F70E06F +:1025C000CE010E94FD34281B822F9E01280F311D51 +:1025D0002115324018F080E0D0E0C0E0C80FD11DD6 +:1025E000C258DB4FD0937F06C0937E06D8CF96E0CB +:1025F000FE01A4E4B4E001900D929A95E1F7803ECB +:1026000090F186E0FE0111928A95E9F7C0917E066D +:10261000D0917F06111133C046E050E0BE0184E442 +:1026200094E00E9447359E012E573440892B91F546 +:102630002A5F3F4F40914304642F70E0C9010E941C +:10264000FD34481B463010F4240F311D211572E073 +:10265000370710F030E020E022583B4F30937F06E0 +:1026600020937E069CCFF6E08F9FB0011124665820 +:10267000794F46E050E0CE010E943E35C7CF9E0123 +:102680002A5F3F4FFE012E173F0731F28081809570 +:102690008193F9CFC90145E0969587954A95E1F771 +:1026A00041E050E0BA0102C0660F771F8A95E2F759 +:1026B000CB0160917C0470917D04862B972BB9012E +:1026C0006B5F7F4FE5E076956795EA95E1F702C08D +:1026D000440F551F6A95E2F7842B952B90937D0448 +:1026E00080937C04A5CFFF920F931F93CF93DF932A +:1026F000EC01F62EFC0101900020E9F78F0101505A +:102700001109C017D10730F0DF91CF911F910F91C0 +:10271000FF9008956F2D89910E94B412F2CFE1E4E9 +:10272000F4E08083618324E630E042E050E0BF01C2 +:1027300084EB0C943432CF93C82F60E08CE00E947D +:102740008F136C2F84E00E948F1361E08CE0CF9197 +:102750000C948F131F93CF93DF93CDB7DEB762979F +:102760000FB6F894DEBF0FBECDBF96E0E4E2F3E013 +:10277000DE01179601900D929A95E1F796E0FE0121 +:102780003796DE011D9601900D929A95E1F7188516 +:10279000882309F1162B84E00E949B131E8786E094 +:1027A000FE013D96DE01119601900D928A95E1F7AA +:1027B00086E0FE013196A4E2B3E001900D928A9585 +:1027C000E1F762960FB6F894DEBF0FBECDBFDF9182 +:1027D000CF911F91089560951623E0CFCF93DF939B +:1027E000C3EED2E060E0CE010E9471352196C115A2 +:1027F00084E0D807B9F7DF91CF9108956F927F9267 +:102800008F929F92AF92BF92CF92DF92EF92FF9200 +:102810000F931F93CF93DF938AE7C82E86E0D82EBD +:1028200091ECE92EF12CE701CC58D10936011BC0FF +:10283000F50185909490692DC8010E947135682D2D +:10284000C80101960E94713582E0A80EB11C0E5F8E +:102850001F4FC017D10761F78EE0680E711C2E96CE +:10286000CE15DF0529F08E010E5011095301E0CF7E +:102870007E018CE8E80EF11C8CE8C80ED11C8DE7B7 +:10288000E81683E0F80679F6DF91CF911F910F915A +:10289000FF90EF90DF90CF90BF90AF909F908F9080 +:1028A0007F906F900895CF93C82F6FEF811161E2F1 +:1028B00083E290E00E9471356FEFC11161E184E223 +:1028C00090E00E9471356FEFC11165E285E290E002 +:1028D000CF910C94713580E00E94531460E086E241 +:1028E00090E00E9471350E94FE130E94EE1381E079 +:1028F0000C9453140F931F93CF93DF93C42FD0E006 +:10290000CC0FDD1F2EE0629FC00DD11D11243CE8CD +:10291000839FC00DD11D1124CE0187960E945D3585 +:10292000082F10E0102F0027CE0188960E945D35F9 +:102930009801282BC901DF91CF911F910F91089524 +:10294000462F853038F47A3028F4673018F4672F32 +:102950000C947A1490E080E00895CF92DF92FF9279 +:102960000F931F93CF93DF936C01009176048091B6 +:102970009202082BC7E0D0E010E0FC2EC8010C2E1C +:1029800002C0959587950A94E2F780FD0CC02197C7 +:10299000A0F7F12C8F2DDF91CF911F910F91FF9018 +:1029A000DF90CF900895B6018C2F0E94A0140E9452 +:1029B000000A019761F3EECFCF93DF93EC010E9401 +:1029C000AD14BE010E94A014DF91CF910C94000AB7 +:1029D000FC01808191810E94DC14292F2F70929537 +:1029E0009F7092509E3078F4E92FF0E0EB52F94C52 +:1029F0000C943135803F19F020F4883E20F481E0BA +:102A00000895843FE1F380E00895883EC0F3813F5C +:102A1000D1F7F5CF822F869586958695089583E226 +:102A200090E00E945D35813289F484E290E00E945A +:102A30005D35813159F485E290E00E945D3591E089 +:102A4000853209F090E0892F8170089580E0FCCFF5 +:102A5000CF92DF92EF92FF926B017C010E94F60809 +:102A6000B701A60188E090E0FF90EF90DF90CF9053 +:102A70000C948335AF92BF92CF92DF92EF92FF9288 +:102A80000F931F93CF93DF9300D00F92CDB7DEB794 +:102A9000082FF62E142FE22E8091770480FF4FC06E +:102AA000E82FE695AE2FB0E0AE5EBD4F9C919093BF +:102AB00059038E7F823009F056C0413A08F040EA4F +:102AC0009E012F5F3F4F6F2D802F0E940C09809138 +:102AD000770480FF11C02B8139814A818091710177 +:102AE0009091720153E0859FF0011124E15AFC4F4F +:102AF000891798F10E94CF0E80917804801308C046 +:102B0000809179048F1104C080917A04811729F093 +:102B100080915B03826080935B0300937804F09262 +:102B2000790410937A04EE2051F06091770470914B +:102B300078048091790490917A040E9428150F906E +:102B40000F900F90DF91CF911F910F91FF90EF9019 +:102B5000DF90CF90BF90AF90089541833083228360 +:102B60008F5F3396C5CF923039F6E2508E2F817049 +:102B7000D82EE695F0E0E55DF94FA590B490C12C14 +:102B8000BB2460917301C61608F0B4CF2C2D30E041 +:102B9000A29EC001A39E900DB29E900D112470E0E4 +:102BA0000E94FD34802FD11016C0860F4091710114 +:102BB000420F532F511D9A01220F331F240F351F2F +:102BC000215A3C4F412F113A08F040EA6F2D0E94E4 +:102BD0000C09C394D6CF861BE9CFE7E7F4E0438125 +:102BE00021E1421B08F440E021E0628181810C94E4 +:102BF0003A15E7E7F4E0438121E1420F08F44FEF93 +:102C000021E0628181810C943A15E7E7F4E062816A +:102C100021E1621B08F460E021E0438181810C9492 +:102C20003A15E7E7F4E0628121E1620F08F46FEF03 +:102C300021E0438181810C943A15E7E7F4E081813A +:102C400021E04381628188500C943A15E7E7F4E073 +:102C5000818121E043816281885F0C943A158091E3 +:102C60007B04882319F0815080937B046091770462 +:102C7000709178048091790490917A040C942815CD +:102C800080917B04833018F48F5F80937B04609184 +:102C90007704709178048091790490917A040C946F +:102CA00028159091770490FF27C0917081111DC065 +:102CB00092609093770480915B03816080935B03C3 +:102CC000662351F0609177047091780480917904C3 +:102CD00090917A040E94281520E040917A04609136 +:102CE0007904809178040C943A158C3010F0966138 +:102CF000E0CF880F982BDDCF089521E030E0A901C7 +:102D000002C0440F551F8A95E2F7CA0120915C0367 +:102D1000662391F0822B80935C0380915B0380613A +:102D200080935B0380915A03811109C080917704DD +:102D300060E086950C94511680958223ECCF08951F +:102D4000CF93DF93C82FC17082FBDD27D0F981FBC1 +:102D5000662760F985E00E947D1661E06C2786E0B9 +:102D60000E947D166D2F87E0DF91CF910C947D1628 +:102D70000F931F93CF93C82F61E08111682F61706B +:102D800080E00E947D16C1FB662760F9C11101C079 +:102D900060E081E00E947D16C2FB662760F9C111E8 +:102DA00001C060E082E00E947D16C3FB662760F9E7 +:102DB000C11101C060E083E00E947D16C4FB66275C +:102DC00060F9C11101C060E084E00E947D164C2FC3 +:102DD00050E070E060E0DB01CA01F4E0B695A79531 +:102DE00097958795FA95D1F70097A105B10549F117 +:102DF000AC01BD0184E08A019B01E2E03695279594 +:102E000017950795EA95D1F70115110521053105AB +:102E100019F08E5FB901A80176956795579547958A +:102E2000452B462B472B09F08F5F8230D1F158F4A8 +:102E30008823E9F0813059F18C2FCF911F910F91A8 +:102E4000089580E0D8CF8330A1F18430A9F720E045 +:102E500040E56FEF8AED0E943A1587E00E949B13D0 +:102E600080910001882341F3109232030DC020E0CD +:102E700040E56FEF82E30E943A15809100018823BC +:102E800099F381E0809332030E94290DD5CF20E091 +:102E900040E56FEF8CEF0E943A1585E40E949B138A +:102EA000CBCF20E040E56FEF80E50E943A1585E248 +:102EB000F5CF20E040E56FEF86E70E943A158FE1FD +:102EC000EDCF0E94B816809376040C94DF0B8091AE +:102ED0007604982F9670963019F488600C946117D8 +:102EE000877FFCCF21E030E001C0220F8A95EAF70E +:102EF00020958091760482230C94611721E030E0C4 +:102F000001C0220F8A95EAF780917604822B0C94F7 +:102F10006117809177048695815009F48BE061E018 +:102F20000C9451168091770486958F5F8C3008F051 +:102F300081E061E00C9451168091770480FF07C016 +:102F4000869582588F77893010F40C94921761E03F +:102F500082E00C945116E7E7F4E083E0808311826D +:102F60008FEF828380EA83831482A9E5B3E012960F +:102F70008C911297836012968C936081718182810B +:102F800093810C942815AB01BC0188E190E00C946E +:102F90008335CF93C82FEFE3F4E0982F990F990F63 +:102FA000990F80818770892B8083E0E4F4E09C2F67 +:102FB0009295969597708081887F892B8083609108 +:102FC0003D0470913E0480913F04909140040E9422 +:102FD000C3176C2F82E0CF910C948F13EDE3F4E0D4 +:102FE00089E88083118282818C7F828360913D0495 +:102FF00070913E0480913F04909140040C94C3175B +:10300000EDE3F4E080818E7F808360913D047091D8 +:103010003E0480913F04909140040C94C317EDE36B +:10302000F4E080818160808360913D0470913E0472 +:1030300080913F04909140040C94C31769EE7EEF99 +:1030400090E080E00E948F3560E082E090E00E9496 +:10305000713560E083E090E00E9471351092920239 +:1030600060E084E090E00E94713560E082E290E0F0 +:103070000E94713560E085E090E00E94713560E06B +:1030800086E090E00E9471356FEF87E090E00E944B +:10309000713540E050E0BA0188E090E00E9483354D +:1030A00060E08DE090E00E94713540E050E0BA01B0 +:1030B00088E190E00E94833560E087E190E00E9423 +:1030C000713540E050E0BA018CE190E00E94833518 +:1030D00070E060E080E290E00E948F350E94EE1781 +:1030E00080E00E9453140E946B1440E050E0BA014B +:1030F0008FE090E00E94833540E050E0BA0183E128 +:1031000090E00C9483350F931F93CF93DF9300D0FF +:1031100000D0CDB7DEB74091C5025091C602609194 +:10312000C7027091C8022FB7F8948091570490910C +:103130005804A0915904B0915A042FBF841B950BD9 +:10314000A60BB70B84369105A105B10588F10E9445 +:10315000870E882379F10E944A086E5F7F4F8F4F58 +:103160009F4F69837A838B839C8380912C019091FC +:103170002D0181559D4F40912B0150E04530510567 +:1031800010F044E050E0BE016F5F7F4F0E94543565 +:1031900084E090E00E944934892BD9F40E944A08C7 +:1031A0006093C5027093C6028093C7029093C802D1 +:1031B00081E010C00E944A080091D2021091D3020F +:1031C0002091D4023091D502600F711F821F931F8E +:1031D000C4CF80E00F900F900F900F90DF91CF91B0 +:1031E0001F910F9108958F929F92AF92BF92CF92AD +:1031F000DF92EF92FF920F931F93CF93DF93EB0138 +:1032000088809980AA80BB809FB7F894C0905704AB +:10321000D0905804E0905904F0905A049FBFC81809 +:10322000D908EA08FB0894E6C916D104E104F104C0 +:1032300010F4442311F1E82E082E000CFF089AE048 +:103240008902F0011124EF5FFE4F83819481815543 +:103250009D4F428150E00417150708F4A801B901F9 +:103260000E945435C7010E944934892BA1F40E9461 +:103270004A08688379838A839B8381E0DF91CF91B9 +:103280001F910F91FF90EF90DF90CF90BF90AF9084 +:103290009F908F90089580E0F1CF0F931F93CF936D +:1032A000DF930F92CDB7DEB780914E0489832091D2 +:1032B000C40290E041E02817190609F440E001E05B +:1032C00010E09E012F5F3F4F6DEC72E086E00E94A0 +:1032D000F3180F90DF91CF911F910F9108950F93E5 +:1032E0001F93CF93DF93CDB7DEB729970FB6F8942E +:1032F000DEBF0FBECDBF85E0E7E7F4E0DE0111964B +:1033000001900D928A95E1F78091590390915A03AB +:10331000A0915B03B0915C038E839F83A887B987DC +:1033200041E08885811101C040E009E010E09E0184 +:103330002F5F3F4F69EC72E085E00E94F318811126 +:1033400010925B0329960FB6F894DEBF0FBECDBF77 +:10335000DF91CF911F910F9108956F927F928F927D +:103360009F92AF92BF92CF92DF92EF92FF920F9314 +:103370001F93CF93DF930F92CDB7DEB7862E5A01FE +:103380006901682E880F7708C3010E944934892B90 +:1033900009F088C08AE0869DF001879DF00D112418 +:1033A000EF5FFE4F458150E04115510511F041E0BE +:1033B00050E08AE0869DF001879DF00D1124EF5FBB +:1033C000FE4F6681778161557D4FCE0101960E9447 +:1033D0005435F50140815181628173812FB7F89492 +:1033E0008091570490915804A0915904B0915A04C7 +:1033F0002FBF841B950BA60BB70B84369105A10537 +:10340000B10540F4B701C8010E94DB089981891712 +:1034100009F44FC0082C000C9908C4010E944934DB +:10342000892B91F0B12C8B2D0F90DF91CF911F91B3 +:103430000F91FF90EF90DF90CF90BF90AF909F9053 +:103440008F907F906F9008958AE0889DF001899D0C +:10345000F00D1124EF5FFE4F458150E0E416F506B4 +:1034600008F4A7018AE0889DF001899DF00D1124E0 +:10347000EF5FFE4F6681778161557D4FC6010E94E7 +:103480005435B701C8010E94DB0899818913CACF5E +:103490000E944A08F5016083718382839383BB2471 +:1034A000B394C1CFB12CA701B801C6010E94543515 +:1034B000BACFBB24B394F7CFCF92DF92EF92FF92B3 +:1034C0000F931F93CF93DF9300D000D00F92CDB70F +:1034D000DEB76B0185E0E82EF12C00EB12E09E01D7 +:1034E0002F5F3F4F47EA52E061E080E00E94AD1954 +:1034F000882349F095E0FE013196A2EAB2E00190FE +:103500000D929A95E1F795E0E2EAF2E0D60101909A +:103510000D929A95E1F70F900F900F900F900F90EA +:10352000DF91CF911F910F91FF90EF90DF90CF909F +:10353000089590E080E00E946B35893E9E4F11F423 +:103540000C940F1580E008951F920F920FB60F9202 +:1035500011242F933F934F935F936F937F938F9398 +:103560009F93AF93BF93CF93DF93EF93FF93D0914C +:10357000E900DF708091EC00C82FC17080FDC0E8C9 +:103580001092E9008091F000877F8093F00078949A +:103590000E94EB0F1092E9008091F0008860809308 +:1035A000F000CD2BCF70C093E900FF91EF91DF9138 +:1035B000CF91BF91AF919F918F917F916F915F91CB +:1035C0004F913F912F910F900FBE0F901F90189524 +:1035D0001F920F920FB60F9211242F933F934F9388 +:1035E0005F936F937F938F939F93AF93BF93EF936B +:1035F000FF938091E10082FF09C08091E20082FF89 +:1036000005C08091E1008B7F8093E1008091DA001A +:1036100080FF24C08091D80080FF20C08091DA0014 +:103620008E7F8093DA008091D90080FF9BC080E17B +:1036300089BD82E189BD09B400FEFDCF81E08093A0 +:103640006C0480915E04811109C00E94BD060E9435 +:1036500088078091E20084608093E2008091E1001D +:1036600080FF17C08091E20080FF13C08091E200CC +:103670008E7F8093E2008091E20080618093E2007F +:103680008091D80080628093D80019BC85E0809337 +:103690006C048091E10084FF29C08091E20084FFE6 +:1036A00025C080E189BD82E189BD89B5982F9170DF +:1036B00080FFFBCF8091D8008F7D8093D8008091D0 +:1036C000E1008F7E8093E1008091E2008F7E809305 +:1036D000E2008091E20081608093E20080916D04BD +:1036E000882309F445C084E080936C048091E10054 +:1036F00083FF27C08091E20083FF23C08091E10017 +:10370000877F8093E10082E080936C0410926D04C7 +:103710008091E1008E7F8093E1008091E2008E7FB6 +:103720008093E2008091E20080618093E20042E0B9 +:1037300060E080E00E9456078091F00088608093EE +:10374000F000FF91EF91BF91AF919F918F917F9189 +:103750006F915F914F913F912F910F900FBE0F90FE +:103760001F90189519BC10926C0410925E0476CFCD +:103770008091E30087FD93E090936C04B7CF789439 +:103780001F921FB61F9211248F939F93AF93BF93E5 +:103790008091570490915804A0915904B0915A0413 +:1037A0000196A11DB11D8093570490935804A093D6 +:1037B0005904B0935A04BF91AF919F918F911F907C +:1037C0001FBE1F9018959C014FB7F8948091570425 +:1037D00090915804A0915904B0915A044FBF821B94 +:1037E000930B08952FB7F894809157049091580443 +:1037F000A0915904B0915A042FBF08955F926F921F +:103800007F928F929F92AF92BF92CF92DF92EF9270 +:10381000FF920F931F93CF93DF9300D000D00F92AE +:10382000CDB7DEB77C01FC0183819481892B31F017 +:103830008081918189238F3F09F08CC60F900F9072 +:103840000F900F900F90DF91CF911F910F91FF90EC +:10385000EF90DF90CF90BF90AF909F908F907F9030 +:103860006F905F9008950E94AD14182F682F898182 +:103870009A810E94B30B69817A81812F0E94A014E2 +:103880008C01F7018281882361F0F801E65EFC4536 +:10389000ED30F10530F4ED51F94C0C9431350E94C6 +:1038A0000F18D0903D04D0FE1CC08D2D86958370DE +:1038B000F7019281992309F460C1823090F4B70135 +:1038C000C8010E949908882361F0D694D694D694B2 +:1038D00080913E0483708295880F807E8D290E949E +:1038E0009B13F7018281882309F429C6C8018251FC +:1038F0009F45409708F0ECC58FEF93E00E945D353F +:10390000025193EEA92E92E0B92E811197CF0111A9 +:1039100038C11C821B82662463948AE0582E85017C +:103920000F5F1F4FC5010E945D3589831A8288236E +:1039300009F484CF9FEF980F933008F031C18A8348 +:10394000698232E0A30EB11CC8010E945D358B83F1 +:10395000882309F473CF8E010F5F1F4FF801208178 +:103960002223E9F2213009F055C191818281913001 +:1039700009F018C10E5F1F4F6AE070E0893311F43F +:1039800060E570E00E94BA0E13C10E94001889CF52 +:1039900080913D0480FF0DC00E94001860913D049D +:1039A00070913E0480913F04909140040E94C3179F +:1039B00078CF0E940F18F2CF0E94EE1772CF90912D +:1039C0003D04892F86958F5F8370880F997F892B9F +:1039D00080933D04982F9670963001F7897F8093ED +:1039E0003D04DCCF90913E04892F8B7F92FF846051 +:1039F00080933E04D3CF80913D04982F9695969561 +:103A0000969580913E0483708295880F807E892BE5 +:103A10008C3798F48F5F282F220F220F220F90915E +:103A20003D049770922B90933D0482958695837008 +:103A300090913E049C7F892BDBCF81E0ECCF80917D +:103A40003D04982F96959695969580913E048370A7 +:103A50008295880F807E892B11F08150DCCF8BE717 +:103A6000DACF30913E04932F9695969596952091B6 +:103A70003F04822F83708295880F807E892B90E08F +:103A80000196482F440F440F440F3770342B309366 +:103A90003E0435E0969587953A95E1F783702C7F43 +:103AA000822B80933F047ACF30913E04932F9695DA +:103AB0009695969520913F04822F83708295880F6A +:103AC000807E892B8150990BDCCF80913F0482FF4F +:103AD00012C08B7F80933F0460913D0470913E043F +:103AE00080913F04909140040E94C31760E081E000 +:103AF0000E948F13D6CE846080933F0460913D0472 +:103B000070913E0480913F04909140040E94C3173D +:103B100060E08CE00E948F1364E182E00E948F13CA +:103B200065E081E00E948F1361E08CE0E1CF80913D +:103B30003F04982F9695969596958091400482958E +:103B4000880F807E892B883720F4865F0E94C917F2 +:103B5000A8CE88E7FBCF80913F04982F9695969545 +:103B60009695809140048295880F807E892B8431C0 +:103B700010F08A50EBCF84E1E9CF882309F4B1CE6D +:103B80009ECEA114F4E0BF0609F458CEC5010E94F0 +:103B90005D35811101C001502FEFA21AB20AB7CED4 +:103BA0005801D9CE923039F40E5F1F4F0E943F0C5E +:103BB0000F5F1F4FD3CE933029F40E5F1F4F0E942B +:103BC000060CF6CF943019F00F5F1F4FF1CF0E5F48 +:103BD0001F4F30E020E0B8016F5F7F4FF801418157 +:103BE0008053990B8A30910550F02150310900F330 +:103BF0008FE99FE00197F1F700C00000F6CF529ED9 +:103C0000F001539EF00D11249C012E0F3F1F842FB5 +:103C10008B01E1CFE22FF0E0EF51FE4F7490822F45 +:103C200086958695869590E0FC01EF52FE4FE490D4 +:103C30002770F12C022E02C0F594E7940A94E2F763 +:103C4000E1E0EE22FF24FC01EF53FE4FC490D12CA3 +:103C5000022E02C0D594C7940A94E2F7F1E0CF2275 +:103C6000DD24FC01EF54FE4F8490912C02C095940A +:103C700087942A95E2F721E082229924E114F10445 +:103C800019F081EE0E943F0CC114D10419F086EEA8 +:103C90000E943F0C39E36AE070E0731202C060E5F5 +:103CA00070E0872D0E94BA0ECD2819F086EE0E9492 +:103CB000060CEF2819F081EE0E94060C892809F401 +:103CC00077CF6AE070E08CE25DCE81E00E947E17E3 +:103CD00003C081E00E9472170F900F900F900F9019 +:103CE0000F90DF91CF911F910F91FF90EF90DF9098 +:103CF000CF90BF90AF909F908F907F906F905F908C +:103D00000C94671782E0E2CF043F110509F455C116 +:103D100008F057C1053E110509F4DDC0F701928195 +:103D200091113CC280915F0482720A3CFCE51F073E +:103D300009F414C208F06AC1053C3CE5130709F414 +:103D4000F9C108F04EC1033C5CE5150709F4D3C185 +:103D500008F0EBC1023C1C4509F47DC1F70100816C +:103D60001181992309F434C2C8010E94AD14D82EE0 +:103D7000682FC8010E94B30BB8018D2D0E94A014BA +:103D80000E94000A182FB82EF70122814581342F96 +:103D900032953F70892F82958F70C82ED12C8C3030 +:103DA00008F04EC2F601E051F94C0C94313503385D +:103DB000FFE51F0709F481C018F501383FE5130737 +:103DC00009F44AC008F065C000385FE5150709F03E +:103DD000A5CF882309F459C080919C02811106C0A7 +:103DE00081E080939C0282EE0E943F0C0E94F21BB5 +:103DF00090939B0280939A028BE20E943F0C8ECF9D +:103E000005389FE5190709F4BEC008F476C00638E6 +:103E1000FFE51F0709F082CF882309F4CEC0609127 +:103E2000590170915A0190E080E00E94AA3520E08B +:103E300030E040E05CE30E940B3620E030E040E8F8 +:103E40005FE30E94A5358111B5C080EE90E09093AC +:103E50005A0180935901A1C08823A1F080919C024E +:103E6000811106C081E080939C0282EE0E943F0C8B +:103E70000E94F21B90939B0280939A0281EE0E9413 +:103E80003F0CBACF81EE0E94060C8BE20E94060C1A +:103E900045CF882309F442CF81EE0E943F0C83EE88 +:103EA0000E943F0C8FE40E943F0C8FE40E94060C9E +:103EB00083EE0E94060C81EEE9CF882309F42ECF11 +:103EC00081EE0E943F0C83EE0E943F0C80E50E9431 +:103ED0003F0C80E5EBCF80933C0210933B020093B4 +:103EE0003A02882321F081E08093EE0217CF1092EE +:103EF000EE0214CF80933902F0CF882379F18091BC +:103F00003902882349F080913A020E94060C80EE23 +:103F10000E943F0C8AE20CC080913C028823D1F3BE +:103F200080913A020E94060C80EE0E943F0C8CE4C5 +:103F30000F900F900F900F900F90DF91CF911F91E6 +:103F40000F91FF90EF90DF90CF90BF90AF909F9038 +:103F50008F907F906F905F900C943F0C8AE20E944C +:103F6000060C8CE40E94060C80EE0E94060C8091E8 +:103F70003902811105C080913C02882309F45ECC8E +:103F800080913A02D5CF8823C1F0809132038823F3 +:103F900039F010923203109200010E94290DBECE1A +:103FA000809100018111F7CF81E0809332038093EB +:103FB0000001F3CF80E890E04ACF61E00E94AA13AD +:103FC000ADCE62E0FBCF64E0F9CF882321F081E041 +:103FD0008093ED02A3CE1092ED02A0CE1092F002DB +:103FE0009DCE073C2CE5120709F4AEC008F4A7C02B +:103FF000083C4CE5140709F4ACC0093C1C4509F029 +:10400000ADCE4DEE55E169EF75E179C0043DECE5CB +:104010001E07A8F40E3CFCE51F0708F00FCC0C3C73 +:104020002CE5120709F49FC04FE256E160E476E107 +:104030000D3C1C4508F463C061E081E046C0053DCD +:104040004CE5140709F4FACB08F492C00D351D4570 +:1040500009F4F4CB83CE8091770480FF31C08E7F4A +:10406000809377046091770470917804809179044B +:1040700090917A040E94281580915B03816080935F +:104080005B039FEFE0E7F2E09150E040F040E1F7A2 +:1040900000C000000F900F900F900F900F90DF91D5 +:1040A000CF911F910F91FF90EF90DF90CF90BF9035 +:1040B000AF909F908F907F906F905F900C94CF0EF9 +:1040C00081608093770461E086950F900F900F9048 +:1040D0000F900F90DF91CF911F910F91FF90EF9074 +:1040E000DF90CF90BF90AF909F908F907F906F9018 +:1040F0005F900C94511649E857E162E977E10F901F +:104100000F900F900F900F90DF91CF911F910F9113 +:10411000FF90EF90DF90CF90BF90AF909F908F90E7 +:104120007F906F905F900C94F10842E957E169E845 +:1041300077E1E5CF4DE156E166E276E1E0CF46E298 +:1041400056E16DE176E1DBCF45E056E161E176E1F4 +:10415000D6CF41E156E165E076E1D1CF49EF55E1B7 +:104160006DEE75E1CCCF40E456E16FE276E1C7CF6A +:104170000F900F900F900F900F90DF91CF911F91A4 +:104180000F91FF90EF90DF90CF90BF90AF909F90F6 +:104190008F907F906F905F900C949C170E3D1C4504 +:1041A00009F0DCCD0F900F900F900F900F90DF91E2 +:1041B000CF911F910F91FF90EF90DF90CF90BF9024 +:1041C000AF909F908F907F906F905F900C941E188F +:1041D000C8010E948B0BD82ECFCD092F0F70907F76 +:1041E00011F00295007F812F2223C9F0002369F08E +:1041F00090E2910F983010F011110BC080915F0484 +:10420000082B00935F040E946A0B812F0E943F0CD1 +:1042100017C080919102082B00939102F4CF0E9465 +:10422000060C002369F00095105E183010F0B110F4 +:1042300027C080915F04082300935F040E946A0BEB +:1042400098E0C91AD108E4E0CE16D10408F0F6CA05 +:104250000E94AA0E0F900F900F900F900F90DF9179 +:10426000CF911F910F91FF90EF90DF90CF90BF9073 +:10427000AF909F908F907F906F905F900C94A0165E +:1042800080919102082300939102D8CF892F8F70DB +:10429000907F903211F08295807FF1E0BF120CC0C8 +:1042A000222329F0333060F60E94FC0BC9CF323054 +:1042B00038F60E94F10BC4CF222341F03323A1F33F +:1042C00040FFA3CF4F70F7014583EECF332389F32F +:1042D000193309F0F5C0FFEF27EE33E0F15020402D +:1042E0003040E1F700C00000812F0E94060CA8CFEB +:1042F000892F86958695837061F0813009F0A0CF73 +:10430000812F9370211102C090E080E00E94560836 +:1043100097CF812F9370211102C090E080E00E941E +:104320006C088ECF892F8370A1F5211189CF812F41 +:10433000829586958770880F880F412F4F70082EC1 +:1043400001C0440F0A94EAF7212F207114FF07C01F +:104350002FE030E001C0220F8A95EAF7209596956C +:1043600096959370923081F0822F842B933030F4A5 +:1043700080919202913029F0242B82230E94ED0B30 +:104380005FCF842B822BFACF242B8091920282273D +:10439000F5CF8695222311F0892F8170882309F4A7 +:1043A0004FCF812F829586958770880F880F412F78 +:1043B0004F70082E01C0440F0A94EAF7212F207194 +:1043C00014FF07C02FE030E001C0220F8A95EAF702 +:1043D0002095969596959370923081F0822F842B3C +:1043E000933030F480917604913029F0242B82238D +:1043F0000E94611725CF842B822BFACF242B80912A +:1044000076048227F5CF092F0F70222329F0802F01 +:104410000E947E17812F48CF812F0E94F10B802FA1 +:104420000E9472170DCF812FE1EF1E1789F1E1175E +:1044300050F0F0EF1F17B9F02223B1F13111E5CEA2 +:10444000892F8F7129C042EF141749F153EF1513CB +:10445000F3CF80E0222361F29F7181E001C0880FD9 +:104460009A95EAF7C5CF222379F0323008F0E8CEEA +:10447000292F2F7181E090E001C0880F2A95EAF77B +:10448000909176048927B4CF333008F0D9CEF0CF9D +:10449000892F8F71222321F20E947E17D1CE892F7E +:1044A0008F712223C9F3BCCF332379F0893341F4D0 +:1044B0008FEF97EEE3E081509040E040E1F712CFBC +:1044C0008FE39CE90197F1F70DCF892F8F71A8CF6A +:1044D0000031FFE51F0709F4F8CB01312FE5120782 +:1044E00009F410CC0E944A086093F5027093F6021A +:1044F0008093F7029093F802F7018281063F11053D +:1045000009F461CD08F053CC043E110509F45DCDEA +:1045100008F0FACB003E110509F457CD013E110514 +:1045200009F4E8CC0C32110509F0F8CB882309F422 +:1045300055CD81E08093F00210926701EFCB0031FE +:104540003FE5130709F4C5CB01314FE51407A1F688 +:1045500082E0C0CB85E0DE01119601900D928A9534 +:10456000E1F7F701228189819A8121117CC90E949A +:104570008B0B182F80C91F93CF93DF9380915D021F +:10458000807FA9F480915A02882389F080918F025C +:10459000D0915E026091580270915902A0915B0225 +:1045A000B0915C02C62FC72316E0D81304C0DF9178 +:1045B000CF911F91089590E0109711F0CF3F19F41B +:1045C00001968770F2CF189F9001199F300D11242A +:1045D000F901E15AFD4F41814713F2CF4081461363 +:1045E000EFCF42814111ECCF438154814A1B5B0BD9 +:1045F000403A510528F780915D028F708061809369 +:104600005D02F901EC59FD4F80818F7080618083DC +:1046100088E592E00E94FE1BDF91CF911F910C94E0 +:10462000810BAF92BF92CF92DF92EF92FF920F93E6 +:104630001F93CF93DF93CDB7DEB761970FB6F89492 +:10464000DEBF0FBECDBF8C0185E0F801DE011D96F7 +:1046500001900D928A95E1F7F801E28088E5A82E95 +:1046600082E0B82E60915B0270915C026115710569 +:1046700009F432C19091580240915902892F842344 +:104680008F3F09F429C120813181C380D480F0900B +:104690005A02F601E61BF70BFF2009F4E8C08091EF +:1046A0005D02582F507FE03AF10508F0ABC0511180 +:1046B00077C0FE2C431321C092131FC0E1101DC010 +:1046C0008F70806180935D02C5010E94FE1B809106 +:1046D0005D02F80185838F2D61960FB6F894DEBFD9 +:1046E0000FBECDBFDF91CF911F910F91FF90EF9043 +:1046F000DF90CF90BF90AF900895CD2829F0822F02 +:1047000083238F3F09F003C180E0F82FF170DF2E83 +:1047100080FF3CC080918F0240915E0256E084137E +:1047200015C02D873E878D859E850E94DC14292F1C +:1047300022952F702230F0F0243018F59F70F1F0A0 +:10474000F8019581907FD1F4D12C1EC090E0589F44 +:10475000F001599FF00D1124E15AFD4F618136138C +:1047600006C06081261303C06281E6120FC0019665 +:104770008770D5CF9F7011F0882331F3805E883029 +:1047800018F3C8010E94FE1BFD2CA5CFEE2009F4F2 +:10479000A2CF80915D02816080935D02F12C9BCF5E +:1047A000431306C0921304C0F801EE2009F479C047 +:1047B000C8010E94E814882309F1EE20F9F08091E5 +:1047C0005D02803270F02091580230915902388792 +:1047D0002F831986DB86CA868C87CE0107960E94B6 +:1047E000FE1B86E0F801A8E5B2E001900D928A95E3 +:1047F000E1F70E94BB22FF24F3946DCFC8010E9411 +:10480000FE1BF9CF51110AC088E592E00E94FE1B01 +:1048100086E0F50111928A95E9F7C0CF43130FC0E6 +:1048200092130DC0E1100BC0F8018583C8010E94EE +:10483000FE1B86E0F50111928A95E9F74CCFC8017D +:104840000E94E8148823D1F2EE20C1F280915D022B +:10485000803238F220915802309159023A832983EC +:104860001B82DD82CC828E83CE010196B8CFE03AE6 +:10487000F105F8F6FE2CEE2009F243131FC0921347 +:104880001DC080915D0280FD10C0982F907F69F05F +:10489000F8018583903F31F0982F907F905F8F7063 +:1048A000892B8583C8010E94FE1B86E0F801A8E5DC +:1048B000B2E001900D928A95E1F70DCFC8010E94F8 +:1048C000E81481118ECF80915D02816080935D023A +:1048D000C8010E94FE1BFFCEEE2009F48FCFC80155 +:1048E0000E94E814F82E882309F488CF86E0F801A6 +:1048F000A8E5B2E001900D928A95E1F78091580207 +:10490000909159020E94DC140E94BB22E4CE81E007 +:104910008E25FBCE1F93CF93DF93CDB7DEB767977E +:104920000FB6F894DEBF0FBECDBF4B8B5C8B6D8B8B +:104930007E8B8F8B6111109291021A8A198A85E001 +:10494000FE017396DE011D9601900D928A95E1F7A6 +:1049500086E0FE013D96DE01179601900D928A9544 +:10496000E1F7CE0107960E941123882389F016E013 +:1049700080918F0290915E0289134BC067960FB6AB +:10498000F894DEBF0FBECDBFDF91CF911F91089588 +:1049900086E0FE013796DE01119601900D928A9510 +:1049A000E1F78A859B85892B11F38F81988589236F +:1049B0008F3FE9F220915E0230E0C90101968770D5 +:1049C000992740918F024817190681F410925F04CD +:1049D0000E94E20F10925E0210928F0286E0E8E5DC +:1049E000F2E0DF011D928A95E9F7C1CF96E0929F30 +:1049F000D001939FB00D1124A15ABD4FFE013196F5 +:104A000001900D929A95E1F780935E020E94810BCE +:104A1000AECF819FC0011124815A9D4F0E94112366 +:104A2000882309F4ABCF80918F0290E001968770C4 +:104A3000992780938F029CCF9F92AF92BF92CF9283 +:104A4000DF92EF92FF920F931F93CF93DF93CDB737 +:104A5000DEB764970FB6F894DEBF0FBECDBF8E01F0 +:104A60000F5F1F4F8AE0D8011D928A95E9F79EE4F7 +:104A7000C92E91E0D92EF12CE12CAA24A394B12CBB +:104A8000F60181916F018F3F09F44AC0F894E82F35 +:104A9000E295EF70F0E021A18F70A50102C0440FF4 +:104AA000551F8A95E2F7CA01922F982B91A392A1E4 +:104AB0008095892382A30E94A40900C0E7E4F1E065 +:104AC00030E020E0912C41914F3F09F47DC0A42FAC +:104AD000A295AF70B0E090968C9190E04F7002C0BC +:104AE000959587954A95E2F780FD6EC08A2D022E36 +:104AF00001C0880F0A94EAF7982A2F5F3F4F2730AA +:104B0000310509F7F601319780818F3F11F00E943E +:104B1000A60950EA5A95F1F7F801EE0DFF1D9082B3 +:104B20008FEFE81AF80A95E0E916F10409F0A8CF2A +:104B30004AE050E0B80188ED92E00E9447357C01E0 +:104B4000892B41F08AE0F801A8EDB2E001900D92C6 +:104B50008A95E1F71091E302E114F104B9F181E0E3 +:104B6000809395020E94F21B90939402809393028B +:104B700080919302909194020E94E31B069770F03B +:104B8000A8EDB2E0E12FF0E0E15BFC4F8D91819365 +:104B900022E0AD3DB207D1F71092950281E090E09E +:104BA000EF28C1F064960FB6F894DEBF0FBECDBFFC +:104BB000DF91CF911F910F91FF90EF90DF90CF90F9 +:104BC000BF90AF909F90089580E096CF809195021E +:104BD0008111CECF0E94870EB82EE091E302882388 +:104BE00009F4C7C08E01005F1F4F85E0D8011D92F8 +:104BF0008A95E9F7F0E09F01215B3C4F79018091B4 +:104C0000D102AE014B5E5F4F6A018A3008F086C068 +:104C10004CE55AE1B801C7010E94430E882309F40C +:104C200094C04DE857E2B801C7010E94430E8823A3 +:104C300009F48BC043E858E1B801C7010E94430E54 +:104C4000882309F482C04FE659E1B801C7010E94E8 +:104C5000430E882309F479C04DE459E1B801C70136 +:104C60000E94430E882309F470C01092D102E09193 +:104C7000E202F0E0AF01415B5C4FD80110E0FA01C5 +:104C80009191AF018D91981731F09F012150310919 +:104C9000F90180831B2DCA16DB0689F780919C02DF +:104CA000882371F080919A0290919B020E94E31BED +:104CB000893E934028F082EE0E94060C10929C02DE +:104CC00088E9C82E82E0D82EF12CE12CD6018D91F6 +:104CD0006D018823D1F08695F70109F447C0EC50A7 +:104CE000FE4F808191819C878B871D860E94F21BDD +:104CF0008160782F9F878E87F601319710824B85D0 +:104D00005C856D858F850E948A24B2E0EB0EF11CD4 +:104D1000E4E0EE16F104D1F6812F44CF80919602A3 +:104D2000909197020E94E31B843F914008F070CF5E +:104D3000A091E202B0E0A15BBC4FF8011D9211927C +:104D4000CE16DF06D9F71B2DA9CF8091D1028F3F58 +:104D500031F08F5F8093D1028A3008F488CF0E94AF +:104D6000F21B9093970280939602E2CFE051FE4FA0 +:104D7000B8CFF0E0E15BFC4FF89485E0A0EBB2E047 +:104D800001900D928A95E1F765E070E080EB92E08A +:104D90000E94DB088093AF020E94A409F894E0917E +:104DA000EB02F0E0E851FD4F80818B878093B602E3 +:104DB00061E070E0CE010B960E94DB088093B502A3 +:104DC0000E94A409F894C090B702D090B802E09075 +:104DD000B902F090BA0280919D0290919E02A0913A +:104DE0009F02B091A002C816D906EA06FB06D1F0D0 +:104DF000C0929D02D0929E02E0929F02F092A00289 +:104E00000E94870E81110EC00E944A08C61AD70A56 +:104E1000E80AF90AC092D202D092D302E092D402F8 +:104E2000F092D5020E94A409F8948091C2028823CE +:104E300021F184FF04C09091C30290935C0380FF32 +:104E40000DC08091BB0280FF25C0909177049160D6 +:104E50009093770460E086950E9451168091C2027B +:104E600081FF09C020E04091BE026091BD028091A7 +:104E7000BC020E943A151092C2020E94A409F89442 +:104E80008091C402882349F00E949B0D0E94A409CE +:104E900080E088CE0E94CD0FE1CF0E94800DF6CF3A +:104EA000EF92FF920F931F93CF93DF9300D000D028 +:104EB0000F92CDB7DEB7162FE82EF12CC701880F61 +:104EC000991F662339F18C509E4FFC01808191819E +:104ED0009A83898301E00B830E94F21B8160782F03 +:104EE0009D838C83F701E856FD4F0127110F102B8E +:104EF000108349815A816B818D810F900F900F90A3 +:104F00000F900F90DF91CF911F910F91FF90EF9035 +:104F10000C948A2480519E4FD8CFCF92DF92EF928B +:104F2000FF920F931F93CF93DF930F92CDB7DEB70E +:104F3000EE24E394F12C06EB12E09E012F5F3F4F2D +:104F40004BEA52E063E082E00E94AD19082F88230B +:104F500021F1C090E5028C2D90E09C0128513D4F3D +:104F600079011981F9018081181BD12E80E00AC0D6 +:104F7000DA94F70180818F5F808360E08C2D0E943E +:104F80005027802F1D14A4F3912F17FD90E0191BBB +:104F900011110EC081110E94680B802F0F90DF91BC +:104FA000CF911F910F91FF90EF90DF90CF900895D8 +:104FB0001F5FF70180818150808361E08C2D0E940A +:104FC0005027802FE5CF1F921FB61F9211248F9379 +:104FD0009F93AF93BF9380915604811113C080912A +:104FE000570490915804A0915904B0915A044196E5 +:104FF000A11DB11D8093570490935804A0935904A8 +:10500000B0935A04BF91AF919F918F911F901FBE93 +:105010001F901895CDB7DEB7E9970FB6F894DEBFAD +:105020000FBECDBF84B7877F84BF0FB6F894A89515 +:1050300080916000886180936000109260000FBED4 +:1050400080E890E00FB6F89480936100909361003F +:105050000FBE85B7806885BF85B7806885BF82EA47 +:1050600099E090932F0280932E020E94BD060E9429 +:1050700088078091E20084608093E20078948091B8 +:105080006C048823A1F01091E9001F709091EC004E +:10509000892F817090FD80E8182B1092E900809193 +:1050A000E80083FD0E94EB0F1F701093E90082E07F +:1050B00084BD93E095BD9AEF97BD80936E001092EA +:1050C000D2021092D3021092D4021092D5020E9402 +:1050D0000F15811102C00E946B140E94870E8093ED +:1050E000580180915801882309F4C6C010926F01BD +:1050F00085E2809370010E94870E81110E943C33EB +:105100008091580181112FC0FE01359686E0DF01A4 +:105110001D928A95E9F786E6898387E98A8386EC7A +:105120008B8384E38C8385E38D833497AEE4B1E095 +:10513000CE010B9621912D938E179F07D9F787E00B +:10514000E5E7F1E0DE01919601900D928A95E1F795 +:10515000FE01B196A7E4B1E0CE01889621912D938E +:105160008E179F07D9F78091580195E0811190E043 +:105170009093E30285E0891B8093E2020EE411E044 +:10518000A3E5EA2EA1E0FA2EF80181918F018F3F6D +:1051900011F00E94A609E016F106B1F707E411E04C +:1051A000FEE4EF2EF1E0FF2ED8018D918D018F3FAF +:1051B00011F00E94A609E016F106B1F7E8EDF2E061 +:1051C00082EE92E0AFE4B3E011921D928E179F073A +:1051D000D9F70E94991A811102C00E941E1882E01C +:1051E00090E00E945D358093440384E090E00E944B +:1051F0005D35182F82E290E00E945D35982F812F57 +:105200009093D7028093D6020E941C25EFE7FBEB18 +:105210003197F1F700C000000E941C2580914F03D8 +:1052200080FF2EC06FEF7FEF90E080E00E948F350F +:1052300081E08093E00080E28093D8001092C90062 +:105240008FE19EE40197F1F700C0000087E090EB4A +:10525000DC018093800690938106A0938206B09330 +:10526000830688E19CE00FB6F894A89580936000CF +:105270000FBE90936000FFCF85E280936F0139CF1E +:1052800083E090E00E945D350E94ED0B80917604F2 +:105290000E94B8160E94991A811102C00E941E181D +:1052A00088E190E00E94653560933D0470933E0470 +:1052B00080933F0490934004672B682B692B11F473 +:1052C0000E94EE170E943D3167E081E00E948F133B +:1052D00065E586E10E948F1363E687E10E948F13E4 +:1052E00060EA8AE10E948F1369E98BE10E948F13C3 +:1052F00065EF8CE10E948F1360EA8DE10E948F13AD +:1053000060E38EE10E948F1366E083E00E948F13BA +:1053100061E08CE00E948F1360E081E00E948F13B7 +:1053200060E08CE00E948F136FE084E00E948F1396 +:1053300061E08CE00E948F130E94870E811102C0F1 +:105340000E943F3383E080931A0380E280934304FA +:105350000E943D316DE070E084E792E00E94500DC4 +:10536000892BE9F580911A0363E070E081FD9EC20C +:1053700081E792E00E94500D892B89F56DE070E085 +:1053800081E692E00E94500D892B49F50E944A085F +:105390006058774C8E4F9F4F60934A0470934B0434 +:1053A00080934C0490934D04EEE7F4E080E092E0AB +:1053B000DF019C011D9221503040E1F7F0937F0600 +:1053C000E0937E068FEF9FEF90937D0480937C04A3 +:1053D00081E080934F0480934E0410921B038091D0 +:1053E000E402811136C00E94991A811104C00E9402 +:1053F0001E180E94AB1788E090E00E94653560930C +:105400007704709378048093790490937A04809160 +:105410005B03836080935B036E7F71F40E94AB1724 +:1054200088E090E00E94653560937704709378047B +:105430008093790490937A040E94F608809177040F +:1054400080FF04C060E086950E94511681E0809341 +:10545000E40280915801811106C084EF80936601B7 +:1054600085EF8093650120916601A22FA295AF7010 +:10547000B0E091963C9191972F7081E090E0BC0153 +:10548000022E01C0660F0A94EAF7462F4095432387 +:1054900091964C93919792963C919297362B929637 +:1054A0003C93929740916501E42FE295EF70F0E014 +:1054B00031A14F70042E01C0880F0A94EAF7982F8B +:1054C0009095932391A392A1892B82A390968C917E +:1054D00090E002C0959587952A95E2F7817020A10A +:1054E00030E002C0359527954A95E2F792E020FF1B +:1054F00090E0892B8093EC028091580111E0812784 +:105500008093EB02312F381B3093E5020E943D312E +:1055100040E060E080E00E94090D60E08AE00E94C7 +:10552000511681E892E090935E0380935D0381E0E1 +:105530000E94611780EE90E090935A018093590188 +:10554000109332030E94290D8BE591E09093530450 +:10555000809352043E018DE3680E711C80916C04AF +:10556000FF24F39400E112E1853009F4F2C10E94B6 +:105570001C25E82E81110E944A08E5E4F3E0AFE41F +:10558000B3E010E000E0B02EDD9081918D1509F4BC +:1055900004C28D25C12CFF24F394982F9F2109F478 +:1055A000F7C10E94870E882399F0CEA6BFA6DF2000 +:1055B00081E009F480E088AB0E94F21B8160782FC3 +:1055C0009AAB89AB4EA55FA568A98AA90E948A24D7 +:1055D000F801EB5BFC4F8081F826F0828091EC02B1 +:1055E000E82FEE0FEE0F90916601A92FA295AF70F4 +:1055F000B0E090962C9130E09F7002C035952795D1 +:105600009A95E2F72170332790916501A92FA29511 +:10561000AF70B0E090964C9150E09F7002C05595ED +:1056200047959A95E2F7CA018170992740FF02C019 +:1056300082E090E0822B8E2B8093EC021091EB02A3 +:105640008F70E82FF0E0E650FE4F80819091EA02E3 +:10565000890F8093EA02F12C84306CF0E12FF0E0A6 +:10566000E851FD4F80818F5F808360E0812F0E9431 +:105670005027FF24F3948091EA028D3F6CF4E12FD0 +:10568000F0E0E851FD4F80818150808361E0812FFF +:105690000E945027FF24F3948091EA02082E000C08 +:1056A000990B64E070E00E941D358093EA02F110CE +:1056B0000E94680B80914F04882351F180911C0354 +:1056C00090911D030E94E31BC29708F07DC12091B9 +:1056D0007C0430917D042115310509F0A0C2809130 +:1056E0004E048823A9F00E944A0800914A041091B0 +:1056F0004B0420914C0430914D04601B710B820BC4 +:10570000930B6F3F7F4F8F4F9F4710F40E94800D88 +:10571000E11001C0F1100E949B0D809142038A307C +:1057200008F0BAC380914003909141030E94E31BAB +:10573000069708F4B1C304E610E025E030E04BE33F +:1057400053E064E084E10E948832892B09F075C33C +:105750001092420320913203222359F080913B039F +:1057600090913C0398278927982790933C03809336 +:105770003B0386E0E4E2F3E0DE01919601900D92B6 +:105780008A95E1F786E0FE01B196DE01119601905F +:105790000D928A95E1F786E0FE013196A5E3B3E02C +:1057A00001900D928A95E1F790913F038091360325 +:1057B00097FD3AC38E7F8093360380913303909197 +:1057C0003403009709F02AC360913B0380913C03A6 +:1057D00000913D0310913E03222309F4F2C241E0FF +:1057E0000E94E30C2091300330913103820F931F0C +:1057F000909331038093300341E0602F812F0E940A +:10580000E30C20912E0330912F03820F931F90936E +:105810002F0380932E0360E373E08AE393E00E94FA +:10582000C40C6EE273E089E393E00E94C40C109212 +:1058300037031092380386E0E5E3F3E0DE011196CA +:1058400001900D928A95E1F786E0FE013196A4E27F +:10585000B3E001900D928A95E1F7309126032091F3 +:105860002703909128038091290370912003609170 +:1058700021034091220350912303F0912503E091ED +:105880001F03FE13E0C2332311F07313DCC2222383 +:1058900011F02613D8C2882311F08513D4C299239E +:1058A00019F081E04913D0C280E0CEC28EE692E0CA +:1058B00061CD80916C04843009F43BC00E94800D5E +:1058C00040E060E080E00E94090D80E00E94A016A8 +:1058D0008091E702811109C0F092E702809177047C +:1058E00081708093E6020E94CD0F10925604A8E1C9 +:1058F000B0E0E0E40FB6F894A895A09360000FBE66 +:10590000E093600083B7817F846083BF83B7816049 +:1059100083BF7894889583B78E7F83BF0FB6F89442 +:10592000A89580916000886180936000109260006B +:105930000FBE80916B04882361F00E941C25EFE468 +:10594000F3E08191811178C429E533E02E173F07F8 +:10595000C1F780916C04853009F4ABCF10925F04DD +:105960000E94E20F0E94AA0E0E94A0161092E70267 +:105970008091E602882349F08091770481608093CA +:10598000770460E086950E9451160E94290DEFCDA4 +:10599000C394FF0C37E0C31200CE0F5F1F4F0A30D5 +:1059A000110509F0F0CD8FEF8BAB8CAB1DAA0E94D7 +:1059B000F21B8160782F9FAB8EAB4BA95CA96DA9C0 +:1059C0008FA90E948A240ACE0E94F21B90931D0385 +:1059D00080931C0360E080E00E9482080E94AA0E6F +:1059E0008093F9020E94870E882331F14091F502DD +:1059F0005091F6026091F7027091F8022FB7F89477 +:105A00008091570490915804A0915904B0915A0480 +:105A10002FBF841B950BA60BB70B81339547A105B0 +:105A2000B10540F00E94800D80914F04882309F455 +:105A300056CE4DCE0E949B0D0E94870E882309F4FE +:105A4000D5C061E080E00E94820860E08CE791E0D0 +:105A50000E94731362E080E00E94820880917604C5 +:105A60000E94B30C823009F49BC008F090C08823D8 +:105A700009F496C0813009F499C065E080E00E9485 +:105A8000820860E08AE991E00E94731366E080E09A +:105A90000E9482086091F902669561708FE991E039 +:105AA0000E94731367E080E00E9482086091F9020F +:105AB0006095617084EA91E00E94731368E080E071 +:105AC0000E9482086091F90262FB662760F988EA09 +:105AD00091E00E9473137DA66CA64091F102509153 +:105AE000F2026091F3027091F4022FB7F894809162 +:105AF000570490915804A0915904B0915A042FBFB3 +:105B0000841B950BA60BB70B8D329140A105B105F7 +:105B100008F48ACF0E944A086093F1027093F2025F +:105B20008093F3029093F4028091F002811104C0FB +:105B300080916701811142C06DE080E00E9482087F +:105B400060E08DEA91E00E9473136AE080E00E94B9 +:105B5000820881E0809367018091EF0290E00196D6 +:105B6000817099278093EF0221E030E0281B390BE8 +:105B700040E6429FC001439F900D11242091EE0208 +:105B8000222351F1855F9B4F0E947A064DCF8330CF +:105B900089F0843009F071CF60E08EE891E003C0B5 +:105BA00060E082E891E00E94731367CF60E088E8CC +:105BB00091E0F9CF60E084E991E0F5CF6AE080E020 +:105BC0000E94820860E08DEA91E00E9473136BE00E +:105BD00080E00E948208C0CF2091ED02222319F0BC +:105BE000855B9C4FD1CF85579D4FCECF64E080E041 +:105BF0000E94820860E083EB91E00E94731365E0ED +:105C000080E00E94820860E089EB91E00E947313BB +:105C100069E080E00E9482088BEC94E0B5CF80912F +:105C20001B0361E070E081115ACD082F10E02B01B9 +:105C3000082E02C0440C551C0A94E2F7A901442125 +:105C40005521452B09F448C090911A0390FD46C098 +:105C50008295880F807680936A0198013695279502 +:105C60003695279520936D01815E80936B0110928C +:105C70006E0124E630E047E050E068E671E088E736 +:105C80000E943432892B09F02ACDA80175E0440F17 +:105C9000551F7A95E1F780911A0380FD2DC0425877 +:105CA0005B4F04E610E020E230E060E488E70E9409 +:105CB0005B32892B09F013CD0E949B0DC2018095A8 +:105CC000909540907C0450907D0448225922509237 +:105CD0007D0440927C0403CD8F5FA7CF880F880F8F +:105CE000880F80936A0110926D01895F80936B0128 +:105CF00083E080936E01BDCFEAEFF2E080E2DF0146 +:105D00001D928A95E9F7EEE0F2E0F9AFE8AF0AE01C +:105D100012E099249394A8ADB9AD2D91B9AFA8AF75 +:105D2000F80121908F01240E352E311CC1018258BB +:105D30009B4F1C01E22FF0E0E650FD4F30E020E0E9 +:105D400067E0A62EA21AB92C022E01C0BB0C0A9441 +:105D5000EAF7610190E0D6018D916D018B216A2DEA +:105D6000691B6770862E062E000C770BB82F01C0BA +:105D7000BB0F8A94EAF78B2E719561957109677054 +:105D8000772701C086956A95EAF7882A8081882A54 +:105D900080829F5F9830F9F62F5F3F4F3196283011 +:105DA000310571F6E2E1F2E028AD39ADE217F30713 +:105DB00009F0B1CF04E610E020E230E04AEF52E013 +:105DC00074CF45E00E94E30C20912C0330912D0309 +:105DD000281B390B30932D0320932C0345E0602FB3 +:105DE000812F0E94E30C20912A0330912B03281B62 +:105DF000390B30932B0320932A036CE273E087E383 +:105E000093E00E94C40C6AE273E088E393E00E948E +:105E1000C40C10923A03109239030DCD0197909360 +:105E200034038093330307CD81608093360384E08D +:105E30000E949B1384E190E0F2CF809142038F5F38 +:105E400080934203F8CC81E080FF0FC0E0915204C0 +:105E5000F0915304309749F082E08093240304804A +:105E6000F581E02D84E293E00995109226031092CB +:105E70002703109228031092290386E0E4E2F3E05E +:105E8000AEE1B3E001900D928A95E1F70E94F21B1A +:105E900090934103809340030E94AA0E9091430384 +:105EA000891731F00E94AA0E809343030E94A01626 +:105EB00080916C04843009F051CB83E08093E90039 +:105EC0008091E80082FF4ACB8091E80090E085FF56 +:105ED0000BC00E94DC0630E2E32EF12C8E010F5F36 +:105EE0001F4F8823E1F091E08091E8008B77809349 +:105EF000E800992309F432CBE981E150E33108F05D +:105F000071C0F0E0E450F94C0C9431358091F1000F +:105F1000D8018D938D01B1E0EB1AF10821F3809146 +:105F2000E80085FDF3CF8091E8008B778093E8004F +:105F30000E94DC06882399F3D6CF1A8289E08B83EE +:105F400011C08A81823009F48FC1833091F1813090 +:105F500009F048C00E944A080E9437356B837C8351 +:105F60008D839E8380916C04843009F0F7CA109170 +:105F7000E9001F709091EC00892F817090FD80E8FE +:105F8000182B82E08093E9008091E80080FF0DC02B +:105F900050E040E060E270E0CE0101960E940D0703 +:105FA0008091E8008E778093E8001F701093E900DD +:105FB000D5CADE011396EFE4F3E081918D9323E0DF +:105FC000E935F207D1F7CECF8A81823059F46B815F +:105FD0007C818D819E810E94373586E290E00E940F +:105FE0007135C0CF8FEF8983BDCF4C816B818A81A2 +:105FF0000E947A149827892798279E838D83B2CF91 +:106000000D811E811027012710278A81EB803EE039 +:10601000E39E700111249CE8899FE00CF11C11247F +:106020008C8190E0880F991FE80EF91E612FC7013F +:1060300087960E947135602FC7018896D0CF0E9445 +:10604000FE1390CF8A818138C1F060F4803809F066 +:1060500089CF20E04B8160917904809178040E947F +:106060003A1580CF8238E9F0833809F07BCF20E001 +:1060700040917A046C818B81F2CF60E08B810E9429 +:1060800051168B81811103C00E94CD0F6BCF80917F +:10609000770481608093770460E086950E945116B2 +:1060A00061CF8B8180937B045DCF8A81813899F0A9 +:1060B00030F4803809F056CF80917A0440CF82388E +:1060C00091F0833809F04ECF809178048B838091D2 +:1060D00079048C8347CF8091770480FF02C0869536 +:1060E0002ECF80E02CCF80917B0429CF6091770464 +:1060F000709178048091790490917A040E94281517 +:1061000031CF80E18A832ECF81E08A838DE117CF62 +:10611000CA80DB80DC24CD24DC248E010F5F1F4F7E +:10612000EC80E00EF12EF11CC6018D519D4F0E1535 +:106130001F0509F417CFADE1CA16A1E0DA0650F445 +:106140000E945D35F8018483BFEFCB1ADB0A0F5F35 +:106150001F4FEACFD80114961C92F6CF0A811B81FB +:10616000102701271027FE0131966F01EC80E00E09 +:10617000F12EF11CC8018D519D4FE016F10609F476 +:10618000F1CE0D31F1E01F0728F4D60114966C9181 +:106190000E947135BFEFCB1ADB0A0F5F1F4FEACFAA +:1061A0000E94EE13DFCE85E0ADCFCA80DB80DC2419 +:1061B000CD24DC248E010F5F1F4FEC80E00EF12E0A +:1061C000F11CC6018796E016F10609F4CBCEECEB84 +:1061D000CE16E2E0DE0658F40E945D35D801149632 +:1061E0008C93FFEFCF1ADF0A0F5F1F4FEACFF80142 +:1061F0001482F7CF0A811B811027012710279E01E7 +:106200002F5F3F4F6901EC80E00EF12EF11CC801B9 +:106210008796E016F10609F4A5CE0C3B32E0130791 +:1062200028F4D60114966C910E947135BFEFCB1AF9 +:10623000DB0A0F5F1F4FEBCF09BD19BD09B400FE8C +:10624000FDCF8091D8008F7D8093D8008091E000B1 +:1062500082608093E0008091E00081FDFCCF10928D +:106260005F040E94E20F75CB86E290E00E945D35EC +:106270001B821C821D828E8375CE1092B9008CE029 +:106280008093B80008959F92AF92BF92CF92DF9211 +:10629000EF92FF920F931F93CF93DF93B82EEB01F2 +:1062A0000E94F21B6C01EE24E394F12CC431D10561 +:1062B00060F025E0E22EF12CCF3FDC0731F0CE017B +:1062C00064E170E00E94FD347B0184EAA82E94E82A +:1062D000992E1092BC00A092BC000E94F21B8C016F +:1062E0008091BC0087FF0DC08091B900887F883005 +:1062F00039F18091B900887F803111F10FEF1FEFE4 +:1063000009C00E94F21B801B910B8E159F0540F364 +:106310000EEF1FEFCF3FDC07E1F2C6010E94E31B47 +:106320008C179D07B0F2C801DF91CF911F910F919B +:10633000FF90EF90DF90CF90BF90AF909F90089527 +:10634000B092BB009092BC000E94F21B8C01809125 +:10635000BC0087FF0AC08091B900887F883111F0A6 +:10636000803461F610E000E0DECF0E94F21B801B5B +:10637000910B8E159F0558F3CBCF0F931F93CF939F +:10638000DF93EB018093BB0084E88093BC000E9404 +:10639000F21B8C018091BC0087FF11C02091B900D5 +:1063A000287F81E090E0283211F490E080E0919520 +:1063B00081959109DF91CF911F910F910895CF3F62 +:1063C000DC0741F30E94F21B801B910B8C179D0789 +:1063D00008F38EEF9FEFEECF0F931F93CF93DF93D2 +:1063E000EC0184EC8093BC000E94F21B8C01809134 +:1063F000BC0087FF08C08091BB0090E0DF91CF9187 +:106400001F910F910895CF3FDC0789F30E94F21B83 +:10641000801B910B8C179D0750F38EEF9FEFEECFF3 +:106420000F931F93CF93DF93EC0184E88093BC001C +:106430000E94F21B8C018091BC0087FF08C08091F4 +:10644000BB0090E0DF91CF911F910F910895CF3F56 +:10645000DC0789F30E94F21B801B910B8C179D07B0 +:1064600050F38EEF9FEFEECFCF92DF92EF92FF923D +:106470000F931F93CF93DF936B018A017901B901C9 +:106480000E944331E6010C0D1D1DC017D10761F4B8 +:1064900024E92093BC00DF91CF911F910F91FF90D1 +:1064A000EF90DF90CF90089597FDF2CFB7018991DB +:1064B0000E94BD31EACFCF92DF92EF92FF920F930D +:1064C0001F93CF93DF93C62F6A017901B8010E9411 +:1064D000433197FD0CC0B8018C2F0E94BD31E601FD +:1064E000EC0CFD1CCE15DF0511F097FF0CC024E964 +:1064F0002093BC00DF91CF911F910F91FF90EF90FF +:10650000DF90CF900895B80189910E94BD31EACF04 +:10651000CF92DF92EF92FF920F931F93CF93DF936F +:10652000F82EE62EEA016901B8010E94433197FD79 +:1065300015C0B8018E2D0E94BD3197FD0FC0B80166 +:106540008F2D81600E944331F12CE12C21E0C21A91 +:10655000D108EC14FD0400F597FF11C024E9209345 +:10656000BC001816190614F490E080E0DF91CF917A +:106570001F910F91FF90EF90DF90CF900895C80189 +:106580000E94EC3197FD04C0FE01EE0DFF1D8083DB +:106590002FEFE21AF20ADDCF97FDE0CFC8010E948B +:1065A000103297FDDBCFCC0DDD1D8883D7CF84E97A +:1065B0008093BC0008958EE14A9B02C08150E1F7B0 +:1065C0004A9BFECF08955A9880E28A95F1F75A9A2D +:1065D0000895FC013BE03A95F1F798E020E080E077 +:1065E00031E040E14A95F1F7880F4A9B02C0816093 +:1065F000232742E04A95F1F7000040E14A95F1F780 +:10660000915079F790E19A95F1F799B132E03A9586 +:10661000F1F7000040E14A95F1F792FB992790F9D4 +:1066200092272081920F90830895EF92FF920F930B +:106630001F93CF93DF930F92CDB7DEB719828C01F2 +:106640007C01E60EF11C0E151F0561F481E09981B5 +:10665000911180E00F90DF91CF911F910F91FF90EA +:10666000EF9008950E94DB32CE0101960E94E9323C +:10667000F80181938F01E7CF529A5A9A0895529860 +:106680005A9AEA9AE9E6F0E080818F7C8083089547 +:106690006150770B91E001C0990F6A95EAF720E00D +:1066A00031E0911108C0222391F05A9A80E28A9534 +:1066B000F1F75A980895492F482339F05A9A232719 +:1066C00040E24A95F1F79695ECCF5A98F9CF5A984F +:1066D000EDCFFF920F931F93CF93DF93EC018C01CB +:1066E000060F111DC017D10731F4DF91CF911F9113 +:1066F0000F91FF900895F9900E94E33268E08F2D8A +:106700000E944833EFCF1F920F920FB60F921124C1 +:10671000EF92FF920F931F932F933F934F935F93AB +:106720006F937F938F939F93AF93BF93EF93FF9359 +:10673000CF93DF930F92CDB7DEB719820E94DB3281 +:10674000CE0101960E94E932A82FA695A695A6959E +:10675000282F229525709A2F9570290F922F9370CC +:1067600026952695920F982797708981982B09F086 +:1067700075C0A83008F072C080E18A95F1F75A9A86 +:10678000529AB2E0BA95F1F700C05A98EA2EF12C6D +:10679000EAE0AE9FD0011124AF5FBE4F1896ED9195 +:1067A000FC9119973097B1F06091F8017091F9015F +:1067B00016962D913C911797260F371F13968D91A2 +:1067C0009C911497680F791F15964C911597129606 +:1067D0008C9109958AE08E9DF0018F9DF00D11241A +:1067E000EF5FFE4F6581662351F02091F8013091F3 +:1067F000F90186819781820F931F0E9469330E945D +:10680000E332F0E1FA95F1F75A9852985A9A80E1FA +:106810008A95F1F78AE08E9D80018F9D100D1124DD +:106820000F5F1E4FD80112966C911297662371F17B +:106830002091F8013091F90113968D919C91820F6E +:10684000931F0E941533D801ED91FC91882311F01C +:1068500088E001C082E080830E94DB320F90DF91EC +:10686000CF91FF91EF91BF91AF919F918F917F91C8 +:106870006F915F914F913F912F911F910F91FF90D9 +:10688000EF900F900FBE0F901F901895ED91FC9117 +:10689000DFCF0F931F93CF93DF93EC0108970CF09A +:1068A000A9C08AE08C9FF0018D9FF00D1124EF5F4D +:1068B000FE4F80819181892B09F49CC0F894529AF3 +:1068C0005A9885E08A95F1F700008C2F869585709F +:1068D0009C2F9570890F982F937086958695890FB8 +:1068E0008E0193E0000F111F9A95E1F7082B0E948B +:1068F000E33200C068E0802F0E944833A0E1AA95EF +:10690000F1F752985A9A4A9B27C087E090E04A993B +:1069100025C08AE08C9F80018D9F100D11240F5F90 +:106920001E4FF80165816623A1F12091F801309195 +:10693000F90186819781820F931F0E94153381117F +:1069400028C0529A5A9AD801ED91FC9182E0808336 +:10695000789482E090E016C000C0D5CF0197B9F4DA +:10696000529A5A9A8AE08C9FF0018D9FF00D112463 +:10697000EF5FFE4F0190F081E02D81E080837894FD +:1069800081E090E0DF91CF911F910F91089500C0B9 +:10699000BECF0E94DB32B0E2BA95F1F75A98529A14 +:1069A000E0E1EA95F1F78AE08C9FF0018D9FF00D10 +:1069B0001124EF5FFE4F6281662351F02091F801B0 +:1069C0003091F90183819481820F931F0E94693372 +:1069D0000E94E3328AE08C9FF0018D9FF00D11241C +:1069E000EF5FFE4F0190F081E02D1082789490E0EF +:1069F00080E0C8CF84E090E0C5CFAA1BBB1B51E16B +:106A000007C0AA1FBB1FA617B70710F0A61BB70B1E +:106A1000881F991F5A95A9F780959095BC01CD01C3 +:106A20000895991B79E004C0991F961708F0961BEA +:106A3000881F7A95C9F78095089597FB072E16F45D +:106A4000009407D077FD09D00E94FD3407FC05D0E3 +:106A50003EF4909581959F4F0895709561957F4F75 +:106A60000895EE0FFF1F0590F491E02D099469271A +:106A7000962769277827872778270895FB01DC0167 +:106A800002C005900D9241505040D8F70895FB0187 +:106A9000DC0104C08D910190801921F441505040D7 +:106AA000C8F7881B990B0895FB01DC0102C0019017 +:106AB0000D9241505040D8F70895F999FECF92BDFC +:106AC00081BDF89A992780B50895A6E1B0E044E029 +:106AD00050E00C949735A8E1B0E042E050E00C940F +:106AE0009735262FF999FECF92BD81BDF89A01976F +:106AF00000B4021639F01FBA20BD0FB6F894FA9A06 +:106B0000F99A0FBE08950396272F0E9472350E94AE +:106B10007135252F0E947235242F0C947235019601 +:106B2000272F0E9472350C947135DC01CB01FC01DA +:106B3000F999FECF06C0F2BDE1BDF89A319600B4D6 +:106B40000D9241505040B8F708950E94E73508F47F +:106B500081E00895E89409C097FB3EF490958095F4 +:106B6000709561957F4F8F4F9F4F9923A9F0F92F13 +:106B700096E9BB279395F695879577956795B79591 +:106B8000F111F8CFFAF4BB0F11F460FF1BC06F5F77 +:106B90007F4F8F4F9F4F16C0882311F096E911C089 +:106BA000772321F09EE8872F762F05C0662371F0AA +:106BB00096E8862F70E060E02AF09A95660F771FBE +:106BC000881FDAF7880F9695879597F90895990F9A +:106BD0000008550FAA0BE0E8FEEF16161706E807A7 +:106BE000F907C0F012161306E407F50798F0621BC8 +:106BF000730B840B950B39F40A2661F0232B242B9D +:106C0000252B21F408950A2609F4A140A6958FEFBB +:106C1000811D811D08950E941E360C948F360E949E +:106C2000813638F00E94883620F0952311F00C94BC +:106C300078360C947E3611240C94C3360E94A0360C +:106C400070F3959FC1F3950F50E0551F629FF001BF +:106C5000729FBB27F00DB11D639FAA27F00DB11DD8 +:106C6000AA1F649F6627B00DA11D661F829F222761 +:106C7000B00DA11D621F739FB00DA11D621F839FE8 +:106C8000A00D611D221F749F3327A00D611D231FBE +:106C9000849F600D211D822F762F6A2F11249F570C +:106CA00050409AF0F1F088234AF0EE0FFF1FBB1F0F +:106CB000661F771F881F91505040A9F79E3F5105CE +:106CC00080F00C9478360C94C3365F3FE4F3983E22 +:106CD000D4F3869577956795B795F795E7959F5F78 +:106CE000C1F7FE2B880F911D9695879597F908950A +:106CF00097F99F6780E870E060E008959FEF80EC6F +:106D0000089500240A941616170618060906089511 +:106D100000240A9412161306140605060895092E77 +:106D20000394000C11F4882352F0BB0F40F4BF2BE6 +:106D300011F460FF04C06F5F7F4F8F4F9F4F089526 +:106D400057FD9058440F551F59F05F3F71F047951C +:106D5000880F97FB991F61F09F3F79F08795089501 +:106D6000121613061406551FF2CF4695F1DF08C020 +:106D7000161617061806991FF1CF8695710561053D +:106D800008940895E894BB2766277727CB0197F9E5 +:106D90000895F894FFCFD210FA104D11FA104D114A +:106DA0002D1165114D1162126F12FA14FA140315A8 +:106DB00003150515031503150315FA14FA140A151E +:106DC000031503150A154F1CC51CC81CDC1CDF1C51 +:106DD000F21CFB1C1F1D651D971DAB1D311D541D95 +:106DE000ED20ED204621462178212021202120215F +:106DF00092210322132213229D2FA12FE42FF52F7E +:106E000000301F30223055307630F22FF22F813093 +:0E6E100084308830AE30D030D330D530FA30F8 +:106E1E0001380200000001000000003802000000EE +:106E2E0005010000003802000000010600000038D5 +:106E3E0002000000010700000038020408000000F4 +:106E4E000000003802090C000000000000380201AA +:106E5E001500000000000036323331F7F6676697F2 +:106E6E00C6343500000000000180004708160EF5FC +:106E7E000DF10DED0DF4F5010021007F2200030050 +:106E8E004A004A4A01F6F731333236674C415945CA +:106E9E00520042617365200047616D6520005261AA +:106EAE00697365004C6F776572004C4F434B00431E +:106EBE00617073004E756D005363726C002020205C +:106ECE00202000534F4C415200544D5053540081DA +:106EDE008283E200E900EA00B500B600B700CD00FB +:106EEE008301CC008A019201940121022302240223 +:106EFE002502260227022A02B300B4006F0070009A +:106F0E000603060806010606AF0200FF0100010097 +:106F1E0000FFFF0000010001FF000008101818100C +:106F2E0008000001020202020202020202024022D4 +:0E6F3E007B71014F01D400D00BE90B090C0050 :00000001FF From b11ea2735af4c601363848fa220e437ff24638bb Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Thu, 25 Nov 2021 16:14:17 +0800 Subject: [PATCH 070/155] Update all via keymaps keymaps of q1 series. KC_TASK and KC_FLXP are now defined using the VIA user keycodes range so they can be renamed "TASK" and "TILE" as a shortName in VIA. --- .../keychron/q1/rev_0100/keymaps/via/keymap.c | 24 ++++++++++++++++--- .../q1/rev_0101/keymaps/default/keymap.c | 2 +- .../keychron/q1/rev_0101/keymaps/via/keymap.c | 24 ++++++++++++++++--- keyboards/keychron/q1/rev_0101/rev_0101.h | 2 +- .../keychron/q1/rev_0102/keymaps/via/keymap.c | 24 ++++++++++++++++--- 5 files changed, 65 insertions(+), 11 deletions(-) diff --git a/keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c index 3b63c6d5dd6b..1e6316782d57 100644 --- a/keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c +++ b/keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c @@ -25,11 +25,11 @@ enum layers{ enum custom_keycodes { KC_MISSION_CONTROL = USER00, - KC_LAUNCHPAD + KC_LAUNCHPAD, + KC_TASK, + KC_FLXP }; -#define KC_TASK LGUI(KC_TAB) -#define KC_FLXP LGUI(KC_E) #define KC_MCTL KC_MISSION_CONTROL #define KC_LPAD KC_LAUNCHPAD @@ -83,6 +83,24 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { host_consumer_send(0); } return false; // Skip all further processing of this key + case KC_TASK: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_TAB); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_TAB); + } + return false; // Skip all further processing of this key + case KC_FLXP: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_E); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_E); + } + return false; // Skip all further processing of this key default: return true; // Process all other keycodes normally } diff --git a/keyboards/keychron/q1/rev_0101/keymaps/default/keymap.c b/keyboards/keychron/q1/rev_0101/keymaps/default/keymap.c index c9f6ecf47a24..92806bf9fe52 100644 --- a/keyboards/keychron/q1/rev_0101/keymaps/default/keymap.c +++ b/keyboards/keychron/q1/rev_0101/keymaps/default/keymap.c @@ -87,4 +87,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { default: return true; // Process all other keycodes normally } -} \ No newline at end of file +} diff --git a/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c index c7c4d76bc95b..db16e8baae1a 100644 --- a/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c +++ b/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c @@ -25,11 +25,11 @@ enum layers{ enum custom_keycodes { KC_MISSION_CONTROL = USER00, - KC_LAUNCHPAD + KC_LAUNCHPAD, + KC_TASK, + KC_FLXP }; -#define KC_TASK LGUI(KC_TAB) -#define KC_FLXP LGUI(KC_E) #define KC_MCTL KC_MISSION_CONTROL #define KC_LPAD KC_LAUNCHPAD @@ -125,6 +125,24 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { host_consumer_send(0); } return false; // Skip all further processing of this key + case KC_TASK: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_TAB); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_TAB); + } + return false; // Skip all further processing of this key + case KC_FLXP: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_E); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_E); + } + return false; // Skip all further processing of this key default: return true; // Process all other keycodes normally } diff --git a/keyboards/keychron/q1/rev_0101/rev_0101.h b/keyboards/keychron/q1/rev_0101/rev_0101.h index 2a1ef3b05f74..132003c4f171 100644 --- a/keyboards/keychron/q1/rev_0101/rev_0101.h +++ b/keyboards/keychron/q1/rev_0101/rev_0101.h @@ -49,4 +49,4 @@ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \ { K40, xxx, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }, \ { K50, K51, K52, xxx, xxx, xxx, K56, xxx, xxx, xxx, K5A, K5B, K5C, K5D, K5E } \ - } \ No newline at end of file + } diff --git a/keyboards/keychron/q1/rev_0102/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0102/keymaps/via/keymap.c index 0656a232e16e..d1652e65da48 100644 --- a/keyboards/keychron/q1/rev_0102/keymaps/via/keymap.c +++ b/keyboards/keychron/q1/rev_0102/keymaps/via/keymap.c @@ -25,11 +25,11 @@ enum layers{ enum custom_keycodes { KC_MISSION_CONTROL = USER00, - KC_LAUNCHPAD + KC_LAUNCHPAD, + KC_TASK, + KC_FLXP }; -#define KC_TASK LGUI(KC_TAB) -#define KC_FLXP LGUI(KC_E) #define KC_MCTL KC_MISSION_CONTROL #define KC_LPAD KC_LAUNCHPAD @@ -83,6 +83,24 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { host_consumer_send(0); } return false; // Skip all further processing of this key + case KC_TASK: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_TAB); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_TAB); + } + return false; // Skip all further processing of this key + case KC_FLXP: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_E); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_E); + } + return false; // Skip all further processing of this key default: return true; // Process all other keycodes normally } From 93194d47f3839daf5cd7ac302f19889d8ee68a7c Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Thu, 25 Nov 2021 19:58:44 -0500 Subject: [PATCH 071/155] Add standing timer, update LED code, code optimizations --- keyboards/solartempest/ps17/config.h | 55 ++++--- .../solartempest/ps17/keymaps/via/config.h | 2 +- .../solartempest/ps17/keymaps/via/keymap.c | 152 +++++++++++++----- .../solartempest/ps17/keymaps/via/rules.mk | 2 +- .../solartempest/ps17/ps17 VIA keymap.json | 5 + .../solartempest/ps17/ps17 VIA layout.json | 2 +- keyboards/solartempest/ps17/ps17.c | 27 ++-- keyboards/solartempest/ps17/readme.md | 5 +- keyboards/solartempest/ps17/rules.mk | 33 ++-- 9 files changed, 192 insertions(+), 91 deletions(-) diff --git a/keyboards/solartempest/ps17/config.h b/keyboards/solartempest/ps17/config.h index 5baf2cc7f6b7..98a8933f6b37 100644 --- a/keyboards/solartempest/ps17/config.h +++ b/keyboards/solartempest/ps17/config.h @@ -36,18 +36,34 @@ #define MATRIX_ROWS 11 //Numpad actually has 6 rows. 5 rows were added for underglow RGB matrix to work together #endif #define MATRIX_COLS 4 +#define MATRIX_ROW_PINS { F0, B4, B5, B6, C6, C7 } //Rotary encoder SPST is on F0,F7 +#define MATRIX_COL_PINS { F6, F7, D3, D6 } +#define DIODE_DIRECTION COL2ROW +#define DEBOUNCE 5 //Default is 5, 0 if not needed. // Encoder matrix #define ENCODERS_PAD_A { D1 } #define ENCODERS_PAD_B { D2 } -//#define ENCODER_DIRECTION_FLIP -#define MATRIX_ROW_PINS { F0, B4, B5, B6, C6, C7 } //Rotary encoder SPST is on F0,F7 -#define MATRIX_COL_PINS { F6, F7, D3, D6 } -#define UNUSED_PINS +// NKRO Settings +#ifdef NKRO_ENABLE + #define FORCE_NKRO //Force NKRO if enabled. +#endif -// COL2ROW or ROW2COL -#define DIODE_DIRECTION COL2ROW +// Combo settings +#ifdef COMBO_ENABLE + #define COMBO_COUNT 6 //Number of tap combos used + #define COMBO_TERM 400 //Default combo time is 200ms +#endif + +// Tapping settings +#define TAP_CODE_DELAY 10 +#define TAPPING_TOGGLE 2 //Tap TT twice to toggle layer +#define TAPPING_TERM 160 //Tapping duration in ms + +// Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap. +#define LOCKING_SUPPORT_ENABLE +#define LOCKING_RESYNC_ENABLE // Locking resynchronize hack // For LED status indicators #define LED_NUM_LOCK_PIN D0 @@ -57,16 +73,16 @@ #define RGB_DI_PIN B7 #ifdef RGBLIGHT_ENABLE - #define RGBLED_NUM 28 // 17 key + 11 underglow for RGBLIGHT + #define RGBLED_NUM 28 //17 key + 11 underglow for RGBLIGHT #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 - #define RGBLIGHT_DEFAULT_VAL 40 // default brightness on clearing EEPROM - #define RGBLIGHT_LIMIT_VAL 180 // brightness level max is 255 - #define RGBLIGHT_LAYERS + #define RGBLIGHT_DEFAULT_VAL 40 //Default brightness on clearing EEPROM + #define RGBLIGHT_LIMIT_VAL 180 //Brightness level max is 255 + #define RGBLIGHT_LAYERS //Enable layer light indicators #define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF - #define RGBLIGHT_SLEEP // if defined, RGB lighting off when host is sleeping - #define RGBLIGHT_ANIMATIONS + #define RGBLIGHT_SLEEP //Turn off LEDs when computer sleeping (+72) + #define RGBLIGHT_ANIMATIONS //Very memory intensive (+2604) //RGB LED Conversion macro from physical array to electric array //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping @@ -93,7 +109,7 @@ 27, 26, 25, 24, 23 ) #endif -#ifdef RGB_MATRIX_ENABLE // For dynamic/reactive RGB Matrix effects +#ifdef RGB_MATRIX_ENABLE // For reactive RGB Matrix effects #define DRIVER_LED_TOTAL 28 // The number of LEDs connected for matrix, 17 key + 11 underglow #define RGB_MATRIX_CENTER { 126, 126 }; #define RGB_MATRIX_KEYPRESSES @@ -130,16 +146,3 @@ #define DISABLE_RGB_MATRIX_SOLID_SPLASH #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH #endif - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -#define COMBO_COUNT 6 //Number of tap combos used -#define COMBO_TERM 400 //Default combo time is 200ms - -#define TAPPING_TERM 200 //Tap dance time diff --git a/keyboards/solartempest/ps17/keymaps/via/config.h b/keyboards/solartempest/ps17/keymaps/via/config.h index 4bbacd9a507b..9083208b5fc3 100644 --- a/keyboards/solartempest/ps17/keymaps/via/config.h +++ b/keyboards/solartempest/ps17/keymaps/via/config.h @@ -18,5 +18,5 @@ #pragma once -// Set 10 layers for VIA +// Set number of layers for VIA (+30 per layer) #define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/solartempest/ps17/keymaps/via/keymap.c b/keyboards/solartempest/ps17/keymaps/via/keymap.c index 8077ca9122c8..d0383cdc91a4 100644 --- a/keyboards/solartempest/ps17/keymaps/via/keymap.c +++ b/keyboards/solartempest/ps17/keymaps/via/keymap.c @@ -26,11 +26,17 @@ bool is_alt_tab_active = false; // Super Alt Tab Code uint16_t alt_tab_timer = 0; -bool spam_arrow; +bool spam_arrow; // Spam F24 or other keys like arrows Code uint16_t spam_timer = false; -uint16_t spam_interval = 1000; // (1000ms == 1s) +uint16_t spam_interval = 1000; // (1000ms == 1s) + +bool teams_muted; // Teams muted simple LED indicator + +bool is_stretch_active = false; // Stretch Timer Code +bool is_stretch_time = false; +uint16_t stretch_timer = 0; +uint16_t stretch_minutes = 0; -bool teams_muted; #ifdef VIA_ENABLE enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. ATABF = USER00, //Alt tab forwards @@ -38,7 +44,8 @@ bool teams_muted; NMR, //Move window to monitor on right NML, //Move window to monitor on left SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. - TEAMSMUTE //MS Teams mute shortcut and simple LED status + TEAMSMUTE, //MS Teams mute shortcut and simple LED status + STRT //Stretch Timer }; #else enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. @@ -47,7 +54,8 @@ bool teams_muted; NMR, //Move window to monitor on right NML, //Move window to monitor on left SPAMARROW, //Spam arrows. Updated to send F24 instead, which is more convenient. - TEAMSMUTE //MS Teams mute shortcut and simple LED status + TEAMSMUTE, //MS Teams mute shortcut and simple LED status + STRT //Stretch Timer }; #endif @@ -76,7 +84,7 @@ bool teams_muted; }; #endif -#ifdef TAP_DANCE_ENABLE// Tap Dance definitions. Not VIA compatible. +#ifdef TAP_DANCE_ENABLE// Tap Dance definitions. Not compatible with VIA. enum { TD_MINUS_NUMLOCK, }; @@ -185,22 +193,57 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -void matrix_scan_user(void) { //run whenever user matrix is scanned - if (is_alt_tab_active) { +void matrix_scan_user(void) { + if (is_alt_tab_active) { //Super alt tab code if (timer_elapsed(alt_tab_timer) > 1000) { unregister_code(KC_LALT); is_alt_tab_active = false; } } if (spam_arrow && timer_elapsed(spam_timer) >= spam_interval) { - spam_timer = timer_read(); + spam_timer = timer_read(); //Spam arrow code tap_code(KC_F24); } + + #ifdef RGBLIGHT_ENABLE + if (is_stretch_active && !is_stretch_time) { //Stretch timer code + if(timer_elapsed(stretch_timer)>60000) { //1 minute in ms has passed. Timer is uint16 max. + stretch_minutes++; + stretch_timer = timer_read(); + } + if (stretch_minutes > 30) { //Change RGB animation effect after set number of minutes. 30 minutes is a good interval. + rgblight_set_effect_range(0, 28); + rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); + is_stretch_time = true; + stretch_minutes = 0; + } + } + + if(!is_stretch_time){ //Update LED status indicators when stretch animation is not playing. + if(is_stretch_active==1) { + rgblight_sethsv_at(0,230,100,8); //Set LED to orange to indicate timer is on + rgblight_sethsv_at(0,230,100,9); //Set LED to orange to indicate timer is on + rgblight_sethsv_at(0,230,100,13); //Set LED to orange to indicate timer is on + } + + if(teams_muted==1) { //Check and display teamsmuted status + rgblight_sethsv_at(15,255,120,18); + rgblight_sethsv_at(15,255,120,22); + } + + if(spam_arrow==1) { //Change LED colour on bottom row and underglow to orange to indicate on + rgblight_sethsv_at(15,255,120,24); + rgblight_sethsv_at(15,255,120,25); + rgblight_sethsv_at(15,255,120,26); + rgblight_sethsv_at(15,255,120,27); + } + } + #endif }; bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { //For keycode overrides - case ATABF: //Alt tab forwards + case ATABF: //Super alt tab forwards if (record->event.pressed) { if (!is_alt_tab_active) { is_alt_tab_active = true; @@ -212,7 +255,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { unregister_code(KC_TAB); } return true; - case ATABR: //Alt tab reverse + case ATABR: //Super alt tab reverse if (record->event.pressed) { if (!is_alt_tab_active) { is_alt_tab_active = true; @@ -248,26 +291,26 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return true; - case SPAMARROW: // Moves arrow up and down + case SPAMARROW: // Spam F24 or other keys like arrows if (record->event.pressed) { spam_arrow ^= 1; spam_timer = timer_read(); - if(spam_arrow==1) { //Change LED colour on bottom row and underglow to orange to indicate on - rgblight_sethsv_at(15,255,120,24); - rgblight_sethsv_at(15,255,120,25); - rgblight_sethsv_at(15,255,120,26); - rgblight_sethsv_at(15,255,120,27); - } - else { - rgblight_sethsv_at(180,255,120,24); //Set LEDs back to purple, assuming on that coloured layer - rgblight_sethsv_at(180,255,120,25); - rgblight_sethsv_at(180,255,120,26); - rgblight_sethsv_at(180,255,120,27); - } + #ifdef RGBLIGHT_ENABLE + if(spam_arrow==1) { //Change LED colour on bottom row and underglow to orange to indicate on + rgblight_sethsv_at(15,255,120,24); + rgblight_sethsv_at(15,255,120,25); + rgblight_sethsv_at(15,255,120,26); + rgblight_sethsv_at(15,255,120,27); + } + else { + rgblight_set_effect_range(0, 28); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set back to layer colours + } + #endif } return false; - case TEAMSMUTE: //Mute MS teams and simply change LED for key 1 colour + case TEAMSMUTE: //Mute MS teams shortcut and simply change LED for key 1 colour if (record->event.pressed) { register_code(KC_LCTRL); register_code(KC_LSFT); @@ -276,23 +319,60 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { unregister_code(KC_LSFT); unregister_code(KC_LCTRL); teams_muted ^= 1; - if(teams_muted==1) { //Change LED colour on LEDs for key 1 and underglow to orange to indicate muted - rgblight_sethsv_at(15,255,120,18); - rgblight_sethsv_at(15,255,120,22); - } - else { - rgblight_sethsv_at(175,255,120,18); //Set LEDs back to violet, assuming on that coloured layer - rgblight_sethsv_at(175,255,120,22); - } + #ifdef RGBLIGHT_ENABLE + if(teams_muted==1) { //Change LED colour on LEDs for key 1 and underglow to orange to indicate muted + rgblight_sethsv_at(15,255,120,18); + rgblight_sethsv_at(15,255,120,22); + } + else { + rgblight_sethsv_at(175,255,120,18); //Set LEDs back to violet, assuming on that coloured layer + rgblight_sethsv_at(175,255,120,22); + } + #endif } return true; + + + case STRT: //Stretch timer + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + is_stretch_active ^= 1; + stretch_timer = timer_read(); + //rgblight_sethsv_at(75,215,80,41); + if(is_stretch_time==1) { //Check if it is time to stretch, then dismiss the animation. + rgblight_set_effect_range(0, 28); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); + rgblight_sethsv_at(0,230,100,8); //Set LED to orange to indicate timer is on + rgblight_sethsv_at(0,230,100,9); //Set LED to orange to indicate timer is on + rgblight_sethsv_at(0,230,100,13); //Set LED to orange to indicate timer is on + is_stretch_active = 1; + is_stretch_time = 0; + stretch_minutes = 0; + } + else if(is_stretch_active==1) { + rgblight_set_effect_range(0, 28); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); + rgblight_sethsv_at(0,230,100,8); //Set LED to orange to indicate timer is on + rgblight_sethsv_at(0,230,100,9); //Set LED to orange to indicate timer is on + rgblight_sethsv_at(0,230,100,13); //Set LED to orange to indicate timer is on + is_stretch_time = 0; + stretch_minutes = 0; + } + else { + rgblight_set_effect_range(0, 28); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set back to layer colours -- CHECK LAYERS RESET LED STATUS + is_stretch_time = 0; + stretch_minutes = 0; + } + #endif + } + return false; } return true; } - -void keyboard_post_init_user(void) { //run as last task in keyboard init +void keyboard_post_init_user(void) { #ifdef RGB_MATRIX_ENABLE //NOTE 1: Layer lighting doesn't work in RGB matrix mode //NOTE 2: VIA lighting tab doesn't work and might crash in RGB matrix mode @@ -329,7 +409,7 @@ layer_state_t layer_state_set_user(layer_state_t state) { switch(biton32(state)){ // Change all other LEDs based on layer state as well case 0: rgblight_sethsv_noeeprom(50,255,100); - //You can selectively decrease certain LEDs if you are have a clear acrylic case and the shine-through bothers you. Rgblight_sethsv_at() can be used here for those LEDs (0, 2, 4, 14, and 23). Otherwise some black tape on the acrylic plate or foam underneath the FR4 will do the trick. + //You can selectively decrease certain LEDs if you are have a clear acrylic case and the shine-through is bothersome. Rgblight_sethsv_at() can be used here for those LEDs (0, 2, 4, 14, and 23). Otherwise some black tape on the acrylic plate or foam underneath the FR4 plate will do the trick. break; case 1: rgblight_sethsv_noeeprom(5,255,100); diff --git a/keyboards/solartempest/ps17/keymaps/via/rules.mk b/keyboards/solartempest/ps17/keymaps/via/rules.mk index 1e5b99807cb7..d50c3fb8e377 100644 --- a/keyboards/solartempest/ps17/keymaps/via/rules.mk +++ b/keyboards/solartempest/ps17/keymaps/via/rules.mk @@ -1 +1 @@ -VIA_ENABLE = yes +VIA_ENABLE = yes #Enable VIA (+1556) diff --git a/keyboards/solartempest/ps17/ps17 VIA keymap.json b/keyboards/solartempest/ps17/ps17 VIA keymap.json index d906b47dbb7a..7df873bcce6b 100644 --- a/keyboards/solartempest/ps17/ps17 VIA keymap.json +++ b/keyboards/solartempest/ps17/ps17 VIA keymap.json @@ -34,6 +34,11 @@ "name": "Teams Muted", "title": "Simply Change LED of 1 to show if muted or not", "shortName": "TM" + }, + { + "name": "Stretch Timer", + "title": "Activate Stretch Timer", + "shortName": "STRT" } ], "layouts": diff --git a/keyboards/solartempest/ps17/ps17 VIA layout.json b/keyboards/solartempest/ps17/ps17 VIA layout.json index bdebf13b15c1..8716ead03f2d 100644 --- a/keyboards/solartempest/ps17/ps17 VIA layout.json +++ b/keyboards/solartempest/ps17/ps17 VIA layout.json @@ -67,7 +67,7 @@ "C(S(KC_TAB))", "KC_UP", "C(KC_TAB)", - "KC_CAPS", + "USER06", "KC_LEFT", "KC_DOWN", "KC_RGHT", diff --git a/keyboards/solartempest/ps17/ps17.c b/keyboards/solartempest/ps17/ps17.c index b310548fcdbf..9ec609d6b4dd 100644 --- a/keyboards/solartempest/ps17/ps17.c +++ b/keyboards/solartempest/ps17/ps17.c @@ -19,20 +19,29 @@ #include "ps17.h" bool encoder_update_user(uint8_t index, bool clockwise) { // QMK encoder functionality #ifdef VIA_ENABLE //Add in VIA setting of rotary encoder keymap - if (index == 0) { // First encoder - if (clockwise) { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) }); //Time is 1 tick otherwise empty event - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) }); - } - else { - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) }); - action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) }); - } + if (index == 0) { //First encoder + if (clockwise) { + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = true, .time = (timer_read() | 1) }); //Time is 1 tick otherwise empty event + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 0}, .pressed = false, .time = (timer_read() | 1) }); + } + else { + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = true, .time = (timer_read() | 1) }); + action_exec((keyevent_t){.key = (keypos_t){.row = 0, .col = 2}, .pressed = false, .time = (timer_read() | 1) }); + } + } + #else //Assign rotary encoder function here if VIA not enabled + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); } + } #endif return true; } + #ifdef RGB_MATRIX_ENABLE //Add in addressable LED underglow support with physical locations led_config_t g_led_config = { { //Key matrix to LED index diff --git a/keyboards/solartempest/ps17/readme.md b/keyboards/solartempest/ps17/readme.md index bd9504222899..f6a82d203a20 100644 --- a/keyboards/solartempest/ps17/readme.md +++ b/keyboards/solartempest/ps17/readme.md @@ -15,11 +15,12 @@ For detailed instructions on using VIA and flashing, please refer to the section - Remappable rotary encoder controls volume up/down/mute. - Allows for remapping of per-layer rotary encoder functions in VIA. - VIA support included by default. -- RGB underglow and matrix support and remapped to physical locations (nicer gradient and effects). +- RGB underglow and matrix support and remapped to physical locations for nicer gradient and effects. - Adds custom layer lighting with custom gradients for each. - Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders. - Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders. -- Adds key combo functionality for backspace, delete, and arrow keys. +- Custom macro key in VIA for Stretch Timer. It animates the LEDs after 30 minutes as a reminder to stand up and stretch. Push to dismiss. +- Adds key combo functionality for backspace, delete, and arrow keys. Plus+8/9 along with Enter+4/5/6/8. ## Make and Flashing diff --git a/keyboards/solartempest/ps17/rules.mk b/keyboards/solartempest/ps17/rules.mk index 35a150e0997b..4e6a51aa5994 100644 --- a/keyboards/solartempest/ps17/rules.mk +++ b/keyboards/solartempest/ps17/rules.mk @@ -5,19 +5,22 @@ MCU = atmega32u4 BOOTLOADER = atmel-dfu # Build Options -# change yes to no to disable -# +# Comment out to disable the options. -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration -CONSOLE_ENABLE = no # Console for debug -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -NKRO_ENABLE = yes # USB Nkey Rollover -RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow -RGB_MATRIX_ENABLE = no # RGB matrix for individual LED control -RGB_MATRIX_DRIVER = WS2812 # Addressable LED strand driver -UNICODE_ENABLE = yes # Unicode -ENCODER_ENABLE = yes # For encoder -LTO_ENABLE = yes # Reduce firmware size -COMBO_ENABLE = yes # Combos -TAP_DANCE_ENABLE = no # Tap dance +CONSOLE_ENABLE = no # Console for debug (+4686) +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration (+644) +MAGIC_ENABLE = no # Save space by not PROCESS_MAGIC, which is bootmagic with out the boot (+634) +GRAVE_ESC_ENABLE = no # Save space by not using KC_GESC (+127) +SPACE_CADET_ENABLE = no # Save space by not using space cadet left/right shift (+350) +LTO_ENABLE = yes # Save space by link time optimization + +MOUSEKEY_ENABLE = yes # Mouse keys (+1482) +EXTRAKEY_ENABLE = yes # Audio control and System control (+450) +NKRO_ENABLE = yes # NKRO (+328) +RGBLIGHT_ENABLE = yes # RGB lighting (+3826) +RGB_MATRIX_ENABLE = no # RGB matrix for reactive effects (-1068) +RGB_MATRIX_DRIVER = WS2812 # Addressable LED strand driver +UNICODE_ENABLE = yes # Unicode +ENCODER_ENABLE = yes # Rotary encoders (+1112) +COMBO_ENABLE = yes # Tap combo chording (+952) +TAP_DANCE_ENABLE = no # Tap dance (+1008). Not VIA compatible. From d66cd5a0d7020d9e7cd07e9fdaafec842225b4ab Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Thu, 25 Nov 2021 20:01:35 -0500 Subject: [PATCH 072/155] Update firmware for standing timer, code optimizations --- .../ps17/solartempest_ps17_via.hex | 2477 ++++++++--------- 1 file changed, 1228 insertions(+), 1249 deletions(-) diff --git a/keyboards/solartempest/ps17/solartempest_ps17_via.hex b/keyboards/solartempest/ps17/solartempest_ps17_via.hex index de3de60dfe06..1ebdd82124ae 100644 --- a/keyboards/solartempest/ps17/solartempest_ps17_via.hex +++ b/keyboards/solartempest/ps17/solartempest_ps17_via.hex @@ -1,9 +1,9 @@ :100000000C949E030C94E5030C94E5030C94E50317 :100010000C94E5030C94E5030C94E5030C94E503C0 -:100020000C94E5030C94E5030C94F6260C94B2268C -:100030000C94F1270C94E5030C94E5030C94E50370 +:100020000C94E5030C94E5030C9434260C94F02511 +:100030000C942F270C94E5030C94E5030C94E50332 :100040000C94E5030C94E5030C94E5030C94E50390 -:100050000C94E5030C94CD270C94E5030C94E50374 +:100050000C94E5030C940B270C94E5030C94E50336 :100060000C94E5030C94E5030C94E5030C94E50370 :100070000C94E5030C94E5030C94E5030C94E50360 :100080000C94E5030C94E5030C94E5030C94E50350 @@ -115,21 +115,21 @@ :10072000370000001203410054004C0041004E000D :1007300054004900530000000403090411241FBEA3 :10074000CFEFDAE0DEBFCDBF04B603FE27C0809155 -:10075000940390919503A0919603B09197038730ED -:10076000904BA740B04BD1F4109294031092950394 -:10077000109296031092970314BE84B7877F84BFAC +:100750009A0390919B03A0919C03B0919D038730D5 +:10076000904BA740B04BD1F410929A0310929B0388 +:1007700010929C0310929D0314BE84B7877F84BFA0 :100780000FB6F894A895809160008861809360000E :10079000109260000FBEE0E0F8E3099511E0A0E0E0 -:1007A000B1E0E4ECFEE502C005900D92A43CB10777 -:1007B000D9F723E0A4ECB1E001C01D92A439B2073F -:1007C000E1F70E9418280C94292F0C940000E8ED02 +:1007A000B1E0EEE7FDE502C005900D92A83CB1076F +:1007B000D9F723E0A8ECB1E001C01D92AA39B20735 +:1007C000E1F70E9456270C947F2E0C940000E8ED70 :1007D000F0E080818E7F80831092E2001092DA0038 :1007E0001092E100A0EEB0E08C9181608C9380814A :1007F0008F77808319BCA7EDB0E08C918E7F8C93AE -:1008000080818F7E80831092070308952091E400F9 +:1008000080818F7E80831092680308952091E40098 :100810003091E50095E6A9012091EC00822F8170CE :1008200020FF06C08091E80080FF06C080E00895A8 -:100830002091E80022FD1AC080912C03882389F0C2 +:100830002091E80022FD1AC080918E03882389F060 :10084000853089F08091EB0085FD0FC02091E40098 :100850003091E50042175307F9F29150E1F684E038 :10086000089582E0089583E0089581E00895EF926D @@ -138,9 +138,9 @@ :10089000E8008E778093E8000E940604882399F38D :1008A000C82F08C0F70181917F018093F1000150AA :1008B000110949F78C2FCF911F910F91FF90EF9065 -:1008C000089580912E0387FF13C08091E80082FF76 +:1008C00008958091900387FF13C08091E80082FF14 :1008D00006C08091E8008B778093E80004C0809187 -:1008E0002C038111F2CF089580912C038823D9F332 +:1008E0008E038111F2CF089580918E038823D9F36E :1008F0008091E80080FFF8CF8091E8008E77ECCF00 :10090000982F9093E900242F762F50E0891731F02B :100910007091EC002091ED005091F00021FD07C096 @@ -151,56 +151,56 @@ :1009600080E00895CF92DF92EF92FF920F931F9352 :10097000CF93DF93C8EDD0E088818F7E8883E7ED49 :10098000F0E080818160808384E082BF81E0809399 -:10099000070388818E7F888302EE10E0F8011082C1 +:10099000680388818E7F888302EE10E0F801108260 :1009A0001092DA0081EEC82ED12CF60110828881D7 :1009B0008F77888388818068888388818F7D88830A -:1009C00019BC10922C0310922D0310922B0310923D -:1009D0002A0390EEE92EF12CF70180818B7F808332 +:1009C00019BC10928E0310928F0310928D03109217 +:1009D0008C0390EEE92EF12CF70180818B7F8083D0 :1009E00088818160888342E060E080E00E9480042A :1009F000F60180818E7F8083F80180818160808311 :100A0000808188608083F70180818E7F80838881E8 :100A100080618883DF91CF911F910F91FF90EF90BC -:100A2000DF90CF900895FC018091340390913503BD +:100A2000DF90CF900895FC018091960390919703F9 :100A300086179707A0F06115710529F49091E800D9 :100A40009E779093E80090E06115710551F4911143 :100A500008C08091E80082FF34C080E00895BC01A6 -:100A6000F2CF80912C038823C1F18530C1F18091B0 +:100A6000F2CF80918E038823C1F18530C1F180914E :100A7000E80083FD30C08091E80082FDEACF8091DC :100A8000E80080FFE1CF8091F3002091F200382F41 :100A90006115710519F02830310558F091E02830C2 :100AA000310509F090E02091E8002E772093E800CE :100AB000CBCF81918093F100615071092F5F3F4F3F -:100AC000E7CF80912C03882341F0853041F080915D +:100AC000E7CF80918E03882341F0853041F08091FB :100AD000E80083FFBECF81E0089582E0089583E0BF -:100AE00008958091090308959C014FB7F89480916F -:100AF000FE029091FF02A0910003B09101034FBF4D -:100B0000821B930B08952FB7F8948091FE02909169 -:100B1000FF02A0910003B09101032FBF089520911F -:100B2000FB023091FC022817390771F09093FC0208 -:100B30008093FB02E091F902F091FA02309721F0E4 -:100B40000084F185E02D099408952091F7023091F9 -:100B5000F8022817390771F09093F8028093F70292 -:100B6000E091F902F091FA02309721F00680F781C6 -:100B7000E02D09940895E091F902F091FA0230977E +:100AE000089580916B0308959C014FB7F89480910D +:100AF0005F0390916003A0916103B09162034FBFC7 +:100B0000821B930B08952FB7F89480915F03909107 +:100B10006003A0916103B09162032FBF08952091FB +:100B20005C0330915D032817390771F090935D03E2 +:100B300080935C03E0915A03F0915B03309721F0BE +:100B40000084F185E02D0994089520915803309197 +:100B500059032817390771F090935903809358036C +:100B6000E0915A03F0915B03309721F00680F78102 +:100B7000E02D09940895E0915A03F0915B033097BA :100B800021F00190F081E02D099480E00895DC01CE -:100B90006091F3028091F402962F891301C00895A9 -:100BA000292F30E0F901EE0FFF1FE551FD4F408185 +:100B90006091540380915503962F891301C00895E5 +:100BA000292F30E0F901EE0FFF1FE45BFC4F40817D :100BB00051814A175B07A1F487E08A9FA0018B9FB0 -:100BC000500D1124485E5E4F81E0FA018483961334 -:100BD000E6CF2F5F3F4F237033272093F302089512 -:100BE0002F5F3F4F922F9370D8CF109288021092B0 -:100BF0008702E8E1F1E08581811102C0148216824A -:100C0000379681E0E234F807B1F70895FA018111CF -:100C100001C0FB010994089580918C03982F9E7F59 -:100C200061F48170826080938C0380918F03853B97 -:100C300018F084EB80938F0308958A34B0F38170A9 +:100BC000500D1124435E5E4F81E0FA018483961339 +:100BD000E6CF2F5F3F4F23703327209354030895B0 +:100BE0002F5F3F4F922F9370D8CF1092E90210924F +:100BF000E802EDE1F1E08581811102C014821682E4 +:100C0000379681E0E734F807B1F70895FA018111CA +:100C100001C0FB01099408958091E302982F9E7F03 +:100C200061F4817082608093E3028091E602853BEB +:100C300018F084EB8093E60208958A34B0F3817053 :100C40008864F1CFAF92BF92DF92EF92FF920F9341 :100C50001F93CF93DF93182F062FE901453B08F030 :100C600044EBE42FF0E0E655FD4F011110C0E49194 :100C70005E2F4E2F4983E8835A83DF91CF911F91D6 :100C80000F91FF90EF90DF90BF90AF900895202FCD :100C900030E04491D42EE42EF12C56E0159FC00193 -:100CA0001124EFEFF0E0BF010E94332E812F90E07E +:100CA0001124EFEFF0E0BF010E94892D812F90E029 :100CB000880F991F55E5569FD001579FB00D1124FD :100CC0008A1B9B0B982F990F890F5F01A21AB30AF9 :100CD000AE9CD001AF9CB00DBE9CB00D11245B2F1B @@ -213,52 +213,52 @@ :100D4000EB2F512F97CF6430710569F080F066303A :100D5000710509F48FCFF4CFE42F4B2F592F8ACF91 :100D6000E42F412F87CFEB2F542F492F83CF4B2FC9 -:100D70005D2DE12F7FCF0E9483059C01909176022B -:100D800080917702982B21F03093730220937202A6 -:100D90009091780280917902982B21F03093710222 -:100DA00020937002E091F902F091FA02309749F035 -:100DB00082E0809374020480F581E02D84E792E064 -:100DC0000994089540917602803F59F4809177020A -:100DD00087FF0DC01092770241110BC010926E0276 -:100DE00008C0813F81F48091770218169CF3442358 -:100DF00081F08091780290917902892B09F05AC094 -:100E000010926D020895823F49F447FFF0CF10928F -:100E10007602809177028111ECCFE0CF833F19F405 -:100E20001416ACF3E4CF90917802893F29F4191697 -:100E3000F4F610927802DBCF8A3F19F497FFD7CFF0 -:100E4000F8CF909179028B3F29F497FFD0CF109281 -:100E50007902CDCF8C3F19F41916CCF3C8CF9CE0A2 +:100D70005D2DE12F7FCF0E9483059C0190917E0223 +:100D800080917F02982B21F030937B0220937A028E +:100D90009091800280918102982B21F0309379020A +:100DA00020937802E0915A03F0915B03309749F069 +:100DB00082E080937C020480F581E02D8CE792E054 +:100DC0000994089540917E02803F59F480917F02FA +:100DD00087FF0DC010927F0241110BC01092760266 +:100DE00008C0813F81F480917F0218169CF3442350 +:100DF00081F08091800290918102892B09F05AC084 +:100E0000109275020895823F49F447FFF0CF109287 +:100E10007E0280917F028111ECCFE0CF833F19F4F5 +:100E20001416ACF3E4CF90918002893F29F419168F +:100E3000F4F610928002DBCF8A3F19F497FFD7CFE8 +:100E4000F8CF909181028B3F29F497FFD0CF109279 +:100E50008102CDCF8C3F19F41916CCF3C8CF9CE09A :100E6000980F953090F4845F990B21E030E0B90140 :100E700002C0660F771F8A95E2F7CB0180959091AB -:100E80007502892380937502B2CF8D3F31F4809132 -:100E90006F028E7F80936F02AACF8E3F21F48091E4 -:100EA0006F028D7FF7CF8F3F09F0A1CF80916F0246 -:100EB0008B7FF0CF089580916F0280FD16C081FD79 -:100EC00016C082FD16C080916D028823A1F0883281 +:100E80007D02892380937D02B2CF8D3F31F4809122 +:100E900077028E7F80937702AACF8E3F21F48091D4 +:100EA00077028D7FF7CF8F3F09F0A1CF8091770236 +:100EB0008B7FF0CF08958091770280FD16C081FD71 +:100EC00016C082FD16C0809175028823A1F0883279 :100ED00080F428E0829FC001112468E270E00E9443 -:100EE000472E862F672B39F0089582E0089584E01D -:100EF000089588E0089581E0089580916F0280FD53 -:100F000014C081FD14C082FD16C080916E0288233A +:100EE0009D2D862F672B39F0089582E0089584E0C8 +:100EF000089588E0089581E008958091770280FD4B +:100F000014C081FD14C082FD16C080917602882332 :100F100081F0843180F422E3829FC001112464E1D6 -:100F200070E00E94472E862F08958CE0089589E195 +:100F200070E00E949D2D862F08958CE0089589E140 :100F3000089585E0089582E30895803F31F40E948A -:100F40007D078195809377020895813F19F40E946F +:100F40007D07819580937F020895813F19F40E9467 :100F50007D07F8CF823F31F40E947D078195809311 -:100F600076020895833F19F40E947D07F8CF893FE8 -:100F700029F40E945B078093780208958A3F21F448 +:100F60007E020895833F19F40E947D07F8CF893FE0 +:100F700029F40E945B078093800208958A3F21F440 :100F80000E945B078195F7CF8B3F31F40E945B078E -:100F900081958093790208958C3F19F40E945B0734 +:100F900081958093810208958C3F19F40E945B072C :100FA000F8CF9CE0980F953070F4845F990B21E0A6 -:100FB00030E001C0220F8A95EAF780917502822BFA -:100FC0008093750208958D3F31F480916F028160A6 -:100FD00080936F0208958E3F21F480916F028260AA -:100FE000F7CF8F3FB9F780916F028460F1CF80E037 +:100FB00030E001C0220F8A95EAF780917D02822BF2 +:100FC00080937D0208958D3F31F480917702816096 +:100FD0008093770208958E3F21F48091770282609A +:100FE000F7CF8F3FB9F7809177028460F1CF80E02F :100FF0000895F894E82FE295EF70F0E031A1282FE2 :101000002F7081E090E001C0880F2A95EAF7982FB1 :101010009095932391A392A1892B82A3789408950C -:101020009091020392FF06C0282F28712830F9F40E +:101020009091630392FF06C0282F28712830F9F4AD :10103000877F846093FF06C0282F28712831F1F440 -:10104000877E84612091030320FF06C0382F38710A +:10104000877E84612091640320FF06C0382F3871A9 :101050003830D9F4877F816021FF06C0282F28719E :101060002831D1F4877E816194FD877E0895282FF1 :1010700024712430F9F68B7F8860DCCF282F24710F @@ -271,23 +271,23 @@ :1010E000C83ED10508F09CC0C03ED10560F5C83AA5 :1010F000D10508F087C0C53AD10508F0FDC0C13060 :10110000D10509F12097F9F0C430D105E0F440C0D1 -:101110008533910509F45AC0C997C1F6809102033D +:101110008533910509F45AC0C997C1F680916303DC :10112000837089F0C0EED0E00EC0833E910599F146 :1011300070F4803E910501F1823E910539F680916F -:10114000020382FD21C0CE01DF91CF910895863E3A +:10114000630382FD21C0CE01DF91CF910895863ED9 :10115000910561F1873E910571F1843E910509F099 -:10116000B5CF8091030381FFEECF80910203C7EEDC -:10117000D0E084FD0DC0E7CF8091020380FD12C155 -:101180009091030390FFDFCFC3EED0E084FFDBCF6D -:10119000D0E0C0E0D8CF8091020382FD06C19091DB -:1011A000030390FDBFCF84FFCECFF2CF8091020327 -:1011B00083FDDDCFC8CF8091020383FDF9C09091FC -:1011C000030391FFF0CFC4EED0E0BDCF80910203C6 -:1011D00085FFB9CFC9E2D0E0B6CF8091020385FF89 -:1011E000B2CFC5E3D0E0AFCF8091020386FFABCF93 -:1011F000CAE2D0E0A8CF8091020386FFA4CFC1E36A +:10116000B5CF8091640381FFEECF80916303C7EE1A +:10117000D0E084FD0DC0E7CF8091630380FD12C1F4 +:101180009091640390FFDFCFC3EED0E084FFDBCF0C +:10119000D0E0C0E0D8CF8091630382FD06C190917A +:1011A000640390FDBFCF84FFCECFF2CF8091630365 +:1011B00083FDDDCFC8CF8091630383FDF9C090919B +:1011C000640391FFF0CFC4EED0E0BDCF8091630304 +:1011D00085FFB9CFC9E2D0E0B6CF8091630385FF28 +:1011E000B2CFC5E3D0E0AFCF8091630386FFABCF32 +:1011F000CAE2D0E0A8CF8091630386FFA4CFC1E309 :10120000D0E0A1CFCF3BD10518F6C85AD0E0CC0F23 -:10121000DD1FC95BDE4F0990D881C02DD46493CF08 +:10121000DD1FC45BDE4F0990D881C02DD46493CF0D :10122000C11540E2D40758F4C11581E0D80708F091 :101230008ACFC03FD10508F4ABCFD06584CFC115AC :1012400090E4D90708F4A4CFDF70D06A7CCFC11531 @@ -301,7 +301,7 @@ :1012C000CC27DF71D0623FCFC1154AE5D40708F4BF :1012D0005BC0CE0190568115904208F059CF8D2FFA :1012E0008F710E94100890E0982F882788279F719F -:1012F0009C012C2BE901E6CFC55AD0E0CC5BDE4F38 +:1012F0009C012C2BE901E6CFC55AD0E0C75BDE4F3D :10130000C881D0E0D0641FCFCE01E4E096958795E8 :10131000EA95E1F783702C2F26952695237040E2FD :10132000249F90011124382B8C2F8370C1E0D0E0D2 @@ -313,49 +313,49 @@ :10138000CC27C06FD06ADFCE8C2F8F700E941008E0 :1013900034E0D695C7953A95E1F7CF709C2FEC01D4 :1013A000D069D1CEC9E3D0E0CECEC2EED0E0CBCE74 -:1013B000C6EED0E0C8CE8091440281111092440262 -:1013C00008958091430290914202892B90914102AD -:1013D000892B8093C601909144029923A1F0892B17 -:1013E0008093C60180914301882341F180910203DB -:1013F00087FF24C08EE1E8ECF1E090E0815000F539 -:1014000091110E94DB09E091F902F091FA02309704 -:10141000E1F080914301882359F08091020387FF16 -:1014200007C08091C6018093C70185E08093C60103 -:101430000280F381E02D86EC91E0099486E0DBCF19 -:1014400021912223D9F29F5FD9CF08959091430132 -:101450009923D1F09091020397FF16C0E82FE695EB -:10146000E695E695EE31E0F4F0E0EA53FE4F282FE2 +:1013B000C6EED0E0C8CE8091450281111092450260 +:1013C00008958091690390914402892B9091430282 +:1013D000892B8093CA01909145029923A1F0892B12 +:1013E0008093CA0180914801882341F18091630371 +:1013F00087FF24C08EE1ECECF1E090E0815000F535 +:1014000091110E94DB09E0915A03F0915B03309740 +:10141000E1F080914801882359F08091630387FFB0 +:1014200007C08091CA018093CB0185E08093CA01F7 +:101430000280F381E02D8AEC91E0099486E0DBCF15 +:1014400021912223D9F29F5FD9CF0895909148012D +:101450009923D1F09091630397FF16C0E82FE6958A +:10146000E695E695EE31E0F4F0E0E653FE4F282FE6 :10147000277081E090E001C0880F2A95EAF78095F7 -:101480009281892382830895E8ECF1E09191891398 -:1014900003C0DF0111971C9291E0EE3CF907B1F710 -:1014A0000895909143019923C1F09091020397FF11 +:101480009281892382830895ECECF1E09191891394 +:1014900003C0DF0111971C9291E0E23DF907B1F71B +:1014A0000895909148019923C1F09091630397FFAB :1014B00014C0E82FE695E695E695EE31F8F4F0E0F5 -:1014C000EA53FE4F877021E030E001C0220F8A9579 -:1014D000EAF78281822B82830895A8ECB1E0EFEFD6 +:1014C000E653FE4F877021E030E001C0220F8A957D +:1014D000EAF78281822B82830895ACECB1E0EFEFD2 :1014E00090E02D91821751F0EF3F19F4211101C0C6 :1014F000E92F9F5F9630A9F7EF3F09F408950E2E6C -:10150000000CFF0BEA53FE4FE6CF80913F02909113 -:10151000FE01981301C008958F5F8770FACF990F6D +:10150000000CFF0BE653FE4FE6CF80914102909115 +:101510000002981301C008958F5F8770FACF990F6A :10152000990F890F982F977086958695869524E058 -:10153000829FF0011124E651FE4F50E040E080E030 +:10153000829FF0011124E451FE4F50E040E080E032 :10154000219130E0092E02C0369527950A94E2F7E2 :1015500021703327042E01C0220F0A94EAF7822B50 :101560004F5F5F4F4430510559F70895990F990F18 :10157000890F982F977041E001C0440F9A95EAF7C0 -:1015800086958695869594E0899FF0011124E65111 +:1015800086958695869594E0899FF0011124E45113 :10159000FE4F30E020E070E05191DF011197CB0168 :1015A000022E02C0969587950A94E2F78170819584 :1015B0008527842385278C932F5F3F4F2430310567 :1015C00059F7089590E080E00E94A50590E080E042 -:1015D0000E948F0510924202109241020E94E1097E -:1015E00086E0E4E7F2E0DF011D928A95E9F71092C8 -:1015F0006E0210926D0210926F020C94BB069093D3 -:101600004602809345020C94E20A882341F08095BB -:10161000909142028923809342020C94E10908953B -:10162000882339F090914202982B909342020C94B7 -:10163000E1090895882341F0809590914302892320 -:10164000809343020C94E1090895882339F0909126 -:101650004302982B909343020C94E1090895882348 +:1015D0000E948F0510924402109243020E94E1097A +:1015E00086E0ECE7F2E0DF011D928A95E9F71092C0 +:1015F000760210927502109277020C94BB069093BB +:101600004702809346020C94E20A882341F08095B9 +:10161000909144028923809344020C94E109089537 +:10162000882339F090914402982B909344020C94B3 +:10163000E1090895882341F08095909169038923F9 +:10164000809369030C94E1090895882339F09091FF +:101650006903982B909369030C94E10908958823FA :1016600009F459C0823871F40E94BB0581FF53C050 :1016700089E30E94510A0E94E10989E30E94260A37 :101680000C94E109833859F40E94BB0580FF43C0E4 @@ -364,34 +364,34 @@ :1016B0000E94E10987E4E2CF9CEF980F913AF0F2A3 :1016C00090E2980F983088F4877021E030E0A9010B :1016D00002C0440F551F8A95E2F7CA018095909188 -:1016E0004302892380934302CBCF9BE5980F93302D +:1016E0006903892380936903CBCF9BE5980F9330DF :1016F00020F490E080E00C94A50598E5980F9731D0 :1017000020F490E080E00C948F05803F20F00E9450 :10171000E2060C94BB060895809580FF08C0589A95 :1017200081FF07C05D9A82FF06C05C9A08955898B1 -:10173000F7CF5D98F8CF5C98089590912C03943082 -:1017400029F5809304037093060360930503909337 +:10173000F7CF5D98F8CF5C98089590918E03943020 +:1017400029F5809365037093670360936603909314 :10175000E9008FEF9091E800815095FD06C095ED6E :101760009A95F1F700008111F5CF8091E80085FF8F -:101770000DC050E040E063E070E084E093E00E9440 +:101770000DC050E040E063E070E085E693E00E9439 :1017800037048091E8008E778093E8000895BC01CB :1017900084E00C949D0BBC0183E00C949D0B9C0198 :1017A00084E08093E9009FEF8091E800915085FDEF :1017B00006C085ED8A95F1F700009111F5CF809173 :1017C000E80085FF0CC050E040E066E070E0C90131 :1017D0000E9437048091E8008E778093E800089596 -:1017E000CF93DF93EC01809143018823B1F1809185 -:1017F000020387FF32C060E284E08093E9008FEF4C +:1017E000CF93DF93EC01809148018823B1F1809180 +:1017F000630387FF32C060E284E08093E9008FEFEB :101800009091E800815095FD06C095ED9A95F1F70D :1018100000008111F5CF8091E80085FF1BC0809109 -:10182000430170E050E040E0811104C050E040E02E +:10182000480170E050E040E0811104C050E040E029 :1018300068E070E0CE010E9437048091E8008E7766 -:101840008093E80080E2FE01AAE0B3E001900D92EF +:101840008093E80080E2FE01ACE6B3E001900D92E7 :101850008A95E1F7DF91CF91089568E081E0CDCFDF :1018600081E08093E00080E28093D8001092C9006C :101870008FE19EE40197F1F700C0000087E090EB54 -:10188000DC018093940390939503A0939603B09307 -:10189000970388E19CE00FB6F894A89580936000C8 +:10188000DC0180939A0390939B03A0939C03B093F5 +:101890009D0388E19CE00FB6F894A89580936000C2 :1018A0000FBE90936000FFCFCF93C82F882309F419 :1018B000AEC08238C1F40E94BB0581FDA8C089E397 :1018C0000E94510A0E94E1092FEF81EE94E021501D @@ -402,1130 +402,1109 @@ :10191000E5CF8438A1F40E94BB0582FD78C087E43E :101920000E94510A0E94E1092FEF81EE94E02150BC :1019300080409040E1F700C0000087E4CFCF8CEFFB -:101940008C0F813A88F580914301882301F18091C1 -:10195000020387FF1CC0EC2FE695E695E695F0E0C4 -:10196000EA53FE4F828190E04C2F477021E030E037 +:101940008C0F813A88F580914801882301F18091BC +:10195000630387FF1CC0EC2FE695E695E695F0E063 +:10196000E653FE4F828190E04C2F477021E030E03B :1019700002C0220F331F4A95E2F782239323892B5B -:1019800079F08C2F0E94260A0E94E10909C0E8EC38 -:10199000F1E08191C817A9F321E0EE3CF207C9F705 +:1019800079F08C2F0E94260A0E94E10909C0ECEC34 +:10199000F1E08191C817A9F321E0E23DF207C9F710 :1019A0008C2F0E94510A9CCF80E28C0F883068F403 :1019B000C77021E030E001C0220FCA95EAF780919C -:1019C0004302822B809343028BCFEBE5EC0FE33095 -:1019D00040F4F0E0EC5BFE4F808190E0CF910C94FE +:1019C0006903822B809369038BCFEBE5EC0FE33047 +:1019D00040F4F0E0E75BFE4F808190E0CF910C9403 :1019E000A505E8E5EC0FE73150F4F0E0EE0FFF1F3E -:1019F000E95BFE4F80819181CF910C948F05C03FB0 +:1019F000E45BFE4F80819181CF910C948F05C03FB5 :101A000030F08C2F0E949D07CF910C94BB06CF9194 -:101A100008951F93CF93DF93182FD0E0C0E0893350 -:101A200011F4C0E5D0E0812F0E94540C209731F4CE -:101A3000812FDF91CF911F910C942F0B8FE99FE0A5 -:101A40000197F1F700C000002197F0CF0F931F938B -:101A5000CF93DF93C62FD42F022FFC0182818823DE -:101A6000A1F0609393030E94830590939203809367 -:101A70009103C77081E001C0880FCA95EAF7DF9132 -:101A8000CF911F910F910C94250B809193036813B4 -:101A900035C080919103909192030E947405883C17 -:101AA000910560F510E21D0FCD17B9F080E28C0FA3 -:101AB000883040F4C77081E001C0880FCA95EAF70A -:101AC0000E941A0B183048F481E09D2F977001C0D6 -:101AD000880F9A95EAF70E94250B802F0E94090D26 -:101AE000183098F4D77081E001C0880FDA95EAF7D2 -:101AF000DF91CF911F910F910C941A0BC77081E069 -:101B000001C0880FCA95EAF7F3CFDF91CF911F91FB -:101B10000F910895DF92EF92FF920F931F93CF934F -:101B2000DF93E82FF0E0E85EFD4FD490282F269554 -:101B30002695269530E0F901E85FFD4F0491877006 -:101B400010E0082E02C0159507950A94E2F701707F -:101B50001127F901E850FE4FE490F12C082E02C045 -:101B6000F594E7940A94E2F791E0E922FF24F90161 -:101B7000E851FE4FC491D0E002C0D595C7958A9533 -:101B8000E2F7C170DD270115110519F081EE0E9401 -:101B9000540CE114F10419F086EE0E94540C8D2DC2 -:101BA0000E94090DEF2819F086EE0E942F0B012BE1 -:101BB00019F081EE0E942F0BCD2B51F08CE2DF91BA -:101BC000CF911F910F91FF90EF90DF900C94090D32 -:101BD000DF91CF911F910F91FF90EF90DF900895CB -:101BE000CF93DF93C7E0D2E060E0CE010E94F52EF4 -:101BF0002196C11584E0D807B9F7DF91CF910895F8 -:101C00006F927F928F929F92AF92BF92CF92DF920C -:101C1000EF92FF920F931F93CF93DF938BECC82E1D -:101C200084E0D82E0FE510E0E801E09736011CC0F3 -:101C3000F50185909490692DC7010E94F52E682DBD -:101C4000C70101960E94F52E82E0A80EB11C82E029 -:101C5000E80EF11CCE15DF0559F788E0680E711CFF -:101C600028960C171D0731F07E0188E0E81AF1086C -:101C70005301DECF005D1F4F80E3C80ED11C0F3330 -:101C800082E0180789F6DF91CF911F910F91FF90A5 -:101C9000EF90DF90CF90BF90AF909F908F907F900C -:101CA0006F900895CF93C82F6FEF811161E283E2A7 -:101CB00090E00E94F52E6FEFC11161E184E290E0A7 -:101CC0000E94F52E6FEFC11168E085E290E0CF91A0 -:101CD0000C94F52E80E00E94520E60E086E290E0C7 -:101CE0000E94F52E0E94000E0E94F00D81E00C94DF -:101CF000520ECF93C0910303C2FB992790F9981716 -:101D000081F080FBC2F9C09303036091020384E079 -:101D100090E00E94F52E6C2F82E290E0CF910C941F -:101D2000F52ECF9108950F931F93CF93DF9328E063 -:101D3000629FE001112450E0440F551FC40FD51FCE -:101D400030E3839FC00DD11D1124CE0187960E94E0 -:101D5000E12E082F10E0102F0027CE0188960E9458 -:101D6000E12E9801282BC901DF91CF911F910F918E -:101D70000895462F8A3038F4763028F4643018F409 -:101D8000672F0C94930E90E080E00895BF92CF925D -:101D9000DF92EF92FF920F931F93CF93DF937C011B -:101DA00000913603109137038091450290914602CD -:101DB000082B192BCFE0D0E0CC24C394D12CBC2E1F -:101DC000C6010C2E02C0880F991F0A94E2F78023E7 -:101DD0009123892B71F4219790F7B12C8B2DDF91F2 -:101DE000CF911F910F91FF90EF90DF90CF90BF9018 -:101DF0000895B7018C2F0E94B90E0E9453080197D5 -:101E000051F3ECCFCF93DF93EC010E94C60EBE01DD -:101E10000E94B90EDF91CF910C945308FC0186818A -:101E20009781009779F00E945308292F2F7092957F -:101E30009F7092509E30A0F4E92FF0E0E55DF04DE8 -:101E40000C947D2E808191810E94020FEECF803F05 -:101E500019F020F4883E20F481E00895843FE1F3F6 -:101E600080E00895883EC0F3813FD1F7F5CF822FFF -:101E700086958695869508951F93CF93DF9300D01E -:101E800000D00F92CDB7DEB7FC0126813781211536 -:101E9000310541F525E0DE01119601900D922A955C -:101EA000E1F7FC01228189819A812223B9F066231E -:101EB000A9F00E94C60E182F682F89819A810E946E -:101EC000B60A69817A81812F0F900F900F900F9041 -:101ED0000F90DF91CF911F910C94B90E0E948F0A41 -:101EE000182FEFCFC9010F900F900F900F900F9008 -:101EF000DF91CF911F91089583E290E00E94E12E3F -:101F0000813289F484E290E00E94E12E813159F41B -:101F100085E290E00E94E12E91E0883009F090E0A7 -:101F2000892F8170089580E0FCCFCF9384E090E00A -:101F30000E94E12EC82F82E290E00E94E12E982FAD -:101F40008C2FCF91089560918C03669570E04BE0E3 -:101F500050E08AE091E00E94C72E892B19F481E0BD -:101F6000809382020E94830590937C0280937B027F -:101F70000895AF92BF92CF92DF92EF921F93CF93CB -:101F8000DF93CDB7DEB7C455D1090FB6F894DEBFE5 -:101F90000FBECDBF80918C0380FD0AC0E8E3F3E063 -:101FA000118210821282339683E0EC38F807C1F771 -:101FB0007FEAA72E73E0B72EDE011196AE014B5AD1 -:101FC0005F4F1A2F7B2FF5018491282F30E0C90134 -:101FD000880F991F820F931F885C9C4FFC01C08063 -:101FE000D180E280CD92DD92ED92FFEFAF1ABF0A71 -:101FF000A417B50741F7279A35B13F7725B1206877 -:102000006FB7F894812F972FFC017191CF01E8E011 -:1020100025B9000000C077FF35B9770F000000C078 -:1020200000C000C035B900C0EA9591F78417950744 -:1020300059F76FBF8FE594E00197F1F700C00000FA -:10204000CC5ADF4F0FB6F894DEBF0FBECDBFDF9185 -:10205000CF911F91EF90DF90CF90BF90AF900895F8 -:102060001F93CF93DF9300D00F92CDB7DEB7162F1B -:1020700090918C0390FF18C09E012F5F3F4F48E75F -:102080006FEF0E9422068B819981612F70E0FB0126 -:10209000EE0FFF1FE60FF71FE85CFC4F2A8121833C -:1020A000908382830E94B90F0F900F900F90DF9161 -:1020B000CF911F910895EF92FF920F931F93CF93AB -:1020C000DF938C01C8E3D3E0F12CE12CF80194817B -:1020D00060918E0380918D03FEE0EF16F104FCF415 -:1020E0009923F9F09E0140918F030E9422062FEF61 -:1020F000E21AF20A23968CE1E816F10439F70E94FD -:10210000B90FF801848190E001968170992784834A -:10211000DF91CF911F910F91FF90EF900895992338 -:1021200009F39E0140E0E1CF8F929F92AF92BF9260 -:10213000CF92DF92EF92FF920F931F93CF93DF9393 -:10214000EC014C81042F10E09801D8010E94922EDE -:102150009B01AC010E94A82E4B015C01E0E2F0E083 -:10216000E01BF10BA5E5B0E0AC019B010E94A82E9D -:102170006B017C019F01DF010E948A2E9B01AC0153 -:102180000E94B32E9B01AC01280D391D4A1D5B1D19 -:10219000C701B6010E945B2EF22E822F90E039E239 -:1021A0003F15D8F143E0249F9001112435952795E0 -:1021B000122F109598E3C92E93E0D92E00E085E503 -:1021C000E82EEF188E2D01FD8F2D9601412F609185 -:1021D0008E030E9422060F5F53E0C50ED11C0C3106 -:1021E00089F70E94B90F9C8181E0992319F0903200 -:1021F00019F48FEF8093170180911701890F8C8359 -:10220000DF91CF911F910F91FF90EF90DF90CF90D2 -:10221000BF90AF909F908F90089525E530E0A90181 -:10222000481B590BCA019A01220F331F280F391F6F -:1022300037FFBCCF2F5F3F4FB9CF0F931F93CF9383 -:10224000DF93C8E3D3E0FE0111821082128233963D -:1022500083E0EC38F807C1F710E000E080918502D8 -:10226000082E000C990B081719078CF180911601A4 -:10227000082E000C990B801791074CF19E0140919C -:102280008F0360918E0380918D030E9422060F5F61 -:102290001F4F23960C31110509F70E94B90F809149 -:1022A000150190918502980F909385022091160157 -:1022B000280F20931601121614F49B311CF08195FF -:1022C00080931501DF91CF911F910F91089519828D -:1022D00018821A82DCCFBF92CF92DF92EF92FF92E8 -:1022E0000F931F93CF93DF93FC018281DD24DA9457 -:1022F00080FD02C0DD24D39408E313E0D0E0C0E009 -:102300002CE1B22EF80111821082128294E0E92EA3 -:10231000F12CC12C809184028C0D8D310CF43DC0C8 -:102320006B2D0E94252E892F082E000C990B8C17DF -:102330009D0791F480918F038E9DA0018F9D500D7C -:1023400011245595479555954795980160918E03B1 -:1023500080918D030E942206CD0CF1E0EF1AF10866 -:10236000C9F621960D5F1F4FCC31D10559F60E9459 -:10237000B90F8091840291E0D91215C0811111C06A -:102380008BE180938402DF91CF911F910F91FF9099 -:10239000EF90DF90CF90BF90089587FFC5CF845E08 -:1023A000C3CF8150EECF90E00196BE010E94472E30 -:1023B000E8CFEF92FF921F93CF93DF93EC0188E376 -:1023C000E82E83E0F82E10E08C81970140918F0376 -:1023D00060918E03810F0E942206175F83E0E80E52 -:1023E000F11C1C3F89F70E94B90F9A818C8190FFE4 -:1023F00008C08F5F8C83DF91CF911F91FF90EF908A -:1024000008958150F7CF90918C0390FF0CC0E8E3C2 -:10241000F3E0818360834283339693E0EC38F907DD -:10242000C1F70C94B90F08950F931F93CF93DF93C7 -:1024300000D00F92CDB7DEB78C018091860281115A -:102440000AC09E012F5F3F4F44EB6FEF0E942206B0 -:102450008A8180938602F8016481613069F08091FD -:10246000860240E0662361F040E0623011F4409162 -:10247000860280E060E004C06091860240E080E077 -:102480000E940312F801848190E0019663E070E0FD -:102490000E94472E84830F900F900F90DF91CF9171 -:1024A0001F910F910895CF93DF9300D00F92CDB776 -:1024B000DEB790918C0390FF0AC09E012F5F3F4FC3 -:1024C0000E9422064B8169818A810E9403120F902B -:1024D0000F900F90DF91CF910895CF93DF93EC0190 -:1024E000ECE8F3E0438162818C810E9453128C817D -:1024F0008F5F8C83DF91CF910895CF93DF93EC01B1 -:10250000EC81F0E0E553FC4F4491ECE8F3E06281AC -:1025100081810E9453128C818F5F8C83DF91CF91D8 -:102520000895CF92DF92EF92FF926B017C010E949F -:102530000C06B701A60188E090E0FF90EF90DF90D5 -:10254000CF900C94072F5F926F927F928F929F9201 -:10255000AF92BF92CF92DF92EF92FF920F931F93B1 -:10256000CF93DF9300D00F92CDB7DEB7182F762E22 -:10257000042F622E90918C0390FF29C0E92FE695DD -:10258000AE2FB0E0A157BE4F8C91809381029E7F09 -:10259000923081F59E012F5F3F4F812F0E942206CE -:1025A0004B8169818A810E94031210938D0370927E -:1025B0008E0300938F03662051F060918C0370911D -:1025C0008D0380918E0390918F030E9491120F9042 -:1025D0000F900F90DF91CF911F910F91FF90EF908F -:1025E000DF90CF90BF90AF909F908F907F906F9033 -:1025F0005F900895823019F400918F03D6CF863012 -:1026000019F410918D03D1CF8930D9F3893169F64E -:10261000E9518E2F8170582EE695F0E0E655FC4F7B -:10262000A590B490BB2488E3E82E83E0F82ED12C4B -:10263000C12C9CE1892E912CC601B4010E94332E3D -:10264000812F511013C0860F9701402F672D0E94D4 -:102650002206CA0CDB1C83E0E80EF11C8CE8E816AD -:1026600083E0F80649F70E94B90F9FCF861BECCF95 -:10267000ECE8F3E0438128E0421B08F440E021E06D -:10268000628181810C94A312ECE8F3E0438128E09D -:10269000420F08F44FEF21E0628181810C94A31274 -:1026A000ECE8F3E0628128E0621B08F460E021E0DE -:1026B000438181810C94A312ECE8F3E0628128E06D -:1026C000620F08F46FEF21E0438181810C94A31223 -:1026D000ECE8F3E0818121E04381628188500C9431 -:1026E000A312ECE8F3E0818121E043816281885FFD -:1026F0000C94A31280919003882319F08150809349 -:10270000900360918C0370918D0380918E03909162 -:102710008F030C94911280919003833018F48F5F93 -:102720008093900360918C0370918D0380918E0350 -:1027300090918F030C94911290918C0390FF36C06E -:102740009170811129C0926090938C03662351F09F -:1027500060918C0370918D0380918E0390918F0313 -:102760000E94911260918C03669570E04BE050E0FE -:102770008AE091E00E94C72E892BA9F01092820274 -:1027800081E080937E0220E040918F0360918E0370 -:1027900080918D030C94A312853210F09864D4CFED -:1027A000880F982BD1CF0E94A30FEACF089521E084 -:1027B00030E0A90102C0440F551F8A95E2F7CA0113 -:1027C00020918302662399F0822B8093830280916B -:1027D0008202811106C080918C0360E086950E9480 -:1027E0009C1380918C0380FD05C00C94B90F8095DB -:1027F0008223EBCF08950F931F93CF93DF93EC01C8 -:1028000061E0009709F0682F617080E00E94D713A3 -:1028100060E0209721F0BE0176956795617081E0B8 -:102820000E94D71360E0209731F0BE01769567953E -:1028300076956795617082E00E94D71360E02097DB -:1028400039F0BE0113E0769567951A95E1F761704E -:1028500083E00E94D71360E0209739F0BE01B4E016 -:1028600076956795BA95E1F7617084E00E94D71379 -:10287000AE0170E060E0BB27A72F962F852F009751 -:10288000A105B105D9F1AC01BD0188E08A019B0128 -:10289000F4E03695279517950795FA95D1F7011528 -:1028A00011052105310519F08C5FB901A8018A01D4 -:1028B0009B01E2E03695279517950795EA95D1F7A4 -:1028C000011511052105310519F08E5FB901A80127 -:1028D0007695679557954795452B462B472B09F0DD -:1028E0008F5F823019F160F4882399F08130C1F054 -:1028F000CE01DF91CF911F910F91089580E0C6CF57 -:102900008330C9F08430A1F720E044E66FEF8FE018 -:1029100004C020E044E66FEF82E30E94A312E8CFF8 -:1029200020E044E66FEF85E00E94A31220E044E639 -:102930006FEF80E8F2CF20E044E66FEF87EDEDCF58 -:102940000E94FB1390933703809336030C94E20AA2 -:1029500080913603909137039C01267033272630EF -:10296000310519F488600C94A014877FFCCF21E016 -:1029700030E002C0220F331F8A95E2F72095309590 -:102980008091360390913703822393230C94A014F3 -:10299000909140028095892380934002282F2770D0 -:1029A00039F4282F082E000C330B9217130621F44C -:1029B0009091030392FF07C08595859585950E94A8 -:1029C000B71410924002089521E030E002C0220FB7 -:1029D000331F8A95E2F78091360390913703822B5B -:1029E000932B0C94A01480918C038695815009F44C -:1029F00084E261E00C949C1380918C0386958F5F38 -:102A0000853208F081E061E00C949C1390918C0376 -:102A100090FF07C09695981720F0961710F40C9425 -:102A2000FC1461E00C949C13ECE8F3E083E08083F9 -:102A300011828FEF828388E28383148260817181A7 -:102A4000828193810C94911269EE7EEF90E080E098 -:102A50000E94132F60E082E090E00E94F52E60E07B -:102A600083E090E00E94F52E1092460210924502FB -:102A700060E084E090E00E94F52E60E082E290E069 -:102A80000E94F52E60E085E090E00E94F52E60E067 -:102A900086E090E00E94F52E6FEF87E090E00E94C4 -:102AA000F52E40E050E0BA0188E090E00E94072F48 -:102AB00060E08DE090E00E94F52E40E050E0BA0129 -:102AC00088E190E00E94072F60E087E190E00E949B -:102AD000F52E40E050E0BA018CE190E00E94072F13 -:102AE00070E060E080E290E00E94132F40E050E050 -:102AF000BA0188E190E00E94072F80E00E94520E08 -:102B00000E946A0E40E050E0BA018FE090E00E941F -:102B1000072F40E050E0BA0183E190E00C94072FCA -:102B200090E080E00E94EF2E893E9E4F11F40C94BD -:102B30007C0F80E008951092430280914301E8ECFD -:102B4000F1E0882359F08091020387FF07C08EE1EE -:102B5000DF011D928A95E9F70C94E20A86E0F8CF2E -:102B60001F93CF93DF93CDB7DEB7AA970FB6F89434 -:102B7000DEBF0FBECDBF8EE293E02091F100DC01FD -:102B80002D93CD01B3E086339B07B9F780912F03D6 -:102B9000833009F471C0B8F4813009F448C0823040 -:102BA00009F4B2C08091E80083FF3AC180912E03FE -:102BB00090912F039A3008F033C1E92FF0E0E75CE1 -:102BC000F04D0C947D2E8A3009F48DC08B3009F4C1 -:102BD00070C0893039F780912E03813219F78091C6 -:102BE000320390913303009711F00297D9F6809148 -:102BF000E800877F8093E8008091E80082FF37C07B -:102C00009091F3008091F200029729F48091F100F5 -:102C10008B7F813021F48091F100809309038091B2 -:102C2000E8008B778093E8000E946104BBCF80911D -:102C30002E03813A09F0B6CF8091E800877F809318 -:102C4000E8008091320390913303892B61F460E2B4 -:102C50008AE093E070E00E9413058091E8008B7792 -:102C60008093E8009FCF60E090E080E0F3CF809118 -:102C70002C038111C1CF96CF80912E03813A09F0A8 -:102C800091CF8091320390913303892B09F08ACF41 -:102C90008091E800877F8093E8008091E80080FFC2 -:102CA000FCCF809143018093F1008091E8008E7702 -:102CB000B9CF80912E03813209F074CF8091320315 -:102CC00090913303892B09F06DCF8091E800877FC5 -:102CD0008093E8000E946104809130038093430157 -:102CE0000E949B155FCF80912E03813209F05ACF4D -:102CF0008091E800877F8093E8000E9461048091C2 -:102D00003103809308034ECF80912E03813A09F05E -:102D100049CF8091E800877F8093E8008091E800A8 -:102D200080FFFCCF80910803BECF803899F08238B5 -:102D300009F076C0809132038F70873008F070C040 -:102D40008093E9008091EB0085FB882780F9109241 -:102D5000E90006C080912A0390912B0391118260B3 -:102D60009091E800977F9093E8008093F100109293 -:102D7000F1008091E8008E77B5C1882309F4A2C1E3 -:102D8000823009F04DC0809130038111A6C180913D -:102D900032038F702FEF280F263008F041C0809348 -:102DA000E9002091EB0020FF98C1933031F480912D -:102DB000EB0080628093EB0090C19091EB009061FA -:102DC0009093EB0021E030E001C0220F8A95EAF7F2 -:102DD0002093EA001092EA008091EB008860EACF2D -:102DE00081111EC0109130031F778091E30080781D -:102DF000812B8093E3008091E800877F8093E80037 -:102E00000E9461048091E80080FFFCCF8091E30084 -:102E100080688093E30082E0111183E080932C03AB -:102E20008091E80083FF0AC08091E800877F80934B -:102E3000E8008091EB0080628093EB00AA960FB6C9 -:102E4000F894DEBF0FBECDBFDF91CF911F910895E3 -:102E50008058823028F720913003309131032C3D87 -:102E6000E3E03E07A1F583E08A838AE289834FB7D6 -:102E7000F894DE01139620E03EE051E2E32FF0E00B -:102E800050935700E49120FF03C0E295EF703F5F3D -:102E9000EF708E2F90E0EA30C0F0C7968D939D932F -:102EA0002F5F243159F74FBF8091E800877F8093CF -:102EB000E8006AE270E0CE0101960E94130580915D -:102EC000E8008B778093E800ABCFC096E7CF809186 -:102ED000320390913303432F55274330510509F4B2 -:102EE0004AC078F54130510509F47AC08BE590E08D -:102EF000EBEAF6E04230510509F092CF2091E8006C -:102F0000277F2093E8002091340330913503821706 -:102F1000930708F49C0140E02115310509F065C0D4 -:102F2000411163C08091E80082FDC9CF80912C03DC -:102F3000882329F2853019F28091E80083FFF2CFCF -:102F4000BECF4132510509F43CC04232510509F06F -:102F500067CF8330910508F063CFFC01EE0FFF1FB0 -:102F6000E954FE4F0190F081E02D8C549E4FDC011E -:102F70008C9190E01AC0332721303105D1F0211512 -:102F8000310561F02230310509F04ACFE8E1F7E080 -:102F9000E4918E2F90E0E8E1F7E007C0E8E3F7E086 -:102FA000E4918E2F90E0E8E3F7E0009709F438CF42 -:102FB000A5CFE4E2F7E0E4918E2F90E0E4E2F7E0C1 -:102FC000F4CF8330910508F02BCF880F991FFC01B7 -:102FD000E354FE4F0190F081E02D89E090E08ECF28 -:102FE00082E190E0E6E0F7E089CF80912C0388232E -:102FF00009F465CF853009F462CF8091E80083FD44 -:103000005ECF8091E80082FD8DCF8091E80080FF47 -:1030100083CF9091F3008091F2002115310519F0D2 -:103020008830910550F041E0089709F040E0809128 -:10303000E8008E778093E8006FCF44914093F100D1 -:103040003196215031090196E8CF803809F0E8CE59 -:103050008091E800877F8093E80080912D03809322 -:10306000F10087CE8111DCCE10913003123008F0D0 -:10307000D7CE8091E800877F8093E80010932D03DE -:103080000E946104112311F084E005C08091E300E7 -:1030900087FDFACF81E080932C0342E061EC81E070 -:1030A0000E94800442E261EC84E00E94800442E2DB -:1030B00061EC82E00E94800442E260EC83E00E94C6 -:1030C0008004AECE80913003813009F0A9CE81E03A -:1030D000933009F080E080932B031092E9008091F7 -:1030E000E800877F8093E8000E94610499CE9F9258 -:1030F000AF92BF92CF92DF92EF92FF920F931F9306 -:10310000CF93DF9300D000D0CDB7DEB77C01FC01B8 -:1031100083819481892B31F08081918189238F3F34 -:1031200009F060C60F900F900F900F90DF91CF9134 -:103130001F910F91FF90EF90DF90CF90BF90AF90D5 -:103140009F900895980122513F452031310508F0A4 -:103150003EC68FEF93E00E94E12E025167E0C62E3B -:1031600062E0D62E882339F1809140028770D1F237 -:10317000F70182818823B1F282E00F900F900F90C7 -:103180000F90DF91CF911F910F91FF90EF90DF9003 -:10319000CF90BF90AF909F900C94C814C114F4E0EE -:1031A000DF0611F3C6010E94E12E811101C001501A -:1031B0002FEFC21AD20A0111F1CF1C821B82BB244D -:1031C000B3945AE0A52E86010F5F1F4FC6010E94DF -:1031D000E12E89831A82882339F29FEF980F93306A -:1031E00008F58A83B98232E0C30ED11CC8010E945F -:1031F000E12E8B83882309F4B7CF8E010F5F1F4F19 -:10320000F80180818823F9F2813009F043C091816F -:103210008281913049F40E5F1F4F0E94090D0F5FAC -:103220001F4FEECF6801E9CF923029F40E5F1F4F98 -:103230000E94540CF4CF933029F40E5F1F4F0E946C -:103240002F0BEDCF943019F00F5F1F4FE8CF0E5FBB -:103250001F4F30E020E0B8016F5F7F4FF8014181E0 -:103260008053990B8A30910550F021503109B8F202 -:103270008FE99FE00197F1F700C00000F6CFA29E12 -:10328000F001A39EF00D11249C012E0F3F1F842FEF -:103290008B01E1CF0E948A0DC2CF81E00E94E4142D -:1032A0000E94A81461CF81E00E94B714F9CF82E098 -:1032B000FBCF04389FE5190709F483C008F473C0F5 -:1032C0000538FFE51F0709F0B1C5882309F4AEC52D -:1032D00080EE0E94540C81EE0E94540C80E10E940A -:1032E000540C80E10E942F0B81EE0E942F0B80EE88 -:1032F0000E942F0B8091E60191E062E18927809383 -:10330000E601882309F48DC08FE00E94301066E149 -:103310008FE00E9430108AC5882369F180914F02A6 -:10332000811106C081E080934F0282EE0E94540C0E -:103330000E94830590934E0280934D028BE20E947F -:10334000540C74C58823A1F080914F02811106C0EE -:1033500081E080934F0282EE0E94540C0E9483050C -:1033600090934E0280934D0281EE0E94540CE6CF62 -:1033700081EE0E942F0B8BE20E942F0B57C58823F2 -:1033800009F454C581EE0E94540C83EE0E94540C43 -:103390008FE40E94540C8FE40E942F0B83EE0E9456 -:1033A0002F0B81EEE9CF882309F440C581EE0E94FE -:1033B000540C83EE0E94540C80E50E94540C80E56E -:1033C000EBCF882309F4D0CE10914C0281E018276E -:1033D00010934C020E94830590934B0280934A0203 -:1033E00068E1112381F08FE00E94301069E18FE0E5 -:1033F0000E9430106AE18FE00E9430106BE18FE094 -:103400000E943010B1CE84EB0E94301069E184EB51 -:103410000E9430106AE184EB0E9430106BE184EB73 -:10342000EFCF8FEA0E94301066E18FEA72CF82EE12 -:103430000E94540C36C583E00E94100B88E10E9464 -:10344000540C88E10E942F0B83E00E94050B29C5D4 -:1034500082EE0E94540C87E50E94090D22C586EE7B -:103460000E94090D88E1F8CF895A35C582EE0E9485 -:103470002F0B49C58CE20E94090D8091E801882339 -:1034800009F441C589E30E94090D3DC588E2FBCFDF -:10349000033FFCE51F0739F1A0F4083D3CE51307A5 -:1034A000F1F0093D8CE5180751F1073D9CE519073E -:1034B00009F02DC526E241EE61EEC7010E94260DFE -:1034C00053CE053FECE51E07B1F088F0063F2CE532 -:1034D000120709F01CC527E245EE66EEEECF27E2A3 -:1034E00045EE65EEEACF26E241EE60EEE6CF27E25A -:1034F00045EE64EEE2CF26E241EE62EEDECF28E258 -:1035000041E0EFCF01363DE5130709F417C5063159 -:103510002CE5120709F444C18091430282720C3CED -:10352000ECE51E0709F404C208F084C1063C2CE552 -:10353000120709F4E9C108F05BC1033C9CE51907D7 -:1035400009F4D8C108F043C1023CFCE51F0709F4A7 -:10355000ACC10A353DE5130709F426C208F002C2E2 -:1035600001159CE5190709F40FC20E3D1C4509F42D -:1035700018C2F70186819781009709F419C20E9449 -:1035800053088C01F701D280C580C2943FE0C3226A -:10359000809140028770A1F0AD2CDD2091F0812F49 -:1035A000807F803421F080E2800F883048F082E014 -:1035B0000E94C814809140028770AA24A3948111AC -:1035C000A12C912E92942FE09222FBE0F91508F4A1 -:1035D0003CC2E92DF0E0ED5BF04D0C947D2E809126 -:1035E000020380610630ECE51E0709F491C080916A -:1035F0000203886007301C4508F48AC080910203EA -:10360000806286C0809102038D7F0C302CE512070A -:1036100009F47EC058F40A308CE5180709F493C009 -:1036200008F48BC0809102038E7F72C080910203E8 -:10363000877F0E30ECE51E0709F46AC08091020313 -:103640008B7F0F301C4508F463C0809102038F7E8E -:103650005FC00C3F2CE5120709F479C068F504310E -:103660008CE5180709F48BC080F40231ECE51E07E5 -:1036700009F475C0809102038F7B03311C4508F467 -:1036800047C080910203837F43C00A3F2CE51207A5 -:1036900009F445C008F049C005311C4509F075C45E -:1036A0008091020382FB992790F921E0922790FBF9 -:1036B00082F990FB83F92CC001159DE5190709F4E7 -:1036C00054C088F48091030383600E3FFCE51F071C -:1036D00049F1809103038D7F0F3F1C4518F18091C4 -:1036E00003038C7F1FC002303DE5130709F456C069 -:1036F00008F44EC001361D4509F047C490910203FD -:10370000892F8F7E94FF806103C0809102038160C6 -:10371000809302033AC4809102038460F9CF8091C0 -:10372000030381608093030330C4809103038260AC -:10373000F9CF809102038064EBCF0E949B158091AA -:1037400002038068E5CF809102038C60E1CF809115 -:1037500003038E7FE7CF809102038F7DD9CF0E9434 -:103760009B15809102038F77D3CF80910303982F0D -:10377000909591708E7F892B90FB81F9D3CF0E9419 -:103780009B1590910203892F97FB87F98058C0CF32 -:1037900061E08EE090E00E94F52EF7C360E0F9CF83 -:1037A000882309F406C4809143028A7A91E009F4DF -:1037B00090E09093E901811106C089E20E94510ACC -:1037C0000E94E109D1CC85E3F9CF85E3F7C3043C3E -:1037D0002CE5120709F493C048E653E161E773E171 -:1037E000053C3CE5130709F0B4CE0E940606BCCCAC -:1037F000093C9CE5190709F491C070F4073CFCE50D -:103800001F0709F486C04CE553E160E573E1083C0D -:103810002CE5120751F39DCE0A3C3CE5130709F451 -:1038200082C04AE753E16BE873E10B3C9CE5190762 -:10383000E1F28FCE013DECE51E0709F487C0B0F43C -:103840000E3C2CE5120709F47BC008F476C00F3C4F -:103850008CE5180709F477C06EE089E0003D9CE52F -:10386000190709F076CE0E9406157ECC043DECE5E2 -:103870001E0709F471C078F4023D2CE5120709F423 -:1038800068C061E088E1033D3CE5130709F061CEC3 -:103890000E949C1369CC053D8CE5180709F45FC0B4 -:1038A0000D35100709F460CC54CE80918C0380FF55 -:1038B0001BC08E7F80938C0360918C0370918D036D -:1038C00080918E0390918F030E9491121092820238 -:1038D000EFEFF0E722E0E150F0402040E1F700C0D8 -:1038E00000000E94B90F40CC816080938C0361E09E -:1038F0008695CECF43EF54E16CEF74E176CF4CEF79 -:1039000054E163EF74E171CF41E753E168E673E19D -:103910006CCF40E553E16CE573E167CF48E353E1D9 -:1039200064E473E162CF44E453E168E373E15DCFA3 -:103930004BE853E16AE773E158CF61E081E0A8CF3B -:1039400065E082E090CF68E086E08DCF64E18FE0B3 -:103950008ACF67E185E187CF62E289E184CF61E0C8 -:1039600083E296CF0B35FDE51F0701F10C351D45B0 -:1039700009F0FFCD8091030382FB882780F991E055 -:1039800089270E94790EF5CD0E949B153FEF84E3B5 -:103990009CE0315080409040E1F700C000000E9460 -:1039A000300C0E942415E0CB81E0EBCF80E0E9CF22 -:1039B000828100811181882369F0C8010E94C60EAE -:1039C000D82E682FC8010E94B60AB8018D2D0E941A -:1039D000B90ED5CDC8010E948F0AD82EF6CF212F5F -:1039E0002F70C22E107F19F0C29490EFC922DD20F3 -:1039F000C9F0CC2069F080E2800F883010F001110E -:103A00000BC080914302C82AC09243020E94E10980 -:103A1000802F0E94540C19C080914202C82AC09283 -:103A20004202F4CF802F0E942F0BCC2071F0C09463 -:103A300080E2800F883010F001113AC0809143027B -:103A4000C822C09243020E94E109E92DE850FF0B11 -:103A5000349720F40E94BB050E948C0BAA20A9F089 -:103A60008091400280FD11C0F701128285958595F5 -:103A700085950E94E414C7010E9477188091400246 -:103A80008595859585950E94B71460E0C7010F90D4 -:103A90000F900F900F90DF91CF911F910F91FF909A -:103AA000EF90DF90CF90BF90AF909F900C943C0F21 -:103AB00080914202C822C0924202C5CF312F3F708E -:103AC000B32E107F103219F0B29480EFB822002389 -:103AD00069F0013081F1DD20D9F1CC2091F1F701BD -:103AE000858180FF95CF8F7085832BC0DD20B1F05D -:103AF00090914402892F8B29C11003C00E94250B8D -:103B0000A4CFE1E0CE12FACF2091030322FD9DCF96 -:103B1000981709F49ACF8093440297CFC11006C03A -:103B20000E94DB098B2D0E941A0B8FCFF1E0CF167C -:103B300009F48BCFF5CFDD2031F025E02C1508F40A -:103B400084CF8B2DDBCF34E03C1508F47ECFEACF59 -:103B5000CC2041F3093349F4FFEF27EE33E0F15075 -:103B600020403040E1F700C00000802F0E942F0B62 -:103B70006CCF812F86958695837061F0813009F036 -:103B800064CFC8019370D11002C090E080E00E9421 -:103B90008F055BCFC8019370D11002C090E080E028 -:103BA0000E94A50552CF802FDD2029F00E949D079D -:103BB0000E94BB064ACF0E94E206FACF812F837093 -:103BC00009F03FC0D11041CF402F42954695477034 -:103BD000440F440F802F8F7090E0042E02C0880F96 -:103BE000991F0A94E2F730E020E004FF09C02FE0BB -:103BF00030E002C0220F331F4A95E2F7209530953E -:103C0000169516951370123099F078F4409145028C -:103C100050914602113039F0822B932B8423952347 -:103C20000E94FF0A12CF842B952B822B932BF8CF67 -:103C3000822B932B209145023091460282279327B5 -:103C4000EFCF8695DD2011F0812F8170882309F454 -:103C5000FCCE402F429546954770440F440F802F6D -:103C60008F7090E0042E02C0880F991F0A94E2F72B -:103C700030E020E004FF09C02FE030E002C0220F56 -:103C8000331F4A95E2F720953095169516951370D7 -:103C9000123099F078F44091360350913703113087 -:103CA00039F0822B932B842395230E94A014CDCE30 -:103CB000842B952B822B932BF8CF822B932B209147 -:103CC00036033091370382279327EFCF1F70DD2013 -:103CD00029F0812F0E94E414802F10CF802F0E94A2 -:103CE0001A0B812F0E94B714B0CE023F09F441C0D5 -:103CF00060F4003F11F1013FA1F1DD2009F457C04C -:103D0000C11086CE812F8F7131C0033FB9F1043FBE -:103D1000A1F7DD2009F440C01F71812F0E94E41437 -:103D20008091030382FD07C0E8E01E9FC0011124BB -:103D3000836080934002812F19C0DD2069F084E008 -:103D40008C1508F482CE1F7181E090E002C0880FCC -:103D5000991F1A95E2F7B3CF95E09C1508F475CE3C -:103D6000F2CF812F8F71DD2009F4BCCF0E94E414C3 -:103D70006CCE812F8F71DD20C9F3B4CF90E080E04D -:103D8000DD2009F492CF1F7181E090E002C0880F1E -:103D9000991F1A95E2F789CF81E00E94C814F1E0DB -:103DA000FC1508F052CE82E00E94C8144ECECC2002 -:103DB00059F0093309F0D9CE2FEF37EE83E02150C7 -:103DC00030408040E1F7CFCE812F8F718BCF003113 -:103DD0003FE5130709F461CA01319FE51907A9F40A -:103DE00082E05CCA61E0C7010E943C0F8C01F701D0 -:103DF00082818111A7C90031FFE51F0709F453CA69 -:103E000001312FE5120709F452CA0238EFE51E0707 -:103E100009F4B5CA08F04DCA00382FE5120709F4B5 -:103E20007BCA01383FE5130709F48CCAF701828188 -:103E3000882369F0C801815E9C45059740F46FE1D5 -:103E4000600F609350028CE090E00E94F52E17FF07 -:103E50001FCBF7018281882309F459C00E94BB055A -:103E6000869581708093E80190915002913029F4F9 -:103E7000882319F089E30E94090D80914302809301 -:103E8000E7011092430280915002813009F4D3CAB5 -:103E9000882309F4CCCA823009F4DACA843009F4E0 -:103EA000DECA8FE39CE90197F1F700C000005801DA -:103EB000E894B7F84CE0C42ED12CC5010C2C02C0FC -:103EC000969587950A94E2F78F7096EF980F963043 -:103ED00008F4CACA805D0E948A0D94E0C91AD1080C -:103EE000ECEFCE16EFEFDE0641F780915002813005 -:103EF00009F4C0CA882309F4B9CA823009F4B6CAE1 -:103F0000843009F4C3CA8091E70180934302F7012A -:103F10008281882309F449C0109293030330FDE5A0 -:103F20001F0708F0EFCA0A3F2CE5120738F4980182 -:103F300022503C452431310508F0E9CA0E94950F12 -:103F4000909303038093020300318CE5180709F472 -:103F500002CC08F07ECB0830ECE51E0709F4E9CB73 -:103F600008F050CB04302CE5120709F4D4CB08F04C -:103F700036CB02308CE5180709F4C7CB80910203D9 -:103F8000826003301C4509F4C3CB60910203109199 -:103F9000030384E090E00E94F52E612F82E290E01E -:103FA0000E94F52E0E949B15DFC806311C4509F0C2 -:103FB000E0CA8091E901811108CC89E20E94260AB9 -:103FC000FFCBCF93DF938091FB01807FA1F48091A1 -:103FD000F801882381F080913F02D091FE01609129 -:103FE000F6017091F701A091F901B091FA01C62F85 -:103FF000C723D81303C0DF91CF91089590E01097A5 -:1040000011F0CF3F19F401968770F3CF9C0143E084 -:10401000220F331F4A95E1F7F901E150FE4F41812C -:104020004713F1CF40814613EECF42814111EBCFD0 -:10403000438154814A1B5B0B483C510520F780911A -:10404000FB018F7080618093FB01F901EC5FFD4FF4 -:1040500080818F708061808386EF91E00E94771865 -:10406000DF91CF910C94850AAF92BF92CF92DF92ED -:10407000EF92FF920F931F93CF93DF93CDB7DEB7ED -:1040800065970FB6F894DEBF0FBECDBF8C0185E0FB -:10409000F801DE01519601900D928A95E1F7F80141 -:1040A000E28066EFA62E61E0B62E6091F901709174 -:1040B000FA016115710509F468C19091F60140910A -:1040C000F701892F84238F3F09F45FC1208131815B -:1040D000C380D480F090F801F601E61BF70BFF20B7 -:1040E00009F41DC18091FB01582F507FE83CF10578 -:1040F00008F0D0C0511181C0FE2C43132BC0921385 -:1041000029C06091FC017091FD01F8014681578141 -:1041100064177507F9F4E1101DC08F7080618093FA -:10412000FB01C5010E9477188091FB01F80185838E -:104130008F2D65960FB6F894DEBF0FBECDBFDF9111 -:10414000CF911F910F91FF90EF90DF90CF90BF9094 -:10415000AF900895CD2829F0822F83238F3F09F057 -:104160002FC180E0F82FF170DF2E80FF3CC08091DE -:104170003F024091FE01841315C0298B3A8B898937 -:104180009A890E94020F292F22952F702230F8F071 -:10419000243020F59F70F9F0F8019581907FD9F4D3 -:1041A000D12C1FC090E0FC0153E0EE0FFF1F5A9589 -:1041B000E1F7E150FE4F5181351306C050812513C0 -:1041C00003C05281E5120FC001968770D4CF9F7053 -:1041D00011F0882329F3805E883010F3C8010E9413 -:1041E0007718FD2CA5CFEE2009F4A2CF8091FB011A -:1041F00081608093FB01F12C9BCF43131BC0921372 -:1042000019C04091FC015091FD01F80126813781D0 -:104210004217530779F4E1100DC08583C8010E944D -:10422000771888E0F801A6EFB1E001900D928A9529 -:10423000E1F77ECFC8010E940E0F882339F1EE20EE -:1042400029F18091FB018032A0F02091F60130919C -:10425000F7013A8729871B86DD86CC868E87809179 -:10426000FC019091FD01988B8F87CE0109960E94E9 -:10427000771888E0F801A6EFB1E001900D928A95D9 -:10428000E1F70E94E11FFF24F39452CFC8010E947E -:104290007718F9CF51110AC086EF91E00E94771884 -:1042A00088E0F50111928A95E9F7A5CF431318C06C -:1042B000921316C04091FC015091FD01F801268136 -:1042C00037814217530761F4E1100AC08583C801A2 -:1042D0000E94771888E0F50111928A95E9F728CFB6 -:1042E000C8010E940E0F882389F2EE2079F2809196 -:1042F000FB01803208F4BDCF2091F6013091F70127 -:104300003A8329831B82DD82CC828E838091FC01DB -:104310009091FD0198878F83CE010196A8CFE83C4C -:10432000F105C0F6FE2CEE2009F4B0CF43131FC0F8 -:1043300092131DC02091FC013091FD01F80186818E -:1043400097812817390799F49091FB0190FD69CF67 -:10435000907F09F466CF8091FB018583903F09F43B -:104360005DCF982F907F905F8F70892B56CFC801BB -:104370000E940E0F81117DCF8091FB01816080939F -:10438000FB01C8010E947718D3CEEE2009F47ECF3E -:10439000C8010E940E0FF82E882309F477CF88E019 -:1043A000F801A6EFB1E001900D928A95E1F78091B6 -:1043B000F6019091F7010E94020F0E94E11FB8CE12 -:1043C00081E08E25CFCECF93DF93CDB7DEB7609758 -:1043D0000FB6F894DEBF0FBECDBF29873A874B8753 -:1043E0005C876D877E878F87988BCE0109960E94A8 -:1043F0003420811112C088E0FE013996DE01119649 -:1044000001900D928A95E1F78C859D85892B29F085 -:1044100089859A8589238F3FA9F580913F029091E4 -:10442000FE0189131CC060960FB6F894DEBF0FBE64 -:10443000CDBFDF91CF91089593E0AA0FBB1F9A954E -:10444000E1F7A150BE4F98E0FE01319601900D9228 -:104450009A95E1F78093FE010E94850ADECFB8E0CD -:104460008B9FC001112481509E4F0E9434208823CD -:10447000D1F280913F0290E0019687709927809356 -:104480003F02CBCFA091FE01B0E0CD010196877035 -:10449000992720913F022817190671F60E949B1553 -:1044A0001092FE0110923F0288E0E6EFF1E0DF019A -:1044B0001D928A95E9F7B1CF0F931F93CF93DF93A6 -:1044C00080918A02E0918902CCE081111AC0DF91CB -:1044D000CF911F910F910895D1E0DE0FD093890203 -:1044E0000E2F10E0EC9FF0011124E557FD4F838162 -:1044F0009481892B29F08081918189238F3F51F408 -:10450000ED2F80918A02E81738F310928A021092F8 -:104510008902DDCFC09FD001C19FB00D1124A557E6 -:10452000BD4F16968D919C911797892B29F418965B -:104530008D919C91019651F420813181428153816A -:1045400064817581868197810E94E321C09FF0017B -:10455000C19FF00D1124E557FD4F14821382D0CF77 -:104560001092F6021092F502109242018091F4022C -:104570008093F3020E94F5050C945C222F923F92E7 -:104580004F925F926F927F928F929F92AF92BF9263 -:10459000CF92DF92EF92FF920F931F93CF93DF930F -:1045A000C091F302E7E0FE2E01E010E0FCE02F2EC8 -:1045B000AEEFEA2E8091F4028C1316C00E945C22AA -:1045C000DF91CF911F910F91FF90EF90DF90CF90EF -:1045D000BF90AF909F908F907F906F905F904F9023 -:1045E0003F902F900C94F505D0E0FE01EE0FFF1FD9 -:1045F000E551FD4F80819181F89EF001F99EF00D0B -:104600001124E85EFE4F2481211158C030908A02A7 -:10461000ABE8B2E030E020E0412C5F01231508F068 -:104620004BC01A966D907C901B97F501808091800D -:104630004FEF5FEF512CC52CD12CF601EE0FFF1F71 -:10464000E80DF91D659174916616770609F4A601C7 -:10465000672B11F05394EFCF4F3F5407B1F1B801DE -:1046600002C0660F771F4A95E2F7462AA80102C0EA -:10467000440F551F5A94E2F741505109441615064C -:1046800001F5229EF001239EF00D1124E557FD4F08 -:10469000F89ED001F99EB00D1124A85EBE4F12966F -:1046A0002D913C91139737832683E082E182918795 -:1046B000808771E015967C930E94C7052196C37090 -:1046C00079CF14961C921E9213972F5F3F4F1C9622 -:1046D000A5CF9F92AF92BF92CF92DF92EF92FF92BF -:1046E0000F931F93CF93DF9300D000D000D0CDB7AE -:1046F000DEB78E010F5F1F4F86E0F80111928A9599 -:10470000E9F785E7C82E81E0D82EF12CE12CAA2408 -:10471000A394B12CF60181916F018F3F09F449C038 -:10472000F894E82FE295EF70F0E021A18F70A501D9 -:1047300002C0440F551F8A95E2F7CA01922F982BA9 -:1047400091A392A18095892382A3789400C0EBE77E -:10475000F1E030E020E0912C41914F3F09F473C02B -:10476000A42FA295AF70B0E090968C9190E04F701E -:1047700002C0959587954A95E2F780FD64C08A2D21 -:10478000022E01C0880F0A94EAF7982A2F5F3F4F44 -:104790002430310509F7F601319780818F3F11F000 -:1047A0000E94F90750EA5A95F1F7F801EE0DFF1D46 -:1047B00090828FEFE81AF80AE6E0EE16F10409F0AD -:1047C000A9CF46E050E0B80184E592E00E94D42EE3 -:1047D000FF24F394009709F4F12C892BB1F186E0C2 -:1047E000F801A4E5B2E001900D928A95E1F781E02D -:1047F000809349020E948305909348028093470268 -:1048000080914702909148020E947405059708F133 -:1048100080915402809367028091550280936802D0 -:1048200080915602809369028091570280936A02B8 -:104830008091580280936B028091590280936C02A0 -:104840001092490206C080E0A0CF809149028111F8 -:10485000D7CF80914201882301F18091F502909198 -:10486000F6020097D1F00E947405209187023091E2 -:1048700088022817390788F49091F3028091F40296 -:10488000981709F445C00E94BE2210928802109227 -:1048900087021092F6021092F50280914F0288234F -:1048A00071F080914D0290914E020E947405893EF4 -:1048B000934028F082EE0E942F0B10924F028091BD -:1048C0004C02882391F080914A0290914B020E9401 -:1048D0007405883E934048F00E94830590934B02F4 -:1048E00080934A0283E70E94090D8F2D26960FB60A -:1048F000F894DEBF0FBECDBFDF91CF911F910F9116 -:10490000FF90EF90DF90CF90BF90AF909F90089571 -:104910000E945C221092F6021092F5020E94F505A8 -:10492000BCCF2F923F924F925F926F927F928F9265 -:104930009F92AF92BF92CF92DF92EF92FF920F932E -:104940001F93CF93DF93CDB7DEB769970FB6F89477 -:10495000DEBF0FBECDBF498B5A8B6B8B7C8B8D8B93 -:104960006111109242021D861E861F86188A85E0FC -:10497000FE017196DE01199601900D928A95E1F77C -:104980008C859D85892B31F089859A8589238F3F78 -:1049900009F0D4C129853A854B855C856D857E8576 -:1049A0008F8598890E94E321C3C028EFC2162CE5A9 -:1049B000D20629F4882379F00E94B022EBCF39EF98 -:1049C000C3163CE5D30639F4882329F080914201CF -:1049D0008111F2CFC3C108E111E0E12CB12CA12C6F -:1049E00088248394912C9EEF592E44244394F801FB -:1049F0006081718166246A94762C20E0422F50E019 -:104A0000FA01EE0FFF1FE60FF71F85919491C8166C -:104A1000D90609F43A01892B11F02F5FEFCFF12C61 -:104A2000FFEF6F167F0609F445C0F8014481F0904E -:104A300042018F2D411180E0F82FF170FF2EF80117 -:104A4000258086819B85992309F408C1FF2009F4FC -:104A500005C1211014C0A40101C0440F6A94EAF7F3 -:104A6000842B8683809187029091880280399140BF -:104A700030F440E951E05093880240938702C4012A -:104A800002C0880F991F2A95E2F70197F801268145 -:104A90002817190679F48091F5029091F602009793 -:104AA00009F45FC00E9474058139914008F459C02F -:104AB000F8014482EF28FFEFAF1ABF0A095F1F4FCA -:104AC00026E0A216B10409F092CF8B85882309F461 -:104AD00020C1EE2009F41DC10E9483059093F602C7 -:104AE0008093F50280918A02883010F591E0980F4A -:104AF00090938A0298E0FE013996DE0111960190AA -:104B00000D929A95E1F73CE0839FC00111248557EF -:104B10009D4F28E0FE013196DC0101900D922A950F -:104B2000E1F72FEF3FEFFC0131872087D386C28664 -:104B300069960FB6F894DEBF0FBECDBFDF91CF915F -:104B40001F910F91FF90EF90DF90CF90BF90AF90AB -:104B50009F908F907F906F905F904F903F902F909D -:104B600008958091F3026090F402982FF0E0E0E065 -:104B7000861114C09093F3020E171F0709F49ACF01 -:104B800090E0FC01EE0FFF1FE551FD4FB182A082C6 -:104B90000196837099278093F4028CCF282E312CB4 -:104BA000F101EE0FFF1FE551FD4F20813181F7E04C -:104BB000F29FD001F39FB00D1124A85EBE4F2D913E -:104BC0003C911197398F288F712C60E070E0E72FAE -:104BD000F0E0EE0FFF1F288D398DE20FF31F2591B6 -:104BE000349121153105E1F0F8010190F081E02DBB -:104BF000FF8BEE8B60E005C02417350709F47F2C8E -:104C00006F5FE62FF0E0EE0FFF1F4E895F89E40F24 -:104C1000F51F459154914115510571F77F5FD7CF2D -:104C20007720C9F0F801671708F0FD0144820E17DC -:104C30001F0721F49093F302F72C3CCF981305C083 -:104C4000AE17BF0711F49F5F937091012F5F3F4F25 -:104C5000822F83708DCFF0E0E0E0F7CF90E021105D -:104C60001FC0B40102C0660F771F2A95E2F79B01AF -:104C7000215031092817390731F4442309F447C07A -:104C8000C5010E94C705C40101C0880F6A94EAF7F4 -:104C9000982F9095F801868189238683F22C0ACF7C -:104CA0009C01062C02C0359527950A94E2F7A901CC -:104CB00041705527BC016150710986239723892BC8 -:104CC00011F5452B01F1F80182819381892BC1F007 -:104CD0001B821C821D821E8259825A820E94830579 -:104CE0008160582F9D838C83F801828193818F830B -:104CF000988729813A814B816D817E810E94E321D1 -:104D0000F8011582C0CFF22FF1702F2EBCCF2F2CBF -:104D1000BACF9091F3028091F402981731F00E947B -:104D2000BE22EE2009F436CE03CF0E945C22109200 -:104D3000F6021092F5020E94F505F3CF61E0CE0174 -:104D400009960E943C0F6C018B85F7EFCF16FCE5AE -:104D5000DF0609F02ACE882309F43DCE81E0809356 -:104D6000420118CE1F920F920FB60F9211242F936B -:104D70003F934F935F936F937F938F939F93AF93E3 -:104D8000BF93CF93DF93EF93FF93D091E900DF7050 -:104D90008091EC00C82FC17080FDC0E81092E9003E -:104DA0008091F000877F8093F00078940E94B01586 -:104DB0001092E9008091F00088608093F000CD2B84 -:104DC000CF70C093E900FF91EF91DF91CF91BF9138 -:104DD000AF919F918F917F916F915F914F913F9193 -:104DE0002F910F900FBE0F901F9018951F920F924A -:104DF0000FB60F9211242F933F934F935F936F93AE -:104E00007F938F939F93AF93BF93EF93FF93809183 -:104E1000E10082FF09C08091E20082FF05C080911D -:104E2000E1008B7F8093E1008091DA0080FF24C055 -:104E30008091D80080FF20C08091DA008E7F80931F -:104E4000DA008091D90080FF9BC080E189BD82E1BA -:104E500089BD09B400FEFDCF81E080932C038091D1 -:104E60000703811109C00E94E7030E94B2048091E8 -:104E7000E20084608093E2008091E10080FF17C02F -:104E80008091E20080FF13C08091E2008E7F8093CA -:104E9000E2008091E20080618093E2008091D8007E -:104EA00080628093D80019BC85E080932C038091A8 -:104EB000E10084FF29C08091E20084FF25C080E1E9 -:104EC00089BD82E189BD89B5982F917080FFFBCFA4 -:104ED0008091D8008F7D8093D8008091E1008F7EF3 -:104EE0008093E1008091E2008F7E8093E2008091C8 -:104EF000E20081608093E20080912D03882309F411 -:104F000045C084E080932C038091E10083FF27C09B -:104F10008091E20083FF23C08091E100877F80932E -:104F2000E10082E080932C0310922D038091E10038 -:104F30008E7F8093E1008091E2008E7F8093E2007B -:104F40008091E20080618093E20042E060E080E0D6 -:104F50000E9480048091F00088608093F000FF91AF -:104F6000EF91BF91AF919F918F917F916F915F91E1 -:104F70004F913F912F910F900FBE0F901F9018955A -:104F800019BC10922C031092070376CF8091E30096 -:104F900087FD93E090932C03B7CF78941F921FB6B0 -:104FA0001F9211248F939F93AF93BF938091FE0222 -:104FB0009091FF02A0910003B09101030196A11D01 -:104FC000B11D8093FE029093FF02A0930003B09363 -:104FD0000103BF91AF919F918F911F901FBE1F90B2 -:104FE00018951F921FB61F9211248F939F93AF9312 -:104FF000BF938091FD02811113C08091FE029091B8 -:10500000FF02A0910003B09101034196A11DB11DC3 -:105010008093FE029093FF02A0930003B0930103DC -:10502000BF91AF919F918F911F901FBE1F901895B8 -:10503000CDB7DEB7EE970FB6F894DEBF0FBECDBF8B -:1050400084B7877F84BF0FB6F894A89580916000DD -:10505000886180936000109260000FBE80E890E04D -:105060000FB6F89480936100909361000FBE85B7EE -:10507000806885BF85B7806885BF87EF97E090938C -:10508000C5018093C4010E94E7030E94B20480918D -:10509000E20084608093E200789480912C0388235E -:1050A000A1F01091E9001F709091EC00892F8170A0 -:1050B00090FD80E8182B1092E9008091E80083FDB4 -:1050C0000E94B0151F701093E90082E084BD93E048 -:1050D00095BD9AEF97BD80936E000E947C0F811161 -:1050E00002C00E946A0E05E711E02BE7C22E21E004 -:1050F000D22EF80181918F018F3F11F00E94F907A4 -:10510000C016D106B1F786EF0E94F90787EF0E941B -:10511000F90783E90E94F90786E90E94F907E4E5A7 -:10512000F2E08AE592E0A7E6B2E011921D928E17B6 -:105130009F07D9F70E949015811102C00E94241583 -:1051400082E090E00E94E12E809360020E94950F21 -:1051500090930303809302030E9469238FE39CE9E9 -:105160000197F1F700C000000E9469238091670257 -:1051700080FF08C06FEF7FEF90E080E00E94132F68 -:105180000E94300C83E090E00E94E12E90E00E94AB -:10519000FF0A80913603909137030E94FB13509AC7 -:1051A000589A559A5D9A549A5C9A8CE090E00E94C5 -:1051B000E12E90E0B0E0A0E0809350029093510285 -:1051C000A0935202B093530280915A02811133C0CE -:1051D0000E949015811104C00E9424150E9414158C -:1051E00088E090E00E94E92E60938C0370938D0319 -:1051F00080938E0390938F036E7F71F40E94141539 -:1052000088E090E00E94E92E60938C0370938D03F8 -:1052100080938E0390938F030E940C06109282025B -:1052200080918C0380FF04C060E086950E949C13EF -:1052300081E080935A025198599A52985A9A89B1AA -:10524000869581704A9922C290E0892B80935E02F4 -:1052500060E081E20E949C1381E090E00E94A01433 -:1052600080E091E09093FA028093F90218E1C12E58 -:10527000D12C00E4A02E87E692E096E0B92EB80E7D -:1052800080912C039924939400E112E1853009F474 -:1052900051C20E946923882359F08FB7F894409136 -:1052A000FE025091FF0260910003709101038FBFD5 -:1052B000E1E6F2E0A7E6B2E010E000E0302F8D91E9 -:1052C0009191981709F45FC2292F282790E099241B -:1052D0009394422F492109F451C29DAB3EAB8921E1 -:1052E00091E009F490E09FAB0E9483058160782FE4 -:1052F00099AF88AF4DA95EA96FA989AD0E9491248D -:10530000F801EF59FD4F80819826908280918202AA -:105310008823D1F180918102E0918C03E695E81B0E -:10532000E0937D02823009F045C2F0E0EA55FD4F7E -:10533000E4910E2F10E0BDE78B2EB2E19B2E809101 -:105340007E02882361F010927E020E948305909372 -:105350007C0280937B021092800210927F020E9456 -:105360008305E0917B02F0917C028E1B9F0B8F3FA7 -:105370009F4750F4E00FF11FF0937C02E0937B0213 -:105380008BE792E0F4010995E0915E02EE0FEE0FDB -:10539000E0935E0289B181FBEE24E0F84A9964C291 -:1053A00080E08E29E82BE0935E02EF70F0E0E15898 -:1053B000FE4F808190915D02890F80935D0220E015 -:1053C000843034F180915C028F5F80935C0212E044 -:1053D00018AB19AA81E08AAB0E9483058160782FFF -:1053E0009CAB8BAB48A959A96AA98CA90E949124AE -:1053F0001BA71CA61DA60E9483058160782F9FA76E -:105400008EA74BA55CA56DA58FA50E94912421E0D8 -:1054100080915D028D3F2CF580915C0281508093DC -:105420005C021EA21FA281E088A70E948305816002 -:10543000782F9AA789A74EA15FA168A58AA50E9487 -:10544000912419A21AA21BA20E9483058160782FC1 -:105450009DA38CA349A15AA16BA18DA10E94912467 -:1054600021E080915D02082E000C990B64E070E051 -:105470000E94472E80935D02222359F08FB7F89443 -:105480004091FE025091FF02609100037091010370 -:105490008FBF86E0E4E7F2E0DE01119601900D9205 -:1054A0008A95E1F7909076028090770210917802C9 -:1054B000009179021092760210927702109278028F -:1054C00010927902892D882909F448C080917202CE -:1054D000909173020E9474059C0190916E02992331 -:1054E00009F4AEC323333105C8F19F3F19F09F5F24 -:1054F00090936E02992059F00E947D079FEF191436 -:105500000CF491E0899F802D1124809376028820ED -:1055100059F00E947D079FEF18140CF491E0899FC9 -:10552000802D112480937702309176023323B1F0DD -:1055300020917702222391F045EB3403C00111241E -:10554000992309F494C19093760245EB24039001CA -:105550001124332309F48FC130937702812F802BDC -:1055600009F448C080917002909171020E94740504 -:105570009C0190916D02992309F45DC32536310594 -:10558000C8F19F3F19F09F5F90936D02112359F06E -:105590000E945B079FEF11160CF491E0899F802D0C -:1055A000112480937802002359F00E945B079FEF3B -:1055B00010160CF491E0899F802D112480937902BC -:1055C000309178023323B1F020917902222391F0B7 -:1055D00045EB3403C0011124992309F450C1909381 -:1055E000780245EB240390011124332309F44BC1C5 -:1055F000309379028091760290917702892B909175 -:105600007802892B90917902892B11F00E94BB06B8 -:1056100086E0FE013196A4E7B2E001900D928A95F2 -:10562000E1F70E94BB0590915F02891731F00E945B -:10563000BB0580935F020E948C0B80912C03843009 -:1056400009F01ECE83E08093E9008091E80082FF9C -:1056500017CE8091E80090E085FF06C00E94060406 -:10566000882309F414C191E08091E8008B7780933E -:10567000E800992309F404CEE981E150E33108F010 -:1056800088C1F0E0E15BF04D0C947D2E92E0DDCD21 -:1056900080912C03843009F440C080E00E948C0B80 -:1056A0001092820280917A02811116C090927A0241 -:1056B00080918C03982F917090935B028E7F8093E2 -:1056C0008C039FEFE0E7F2E09150E040F040E1F71B -:1056D00000C000000E94B90F1092FD020FB6F894AE -:1056E000A895C09260000FBEA092600083B7817F32 -:1056F000846083BF83B7816083BF7894889583B7C4 -:105700008E7F83BF0FB6F894A89580916000886162 -:1057100080936000109260000FBE80912B0388235D -:1057200049F00E946923E7E6F2E08191811164C2A9 -:10573000BE12FBCF80912C03853009F4A9CF0E94C3 -:105740009B150E94BB050E948C0B10927A028091DF -:105750005B02882361F080918C03816080938C03CD -:1057600060E086950E949C130E94A30F92CD8091C9 -:1057700083028823C9F30E94B90FF6CF9F5F990C6B -:10578000943009F0A6CD0F5F1F4F0630110509F0C8 -:1057900095CD8FEF8AAF8BAF1CAE0E9483058160E1 -:1057A000782F9EAF8DAF4AAD5BAD6CAD8EAD0E94D4 -:1057B0009124ACCD863059F4F0E0ED55FD4FE491E5 -:1057C0000E2F10E0ADE68A2EA2E19A2EB8CD8930D8 -:1057D00061F4E695F0E0E056FD4FE4910E2F10E005 -:1057E000F9ED8F2EF1E19F2EAACD8F3061F4E69571 -:1057F000F0E0E356FD4FE4910E2F10E0EBE68E2E25 -:10580000E1E19E2E9CCD853159F4F0E0E656FD4F46 -:10581000E4910E2F10E07DE1872E71E1972E8FCD60 -:1058200008E210E044E9842E40E1942E883109F426 -:1058300086CD833249F4E8E9F2E00591149164E100 -:10584000862E62E1962E7BCD04EF11E05BE5852E7E -:1058500050E1952E843209F472CD00ED17E03BE063 -:10586000832E36E0932E6BCD82E090E09ACD81E0DE -:10587000809376026ACE81E0809377026FCE81E0DA -:1058800080937802AECE81E080937902B3CE00E2BD -:1058900010E0CE0101964C018091E80085FD0AC020 -:1058A0008091E8008B778093E8000E9406048823AB -:1058B00099F3D9CE8091F100F40181934F01015009 -:1058C000110951F7D0CE1A8289E08B832DC08A81CD -:1058D000823009F4A7C18330A9F0813009F059C0A2 -:1058E0002FB7F8946091FE027091FF02809100033F -:1058F000909101032FBF0E94832E6B837C838D8345 -:105900009E8312C0809167028B83809168028C8392 -:10591000809169028D8380916A028E8380916B02EF -:105920008F8380916C02888780912C03843009F0EA -:10593000A7CC1091E9001F709091EC00892F817025 -:1059400090FD80E8182B82E08093E9008091E800C8 -:1059500080FF0DC050E040E060E270E0CE010196B3 -:105960000E9437048091E8008E778093E8001F70D2 -:105970001093E90085CC8A81823059F46B817C8157 -:105980008D819E810E94832E86E290E00E94F52EFA -:10599000CBCF8FEF8983C8CF4C816B818A810E94E6 -:1059A000930E9827892798279E838D83BDCF8D805E -:1059B0009E809824892498248A810B81F8E00F9F87 -:1059C0008001112420E3829F000D111D11248C8180 -:1059D00090E0880F991F080F191F692DC80187963D -:1059E0000E94F52E682DC8018896D0CF0E94000E27 -:1059F0009BCF8A818138C1F060F4803809F094CF60 -:105A000020E04B8160918E0380918D030E94A31250 -:105A10008BCF823859F1833809F086CF20E040914E -:105A20008F036C818B81F2CF60E08B810E949C138D -:105A30009B8180918C03911111C08E7F80938C0388 -:105A4000109282024FEF80E792E0415080409040F8 -:105A5000E1F700C000000E94B90F66CF816080931B -:105A60008C0360E086950E949C135ECF8B818093AF -:105A700090035ACF8A81813899F030F4803809F048 -:105A800053CF80918F0321CF823891F0833809F072 -:105A90004BCF80918D038B8380918E038C8344CF79 -:105AA00080918C0380FF02C086950FCF80E00DCFE0 -:105AB000809190030ACF60918C0370918D03809147 -:105AC0008E0390918F030E9491122ECF80E18A83E2 -:105AD0002BCF81E08A8389EFF8CE0A811B811027C2 -:105AE00001271027FE0131963F018C80CF01880DE0 -:105AF000911D4C01C801895F9D4F8614970409F4DC -:105B000013CF093FE1E01E0750F40E94E12EF3019C -:105B100084830F5F1F4FFFEF6F1A7F0AEBCFF301F4 -:105B20001482F7CF0A811B81102701271027CE018D -:105B300001963C018C80800E912E911CC801895FDA -:105B40009D4F8016910609F4EFCE093FE1E01E0754 -:105B500020F4F30164810E94F52EFFEF6F1A7F0A93 -:105B60000F5F1F4FEBCF0E94F00DDECE8AE0AFCF6C -:105B70000A811B81102701271027CE0101963C01C5 -:105B80008C80FC01E80DF11D4F01C8018796861439 -:105B9000970409F4C9CE003EF1E01F0750F40E94BB -:105BA000E12EF30184830F5F1F4FFFEF6F1A7F0A0F -:105BB000ECCFF3011482F7CF0A811B811027012754 -:105BC0001027CE0101963C018C80800E912E911CF5 -:105BD000C80187968016910609F4A6CE003EE1E042 -:105BE0001E0720F4F30164810E94F52EFFEF6F1A67 -:105BF0007F0A0F5F1F4FECCF09BD19BD09B400FE2E -:105C0000FDCF8091D8008F7D8093D8008091E000F7 -:105C100082608093E0008091E00081FDFCCF0E94D3 -:105C20009B1588CD86E290E00E94E12E1B821C82AB -:105C30001D828E8379CE2D32314008F0A4CCDACC8F -:105C40002D32314008F053CC89CC87FB082E062634 -:105C500087FD819567FD61950E94BB2E0EF491959D -:105C600007FC81950895AA1BBB1B51E107C0AA1F21 -:105C7000BB1FA617B70710F0A61BB70B881F991FED -:105C80005A95A9F780959095BC01CD01089597FB91 -:105C9000072E16F4009407D077FD09D00E94332E0A -:105CA00007FC05D03EF4909581959F4F089570951F -:105CB00061957F4F0895A1E21A2EAA1BBB1BFD011F -:105CC0000DC0AA1FBB1FEE1FFF1FA217B307E407DB -:105CD000F50720F0A21BB30BE40BF50B661F771F33 -:105CE000881F991F1A9469F7609570958095909513 -:105CF0009B01AC01BD01CF010895EE0FFF1F059080 -:105D0000F491E02D0994692796276927782787273A -:105D1000782708950E94922E332312F48A1B9B0B3E -:105D20000C94A32EA29FB001B39FC001A39F700D3E -:105D3000811D1124911DB29F700D811D1124911D93 -:105D400008950E94922EB7FF0895821B930B089529 -:105D50000E94922EA59F900DB49F900DA49F800D40 -:105D6000911D11240895B7FF0C94A82E0E94A82E0F -:105D7000821B930B0895991B79E004C0991F961715 -:105D800008F0961B881F7A95C9F780950895FC0145 -:105D90004150504030F001900616D1F73197CF01B5 -:105DA0000895882799270895FB01DC0104C08D918F -:105DB0000190801921F441505040C8F7881B990B7D -:105DC0000895F999FECF92BD81BDF89A992780B5C3 -:105DD0000895A6E1B0E044E050E00C941B2FA8E148 -:105DE000B0E042E050E00C941B2F262FF999FECF33 -:105DF00092BD81BDF89A019700B4021639F01FBA1E -:105E000020BD0FB6F894FA9AF99A0FBE089503963A -:105E1000272F0E94F62E0E94F52E252F0E94F62E87 -:105E2000242F0C94F62E0196272F0E94F62E0C9408 -:105E3000F52EDC01CB01FC01F999FECF06C0F2BDC5 -:105E4000E1BDF89A319600B40D9241505040B8F738 -:105E50000895F894FFCF270F270F300F300F320F20 -:105E6000300F300F300F270F270F370F300F300F45 -:105E7000370F9516BD161017BD161017F0162817F8 -:105E8000101725183218EF1CEF1C5E1D5E1DB91D82 -:105E9000D31D251D251DDE1D661E751E751E632C5A -:105EA000672CBB2CCC2CD72CF62CF92C3A2D5B2D47 -:105EB000C92CC92C662D692D6D2D922DB32DB62DB3 -:045EC000B82DDC2DF0 -:105EC4007105F00BCF0BCB0BC70B01191A1B1C1D53 -:105ED4001E1F202122010201CA002A00000000C462 -:105EE400004C00000000BE005000000000B800514B -:105EF40000000000B2004F00000000AC005200009F -:105F040000000101818283E200E900EA00B500B6E5 -:105F140000B700CD008301CC008A019201940121D5 -:105F240002230224022502260227022A02B300B415 -:105F3400006F007000F03435366667F6F79396000C -:105F4400FF0100010000FFFF0000010001FF00004D -:105F540001020202020606060909090909090F0FCE -:105F64000F0F0F0F151515181919191919191919D2 -:105F7400191923244022B6A8018601D000BD06D6F3 -:045F840006F6060017 +:101A100008951F93CF93DF93182FCAE0D0E0893346 +:101A200011F4C0E5D0E0812F0E94540C8FE99FE0B3 +:101A30000197F1F700C000002197C1F7812FDF91D6 +:101A4000CF911F910C942F0BDF92EF92FF920F9387 +:101A50001F93CF93DF93E82FF0E0E85EFD4FD49023 +:101A6000282F26952695269530E0F901E85FFD4F51 +:101A70000491877010E0082E02C0159507950A940E +:101A8000E2F701701127F901E850FE4FE490F12CC4 +:101A9000082E02C0F594E7940A94E2F791E0E92257 +:101AA000FF24F901E851FE4FC491D0E002C0D59562 +:101AB000C7958A95E2F7C170DD270115110519F068 +:101AC00081EE0E94540CE114F10419F086EE0E949C +:101AD000540C8D2D0E94090DEF2819F086EE0E94FE +:101AE0002F0B012B19F081EE0E942F0BCD2B51F003 +:101AF0008CE2DF91CF911F910F91FF90EF90DF90DB +:101B00000C94090DDF91CF911F910F91FF90EF90F1 +:101B1000DF900895CF93DF93C7E0D2E060E0CE017D +:101B20000E944B2E2196C11584E0D807B9F7DF91AA +:101B3000CF9108956F927F928F929F92AF92BF92B2 +:101B4000CF92DF92EF92FF920F931F93CF93DF9389 +:101B50008BECC82E84E0D82E0FE510E0E801E0976A +:101B600036011CC0F50185909490692DC7010E9433 +:101B70004B2E682DC70101960E944B2E82E0A80EC5 +:101B8000B11C82E0E80EF11CCE15DF0559F788E0A4 +:101B9000680E711C28960C171D0731F07E0188E035 +:101BA000E81AF1085301DECF005D1F4F80E3C80E35 +:101BB000D11C0F3382E0180789F6DF91CF911F9176 +:101BC0000F91FF90EF90DF90CF90BF90AF909F90DC +:101BD0008F907F906F900895CF93C82F6FEF8111F2 +:101BE00061E283E290E00E944B2E6FEFC11161E150 +:101BF00084E290E00E944B2E6FEFC11165E285E216 +:101C000090E0CF910C944B2E80E00E94EC0D60E0B0 +:101C100086E290E00E944B2E0E949A0D0E948A0D4F +:101C200081E00C94EC0DCF93C0916403C2FB992723 +:101C300090F9981781F080FBC2F9C093640360911A +:101C4000630384E090E00E944B2E6C2F82E290E0D0 +:101C5000CF910C944B2ECF9108950F931F93CF9358 +:101C6000DF9328E0629FE001112450E0440F551FEC +:101C7000C40FD51F30E3839FC00DD11D1124CE01A9 +:101C800087960E94372E082F10E0102F0027CE01D4 +:101C900088960E94372E9801282BC901DF91CF9199 +:101CA0001F910F910895462F8A3038F4763028F42A +:101CB000643018F4672F0C942D0E90E080E00895A6 +:101CC000BF92CF92DF92EF92FF920F931F93CF9329 +:101CD000DF937C0100919803109199038091460253 +:101CE00090914702082B192BCFE0D0E0CC24C3946D +:101CF000D12CBC2EC6010C2E02C0880F991F0A944D +:101D0000E2F780239123892B71F4219790F7B12C6E +:101D10008B2DDF91CF911F910F91FF90EF90DF906E +:101D2000CF90BF900895B7018C2F0E94530E0E9450 +:101D30005308019751F3ECCFCF93DF93EC010E944E +:101D4000600EBE010E94530EDF91CF910C94530898 +:101D5000FC0186819781009779F00E945308292F12 +:101D60002F7092959F7092509E30A0F4E92FF0E072 +:101D7000EF57F14D0C94D32D808191810E949C0EE0 +:101D8000EECF803F19F020F4883E20F481E00895E2 +:101D9000843FE1F380E00895883EC0F3813FD1F7AE +:101DA000F5CF822F86958695869508951F93CF93BC +:101DB000DF9300D000D00F92CDB7DEB7FC012681B3 +:101DC00037812115310541F525E0DE01119601909D +:101DD0000D922A95E1F7FC01228189819A812223C3 +:101DE000B9F06623A9F00E94600E182F682F898130 +:101DF0009A810E94B60A69817A81812F0F900F9093 +:101E00000F900F900F90DF91CF911F910C94530E74 +:101E10000E948F0A182FEFCFC9010F900F900F90DB +:101E20000F900F90DF91CF911F91089583E290E082 +:101E30000E94372E813289F484E290E00E94372E8E +:101E4000813159F485E290E00E94372E91E085328D +:101E500009F090E0892F8170089580E0FCCF6091B7 +:101E6000E302669570E04BE050E08AE091E00E946A +:101E70001D2E892B19F481E080938A020E9483052C +:101E800090938402809383020895CF92DF92EF9221 +:101E90000F931F93CF93DF93CDB7DEB7C455D1090E +:101EA0000FB6F894DEBF0FBECDBF609119018091CF +:101EB000E30280FF4CC0EFEAF3E09E012F5F3F4F4B +:101EC0008E010B5A1F4FC901A4914A2F50E0DA012D +:101ED000AA0FBB1FA40FB51FA157BD4FCD90DD901A +:101EE000EC90D901CD92DD92ED929D0131960A17C9 +:101EF0001B0751F72091180143E0249F800D911D8D +:101F00001124279A25B12F7735B130685FB7F8943F +:101F1000FC01649FE00DF11D1124BF0168177907D2 +:101F200049F55FBFEFE5F4E03197F1F700C000003D +:101F3000CC5ADF4F0FB6F894DEBF0FBECDBFDF9196 +:101F4000CF911F910F91EF90DF90CF9008958091E6 +:101F50001A0190911B0123E0829FF0011124E157A7 +:101F6000FD4F891708F0A7CF1182108212828F5F70 +:101F70003396F7CFDC014D91CD01E8E035B9000093 +:101F800000C047FF25B9440F000000C000C000C0DA +:101F900025B900C0EA9591F7C1CF0F931F93CF9356 +:101FA000DF93EC0110E000E090911C019017110606 +:101FB00009F06CF40E94450F8C8190E001968170CD +:101FC00099278C83DF91CF911F910F9108952091D4 +:101FD0001A01A801420F511D9A01220F331F240F2D +:101FE000351F21573D4F4C816091E5028091E402FD +:101FF00096959017110651F04CF0442349F040910A +:10200000E6020E9422060F5F1F4FCECF4423B9F392 +:1020100040E0F7CF8F929F92AF92BF92CF92DF9224 +:10202000EF92FF920F931F93CF93DF93EC014C81BC +:10203000042F10E09801D8010E94E82D9B01AC010B +:102040000E94FE2D4B015C01E0E2F0E0E01BF10B91 +:10205000A5E5B0E0AC019B010E94FE2D6B017C0167 +:102060009F01DF010E94E02D9B01AC010E94092E1F +:102070009B01AC01280D391D4A1D5B1DC701B6012E +:102080000E94B12DF22E822F90E039E23F1560F1CF +:1020900043E0249F9001112435952795122F109528 +:1020A00000E085E5E82EEF1880911C01081758F133 +:1020B0000E94450F9C8181E0992319F0903219F418 +:1020C0008FEF8093170180911701890F8C83DF9127 +:1020D000CF911F910F91FF90EF90DF90CF90BF9025 +:1020E000AF909F908F90089525E530E0B901681B6F +:1020F000790B9B01220F331F260F371F37FFCCCFE1 +:102100002F5F3F4FC9CF8E2D01FD8F2D20911A01DA +:10211000622F600F7727771F9B01220F331F260F37 +:10212000371F21573D4F412F6091E5020E94220643 +:102130000F5FBACF0F931F93CF93DF9380911A0154 +:1021400090911B0123E0829FF0011124E157FD4F84 +:10215000891740F1C0E0D3E060911C01C61740F13F +:102160000E94450F2091150180918D02820F80936E +:102170008D0290911601920F90931601191654F446 +:10218000082E000C990B40911C014150550B8417EF +:1021900095071CF0219520931501DF91CF911F9198 +:1021A0000F9108951182108212828F5F3396D0CFE3 +:1021B0000C2F10E070E0C8010E949D2D20911A01A3 +:1021C000820F482F50E020918D02022E000C330B1D +:1021D00002171307BCF020911601022E000C330BDE +:1021E000201731077CF08D9F9001112421573D4F1E +:1021F0004091E6026091E5028091E4020E9422068D +:10220000CF5FAACFFA01EE0FFF1FE40FF51FE157D2 +:10221000FD4F118210821282F3CF9F92AF92BF9234 +:10222000CF92DF92EF92FF920F931F93CF93DF93A2 +:10223000FC0182810FEF80FF01E010E04CE1942E61 +:10224000A0901C011A15D0F00E94450F80918C02BD +:10225000013009F054C0811102C080911C018150ED +:1022600080938C02DF91CF911F910F91FF90EF909F +:10227000DF90CF90BF90AF909F900895C0911A01CA +:10228000C12ED12CCC0DDD2DD11DCE01880F991F73 +:10229000C80FD91FC157DD4F198218821A8234E046 +:1022A000E32EF12CB12C80918C028B0D8D311CF121 +:1022B000692D0E947B2D892F082E000C990BC816C2 +:1022C000D90691F48091E6028E9DA0018F9D500D5C +:1022D000112455954795559547959E016091E502C6 +:1022E0008091E4020E942206B00EF1E0EF1AF1089C +:1022F000D1F61F5FA5CF87FFDFCF8A0DDDCF90E03E +:10230000019660911C0170E00E949D2DA9CFEF9273 +:10231000FF921F93CF93DF93EC0110E0EE24EA9439 +:10232000F12C60911C01161770F00E94450F9A81E4 +:102330008C8190FF27C08F5F8C83DF91CF911F919D +:10234000FF90EF90089520911A01422F410F5527D9 +:10235000551FCA019A01220F331F280F391F215719 +:102360003D4F70E0C7010E949D2D962F8C814091BA +:10237000E6026091E502199F800D11240E94220659 +:102380001F5FCFCF8150D8CF1F93CF93DF9300D063 +:102390000F92CDB7DEB7122F9091E30290FF16C0D7 +:1023A0009E012F5F3F4F0E9422068B819981212F32 +:1023B00030E0F901EE0FFF1FE20FF31FE157FD4F71 +:1023C0002A812183908382830E94450F0F900F9072 +:1023D0000F90DF91CF911F9108959091E30290FFAC +:1023E00014C090911A0120911B0133E0939FF001DA +:1023F0001124E157FD4F921710F00C94450F818383 +:10240000608342839F5F3396F6CF08950F931F93A7 +:10241000CF93DF9300D00F92CDB7DEB78C018091C0 +:102420008E0281110AC09E012F5F3F4F44EB6FEF78 +:102430000E9422068A8180938E02F80164816130B5 +:1024400069F080918E0240E0662361F040E06230E6 +:1024500011F440918E0280E060E004C060918E0231 +:1024600040E080E00E94ED11F801848190E0019647 +:1024700063E070E00E949D2D84830F900F900F9079 +:10248000DF91CF911F910F910895CF93DF9300D0EB +:102490000F92CDB7DEB79091E30290FF0AC09E0184 +:1024A0002F5F3F4F0E9422064B8169818A810E94E3 +:1024B000ED110F900F900F90DF91CF910895CF9372 +:1024C000DF93EC01E3EEF2E0438162818C810E94B4 +:1024D00045128C818F5F8C83DF91CF910895CF93CC +:1024E000DF93EC01EC81F0E0E553FC4F4491E3EE27 +:1024F000F2E0628181810E9445128C818F5F8C8322 +:10250000DF91CF910895CF92DF92EF92FF926B010E +:102510007C010E940C06B701A60188E090E0FF90C4 +:10252000EF90DF90CF900C945D2EAF92BF92CF9240 +:10253000DF92EF92FF920F931F93CF93DF9300D020 +:102540000F92CDB7DEB7182FF62E042FE22E909102 +:10255000E30290FF29C0E92FE695AE2FB0E0AC561C +:10256000BE4F8C91809389029E7F923059F59E01D7 +:102570002F5F3F4F812F0E9422064B8169818A8104 +:102580000E94ED111093E402F092E5020093E6023E +:10259000EE2051F06091E3027091E4028091E50237 +:1025A0009091E6020E9483120F900F900F90DF919E +:1025B000CF911F910F91FF90EF90DF90CF90BF9040 +:1025C000AF900895823019F40091E602DBCF863097 +:1025D00019F41091E402D6CF8930D9F3893191F6FC +:1025E000E9518E2F8170D82EE695F0E0E655FC4F2C +:1025F000A590B490C12CBB2460911C01C61618F0A4 +:102600000E94450FBFCF2C2D30E0A29EC001A39E9B +:10261000900DB29E900D112470E00E94892D812FA3 +:10262000D11013C0860F40911A01420F532F511D34 +:102630009A01220F331F240F351F21573D4F402F82 +:102640006F2D0E942206C394D7CF861BECCFE3EEFA +:10265000F2E0438128E0421B08F440E021E062817F +:1026600081810C949512E3EEF2E0438128E0420F61 +:1026700008F44FEF21E0628181810C949512E3EE22 +:10268000F2E0628128E0621B08F460E021E043810F +:1026900081810C949512E3EEF2E0628128E0620FF2 +:1026A00008F46FEF21E0438181810C949512E3EEF1 +:1026B000F2E0818121E04381628188500C9495127F +:1026C000E3EEF2E0818121E043816281885F0C9436 +:1026D00095128091E702882319F081508093E702D8 +:1026E0006091E3027091E4028091E5029091E6022C +:1026F0000C9483128091E702833018F48F5F8093EB +:10270000E7026091E3027091E4028091E50290910A +:10271000E6020C9483129091E30290FF36C0917010 +:10272000811129C092609093E302662351F0609179 +:10273000E3027091E4028091E5029091E6020E942A +:1027400083126091E302669570E04BE050E08AE00E +:1027500091E00E941D2E892BA9F010928A0281E03F +:102760008093860220E04091E6026091E50280912C +:10277000E4020C949512853210F09864D4CF880F3F +:10278000982BD1CF0E942F0FEACF089560E00C94D0 +:102790008B1321E030E0A90102C0440F551F8A9538 +:1027A000E2F7CA0120918B02662391F0822B80937D +:1027B0008B0280918A02811105C08091E302869587 +:1027C0000E94C6138091E30280FD05C00C94450F62 +:1027D00080958223ECCF08950F931F93CF93DF93BF +:1027E000EC0161E0009709F0682F617080E00E94C1 +:1027F000C91360E0209721F0BE017695679561705E +:1028000081E00E94C91360E0209731F0BE01769507 +:10281000679576956795617082E00E94C91360E0C4 +:10282000209739F0BE0113E0769567951A95E1F788 +:10283000617083E00E94C91360E0209739F0BE0107 +:10284000B4E076956795BA95E1F7617084E00E94EF +:10285000C913AE0170E060E0BB27A72F962F852F2C +:102860000097A105B105D9F1AC01BD0188E08A014D +:102870009B01F4E03695279517950795FA95D1F7C2 +:10288000011511052105310519F08C5FB901A80169 +:102890008A019B01E2E03695279517950795EA9501 +:1028A000D1F7011511052105310519F08E5FB90128 +:1028B000A8017695679557954795452B462B472B4D +:1028C00009F08F5F823019F160F4882399F081302C +:1028D000C1F0CE01DF91CF911F910F91089580E05B +:1028E000C6CF8330C9F08430A1F720E044E66FEF13 +:1028F0008FE004C020E044E66FEF82E30E9495126F +:10290000E8CF20E044E66FEF85E00E94951220E0DA +:1029100044E66FEF80E8F2CF20E044E66FEF87ED0A +:10292000EDCF0E94EC1390939903809398030C943D +:10293000E20A80919803909199039C0126703327B5 +:102940002630310519F488600C949114877FFCCFF0 +:1029500021E030E002C0220F331F8A95E2F7209574 +:1029600030958091980390919903822393230C943E +:102970009114909142028095892380934202282FDE +:10298000277039F4282F082E000C330B92171306EA +:1029900021F49091640392FF07C0859585958595F4 +:1029A0000E94A81410924202089521E030E002C073 +:1029B000220F331F8A95E2F7809198039091990333 +:1029C000822B932B0C9491148091E3028695815075 +:1029D00009F484E261E00C948B138091E302869504 +:1029E0008F5F853208F081E061E00C948B13909149 +:1029F000E30290FF07C09695981720F0961710F401 +:102A00000C94ED1461E00C948B13E3EEF2E083E0A0 +:102A1000808311828FEF828388E2838314826081B6 +:102A20007181828193810C94831269EE7EEF90E034 +:102A300080E00E94692E60E082E090E00E944B2ED0 +:102A400060E083E090E00E944B2E109247021092CB +:102A5000460260E084E090E00E944B2E60E082E25B +:102A600090E00E944B2E60E085E090E00E944B2EAB +:102A700060E086E090E00E944B2E6FEF87E090E0F0 +:102A80000E944B2E40E050E0BA0188E090E00E94A6 +:102A90005D2E60E08DE090E00E944B2E40E050E023 +:102AA000BA0188E190E00E945D2E60E087E190E04D +:102AB0000E944B2E40E050E0BA018CE190E00E9471 +:102AC0005D2E70E060E080E290E00E94692E40E0C0 +:102AD00050E0BA0188E190E00E945D2E80E00E9403 +:102AE000EC0D0E94040E40E050E0BA018FE090E04F +:102AF0000E945D2E40E050E0BA0183E190E00C942A +:102B00005D2E90E080E00E94452E893E9E4F11F49C +:102B10000C94160F80E0089580914801ECECF1E0F0 +:102B2000882359F08091630387FF07C08EE1DF019E +:102B30001D928A95E9F70C94E20A86E0F8CF9F92FD +:102B4000AF92BF92CF92DF92EF92FF920F931F93BB +:102B5000CF93DF9300D000D0CDB7DEB77C01FC016E +:102B600083819481892B31F08081918189238F3FEA +:102B700009F001C60F900F900F900F90DF91CF9149 +:102B80001F910F91FF90EF90DF90CF90BF90AF908B +:102B90009F900895980122513F452031310508F05A +:102BA000DFC58FEF93E00E94372E025167E0C62EFB +:102BB00062E0D62E882339F1809142028770D1F2EB +:102BC000F70182818823B1F282E00F900F900F907D +:102BD0000F90DF91CF911F910F91FF90EF90DF90B9 +:102BE000CF90BF90AF909F900C94B914C114F4E0B3 +:102BF000DF0611F3C6010E94372E811101C001507A +:102C00002FEFC21AD20A0111F1CF1C821B82BB2402 +:102C1000B3945AE0A52E86010F5F1F4FC6010E9494 +:102C2000372E89831A82882339F29FEF980F9330C9 +:102C300008F58A83B98232E0C30ED11CC8010E9414 +:102C4000372E8B83882309F4B7CF8E010F5F1F4F78 +:102C5000F80180818823F9F2813009F043C0918125 +:102C60008281913049F40E5F1F4F0E94090D0F5F62 +:102C70001F4FEECF6801E9CF923029F40E5F1F4F4E +:102C80000E94540CF4CF933029F40E5F1F4F0E9422 +:102C90002F0BEDCF943019F00F5F1F4FE8CF0E5F71 +:102CA0001F4F30E020E0B8016F5F7F4FF801418196 +:102CB0008053990B8A30910550F021503109B8F2B8 +:102CC0008FE99FE00197F1F700C00000F6CFA29EC8 +:102CD000F001A39EF00D11249C012E0F3F1F842FA5 +:102CE0008B01E1CF0E94240DC2CF81E00E94D51458 +:102CF0000E94991461CF81E00E94A814F9CF82E06C +:102D0000FBCF882309F404C180915702811106C0CA +:102D100081E08093570282EE0E94540C0E9483054A +:102D200090935602809355028BE20E94540CF70157 +:102D30008281882369F0C801815E9C45059740F433 +:102D40006FE1600F609358028CE090E00E944B2E80 +:102D500017FF5EC0F7018281882309F459C00E94E1 +:102D6000BB05869581708093EB019091580291305C +:102D700029F4882319F089E30E94090D80916903E1 +:102D80008093EA011092690380915802813009F41E +:102D9000A8C1882309F4A1C1823009F4B5C18430E7 +:102DA00009F4B9C1EFE3FCE93197F1F700C0000085 +:102DB0005801E894B7F84CE0C42ED12CC5010C2C76 +:102DC00002C0969587950A94E2F78F7096EF980F58 +:102DD000963008F4A5C1805D0E94240DF4E0CF1A5E +:102DE000D1082CEFC2162FEFD20641F7809158027E +:102DF000813009F49BC1882309F494C1823009F41D +:102E000091C1843009F49EC18091EA0180936903E5 +:102E1000F7018281882369F18091690382720C3CF9 +:102E2000FCE51F0709F441C208F0C1C1063C3CE5BE +:102E3000130709F426C208F098C1033CECE51E070D +:102E400009F415C208F080C1023C2CE5120709F410 +:102E5000E7C10A358DE5180709F465C208F03FC2DD +:102E60000115ECE51E0709F44CC20E3D1C4509F4A2 +:102E700057C2F70186819781009709F458C20E94D2 +:102E800053088C01F701D280C580C2943FE0C32271 +:102E9000809142028770A1F0AD2CDD2091F0812F4E +:102EA000807F803421F080E2800F883048F082E01B +:102EB0000E94B914809142028770AA24A3948111C0 +:102EC000A12C912E92942FE09222FBE0F91508F4A8 +:102ED0007BC2E92DF0E0E157F14D0C94D32D88230E +:102EE000A1F080915702811106C081E080935702C2 +:102EF00082EE0E94540C0E948305909356028093A8 +:102F0000550281EE0E94540C0FCF81EE0E942F0BD0 +:102F10008BE20E942F0B0BCF882309F408CF81EEA0 +:102F20000E94540C83EE0E94540C8FE40E94540CB7 +:102F30008FE40E942F0B83EE0E942F0B81EEE9CFCE +:102F4000882309F4F4CE81EE0E94540C83EE0E9493 +:102F5000540C80E50E94540C80E5EBCF882309F4E3 +:102F60002BCE1091540281E01827109354020E9436 +:102F7000830590935302809352021123C9F028E1F4 +:102F800048E76FEF8FE00E94C41129E148E76FEF37 +:102F90008FE00E94C4112AE148E76FEF8FE00E94A2 +:102FA000C4112BE148E76FEF8FE00E94C41104CEFB +:102FB00010921A018CE180931B0180931C0181E225 +:102FC0000E94C613F9CD882309F4B1CE80EE0E9489 +:102FD000540C81EE0E94540C80E10E94540C80E15C +:102FE0000E942F0B81EE0E942F0B80EE0E942F0B70 +:102FF00080914B0291E022E148E76FEF89278093AF +:103000004B02882351F08FE00E94C41126E148E76B +:103010006FEF8FE00E94C4118ACE8FEA0E94C41124 +:1030200026E148E76FEF8FEAF5CF882309F4C4CD96 +:103030001091510201E01027109351020E94830564 +:1030400090934F0280934E028091500210921A0189 +:10305000882319F18CE180931B0180931C0181E28C +:103060000E94C61328E044E666EE80E00E94C41188 +:1030700029E044E666EE80E00E94C4112DE044E6BB +:1030800066EE80E00E94C41100935102109250023B +:1030900010924D0210924C028FCD8CE180931B0157 +:1030A00080931C0181E21123A9F00E94C61328E03D +:1030B00044E666EE80E00E94C41129E044E666EE34 +:1030C00080E00E94C4112DE044E666EE80E00E949C +:1030D000C411DCCF0E94C613D9CF82EE0E94540CDB +:1030E00061CE83E00E94100B88E10E94540C8FE3B4 +:1030F0009CE90197F1F700C0000088E10E942F0BC6 +:1031000083E00E94050B4ECE82EE0E94540C87E5B0 +:103110000E94090D47CE86EE0E94090D88E1F8CF86 +:10312000895A5ACE82EE0E942F0B6ECE8CE20E94FC +:10313000090D8091EB01882309F466CE89E30E9492 +:10314000090D62CE88E2FBCF043C3CE5130709F48D +:1031500093C047E553E160E673E1053C9CE5190740 +:1031600009F077CE0E94060627CD093CECE51E0744 +:1031700009F491C070F4073C2CE5120709F486C0ED +:103180004BE453E16FE373E1083C3CE5130751F373 +:1031900060CE0A3C9CE5190709F482C049E653E178 +:1031A0006AE773E10B3CECE51E07E1F252CE013D0C +:1031B000FCE51F0709F487C0B0F40E3C3CE513079B +:1031C00009F47BC008F476C00F3C9CE5190709F4AC +:1031D00077C06EE089E0003DECE51E0709F039CECE +:1031E0000E94F714E9CC043DFCE51F0709F471C007 +:1031F00068F4023D3CE5130709F468C0033D8CE523 +:10320000180709F026CE61E088E12EC0053D9CE557 +:10321000190709F461C00D35100709F4CDCC19CE9A +:103220008091E30280FF1BC08E7F8093E302609158 +:10323000E3027091E4028091E5029091E6020E941F +:10324000831210928A02FFEF20E732E0F150204013 +:103250003040E1F700C000000E94450FADCC816016 +:103260008093E30261E086950E948B13A5CC44EE27 +:1032700054E16DEE74E176CF4DEE54E164EE74E10D +:1032800071CF40E653E167E573E16CCF4FE353E163 +:103290006BE473E167CF47E253E163E373E162CF2D +:1032A00043E353E167E273E15DCF4AE753E169E647 +:1032B00073E158CF61E081E0D7CF65E082E090CF45 +:1032C00068E086E08DCF64E18FE08ACF67E185E139 +:1032D00087CF62E289E184CF61E083E2C5CF0B351D +:1032E0002DE5120711F10C351D4509F0C2CD809175 +:1032F000640382FB882780F991E089270E94130EDE +:10330000B8CD109269030E948C158FEF94E3ECE026 +:1033100081509040E040E1F700C000000E94300C76 +:103320000E94151549CC81E0E9CF80E0E7CF82818A +:1033300000811181882369F0C8010E94600ED82E97 +:10334000682FC8010E94B60AB8018D2D0E94530E45 +:1033500096CDC8010E948F0AD82EF6CF212F2F704C +:10336000C22E107F19F0C29490EFC922DD20C9F05F +:10337000CC2069F080E2800F883010F001110BC082 +:1033800080916903C82AC09269030E94E109802FD5 +:103390000E94540C19C080914402C82AC092440271 +:1033A000F4CF802F0E942F0BCC2071F0C09480E2CC +:1033B000800F883010F001113BC080916903C82252 +:1033C000C09269030E94E109292D2850330B243053 +:1033D000310520F40E94BB050E948C0BAA20A9F0A5 +:1033E0008091420280FD11C0F7011282859585957A +:1033F00085950E94D514C7010E949F1580914202B5 +:103400008595859585950E94A81460E0C7010F9069 +:103410000F900F900F90DF91CF911F910F91FF9020 +:10342000EF90DF90CF90BF90AF909F900C94D60E0E +:1034300080914402C822C0924402C4CF312F3F7011 +:10344000B32E107F103219F0B29480EFB82200230F +:1034500069F0013081F1DD20D9F1CC2091F1F70143 +:10346000858180FF94CF8F7085832BC0DD20B1F0E4 +:1034700090914502892F8B29C11003C00E94250B12 +:10348000A3CFE1E0CE12FACF2091640322FD9CCFBE +:10349000981709F499CF8093450296CFC11006C0C2 +:1034A0000E94DB098B2D0E941A0B8ECFF1E0CF1604 +:1034B00009F48ACFF5CFDD2031F022E02C1508F495 +:1034C00083CF8B2DDBCF31E03C1508F47DCFEACFE5 +:1034D000CC2041F3093369F4FFEF27EE33E0F150DC +:1034E00020403040E1F700C00000802F0E942F0BE9 +:1034F0006BCF8FE39CE90197F1F7F5CF812F86958C +:103500008695837061F0813009F05ECFC8019370B9 +:10351000D11002C090E080E00E948F0555CFC80115 +:103520009370D11002C090E080E00E94A5054CCFBE +:10353000802FDD2029F00E949D070E94BB0644CF0A +:103540000E94E206FACF812F837009F03FC0D110AC +:103550003BCF402F429546954770440F440F802F34 +:103560008F7090E0042E02C0880F991F0A94E2F732 +:1035700030E020E004FF09C02FE030E002C0220F5D +:10358000331F4A95E2F720953095169516951370DE +:10359000123099F078F44091460250914702113070 +:1035A00039F0822B932B842395230E94FF0A0CCFA2 +:1035B000842B952B822B932BF8CF822B932B20914E +:1035C00046023091470282279327EFCF8695DD2070 +:1035D00011F0812F8170882309F4F6CE402F429597 +:1035E00046954770440F440F802F8F7090E0042E53 +:1035F00002C0880F991F0A94E2F730E020E004FF30 +:1036000009C02FE030E002C0220F331F4A95E2F7D5 +:1036100020953095169516951370123099F078F420 +:103620004091980350919903113039F0822B932BDC +:10363000842395230E949114C7CE842B952B822B33 +:10364000932BF8CF822B932B2091980330919903E1 +:1036500082279327EFCF1F70DD2029F0812F0E9452 +:10366000D514802F0BCF802F0E941A0B812F0E9420 +:10367000A814AACE023F09F441C060F4003F11F142 +:10368000013FA1F1DD2009F457C0C11080CE812F88 +:103690008F7131C0033FB9F1043FA1F7DD2009F478 +:1036A00040C01F71812F0E94D5148091640382FD58 +:1036B00007C0F8E01F9FC00111248360809342027D +:1036C000812F19C0DD2069F091E09C1508F47CCEB3 +:1036D0001F7181E090E002C0880F991F1A95E2F7F0 +:1036E000B3CFE2E0EC1508F46FCEF2CF812F8F71EB +:1036F000DD2009F4BCCF0E94D51466CE812F8F71D6 +:10370000DD20C9F3B4CF90E080E0DD2009F492CF52 +:103710001F7181E090E002C0880F991F1A95E2F7AF +:1037200089CF81E00E94B91421E02C1508F04CCE1D +:1037300082E00E94B91448CECC2079F0093341F4DC +:103740003FEF87EE93E0315080409040E1F7CBCEE1 +:10375000EFE3FCE93197F1F7C6CE812F8F7187CF68 +:1037600000313FE5130709F4C0CA01319FE519078D +:10377000A9F482E0BBCA61E0C7010E94D60E8C01A9 +:10378000F7018281811106CA0031FFE51F0709F4A4 +:10379000B2CA01312FE5120709F4B1CAF801E058A5 +:1037A000FF45E730F10508F0C2CAE556F14D0C942B +:1037B000D32DCF93DF938091FD01807FA1F4809181 +:1037C000FA01882381F080914102D091000260913A +:1037D000F8017091F901A091FB01B091FC01C62F95 +:1037E000C723D81303C0DF91CF91089590E01097BD +:1037F00011F0CF3F19F401968770F3CF9C0143E09D +:10380000220F331F4A95E1F7F901EF5FFD4F418128 +:103810004713F1CF40814613EECF42814111EBCFE8 +:10382000438154814A1B5B0B403A510520F780913C +:10383000FD018F7080618093FD01F901EA5FFD4F0A +:1038400080818F708061808388EF91E00E949F1556 +:10385000DF91CF910C94850AAF92BF92CF92DF9205 +:10386000EF92FF920F931F93CF93DF93CDB7DEB705 +:1038700065970FB6F894DEBF0FBECDBF8C0185E013 +:10388000F801DE01519601900D928A95E1F7F80159 +:10389000E28068EFA62E61E0B62E6091FB01709188 +:1038A000FC016115710509F468C19091F80140911E +:1038B000F901892F84238F3F09F45FC12081318171 +:1038C000C380D480F090FA01F601E61BF70BFF20CD +:1038D00009F41DC18091FD01582F507FE03AF10598 +:1038E00008F0D0C0511181C0FE2C43132BC092139D +:1038F00029C06091FE017091FF01F8014681578156 +:1039000064177507F9F4E1101DC08F708061809312 +:10391000FD01C5010E949F158091FD01F80185837D +:103920008F2D65960FB6F894DEBF0FBECDBFDF9129 +:10393000CF911F910F91FF90EF90DF90CF90BF90AC +:10394000AF900895CD2829F0822F83238F3F09F06F +:103950002FC180E0F82FF170DF2E80FF3CC08091F6 +:10396000410240910002841315C0298B3A8B89894A +:103970009A890E949C0E292F22952F702230F8F0F0 +:10398000243020F59F70F9F0F8019581907FD9F4EB +:10399000D12C1FC090E0FC0153E0EE0FFF1F5A95A1 +:1039A000E1F7EF5FFD4F5181351306C050812513BC +:1039B00003C05281E5120FC001968770D4CF9F706B +:1039C00011F0882329F3805E883010F3C8010E942B +:1039D0009F15FD2CA5CFEE2009F4A2CF8091FD010B +:1039E00081608093FD01F12C9BCF43131BC0921388 +:1039F00019C04091FE015091FF01F80126813781E5 +:103A00004217530779F4E1100DC08583C8010E9465 +:103A10009F1588E0F801A8EFB1E001900D928A951A +:103A2000E1F77ECFC8010E94A80E882339F1EE206D +:103A300029F18091FD018032A0F02091F8013091B0 +:103A4000F9013A8729871B86DD86CC868E8780918F +:103A5000FE019091FF01988B8F87CE0109960E94FD +:103A60009F1588E0F801A8EFB1E001900D928A95CA +:103A7000E1F70E94D91BFF24F39452CFC8010E94A2 +:103A80009F15F9CF51110AC088EF91E00E949F1550 +:103A900088E0F50111928A95E9F7A5CF431318C084 +:103AA000921316C04091FE015091FF01F80126814A +:103AB00037814217530761F4E1100AC08583C801BA +:103AC0000E949F1588E0F50111928A95E9F728CFA9 +:103AD000C8010E94A80E882389F2EE2079F2809115 +:103AE000FD01803208F4BDCF2091F8013091F90139 +:103AF0003A8329831B82DD82CC828E838091FE01F2 +:103B00009091FF0198878F83CE010196A8CFE03A6C +:103B1000F105C0F6FE2CEE2009F4B0CF43131FC010 +:103B200092131DC02091FE013091FF01F8018681A2 +:103B300097812817390799F49091FD0190FD69CF7D +:103B4000907F09F466CF8091FD018583903F09F451 +:103B50005DCF982F907F905F8F70892B56CFC801D3 +:103B60000E94A80E81117DCF8091FD01816080931C +:103B7000FD01C8010E949F15D3CEEE2009F47ECF2F +:103B8000C8010E94A80EF82E882309F477CF88E098 +:103B9000F801A8EFB1E001900D928A95E1F78091CC +:103BA000F8019091F9010E949C0E0E94D91BB8CE99 +:103BB00081E08E25CFCE1F93CF93DF93CDB7DEB7B5 +:103BC000AA970FB6F894DEBF0FBECDBF80E993E091 +:103BD0002091F100DC012D93CD01B3E088399B07E2 +:103BE000B9F780919103833009F471C0B8F4813042 +:103BF00009F448C0823009F4B4C08091E80083FF22 +:103C00003CC180919003909191039A3008F035C1A6 +:103C1000E92FF0E0EE55F14D0C94D32D8A3009F4E4 +:103C20008FC08B3009F470C0893039F780919003D0 +:103C3000813219F78091940390919503009711F0C8 +:103C40000297D9F68091E800877F8093E800809101 +:103C5000E80082FF37C09091F3008091F200029754 +:103C600029F48091F1008B7F813021F48091F10063 +:103C700080936B038091E8008B778093E8000E942B +:103C80006104BBCF80919003813A09F0B6CF809157 +:103C9000E800877F8093E8008091940390919503DA +:103CA000892B61F460E28CE693E070E00E941305DA +:103CB0008091E8008B778093E8009FCF60E090E0F0 +:103CC00080E0F3CF80918E038111C1CF96CF809198 +:103CD0009003813A09F091CF8091940390919503DC +:103CE000892B09F08ACF8091E800877F8093E800D4 +:103CF0008091E80080FFFCCF809148018093F10023 +:103D00008091E8008E77B9CF80919003813209F0DD +:103D100074CF8091940390919503892B09F06DCF16 +:103D20008091E800877F8093E8000E946104809181 +:103D3000920380934801109269030E948C155DCF15 +:103D400080919003813209F058CF8091E800877FFD +:103D50008093E8000E9461048091930380936A033A +:103D60004CCF80919003813A09F047CF8091E800D1 +:103D7000877F8093E8008091E80080FFFCCF8091EE +:103D80006A03BCCF803899F0823809F076C0809100 +:103D900094038F70873008F070C08093E9008091A1 +:103DA000EB0085FB882780F91092E90006C080911E +:103DB0008C0390918D03911182609091E800977F20 +:103DC0009093E8008093F1001092F1008091E80058 +:103DD0008E77B5C1882309F4A2C1823009F04DC0A5 +:103DE000809192038111A6C1809194038F702FEF6F +:103DF000280F263008F041C08093E9002091EB00A5 +:103E000020FF98C1933031F48091EB008062809361 +:103E1000EB0090C19091EB0090619093EB0021E05A +:103E200030E001C0220F8A95EAF72093EA00109251 +:103E3000EA008091EB008860EACF81111EC01091EA +:103E400092031F778091E3008078812B8093E300B9 +:103E50008091E800877F8093E8000E946104809150 +:103E6000E80080FFFCCF8091E30080688093E3004E +:103E700082E0111183E080938E038091E80083FF3C +:103E80000AC08091E800877F8093E8008091EB0072 +:103E900080628093EB00AA960FB6F894DEBF0FBE47 +:103EA000CDBFDF91CF911F9108958058823028F7C0 +:103EB00020919203309193032C3DE3E03E07A1F55E +:103EC00083E08A838AE289834FB7F894DE011396F0 +:103ED00020E03EE051E2E32FF0E050935700E49100 +:103EE00020FF03C0E295EF703F5FEF708E2F90E0F0 +:103EF000EA30C0F0C7968D939D932F5F243159F718 +:103F00004FBF8091E800877F8093E8006AE270E00D +:103F1000CE0101960E9413058091E8008B77809373 +:103F2000E800ABCFC096E7CF8091940390919503C2 +:103F3000432F55274330510509F44AC078F54130E5 +:103F4000510509F47AC08BE590E0EBEAF6E04230E7 +:103F5000510509F092CF2091E800277F2093E800D7 +:103F600020919603309197038217930708F49C01E0 +:103F700040E02115310509F065C0411163C0809111 +:103F8000E80082FDC9CF80918E03882329F2853015 +:103F900019F28091E80083FFF2CFBECF4132510584 +:103FA00009F43CC04232510509F067CF83309105D6 +:103FB00008F063CFFC01EE0FFF1FE454FE4F0190A9 +:103FC000F081E02D87549E4FDC018C9190E01AC067 +:103FD000332721303105D1F02115310561F0223030 +:103FE000310509F04ACFE8E1F7E0E4918E2F90E047 +:103FF000E8E1F7E007C0E8E3F7E0E4918E2F90E016 +:10400000E8E3F7E0009709F438CFA5CFE4E2F7E062 +:10401000E4918E2F90E0E4E2F7E0F4CF8330910555 +:1040200008F02BCF880F991FFC01EE53FE4F019033 +:10403000F081E02D89E090E08ECF82E190E0E6E033 +:10404000F7E089CF80918E03882309F465CF85300E +:1040500009F462CF8091E80083FD5ECF8091E80093 +:1040600082FD8DCF8091E80080FF83CF9091F30097 +:104070008091F2002115310519F08830910550F03A +:1040800041E0089709F040E08091E8008E77809346 +:10409000E8006FCF44914093F100319621503109EF +:1040A0000196E8CF803809F0E8CE8091E800877F5C +:1040B0008093E80080918F038093F10087CE811177 +:1040C000DCCE10919203123008F0D7CE8091E80038 +:1040D000877F8093E80010938F030E94610411236F +:1040E00011F084E005C08091E30087FDFACF81E004 +:1040F00080938E0342E061EC81E00E94800442E202 +:1041000061EC84E00E94800442E261EC82E00E9463 +:10411000800442E260EC83E00E948004AECE809195 +:104120009203813009F0A9CE81E0933009F080E05C +:1041300080938D031092E9008091E800877F80933F +:10414000E8000E94610499CECF93DF93CDB7DEB72C +:1041500060970FB6F894DEBF0FBECDBF29873A87B0 +:104160004B875C876D877E878F87988BCE010996FA +:104170000E942C1C811112C088E0FE013996DE01DC +:10418000119601900D928A95E1F78C859D85892B7A +:1041900029F089859A8589238F3FA9F5809141026D +:1041A0009091000289131CC060960FB6F894DEBF90 +:1041B0000FBECDBFDF91CF91089593E0AA0FBB1F33 +:1041C0009A95E1F7AF5FBD4F98E0FE0131960190FF +:1041D0000D929A95E1F7809300020E94850ADECF46 +:1041E000B8E08B9FC00111248F5F9D4F0E942C1C53 +:1041F0008823D1F28091410290E00196877099273F +:1042000080934102CBCFA0910002B0E0CD01019696 +:1042100087709927209141022817190671F610928C +:1042200069030E948C15109200021092410288E0EE +:10423000E8EFF1E0DF011D928A95E9F7AFCF0F9328 +:104240001F93CF93DF938091EB02E091EA02CCE0E1 +:1042500081111AC0DF91CF911F910F910895D1E084 +:10426000DE0FD093EA020E2F10E0EC9FF001112434 +:10427000E451FD4F83819481892B29F080819181C4 +:1042800089238F3F51F4ED2F8091EB02E81738F32B +:104290001092EB021092EA02DDCFC09FD001C19FC5 +:1042A000B00D1124A451BD4F16968D919C91179776 +:1042B000892B29F418968D919C91019651F42081B7 +:1042C00031814281538164817581868197810E9409 +:1042D000A420C09FF001C19FF00D1124E451FD4FB7 +:1042E00014821382D0CF109257031092560310926B +:1042F000470180915503809354030E94F5050C9467 +:104300001F212F923F924F925F926F927F928F92D6 +:104310009F92AF92BF92CF92DF92EF92FF920F9354 +:104320001F93CF93DF93C0915403E7E0FE2E01E08B +:1043300010E0FCE02F2EAEEFEA2E809155038C1397 +:1043400016C00E941F21DF91CF911F910F91FF9006 +:10435000EF90DF90CF90BF90AF909F908F907F9025 +:104360006F905F904F903F902F900C94F505D0E0A8 +:10437000FE01EE0FFF1FE45BFC4F80819181F89EF0 +:10438000F001F99EF00D1124E35EFE4F248121110E +:1043900058C03090EB02ACEEB2E030E020E0412CAF +:1043A0005F01231508F04BC01A966D907C901B9707 +:1043B000F501808091804FEF5FEF512CC52CD12CFF +:1043C000F601EE0FFF1FE80DF91D65917491661659 +:1043D000770609F4A601672B11F05394EFCF4F3FF6 +:1043E0005407B1F1B80102C0660F771F4A95E2F792 +:1043F000462AA80102C0440F551F5A94E2F74150C3 +:1044000051094416150601F5229EF001239EF00D78 +:104410001124E451FD4FF89ED001F99EB00D1124F6 +:10442000A35EBE4F12962D913C911397378326833E +:10443000E082E1829187808771E015967C930E94EB +:10444000C7052196C37079CF14961C921E921397BC +:104450002F5F3F4F1C96A5CF9F92AF92BF92CF92F6 +:10446000DF92EF92FF920F931F93CF93DF9300D0D1 +:1044700000D000D0CDB7DEB78E010F5F1F4F86E0B2 +:10448000F80111928A95E9F78AE7C82E81E0D82EC3 +:10449000F12CE12CAA24A394B12CF60181916F0197 +:1044A0008F3F09F449C0F894E82FE295EF70F0E0EF +:1044B00021A18F70A50102C0440F551F8A95E2F714 +:1044C000CA01922F982B91A392A18095892382A350 +:1044D000789400C0E0E8F1E030E020E0912C4191D8 +:1044E0004F3F09F473C0A42FA295AF70B0E090962F +:1044F0008C9190E04F7002C0959587954A95E2F7B0 +:1045000080FD64C08A2D022E01C0880F0A94EAF74C +:10451000982A2F5F3F4F2430310509F7F601319774 +:1045200080818F3F11F00E94F90750EA5A95F1F708 +:10453000F801EE0DFF1D90828FEFE81AF80AE6E011 +:10454000EE16F10409F0A9CF46E050E0B8018CE581 +:1045500092E00E942A2EFF24F394009709F4F12C94 +:10456000892BB1F186E0F801ACE5B2E001900D9243 +:104570008A95E1F781E080934A020E948305909337 +:1045800049028093480280914802909149020E941A +:104590007405059708F180915C0280936F02809109 +:1045A0005D028093700280915E028093710280911F +:1045B0005F02809372028091600280937302809107 +:1045C00061028093740210924A0206C080E0A0CF7C +:1045D00080914A028111D7CF80914701882301F150 +:1045E00080915603909157030097D1F00E94740573 +:1045F0002091E8023091E9022817390788F4909158 +:10460000540380915503981709F47EC00E948121BC +:104610001092E9021092E80210925703109256038A +:1046200080915702882371F0809155029091560233 +:104630000E947405893E934028F082EE0E942F0B61 +:104640001092570280915402882391F08091520277 +:10465000909153020E947405883E934048F00E9456 +:104660008305909353028093520283E70E94090DC1 +:104670008091500290915102992309F44EC081110A +:1046800030C080914E0290914F020E947405813695 +:104690009A4E78F080914C0290914D020196909341 +:1046A0004D0280934C020E94830590934F028093A9 +:1046B0004E0280914C0290914D024F9708F45CC0DD +:1046C00010921A018CE180931B0180931C018FE0F2 +:1046D0000E94C61381E08093500210924D02109206 +:1046E0004C028F2D26960FB6F894DEBF0FBECDBFBD +:1046F000DF91CF911F910F91FF90EF90DF90CF90BE +:10470000BF90AF909F9008950E941F211092570371 +:10471000109256030E94F50583CF8111E2CF80915C +:104720004B02882361F022E148E76FEF8FE00E949F +:10473000C41126E148E76FEF8FE00E94C411809119 +:104740005402882371F228E148E76FEF8FE00E945E +:10475000C41129E148E76FEF8FE00E94C4112AE1FC +:1047600048E76FEF8FE00E94C4112BE148E76FEF3D +:104770008FE00E94C411B5CF28E044E666EE80E0E9 +:104780000E94C41129E044E666EE80E00E94C41154 +:104790002DE044E666EE80E00E94C411C0CF2F9267 +:1047A0003F924F925F926F927F928F929F92AF92C1 +:1047B000BF92CF92DF92EF92FF920F931F93CF930E +:1047C000DF93CDB7DEB769970FB6F894DEBF0FBEA3 +:1047D000CDBF498B5A8B6B8B7C8B8D8B611110926B +:1047E00044021D861E861F86188A85E0FE0171968A +:1047F000DE01199601900D928A95E1F78C859D85D1 +:10480000892B31F089859A8589238F3F09F0D4C19E +:1048100029853A854B855C856D857E858F85988950 +:104820000E94A420C3C028EFC2162CE5D20629F4AA +:10483000882379F00E947321EBCF39EFC3163CE552 +:10484000D30639F4882329F0809147018111F2CFF2 +:10485000C3C10DE111E0E12CB12CA12C882483947B +:10486000912C9EEF592E44244394F801608171816C +:1048700066246A94762C20E0422F50E0FA01EE0F75 +:10488000FF1FE60FF71F85919491C816D90609F40A +:104890003A01892B11F02F5FEFCFF12CFFEF6F164C +:1048A0007F0609F445C0F8014481F09047018F2D3F +:1048B000411180E0F82FF170FF2EF80125808681EC +:1048C0009B85992309F408C1FF2009F405C1211033 +:1048D00014C0A40101C0440F6A94EAF7842B8683B4 +:1048E0008091E8029091E9028039914030F440E9EA +:1048F00051E05093E9024093E802C40102C0880FDE +:10490000991F2A95E2F70197F801268128171906C1 +:1049100079F48091560390915703009709F45FC092 +:104920000E9474058139914008F459C0F80144820D +:10493000EF28FFEFAF1ABF0A095F1F4F26E0A2164C +:10494000B10409F092CF8B85882309F420C1EE20B1 +:1049500009F41DC10E948305909357038093560369 +:104960008091EB02883010F591E0980F9093EB0264 +:1049700098E0FE013996DE01119601900D929A950C +:10498000E1F73CE0839FC001112484519D4F28E052 +:10499000FE013196DC0101900D922A95E1F72FEF8F +:1049A0003FEFFC0131872087D386C28669960FB618 +:1049B000F894DEBF0FBECDBFDF91CF911F910F9155 +:1049C000FF90EF90DF90CF90BF90AF909F908F902F +:1049D0007F906F905F904F903F902F9008958091BF +:1049E000540360905503982FF0E0E0E0861114C066 +:1049F000909354030E171F0709F49ACF90E0FC011F +:104A0000EE0FFF1FE45BFC4FB182A0820196837022 +:104A10009927809355038CCF282E312CF101EE0F6E +:104A2000FF1FE45BFC4F20813181F7E0F29FD00152 +:104A3000F39FB00D1124A35EBE4F2D913C911197B1 +:104A4000398F288F712C60E070E0E72FF0E0EE0FD7 +:104A5000FF1F288D398DE20FF31F25913491211509 +:104A60003105E1F0F8010190F081E02DFF8BEE8B34 +:104A700060E005C02417350709F47F2C6F5FE62F2F +:104A8000F0E0EE0FFF1F4E895F89E40FF51F45919F +:104A900054914115510571F77F5FD7CF7720C9F049 +:104AA000F801671708F0FD0144820E171F0721F473 +:104AB00090935403F72C3CCF981305C0AE17BF0753 +:104AC00011F49F5F937091012F5F3F4F822F83708E +:104AD0008DCFF0E0E0E0F7CF90E021101FC0B401EF +:104AE00002C0660F771F2A95E2F79B01215031091A +:104AF0002817390731F4442309F447C0C5010E943F +:104B0000C705C40101C0880F6A94EAF7982F9095F1 +:104B1000F801868189238683F22C0ACF9C01062C1A +:104B200002C0359527950A94E2F7A90141705527EF +:104B3000BC016150710986239723892B11F5452B00 +:104B400001F1F80182819381892BC1F01B821C82C3 +:104B50001D821E8259825A820E9483058160582FCD +:104B60009D838C83F801828193818F83988729812B +:104B70003A814B816D817E810E94A420F8011582CB +:104B8000C0CFF22FF1702F2EBCCF2F2CBACF909127 +:104B9000540380915503981731F00E948121EE2033 +:104BA00009F436CE03CF0E941F21109257031092B2 +:104BB00056030E94F505F3CF61E0CE0109960E94ED +:104BC000D60E6C018B85F7EFCF16FCE5DF0609F0FA +:104BD0002ACE882309F43DCE81E08093470118CE88 +:104BE0001F920F920FB60F9211242F933F934F9362 +:104BF0005F936F937F938F939F93AF93BF93CF9365 +:104C0000DF93EF93FF93D091E900DF708091EC0088 +:104C1000C82FC17080FDC0E81092E9008091F000BB +:104C2000877F8093F00078940E94DB1D1092E9004A +:104C30008091F00088608093F000CD2BCF70C093FE +:104C4000E900FF91EF91DF91CF91BF91AF919F91DB +:104C50008F917F916F915F914F913F912F910F9025 +:104C60000FBE0F901F9018951F920F920FB60F92C4 +:104C700011242F933F934F935F936F937F938F9361 +:104C80009F93AF93BF93EF93FF938091E10082FFD7 +:104C900009C08091E20082FF05C08091E1008B7F16 +:104CA0008093E1008091DA0080FF24C08091D800D9 +:104CB00080FF20C08091DA008E7F8093DA0080919F +:104CC000D90080FF9BC080E189BD82E189BD09B424 +:104CD00000FEFDCF81E080938E03809168038111F7 +:104CE00009C00E94E7030E94B2048091E200846040 +:104CF0008093E2008091E10080FF17C08091E20084 +:104D000080FF13C08091E2008E7F8093E20080914B +:104D1000E20080618093E2008091D80080628093FD +:104D2000D80019BC85E080938E038091E10084FF58 +:104D300029C08091E20084FF25C080E189BD82E125 +:104D400089BD89B5982F917080FFFBCF8091D800E5 +:104D50008F7D8093D8008091E1008F7E8093E10069 +:104D60008091E2008F7E8093E2008091E20081607A +:104D70008093E20080918F03882309F445C084E08A +:104D800080938E038091E10083FF27C08091E20031 +:104D900083FF23C08091E100877F8093E10082E060 +:104DA00080938E0310928F038091E1008E7F809319 +:104DB000E1008091E2008E7F8093E2008091E2002A +:104DC00080618093E20042E060E080E00E94800425 +:104DD0008091F00088608093F000FF91EF91BF9187 +:104DE000AF919F918F917F916F915F914F913F9183 +:104DF0002F910F900FBE0F901F90189519BC109215 +:104E00008E031092680376CF8091E30087FD93E0D4 +:104E100090938E03B7CF78941F921FB61F921124E0 +:104E20008F939F93AF93BF9380915F0390916003A3 +:104E3000A0916103B09162030196A11DB11D809301 +:104E40005F0390936003A0936103B0936203BF91EB +:104E5000AF919F918F911F901FBE1F9018951F9229 +:104E60001FB61F9211248F939F93AF93BF9380918E +:104E70005E03811113C080915F0390916003A09144 +:104E80006103B09162034196A11DB11D80935F0340 +:104E900090936003A0936103B0936203BF91AF91BD +:104EA0009F918F911F901FBE1F901895CDB7DEB7B1 +:104EB000EE970FB6F894DEBF0FBECDBF84B7877FE5 +:104EC00084BF0FB6F894A8958091600088618093A4 +:104ED0006000109260000FBE80E890E00FB6F8947A +:104EE00080936100909361000FBE85B7806885BF95 +:104EF00085B7806885BF87EF97E09093C90180935D +:104F0000C8010E94E7030E94B2048091E20084601D +:104F10008093E200789480918E038823A1F0109111 +:104F2000E9001F709091EC00892F817090FD80E85E +:104F3000182B1092E9008091E80083FD0E94DB1D90 +:104F40001F701093E90082E084BD93E095BD9AEF55 +:104F500097BD80936E000E94160F811102C00E94BF +:104F6000040E0AE711E020E8C22E21E0D22EF8015B +:104F700081918F018F3F11F00E94F907C016D10671 +:104F8000B1F786EF0E94F90787EF0E94F90783E9DE +:104F90000E94F90786E90E94F907ECE5F2E082E653 +:104FA00092E0AFE6B2E011921D928E179F07D9F7FB +:104FB0000E948115811102C00E94151582E090E0C7 +:104FC0000E94372E8093680284E090E00E94372E82 +:104FD000182F82E290E00E94372E982F812F909315 +:104FE0006403809363030E942C228FE39CE9019762 +:104FF000F1F700C000000E942C2280916F0280FF18 +:1050000008C06FEF7FEF90E080E00E94692E0E9461 +:10501000300C83E090E00E94372E90E00E94FF0A5F +:1050200080919803909199030E94EC13509A589A9A +:10503000559A5D9A549A5C9A8CE090E00E94372EC3 +:1050400090E0B0E0A0E08093580290935902A093C2 +:105050005A02B0935B0280916202811132C00E94B9 +:105060008115811104C00E9415150E94051588E064 +:1050700090E00E943F2E6093E3027093E4028093DD +:10508000E5029093E6026E7F71F40E94051588E0B8 +:1050900090E00E943F2E6093E3027093E4028093BD +:1050A000E5029093E6020E940C0610928A0280911B +:1050B000E30280FF03C086950E94C61381E08093BF +:1050C00062025198599A52985A9A89B1869581707C +:1050D0004A9931C290E0892B809366026091630304 +:1050E0006068609363031091640384E090E00E9421 +:1050F0004B2E612F82E290E00E944B2E81E20E94B3 +:10510000C61381E090E00E94911480E091E09093BA +:105110005B0380935A0318E1C12ED12C00E4A02E2A +:105120008FE692E096E0B92EB80E80918E03992416 +:10513000939400E112E1853009F451C20E942C22BF +:10514000882359F08FB7F89440915F035091600322 +:1051500060916103709162038FBFE9E6F2E0AFE610 +:10516000B2E010E000E0302F8D919191981709F492 +:1051700060C2292F282790E099249394422F492137 +:1051800009F452C29DAB3EAB892191E009F490E055 +:105190009FAB0E9483058160782F99AF88AF4DA99E +:1051A0005EA96FA989AD0E94CF23F801E759FD4F91 +:1051B00080819826908280918A028823D1F1809103 +:1051C0008902E091E302E695E81BE09385028230D4 +:1051D00009F046C2F0E0EA55FD4FE4910E2F10E0D1 +:1051E000BFE68B2EB2E19B2E80918602882361F070 +:1051F000109286020E94830590938402809383021A +:1052000010928802109287020E948305E091830227 +:10521000F09184028E1B9F0B8F3F9F4750F4E00F4D +:10522000F11FF0938402E093830283E892E0F4019B +:105230000995E0916602EE0FEE0FE093660289B1E8 +:1052400081FBEE24E0F84A9965C280E08E29E82BC4 +:10525000E0936602EF70F0E0EC57FE4F8081909192 +:105260006502890F8093650220E0843034F18091DB +:1052700064028F5F8093640212E018AB19AA81E088 +:105280008AAB0E9483058160782F9CAB8BAB48A9C9 +:1052900059A96AA98CA90E94CF231BA71CA61DA6E9 +:1052A0000E9483058160782F9FA78EA74BA55CA5E0 +:1052B0006DA58FA50E94CF2321E0809165028D3FCF +:1052C0002CF5809164028150809364021EA21FA27B +:1052D00081E088A70E9483058160782F9AA789A71B +:1052E0004EA15FA168A58AA50E94CF2319A21AA288 +:1052F0001BA20E9483058160782F9DA38CA349A1E6 +:105300005AA16BA18DA10E94CF2321E0809165025B +:10531000082E000C990B64E070E00E949D2D809394 +:105320006502222359F08FB7F89440915F035091A2 +:10533000600360916103709162038FBF86E0ECE7C8 +:10534000F2E0DE01119601900D928A95E1F79090BE +:105350007E0280907F021091800200918102109263 +:105360007E0210927F021092800210928102892D9B +:10537000882909F448C080917A0290917B020E94AA +:1053800074059C0190917602992309F4AFC32333ED +:105390003105C8F19F3F19F09F5F909376029920E5 +:1053A00059F00E947D079FEF19140CF491E0899F3A +:1053B000802D112480937E02882059F00E947D0761 +:1053C0009FEF18140CF491E0899F802D1124809395 +:1053D0007F0230917E023323B1F020917F0222239D +:1053E00091F045EB3403C0011124992309F495C1D0 +:1053F00090937E0245EB240390011124332309F49A +:1054000090C130937F02812F802B09F448C0809196 +:105410007802909179020E9474059C019091750226 +:10542000992309F45EC325363105C8F19F3F19F071 +:105430009F5F90937502112359F00E945B079FEFC5 +:1054400011160CF491E0899F802D11248093800225 +:10545000002359F00E945B079FEF10160CF491E0B7 +:10546000899F802D11248093810230918002332303 +:10547000B1F020918102222391F045EB3403C00169 +:105480001124992309F451C19093800245EB240320 +:1054900090011124332309F44CC13093810280918F +:1054A0007E0290917F02892B90918002892B9091AE +:1054B0008102892B11F00E94BB0686E0FE01319625 +:1054C000ACE7B2E001900D928A95E1F70E94BB052E +:1054D00090916702891731F00E94BB0580936702A3 +:1054E0000E948C0B80918E03843009F01ECE83E0E5 +:1054F0008093E9008091E80082FF17CE8091E80058 +:1055000090E085FF06C00E940604882309F415C1B7 +:1055100091E08091E8008B778093E800992309F46B +:1055200004CEE981E150E33108F089C1F0E0E455AF +:10553000F14D0C94D32D92E0CECD80918E0384302A +:1055400009F440C080E00E948C0B10928A02809186 +:105550008202811116C0909282028091E302982FFC +:105560009170909363028E7F8093E3029FEFE0E758 +:10557000F2E09150E040F040E1F700C000000E94EE +:10558000450F10925E030FB6F894A895C092600084 +:105590000FBEA092600083B7817F846083BF83B712 +:1055A000816083BF7894889583B78E7F83BF0FB661 +:1055B000F894A895809160008861809360001092B3 +:1055C00060000FBE80918D03882349F00E942C2239 +:1055D000EFE6F2E08191811163C2BE12FBCF8091B0 +:1055E0008E03853009F4A9CF109269030E948C15AF +:1055F0000E94BB050E948C0B109282028091630274 +:10560000882359F08091E30281608093E3028695BC +:105610000E94C6130E942F0F91CD80918B02882388 +:10562000C9F30E94450FF6CF9F5F990C943009F0A3 +:10563000A5CD0F5F1F4F0630110509F094CD8FEFF8 +:105640008AAF8BAF1CAE0E9483058160782F9EAF1E +:105650008DAF4AAD5BAD6CAD8EAD0E94CF23ABCDAF +:10566000863059F4F0E0ED55FD4FE4910E2F10E037 +:10567000AFE58A2EA2E19A2EB7CD893061F4E69586 +:10568000F0E0E056FD4FE4910E2F10E0F7E88F2E8A +:10569000F1E19F2EA9CD8F3061F4E695F0E0E3565D +:1056A000FD4FE4910E2F10E0EDE08E2EE1E19E2EF5 +:1056B0009BCD853159F4F0E0E656FD4FE4910E2F75 +:1056C00010E07AE9872E70E1972E8ECD08E210E087 +:1056D0004AE0842E40E1942E883109F485CD83324E +:1056E00049F4E8E9F2E00591149166E0862E62E162 +:1056F000962E7ACD04EF11E05DEC852E5FE0952EBD +:10570000843209F471CD00ED17E03BE0832E36E0E2 +:10571000932E6ACD82E090E099CD81E080937E0265 +:1057200069CE81E080937F026ECE81E0809380021B +:10573000ADCE81E080938102B2CE00E210E0CE01D6 +:1057400001964C018091E80085FD0AC08091E80037 +:105750008B778093E8000E940604882399F3D8CEC3 +:105760008091F100F40181934F010150110951F72B +:10577000CFCE1A8289E08B832DC08A81823009F4D2 +:10578000A7C18330A9F0813009F059C02FB7F89430 +:1057900060915F0370916003809161039091620357 +:1057A0002FBF0E94D92D6B837C838D839E8312C073 +:1057B00080916F028B83809170028C838091710243 +:1057C0008D83809172028E83809173028F8380918A +:1057D0007402888780918E03843009F0A6CC1091E2 +:1057E000E9001F709091EC00892F817090FD80E896 +:1057F000182B82E08093E9008091E80080FF0DC0C3 +:1058000050E040E060E270E0CE0101960E94370473 +:105810008091E8008E778093E8001F701093E90074 +:1058200084CC8A81823059F46B817C818D819E8108 +:105830000E94D92D86E290E00E944B2ECBCF8FEFB5 +:105840008983C8CF4C816B818A810E942D0E982755 +:10585000892798279E838D83BDCF8D809E80982435 +:10586000892498248A810B81F8E00F9F80011124FC +:1058700020E3829F000D111D11248C8190E0880F80 +:10588000991F080F191F692DC80187960E944B2E7A +:10589000682DC8018896D0CF0E949A0D9BCF8A812F +:1058A0008138C1F060F4803809F094CF20E04B815A +:1058B0006091E5028091E4020E9495128BCF8238BC +:1058C00049F1833809F086CF20E04091E6026C81EF +:1058D0008B81F2CF8B810E94C6139B818091E30262 +:1058E000911111C08E7F8093E30210928A024FEFD4 +:1058F00080E792E0415080409040E1F700C0000016 +:105900000E94450F67CF81608093E30286950E94D5 +:10591000C61360CF8B818093E7025CCF8A81813888 +:1059200099F030F4803809F055CF8091E60223CF0A +:10593000823891F0833809F04DCF8091E4028B8357 +:105940008091E5028C8346CF8091E30280FF02C004 +:10595000869511CF80E00FCF8091E7020CCF609148 +:10596000E3027091E4028091E5029091E6020E94C8 +:10597000831230CF80E18A832DCF81E08A8389EF43 +:10598000FACE0A811B81102701271027FE013196CC +:105990003F018C80CF01880D911D4C01C801895FAA +:1059A0009D4F8614970409F415CF093FE1E01E07C7 +:1059B00050F40E94372EF30184830F5F1F4FFFEFD7 +:1059C0006F1A7F0AEBCFF3011482F7CF0A811B8194 +:1059D000102701271027CE0101963C018C80800EF4 +:1059E000912E911CC801895F9D4F8016910609F484 +:1059F000F1CE093FE1E01E0720F4F30164810E942B +:105A00004B2EFFEF6F1A7F0A0F5F1F4FEBCF0E94E5 +:105A10008A0DE0CE8AE0AFCF0A811B8110270127D3 +:105A20001027CE0101963C018C80FC01E80DF11D90 +:105A30004F01C80187968614970409F4CBCE003E27 +:105A4000F1E01F0750F40E94372EF30184830F5FAB +:105A50001F4FFFEF6F1A7F0AECCFF3011482F7CFCD +:105A60000A811B81102701271027CE0101963C01D6 +:105A70008C80800E912E911CC8018796801691060D +:105A800009F4A8CE003EE1E01E0720F4F301648192 +:105A90000E944B2EFFEF6F1A7F0A0F5F1F4FECCF54 +:105AA00009BD19BD09B400FEFDCF8091D8008F7DDE +:105AB0008093D8008091E00082608093E000809124 +:105AC000E00081FDFCCF109269030E948C1587CD08 +:105AD00086E290E00E94372E1B821C821D828E83FC +:105AE00079CE2D32314008F0A3CCD9CC2D323140C3 +:105AF00008F052CC88CC87FB082E062687FD8195BE +:105B000067FD61950E94112E0EF4919507FC819519 +:105B10000895AA1BBB1B51E107C0AA1FBB1FA617F4 +:105B2000B70710F0A61BB70B881F991F5A95A9F746 +:105B300080959095BC01CD01089597FB072E16F432 +:105B4000009407D077FD09D00E94892D07FC05D06D +:105B50003EF4909581959F4F0895709561957F4F84 +:105B60000895A1E21A2EAA1BBB1BFD010DC0AA1F9E +:105B7000BB1FEE1FFF1FA217B307E407F50720F0B6 +:105B8000A21BB30BE40BF50B661F771F881F991F31 +:105B90001A9469F760957095809590959B01AC017A +:105BA000BD01CF010895EE0FFF1F0590F491E02D88 +:105BB00009946927962769277827872778270895E2 +:105BC0000E94E82D332312F48A1B9B0B0C94F92DB1 +:105BD000A29FB001B39FC001A39F700D811D11242E +:105BE000911DB29F700D811D1124911D08950E9479 +:105BF000E82DB7FF0895821B930B08950E94E82DAE +:105C0000A59F900DB49F900DA49F800D911D112410 +:105C10000895B7FF0C94FE2D0E94FE2D821B930B5E +:105C20000895991B79E004C0991F961708F0961BF8 +:105C3000881F7A95C9F780950895FC01415050401E +:105C400030F001900616D1F73197CF0108958827DB +:105C500099270895FB01DC0104C08D910190801902 +:105C600021F441505040C8F7881B990B0895F999C9 +:105C7000FECF92BD81BDF89A992780B50895A6E11F +:105C8000B0E044E050E00C94712EA8E1B0E042E0B6 +:105C900050E00C94712E262FF999FECF92BD81BD54 +:105CA000F89A019700B4021639F01FBA20BD0FB65A +:105CB000F894FA9AF99A0FBE08950396272F0E9436 +:105CC0004C2E0E944B2E252F0E944C2E242F0C94DC +:105CD0004C2E0196272F0E944C2E0C944B2EDC014B +:105CE000CB01FC01F999FECF06C0F2BDE1BDF89AE7 +:105CF000319600B40D9241505040B8F70895F89491 +:105D0000FFCFC10EC10ECA0ECA0ECC0ECA0ECA0EED +:105D1000CA0EC10EC10ED10ECA0ECA0ED10EAE19D8 +:105D2000AE191E1A1E1A7E1A981AE419E419A31A3B +:105D30002B1B3A1B3A1B81166F178C17A017AE1737 +:105D4000E3171518C21EEA1E3D1FEA1E3D1F1D1F48 +:105D5000551F3D1F52205F20B92BBD2B112C222C2B +:105D60002D2C4C2C4F2C8E2CAF2C1F2C1F2CBA2CD6 +:0E5D7000BD2CC12CE62C072D0A2D0C2D302D3C +:105D7E007105F00BCF0BCB0BC70B01191A1B1C1D9A +:105D8E001E1F202122010201001C001C1CCA002A19 +:105D9E0000000000C4004C00000000BE00500000D7 +:105DAE000000B8005100000000B2004F00000000DB +:105DBE00AC0052000000000101818283E200E90084 +:105DCE00EA00B500B600B700CD008301CC008A0111 +:105DDE0092019401210223022402250226022702A7 +:105DEE002A02B300B4006F007000F03435366667D7 +:105DFE00F6F7939600FF0100010000FFFF0000017F +:105E0E000001FF000001020202020606060909094E +:105E1E000909090F0F0F0F0F0F151515181919195D +:105E2E001919191919191923244022B6A801860126 +:085E3E00D000BD06D606F606F1 :00000001FF From 7490f8b751ab638773a92926d96f9ec0ce5387c5 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Thu, 25 Nov 2021 20:36:23 -0500 Subject: [PATCH 073/155] Improved stretch timer LEDs. Add NKRO. --- keyboards/solartempest/9e/config.h | 32 +- .../solartempest/9e/keymaps/via/keymap.c | 17 +- keyboards/solartempest/9e/rules.mk | 21 +- .../solartempest/9e/solartempest_9e_via.hex | 2095 +++++++++-------- 4 files changed, 1079 insertions(+), 1086 deletions(-) diff --git a/keyboards/solartempest/9e/config.h b/keyboards/solartempest/9e/config.h index a839aee2d30b..f75c47f25a93 100644 --- a/keyboards/solartempest/9e/config.h +++ b/keyboards/solartempest/9e/config.h @@ -27,34 +27,28 @@ #define PRODUCT A9e #define DESCRIPTION Keyboard -/* key matrix size */ +// key matrix settings #define MATRIX_ROWS 4 #define MATRIX_COLS 12 - -/* key matrix pins */ #define MATRIX_ROW_PINS { F0, F1, F2, F3 } -#define MATRIX_COL_PINS { F5, F6, F7, A0, A1, A2, A3, A4, A5, B7, B6, B5 } //F5, F7, B7, B5 are unused on the MCU. They are needed for the encoder key matrix. -#define UNUSED_PINS +#define MATRIX_COL_PINS { F5, F6, F7, A0, A1, A2, A3, A4, A5, B7, B6, B5 } //F5, F7, B7, B5 are unused on the MCU. Necessary for encoder key matrix. +#define DIODE_DIRECTION COL2ROW +#define DEBOUNCE 6 //Default is 5 + +// NKRO Settings +#ifdef NKRO_ENABLE + #define FORCE_NKRO //Force NKRO if enabled. +#endif + +#define LOCKING_SUPPORT_ENABLE //Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap +#define LOCKING_RESYNC_ENABLE //Locking resynchronize hack /* encoder pins */ #define ENCODERS_PAD_A { C0, C3, C5, C7, D1, D3, D5, D6, A7 } //Encoder pads ordered so on VIA mapping it is cw/ccw and up/down rotation orientation. #define ENCODERS_PAD_B { C1, C2, C4, C6, D0, D2, D4, D7, A6 } #define ENCODER_RESOLUTIONS { 4, 4, 4, 4, 4, 4, 4, 2, 2 } //Better control of individual encoders and encoder types. -//#define ENCODER_RESOLUTION 4 - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE - -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - +//RGB Settings #define RGB_DI_PIN E6 #define RGBLIGHT_ANIMATIONS #define RGBLIGHT_EFFECT_SNAKE_LENGTH 1 //Default 4 diff --git a/keyboards/solartempest/9e/keymaps/via/keymap.c b/keyboards/solartempest/9e/keymaps/via/keymap.c index fbf943a926a7..44fddc3bf9ce 100644 --- a/keyboards/solartempest/9e/keymaps/via/keymap.c +++ b/keyboards/solartempest/9e/keymaps/via/keymap.c @@ -38,6 +38,7 @@ bool is_stretch_time = false; uint16_t stretch_timer = 0; uint16_t stretch_minutes = 0; + #ifdef VIA_ENABLE enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. ATABF = USER00, //Alt tab forwards @@ -206,7 +207,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; - #ifdef ENCODER_ENABLE static uint8_t encoder_state[9] = {0}; static keypos_t encoder_ccw[9] = {{2, 0}, {2, 1}, {2, 2}, {11, 0}, {11, 1}, {11, 2}, {11, 3}, {5, 3}, {8, 3}}; @@ -255,7 +255,6 @@ void matrix_scan_user(void) { is_alt_tab_active = false; } } - #ifdef RGBLIGHT_ENABLE //Stretch timer code if (is_stretch_active && !is_stretch_time) { @@ -263,7 +262,7 @@ void matrix_scan_user(void) { stretch_minutes++; stretch_timer = timer_read(); } - if (stretch_minutes > 30) { //Change RGB animation effect after set number of minutes. + if (stretch_minutes > 30) { //Change RGB animation effect after set number of minutes. 30 minutes is a good interval. rgblight_set_effect_range(0, 42); rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE); is_stretch_time = true; @@ -272,7 +271,6 @@ void matrix_scan_user(void) { } #endif - encoder_action_unregister(); #ifdef RGBLIGHT_ENABLE //Add rotation animations underneath rotary encoders when turning if (!encoder_effect && is_encoder1_rotate) { //Turn on the effect for encoder 1 @@ -294,9 +292,6 @@ void matrix_scan_user(void) { if(encoder_effect){ rgblight_set_effect_range(0, 42); rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); - if(is_stretch_active){ //Maintain orange LED to indicate stretch timer is still on. - rgblight_sethsv_at(0,230,100,40); - } } is_encoder1_rotate = false; is_encoder6_rotate = false; @@ -307,6 +302,12 @@ void matrix_scan_user(void) { is_encoder6_rotate = false; is_encoder7_rotate = false; } + + if(!is_stretch_time){ //Update LED status indicators when stretch animation is not playing. + if(is_stretch_active==1) { + rgblight_sethsv_at(0,230,100,40); //Set LED to orange to indicate timer is on + } + } #endif } @@ -364,7 +365,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { is_stretch_active ^= 1; stretch_timer = timer_read(); - //rgblight_sethsv_at(75,215,80,41); if(is_stretch_time==1) { //Check if it is time to stretch, then dismiss the animation. rgblight_set_effect_range(0, 42); rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); @@ -402,7 +402,6 @@ const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({ const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({8, 2, 43,100,150}); //White-right num lock indication (No dedicated LED) const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({6, 2, 43,100,160}); //White-middle scroll lock indication (No dedicated LED) - const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers my_layer0_layer, my_layer1_layer, diff --git a/keyboards/solartempest/9e/rules.mk b/keyboards/solartempest/9e/rules.mk index 5c83fafe8829..17d308a4490a 100644 --- a/keyboards/solartempest/9e/rules.mk +++ b/keyboards/solartempest/9e/rules.mk @@ -42,20 +42,19 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096 # Build Options -# comment out to disable the options. - -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -TERMINAL_ENABLE = no # Terminal interface feature, very large. -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +# Comment out to disable the options. + +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration (+1000) +CONSOLE_ENABLE = no # Console for debug (+400) +COMMAND_ENABLE = no # Commands for debug and configuration (+878) +TERMINAL_ENABLE = no # Terminal interface feature (+4410) +MOUSEKEY_ENABLE = yes # Mouse keys (+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control (+450) RGBLIGHT_ENABLE = yes # RGB LEDs -RGBLIGHT_SLEEP = yes # LEDs off when sleeping -NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # NKRO (+328) KEY_LOCK_ENABLE = no # Key lock functionality ENCODER_ENABLE = yes # Encoders LTO_ENABLE = yes # Save space LEADER_ENABLE = no # Leader keys COMBO_ENABLE = no # Combo keys -UNICODE_ENABLE = no # Unicode \ No newline at end of file +UNICODE_ENABLE = no # Unicode diff --git a/keyboards/solartempest/9e/solartempest_9e_via.hex b/keyboards/solartempest/9e/solartempest_9e_via.hex index 2efaf70534e8..231ed93af297 100644 --- a/keyboards/solartempest/9e/solartempest_9e_via.hex +++ b/keyboards/solartempest/9e/solartempest_9e_via.hex @@ -1,9 +1,9 @@ :100000000C94A3040C94EA040C94EA040C94EA04FF :100010000C94EA040C94EA040C94EA040C94EA04A8 -:100020000C94EA040C94EA040C9443250C94FF24E9 -:100030000C943E260C94EA040C94EA040C94EA0412 +:100020000C94EA040C94EA040C943F250C94FB24F1 +:100030000C943A260C94EA040C94EA040C94EA0416 :100040000C94EA040C94EA040C94EA040C94EA0478 -:100050000C94EA040C941A260C94EA040C94EA0416 +:100050000C94EA040C9416260C94EA040C94EA041A :100060000C94EA040C94EA040C94EA040C94EA0458 :100070000C94EA040C94EA040C94EA040C94EA0448 :100080000C94EA040C94EA040C94EA040C94EA0438 @@ -153,9 +153,9 @@ :10098000940314BE84B7877F84BF0FB6F894A895EC :1009900080916000886180936000109260000FBEBB :1009A000E0E0F8E7099523E0A2EEB1E001C01D9276 -:1009B000A139B207E1F711E0A0E0B1E0E0E0FDE528 -:1009C00002C005900D92A23EB107D9F70E9465269C -:1009D0000C94472E0C940000E8EDF0E080818C7FB1 +:1009B000A139B207E1F711E0A0E0B1E0EEE0FDE51A +:1009C00002C005900D92A23EB107D9F70E946126A0 +:1009D0000C944E2E0C940000E8EDF0E080818C7FAA :1009E00080831092E2001092DA001092E100A0EEF3 :1009F000B0E08C9181608C9380818F77808319BC6B :100A0000A7EDB0E08C918E7F8C9380818F7E808368 @@ -225,7 +225,7 @@ :100E00004983E8835A83DF91CF911F910F91FF901F :100E1000EF90DF90BF90AF900895202F30E0449185 :100E2000D42EE42EF12C56E0159FC0011124EFEFD3 -:100E3000F0E0BF010E94482D812F90E0880F991F9C +:100E3000F0E0BF010E944F2D812F90E0880F991F95 :100E400055E5569FD001579FB00D11248A1B9B0B6F :100E5000982F990F890F5F01A21AB30AAE9CD00197 :100E6000AF9CB00DBE9CB00D11245B2F089F80017C @@ -260,12 +260,12 @@ :10103000F7CF8F3F09F0A1CF8091B0028B7FF0CF27 :1010400008958091B00280FD16C081FD16C082FD1A :1010500016C08091AE028823A1F0883280F428E087 -:10106000829FC001112468E270E00E945C2D862FEF +:10106000829FC001112468E270E00E94632D862FE8 :10107000672B39F0089582E0089584E0089588E0B0 :10108000089581E008958091B00280FD14C081FD33 :1010900014C082FD16C08091AF02882381F0843194 :1010A00080F422E3829FC001112464E170E00E9479 -:1010B0005C2D862F08958CE0089589E1089585E0E0 +:1010B000632D862F08958CE0089589E1089585E0D9 :1010C000089582E30895803F31F40E94430881959A :1010D0008093B8020895813F19F40E944308F8CF25 :1010E000823F31F40E94430881958093B7020895AE @@ -452,1053 +452,1054 @@ :101C3000EAF7DF91CF911F910F910C94CC0BC770F5 :101C400081E001C0880FCA95EAF7F3CFDF91CF9109 :101C50001F910F910895CF93DF93C7EED3E060E01B -:101C6000CE010E94CF2D2196C11588E0D807B9F783 +:101C6000CE010E94D62D2196C11588E0D807B9F77C :101C7000DF91CF9108956F927F928F929F92AF9252 :101C8000BF92CF92DF92EF92FF920F931F93CF9369 :101C9000DF9386EFC82E84E0D82E9FE9E92EF12C41 :101CA000E701C056D10936011BC0F501859094901B -:101CB000692DC8010E94CF2D682DC80101960E9490 -:101CC000CF2D82E0A80EB11C0E5F1F4FC017D107A9 +:101CB000692DC8010E94D62D682DC80101960E9489 +:101CC000D62D82E0A80EB11C0E5F1F4FC017D107A2 :101CD00061F788E1680E711C6896CE15DF0529F062 :101CE0008E01085111095301E0CF7E0180E6E80E14 :101CF000F11C80E6C80ED11C8FE5E81684E0F806DA :101D000079F6DF91CF911F910F91FF90EF90DF90C7 :101D1000CF90BF90AF909F908F907F906F900895DD :101D2000CF93C82F6FEF811161E283E290E00E94B0 -:101D3000CF2D6FEFC11161E184E290E00E94CF2DC1 -:101D40006FEFC11167E085E290E0CF910C94CF2D49 -:101D500080E00E94900E60E086E290E00E94CF2D2D +:101D3000D62D6FEFC11161E184E290E00E94D62DB3 +:101D40006FEFC11165E285E290E0CF910C94D62D42 +:101D500080E00E94900E60E086E290E00E94D62D26 :101D60000E943B0E0E942B0E81E00C94900ECF93AC -:101D7000C091D602C2FB992790F9981781F080FB99 -:101D8000C2F9C093D6026091D50284E090E00E942F -:101D9000CF2D6C2F82E290E0CF910C94CF2DCF917C -:101DA00008950F931F93CF93DF93C42FD0E0CC0FF0 -:101DB000DD1F28E1629FC00DD11D112430E6839FF5 -:101DC000C00DD11D1124CE0187960E94BB2D082F76 -:101DD00010E0102F0027CE0188960E94BB2D98019D -:101DE000282BC901DF91CF911F910F910895462FA4 -:101DF0008A3038F4743028F46C3018F4672F0C945F -:101E0000D10E90E080E00895BF92CF92DF92EF92E2 -:101E1000FF920F931F93CF93DF937C0100910903EF -:101E200010910A0380915A0290915B02082B192BA2 -:101E3000CFE0D0E0CC24C394D12CBC2EC6010C2E14 -:101E400002C0880F991F0A94E2F780239123892BFF -:101E500071F4219790F7B12C8B2DDF91CF911F91C9 -:101E60000F91FF90EF90DF90CF90BF900895B70152 -:101E70008C2F0E94F70E0E941909019751F3ECCFA5 -:101E8000CF93DF93EC010E94040FBE010E94F70E76 -:101E9000DF91CF910C941909FC01808191810E94FE -:101EA000400F292F2F7092959F7092509E3078F49A -:101EB000E92FF0E0E75BF14D0C94702D803F19F0B5 -:101EC00020F4883E20F481E00895843FE1F380E02F -:101ED0000895883EC0F3813FD1F7F5CF822F8695D4 -:101EE00086958695089583E290E00E94BB2D81320D -:101EF00089F484E290E00E94BB2D813159F485E29F -:101F000090E00E94BB2D91E0873009F090E0892F8E -:101F10008170089580E0FCCFCF9384E090E00E9430 -:101F2000BB2DC82F82E290E00E94BB2D982F8C2FF2 -:101F3000CF91089560918903669570E04BE050E081 -:101F40008AE091E00E94A12D892B19F481E0809311 -:101F5000C5020E9488069093BF028093BE02089536 -:101F60004F925F926F927F928F929F92AF92BF92A9 -:101F7000CF92DF92EF92FF920F931F93CF93DF9355 -:101F8000CDB7DEB7CE57D1090FB6F894DEBF0FBE7E -:101F9000CDBF509019018091890380FF5DC0809072 -:101FA000BC029090BD028114910409F068C0EDEC70 -:101FB000F3E09E012F5F3F4FBE0161587F4FC90183 -:101FC000A4914A2F50E0DA01AA0FBB1FA40FB51F3E -:101FD000A55FBC4FCD90DD90EC90D901CD92DD9204 -:101FE000ED929D0131966A177B0751F720911801F8 -:101FF00043E0249F800D911D11246E9A2EB12F7BFA -:102000003EB130645FB7F894BC01549E600D711D01 -:1020100011248617970709F08DC05FBF8FE594E004 -:102020000197F1F700C00000C258DF4F0FB6F894D7 -:10203000DEBF0FBECDBFDF91CF911F910F91FF90FB -:10204000EF90DF90CF90BF90AF909F908F907F9058 -:102050006F905F904F90089580911A0190911B01AD -:1020600023E0829FF0011124E55FFC4F891708F0FF -:1020700096CF1182108212828F5F3396F7CF8091B4 -:10208000BB02811194CFD12CC12C66246394712C96 -:1020900053E0452E8091C60293010C2C01C0220F03 -:1020A0000A94EAF7822309F43CC0F601EE0FFF1F01 -:1020B000E80DF91DE590F490E114F10409F477CFEF -:1020C00045E050E0B701CE0101960E94982D0981AC -:1020D0000F3F39F18A81800F9927991F8B32910523 -:1020E00014F08AE290E05C01AA0CBB1C8A0D9B1DD7 -:1020F000DC01A55FBC4F5D01049D80011124055FDB -:102100001C4F0A151B0520F0B5E0EB0EF11CD8CFD3 -:1021100098014D816C818B810E94E8060D5F1F4FF5 -:10212000F0CFEFEFCE1ADE0AF8E0CF16D10409F0B7 -:10213000B1CF3DCFFC014191CF01E8E03EB90000B5 -:1021400000C047FF2EB9440F000000C000C000C00F -:102150002EB900C0EA9591F75CCFCF93DF9300D002 -:102160000F92CDB7DEB78091890380FF13C09E0127 -:102170002F5F3F4F44E666EE80E00E94E8068B81C9 -:1021800099812A812093840390938303809385030C -:102190000E94B00F0F900F900F90DF91CF91089594 -:1021A0000F931F93CF93DF93EC0110E000E0909129 -:1021B0001C019017110609F06CF40E94B00F8C817D -:1021C00090E00196817099278C83DF91CF911F91C8 -:1021D0000F91089520911A01A801420F511D9A01F3 -:1021E000220F331F240F351F255F3C4F4C81609118 -:1021F0008B0380918A0396959017110651F04CF04D -:10220000442349F040918C030E94E8060F5F1F4F62 -:10221000CECF4423B9F340E0F7CF8F929F92AF9295 -:10222000BF92CF92DF92EF92FF920F931F93CF93C3 -:10223000DF93EC014C81042F10E09801D8010E943B -:10224000382E9B01AC010E94032E4B015C01E0E2A1 -:10225000F0E0E01BF10BA5E5B0E0AC019B010E94B2 -:10226000032E6B017C019F01DF010E947D2D9B01EC -:10227000AC010E940E2E9B01AC01280D391D4A1D98 -:102280005B1DC701B6010E94162EF22E822F90E030 -:1022900039E23F1560F143E0249F90011124359508 -:1022A0002795122F109500E085E5E82EEF18809114 -:1022B0001C01081758F10E94B00F9C8181E09923FE -:1022C00019F0903219F48FEF809317018091170164 -:1022D000890F8C83DF91CF911F910F91FF90EF9029 -:1022E000DF90CF90BF90AF909F908F90089525E59D -:1022F00030E0B901681B790B9B01220F331F260FB9 -:10230000371F37FFCCCF2F5F3F4FC9CF8E2D01FD39 -:102310008F2D20911A01622F600F7727771F9B0165 -:10232000220F331F260F371F255F3C4F412F60912F -:102330008B030E94E8060F5FBACF0F931F93CF93D2 -:10234000DF9380911A0190911B0123E0829FF0019D -:102350001124E55FFC4F891740F1C0E0D3E06091A4 -:102360001C01C61740F10E94B00F20911501809109 -:10237000C802820F8093C80290911601920F909329 -:102380001601191654F4082E000C990B40911C01EB -:102390004150550B841795071CF02195209315018A -:1023A000DF91CF911F910F910895118210821282B7 -:1023B0008F5F3396D0CF0C2F10E070E0C8010E94E1 -:1023C0005C2D20911A01820F482F50E02091C80205 -:1023D000022E000C330B02171307BCF020911601DC -:1023E000022E000C330B201731077CF08D9F9001DB -:1023F0001124255F3C4F40918C0360918B038091A9 -:102400008A030E94E806CF5FAACFFA01EE0FFF1FF2 -:10241000E40FF51FE55FFC4F118210821282F3CFAB -:102420001F93CF93DF93FC018281DFEF80FFD1E028 -:10243000C0E01AE290911C01C91788F00E94B00F09 -:102440008091C702D130C9F5811102C080911C0171 -:1024500081508093C702DF91CF911F910895E09141 -:102460001A014C2F50E09A012E0F311DF901EE0F89 -:10247000FF1FE20FF31FE55FFC4F118210821282F3 -:102480008091C7028B32ACF0612F0E943A2D892FC8 -:10249000082E000C990B4817590749F49F014091E9 -:1024A0008C0360918B0380918A030E94E806CF5FC2 -:1024B000C1CF87FFEDCF890FEBCF90E00196609100 -:1024C0001C0170E00E945C2DC4CFEF92FF921F931D -:1024D000CF93DF93EC0110E0EE24EA94F12C6091AD -:1024E0001C01161770F00E94B00F9A818C8190FF2A -:1024F00027C08F5F8C83DF91CF911F91FF90EF906A -:10250000089520911A01422F410F5527551FCA01E6 -:102510009A01220F331F280F391F255F3C4F70E0AF -:10252000C7010E945C2D962F8C8140918C03609195 -:102530008B03199F800D11240E94E8061F5FCFCFE7 -:102540008150D8CF9091890390FF14C090911A01C7 -:1025500020911B0133E0939FF0011124E55FFC4FB4 -:10256000921710F00C94B00F8183608342839F5FB9 -:102570003396F6CF08950F931F93CF93DF9300D038 -:102580000F92CDB7DEB78C018091C90281110AC0CC -:102590009E012F5F3F4F44EB6FEF0E94E8068A8158 -:1025A0008093C902F8016481613069F08091C902A9 -:1025B00040E0662361F040E0623011F44091C902CE -:1025C00080E060E004C06091C90240E080E00E94C9 -:1025D000A212F801848190E0019663E070E00E940D -:1025E0005C2D84830F900F900F90DF91CF911F91FE -:1025F0000F910895CF93DF9300D00F92CDB7DEB740 -:102600009091890390FF0AC09E012F5F3F4F0E9467 -:10261000E8064B8169818A810E94A2120F900F9077 -:102620000F90DF91CF910895CF93DF93EC01E9E80C -:10263000F3E0438162818C810E94FA128C818F5F6A -:102640008C83DF91CF910895CF93DF93EC01EC81E0 -:10265000F0E0EA50FC4F4491E9E8F3E062818181C7 -:102660000E94FA128C818F5F8C83DF91CF91089545 -:10267000CF92DF92EF92FF926B017C010E94D20613 -:10268000B701A60188E090E0FF90EF90DF90CF9037 -:102690000C94E12DAF92BF92CF92DF92EF92FF9216 -:1026A0000F931F93CF93DF9300D00F92CDB7DEB778 -:1026B000182FF62E042FE22E9091890390FF29C047 -:1026C000E92FE695AE2FB0E0A255BE4F8C918093D6 -:1026D000C4029E7F923059F59E012F5F3F4F812F9C -:1026E0000E94E8064B8169818A810E94A2121093A0 -:1026F0008A03F0928B0300938C03EE2051F06091DB -:10270000890370918A0380918B0390918C030E94BE -:1027100038130F900F900F90DF91CF911F910F9171 -:10272000FF90EF90DF90CF90BF90AF9008958230F0 -:1027300019F400918C03DBCF863019F410918A03D1 -:10274000D6CF8930D9F3893191F6E9518E2F817036 -:10275000D82EE695F0E0E853FC4FA590B490C12C3C -:10276000BB2460911C01C61618F00E94B00FBFCFA9 -:102770002C2D30E0A29EC001A39E900DB29E900D24 -:10278000112470E00E94482D812FD11013C0860FB4 -:1027900040911A01420F532F511D9A01220F331FEE -:1027A000240F351F255F3C4F402F6F2D0E94E806F8 -:1027B000C394D7CF861BECCFE9E8F3E0438128E050 -:1027C000421B08F440E021E0628181810C944A13AD -:1027D000E9E8F3E0438128E0420F08F44FEF21E0FD -:1027E000628181810C944A13E9E8F3E0628128E078 -:1027F000621B08F460E021E0438181810C944A135C -:10280000E9E8F3E0628128E0620F08F46FEF21E06D -:10281000438181810C944A13E9E8F3E0818121E04E -:102820004381628188500C944A13E9E8F3E0818186 -:1028300021E043816281885F0C944A1380918D036B -:10284000882319F0815080938D03609189037091E2 -:102850008A0380918B0390918C030C9438138091A0 -:102860008D03833018F48F5F80938D03609189030B -:1028700070918A0380918B0390918C030C94381390 -:102880009091890390FF36C09170811129C09260A8 -:1028900090938903662351F06091890370918A03B4 -:1028A00080918B0390918C030E943813609189036F -:1028B000669570E04BE050E08AE091E00E94A12D27 -:1028C000892BA9F01092C50281E08093C10220E01B -:1028D00040918C0360918B0380918A030C944A137E -:1028E000853210F09864D4CF880F982BD1CF0E94F6 -:1028F0009A0FEACF089560E00C94401421E030E094 -:10290000A90102C0440F551F8A95E2F7CA01209120 -:10291000C602662391F0822B8093C6028091C50285 -:10292000811105C08091890386950E947B14809156 -:10293000890380FD05C00C94B00F80958223ECCFF5 -:102940000895CF93DF93C82FC17082FBDD27D0F9A4 -:1029500081FB662760F984E00E947E1461E06C27A9 -:1029600085E00E947E146D2F86E0DF91CF910C945C -:102970007E140F931F93CF93DF93EC0161E00097D8 -:1029800009F0682F617080E00E947E1460E020975B -:1029900021F0BE0176956795617081E00E947E14FA -:1029A00060E0209731F0BE01769567957695679542 -:1029B000617082E00E947E1460E0209739F0BE01D1 -:1029C000B3E076956795BA95E1F7617083E00E9470 -:1029D0007E14AE0170E060E0BB27A72F962F852FF5 -:1029E0000097A105B105D9F1AC01BD0188E08A01CC -:1029F0009B01F4E03695279517950795FA95D1F741 -:102A0000011511052105310519F08C5FB901A801E7 -:102A10008A019B01E2E03695279517950795EA957F -:102A2000D1F7011511052105310519F08E5FB901A6 -:102A3000A8017695679557954795452B462B472BCB -:102A400009F08F5F8130C9F0882359F08230D1F0CE -:102A50008330E9F020E04EE16FEF80E406C080E0D3 -:102A6000C6CF20E04EE16FEF82E30E944A13CE0111 -:102A7000DF91CF911F910F91089520E04EE16FEF0C -:102A80008EE1F3CF20E04EE16FEF8AE6EECF20E05B -:102A90004EE16FEF87EDE9CF0E94B91490930A03DE -:102AA000809309030C94A90B8091090390910A0368 -:102AB0009C01267033272630310519F488600C9468 -:102AC0004C15877FFCCF21E030E002C0220F331F7E -:102AD0008A95E2F7209530958091090390910A0339 -:102AE000822393230C944C15909155028095892351 -:102AF00080935502282F277039F4282F082E000CB8 -:102B0000330B9217130621F49091D60292FF07C05F -:102B10008595859585950E946315109255020895B7 -:102B200021E030E002C0220F331F8A95E2F7809146 -:102B3000090390910A03822B932B0C944C158091DE -:102B400089038695815009F484E261E00C94401475 -:102B50008091890386958F5F853208F081E061E07E -:102B60000C9440149091890390FF07C09695981794 -:102B700020F0961710F40C94A81561E00C94401402 -:102B8000E9E8F3E083E0808311828FEF828384EBB6 -:102B90008383148260817181828193810C943813C4 -:102BA00069EE7EEF90E080E00E94ED2D60E082E033 -:102BB00090E00E94CF2D60E083E090E00E94CF2D56 -:102BC00010925B0210925A0260E084E090E00E9452 -:102BD000CF2D60E082E290E00E94CF2D60E085E0A2 -:102BE00090E00E94CF2D60E086E090E00E94CF2D23 -:102BF0006FEF87E090E00E94CF2D40E050E0BA01F7 -:102C000088E090E00E94E12D60E08DE090E00E947D -:102C1000CF2D40E050E0BA0188E190E00E94E12D24 -:102C200060E087E190E00E94CF2D40E050E0BA01E3 -:102C30008CE190E00E94E12D70E060E080E290E0A5 -:102C40000E94ED2D40E050E0BA0188E190E00E9442 -:102C5000E12D80E00E94900E0E94A80E40E050E01E -:102C6000BA018FE090E00E94E12D40E050E0BA010F -:102C700083E190E00C94E12D90E080E00E94C92D6A -:102C8000893E9E4F11F40C94730F80E008951092CA -:102C9000580280911D01E6EEF1E0882359F0809101 -:102CA000D50287FF07C08EE1DF011D928A95E9F703 -:102CB0000C94A90B86E0F8CF1F93CF93DF93CDB789 -:102CC000DEB7AA970FB6F894DEBF0FBECDBF81E086 -:102CD00093E02091F100DC012D93CD01B3E0893028 -:102CE0009B07B9F780910203833009F471C0B8F4EF -:102CF000813009F448C0823009F4B2C08091E80004 -:102D000083FF3AC180910103909102039A3008F049 -:102D100033C1E92FF0E0E95AF14D0C94702D8A305F -:102D200009F48DC08B3009F470C0893039F7809177 -:102D30000103813219F780910503909106030097F2 -:102D400011F00297D9F68091E800877F8093E80020 -:102D50008091E80082FF37C08091F2009091F300EB -:102D6000029729F48091F1008B7F813021F48091CA -:102D7000F1008093DC028091E8008B778093E8007B -:102D80000E946605BBCF80910103813A09F0B6CF5E -:102D90008091E800877F8093E800809105039091FF -:102DA0000603892B61F460E28DED92E070E00E94F1 -:102DB00019068091E8008B778093E8009FCF60E050 -:102DC00090E080E0F3CF8091FF028111C1CF96CFD8 -:102DD00080910103813A09F091CF80910503909190 -:102DE0000603892B09F08ACF8091E800877F8093C2 -:102DF000E8008091E80080FFFCCF80911D01809366 -:102E0000F1008091E8008E77B9CF80910103813283 -:102E100009F074CF8091050390910603892B09F086 -:102E20006DCF8091E800877F8093E8000E9466055F -:102E30008091030380931D010E9447165FCF80910C -:102E40000103813209F05ACF8091E800877F809397 -:102E5000E8000E946605809104038093DB024ECF58 -:102E600080910103813A09F049CF8091E800877F82 -:102E70008093E8008091E80080FFFCCF8091DB0226 -:102E8000BECF803899F0823809F076C08091050372 -:102E90008F70873008F070C08093E9008091EB005C -:102EA00085FB882780F91092E90006C08091FD0219 -:102EB0009091FE02911182609091E800977F90932B -:102EC000E8008093F1001092F1008091E8008E7785 -:102ED000B5C1882309F4A2C1823009F04DC08091A8 -:102EE00003038111A6C1809105038F702FEF280F76 -:102EF000263008F041C08093E9002091EB0020FFCC -:102F000098C1933031F48091EB0080628093EB00A4 -:102F100090C19091EB0090619093EB0021E030E044 -:102F200001C0220F8A95EAF72093EA001092EA0086 -:102F30008091EB008860EACF81111EC010910303DD -:102F40001F778091E3008078812B8093E30080914C -:102F5000E800877F8093E8000E9466058091E80082 -:102F600080FFFCCF8091E30080688093E30082E0E3 -:102F7000111183E08093FF028091E80083FF0AC073 -:102F80008091E800877F8093E8008091EB00806269 -:102F90008093EB00AA960FB6F894DEBF0FBECDBFAC -:102FA000DF91CF911F9108958058823028F72091AA -:102FB0000303309104032C3DE3E03E07A1F583E0D9 -:102FC0008A838AE289834FB7F894DE01139620E062 -:102FD0003EE051E2E32FF0E050935700E49120FFF0 -:102FE00003C0E295EF703F5FEF708E2F90E0EA3004 -:102FF000C0F0C7968D939D932F5F243159F74FBF33 -:103000008091E800877F8093E8006AE270E0CE015B -:1030100001960E9419068091E8008B778093E80062 -:10302000ABCFC096E7CF8091050390910603432F65 -:1030300055274330510509F44AC078F54130510510 -:1030400009F47AC08BE590E0E6EBF8E042305105F8 -:1030500009F092CF2091E800277F2093E80020918B -:103060000703309108038217930708F49C0140E09E -:103070002115310509F065C0411163C08091E80058 -:1030800082FDC9CF8091FF02882329F2853019F291 -:103090008091E80083FFF2CFBECF4132510509F4A1 -:1030A0003CC04232510509F067CF8330910508F0EA -:1030B00063CFFC01EE0FFF1FEA52FE4F0190F0813B -:1030C000E02D8D529E4FDC018C9190E01AC0332789 -:1030D00021303105D1F02115310561F02230310563 -:1030E00009F04ACFE3E2F9E0E4918E2F90E0E3E2C9 -:1030F000F9E007C0E1E4F9E0E4918E2F90E0E1E42B -:10310000F9E0009709F438CFA5CFEDE2F9E0E491BA -:103110008E2F90E0EDE2F9E0F4CF8330910508F0D6 -:103120002BCF880F991FFC01E452FE4F0190F081D4 -:10313000E02D89E090E08ECF82E190E0E1E1F9E0DE -:1031400089CF8091FF02882309F465CF853009F487 -:1031500062CF8091E80083FD5ECF8091E80082FD20 -:103160008DCF8091E80080FF83CF8091F200909115 -:10317000F3002115310519F08830910550F041E038 -:10318000089709F040E08091E8008E778093E8008E -:103190006FCF44914093F10031962150310901964F -:1031A000E8CF803809F0E8CE8091E800877F8093EF -:1031B000E800809100038093F10087CE8111DCCE7E -:1031C00010910303123008F0D7CE8091E800877F7A -:1031D0008093E800109300030E946605112311F00C -:1031E00084E005C08091E30087FDFACF81E0809301 -:1031F000FF0242E061EC81E00E94850542E261EC61 -:1032000084E00E94850542E261EC82E00E9485052F -:1032100042E260EC83E00E948505AECE809103031C -:10322000813009F0A9CE81E0933009F080E08093ED -:10323000FE021092E9008091E800877F8093E80009 -:103240000E94660599CE3F924F925F926F927F9255 -:103250008F929F92AF92BF92CF92DF92EF92FF92A6 -:103260000F931F93CF93DF9300D000D00F92CDB771 -:10327000DEB78C01FC0183819481892B31F0808140 -:10328000918189238F3F09F05DC60F900F900F90B9 -:103290000F900F90DF91CF911F910F91FF90EF90C2 -:1032A000DF90CF90BF90AF909F908F907F906F9066 -:1032B0005F904F903F9008950E94040FF82E682F62 -:1032C00089819A810E947D0B69817A818F2D0E946C -:1032D000F70E7C01F8018281882309F425C6970145 -:1032E00022513F452031310508F0DDC58FEF97E0D1 -:1032F0000E94BB2DFEEEEF0E57EE852E53E0952E6D -:10330000882381F180915502877009F4BECFF801BE -:103310008281882309F4B9CF82E00F900F900F903B -:103320000F900F90DF91CF911F910F91FF90EF9031 -:10333000DF90CF90BF90AF909F908F907F906F90D5 -:103340005F904F903F900C947415811428E0920682 -:10335000C9F2C4010E94BB2D811101C0EA943FEF64 -:10336000831A930AE110F1CF1C821B8244244394F8 -:103370004AE0342E74014FEFE41AF40AC4010E94AB -:10338000BB2D89831A82882309F4BCCF9FEF980F45 -:10339000933000F58A83498252E0850E911CC70163 -:1033A0000E94BB2D8B83882309F4ACCFCE010196FC -:1033B0007C01F70120812223E9F2213009F049C084 -:1033C00091818281913041F4F2E0EF0EF11C0E9474 -:1033D000AA0D09C04701EACF923049F422E0E20E7B -:1033E000F11C0E94F50C3FEFE31AF30AE2CF933091 -:1033F00031F432E0E30EF11C0E94E10BF4CF943083 -:1034000021F04FEFE41AF40AEECF52E0E50EF11C82 -:1034100030E020E0B7016F5F7F4FF70141818053BB -:10342000990B8A30910550F021503109E0F28FE973 -:103430009FE00197F1F700C00000F6CF329EF00147 -:10344000339EF00D11249C012E0F3F1F842F7B0112 -:10345000E1CFE22FF0E0EA5DFD4F5490822F869598 -:103460008695869590E0FC01EA5EFD4F649027709A -:10347000712C022E02C0759467940A94E2F7E1E081 -:103480006E227724FC01EA5FFD4FA490B12C022E3E -:1034900002C0B594A7940A94E2F7F1E0AF22BB24EE -:1034A000FC01EA50FE4FC490D12C02C0D594C794C1 -:1034B0002A95E2F721E0C222DD246114710419F09B -:1034C00081EE0E94F50CA114B10419F086EE0E9461 -:1034D000F50C852D0E94AA0DAB2819F086EE0E94EE -:1034E000E10B672819F081EE0E94E10BCD2809F469 -:1034F0007ACF8CE26CCF81E00E9490150E94541527 -:1035000001CF81E00E946315F9CF82E0F5CFF3E8A7 -:10351000EF16FFE5FF0609F4CCC024E8E2162FE51C -:10352000F20609F0E0C4882309F4ECCEF0906A02B8 -:10353000EE24E394FE24F0926A020E94880690939F -:103540006802809367028091690210921A018823B1 -:1035500009F4BDC08AE280931B0180931C0181E2C3 -:103560000E947B140E94AD10E0926A0210926902E0 -:103570001092660210926502C5CE882309F481C0BC -:1035800080916D02811106C081E080936D0282EE10 -:103590000E94F50C0E94880690936C0280936B0247 -:1035A0008BE20E94F50CF8018281882309F4DBC4C8 -:1035B00010929003F3E0EF16FDE5FF0608F0BAC0A5 -:1035C0002AEFE2162CE5F20630F4C70182509C4542 -:1035D000449708F0B5C00E948C0F9093D602809358 -:1035E000D50240E1E4164CE5F40609F491C108F077 -:1035F000FFC088E0E8168CE5F80609F477C108F00A -:10360000CBC0E4E0EE16ECE5FE0609F461C108F07B -:10361000ADC022E0E2162CE5F20609F453C1809118 -:10362000D502826033E0E3163CE5F30609F44DC1B0 -:103630006091D502F090D60284E090E00E94CF2DF8 -:103640006F2D82E290E00E94CF2D0E9447165ACE45 -:103650008823A1F080916D02811106C081E08093E2 -:103660006D0282EE0E94F50C0E94880690936C0217 -:1036700080936B0281EE0E94F50C92CF81EE0E9446 -:10368000E10B8BE20E94E10B8ECF882309F48BCFF4 -:1036900081EE0E94F50C83EE0E94F50C8FE40E94EF -:1036A000F50C8FE40E94E10B83EE0E94E10B81EEAA -:1036B000E9CF882309F477CF81EE0E94F50C83EEE1 -:1036C0000E94F50C80E50E94F50C80E5EBCF8AE2C4 -:1036D00080931B0180931C0181E2FF2029F00E944E -:1036E0007B140E94AD1042CF0E947B143FCFE5EFC8 -:1036F000EE16ECE5FE06B9F090F026EFE2162CE5AA -:10370000F20609F050CF27E245EE66EE09C427E243 -:1037100045EE65EE05C426E241EE60EE01C427E207 -:1037200045EE64EEFDC326E241EE62EEF9C328E207 -:1037300041E0EFCF31E6E3163DE5F30609F44BCF68 -:103740008091580246E1E4164CE5F40609F018C4ED -:103750008A7A91E009F490E0909304028111FDC00F -:1037600089E20E94170B0E94A70ACCCD8091D50256 -:10377000806146E0E4164CE5F40609F4A6C08091A9 -:10378000D502886057E0E5165CE5F50608F49DC0B3 -:103790008091D502806299C08CE0E8168CE5F8062D -:1037A00009F4AEC078F48091D5028C60EAE0EE16A0 -:1037B000ECE5FE0609F489C008F49CC08091D502AE -:1037C0008E7F83C08091D502877F2EE0E2162CE5A4 -:1037D000F20609F47AC08091D5028B7F3FE0E316B0 -:1037E0003CE5F30608F471C08091D5028F7E6DC070 -:1037F0004CEFE4164CE5F40609F486C0A0F584E12C -:10380000E8168CE5F80609F497C098F4E2E1EE16A4 -:10381000ECE5FE0609F480C08091D5028F7BF3E1D0 -:10382000EF16FCE5FF0608F450C08091D502837FB7 -:103830004CC02AEFE2162CE5F20609F44DC008F060 -:1038400051C045E1E4164CE5F40609F0F1CE809153 -:10385000D50282FB992790F921E0922790FB82F90B -:1038600090FB83F932C0E1145DE5F50609F45AC016 -:10387000A0F48091D60283609EEFE9169CE5F906DC -:1038800071F18091D6028D7FEFEFEE16ECE5FE062A -:1038900030F18091D6028C7F22C0F2E0EF16FDE578 -:1038A000FF0609F458C008F450C031E6E3163DE5C0 -:1038B000F30609F0BDCE9091D502892F8F7E94FF3B -:1038C000806103C08091D50281608093D502B0CE23 -:1038D0008091D5028460F9CF8091D6028160809377 -:1038E000D602A6CE8091D6028260F9CF8091D50211 -:1038F0008064EBCF0E9447168091D5028068E5CFA7 -:103900008091D5028D7FE1CF8091D6028E7FE7CF67 -:103910008091D5028F7DD9CF0E9447168091D50224 -:103920008F77D3CF8091D602982F909591708E7F0C -:10393000892B90FB81F9D3CF0E9447169091D50235 -:10394000892F97FB87F98058C0CF61E08EE090E027 -:103950000E94CF2D6DCE60E0F9CF85E302CF85E3E5 -:103960000CC38091890380FF1BC08E7F80938903E5 -:103970006091890370918A0380918B0390918C03ED -:103980000E9438131092C5025FEF80E792E0515019 -:1039900080409040E1F700C000000E94B00FB2CC20 -:1039A00081608093890361E086950E944014AACCCF -:1039B0004FE955E168EA75E10E94CC06A3CC48EADC -:1039C00055E16FE975E1F8CF45E154E16CE074E150 -:1039D000F3CF44EF53E160E074E1EECF4CED53E1FF -:1039E00068EE73E1E9CF48EE53E16CED73E1E4CFAB -:1039F0004FE254E16EE174E1DFCF61E081E0D5CFC9 -:103A000065E082E00E94B2157DCC68E086E0FACFE6 -:103A100064E18FE0F7CF67E185E1F4CF62E289E10D -:103A2000F1CF61E083E2C1CF4BE5E4164DE5F4064A -:103A300011F15CE5E5165DE5F50609F0D3C280916C -:103A4000D60282FB882780F991E089270E94B70E71 -:103A5000C9C20E9447168FEF94E3ECE0815090407A -:103A6000E040E1F700C000000E94D10C0E94D01598 -:103A700049CC81E0EBCF80E0E9CFC7010E94550B34 -:103A8000D82EBFC22F2D2F70C22E8F2D807F19F000 -:103A9000C29490EFC922DD20C9F0CC2069F080E209 -:103AA0008E0D883010F081100BC080915802C82A0A -:103AB000C09258020E94A70A8E2D0E94F50C19C0D0 -:103AC00080915702C82AC0925702F4CF8E2D0E94CF -:103AD000E10BCC2071F0C09480E28E0D883010F0A4 -:103AE00081103EC080915802C822C09258020E94A4 -:103AF000A70AE92DE850FF0B349720F40E94C00676 -:103B00000E94A114AA2009F4C0CB8091550280FD27 -:103B1000BCCBF80112828595859585950E949015FC -:103B2000C8010E9423198091550285958595859538 -:103B30000F900F900F900F900F90DF91CF911F91EA -:103B40000F91FF90EF90DF90CF90BF90AF909F903C -:103B50008F907F906F905F904F903F900C94631583 -:103B600080915702C822C0925702C1CF3F2D3F70AB -:103B7000B32E8F2D807F803219F0B29480EFB8225F -:103B8000882071F041E0841681F1DD20D9F1CC204C -:103B900091F1F801858180FF8FCF8F7085832BC0D5 -:103BA000DD20B1F0909159028B2D892BC11003C0FB -:103BB0000E94D70B9ECF51E0C512FACF2091D602BA -:103BC00022FD97CF981709F494CF8093590291CF93 -:103BD000C11006C00E94A10A8B2D0E94CC0B89CF78 -:103BE00081E0C81609F485CFF5CFDD2031F095E0EE -:103BF0009C1508F47ECF8B2DDBCFE4E0EC1508F4A8 -:103C000078CFEACFCC2041F3F9E38F1209C02FEF30 -:103C100037EE43E0215030404040E1F700C0000063 -:103C20008E2D0E94E10B65CF8F2D86958695837032 -:103C300061F0813009F05DCFC7019370D11002C0EF -:103C400090E080E00E94940654CFC7019370D11099 -:103C500002C090E080E00E94AA064BCF8E2DDD20AE -:103C600029F00E9463080E94810743CF0E94A807A1 -:103C7000FACF8F2D837009F040C0D1103ACF4E2D6E -:103C8000429546954770440F440F8E2D8F7090E0FB -:103C9000042E02C0880F991F0A94E2F730E020E05A -:103CA000E4FE09C02FE030E002C0220F331F4A9526 -:103CB000E2F7209530954F2D46954695437042305A -:103CC00099F078F460915A0270915B02413039F0BA -:103CD000822B932B862397230E94C60B0ACF862B19 -:103CE000972B822B932BF8CF822B932B20915A0268 -:103CF00030915B0282279327EFCF8695DD2011F06C -:103D00008F2D8170882309F4F4CE4E2D429546956F -:103D10004770440F440F8E2D8F7090E0042E02C028 -:103D2000880F991F0A94E2F730E020E0E4FE09C012 -:103D30002FE030E002C0220F331F4A95E2F72095B2 -:103D400030954F2D469546954370423099F078F462 -:103D50006091090370910A03413039F0822B932B53 -:103D6000862397230E944C15C4CE862B972B822B3B -:103D7000932BF8CF822B932B2091090330910A03C8 -:103D800082279327EFCF5F2D5F70F52EDD2029F07E -:103D9000852F0E9490158E2D0BCF8E2D0E94CC0B5F -:103DA0008F2D0E946315A5CE8E2D92EF891609F4F2 -:103DB00049C0981570F0E0EF8E1639F1F1EF8F16CB -:103DC000C9F1DD2009F45FC0C11076CE8F2D8F714F -:103DD00036C023EF8216D9F134EF8312F2CFDD2003 -:103DE00009F446C0FF2DFF71FF2E8F2F0E94901502 -:103DF0008091D60282FD07C028E0F29EC001112406 -:103E00008360809355028F2D1AC0DD2071F044E04D -:103E10004C1508F46ECE2F2D2F7181E090E002C07A -:103E2000880F991F2A95E2F7A7CF55E05C1508F493 -:103E300060CEF1CF8F2D8F71DD2009F4B2CF0E94BB -:103E4000901557CE8F2D8F71DD20C9F3AACF90E04A -:103E500080E0DD2009F486CF9F2D9F7121E030E0C6 -:103E6000F90102C0EE0FFF1F9A95E2F7CF017ACF5A -:103E700081E00E94741531E03C1508F03ACE82E0F2 -:103E80000E94741536CECC2059F0893309F0C8CE83 -:103E90004FEF57EE83E0415050408040E1F7BECEF7 -:103EA0008F2D8F717ECFF0E1EF16FFE5FF0609F44D -:103EB00022CB21E1E2162FE5F20609F426CB42E8F7 -:103EC000E4164FE5F40609F4E0CB08F020CB90E8C7 -:103ED000E9169FE5F90609F450CBE1E8EE16EFE5A7 -:103EE000FE0609F4B5CB33EFE3163CE5F30609F41F -:103EF00012CC08F0FCCB58EDE5165CE5F50609F4AC -:103F000006CC89EDE8168CE5F80609F410CC97ED9F -:103F1000E9169CE5F90609F046CB26E241EE61EE92 -:103F2000C8010E94C70DEEC930E1E3163FE5F30674 -:103F300009F4E7CA41E1E4164FE5F40609F0BFCF02 -:103F400082E0E0CA85E0DE01119601900D928A952B -:103F5000E1F7F801228189819A812111ADC90E947E -:103F6000550BF82EB1C9F6E1EF16FCE5FF06D1F5C9 -:103F7000809104028111F3CC89E20E94EC0AF3CB18 -:103F800082722CECE2162CE5F20609F431CD08F031 -:103F9000A7C046ECE4164CE5F40609F415CD08F08C -:103FA00076C093ECE9169CE5F90609F401CD08F01A -:103FB0005DC0F2ECEF16FCE5FF0609F4D2CCEAE5B1 -:103FC000EE16EDE5FE0609F454CD08F02DCDE11412 -:103FD0002CE5F20609F43DCD3EEDE3163CE5F30693 -:103FE00009F444CDF8018281E080F180882309F44E -:103FF00044CDC7010E94040FD82E682FC7010E942C -:104000007D0BB7018D2D0E94F70E0E9419097C01CE -:10401000882EF801D280C580C2943FE0C3228091EF -:1040200055028770A1F0AD2CDD2091F08F2D807F9F -:10403000803421F080E28E0D883048F082E00E94CA -:104040007415809155028770AA24A3948111A12C24 -:104050009F2C92942FE09222FBE0F91508F449CDB1 -:10406000E92DF0E0EF59F14D0C94702D24ECE2169F -:104070002CE5F20609F4A3CC4CE054E165E174E1CF -:1040800035ECE3163CE5F30609F496CC98CF49EC01 -:10409000E4164CE5F40609F4A1CC88F497ECE91693 -:1040A0009CE5F90609F495CC40E054E164EF73E136 -:1040B000E8ECEE16ECE5FE0609F47ECC80CFFAECD7 -:1040C000EF16FCE5FF0609F48ECC4EE154E16FE2F9 -:1040D00074E12BECE2162CE5F20609F46DCC6FCFFF -:1040E00031EDE3163CE5F30609F492CCB8F45EEC4E -:1040F000E5165CE5F50609F483CC08F47ECC9FEC6C -:10410000E9169CE5F90609F480CC6EE089E0E0ED63 -:10411000EE16ECE5FE0609F475CC51CFF4EDEF1682 -:10412000FCE5FF0609F47ACC78F432EDE3163CE5C1 -:10413000F30609F470CC61E088E143EDE4164CE548 -:10414000F40609F432CC3BCF55EDE5165CE5F506F7 -:1041500009F467CC8DE5E816F80609F4D3C82FCF2B -:104160001F93CF93DF9380912202807FA9F48091E7 -:104170001F02882389F080915402D091230260911C -:104180001D0270911E02A0912002B0912102C62F43 -:10419000C72316E0D81304C0DF91CF911F91089573 -:1041A00090E0109711F0CF3F19F401968770F2CF8D -:1041B000189F9001199F300D1124F901EC5DFD4FFE -:1041C00041814713F2CF40814613EFCF4281411125 -:1041D000ECCF438154814A1B5B0B483C510528F7C7 -:1041E000809122028F70806180932202F901E75D45 -:1041F000FD4F80818F70806180838DE192E00E940D -:104200002319DF91CF911F910C944B0BAF92BF926A -:10421000CF92DF92EF92FF920F931F93CF93DF9392 -:10422000CDB7DEB761970FB6F894DEBF0FBECDBF36 -:104230008C0185E0F801DE011D9601900D928A95B2 -:10424000E1F7F801E2808DE1A82E82E0B82E6091BE -:104250002002709121026115710509F432C190911B -:104260001D0240911E02892F84238F3F09F429C12A -:1042700020813181C380D480F0901F02F601E61BBB -:10428000F70BFF2009F4E8C080912202582F507FDD -:10429000E83CF10508F0ABC0511177C0FE2C431388 -:1042A00021C092131FC0E1101DC08F7080618093E8 -:1042B0002202C5010E94231980912202F801858300 -:1042C0008F2D61960FB6F894DEBF0FBECDBFDF9184 -:1042D000CF911F910F91FF90EF90DF90CF90BF9003 -:1042E000AF900895CD2829F0822F83238F3F09F0C6 -:1042F00003C180E0F82FF170DF2E80FF3CC0809179 -:1043000054024091230256E0841315C02D873E8746 -:104310008D859E850E94400F292F22952F70223077 -:10432000F0F0243018F59F70F1F0F8019581907F3E -:10433000D1F4D12C1EC090E0589FF001599FF00D90 -:104340001124EC5DFD4F6181361306C06081261398 -:1043500003C06281E6120FC001968770D5CF9F70AF -:1043600011F0882331F3805E883018F3C8010E9471 -:104370002319FD2CA5CFEE2009F4A2CF80912202B3 -:10438000816080932202F12C9BCF431306C09213CD -:1043900004C0F801EE2009F479C0C8010E944C0F56 -:1043A000882309F1EE20F9F080912202803270F02A -:1043B00020911D0230911E0238872F831986DB86DB -:1043C000CA868C87CE0107960E94231986E0F801E1 -:1043D000ADE1B2E001900D928A95E1F70E94B02024 -:1043E000FF24F3946DCFC8010E942319F9CF511116 -:1043F0000AC08DE192E00E94231986E0F501119236 -:104400008A95E9F7C0CF43130FC092130DC0E11096 -:104410000BC0F8018583C8010E94231986E0F501CD -:1044200011928A95E9F74CCFC8010E944C0F88235E -:10443000D1F2EE20C1F280912202803238F2209136 -:104440001D0230911E023A8329831B82DD82CC82B9 -:104450008E83CE010196B8CFE83CF105F8F6FE2C2C -:10446000EE2009F243131FC092131DC08091220257 -:1044700080FD10C0982F907F69F0F8018583903FF0 -:1044800031F0982F907F905F8F70892B8583C801C2 -:104490000E94231986E0F801ADE1B2E001900D928F -:1044A0008A95E1F70DCFC8010E944C0F81118ECF84 -:1044B00080912202816080932202C8010E94231908 -:1044C000FFCEEE2009F48FCFC8010E944C0FF82ECA -:1044D000882309F488CF86E0F801ADE1B2E00190CD -:1044E0000D928A95E1F780911D0290911E020E9423 -:1044F000400F0E94B020E4CE81E08E25FBCE1F93BA -:10450000CF93DF93CDB7DEB767970FB6F894DEBFD2 -:104510000FBECDBF4B8B5C8B6D8B7E8B8F8B6111F8 -:10452000109257021A8A198A85E0FE017396DE01FD -:104530001D9601900D928A95E1F786E0FE013D9669 -:10454000DE01179601900D928A95E1F7CE0107964C -:104550000E940621882389F016E0809154029091F0 -:104560002302891349C067960FB6F894DEBF0FBEC9 -:10457000CDBFDF91CF911F91089586E0FE01379660 -:10458000DE01119601900D928A95E1F78A859B854F -:10459000892B11F38F81988589238F3FE9F2209130 -:1045A000230230E0C9010196877099274091540297 -:1045B0004817190671F40E944716109223021092B0 -:1045C000540286E0EDE1F2E0DF011D928A95E9F701 -:1045D000C3CF96E0929FD001939FB00D1124AC5DA4 -:1045E000BD4FFE01319601900D929A95E1F78093AF -:1045F00023020E944B0BB0CF819FC00111248C5D20 -:104600009D4F0E940621882309F4ADCF809154026A -:1046100090E0019687709927809354029ECF6F9205 -:104620007F928F929F92AF92BF92CF92DF92EF9242 -:10463000FF920F931F93CF93DF93CDB7DEB72D97E4 -:104640000FB6F894DEBF0FBECDBF8E010F5F1F4FB8 -:1046500088E0F80111928A95E9F74FE4E42E41E0F1 -:10466000F42E680153E5652E51E0752E882483945D -:10467000912CF70181917F018F3F09F44BC0F89491 -:10468000E82FE295EF70F0E021A18F70A40102C045 -:10469000440F551F8A95E2F7CA01922F982B91A3D8 -:1046A00092A18095892382A3789400C0E3E5F1E08C -:1046B00030E020E0B12CA12C81918F3F09F47CC027 -:1046C000A82FA295AF70B0E090964C9150E08F70FB -:1046D00002C0559547958A95E2F740FD6DC0C4012B -:1046E000022E02C0880F991F0A94E2F7A82AB92A5D -:1046F0002F5F3F4F2C303105F9F6F701319780815C -:104700008F3F11F00E94BF0850EA5A95F1F7F60169 -:10471000B182A082F2E0CF0ED11C6E147F0409F0AA -:10472000A8CF48E050E0B8018EE692E00E94AE2D9E -:10473000CC24C394009709F4C12C892B09F43FC001 -:1047400088E0F801AEE6B2E001900D928A95E1F7BB -:1047500081E080935E020E94880690935D028093C0 -:104760005C0280915C0290915D020E94790605973F -:1047700050F180916E0290916F029093A702809306 -:10478000A60280917002909171029093A902809389 -:10479000A80280917202909173029093AB02809371 -:1047A000AA0280917402909175029093AD02809359 -:1047B000AC0210925E0207C090E080E097CF80913B -:1047C0005E028111CECF80916D02882371F08091BD -:1047D0006B0290916C020E947906893E934028F00A -:1047E00082EE0E94E10B10926D0280916A02882392 -:1047F00099F18091690281112FC080916702909197 -:1048000068020E94790681369A4E78F0809165029E -:1048100090916602019690936602809365020E94D1 -:104820008806909368028093670280916502909158 -:1048300066024F9788F010921A018AE280931B015A -:1048400080931C018FE00E947B1481E080936902B9 -:10485000109266021092650238E7E32E32E0F32EE2 -:1048600010E000E0BB24B394F701D1907F01DD207C -:1048700051F10115110509F058C0B09263020E9470 -:1048800088069093600280935F02D694C801880FD7 -:10489000991FDD2009F456C08F589E4FFC0180817E -:1048A00091819A8789871B860E9488068160782F6C -:1048B0009D878C87F7013197108249855A856B85D2 -:1048C0008D850E947F220F5F1F4F0930110561F611 -:1048D000109164028091630211115DC08823A9F1D7 -:1048E00010921A0184E080931B0180931C018FE0D9 -:1048F0000E947B141092630281E0809364028C2DED -:104900002D960FB6F894DEBF0FBECDBFDF91CF91CD -:104910001F910F91FF90EF90DF90CF90BF90AF90DD -:104920009F908F907F906F9008950530110519F436 -:10493000B0926202A4CF0630110509F0A6CFB09262 -:1049400061029DCF815A9E4FA9CF80916202882338 -:1049500079F086E180931A018AE180931B0184E05B -:1049600080931C018FE00E947B1410926202C4CFDE -:10497000809161028823A9F08AE180931A018EE177 -:1049800080931B0184E080931C018FE00E947B14C4 -:1049900010926102B1CF81112BC08091620281110E -:1049A00027C080916102811123C080915F029091A4 -:1049B00060020E947906853F9140D0F0112379F082 -:1049C00010921A018AE280931B0180931C0181E2FC -:1049D0000E947B1480916A0281110E94AD10109296 -:1049E000630210926202109261021092640287CFF9 -:1049F00010926302109262021092610280CF1F92A5 -:104A00000F920FB60F9211242F933F934F935F9302 -:104A10006F937F938F939F93AF93BF93CF93DF93C6 -:104A2000EF93FF93D091E900DF708091EC00C82FE5 -:104A3000C17080FDC0E81092E9008091F000877F8E -:104A40008093F00078940E945C161092E9008091A7 -:104A5000F00088608093F000CD2BCF70C093E90008 -:104A6000FF91EF91DF91CF91BF91AF919F918F9186 -:104A70007F916F915F914F913F912F910F900FBE5A -:104A80000F901F9018951F920F920FB60F9211243E -:104A90002F933F934F935F936F937F938F939F9346 -:104AA000AF93BF93EF93FF938091E10082FF09C022 -:104AB0008091E20082FF05C08091E1008B7F8093AE -:104AC000E1008091DA0080FF24C08091D80080FF4F -:104AD00020C08091DA008E7F8093DA008091D90027 -:104AE00080FF9BC088E189BD8AE189BD09B400FED1 -:104AF000FDCF81E08093FF028091DA02811109C02D -:104B00000E94EC040E94B7058091E20084608093CB -:104B1000E2008091E10080FF17C08091E20080FFF9 -:104B200013C08091E2008E7F8093E2008091E200CA -:104B300080618093E2008091D80080628093D800E9 -:104B400019BC85E08093FF028091E10084FF29C0B9 -:104B50008091E20084FF25C088E189BD8AE189BD9A -:104B600089B5982F917080FFFBCF8091D8008F7D01 -:104B70008093D8008091E1008F7E8093E100809146 -:104B8000E2008F7E8093E2008091E200816080935A -:104B9000E20080910003882309F445C084E08093FB -:104BA000FF028091E10083FF27C08091E20083FF34 -:104BB00023C08091E100877F8093E10082E08093B1 -:104BC000FF02109200038091E1008E7F8093E1004C -:104BD0008091E2008E7F8093E2008091E20080610C -:104BE0008093E20042E060E080E00E9485058091D1 -:104BF000F00088608093F000FF91EF91BF91AF913A -:104C00009F918F917F916F915F914F913F912F91E4 -:104C10000F900FBE0F901F90189519BC1092FF02B5 -:104C20001092DA0276CF8091E30087FD93E09093B3 -:104C3000FF02B7CF78941F921FB61F9211248F9353 -:104C40009F93AF93BF938091D1029091D202A09194 -:104C5000D302B091D4020196A11DB11D8093D1025F -:104C60009093D202A093D302B093D402BF91AF919C -:104C70009F918F911F901FBE1F9018951F921FB676 -:104C80001F9211248F939F93AF93BF938091D00273 -:104C9000811113C08091D1029091D202A091D302D0 -:104CA000B091D4024196A11DB11D8093D102909381 -:104CB000D202A093D302B093D402BF91AF919F913F -:104CC0008F911F901FBE1F901895CDB7DEB7E0974C -:104CD0000FB6F894DEBF0FBECDBF84B7877F84BF09 -:104CE0000FB6F894A8958091600088618093600069 -:104CF000109260000FBE80E890E00FB6F8948093A9 -:104D00006100909361000FBE85B7806885BF85B74D -:104D1000806885BF8DEB98E09093E3018093E2017A -:104D20000E94EC040E94B7058091E20084608093A9 -:104D3000E20078948091FF028823A1F01091E900AD -:104D40001F709091EC00892F817090FD80E8182BE6 -:104D50001092E9008091E80083FD0E945C161F70AC -:104D60001093E90082E084BD93E095BD9AEF97BD72 -:104D700080936E000E94730F811102C00E94A80EE2 -:104D800080EF0E94BF0881EF0E94BF0882EF0E945F -:104D9000BF0883EF0E94BF0803E511E0FFE5EF2E97 -:104DA000F1E0FF2ED8018D918D018F3F11F00E940F -:104DB000BF08E016F106B1F710926F0210926E0272 -:104DC0001092A7021092A602109271021092700225 -:104DD0001092A9021092A80210927302109272020D -:104DE0001092AB021092AA021092750210927402F5 -:104DF0001092AD021092AC020E943C16811102C0CA -:104E00000E94D01582E090E00E94BB2D80939D020D -:104E10000E948C0F9093D6028093D5020E940F239C -:104E2000EFE3FCE93197F1F700C000000E940F2387 -:104E30008091A60280FF08C06FEF7FEF90E080E0D6 -:104E40000E94ED2D0E94D10C83E090E00E94BB2DCA -:104E500090E00E94C60B8091090390910A030E9482 -:104E6000B91480917602811132C00E943C168111E2 -:104E700004C00E94D0150E94C01588E090E00E94F6 -:104E8000C32D6093890370938A0380938B0390935F -:104E90008C036E7F71F40E94C01588E090E00E9440 -:104EA000C32D6093890370938A0380938B0390933F -:104EB0008C030E94D2061092C5028091890380FF64 -:104EC00003C086950E947B1481E0809376026EEA8F -:104ED00071E0E3E98E2EE2E09E2E2CE931E0E5EA76 -:104EE000F1E041E050E01191812F82958F7090E0C8 -:104EF000DC019196FC9091971F70E12E6A0101C030 -:104F0000CC0C1A95EAF70C2D00950F2191960C9375 -:104F1000919792961C9192971C2992961C93D90175 -:104F2000FD909D010F2D02950F7010E0D801919614 -:104F3000BC90BF2DBF70FB2E6A0101C0CC0CBA958E -:104F4000EAF7DC2CD094DB20D8019196DC92919783 -:104F50009296DC909297DC289296DC92DC019096F7 -:104F60008C9190E002C095958795EA94E2F7817064 -:104F7000D80190960C9110E002C015950795FA940F -:104F8000E2F790E000FD92E0892BD4018D934D0172 -:104F90006E177F0709F0A7CF86EA92E09093BD02D3 -:104FA0008093BC0281E20E947B1481E090E00E9429 -:104FB0004C1580E091E09093CD028093CC0258E1B3 -:104FC000252E312C8091FF02FF24F39408E11AE191 -:104FD000853009F4B3C20E940F23882359F08FB79C -:104FE000F8944091D1025091D2026091D302709115 -:104FF000D4028FBFA6EAB2E0EEE9F2E010E000E0F2 -:10500000702F8D919D91219131912817390709F4C5 -:10501000BEC22827392760E0EE24E394F12CA901D1 -:105020004E215F21452B09F4ACC269A37AA39C01F0 -:105030002E213F2191E0232B09F490E09BA30E94B5 -:1050400088068160782F9DA38CA349A15AA16BA1EA -:105050008DA10E947F22000F111FF801E256FD4F23 -:1050600080819181E826F926F182E0828091C50253 -:105070008823D1F18091C402E0918903E695E81B71 -:10508000E093C002823009F099C2F0E0EC53FD4F8A -:10509000E4910E2F10E024E2E22E23E1F22E809123 -:1050A000C102882361F01092C1020E948806909389 -:1050B000BF028093BE021092C3021092C2020E94ED -:1050C0008806E091BE02F091BF028E1B9F0B8F3FBE -:1050D0009F4750F4E00FF11FF093BF02E093BE0230 -:1050E0008EEB92E0F70109953AE8E32E32E0F32ED9 -:1050F00001E812E048E7842E42E0942E83E991E033 -:105100009CA78BA7D12CC12CACE9B1E0BEA7ADA761 -:10511000E5EAF1E0F8ABEFA753E9652E52E0752E12 -:10512000512C44244394D301ED913D01EE0FEE0F39 -:10513000AFA5B8A92D91B8ABAFA7A22FA295AF701C -:10514000B0E090968C9190E02F7002C09595879575 -:105150002A95E2F781709927ADA5BEA54D91BEA70E -:10516000ADA7A42FA295AF70B0E090962C9130E03F -:105170004F7002C0359527954A95E2F7A901417015 -:10518000552720FF02C042E050E0842BE82BD301DA -:105190001197EC93ABA5BCA5AD90BCA7ABA7EF70E6 -:1051A000F0E0ED57FE4F8081F7019081890F8083F9 -:1051B000B12C082E000C990B20E08A159B05DCF021 -:1051C000D8018C918F5F8C93F601E15AFE4F80815C -:1051D00091819A8389834B820E9488068160782F0F -:1051E0009D838C83F401408249815A816B818D813A -:1051F0000E947F2221E0D7018C91082E000C990B90 -:10520000442755274A195B0948175907E4F0F80164 -:10521000808181508083F601EF58FE4F808191811B -:105220009A8389834B820E9488068160782F9D83B0 -:105230008C83E2E0D401EC9349815A816B818D81AA -:105240000E947F2221E0D7018C91082E000C990B3F -:10525000B5010E945C2DF70181937F01522A0F5FF7 -:105260001F4FFFEF8F1A9F0A22E0C20ED11C42E1AE -:10527000C416D10409F057CF552059F08FB7F894D0 -:105280004091D1025091D2026091D3027091D40228 -:105290008FBF86E0E5EBF2E0DE01119601900D9202 -:1052A0008A95E1F7F090B702E090B8021091B90248 -:1052B0000091BA021092B7021092B8021092B9028D -:1052C0001092BA028F2D8E2909F448C08091B30242 -:1052D0009091B4020E9479069C019091AF029923AB -:1052E00009F4C3C323333105C8F19F3F19F09F5F11 -:1052F0009093AF02FF2059F00E9443089FEF1F14C4 -:105300000CF491E0899F802D11248093B702EE2048 -:1053100059F00E9443089FEF1E140CF491E0899FFE -:10532000802D11248093B8023091B7023323B1F05D -:105330002091B802222391F045EB3403C0011124DF -:10534000992309F495C19093B70245EB240390018A -:105350001124332309F490C13093B802812F802B9C -:1053600009F448C08091B1029091B2020E9479067E -:105370009C019091AE02992309F472C32536310540 -:10538000C8F19F3F19F09F5F9093AE02112359F02F -:105390000E9421089FEF11160CF491E0899F802D47 -:1053A00011248093B902002359F00E9421089FEF35 -:1053B00010160CF491E0899F802D11248093BA027D -:1053C0003091B9023323B1F02091BA02222391F037 -:1053D00045EB3403C0011124992309F451C1909382 -:1053E000B90245EB240390011124332309F44CC185 -:1053F0003093BA028091B7029091B802892B9091B4 -:10540000B902892B9091BA02892B11F00E94810771 -:1054100086E0FE013196A5EBB2E001900D928A95EF -:10542000E1F70E94C00690919C02891731F00E941A -:10543000C00680939C020E94A1148091FF028430D8 -:1054400009F0C0CD83E08093E9008091E80082FFFD -:10545000B9CD8091E80090E085FF06C00E940B0561 -:10546000882309F415C191E08091E8008B7780933F -:10547000E800992309F4A6CDE981E150E33108F071 -:105480009BC1F0E0E359F14D0C94702D8091FF0227 -:10549000843009F441C080E00E94A1141092C5023A -:1054A0008091BB02811116C0F092BB0280918903EA -:1054B000982F9170909377028E7F80938903BFEF2E -:1054C000E0E7F2E0B150E040F040E1F700C000005A -:1054D0000E94B00F1092D00220E40FB6F894A89565 -:1054E000209260000FBE2093600083B7817F8460AC -:1054F00083BF83B7816083BF7894889583B78E7F9D -:1055000083BF0FB6F894A89580916000886180935E -:105510006000109260000FBE8091FE02882371F03F -:105520000E940F23E6EAF2E081919191892B09F024 -:1055300078C28EEA92E08E179F07B1F78091FF0242 -:10554000853009F4A3CF0E9447160E94C0060E942E -:10555000A1141092BB0280917702882359F08091A8 -:10556000890381608093890386950E947B140E9441 -:105570009A0F31CD8091C6028823C9F30E94B00FE3 -:10558000F6CF6F5FEE0CFF1C6C3009F048CD0F5F5B -:105590001F4F0430110509F033CD8FEF8EA38FA379 -:1055A00018A60E9488068160782F9AA789A74EA125 -:1055B0005FA168A58AA50E947F2258CD863059F444 -:1055C000F0E0EF53FD4FE4910E2F10E094E1E92E4F -:1055D00093E1F92E64CD893061F4E695F0E0E25470 -:1055E000FD4FE4910E2F10E085E6E82E82E1F82EC3 -:1055F00056CD8F3061F4E695F0E0E554FD4FE4912F -:105600000E2F10E0B0E1EB2EB2E1FB2E48CD85313C -:1056100059F4F0E0E854FD4FE4910E2F10E0ADE9AD -:10562000EA2EA1E1FA2E3BCD08E210E07DE0E72E64 -:1056300071E1F72E883109F432CD833249F4E6EB7B -:10564000F2E005911491FBEBEF2EF2E1FF2E27CD56 -:1056500004EF11E0E0EDEE2EE0E1FE2E843209F4DD -:105660001ECD00ED17E061EDE62E66E0F62E17CDBB -:1056700081E08093B70269CE81E08093B8026ECE5C -:1056800081E08093B902ADCE81E08093BA02B2CEC0 -:1056900000E210E0CE0101967C018091E80085FDDA -:1056A0000AC08091E8008B778093E8000E940B0588 -:1056B000882399F3D8CE8091F100D7018D937D0195 -:1056C0000150110951F7CFCE1A8289E08B833FC078 -:1056D0008A81823009F4BBC18330A9F0813009F09E -:1056E0006BC02FB7F8946091D1027091D202809173 -:1056F000D3029091D4022FBF0E94762D6B837C83BE -:105700008D839E8324C08091A6029091A702982742 -:10571000892798279C838B838091A8029091A90266 -:105720009827892798279E838D838091AA0290913C -:10573000AB0298278927982798878F838091AC029E -:105740009091AD029827892798279A878987809119 -:10575000FF02843009F036CC1091E9001F7090915F -:10576000EC00892F817090FD80E8182B82E08093F7 -:10577000E9008091E80080FF0DC050E040E060E269 -:1057800070E0CE0101960E943C058091E8008E7782 -:105790008093E8001F701093E90014CC8A81823056 -:1057A00059F46B817C818D819E810E94762D86E2E9 -:1057B00090E00E94CF2DCBCF8FEF8983C8CF4C8153 -:1057C0006B818A810E94D10E9827892798279E8312 -:1057D0008D83BDCFED80FE80FE24EF24FE248A81E0 -:1057E0000B81B8E10B9F80011124E0E68E9F000D34 -:1057F000111D11248C8190E0880F991F080F191F2B -:105800006F2DC80187960E94CF2D6E2DC8018896F6 -:10581000D0CF0E943B0E9BCF8A818138C1F060F4CB -:10582000803809F094CF20E04B8160918B03809108 -:105830008A030E944A138BCF823849F1833809F0DA -:1058400086CF20E040918C036C818B81F2CF8B81DD -:105850000E947B149B8180918903911111C08E7FDE -:10586000809389031092C502FFEF20E742E0F150D8 -:1058700020404040E1F700C000000E94B00F67CF19 -:1058800081608093890386950E947B1460CF8B8111 -:1058900080938D035CCF8A81813899F030F4803811 -:1058A00009F055CF80918C0311CF823891F0833865 -:1058B00009F04DCF80918A038B8380918B038C8379 -:1058C00046CF8091890380FF02C08695FFCE80E09D -:1058D000FDCE80918D03FACE6091890370918A0389 -:1058E00080918B0390918C030E94381330CF80E11C -:1058F0008A832DCF84E08A8389E1E8CE0A811B81E7 -:10590000102701271027CE0101966C01EC80DC01E5 -:10591000AE0DB11D7D01C80189519C4FEC14FD04F1 -:1059200009F415CF0931B4E01B0750F40E94BB2DD8 -:10593000F60184830F5F1F4FBFEFCB1ADB0AEBCF5B -:10594000D60114961C92F6CF0A811B8110270127DD -:105950001027FE0131966F01EC80E00EF12EF11C54 -:10596000C80189519C4FE016F10609F4F0CE0931C7 -:10597000F4E01F0728F4D60114966C910E94CF2DF5 -:10598000BFEFCB1ADB0A0F5F1F4FEACF0E942B0E2F -:10599000DECE8AE0ADCF0A811B81102701271027B8 -:1059A000FE0131966F01EC80CF018E0D911D7C01BF -:1059B000C8018796EC14FD0409F4C9CE003CA3E0AD -:1059C0001A0750F40E94BB2DF60184830F5F1F4F0E -:1059D000BFEFCB1ADB0AECCFD60114961C92F6CFA0 -:1059E0000A811B81102701271027FE0131966F01C4 -:1059F000EC80E00EF12EF11CC8018796E016F1064E -:105A000009F4A5CE003CF3E01F0728F4D601149654 -:105A10006C910E94CF2DBFEFCB1ADB0A0F5F1F4F97 -:105A2000EBCF09BD19BD09B400FEFDCF8091D800B0 -:105A30008F7D8093D8008091E00082608093E000A9 -:105A40008091E00081FDFCCF0E94471677CD86E271 -:105A500090E00E94BB2D1B821C821D828E8377CE1C -:105A60002D32314008F08FCCC5CC2D32314008F0BA -:105A70003ECC74CC87FB082E062687FD819567FDFA -:105A800061950E948C2D0EF4919507FC81950895E7 -:105A9000AA1BBB1B51E107C0AA1FBB1FA617B70754 -:105AA00010F0A61BB70B881F991F5A95A9F7809570 -:105AB0009095BC01CD01089597FB072E16F4009434 -:105AC00007D077FD09D00E94482D07FC05D03EF491 -:105AD000909581959F4F0895709561957F4F08959A -:105AE000EE0FFF1F0590F491E02D0994692796278A -:105AF000692778278727782708950E94382E33232F -:105B000012F48A1B9B0B0C94872D0E94382EB7FF32 -:105B10000895821B930B0895991B79E004C0991F87 -:105B2000961708F0961B881F7A95C9F780950895F7 -:105B3000FB01DC0102C005900D9241505040D8F7A6 -:105B40000895FC014150504030F001900616D1F705 -:105B50003197CF010895882799270895FB01DC012B -:105B600004C08D910190801921F441505040C8F734 -:105B7000881B990B0895F999FECF92BD81BDF89AC3 -:105B8000992780B50895A6E1B0E044E050E00C9478 -:105B9000F52DA8E1B0E042E050E00C94F52D262F61 -:105BA000F999FECF92BD81BDF89A019700B4021613 -:105BB00039F01FBA20BD0FB6F894FA9AF99A0FBEC1 -:105BC00008950396272F0E94D02D0E94CF2D252FB8 -:105BD0000E94D02D242F0C94D02D0196272F0E94A7 -:105BE000D02D0C94CF2DDC01CB01FC01F999FECF17 -:105BF00006C0F2BDE1BDF89A319600B40D92415055 -:105C00005040B8F708950E94382EA59F900DB49F7C -:105C1000900DA49F800D911D11240895B7FF0C9441 -:105C2000032E0E94032E821B930B0895A1E21A2ECD -:105C3000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F30 -:105C4000A217B307E407F50720F0A21BB30BE40B80 -:105C5000F50B661F771F881F991F1A9469F76095C7 -:105C60007095809590959B01AC01BD01CF01089581 -:105C7000A29FB001B39FC001A39F700D811D11248D -:105C8000911DB29F700D811D1124911D0895F894EE -:105C9000FFCF5E0F5E0F670F670F690F670F670F0C -:105CA000670F5E0F5E0F6E0F670F670F6E0F411766 -:105CB0006917BC176917BC179C17D417BC17D118E4 -:105CC000DE18421D421DB61DB61D141E2E1E791D66 -:105CD000791D391EC31ED41ED41E642B682BCE2BF7 -:105CE000DF2BEA2B092C0C2C4B2C6C2CDC2BDC2B0B -:105CF000772C7A2C7E2CA42CC62CC92CCB2CF02CE7 -:105D00007606910C700C6C0C680C01191A1B1C1D8A -:105D10001E1F202122010201002A002A2A0181825D -:105D200083E200E900EA00B500B600B700CD0083C9 -:105D300001CC008A01920194012102230224022550 -:105D400002260227022A02B300B4006F007000F09E -:105D5000F1F2F3F5F6F700010203040537363502D8 -:105D600000020102020B000B010B020B03050308EA -:105D700003000000010002090009010902090303F0 -:105D800003060300FF0100010000FFFF0000010007 -:105D900001FF000404040404040402026162646656 -:105DA00090929497066063656791939596070001BA -:105DB000020202020606060909090909090F0F0F66 -:105DC0000F0F0F151515181919191919191919196E -:105DD0001923244022B6B6019401DE00C808E10868 -:025DE0000109B7 +:101D7000C92F682F84E090E00E94D62D6C2F82E25C +:101D800090E0CF910C94D62D9091D60292FB222711 +:101D900020F9281751F080FB92F99093D602809198 +:101DA000D5029091D6020C94B70E08950F931F930D +:101DB000CF93DF93C42FD0E0CC0FDD1F28E1629FCB +:101DC000C00DD11D112430E6839FC00DD11D1124FB +:101DD000CE0187960E94C22D082F10E0102F0027F9 +:101DE000CE0188960E94C22D9801282BC901DF914F +:101DF000CF911F910F910895462F8A3038F4743097 +:101E000028F46C3018F4672F0C94D60E90E080E024 +:101E10000895BF92CF92DF92EF92FF920F931F939C +:101E2000CF93DF937C010091090310910A03809105 +:101E30005A0290915B02082B192BCFE0D0E0CC2402 +:101E4000C394D12CBC2EC6010C2E02C0880F991F42 +:101E50000A94E2F780239123892B71F4219790F75C +:101E6000B12C8B2DDF91CF911F910F91FF90EF90AF +:101E7000DF90CF90BF900895B7018C2F0E94FC0E89 +:101E80000E941909019751F3ECCFCF93DF93EC0136 +:101E90000E94090FBE010E94FC0EDF91CF910C94AD +:101EA0001909FC01808191810E94450F292F2F7013 +:101EB00092959F7092509E3078F4E92FF0E0E05BAD +:101EC000F14D0C94772D803F19F020F4883E20F4DA +:101ED00081E00895843FE1F380E00895883EC0F3F7 +:101EE000813FD1F7F5CF822F869586958695089507 +:101EF00083E290E00E94C22D813289F484E290E076 +:101F00000E94C22D813159F485E290E00E94C22DD9 +:101F100091E0853209F090E0892F8170089580E08A +:101F2000FCCFCF9384E090E00E94C22DC82F82E2C4 +:101F300090E00E94C22D982F8C2FCF910895609130 +:101F40008903669570E04BE050E08AE091E00E94E2 +:101F5000A82D892B19F481E08093C5020E94880680 +:101F60009093BF028093BE0208954F925F926F924A +:101F70007F928F929F92AF92BF92CF92DF92EF9219 +:101F8000FF920F931F93CF93DF93CDB7DEB7CE575A +:101F9000D1090FB6F894DEBF0FBECDBF5090190126 +:101FA0008091890380FF5DC08090BC029090BD024B +:101FB0008114910409F068C0EDECF3E09E012F5FFD +:101FC0003F4FBE0161587F4FC901A4914A2F50E095 +:101FD000DA01AA0FBB1FA40FB51FA55FBC4FCD90A0 +:101FE000DD90EC90D901CD92DD92ED929D0131967C +:101FF0006A177B0751F72091180143E0249F800D59 +:10200000911D11246E9A2EB12F7B3EB130645FB7C3 +:10201000F894BC01549E600D711D1124861797071A +:1020200009F08DC05FBF8FE594E00197F1F700C024 +:102030000000C258DF4F0FB6F894DEBF0FBECDBF11 +:10204000DF91CF911F910F91FF90EF90DF90CF9094 +:10205000BF90AF909F908F907F906F905F904F90C8 +:10206000089580911A0190911B0123E0829FF00155 +:102070001124E55FFC4F891708F096CF118210827A +:1020800012828F5F3396F7CF8091BB02811194CF7C +:10209000D12CC12C66246394712C53E0452E809181 +:1020A000C60293010C2C01C0220F0A94EAF7822386 +:1020B00009F43CC0F601EE0FFF1FE80DF91DE59095 +:1020C000F490E114F10409F477CF45E050E0B70152 +:1020D000CE0101960E949F2D09810F3F39F18A811F +:1020E000800F9927991F8B32910514F08AE290E0B6 +:1020F0005C01AA0CBB1C8A0D9B1DDC01A55FBC4FBB +:102100005D01049D80011124055F1C4F0A151B050C +:1021100020F0B5E0EB0EF11CD8CF98014D816C8119 +:102120008B810E94E8060D5F1F4FF0CFEFEFCE1AB4 +:10213000DE0AF8E0CF16D10409F0B1CF3DCFFC01A3 +:102140004191CF01E8E03EB9000000C047FF2EB941 +:10215000440F000000C000C000C02EB900C0EA95C6 +:1021600091F75CCFCF93DF9300D00F92CDB7DEB75E +:102170008091890380FF13C09E012F5F3F4F44E68B +:1021800066EE80E00E94E8068B8199812A81209387 +:10219000840390938303809385030E94B50F0F906F +:1021A0000F900F90DF91CF9108950F931F93CF93CE +:1021B000DF93EC0110E000E090911C0190171106F4 +:1021C00009F06CF40E94B50F8C8190E0019681704B +:1021D00099278C83DF91CF911F910F9108952091C2 +:1021E0001A01A801420F511D9A01220F331F240F1B +:1021F000351F255F3C4F4C8160918B0380918A0392 +:1022000096959017110651F04CF0442349F04091F7 +:102210008C030E94E8060F5F1F4FCECF4423B9F313 +:1022200040E0F7CF8F929F92AF92BF92CF92DF9212 +:10223000EF92FF920F931F93CF93DF93EC014C81AA +:10224000042F10E09801D8010E943F2E9B01AC01A1 +:102250000E940A2E4B015C01E0E2F0E0E01BF10B72 +:10226000A5E5B0E0AC019B010E940A2E6B017C0148 +:102270009F01DF010E94842D9B01AC010E94152E5D +:102280009B01AC01280D391D4A1D5B1DC701B6011C +:102290000E941D2EF22E822F90E039E23F1560F150 +:1022A00043E0249F9001112435952795122F109516 +:1022B00000E085E5E82EEF1880911C01081758F121 +:1022C0000E94B50F9C8181E0992319F0903219F496 +:1022D0008FEF8093170180911701890F8C83DF9115 +:1022E000CF911F910F91FF90EF90DF90CF90BF9013 +:1022F000AF909F908F90089525E530E0B901681B5D +:10230000790B9B01220F331F260F371F37FFCCCFCE +:102310002F5F3F4FC9CF8E2D01FD8F2D20911A01C8 +:10232000622F600F7727771F9B01220F331F260F25 +:10233000371F255F3C4F412F60918B030E94E806B9 +:102340000F5FBACF0F931F93CF93DF9380911A0142 +:1023500090911B0123E0829FF0011124E55FFC4F67 +:10236000891740F1C0E0D3E060911C01C61740F12D +:102370000E94B50F209115018091C802820F8093B1 +:10238000C80290911601920F90931601191654F4F9 +:10239000082E000C990B40911C014150550B8417DD +:1023A00095071CF0219520931501DF91CF911F9186 +:1023B0000F9108951182108212828F5F3396D0CFD1 +:1023C0000C2F10E070E0C8010E94632D20911A01CB +:1023D000820F482F50E02091C802022E000C330BD0 +:1023E00002171307BCF020911601022E000C330BCC +:1023F000201731077CF08D9F90011124255F3C4F01 +:1024000040918C0360918B0380918A030E94E806BF +:10241000CF5FAACFFA01EE0FFF1FE40FF51FE55FB4 +:10242000FC4F118210821282F3CF1F93CF93DF9360 +:10243000FC018281DFEF80FFD1E0C0E01AE29091E1 +:102440001C01C91788F00E94B50F8091C702D130D6 +:10245000C9F5811102C080911C0181508093C7028F +:10246000DF91CF911F910895E0911A014C2F50E018 +:102470009A012E0F311DF901EE0FFF1FE20FF31F1E +:10248000E55FFC4F1182108212828091C7028B326D +:10249000ACF0612F0E94412D892F082E000C990B62 +:1024A0004817590749F49F0140918C0360918B03B1 +:1024B00080918A030E94E806CF5FC1CF87FFEDCFEE +:1024C000890FEBCF90E0019660911C0170E00E94B3 +:1024D000632DC4CFEF92FF921F93CF93DF93EC0154 +:1024E00010E0EE24EA94F12C60911C01161770F0B4 +:1024F0000E94B50F9A818C8190FF27C08F5F8C83DB +:10250000DF91CF911F91FF90EF90089520911A01D4 +:10251000422F410F5527551FCA019A01220F331F21 +:10252000280F391F255F3C4F70E0C7010E94632DC3 +:10253000962F8C8140918C0360918B03199F800DA5 +:1025400011240E94E8061F5FCFCF8150D8CF909111 +:10255000890390FF14C090911A0120911B0133E070 +:10256000939FF0011124E55FFC4F921710F00C943B +:10257000B50F8183608342839F5F3396F6CF0895C2 +:102580000F931F93CF93DF9300D00F92CDB7DEB799 +:102590008C018091C90281110AC09E012F5F3F4FBB +:1025A00044EB6FEF0E94E8068A818093C902F8012C +:1025B0006481613069F08091C90240E0662361F076 +:1025C00040E0623011F44091C90280E060E004C054 +:1025D0006091C90240E080E00E94A712F801848166 +:1025E00090E0019663E070E00E94632D84830F9079 +:1025F0000F900F90DF91CF911F910F910895CF937E +:10260000DF9300D00F92CDB7DEB79091890390FF92 +:102610000AC09E012F5F3F4F0E94E8064B816981EF +:102620008A810E94A7120F900F900F90DF91CF9197 +:102630000895CF93DF93EC01E9E8F3E043816281F1 +:102640008C810E94FF128C818F5F8C83DF91CF91F0 +:102650000895CF93DF93EC01EC81F0E0EA50FC4F5A +:102660004491E9E8F3E0628181810E94FF128C814C +:102670008F5F8C83DF91CF910895CF92DF92EF929D +:10268000FF926B017C010E94D206B701A60188E08F +:1026900090E0FF90EF90DF90CF900C94E82DAF92F8 +:1026A000BF92CF92DF92EF92FF920F931F93CF933F +:1026B000DF9300D00F92CDB7DEB7182FF62E042F80 +:1026C000E22E9091890390FF29C0E92FE695AE2F65 +:1026D000B0E0A255BE4F8C918093C4029E7F923091 +:1026E00059F59E012F5F3F4F812F0E94E8064B81D5 +:1026F00069818A810E94A71210938A03F0928B034A +:1027000000938C03EE2051F06091890370918A034D +:1027100080918B0390918C030E943D130F900F903A +:102720000F90DF91CF911F910F91FF90EF90DF906D +:10273000CF90BF90AF900895823019F400918C0330 +:10274000DBCF863019F410918A03D6CF8930D9F3C4 +:10275000893191F6E9518E2F8170D82EE695F0E0FF +:10276000E853FC4FA590B490C12CBB2460911C0190 +:10277000C61618F00E94B50FBFCF2C2D30E0A29ED8 +:10278000C001A39E900DB29E900D112470E00E9496 +:102790004F2D812FD11013C0860F40911A01420F87 +:1027A000532F511D9A01220F331F240F351F255F10 +:1027B0003C4F402F6F2D0E94E806C394D7CF861B55 +:1027C000ECCFE9E8F3E0438128E0421B08F440E065 +:1027D00021E0628181810C944F13E9E8F3E04381A9 +:1027E00028E0420F08F44FEF21E0628181810C94D0 +:1027F0004F13E9E8F3E0628128E0621B08F460E02F +:1028000021E0438181810C944F13E9E8F3E0628178 +:1028100028E0620F08F46FEF21E0438181810C947E +:102820004F13E9E8F3E0818121E043816281885020 +:102830000C944F13E9E8F3E0818121E04381628148 +:10284000885F0C944F1380918D03882319F0815079 +:1028500080938D036091890370918A0380918B032B +:1028600090918C030C943D1380918D03833018F468 +:102870008F5F80938D036091890370918A038091AB +:102880008B0390918C030C943D139091890390FFDE +:1028900036C09170811129C092609093890366239C +:1028A00051F06091890370918A0380918B0390911C +:1028B0008C030E943D1360918903669570E04BE0A4 +:1028C00050E08AE091E00E94A82D892BA9F0109297 +:1028D000C50281E08093C10220E040918C036091A9 +:1028E0008B0380918A030C944F13853210F0986407 +:1028F000D4CF880F982BD1CF0E949F0FEACF089595 +:1029000060E00C94451421E030E0A90102C0440FBE +:10291000551F8A95E2F7CA012091C602662391F0FD +:10292000822B8093C6028091C502811105C08091DF +:10293000890386950E9480148091890380FD05C0DB +:102940000C94B50F80958223ECCF0895CF93DF933D +:10295000C82FC17082FBDD27D0F981FB662760F9A3 +:1029600084E00E94831461E06C2785E00E94831458 +:102970006D2F86E0DF91CF910C9483140F931F93FA +:10298000CF93DF93EC0161E0009709F0682F61704D +:1029900080E00E94831460E0209721F0BE017695CC +:1029A0006795617081E00E94831460E0209731F0A8 +:1029B000BE017695679576956795617082E00E9475 +:1029C000831460E0209739F0BE01B3E076956795F7 +:1029D000BA95E1F7617083E00E948314AE0170E064 +:1029E00060E0BB27A72F962F852F0097A105B10583 +:1029F000D9F1AC01BD0188E08A019B01F4E0369574 +:102A0000279517950795FA95D1F701151105210519 +:102A1000310519F08C5FB901A8018A019B01E2E040 +:102A20003695279517950795EA95D1F70115110564 +:102A30002105310519F08E5FB901A80176956795DA +:102A400057954795452B462B472B09F08F5F8130D3 +:102A5000C9F0882359F08230D1F08330E9F020E0CA +:102A60004EE16FEF80E406C080E0C6CF20E04EE18B +:102A70006FEF82E30E944F13CE01DF91CF911F9140 +:102A80000F91089520E04EE16FEF8EE1F3CF20E04B +:102A90004EE16FEF8AE6EECF20E04EE16FEF87ED7B +:102AA000E9CF0E94BE1490930A03809309030C940B +:102AB000A90B8091090390910A039C01267033278A +:102AC0002630310519F488600C945115877FFCCFAE +:102AD00021E030E002C0220F331F8A95E2F72095F3 +:102AE00030958091090390910A03822393230C94DB +:102AF0005115909155028095892380935502282F76 +:102B0000277039F4282F082E000C330B9217130668 +:102B100021F49091D60292FF07C085958595859501 +:102B20000E94681510925502089521E030E002C01D +:102B3000220F331F8A95E2F78091090390910A03CF +:102B4000822B932B0C94511580918903869581508B +:102B500009F484E261E00C94451480918903869520 +:102B60008F5F853208F081E061E00C94451490910C +:102B7000890390FF07C09695981720F0961710F4D8 +:102B80000C94AD1561E00C944514E9E8F3E083E0A2 +:102B9000808311828FEF828384EB83831482608130 +:102BA0007181828193810C943D1369EE7EEF90E0F8 +:102BB00080E00E94F42D60E082E090E00E94D62D3B +:102BC00060E083E090E00E94D62D10925B021092AC +:102BD0005A0260E084E090E00E94D62D60E082E23C +:102BE00090E00E94D62D60E085E090E00E94D62D16 +:102BF00060E086E090E00E94D62D6FEF87E090E0E5 +:102C00000E94D62D40E050E0BA0188E090E00E949A +:102C1000E82D60E08DE090E00E94D62D40E050E08D +:102C2000BA0188E190E00E94E82D60E087E190E041 +:102C30000E94D62D40E050E0BA018CE190E00E9465 +:102C4000E82D70E060E080E290E00E94F42D40E02A +:102C500050E0BA0188E190E00E94E82D80E00E94F7 +:102C6000900E0E94A80E40E050E0BA018FE090E084 +:102C70000E94E82D40E050E0BA0183E190E00C941E +:102C8000E82D90E080E00E94D02D893E9E4F11F407 +:102C90000C94780F80E008951092580280911D01E5 +:102CA000E6EEF1E0882359F08091D50287FF07C056 +:102CB0008EE1DF011D928A95E9F70C94A90B86E05D +:102CC000F8CF1F93CF93DF93CDB7DEB7AA970FB698 +:102CD000F894DEBF0FBECDBF81E093E02091F100FC +:102CE000DC012D93CD01B3E089309B07B9F78091CA +:102CF0000203833009F471C0B8F4813009F448C08C +:102D0000823009F4B2C08091E80083FF3AC180911B +:102D10000103909102039A3008F033C1E92FF0E0EB +:102D2000E25AF14D0C94772D8A3009F48DC08B3026 +:102D300009F470C0893039F780910103813219F7A5 +:102D40008091050390910603009711F00297D9F640 +:102D50008091E800877F8093E8008091E80082FFFF +:102D600037C08091F2009091F300029729F480918E +:102D7000F1008B7F813021F48091F1008093DC029F +:102D80008091E8008B778093E8000E946605BBCFB6 +:102D900080910103813A09F0B6CF8091E800877FE6 +:102DA0008093E8008091050390910603892B61F4DC +:102DB00060E28DED92E070E00E9419068091E800DB +:102DC0008B778093E8009FCF60E090E080E0F3CFC6 +:102DD0008091FF028111C1CF96CF80910103813A8A +:102DE00009F091CF8091050390910603892B09F09A +:102DF0008ACF8091E800877F8093E8008091E80087 +:102E000080FFFCCF80911D018093F1008091E8004C +:102E10008E77B9CF80910103813209F074CF809110 +:102E2000050390910603892B09F06DCF8091E8008E +:102E3000877F8093E8000E9466058091030380935A +:102E40001D010E944C165FCF80910103813209F071 +:102E50005ACF8091E800877F8093E8000E94660542 +:102E6000809104038093DB024ECF80910103813A6D +:102E700009F049CF8091E800877F8093E800809136 +:102E8000E80080FFFCCF8091DB02BECF803899F054 +:102E9000823809F076C0809105038F70873008F082 +:102EA00070C08093E9008091EB0085FB882780F952 +:102EB0001092E90006C08091FD029091FE029111EE +:102EC00082609091E800977F9093E8008093F100F2 +:102ED0001092F1008091E8008E77B5C1882309F443 +:102EE000A2C1823009F04DC0809103038111A6C1B7 +:102EF000809105038F702FEF280F263008F041C016 +:102F00008093E9002091EB0020FF98C1933031F4C9 +:102F10008091EB0080628093EB0090C19091EB0078 +:102F200090619093EB0021E030E001C0220F8A9580 +:102F3000EAF72093EA001092EA008091EB008860A3 +:102F4000EACF81111EC0109103031F778091E30027 +:102F50008078812B8093E3008091E800877F8093C5 +:102F6000E8000E9466058091E80080FFFCCF809118 +:102F7000E30080688093E30082E0111183E0809396 +:102F8000FF028091E80083FF0AC08091E800877FFC +:102F90008093E8008091EB0080628093EB00AA961A +:102FA0000FB6F894DEBF0FBECDBFDF91CF911F915A +:102FB00008958058823028F720910303309104034C +:102FC0002C3DE3E03E07A1F583E08A838AE2898312 +:102FD0004FB7F894DE01139620E03EE051E2E32F74 +:102FE000F0E050935700E49120FF03C0E295EF70AA +:102FF0003F5FEF708E2F90E0EA30C0F0C7968D9360 +:103000009D932F5F243159F74FBF8091E800877F50 +:103010008093E8006AE270E0CE0101960E941906F2 +:103020008091E8008B778093E800ABCFC096E7CF24 +:103030008091050390910603432F55274330510596 +:1030400009F44AC078F54130510509F47AC08BE59E +:1030500090E0E6EBF8E04230510509F092CF209184 +:10306000E800277F2093E8002091070330910803B0 +:103070008217930708F49C0140E02115310509F0FF +:1030800065C0411163C08091E80082FDC9CF809185 +:10309000FF02882329F2853019F28091E80083FF2E +:1030A000F2CFBECF4132510509F43CC04232510546 +:1030B00009F067CF8330910508F063CFFC01EE0F74 +:1030C000FF1FEA52FE4F0190F081E02D8D529E4F7E +:1030D000DC018C9190E01AC0332721303105D1F00A +:1030E0002115310561F02230310509F04ACFE3E2C4 +:1030F000F9E0E4918E2F90E0E3E2F9E007C0E1E42B +:10310000F9E0E4918E2F90E0E1E4F9E0009709F412 +:1031100038CFA5CFEDE2F9E0E4918E2F90E0EDE21B +:10312000F9E0F4CF8330910508F02BCF880F991F79 +:10313000FC01E452FE4F0190F081E02D89E090E027 +:103140008ECF82E190E0E1E1F9E089CF8091FF024A +:10315000882309F465CF853009F462CF8091E800B7 +:1031600083FD5ECF8091E80082FD8DCF8091E800E5 +:1031700080FF83CF8091F2009091F30021153105FB +:1031800019F08830910550F041E0089709F040E0CF +:103190008091E8008E778093E8006FCF4491409350 +:1031A000F1003196215031090196E8CF803809F0BD +:1031B000E8CE8091E800877F8093E800809100034B +:1031C0008093F10087CE8111DCCE10910303123081 +:1031D00008F0D7CE8091E800877F8093E8001093B5 +:1031E00000030E946605112311F084E005C0809160 +:1031F000E30087FDFACF81E08093FF0242E061ECBB +:1032000081E00E94850542E261EC84E00E94850530 +:1032100042E261EC82E00E94850542E260EC83E0DC +:103220000E948505AECE80910303813009F0A9CEBE +:1032300081E0933009F080E08093FE021092E90073 +:103240008091E800877F8093E8000E94660599CE10 +:103250003F924F925F926F927F928F929F92AF9226 +:10326000BF92CF92DF92EF92FF920F931F93CF9373 +:10327000DF9300D000D00F92CDB7DEB78C01FC01F8 +:1032800083819481892B31F08081918189238F3FC3 +:1032900009F056C60F900F900F900F900F90DF918E +:1032A000CF911F910F91FF90EF90DF90CF90BF9043 +:1032B000AF909F908F907F906F905F904F903F90D6 +:1032C00008950E94090FF82E682F89819A810E9423 +:1032D0007D0B69817A818F2D0E94FC0E7C01F801A3 +:1032E0008281882309F41EC6970122513F4520316F +:1032F000310508F0D6C58FEF97E00E94C22DFEEE93 +:10330000EF0E57EE852E53E0952E882381F18091A4 +:103310005502877009F4BECFF8018281882309F431 +:10332000B9CF82E00F900F900F900F900F90DF9128 +:10333000CF911F910F91FF90EF90DF90CF90BF90B2 +:10334000AF909F908F907F906F905F904F903F9045 +:103350000C947915811428E09206C9F2C4010E94E8 +:10336000C22D811101C0EA943FEF831A930AE11044 +:10337000F1CF1C821B82442443944AE0342E740112 +:103380004FEFE41AF40AC4010E94C22D89831A8205 +:10339000882309F4BCCF9FEF980F933000F58A8300 +:1033A000498252E0850E911CC7010E94C22D8B8379 +:1033B000882309F4ACCFCE0101967C01F70120816E +:1033C0002223E9F2213009F049C0918182819130B4 +:1033D00041F4F2E0EF0EF11C0E94AA0D09C0470172 +:1033E000EACF923049F422E0E20EF11C0E94F50C83 +:1033F0003FEFE31AF30AE2CF933031F432E0E30E09 +:10340000F11C0E94E10BF4CF943021F04FEFE41A4D +:10341000F40AEECF52E0E50EF11C30E020E0B701F7 +:103420006F5F7F4FF70141818053990B8A3091057F +:1034300050F021503109E0F28FE99FE00197F1F758 +:1034400000C00000F6CF329EF001339EF00D112433 +:103450009C012E0F3F1F842F7B01E1CFE22FF0E074 +:10346000EA5DFD4F5490822F86958695869590E073 +:10347000FC01EA5EFD4F64902770712C022E02C0A1 +:10348000759467940A94E2F7E1E06E227724FC01D8 +:10349000EA5FFD4FA490B12C022E02C0B594A79410 +:1034A0000A94E2F7F1E0AF22BB24FC01EA50FE4FA0 +:1034B000C490D12C02C0D594C7942A95E2F721E09C +:1034C000C222DD246114710419F081EE0E94F50C12 +:1034D000A114B10419F086EE0E94F50C852D0E940E +:1034E000AA0DAB2819F086EE0E94E10B672819F0AF +:1034F00081EE0E94E10BCD2809F47ACF8CE26CCFEB +:1035000081E00E9495150E94591501CF81E00E942B +:103510006815F9CF82E0F5CFF3E8EF16FFE5FF0677 +:1035200009F4C5C024E8E2162FE5F20609F0D9C473 +:10353000882309F4ECCEF0906A02EE24E394FE2492 +:10354000F0926A020E948806909368028093670254 +:103550008091690210921A01882309F4B6C08AE2A8 +:1035600080931B0180931C0181E20E9480140E94C1 +:10357000B210E0926A0210926902109266021092F2 +:103580006502C5CE882309F47AC080916D0281114D +:1035900006C081E080936D0282EE0E94F50C0E94CD +:1035A000880690936C0280936B028BE20E94F50C6C +:1035B000F8018281882309F4D4C410929003F3E0C7 +:1035C000EF16FDE5FF0608F0B3C02AEFE2162CE582 +:1035D000F20630F4C70182509C45449708F0AEC013 +:1035E0000E94910F9093D6028093D50240E1E41699 +:1035F0004CE5F40609F48AC108F0F8C088E0E81642 +:103600008CE5F80609F470C108F0C4C0E4E0EE16D9 +:10361000ECE5FE0609F45AC108F0A6C022E0E21665 +:103620002CE5F20609F44CC18091D502826033E0AA +:10363000E3163CE5F30609F446C18091D50290916A +:10364000D6020E94B70E0E944C1661CE8823A1F0CC +:1036500080916D02811106C081E080936D0282EE3F +:103660000E94F50C0E94880690936C0280936B0276 +:1036700081EE0E94F50C99CF81EE0E94E10B8BE266 +:103680000E94E10B95CF882309F492CF81EE0E942E +:10369000F50C83EE0E94F50C8FE40E94F50C8FE48C +:1036A0000E94E10B83EE0E94E10B81EEE9CF8823BB +:1036B00009F47ECF81EE0E94F50C83EE0E94F50C9A +:1036C00080E50E94F50C80E5EBCF8AE280931B0138 +:1036D00080931C0181E2FF2029F00E9480140E9447 +:1036E000B21049CF0E94801446CFE5EFEE16ECE50C +:1036F000FE06B9F090F026EFE2162CE5F20609F08E +:1037000057CF27E245EE66EE09C427E245EE65EEA7 +:1037100005C426E241EE60EE01C427E245EE64EE08 +:10372000FDC326E241EE62EEF9C328E241E0EFCFAD +:1037300031E6E3163DE5F30609F452CF80915802D5 +:1037400046E1E4164CE5F40609F018C48A7A91E0E3 +:1037500009F490E0909304028111FDC089E20E9477 +:10376000170B0E94A70AD3CD8091D502806146E055 +:10377000E4164CE5F40609F4A6C08091D5028860F1 +:1037800057E0E5165CE5F50608F49DC08091D5028A +:10379000806299C08CE0E8168CE5F80609F4AEC0AA +:1037A00078F48091D5028C60EAE0EE16ECE5FE0636 +:1037B00009F489C008F49CC08091D5028E7F83C033 +:1037C0008091D502877F2EE0E2162CE5F20609F4FF +:1037D0007AC08091D5028B7F3FE0E3163CE5F3068B +:1037E00008F471C08091D5028F7E6DC04CEFE41655 +:1037F0004CE5F40609F486C0A0F584E1E8168CE5F2 +:10380000F80609F497C098F4E2E1EE16ECE5FE063E +:1038100009F480C08091D5028F7BF3E1EF16FCE5BF +:10382000FF0608F450C08091D502837F4CC02AEF78 +:10383000E2162CE5F20609F44DC008F051C045E14E +:10384000E4164CE5F40609F0F8CE8091D50282FB2F +:10385000992790F921E0922790FB82F990FB83F958 +:1038600032C0E1145DE5F50609F45AC0A0F4809178 +:10387000D60283609EEFE9169CE5F90671F180910E +:10388000D6028D7FEFEFEE16ECE5FE0630F180916B +:10389000D6028C7F22C0F2E0EF16FDE5FF0609F4A8 +:1038A00058C008F450C031E6E3163DE5F30609F0D0 +:1038B000C4CE9091D502892F8F7E94FF806103C082 +:1038C0008091D50281608093D502B7CE8091D502D8 +:1038D0008460F9CF8091D60281608093D602ADCE0C +:1038E0008091D6028260F9CF8091D5028064EBCFBF +:1038F0000E944C168091D5028068E5CF8091D50258 +:103900008D7FE1CF8091D6028E7FE7CF8091D50267 +:103910008F7DD9CF0E944C168091D5028F77D3CF5F +:103920008091D602982F909591708E7F892B90FB75 +:1039300081F9D3CF0E944C169091D502892F97FB25 +:1039400087F98058C0CF61E08EE090E00E94D62DCC +:1039500074CE60E0F9CF85E302CF85E30CC380919C +:10396000890380FF1BC08E7F809389036091890348 +:1039700070918A0380918B0390918C030E943D1378 +:103980001092C5025FEF80E792E051508040904076 +:10399000E1F700C000000E94B50FB9CC81608093B0 +:1039A000890361E086950E944514B1CC44EA55E153 +:1039B0006DEA75E10E94CC06AACC4DEA55E164EAB5 +:1039C00075E1F8CF4AE154E161E174E1F3CF49EFE9 +:1039D00053E165E074E1EECF41EE53E16DEE73E14A +:1039E000E9CF4DEE53E161EE73E1E4CF44E354E1FE +:1039F00063E274E1DFCF61E081E0D5CF65E082E092 +:103A00000E94B71584CC68E086E0FACF64E18FE0CD +:103A1000F7CF67E185E1F4CF62E289E1F1CF61E0C0 +:103A200083E2C1CF4BE5E4164DE5F40611F15CE508 +:103A3000E5165DE5F50609F0D3C28091D60282FB5A +:103A4000882780F991E089270E94C40EC9C20E948C +:103A50004C168FEF94E3ECE081509040E040E1F7AA +:103A600000C000000E94D10C0E94D51550CC81E00E +:103A7000EBCF80E0E9CFC7010E94550BD82EBFC223 +:103A80002F2D2F70C22E8F2D807F19F0C29490EFB2 +:103A9000C922DD20C9F0CC2069F080E28E0D88308B +:103AA00010F081100BC080915802C82AC0925802B1 +:103AB0000E94A70A8E2D0E94F50C19C08091570212 +:103AC000C82AC0925702F4CF8E2D0E94E10BCC2061 +:103AD00071F0C09480E28E0D883010F081103EC0ED +:103AE00080915802C822C09258020E94A70AE92D6C +:103AF000E850FF0B349720F40E94C0060E94A614E1 +:103B0000AA2009F4C7CB8091550280FDC3CBF801F0 +:103B100012828595859585950E949515C8010E940C +:103B20002819809155028595859585950F900F9060 +:103B30000F900F900F90DF91CF911F910F91FF90F9 +:103B4000EF90DF90CF90BF90AF909F908F907F903D +:103B50006F905F904F903F900C9468158091570242 +:103B6000C822C0925702C1CF3F2D3F70B32E8F2D78 +:103B7000807F803219F0B29480EFB822882071F0F3 +:103B800041E0841681F1DD20D9F1CC2091F1F801DA +:103B9000858180FF8FCF8F7085832BC0DD20B1F0B2 +:103BA000909159028B2D892BC11003C00E94D70B15 +:103BB0009ECF51E0C512FACF2091D60222FD97CFB9 +:103BC000981709F494CF8093590291CFC11006C081 +:103BD0000E94A10A8B2D0E94CC0B89CF81E0C816D0 +:103BE00009F485CFF5CFDD2031F095E09C1508F480 +:103BF0007ECF8B2DDBCFE4E0EC1508F478CFEACF55 +:103C0000CC2041F3F9E38F1209C02FEF37EE43E0E8 +:103C1000215030404040E1F700C000008E2D0E944E +:103C2000E10B65CF8F2D86958695837061F081308D +:103C300009F05DCFC7019370D11002C090E080E021 +:103C40000E94940654CFC7019370D11002C090E037 +:103C500080E00E94AA064BCF8E2DDD2029F00E9425 +:103C600063080E94810743CF0E94A807FACF8F2DD7 +:103C7000837009F040C0D1103ACF4E2D4295469541 +:103C80004770440F440F8E2D8F7090E0042E02C0B9 +:103C9000880F991F0A94E2F730E020E0E4FE09C0A3 +:103CA0002FE030E002C0220F331F4A95E2F7209543 +:103CB00030954F2D469546954370423099F078F4F3 +:103CC00060915A0270915B02413039F0822B932B44 +:103CD000862397230E94C60B0ACF862B972B822B15 +:103CE000932BF8CF822B932B20915A0230915B02B9 +:103CF00082279327EFCF8695DD2011F08F2D8170DD +:103D0000882309F4F4CE4E2D429546954770440F12 +:103D1000440F8E2D8F7090E0042E02C0880F991FE3 +:103D20000A94E2F730E020E0E4FE09C02FE030E042 +:103D300002C0220F331F4A95E2F7209530954F2D90 +:103D4000469546954370423099F078F460910903A6 +:103D500070910A03413039F0822B932B86239723ED +:103D60000E945115C4CE862B972B822B932BF8CF14 +:103D7000822B932B2091090330910A0382279327EA +:103D8000EFCF5F2D5F70F52EDD2029F0852F0E948B +:103D900095158E2D0BCF8E2D0E94CC0B8F2D0E9452 +:103DA0006815A5CE8E2D92EF891609F449C0981595 +:103DB00070F0E0EF8E1639F1F1EF8F16C9F1DD20CA +:103DC00009F45FC0C11076CE8F2D8F7136C023EFFE +:103DD0008216D9F134EF8312F2CFDD2009F446C008 +:103DE000FF2DFF71FF2E8F2F0E9495158091D60217 +:103DF00082FD07C028E0F29EC001112483608093F9 +:103E000055028F2D1AC0DD2071F044E04C1508F4E6 +:103E10006ECE2F2D2F7181E090E002C0880F991F88 +:103E20002A95E2F7A7CF55E05C1508F460CEF1CFF4 +:103E30008F2D8F71DD2009F4B2CF0E94951557CEDA +:103E40008F2D8F71DD20C9F3AACF90E080E0DD20B7 +:103E500009F486CF9F2D9F7121E030E0F90102C067 +:103E6000EE0FFF1F9A95E2F7CF017ACF81E00E9413 +:103E7000791531E03C1508F03ACE82E00E947915C0 +:103E800036CECC2059F0893309F0C8CE4FEF57EE2B +:103E900083E0415050408040E1F7BECE8F2D8F71BE +:103EA0007ECFF0E1EF16FFE5FF0609F429CB21E113 +:103EB000E2162FE5F20609F42DCB42E8E4164FE5B1 +:103EC000F40609F4E0CB08F027CB90E8E9169FE56B +:103ED000F90609F457CBE1E8EE16EFE5FE0609F422 +:103EE000B5CB33EFE3163CE5F30609F412CC08F04A +:103EF000FCCB58EDE5165CE5F50609F406CC89ED3A +:103F0000E8168CE5F80609F410CC97EDE9169CE567 +:103F1000F90609F04DCB26E241EE61EEC8010E94A0 +:103F2000C70DF5C930E1E3163FE5F30609F4EECA23 +:103F300041E1E4164FE5F40609F0BFCF82E0E7CA9D +:103F400085E0DE01119601900D928A95E1F7F80166 +:103F5000228189819A812111B4C90E94550BF82EC2 +:103F6000B8C9F6E1EF16FCE5FF06D1F58091040231 +:103F70008111F3CC89E20E94EC0AF3CB82722CEC23 +:103F8000E2162CE5F20609F431CD08F0A7C046ECA4 +:103F9000E4164CE5F40609F415CD08F076C093EC70 +:103FA000E9169CE5F90609F401CD08F05DC0F2ECD4 +:103FB000EF16FCE5FF0609F4D2CCEAE5EE16EDE5D6 +:103FC000FE0609F454CD08F02DCDE1142CE5F206DF +:103FD00009F43DCD3EEDE3163CE5F30609F444CD8E +:103FE000F8018281E080F180882309F444CDC70183 +:103FF0000E94090FD82E682FC7010E947D0BB701C0 +:104000008D2D0E94FC0E0E9419097C01882EF8015A +:10401000D280C580C2943FE0C32280915502877050 +:10402000A1F0AD2CDD2091F08F2D807F803421F028 +:1040300080E28E0D883048F082E00E9479158091F0 +:1040400055028770AA24A3948111A12C9F2C9294CD +:104050002FE09222FBE0F91508F449CDE92DF0E0BC +:10406000E859F14D0C94772D24ECE2162CE5F2067C +:1040700009F4A3CC41E154E16AE174E135ECE316C3 +:104080003CE5F30609F496CC98CF49ECE4164CE5F0 +:10409000F40609F4A1CC88F497ECE9169CE5F9063E +:1040A00009F495CC45E054E169EF73E1E8ECEE16D4 +:1040B000ECE5FE0609F47ECC80CFFAECEF16FCE5C9 +:1040C000FF0609F48ECC43E254E164E374E12BEC87 +:1040D000E2162CE5F20609F46DCC6FCF31EDE31654 +:1040E0003CE5F30609F492CCB8F45EECE5165CE529 +:1040F000F50609F483CC08F47ECC9FECE9169CE528 +:10410000F90609F480CC6EE089E0E0EDEE16ECE50E +:10411000FE0609F475CC51CFF4EDEF16FCE5FF0671 +:1041200009F47ACC78F432EDE3163CE5F30609F4B1 +:1041300070CC61E088E143EDE4164CE5F40609F447 +:1041400032CC3BCF55EDE5165CE5F50609F467CCBE +:104150008DE5E816F80609F4DAC82FCF1F93CF9340 +:10416000DF9380912202807FA9F480911F0288232F +:1041700089F080915402D091230260911D027091C8 +:104180001E02A0912002B0912102C62FC72316E083 +:10419000D81304C0DF91CF911F91089590E010973C +:1041A00011F0CF3F19F401968770F2CF189F90015C +:1041B000199F300D1124F901EC5DFD4F418147132A +:1041C000F2CF40814613EFCF42814111ECCF4381C2 +:1041D00054814A1B5B0B483C510528F78091220211 +:1041E0008F70806180932202F901E75DFD4F80812D +:1041F0008F70806180838DE192E00E942819DF91A9 +:10420000CF911F910C944B0BAF92BF92CF92DF9244 +:10421000EF92FF920F931F93CF93DF93CDB7DEB74B +:1042200061970FB6F894DEBF0FBECDBF8C0185E05D +:10423000F801DE011D9601900D928A95E1F7F801D3 +:10424000E2808DE1A82E82E0B82E6091200270916C +:1042500021026115710509F432C190911D0240914E +:104260001E02892F84238F3F09F429C120813181C7 +:10427000C380D480F0901F02F601E61BF70BFF20ED +:1042800009F4E8C080912202582F507FE83CF105E4 +:1042900008F0ABC0511177C0FE2C431321C092131C +:1042A0001FC0E1101DC08F70806180932202C50184 +:1042B0000E94281980912202F80185838F2D619632 +:1042C0000FB6F894DEBF0FBECDBFDF91CF911F9127 +:1042D0000F91FF90EF90DF90CF90BF90AF90089537 +:1042E000CD2829F0822F83238F3F09F003C180E07E +:1042F000F82FF170DF2E80FF3CC080915402409176 +:10430000230256E0841315C02D873E878D859E8538 +:104310000E94450F292F22952F702230F0F0243073 +:1043200018F59F70F1F0F8019581907FD1F4D12CB0 +:104330001EC090E0589FF001599FF00D1124EC5DD4 +:10434000FD4F6181361306C06081261303C0628170 +:10435000E6120FC001968770D5CF9F7011F08823A9 +:1043600031F3805E883018F3C8010E942819FD2CB3 +:10437000A5CFEE2009F4A2CF809122028160809324 +:104380002202F12C9BCF431306C0921304C0F80104 +:10439000EE2009F479C0C8010E94510F882309F169 +:1043A000EE20F9F080912202803270F020911D02FF +:1043B00030911E0238872F831986DB86CA868C8748 +:1043C000CE0107960E94281986E0F801ADE1B2E01F +:1043D00001900D928A95E1F70E94AE20FF24F3949C +:1043E0006DCFC8010E942819F9CF51110AC08DE183 +:1043F00092E00E94281986E0F50111928A95E9F76A +:10440000C0CF43130FC092130DC0E1100BC0F801D1 +:104410008583C8010E94281986E0F50111928A95CA +:10442000E9F74CCFC8010E94510F8823D1F2EE204A +:10443000C1F280912202803238F220911D02309127 +:104440001E023A8329831B82DD82CC828E83CE01B9 +:104450000196B8CFE83CF105F8F6FE2CEE2009F203 +:1044600043131FC092131DC08091220280FD10C013 +:10447000982F907F69F0F8018583903F31F0982F55 +:10448000907F905F8F70892B8583C8010E942819C7 +:1044900086E0F801ADE1B2E001900D928A95E1F776 +:1044A0000DCFC8010E94510F81118ECF8091220241 +:1044B000816080932202C8010E942819FFCEEE205D +:1044C00009F48FCFC8010E94510FF82E882309F4F8 +:1044D00088CF86E0F801ADE1B2E001900D928A95B7 +:1044E000E1F780911D0290911E020E94450F0E94EB +:1044F000AE20E4CE81E08E25FBCE1F93CF93DF93D9 +:10450000CDB7DEB767970FB6F894DEBF0FBECDBF4D +:104510004B8B5C8B6D8B7E8B8F8B61111092570256 +:104520001A8A198A85E0FE017396DE011D960190B4 +:104530000D928A95E1F786E0FE013D96DE01179621 +:1045400001900D928A95E1F7CE0107960E94042111 +:10455000882389F016E080915402909123028913F8 +:1045600049C067960FB6F894DEBF0FBECDBFDF918E +:10457000CF911F91089586E0FE013796DE011196D6 +:1045800001900D928A95E1F78A859B85892B11F31D +:104590008F81988589238F3FE9F22091230230E0B3 +:1045A000C90101968770992740915402481719064E +:1045B00071F40E944C16109223021092540286E06D +:1045C000EDE1F2E0DF011D928A95E9F7C3CF96E0B5 +:1045D000929FD001939FB00D1124AC5DBD4FFE01A1 +:1045E000319601900D929A95E1F7809323020E94F3 +:1045F0004B0BB0CF819FC00111248C5D9D4F0E9459 +:104600000421882309F4ADCF8091540290E00196F3 +:1046100087709927809354029ECF8F929F92AF927A +:10462000BF92CF92DF92EF92FF920F931F93CF939F +:10463000DF93CDB7DEB72D970FB6F894DEBF0FBE70 +:10464000CDBF8E010F5F1F4F88E0F80111928A9550 +:10465000E9F74FE4E42E41E0F42E6801AA24A39484 +:10466000B12CF70181917F018F3F09F44BC0F89481 +:10467000E82FE295EF70F0E021A18F70A50102C054 +:10468000440F551F8A95E2F7CA01922F982B91A3E8 +:1046900092A18095892382A3789400C0E3E5F1E09C +:1046A00030E020E0912C812C81918F3F09F47EC075 +:1046B000A82FA295AF70B0E090964C9150E08F700B +:1046C00002C0559547958A95E2F740FD6FC0C50138 +:1046D000022E02C0880F991F0A94E2F7882A992AAD +:1046E0002F5F3F4F2C303105F9F6F701319780816C +:1046F0008F3F11F00E94BF0850EA5A95F1F7F6017A +:1047000091828082F2E0CF0ED11C23E5E21621E0F7 +:10471000F20609F0A6CF48E050E0B8018EE692E03C +:104720000E94B52DCC24C394009709F4C12C892B89 +:1047300009F43FC088E0F801AEE6B2E001900D92C6 +:104740008A95E1F781E080935E020E94880690934B +:104750005D0280935C0280915C0290915D020E94F8 +:104760007906069750F180916E0290916F029093B6 +:10477000A7028093A602809170029091710290939B +:10478000A9028093A8028091720290917302909383 +:10479000AB028093AA02809174029091750290936B +:1047A000AD028093AC0210925E0207C090E080E000 +:1047B00095CF80915E028111CECF80916D028823CA +:1047C00071F080916B0290916C020E947906893E93 +:1047D000934028F082EE0E94E10B10926D028091CE +:1047E0006A02882399F18091690281112FC080911A +:1047F0006702909168020E94790681369A4E78F09D +:104800008091650290916602019690936602809372 +:1048100065020E94880690936802809367028091E7 +:104820006502909166024F9788F010921A018AE211 +:1048300080931B0180931C018FE00E94801481E013 +:1048400080936902109266021092650238E7E32EA7 +:1048500032E0F32E10E000E0BB24B394F701D190D6 +:104860007F01DD2051F10115110509F05FC0B09203 +:1048700063020E9488069093600280935F02D69440 +:10488000C801880F991FDD2009F45DC08F589E4F25 +:10489000FC01808191819A8789871B860E94880606 +:1048A0008160782F9D878C87F70131971082498529 +:1048B0005A856B858D850E947D220F5F1F4F0930C1 +:1048C000110561F61091640280916302111164C0B8 +:1048D0008823E1F110921A0184E080931B018093F8 +:1048E0001C018FE00E9480141092630281E080938B +:1048F000640280916902811105C080916A02811170 +:104900000E94B2108C2D2D960FB6F894DEBF0FBE0C +:10491000CDBFDF91CF911F910F91FF90EF90DF906E +:10492000CF90BF90AF909F908F9008950530110564 +:1049300019F4B09262029DCF0630110509F09FCFA5 +:10494000B092610296CF815A9E4FA2CF80916202AF +:10495000882379F086E180931A018AE180931B0114 +:1049600084E080931C018FE00E9480141092620208 +:10497000BDCF809161028823A9F08AE180931A015A +:104980008EE180931B0184E080931C018FE00E94E4 +:10499000801410926102AACF811126C08091620218 +:1049A000811122C08091610281111EC080915F023D +:1049B000909160020E947906853F9140A8F01123F2 +:1049C00051F010921A018AE280931B0180931C011E +:1049D00081E20E948014109263021092620210928F +:1049E00061021092640285CF1092630210926202FB +:1049F000109261027ECF1F920F920FB60F92112478 +:104A00002F933F934F935F936F937F938F939F93D6 +:104A1000AF93BF93CF93DF93EF93FF93D091E900D0 +:104A2000DF708091EC00C82FC17080FDC0E810924B +:104A3000E9008091F000877F8093F00078940E94D5 +:104A400061161092E9008091F00088608093F00078 +:104A5000CD2BCF70C093E900FF91EF91DF91CF9103 +:104A6000BF91AF919F918F917F916F915F914F9186 +:104A70003F912F910F900FBE0F901F9018951F928E +:104A80000F920FB60F9211242F933F934F935F9382 +:104A90006F937F938F939F93AF93BF93EF93FF9306 +:104AA0008091E10082FF09C08091E20082FF05C091 +:104AB0008091E1008B7F8093E1008091DA0080FF9C +:104AC00024C08091D80080FF20C08091DA008E7FC2 +:104AD0008093DA008091D90080FF9BC088E189BD76 +:104AE0008AE189BD09B400FEFDCF81E08093FF0219 +:104AF0008091DA02811109C00E94EC040E94B7057E +:104B00008091E20084608093E2008091E10080FF68 +:104B100017C08091E20080FF13C08091E2008E7F79 +:104B20008093E2008091E20080618093E2008091B6 +:104B3000D80080628093D80019BC85E08093FF0282 +:104B40008091E10084FF29C08091E20084FF25C0AC +:104B500088E189BD8AE189BD89B5982F917080FF70 +:104B6000FBCF8091D8008F7D8093D8008091E100A9 +:104B70008F7E8093E1008091E2008F7E8093E2003F +:104B80008091E20081608093E2008091000388239D +:104B900009F445C084E08093FF028091E10083FF27 +:104BA00027C08091E20083FF23C08091E100877FCE +:104BB0008093E10082E08093FF02109200038091D5 +:104BC000E1008E7F8093E1008091E2008E7F8093F0 +:104BD000E2008091E20080618093E20042E060E0C8 +:104BE00080E00E9485058091F00088608093F0004D +:104BF000FF91EF91BF91AF919F918F917F916F91B5 +:104C00005F914F913F912F910F900FBE0F901F908A +:104C1000189519BC1092FF021092DA0276CF80919B +:104C2000E30087FD93E09093FF02B7CF78941F9243 +:104C30001FB61F9211248F939F93AF93BF938091C0 +:104C4000D1029091D202A091D302B091D4020196E8 +:104C5000A11DB11D8093D1029093D202A093D302E3 +:104C6000B093D402BF91AF919F918F911F901FBEBF +:104C70001F9018951F921FB61F9211248F939F9318 +:104C8000AF93BF938091D002811113C08091D10264 +:104C90009091D202A091D302B091D4024196A11D6D +:104CA000B11D8093D1029093D202A093D302B0930E +:104CB000D402BF91AF919F918F911F901FBE1F9003 +:104CC0001895CDB7DEB7E0970FB6F894DEBF0FBEEC +:104CD000CDBF84B7877F84BF0FB6F894A895809125 +:104CE0006000886180936000109260000FBE80E8D1 +:104CF00090E00FB6F89480936100909361000FBE2E +:104D000085B7806885BF85B7806885BF8DEB98E0E3 +:104D10009093E3018093E2010E94EC040E94B705A6 +:104D20008091E20084608093E20078948091FF0299 +:104D30008823A1F01091E9001F709091EC00892F59 +:104D4000817090FD80E8182B1092E9008091E800B6 +:104D500083FD0E9461161F701093E90082E084BDFC +:104D600093E095BD9AEF97BD80936E000E94780FF7 +:104D7000811102C00E94A80E80EF0E94BF0881EF3F +:104D80000E94BF0882EF0E94BF0883EF0E94BF0805 +:104D900003E511E0FFE5EF2EF1E0FF2ED8018D9144 +:104DA0008D018F3F11F00E94BF08E016F106B1F7A8 +:104DB00010926F0210926E021092A7021092A60239 +:104DC00010927102109270021092A9021092A80221 +:104DD00010927302109272021092AB021092AA0209 +:104DE00010927502109274021092AD021092AC02F1 +:104DF0000E944116811102C00E94D51582E090E008 +:104E00000E94C22D80939D020E94910F9093D60222 +:104E10008093D5020E940D23EFE7FBEB3197F1F76A +:104E200000C000000E940D238091A60280FF08C0F0 +:104E30006FEF7FEF90E080E00E94F42D0E94D10C94 +:104E400083E090E00E94C22D90E00E94C60B80910A +:104E5000090390910A030E94BE1480917602811189 +:104E600032C00E944116811104C00E94D5150E94D3 +:104E7000C51588E090E00E94CA2D60938903709365 +:104E80008A0380938B0390938C036E7F71F40E944E +:104E9000C51588E090E00E94CA2D60938903709345 +:104EA0008A0380938B0390938C030E94D206109206 +:104EB000C5028091890380FF03C086950E948014FB +:104EC00081E0809376026EEA71E0E3E98E2EE2E003 +:104ED0009E2E2CE931E0E5EAF1E041E050E011914D +:104EE000812F82958F7090E0DC019196FC909197D4 +:104EF0001F70E12E6A0101C0CC0C1A95EAF70C2D47 +:104F000000950F2191960C93919792961C919297F0 +:104F10001C2992961C93D901FD909D010F2D02959D +:104F20000F7010E0D8019196BC90BF2DBF70FB2E82 +:104F30006A0101C0CC0CBA95EAF7DC2CD094DB20D6 +:104F4000D8019196DC9291979296DC909297DC280A +:104F50009296DC92DC0190968C9190E002C095953F +:104F60008795EA94E2F78170D80190960C9110E051 +:104F700002C015950795FA94E2F790E000FD92E0E3 +:104F8000892BD4018D934D016E177F0709F0A7CFB0 +:104F90008091D50280688093D5028091D50290914E +:104FA000D6020E94B70E86EA92E09093BD028093EB +:104FB000BC0281E20E94801481E090E00E945115C1 +:104FC00080E091E09093CD028093CC0258E1252EB1 +:104FD000312C8091FF02FF24F39408E11AE185301F +:104FE00009F4B3C20E940D23882359F08FB7F894B7 +:104FF0004091D1025091D2026091D3027091D402BB +:105000008FBFA6EAB2E0EEE9F2E010E000E0702F18 +:105010008D919D91219131912817390709F4BEC2D4 +:105020002827392760E0EE24E394F12CA9014E21D2 +:105030005F21452B09F4ACC269A37AA39C012E2100 +:105040003F2191E0232B09F490E09BA30E94880666 +:105050008160782F9DA38CA349A15AA16BA18DA13A +:105060000E947D22000F111FF801E256FD4F808142 +:105070009181E826F926F182E0828091C502882399 +:10508000D1F18091C402E0918903E695E81BE09399 +:10509000C002823009F099C2F0E0EC53FD4FE49178 +:1050A0000E2F10E029E2E22E23E1F22E8091C102C0 +:1050B000882361F01092C1020E9488069093BF027B +:1050C0008093BE021092C3021092C2020E94880610 +:1050D000E091BE02F091BF028E1B9F0B8F3F9F4756 +:1050E00050F4E00FF11FF093BF02E093BE028EEB8D +:1050F00092E0F70109953AE8E32E32E0F32E01E859 +:1051000012E048E7842E42E0942E83E991E09CA7C8 +:105110008BA7D12CC12CACE9B1E0BEA7ADA7E5EAC5 +:10512000F1E0F8ABEFA753E9652E52E0752E512C54 +:1051300044244394D301ED913D01EE0FEE0FAFA552 +:10514000B8A92D91B8ABAFA7A22FA295AF70B0E0D0 +:1051500090968C9190E02F7002C0959587952A9536 +:10516000E2F781709927ADA5BEA54D91BEA7ADA769 +:10517000A42FA295AF70B0E090962C9130E04F70C4 +:1051800002C0359527954A95E2F7A9014170552748 +:1051900020FF02C042E050E0842BE82BD30111979E +:1051A000EC93ABA5BCA5AD90BCA7ABA7EF70F0E0AE +:1051B000ED57FE4F8081F7019081890F8083B12CDC +:1051C000082E000C990B20E08A159B05DCF0D80115 +:1051D0008C918F5F8C93F601E15AFE4F8081918113 +:1051E0009A8389834B820E9488068160782F9D83F1 +:1051F0008C83F401408249815A816B818D810E94A8 +:105200007D2221E0D7018C91082E000C990B4427B8 +:1052100055274A195B0948175907E4F0F8018081BE +:1052200081508083F601EF58FE4F808191819A83EF +:1052300089834B820E9488068160782F9D838C83AE +:10524000E2E0D401EC9349815A816B818D810E9407 +:105250007D2221E0D7018C91082E000C990BB5011D +:105260000E94632DF70181937F01522A0F5F1F4F28 +:10527000FFEF8F1A9F0A22E0C20ED11C42E1C41632 +:10528000D10409F057CF552059F08FB7F8944091C9 +:10529000D1025091D2026091D3027091D4028FBF9B +:1052A00086E0E5EBF2E0DE01119601900D928A9521 +:1052B000E1F7F090B702E090B8021091B9020091C6 +:1052C000BA021092B7021092B8021092B90210926C +:1052D000BA028F2D8E2909F448C08091B3029091B3 +:1052E000B4020E9479069C019091AF02992309F4BF +:1052F000C3C323333105C8F19F3F19F09F5F9093DB +:10530000AF02FF2059F00E9443089FEF1F140CF4D6 +:1053100091E0899F802D11248093B702EE2059F0EF +:105320000E9443089FEF1E140CF491E0899F802D8A +:1053300011248093B8023091B7023323B1F0209149 +:10534000B802222391F045EB3403C00111249923C4 +:1053500009F495C19093B70245EB24039001112401 +:10536000332309F490C13093B802812F802B09F4C4 +:1053700048C08091B1029091B2020E9479069C01CE +:105380009091AE02992309F472C325363105C8F114 +:105390009F3F19F09F5F9093AE02112359F00E9436 +:1053A00021089FEF11160CF491E0899F802D1124A4 +:1053B0008093B902002359F00E9421089FEF101634 +:1053C0000CF491E0899F802D11248093BA023091D2 +:1053D000B9023323B1F02091BA02222391F045EBB8 +:1053E0003403C0011124992309F451C19093B902E7 +:1053F00045EB240390011124332309F44CC130936D +:10540000BA028091B7029091B802892B9091B902AB +:10541000892B9091BA02892B11F00E94810786E0B6 +:10542000FE013196A5EBB2E001900D928A95E1F76D +:105430000E94C00690919C02891731F00E94C0061C +:1054400080939C020E94A6148091FF02843009F090 +:10545000C0CD83E08093E9008091E80082FFB9CD60 +:105460008091E80090E085FF06C00E940B0588232C +:1054700009F415C191E08091E8008B778093E800F2 +:10548000992309F4A6CDE981E150E33108F09BC1ED +:10549000F0E0EC58F14D0C94772D8091FF028430B0 +:1054A00009F441C080E00E94A6141092C5028091C8 +:1054B000BB02811116C0F092BB0280918903982F24 +:1054C0009170909377028E7F80938903BFEFE0E71E +:1054D000F2E0B150E040F040E1F700C000000E946F +:1054E000B50F1092D00220E40FB6F894A895209240 +:1054F00060000FBE2093600083B7817F846083BF0C +:1055000083B7816083BF7894889583B78E7F83BF8C +:105510000FB6F894A8958091600088618093600030 +:10552000109260000FBE8091FE02882371F00E94ED +:105530000D23E6EAF2E081919191892B09F078C27E +:105540008EEA92E08E179F07B1F78091FF028530B7 +:1055500009F4A3CF0E944C160E94C0060E94A61414 +:105560001092BB0280917702882359F080918903C1 +:1055700081608093890386950E9480140E949F0F0A +:1055800031CD8091C6028823C9F30E94B50FF6CFB2 +:105590006F5FEE0CFF1C6C3009F048CD0F5F1F4FA2 +:1055A0000430110509F033CD8FEF8EA38FA318A619 +:1055B0000E9488068160782F9AA789A74EA15FA1D3 +:1055C00068A58AA50E947D2258CD863059F4F0E066 +:1055D000EF53FD4FE4910E2F10E099E1E92E93E196 +:1055E000F92E64CD893061F4E695F0E0E254FD4F88 +:1055F000E4910E2F10E08AE6E82E82E1F82E56CDD7 +:105600008F3061F4E695F0E0E554FD4FE4910E2F04 +:1056100010E0B5E1EB2EB2E1FB2E48CD853159F417 +:10562000F0E0E854FD4FE4910E2F10E0A2EAEA2EDC +:10563000A1E1FA2E3BCD08E210E072E1E72E71E124 +:10564000F72E883109F432CD833249F4E6EBF2E0EB +:1056500005911491F0ECEF2EF2E1FF2E27CD04EF2F +:1056600011E0E5EDEE2EE0E1FE2E843209F41ECDD0 +:1056700000ED17E061EDE62E66E0F62E17CD81E035 +:105680008093B70269CE81E08093B8026ECE81E04C +:105690008093B902ADCE81E08093BA02B2CE00E22F +:1056A00010E0CE0101967C018091E80085FD0AC0E2 +:1056B0008091E8008B778093E8000E940B05882397 +:1056C00099F3D8CE8091F100D7018D937D010150DF +:1056D000110951F7CFCE1A8289E08B833FC08A81AE +:1056E000823009F4BBC18330A9F0813009F06BC06E +:1056F0002FB7F8946091D1027091D2028091D302B9 +:105700009091D4022FBF0E947D2D6B837C838D836B +:105710009E8324C08091A6029091A7029827892792 +:1057200098279C838B838091A8029091A902982747 +:10573000892798279E838D838091AA029091AB023E +:1057400098278927982798878F838091AC0290911A +:10575000AD029827892798279A8789878091FF0229 +:10576000843009F036CC1091E9001F709091EC0064 +:10577000892F817090FD80E8182B82E08093E900EA +:105780008091E80080FF0DC050E040E060E270E0F2 +:10579000CE0101960E943C058091E8008E778093AF +:1057A000E8001F701093E90014CC8A81823059F40C +:1057B0006B817C818D819E810E947D2D86E290E0AF +:1057C0000E94D62DCBCF8FEF8983C8CF4C816B81C0 +:1057D0008A810E94D60E9827892798279E838D83D9 +:1057E000BDCFED80FE80FE24EF24FE248A810B8154 +:1057F000B8E10B9F80011124E0E68E9F000D111D82 +:1058000011248C8190E0880F991F080F191F6F2DAC +:10581000C80187960E94D62D6E2DC8018896D0CFDC +:105820000E943B0E9BCF8A818138C1F060F48038A2 +:1058300009F094CF20E04B8160918B0380918A0323 +:105840000E944F138BCF823849F1833809F086CFFD +:1058500020E040918C036C818B81F2CF8B810E9480 +:1058600080149B8180918903911111C08E7F809358 +:1058700089031092C502FFEF20E742E0F15020407B +:105880004040E1F700C000000E94B50F67CF816083 +:105890008093890386950E94801460CF8B818093CA +:1058A0008D035CCF8A81813899F030F4803809F01B +:1058B00055CF80918C0311CF823891F0833809F055 +:1058C0004DCF80918A038B8380918B038C8346CF4D +:1058D0008091890380FF02C08695FFCE80E0FDCED7 +:1058E00080918D03FACE6091890370918A03809133 +:1058F0008B0390918C030E943D1330CF80E18A830B +:105900002DCF84E08A8389E1E8CE0A811B811027AC +:1059100001271027CE0101966C01EC80DC01AE0D51 +:10592000B11D7D01C80189519C4FEC14FD0409F49F +:1059300015CF0931B4E01B0750F40E94C22DF601C7 +:1059400084830F5F1F4FBFEFCB1ADB0AEBCFD6016B +:1059500014961C92F6CF0A811B811027012710276D +:10596000FE0131966F01EC80E00EF12EF11CC801B2 +:1059700089519C4FE016F10609F4F0CE0931F4E0AC +:105980001F0728F4D60114966C910E94D62DBFEF04 +:10599000CB1ADB0A0F5F1F4FEACF0E942B0EDECE21 +:1059A0008AE0ADCF0A811B81102701271027FE0155 +:1059B00031966F01EC80CF018E0D911D7C01C801E5 +:1059C0008796EC14FD0409F4C9CE003CA3E01A0745 +:1059D00050F40E94C22DF60184830F5F1F4FBFEF6A +:1059E000CB1ADB0AECCFD60114961C92F6CF0A81B3 +:1059F0001B81102701271027FE0131966F01EC80D3 +:105A0000E00EF12EF11CC8018796E016F10609F4AC +:105A1000A5CE003CF3E01F0728F4D60114966C9144 +:105A20000E94D62DBFEFCB1ADB0A0F5F1F4FEBCFC3 +:105A300009BD19BD09B400FEFDCF8091D8008F7D4E +:105A40008093D8008091E00082608093E000809194 +:105A5000E00081FDFCCF0E944C1677CD86E290E0FD +:105A60000E94C22D1B821C821D828E8377CE2D3216 +:105A7000314008F08FCCC5CC2D32314008F03ECCFF +:105A800074CC87FB082E062687FD819567FD6195FE +:105A90000E94932D0EF4919507FC81950895AA1B01 +:105AA000BB1B51E107C0AA1FBB1FA617B70710F009 +:105AB000A61BB70B881F991F5A95A9F7809590953B +:105AC000BC01CD01089597FB072E16F4009407D072 +:105AD00077FD09D00E944F2D07FC05D03EF490952C +:105AE00081959F4F0895709561957F4F0895EE0FB2 +:105AF000FF1F0590F491E02D0994692796276927E7 +:105B000078278727782708950E943F2E332312F4A1 +:105B10008A1B9B0B0C948E2D0E943F2EB7FF08957D +:105B2000821B930B0895991B79E004C0991F961767 +:105B300008F0961B881F7A95C9F780950895FB0198 +:105B4000DC0102C005900D9241505040D8F70895F5 +:105B5000FC014150504030F001900616D1F73197CA +:105B6000CF010895882799270895FB01DC0104C01F +:105B70008D910190801921F441505040C8F7881B45 +:105B8000990B0895F999FECF92BD81BDF89A992796 +:105B900080B50895A6E1B0E044E050E00C94FC2DFF +:105BA000A8E1B0E042E050E00C94FC2D262FF999DA +:105BB000FECF92BD81BDF89A019700B4021639F06C +:105BC0001FBA20BD0FB6F894FA9AF99A0FBE08953D +:105BD0000396272F0E94D72D0E94D62D252F0E9495 +:105BE000D72D242F0C94D72D0196272F0E94D72D27 +:105BF0000C94D62DDC01CB01FC01F999FECF06C037 +:105C0000F2BDE1BDF89A319600B40D92415050407A +:105C1000B8F708950E943F2EA59F900DB49F900D58 +:105C2000A49F800D911D11240895B7FF0C940A2E96 +:105C30000E940A2E821B930B0895A1E21A2EAA1B22 +:105C4000BB1BFD010DC0AA1FBB1FEE1FFF1FA2172C +:105C5000B307E407F50720F0A21BB30BE40BF50B29 +:105C6000661F771F881F991F1A9469F760957095B2 +:105C7000809590959B01AC01BD01CF010895A29F35 +:105C8000B001B39FC001A39F700D811D1124911D10 +:105C9000B29F700D811D1124911D0895F894FFCFBE +:105CA000630F630F6C0F6C0F6E0F6C0F6C0F6C0F2C +:105CB000630F630F730F6C0F6C0F730F46176E1724 +:105CC000C1176E17C117A117D917C117D618E31836 +:105CD000401D401DB41DB41D121E2C1E771D771DC6 +:105CE000371EC11ED21ED21E6B2B6F2BD52BE62B5F +:105CF000F12B102C132C522C732CE32BE32B7E2C2A +:0E5D0000812C852CAB2CCD2CD02CD22CF72C4A +:105D0E007606910C700C6C0C680C01191A1B1C1D7C +:105D1E001E1F202122010201002A002A2A0181824F +:105D2E0083E200E900EA00B500B600B700CD0083BB +:105D3E0001CC008A01920194012102230224022542 +:105D4E0002260227022A02B300B4006F007000F090 +:105D5E00F1F2F3F5F6F700010203040537363502CA +:105D6E0000020102020B000B010B020B03050308DC +:105D7E0003000000010002090009010902090303E2 +:105D8E0003060300FF0100010000FFFF00000100F9 +:105D9E0001FF000404040404040402026162646648 +:105DAE0090929497066063656791939596070001AC +:105DBE00020202020606060909090909090F0F0F58 +:105DCE000F0F0F1515151819191919191919191960 +:105DDE001923244022B6B6019401DE00C808E1085A +:025DEE000109A9 :00000001FF From 4c4fa49af580979932bf4c5bd97a575485c5558a Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Thu, 25 Nov 2021 23:25:32 -0500 Subject: [PATCH 074/155] Test lower trackball interval --- keyboards/solartempest/sofle/config.h | 2 +- keyboards/solartempest/sofle/solartempest_sofle_via.hex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index 59542d516202..fd39b7d5c5df 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -110,7 +110,7 @@ // Pimoroni trackball settings #ifdef POINTING_DEVICE_ENABLE - #define PIMORONI_TRACKBALL_INTERVAL_MS 6 //Default is 8ms + #define PIMORONI_TRACKBALL_INTERVAL_MS 8 //Default is 8ms //#define PIMORONI_TRACKBALL_ROTATE //Change according to your particular installed trackball orientation. #define PIMORONI_TRACKBALL_INVERT_Y #define PIMORONI_TRACKBALL_INVERT_X diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index 70ededaff297..70a9d0c25c6f 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1393,7 +1393,7 @@ :10570000930B6F3F7F4F8F4F9F4710F40E94800D88 :10571000E11001C0F1100E949B0D809142038A307C :1057200008F0BAC380914003909141030E94E31BAB -:10573000069708F4B1C304E610E025E030E04BE33F +:10573000089708F4B1C304E610E025E030E04BE33D :1057400053E064E084E10E948832892B09F075C33C :105750001092420320913203222359F080913B039F :1057600090913C0398278927982790933C03809336 From 5f48cf8042758950a03b4f602d0c236de0c004c0 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Fri, 26 Nov 2021 00:32:59 -0500 Subject: [PATCH 075/155] Code cleanup --- .../pro/ansi/keymaps/solartempest/config.h | 17 +++++++---- .../gmmk_pro_ansi_solartempest.bin | Bin 36412 -> 36584 bytes .../pro/ansi/keymaps/solartempest/jonavin.c | 27 ------------------ .../pro/ansi/keymaps/solartempest/jonavin.h | 18 ++++++------ .../pro/ansi/keymaps/solartempest/keymap.c | 24 +--------------- .../keymaps/solartempest/rgb_matrix_map.h | 4 +-- .../pro/ansi/keymaps/solartempest/rules.mk | 25 ++++++++-------- 7 files changed, 35 insertions(+), 80 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h b/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h index 1e3dddd33e83..5d79e27b89a1 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h @@ -19,19 +19,24 @@ #define TAPPING_TOGGLE 2 // TT set to two taps #define TAPPING_TERM 180 -/* Handle GRAVESC combo keys */ +// Handle GRAVESC combo keys //#define GRAVE_ESC_ALT_OVERRIDE //Always send Escape if Alt is pressed //#define GRAVE_ESC_CTRL_OVERRIDE //Always send Escape if Control is pressed +// NKRO Settings +#ifdef NKRO_ENABLE + #define FORCE_NKRO //Force NKRO if enabled. +#endif +//RGB Settings #ifdef RGB_MATRIX_ENABLE #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_HUE_WAVE #define RGB_DISABLE_WHEN_USB_SUSPENDED #define RGB_MATRIX_KEYPRESSES - #define DISABLE_RGB_MATRIX_SOLID_COLOR + #define DISABLE_RGB_MATRIX_SOLID_COLOR //Remove or keep effects not desired #define DISABLE_RGB_MATRIX_BREATHING - #define DISABLE_RGB_MATRIX_ALPHAS_MODS //Remove effects not desired + #define DISABLE_RGB_MATRIX_ALPHAS_MODS #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT #define DISABLE_RGB_MATRIX_BAND_SAT @@ -56,9 +61,9 @@ #define DISABLE_RGB_MATRIX_HUE_BREATHING #define DISABLE_RGB_MATRIX_HUE_PENDULUM //#define DISABLE_RGB_MATRIX_HUE_WAVE - //#define DISABLE_RGB_MATRIX_PIXEL_RAIN - //#define DISABLE_RGB_MATRIX_PIXEL_FLOW - //#define DISABLE_RGB_MATRIX_PIXEL_FRACTAL + #define DISABLE_RGB_MATRIX_PIXEL_RAIN + #define DISABLE_RGB_MATRIX_PIXEL_FLOW + #define DISABLE_RGB_MATRIX_PIXEL_FRACTAL #define DISABLE_RGB_MATRIX_TYPING_HEATMAP #define DISABLE_RGB_MATRIX_DIGITAL_RAIN #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro_ansi_solartempest.bin b/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro_ansi_solartempest.bin index 26bd2c82cbb83577c0f24a5920dde9ceccb94bac..1f9b33233744c3b04a261bad6aa7f09b3ad93933 100644 GIT binary patch delta 5584 zcma)Adwdhc_Mh2on(aG%&^9fho2JmTr91_SP)J`1ZCWS-S`Y-3iWMsXtX8?&^0a_@ z#ktoH3J7vRe1Ou%`U{Ux6t1re*A}f5l$U@hqTVSWo5ybUcQy_E-QWHF^ULS+opa`# zGc#vq&z>`zBiops?aZq~nYxEJ51XVLxeRfofZ2dLz$(CB0q>EKIG1_3e)G|XH}g^P zE)aDBt^vG&=;fP--HW?O9p0<1m(+AN(J|IxGk}{aB~~O>?kiHAo9SWGnyp?pL$MfF z5%<4jYC6G1USX1$wVTL0OqJ$dIp9{)+eBiraib$kRl_KnSJbI<)^0+assZP!I@Gqb zh9AP1uFE{4_Z}V(ZM_S%pU6P`|J9p=`fDLQQ=ZTq*@7n|G})~sQHbZ-Sc(IL2{Y$j zlcwI8Z`@K8b~XZx@aTjlmVPgpnvBg8TEfcXo8K%_ee3GUH>;?N)P;?2d{SJkiR>z~ zr8F=mbvGVytTn}s>BpX-7T#iaVfv7`CM>**2j_m3rYfzd@aLu9-I!L1pKI7I^UY~m zME~i#1`?}SqDksv!JSdE+WFTk@tLh=;)z)uqxq4_6^N*k^)+t7tKiG%mgI zx4>0*>7AOYYwpArS?CCyhu))A7u-Wz(#jJW)=;cUuzw4(#Z}+A(a`TY6o1l#-VO{N zmoC`89+Z%vx37wa!LmJQ84;9gf;(cNy$+hz4i#rNKi`NrC8VB;MZC6+ zwXhWV!C|zsi0yFoXw5TV!LB1(7uSYpofq@6@T<(yW)a&`nm7oz1{gOE!t0u^P?Ow+ zjAt`s!vj1+^>QEoAn?f{z8d(r5I-0ANV$=vU-`7K%j8aFU@?ygLy?TPDm@FB_yT== z3GlZ=ycPK011#O=Tdf)1Wial^IBO^a+0{TFUjh7u5MKp+cZi<>{OJ&14*bc0VN!5# zC3HRyDW(H|EX2bj95DBsafm#SjM5D<^;puoA`6gU9=FfpdDzmpc z=Tx$p13Wkq8Rd*71D?px)gjHS%JBct)DwM#9zRMZMCj6HhpZ;`kAFI2V{m*0SsI}m zH#wvq-9O7+{iu-UusgdlCbYuljNgM}Gf8`dZcK8>Vo?9wcl8k=jjn&zyBdi^N9xk3 z)VHhHO71^qzCsEk6LOwdg}60<#{ka(UIY-pRsiNz^eZPMEBd+9ZYAp@UsJykkGQ`R zeNC*dVzx)I`^0{&WvpBq4?iy{6P`A77@n6+yWw+O(lL)=qq z$!jtB%or~@8DnM=y(A_!6`v>Bv4!{=Spw||vOhKrBwxk0F`P`Aw23uU9wn z$I72^tI~gH-I*KHt+!!I%3~@zns~Lv_*+sCmz;g(=)X+rvzXoxl@&2P?9#eUL?b>C z{D+e>Rd=j5#exSL$n$YV{0wHFLT(DTnP=PE>iUPlsmff!UO& zF^6Qur{iZF*7!(_-y$;-PT`HjkeHsmP-=1yZaHx)9I2>Hdd_XK_y9NEms$t6VEVWp z(~06zNXy3^wTaK;?7dQzCCz=}7R$c_tt#VktJ#96T1NB>@6Mn9M-m{hNjvydQSl{9 zMD!WJCcr@v)9d~|pEQRZ|4gc4a5+iWW#O^JsvCz>NuzFm!dk!FD!Au0Y#Vsqy@s=dX@025rXiH8KbJ`hv_qrko^0)7r`7{QHf+ z1w(P#9eEkzF|BvPp#pukktZB09pg{$%40?Bg7EbxJQQ77Aorw z_aK9^%3z=>9%W+6d-OH~%r_8fc&f(`TrCNx8m!`hh5?Q7$OaA22l!9`Q?8z{Wn=dnTwg=Ht2#&q7+Lqc-M4OmYdrGq`Oa|Li zV5^j^yz6w@x&w&X{L1s#O>Sfq;Qu1oMt#CPvKh+Qeoqu)J|I0R6cA>S*~ZdBu3yf6 zkZ@g*X9qC72J4gspQ%NTs6ceP2aWG?F=LpMu z9WzDi9B&Q&5jP$?qGTS)qvSCaJqb}LcrYAFzDK1|cPV@8d-N$TW#_WcqwEza+;Yzzni+E+{e}cl>mmx)&3xi1| zVE~b{l9_c!2yYrlMwmD<(ZpjXnP-|D_A0#L_H|^J=^nh2oH5nj6^v2ML{X}Hri2;^JfMxBd3NM zA;G-uaUp#i z^j~u1-dl-vZv<2aU~RvrZDQrbsiwy;9pq;%nBF3rC!B=?Su)Y4yX23VqJ=97^5|@$ zaMm9XjJ}kE0bw8cW}+S+ar`#%2L``LzM4FG?A`!t;SVBekWnUY@wmdL)X@2A#-O%a z;rA|3OL%x7uEwgt!_&FW?lQ zbTZ=ffHwfk0KI@t0M{l8$vzJ9MN|c!G3_=gR9?X|vcfk7`A(8s^j_}C^@#fu580>9 z$OnYgvcZHqlw6bvy_IsD$g83^YynT)ii$3E*C)bLKxuueS$4x)KvzSXF&m9DgEa>KgS zRHMTD7W1)IQMg~qw_F8UL3UUN;40E)J>Phxsq_vrV|!6rcj+B(@%AFNd(R)vVrD`@ zZc?`-6pKqLO79E+Ip4&C1qLp%n{SqcB2g5?0Mrt=r!R!@JstTj7+I<+h|kM`JH46? z8#T7rYMVA|VNGq_v(K+uw`ngyeQU*p);f1~&)7c>maZ(&nzAK$G3hKT9#Ro9KC^xZv z44)0p%I_sFlqW?__U&9L3DrIcLU>2HVaiGmHX2uGUCNgw)5$f9!g42*i#w+@d);WI<;Ew*o~4z z0^bzkAMq*2f@!$VeDlo=J|wLU_U_tG5BB;- z1T)PIhFXcLvMyHZOD{{Gg5i^M5VYG#W92H`K=4$ZW}e7`WRk-$wTxkU4w5ITQYyoP zS6M`jN4Yk?P%bHjBp}R`5bqZ@$r#?!C@7@8!9rucxqAVo$#CzsTeVPR{BYU@a4q&g zQo7VC2`fowRYGxQa1K$>$)YeC;0j2>UU&s$;p<>~2Ikuu@C&nK1han+CF*LZZ1Ki5 zx8j;HJx8*pr{k}Qb-EtXU(NK7@L$P*`?7EuDY&n&RBef}^jXG00cUem9Vj?1-<7)I zbQst5Lv3{}oZqsj5s2o?zBbf~|$hrHf@oQxC zjO$oW^fMdrWwL$dmGmDWp`jNM_i+s3^-vY+heWkk9Y;gjcyRT!UoD9A7+88vCWh9niwv;}S%LEPP4Qs*MaiLd?}kkw^*_?kTeH z16f#Y(CzX|!fh|4ir^Jm7Cvl;Gxy5^L$+4e>*j+i_W;a*50!!1ij{i=B4Y3=g}s(8Dgd05O`sfwayoQafSL35R!X zJ%i_vrSl7zx95`&=a0e$a(R9sMh@eGaV(zVcyQ4kjO!iv(L4-6G<4dq zJ8M%~5;Ks&D`Yy(EFQx~UxFF;EJoaqKrc9SPb91GRWfqv4rn`<9&fw~V)(9tEuRhs zlPnx_-tL!u8IpbCWH;WmI~tPhb0+r7J`TxtIWzlZ?}ubtocHw0c7|lHI7|9u^I_rF zL&CMrnf-<@g=Eh;7xl|lhh%o=Q~k1rknBBU5lcd1!s= z*j2M2+U|oZ%1o%qK%<)BJ_E=Eu<`L|89e)qfcF6>0r?=G)9m!*ju>u(3kl#so8#w=hp^t2g}6bZA`%BJ;!H?J zvaFJWKNe}2=2`gK!_3~Z?{5zyxBI#OT=;y~`u)DY z-(G9&_4xhPp8h?|(YKga#xo}tHcfaSerqk_-T)i~oB;Fyt^%amrU~Pi%TG5Qd#s5M zi`1<|TnZo?PzqSMvT4G7IJK!YgEZr()k%_?s)(K`oFIv6>K3C*qDw!>RsA^A%_cM! z4!Rh6#;YsQ{Vz^U`;L;GObpZe0(piBuRFCb1; zhtpJDYFk3xxge(JGLLBd-?O2dG;<i%I-XB+Lar0HUyk-MpOe!cS`04Q{&XupyJ5JH*;0rJNvUNDoV)mpzQiG zag!#rXNE1Vjxnoy@xGfN+~L`Q@ZZLbfWl~ zhV8N3DAywTp{Ea+v0}a^riTTOc1d}ycJXH@+r)Ax5BbaSlES3=tz#s16yNI_2c2Ux z(=7|DD?F@#zx5o9vl6`SS9TRTc7t67)JT6_iGV- z+_M{)pS*d2VLavU=qdj&o)jzK$wmJ1vY)viDuX;HvM>r|HE^0T3Z49{Yd`SQq&2QJ zq(>8#(cJpp?IV`Qvi8=g&6&Ly`w>-5iAYQtpWHgC2+@CeQ>>~>1$Q2+Ks3l>hG{El zjU|a(QvG$`6<5KX#T9+7=vGha;-ie?3mTLC#A!mvxX9o zdjoO>$lnFzDv-Yl$i*Ok7LZFpJ|2)OK|T_YXM+5ZZ@K^UsNvP(t+F8$xc$Bw*hz@$ zyo@=!OJ#nR$icA*ulb^>%--s*E@hKPx^XBn$;Ji)zMrAn$)pfHeva5e^w}!{UaG?r zon@tA0Z*s#JHKajz?xqg9$1Z%*aJ>19LC$mX6^f8`X3rR>A9q>vX z_G&U-_qU=WhEP3b$<$DNf*=izH@cJy^mW(kSF$2hZ#^HdFLMpWisxXZk2fIh4B#l> z8^Ae$3-E6M=2i4l2gDS5+_BHN*MMNAVmrxap|7gvMj~!2Sr9fhZ7E2v#~@DGYO>HJ zm)}}ftEQPA-l}XiSvcQ``PxFRT^2qjhr*`e!{oQH`dK*=qE8Jnv|V=ga~4eJ!FE*9 zbpdU*Q+Wc>lcFqmWb2LhwQAZvsCcq8?nqWUHmISm19GaBwW?^JFBKw=iXw7ignm+p zjLZXFLrjc>%+~_)Qy}*RjCbnM?|^;t|Wi%O4}wmP-WlOqtn1jY|DXP(ow$s7SA zSV){Y6D}v0b$Xmjyt=}aqGM=a4)a}G%s94JnNekV%L1)kfYy}Ns31>9CgB|Ww#ZP7 z*Af!-HJ(WpMkl3aOAW4+){{4bk&2q6buP2j1GwS3)RxkUX|)&A$>Iu#q8;{q(Hn5; zN~yw{;5vDe<==x+WxU*Gu_Ee)H~oCD`IrA;ZjthsclaA#Wh}B6(PulSz2JPkFQ~q-f_S_ zhe=@q6WAKiA=1Hgp0sO{nsDSanS%g(LFShzGs)1K$H;zufBnz?tyq3XUWs^2mpWil zpV;21z%>}IV-sIBh&UlHHXrgduDPqaZS z25!3B5MtzqmMz#_nRkt`;CMw2O1W@xz^(W$UG_JFMiZ0T2N`PRdT+Puo#e@LdArr{H0gDEj8Mz%nz zI_M5V%mLD`LO$V9a?n(e^Q-SJ&mM@ns_+>;C4FN$!@qtNa!3iHdqjp#l}vS;b2VKI zog(qI>ch@{TJ95~Nk(!Cb8?G)Uh-?0d2NgRM#@h(;`C7^%1CY{W~pd1IX_lk?>VZx zku3Bp?|>BPZz9(r3l>Qhj*FZvu2vR45jBu3W#JmUPlxCe&d4mJ4`oaEgx@;NTEr^} zSP8E~kxzuSxOPdH?r#&e-@~PytT~o6m|60Qna3}YR`c|r zD{!VyZXtKf_rO6;ORc#}yqP)S^|-aW6BtiWt&O_;XT_o`;jk_VffCV{b|SRD*eY&Ao>(95a1p z#z^f}2=5=MN)|2IYhB=GZPhS%Em@e^iI>|ASvIWexEGRzl_^#>?<{x|Og3Z_o$^@v zRk=`Y#ZA#xpRk-5?n|HajmQoJ30=wGFS~2Y*eN)fkS4ijmw#*PQyhsbz4CL0^L_q}$ zlkSP@@ChHo&FB|MB|pHjCDcVxF+w@NN^&{}_aLo3XWBUi*N{X@#+2F3d~9xM8M+jLcsi^;Jh+9g{YqOO+Phh0|i;^)}f5 zoWB|~?go2^wHo6Pvb0c-4P)1?#3AXyek(^>XQF{eCeCrInfCOV{maLZ-SrxVoBZ zzb3n981PZzoMFO$Czod|#al^faUOo0G!>5w4H2y_#Cu@=%1CSR$XU;M-mM#9Th)r_ zeuT^;JFyWN@8whZ_*zLA<&lId9=M4+6Y5Y}bf>~gg5IOd{w-GnuiVkG39d0~E$by= zfu|YDweZYol3+93^M)InOslm{<*SbA<{Cxe6$g`syNenJT@X5k+1fal`jiV$T#2y`Xgj!7QR3?@hF5( zzv|Ar=$_fIi*%R#AtF@PfNK%B-Y?@RyGTT7M&&{ee$!$or>{WToey$DK%V7MqBo}A zLCcLdjeLMD_9)t2|2)4o^n^c*Tw`c9A*IVB7*EoSq#{h$ild=?nM9Or#7~i?GQFl; zWPzDzZ!Md_FcXguu_CV2>sDesq9c!S?Ox%Jk`mQ@!YT>zUcoM7IBeq}0}lAF4wf5x zt1%6BK;S6ULKgADY|n=vC2ltbURafz9^5x8W zTuElk`Z;Oh^N5=X_$VCliT<>uq(-fgEkXv5@EWl_G#5WZS{{0lse7JGp8bGQt(xr) ze#D94jv@>5$m%%-5w|4nuof-`mtf^(;h*I5IVRH>f3p3nPg5idmwY)l8YjY40S@;R z$$!HF_9_`M*P!q9N&@c@1vBtUWz7G$q1Xi4GRHF`UYtr74iz%IaEz+phRy=QI& z4qnsc zj<`5`%Yrowe6u7}Ph)OBLgrOZhWFf2or52;e_Nf&;S{AFqS>*hRcc9!*`ze$; zE2HX*zzE+$@Zw+i_Yr(IIpz#=#{%33jwQp~M*;3#N8K>DKfvvBG!Apk0dA*b*D&{5 zfZO7De~7a|$1erQbq>d{-b`rs|#>XIC_V*JPQhwl0Qdkra4!Kq+-9G*?Fg>l2ur^b z@SlJtz;3{cfc1c-00e*IcOou%EaLA%(G~vg-~UtBg1;ZX^N;bj@jGHjC;PT1MCxGT zE+r$L9|PBX;M*T2|J;5dWP1(V5SAhC^JV1N3#UWu#c*)|Tr9S~`r;8BT{9MOqbG+% zk6y%?k&I*+t}CQ^M@8_q`9q`T3Emk+=ngJO>B~Ex{J3K@&L)F9K8^hHA^33. #include QMK_KEYBOARD_H #include "jonavin.h" -bool spam_arrow; -uint16_t spam_timer = false; -uint16_t spam_interval = 1000; // (1000ms == 1s) -bool teams_muted; #ifdef TD_LSFT_CAPSLOCK_ENABLE // Tap once for shift, twice for Caps Lock but only if Win Key in not disabled @@ -108,10 +104,6 @@ void matrix_scan_user(void) { timeout_tick_timer(); matrix_scan_keymap(); #endif - if (spam_arrow && timer_elapsed(spam_timer) >= spam_interval) { - spam_timer = timer_read(); - tap_code(KC_F24); - } } @@ -261,25 +253,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { unregister_code(KC_LSFT); } return true; - - case SPAMARROW: // Moves arrow up and down - if (record->event.pressed) { - spam_arrow ^= 1; - spam_timer = timer_read(); - } - return false; - - case TEAMSMUTE: //Mute MS teams and simply change LED for key 1 colour - if (record->event.pressed) { - register_code(KC_LCTRL); - register_code(KC_LSFT); - register_code(KC_M); - unregister_code(KC_M); - unregister_code(KC_LSFT); - unregister_code(KC_LCTRL); - teams_muted ^= 1; - } - return true; default: if (record->event.pressed) { diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h b/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h index 47e1cfa42073..151fe19372b8 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h @@ -32,15 +32,13 @@ enum custom_user_layers { // KEYCODES enum custom_user_keycodes { KC_00 = SAFE_RANGE, - ENCFUNC, - KC_WINLCK, //Toggles Win key on and off - RGB_TOI, // Timeout idle time up - RGB_TOD, // Timeout idle time down - RGB_NITE, // Turns off all rgb but allow rgb indicators to work - NMR, //Move window to monitor on right - NML, //Move window to monitor on left - SPAMARROW, //Spam F24. - TEAMSMUTE //MS Teams mute shortcut and simple LED status + ENCFUNC, //Encoder functions + KC_WINLCK, //Toggles Win key on and off + RGB_TOI, //Timeout idle time up + RGB_TOD, //Timeout idle time down + RGB_NITE, //Turns off all rgb but allow rgb indicators to work + NMR, //Move window to monitor on right + NML //Move window to monitor on left }; #define KC_CAD LALT(LCTL(KC_DEL)) @@ -86,4 +84,4 @@ enum custom_user_keycodes { // OTHER FUNCTION PROTOTYPE -void activate_numlock(bool turn_on); \ No newline at end of file +void activate_numlock(bool turn_on); diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c index 58f816b8b6e0..bba76349175d 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c @@ -19,9 +19,6 @@ along with this program. If not, see . #include "rgb_matrix_map.h" #include "jonavin.h" -bool spam_arrow; -bool teams_muted; - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Ins Rotary(Mute) @@ -72,7 +69,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef RGB_MATRIX_ENABLE - // Capslock, Scroll lock and Numlock indicator on Left side lights. + // Capslock, Scroll lock and Numlock indicator on Left side lights. void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { rgb_matrix_set_color(LED_L7, RGB_GOLD); @@ -99,16 +96,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { if (keymap_config.no_gui) { rgb_matrix_set_color(LED_LWIN, RGB_RED); //light up Win key when disabled } - if(spam_arrow==1) { //Change LED colour on nav cluster to indicate on - for (uint8_t i=0; i Date: Fri, 26 Nov 2021 17:10:04 +0800 Subject: [PATCH 076/155] Add keyboards keychron_q2 series. --- keyboards/keychron/q2/chconf.h | 30 ++++ keyboards/keychron/q2/config.h | 54 ++++++ keyboards/keychron/q2/halconf.h | 26 +++ keyboards/keychron/q2/matrix.c | 139 ++++++++++++++++ keyboards/keychron/q2/mcuconf.h | 27 +++ keyboards/keychron/q2/q2.c | 33 ++++ keyboards/keychron/q2/q2.h | 29 ++++ keyboards/keychron/q2/readme.md | 19 +++ keyboards/keychron/q2/rev_0110/config.h | 21 +++ keyboards/keychron/q2/rev_0110/info.json | 82 ++++++++++ .../q2/rev_0110/keymaps/default/keymap.c | 112 +++++++++++++ .../keychron/q2/rev_0110/keymaps/via/keymap.c | 112 +++++++++++++ .../keychron/q2/rev_0110/keymaps/via/rules.mk | 2 + keyboards/keychron/q2/rev_0110/readme.md | 1 + keyboards/keychron/q2/rev_0110/rev_0110.c | 17 ++ keyboards/keychron/q2/rev_0110/rev_0110.h | 35 ++++ keyboards/keychron/q2/rev_0110/rules.mk | 37 +++++ keyboards/keychron/q2/rev_0111/config.h | 28 ++++ .../q2/rev_0111/keymaps/default/info.json | 82 ++++++++++ .../q2/rev_0111/keymaps/default/keymap.c | 112 +++++++++++++ .../q2/rev_0111/keymaps/via/info.json | 84 ++++++++++ .../keychron/q2/rev_0111/keymaps/via/keymap.c | 154 ++++++++++++++++++ .../keychron/q2/rev_0111/keymaps/via/rules.mk | 2 + keyboards/keychron/q2/rev_0111/readme.md | 5 + keyboards/keychron/q2/rev_0111/rev_0111.c | 31 ++++ keyboards/keychron/q2/rev_0111/rev_0111.h | 48 ++++++ keyboards/keychron/q2/rev_0111/rules.mk | 37 +++++ keyboards/keychron/q2/rev_0112/config.h | 21 +++ keyboards/keychron/q2/rev_0112/info.json | 83 ++++++++++ .../q2/rev_0112/keymaps/default/keymap.c | 112 +++++++++++++ .../keychron/q2/rev_0112/keymaps/via/keymap.c | 112 +++++++++++++ .../keychron/q2/rev_0112/keymaps/via/rules.mk | 2 + keyboards/keychron/q2/rev_0112/readme.md | 1 + keyboards/keychron/q2/rev_0112/rev_0112.c | 17 ++ keyboards/keychron/q2/rev_0112/rev_0112.h | 36 ++++ keyboards/keychron/q2/rev_0112/rules.mk | 37 +++++ keyboards/keychron/q2/rev_0113/config.h | 28 ++++ .../q2/rev_0113/keymaps/default/info.json | 83 ++++++++++ .../q2/rev_0113/keymaps/default/keymap.c | 112 +++++++++++++ .../q2/rev_0113/keymaps/via/info.json | 85 ++++++++++ .../keychron/q2/rev_0113/keymaps/via/keymap.c | 154 ++++++++++++++++++ .../keychron/q2/rev_0113/keymaps/via/rules.mk | 2 + keyboards/keychron/q2/rev_0113/readme.md | 5 + keyboards/keychron/q2/rev_0113/rev_0113.c | 31 ++++ keyboards/keychron/q2/rev_0113/rev_0113.h | 48 ++++++ keyboards/keychron/q2/rev_0113/rules.mk | 37 +++++ 46 files changed, 2365 insertions(+) create mode 100644 keyboards/keychron/q2/chconf.h create mode 100644 keyboards/keychron/q2/config.h create mode 100644 keyboards/keychron/q2/halconf.h create mode 100644 keyboards/keychron/q2/matrix.c create mode 100644 keyboards/keychron/q2/mcuconf.h create mode 100644 keyboards/keychron/q2/q2.c create mode 100644 keyboards/keychron/q2/q2.h create mode 100644 keyboards/keychron/q2/readme.md create mode 100644 keyboards/keychron/q2/rev_0110/config.h create mode 100644 keyboards/keychron/q2/rev_0110/info.json create mode 100644 keyboards/keychron/q2/rev_0110/keymaps/default/keymap.c create mode 100644 keyboards/keychron/q2/rev_0110/keymaps/via/keymap.c create mode 100644 keyboards/keychron/q2/rev_0110/keymaps/via/rules.mk create mode 100644 keyboards/keychron/q2/rev_0110/readme.md create mode 100644 keyboards/keychron/q2/rev_0110/rev_0110.c create mode 100644 keyboards/keychron/q2/rev_0110/rev_0110.h create mode 100644 keyboards/keychron/q2/rev_0110/rules.mk create mode 100644 keyboards/keychron/q2/rev_0111/config.h create mode 100644 keyboards/keychron/q2/rev_0111/keymaps/default/info.json create mode 100644 keyboards/keychron/q2/rev_0111/keymaps/default/keymap.c create mode 100644 keyboards/keychron/q2/rev_0111/keymaps/via/info.json create mode 100644 keyboards/keychron/q2/rev_0111/keymaps/via/keymap.c create mode 100644 keyboards/keychron/q2/rev_0111/keymaps/via/rules.mk create mode 100644 keyboards/keychron/q2/rev_0111/readme.md create mode 100644 keyboards/keychron/q2/rev_0111/rev_0111.c create mode 100644 keyboards/keychron/q2/rev_0111/rev_0111.h create mode 100644 keyboards/keychron/q2/rev_0111/rules.mk create mode 100644 keyboards/keychron/q2/rev_0112/config.h create mode 100644 keyboards/keychron/q2/rev_0112/info.json create mode 100644 keyboards/keychron/q2/rev_0112/keymaps/default/keymap.c create mode 100644 keyboards/keychron/q2/rev_0112/keymaps/via/keymap.c create mode 100644 keyboards/keychron/q2/rev_0112/keymaps/via/rules.mk create mode 100644 keyboards/keychron/q2/rev_0112/readme.md create mode 100644 keyboards/keychron/q2/rev_0112/rev_0112.c create mode 100644 keyboards/keychron/q2/rev_0112/rev_0112.h create mode 100644 keyboards/keychron/q2/rev_0112/rules.mk create mode 100644 keyboards/keychron/q2/rev_0113/config.h create mode 100644 keyboards/keychron/q2/rev_0113/keymaps/default/info.json create mode 100644 keyboards/keychron/q2/rev_0113/keymaps/default/keymap.c create mode 100644 keyboards/keychron/q2/rev_0113/keymaps/via/info.json create mode 100644 keyboards/keychron/q2/rev_0113/keymaps/via/keymap.c create mode 100644 keyboards/keychron/q2/rev_0113/keymaps/via/rules.mk create mode 100644 keyboards/keychron/q2/rev_0113/readme.md create mode 100644 keyboards/keychron/q2/rev_0113/rev_0113.c create mode 100644 keyboards/keychron/q2/rev_0113/rev_0113.h create mode 100644 keyboards/keychron/q2/rev_0113/rules.mk diff --git a/keyboards/keychron/q2/chconf.h b/keyboards/keychron/q2/chconf.h new file mode 100644 index 000000000000..a331fdef3751 --- /dev/null +++ b/keyboards/keychron/q2/chconf.h @@ -0,0 +1,30 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/acheron/arctic/chconf.h -r platforms/chibios/common/configs/chconf.h` + */ + +#pragma once + +#define CH_CFG_ST_FREQUENCY 10000 + +#define CH_CFG_OPTIMIZE_SPEED FALSE + +#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE + +#include_next \ No newline at end of file diff --git a/keyboards/keychron/q2/config.h b/keyboards/keychron/q2/config.h new file mode 100644 index 000000000000..263be4684fad --- /dev/null +++ b/keyboards/keychron/q2/config.h @@ -0,0 +1,54 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x3434 +#define MANUFACTURER Keychron +#define PRODUCT Keychron Q2 + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { B4, B3, A15, A14, A13 } +#define MATRIX_COL_PINS { C14, C15, A0, A1, A2, A3, A4, A5, A6, A7, B0, B1, A8, A9, H3 } + +/* DIP switch */ +#define DIP_SWITCH_MATRIX_GRID { {4, 4} } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION ROW2COL + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Disable DIP switch in matrix data */ +#define MATRIX_MASKED + +/* NKRO */ +#define FORCE_NKRO + +/* turn off effects when suspended */ +#define RGB_DISABLE_WHEN_USB_SUSPENDED + +/* Use 5 dynamic keymap layers */ +#define DYNAMIC_KEYMAP_LAYER_COUNT 5 + +/* EEPROM Driver Configuration */ +#define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10100010 diff --git a/keyboards/keychron/q2/halconf.h b/keyboards/keychron/q2/halconf.h new file mode 100644 index 000000000000..a9304b85927c --- /dev/null +++ b/keyboards/keychron/q2/halconf.h @@ -0,0 +1,26 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/nk65/halconf.h -r platforms/chibios/QMK_PROTON_C/configs/halconf.h` + */ + +#pragma once + +#define HAL_USE_I2C TRUE + +#include_next \ No newline at end of file diff --git a/keyboards/keychron/q2/matrix.c b/keyboards/keychron/q2/matrix.c new file mode 100644 index 000000000000..1e493d33e2f5 --- /dev/null +++ b/keyboards/keychron/q2/matrix.c @@ -0,0 +1,139 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include +#include +#include +#include "util.h" +#include "matrix.h" +#include "debounce.h" +#include "quantum.h" + +#ifdef MATRIX_ROW_PINS +static pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; +#endif // MATRIX_ROW_PINS +#ifdef MATRIX_COL_PINS +static pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; +#endif // MATRIX_COL_PINS + +#define ROWS_PER_HAND (MATRIX_ROWS) + +/* matrix state(1:on, 0:off) */ +extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values +extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values + +static inline void setPinOutput_writeLow(pin_t pin) { + ATOMIC_BLOCK_FORCEON { + setPinOutput(pin); + writePinLow(pin); + } +} + +static inline void setPinOutput_writeHigh(pin_t pin) { + ATOMIC_BLOCK_FORCEON { + setPinOutput(pin); + writePinHigh(pin); + } +} + +static inline void setPinInputHigh_atomic(pin_t pin) { + ATOMIC_BLOCK_FORCEON { setPinInputHigh(pin); } +} + +static inline uint8_t readMatrixPin(pin_t pin) { + if (pin != NO_PIN) { + return readPin(pin); + } else { + return 1; + } +} + +static bool select_col(uint8_t col) { + pin_t pin = col_pins[col]; + if (pin != NO_PIN) { + setPinOutput_writeLow(pin); + return true; + } + return false; +} + +static void unselect_col(uint8_t col) { + pin_t pin = col_pins[col]; + if (pin != NO_PIN) { + setPinOutput_writeHigh(pin); + } +} + +static void unselect_cols(void) { + for (uint8_t x = 0; x < MATRIX_COLS; x++) { + unselect_col(x); + } +} + +void matrix_init_pins(void) { + unselect_cols(); + for (uint8_t x = 0; x < ROWS_PER_HAND; x++) { + if (row_pins[x] != NO_PIN) { + setPinInputHigh_atomic(row_pins[x]); + } + } +} + +void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) { + bool key_pressed = false; + + // Select col + if (!select_col(current_col)) { // select col + return; // skip NO_PIN col + } + matrix_output_select_delay(); + + // For each row... + for (uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++) { + // Check row pin state + if (readMatrixPin(row_pins[row_index]) == 0) { + // Pin LO, set col bit + current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col); + key_pressed = true; + } else { + // Pin HI, clear col bit + current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col); + } + } + + // Unselect col + unselect_col(current_col); + matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH +} + +void matrix_init_custom(void) { + // initialize key pins + matrix_init_pins(); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + matrix_row_t curr_matrix[MATRIX_ROWS] = {0}; + + // Set col, read rows + for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { + matrix_read_rows_on_col(curr_matrix, current_col); + } + + bool changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0; + if (changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix)); + + return (uint8_t)changed; +} diff --git a/keyboards/keychron/q2/mcuconf.h b/keyboards/keychron/q2/mcuconf.h new file mode 100644 index 000000000000..6ab916aea1c3 --- /dev/null +++ b/keyboards/keychron/q2/mcuconf.h @@ -0,0 +1,27 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/acheron/arctic/mcuconf.h -r platforms/chibios/GENERIC_STM32_F072XB/configs/mcuconf.h` + */ + +#pragma once + +#include_next + +#undef STM32_I2C_USE_I2C1 +#define STM32_I2C_USE_I2C1 TRUE \ No newline at end of file diff --git a/keyboards/keychron/q2/q2.c b/keyboards/keychron/q2/q2.c new file mode 100644 index 000000000000..03d1ee7db57d --- /dev/null +++ b/keyboards/keychron/q2/q2.c @@ -0,0 +1,33 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include "q2.h" + +const matrix_row_t matrix_mask[] = { + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111101111, +}; + +bool dip_switch_update_kb(uint8_t index, bool active) { + if (!dip_switch_update_user(index, active)) { return false;} + if (index == 0) { + default_layer_set(1UL << (active ? 1 : 0)); + } + return true; +} diff --git a/keyboards/keychron/q2/q2.h b/keyboards/keychron/q2/q2.h new file mode 100644 index 000000000000..22bd1afe8ee0 --- /dev/null +++ b/keyboards/keychron/q2/q2.h @@ -0,0 +1,29 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#if defined(KEYBOARD_keychron_q2_rev_0110) +# include "rev_0110.h" +#elif defined(KEYBOARD_keychron_q2_rev_0111) +# include "rev_0111.h" +#elif defined(KEYBOARD_keychron_q2_rev_0112) +# include "rev_0112.h" +#elif defined(KEYBOARD_keychron_q2_rev_0113) +# include "rev_0113.h" +#endif diff --git a/keyboards/keychron/q2/readme.md b/keyboards/keychron/q2/readme.md new file mode 100644 index 000000000000..bdceb98d4864 --- /dev/null +++ b/keyboards/keychron/q2/readme.md @@ -0,0 +1,19 @@ +# Keychron Q2 + +A customizable 65% keyboard. + +* Keyboard Maintainer: [Keychron](https://github.com/keychron) +* Hardware Supported: Keychron Q2 +* Hardware Availability: [Keychron](https://www.keychron.com) + +Make example for this keyboard (after setting up your build environment): + + make keychron/q2/rev_0110:default + +Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid)) + + make keychron/q2/rev_0110:default:flash + +**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard. + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/keychron/q2/rev_0110/config.h b/keyboards/keychron/q2/rev_0110/config.h new file mode 100644 index 000000000000..d9fc5c17446c --- /dev/null +++ b/keyboards/keychron/q2/rev_0110/config.h @@ -0,0 +1,21 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x0110 +#define DEVICE_VER 0x0100 diff --git a/keyboards/keychron/q2/rev_0110/info.json b/keyboards/keychron/q2/rev_0110/info.json new file mode 100644 index 000000000000..caf3ebf7c95e --- /dev/null +++ b/keyboards/keychron/q2/rev_0110/info.json @@ -0,0 +1,82 @@ +{ + "keyboard_name": "Keychron Q2", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_ansi_67": { + "layout": [ + {"label":"Insert", "x":15.25, "y":0}, + + {"label":"Esc", "x":0, "y":0.25}, + {"label":"!", "x":1, "y":0.25}, + {"label":"@", "x":2, "y":0.25}, + {"label":"", "x":3, "y":0.25}, + {"label":"$", "x":4, "y":0.25}, + {"label":"%", "x":5, "y":0.25}, + {"label":"^", "x":6, "y":0.25}, + {"label":"&", "x":7, "y":0.25}, + {"label":"*", "x":8, "y":0.25}, + {"label":"(", "x":9, "y":0.25}, + {"label":")", "x":10, "y":0.25}, + {"label":"_", "x":11, "y":0.25}, + {"label":"+", "x":12, "y":0.25}, + {"label":"Backspace", "x":13, "y":0.25, "w":2}, + + {"label":"Tab", "x":0, "y":1.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":1.25}, + {"label":"W", "x":2.5, "y":1.25}, + {"label":"E", "x":3.5, "y":1.25}, + {"label":"R", "x":4.5, "y":1.25}, + {"label":"T", "x":5.5, "y":1.25}, + {"label":"Y", "x":6.5, "y":1.25}, + {"label":"U", "x":7.5, "y":1.25}, + {"label":"I", "x":8.5, "y":1.25}, + {"label":"O", "x":9.5, "y":1.25}, + {"label":"P", "x":10.5, "y":1.25}, + {"label":"{", "x":11.5, "y":1.25}, + {"label":"}", "x":12.5, "y":1.25}, + {"label":"|", "x":13.5, "y":1.25, "w":1.5}, + {"label":"Delete", "x":15.25, "y":1.25}, + + {"label":"Caps Lock", "x":0, "y":2.25, "w":1.75}, + {"label":"A", "x":1.75, "y":2.25}, + {"label":"S", "x":2.75, "y":2.25}, + {"label":"D", "x":3.75, "y":2.25}, + {"label":"F", "x":4.75, "y":2.25}, + {"label":"G", "x":5.75, "y":2.25}, + {"label":"H", "x":6.75, "y":2.25}, + {"label":"J", "x":7.75, "y":2.25}, + {"label":"K", "x":8.75, "y":2.25}, + {"label":"L", "x":9.75, "y":2.25}, + {"label":":", "x":10.75, "y":2.25}, + {"label":"\"", "x":11.75, "y":2.25}, + {"label":"Enter", "x":12.75, "y":2.25, "w":2.25}, + {"label":"Home", "x":15.25, "y":2.25}, + + {"label":"Shift", "x":0, "y":3.25, "w":2.25}, + {"label":"Z", "x":2.25, "y":3.25}, + {"label":"X", "x":3.25, "y":3.25}, + {"label":"C", "x":4.25, "y":3.25}, + {"label":"V", "x":5.25, "y":3.25}, + {"label":"B", "x":6.25, "y":3.25}, + {"label":"N", "x":7.25, "y":3.25}, + {"label":"M", "x":8.25, "y":3.25}, + {"label":"<", "x":9.25, "y":3.25}, + {"label":">", "x":10.25, "y":3.25}, + {"label":"?", "x":11.25, "y":3.25}, + {"label":"Shift", "x":12.25, "y":3.25, "w":1.75}, + {"label":"Up", "x":14.25, "y":3.5}, + + {"label":"Ctrl", "x":0, "y":4.25, "w":1.25}, + {"label":"Win", "x":1.25, "y":4.25, "w":1.25}, + {"label":"Alt", "x":2.5, "y":4.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":4.25, "w":6.25}, + {"label":"Alt", "x":10, "y":4.25}, + {"label":"Fn1", "x":11, "y":4.25}, + {"label":"Fn2", "x":12, "y":4.25}, + {"label":"Left", "x":13.25, "y":4.5}, + {"label":"Down", "x":14.25, "y":4.5}, + {"label":"Right", "x":15.25, "y":4.5} ] + } + } +} diff --git a/keyboards/keychron/q2/rev_0110/keymaps/default/keymap.c b/keyboards/keychron/q2/rev_0110/keymaps/default/keymap.c new file mode 100644 index 000000000000..7242d748a31f --- /dev/null +++ b/keyboards/keychron/q2/rev_0110/keymaps/default/keymap.c @@ -0,0 +1,112 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + WIN_BASE, + _FN1, + _FN2, + _FN3 +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_LAUNCHPAD, + KC_TASK, + KC_FLXP +}; + +#define KC_WAVE S(KC_GRV) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_67( + 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_INS, + 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_HOME, + 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_UP, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_BASE] = LAYOUT_ansi_67( + 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_INS, + 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_HOME, + 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_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT_ansi_67( + KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN2] = LAYOUT_ansi_67( + KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN3] = LAYOUT_ansi_67( + KC_WAVE, 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_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_TASK: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_TAB); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_TAB); + } + return false; // Skip all further processing of this key + case KC_FLXP: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_E); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_E); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q2/rev_0110/keymaps/via/keymap.c b/keyboards/keychron/q2/rev_0110/keymaps/via/keymap.c new file mode 100644 index 000000000000..b23c92e95ea8 --- /dev/null +++ b/keyboards/keychron/q2/rev_0110/keymaps/via/keymap.c @@ -0,0 +1,112 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + WIN_BASE, + _FN1, + _FN2, + _FN3 +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = USER00, + KC_LAUNCHPAD, + KC_TASK, + KC_FLXP +}; + +#define KC_WAVE S(KC_GRV) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_67( + 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_INS, + 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_HOME, + 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_UP, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_BASE] = LAYOUT_ansi_67( + 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_INS, + 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_HOME, + 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_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT_ansi_67( + KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN2] = LAYOUT_ansi_67( + KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN3] = LAYOUT_ansi_67( + KC_WAVE, 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_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_TASK: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_TAB); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_TAB); + } + return false; // Skip all further processing of this key + case KC_FLXP: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_E); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_E); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q2/rev_0110/keymaps/via/rules.mk b/keyboards/keychron/q2/rev_0110/keymaps/via/rules.mk new file mode 100644 index 000000000000..bee21da5283a --- /dev/null +++ b/keyboards/keychron/q2/rev_0110/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +MOUSEKEY_ENABLE = no \ No newline at end of file diff --git a/keyboards/keychron/q2/rev_0110/readme.md b/keyboards/keychron/q2/rev_0110/readme.md new file mode 100644 index 000000000000..d3134cedb504 --- /dev/null +++ b/keyboards/keychron/q2/rev_0110/readme.md @@ -0,0 +1 @@ +# The ANSI variant of the Keychron Q2 diff --git a/keyboards/keychron/q2/rev_0110/rev_0110.c b/keyboards/keychron/q2/rev_0110/rev_0110.c new file mode 100644 index 000000000000..d91a41fca181 --- /dev/null +++ b/keyboards/keychron/q2/rev_0110/rev_0110.c @@ -0,0 +1,17 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include "quantum.h" diff --git a/keyboards/keychron/q2/rev_0110/rev_0110.h b/keyboards/keychron/q2/rev_0110/rev_0110.h new file mode 100644 index 000000000000..669a79d31028 --- /dev/null +++ b/keyboards/keychron/q2/rev_0110/rev_0110.h @@ -0,0 +1,35 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#define XXX KC_NO + +#define LAYOUT_ansi_67( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E,\ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E,\ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E,\ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \ + K40, K41, K42, K46, K4A, K4B, K4C, K4D, K2C, K4E \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, }, \ + { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, }, \ + { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D, K4E, } \ +} diff --git a/keyboards/keychron/q2/rev_0110/rules.mk b/keyboards/keychron/q2/rev_0110/rules.mk new file mode 100644 index 000000000000..65fea2d973d2 --- /dev/null +++ b/keyboards/keychron/q2/rev_0110/rules.mk @@ -0,0 +1,37 @@ +# MCU name +# MCU = STM32L432 +MCU = cortex-m4 +ARMV = 7 +MCU_FAMILY = STM32 +MCU_SERIES = STM32L4xx +MCU_LDSCRIPT = STM32L432xC +MCU_STARTUP = stm32l4xx +BOARD = GENERIC_STM32_L433XC +PLATFORM_NAME = platform_l432 + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = no # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = no # Enable Encoder +DIP_SWITCH_ENABLE = yes +EEPROM_DRIVER = i2c + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +# custom matrix setup +CUSTOM_MATRIX = lite + +SRC += matrix.c diff --git a/keyboards/keychron/q2/rev_0111/config.h b/keyboards/keychron/q2/rev_0111/config.h new file mode 100644 index 000000000000..cc50d0688a1c --- /dev/null +++ b/keyboards/keychron/q2/rev_0111/config.h @@ -0,0 +1,28 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x0111 +#define DEVICE_VER 0x0100 + +/* Encoder used pins */ +#define ENCODERS_PAD_A { A10 } +#define ENCODERS_PAD_B { B5 } + +/* Specifies the number of pulses the encoder registers between each detent */ +#define ENCODER_RESOLUTION 2 diff --git a/keyboards/keychron/q2/rev_0111/keymaps/default/info.json b/keyboards/keychron/q2/rev_0111/keymaps/default/info.json new file mode 100644 index 000000000000..590ed6d115c0 --- /dev/null +++ b/keyboards/keychron/q2/rev_0111/keymaps/default/info.json @@ -0,0 +1,82 @@ +{ + "keyboard_name": "Keychron Q2", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_ansi_": { + "layout": [ + {"label":"Mute", "x":15.25, "y":0}, + + {"label":"Esc", "x":0, "y":0.25}, + {"label":"!", "x":1, "y":0.25}, + {"label":"@", "x":2, "y":0.25}, + {"label":"", "x":3, "y":0.25}, + {"label":"$", "x":4, "y":0.25}, + {"label":"%", "x":5, "y":0.25}, + {"label":"^", "x":6, "y":0.25}, + {"label":"&", "x":7, "y":0.25}, + {"label":"*", "x":8, "y":0.25}, + {"label":"(", "x":9, "y":0.25}, + {"label":")", "x":10, "y":0.25}, + {"label":"_", "x":11, "y":0.25}, + {"label":"+", "x":12, "y":0.25}, + {"label":"Backspace", "x":13, "y":0.25, "w":2}, + + {"label":"Tab", "x":0, "y":1.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":1.25}, + {"label":"W", "x":2.5, "y":1.25}, + {"label":"E", "x":3.5, "y":1.25}, + {"label":"R", "x":4.5, "y":1.25}, + {"label":"T", "x":5.5, "y":1.25}, + {"label":"Y", "x":6.5, "y":1.25}, + {"label":"U", "x":7.5, "y":1.25}, + {"label":"I", "x":8.5, "y":1.25}, + {"label":"O", "x":9.5, "y":1.25}, + {"label":"P", "x":10.5, "y":1.25}, + {"label":"{", "x":11.5, "y":1.25}, + {"label":"}", "x":12.5, "y":1.25}, + {"label":"|", "x":13.5, "y":1.25, "w":1.5}, + {"label":"Delete", "x":15.25, "y":1.25}, + + {"label":"Caps Lock", "x":0, "y":2.25, "w":1.75}, + {"label":"A", "x":1.75, "y":2.25}, + {"label":"S", "x":2.75, "y":2.25}, + {"label":"D", "x":3.75, "y":2.25}, + {"label":"F", "x":4.75, "y":2.25}, + {"label":"G", "x":5.75, "y":2.25}, + {"label":"H", "x":6.75, "y":2.25}, + {"label":"J", "x":7.75, "y":2.25}, + {"label":"K", "x":8.75, "y":2.25}, + {"label":"L", "x":9.75, "y":2.25}, + {"label":":", "x":10.75, "y":2.25}, + {"label":"\"", "x":11.75, "y":2.25}, + {"label":"Enter", "x":12.75, "y":2.25, "w":2.25}, + {"label":"Home", "x":15.25, "y":2.25}, + + {"label":"Shift", "x":0, "y":3.25, "w":2.25}, + {"label":"Z", "x":2.25, "y":3.25}, + {"label":"X", "x":3.25, "y":3.25}, + {"label":"C", "x":4.25, "y":3.25}, + {"label":"V", "x":5.25, "y":3.25}, + {"label":"B", "x":6.25, "y":3.25}, + {"label":"N", "x":7.25, "y":3.25}, + {"label":"M", "x":8.25, "y":3.25}, + {"label":"<", "x":9.25, "y":3.25}, + {"label":">", "x":10.25, "y":3.25}, + {"label":"?", "x":11.25, "y":3.25}, + {"label":"Shift", "x":12.25, "y":3.25, "w":1.75}, + {"label":"Up", "x":14.25, "y":3.5}, + + {"label":"Ctrl", "x":0, "y":4.25, "w":1.25}, + {"label":"Win", "x":1.25, "y":4.25, "w":1.25}, + {"label":"Alt", "x":2.5, "y":4.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":4.25, "w":6.25}, + {"label":"Alt", "x":10, "y":4.25}, + {"label":"Fn1", "x":11, "y":4.25}, + {"label":"Fn2", "x":12, "y":4.25}, + {"label":"Left", "x":13.25, "y":4.5}, + {"label":"Down", "x":14.25, "y":4.5}, + {"label":"Right", "x":15.25, "y":4.5} ] + } + } +} diff --git a/keyboards/keychron/q2/rev_0111/keymaps/default/keymap.c b/keyboards/keychron/q2/rev_0111/keymaps/default/keymap.c new file mode 100644 index 000000000000..bd401f3d1022 --- /dev/null +++ b/keyboards/keychron/q2/rev_0111/keymaps/default/keymap.c @@ -0,0 +1,112 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + WIN_BASE, + _FN1, + _FN2, + _FN3 +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_LAUNCHPAD, + KC_TASK, + KC_FLXP +}; + +#define KC_WAVE S(KC_GRV) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_67( + 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_MUTE, + 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_HOME, + 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_UP, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_BASE] = LAYOUT_ansi_67( + 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_MUTE, + 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_HOME, + 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_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT_ansi_67( + KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN2] = LAYOUT_ansi_67( + KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN3] = LAYOUT_ansi_67( + KC_WAVE, 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_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_TASK: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_TAB); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_TAB); + } + return false; // Skip all further processing of this key + case KC_FLXP: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_E); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_E); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q2/rev_0111/keymaps/via/info.json b/keyboards/keychron/q2/rev_0111/keymaps/via/info.json new file mode 100644 index 000000000000..0e2ad8463fe4 --- /dev/null +++ b/keyboards/keychron/q2/rev_0111/keymaps/via/info.json @@ -0,0 +1,84 @@ +{ + "keyboard_name": "Keychron Q2", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_ansi_": { + "layout": [ + {"label":"Mute", "x":15.25, "y":0, "w":0.75}, + {"label":"Vol-", "x":16, "y":0, "w":0.75, "h":0.5}, + {"label":"Vol+", "x":16, "y":0.5, "w":0.75, "h":0.5}, + + {"label":"Esc", "x":0, "y":0.25}, + {"label":"!", "x":1, "y":0.25}, + {"label":"@", "x":2, "y":0.25}, + {"label":"", "x":3, "y":0.25}, + {"label":"$", "x":4, "y":0.25}, + {"label":"%", "x":5, "y":0.25}, + {"label":"^", "x":6, "y":0.25}, + {"label":"&", "x":7, "y":0.25}, + {"label":"*", "x":8, "y":0.25}, + {"label":"(", "x":9, "y":0.25}, + {"label":")", "x":10, "y":0.25}, + {"label":"_", "x":11, "y":0.25}, + {"label":"+", "x":12, "y":0.25}, + {"label":"Backspace", "x":13, "y":0.25, "w":2}, + + {"label":"Tab", "x":0, "y":1.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":1.25}, + {"label":"W", "x":2.5, "y":1.25}, + {"label":"E", "x":3.5, "y":1.25}, + {"label":"R", "x":4.5, "y":1.25}, + {"label":"T", "x":5.5, "y":1.25}, + {"label":"Y", "x":6.5, "y":1.25}, + {"label":"U", "x":7.5, "y":1.25}, + {"label":"I", "x":8.5, "y":1.25}, + {"label":"O", "x":9.5, "y":1.25}, + {"label":"P", "x":10.5, "y":1.25}, + {"label":"{", "x":11.5, "y":1.25}, + {"label":"}", "x":12.5, "y":1.25}, + {"label":"|", "x":13.5, "y":1.25, "w":1.5}, + {"label":"Delete", "x":15.25, "y":1.25}, + + {"label":"Caps Lock", "x":0, "y":2.25, "w":1.75}, + {"label":"A", "x":1.75, "y":2.25}, + {"label":"S", "x":2.75, "y":2.25}, + {"label":"D", "x":3.75, "y":2.25}, + {"label":"F", "x":4.75, "y":2.25}, + {"label":"G", "x":5.75, "y":2.25}, + {"label":"H", "x":6.75, "y":2.25}, + {"label":"J", "x":7.75, "y":2.25}, + {"label":"K", "x":8.75, "y":2.25}, + {"label":"L", "x":9.75, "y":2.25}, + {"label":":", "x":10.75, "y":2.25}, + {"label":"\"", "x":11.75, "y":2.25}, + {"label":"Enter", "x":12.75, "y":2.25, "w":2.25}, + {"label":"Home", "x":15.25, "y":2.25}, + + {"label":"Shift", "x":0, "y":3.25, "w":2.25}, + {"label":"Z", "x":2.25, "y":3.25}, + {"label":"X", "x":3.25, "y":3.25}, + {"label":"C", "x":4.25, "y":3.25}, + {"label":"V", "x":5.25, "y":3.25}, + {"label":"B", "x":6.25, "y":3.25}, + {"label":"N", "x":7.25, "y":3.25}, + {"label":"M", "x":8.25, "y":3.25}, + {"label":"<", "x":9.25, "y":3.25}, + {"label":">", "x":10.25, "y":3.25}, + {"label":"?", "x":11.25, "y":3.25}, + {"label":"Shift", "x":12.25, "y":3.25, "w":1.75}, + {"label":"Up", "x":14.25, "y":3.5}, + + {"label":"Ctrl", "x":0, "y":4.25, "w":1.25}, + {"label":"Win", "x":1.25, "y":4.25, "w":1.25}, + {"label":"Alt", "x":2.5, "y":4.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":4.25, "w":6.25}, + {"label":"Alt", "x":10, "y":4.25}, + {"label":"Fn1", "x":11, "y":4.25}, + {"label":"Fn2", "x":12, "y":4.25}, + {"label":"Left", "x":13.25, "y":4.5}, + {"label":"Down", "x":14.25, "y":4.5}, + {"label":"Right", "x":15.25, "y":4.5} ] + } + } +} diff --git a/keyboards/keychron/q2/rev_0111/keymaps/via/keymap.c b/keyboards/keychron/q2/rev_0111/keymaps/via/keymap.c new file mode 100644 index 000000000000..15cdbb027eee --- /dev/null +++ b/keyboards/keychron/q2/rev_0111/keymaps/via/keymap.c @@ -0,0 +1,154 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + WIN_BASE, + _FN1, + _FN2, + _FN3 +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = USER00, + KC_LAUNCHPAD, + KC_TASK, + KC_FLXP +}; + +#define KC_WAVE S(KC_GRV) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_all( + 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_MUTE, + 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_HOME, + 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_UP, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_VOLD, KC_VOLU, KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_BASE] = LAYOUT_all( + 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_MUTE, + 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_HOME, + 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_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_VOLD, KC_VOLU, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT_all( + KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN2] = LAYOUT_all( + KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN3] = LAYOUT_all( + KC_WAVE, 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_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) +}; + +#if defined(VIA_ENABLE) && defined(ENCODER_ENABLE) + +#define ENCODERS 1 +static uint8_t encoder_state[ENCODERS] = {0}; +static keypos_t encoder_cw[ENCODERS] = {{ 8, 4 }}; +static keypos_t encoder_ccw[ENCODERS] = {{ 7, 4 }}; + +void encoder_action_register(uint8_t index, bool clockwise) { + keyevent_t encoder_event = (keyevent_t) { + .key = clockwise ? encoder_cw[index] : encoder_ccw[index], + .pressed = true, + .time = (timer_read() | 1) + }; + encoder_state[index] = (clockwise ^ 1) | (clockwise << 1); + action_exec(encoder_event); +} + +void encoder_action_unregister(void) { + for (int index = 0; index < ENCODERS; ++index) { + if (encoder_state[index]) { + keyevent_t encoder_event = (keyevent_t) { + .key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], + .pressed = false, + .time = (timer_read() | 1) + }; + encoder_state[index] = 0; + action_exec(encoder_event); + } + } +} + +void matrix_scan_user(void) { + encoder_action_unregister(); +} + +bool encoder_update_user(uint8_t index, bool clockwise) { + encoder_action_register(index, clockwise); + return false; +}; + +#endif + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_TASK: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_TAB); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_TAB); + } + return false; // Skip all further processing of this key + case KC_FLXP: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_E); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_E); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q2/rev_0111/keymaps/via/rules.mk b/keyboards/keychron/q2/rev_0111/keymaps/via/rules.mk new file mode 100644 index 000000000000..bee21da5283a --- /dev/null +++ b/keyboards/keychron/q2/rev_0111/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +MOUSEKEY_ENABLE = no \ No newline at end of file diff --git a/keyboards/keychron/q2/rev_0111/readme.md b/keyboards/keychron/q2/rev_0111/readme.md new file mode 100644 index 000000000000..2bb5d3bca8a7 --- /dev/null +++ b/keyboards/keychron/q2/rev_0111/readme.md @@ -0,0 +1,5 @@ +# The ANSI variant of the Keychron Q2 and support encoder + +- Enable EC11 rotary encoder +- Turn colckwise to increase volume and turn anti-colckwise to decrease volume +- Press top right key pushbutton to mute diff --git a/keyboards/keychron/q2/rev_0111/rev_0111.c b/keyboards/keychron/q2/rev_0111/rev_0111.c new file mode 100644 index 000000000000..c9413d023d0a --- /dev/null +++ b/keyboards/keychron/q2/rev_0111/rev_0111.c @@ -0,0 +1,31 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include "quantum.h" + +#ifdef ENCODER_ENABLE +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { return false; } + if (index == 0) { + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + } + return true; +} +#endif diff --git a/keyboards/keychron/q2/rev_0111/rev_0111.h b/keyboards/keychron/q2/rev_0111/rev_0111.h new file mode 100644 index 000000000000..0b1cfade1be1 --- /dev/null +++ b/keyboards/keychron/q2/rev_0111/rev_0111.h @@ -0,0 +1,48 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#define XXX KC_NO + +#define LAYOUT_all( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E,\ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E,\ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E,\ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \ + K40, K41, K42, K46, K47, K48, K4A, K4B, K4C, K4D, K2C, K4E \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, }, \ + { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, }, \ + { K40, K41, K42, XXX, XXX, XXX, K46, K47, K48, XXX, K4A, K4B, K4C, K4D, K4E, } \ +} +#define LAYOUT_ansi_67( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E,\ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E,\ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E,\ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \ + K40, K41, K42, K46, K4A, K4B, K4C, K4D, K2C, K4E \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, }, \ + { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, }, \ + { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D, K4E, } \ +} diff --git a/keyboards/keychron/q2/rev_0111/rules.mk b/keyboards/keychron/q2/rev_0111/rules.mk new file mode 100644 index 000000000000..0e54373d5db6 --- /dev/null +++ b/keyboards/keychron/q2/rev_0111/rules.mk @@ -0,0 +1,37 @@ +# MCU name +# MCU = STM32L432 +MCU = cortex-m4 +ARMV = 7 +MCU_FAMILY = STM32 +MCU_SERIES = STM32L4xx +MCU_LDSCRIPT = STM32L432xC +MCU_STARTUP = stm32l4xx +BOARD = GENERIC_STM32_L433XC +PLATFORM_NAME = platform_l432 + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = no # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = yes # Enable Encoder +DIP_SWITCH_ENABLE = yes +EEPROM_DRIVER = i2c + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +# custom matrix setup +CUSTOM_MATRIX = lite + +SRC += matrix.c diff --git a/keyboards/keychron/q2/rev_0112/config.h b/keyboards/keychron/q2/rev_0112/config.h new file mode 100644 index 000000000000..b76640d65095 --- /dev/null +++ b/keyboards/keychron/q2/rev_0112/config.h @@ -0,0 +1,21 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x0112 +#define DEVICE_VER 0x0100 diff --git a/keyboards/keychron/q2/rev_0112/info.json b/keyboards/keychron/q2/rev_0112/info.json new file mode 100644 index 000000000000..83a7addfeb9f --- /dev/null +++ b/keyboards/keychron/q2/rev_0112/info.json @@ -0,0 +1,83 @@ +{ + "keyboard_name": "Keychron Q2", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_iso_68": { + "layout": [ + {"label":"Insert", "x":15.25, "y":0}, + + {"label":"Esc", "x":0, "y":0.25}, + {"label":"!", "x":1, "y":0.25}, + {"label":"@", "x":2, "y":0.25}, + {"label":"", "x":3, "y":0.25}, + {"label":"$", "x":4, "y":0.25}, + {"label":"%", "x":5, "y":0.25}, + {"label":"^", "x":6, "y":0.25}, + {"label":"&", "x":7, "y":0.25}, + {"label":"*", "x":8, "y":0.25}, + {"label":"(", "x":9, "y":0.25}, + {"label":")", "x":10, "y":0.25}, + {"label":"_", "x":11, "y":0.25}, + {"label":"+", "x":12, "y":0.25}, + {"label":"Backspace", "x":13, "y":0.25, "w":2}, + + {"label":"Tab", "x":0, "y":1.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":1.25}, + {"label":"W", "x":2.5, "y":1.25}, + {"label":"E", "x":3.5, "y":1.25}, + {"label":"R", "x":4.5, "y":1.25}, + {"label":"T", "x":5.5, "y":1.25}, + {"label":"Y", "x":6.5, "y":1.25}, + {"label":"U", "x":7.5, "y":1.25}, + {"label":"I", "x":8.5, "y":1.25}, + {"label":"O", "x":9.5, "y":1.25}, + {"label":"P", "x":10.5, "y":1.25}, + {"label":"{", "x":11.5, "y":1.25}, + {"label":"}", "x":12.5, "y":1.25}, + {"label":"Delete", "x":15.25, "y":1.25}, + + {"label":"Caps Lock", "x":0, "y":2.25, "w":1.75}, + {"label":"A", "x":1.75, "y":2.25}, + {"label":"S", "x":2.75, "y":2.25}, + {"label":"D", "x":3.75, "y":2.25}, + {"label":"F", "x":4.75, "y":2.25}, + {"label":"G", "x":5.75, "y":2.25}, + {"label":"H", "x":6.75, "y":2.25}, + {"label":"J", "x":7.75, "y":2.25}, + {"label":"K", "x":8.75, "y":2.25}, + {"label":"L", "x":9.75, "y":2.25}, + {"label":":", "x":10.75, "y":2.25}, + {"label":"\"", "x":11.75, "y":2.25}, + {"label":"#~", "x":12.75, "y":2.25}, + {"label":"Enter", "x":13.75, "y":2.25, "w":1.25} + {"label":"Home", "x":15.25, "y":2.25}, + + {"label":"Shift", "x":0, "y":3.25, "w":1.25}, + {"label":"|", "x":1.25, "y":3.25}, + {"label":"Z", "x":2.25, "y":3.25}, + {"label":"X", "x":3.25, "y":3.25}, + {"label":"C", "x":4.25, "y":3.25}, + {"label":"V", "x":5.25, "y":3.25}, + {"label":"B", "x":6.25, "y":3.25}, + {"label":"N", "x":7.25, "y":3.25}, + {"label":"M", "x":8.25, "y":3.25}, + {"label":"<", "x":9.25, "y":3.25}, + {"label":">", "x":10.25, "y":3.25}, + {"label":"?", "x":11.25, "y":3.25}, + {"label":"Shift", "x":12.25, "y":3.25, "w":1.75}, + {"label":"Up", "x":14.25, "y":3.5}, + + {"label":"Ctrl", "x":0, "y":4.25, "w":1.25}, + {"label":"Win", "x":1.25, "y":4.25, "w":1.25}, + {"label":"Alt", "x":2.5, "y":4.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":4.25, "w":6.25}, + {"label":"Alt", "x":10, "y":4.25}, + {"label":"Fn1", "x":11, "y":4.25}, + {"label":"Fn2", "x":12, "y":4.25}, + {"label":"Left", "x":13.25, "y":4.5}, + {"label":"Down", "x":14.25, "y":4.5}, + {"label":"Right", "x":15.25, "y":4.5} ] + } + } +} diff --git a/keyboards/keychron/q2/rev_0112/keymaps/default/keymap.c b/keyboards/keychron/q2/rev_0112/keymaps/default/keymap.c new file mode 100644 index 000000000000..bee759f3889e --- /dev/null +++ b/keyboards/keychron/q2/rev_0112/keymaps/default/keymap.c @@ -0,0 +1,112 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + WIN_BASE, + _FN1, + _FN2, + _FN3 +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_LAUNCHPAD, + KC_TASK, + KC_FLXP +}; + +#define KC_WAVE S(KC_GRV) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_iso_68( + KC_ESC, KC_1, KC_2, KC_F3, KC_F4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, + 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_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_NUHS, KC_ENT, KC_HOME, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_BASE] = LAYOUT_iso_68( + 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_INS, + 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_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_NUHS, KC_ENT, KC_HOME, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT_iso_68( + KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN2] = LAYOUT_iso_68( + KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN3] = LAYOUT_iso_68( + KC_WAVE, 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_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_TASK: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_TAB); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_TAB); + } + return false; // Skip all further processing of this key + case KC_FLXP: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_E); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_E); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q2/rev_0112/keymaps/via/keymap.c b/keyboards/keychron/q2/rev_0112/keymaps/via/keymap.c new file mode 100644 index 000000000000..0a91857f1e46 --- /dev/null +++ b/keyboards/keychron/q2/rev_0112/keymaps/via/keymap.c @@ -0,0 +1,112 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + WIN_BASE, + _FN1, + _FN2, + _FN3 +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = USER00, + KC_LAUNCHPAD, + KC_TASK, + KC_FLXP +}; + +#define KC_WAVE S(KC_GRV) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_iso_68( + KC_ESC, KC_1, KC_2, KC_F3, KC_F4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, + 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_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_NUHS, KC_ENT, KC_HOME, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_BASE] = LAYOUT_iso_68( + 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_INS, + 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_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_NUHS, KC_ENT, KC_HOME, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT_iso_68( + KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN2] = LAYOUT_iso_68( + KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN3] = LAYOUT_iso_68( + KC_WAVE, 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_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_TASK: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_TAB); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_TAB); + } + return false; // Skip all further processing of this key + case KC_FLXP: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_E); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_E); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q2/rev_0112/keymaps/via/rules.mk b/keyboards/keychron/q2/rev_0112/keymaps/via/rules.mk new file mode 100644 index 000000000000..bee21da5283a --- /dev/null +++ b/keyboards/keychron/q2/rev_0112/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +MOUSEKEY_ENABLE = no \ No newline at end of file diff --git a/keyboards/keychron/q2/rev_0112/readme.md b/keyboards/keychron/q2/rev_0112/readme.md new file mode 100644 index 000000000000..29404e03cac5 --- /dev/null +++ b/keyboards/keychron/q2/rev_0112/readme.md @@ -0,0 +1 @@ +# The ISO variant of the Keychron Q2 diff --git a/keyboards/keychron/q2/rev_0112/rev_0112.c b/keyboards/keychron/q2/rev_0112/rev_0112.c new file mode 100644 index 000000000000..d91a41fca181 --- /dev/null +++ b/keyboards/keychron/q2/rev_0112/rev_0112.c @@ -0,0 +1,17 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include "quantum.h" diff --git a/keyboards/keychron/q2/rev_0112/rev_0112.h b/keyboards/keychron/q2/rev_0112/rev_0112.h new file mode 100644 index 000000000000..2ab66fb847ed --- /dev/null +++ b/keyboards/keychron/q2/rev_0112/rev_0112.h @@ -0,0 +1,36 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#define XXX KC_NO + +#define LAYOUT_iso_68( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E,\ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E,\ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K1D, K2E,\ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \ + K40, K41, K42, K46, K4A, K4B, K4C, K4D, K2C, K4E \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, }, \ + { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D, K4E, } \ +} + diff --git a/keyboards/keychron/q2/rev_0112/rules.mk b/keyboards/keychron/q2/rev_0112/rules.mk new file mode 100644 index 000000000000..65fea2d973d2 --- /dev/null +++ b/keyboards/keychron/q2/rev_0112/rules.mk @@ -0,0 +1,37 @@ +# MCU name +# MCU = STM32L432 +MCU = cortex-m4 +ARMV = 7 +MCU_FAMILY = STM32 +MCU_SERIES = STM32L4xx +MCU_LDSCRIPT = STM32L432xC +MCU_STARTUP = stm32l4xx +BOARD = GENERIC_STM32_L433XC +PLATFORM_NAME = platform_l432 + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = no # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = no # Enable Encoder +DIP_SWITCH_ENABLE = yes +EEPROM_DRIVER = i2c + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +# custom matrix setup +CUSTOM_MATRIX = lite + +SRC += matrix.c diff --git a/keyboards/keychron/q2/rev_0113/config.h b/keyboards/keychron/q2/rev_0113/config.h new file mode 100644 index 000000000000..21ada693c006 --- /dev/null +++ b/keyboards/keychron/q2/rev_0113/config.h @@ -0,0 +1,28 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x0113 +#define DEVICE_VER 0x0100 + +/* Encoder used pins */ +#define ENCODERS_PAD_A { A10 } +#define ENCODERS_PAD_B { B5 } + +/* Specifies the number of pulses the encoder registers between each detent */ +#define ENCODER_RESOLUTION 2 diff --git a/keyboards/keychron/q2/rev_0113/keymaps/default/info.json b/keyboards/keychron/q2/rev_0113/keymaps/default/info.json new file mode 100644 index 000000000000..8448d4c99515 --- /dev/null +++ b/keyboards/keychron/q2/rev_0113/keymaps/default/info.json @@ -0,0 +1,83 @@ +{ + "keyboard_name": "Keychron Q2", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_iso_68": { + "layout": [ + {"label":"Mute", "x":15.25, "y":0}, + + {"label":"Esc", "x":0, "y":0.25}, + {"label":"!", "x":1, "y":0.25}, + {"label":"@", "x":2, "y":0.25}, + {"label":"", "x":3, "y":0.25}, + {"label":"$", "x":4, "y":0.25}, + {"label":"%", "x":5, "y":0.25}, + {"label":"^", "x":6, "y":0.25}, + {"label":"&", "x":7, "y":0.25}, + {"label":"*", "x":8, "y":0.25}, + {"label":"(", "x":9, "y":0.25}, + {"label":")", "x":10, "y":0.25}, + {"label":"_", "x":11, "y":0.25}, + {"label":"+", "x":12, "y":0.25}, + {"label":"Backspace", "x":13, "y":0.25, "w":2}, + + {"label":"Tab", "x":0, "y":1.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":1.25}, + {"label":"W", "x":2.5, "y":1.25}, + {"label":"E", "x":3.5, "y":1.25}, + {"label":"R", "x":4.5, "y":1.25}, + {"label":"T", "x":5.5, "y":1.25}, + {"label":"Y", "x":6.5, "y":1.25}, + {"label":"U", "x":7.5, "y":1.25}, + {"label":"I", "x":8.5, "y":1.25}, + {"label":"O", "x":9.5, "y":1.25}, + {"label":"P", "x":10.5, "y":1.25}, + {"label":"{", "x":11.5, "y":1.25}, + {"label":"}", "x":12.5, "y":1.25}, + {"label":"Delete", "x":15.25, "y":1.25}, + + {"label":"Caps Lock", "x":0, "y":2.25, "w":1.75}, + {"label":"A", "x":1.75, "y":2.25}, + {"label":"S", "x":2.75, "y":2.25}, + {"label":"D", "x":3.75, "y":2.25}, + {"label":"F", "x":4.75, "y":2.25}, + {"label":"G", "x":5.75, "y":2.25}, + {"label":"H", "x":6.75, "y":2.25}, + {"label":"J", "x":7.75, "y":2.25}, + {"label":"K", "x":8.75, "y":2.25}, + {"label":"L", "x":9.75, "y":2.25}, + {"label":":", "x":10.75, "y":2.25}, + {"label":"\"", "x":11.75, "y":2.25}, + {"label":"#~", "x":12.75, "y":2.25}, + {"label":"Enter", "x":13.75, "y":2.25, "w":1.25}, + {"label":"Home", "x":15.25, "y":2.25}, + + {"label":"Shift", "x":0, "y":3.25, "w":1.25}, + {"label":"|", "x":1.25, "y":3.25}, + {"label":"Z", "x":2.25, "y":3.25}, + {"label":"X", "x":3.25, "y":3.25}, + {"label":"C", "x":4.25, "y":3.25}, + {"label":"V", "x":5.25, "y":3.25}, + {"label":"B", "x":6.25, "y":3.25}, + {"label":"N", "x":7.25, "y":3.25}, + {"label":"M", "x":8.25, "y":3.25}, + {"label":"<", "x":9.25, "y":3.25}, + {"label":">", "x":10.25, "y":3.25}, + {"label":"?", "x":11.25, "y":3.25}, + {"label":"Shift", "x":12.25, "y":3.25, "w":1.75}, + {"label":"Up", "x":14.25, "y":3.5}, + + {"label":"Ctrl", "x":0, "y":4.25, "w":1.25}, + {"label":"Win", "x":1.25, "y":4.25, "w":1.25}, + {"label":"Alt", "x":2.5, "y":4.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":4.25, "w":6.25}, + {"label":"Alt", "x":10, "y":4.25}, + {"label":"Fn1", "x":11, "y":4.25}, + {"label":"Fn2", "x":12, "y":4.25}, + {"label":"Left", "x":13.25, "y":4.5}, + {"label":"Down", "x":14.25, "y":4.5}, + {"label":"Right", "x":15.25, "y":4.5} ] + } + } +} diff --git a/keyboards/keychron/q2/rev_0113/keymaps/default/keymap.c b/keyboards/keychron/q2/rev_0113/keymaps/default/keymap.c new file mode 100644 index 000000000000..cc25d3738557 --- /dev/null +++ b/keyboards/keychron/q2/rev_0113/keymaps/default/keymap.c @@ -0,0 +1,112 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + WIN_BASE, + _FN1, + _FN2, + _FN3 +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_LAUNCHPAD, + KC_TASK, + KC_FLXP +}; + +#define KC_WAVE S(KC_GRV) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_iso_68( + KC_ESC, KC_1, KC_2, KC_F3, KC_F4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_MUTE, + 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_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_NUHS, KC_ENT, KC_HOME, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_BASE] = LAYOUT_iso_68( + 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_MUTE, + 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_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_NUHS, KC_ENT, KC_HOME, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT_iso_68( + KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN2] = LAYOUT_iso_68( + KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN3] = LAYOUT_iso_68( + KC_WAVE, 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_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_TASK: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_TAB); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_TAB); + } + return false; // Skip all further processing of this key + case KC_FLXP: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_E); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_E); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q2/rev_0113/keymaps/via/info.json b/keyboards/keychron/q2/rev_0113/keymaps/via/info.json new file mode 100644 index 000000000000..6111f83d2312 --- /dev/null +++ b/keyboards/keychron/q2/rev_0113/keymaps/via/info.json @@ -0,0 +1,85 @@ +{ + "keyboard_name": "Keychron Q2", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_iso_68": { + "layout": [ + {"label":"Mute", "x":15.25, "y":0, "w":0.75}, + {"label":"Vol-", "x":16, "y":0, "w":0.75, "h":0.5}, + {"label":"Vol+", "x":16, "y":0.5, "w":0.75, "h":0.5}, + + {"label":"Esc", "x":0, "y":0.25}, + {"label":"!", "x":1, "y":0.25}, + {"label":"@", "x":2, "y":0.25}, + {"label":"", "x":3, "y":0.25}, + {"label":"$", "x":4, "y":0.25}, + {"label":"%", "x":5, "y":0.25}, + {"label":"^", "x":6, "y":0.25}, + {"label":"&", "x":7, "y":0.25}, + {"label":"*", "x":8, "y":0.25}, + {"label":"(", "x":9, "y":0.25}, + {"label":")", "x":10, "y":0.25}, + {"label":"_", "x":11, "y":0.25}, + {"label":"+", "x":12, "y":0.25}, + {"label":"Backspace", "x":13, "y":0.25, "w":2}, + + {"label":"Tab", "x":0, "y":1.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":1.25}, + {"label":"W", "x":2.5, "y":1.25}, + {"label":"E", "x":3.5, "y":1.25}, + {"label":"R", "x":4.5, "y":1.25}, + {"label":"T", "x":5.5, "y":1.25}, + {"label":"Y", "x":6.5, "y":1.25}, + {"label":"U", "x":7.5, "y":1.25}, + {"label":"I", "x":8.5, "y":1.25}, + {"label":"O", "x":9.5, "y":1.25}, + {"label":"P", "x":10.5, "y":1.25}, + {"label":"{", "x":11.5, "y":1.25}, + {"label":"}", "x":12.5, "y":1.25}, + {"label":"Delete", "x":15.25, "y":1.25}, + + {"label":"Caps Lock", "x":0, "y":2.25, "w":1.75}, + {"label":"A", "x":1.75, "y":2.25}, + {"label":"S", "x":2.75, "y":2.25}, + {"label":"D", "x":3.75, "y":2.25}, + {"label":"F", "x":4.75, "y":2.25}, + {"label":"G", "x":5.75, "y":2.25}, + {"label":"H", "x":6.75, "y":2.25}, + {"label":"J", "x":7.75, "y":2.25}, + {"label":"K", "x":8.75, "y":2.25}, + {"label":"L", "x":9.75, "y":2.25}, + {"label":":", "x":10.75, "y":2.25}, + {"label":"\"", "x":11.75, "y":2.25}, + {"label":"#~", "x":12.75, "y":2.25}, + {"label":"Enter", "x":13.75, "y":2.25, "w":1.25}, + {"label":"Home", "x":15.25, "y":2.25}, + + {"label":"Shift", "x":0, "y":3.25, "w":1.25}, + {"label":"|", "x":1.25, "y":3.25}, + {"label":"Z", "x":2.25, "y":3.25}, + {"label":"X", "x":3.25, "y":3.25}, + {"label":"C", "x":4.25, "y":3.25}, + {"label":"V", "x":5.25, "y":3.25}, + {"label":"B", "x":6.25, "y":3.25}, + {"label":"N", "x":7.25, "y":3.25}, + {"label":"M", "x":8.25, "y":3.25}, + {"label":"<", "x":9.25, "y":3.25}, + {"label":">", "x":10.25, "y":3.25}, + {"label":"?", "x":11.25, "y":3.25}, + {"label":"Shift", "x":12.25, "y":3.25, "w":1.75}, + {"label":"Up", "x":14.25, "y":3.5}, + + {"label":"Ctrl", "x":0, "y":4.25, "w":1.25}, + {"label":"Win", "x":1.25, "y":4.25, "w":1.25}, + {"label":"Alt", "x":2.5, "y":4.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":4.25, "w":6.25}, + {"label":"Alt", "x":10, "y":4.25}, + {"label":"Fn1", "x":11, "y":4.25}, + {"label":"Fn2", "x":12, "y":4.25}, + {"label":"Left", "x":13.25, "y":4.5}, + {"label":"Down", "x":14.25, "y":4.5}, + {"label":"Right", "x":15.25, "y":4.5} ] + } + } +} diff --git a/keyboards/keychron/q2/rev_0113/keymaps/via/keymap.c b/keyboards/keychron/q2/rev_0113/keymaps/via/keymap.c new file mode 100644 index 000000000000..9c7ad72be72a --- /dev/null +++ b/keyboards/keychron/q2/rev_0113/keymaps/via/keymap.c @@ -0,0 +1,154 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + WIN_BASE, + _FN1, + _FN2, + _FN3 +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = USER00, + KC_LAUNCHPAD, + KC_TASK, + KC_FLXP +}; + +#define KC_WAVE S(KC_GRV) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_all( + KC_ESC, KC_1, KC_2, KC_F3, KC_F4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_MUTE, + 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_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_NUHS, KC_ENT, KC_HOME, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_VOLD, KC_VOLU, KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_BASE] = LAYOUT_all( + 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_MUTE, + 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_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_NUHS, KC_ENT, KC_HOME, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_VOLD, KC_VOLU, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT_all( + KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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, KC_TRNS), + + [_FN2] = LAYOUT_all( + KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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, KC_TRNS), + + [_FN3] = LAYOUT_all( + KC_WAVE, 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_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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, KC_TRNS) +}; + +#if defined(VIA_ENABLE) && defined(ENCODER_ENABLE) + +#define ENCODERS 1 +static uint8_t encoder_state[ENCODERS] = {0}; +static keypos_t encoder_cw[ENCODERS] = {{ 8, 4 }}; +static keypos_t encoder_ccw[ENCODERS] = {{ 7, 4 }}; + +void encoder_action_register(uint8_t index, bool clockwise) { + keyevent_t encoder_event = (keyevent_t) { + .key = clockwise ? encoder_cw[index] : encoder_ccw[index], + .pressed = true, + .time = (timer_read() | 1) + }; + encoder_state[index] = (clockwise ^ 1) | (clockwise << 1); + action_exec(encoder_event); +} + +void encoder_action_unregister(void) { + for (int index = 0; index < ENCODERS; ++index) { + if (encoder_state[index]) { + keyevent_t encoder_event = (keyevent_t) { + .key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], + .pressed = false, + .time = (timer_read() | 1) + }; + encoder_state[index] = 0; + action_exec(encoder_event); + } + } +} + +void matrix_scan_user(void) { + encoder_action_unregister(); +} + +bool encoder_update_user(uint8_t index, bool clockwise) { + encoder_action_register(index, clockwise); + return false; +}; + +#endif + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_TASK: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_TAB); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_TAB); + } + return false; // Skip all further processing of this key + case KC_FLXP: + if (record->event.pressed) { + register_code(KC_LWIN); + register_code(KC_E); + } else { + unregister_code(KC_LWIN); + unregister_code(KC_E); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q2/rev_0113/keymaps/via/rules.mk b/keyboards/keychron/q2/rev_0113/keymaps/via/rules.mk new file mode 100644 index 000000000000..bee21da5283a --- /dev/null +++ b/keyboards/keychron/q2/rev_0113/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +MOUSEKEY_ENABLE = no \ No newline at end of file diff --git a/keyboards/keychron/q2/rev_0113/readme.md b/keyboards/keychron/q2/rev_0113/readme.md new file mode 100644 index 000000000000..1d808cbb738a --- /dev/null +++ b/keyboards/keychron/q2/rev_0113/readme.md @@ -0,0 +1,5 @@ +# The ISO variant of the Keychron Q2 and support encoder + +- Enable EC11 rotary encoder +- Turn colckwise to increase volume and turn anti-colckwise to decrease volume +- Press top right key pushbutton to mute diff --git a/keyboards/keychron/q2/rev_0113/rev_0113.c b/keyboards/keychron/q2/rev_0113/rev_0113.c new file mode 100644 index 000000000000..c9413d023d0a --- /dev/null +++ b/keyboards/keychron/q2/rev_0113/rev_0113.c @@ -0,0 +1,31 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include "quantum.h" + +#ifdef ENCODER_ENABLE +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { return false; } + if (index == 0) { + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + } + return true; +} +#endif diff --git a/keyboards/keychron/q2/rev_0113/rev_0113.h b/keyboards/keychron/q2/rev_0113/rev_0113.h new file mode 100644 index 000000000000..21d20463e9e9 --- /dev/null +++ b/keyboards/keychron/q2/rev_0113/rev_0113.h @@ -0,0 +1,48 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#define XXX KC_NO + +#define LAYOUT_all( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E,\ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E,\ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K1D, K2E,\ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \ + K40, K41, K42, K46, K47, K48, K4A, K4B, K4C, K4D, K2C, K4E \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, }, \ + { K40, K41, K42, XXX, XXX, XXX, K46, K47, K48, XXX, K4A, K4B, K4C, K4D, K4E, } \ +} +#define LAYOUT_iso_68( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E,\ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E,\ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K1D, K2E,\ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \ + K40, K41, K42, K46, K4A, K4B, K4C, K4D, K2C, K4E \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, }, \ + { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D, K4E, } \ +} diff --git a/keyboards/keychron/q2/rev_0113/rules.mk b/keyboards/keychron/q2/rev_0113/rules.mk new file mode 100644 index 000000000000..0e54373d5db6 --- /dev/null +++ b/keyboards/keychron/q2/rev_0113/rules.mk @@ -0,0 +1,37 @@ +# MCU name +# MCU = STM32L432 +MCU = cortex-m4 +ARMV = 7 +MCU_FAMILY = STM32 +MCU_SERIES = STM32L4xx +MCU_LDSCRIPT = STM32L432xC +MCU_STARTUP = stm32l4xx +BOARD = GENERIC_STM32_L433XC +PLATFORM_NAME = platform_l432 + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = no # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = yes # Enable Encoder +DIP_SWITCH_ENABLE = yes +EEPROM_DRIVER = i2c + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +# custom matrix setup +CUSTOM_MATRIX = lite + +SRC += matrix.c From 9f36022792caf78e2cd4ea92a41d7d73162e5f54 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Fri, 26 Nov 2021 17:45:27 +0800 Subject: [PATCH 077/155] Update default keymaps of keychron_q2 series. --- .../q2/rev_0110/keymaps/default/keymap.c | 24 +++---------------- .../q2/rev_0111/keymaps/default/keymap.c | 24 +++---------------- .../q2/rev_0112/keymaps/default/keymap.c | 24 +++---------------- .../q2/rev_0113/keymaps/default/keymap.c | 24 +++---------------- 4 files changed, 12 insertions(+), 84 deletions(-) diff --git a/keyboards/keychron/q2/rev_0110/keymaps/default/keymap.c b/keyboards/keychron/q2/rev_0110/keymaps/default/keymap.c index 7242d748a31f..429157eef233 100644 --- a/keyboards/keychron/q2/rev_0110/keymaps/default/keymap.c +++ b/keyboards/keychron/q2/rev_0110/keymaps/default/keymap.c @@ -26,12 +26,12 @@ enum layers{ enum custom_keycodes { KC_MISSION_CONTROL = SAFE_RANGE, - KC_LAUNCHPAD, - KC_TASK, - KC_FLXP + KC_LAUNCHPAD }; #define KC_WAVE S(KC_GRV) +#define KC_TASK LGUI(KC_TAB) +#define KC_FLXP LGUI(KC_E) #define KC_MCTL KC_MISSION_CONTROL #define KC_LPAD KC_LAUNCHPAD @@ -88,24 +88,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { host_consumer_send(0); } return false; // Skip all further processing of this key - case KC_TASK: - if (record->event.pressed) { - register_code(KC_LWIN); - register_code(KC_TAB); - } else { - unregister_code(KC_LWIN); - unregister_code(KC_TAB); - } - return false; // Skip all further processing of this key - case KC_FLXP: - if (record->event.pressed) { - register_code(KC_LWIN); - register_code(KC_E); - } else { - unregister_code(KC_LWIN); - unregister_code(KC_E); - } - return false; // Skip all further processing of this key default: return true; // Process all other keycodes normally } diff --git a/keyboards/keychron/q2/rev_0111/keymaps/default/keymap.c b/keyboards/keychron/q2/rev_0111/keymaps/default/keymap.c index bd401f3d1022..f5a066760112 100644 --- a/keyboards/keychron/q2/rev_0111/keymaps/default/keymap.c +++ b/keyboards/keychron/q2/rev_0111/keymaps/default/keymap.c @@ -26,12 +26,12 @@ enum layers{ enum custom_keycodes { KC_MISSION_CONTROL = SAFE_RANGE, - KC_LAUNCHPAD, - KC_TASK, - KC_FLXP + KC_LAUNCHPAD }; #define KC_WAVE S(KC_GRV) +#define KC_TASK LGUI(KC_TAB) +#define KC_FLXP LGUI(KC_E) #define KC_MCTL KC_MISSION_CONTROL #define KC_LPAD KC_LAUNCHPAD @@ -88,24 +88,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { host_consumer_send(0); } return false; // Skip all further processing of this key - case KC_TASK: - if (record->event.pressed) { - register_code(KC_LWIN); - register_code(KC_TAB); - } else { - unregister_code(KC_LWIN); - unregister_code(KC_TAB); - } - return false; // Skip all further processing of this key - case KC_FLXP: - if (record->event.pressed) { - register_code(KC_LWIN); - register_code(KC_E); - } else { - unregister_code(KC_LWIN); - unregister_code(KC_E); - } - return false; // Skip all further processing of this key default: return true; // Process all other keycodes normally } diff --git a/keyboards/keychron/q2/rev_0112/keymaps/default/keymap.c b/keyboards/keychron/q2/rev_0112/keymaps/default/keymap.c index bee759f3889e..75667b44c83f 100644 --- a/keyboards/keychron/q2/rev_0112/keymaps/default/keymap.c +++ b/keyboards/keychron/q2/rev_0112/keymaps/default/keymap.c @@ -26,12 +26,12 @@ enum layers{ enum custom_keycodes { KC_MISSION_CONTROL = SAFE_RANGE, - KC_LAUNCHPAD, - KC_TASK, - KC_FLXP + KC_LAUNCHPAD }; #define KC_WAVE S(KC_GRV) +#define KC_TASK LGUI(KC_TAB) +#define KC_FLXP LGUI(KC_E) #define KC_MCTL KC_MISSION_CONTROL #define KC_LPAD KC_LAUNCHPAD @@ -88,24 +88,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { host_consumer_send(0); } return false; // Skip all further processing of this key - case KC_TASK: - if (record->event.pressed) { - register_code(KC_LWIN); - register_code(KC_TAB); - } else { - unregister_code(KC_LWIN); - unregister_code(KC_TAB); - } - return false; // Skip all further processing of this key - case KC_FLXP: - if (record->event.pressed) { - register_code(KC_LWIN); - register_code(KC_E); - } else { - unregister_code(KC_LWIN); - unregister_code(KC_E); - } - return false; // Skip all further processing of this key default: return true; // Process all other keycodes normally } diff --git a/keyboards/keychron/q2/rev_0113/keymaps/default/keymap.c b/keyboards/keychron/q2/rev_0113/keymaps/default/keymap.c index cc25d3738557..e3e6cf73768f 100644 --- a/keyboards/keychron/q2/rev_0113/keymaps/default/keymap.c +++ b/keyboards/keychron/q2/rev_0113/keymaps/default/keymap.c @@ -26,12 +26,12 @@ enum layers{ enum custom_keycodes { KC_MISSION_CONTROL = SAFE_RANGE, - KC_LAUNCHPAD, - KC_TASK, - KC_FLXP + KC_LAUNCHPAD }; #define KC_WAVE S(KC_GRV) +#define KC_TASK LGUI(KC_TAB) +#define KC_FLXP LGUI(KC_E) #define KC_MCTL KC_MISSION_CONTROL #define KC_LPAD KC_LAUNCHPAD @@ -88,24 +88,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { host_consumer_send(0); } return false; // Skip all further processing of this key - case KC_TASK: - if (record->event.pressed) { - register_code(KC_LWIN); - register_code(KC_TAB); - } else { - unregister_code(KC_LWIN); - unregister_code(KC_TAB); - } - return false; // Skip all further processing of this key - case KC_FLXP: - if (record->event.pressed) { - register_code(KC_LWIN); - register_code(KC_E); - } else { - unregister_code(KC_LWIN); - unregister_code(KC_E); - } - return false; // Skip all further processing of this key default: return true; // Process all other keycodes normally } From b74a5cac9ef078909804ed0440f9cfab8b3143f0 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Fri, 26 Nov 2021 17:20:43 -0500 Subject: [PATCH 078/155] Fix lock key LED indicators --- .../solartempest/sofle/keymaps/via/keymap.c | 10 +- .../sofle/solartempest_sofle_via.hex | 3553 +++++++++-------- 2 files changed, 1787 insertions(+), 1776 deletions(-) diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index 721ed049eac8..1dee3a263e65 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -392,12 +392,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { //LED Lock keys status indicators are used since the sofle doesn't have dedicated LEDS for this. //Note 1: These will assign static colour and brightness to the LED range specified. //Note 2: Base layer0 is required for lock layers to work, even if range for static LED colours is set to 0,0. - const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //RGB colour is ignored as range is 0,0. + const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Static RGB colour is ignored as range is 0,0. + const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 252,255,125}); + const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); + const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); + const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 3, 43,100,170}); //White-left caps lock indication const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({28, 3, 43,100,170}); //White-right num lock indication. Since this indicator is inverted, it must be on the master side of the keyboard to shut off properly when the computer is sleeping. const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({55, 3, 43,100,170}); //White-middle-right scroll lock indication const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers my_layer0_layer, //Base layer with no indications + my_layer1_layer, + my_layer2_layer, + my_layer3_layer, + my_layer4_layer, my_capslock_layer, //Highest status indicators override other layers my_numlock_layer, my_scrollock_layer diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index 70a9d0c25c6f..adec533353db 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,1782 +1,1785 @@ -:100000000C9431060C9478060C9478060C94833387 -:100010000C9478060C9478060C9478060C94780668 -:100020000C9478060C9478060C94E81A0C94A41A94 -:100030000C94E3270C9478060C9478060C947806BC -:100040000C9478060C9478060C9478060C94780638 -:100050000C9478060C94BF1B0C9478060C947806CC -:100060000C9478060C9478060C9478060C94780618 -:100070000C9478060C9478060C9478060C94780608 -:100080000C9478060C9478060C9478060C947806F8 -:100090000C9478060C9478060C9478060C947806E8 -:1000A0000C9478060C9478060C94780637032B642D +:100000000C9449060C9490060C9490060C949B3327 +:100010000C9490060C9490060C9490060C94900608 +:100020000C9490060C9490060C94001B0C94BC1A33 +:100030000C94FB270C9490060C9490060C9490065C +:100040000C9490060C9490060C9490060C949006D8 +:100050000C9490060C94D71B0C9490060C9490066C +:100060000C9490060C9490060C9490060C949006B8 +:100070000C9490060C9490060C9490060C949006A8 +:100080000C9490060C9490060C9490060C94900698 +:100090000C9490060C9490060C9490060C94900688 +:1000A0000C9490060C9490060C94900637032B64E5 :1000B000AAFF000000001C032B64AAFF0000000040 -:1000C00004032B64AAFF0000000000005FFF5AFF3A -:1000D0000000000005010902A10185020901A1003B -:1000E00005091901290815002501950875018102E6 -:1000F0000501093009311581257F950275088106B2 -:1001000009381581257F950175088106050C0A3887 -:10011000021581257F950175088106C0C00501097A -:1001200080A101850319012AB700150126B70095A2 -:100130000175108100C0050C0901A1018504190198 -:100140002AA002150126A002950175108100C006A3 -:1001500060FF0961A1010962150026FF0095207565 -:100160000881020963150026FF0095207508910299 -:10017000C005010906A101050719E029E7150025B9 -:10018000019508750181029501750881010507191E -:100190000029FF150026FF00950675088100050857 -:1001A00019012905950575019102950175039101C4 -:1001B000C00000000000000000000000000000007F -:1001C000000000000000000000000000000000002F -:1001D00000000000007E0F00D4FFFFFFC7000000FA -:1001E0007800000000000000002A2B28000000001A -:1001F00000000000000000000000000029000000D6 -:10020000002C1E3420212224342627252E362D377B -:1002100038271E1F202122232425263333362E374C -:10022000381F0405060708090A0B0C0D0E0F1011E4 -:1002300012131415161718191A1B1C1D2F313023F1 -:100240002D350405060708090A0B0C0D0E0F1011B9 -:1002500012131415161718191A1B1C1D2F313035BF -:100260004C00DA02815AD9F1DB20A4A62EAF00A0FF -:10027000C000A1C800AED580A81FD300408D1420B7 -:1002800000CA00C000B600AC000000000000000082 -:100290000000000000E0F0F0F8F8CCCCF8F8F0F046 -:1002A00060000000000000000000000000000000EE -:1002B00000000000000F3F7FFCF9F1E1C181000068 -:1002C000000000000000000000000000000000002E -:1002D0000C387060E0E0F0F0F8F9FFFFFFFFFF7E00 -:1002E0001C000000000000000000000000000000F2 -:1002F0000000000000E0F0F0F8F8CCCCF8F8F0F0E6 -:10030000600000000000000000000000000000008D -:1003100000000000000F3F7FFCF9F1E1C181000007 -:10032000010102060C0400000000000000000000B3 -:1003300000387C60E0E0F0F0F8F9FFFFFFFFFF7E9F -:100340001C00000000000000000000000000000091 -:10035000000000000000000000000000000000009D -:100360000000000000000000000000000000CCF8C9 -:1003700070000000000000C0F0F8F87CFCEEE6FC25 -:10038000FC7878B00000000000000000003F7FF122 -:10039000F8F87C7CF8F0F0F1E7EFEFFEFEFEFCFCF5 -:1003A000F8F06000010306020000000000000000F9 -:1003B000000000000000000000000000000000003D -:1003C0000000000000000000000000000080E0F8D5 -:1003D0001C000000000000C0F0F8F87CFCEEE6FC19 -:1003E000FC7878300000000000000000003F7FF043 -:1003F000F8F87C7CF8F0F0F1E7EFEFFEFEFEFCFC95 -:10040000F8F06000000000000000000000000000A4 -:1004100080C0C0E0E03070E0E0C0C08000000000BC -:100420000000000000000000000000000000001FAD -:100430007FFFFFE7E7EFEFCFCB83830100000000F2 -:1004400000000000000000000000000000061C3852 -:1004500078F1E3E3E7F7F7FFFFFFFF7F3E000000DF -:10046000000000000000000000000000000000008C -:100470000000000000000000000000000080C0E05C -:10048000E060E0C0C08080000000000000000000CC -:100490000000000020F8FEFFFFFF9F0F0E1F1F3F10 -:1004A0003F7EE683030F43439088080000031E3C11 -:1004B00078F0E0E0F0F0FBFFFFFF7F7F3800000006 -:1004C0000000000000000000000000000004F6B87A -:1004D000F8D8F0E0C000000080C0E0E0F0F0F0F0FC -:1004E000E0E0C080000000000000000080C0E1F3F8 -:1004F000FB7F1F0F0000F0FFFF3F030100000080A3 -:10050000C1F3FF7F1F000080C0E0301E3F3F7FF936 -:10051000F0F070783C3F1F0F03000000001C3F7F8D -:100520007FFBF1F0783C1E0F030000000101010188 -:10053000010101010102020202020202020203039E -:10054000030303030303040404040404040505056E -:100550000505060606060607070707070808080830 -:10056000090909090A0A0A0B0B0B0C0C0C0D0D0DDD -:100570000E0E0E0F0F0F1010111111121213131473 -:1005800014151516161717181819191A1A1B1B1CEB -:100590001D1D1E1E1F202021222223242425262645 -:1005A000272829292A2B2C2D2D2E2F30313232337A -:1005B0003435363738393A3B3C3D3E3F4041424383 -:1005C0004445464748494A4C4D4E4F505153545567 -:1005D0005658595A5B5D5E5F616264656668696B17 -:1005E0006C6D6F7072737577787A7B7D7E80828395 -:1005F0008587888A8C8E8F91939596989A9C9EA0D9 -:10060000A2A3A5A7A9ABADAFB1B3B5B7BABCBEC0E5 -:10061000C2C4C6C9CBCDCFD1D4D6D8DBDDDFE2E4AE -:10062000E7E9EBEEF0F3F5F8FAFDFFFFAA7F55409E -:100630001C1004010D190A24232221201F1E1D1B3A -:100640001A18171615141312110F0E0C0B090807A0 -:1006500006050302002D3945483C303F2526272852 -:10066000292A2B2C2E2F31323334353637383A3B6A -:100670003D3E404142434446474907087F08070042 -:100680003E5B4F5B3E003E6B4F6B3E001C3E7C3E34 -:100690001C00183C7E3C18001C577D571C001C5E3B -:1006A0007F5E1C0000183C180000FFE7C3E7FF0056 -:1006B000001824180000FFE7DBE7FF0030483A0687 -:1006C0000E00262979292600407F05050700407F76 -:1006D00005253F005A3CE73C5A007F3E1C1C0800A1 -:1006E000081C1C3E7F0014227F2214005F5F005F05 -:1006F0005F0006097F017F00006689956A006060DF -:100700006060600094A2FFA2940008047E040800C8 -:1007100010207E20100008082A1C0800081C2A0847 -:1007200008001E10101010000C1E0C1E0C0030389B -:100730003E383000060E3E0E0600000000000000AD -:1007400000005F000000000700070000147F147F16 -:100750001400242A7F2A12002313086462003649F9 -:1007600056205000000807030000001C2241000032 -:100770000041221C00002A1C7F1C2A0008083E0899 -:100780000800008070300000080808080800000019 -:10079000606000002010080402003E5149453E0000 -:1007A00000427F4000007249494946002141494DBD -:1007B00033001814127F10002745454539003C4A84 -:1007C000494931004121110907003649494936009C -:1007D000464949291E000000140000000040340072 -:1007E00000000008142241001414141414000041E5 -:1007F000221408000201590906003E415D594E00CD -:100800007C1211127C007F49494936003E4141412A -:1008100022007F4141413E007F49494941007F0913 -:10082000090901003E41415173007F0808087F001B -:1008300000417F4100002040413F01007F08142219 -:1008400041007F40404040007F021C027F007F0447 -:1008500008107F003E4141413E007F090909060022 -:100860003E4151215E007F09192946002649494928 -:10087000320003017F0103003F4040403F001F2042 -:1008800040201F003F4038403F00631408146300BD -:100890000304780403006159494D4300007F41413E -:1008A0004100020408102000004141417F00040281 -:1008B00001020400404040404000000307080000DF -:1008C0002054547840007F2844443800384444443D -:1008D0002800384444287F00385454541800000835 -:1008E0007E09020018A4A49C78007F080404780004 -:1008F00000447D4000002040403D00007F1028441F -:10090000000000417F4000007C04780478007C08EF -:1009100004047800384444443800FC1824241800A7 -:1009200018242418FC007C0804040800485454547B -:10093000240004043F4424003C4040207C001C2050 -:1009400040201C003C4030403C004428102844001B -:100950004C9090907C004464544C44000008364114 -:10096000000000007700000000413608000002018E -:10097000020402003C2623263C0000000000000088 -:10098000404040F0F8F8FF38FFF8F83FF8F8FF383B -:10099000FFF8F8F040404000000000000080C0C0B8 -:1009A000C0800000C0C08000000080C0C000C0C087 -:1009B000000080C0C00000000000C0C0C0C0C00077 -:1009C000C0C00000000000000000000000000000A7 -:1009D0000000000000000000000000000000000017 -:1009E0000000000000000000000000000000000007 -:1009F000000000000000000000C0F0F8FC3E1E06F1 -:100A0000010000007F4141417F007F4141417F0063 -:100A10000080C0E07E5B4F5BFEC00000C000DCD702 -:100A2000DEDEDED7DC00C0000000000000000000B9 -:100A300000000000000000000000000000000000B6 -:100A4000494949FFFFFFFFE0DFBFBF00BFBFDFE055 -:100A5000FFFFFFFF49494900000000001F3F6060A1 -:100A6000E0BF1F007F7F071E381E077F7F007F7F4C -:100A70000E1F3B716000000000007F7F0C0C0C001B -:100A80007E7E007F7E0303007F7E03037E7E030362 -:100A90007F7E000F3E703C063C703E0F00327B496B -:100AA000493F7E007F7E0303001E3F69696F260079 -:100AB000000000000000000000030F1F3F3C7870A2 -:100AC000600000007F4141417F007F4141417F0044 -:100AD000307B7F7830202030787F3B0003000F7F11 -:100AE0000F0F0F7F0F000300000000000000000048 -:100AF00000000000000000000000000000000000F6 -:100B0000010101070F0F7F0F7F0F0F7E0F0F7F0F68 -:100B10007F0F0F070101010000000000000000002E -:100B200000010100000000000000000000000000C3 -:100B300000000000000000000000000000000000B5 -:100B400000000000000000000000000000000000A5 -:100B50000000000000000000000000000000000095 +:1000C00004032B64AAFF000000000000D7FF78FFA4 +:1000D00000000000000080FF64FF0000000000003E +:1000E0005FFF5AFF000000000000FCFF7DFF0000E2 +:1000F000000000005FFF5AFF000000000501090238 +:10010000A10185020901A1000509190129081500AD +:100110002501950875018102050109300931158114 +:10012000257F95027508810609381581257F95017F +:1001300075088106050C0A38021581257F95017521 +:10014000088106C0C005010980A101850319012AA3 +:10015000B700150126B700950175108100C0050C88 +:100160000901A101850419012AA002150126A00296 +:10017000950175108100C00660FF0961A101096247 +:10018000150026FF009520750881020963150026D9 +:10019000FF00952075089102C005010906A101051F +:1001A0000719E029E71500250195087501810295D9 +:1001B00001750881010507190029FF150026FF00B8 +:1001C0009506750881000508190129059505750131 +:1001D0009102950175039101C0000000000000002C +:1001E000000000000000000000000000000000000F +:1001F000000000000000000000000000007E0F0072 +:10020000D4FFFFFFC70000007800000000000000DE +:10021000002A2B2800000000000000000000000061 +:100220000000000029000000002C1E3420212224A0 +:10023000342627252E362D3738271E1F202122232E +:100240002425263333362E37381F040506070809C0 +:100250000A0B0C0D0E0F1011121314151617181986 +:100260001A1B1C1D2F3130232D35040506070809E4 +:100270000A0B0C0D0E0F1011121314151617181966 +:100280001A1B1C1D2F3130354C00DA02815AD9F16E +:10029000DB20A4A62EAF00A0C000A1C800AED58070 +:1002A000A81FD300408D142000F200E800DE00D427 +:1002B00000CA00C000B600AC000000000000000052 +:1002C0000000000000E0F0F0F8F8CCCCF8F8F0F016 +:1002D00060000000000000000000000000000000BE +:1002E00000000000000F3F7FFCF9F1E1C181000038 +:1002F00000000000000000000000000000000000FE +:100300000C387060E0E0F0F0F8F9FFFFFFFFFF7ECF +:100310001C000000000000000000000000000000C1 +:100320000000000000E0F0F0F8F8CCCCF8F8F0F0B5 +:10033000600000000000000000000000000000005D +:1003400000000000000F3F7FFCF9F1E1C1810000D7 +:10035000010102060C040000000000000000000083 +:1003600000387C60E0E0F0F0F8F9FFFFFFFFFF7E6F +:100370001C00000000000000000000000000000061 +:10038000000000000000000000000000000000006D +:100390000000000000000000000000000000CCF899 +:1003A00070000000000000C0F0F8F87CFCEEE6FCF5 +:1003B000FC7878B00000000000000000003F7FF1F2 +:1003C000F8F87C7CF8F0F0F1E7EFEFFEFEFEFCFCC5 +:1003D000F8F06000010306020000000000000000C9 +:1003E000000000000000000000000000000000000D +:1003F0000000000000000000000000000080E0F8A5 +:100400001C000000000000C0F0F8F87CFCEEE6FCE8 +:10041000FC7878300000000000000000003F7FF012 +:10042000F8F87C7CF8F0F0F1E7EFEFFEFEFEFCFC64 +:10043000F8F0600000000000000000000000000074 +:1004400080C0C0E0E03070E0E0C0C080000000008C +:100450000000000000000000000000000000001F7D +:100460007FFFFFE7E7EFEFCFCB83830100000000C2 +:1004700000000000000000000000000000061C3822 +:1004800078F1E3E3E7F7F7FFFFFFFF7F3E000000AF +:10049000000000000000000000000000000000005C +:1004A0000000000000000000000000000080C0E02C +:1004B000E060E0C0C080800000000000000000009C +:1004C0000000000020F8FEFFFFFF9F0F0E1F1F3FE0 +:1004D0003F7EE683030F43439088080000031E3CE1 +:1004E00078F0E0E0F0F0FBFFFFFF7F7F38000000D6 +:1004F0000000000000000000000000000004F6B84A +:10050000F8D8F0E0C000000080C0E0E0F0F0F0F0CB +:10051000E0E0C080000000000000000080C0E1F3C7 +:10052000FB7F1F0F0000F0FFFF3F03010000008072 +:10053000C1F3FF7F1F000080C0E0301E3F3F7FF906 +:10054000F0F070783C3F1F0F03000000001C3F7F5D +:100550007FFBF1F0783C1E0F030000000101010158 +:10056000010101010102020202020202020203036E +:10057000030303030303040404040404040505053E +:100580000505060606060607070707070808080800 +:10059000090909090A0A0A0B0B0B0C0C0C0D0D0DAD +:1005A0000E0E0E0F0F0F1010111111121213131443 +:1005B00014151516161717181819191A1A1B1B1CBB +:1005C0001D1D1E1E1F202021222223242425262615 +:1005D000272829292A2B2C2D2D2E2F30313232334A +:1005E0003435363738393A3B3C3D3E3F4041424353 +:1005F0004445464748494A4C4D4E4F505153545537 +:100600005658595A5B5D5E5F616264656668696BE6 +:100610006C6D6F7072737577787A7B7D7E80828364 +:100620008587888A8C8E8F91939596989A9C9EA0A8 +:10063000A2A3A5A7A9ABADAFB1B3B5B7BABCBEC0B5 +:10064000C2C4C6C9CBCDCFD1D4D6D8DBDDDFE2E47E +:10065000E7E9EBEEF0F3F5F8FAFDFFFFAA7F55406E +:100660001C1004010D190A24232221201F1E1D1B0A +:100670001A18171615141312110F0E0C0B09080770 +:1006800006050302002D3945483C303F2526272822 +:10069000292A2B2C2E2F31323334353637383A3B3A +:1006A0003D3E404142434446474907087F08070012 +:1006B0003E5B4F5B3E003E6B4F6B3E001C3E7C3E04 +:1006C0001C00183C7E3C18001C577D571C001C5E0B +:1006D0007F5E1C0000183C180000FFE7C3E7FF0026 +:1006E000001824180000FFE7DBE7FF0030483A0657 +:1006F0000E00262979292600407F05050700407F46 +:1007000005253F005A3CE73C5A007F3E1C1C080070 +:10071000081C1C3E7F0014227F2214005F5F005FD4 +:100720005F0006097F017F00006689956A006060AE +:100730006060600094A2FFA2940008047E04080098 +:1007400010207E20100008082A1C0800081C2A0817 +:1007500008001E10101010000C1E0C1E0C0030386B +:100760003E383000060E3E0E06000000000000007D +:1007700000005F000000000700070000147F147FE6 +:100780001400242A7F2A12002313086462003649C9 +:1007900056205000000807030000001C2241000002 +:1007A0000041221C00002A1C7F1C2A0008083E0869 +:1007B00008000080703000000808080808000000E9 +:1007C000606000002010080402003E5149453E00D0 +:1007D00000427F4000007249494946002141494D8D +:1007E00033001814127F10002745454539003C4A54 +:1007F000494931004121110907003649494936006C +:10080000464949291E000000140000000040340041 +:1008100000000008142241001414141414000041B4 +:10082000221408000201590906003E415D594E009C +:100830007C1211127C007F49494936003E414141FA +:1008400022007F4141413E007F49494941007F09E3 +:10085000090901003E41415173007F0808087F00EB +:1008600000417F4100002040413F01007F081422E9 +:1008700041007F40404040007F021C027F007F0417 +:1008800008107F003E4141413E007F0909090600F2 +:100890003E4151215E007F091929460026494949F8 +:1008A000320003017F0103003F4040403F001F2012 +:1008B00040201F003F4038403F006314081463008D +:1008C0000304780403006159494D4300007F41410E +:1008D0004100020408102000004141417F00040251 +:1008E00001020400404040404000000307080000AF +:1008F0002054547840007F2844443800384444440D +:100900002800384444287F00385454541800000804 +:100910007E09020018A4A49C78007F0804047800D3 +:1009200000447D4000002040403D00007F102844EE +:10093000000000417F4000007C04780478007C08BF +:1009400004047800384444443800FC182424180077 +:1009500018242418FC007C0804040800485454544B +:10096000240004043F4424003C4040207C001C2020 +:1009700040201C003C4030403C00442810284400EB +:100980004C9090907C004464544C440000083641E4 +:10099000000000007700000000413608000002015E +:1009A000020402003C2623263C0000000000000058 +:1009B000404040F0F8F8FF38FFF8F83FF8F8FF380B +:1009C000FFF8F8F040404000000000000080C0C088 +:1009D000C0800000C0C08000000080C0C000C0C057 +:1009E000000080C0C00000000000C0C0C0C0C00047 +:1009F000C0C0000000000000000000000000000077 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A2000000000000000000000C0F0F8FC3E1E06C0 +:100A3000010000007F4141417F007F4141417F0033 +:100A40000080C0E07E5B4F5BFEC00000C000DCD7D2 +:100A5000DEDEDED7DC00C000000000000000000089 +:100A60000000000000000000000000000000000086 +:100A7000494949FFFFFFFFE0DFBFBF00BFBFDFE025 +:100A8000FFFFFFFF49494900000000001F3F606071 +:100A9000E0BF1F007F7F071E381E077F7F007F7F1C +:100AA0000E1F3B716000000000007F7F0C0C0C00EB +:100AB0007E7E007F7E0303007F7E03037E7E030332 +:100AC0007F7E000F3E703C063C703E0F00327B493B +:100AD000493F7E007F7E0303001E3F69696F260049 +:100AE000000000000000000000030F1F3F3C787072 +:100AF000600000007F4141417F007F4141417F0014 +:100B0000307B7F7830202030787F3B0003000F7FE0 +:100B10000F0F0F7F0F000300000000000000000017 +:100B200000000000000000000000000000000000C5 +:100B3000010101070F0F7F0F7F0F0F7E0F0F7F0F38 +:100B40007F0F0F07010101000000000000000000FE +:100B50000001010000000000000000000000000093 :100B60000000000000000000000000000000000085 :100B70000000000000000000000000000000000075 :100B80000000000000000000000000000000000065 :100B90000000000000000000000000000000000055 :100BA0000000000000000000000000000000000045 -:100BB0000000000000000000000000AF00AE0902CD -:100BC0005B00030100A0FA09040000010301010019 -:100BD0000921110100012240000705810308000AD4 -:100BE0000904010002030000000921110100012293 -:100BF00022000705820320000107050303200001EE -:100C00000904020001030000000921110100012272 -:100C10007B000705840320000A1201000200000087 -:100C20000832FC87120200010200011E0353006F0C -:100C3000006C00610072006900750073005F005372 -:100C4000006F0066006C006500000010034B00653B -:100C5000007900680069007600650000000403095F -:100C6000040011241FBECFEFDAE0DEBFCDBF04B613 -:100C700003FE27C08091800690918106A091820694 -:100C8000B09183068730904BA740B04BD1F41092BF -:100C9000800610928106109282061092830614BE7E -:100CA00084B7877F84BF0FB6F894A89580916000C1 -:100CB000886180936000109260000FBEE0E0F8E36E -:100CC000099512E0A0E0B1E0EEE1FEE602C0059079 -:100CD0000D92AE32B107D9F726E0AEE2B2E001C024 -:100CE0001D92A038B207E1F70E940A280C94C93679 -:100CF0000C940000CF93DF9340917E0650917F06C5 -:100D00004E5754409A01205A3F4F21303240C0F094 -:100D100020E032E0241B350B60917C0470917D044F -:100D2000FC01CA01240F351FC1E0D0E082179307F0 -:100D300050F070937D0460937C04DF91CF9108950F -:100D400020E630E0E9CF4491DC01A258BB4F5C9132 -:100D5000451781F04C93AC01A5E056954795AA95AF -:100D6000E1F7DE0102C0AA0FBB1F4A95E2F7AD0111 -:100D70006A2B752B01963196D9CFE8EDF0E0808192 -:100D80008E7F80831092E2001092DA001092E100D0 -:100D9000A0EEB0E08C9181608C9380818F7780830E -:100DA00019BCA7EDB0E08C918E7F8C9380818F7EF3 -:100DB000808310925E0408952091E4003091E50054 -:100DC00095E6A9012091EC00822F817020FF06C0DA -:100DD0008091E80080FF06C080E008952091E8003F -:100DE00022FD1AC080916C04882389F0853089F037 -:100DF0008091EB0085FD0FC02091E4003091E5006B -:100E000042175307F9F29150E1F684E0089582E029 -:100E1000089583E0089581E00895EF92FF920F9383 -:100E20001F93CF937C018B010E94DC06C82F811198 -:100E300017C08091E80085FD0BC08091E8008E7797 -:100E40008093E8000E94DC06882399F3C82F08C02D -:100E5000F70181917F018093F1000150110949F759 -:100E60008C2FCF911F910F91FF90EF90089580915B -:100E70006E0487FF13C08091E80082FF06C0809156 -:100E8000E8008B778093E80004C080916C048111A6 -:100E9000F2CF089580916C048823D9F38091E80003 -:100EA00080FFF8CF8091E8008E77ECCF982F909359 -:100EB000E900242F762F50E0891731F07091EC0073 -:100EC0002091ED005091F00021FD07C09F5F973009 -:100ED00071F78093E90081E008953091EB003E7F47 -:100EE0003093EB003091ED003D7F3093ED00309179 -:100EF000EB0031603093EB007093EC002093ED0039 -:100F00005093F0002091EE0027FDE0CF80E008959F -:100F1000CF92DF92EF92FF920F931F93CF93DF93C5 -:100F2000C8EDD0E088818F7E8883E7EDF0E0808196 -:100F30008160808384E082BF81E080935E04888149 -:100F40008E7F888302EE10E0F80110821092DA00A2 -:100F500081EEC82ED12CF601108288818F7788838C -:100F600088818068888388818F7D888319BC1092EE -:100F70006C0410926D0410926B0410926A0490EE4F -:100F8000E92EF12CF70180818B7F8083888181603D -:100F9000888342E060E080E00E945607F60180818D -:100FA0008E7F8083F801808181608083808188606A -:100FB0008083F70180818E7F808388818061888330 -:100FC000DF91CF911F910F91FF90EF90DF90CF9025 -:100FD0000895FC0180917404909175048617970719 -:100FE000A0F06115710529F49091E8009E77909327 -:100FF000E80090E06115710551F4911108C08091ED -:10100000E80082FF34C080E00895BC01F2CF8091F7 -:101010006C048823C1F18530C1F18091E80083FD23 -:1010200030C08091E80082FDEACF8091E80080FF27 -:10103000E1CF8091F3002091F200382F6115710506 -:1010400019F02830310558F091E02830310509F0C9 -:1010500090E02091E8002E772093E800CBCF81919B -:101060008093F100615071092F5F3F4FE7CF80916E -:101070006C04882341F0853041F08091E80083FFC3 -:10108000BECF81E0089582E0089583E008958091C5 -:10109000610408952FB7F894609157047091580433 -:1010A0008091590490915A042FBF089520915404BF -:1010B000309155042817390771F0909355048093A7 -:1010C0005404E0915204F0915304309721F00084CD -:1010D000F185E02D09940895209150043091510438 -:1010E0002817390771F09093510480935004E091D0 -:1010F0005204F0915304309721F00680F781E02DDF -:10110000099408952091430436E0839FC00111247F -:10111000629F800D911D1124811522E0920714F029 -:1011200090E080E082589B4F90937F0680937E06EC -:101130000895883E9105C8F4803E910548F48B32AD -:10114000910540F48832910518F404974A9758F4B1 -:1011500080E008958C32910530F089339105C0F319 -:1011600084369105A9F381E011C0811522E592072B -:1011700070F48115E1E59E0758F790548115904170 -:1011800090F7FB019581907F81E011F3089581151F -:1011900028E5920740F38115E9E59E0728F090566F -:1011A0008115904270F3DFCFFB019581907F81E044 -:1011B000903271F6EBCFFC01680F791F8FEF91E34E -:1011C0002191822728E030E087FF09C0880F892716 -:1011D00021503109C9F7E617F70791F70895880FED -:1011E000F7CFFA01811101C0FB01099480917704C6 -:1011F000982F9E7F61F48170826080937704809144 -:101200007A04813A18F080EA80937A04089588314C -:10121000B0F381708661F1CFAF92BF92DF92EF920F -:10122000FF920F931F93CF93DF93082F162FE9019F -:10123000E42FF0E0E55DFA4F611110C0E4915E2FFC -:101240004E2F4983E8835A83DF91CF911F910F91ED -:10125000FF90EF90DF90BF90AF900895E62EF12CB5 -:101260004491D42EE42FF0E026E0829FC0011124A7 -:101270002FEF30E0B9010E94FD34802F90E0880FFD -:10128000991F55E5569FD001579FB00D11248A1B19 -:101290009B0B982F990F890F5901AE18BF08AE9E6E -:1012A000D001AF9EB00DBE9EB00D11245B2F189FD4 -:1012B00080011124012F11275901A01AB10AAE9EF5 -:1012C0008001AF9E100DBE9E100D11245901A81A69 -:1012D000B108AE9CC001AF9C900DBE9C900D112436 -:1012E000892F9927281B390B2E9FC0012F9F900D06 -:1012F0003E9F900D1124E92F62307105A1F050F44A -:101300006115710509F49DCF6130710581F0EB2FF6 -:10131000512F97CF6430710569F080F06630710508 -:1013200009F48FCFF4CFE42F4B2F592F8ACFE42F1E -:10133000412F87CFEB2F542F492F83CF4B2F5D2D7C -:10134000E12F7FCF80E0089578940895F894E82FF6 -:10135000E295EF70F0E031A1282F2F7081E090E04E -:1013600001C0880F2A95EAF7982F9095932391A3AF -:1013700092A1892B82A30C94A4099091D60292FF8A -:1013800006C0282F28712830F9F4877F846093FFE6 -:1013900006C0282F28712831F1F4877E84612091BE -:1013A000D70220FF06C0382F38713830D9F4877F34 -:1013B000816021FF06C0282F28712831D1F4877E53 -:1013C000816194FD877E0895282F24712430F9F6D9 -:1013D0008B7F8860DCCF282F2471243101F78B7E2E -:1013E0008861DDCF382F3171313019F78E7F8860F9 -:1013F000E0CF282F2171213121F78E7E8861E1CF46 -:10140000CF93DF93EC018238910581F1B0F5813300 -:10141000910509F491C020F58932910509F485C040 -:101420008A9709F490C0C11521E5D20708F0AAC037 -:10143000C11530E5D30708F0F2C0CF3BD10508F065 -:1014400089C0C83AD10508F0DFC0C53AD10508F017 -:10145000D3C0C430D105F8F4C130D105E1F040C0AB -:101460008533910509F45AC0C997E9F68091D602EF -:10147000837089F0C0EED0E00EC0833E910599F1F3 -:1014800070F4803E910501F1823E910561F68091F4 -:10149000D60282FD21C0CE01DF91CF910895863E14 -:1014A000910561F1873E910571F1843E910509F046 -:1014B000BACF8091D70281FFEECF8091D602C7EEDE -:1014C000D0E084FD0DC0E7CF8091D60280FDF7C04B -:1014D0009091D70290FFDFCFC3EED0E084FFDBCF47 -:1014E000D0E0C0E0D8CF8091D60282FDEBC09091D1 -:1014F000D70290FDBFCF84FFCECFF2CF8091D6022E -:1015000083FDDDCFC8CF8091D60283FDDEC09091F0 -:10151000D70291FFF0CFC4EED0E0BDCF8091D602CC -:1015200085FFB9CFC9E2D0E0B6CF8091D60285FF62 -:10153000B2CFC5E3D0E0AFCF8091D60286FFABCF6C -:10154000CAE2D0E0A8CF8091D60286FFA4CFC1E343 -:10155000D0E0A1CFC11540E2D40760F4C11581E00D -:10156000D80708F098CFCE01815E9109079708F45B -:1015700092CFB6CFC11590E4D90708F4B1CFDF7090 -:10158000D06A89CFC11524E5D20778F4C11533E5B7 -:10159000D30708F072C0C11542E5D40708F05CC05B -:1015A000DC2FCC27C16FD06A76CFC1158AE5D8076A -:1015B00078F4C11599E5D90708F073C0C11528E57D -:1015C000D20708F48DCFDC2FCC27C06FD06A63CF51 -:1015D000CE0190568115904208F082CF8D2F8F71E9 -:1015E0000E94BD0990E0982F882788279F719C0151 -:1015F0002C2BE901D0624FCFC55AD0E0C154DE4F49 -:10160000C881D0E0D06447CFC85AD0E0CC0FDD1FEE -:10161000CE53DE4F0990D881C02DD4643CCFCE018B -:1016200064E0969587956A95E1F783702C2F26954F -:101630002695237040E2249F90011124382B8C2F93 -:101640008370C1E0D0E002C0CC0FDD1F8A95E2F7C5 -:10165000C22BD32BDC681FCFCE018370992721E0EA -:1016600030E002C0220F331F8A95E2F7C695C69577 -:1016700080E2C89FE0011124EBCFCE01837099274F -:1016800021E030E002C0220F331F8A95E2F7C695B1 -:10169000C69590E2C99FE0011124C22BD32BDA68D2 -:1016A000FACE8C2F8F700E94BD0934E0D695C79575 -:1016B0003A95E1F7CF709C2FEC01D069ECCEC9E3ED -:1016C000D0E0E9CEC2EED0E0E6CEC6EED0E0E3CE8A -:1016D0000C944A0880915F0490919102892B90911B -:1016E0009002892B80933002E0915204F0915304D0 -:1016F000309731F00280F381E02D80E392E009948D -:10170000089580918F0290915E02981301C0089510 -:101710008F5F8770FACF27E0929F800D1124982F5A -:10172000977086958695869523E0829FF001112417 -:10173000E35CFD4F50E040E080E0219130E0092E75 -:1017400002C0369527950A94E2F721703327042EBC -:1017500001C0220F0A94EAF7822B4F5F5F4F43309C -:10176000510559F7089527E0929F800D1124982F75 -:10177000977041E001C0440F9A95EAF786958695E7 -:10178000869593E0899FF0011124E35CFD4F90E082 -:1017900080E070E05191DF0111979B01082E02C09B -:1017A000369527950A94E2F7217021952527242361 -:1017B00025272C9301968330910561F7089590E0D9 -:1017C00080E00E946C0890E080E00E945608109231 -:1017D0009102109290020C946A0B809392020C94E6 -:1017E000DF0B882341F0809590915F0489238093DB -:1017F0005F040C946A0B0895882339F090915F047C -:10180000982B90935F040C946A0B08958823B1F190 -:101810009CEF980F913A70F4E2E3F2E09191891312 -:1018200003C0DF0111971C9242E0E833F407B1F7DF -:101830000C946A0B90E2980F983088F4877021E03E -:1018400030E0A90102C0440F551F8A95E2F7CA0192 -:10185000809590915F04892380935F04E9CF9BE595 -:10186000980F933020F490E080E00C946C08885A34 -:10187000873120F490E080E00C94560808950F938F -:101880001F93CF93C82F882309F469C08CEF8C0F66 -:10189000813AB0F502E312E088E392E0F801219189 -:1018A000C21701F122E0E833F207C9F7EFEF80E059 -:1018B000D8019D918D01C91781F0EF3F19F4911165 -:1018C00001C0E82F8F5F863099F7EF3F31F00E2E81 -:1018D000000CFF0BE05DFD4FC283CF911F910F9174 -:1018E0000C946A0BE2E3F2E02191C21303C0DF0122 -:1018F00011971C928E179F07B9F70E946A0BD6CFDB -:1019000080E28C0F883068F4C77021E030E001C0BD -:10191000220FCA95EAF780915F04822B80935F04BF -:10192000DCCFEBE5EC0FE33050F4F0E0E154FE4F98 -:10193000808190E0CF911F910F910C946C08C85A50 -:10194000C73168F4EC2FF0E0EE0FFF1FEE53FE4FAF -:1019500080819181CF911F910F910C945608CF9166 -:101960001F910F910895982F92959F7011F0892FD4 -:1019700094E0282F2695269511F09E5F822F86955C -:1019800009F09F5F892F0895DC01FB01808191811F -:10199000803891054CF08FE78C93808191818F572F -:1019A000910991838083089581382FEF92073CF449 -:1019B00081E88C938081918181589F4FF2CF8C93E5 -:1019C000118210820895681708F5861B682F21E0A0 -:1019D000469FA0011124649FF001659FF00D112422 -:1019E0004091590150915A01E49FC001E59F900D2B -:1019F000F49F900D1124880F892F881F990B9195C2 -:101A0000222319F09195819591090895681B20E092 -:101A1000DFCF0F931F93CF93DF9300D000D0CDB7CC -:101A2000DEB789836A834B831C8204E610E024E0DE -:101A300030E0AE014F5F5F4F60E084E10E945B32B7 -:101A40000F900F900F900F90DF91CF911F910F91FA -:101A5000089580913203882329F047E669E98BE2F3 -:101A60000C94090D6091590170915A0190E080E049 -:101A70000E94AA3520E030E040E05CE30E940B3693 -:101A800020E030E040E85FE30E94A535882321F0A4 -:101A900047EC6BE180E0E4CF41E265EA89EDE0CF1D -:101AA000CF92DF92EF92FF920F931F93CF93DF932A -:101AB0006C017B0164E670E088E70E944331EC0131 -:101AC00097FD12C010E000E0F601E00FF11F8491D5 -:101AD00064E670E00E94BD31EC01892B29F40F5FB0 -:101AE0001F4F0E151F0581F70E94D732CE01DF91DF -:101AF000CF911F910F91FF90EF90DF90CF900895BD -:101B000080914E0490914F04911103C091E0892778 -:101B10000895882369F062E070E08CEB9BE00E94FE -:101B2000500D892B19F080914E04089510924E04A7 -:101B300080914E04EBCFCF93C0914E0480914F041F -:101B40008823D1F00E944A086058774C8E4F9F4FEF -:101B500060934A0470934B0480934C0490934D041B -:101B6000C11108C062E070E08AEB9BE00E94500D5A -:101B7000892B29F0C0914E048C2FCF91089581E0DC -:101B800080934E04F7CF90916C04943029F58093A4 -:101B90005B0470935D0460935C049093E9008FEFA5 -:101BA0009091E800815095FD06C095ED9A95F1F76A -:101BB00000008111F5CF8091E80085FF0DC050E055 -:101BC00040E063E070E08BE594E00E940D078091B7 -:101BD000E8008E778093E8000895BC0184E00C94BF -:101BE000C30DBC0183E00C94C30D9C0184E0809381 -:101BF000E9009FEF8091E800915085FD06C085EDDA -:101C00008A95F1F700009111F5CF8091E80085FFEA -:101C10000CC050E040E066E070E0C9010E940D0792 -:101C20008091E8008E778093E8000895CF93DF934A -:101C3000EC0181E08093E9008FEF9091E800815002 -:101C400095FD06C095ED9A95F1F700008111F5CF4D -:101C50008091E80085FF14C050E040E068E070E04B -:101C6000CE010E940D078091E8008E778093E800F6 -:101C700088E0FE01A2E6B4E001900D928A95E1F7BA -:101C8000DF91CF9108959F92AF92BF92CF92DF9252 -:101C9000EF92FF920F931F93CF93DF937C015B0131 -:101CA0006A018091D10201E010E08A3010F40AE06C -:101CB00010E0C1E0D0E0F894B501C701F601099544 -:101CC000982E0E94A409911004C021960C171D079C -:101CD0006CF4892DDF91CF911F910F91FF90EF90C0 -:101CE000DF90CF90BF90AF909F900895CC9F9001D0 -:101CF000CD9F300D300D112490E080E045E34A95F2 -:101D0000F1F70000019682179307C1F7D4CF8091B5 -:101D1000A102811110C08091D80080618093D80009 -:101D20008AE18A95F1F700C08091D90080FF0AC04E -:101D300081E08093A10281E09091A102913009F0AD -:101D400080E0089582E08093A1020E94BD06109277 -:101D50006C04F1CF0E94870E882351F0E091520469 -:101D6000F0915304309721F00190F081E02D099417 -:101D700080E008951F93CF93DF93182FEB010E940B -:101D80003F0C8FE99FE00197F1F700C00000219719 -:101D9000C1F7812FDF91CF911F910C94060C4F92C8 -:101DA0005F926F927F928F929F92AF92BF92CF92EB -:101DB000DF92EF92FF920F931F93CF93DF93CDB7F4 -:101DC000DEB7CE5DD1090FB6F894DEBF0FBECDBF32 -:101DD000509070019091770490FF5DC080905D03FA -:101DE00090905E038114910409F068C0E0E3F6E08E -:101DF0009E012F5F3F4FBE0161527F4FC901A491E9 -:101E00004A2F50E0DA01AA0FBB1FA40FB51FA15A39 -:101E1000BC4FCD90DD90EC90D901CD92DD92ED924A -:101E20009D0131966A177B0751F720916F0143E0BE -:101E3000249F800D911D1124539A2BB1277F3BB114 -:101E400038605FB7F894BC01549E600D711D112479 -:101E50008617970709F08EC05FBF8FE594E0019762 -:101E6000F1F700C00000C252DF4F0FB6F894DEBF9A -:101E70000FBECDBFDF91CF911F910F91FF90EF90DB -:101E8000DF90CF90BF90AF909F908F907F906F909A -:101E90005F904F900895809171012091720133E01D -:101EA000839FF0011124E15AFC4F821708F096CF6E -:101EB0001182108212828F5F3396F7CF90FF96CFF8 -:101EC000D12CC12C66246394712C53E0452E809153 -:101ED0005C0393010C2C01C0220F0A94EAF78223C1 -:101EE00009F43FC0F601EE0FFF1FE80DF91DE59064 -:101EF000F490E114F10409F479CF45E050E0B70122 -:101F0000CE0101960E943E3509810F3F51F18A8131 -:101F1000800F9927991F8B34910514F08AE490E083 -:101F20005C01AA0CBB1C8A0D9B1DDC01A15ABC4F95 -:101F30005D01049D80011124015A1C4F0A151B05E7 -:101F400020F0B5E0EB0EF11CD8CF4D81413A08F0FE -:101F500040EA98016C818B810E940C090D5F1F4F34 -:101F6000EDCFEFEFCE1ADE0AF8E0CF16D10409F07C -:101F7000AECF3CCFFC014191CF01E8E03BB900007E -:101F800000C047FF2BB9440F000000C000C000C0D4 -:101F90002BB900C0EA9591F75BCFE7E7F4E08081C9 -:101FA0008E7F8083E9E5F3E08281816082832FEF79 -:101FB00080E792E0215080409040E1F700C00000AF -:101FC0000C94CF0EE2E3F2E086E0DF011D928A95E9 -:101FD000E9F70C94DF0B1F93CF93DF93CDB7DEB7F8 -:101FE000AA970FB6F894DEBF0FBECDBF8EE694E081 -:101FF0002091F100DC012D93CD01B4E086379B07E1 -:10200000B9F780916F04833009F471C0B8F481305E -:1020100009F448C0823009F4B4C08091E80083FF1D -:102020003CC180916E0490916F049A3008F035C1E4 -:10203000E92FF0E0E553F94C0C9431358A3009F47E -:102040008FC08B3009F470C0893039F780916E04ED -:10205000813219F78091720490917304009711F006 -:102060000297D9F68091E800877F8093E8008091FD -:10207000E80082FF37C09091F3008091F200029750 -:1020800029F48091F1008B7F813021F48091F1005F -:10209000809361048091E8008B778093E8000E9430 -:1020A0003707BBCF80916E04813A09F0B6CF80919B -:1020B000E800877F8093E800809172049091730418 -:1020C000892B61F468E082E694E070E00E94E90701 -:1020D0008091E8008B778093E8009FCF60E090E0EC -:1020E00080E0F3CF80916C048111C1CF96CF8091B5 -:1020F0006E04813A09F091CF80917204909173043B -:10210000892B09F08ACF8091E800877F8093E800CF -:102110008091E80080FFFCCF809174018093F100F2 -:102120008091E8008E77B9CF80916E04813209F0FA -:1021300074CF8091720490917304892B09F06DCF54 -:102140008091E800877F8093E8000E9437078091A4 -:1021500070048093740110925F040E94E20F5DCFBF -:1021600080916E04813209F058CF8091E800877F1A -:102170008093E8000E943707809171048093600487 -:102180004CCF80916E04813A09F047CF8091E800EE -:10219000877F8093E8008091E80080FFFCCF8091EA -:1021A0006004BCCF803899F0823809F076C0809105 -:1021B00072048F70873008F070C08093E9008091BE -:1021C000EB0085FB882780F91092E90006C080911A -:1021D0006A0490916B04911182609091E800977F5E -:1021E0009093E8008093F1001092F1008091E80054 -:1021F0008E77B5C1882309F4A2C1823009F04DC0A1 -:10220000809170048111A6C1809172048F702FEFAC -:10221000280F263008F041C08093E9002091EB00A0 -:1022200020FF98C1933031F48091EB00806280935D -:10223000EB0090C19091EB0090619093EB0021E056 -:1022400030E001C0220F8A95EAF72093EA0010924D -:10225000EA008091EB008860EACF81111EC01091E6 -:1022600070041F778091E3008078812B8093E300D6 -:102270008091E800877F8093E8000E943707809173 -:10228000E80080FFFCCF8091E30080688093E3004A -:1022900082E0111183E080936C048091E80083FF59 -:1022A0000AC08091E800877F8093E8008091EB006E -:1022B00080628093EB00AA960FB6F894DEBF0FBE43 -:1022C000CDBFDF91CF911F9108958058823028F7BC -:1022D00020917004309171042C3DE3E03E07A1F59C -:1022E00083E08A838AE289834FB7F894DE011396EC -:1022F00020E03EE051E2E32FF0E050935700E491FC -:1023000020FF03C0E295EF703F5FEF708E2F90E0EB -:10231000EA30C0F0C7968D939D932F5F243159F713 -:102320004FBF8091E800877F8093E8006AE270E009 -:10233000CE0101960E94E9078091E8008B77809397 -:10234000E800ABCFC096E7CF809172049091730400 -:10235000432F55274330510509F44AC078F54130E1 -:10236000510509F47AC08BE590E0EEEBFBE04230DA -:10237000510509F092CF2091E800277F2093E800D3 -:1023800020917404309175048217930708F49C011E -:1023900040E02115310509F065C0411163C080910D -:1023A000E80082FDC9CF80916C04882329F2853032 -:1023B00019F28091E80083FFF2CFBECF4132510580 -:1023C00009F43CC04232510509F067CF83309105D2 -:1023D00008F063CFFC01EE0FFF1FEF5DFD4F019092 -:1023E000F081E02D825E9D4FDC018C9190E01AC05F -:1023F000332721303105D1F02115310561F022302C -:10240000310509F04ACFEBE2FCE0E4918E2F90E039 -:10241000EBE2FCE007C0EDE5FCE0E4918E2F90E0FC -:10242000EDE5FCE0009709F438CFA5CFEBE4FCE044 -:10243000E4918E2F90E0EBE4FCE0F4CF8330910543 -:1024400008F02BCF880F991FFC01E95DFD4F01902B -:10245000F081E02D89E090E08ECF82E190E0E9E12B -:10246000FCE089CF80916C04882309F465CF853026 -:1024700009F462CF8091E80083FD5ECF8091E8008F -:1024800082FD8DCF8091E80080FF83CF9091F30093 -:102490008091F2002115310519F08830910550F036 -:1024A00041E0089709F040E08091E8008E77809342 -:1024B000E8006FCF44914093F100319621503109EB -:1024C0000196E8CF803809F0E8CE8091E800877F58 -:1024D0008093E80080916D048093F10087CE811194 -:1024E000DCCE10917004123008F0D7CE8091E80055 -:1024F000877F8093E80010936D040E9437071123B3 -:1025000011F084E005C08091E30087FDFACF81E0FF -:1025100080936C0442E061EC81E00E94560742E245 -:1025200061EC84E00E94560742E261EC82E00E9486 -:10253000560742E260EC83E00E945607AECE8091DF -:102540007004813009F0A9CE81E0933009F080E079 -:1025500080936B041092E9008091E800877F80935C -:10256000E8000E94370799CE1F93CF93DF93162F71 -:10257000C0917E06D0917F068A30D1F42091430429 -:10258000CE018E579440622F70E00E94FD34281BCC -:10259000822F66E00E941135C82FC15020F4DF91D0 -:1025A000CF911F91089560E080E20E94B412F5CFB0 -:1025B0008D30E9F4CE57D44020914304622F70E06F -:1025C000CE010E94FD34281B822F9E01280F311D51 -:1025D0002115324018F080E0D0E0C0E0C80FD11DD6 -:1025E000C258DB4FD0937F06C0937E06D8CF96E0CB -:1025F000FE01A4E4B4E001900D929A95E1F7803ECB -:1026000090F186E0FE0111928A95E9F7C0917E066D -:10261000D0917F06111133C046E050E0BE0184E442 -:1026200094E00E9447359E012E573440892B91F546 -:102630002A5F3F4F40914304642F70E0C9010E941C -:10264000FD34481B463010F4240F311D211572E073 -:10265000370710F030E020E022583B4F30937F06E0 -:1026600020937E069CCFF6E08F9FB0011124665820 -:10267000794F46E050E0CE010E943E35C7CF9E0123 -:102680002A5F3F4FFE012E173F0731F28081809570 -:102690008193F9CFC90145E0969587954A95E1F771 -:1026A00041E050E0BA0102C0660F771F8A95E2F759 -:1026B000CB0160917C0470917D04862B972BB9012E -:1026C0006B5F7F4FE5E076956795EA95E1F702C08D -:1026D000440F551F6A95E2F7842B952B90937D0448 -:1026E00080937C04A5CFFF920F931F93CF93DF932A -:1026F000EC01F62EFC0101900020E9F78F0101505A -:102700001109C017D10730F0DF91CF911F910F91C0 -:10271000FF9008956F2D89910E94B412F2CFE1E4E9 -:10272000F4E08083618324E630E042E050E0BF01C2 -:1027300084EB0C943432CF93C82F60E08CE00E947D -:102740008F136C2F84E00E948F1361E08CE0CF9197 -:102750000C948F131F93CF93DF93CDB7DEB762979F -:102760000FB6F894DEBF0FBECDBF96E0E4E2F3E013 -:10277000DE01179601900D929A95E1F796E0FE0121 -:102780003796DE011D9601900D929A95E1F7188516 -:10279000882309F1162B84E00E949B131E8786E094 -:1027A000FE013D96DE01119601900D928A95E1F7AA -:1027B00086E0FE013196A4E2B3E001900D928A9585 -:1027C000E1F762960FB6F894DEBF0FBECDBFDF9182 -:1027D000CF911F91089560951623E0CFCF93DF939B -:1027E000C3EED2E060E0CE010E9471352196C115A2 -:1027F00084E0D807B9F7DF91CF9108956F927F9267 -:102800008F929F92AF92BF92CF92DF92EF92FF9200 -:102810000F931F93CF93DF938AE7C82E86E0D82EBD -:1028200091ECE92EF12CE701CC58D10936011BC0FF -:10283000F50185909490692DC8010E947135682D2D -:10284000C80101960E94713582E0A80EB11C0E5F8E -:102850001F4FC017D10761F78EE0680E711C2E96CE -:10286000CE15DF0529F08E010E5011095301E0CF7E -:102870007E018CE8E80EF11C8CE8C80ED11C8DE7B7 -:10288000E81683E0F80679F6DF91CF911F910F915A -:10289000FF90EF90DF90CF90BF90AF909F908F9080 -:1028A0007F906F900895CF93C82F6FEF811161E2F1 -:1028B00083E290E00E9471356FEFC11161E184E223 -:1028C00090E00E9471356FEFC11165E285E290E002 -:1028D000CF910C94713580E00E94531460E086E241 -:1028E00090E00E9471350E94FE130E94EE1381E079 -:1028F0000C9453140F931F93CF93DF93C42FD0E006 -:10290000CC0FDD1F2EE0629FC00DD11D11243CE8CD -:10291000839FC00DD11D1124CE0187960E945D3585 -:10292000082F10E0102F0027CE0188960E945D35F9 -:102930009801282BC901DF91CF911F910F91089524 -:10294000462F853038F47A3028F4673018F4672F32 -:102950000C947A1490E080E00895CF92DF92FF9279 -:102960000F931F93CF93DF936C01009176048091B6 -:102970009202082BC7E0D0E010E0FC2EC8010C2E1C -:1029800002C0959587950A94E2F780FD0CC02197C7 -:10299000A0F7F12C8F2DDF91CF911F910F91FF9018 -:1029A000DF90CF900895B6018C2F0E94A0140E9452 -:1029B000000A019761F3EECFCF93DF93EC010E9401 -:1029C000AD14BE010E94A014DF91CF910C94000AB7 -:1029D000FC01808191810E94DC14292F2F70929537 -:1029E0009F7092509E3078F4E92FF0E0EB52F94C52 -:1029F0000C943135803F19F020F4883E20F481E0BA -:102A00000895843FE1F380E00895883EC0F3813F5C -:102A1000D1F7F5CF822F869586958695089583E226 -:102A200090E00E945D35813289F484E290E00E945A -:102A30005D35813159F485E290E00E945D3591E089 -:102A4000853209F090E0892F8170089580E0FCCFF5 -:102A5000CF92DF92EF92FF926B017C010E94F60809 -:102A6000B701A60188E090E0FF90EF90DF90CF9053 -:102A70000C948335AF92BF92CF92DF92EF92FF9288 -:102A80000F931F93CF93DF9300D00F92CDB7DEB794 -:102A9000082FF62E142FE22E8091770480FF4FC06E -:102AA000E82FE695AE2FB0E0AE5EBD4F9C919093BF -:102AB00059038E7F823009F056C0413A08F040EA4F -:102AC0009E012F5F3F4F6F2D802F0E940C09809138 -:102AD000770480FF11C02B8139814A818091710177 -:102AE0009091720153E0859FF0011124E15AFC4F4F -:102AF000891798F10E94CF0E80917804801308C046 -:102B0000809179048F1104C080917A04811729F093 -:102B100080915B03826080935B0300937804F09262 -:102B2000790410937A04EE2051F06091770470914B -:102B300078048091790490917A040E9428150F906E -:102B40000F900F90DF91CF911F910F91FF90EF9019 -:102B5000DF90CF90BF90AF90089541833083228360 -:102B60008F5F3396C5CF923039F6E2508E2F817049 -:102B7000D82EE695F0E0E55DF94FA590B490C12C14 -:102B8000BB2460917301C61608F0B4CF2C2D30E041 -:102B9000A29EC001A39E900DB29E900D112470E0E4 -:102BA0000E94FD34802FD11016C0860F4091710114 -:102BB000420F532F511D9A01220F331F240F351F2F -:102BC000215A3C4F412F113A08F040EA6F2D0E94E4 -:102BD0000C09C394D6CF861BE9CFE7E7F4E0438125 -:102BE00021E1421B08F440E021E0628181810C94E4 -:102BF0003A15E7E7F4E0438121E1420F08F44FEF93 -:102C000021E0628181810C943A15E7E7F4E062816A -:102C100021E1621B08F460E021E0438181810C9492 -:102C20003A15E7E7F4E0628121E1620F08F46FEF03 -:102C300021E0438181810C943A15E7E7F4E081813A -:102C400021E04381628188500C943A15E7E7F4E073 -:102C5000818121E043816281885F0C943A158091E3 -:102C60007B04882319F0815080937B046091770462 -:102C7000709178048091790490917A040C942815CD -:102C800080917B04833018F48F5F80937B04609184 -:102C90007704709178048091790490917A040C946F -:102CA00028159091770490FF27C0917081111DC065 -:102CB00092609093770480915B03816080935B03C3 -:102CC000662351F0609177047091780480917904C3 -:102CD00090917A040E94281520E040917A04609136 -:102CE0007904809178040C943A158C3010F0966138 -:102CF000E0CF880F982BDDCF089521E030E0A901C7 -:102D000002C0440F551F8A95E2F7CA0120915C0367 -:102D1000662391F0822B80935C0380915B0380613A -:102D200080935B0380915A03811109C080917704DD -:102D300060E086950C94511680958223ECCF08951F -:102D4000CF93DF93C82FC17082FBDD27D0F981FBC1 -:102D5000662760F985E00E947D1661E06C2786E0B9 -:102D60000E947D166D2F87E0DF91CF910C947D1628 -:102D70000F931F93CF93C82F61E08111682F61706B -:102D800080E00E947D16C1FB662760F9C11101C079 -:102D900060E081E00E947D16C2FB662760F9C111E8 -:102DA00001C060E082E00E947D16C3FB662760F9E7 -:102DB000C11101C060E083E00E947D16C4FB66275C -:102DC00060F9C11101C060E084E00E947D164C2FC3 -:102DD00050E070E060E0DB01CA01F4E0B695A79531 -:102DE00097958795FA95D1F70097A105B10549F117 -:102DF000AC01BD0184E08A019B01E2E03695279594 -:102E000017950795EA95D1F70115110521053105AB -:102E100019F08E5FB901A80176956795579547958A -:102E2000452B462B472B09F08F5F8230D1F158F4A8 -:102E30008823E9F0813059F18C2FCF911F910F91A8 -:102E4000089580E0D8CF8330A1F18430A9F720E045 -:102E500040E56FEF8AED0E943A1587E00E949B13D0 -:102E600080910001882341F3109232030DC020E0CD -:102E700040E56FEF82E30E943A15809100018823BC -:102E800099F381E0809332030E94290DD5CF20E091 -:102E900040E56FEF8CEF0E943A1585E40E949B138A -:102EA000CBCF20E040E56FEF80E50E943A1585E248 -:102EB000F5CF20E040E56FEF86E70E943A158FE1FD -:102EC000EDCF0E94B816809376040C94DF0B8091AE -:102ED0007604982F9670963019F488600C946117D8 -:102EE000877FFCCF21E030E001C0220F8A95EAF70E -:102EF00020958091760482230C94611721E030E0C4 -:102F000001C0220F8A95EAF780917604822B0C94F7 -:102F10006117809177048695815009F48BE061E018 -:102F20000C9451168091770486958F5F8C3008F051 -:102F300081E061E00C9451168091770480FF07C016 -:102F4000869582588F77893010F40C94921761E03F -:102F500082E00C945116E7E7F4E083E0808311826D -:102F60008FEF828380EA83831482A9E5B3E012960F -:102F70008C911297836012968C936081718182810B -:102F800093810C942815AB01BC0188E190E00C946E -:102F90008335CF93C82FEFE3F4E0982F990F990F63 -:102FA000990F80818770892B8083E0E4F4E09C2F67 -:102FB0009295969597708081887F892B8083609108 -:102FC0003D0470913E0480913F04909140040E9422 -:102FD000C3176C2F82E0CF910C948F13EDE3F4E0D4 -:102FE00089E88083118282818C7F828360913D0495 -:102FF00070913E0480913F04909140040C94C3175B -:10300000EDE3F4E080818E7F808360913D047091D8 -:103010003E0480913F04909140040C94C317EDE36B -:10302000F4E080818160808360913D0470913E0472 -:1030300080913F04909140040C94C31769EE7EEF99 -:1030400090E080E00E948F3560E082E090E00E9496 -:10305000713560E083E090E00E9471351092920239 -:1030600060E084E090E00E94713560E082E290E0F0 -:103070000E94713560E085E090E00E94713560E06B -:1030800086E090E00E9471356FEF87E090E00E944B -:10309000713540E050E0BA0188E090E00E9483354D -:1030A00060E08DE090E00E94713540E050E0BA01B0 -:1030B00088E190E00E94833560E087E190E00E9423 -:1030C000713540E050E0BA018CE190E00E94833518 -:1030D00070E060E080E290E00E948F350E94EE1781 -:1030E00080E00E9453140E946B1440E050E0BA014B -:1030F0008FE090E00E94833540E050E0BA0183E128 -:1031000090E00C9483350F931F93CF93DF9300D0FF -:1031100000D0CDB7DEB74091C5025091C602609194 -:10312000C7027091C8022FB7F8948091570490910C -:103130005804A0915904B0915A042FBF841B950BD9 -:10314000A60BB70B84369105A105B10588F10E9445 -:10315000870E882379F10E944A086E5F7F4F8F4F58 -:103160009F4F69837A838B839C8380912C019091FC -:103170002D0181559D4F40912B0150E04530510567 -:1031800010F044E050E0BE016F5F7F4F0E94543565 -:1031900084E090E00E944934892BD9F40E944A08C7 -:1031A0006093C5027093C6028093C7029093C802D1 -:1031B00081E010C00E944A080091D2021091D3020F -:1031C0002091D4023091D502600F711F821F931F8E -:1031D000C4CF80E00F900F900F900F90DF91CF91B0 -:1031E0001F910F9108958F929F92AF92BF92CF92AD -:1031F000DF92EF92FF920F931F93CF93DF93EB0138 -:1032000088809980AA80BB809FB7F894C0905704AB -:10321000D0905804E0905904F0905A049FBFC81809 -:10322000D908EA08FB0894E6C916D104E104F104C0 -:1032300010F4442311F1E82E082E000CFF089AE048 -:103240008902F0011124EF5FFE4F83819481815543 -:103250009D4F428150E00417150708F4A801B901F9 -:103260000E945435C7010E944934892BA1F40E9461 -:103270004A08688379838A839B8381E0DF91CF91B9 -:103280001F910F91FF90EF90DF90CF90BF90AF9084 -:103290009F908F90089580E0F1CF0F931F93CF936D -:1032A000DF930F92CDB7DEB780914E0489832091D2 -:1032B000C40290E041E02817190609F440E001E05B -:1032C00010E09E012F5F3F4F6DEC72E086E00E94A0 -:1032D000F3180F90DF91CF911F910F9108950F93E5 -:1032E0001F93CF93DF93CDB7DEB729970FB6F8942E -:1032F000DEBF0FBECDBF85E0E7E7F4E0DE0111964B -:1033000001900D928A95E1F78091590390915A03AB -:10331000A0915B03B0915C038E839F83A887B987DC -:1033200041E08885811101C040E009E010E09E0184 -:103330002F5F3F4F69EC72E085E00E94F318811126 -:1033400010925B0329960FB6F894DEBF0FBECDBF77 -:10335000DF91CF911F910F9108956F927F928F927D -:103360009F92AF92BF92CF92DF92EF92FF920F9314 -:103370001F93CF93DF930F92CDB7DEB7862E5A01FE -:103380006901682E880F7708C3010E944934892B90 -:1033900009F088C08AE0869DF001879DF00D112418 -:1033A000EF5FFE4F458150E04115510511F041E0BE -:1033B00050E08AE0869DF001879DF00D1124EF5FBB -:1033C000FE4F6681778161557D4FCE0101960E9447 -:1033D0005435F50140815181628173812FB7F89492 -:1033E0008091570490915804A0915904B0915A04C7 -:1033F0002FBF841B950BA60BB70B84369105A10537 -:10340000B10540F4B701C8010E94DB089981891712 -:1034100009F44FC0082C000C9908C4010E944934DB -:10342000892B91F0B12C8B2D0F90DF91CF911F91B3 -:103430000F91FF90EF90DF90CF90BF90AF909F9053 -:103440008F907F906F9008958AE0889DF001899D0C -:10345000F00D1124EF5FFE4F458150E0E416F506B4 -:1034600008F4A7018AE0889DF001899DF00D1124E0 -:10347000EF5FFE4F6681778161557D4FC6010E94E7 -:103480005435B701C8010E94DB0899818913CACF5E -:103490000E944A08F5016083718382839383BB2471 -:1034A000B394C1CFB12CA701B801C6010E94543515 -:1034B000BACFBB24B394F7CFCF92DF92EF92FF92B3 -:1034C0000F931F93CF93DF9300D000D00F92CDB70F -:1034D000DEB76B0185E0E82EF12C00EB12E09E01D7 -:1034E0002F5F3F4F47EA52E061E080E00E94AD1954 -:1034F000882349F095E0FE013196A2EAB2E00190FE -:103500000D929A95E1F795E0E2EAF2E0D60101909A -:103510000D929A95E1F70F900F900F900F900F90EA -:10352000DF91CF911F910F91FF90EF90DF90CF909F -:10353000089590E080E00E946B35893E9E4F11F423 -:103540000C940F1580E008951F920F920FB60F9202 -:1035500011242F933F934F935F936F937F938F9398 -:103560009F93AF93BF93CF93DF93EF93FF93D0914C -:10357000E900DF708091EC00C82FC17080FDC0E8C9 -:103580001092E9008091F000877F8093F00078949A -:103590000E94EB0F1092E9008091F0008860809308 -:1035A000F000CD2BCF70C093E900FF91EF91DF9138 -:1035B000CF91BF91AF919F918F917F916F915F91CB -:1035C0004F913F912F910F900FBE0F901F90189524 -:1035D0001F920F920FB60F9211242F933F934F9388 -:1035E0005F936F937F938F939F93AF93BF93EF936B -:1035F000FF938091E10082FF09C08091E20082FF89 -:1036000005C08091E1008B7F8093E1008091DA001A -:1036100080FF24C08091D80080FF20C08091DA0014 -:103620008E7F8093DA008091D90080FF9BC080E17B -:1036300089BD82E189BD09B400FEFDCF81E08093A0 -:103640006C0480915E04811109C00E94BD060E9435 -:1036500088078091E20084608093E2008091E1001D -:1036600080FF17C08091E20080FF13C08091E200CC -:103670008E7F8093E2008091E20080618093E2007F -:103680008091D80080628093D80019BC85E0809337 -:103690006C048091E10084FF29C08091E20084FFE6 -:1036A00025C080E189BD82E189BD89B5982F9170DF -:1036B00080FFFBCF8091D8008F7D8093D8008091D0 -:1036C000E1008F7E8093E1008091E2008F7E809305 -:1036D000E2008091E20081608093E20080916D04BD -:1036E000882309F445C084E080936C048091E10054 -:1036F00083FF27C08091E20083FF23C08091E10017 -:10370000877F8093E10082E080936C0410926D04C7 -:103710008091E1008E7F8093E1008091E2008E7FB6 -:103720008093E2008091E20080618093E20042E0B9 -:1037300060E080E00E9456078091F00088608093EE -:10374000F000FF91EF91BF91AF919F918F917F9189 -:103750006F915F914F913F912F910F900FBE0F90FE -:103760001F90189519BC10926C0410925E0476CFCD -:103770008091E30087FD93E090936C04B7CF789439 -:103780001F921FB61F9211248F939F93AF93BF93E5 -:103790008091570490915804A0915904B0915A0413 -:1037A0000196A11DB11D8093570490935804A093D6 -:1037B0005904B0935A04BF91AF919F918F911F907C -:1037C0001FBE1F9018959C014FB7F8948091570425 -:1037D00090915804A0915904B0915A044FBF821B94 -:1037E000930B08952FB7F894809157049091580443 -:1037F000A0915904B0915A042FBF08955F926F921F -:103800007F928F929F92AF92BF92CF92DF92EF9270 -:10381000FF920F931F93CF93DF9300D000D00F92AE -:10382000CDB7DEB77C01FC0183819481892B31F017 -:103830008081918189238F3F09F08CC60F900F9072 -:103840000F900F900F90DF91CF911F910F91FF90EC -:10385000EF90DF90CF90BF90AF909F908F907F9030 -:103860006F905F9008950E94AD14182F682F898182 -:103870009A810E94B30B69817A81812F0E94A014E2 -:103880008C01F7018281882361F0F801E65EFC4536 -:10389000ED30F10530F4ED51F94C0C9431350E94C6 -:1038A0000F18D0903D04D0FE1CC08D2D86958370DE -:1038B000F7019281992309F460C1823090F4B70135 -:1038C000C8010E949908882361F0D694D694D694B2 -:1038D00080913E0483708295880F807E8D290E949E -:1038E0009B13F7018281882309F429C6C8018251FC -:1038F0009F45409708F0ECC58FEF93E00E945D353F -:10390000025193EEA92E92E0B92E811197CF0111A9 -:1039100038C11C821B82662463948AE0582E85017C -:103920000F5F1F4FC5010E945D3589831A8288236E -:1039300009F484CF9FEF980F933008F031C18A8348 -:10394000698232E0A30EB11CC8010E945D358B83F1 -:10395000882309F473CF8E010F5F1F4FF801208178 -:103960002223E9F2213009F055C191818281913001 -:1039700009F018C10E5F1F4F6AE070E0893311F43F -:1039800060E570E00E94BA0E13C10E94001889CF52 -:1039900080913D0480FF0DC00E94001860913D049D -:1039A00070913E0480913F04909140040E94C3179F -:1039B00078CF0E940F18F2CF0E94EE1772CF90912D -:1039C0003D04892F86958F5F8370880F997F892B9F -:1039D00080933D04982F9670963001F7897F8093ED -:1039E0003D04DCCF90913E04892F8B7F92FF846051 -:1039F00080933E04D3CF80913D04982F9695969561 -:103A0000969580913E0483708295880F807E892BE5 -:103A10008C3798F48F5F282F220F220F220F90915E -:103A20003D049770922B90933D0482958695837008 -:103A300090913E049C7F892BDBCF81E0ECCF80917D -:103A40003D04982F96959695969580913E048370A7 -:103A50008295880F807E892B11F08150DCCF8BE717 -:103A6000DACF30913E04932F9695969596952091B6 -:103A70003F04822F83708295880F807E892B90E08F -:103A80000196482F440F440F440F3770342B309366 -:103A90003E0435E0969587953A95E1F783702C7F43 -:103AA000822B80933F047ACF30913E04932F9695DA -:103AB0009695969520913F04822F83708295880F6A -:103AC000807E892B8150990BDCCF80913F0482FF4F -:103AD00012C08B7F80933F0460913D0470913E043F -:103AE00080913F04909140040E94C31760E081E000 -:103AF0000E948F13D6CE846080933F0460913D0472 -:103B000070913E0480913F04909140040E94C3173D -:103B100060E08CE00E948F1364E182E00E948F13CA -:103B200065E081E00E948F1361E08CE0E1CF80913D -:103B30003F04982F9695969596958091400482958E -:103B4000880F807E892B883720F4865F0E94C917F2 -:103B5000A8CE88E7FBCF80913F04982F9695969545 -:103B60009695809140048295880F807E892B8431C0 -:103B700010F08A50EBCF84E1E9CF882309F4B1CE6D -:103B80009ECEA114F4E0BF0609F458CEC5010E94F0 -:103B90005D35811101C001502FEFA21AB20AB7CED4 -:103BA0005801D9CE923039F40E5F1F4F0E943F0C5E -:103BB0000F5F1F4FD3CE933029F40E5F1F4F0E942B -:103BC000060CF6CF943019F00F5F1F4FF1CF0E5F48 -:103BD0001F4F30E020E0B8016F5F7F4FF801418157 -:103BE0008053990B8A30910550F02150310900F330 -:103BF0008FE99FE00197F1F700C00000F6CF529ED9 -:103C0000F001539EF00D11249C012E0F3F1F842FB5 -:103C10008B01E1CFE22FF0E0EF51FE4F7490822F45 -:103C200086958695869590E0FC01EF52FE4FE490D4 -:103C30002770F12C022E02C0F594E7940A94E2F763 -:103C4000E1E0EE22FF24FC01EF53FE4FC490D12CA3 -:103C5000022E02C0D594C7940A94E2F7F1E0CF2275 -:103C6000DD24FC01EF54FE4F8490912C02C095940A -:103C700087942A95E2F721E082229924E114F10445 -:103C800019F081EE0E943F0CC114D10419F086EEA8 -:103C90000E943F0C39E36AE070E0731202C060E5F5 -:103CA00070E0872D0E94BA0ECD2819F086EE0E9492 -:103CB000060CEF2819F081EE0E94060C892809F401 -:103CC00077CF6AE070E08CE25DCE81E00E947E17E3 -:103CD00003C081E00E9472170F900F900F900F9019 -:103CE0000F90DF91CF911F910F91FF90EF90DF9098 -:103CF000CF90BF90AF909F908F907F906F905F908C -:103D00000C94671782E0E2CF043F110509F455C116 -:103D100008F057C1053E110509F4DDC0F701928195 -:103D200091113CC280915F0482720A3CFCE51F073E -:103D300009F414C208F06AC1053C3CE5130709F414 -:103D4000F9C108F04EC1033C5CE5150709F4D3C185 -:103D500008F0EBC1023C1C4509F47DC1F70100816C -:103D60001181992309F434C2C8010E94AD14D82EE0 -:103D7000682FC8010E94B30BB8018D2D0E94A014BA -:103D80000E94000A182FB82EF70122814581342F96 -:103D900032953F70892F82958F70C82ED12C8C3030 -:103DA00008F04EC2F601E051F94C0C94313503385D -:103DB000FFE51F0709F481C018F501383FE5130737 -:103DC00009F44AC008F065C000385FE5150709F03E -:103DD000A5CF882309F459C080919C02811106C0A7 -:103DE00081E080939C0282EE0E943F0C0E94F21BB5 -:103DF00090939B0280939A028BE20E943F0C8ECF9D -:103E000005389FE5190709F4BEC008F476C00638E6 -:103E1000FFE51F0709F082CF882309F4CEC0609127 -:103E2000590170915A0190E080E00E94AA3520E08B -:103E300030E040E05CE30E940B3620E030E040E8F8 -:103E40005FE30E94A5358111B5C080EE90E09093AC -:103E50005A0180935901A1C08823A1F080919C024E -:103E6000811106C081E080939C0282EE0E943F0C8B -:103E70000E94F21B90939B0280939A0281EE0E9413 -:103E80003F0CBACF81EE0E94060C8BE20E94060C1A -:103E900045CF882309F442CF81EE0E943F0C83EE88 -:103EA0000E943F0C8FE40E943F0C8FE40E94060C9E -:103EB00083EE0E94060C81EEE9CF882309F42ECF11 -:103EC00081EE0E943F0C83EE0E943F0C80E50E9431 -:103ED0003F0C80E5EBCF80933C0210933B020093B4 -:103EE0003A02882321F081E08093EE0217CF1092EE -:103EF000EE0214CF80933902F0CF882379F18091BC -:103F00003902882349F080913A020E94060C80EE23 -:103F10000E943F0C8AE20CC080913C028823D1F3BE -:103F200080913A020E94060C80EE0E943F0C8CE4C5 -:103F30000F900F900F900F900F90DF91CF911F91E6 -:103F40000F91FF90EF90DF90CF90BF90AF909F9038 -:103F50008F907F906F905F900C943F0C8AE20E944C -:103F6000060C8CE40E94060C80EE0E94060C8091E8 -:103F70003902811105C080913C02882309F45ECC8E -:103F800080913A02D5CF8823C1F0809132038823F3 -:103F900039F010923203109200010E94290DBECE1A -:103FA000809100018111F7CF81E0809332038093EB -:103FB0000001F3CF80E890E04ACF61E00E94AA13AD -:103FC000ADCE62E0FBCF64E0F9CF882321F081E041 -:103FD0008093ED02A3CE1092ED02A0CE1092F002DB -:103FE0009DCE073C2CE5120709F4AEC008F4A7C02B -:103FF000083C4CE5140709F4ACC0093C1C4509F029 -:10400000ADCE4DEE55E169EF75E179C0043DECE5CB -:104010001E07A8F40E3CFCE51F0708F00FCC0C3C73 -:104020002CE5120709F49FC04FE256E160E476E107 -:104030000D3C1C4508F463C061E081E046C0053DCD -:104040004CE5140709F4FACB08F492C00D351D4570 -:1040500009F4F4CB83CE8091770480FF31C08E7F4A -:10406000809377046091770470917804809179044B -:1040700090917A040E94281580915B03816080935F -:104080005B039FEFE0E7F2E09150E040F040E1F7A2 -:1040900000C000000F900F900F900F900F90DF91D5 -:1040A000CF911F910F91FF90EF90DF90CF90BF9035 -:1040B000AF909F908F907F906F905F900C94CF0EF9 -:1040C00081608093770461E086950F900F900F9048 -:1040D0000F900F90DF91CF911F910F91FF90EF9074 -:1040E000DF90CF90BF90AF909F908F907F906F9018 -:1040F0005F900C94511649E857E162E977E10F901F -:104100000F900F900F900F90DF91CF911F910F9113 -:10411000FF90EF90DF90CF90BF90AF909F908F90E7 -:104120007F906F905F900C94F10842E957E169E845 -:1041300077E1E5CF4DE156E166E276E1E0CF46E298 -:1041400056E16DE176E1DBCF45E056E161E176E1F4 -:10415000D6CF41E156E165E076E1D1CF49EF55E1B7 -:104160006DEE75E1CCCF40E456E16FE276E1C7CF6A -:104170000F900F900F900F900F90DF91CF911F91A4 -:104180000F91FF90EF90DF90CF90BF90AF909F90F6 -:104190008F907F906F905F900C949C170E3D1C4504 -:1041A00009F0DCCD0F900F900F900F900F90DF91E2 -:1041B000CF911F910F91FF90EF90DF90CF90BF9024 -:1041C000AF909F908F907F906F905F900C941E188F -:1041D000C8010E948B0BD82ECFCD092F0F70907F76 -:1041E00011F00295007F812F2223C9F0002369F08E -:1041F00090E2910F983010F011110BC080915F0484 -:10420000082B00935F040E946A0B812F0E943F0CD1 -:1042100017C080919102082B00939102F4CF0E9465 -:10422000060C002369F00095105E183010F0B110F4 -:1042300027C080915F04082300935F040E946A0BEB -:1042400098E0C91AD108E4E0CE16D10408F0F6CA05 -:104250000E94AA0E0F900F900F900F900F90DF9179 -:10426000CF911F910F91FF90EF90DF90CF90BF9073 -:10427000AF909F908F907F906F905F900C94A0165E -:1042800080919102082300939102D8CF892F8F70DB -:10429000907F903211F08295807FF1E0BF120CC0C8 -:1042A000222329F0333060F60E94FC0BC9CF323054 -:1042B00038F60E94F10BC4CF222341F03323A1F33F -:1042C00040FFA3CF4F70F7014583EECF332389F32F -:1042D000193309F0F5C0FFEF27EE33E0F15020402D -:1042E0003040E1F700C00000812F0E94060CA8CFEB -:1042F000892F86958695837061F0813009F0A0CF73 -:10430000812F9370211102C090E080E00E94560836 -:1043100097CF812F9370211102C090E080E00E941E -:104320006C088ECF892F8370A1F5211189CF812F41 -:10433000829586958770880F880F412F4F70082EC1 -:1043400001C0440F0A94EAF7212F207114FF07C01F -:104350002FE030E001C0220F8A95EAF7209596956C -:1043600096959370923081F0822F842B933030F4A5 -:1043700080919202913029F0242B82230E94ED0B30 -:104380005FCF842B822BFACF242B8091920282273D -:10439000F5CF8695222311F0892F8170882309F4A7 -:1043A0004FCF812F829586958770880F880F412F78 -:1043B0004F70082E01C0440F0A94EAF7212F207194 -:1043C00014FF07C02FE030E001C0220F8A95EAF702 -:1043D0002095969596959370923081F0822F842B3C -:1043E000933030F480917604913029F0242B82238D -:1043F0000E94611725CF842B822BFACF242B80912A -:1044000076048227F5CF092F0F70222329F0802F01 -:104410000E947E17812F48CF812F0E94F10B802FA1 -:104420000E9472170DCF812FE1EF1E1789F1E1175E -:1044300050F0F0EF1F17B9F02223B1F13111E5CEA2 -:10444000892F8F7129C042EF141749F153EF1513CB -:10445000F3CF80E0222361F29F7181E001C0880FD9 -:104460009A95EAF7C5CF222379F0323008F0E8CEEA -:10447000292F2F7181E090E001C0880F2A95EAF77B -:10448000909176048927B4CF333008F0D9CEF0CF9D -:10449000892F8F71222321F20E947E17D1CE892F7E -:1044A0008F712223C9F3BCCF332379F0893341F4D0 -:1044B0008FEF97EEE3E081509040E040E1F712CFBC -:1044C0008FE39CE90197F1F70DCF892F8F71A8CF6A -:1044D0000031FFE51F0709F4F8CB01312FE5120782 -:1044E00009F410CC0E944A086093F5027093F6021A -:1044F0008093F7029093F802F7018281063F11053D -:1045000009F461CD08F053CC043E110509F45DCDEA -:1045100008F0FACB003E110509F457CD013E110514 -:1045200009F4E8CC0C32110509F0F8CB882309F422 -:1045300055CD81E08093F00210926701EFCB0031FE -:104540003FE5130709F4C5CB01314FE51407A1F688 -:1045500082E0C0CB85E0DE01119601900D928A9534 -:10456000E1F7F701228189819A8121117CC90E949A -:104570008B0B182F80C91F93CF93DF9380915D021F -:10458000807FA9F480915A02882389F080918F025C -:10459000D0915E026091580270915902A0915B0225 -:1045A000B0915C02C62FC72316E0D81304C0DF9178 -:1045B000CF911F91089590E0109711F0CF3F19F41B -:1045C00001968770F2CF189F9001199F300D11242A -:1045D000F901E15AFD4F41814713F2CF4081461363 -:1045E000EFCF42814111ECCF438154814A1B5B0BD9 -:1045F000403A510528F780915D028F708061809369 -:104600005D02F901EC59FD4F80818F7080618083DC -:1046100088E592E00E94FE1BDF91CF911F910C94E0 -:10462000810BAF92BF92CF92DF92EF92FF920F93E6 -:104630001F93CF93DF93CDB7DEB761970FB6F89492 -:10464000DEBF0FBECDBF8C0185E0F801DE011D96F7 -:1046500001900D928A95E1F7F801E28088E5A82E95 -:1046600082E0B82E60915B0270915C026115710569 -:1046700009F432C19091580240915902892F842344 -:104680008F3F09F429C120813181C380D480F0900B -:104690005A02F601E61BF70BFF2009F4E8C08091EF -:1046A0005D02582F507FE03AF10508F0ABC0511180 -:1046B00077C0FE2C431321C092131FC0E1101DC010 -:1046C0008F70806180935D02C5010E94FE1B809106 -:1046D0005D02F80185838F2D61960FB6F894DEBFD9 -:1046E0000FBECDBFDF91CF911F910F91FF90EF9043 -:1046F000DF90CF90BF90AF900895CD2829F0822F02 -:1047000083238F3F09F003C180E0F82FF170DF2E83 -:1047100080FF3CC080918F0240915E0256E084137E -:1047200015C02D873E878D859E850E94DC14292F1C -:1047300022952F702230F0F0243018F59F70F1F0A0 -:10474000F8019581907FD1F4D12C1EC090E0589F44 -:10475000F001599FF00D1124E15AFD4F618136138C -:1047600006C06081261303C06281E6120FC0019665 -:104770008770D5CF9F7011F0882331F3805E883029 -:1047800018F3C8010E94FE1BFD2CA5CFEE2009F4F2 -:10479000A2CF80915D02816080935D02F12C9BCF5E -:1047A000431306C0921304C0F801EE2009F479C047 -:1047B000C8010E94E814882309F1EE20F9F08091E5 -:1047C0005D02803270F02091580230915902388792 -:1047D0002F831986DB86CA868C87CE0107960E94B6 -:1047E000FE1B86E0F801A8E5B2E001900D928A95E3 -:1047F000E1F70E94BB22FF24F3946DCFC8010E9411 -:10480000FE1BF9CF51110AC088E592E00E94FE1B01 -:1048100086E0F50111928A95E9F7C0CF43130FC0E6 -:1048200092130DC0E1100BC0F8018583C8010E94EE -:10483000FE1B86E0F50111928A95E9F74CCFC8017D -:104840000E94E8148823D1F2EE20C1F280915D022B -:10485000803238F220915802309159023A832983EC -:104860001B82DD82CC828E83CE010196B8CFE03AE6 -:10487000F105F8F6FE2CEE2009F243131FC0921347 -:104880001DC080915D0280FD10C0982F907F69F05F -:10489000F8018583903F31F0982F907F905F8F7063 -:1048A000892B8583C8010E94FE1B86E0F801A8E5DC -:1048B000B2E001900D928A95E1F70DCFC8010E94F8 -:1048C000E81481118ECF80915D02816080935D023A -:1048D000C8010E94FE1BFFCEEE2009F48FCFC80155 -:1048E0000E94E814F82E882309F488CF86E0F801A6 -:1048F000A8E5B2E001900D928A95E1F78091580207 -:10490000909159020E94DC140E94BB22E4CE81E007 -:104910008E25FBCE1F93CF93DF93CDB7DEB767977E -:104920000FB6F894DEBF0FBECDBF4B8B5C8B6D8B8B -:104930007E8B8F8B6111109291021A8A198A85E001 -:10494000FE017396DE011D9601900D928A95E1F7A6 -:1049500086E0FE013D96DE01179601900D928A9544 -:10496000E1F7CE0107960E941123882389F016E013 -:1049700080918F0290915E0289134BC067960FB6AB -:10498000F894DEBF0FBECDBFDF91CF911F91089588 -:1049900086E0FE013796DE01119601900D928A9510 -:1049A000E1F78A859B85892B11F38F81988589236F -:1049B0008F3FE9F220915E0230E0C90101968770D5 -:1049C000992740918F024817190681F410925F04CD -:1049D0000E94E20F10925E0210928F0286E0E8E5DC -:1049E000F2E0DF011D928A95E9F7C1CF96E0929F30 -:1049F000D001939FB00D1124A15ABD4FFE013196F5 -:104A000001900D929A95E1F780935E020E94810BCE -:104A1000AECF819FC0011124815A9D4F0E94112366 -:104A2000882309F4ABCF80918F0290E001968770C4 -:104A3000992780938F029CCF9F92AF92BF92CF9283 -:104A4000DF92EF92FF920F931F93CF93DF93CDB737 -:104A5000DEB764970FB6F894DEBF0FBECDBF8E01F0 -:104A60000F5F1F4F8AE0D8011D928A95E9F79EE4F7 -:104A7000C92E91E0D92EF12CE12CAA24A394B12CBB -:104A8000F60181916F018F3F09F44AC0F894E82F35 -:104A9000E295EF70F0E021A18F70A50102C0440FF4 -:104AA000551F8A95E2F7CA01922F982B91A392A1E4 -:104AB0008095892382A30E94A40900C0E7E4F1E065 -:104AC00030E020E0912C41914F3F09F47DC0A42FAC -:104AD000A295AF70B0E090968C9190E04F7002C0BC -:104AE000959587954A95E2F780FD6EC08A2D022E36 -:104AF00001C0880F0A94EAF7982A2F5F3F4F2730AA -:104B0000310509F7F601319780818F3F11F00E943E -:104B1000A60950EA5A95F1F7F801EE0DFF1D9082B3 -:104B20008FEFE81AF80A95E0E916F10409F0A8CF2A -:104B30004AE050E0B80188ED92E00E9447357C01E0 -:104B4000892B41F08AE0F801A8EDB2E001900D92C6 -:104B50008A95E1F71091E302E114F104B9F181E0E3 -:104B6000809395020E94F21B90939402809393028B -:104B700080919302909194020E94E31B069770F03B -:104B8000A8EDB2E0E12FF0E0E15BFC4F8D91819365 -:104B900022E0AD3DB207D1F71092950281E090E09E -:104BA000EF28C1F064960FB6F894DEBF0FBECDBFFC -:104BB000DF91CF911F910F91FF90EF90DF90CF90F9 -:104BC000BF90AF909F90089580E096CF809195021E -:104BD0008111CECF0E94870EB82EE091E302882388 -:104BE00009F4C7C08E01005F1F4F85E0D8011D92F8 -:104BF0008A95E9F7F0E09F01215B3C4F79018091B4 -:104C0000D102AE014B5E5F4F6A018A3008F086C068 -:104C10004CE55AE1B801C7010E94430E882309F40C -:104C200094C04DE857E2B801C7010E94430E8823A3 -:104C300009F48BC043E858E1B801C7010E94430E54 -:104C4000882309F482C04FE659E1B801C7010E94E8 -:104C5000430E882309F479C04DE459E1B801C70136 -:104C60000E94430E882309F470C01092D102E09193 -:104C7000E202F0E0AF01415B5C4FD80110E0FA01C5 -:104C80009191AF018D91981731F09F012150310919 -:104C9000F90180831B2DCA16DB0689F780919C02DF -:104CA000882371F080919A0290919B020E94E31BED -:104CB000893E934028F082EE0E94060C10929C02DE -:104CC00088E9C82E82E0D82EF12CE12CD6018D91F6 -:104CD0006D018823D1F08695F70109F447C0EC50A7 -:104CE000FE4F808191819C878B871D860E94F21BDD -:104CF0008160782F9F878E87F601319710824B85D0 -:104D00005C856D858F850E948A24B2E0EB0EF11CD4 -:104D1000E4E0EE16F104D1F6812F44CF80919602A3 -:104D2000909197020E94E31B843F914008F070CF5E -:104D3000A091E202B0E0A15BBC4FF8011D9211927C -:104D4000CE16DF06D9F71B2DA9CF8091D1028F3F58 -:104D500031F08F5F8093D1028A3008F488CF0E94AF -:104D6000F21B9093970280939602E2CFE051FE4FA0 -:104D7000B8CFF0E0E15BFC4FF89485E0A0EBB2E047 -:104D800001900D928A95E1F765E070E080EB92E08A -:104D90000E94DB088093AF020E94A409F894E0917E -:104DA000EB02F0E0E851FD4F80818B878093B602E3 -:104DB00061E070E0CE010B960E94DB088093B502A3 -:104DC0000E94A409F894C090B702D090B802E09075 -:104DD000B902F090BA0280919D0290919E02A0913A -:104DE0009F02B091A002C816D906EA06FB06D1F0D0 -:104DF000C0929D02D0929E02E0929F02F092A00289 -:104E00000E94870E81110EC00E944A08C61AD70A56 -:104E1000E80AF90AC092D202D092D302E092D402F8 -:104E2000F092D5020E94A409F8948091C2028823CE -:104E300021F184FF04C09091C30290935C0380FF32 -:104E40000DC08091BB0280FF25C0909177049160D6 -:104E50009093770460E086950E9451168091C2027B -:104E600081FF09C020E04091BE026091BD028091A7 -:104E7000BC020E943A151092C2020E94A409F89442 -:104E80008091C402882349F00E949B0D0E94A409CE -:104E900080E088CE0E94CD0FE1CF0E94800DF6CF3A -:104EA000EF92FF920F931F93CF93DF9300D000D028 -:104EB0000F92CDB7DEB7162FE82EF12CC701880F61 -:104EC000991F662339F18C509E4FFC01808191819E -:104ED0009A83898301E00B830E94F21B8160782F03 -:104EE0009D838C83F701E856FD4F0127110F102B8E -:104EF000108349815A816B818D810F900F900F90A3 -:104F00000F900F90DF91CF911F910F91FF90EF9035 -:104F10000C948A2480519E4FD8CFCF92DF92EF928B -:104F2000FF920F931F93CF93DF930F92CDB7DEB70E -:104F3000EE24E394F12C06EB12E09E012F5F3F4F2D -:104F40004BEA52E063E082E00E94AD19082F88230B -:104F500021F1C090E5028C2D90E09C0128513D4F3D -:104F600079011981F9018081181BD12E80E00AC0D6 -:104F7000DA94F70180818F5F808360E08C2D0E943E -:104F80005027802F1D14A4F3912F17FD90E0191BBB -:104F900011110EC081110E94680B802F0F90DF91BC -:104FA000CF911F910F91FF90EF90DF90CF900895D8 -:104FB0001F5FF70180818150808361E08C2D0E940A -:104FC0005027802FE5CF1F921FB61F9211248F9379 -:104FD0009F93AF93BF9380915604811113C080912A -:104FE000570490915804A0915904B0915A044196E5 -:104FF000A11DB11D8093570490935804A0935904A8 -:10500000B0935A04BF91AF919F918F911F901FBE93 -:105010001F901895CDB7DEB7E9970FB6F894DEBFAD -:105020000FBECDBF84B7877F84BF0FB6F894A89515 -:1050300080916000886180936000109260000FBED4 -:1050400080E890E00FB6F89480936100909361003F -:105050000FBE85B7806885BF85B7806885BF82EA47 -:1050600099E090932F0280932E020E94BD060E9429 -:1050700088078091E20084608093E20078948091B8 -:105080006C048823A1F01091E9001F709091EC004E -:10509000892F817090FD80E8182B1092E900809193 -:1050A000E80083FD0E94EB0F1F701093E90082E07F -:1050B00084BD93E095BD9AEF97BD80936E001092EA -:1050C000D2021092D3021092D4021092D5020E9402 -:1050D0000F15811102C00E946B140E94870E8093ED -:1050E000580180915801882309F4C6C010926F01BD -:1050F00085E2809370010E94870E81110E943C33EB -:105100008091580181112FC0FE01359686E0DF01A4 -:105110001D928A95E9F786E6898387E98A8386EC7A -:105120008B8384E38C8385E38D833497AEE4B1E095 -:10513000CE010B9621912D938E179F07D9F787E00B -:10514000E5E7F1E0DE01919601900D928A95E1F795 -:10515000FE01B196A7E4B1E0CE01889621912D938E -:105160008E179F07D9F78091580195E0811190E043 -:105170009093E30285E0891B8093E2020EE411E044 -:10518000A3E5EA2EA1E0FA2EF80181918F018F3F6D -:1051900011F00E94A609E016F106B1F707E411E04C -:1051A000FEE4EF2EF1E0FF2ED8018D918D018F3FAF -:1051B00011F00E94A609E016F106B1F7E8EDF2E061 -:1051C00082EE92E0AFE4B3E011921D928E179F073A -:1051D000D9F70E94991A811102C00E941E1882E01C -:1051E00090E00E945D358093440384E090E00E944B -:1051F0005D35182F82E290E00E945D35982F812F57 -:105200009093D7028093D6020E941C25EFE7FBEB18 -:105210003197F1F700C000000E941C2580914F03D8 -:1052200080FF2EC06FEF7FEF90E080E00E948F350F -:1052300081E08093E00080E28093D8001092C90062 -:105240008FE19EE40197F1F700C0000087E090EB4A -:10525000DC018093800690938106A0938206B09330 -:10526000830688E19CE00FB6F894A89580936000CF -:105270000FBE90936000FFCF85E280936F0139CF1E -:1052800083E090E00E945D350E94ED0B80917604F2 -:105290000E94B8160E94991A811102C00E941E181D -:1052A00088E190E00E94653560933D0470933E0470 -:1052B00080933F0490934004672B682B692B11F473 -:1052C0000E94EE170E943D3167E081E00E948F133B -:1052D00065E586E10E948F1363E687E10E948F13E4 -:1052E00060EA8AE10E948F1369E98BE10E948F13C3 -:1052F00065EF8CE10E948F1360EA8DE10E948F13AD -:1053000060E38EE10E948F1366E083E00E948F13BA -:1053100061E08CE00E948F1360E081E00E948F13B7 -:1053200060E08CE00E948F136FE084E00E948F1396 -:1053300061E08CE00E948F130E94870E811102C0F1 -:105340000E943F3383E080931A0380E280934304FA -:105350000E943D316DE070E084E792E00E94500DC4 -:10536000892BE9F580911A0363E070E081FD9EC20C -:1053700081E792E00E94500D892B89F56DE070E085 -:1053800081E692E00E94500D892B49F50E944A085F -:105390006058774C8E4F9F4F60934A0470934B0434 -:1053A00080934C0490934D04EEE7F4E080E092E0AB -:1053B000DF019C011D9221503040E1F7F0937F0600 -:1053C000E0937E068FEF9FEF90937D0480937C04A3 -:1053D00081E080934F0480934E0410921B038091D0 -:1053E000E402811136C00E94991A811104C00E9402 -:1053F0001E180E94AB1788E090E00E94653560930C -:105400007704709378048093790490937A04809160 -:105410005B03836080935B036E7F71F40E94AB1724 -:1054200088E090E00E94653560937704709378047B -:105430008093790490937A040E94F608809177040F -:1054400080FF04C060E086950E94511681E0809341 -:10545000E40280915801811106C084EF80936601B7 -:1054600085EF8093650120916601A22FA295AF7010 -:10547000B0E091963C9191972F7081E090E0BC0153 -:10548000022E01C0660F0A94EAF7462F4095432387 -:1054900091964C93919792963C919297362B929637 -:1054A0003C93929740916501E42FE295EF70F0E014 -:1054B00031A14F70042E01C0880F0A94EAF7982F8B -:1054C0009095932391A392A1892B82A390968C917E -:1054D00090E002C0959587952A95E2F7817020A10A -:1054E00030E002C0359527954A95E2F792E020FF1B -:1054F00090E0892B8093EC028091580111E0812784 -:105500008093EB02312F381B3093E5020E943D312E -:1055100040E060E080E00E94090D60E08AE00E94C7 -:10552000511681E892E090935E0380935D0381E0E1 -:105530000E94611780EE90E090935A018093590188 -:10554000109332030E94290D8BE591E09093530450 -:10555000809352043E018DE3680E711C80916C04AF -:10556000FF24F39400E112E1853009F4F2C10E94B6 -:105570001C25E82E81110E944A08E5E4F3E0AFE41F -:10558000B3E010E000E0B02EDD9081918D1509F4BC -:1055900004C28D25C12CFF24F394982F9F2109F478 -:1055A000F7C10E94870E882399F0CEA6BFA6DF2000 -:1055B00081E009F480E088AB0E94F21B8160782FC3 -:1055C0009AAB89AB4EA55FA568A98AA90E948A24D7 -:1055D000F801EB5BFC4F8081F826F0828091EC02B1 -:1055E000E82FEE0FEE0F90916601A92FA295AF70F4 -:1055F000B0E090962C9130E09F7002C035952795D1 -:105600009A95E2F72170332790916501A92FA29511 -:10561000AF70B0E090964C9150E09F7002C05595ED -:1056200047959A95E2F7CA018170992740FF02C019 -:1056300082E090E0822B8E2B8093EC021091EB02A3 -:105640008F70E82FF0E0E650FE4F80819091EA02E3 -:10565000890F8093EA02F12C84306CF0E12FF0E0A6 -:10566000E851FD4F80818F5F808360E0812F0E9431 -:105670005027FF24F3948091EA028D3F6CF4E12FD0 -:10568000F0E0E851FD4F80818150808361E0812FFF -:105690000E945027FF24F3948091EA02082E000C08 -:1056A000990B64E070E00E941D358093EA02F110CE -:1056B0000E94680B80914F04882351F180911C0354 -:1056C00090911D030E94E31BC29708F07DC12091B9 -:1056D0007C0430917D042115310509F0A0C2809130 -:1056E0004E048823A9F00E944A0800914A041091B0 -:1056F0004B0420914C0430914D04601B710B820BC4 -:10570000930B6F3F7F4F8F4F9F4710F40E94800D88 -:10571000E11001C0F1100E949B0D809142038A307C -:1057200008F0BAC380914003909141030E94E31BAB -:10573000089708F4B1C304E610E025E030E04BE33D -:1057400053E064E084E10E948832892B09F075C33C -:105750001092420320913203222359F080913B039F -:1057600090913C0398278927982790933C03809336 -:105770003B0386E0E4E2F3E0DE01919601900D92B6 -:105780008A95E1F786E0FE01B196DE01119601905F -:105790000D928A95E1F786E0FE013196A5E3B3E02C -:1057A00001900D928A95E1F790913F038091360325 -:1057B00097FD3AC38E7F8093360380913303909197 -:1057C0003403009709F02AC360913B0380913C03A6 -:1057D00000913D0310913E03222309F4F2C241E0FF -:1057E0000E94E30C2091300330913103820F931F0C -:1057F000909331038093300341E0602F812F0E940A -:10580000E30C20912E0330912F03820F931F90936E -:105810002F0380932E0360E373E08AE393E00E94FA -:10582000C40C6EE273E089E393E00E94C40C109212 -:1058300037031092380386E0E5E3F3E0DE011196CA -:1058400001900D928A95E1F786E0FE013196A4E27F -:10585000B3E001900D928A95E1F7309126032091F3 -:105860002703909128038091290370912003609170 -:1058700021034091220350912303F0912503E091ED -:105880001F03FE13E0C2332311F07313DCC2222383 -:1058900011F02613D8C2882311F08513D4C299239E -:1058A00019F081E04913D0C280E0CEC28EE692E0CA -:1058B00061CD80916C04843009F43BC00E94800D5E -:1058C00040E060E080E00E94090D80E00E94A016A8 -:1058D0008091E702811109C0F092E702809177047C -:1058E00081708093E6020E94CD0F10925604A8E1C9 -:1058F000B0E0E0E40FB6F894A895A09360000FBE66 -:10590000E093600083B7817F846083BF83B7816049 -:1059100083BF7894889583B78E7F83BF0FB6F89442 -:10592000A89580916000886180936000109260006B -:105930000FBE80916B04882361F00E941C25EFE468 -:10594000F3E08191811178C429E533E02E173F07F8 -:10595000C1F780916C04853009F4ABCF10925F04DD -:105960000E94E20F0E94AA0E0E94A0161092E70267 -:105970008091E602882349F08091770481608093CA -:10598000770460E086950E9451160E94290DEFCDA4 -:10599000C394FF0C37E0C31200CE0F5F1F4F0A30D5 -:1059A000110509F0F0CD8FEF8BAB8CAB1DAA0E94D7 -:1059B000F21B8160782F9FAB8EAB4BA95CA96DA9C0 -:1059C0008FA90E948A240ACE0E94F21B90931D0385 -:1059D00080931C0360E080E00E9482080E94AA0E6F -:1059E0008093F9020E94870E882331F14091F502DD -:1059F0005091F6026091F7027091F8022FB7F89477 -:105A00008091570490915804A0915904B0915A0480 -:105A10002FBF841B950BA60BB70B81339547A105B0 -:105A2000B10540F00E94800D80914F04882309F455 -:105A300056CE4DCE0E949B0D0E94870E882309F4FE -:105A4000D5C061E080E00E94820860E08CE791E0D0 -:105A50000E94731362E080E00E94820880917604C5 -:105A60000E94B30C823009F49BC008F090C08823D8 -:105A700009F496C0813009F499C065E080E00E9485 -:105A8000820860E08AE991E00E94731366E080E09A -:105A90000E9482086091F902669561708FE991E039 -:105AA0000E94731367E080E00E9482086091F9020F -:105AB0006095617084EA91E00E94731368E080E071 -:105AC0000E9482086091F90262FB662760F988EA09 -:105AD00091E00E9473137DA66CA64091F102509153 -:105AE000F2026091F3027091F4022FB7F894809162 -:105AF000570490915804A0915904B0915A042FBFB3 -:105B0000841B950BA60BB70B8D329140A105B105F7 -:105B100008F48ACF0E944A086093F1027093F2025F -:105B20008093F3029093F4028091F002811104C0FB -:105B300080916701811142C06DE080E00E9482087F -:105B400060E08DEA91E00E9473136AE080E00E94B9 -:105B5000820881E0809367018091EF0290E00196D6 -:105B6000817099278093EF0221E030E0281B390BE8 -:105B700040E6429FC001439F900D11242091EE0208 -:105B8000222351F1855F9B4F0E947A064DCF8330CF -:105B900089F0843009F071CF60E08EE891E003C0B5 -:105BA00060E082E891E00E94731367CF60E088E8CC -:105BB00091E0F9CF60E084E991E0F5CF6AE080E020 -:105BC0000E94820860E08DEA91E00E9473136BE00E -:105BD00080E00E948208C0CF2091ED02222319F0BC -:105BE000855B9C4FD1CF85579D4FCECF64E080E041 -:105BF0000E94820860E083EB91E00E94731365E0ED -:105C000080E00E94820860E089EB91E00E947313BB -:105C100069E080E00E9482088BEC94E0B5CF80912F -:105C20001B0361E070E081115ACD082F10E02B01B9 -:105C3000082E02C0440C551C0A94E2F7A901442125 -:105C40005521452B09F448C090911A0390FD46C098 -:105C50008295880F807680936A0198013695279502 -:105C60003695279520936D01815E80936B0110928C -:105C70006E0124E630E047E050E068E671E088E736 -:105C80000E943432892B09F02ACDA80175E0440F17 -:105C9000551F7A95E1F780911A0380FD2DC0425877 -:105CA0005B4F04E610E020E230E060E488E70E9409 -:105CB0005B32892B09F013CD0E949B0DC2018095A8 -:105CC000909540907C0450907D0448225922509237 -:105CD0007D0440927C0403CD8F5FA7CF880F880F8F -:105CE000880F80936A0110926D01895F80936B0128 -:105CF00083E080936E01BDCFEAEFF2E080E2DF0146 -:105D00001D928A95E9F7EEE0F2E0F9AFE8AF0AE01C -:105D100012E099249394A8ADB9AD2D91B9AFA8AF75 -:105D2000F80121908F01240E352E311CC1018258BB -:105D30009B4F1C01E22FF0E0E650FD4F30E020E0E9 -:105D400067E0A62EA21AB92C022E01C0BB0C0A9441 -:105D5000EAF7610190E0D6018D916D018B216A2DEA -:105D6000691B6770862E062E000C770BB82F01C0BA -:105D7000BB0F8A94EAF78B2E719561957109677054 -:105D8000772701C086956A95EAF7882A8081882A54 -:105D900080829F5F9830F9F62F5F3F4F3196283011 -:105DA000310571F6E2E1F2E028AD39ADE217F30713 -:105DB00009F0B1CF04E610E020E230E04AEF52E013 -:105DC00074CF45E00E94E30C20912C0330912D0309 -:105DD000281B390B30932D0320932C0345E0602FB3 -:105DE000812F0E94E30C20912A0330912B03281B62 -:105DF000390B30932B0320932A036CE273E087E383 -:105E000093E00E94C40C6AE273E088E393E00E948E -:105E1000C40C10923A03109239030DCD0197909360 -:105E200034038093330307CD81608093360384E08D -:105E30000E949B1384E190E0F2CF809142038F5F38 -:105E400080934203F8CC81E080FF0FC0E0915204C0 -:105E5000F0915304309749F082E08093240304804A -:105E6000F581E02D84E293E00995109226031092CB -:105E70002703109228031092290386E0E4E2F3E05E -:105E8000AEE1B3E001900D928A95E1F70E94F21B1A -:105E900090934103809340030E94AA0E9091430384 -:105EA000891731F00E94AA0E809343030E94A01626 -:105EB00080916C04843009F051CB83E08093E90039 -:105EC0008091E80082FF4ACB8091E80090E085FF56 -:105ED0000BC00E94DC0630E2E32EF12C8E010F5F36 -:105EE0001F4F8823E1F091E08091E8008B77809349 -:105EF000E800992309F432CBE981E150E33108F05D -:105F000071C0F0E0E450F94C0C9431358091F1000F -:105F1000D8018D938D01B1E0EB1AF10821F3809146 -:105F2000E80085FDF3CF8091E8008B778093E8004F -:105F30000E94DC06882399F3D6CF1A8289E08B83EE -:105F400011C08A81823009F48FC1833091F1813090 -:105F500009F048C00E944A080E9437356B837C8351 -:105F60008D839E8380916C04843009F0F7CA109170 -:105F7000E9001F709091EC00892F817090FD80E8FE -:105F8000182B82E08093E9008091E80080FF0DC02B -:105F900050E040E060E270E0CE0101960E940D0703 -:105FA0008091E8008E778093E8001F701093E900DD -:105FB000D5CADE011396EFE4F3E081918D9323E0DF -:105FC000E935F207D1F7CECF8A81823059F46B815F -:105FD0007C818D819E810E94373586E290E00E940F -:105FE0007135C0CF8FEF8983BDCF4C816B818A81A2 -:105FF0000E947A149827892798279E838D83B2CF91 -:106000000D811E811027012710278A81EB803EE039 -:10601000E39E700111249CE8899FE00CF11C11247F -:106020008C8190E0880F991FE80EF91E612FC7013F -:1060300087960E947135602FC7018896D0CF0E9445 -:10604000FE1390CF8A818138C1F060F4803809F066 -:1060500089CF20E04B8160917904809178040E947F -:106060003A1580CF8238E9F0833809F07BCF20E001 -:1060700040917A046C818B81F2CF60E08B810E9429 -:1060800051168B81811103C00E94CD0F6BCF80917F -:10609000770481608093770460E086950E945116B2 -:1060A00061CF8B8180937B045DCF8A81813899F0A9 -:1060B00030F4803809F056CF80917A0440CF82388E -:1060C00091F0833809F04ECF809178048B838091D2 -:1060D00079048C8347CF8091770480FF02C0869536 -:1060E0002ECF80E02CCF80917B0429CF6091770464 -:1060F000709178048091790490917A040E94281517 -:1061000031CF80E18A832ECF81E08A838DE117CF62 -:10611000CA80DB80DC24CD24DC248E010F5F1F4F7E -:10612000EC80E00EF12EF11CC6018D519D4F0E1535 -:106130001F0509F417CFADE1CA16A1E0DA0650F445 -:106140000E945D35F8018483BFEFCB1ADB0A0F5F35 -:106150001F4FEACFD80114961C92F6CF0A811B81FB -:10616000102701271027FE0131966F01EC80E00E09 -:10617000F12EF11CC8018D519D4FE016F10609F476 -:10618000F1CE0D31F1E01F0728F4D60114966C9181 -:106190000E947135BFEFCB1ADB0A0F5F1F4FEACFAA -:1061A0000E94EE13DFCE85E0ADCFCA80DB80DC2419 -:1061B000CD24DC248E010F5F1F4FEC80E00EF12E0A -:1061C000F11CC6018796E016F10609F4CBCEECEB84 -:1061D000CE16E2E0DE0658F40E945D35D801149632 -:1061E0008C93FFEFCF1ADF0A0F5F1F4FEACFF80142 -:1061F0001482F7CF0A811B811027012710279E01E7 -:106200002F5F3F4F6901EC80E00EF12EF11CC801B9 -:106210008796E016F10609F4A5CE0C3B32E0130791 -:1062200028F4D60114966C910E947135BFEFCB1AF9 -:10623000DB0A0F5F1F4FEBCF09BD19BD09B400FE8C -:10624000FDCF8091D8008F7D8093D8008091E000B1 -:1062500082608093E0008091E00081FDFCCF10928D -:106260005F040E94E20F75CB86E290E00E945D35EC -:106270001B821C821D828E8375CE1092B9008CE029 -:106280008093B80008959F92AF92BF92CF92DF9211 -:10629000EF92FF920F931F93CF93DF93B82EEB01F2 -:1062A0000E94F21B6C01EE24E394F12CC431D10561 -:1062B00060F025E0E22EF12CCF3FDC0731F0CE017B -:1062C00064E170E00E94FD347B0184EAA82E94E82A -:1062D000992E1092BC00A092BC000E94F21B8C016F -:1062E0008091BC0087FF0DC08091B900887F883005 -:1062F00039F18091B900887F803111F10FEF1FEFE4 -:1063000009C00E94F21B801B910B8E159F0540F364 -:106310000EEF1FEFCF3FDC07E1F2C6010E94E31B47 -:106320008C179D07B0F2C801DF91CF911F910F919B -:10633000FF90EF90DF90CF90BF90AF909F90089527 -:10634000B092BB009092BC000E94F21B8C01809125 -:10635000BC0087FF0AC08091B900887F883111F0A6 -:10636000803461F610E000E0DECF0E94F21B801B5B -:10637000910B8E159F0558F3CBCF0F931F93CF939F -:10638000DF93EB018093BB0084E88093BC000E9404 -:10639000F21B8C018091BC0087FF11C02091B900D5 -:1063A000287F81E090E0283211F490E080E0919520 -:1063B00081959109DF91CF911F910F910895CF3F62 -:1063C000DC0741F30E94F21B801B910B8C179D0789 -:1063D00008F38EEF9FEFEECF0F931F93CF93DF93D2 -:1063E000EC0184EC8093BC000E94F21B8C01809134 -:1063F000BC0087FF08C08091BB0090E0DF91CF9187 -:106400001F910F910895CF3FDC0789F30E94F21B83 -:10641000801B910B8C179D0750F38EEF9FEFEECFF3 -:106420000F931F93CF93DF93EC0184E88093BC001C -:106430000E94F21B8C018091BC0087FF08C08091F4 -:10644000BB0090E0DF91CF911F910F910895CF3F56 -:10645000DC0789F30E94F21B801B910B8C179D07B0 -:1064600050F38EEF9FEFEECFCF92DF92EF92FF923D -:106470000F931F93CF93DF936B018A017901B901C9 -:106480000E944331E6010C0D1D1DC017D10761F4B8 -:1064900024E92093BC00DF91CF911F910F91FF90D1 -:1064A000EF90DF90CF90089597FDF2CFB7018991DB -:1064B0000E94BD31EACFCF92DF92EF92FF920F930D -:1064C0001F93CF93DF93C62F6A017901B8010E9411 -:1064D000433197FD0CC0B8018C2F0E94BD31E601FD -:1064E000EC0CFD1CCE15DF0511F097FF0CC024E964 -:1064F0002093BC00DF91CF911F910F91FF90EF90FF -:10650000DF90CF900895B80189910E94BD31EACF04 -:10651000CF92DF92EF92FF920F931F93CF93DF936F -:10652000F82EE62EEA016901B8010E94433197FD79 -:1065300015C0B8018E2D0E94BD3197FD0FC0B80166 -:106540008F2D81600E944331F12CE12C21E0C21A91 -:10655000D108EC14FD0400F597FF11C024E9209345 -:10656000BC001816190614F490E080E0DF91CF917A -:106570001F910F91FF90EF90DF90CF900895C80189 -:106580000E94EC3197FD04C0FE01EE0DFF1D8083DB -:106590002FEFE21AF20ADDCF97FDE0CFC8010E948B -:1065A000103297FDDBCFCC0DDD1D8883D7CF84E97A -:1065B0008093BC0008958EE14A9B02C08150E1F7B0 -:1065C0004A9BFECF08955A9880E28A95F1F75A9A2D -:1065D0000895FC013BE03A95F1F798E020E080E077 -:1065E00031E040E14A95F1F7880F4A9B02C0816093 -:1065F000232742E04A95F1F7000040E14A95F1F780 -:10660000915079F790E19A95F1F799B132E03A9586 -:10661000F1F7000040E14A95F1F792FB992790F9D4 -:1066200092272081920F90830895EF92FF920F930B -:106630001F93CF93DF930F92CDB7DEB719828C01F2 -:106640007C01E60EF11C0E151F0561F481E09981B5 -:10665000911180E00F90DF91CF911F910F91FF90EA -:10666000EF9008950E94DB32CE0101960E94E9323C -:10667000F80181938F01E7CF529A5A9A0895529860 -:106680005A9AEA9AE9E6F0E080818F7C8083089547 -:106690006150770B91E001C0990F6A95EAF720E00D -:1066A00031E0911108C0222391F05A9A80E28A9534 -:1066B000F1F75A980895492F482339F05A9A232719 -:1066C00040E24A95F1F79695ECCF5A98F9CF5A984F -:1066D000EDCFFF920F931F93CF93DF93EC018C01CB -:1066E000060F111DC017D10731F4DF91CF911F9113 -:1066F0000F91FF900895F9900E94E33268E08F2D8A -:106700000E944833EFCF1F920F920FB60F921124C1 -:10671000EF92FF920F931F932F933F934F935F93AB -:106720006F937F938F939F93AF93BF93EF93FF9359 -:10673000CF93DF930F92CDB7DEB719820E94DB3281 -:10674000CE0101960E94E932A82FA695A695A6959E -:10675000282F229525709A2F9570290F922F9370CC -:1067600026952695920F982797708981982B09F086 -:1067700075C0A83008F072C080E18A95F1F75A9A86 -:10678000529AB2E0BA95F1F700C05A98EA2EF12C6D -:10679000EAE0AE9FD0011124AF5FBE4F1896ED9195 -:1067A000FC9119973097B1F06091F8017091F9015F -:1067B00016962D913C911797260F371F13968D91A2 -:1067C0009C911497680F791F15964C911597129606 -:1067D0008C9109958AE08E9DF0018F9DF00D11241A -:1067E000EF5FFE4F6581662351F02091F8013091F3 -:1067F000F90186819781820F931F0E9469330E945D -:10680000E332F0E1FA95F1F75A9852985A9A80E1FA -:106810008A95F1F78AE08E9D80018F9D100D1124DD -:106820000F5F1E4FD80112966C911297662371F17B -:106830002091F8013091F90113968D919C91820F6E -:10684000931F0E941533D801ED91FC91882311F01C -:1068500088E001C082E080830E94DB320F90DF91EC -:10686000CF91FF91EF91BF91AF919F918F917F91C8 -:106870006F915F914F913F912F911F910F91FF90D9 -:10688000EF900F900FBE0F901F901895ED91FC9117 -:10689000DFCF0F931F93CF93DF93EC0108970CF09A -:1068A000A9C08AE08C9FF0018D9FF00D1124EF5F4D -:1068B000FE4F80819181892B09F49CC0F894529AF3 -:1068C0005A9885E08A95F1F700008C2F869585709F -:1068D0009C2F9570890F982F937086958695890FB8 -:1068E0008E0193E0000F111F9A95E1F7082B0E948B -:1068F000E33200C068E0802F0E944833A0E1AA95EF -:10690000F1F752985A9A4A9B27C087E090E04A993B -:1069100025C08AE08C9F80018D9F100D11240F5F90 -:106920001E4FF80165816623A1F12091F801309195 -:10693000F90186819781820F931F0E94153381117F -:1069400028C0529A5A9AD801ED91FC9182E0808336 -:10695000789482E090E016C000C0D5CF0197B9F4DA -:10696000529A5A9A8AE08C9FF0018D9FF00D112463 -:10697000EF5FFE4F0190F081E02D81E080837894FD -:1069800081E090E0DF91CF911F910F91089500C0B9 -:10699000BECF0E94DB32B0E2BA95F1F75A98529A14 -:1069A000E0E1EA95F1F78AE08C9FF0018D9FF00D10 -:1069B0001124EF5FFE4F6281662351F02091F801B0 -:1069C0003091F90183819481820F931F0E94693372 -:1069D0000E94E3328AE08C9FF0018D9FF00D11241C -:1069E000EF5FFE4F0190F081E02D1082789490E0EF -:1069F00080E0C8CF84E090E0C5CFAA1BBB1B51E16B -:106A000007C0AA1FBB1FA617B70710F0A61BB70B1E -:106A1000881F991F5A95A9F780959095BC01CD01C3 -:106A20000895991B79E004C0991F961708F0961BEA -:106A3000881F7A95C9F78095089597FB072E16F45D -:106A4000009407D077FD09D00E94FD3407FC05D0E3 -:106A50003EF4909581959F4F0895709561957F4F75 -:106A60000895EE0FFF1F0590F491E02D099469271A -:106A7000962769277827872778270895FB01DC0167 -:106A800002C005900D9241505040D8F70895FB0187 -:106A9000DC0104C08D910190801921F441505040D7 -:106AA000C8F7881B990B0895FB01DC0102C0019017 -:106AB0000D9241505040D8F70895F999FECF92BDFC -:106AC00081BDF89A992780B50895A6E1B0E044E029 -:106AD00050E00C949735A8E1B0E042E050E00C940F -:106AE0009735262FF999FECF92BD81BDF89A01976F -:106AF00000B4021639F01FBA20BD0FB6F894FA9A06 -:106B0000F99A0FBE08950396272F0E9472350E94AE -:106B10007135252F0E947235242F0C947235019601 -:106B2000272F0E9472350C947135DC01CB01FC01DA -:106B3000F999FECF06C0F2BDE1BDF89A319600B4D6 -:106B40000D9241505040B8F708950E94E73508F47F -:106B500081E00895E89409C097FB3EF490958095F4 -:106B6000709561957F4F8F4F9F4F9923A9F0F92F13 -:106B700096E9BB279395F695879577956795B79591 -:106B8000F111F8CFFAF4BB0F11F460FF1BC06F5F77 -:106B90007F4F8F4F9F4F16C0882311F096E911C089 -:106BA000772321F09EE8872F762F05C0662371F0AA -:106BB00096E8862F70E060E02AF09A95660F771FBE -:106BC000881FDAF7880F9695879597F90895990F9A -:106BD0000008550FAA0BE0E8FEEF16161706E807A7 -:106BE000F907C0F012161306E407F50798F0621BC8 -:106BF000730B840B950B39F40A2661F0232B242B9D -:106C0000252B21F408950A2609F4A140A6958FEFBB -:106C1000811D811D08950E941E360C948F360E949E -:106C2000813638F00E94883620F0952311F00C94BC -:106C300078360C947E3611240C94C3360E94A0360C -:106C400070F3959FC1F3950F50E0551F629FF001BF -:106C5000729FBB27F00DB11D639FAA27F00DB11DD8 -:106C6000AA1F649F6627B00DA11D661F829F222761 -:106C7000B00DA11D621F739FB00DA11D621F839FE8 -:106C8000A00D611D221F749F3327A00D611D231FBE -:106C9000849F600D211D822F762F6A2F11249F570C -:106CA00050409AF0F1F088234AF0EE0FFF1FBB1F0F -:106CB000661F771F881F91505040A9F79E3F5105CE -:106CC00080F00C9478360C94C3365F3FE4F3983E22 -:106CD000D4F3869577956795B795F795E7959F5F78 -:106CE000C1F7FE2B880F911D9695879597F908950A -:106CF00097F99F6780E870E060E008959FEF80EC6F -:106D0000089500240A941616170618060906089511 -:106D100000240A9412161306140605060895092E77 -:106D20000394000C11F4882352F0BB0F40F4BF2BE6 -:106D300011F460FF04C06F5F7F4F8F4F9F4F089526 -:106D400057FD9058440F551F59F05F3F71F047951C -:106D5000880F97FB991F61F09F3F79F08795089501 -:106D6000121613061406551FF2CF4695F1DF08C020 -:106D7000161617061806991FF1CF8695710561053D -:106D800008940895E894BB2766277727CB0197F9E5 -:106D90000895F894FFCFD210FA104D11FA104D114A -:106DA0002D1165114D1162126F12FA14FA140315A8 -:106DB00003150515031503150315FA14FA140A151E -:106DC000031503150A154F1CC51CC81CDC1CDF1C51 -:106DD000F21CFB1C1F1D651D971DAB1D311D541D95 -:106DE000ED20ED204621462178212021202120215F -:106DF00092210322132213229D2FA12FE42FF52F7E -:106E000000301F30223055307630F22FF22F813093 -:0E6E100084308830AE30D030D330D530FA30F8 -:106E1E0001380200000001000000003802000000EE -:106E2E0005010000003802000000010600000038D5 -:106E3E0002000000010700000038020408000000F4 -:106E4E000000003802090C000000000000380201AA -:106E5E001500000000000036323331F7F6676697F2 -:106E6E00C6343500000000000180004708160EF5FC -:106E7E000DF10DED0DF4F5010021007F2200030050 -:106E8E004A004A4A01F6F731333236674C415945CA -:106E9E00520042617365200047616D6520005261AA -:106EAE00697365004C6F776572004C4F434B00431E -:106EBE00617073004E756D005363726C002020205C -:106ECE00202000534F4C415200544D5053540081DA -:106EDE008283E200E900EA00B500B600B700CD00FB -:106EEE008301CC008A019201940121022302240223 -:106EFE002502260227022A02B300B4006F0070009A -:106F0E000603060806010606AF0200FF0100010097 -:106F1E0000FFFF0000010001FF000008101818100C -:106F2E0008000001020202020202020202024022D4 -:0E6F3E007B71014F01D400D00BE90B090C0050 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000AF00AE09029D +:100BF0005B00030100A0FA090400000103010100E9 +:100C00000921110100012240000705810308000AA3 +:100C10000904010002030000000921110100012262 +:100C200022000705820320000107050303200001BD +:100C30000904020001030000000921110100012242 +:100C40007B000705840320000A1201000200000057 +:100C50000832FC87120200010200011E0353006FDC +:100C6000006C00610072006900750073005F005342 +:100C7000006F0066006C006500000010034B00650B +:100C8000007900680069007600650000000403092F +:100C9000040011241FBECFEFDAE0DEBFCDBF04B6E3 +:100CA00003FE27C08091800690918106A091820664 +:100CB000B09183068730904BA740B04BD1F410928F +:100CC000800610928106109282061092830614BE4E +:100CD00084B7877F84BF0FB6F894A8958091600091 +:100CE000886180936000109260000FBEE0E0F8E33E +:100CF000099512E0A0E0B1E0EEE4FEE602C0059046 +:100D00000D92AE32B107D9F726E0AEE2B2E001C0F3 +:100D10001D92A038B207E1F70E9422280C94E13618 +:100D20000C940000CF93DF9340917E0650917F0694 +:100D30004E5754409A01205A3F4F21303240C0F064 +:100D400020E032E0241B350B60917C0470917D041F +:100D5000FC01CA01240F351FC1E0D0E082179307C0 +:100D600050F070937D0460937C04DF91CF910895DF +:100D700020E630E0E9CF4491DC01A258BB4F5C9102 +:100D8000451781F04C93AC01A5E056954795AA957F +:100D9000E1F7DE0102C0AA0FBB1F4A95E2F7AD01E1 +:100DA0006A2B752B01963196D9CFE8EDF0E0808162 +:100DB0008E7F80831092E2001092DA001092E100A0 +:100DC000A0EEB0E08C9181608C9380818F778083DE +:100DD00019BCA7EDB0E08C918E7F8C9380818F7EC3 +:100DE000808310925E0408952091E4003091E50024 +:100DF00095E6A9012091EC00822F817020FF06C0AA +:100E00008091E80080FF06C080E008952091E8000E +:100E100022FD1AC080916C04882389F0853089F006 +:100E20008091EB0085FD0FC02091E4003091E5003A +:100E300042175307F9F29150E1F684E0089582E0F9 +:100E4000089583E0089581E00895EF92FF920F9353 +:100E50001F93CF937C018B010E94F406C82F811150 +:100E600017C08091E80085FD0BC08091E8008E7767 +:100E70008093E8000E94F406882399F3C82F08C0E5 +:100E8000F70181917F018093F1000150110949F729 +:100E90008C2FCF911F910F91FF90EF90089580912B +:100EA0006E0487FF13C08091E80082FF06C0809126 +:100EB000E8008B778093E80004C080916C04811176 +:100EC000F2CF089580916C048823D9F38091E800D3 +:100ED00080FFF8CF8091E8008E77ECCF982F909329 +:100EE000E900242F762F50E0891731F07091EC0043 +:100EF0002091ED005091F00021FD07C09F5F9730D9 +:100F000071F78093E90081E008953091EB003E7F16 +:100F10003093EB003091ED003D7F3093ED00309148 +:100F2000EB0031603093EB007093EC002093ED0008 +:100F30005093F0002091EE0027FDE0CF80E008956F +:100F4000CF92DF92EF92FF920F931F93CF93DF9395 +:100F5000C8EDD0E088818F7E8883E7EDF0E0808166 +:100F60008160808384E082BF81E080935E04888119 +:100F70008E7F888302EE10E0F80110821092DA0072 +:100F800081EEC82ED12CF601108288818F7788835C +:100F900088818068888388818F7D888319BC1092BE +:100FA0006C0410926D0410926B0410926A0490EE1F +:100FB000E92EF12CF70180818B7F8083888181600D +:100FC000888342E060E080E00E946E07F601808145 +:100FD0008E7F8083F801808181608083808188603A +:100FE0008083F70180818E7F808388818061888300 +:100FF000DF91CF911F910F91FF90EF90DF90CF90F5 +:101000000895FC01809174049091750486179707E8 +:10101000A0F06115710529F49091E8009E779093F6 +:10102000E80090E06115710551F4911108C08091BC +:10103000E80082FF34C080E00895BC01F2CF8091C7 +:101040006C048823C1F18530C1F18091E80083FDF3 +:1010500030C08091E80082FDEACF8091E80080FFF7 +:10106000E1CF8091F3002091F200382F61157105D6 +:1010700019F02830310558F091E02830310509F099 +:1010800090E02091E8002E772093E800CBCF81916B +:101090008093F100615071092F5F3F4FE7CF80913E +:1010A0006C04882341F0853041F08091E80083FF93 +:1010B000BECF81E0089582E0089583E00895809195 +:1010C000610408952FB7F894609157047091580403 +:1010D0008091590490915A042FBF0895209154048F +:1010E000309155042817390771F090935504809377 +:1010F0005404E0915204F0915304309721F000849D +:10110000F185E02D09940895209150043091510407 +:101110002817390771F09093510480935004E0919F +:101120005204F0915304309721F00680F781E02DAE +:10113000099408952091430436E0839FC00111244F +:10114000629F800D911D1124811522E0920714F0F9 +:1011500090E080E082589B4F90937F0680937E06BC +:101160000895883E9105C8F4803E910548F48B327D +:10117000910540F48832910518F404974A9758F481 +:1011800080E008958C32910530F089339105C0F3E9 +:1011900084369105A9F381E011C0811522E59207FB +:1011A00070F48115E1E59E0758F790548115904140 +:1011B00090F7FB019581907F81E011F308958115EF +:1011C00028E5920740F38115E9E59E0728F090563F +:1011D0008115904270F3DFCFFB019581907F81E014 +:1011E000903271F6EBCFFC01680F791F8FEF91E31E +:1011F0002191822728E030E087FF09C0880F8927E6 +:1012000021503109C9F7E617F70791F70895880FBC +:10121000F7CFFA01811101C0FB0109948091770495 +:10122000982F9E7F61F48170826080937704809113 +:101230007A04813A18F080EA80937A04089588311C +:10124000B0F381708661F1CFAF92BF92DF92EF92DF +:10125000FF920F931F93CF93DF93082F162FE9016F +:10126000E42FF0E0E55AFA4F611110C0E4915E2FCF +:101270004E2F4983E8835A83DF91CF911F910F91BD +:10128000FF90EF90DF90BF90AF900895E62EF12C85 +:101290004491D42EE42FF0E026E0829FC001112477 +:1012A0002FEF30E0B9010E941535802F90E0880FB4 +:1012B000991F55E5569FD001579FB00D11248A1BE9 +:1012C0009B0B982F990F890F5901AE18BF08AE9E3E +:1012D000D001AF9EB00DBE9EB00D11245B2F189FA4 +:1012E00080011124012F11275901A01AB10AAE9EC5 +:1012F0008001AF9E100DBE9E100D11245901A81A39 +:10130000B108AE9CC001AF9C900DBE9C900D112405 +:10131000892F9927281B390B2E9FC0012F9F900DD5 +:101320003E9F900D1124E92F62307105A1F050F419 +:101330006115710509F49DCF6130710581F0EB2FC6 +:10134000512F97CF6430710569F080F066307105D8 +:1013500009F48FCFF4CFE42F4B2F592F8ACFE42FEE +:10136000412F87CFEB2F542F492F83CF4B2F5D2D4C +:10137000E12F7FCF80E0089578940895F894E82FC6 +:10138000E295EF70F0E031A1282F2F7081E090E01E +:1013900001C0880F2A95EAF7982F9095932391A37F +:1013A00092A1892B82A30C94BC099091D60292FF42 +:1013B00006C0282F28712830F9F4877F846093FFB6 +:1013C00006C0282F28712831F1F4877E846120918E +:1013D000D70220FF06C0382F38713830D9F4877F04 +:1013E000816021FF06C0282F28712831D1F4877E23 +:1013F000816194FD877E0895282F24712430F9F6A9 +:101400008B7F8860DCCF282F2471243101F78B7EFD +:101410008861DDCF382F3171313019F78E7F8860C8 +:10142000E0CF282F2171213121F78E7E8861E1CF15 +:10143000CF93DF93EC018238910581F1B0F58133D0 +:10144000910509F491C020F58932910509F485C010 +:101450008A9709F490C0C11521E5D20708F0AAC007 +:10146000C11530E5D30708F0F2C0CF3BD10508F035 +:1014700089C0C83AD10508F0DFC0C53AD10508F0E7 +:10148000D3C0C430D105F8F4C130D105E1F040C07B +:101490008533910509F45AC0C997E9F68091D602BF +:1014A000837089F0C0EED0E00EC0833E910599F1C3 +:1014B00070F4803E910501F1823E910561F68091C4 +:1014C000D60282FD21C0CE01DF91CF910895863EE4 +:1014D000910561F1873E910571F1843E910509F016 +:1014E000BACF8091D70281FFEECF8091D602C7EEAE +:1014F000D0E084FD0DC0E7CF8091D60280FDF7C01B +:101500009091D70290FFDFCFC3EED0E084FFDBCF16 +:10151000D0E0C0E0D8CF8091D60282FDEBC09091A0 +:10152000D70290FDBFCF84FFCECFF2CF8091D602FD +:1015300083FDDDCFC8CF8091D60283FDDEC09091C0 +:10154000D70291FFF0CFC4EED0E0BDCF8091D6029C +:1015500085FFB9CFC9E2D0E0B6CF8091D60285FF32 +:10156000B2CFC5E3D0E0AFCF8091D60286FFABCF3C +:10157000CAE2D0E0A8CF8091D60286FFA4CFC1E313 +:10158000D0E0A1CFC11540E2D40760F4C11581E0DD +:10159000D80708F098CFCE01815E9109079708F42B +:1015A00092CFB6CFC11590E4D90708F4B1CFDF7060 +:1015B000D06A89CFC11524E5D20778F4C11533E587 +:1015C000D30708F072C0C11542E5D40708F05CC02B +:1015D000DC2FCC27C16FD06A76CFC1158AE5D8073A +:1015E00078F4C11599E5D90708F073C0C11528E54D +:1015F000D20708F48DCFDC2FCC27C06FD06A63CF21 +:10160000CE0190568115904208F082CF8D2F8F71B8 +:101610000E94D50990E0982F882788279F719C0108 +:101620002C2BE901D0624FCFC55AD0E0C154DE4F18 +:10163000C881D0E0D06447CFC85AD0E0CC0FDD1FBE +:10164000CE53DE4F0990D881C02DD4643CCFCE015B +:1016500064E0969587956A95E1F783702C2F26951F +:101660002695237040E2249F90011124382B8C2F63 +:101670008370C1E0D0E002C0CC0FDD1F8A95E2F795 +:10168000C22BD32BDC681FCFCE018370992721E0BA +:1016900030E002C0220F331F8A95E2F7C695C69547 +:1016A00080E2C89FE0011124EBCFCE01837099271F +:1016B00021E030E002C0220F331F8A95E2F7C69581 +:1016C000C69590E2C99FE0011124C22BD32BDA68A2 +:1016D000FACE8C2F8F700E94D50934E0D695C7952D +:1016E0003A95E1F7CF709C2FEC01D069ECCEC9E3BD +:1016F000D0E0E9CEC2EED0E0E6CEC6EED0E0E3CE5A +:101700000C94620880915F0490919102892B9091D2 +:101710009002892B80933002E0915204F09153049F +:10172000309731F00280F381E02D80E392E009945C +:10173000089580918F0290915E02981301C00895E0 +:101740008F5F8770FACF27E0929F800D1124982F2A +:10175000977086958695869523E0829FF0011124E7 +:10176000E35CFD4F50E040E080E0219130E0092E45 +:1017700002C0369527950A94E2F721703327042E8C +:1017800001C0220F0A94EAF7822B4F5F5F4F43306C +:10179000510559F7089527E0929F800D1124982F45 +:1017A000977041E001C0440F9A95EAF786958695B7 +:1017B000869593E0899FF0011124E35CFD4F90E052 +:1017C00080E070E05191DF0111979B01082E02C06B +:1017D000369527950A94E2F7217021952527242331 +:1017E00025272C9301968330910561F7089590E0A9 +:1017F00080E00E94840890E080E00E946E081092D1 +:101800009102109290020C94820B809392020C949D +:10181000F70B882341F0809590915F048923809392 +:101820005F040C94820B0895882339F090915F0433 +:10183000982B90935F040C94820B08958823B1F148 +:101840009CEF980F913A70F4E2E3F2E091918913E2 +:1018500003C0DF0111971C9242E0E833F407B1F7AF +:101860000C94820B90E2980F983088F4877021E0F6 +:1018700030E0A90102C0440F551F8A95E2F7CA0162 +:10188000809590915F04892380935F04E9CF9BE565 +:10189000980F933020F490E080E00C948408885AEC +:1018A000873120F490E080E00C946E0808950F9347 +:1018B0001F93CF93C82F882309F469C08CEF8C0F36 +:1018C000813AB0F502E312E088E392E0F801219159 +:1018D000C21701F122E0E833F207C9F7EFEF80E029 +:1018E000D8019D918D01C91781F0EF3F19F4911135 +:1018F00001C0E82F8F5F863099F7EF3F31F00E2E51 +:10190000000CFF0BE05DFD4FC283CF911F910F9143 +:101910000C94820BE2E3F2E02191C21303C0DF01D9 +:1019200011971C928E179F07B9F70E94820BD6CF92 +:1019300080E28C0F883068F4C77021E030E001C08D +:10194000220FCA95EAF780915F04822B80935F048F +:10195000DCCFEBE5EC0FE33050F4F0E0E154FE4F68 +:10196000808190E0CF911F910F910C948408C85A08 +:10197000C73168F4EC2FF0E0EE0FFF1FEE53FE4F7F +:1019800080819181CF911F910F910C946E08CF911E +:101990001F910F910895982F92959F7011F0892FA4 +:1019A00094E0282F2695269511F09E5F822F86952C +:1019B00009F09F5F892F0895DC01FB0180819181EF +:1019C000803891054CF08FE78C93808191818F57FF +:1019D000910991838083089581382FEF92073CF419 +:1019E00081E88C938081918181589F4FF2CF8C93B5 +:1019F000118210820895681708F5861B682F21E070 +:101A0000469FA0011124649FF001659FF00D1124F1 +:101A10004091590150915A01E49FC001E59F900DFA +:101A2000F49F900D1124880F892F881F990B919591 +:101A3000222319F09195819591090895681B20E062 +:101A4000DFCF0F931F93CF93DF9300D000D0CDB79C +:101A5000DEB789836A834B831C8204E610E024E0AE +:101A600030E0AE014F5F5F4F60E084E10E9473326F +:101A70000F900F900F900F90DF91CF911F910F91CA +:101A8000089580913203882329F047E669E98BE2C3 +:101A90000C94210D6091590170915A0190E080E001 +:101AA0000E94C23520E030E040E05CE30E94233633 +:101AB00020E030E040E85FE30E94BD35882321F05C +:101AC00047EC6BE180E0E4CF41E265EA89EDE0CFED +:101AD000CF92DF92EF92FF920F931F93CF93DF93FA +:101AE0006C017B0164E670E088E70E945B31EC01E9 +:101AF00097FD12C010E000E0F601E00FF11F8491A5 +:101B000064E670E00E94D531EC01892B29F40F5F67 +:101B10001F4F0E151F0581F70E94EF32CE01DF9196 +:101B2000CF911F910F91FF90EF90DF90CF9008958C +:101B300080914E0490914F04911103C091E0892748 +:101B40000895882369F062E070E08CEE9BE00E94CB +:101B5000680D892B19F080914E04089510924E045F +:101B600080914E04EBCFCF93C0914E0480914F04EF +:101B70008823D1F00E9462086058774C8E4F9F4FA7 +:101B800060934A0470934B0480934C0490934D04EB +:101B9000C11108C062E070E08AEE9BE00E94680D0F +:101BA000892B29F0C0914E048C2FCF91089581E0AC +:101BB00080934E04F7CF90916C04943029F5809374 +:101BC0005B0470935D0460935C049093E9008FEF75 +:101BD0009091E800815095FD06C095ED9A95F1F73A +:101BE00000008111F5CF8091E80085FF0DC050E025 +:101BF00040E063E070E08BE594E00E94250780916F +:101C0000E8008E778093E8000895BC0184E00C948E +:101C1000DB0DBC0183E00C94DB0D9C0184E0809320 +:101C2000E9009FEF8091E800915085FD06C085EDA9 +:101C30008A95F1F700009111F5CF8091E80085FFBA +:101C40000CC050E040E066E070E0C9010E9425074A +:101C50008091E8008E778093E8000895CF93DF931A +:101C6000EC0181E08093E9008FEF9091E8008150D2 +:101C700095FD06C095ED9A95F1F700008111F5CF1D +:101C80008091E80085FF14C050E040E068E070E01B +:101C9000CE010E9425078091E8008E778093E800AE +:101CA00088E0FE01A2E6B4E001900D928A95E1F78A +:101CB000DF91CF9108959F92AF92BF92CF92DF9222 +:101CC000EF92FF920F931F93CF93DF937C015B0101 +:101CD0006A018091D10201E010E08A3010F40AE03C +:101CE00010E0C1E0D0E0F894B501C701F601099514 +:101CF000982E0E94BC09911004C021960C171D0754 +:101D00006CF4892DDF91CF911F910F91FF90EF908F +:101D1000DF90CF90BF90AF909F900895CC9F90019F +:101D2000CD9F300D300D112490E080E045E34A95C1 +:101D3000F1F70000019682179307C1F7D4CF809185 +:101D4000A102811110C08091D80080618093D800D9 +:101D50008AE18A95F1F700C08091D90080FF0AC01E +:101D600081E08093A10281E09091A102913009F07D +:101D700080E0089582E08093A1020E94D50610922F +:101D80006C04F1CF0E949F0E882351F0E091520421 +:101D9000F0915304309721F00190F081E02D0994E7 +:101DA00080E008951F93CF93DF93182FEB010E94DB +:101DB000570C8FE99FE00197F1F700C000002197D1 +:101DC000C1F7812FDF91CF911F910C941E0C4F9280 +:101DD0005F926F927F928F929F92AF92BF92CF92BB +:101DE000DF92EF92FF920F931F93CF93DF93CDB7C4 +:101DF000DEB7CE5DD1090FB6F894DEBF0FBECDBF02 +:101E0000509070019091770490FF5DC080905D03C9 +:101E100090905E038114910409F068C0E0E6F6E05A +:101E20009E012F5F3F4FBE0161527F4FC901A491B8 +:101E30004A2F50E0DA01AA0FBB1FA40FB51FA15A09 +:101E4000BC4FCD90DD90EC90D901CD92DD92ED921A +:101E50009D0131966A177B0751F720916F0143E08E +:101E6000249F800D911D1124539A2BB1277F3BB1E4 +:101E700038605FB7F894BC01549E600D711D112449 +:101E80008617970709F08EC05FBF8FE594E0019732 +:101E9000F1F700C00000C252DF4F0FB6F894DEBF6A +:101EA0000FBECDBFDF91CF911F910F91FF90EF90AB +:101EB000DF90CF90BF90AF909F908F907F906F906A +:101EC0005F904F900895809171012091720133E0ED +:101ED000839FF0011124E15AFC4F821708F096CF3E +:101EE0001182108212828F5F3396F7CF90FF96CFC8 +:101EF000D12CC12C66246394712C53E0452E809123 +:101F00005C0393010C2C01C0220F0A94EAF7822390 +:101F100009F43FC0F601EE0FFF1FE80DF91DE59033 +:101F2000F490E114F10409F479CF45E050E0B701F1 +:101F3000CE0101960E94563509810F3F51F18A81E9 +:101F4000800F9927991F8B34910514F08AE490E053 +:101F50005C01AA0CBB1C8A0D9B1DDC01A15ABC4F65 +:101F60005D01049D80011124015A1C4F0A151B05B7 +:101F700020F0B5E0EB0EF11CD8CF4D81413A08F0CE +:101F800040EA98016C818B810E9424090D5F1F4FEC +:101F9000EDCFEFEFCE1ADE0AF8E0CF16D10409F04C +:101FA000AECF3CCFFC014191CF01E8E03BB900004E +:101FB00000C047FF2BB9440F000000C000C000C0A4 +:101FC0002BB900C0EA9591F75BCFE7E7F4E0808199 +:101FD0008E7F8083E9E5F3E08281816082832FEF49 +:101FE00080E792E0215080409040E1F700C000007F +:101FF0000C94E70EE2E3F2E086E0DF011D928A95A1 +:10200000E9F70C94F70B1F93CF93DF93CDB7DEB7AF +:10201000AA970FB6F894DEBF0FBECDBF8EE694E050 +:102020002091F100DC012D93CD01B4E086379B07B0 +:10203000B9F780916F04833009F471C0B8F481302E +:1020400009F448C0823009F4B4C08091E80083FFED +:102050003CC180916E0490916F049A3008F035C1B4 +:10206000E92FF0E0ED51F94C0C9449358A3009F430 +:102070008FC08B3009F470C0893039F780916E04BD +:10208000813219F78091720490917304009711F0D6 +:102090000297D9F68091E800877F8093E8008091CD +:1020A000E80082FF37C09091F3008091F200029720 +:1020B00029F48091F1008B7F813021F48091F1002F +:1020C000809361048091E8008B778093E8000E9400 +:1020D0004F07BBCF80916E04813A09F0B6CF809153 +:1020E000E800877F8093E8008091720490917304E8 +:1020F000892B61F468E082E694E070E00E940108B8 +:102100008091E8008B778093E8009FCF60E090E0BB +:1021100080E0F3CF80916C048111C1CF96CF809184 +:102120006E04813A09F091CF80917204909173040A +:10213000892B09F08ACF8091E800877F8093E8009F +:102140008091E80080FFFCCF809174018093F100C2 +:102150008091E8008E77B9CF80916E04813209F0CA +:1021600074CF8091720490917304892B09F06DCF24 +:102170008091E800877F8093E8000E944F0780915C +:1021800070048093740110925F040E94FA0F5DCF77 +:1021900080916E04813209F058CF8091E800877FEA +:1021A0008093E8000E944F0780917104809360043F +:1021B0004CCF80916E04813A09F047CF8091E800BE +:1021C000877F8093E8008091E80080FFFCCF8091BA +:1021D0006004BCCF803899F0823809F076C08091D5 +:1021E00072048F70873008F070C08093E90080918E +:1021F000EB0085FB882780F91092E90006C08091EA +:102200006A0490916B04911182609091E800977F2D +:102210009093E8008093F1001092F1008091E80023 +:102220008E77B5C1882309F4A2C1823009F04DC070 +:10223000809170048111A6C1809172048F702FEF7C +:10224000280F263008F041C08093E9002091EB0070 +:1022500020FF98C1933031F48091EB00806280932D +:10226000EB0090C19091EB0090619093EB0021E026 +:1022700030E001C0220F8A95EAF72093EA0010921D +:10228000EA008091EB008860EACF81111EC01091B6 +:1022900070041F778091E3008078812B8093E300A6 +:1022A0008091E800877F8093E8000E944F0780912B +:1022B000E80080FFFCCF8091E30080688093E3001A +:1022C00082E0111183E080936C048091E80083FF29 +:1022D0000AC08091E800877F8093E8008091EB003E +:1022E00080628093EB00AA960FB6F894DEBF0FBE13 +:1022F000CDBFDF91CF911F9108958058823028F78C +:1023000020917004309171042C3DE3E03E07A1F56B +:1023100083E08A838AE289834FB7F894DE011396BB +:1023200020E03EE051E2E32FF0E050935700E491CB +:1023300020FF03C0E295EF703F5FEF708E2F90E0BB +:10234000EA30C0F0C7968D939D932F5F243159F7E3 +:102350004FBF8091E800877F8093E8006AE270E0D9 +:10236000CE0101960E9401088091E8008B7780934E +:10237000E800ABCFC096E7CF8091720490917304D0 +:10238000432F55274330510509F44AC078F54130B1 +:10239000510509F47AC08BE590E0EEEEFBE04230A7 +:1023A000510509F092CF2091E800277F2093E800A3 +:1023B00020917404309175048217930708F49C01EE +:1023C00040E02115310509F065C0411163C08091DD +:1023D000E80082FDC9CF80916C04882329F2853002 +:1023E00019F28091E80083FFF2CFBECF4132510550 +:1023F00009F43CC04232510509F067CF83309105A2 +:1024000008F063CFFC01EE0FFF1FEF5DFD4F019061 +:10241000F081E02D825E9D4FDC018C9190E01AC02E +:10242000332721303105D1F02115310561F02230FB +:10243000310509F04ACFEBE5FCE0E4918E2F90E006 +:10244000EBE5FCE007C0EDE8FCE0E4918E2F90E0C6 +:10245000EDE8FCE0009709F438CFA5CFEBE7FCE00E +:10246000E4918E2F90E0EBE7FCE0F4CF8330910510 +:1024700008F02BCF880F991FFC01E95DFD4F0190FB +:10248000F081E02D89E090E08ECF82E190E0E9E4F8 +:10249000FCE089CF80916C04882309F465CF8530F6 +:1024A00009F462CF8091E80083FD5ECF8091E8005F +:1024B00082FD8DCF8091E80080FF83CF9091F30063 +:1024C0008091F2002115310519F08830910550F006 +:1024D00041E0089709F040E08091E8008E77809312 +:1024E000E8006FCF44914093F100319621503109BB +:1024F0000196E8CF803809F0E8CE8091E800877F28 +:102500008093E80080916D048093F10087CE811163 +:10251000DCCE10917004123008F0D7CE8091E80024 +:10252000877F8093E80010936D040E944F0711236A +:1025300011F084E005C08091E30087FDFACF81E0CF +:1025400080936C0442E061EC81E00E946E0742E2FD +:1025500061EC84E00E946E0742E261EC82E00E943E +:102560006E0742E260EC83E00E946E07AECE80917F +:102570007004813009F0A9CE81E0933009F080E049 +:1025800080936B041092E9008091E800877F80932C +:10259000E8000E944F0799CE1F93CF93DF93162F29 +:1025A000C0917E06D0917F068A30D1F420914304F9 +:1025B000CE018E579440622F70E00E941535281B83 +:1025C000822F66E00E942935C82FC15020F4DF9188 +:1025D000CF911F91089560E080E20E94CC12F5CF68 +:1025E0008D30E9F4CE57D44020914304622F70E03F +:1025F000CE010E941535281B822F9E01280F311D08 +:102600002115324018F080E0D0E0C0E0C80FD11DA5 +:10261000C258DB4FD0937F06C0937E06D8CF96E09A +:10262000FE01A4E4B4E001900D929A95E1F7803E9A +:1026300090F186E0FE0111928A95E9F7C0917E063D +:10264000D0917F06111133C046E050E0BE0184E412 +:1026500094E00E945F359E012E573440892B91F5FE +:102660002A5F3F4F40914304642F70E0C9010E94EC +:102670001535481B463010F4240F311D211572E02A +:10268000370710F030E020E022583B4F30937F06B0 +:1026900020937E069CCFF6E08F9FB00111246655F3 +:1026A000794F46E050E0CE010E945635C7CF9E01DB +:1026B0002A5F3F4FFE012E173F0731F28081809540 +:1026C0008193F9CFC90145E0969587954A95E1F741 +:1026D00041E050E0BA0102C0660F771F8A95E2F729 +:1026E000CB0160917C0470917D04862B972BB901FE +:1026F0006B5F7F4FE5E076956795EA95E1F702C05D +:10270000440F551F6A95E2F7842B952B90937D0417 +:1027100080937C04A5CFFF920F931F93CF93DF93F9 +:10272000EC01F62EFC0101900020E9F78F01015029 +:102730001109C017D10730F0DF91CF911F910F9190 +:10274000FF9008956F2D89910E94CC12F2CFE1E4A1 +:10275000F4E08083618324E630E042E050E0BF0192 +:1027600084EB0C944C32CF93C82F60E08CE00E9435 +:10277000A7136C2F84E00E94A71361E08CE0CF9137 +:102780000C94A7131F93CF93DF93CDB7DEB7629757 +:102790000FB6F894DEBF0FBECDBF96E0E4E2F3E0E3 +:1027A000DE01179601900D929A95E1F796E0FE01F1 +:1027B0003796DE011D9601900D929A95E1F71885E6 +:1027C000882309F1162B84E00E94B3131E8786E04C +:1027D000FE013D96DE01119601900D928A95E1F77A +:1027E00086E0FE013196A4E2B3E001900D928A9555 +:1027F000E1F762960FB6F894DEBF0FBECDBFDF9152 +:10280000CF911F91089560951623E0CFCF93DF936A +:10281000C3EED2E060E0CE010E9489352196C11559 +:1028200084E0D807B9F7DF91CF9108956F927F9236 +:102830008F929F92AF92BF92CF92DF92EF92FF92D0 +:102840000F931F93CF93DF938AEAC82E86E0D82E8A +:1028500091ECE92EF12CE701CC58D10936011BC0CF +:10286000F50185909490692DC8010E948935682DE5 +:10287000C80101960E94893582E0A80EB11C0E5F46 +:102880001F4FC017D10761F78EE0680E711C2E969E +:10289000CE15DF0529F08E010E5011095301E0CF4E +:1028A0007E018CE8E80EF11C8CE8C80ED11C8DE787 +:1028B000E81683E0F80679F6DF91CF911F910F912A +:1028C000FF90EF90DF90CF90BF90AF909F908F9050 +:1028D0007F906F900895CF93C82F6FEF811161E2C1 +:1028E00083E290E00E9489356FEFC11161E184E2DB +:1028F00090E00E9489356FEFC11166E285E290E0B9 +:10290000CF910C94893580E00E946B1460E086E2E0 +:1029100090E00E9489350E9416140E94061481E0FE +:102920000C946B140F931F93CF93DF93C42FD0E0BD +:10293000CC0FDD1F2EE0629FC00DD11D11243CE89D +:10294000839FC00DD11D1124CE0187960E9475353D +:10295000082F10E0102F0027CE0188960E947535B1 +:102960009801282BC901DF91CF911F910F910895F4 +:10297000462F853038F47A3028F4673018F4672F02 +:102980000C94921490E080E00895CF92DF92FF9231 +:102990000F931F93CF93DF936C0100917604809186 +:1029A0009202082BC7E0D0E010E0FC2EC8010C2EEC +:1029B00002C0959587950A94E2F780FD0CC0219797 +:1029C000A0F7F12C8F2DDF91CF911F910F91FF90E8 +:1029D000DF90CF900895B6018C2F0E94B8140E940A +:1029E000180A019761F3EECFCF93DF93EC010E94B9 +:1029F000C514BE010E94B814DF91CF910C94180A3F +:102A0000FC01808191810E94F414292F2F709295EE +:102A10009F7092509E3078F4E92FF0E0E351F94C2A +:102A20000C944935803F19F020F4883E20F481E071 +:102A30000895843FE1F380E00895883EC0F3813F2C +:102A4000D1F7F5CF822F869586958695089583E2F6 +:102A500090E00E947535813289F484E290E00E9412 +:102A60007535813159F485E290E00E94753591E029 +:102A7000863209F090E0892F8170089580E0FCCFC4 +:102A8000CF92DF92EF92FF926B017C010E940E09C0 +:102A9000B701A60188E090E0FF90EF90DF90CF9023 +:102AA0000C949B35AF92BF92CF92DF92EF92FF9240 +:102AB0000F931F93CF93DF9300D00F92CDB7DEB764 +:102AC000082FF62E142FE22E8091770480FF4FC03E +:102AD000E82FE695AE2FB0E0AE5EBD4F9C9190938F +:102AE00059038E7F823009F056C0413A08F040EA1F +:102AF0009E012F5F3F4F6F2D802F0E9424098091F0 +:102B0000770480FF11C02B8139814A818091710146 +:102B10009091720153E0859FF0011124E15AFC4F1E +:102B2000891798F10E94E70E80917804801308C0FD +:102B3000809179048F1104C080917A04811729F063 +:102B400080915B03826080935B0300937804F09232 +:102B5000790410937A04EE2051F06091770470911B +:102B600078048091790490917A040E9440150F9026 +:102B70000F900F90DF91CF911F910F91FF90EF90E9 +:102B8000DF90CF90BF90AF90089541833083228330 +:102B90008F5F3396C5CF923039F6E2508E2F817019 +:102BA000D82EE695F0E0E55AF94FA590B490C12CE7 +:102BB000BB2460917301C61608F0B4CF2C2D30E011 +:102BC000A29EC001A39E900DB29E900D112470E0B4 +:102BD0000E941535802FD11016C0860F40917101CB +:102BE000420F532F511D9A01220F331F240F351FFF +:102BF000215A3C4F412F113A08F040EA6F2D0E94B4 +:102C00002409C394D6CF861BE9CFE7E7F4E04381DC +:102C100021E1421B08F440E021E0628181810C94B3 +:102C20005215E7E7F4E0438121E1420F08F44FEF4A +:102C300021E0628181810C945215E7E7F4E0628122 +:102C400021E1621B08F460E021E0438181810C9462 +:102C50005215E7E7F4E0628121E1620F08F46FEFBB +:102C600021E0438181810C945215E7E7F4E08181F2 +:102C700021E04381628188500C945215E7E7F4E02B +:102C8000818121E043816281885F0C94521580919B +:102C90007B04882319F0815080937B046091770432 +:102CA000709178048091790490917A040C94401585 +:102CB00080917B04833018F48F5F80937B04609154 +:102CC0007704709178048091790490917A040C943F +:102CD00040159091770490FF27C0917081111DC01D +:102CE00092609093770480915B03816080935B0393 +:102CF000662351F060917704709178048091790493 +:102D000090917A040E94401520E040917A046091ED +:102D10007904809178040C9452158C3010F09661EF +:102D2000E0CF880F982BDDCF089521E030E0A90196 +:102D300002C0440F551F8A95E2F7CA0120915C0337 +:102D4000662391F0822B80935C0380915B0380610A +:102D500080935B0380915A03811109C080917704AD +:102D600060E086950C94691680958223ECCF0895D7 +:102D7000CF93DF93C82FC17082FBDD27D0F981FB91 +:102D8000662760F985E00E94951661E06C2786E071 +:102D90000E9495166D2F87E0DF91CF910C949516C8 +:102DA0000F931F93CF93C82F61E08111682F61703B +:102DB00080E00E949516C1FB662760F9C11101C031 +:102DC00060E081E00E949516C2FB662760F9C111A0 +:102DD00001C060E082E00E949516C3FB662760F99F +:102DE000C11101C060E083E00E949516C4FB662714 +:102DF00060F9C11101C060E084E00E9495164C2F7B +:102E000050E070E060E0DB01CA01F4E0B695A79500 +:102E100097958795FA95D1F70097A105B10549F1E6 +:102E2000AC01BD0184E08A019B01E2E03695279563 +:102E300017950795EA95D1F701151105210531057B +:102E400019F08E5FB901A80176956795579547955A +:102E5000452B462B472B09F08F5F8230D1F158F478 +:102E60008823E9F0813059F18C2FCF911F910F9178 +:102E7000089580E0D8CF8330A1F18430A9F720E015 +:102E800040E56FEF8AED0E94521587E00E94B31370 +:102E900080910001882341F3109232030DC020E09D +:102EA00040E56FEF82E30E94521580910001882374 +:102EB00099F381E0809332030E94410DD5CF20E049 +:102EC00040E56FEF8CEF0E94521585E40E94B3132A +:102ED000CBCF20E040E56FEF80E50E94521585E200 +:102EE000F5CF20E040E56FEF86E70E9452158FE1B5 +:102EF000EDCF0E94D016809376040C94F70B80914E +:102F00007604982F9670963019F488600C9479178F +:102F1000877FFCCF21E030E001C0220F8A95EAF7DD +:102F200020958091760482230C94791721E030E07B +:102F300001C0220F8A95EAF780917604822B0C94C7 +:102F40007917809177048695815009F48BE061E0D0 +:102F50000C9469168091770486958F5F8C3008F009 +:102F600081E061E00C9469168091770480FF07C0CE +:102F7000869582588F77893010F40C94AA1761E0F7 +:102F800082E00C946916E7E7F4E083E08083118225 +:102F90008FEF828380EA83831482A9E5B3E01296DF +:102FA0008C911297836012968C93608171818281DB +:102FB00093810C944015AB01BC0188E190E00C9426 +:102FC0009B35CF93C82FEFE3F4E0982F990F990F1B +:102FD000990F80818770892B8083E0E4F4E09C2F37 +:102FE0009295969597708081887F892B80836091D8 +:102FF0003D0470913E0480913F04909140040E94F2 +:10300000DB176C2F82E0CF910C94A713EDE3F4E073 +:1030100089E88083118282818C7F828360913D0464 +:1030200070913E0480913F04909140040C94DB1712 +:10303000EDE3F4E080818E7F808360913D047091A8 +:103040003E0480913F04909140040C94DB17EDE323 +:10305000F4E080818160808360913D0470913E0442 +:1030600080913F04909140040C94DB1769EE7EEF51 +:1030700090E080E00E94A73560E082E090E00E944E +:10308000893560E083E090E00E94893510929202D9 +:1030900060E084E090E00E94893560E082E290E0A8 +:1030A0000E94893560E085E090E00E94893560E00B +:1030B00086E090E00E9489356FEF87E090E00E9403 +:1030C000893540E050E0BA0188E090E00E949B35ED +:1030D00060E08DE090E00E94893540E050E0BA0168 +:1030E00088E190E00E949B3560E087E190E00E94DB +:1030F000893540E050E0BA018CE190E00E949B35B8 +:1031000070E060E080E290E00E94A7350E9406181F +:1031100080E00E946B140E94831440E050E0BA01EA +:103120008FE090E00E949B3540E050E0BA0183E1DF +:1031300090E00C949B350F931F93CF93DF9300D0B7 +:1031400000D0CDB7DEB74091C5025091C602609164 +:10315000C7027091C8022FB7F894809157049091DC +:103160005804A0915904B0915A042FBF841B950BA9 +:10317000A60BB70B84369105A105B10588F10E9415 +:103180009F0E882379F10E9462086E5F7F4F8F4FF8 +:103190009F4F69837A838B839C8380912C019091CC +:1031A0002D0181559D4F40912B0150E04530510537 +:1031B00010F044E050E0BE016F5F7F4F0E946C351D +:1031C00084E090E00E946134892BD9F40E94620867 +:1031D0006093C5027093C6028093C7029093C802A1 +:1031E00081E010C00E9462080091D2021091D302C7 +:1031F0002091D4023091D502600F711F821F931F5E +:10320000C4CF80E00F900F900F900F90DF91CF917F +:103210001F910F9108958F929F92AF92BF92CF927C +:10322000DF92EF92FF920F931F93CF93DF93EB0107 +:1032300088809980AA80BB809FB7F894C09057047B +:10324000D0905804E0905904F0905A049FBFC818D9 +:10325000D908EA08FB0894E6C916D104E104F10490 +:1032600010F4442311F1E82E082E000CFF089AE018 +:103270008902F0011124EF5FFE4F83819481815513 +:103280009D4F428150E00417150708F4A801B901C9 +:103290000E946C35C7010E946134892BA1F40E9401 +:1032A0006208688379838A839B8381E0DF91CF9171 +:1032B0001F910F91FF90EF90DF90CF90BF90AF9054 +:1032C0009F908F90089580E0F1CF0F931F93CF933D +:1032D000DF930F92CDB7DEB780914E0489832091A2 +:1032E000C40290E041E02817190609F440E001E02B +:1032F00010E09E012F5F3F4F6DEC72E086E00E9470 +:103300000B190F90DF91CF911F910F9108950F939B +:103310001F93CF93DF93CDB7DEB729970FB6F894FD +:10332000DEBF0FBECDBF85E0E7E7F4E0DE0111961A +:1033300001900D928A95E1F78091590390915A037B +:10334000A0915B03B0915C038E839F83A887B987AC +:1033500041E08885811101C040E009E010E09E0154 +:103360002F5F3F4F69EC72E085E00E940B198111DD +:1033700010925B0329960FB6F894DEBF0FBECDBF47 +:10338000DF91CF911F910F9108956F927F928F924D +:103390009F92AF92BF92CF92DF92EF92FF920F93E4 +:1033A0001F93CF93DF930F92CDB7DEB7862E5A01CE +:1033B0006901682E880F7708C3010E946134892B48 +:1033C00009F088C08AE0869DF001879DF00D1124E8 +:1033D000EF5FFE4F458150E04115510511F041E08E +:1033E00050E08AE0869DF001879DF00D1124EF5F8B +:1033F000FE4F6681778161557D4FCE0101960E9417 +:103400006C35F50140815181628173812FB7F89449 +:103410008091570490915804A0915904B0915A0496 +:103420002FBF841B950BA60BB70B84369105A10506 +:10343000B10540F4B701C8010E94F30899818917CA +:1034400009F44FC0082C000C9908C4010E94613493 +:10345000892B91F0B12C8B2D0F90DF91CF911F9183 +:103460000F91FF90EF90DF90CF90BF90AF909F9023 +:103470008F907F906F9008958AE0889DF001899DDC +:10348000F00D1124EF5FFE4F458150E0E416F50684 +:1034900008F4A7018AE0889DF001899DF00D1124B0 +:1034A000EF5FFE4F6681778161557D4FC6010E94B7 +:1034B0006C35B701C8010E94F30899818913CACFFE +:1034C0000E946208F5016083718382839383BB2429 +:1034D000B394C1CFB12CA701B801C6010E946C35CD +:1034E000BACFBB24B394F7CFCF92DF92EF92FF9283 +:1034F0000F931F93CF93DF9300D000D00F92CDB7DF +:10350000DEB76B0185E0E82EF12C00EB12E09E01A6 +:103510002F5F3F4F47EA52E061E080E00E94C5190B +:10352000882349F095E0FE013196A2EAB2E00190CD +:103530000D929A95E1F795E0E2EAF2E0D60101906A +:103540000D929A95E1F70F900F900F900F900F90BA +:10355000DF91CF911F910F91FF90EF90DF90CF906F +:10356000089590E080E00E948335893E9E4F11F4DB +:103570000C94271580E008951F920F920FB60F92BA +:1035800011242F933F934F935F936F937F938F9368 +:103590009F93AF93BF93CF93DF93EF93FF93D0911C +:1035A000E900DF708091EC00C82FC17080FDC0E899 +:1035B0001092E9008091F000877F8093F00078946A +:1035C0000E9403101092E9008091F00088608093BF +:1035D000F000CD2BCF70C093E900FF91EF91DF9108 +:1035E000CF91BF91AF919F918F917F916F915F919B +:1035F0004F913F912F910F900FBE0F901F901895F4 +:103600001F920F920FB60F9211242F933F934F9357 +:103610005F936F937F938F939F93AF93BF93EF933A +:10362000FF938091E10082FF09C08091E20082FF58 +:1036300005C08091E1008B7F8093E1008091DA00EA +:1036400080FF24C08091D80080FF20C08091DA00E4 +:103650008E7F8093DA008091D90080FF9BC080E14B +:1036600089BD82E189BD09B400FEFDCF81E0809370 +:103670006C0480915E04811109C00E94D5060E94ED +:10368000A0078091E20084608093E2008091E100D5 +:1036900080FF17C08091E20080FF13C08091E2009C +:1036A0008E7F8093E2008091E20080618093E2004F +:1036B0008091D80080628093D80019BC85E0809307 +:1036C0006C048091E10084FF29C08091E20084FFB6 +:1036D00025C080E189BD82E189BD89B5982F9170AF +:1036E00080FFFBCF8091D8008F7D8093D8008091A0 +:1036F000E1008F7E8093E1008091E2008F7E8093D5 +:10370000E2008091E20081608093E20080916D048C +:10371000882309F445C084E080936C048091E10023 +:1037200083FF27C08091E20083FF23C08091E100E6 +:10373000877F8093E10082E080936C0410926D0497 +:103740008091E1008E7F8093E1008091E2008E7F86 +:103750008093E2008091E20080618093E20042E089 +:1037600060E080E00E946E078091F00088608093A6 +:10377000F000FF91EF91BF91AF919F918F917F9159 +:103780006F915F914F913F912F910F900FBE0F90CE +:103790001F90189519BC10926C0410925E0476CF9D +:1037A0008091E30087FD93E090936C04B7CF789409 +:1037B0001F921FB61F9211248F939F93AF93BF93B5 +:1037C0008091570490915804A0915904B0915A04E3 +:1037D0000196A11DB11D8093570490935804A093A6 +:1037E0005904B0935A04BF91AF919F918F911F904C +:1037F0001FBE1F9018959C014FB7F89480915704F5 +:1038000090915804A0915904B0915A044FBF821B63 +:10381000930B08952FB7F894809157049091580412 +:10382000A0915904B0915A042FBF08955F926F92EE +:103830007F928F929F92AF92BF92CF92DF92EF9240 +:10384000FF920F931F93CF93DF9300D000D00F927E +:10385000CDB7DEB77C01FC0183819481892B31F0E7 +:103860008081918189238F3F09F08CC60F900F9042 +:103870000F900F900F90DF91CF911F910F91FF90BC +:10388000EF90DF90CF90BF90AF909F908F907F9000 +:103890006F905F9008950E94C514182F682F89813A +:1038A0009A810E94CB0B69817A81812F0E94B81482 +:1038B0008C01F7018281882361F0F801E65EFC4506 +:1038C000ED30F10530F4E550F94C0C9449350E9487 +:1038D0002718D0903D04D0FE1CC08D2D8695837096 +:1038E000F7019281992309F460C1823090F4B70105 +:1038F000C8010E94B108882361F0D694D694D6946A +:1039000080913E0483708295880F807E8D290E946D +:10391000B313F7018281882309F429C6C8018251B3 +:103920009F45409708F0ECC58FEF93E00E947535F6 +:10393000025193EEA92E92E0B92E811197CF011179 +:1039400038C11C821B82662463948AE0582E85014C +:103950000F5F1F4FC5010E94753589831A82882326 +:1039600009F484CF9FEF980F933008F031C18A8318 +:10397000698232E0A30EB11CC8010E9475358B83A9 +:10398000882309F473CF8E010F5F1F4FF801208148 +:103990002223E9F2213009F055C1918182819130D1 +:1039A00009F018C10E5F1F4F6AE070E0893311F40F +:1039B00060E570E00E94D20E13C10E94181889CFF2 +:1039C00080913D0480FF0DC00E94181860913D0455 +:1039D00070913E0480913F04909140040E94DB1757 +:1039E00078CF0E942718F2CF0E94061872CF9091CC +:1039F0003D04892F86958F5F8370880F997F892B6F +:103A000080933D04982F9670963001F7897F8093BC +:103A10003D04DCCF90913E04892F8B7F92FF846020 +:103A200080933E04D3CF80913D04982F9695969530 +:103A3000969580913E0483708295880F807E892BB5 +:103A40008C3798F48F5F282F220F220F220F90912E +:103A50003D049770922B90933D04829586958370D8 +:103A600090913E049C7F892BDBCF81E0ECCF80914D +:103A70003D04982F96959695969580913E04837077 +:103A80008295880F807E892B11F08150DCCF8BE7E7 +:103A9000DACF30913E04932F969596959695209186 +:103AA0003F04822F83708295880F807E892B90E05F +:103AB0000196482F440F440F440F3770342B309336 +:103AC0003E0435E0969587953A95E1F783702C7F13 +:103AD000822B80933F047ACF30913E04932F9695AA +:103AE0009695969520913F04822F83708295880F3A +:103AF000807E892B8150990BDCCF80913F0482FF1F +:103B000012C08B7F80933F0460913D0470913E040E +:103B100080913F04909140040E94DB1760E081E0B7 +:103B20000E94A713D6CE846080933F0460913D0429 +:103B300070913E0480913F04909140040E94DB17F5 +:103B400060E08CE00E94A71364E182E00E94A7136A +:103B500065E081E00E94A71361E08CE0E1CF8091F5 +:103B60003F04982F9695969596958091400482955E +:103B7000880F807E892B883720F4865F0E94E117AA +:103B8000A8CE88E7FBCF80913F04982F9695969515 +:103B90009695809140048295880F807E892B843190 +:103BA00010F08A50EBCF84E1E9CF882309F4B1CE3D +:103BB0009ECEA114F4E0BF0609F458CEC5010E94C0 +:103BC0007535811101C001502FEFA21AB20AB7CE8C +:103BD0005801D9CE923039F40E5F1F4F0E94570C16 +:103BE0000F5F1F4FD3CE933029F40E5F1F4F0E94FB +:103BF0001E0CF6CF943019F00F5F1F4FF1CF0E5F00 +:103C00001F4F30E020E0B8016F5F7F4FF801418126 +:103C10008053990B8A30910550F02150310900F3FF +:103C20008FE99FE00197F1F700C00000F6CF529EA8 +:103C3000F001539EF00D11249C012E0F3F1F842F85 +:103C40008B01E1CFE22FF0E0E75FFD4F7490822F10 +:103C500086958695869590E0FC01E750FE4FE490AE +:103C60002770F12C022E02C0F594E7940A94E2F733 +:103C7000E1E0EE22FF24FC01E751FE4FC490D12C7D +:103C8000022E02C0D594C7940A94E2F7F1E0CF2245 +:103C9000DD24FC01E752FE4F8490912C02C09594E4 +:103CA00087942A95E2F721E082229924E114F10415 +:103CB00019F081EE0E94570CC114D10419F086EE60 +:103CC0000E94570C39E36AE070E0731202C060E5AD +:103CD00070E0872D0E94D20ECD2819F086EE0E944A +:103CE0001E0CEF2819F081EE0E941E0C892809F4A1 +:103CF00077CF6AE070E08CE25DCE81E00E9496179B +:103D000003C081E00E948A170F900F900F900F90D0 +:103D10000F90DF91CF911F910F91FF90EF90DF9067 +:103D2000CF90BF90AF909F908F907F906F905F905B +:103D30000C947F1782E0E2CF043F110509F455C1CE +:103D400008F057C1053E110509F4DDC0F701928165 +:103D500091113CC280915F0482720A3CFCE51F070E +:103D600009F414C208F06AC1053C3CE5130709F4E4 +:103D7000F9C108F04EC1033C5CE5150709F4D3C155 +:103D800008F0EBC1023C1C4509F47DC1F70100813C +:103D90001181992309F434C2C8010E94C514D82E98 +:103DA000682FC8010E94CB0BB8018D2D0E94B8145A +:103DB0000E94180A182FB82EF70122814581342F4E +:103DC00032953F70892F82958F70C82ED12C8C3000 +:103DD00008F04EC2F601E85FF84C0C944935033800 +:103DE000FFE51F0709F481C018F501383FE5130707 +:103DF00009F44AC008F065C000385FE5150709F00E +:103E0000A5CF882309F459C080919C02811106C076 +:103E100081E080939C0282EE0E94570C0E940A1C53 +:103E200090939B0280939A028BE20E94570C8ECF54 +:103E300005389FE5190709F4BEC008F476C00638B6 +:103E4000FFE51F0709F082CF882309F4CEC06091F7 +:103E5000590170915A0190E080E00E94C23520E043 +:103E600030E040E05CE30E94233620E030E040E8B0 +:103E70005FE30E94BD358111B5C080EE90E0909364 +:103E80005A0180935901A1C08823A1F080919C021E +:103E9000811106C081E080939C0282EE0E94570C43 +:103EA0000E940A1C90939B0280939A0281EE0E94CA +:103EB000570CBACF81EE0E941E0C8BE20E941E0CA2 +:103EC00045CF882309F442CF81EE0E94570C83EE40 +:103ED0000E94570C8FE40E94570C8FE40E941E0C26 +:103EE00083EE0E941E0C81EEE9CF882309F42ECFC9 +:103EF00081EE0E94570C83EE0E94570C80E50E94D1 +:103F0000570C80E5EBCF80933C0210933B0200936B +:103F10003A02882321F081E08093EE0217CF1092BD +:103F2000EE0214CF80933902F0CF882379F180918B +:103F30003902882349F080913A020E941E0C80EEDB +:103F40000E94570C8AE20CC080913C028823D1F376 +:103F500080913A020E941E0C80EE0E94570C8CE465 +:103F60000F900F900F900F900F90DF91CF911F91B6 +:103F70000F91FF90EF90DF90CF90BF90AF909F9008 +:103F80008F907F906F905F900C94570C8AE20E9404 +:103F90001E0C8CE40E941E0C80EE0E941E0C809170 +:103FA0003902811105C080913C02882309F45ECC5E +:103FB00080913A02D5CF8823C1F0809132038823C3 +:103FC00039F010923203109200010E94410DBECED2 +:103FD000809100018111F7CF81E0809332038093BB +:103FE0000001F3CF80E890E04ACF61E00E94C21365 +:103FF000ADCE62E0FBCF64E0F9CF882321F081E011 +:104000008093ED02A3CE1092ED02A0CE1092F002AA +:104010009DCE073C2CE5120709F4AEC008F4A7C0FA +:10402000083C4CE5140709F4ACC0093C1C4509F0F8 +:10403000ADCE45E056E161E176E179C0043DECE5C5 +:104040001E07A8F40E3CFCE51F0708F00FCC0C3C43 +:104050002CE5120709F49FC047E456E168E576E1D4 +:104060000D3C1C4508F463C061E081E046C0053D9D +:104070004CE5140709F4FACB08F492C00D351D4540 +:1040800009F4F4CB83CE8091770480FF31C08E7F1A +:10409000809377046091770470917804809179041B +:1040A00090917A040E94401580915B038160809317 +:1040B0005B039FEFE0E7F2E09150E040F040E1F772 +:1040C00000C000000F900F900F900F900F90DF91A5 +:1040D000CF911F910F91FF90EF90DF90CF90BF9005 +:1040E000AF909F908F907F906F905F900C94E70EB1 +:1040F00081608093770461E086950F900F900F9018 +:104100000F900F90DF91CF911F910F91FF90EF9043 +:10411000DF90CF90BF90AF909F908F907F906F90E7 +:104120005F900C94691641EA57E16AEA77E10F90D3 +:104130000F900F900F900F90DF91CF911F910F91E3 +:10414000FF90EF90DF90CF90BF90AF909F908F90B7 +:104150007F906F905F900C9409094AEA57E161EAF9 +:1041600077E1E5CF45E356E16EE376E1E0CF4EE35C +:1041700056E165E376E1DBCF4DE156E169E276E1B8 +:10418000D6CF49E256E16DE176E1D1CF41E156E18A +:1041900065E076E1CCCF48E556E167E476E1C7CF4C +:1041A0000F900F900F900F900F90DF91CF911F9174 +:1041B0000F91FF90EF90DF90CF90BF90AF909F90C6 +:1041C0008F907F906F905F900C94B4170E3D1C45BC +:1041D00009F0DCCD0F900F900F900F900F90DF91B2 +:1041E000CF911F910F91FF90EF90DF90CF90BF90F4 +:1041F000AF909F908F907F906F905F900C94361847 +:10420000C8010E94A30BD82ECFCD092F0F70907F2D +:1042100011F00295007F812F2223C9F0002369F05D +:1042200090E2910F983010F011110BC080915F0453 +:10423000082B00935F040E94820B812F0E94570C71 +:1042400017C080919102082B00939102F4CF0E9435 +:104250001E0C002369F00095105E183010F0B110AC +:1042600027C080915F04082300935F040E94820BA3 +:1042700098E0C91AD108E4E0CE16D10408F0F6CAD5 +:104280000E94C20E0F900F900F900F900F90DF9131 +:10429000CF911F910F91FF90EF90DF90CF90BF9043 +:1042A000AF909F908F907F906F905F900C94B81616 +:1042B00080919102082300939102D8CF892F8F70AB +:1042C000907F903211F08295807FF1E0BF120CC098 +:1042D000222329F0333060F60E94140CC9CF32300B +:1042E00038F60E94090CC4CF222341F03323A1F3F6 +:1042F00040FFA3CF4F70F7014583EECF332389F3FF +:10430000193309F0F5C0FFEF27EE33E0F1502040FC +:104310003040E1F700C00000812F0E941E0CA8CFA2 +:10432000892F86958695837061F0813009F0A0CF42 +:10433000812F9370211102C090E080E00E946E08EE +:1043400097CF812F9370211102C090E080E00E94EE +:1043500084088ECF892F8370A1F5211189CF812FF9 +:10436000829586958770880F880F412F4F70082E91 +:1043700001C0440F0A94EAF7212F207114FF07C0EF +:104380002FE030E001C0220F8A95EAF7209596953C +:1043900096959370923081F0822F842B933030F475 +:1043A00080919202913029F0242B82230E94050CE7 +:1043B0005FCF842B822BFACF242B8091920282270D +:1043C000F5CF8695222311F0892F8170882309F477 +:1043D0004FCF812F829586958770880F880F412F48 +:1043E0004F70082E01C0440F0A94EAF7212F207164 +:1043F00014FF07C02FE030E001C0220F8A95EAF7D2 +:104400002095969596959370923081F0822F842B0B +:10441000933030F480917604913029F0242B82235C +:104420000E94791725CF842B822BFACF242B8091E1 +:1044300076048227F5CF092F0F70222329F0802FD1 +:104440000E949617812F48CF812F0E94090C802F40 +:104450000E948A170DCF812FE1EF1E1789F1E11716 +:1044600050F0F0EF1F17B9F02223B1F13111E5CE72 +:10447000892F8F7129C042EF141749F153EF15139B +:10448000F3CF80E0222361F29F7181E001C0880FA9 +:104490009A95EAF7C5CF222379F0323008F0E8CEBA +:1044A000292F2F7181E090E001C0880F2A95EAF74B +:1044B000909176048927B4CF333008F0D9CEF0CF6D +:1044C000892F8F71222321F20E949617D1CE892F36 +:1044D0008F712223C9F3BCCF332379F0893341F4A0 +:1044E0008FEF97EEE3E081509040E040E1F712CF8C +:1044F0008FE39CE90197F1F70DCF892F8F71A8CF3A +:104500000031FFE51F0709F4F8CB01312FE5120751 +:1045100009F410CC0E9462086093F5027093F602D1 +:104520008093F7029093F802F7018281063F11050C +:1045300009F461CD08F053CC043E110509F45DCDBA +:1045400008F0FACB003E110509F457CD013E1105E4 +:1045500009F4E8CC0C32110509F0F8CB882309F4F2 +:1045600055CD81E08093F00210926701EFCB0031CE +:104570003FE5130709F4C5CB01314FE51407A1F658 +:1045800082E0C0CB85E0DE01119601900D928A9504 +:10459000E1F7F701228189819A8121117CC90E946A +:1045A000A30B182F80C91F93CF93DF9380915D02D7 +:1045B000807FA9F480915A02882389F080918F022C +:1045C000D0915E026091580270915902A0915B02F5 +:1045D000B0915C02C62FC72316E0D81304C0DF9148 +:1045E000CF911F91089590E0109711F0CF3F19F4EB +:1045F00001968770F2CF189F9001199F300D1124FA +:10460000F901E15AFD4F41814713F2CF4081461332 +:10461000EFCF42814111ECCF438154814A1B5B0BA8 +:10462000403A510528F780915D028F708061809338 +:104630005D02F901EC59FD4F80818F7080618083AC +:1046400088E592E00E94161CDF91CF911F910C9497 +:10465000990BAF92BF92CF92DF92EF92FF920F939E +:104660001F93CF93DF93CDB7DEB761970FB6F89462 +:10467000DEBF0FBECDBF8C0185E0F801DE011D96C7 +:1046800001900D928A95E1F7F801E28088E5A82E65 +:1046900082E0B82E60915B0270915C026115710539 +:1046A00009F432C19091580240915902892F842314 +:1046B0008F3F09F429C120813181C380D480F090DB +:1046C0005A02F601E61BF70BFF2009F4E8C08091BF +:1046D0005D02582F507FE03AF10508F0ABC0511150 +:1046E00077C0FE2C431321C092131FC0E1101DC0E0 +:1046F0008F70806180935D02C5010E94161C8091BD +:104700005D02F80185838F2D61960FB6F894DEBFA8 +:104710000FBECDBFDF91CF911F910F91FF90EF9012 +:10472000DF90CF90BF90AF900895CD2829F0822FD1 +:1047300083238F3F09F003C180E0F82FF170DF2E53 +:1047400080FF3CC080918F0240915E0256E084134E +:1047500015C02D873E878D859E850E94F414292FD4 +:1047600022952F702230F0F0243018F59F70F1F070 +:10477000F8019581907FD1F4D12C1EC090E0589F14 +:10478000F001599FF00D1124E15AFD4F618136135C +:1047900006C06081261303C06281E6120FC0019635 +:1047A0008770D5CF9F7011F0882331F3805E8830F9 +:1047B00018F3C8010E94161CFD2CA5CFEE2009F4A9 +:1047C000A2CF80915D02816080935D02F12C9BCF2E +:1047D000431306C0921304C0F801EE2009F479C017 +:1047E000C8010E940015882309F1EE20F9F080919C +:1047F0005D02803270F02091580230915902388762 +:104800002F831986DB86CA868C87CE0107960E9485 +:10481000161C86E0F801A8E5B2E001900D928A9599 +:10482000E1F70E94D322FF24F3946DCFC8010E94C8 +:10483000161CF9CF51110AC088E592E00E94161C9F +:1048400086E0F50111928A95E9F7C0CF43130FC0B6 +:1048500092130DC0E1100BC0F8018583C8010E94BE +:10486000161C86E0F50111928A95E9F74CCFC80134 +:104870000E9400158823D1F2EE20C1F280915D02E2 +:10488000803238F220915802309159023A832983BC +:104890001B82DD82CC828E83CE010196B8CFE03AB6 +:1048A000F105F8F6FE2CEE2009F243131FC0921317 +:1048B0001DC080915D0280FD10C0982F907F69F02F +:1048C000F8018583903F31F0982F907F905F8F7033 +:1048D000892B8583C8010E94161C86E0F801A8E593 +:1048E000B2E001900D928A95E1F70DCFC8010E94C8 +:1048F000001581118ECF80915D02816080935D02F1 +:10490000C8010E94161CFFCEEE2009F48FCFC8010B +:104910000E940015F82E882309F488CF86E0F8015C +:10492000A8E5B2E001900D928A95E1F780915802D6 +:10493000909159020E94F4140E94D322E4CE81E0A7 +:104940008E25FBCE1F93CF93DF93CDB7DEB767974E +:104950000FB6F894DEBF0FBECDBF4B8B5C8B6D8B5B +:104960007E8B8F8B6111109291021A8A198A85E0D1 +:10497000FE017396DE011D9601900D928A95E1F776 +:1049800086E0FE013D96DE01179601900D928A9514 +:10499000E1F7CE0107960E942923882389F016E0CB +:1049A00080918F0290915E0289134BC067960FB67B +:1049B000F894DEBF0FBECDBFDF91CF911F91089558 +:1049C00086E0FE013796DE01119601900D928A95E0 +:1049D000E1F78A859B85892B11F38F81988589233F +:1049E0008F3FE9F220915E0230E0C90101968770A5 +:1049F000992740918F024817190681F410925F049D +:104A00000E94FA0F10925E0210928F0286E0E8E593 +:104A1000F2E0DF011D928A95E9F7C1CF96E0929FFF +:104A2000D001939FB00D1124A15ABD4FFE013196C4 +:104A300001900D929A95E1F780935E020E94990B86 +:104A4000AECF819FC0011124815A9D4F0E9429231E +:104A5000882309F4ABCF80918F0290E00196877094 +:104A6000992780938F029CCF9F92AF92BF92CF9253 +:104A7000DF92EF92FF920F931F93CF93DF93CDB707 +:104A8000DEB764970FB6F894DEBF0FBECDBF8E01C0 +:104A90000F5F1F4F8AE0D8011D928A95E9F79EE4C7 +:104AA000C92E91E0D92EF12CE12CAA24A394B12C8B +:104AB000F60181916F018F3F09F44AC0F894E82F05 +:104AC000E295EF70F0E021A18F70A50102C0440FC4 +:104AD000551F8A95E2F7CA01922F982B91A392A1B4 +:104AE0008095892382A30E94BC0900C0E7E4F1E01D +:104AF00030E020E0912C41914F3F09F47DC0A42F7C +:104B0000A295AF70B0E090968C9190E04F7002C08B +:104B1000959587954A95E2F780FD6EC08A2D022E05 +:104B200001C0880F0A94EAF7982A2F5F3F4F273079 +:104B3000310509F7F601319780818F3F11F00E940E +:104B4000BE0950EA5A95F1F7F801EE0DFF1D90826B +:104B50008FEFE81AF80A95E0E916F10409F0A8CFFA +:104B60004AE050E0B80188ED92E00E945F357C0198 +:104B7000892B41F08AE0F801A8EDB2E001900D9296 +:104B80008A95E1F71091E302E114F104B9F181E0B3 +:104B9000809395020E940A1C909394028093930242 +:104BA00080919302909194020E94FB1B069770F0F3 +:104BB000A8EDB2E0E12FF0E0E15BFC4F8D91819335 +:104BC00022E0AD3DB207D1F71092950281E090E06E +:104BD000EF28C1F064960FB6F894DEBF0FBECDBFCC +:104BE000DF91CF911F910F91FF90EF90DF90CF90C9 +:104BF000BF90AF909F90089580E096CF80919502EE +:104C00008111CECF0E949F0EB82EE091E30288233F +:104C100009F4C7C08E01005F1F4F85E0D8011D92C7 +:104C20008A95E9F7F0E09F01215B3C4F7901809183 +:104C3000D102AE014B5E5F4F6A018A3008F086C038 +:104C400044E75AE1B801C7010E945B0E882309F4CA +:104C500094C045EA57E2B801C7010E945B0E882361 +:104C600009F48BC04BE958E1B801C7010E945B0E03 +:104C7000882309F482C047E859E1B801C7010E94BE +:104C80005B0E882309F479C045E659E1B801C701F4 +:104C90000E945B0E882309F470C01092D102E0914B +:104CA000E202F0E0AF01415B5C4FD80110E0FA0195 +:104CB0009191AF018D91981731F09F0121503109E9 +:104CC000F90180831B2DCA16DB0689F780919C02AF +:104CD000882371F080919A0290919B020E94FB1BA5 +:104CE000893E934028F082EE0E941E0C10929C0296 +:104CF00088E9C82E82E0D82EF12CE12CD6018D91C6 +:104D00006D018823D1F08695F70109F447C0EC5076 +:104D1000FE4F808191819C878B871D860E940A1C93 +:104D20008160782F9F878E87F601319710824B859F +:104D30005C856D858F850E94A224B2E0EB0EF11C8C +:104D4000E4E0EE16F104D1F6812F44CF8091960273 +:104D5000909197020E94FB1B843F914008F070CF16 +:104D6000A091E202B0E0A15BBC4FF8011D9211924C +:104D7000CE16DF06D9F71B2DA9CF8091D1028F3F28 +:104D800031F08F5F8093D1028A3008F488CF0E947F +:104D90000A1C9093970280939602E2CFE051FE4F57 +:104DA000B8CFF0E0E15BFC4FF89485E0A0EBB2E017 +:104DB00001900D928A95E1F765E070E080EB92E05A +:104DC0000E94F3088093AF020E94BC09F894E0911E +:104DD000EB02F0E0E851FD4F80818B878093B602B3 +:104DE00061E070E0CE010B960E94F3088093B5025B +:104DF0000E94BC09F894C090B702D090B802E0902D +:104E0000B902F090BA0280919D0290919E02A09109 +:104E10009F02B091A002C816D906EA06FB06D1F09F +:104E2000C0929D02D0929E02E0929F02F092A00258 +:104E30000E949F0E81110EC00E946208C61AD70AF6 +:104E4000E80AF90AC092D202D092D302E092D402C8 +:104E5000F092D5020E94BC09F8948091C202882386 +:104E600021F184FF04C09091C30290935C0380FF02 +:104E70000DC08091BB0280FF25C0909177049160A6 +:104E80009093770460E086950E9469168091C20233 +:104E900081FF09C020E04091BE026091BD02809177 +:104EA000BC020E9452151092C2020E94BC09F894E2 +:104EB0008091C402882349F00E94B30D0E94BC096E +:104EC00080E088CE0E94E50FE1CF0E94980DF6CFDA +:104ED000EF92FF920F931F93CF93DF9300D000D0F8 +:104EE0000F92CDB7DEB7162FE82EF12CC701880F31 +:104EF000991F662339F18C509E4FFC01808191816E +:104F00009A83898301E00B830E940A1C8160782FB9 +:104F10009D838C83F701E856FD4F0127110F102B5D +:104F2000108349815A816B818D810F900F900F9072 +:104F30000F900F90DF91CF911F910F91FF90EF9005 +:104F40000C94A22480519E4FD8CFCF92DF92EF9243 +:104F5000FF920F931F93CF93DF930F92CDB7DEB7DE +:104F6000EE24E394F12C06EB12E09E012F5F3F4FFD +:104F70004BEA52E063E082E00E94C519082F8823C3 +:104F800021F1C090E5028C2D90E09C0128513D4F0D +:104F900079011981F9018081181BD12E80E00AC0A6 +:104FA000DA94F70180818F5F808360E08C2D0E940E +:104FB0006827802F1D14A4F3912F17FD90E0191B73 +:104FC00011110EC081110E94800B802F0F90DF9174 +:104FD000CF911F910F91FF90EF90DF90CF900895A8 +:104FE0001F5FF70180818150808361E08C2D0E94DA +:104FF0006827802FE5CF1F921FB61F9211248F9331 +:105000009F93AF93BF9380915604811113C08091F9 +:10501000570490915804A0915904B0915A044196B4 +:10502000A11DB11D8093570490935804A093590477 +:10503000B0935A04BF91AF919F918F911F901FBE63 +:105040001F901895CDB7DEB7E9970FB6F894DEBF7D +:105050000FBECDBF84B7877F84BF0FB6F894A895E5 +:1050600080916000886180936000109260000FBEA4 +:1050700080E890E00FB6F89480936100909361000F +:105080000FBE85B7806885BF85B7806885BF8AEB0E +:1050900099E090932F0280932E020E94D5060E94E1 +:1050A000A0078091E20084608093E2007894809170 +:1050B0006C048823A1F01091E9001F709091EC001E +:1050C000892F817090FD80E8182B1092E900809163 +:1050D000E80083FD0E9403101F701093E90082E036 +:1050E00084BD93E095BD9AEF97BD80936E001092BA +:1050F000D2021092D3021092D4021092D5020E94D2 +:105100002715811102C00E9483140E949F0E809374 +:10511000580180915801882309F4C6C010926F018C +:1051200085E2809370010E949F0E81110E9454338A +:105130008091580181112FC0FE01359686E0DF0174 +:105140001D928A95E9F786E6898387E98A8386EC4A +:105150008B8384E38C8385E38D833497AEE4B1E065 +:10516000CE010B9621912D938E179F07D9F787E0DB +:10517000E5E7F1E0DE01919601900D928A95E1F765 +:10518000FE01B196A7E4B1E0CE01889621912D935E +:105190008E179F07D9F78091580195E0811190E013 +:1051A0009093E30285E0891B8093E2020EE411E014 +:1051B000A3E5EA2EA1E0FA2EF80181918F018F3F3D +:1051C00011F00E94BE09E016F106B1F707E411E004 +:1051D000FEE4EF2EF1E0FF2ED8018D918D018F3F7F +:1051E00011F00E94BE09E016F106B1F7E8EDF2E019 +:1051F00082EE92E0AFE4B3E011921D928E179F070A +:10520000D9F70E94B11A811102C00E94361882E0BB +:1052100090E00E9475358093440384E090E00E9402 +:105220007535182F82E290E00E947535982F812FF6 +:105230009093D7028093D6020E943425EFE7FBEBD0 +:105240003197F1F700C000000E94342580914F0390 +:1052500080FF2EC06FEF7FEF90E080E00E94A735C7 +:1052600081E08093E00080E28093D8001092C90032 +:105270008FE19EE40197F1F700C0000087E090EB1A +:10528000DC018093800690938106A0938206B09300 +:10529000830688E19CE00FB6F894A895809360009F +:1052A0000FBE90936000FFCF85E280936F0139CFEE +:1052B00083E090E00E9475350E94050C8091760491 +:1052C0000E94D0160E94B11A811102C00E943618A5 +:1052D00088E190E00E947D3560933D0470933E0428 +:1052E00080933F0490934004672B682B692B11F443 +:1052F0000E9406180E94553167E081E00E94A713C2 +:1053000065E586E10E94A71363E687E10E94A71383 +:1053100060EA8AE10E94A71369E98BE10E94A71362 +:1053200065EF8CE10E94A71360EA8DE10E94A7134C +:1053300060E38EE10E94A71366E083E00E94A7135A +:1053400061E08CE00E94A71360E081E00E94A71357 +:1053500060E08CE00E94A7136FE084E00E94A71336 +:1053600061E08CE00E94A7130E949F0E811102C091 +:105370000E94573383E080931A0380E280934304B2 +:105380000E9455316DE070E08CE992E00E94680D5A +:10539000892BE9F580911A0363E070E081FD9EC2DC +:1053A00089E992E00E94680D892B89F56DE070E033 +:1053B00089E892E00E94680D892B49F50E946208F5 +:1053C0006058774C8E4F9F4F60934A0470934B0404 +:1053D00080934C0490934D04EEE7F4E080E092E07B +:1053E000DF019C011D9221503040E1F7F0937F06D0 +:1053F000E0937E068FEF9FEF90937D0480937C0473 +:1054000081E080934F0480934E0410921B0380919F +:10541000E402811136C00E94B11A811104C00E94B9 +:1054200036180E94C31788E090E00E947D35609393 +:105430007704709378048093790490937A04809130 +:105440005B03836080935B036E7F71F40E94C317DC +:1054500088E090E00E947D35609377047093780433 +:105460008093790490937A040E940E0980917704C6 +:1054700080FF04C060E086950E94691681E08093F9 +:10548000E40280915801811106C084EF8093660187 +:1054900085EF8093650120916601A22FA295AF70E0 +:1054A000B0E091963C9191972F7081E090E0BC0123 +:1054B000022E01C0660F0A94EAF7462F4095432357 +:1054C00091964C93919792963C919297362B929607 +:1054D0003C93929740916501E42FE295EF70F0E0E4 +:1054E00031A14F70042E01C0880F0A94EAF7982F5B +:1054F0009095932391A392A1892B82A390968C914E +:1055000090E002C0959587952A95E2F7817020A1D9 +:1055100030E002C0359527954A95E2F792E020FFEA +:1055200090E0892B8093EC028091580111E0812753 +:105530008093EB02312F381B3093E5020E945531E6 +:1055400040E060E080E00E94210D60E08AE00E947F +:10555000691689EA92E090935E0380935D0381E08F +:105560000E94791780EE90E090935A018093590140 +:10557000109332030E94410D8BE591E09093530408 +:10558000809352043E018DE3680E711C80916C047F +:10559000FF24F39400E112E1853009F4F2C10E9486 +:1055A0003425E82E81110E946208E5E4F3E0AFE4BF +:1055B000B3E010E000E0B02EDD9081918D1509F48C +:1055C00004C28D25C12CFF24F394982F9F2109F448 +:1055D000F7C10E949F0E882399F0CEA6BFA6DF20B8 +:1055E00081E009F480E088AB0E940A1C8160782F7A +:1055F0009AAB89AB4EA55FA568A98AA90E94A2248F +:10560000F801EB5BFC4F8081F826F0828091EC0280 +:10561000E82FEE0FEE0F90916601A92FA295AF70C3 +:10562000B0E090962C9130E09F7002C035952795A0 +:105630009A95E2F72170332790916501A92FA295E1 +:10564000AF70B0E090964C9150E09F7002C05595BD +:1056500047959A95E2F7CA018170992740FF02C0E9 +:1056600082E090E0822B8E2B8093EC021091EB0273 +:105670008F70E82FF0E0E650FE4F80819091EA02B3 +:10568000890F8093EA02F12C84306CF0E12FF0E076 +:10569000E851FD4F80818F5F808360E0812F0E9401 +:1056A0006827FF24F3948091EA028D3F6CF4E12F88 +:1056B000F0E0E851FD4F80818150808361E0812FCF +:1056C0000E946827FF24F3948091EA02082E000CC0 +:1056D000990B64E070E00E9435358093EA02F11086 +:1056E0000E94800B80914F04882351F180911C030C +:1056F00090911D030E94FB1BC29708F07DC1209171 +:105700007C0430917D042115310509F0A0C28091FF +:105710004E048823A9F00E94620800914A04109167 +:105720004B0420914C0430914D04601B710B820B93 +:10573000930B6F3F7F4F8F4F9F4710F40E94980D40 +:10574000E11001C0F1100E94B30D809142038A3034 +:1057500008F0BAC380914003909141030E94FB1B63 +:10576000089708F4B1C304E610E025E030E04BE30D +:1057700053E064E084E10E94A032892B09F075C3F4 +:105780001092420320913203222359F080913B036F +:1057900090913C0398278927982790933C03809306 +:1057A0003B0386E0E4E2F3E0DE01919601900D9286 +:1057B0008A95E1F786E0FE01B196DE01119601902F +:1057C0000D928A95E1F786E0FE013196A5E3B3E0FC +:1057D00001900D928A95E1F790913F0380913603F5 +:1057E00097FD3AC38E7F8093360380913303909167 +:1057F0003403009709F02AC360913B0380913C0376 +:1058000000913D0310913E03222309F4F2C241E0CE +:105810000E94FB0C2091300330913103820F931FC3 +:10582000909331038093300341E0602F812F0E94D9 +:10583000FB0C20912E0330912F03820F931F909326 +:105840002F0380932E0360E373E08AE393E00E94CA +:10585000DC0C6EE273E089E393E00E94DC0C1092B2 +:1058600037031092380386E0E5E3F3E0DE0111969A +:1058700001900D928A95E1F786E0FE013196A4E24F +:10588000B3E001900D928A95E1F7309126032091C3 +:105890002703909128038091290370912003609140 +:1058A00021034091220350912303F0912503E091BD +:1058B0001F03FE13E0C2332311F07313DCC2222353 +:1058C00011F02613D8C2882311F08513D4C299236E +:1058D00019F081E04913D0C280E0CEC286E992E09F +:1058E00061CD80916C04843009F43BC00E94980D16 +:1058F00040E060E080E00E94210D80E00E94B81648 +:105900008091E702811109C0F092E702809177044B +:1059100081708093E6020E94E50F10925604A8E180 +:10592000B0E0E0E40FB6F894A895A09360000FBE35 +:10593000E093600083B7817F846083BF83B7816019 +:1059400083BF7894889583B78E7F83BF0FB6F89412 +:10595000A89580916000886180936000109260003B +:105960000FBE80916B04882361F00E943425EFE420 +:10597000F3E08191811178C429E533E02E173F07C8 +:10598000C1F780916C04853009F4ABCF10925F04AD +:105990000E94FA0F0E94C20E0E94B8161092E702EF +:1059A0008091E602882349F080917704816080939A +:1059B000770460E086950E9469160E94410DEFCD44 +:1059C000C394FF0C37E0C31200CE0F5F1F4F0A30A5 +:1059D000110509F0F0CD8FEF8BAB8CAB1DAA0E94A7 +:1059E0000A1C8160782F9FAB8EAB4BA95CA96DA977 +:1059F0008FA90E94A2240ACE0E940A1C90931D0324 +:105A000080931C0360E080E00E949A080E94C20E0E +:105A10008093F9020E949F0E882331F14091F50294 +:105A20005091F6026091F7027091F8022FB7F89446 +:105A30008091570490915804A0915904B0915A0450 +:105A40002FBF841B950BA60BB70B81339547A10580 +:105A5000B10540F00E94980D80914F04882309F40D +:105A600056CE4DCE0E94B30D0E949F0E882309F49E +:105A7000D5C061E080E00E949A0860E08CE791E088 +:105A80000E948B1362E080E00E949A088091760465 +:105A90000E94CB0C823009F49BC008F090C0882390 +:105AA00009F496C0813009F499C065E080E00E9455 +:105AB0009A0860E08AE991E00E948B1366E080E03A +:105AC0000E949A086091F902669561708FE991E0F1 +:105AD0000E948B1367E080E00E949A086091F902AF +:105AE0006095617084EA91E00E948B1368E080E029 +:105AF0000E949A086091F90262FB662760F988EAC1 +:105B000091E00E948B137DA66CA64091F10250910A +:105B1000F2026091F3027091F4022FB7F894809131 +:105B2000570490915804A0915904B0915A042FBF82 +:105B3000841B950BA60BB70B8D329140A105B105C7 +:105B400008F48ACF0E9462086093F1027093F20217 +:105B50008093F3029093F4028091F002811104C0CB +:105B600080916701811142C06DE080E00E949A0837 +:105B700060E08DEA91E00E948B136AE080E00E9471 +:105B80009A0881E0809367018091EF0290E001968E +:105B9000817099278093EF0221E030E0281B390BB8 +:105BA00040E6429FC001439F900D11242091EE02D8 +:105BB000222351F1855C9B4F0E9492064DCF83308A +:105BC00089F0843009F071CF60E08EE891E003C085 +:105BD00060E082E891E00E948B1367CF60E088E884 +:105BE00091E0F9CF60E084E991E0F5CF6AE080E0F0 +:105BF0000E949A0860E08DEA91E00E948B136BE0AE +:105C000080E00E949A08C0CF2091ED02222319F073 +:105C100085589C4FD1CF85549D4FCECF64E080E016 +:105C20000E949A0860E083EB91E00E948B1365E08C +:105C300080E00E949A0860E089EB91E00E948B135B +:105C400069E080E00E949A088BEF94E0B5CF8091E4 +:105C50001B0361E070E081115ACD082F10E02B0189 +:105C6000082E02C0440C551C0A94E2F7A9014421F5 +:105C70005521452B09F448C090911A0390FD46C068 +:105C80008295880F807680936A01980136952795D2 +:105C90003695279520936D01815E80936B0110925C +:105CA0006E0124E630E047E050E068E671E088E706 +:105CB0000E944C32892B09F02ACDA80175E0440FCF +:105CC000551F7A95E1F780911A0380FD2DC0425847 +:105CD0005B4F04E610E020E230E060E488E70E94D9 +:105CE0007332892B09F013CD0E94B30DC201809548 +:105CF000909540907C0450907D0448225922509207 +:105D00007D0440927C0403CD8F5FA7CF880F880F5E +:105D1000880F80936A0110926D01895F80936B01F7 +:105D200083E080936E01BDCFEAEFF2E080E2DF0115 +:105D30001D928A95E9F7EEE0F2E0F9AFE8AF0AE0EC +:105D400012E099249394A8ADB9AD2D91B9AFA8AF45 +:105D5000F80121908F01240E352E311CC10182588B +:105D60009B4F1C01E22FF0E0E650FD4F30E020E0B9 +:105D700067E0A62EA21AB92C022E01C0BB0C0A9411 +:105D8000EAF7610190E0D6018D916D018B216A2DBA +:105D9000691B6770862E062E000C770BB82F01C08A +:105DA000BB0F8A94EAF78B2E719561957109677024 +:105DB000772701C086956A95EAF7882A8081882A24 +:105DC00080829F5F9830F9F62F5F3F4F31962830E1 +:105DD000310571F6E2E1F2E028AD39ADE217F307E3 +:105DE00009F0B1CF04E610E020E230E04AEF52E0E3 +:105DF00074CF45E00E94FB0C20912C0330912D03C1 +:105E0000281B390B30932D0320932C0345E0602F82 +:105E1000812F0E94FB0C20912A0330912B03281B19 +:105E2000390B30932B0320932A036CE273E087E352 +:105E300093E00E94DC0C6AE273E088E393E00E9446 +:105E4000DC0C10923A03109239030DCD0197909318 +:105E500034038093330307CD81608093360384E05D +:105E60000E94B31384E190E0F2CF809142038F5FF0 +:105E700080934203F8CC81E080FF0FC0E091520490 +:105E8000F0915304309749F082E08093240304801A +:105E9000F581E02D84E293E009951092260310929B +:105EA0002703109228031092290386E0E4E2F3E02E +:105EB000AEE1B3E001900D928A95E1F70E940A1CD1 +:105EC00090934103809340030E94C20E909143033C +:105ED000891731F00E94C20E809343030E94B816C6 +:105EE00080916C04843009F051CB83E08093E90009 +:105EF0008091E80082FF4ACB8091E80090E085FF26 +:105F00000BC00E94F40630E2E32EF12C8E010F5FED +:105F10001F4F8823E1F091E08091E8008B77809318 +:105F2000E800992309F432CBE981E150E33108F02C +:105F300071C0F0E0EC5EF84C0C9449358091F100B2 +:105F4000D8018D938D01B1E0EB1AF10821F3809116 +:105F5000E80085FDF3CF8091E8008B778093E8001F +:105F60000E94F406882399F3D6CF1A8289E08B83A6 +:105F700011C08A81823009F48FC1833091F1813060 +:105F800009F048C00E9462080E944F356B837C83F1 +:105F90008D839E8380916C04843009F0F7CA109140 +:105FA000E9001F709091EC00892F817090FD80E8CE +:105FB000182B82E08093E9008091E80080FF0DC0FB +:105FC00050E040E060E270E0CE0101960E942507BB +:105FD0008091E8008E778093E8001F701093E900AD +:105FE000D5CADE011396EFE4F3E081918D9323E0AF +:105FF000E935F207D1F7CECF8A81823059F46B812F +:106000007C818D819E810E944F3586E290E00E94C6 +:106010008935C0CF8FEF8983BDCF4C816B818A8159 +:106020000E9492149827892798279E838D83B2CF48 +:106030000D811E811027012710278A81EB803EE009 +:10604000E39E700111249CE8899FE00CF11C11244F +:106050008C8190E0880F991FE80EF91E612FC7010F +:1060600087960E948935602FC7018896D0CF0E94FD +:10607000161490CF8A818138C1F060F4803809F01D +:1060800089CF20E04B8160917904809178040E944F +:10609000521580CF8238E9F0833809F07BCF20E0B9 +:1060A00040917A046C818B81F2CF60E08B810E94F9 +:1060B00069168B81811103C00E94E50F6BCF80911F +:1060C000770481608093770460E086950E9469166A +:1060D00061CF8B8180937B045DCF8A81813899F079 +:1060E00030F4803809F056CF80917A0440CF82385E +:1060F00091F0833809F04ECF809178048B838091A2 +:1061000079048C8347CF8091770480FF02C0869505 +:106110002ECF80E02CCF80917B0429CF6091770433 +:10612000709178048091790490917A040E944015CE +:1061300031CF80E18A832ECF81E08A838DE117CF32 +:10614000CA80DB80DC24CD24DC248E010F5F1F4F4E +:10615000EC80E00EF12EF11CC6018D519D4F0E1505 +:106160001F0509F417CFADE1CA16A1E0DA0650F415 +:106170000E947535F8018483BFEFCB1ADB0A0F5FED +:106180001F4FEACFD80114961C92F6CF0A811B81CB +:10619000102701271027FE0131966F01EC80E00ED9 +:1061A000F12EF11CC8018D519D4FE016F10609F446 +:1061B000F1CE0D31F1E01F0728F4D60114966C9151 +:1061C0000E948935BFEFCB1ADB0A0F5F1F4FEACF62 +:1061D0000E940614DFCE85E0ADCFCA80DB80DC24D0 +:1061E000CD24DC248E010F5F1F4FEC80E00EF12EDA +:1061F000F11CC6018796E016F10609F4CBCEECEB54 +:10620000CE16E2E0DE0658F40E947535D8011496E9 +:106210008C93FFEFCF1ADF0A0F5F1F4FEACFF80111 +:106220001482F7CF0A811B811027012710279E01B6 +:106230002F5F3F4F6901EC80E00EF12EF11CC80189 +:106240008796E016F10609F4A5CE0C3B32E0130761 +:1062500028F4D60114966C910E948935BFEFCB1AB1 +:10626000DB0A0F5F1F4FEBCF09BD19BD09B400FE5C +:10627000FDCF8091D8008F7D8093D8008091E00081 +:1062800082608093E0008091E00081FDFCCF10925D +:106290005F040E94FA0F75CB86E290E00E9475358C +:1062A0001B821C821D828E8375CE1092B9008CE0F9 +:1062B0008093B80008959F92AF92BF92CF92DF92E1 +:1062C000EF92FF920F931F93CF93DF93B82EEB01C2 +:1062D0000E940A1C6C01EE24E394F12CC431D10518 +:1062E00060F025E0E22EF12CCF3FDC0731F0CE014B +:1062F00064E170E00E9415357B0184EAA82E94E8E1 +:10630000992E1092BC00A092BC000E940A1C8C0125 +:106310008091BC0087FF0DC08091B900887F8830D4 +:1063200039F18091B900887F803111F10FEF1FEFB3 +:1063300009C00E940A1C801B910B8E159F0540F31B +:106340000EEF1FEFCF3FDC07E1F2C6010E94FB1BFF +:106350008C179D07B0F2C801DF91CF911F910F916B +:10636000FF90EF90DF90CF90BF90AF909F900895F7 +:10637000B092BB009092BC000E940A1C8C018091DC +:10638000BC0087FF0AC08091B900887F883111F076 +:10639000803461F610E000E0DECF0E940A1C801B12 +:1063A000910B8E159F0558F3CBCF0F931F93CF936F +:1063B000DF93EB018093BB0084E88093BC000E94D4 +:1063C0000A1C8C018091BC0087FF11C02091B9008C +:1063D000287F81E090E0283211F490E080E09195F0 +:1063E00081959109DF91CF911F910F910895CF3F32 +:1063F000DC0741F30E940A1C801B910B8C179D0740 +:1064000008F38EEF9FEFEECF0F931F93CF93DF93A1 +:10641000EC0184EC8093BC000E940A1C8C018091EA +:10642000BC0087FF08C08091BB0090E0DF91CF9156 +:106430001F910F910895CF3FDC0789F30E940A1C3A +:10644000801B910B8C179D0750F38EEF9FEFEECFC3 +:106450000F931F93CF93DF93EC0184E88093BC00EC +:106460000E940A1C8C018091BC0087FF08C08091AB +:10647000BB0090E0DF91CF911F910F910895CF3F26 +:10648000DC0789F30E940A1C801B910B8C179D0767 +:1064900050F38EEF9FEFEECFCF92DF92EF92FF920D +:1064A0000F931F93CF93DF936B018A017901B90199 +:1064B0000E945B31E6010C0D1D1DC017D10761F470 +:1064C00024E92093BC00DF91CF911F910F91FF90A1 +:1064D000EF90DF90CF90089597FDF2CFB7018991AB +:1064E0000E94D531EACFCF92DF92EF92FF920F93C5 +:1064F0001F93CF93DF93C62F6A017901B8010E94E1 +:106500005B3197FD0CC0B8018C2F0E94D531E6019C +:10651000EC0CFD1CCE15DF0511F097FF0CC024E933 +:106520002093BC00DF91CF911F910F91FF90EF90CE +:10653000DF90CF900895B80189910E94D531EACFBC +:10654000CF92DF92EF92FF920F931F93CF93DF933F +:10655000F82EE62EEA016901B8010E945B3197FD31 +:1065600015C0B8018E2D0E94D53197FD0FC0B8011E +:106570008F2D81600E945B31F12CE12C21E0C21A49 +:10658000D108EC14FD0400F597FF11C024E9209315 +:10659000BC001816190614F490E080E0DF91CF914A +:1065A0001F910F91FF90EF90DF90CF900895C80159 +:1065B0000E94043297FD04C0FE01EE0DFF1D808392 +:1065C0002FEFE21AF20ADDCF97FDE0CFC8010E945B +:1065D000283297FDDBCFCC0DDD1D8883D7CF84E932 +:1065E0008093BC0008958EE14A9B02C08150E1F780 +:1065F0004A9BFECF08955A9880E28A95F1F75A9AFD +:106600000895FC013BE03A95F1F798E020E080E046 +:1066100031E040E14A95F1F7880F4A9B02C0816062 +:10662000232742E04A95F1F7000040E14A95F1F74F +:10663000915079F790E19A95F1F799B132E03A9556 +:10664000F1F7000040E14A95F1F792FB992790F9A4 +:1066500092272081920F90830895EF92FF920F93DB +:106660001F93CF93DF930F92CDB7DEB719828C01C2 +:106670007C01E60EF11C0E151F0561F481E0998185 +:10668000911180E00F90DF91CF911F910F91FF90BA +:10669000EF9008950E94F332CE0101960E940133DB +:1066A000F80181938F01E7CF529A5A9A0895529830 +:1066B0005A9AEA9AE9E6F0E080818F7C8083089517 +:1066C0006150770B91E001C0990F6A95EAF720E0DD +:1066D00031E0911108C0222391F05A9A80E28A9504 +:1066E000F1F75A980895492F482339F05A9A2327E9 +:1066F00040E24A95F1F79695ECCF5A98F9CF5A981F +:10670000EDCFFF920F931F93CF93DF93EC018C019A +:10671000060F111DC017D10731F4DF91CF911F91E2 +:106720000F91FF900895F9900E94FB3268E08F2D41 +:106730000E946033EFCF1F920F920FB60F92112479 +:10674000EF92FF920F931F932F933F934F935F937B +:106750006F937F938F939F93AF93BF93EF93FF9329 +:10676000CF93DF930F92CDB7DEB719820E94F33239 +:10677000CE0101960E940133A82FA695A695A69555 +:10678000282F229525709A2F9570290F922F93709C +:1067900026952695920F982797708981982B09F056 +:1067A00075C0A83008F072C080E18A95F1F75A9A56 +:1067B000529AB2E0BA95F1F700C05A98EA2EF12C3D +:1067C000EAE0AE9FD0011124AF5FBE4F1896ED9165 +:1067D000FC9119973097B1F06091F8017091F9012F +:1067E00016962D913C911797260F371F13968D9172 +:1067F0009C911497680F791F15964C9115971296D6 +:106800008C9109958AE08E9DF0018F9DF00D1124E9 +:10681000EF5FFE4F6581662351F02091F8013091C2 +:10682000F90186819781820F931F0E9481330E9414 +:10683000FB32F0E1FA95F1F75A9852985A9A80E1B2 +:106840008A95F1F78AE08E9D80018F9D100D1124AD +:106850000F5F1E4FD80112966C911297662371F14B +:106860002091F8013091F90113968D919C91820F3E +:10687000931F0E942D33D801ED91FC91882311F0D4 +:1068800088E001C082E080830E94F3320F90DF91A4 +:10689000CF91FF91EF91BF91AF919F918F917F9198 +:1068A0006F915F914F913F912F911F910F91FF90A9 +:1068B000EF900F900FBE0F901F901895ED91FC91E7 +:1068C000DFCF0F931F93CF93DF93EC0108970CF06A +:1068D000A9C08AE08C9FF0018D9FF00D1124EF5F1D +:1068E000FE4F80819181892B09F49CC0F894529AC3 +:1068F0005A9885E08A95F1F700008C2F869585706F +:106900009C2F9570890F982F937086958695890F87 +:106910008E0193E0000F111F9A95E1F7082B0E945A +:10692000FB3200C068E0802F0E946033A0E1AA958E +:10693000F1F752985A9A4A9B27C087E090E04A990B +:1069400025C08AE08C9F80018D9F100D11240F5F60 +:106950001E4FF80165816623A1F12091F801309165 +:10696000F90186819781820F931F0E942D33811137 +:1069700028C0529A5A9AD801ED91FC9182E0808306 +:10698000789482E090E016C000C0D5CF0197B9F4AA +:10699000529A5A9A8AE08C9FF0018D9FF00D112433 +:1069A000EF5FFE4F0190F081E02D81E080837894CD +:1069B00081E090E0DF91CF911F910F91089500C089 +:1069C000BECF0E94F332B0E2BA95F1F75A98529ACC +:1069D000E0E1EA95F1F78AE08C9FF0018D9FF00DE0 +:1069E0001124EF5FFE4F6281662351F02091F80180 +:1069F0003091F90183819481820F931F0E9481332A +:106A00000E94FB328AE08C9FF0018D9FF00D1124D3 +:106A1000EF5FFE4F0190F081E02D1082789490E0BE +:106A200080E0C8CF84E090E0C5CFAA1BBB1B51E13A +:106A300007C0AA1FBB1FA617B70710F0A61BB70BEE +:106A4000881F991F5A95A9F780959095BC01CD0193 +:106A50000895991B79E004C0991F961708F0961BBA +:106A6000881F7A95C9F78095089597FB072E16F42D +:106A7000009407D077FD09D00E94153507FC05D09A +:106A80003EF4909581959F4F0895709561957F4F45 +:106A90000895EE0FFF1F0590F491E02D09946927EA +:106AA000962769277827872778270895FB01DC0137 +:106AB00002C005900D9241505040D8F70895FB0157 +:106AC000DC0104C08D910190801921F441505040A7 +:106AD000C8F7881B990B0895FB01DC0102C00190E7 +:106AE0000D9241505040D8F70895F999FECF92BDCC +:106AF00081BDF89A992780B50895A6E1B0E044E0F9 +:106B000050E00C94AF35A8E1B0E042E050E00C94C6 +:106B1000AF35262FF999FECF92BD81BDF89A019726 +:106B200000B4021639F01FBA20BD0FB6F894FA9AD5 +:106B3000F99A0FBE08950396272F0E948A350E9466 +:106B40008935252F0E948A35242F0C948A35019689 +:106B5000272F0E948A350C948935DC01CB01FC017A +:106B6000F999FECF06C0F2BDE1BDF89A319600B4A6 +:106B70000D9241505040B8F708950E94FF3508F437 +:106B800081E00895E89409C097FB3EF490958095C4 +:106B9000709561957F4F8F4F9F4F9923A9F0F92FE3 +:106BA00096E9BB279395F695879577956795B79561 +:106BB000F111F8CFFAF4BB0F11F460FF1BC06F5F47 +:106BC0007F4F8F4F9F4F16C0882311F096E911C059 +:106BD000772321F09EE8872F762F05C0662371F07A +:106BE00096E8862F70E060E02AF09A95660F771F8E +:106BF000881FDAF7880F9695879597F90895990F6A +:106C00000008550FAA0BE0E8FEEF16161706E80776 +:106C1000F907C0F012161306E407F50798F0621B97 +:106C2000730B840B950B39F40A2661F0232B242B6C +:106C3000252B21F408950A2609F4A140A6958FEF8B +:106C4000811D811D08950E9436360C94A7360E943E +:106C5000993638F00E94A03620F0952311F00C945C +:106C600090360C94963611240C94DB360E94B8367C +:106C700070F3959FC1F3950F50E0551F629FF0018F +:106C8000729FBB27F00DB11D639FAA27F00DB11DA8 +:106C9000AA1F649F6627B00DA11D661F829F222731 +:106CA000B00DA11D621F739FB00DA11D621F839FB8 +:106CB000A00D611D221F749F3327A00D611D231F8E +:106CC000849F600D211D822F762F6A2F11249F57DC +:106CD00050409AF0F1F088234AF0EE0FFF1FBB1FDF +:106CE000661F771F881F91505040A9F79E3F51059E +:106CF00080F00C9490360C94DB365F3FE4F3983EC2 +:106D0000D4F3869577956795B795F795E7959F5F47 +:106D1000C1F7FE2B880F911D9695879597F90895D9 +:106D200097F99F6780E870E060E008959FEF80EC3E +:106D3000089500240A9416161706180609060895E1 +:106D400000240A9412161306140605060895092E47 +:106D50000394000C11F4882352F0BB0F40F4BF2BB6 +:106D600011F460FF04C06F5F7F4F8F4F9F4F0895F6 +:106D700057FD9058440F551F59F05F3F71F04795EC +:106D8000880F97FB991F61F09F3F79F087950895D1 +:106D9000121613061406551FF2CF4695F1DF08C0F0 +:106DA000161617061806991FF1CF8695710561050D +:106DB00008940895E894BB2766277727CB0197F9B5 +:106DC0000895F894FFCFEA101211651112116511A0 +:106DD00045117D1165117A128712121512151B15B6 +:106DE0001B151D151B151B151B151215121522152C +:106DF0001B151B152215671CDD1CE01CF41CF71C61 +:106E00000A1D131D371D7D1DAF1DC31D491D6C1DA2 +:106E1000052105215E215E2190213821382138216C +:106E2000AA211B222B222B22B52FB92FFC2F0D308C +:106E3000183037303A306D308E300A300A309930A1 +:0E6E40009C30A030C630E830EB30ED3012311F +:106E4E0001380200000001000000003802000000BE +:106E5E0005010000003802000000010600000038A5 +:106E6E0002000000010700000038020408000000C4 +:106E7E000000003802090C0000000000003802017A +:106E8E001500000000000036323331F7F6676697C2 +:106E9E00C6343500000000000180005F082E0E0D84 +:106EAE000E090E050EF4F5010021007F22000300ED +:106EBE004A004A4A01F6F731333236674C4159459A +:106ECE00520042617365200047616D65200052617A +:106EDE00697365004C6F776572004C4F434B0043EE +:106EEE00617073004E756D005363726C002020202C +:106EFE00202000534F4C415200544D5053540081AA +:106F0E008283E200E900EA00B500B600B700CD00CA +:106F1E008301CC008A0192019401210223022402F2 +:106F2E002502260227022A02B300B4006F00700069 +:106F3E000603060806010606AF0200FF0100010067 +:106F4E0000FFFF0000010001FF00000810181810DC +:106F5E0008000001020202020202020202024022A4 +:0E6F6E007B99017701FC00000C190C390C0016 :00000001FF From c69d5e94f08c4e2c04619d60dc08a1326dfaa1e6 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Sat, 27 Nov 2021 09:40:56 +0800 Subject: [PATCH 079/155] Update rules.mk and MCU_LDSCRIPT specified as STM32L432xB. --- keyboards/keychron/q2/rev_0110/rules.mk | 2 +- keyboards/keychron/q2/rev_0111/rules.mk | 2 +- keyboards/keychron/q2/rev_0112/rules.mk | 2 +- keyboards/keychron/q2/rev_0113/rules.mk | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/keychron/q2/rev_0110/rules.mk b/keyboards/keychron/q2/rev_0110/rules.mk index 65fea2d973d2..a894b94e63ea 100644 --- a/keyboards/keychron/q2/rev_0110/rules.mk +++ b/keyboards/keychron/q2/rev_0110/rules.mk @@ -4,7 +4,7 @@ MCU = cortex-m4 ARMV = 7 MCU_FAMILY = STM32 MCU_SERIES = STM32L4xx -MCU_LDSCRIPT = STM32L432xC +MCU_LDSCRIPT = STM32L432xB MCU_STARTUP = stm32l4xx BOARD = GENERIC_STM32_L433XC PLATFORM_NAME = platform_l432 diff --git a/keyboards/keychron/q2/rev_0111/rules.mk b/keyboards/keychron/q2/rev_0111/rules.mk index 0e54373d5db6..5e6a2fddb021 100644 --- a/keyboards/keychron/q2/rev_0111/rules.mk +++ b/keyboards/keychron/q2/rev_0111/rules.mk @@ -4,7 +4,7 @@ MCU = cortex-m4 ARMV = 7 MCU_FAMILY = STM32 MCU_SERIES = STM32L4xx -MCU_LDSCRIPT = STM32L432xC +MCU_LDSCRIPT = STM32L432xB MCU_STARTUP = stm32l4xx BOARD = GENERIC_STM32_L433XC PLATFORM_NAME = platform_l432 diff --git a/keyboards/keychron/q2/rev_0112/rules.mk b/keyboards/keychron/q2/rev_0112/rules.mk index 65fea2d973d2..a894b94e63ea 100644 --- a/keyboards/keychron/q2/rev_0112/rules.mk +++ b/keyboards/keychron/q2/rev_0112/rules.mk @@ -4,7 +4,7 @@ MCU = cortex-m4 ARMV = 7 MCU_FAMILY = STM32 MCU_SERIES = STM32L4xx -MCU_LDSCRIPT = STM32L432xC +MCU_LDSCRIPT = STM32L432xB MCU_STARTUP = stm32l4xx BOARD = GENERIC_STM32_L433XC PLATFORM_NAME = platform_l432 diff --git a/keyboards/keychron/q2/rev_0113/rules.mk b/keyboards/keychron/q2/rev_0113/rules.mk index 0e54373d5db6..5e6a2fddb021 100644 --- a/keyboards/keychron/q2/rev_0113/rules.mk +++ b/keyboards/keychron/q2/rev_0113/rules.mk @@ -4,7 +4,7 @@ MCU = cortex-m4 ARMV = 7 MCU_FAMILY = STM32 MCU_SERIES = STM32L4xx -MCU_LDSCRIPT = STM32L432xC +MCU_LDSCRIPT = STM32L432xB MCU_STARTUP = stm32l4xx BOARD = GENERIC_STM32_L433XC PLATFORM_NAME = platform_l432 From 61ce7a21b52e6be32bf7923fe14a58dda050509e Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Fri, 26 Nov 2021 23:11:17 -0500 Subject: [PATCH 080/155] Add gaming layer haptic feedback --- .../solartempest/sofle/keymaps/via/keymap.c | 20 +- keyboards/solartempest/sofle/readme.md | 1 + .../sofle/solartempest_sofle_via.hex | 1736 +++++++++-------- 3 files changed, 891 insertions(+), 866 deletions(-) diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index 1dee3a263e65..0bc1726b0b61 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -332,7 +332,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { run_trackball_cleanup(); break; } - # if !defined(MOUSEKEY_ENABLE) //Allow for using mouse buttons in the keymap when mouse keys is not enabled. + #if !defined(MOUSEKEY_ENABLE) //Allow for using mouse buttons in the keymap when mouse keys is not enabled. case KC_MS_BTN1: mouse_button_one = record->event.pressed; trackball_button_one = record->event.pressed; @@ -345,7 +345,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case KC_MS_BTN3: trackball_register_button(record->event.pressed, MOUSE_BTN3); break; - # endif + #endif #endif #ifdef KEYBOARD_PET // KEYBOARD PET STATUS @@ -366,6 +366,22 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return true; #endif + + #ifdef HAPTIC_ENABLE //Set different patterns for keys on certain layers. In this case it is for gaming feedback. + case KC_G: + if (record->event.pressed && (get_highest_layer(layer_state)==1)) { + DRV_pulse(50); //buzz_40 + } + case KC_R: + if (record->event.pressed && (get_highest_layer(layer_state)==1)) { + DRV_pulse(52); //pulsing_strong + } + case KC_F: + if (record->event.pressed && (get_highest_layer(layer_state)==1)) { + DRV_pulse(49); //buzz_60 + } + #endif + } return true; } diff --git a/keyboards/solartempest/sofle/readme.md b/keyboards/solartempest/sofle/readme.md index 6513a217e0e3..b76181de980a 100644 --- a/keyboards/solartempest/sofle/readme.md +++ b/keyboards/solartempest/sofle/readme.md @@ -48,6 +48,7 @@ Build guide and log is available here: [SofleKeyboard build log/guide](https://j - Supports Pimoroni Haptic Bzzz installed on master side. - Different vibrations when layers are activated. - Provides tactile feedback when trackball is clicked or mouse keys are used. +- Tactile feedback for specific keys on gaming layer. ### Tap and Other Features: - Push left-shift + backspace to delete whole words. Right-shift + backspace to delete whole words in the opposite direction. diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index adec533353db..315fa5275ec2 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,7 +1,7 @@ -:100000000C9449060C9490060C9490060C949B3327 +:100000000C9449060C9490060C9490060C94D733EB :100010000C9490060C9490060C9490060C94900608 :100020000C9490060C9490060C94001B0C94BC1A33 -:100030000C94FB270C9490060C9490060C9490065C +:100030000C9437280C9490060C9490060C9490061F :100040000C9490060C9490060C9490060C949006D8 :100050000C9490060C94D71B0C9490060C9490066C :100060000C9490060C9490060C9490060C949006B8 @@ -205,9 +205,9 @@ :100CC000800610928106109282061092830614BE4E :100CD00084B7877F84BF0FB6F894A8958091600091 :100CE000886180936000109260000FBEE0E0F8E33E -:100CF000099512E0A0E0B1E0EEE4FEE602C0059046 +:100CF000099512E0A0E0B1E0E6ECFEE602C0059046 :100D00000D92AE32B107D9F726E0AEE2B2E001C0F3 -:100D10001D92A038B207E1F70E9422280C94E13618 +:100D10001D92A038B207E1F70E945E280C941D379F :100D20000C940000CF93DF9340917E0650917F0694 :100D30004E5754409A01205A3F4F21303240C0F064 :100D400020E032E0241B350B60917C0470917D041F @@ -296,7 +296,7 @@ :101270004E2F4983E8835A83DF91CF911F910F91BD :10128000FF90EF90DF90BF90AF900895E62EF12C85 :101290004491D42EE42FF0E026E0829FC001112477 -:1012A0002FEF30E0B9010E941535802F90E0880FB4 +:1012A0002FEF30E0B9010E945135802F90E0880F78 :1012B000991F55E5569FD001579FB00D11248A1BE9 :1012C0009B0B982F990F890F5901AE18BF08AE9E3E :1012D000D001AF9EB00DBE9EB00D11245B2F189FA4 @@ -420,18 +420,18 @@ :101A3000222319F09195819591090895681B20E062 :101A4000DFCF0F931F93CF93DF9300D000D0CDB79C :101A5000DEB789836A834B831C8204E610E024E0AE -:101A600030E0AE014F5F5F4F60E084E10E9473326F +:101A600030E0AE014F5F5F4F60E084E10E94AF3233 :101A70000F900F900F900F90DF91CF911F910F91CA :101A8000089580913203882329F047E669E98BE2C3 :101A90000C94210D6091590170915A0190E080E001 -:101AA0000E94C23520E030E040E05CE30E94233633 -:101AB00020E030E040E85FE30E94BD35882321F05C +:101AA0000E94FE3520E030E040E05CE30E945F36BB +:101AB00020E030E040E85FE30E94F935882321F020 :101AC00047EC6BE180E0E4CF41E265EA89EDE0CFED :101AD000CF92DF92EF92FF920F931F93CF93DF93FA -:101AE0006C017B0164E670E088E70E945B31EC01E9 +:101AE0006C017B0164E670E088E70E949731EC01AD :101AF00097FD12C010E000E0F601E00FF11F8491A5 -:101B000064E670E00E94D531EC01892B29F40F5F67 -:101B10001F4F0E151F0581F70E94EF32CE01DF9196 +:101B000064E670E00E941132EC01892B29F40F5F2A +:101B10001F4F0E151F0581F70E942B33CE01DF9159 :101B2000CF911F910F91FF90EF90DF90CF9008958C :101B300080914E0490914F04911103C091E0892748 :101B40000895882369F062E070E08CEE9BE00E94CB @@ -497,7 +497,7 @@ :101F00005C0393010C2C01C0220F0A94EAF7822390 :101F100009F43FC0F601EE0FFF1FE80DF91DE59033 :101F2000F490E114F10409F479CF45E050E0B701F1 -:101F3000CE0101960E94563509810F3F51F18A81E9 +:101F3000CE0101960E94923509810F3F51F18A81AD :101F4000800F9927991F8B34910514F08AE490E053 :101F50005C01AA0CBB1C8A0D9B1DDC01A15ABC4F65 :101F60005D01049D80011124015A1C4F0A151B05B7 @@ -516,7 +516,7 @@ :10203000B9F780916F04833009F471C0B8F481302E :1020400009F448C0823009F4B4C08091E80083FFED :102050003CC180916E0490916F049A3008F035C1B4 -:10206000E92FF0E0ED51F94C0C9449358A3009F430 +:10206000E92FF0E0E15EF84C0C9485358A3009F4F4 :102070008FC08B3009F470C0893039F780916E04BD :10208000813219F78091720490917304009711F0D6 :102090000297D9F68091E800877F8093E8008091CD @@ -601,22 +601,22 @@ :1025800080936B041092E9008091E800877F80932C :10259000E8000E944F0799CE1F93CF93DF93162F29 :1025A000C0917E06D0917F068A30D1F420914304F9 -:1025B000CE018E579440622F70E00E941535281B83 -:1025C000822F66E00E942935C82FC15020F4DF9188 +:1025B000CE018E579440622F70E00E945135281B47 +:1025C000822F66E00E946535C82FC15020F4DF914C :1025D000CF911F91089560E080E20E94CC12F5CF68 :1025E0008D30E9F4CE57D44020914304622F70E03F -:1025F000CE010E941535281B822F9E01280F311D08 +:1025F000CE010E945135281B822F9E01280F311DCC :102600002115324018F080E0D0E0C0E0C80FD11DA5 :10261000C258DB4FD0937F06C0937E06D8CF96E09A :10262000FE01A4E4B4E001900D929A95E1F7803E9A :1026300090F186E0FE0111928A95E9F7C0917E063D :10264000D0917F06111133C046E050E0BE0184E412 -:1026500094E00E945F359E012E573440892B91F5FE +:1026500094E00E949B359E012E573440892B91F5C2 :102660002A5F3F4F40914304642F70E0C9010E94EC -:102670001535481B463010F4240F311D211572E02A +:102670005135481B463010F4240F311D211572E0EE :10268000370710F030E020E022583B4F30937F06B0 :1026900020937E069CCFF6E08F9FB00111246655F3 -:1026A000794F46E050E0CE010E945635C7CF9E01DB +:1026A000794F46E050E0CE010E949235C7CF9E019F :1026B0002A5F3F4FFE012E173F0731F28081809540 :1026C0008193F9CFC90145E0969587954A95E1F741 :1026D00041E050E0BA0102C0660F771F8A95E2F729 @@ -628,7 +628,7 @@ :102730001109C017D10730F0DF91CF911F910F9190 :10274000FF9008956F2D89910E94CC12F2CFE1E4A1 :10275000F4E08083618324E630E042E050E0BF0192 -:1027600084EB0C944C32CF93C82F60E08CE00E9435 +:1027600084EB0C948832CF93C82F60E08CE00E94F9 :10277000A7136C2F84E00E94A71361E08CE0CF9137 :102780000C94A7131F93CF93DF93CDB7DEB7629757 :102790000FB6F894DEBF0FBECDBF96E0E4E2F3E0E3 @@ -639,27 +639,27 @@ :1027E00086E0FE013196A4E2B3E001900D928A9555 :1027F000E1F762960FB6F894DEBF0FBECDBFDF9152 :10280000CF911F91089560951623E0CFCF93DF936A -:10281000C3EED2E060E0CE010E9489352196C11559 +:10281000C3EED2E060E0CE010E94C5352196C1151D :1028200084E0D807B9F7DF91CF9108956F927F9236 :102830008F929F92AF92BF92CF92DF92EF92FF92D0 :102840000F931F93CF93DF938AEAC82E86E0D82E8A :1028500091ECE92EF12CE701CC58D10936011BC0CF -:10286000F50185909490692DC8010E948935682DE5 -:10287000C80101960E94893582E0A80EB11C0E5F46 +:10286000F50185909490692DC8010E94C535682DA9 +:10287000C80101960E94C53582E0A80EB11C0E5F0A :102880001F4FC017D10761F78EE0680E711C2E969E :10289000CE15DF0529F08E010E5011095301E0CF4E :1028A0007E018CE8E80EF11C8CE8C80ED11C8DE787 :1028B000E81683E0F80679F6DF91CF911F910F912A :1028C000FF90EF90DF90CF90BF90AF909F908F9050 :1028D0007F906F900895CF93C82F6FEF811161E2C1 -:1028E00083E290E00E9489356FEFC11161E184E2DB -:1028F00090E00E9489356FEFC11166E285E290E0B9 -:10290000CF910C94893580E00E946B1460E086E2E0 -:1029100090E00E9489350E9416140E94061481E0FE +:1028E00083E290E00E94C5356FEFC11161E184E29F +:1028F00090E00E94C5356FEFC11166E285E290E07D +:10290000CF910C94C53580E00E946B1460E086E2A4 +:1029100090E00E94C5350E9416140E94061481E0C2 :102920000C946B140F931F93CF93DF93C42FD0E0BD :10293000CC0FDD1F2EE0629FC00DD11D11243CE89D -:10294000839FC00DD11D1124CE0187960E9475353D -:10295000082F10E0102F0027CE0188960E947535B1 +:10294000839FC00DD11D1124CE0187960E94B13501 +:10295000082F10E0102F0027CE0188960E94B13575 :102960009801282BC901DF91CF911F910F910895F4 :10297000462F853038F47A3028F4673018F4672F02 :102980000C94921490E080E00895CF92DF92FF9231 @@ -671,16 +671,16 @@ :1029E000180A019761F3EECFCF93DF93EC010E94B9 :1029F000C514BE010E94B814DF91CF910C94180A3F :102A0000FC01808191810E94F414292F2F709295EE -:102A10009F7092509E3078F4E92FF0E0E351F94C2A -:102A20000C944935803F19F020F4883E20F481E071 +:102A10009F7092509E3078F4E92FF0E0E75DF84C1B +:102A20000C948535803F19F020F4883E20F481E035 :102A30000895843FE1F380E00895883EC0F3813F2C :102A4000D1F7F5CF822F869586958695089583E2F6 -:102A500090E00E947535813289F484E290E00E9412 -:102A60007535813159F485E290E00E94753591E029 +:102A500090E00E94B135813289F484E290E00E94D6 +:102A6000B135813159F485E290E00E94B13591E0B1 :102A7000863209F090E0892F8170089580E0FCCFC4 :102A8000CF92DF92EF92FF926B017C010E940E09C0 :102A9000B701A60188E090E0FF90EF90DF90CF9023 -:102AA0000C949B35AF92BF92CF92DF92EF92FF9240 +:102AA0000C94D735AF92BF92CF92DF92EF92FF9204 :102AB0000F931F93CF93DF9300D00F92CDB7DEB764 :102AC000082FF62E142FE22E8091770480FF4FC03E :102AD000E82FE695AE2FB0E0AE5EBD4F9C9190938F @@ -699,7 +699,7 @@ :102BA000D82EE695F0E0E55AF94FA590B490C12CE7 :102BB000BB2460917301C61608F0B4CF2C2D30E011 :102BC000A29EC001A39E900DB29E900D112470E0B4 -:102BD0000E941535802FD11016C0860F40917101CB +:102BD0000E945135802FD11016C0860F409171018F :102BE000420F532F511D9A01220F331F240F351FFF :102BF000215A3C4F412F113A08F040EA6F2D0E94B4 :102C00002409C394D6CF861BE9CFE7E7F4E04381DC @@ -762,7 +762,7 @@ :102F90008FEF828380EA83831482A9E5B3E01296DF :102FA0008C911297836012968C93608171818281DB :102FB00093810C944015AB01BC0188E190E00C9426 -:102FC0009B35CF93C82FEFE3F4E0982F990F990F1B +:102FC000D735CF93C82FEFE3F4E0982F990F990FDF :102FD000990F80818770892B8083E0E4F4E09C2F37 :102FE0009295969597708081887F892B80836091D8 :102FF0003D0470913E0480913F04909140040E94F2 @@ -773,19 +773,19 @@ :103040003E0480913F04909140040C94DB17EDE323 :10305000F4E080818160808360913D0470913E0442 :1030600080913F04909140040C94DB1769EE7EEF51 -:1030700090E080E00E94A73560E082E090E00E944E -:10308000893560E083E090E00E94893510929202D9 -:1030900060E084E090E00E94893560E082E290E0A8 -:1030A0000E94893560E085E090E00E94893560E00B -:1030B00086E090E00E9489356FEF87E090E00E9403 -:1030C000893540E050E0BA0188E090E00E949B35ED -:1030D00060E08DE090E00E94893540E050E0BA0168 -:1030E00088E190E00E949B3560E087E190E00E94DB -:1030F000893540E050E0BA018CE190E00E949B35B8 -:1031000070E060E080E290E00E94A7350E9406181F +:1030700090E080E00E94E33560E082E090E00E9412 +:10308000C53560E083E090E00E94C5351092920261 +:1030900060E084E090E00E94C53560E082E290E06C +:1030A0000E94C53560E085E090E00E94C53560E093 +:1030B00086E090E00E94C5356FEF87E090E00E94C7 +:1030C000C53540E050E0BA0188E090E00E94D73575 +:1030D00060E08DE090E00E94C53540E050E0BA012C +:1030E00088E190E00E94D73560E087E190E00E949F +:1030F000C53540E050E0BA018CE190E00E94D73540 +:1031000070E060E080E290E00E94E3350E940618E3 :1031100080E00E946B140E94831440E050E0BA01EA -:103120008FE090E00E949B3540E050E0BA0183E1DF -:1031300090E00C949B350F931F93CF93DF9300D0B7 +:103120008FE090E00E94D73540E050E0BA0183E1A3 +:1031300090E00C94D7350F931F93CF93DF9300D07B :1031400000D0CDB7DEB74091C5025091C602609164 :10315000C7027091C8022FB7F894809157049091DC :103160005804A0915904B0915A042FBF841B950BA9 @@ -793,8 +793,8 @@ :103180009F0E882379F10E9462086E5F7F4F8F4FF8 :103190009F4F69837A838B839C8380912C019091CC :1031A0002D0181559D4F40912B0150E04530510537 -:1031B00010F044E050E0BE016F5F7F4F0E946C351D -:1031C00084E090E00E946134892BD9F40E94620867 +:1031B00010F044E050E0BE016F5F7F4F0E94A835E1 +:1031C00084E090E00E949D34892BD9F40E9462082B :1031D0006093C5027093C6028093C7029093C802A1 :1031E00081E010C00E9462080091D2021091D302C7 :1031F0002091D4023091D502600F711F821F931F5E @@ -807,7 +807,7 @@ :1032600010F4442311F1E82E082E000CFF089AE018 :103270008902F0011124EF5FFE4F83819481815513 :103280009D4F428150E00417150708F4A801B901C9 -:103290000E946C35C7010E946134892BA1F40E9401 +:103290000E94A835C7010E949D34892BA1F40E9489 :1032A0006208688379838A839B8381E0DF91CF9171 :1032B0001F910F91FF90EF90DF90CF90BF90AF9054 :1032C0009F908F90089580E0F1CF0F931F93CF933D @@ -825,25 +825,25 @@ :10338000DF91CF911F910F9108956F927F928F924D :103390009F92AF92BF92CF92DF92EF92FF920F93E4 :1033A0001F93CF93DF930F92CDB7DEB7862E5A01CE -:1033B0006901682E880F7708C3010E946134892B48 +:1033B0006901682E880F7708C3010E949D34892B0C :1033C00009F088C08AE0869DF001879DF00D1124E8 :1033D000EF5FFE4F458150E04115510511F041E08E :1033E00050E08AE0869DF001879DF00D1124EF5F8B :1033F000FE4F6681778161557D4FCE0101960E9417 -:103400006C35F50140815181628173812FB7F89449 +:10340000A835F50140815181628173812FB7F8940D :103410008091570490915804A0915904B0915A0496 :103420002FBF841B950BA60BB70B84369105A10506 :10343000B10540F4B701C8010E94F30899818917CA -:1034400009F44FC0082C000C9908C4010E94613493 +:1034400009F44FC0082C000C9908C4010E949D3457 :10345000892B91F0B12C8B2D0F90DF91CF911F9183 :103460000F91FF90EF90DF90CF90BF90AF909F9023 :103470008F907F906F9008958AE0889DF001899DDC :10348000F00D1124EF5FFE4F458150E0E416F50684 :1034900008F4A7018AE0889DF001899DF00D1124B0 :1034A000EF5FFE4F6681778161557D4FC6010E94B7 -:1034B0006C35B701C8010E94F30899818913CACFFE +:1034B000A835B701C8010E94F30899818913CACFC2 :1034C0000E946208F5016083718382839383BB2429 -:1034D000B394C1CFB12CA701B801C6010E946C35CD +:1034D000B394C1CFB12CA701B801C6010E94A83591 :1034E000BACFBB24B394F7CFCF92DF92EF92FF9283 :1034F0000F931F93CF93DF9300D000D00F92CDB7DF :10350000DEB76B0185E0E82EF12C00EB12E09E01A6 @@ -852,7 +852,7 @@ :103530000D929A95E1F795E0E2EAF2E0D60101906A :103540000D929A95E1F70F900F900F900F900F90BA :10355000DF91CF911F910F91FF90EF90DF90CF906F -:10356000089590E080E00E948335893E9E4F11F4DB +:10356000089590E080E00E94BF35893E9E4F11F49F :103570000C94271580E008951F920F920FB60F92BA :1035800011242F933F934F935F936F937F938F9368 :103590009F93AF93BF93CF93DF93EF93FF93D0911C @@ -900,24 +900,24 @@ :103830007F928F929F92AF92BF92CF92DF92EF9240 :10384000FF920F931F93CF93DF9300D000D00F927E :10385000CDB7DEB77C01FC0183819481892B31F0E7 -:103860008081918189238F3F09F08CC60F900F9042 +:103860008081918189238F3F09F0C8C60F900F9006 :103870000F900F900F90DF91CF911F910F91FF90BC :10388000EF90DF90CF90BF90AF909F908F907F9000 :103890006F905F9008950E94C514182F682F89813A :1038A0009A810E94CB0B69817A81812F0E94B81482 :1038B0008C01F7018281882361F0F801E65EFC4506 -:1038C000ED30F10530F4E550F94C0C9449350E9487 +:1038C000ED30F10530F4E95CF84C0C9485350E943C :1038D0002718D0903D04D0FE1CC08D2D8695837096 :1038E000F7019281992309F460C1823090F4B70105 :1038F000C8010E94B108882361F0D694D694D6946A :1039000080913E0483708295880F807E8D290E946D -:10391000B313F7018281882309F429C6C8018251B3 -:103920009F45409708F0ECC58FEF93E00E947535F6 +:10391000B313F7018281882309F465C6C801825177 +:103920009F45409708F021C68FEF93E00E94B13584 :10393000025193EEA92E92E0B92E811197CF011179 :1039400038C11C821B82662463948AE0582E85014C -:103950000F5F1F4FC5010E94753589831A82882326 +:103950000F5F1F4FC5010E94B13589831A828823EA :1039600009F484CF9FEF980F933008F031C18A8318 -:10397000698232E0A30EB11CC8010E9475358B83A9 +:10397000698232E0A30EB11CC8010E94B1358B836D :10398000882309F473CF8E010F5F1F4FF801208148 :103990002223E9F2213009F055C1918182819130D1 :1039A00009F018C10E5F1F4F6AE070E0893311F40F @@ -954,7 +954,7 @@ :103B90009695809140048295880F807E892B843190 :103BA00010F08A50EBCF84E1E9CF882309F4B1CE3D :103BB0009ECEA114F4E0BF0609F458CEC5010E94C0 -:103BC0007535811101C001502FEFA21AB20AB7CE8C +:103BC000B135811101C001502FEFA21AB20AB7CE50 :103BD0005801D9CE923039F40E5F1F4F0E94570C16 :103BE0000F5F1F4FD3CE933029F40E5F1F4F0E94FB :103BF0001E0CF6CF943019F00F5F1F4FF1CF0E5F00 @@ -977,809 +977,817 @@ :103D000003C081E00E948A170F900F900F900F90D0 :103D10000F90DF91CF911F910F91FF90EF90DF9067 :103D2000CF90BF90AF909F908F907F906F905F905B -:103D30000C947F1782E0E2CF043F110509F455C1CE -:103D400008F057C1053E110509F4DDC0F701928165 -:103D500091113CC280915F0482720A3CFCE51F070E -:103D600009F414C208F06AC1053C3CE5130709F4E4 -:103D7000F9C108F04EC1033C5CE5150709F4D3C155 -:103D800008F0EBC1023C1C4509F47DC1F70100813C -:103D90001181992309F434C2C8010E94C514D82E98 +:103D30000C947F1782E0E2CF013E110509F404C123 +:103D400008F04DC0003E110509F469C1F7019281E8 +:103D5000911171C280915F0482720A3CFCE51F07D9 +:103D600009F449C208F09FC1053C3CE5130709F47A +:103D70002EC208F083C1033C5CE5150709F408C2B4 +:103D800008F020C2023C1C4509F4B2C1F7010081D1 +:103D90001181992309F469C2C8010E94C514D82E63 :103DA000682FC8010E94CB0BB8018D2D0E94B8145A :103DB0000E94180A182FB82EF70122814581342F4E :103DC00032953F70892F82958F70C82ED12C8C3000 -:103DD00008F04EC2F601E85FF84C0C944935033800 -:103DE000FFE51F0709F481C018F501383FE5130707 -:103DF00009F44AC008F065C000385FE5150709F00E -:103E0000A5CF882309F459C080919C02811106C076 -:103E100081E080939C0282EE0E94570C0E940A1C53 -:103E200090939B0280939A028BE20E94570C8ECF54 -:103E300005389FE5190709F4BEC008F476C00638B6 -:103E4000FFE51F0709F082CF882309F4CEC06091F7 -:103E5000590170915A0190E080E00E94C23520E043 -:103E600030E040E05CE30E94233620E030E040E8B0 -:103E70005FE30E94BD358111B5C080EE90E0909364 -:103E80005A0180935901A1C08823A1F080919C021E -:103E9000811106C081E080939C0282EE0E94570C43 -:103EA0000E940A1C90939B0280939A0281EE0E94CA -:103EB000570CBACF81EE0E941E0C8BE20E941E0CA2 -:103EC00045CF882309F442CF81EE0E94570C83EE40 -:103ED0000E94570C8FE40E94570C8FE40E941E0C26 -:103EE00083EE0E941E0C81EEE9CF882309F42ECFC9 -:103EF00081EE0E94570C83EE0E94570C80E50E94D1 -:103F0000570C80E5EBCF80933C0210933B0200936B -:103F10003A02882321F081E08093EE0217CF1092BD -:103F2000EE0214CF80933902F0CF882379F180918B -:103F30003902882349F080913A020E941E0C80EEDB -:103F40000E94570C8AE20CC080913C028823D1F376 -:103F500080913A020E941E0C80EE0E94570C8CE465 -:103F60000F900F900F900F900F90DF91CF911F91B6 -:103F70000F91FF90EF90DF90CF90BF90AF909F9008 -:103F80008F907F906F905F900C94570C8AE20E9404 -:103F90001E0C8CE40E941E0C80EE0E941E0C809170 -:103FA0003902811105C080913C02882309F45ECC5E -:103FB00080913A02D5CF8823C1F0809132038823C3 -:103FC00039F010923203109200010E94410DBECED2 -:103FD000809100018111F7CF81E0809332038093BB -:103FE0000001F3CF80E890E04ACF61E00E94C21365 -:103FF000ADCE62E0FBCF64E0F9CF882321F081E011 -:104000008093ED02A3CE1092ED02A0CE1092F002AA -:104010009DCE073C2CE5120709F4AEC008F4A7C0FA -:10402000083C4CE5140709F4ACC0093C1C4509F0F8 -:10403000ADCE45E056E161E176E179C0043DECE5C5 -:104040001E07A8F40E3CFCE51F0708F00FCC0C3C43 -:104050002CE5120709F49FC047E456E168E576E1D4 -:104060000D3C1C4508F463C061E081E046C0053D9D -:104070004CE5140709F4FACB08F492C00D351D4540 -:1040800009F4F4CB83CE8091770480FF31C08E7F1A -:10409000809377046091770470917804809179041B -:1040A00090917A040E94401580915B038160809317 -:1040B0005B039FEFE0E7F2E09150E040F040E1F772 -:1040C00000C000000F900F900F900F900F90DF91A5 -:1040D000CF911F910F91FF90EF90DF90CF90BF9005 -:1040E000AF909F908F907F906F905F900C94E70EB1 -:1040F00081608093770461E086950F900F900F9018 -:104100000F900F90DF91CF911F910F91FF90EF9043 -:10411000DF90CF90BF90AF909F908F907F906F90E7 -:104120005F900C94691641EA57E16AEA77E10F90D3 +:103DD00008F083C2F601EC5BF84C0C948535043E88 +:103DE000110509F41CC1053E110509F0AFCF809300 +:103DF0003C0210933B0200933A02882309F4A1C0CD +:103E000081E08093EE02A2CF0238FFE51F0709F49C +:103E100076C038F5063F110509F4FFC008F4FBC071 +:103E200000383FE5130709F44DC001384FE514078A +:103E300009F08CCF882309F45BC080919C0281112A +:103E400006C081E080939C0282EE0E94570C0E9483 +:103E50000A1C90939B0280939A0281EE0E94570C59 +:103E600043C004385FE5150709F471C008F45BC06E +:103E70000538EFE51E0709F4B0C00638FFE51F0757 +:103E800009F064CF882309F4C2C060915901709190 +:103E90005A0190E080E00E94FE3520E030E040E0F2 +:103EA0005CE30E945F3620E030E040E85FE30E9480 +:103EB000F9358111A9C080EE90E090935A0180936A +:103EC000590195C08823B9F080919C02811106C0E8 +:103ED00081E080939C0282EE0E94570C0E940A1C93 +:103EE00090939B0280939A028BE20E94570C2ECFF4 +:103EF00081EE0E941E0C8BE20E941E0C27CF8823AD +:103F000009F424CF81EE0E94570C83EE0E94570CD7 +:103F10008FE40E94570C8FE40E941E0C83EE0E94D7 +:103F20001E0C81EEE9CF882309F410CF81EE0E94A8 +:103F3000570C83EE0E94570C80E50E94570C80E5D9 +:103F4000EBCF1092EE0202CF8093390252CF88233A +:103F500079F180913902882349F080913A020E94D8 +:103F60001E0C80EE0E94570C8AE20CC080913C022D +:103F70008823D1F380913A020E941E0C80EE0E94A9 +:103F8000570C8CE40F900F900F900F900F90DF91D3 +:103F9000CF911F910F91FF90EF90DF90CF90BF9046 +:103FA000AF909F908F907F906F905F900C94570C84 +:103FB0008AE20E941E0C8CE40E941E0C80EE0E947D +:103FC0001E0C80913902811105C080913C0288232A +:103FD00009F44CCC80913A02D5CF8823C1F080916E +:103FE0003203882339F010923203109200010E94AC +:103FF000410DACCE809100018111F7CF81E080931B +:10400000320380930001F3CF80E890E056CF61E067 +:104010000E94C2139BCE62E0FBCF64E0F9CF8823FD +:1040200021F081E08093ED0291CE1092ED028ECED0 +:10403000882331F081E08093F0021092670186CEF0 +:104040001092F00283CE882349F0809176040E947A +:10405000CB0C813019F482E30E94B313F701828103 +:10406000882309F4B0C2809176040E94CB0C813081 +:1040700009F0A9C284E30E94B313A5C2073C2CE552 +:10408000120709F4AEC008F4A7C0083C4CE51407B9 +:1040900009F4ACC0093C1C4509F078CE45E056E176 +:1040A00061E176E179C0043DECE51E07A8F40E3C21 +:1040B000FCE51F0708F0DACB0C3C2CE5120709F4ED +:1040C0009FC047E456E168E576E10D3C1C4508F4E5 +:1040D00063C061E081E046C0053D4CE5140709F48A +:1040E000C5CB08F492C00D351D4509F4BFCB4ECEAB +:1040F0008091770480FF31C08E7F80937704609138 +:104100007704709178048091790490917A040E94E8 +:10411000401580915B03816080935B039FEFE0E734 +:10412000F2E09150E040F040E1F700C000000F9055 :104130000F900F900F900F90DF91CF911F910F91E3 :10414000FF90EF90DF90CF90BF90AF909F908F90B7 -:104150007F906F905F900C9409094AEA57E161EAF9 -:1041600077E1E5CF45E356E16EE376E1E0CF4EE35C -:1041700056E165E376E1DBCF4DE156E169E276E1B8 -:10418000D6CF49E256E16DE176E1D1CF41E156E18A -:1041900065E076E1CCCF48E556E167E476E1C7CF4C -:1041A0000F900F900F900F900F90DF91CF911F9174 -:1041B0000F91FF90EF90DF90CF90BF90AF909F90C6 -:1041C0008F907F906F905F900C94B4170E3D1C45BC -:1041D00009F0DCCD0F900F900F900F900F90DF91B2 -:1041E000CF911F910F91FF90EF90DF90CF90BF90F4 -:1041F000AF909F908F907F906F905F900C94361847 -:10420000C8010E94A30BD82ECFCD092F0F70907F2D -:1042100011F00295007F812F2223C9F0002369F05D -:1042200090E2910F983010F011110BC080915F0453 -:10423000082B00935F040E94820B812F0E94570C71 -:1042400017C080919102082B00939102F4CF0E9435 -:104250001E0C002369F00095105E183010F0B110AC -:1042600027C080915F04082300935F040E94820BA3 -:1042700098E0C91AD108E4E0CE16D10408F0F6CAD5 -:104280000E94C20E0F900F900F900F900F90DF9131 -:10429000CF911F910F91FF90EF90DF90CF90BF9043 -:1042A000AF909F908F907F906F905F900C94B81616 -:1042B00080919102082300939102D8CF892F8F70AB -:1042C000907F903211F08295807FF1E0BF120CC098 -:1042D000222329F0333060F60E94140CC9CF32300B -:1042E00038F60E94090CC4CF222341F03323A1F3F6 -:1042F00040FFA3CF4F70F7014583EECF332389F3FF -:10430000193309F0F5C0FFEF27EE33E0F1502040FC -:104310003040E1F700C00000812F0E941E0CA8CFA2 -:10432000892F86958695837061F0813009F0A0CF42 -:10433000812F9370211102C090E080E00E946E08EE -:1043400097CF812F9370211102C090E080E00E94EE -:1043500084088ECF892F8370A1F5211189CF812FF9 -:10436000829586958770880F880F412F4F70082E91 -:1043700001C0440F0A94EAF7212F207114FF07C0EF -:104380002FE030E001C0220F8A95EAF7209596953C -:1043900096959370923081F0822F842B933030F475 -:1043A00080919202913029F0242B82230E94050CE7 -:1043B0005FCF842B822BFACF242B8091920282270D -:1043C000F5CF8695222311F0892F8170882309F477 -:1043D0004FCF812F829586958770880F880F412F48 -:1043E0004F70082E01C0440F0A94EAF7212F207164 -:1043F00014FF07C02FE030E001C0220F8A95EAF7D2 -:104400002095969596959370923081F0822F842B0B -:10441000933030F480917604913029F0242B82235C -:104420000E94791725CF842B822BFACF242B8091E1 -:1044300076048227F5CF092F0F70222329F0802FD1 -:104440000E949617812F48CF812F0E94090C802F40 -:104450000E948A170DCF812FE1EF1E1789F1E11716 -:1044600050F0F0EF1F17B9F02223B1F13111E5CE72 -:10447000892F8F7129C042EF141749F153EF15139B -:10448000F3CF80E0222361F29F7181E001C0880FA9 -:104490009A95EAF7C5CF222379F0323008F0E8CEBA -:1044A000292F2F7181E090E001C0880F2A95EAF74B -:1044B000909176048927B4CF333008F0D9CEF0CF6D -:1044C000892F8F71222321F20E949617D1CE892F36 -:1044D0008F712223C9F3BCCF332379F0893341F4A0 -:1044E0008FEF97EEE3E081509040E040E1F712CF8C -:1044F0008FE39CE90197F1F70DCF892F8F71A8CF3A -:104500000031FFE51F0709F4F8CB01312FE5120751 -:1045100009F410CC0E9462086093F5027093F602D1 -:104520008093F7029093F802F7018281063F11050C -:1045300009F461CD08F053CC043E110509F45DCDBA -:1045400008F0FACB003E110509F457CD013E1105E4 -:1045500009F4E8CC0C32110509F0F8CB882309F4F2 -:1045600055CD81E08093F00210926701EFCB0031CE -:104570003FE5130709F4C5CB01314FE51407A1F658 -:1045800082E0C0CB85E0DE01119601900D928A9504 -:10459000E1F7F701228189819A8121117CC90E946A -:1045A000A30B182F80C91F93CF93DF9380915D02D7 -:1045B000807FA9F480915A02882389F080918F022C -:1045C000D0915E026091580270915902A0915B02F5 -:1045D000B0915C02C62FC72316E0D81304C0DF9148 -:1045E000CF911F91089590E0109711F0CF3F19F4EB -:1045F00001968770F2CF189F9001199F300D1124FA -:10460000F901E15AFD4F41814713F2CF4081461332 -:10461000EFCF42814111ECCF438154814A1B5B0BA8 -:10462000403A510528F780915D028F708061809338 -:104630005D02F901EC59FD4F80818F7080618083AC -:1046400088E592E00E94161CDF91CF911F910C9497 -:10465000990BAF92BF92CF92DF92EF92FF920F939E -:104660001F93CF93DF93CDB7DEB761970FB6F89462 -:10467000DEBF0FBECDBF8C0185E0F801DE011D96C7 -:1046800001900D928A95E1F7F801E28088E5A82E65 -:1046900082E0B82E60915B0270915C026115710539 -:1046A00009F432C19091580240915902892F842314 -:1046B0008F3F09F429C120813181C380D480F090DB -:1046C0005A02F601E61BF70BFF2009F4E8C08091BF -:1046D0005D02582F507FE03AF10508F0ABC0511150 -:1046E00077C0FE2C431321C092131FC0E1101DC0E0 -:1046F0008F70806180935D02C5010E94161C8091BD -:104700005D02F80185838F2D61960FB6F894DEBFA8 -:104710000FBECDBFDF91CF911F910F91FF90EF9012 -:10472000DF90CF90BF90AF900895CD2829F0822FD1 -:1047300083238F3F09F003C180E0F82FF170DF2E53 -:1047400080FF3CC080918F0240915E0256E084134E -:1047500015C02D873E878D859E850E94F414292FD4 -:1047600022952F702230F0F0243018F59F70F1F070 -:10477000F8019581907FD1F4D12C1EC090E0589F14 -:10478000F001599FF00D1124E15AFD4F618136135C -:1047900006C06081261303C06281E6120FC0019635 -:1047A0008770D5CF9F7011F0882331F3805E8830F9 -:1047B00018F3C8010E94161CFD2CA5CFEE2009F4A9 -:1047C000A2CF80915D02816080935D02F12C9BCF2E -:1047D000431306C0921304C0F801EE2009F479C017 -:1047E000C8010E940015882309F1EE20F9F080919C -:1047F0005D02803270F02091580230915902388762 -:104800002F831986DB86CA868C87CE0107960E9485 -:10481000161C86E0F801A8E5B2E001900D928A9599 -:10482000E1F70E94D322FF24F3946DCFC8010E94C8 -:10483000161CF9CF51110AC088E592E00E94161C9F -:1048400086E0F50111928A95E9F7C0CF43130FC0B6 -:1048500092130DC0E1100BC0F8018583C8010E94BE -:10486000161C86E0F50111928A95E9F74CCFC80134 -:104870000E9400158823D1F2EE20C1F280915D02E2 -:10488000803238F220915802309159023A832983BC -:104890001B82DD82CC828E83CE010196B8CFE03AB6 -:1048A000F105F8F6FE2CEE2009F243131FC0921317 -:1048B0001DC080915D0280FD10C0982F907F69F02F -:1048C000F8018583903F31F0982F907F905F8F7033 -:1048D000892B8583C8010E94161C86E0F801A8E593 -:1048E000B2E001900D928A95E1F70DCFC8010E94C8 -:1048F000001581118ECF80915D02816080935D02F1 -:10490000C8010E94161CFFCEEE2009F48FCFC8010B -:104910000E940015F82E882309F488CF86E0F8015C -:10492000A8E5B2E001900D928A95E1F780915802D6 -:10493000909159020E94F4140E94D322E4CE81E0A7 -:104940008E25FBCE1F93CF93DF93CDB7DEB767974E -:104950000FB6F894DEBF0FBECDBF4B8B5C8B6D8B5B -:104960007E8B8F8B6111109291021A8A198A85E0D1 -:10497000FE017396DE011D9601900D928A95E1F776 -:1049800086E0FE013D96DE01179601900D928A9514 -:10499000E1F7CE0107960E942923882389F016E0CB -:1049A00080918F0290915E0289134BC067960FB67B -:1049B000F894DEBF0FBECDBFDF91CF911F91089558 -:1049C00086E0FE013796DE01119601900D928A95E0 -:1049D000E1F78A859B85892B11F38F81988589233F -:1049E0008F3FE9F220915E0230E0C90101968770A5 -:1049F000992740918F024817190681F410925F049D -:104A00000E94FA0F10925E0210928F0286E0E8E593 -:104A1000F2E0DF011D928A95E9F7C1CF96E0929FFF -:104A2000D001939FB00D1124A15ABD4FFE013196C4 -:104A300001900D929A95E1F780935E020E94990B86 -:104A4000AECF819FC0011124815A9D4F0E9429231E -:104A5000882309F4ABCF80918F0290E00196877094 -:104A6000992780938F029CCF9F92AF92BF92CF9253 -:104A7000DF92EF92FF920F931F93CF93DF93CDB707 -:104A8000DEB764970FB6F894DEBF0FBECDBF8E01C0 -:104A90000F5F1F4F8AE0D8011D928A95E9F79EE4C7 -:104AA000C92E91E0D92EF12CE12CAA24A394B12C8B -:104AB000F60181916F018F3F09F44AC0F894E82F05 -:104AC000E295EF70F0E021A18F70A50102C0440FC4 -:104AD000551F8A95E2F7CA01922F982B91A392A1B4 -:104AE0008095892382A30E94BC0900C0E7E4F1E01D -:104AF00030E020E0912C41914F3F09F47DC0A42F7C -:104B0000A295AF70B0E090968C9190E04F7002C08B -:104B1000959587954A95E2F780FD6EC08A2D022E05 -:104B200001C0880F0A94EAF7982A2F5F3F4F273079 -:104B3000310509F7F601319780818F3F11F00E940E -:104B4000BE0950EA5A95F1F7F801EE0DFF1D90826B -:104B50008FEFE81AF80A95E0E916F10409F0A8CFFA -:104B60004AE050E0B80188ED92E00E945F357C0198 -:104B7000892B41F08AE0F801A8EDB2E001900D9296 -:104B80008A95E1F71091E302E114F104B9F181E0B3 -:104B9000809395020E940A1C909394028093930242 -:104BA00080919302909194020E94FB1B069770F0F3 -:104BB000A8EDB2E0E12FF0E0E15BFC4F8D91819335 -:104BC00022E0AD3DB207D1F71092950281E090E06E -:104BD000EF28C1F064960FB6F894DEBF0FBECDBFCC -:104BE000DF91CF911F910F91FF90EF90DF90CF90C9 -:104BF000BF90AF909F90089580E096CF80919502EE -:104C00008111CECF0E949F0EB82EE091E30288233F -:104C100009F4C7C08E01005F1F4F85E0D8011D92C7 -:104C20008A95E9F7F0E09F01215B3C4F7901809183 -:104C3000D102AE014B5E5F4F6A018A3008F086C038 -:104C400044E75AE1B801C7010E945B0E882309F4CA -:104C500094C045EA57E2B801C7010E945B0E882361 -:104C600009F48BC04BE958E1B801C7010E945B0E03 -:104C7000882309F482C047E859E1B801C7010E94BE -:104C80005B0E882309F479C045E659E1B801C701F4 -:104C90000E945B0E882309F470C01092D102E0914B -:104CA000E202F0E0AF01415B5C4FD80110E0FA0195 -:104CB0009191AF018D91981731F09F0121503109E9 -:104CC000F90180831B2DCA16DB0689F780919C02AF -:104CD000882371F080919A0290919B020E94FB1BA5 -:104CE000893E934028F082EE0E941E0C10929C0296 -:104CF00088E9C82E82E0D82EF12CE12CD6018D91C6 -:104D00006D018823D1F08695F70109F447C0EC5076 -:104D1000FE4F808191819C878B871D860E940A1C93 -:104D20008160782F9F878E87F601319710824B859F -:104D30005C856D858F850E94A224B2E0EB0EF11C8C -:104D4000E4E0EE16F104D1F6812F44CF8091960273 -:104D5000909197020E94FB1B843F914008F070CF16 -:104D6000A091E202B0E0A15BBC4FF8011D9211924C -:104D7000CE16DF06D9F71B2DA9CF8091D1028F3F28 -:104D800031F08F5F8093D1028A3008F488CF0E947F -:104D90000A1C9093970280939602E2CFE051FE4F57 -:104DA000B8CFF0E0E15BFC4FF89485E0A0EBB2E017 -:104DB00001900D928A95E1F765E070E080EB92E05A -:104DC0000E94F3088093AF020E94BC09F894E0911E -:104DD000EB02F0E0E851FD4F80818B878093B602B3 -:104DE00061E070E0CE010B960E94F3088093B5025B -:104DF0000E94BC09F894C090B702D090B802E0902D -:104E0000B902F090BA0280919D0290919E02A09109 -:104E10009F02B091A002C816D906EA06FB06D1F09F -:104E2000C0929D02D0929E02E0929F02F092A00258 -:104E30000E949F0E81110EC00E946208C61AD70AF6 -:104E4000E80AF90AC092D202D092D302E092D402C8 -:104E5000F092D5020E94BC09F8948091C202882386 -:104E600021F184FF04C09091C30290935C0380FF02 -:104E70000DC08091BB0280FF25C0909177049160A6 -:104E80009093770460E086950E9469168091C20233 -:104E900081FF09C020E04091BE026091BD02809177 -:104EA000BC020E9452151092C2020E94BC09F894E2 -:104EB0008091C402882349F00E94B30D0E94BC096E -:104EC00080E088CE0E94E50FE1CF0E94980DF6CFDA -:104ED000EF92FF920F931F93CF93DF9300D000D0F8 -:104EE0000F92CDB7DEB7162FE82EF12CC701880F31 -:104EF000991F662339F18C509E4FFC01808191816E -:104F00009A83898301E00B830E940A1C8160782FB9 -:104F10009D838C83F701E856FD4F0127110F102B5D -:104F2000108349815A816B818D810F900F900F9072 -:104F30000F900F90DF91CF911F910F91FF90EF9005 -:104F40000C94A22480519E4FD8CFCF92DF92EF9243 -:104F5000FF920F931F93CF93DF930F92CDB7DEB7DE -:104F6000EE24E394F12C06EB12E09E012F5F3F4FFD -:104F70004BEA52E063E082E00E94C519082F8823C3 -:104F800021F1C090E5028C2D90E09C0128513D4F0D -:104F900079011981F9018081181BD12E80E00AC0A6 -:104FA000DA94F70180818F5F808360E08C2D0E940E -:104FB0006827802F1D14A4F3912F17FD90E0191B73 -:104FC00011110EC081110E94800B802F0F90DF9174 -:104FD000CF911F910F91FF90EF90DF90CF900895A8 -:104FE0001F5FF70180818150808361E08C2D0E94DA -:104FF0006827802FE5CF1F921FB61F9211248F9331 -:105000009F93AF93BF9380915604811113C08091F9 -:10501000570490915804A0915904B0915A044196B4 -:10502000A11DB11D8093570490935804A093590477 -:10503000B0935A04BF91AF919F918F911F901FBE63 -:105040001F901895CDB7DEB7E9970FB6F894DEBF7D -:105050000FBECDBF84B7877F84BF0FB6F894A895E5 -:1050600080916000886180936000109260000FBEA4 -:1050700080E890E00FB6F89480936100909361000F -:105080000FBE85B7806885BF85B7806885BF8AEB0E -:1050900099E090932F0280932E020E94D5060E94E1 -:1050A000A0078091E20084608093E2007894809170 -:1050B0006C048823A1F01091E9001F709091EC001E -:1050C000892F817090FD80E8182B1092E900809163 -:1050D000E80083FD0E9403101F701093E90082E036 -:1050E00084BD93E095BD9AEF97BD80936E001092BA -:1050F000D2021092D3021092D4021092D5020E94D2 -:105100002715811102C00E9483140E949F0E809374 -:10511000580180915801882309F4C6C010926F018C -:1051200085E2809370010E949F0E81110E9454338A -:105130008091580181112FC0FE01359686E0DF0174 -:105140001D928A95E9F786E6898387E98A8386EC4A -:105150008B8384E38C8385E38D833497AEE4B1E065 -:10516000CE010B9621912D938E179F07D9F787E0DB -:10517000E5E7F1E0DE01919601900D928A95E1F765 -:10518000FE01B196A7E4B1E0CE01889621912D935E -:105190008E179F07D9F78091580195E0811190E013 -:1051A0009093E30285E0891B8093E2020EE411E014 -:1051B000A3E5EA2EA1E0FA2EF80181918F018F3F3D -:1051C00011F00E94BE09E016F106B1F707E411E004 -:1051D000FEE4EF2EF1E0FF2ED8018D918D018F3F7F -:1051E00011F00E94BE09E016F106B1F7E8EDF2E019 -:1051F00082EE92E0AFE4B3E011921D928E179F070A -:10520000D9F70E94B11A811102C00E94361882E0BB -:1052100090E00E9475358093440384E090E00E9402 -:105220007535182F82E290E00E947535982F812FF6 -:105230009093D7028093D6020E943425EFE7FBEBD0 -:105240003197F1F700C000000E94342580914F0390 -:1052500080FF2EC06FEF7FEF90E080E00E94A735C7 -:1052600081E08093E00080E28093D8001092C90032 -:105270008FE19EE40197F1F700C0000087E090EB1A -:10528000DC018093800690938106A0938206B09300 -:10529000830688E19CE00FB6F894A895809360009F -:1052A0000FBE90936000FFCF85E280936F0139CFEE -:1052B00083E090E00E9475350E94050C8091760491 -:1052C0000E94D0160E94B11A811102C00E943618A5 -:1052D00088E190E00E947D3560933D0470933E0428 -:1052E00080933F0490934004672B682B692B11F443 -:1052F0000E9406180E94553167E081E00E94A713C2 -:1053000065E586E10E94A71363E687E10E94A71383 -:1053100060EA8AE10E94A71369E98BE10E94A71362 -:1053200065EF8CE10E94A71360EA8DE10E94A7134C -:1053300060E38EE10E94A71366E083E00E94A7135A -:1053400061E08CE00E94A71360E081E00E94A71357 -:1053500060E08CE00E94A7136FE084E00E94A71336 -:1053600061E08CE00E94A7130E949F0E811102C091 -:105370000E94573383E080931A0380E280934304B2 -:105380000E9455316DE070E08CE992E00E94680D5A -:10539000892BE9F580911A0363E070E081FD9EC2DC -:1053A00089E992E00E94680D892B89F56DE070E033 -:1053B00089E892E00E94680D892B49F50E946208F5 -:1053C0006058774C8E4F9F4F60934A0470934B0404 -:1053D00080934C0490934D04EEE7F4E080E092E07B -:1053E000DF019C011D9221503040E1F7F0937F06D0 -:1053F000E0937E068FEF9FEF90937D0480937C0473 -:1054000081E080934F0480934E0410921B0380919F -:10541000E402811136C00E94B11A811104C00E94B9 -:1054200036180E94C31788E090E00E947D35609393 -:105430007704709378048093790490937A04809130 -:105440005B03836080935B036E7F71F40E94C317DC -:1054500088E090E00E947D35609377047093780433 -:105460008093790490937A040E940E0980917704C6 -:1054700080FF04C060E086950E94691681E08093F9 -:10548000E40280915801811106C084EF8093660187 -:1054900085EF8093650120916601A22FA295AF70E0 -:1054A000B0E091963C9191972F7081E090E0BC0123 -:1054B000022E01C0660F0A94EAF7462F4095432357 -:1054C00091964C93919792963C919297362B929607 -:1054D0003C93929740916501E42FE295EF70F0E0E4 -:1054E00031A14F70042E01C0880F0A94EAF7982F5B -:1054F0009095932391A392A1892B82A390968C914E -:1055000090E002C0959587952A95E2F7817020A1D9 -:1055100030E002C0359527954A95E2F792E020FFEA -:1055200090E0892B8093EC028091580111E0812753 -:105530008093EB02312F381B3093E5020E945531E6 -:1055400040E060E080E00E94210D60E08AE00E947F -:10555000691689EA92E090935E0380935D0381E08F -:105560000E94791780EE90E090935A018093590140 -:10557000109332030E94410D8BE591E09093530408 -:10558000809352043E018DE3680E711C80916C047F -:10559000FF24F39400E112E1853009F4F2C10E9486 -:1055A0003425E82E81110E946208E5E4F3E0AFE4BF -:1055B000B3E010E000E0B02EDD9081918D1509F48C -:1055C00004C28D25C12CFF24F394982F9F2109F448 -:1055D000F7C10E949F0E882399F0CEA6BFA6DF20B8 -:1055E00081E009F480E088AB0E940A1C8160782F7A -:1055F0009AAB89AB4EA55FA568A98AA90E94A2248F -:10560000F801EB5BFC4F8081F826F0828091EC0280 -:10561000E82FEE0FEE0F90916601A92FA295AF70C3 -:10562000B0E090962C9130E09F7002C035952795A0 -:105630009A95E2F72170332790916501A92FA295E1 -:10564000AF70B0E090964C9150E09F7002C05595BD -:1056500047959A95E2F7CA018170992740FF02C0E9 -:1056600082E090E0822B8E2B8093EC021091EB0273 -:105670008F70E82FF0E0E650FE4F80819091EA02B3 -:10568000890F8093EA02F12C84306CF0E12FF0E076 -:10569000E851FD4F80818F5F808360E0812F0E9401 -:1056A0006827FF24F3948091EA028D3F6CF4E12F88 -:1056B000F0E0E851FD4F80818150808361E0812FCF -:1056C0000E946827FF24F3948091EA02082E000CC0 -:1056D000990B64E070E00E9435358093EA02F11086 -:1056E0000E94800B80914F04882351F180911C030C -:1056F00090911D030E94FB1BC29708F07DC1209171 -:105700007C0430917D042115310509F0A0C28091FF -:105710004E048823A9F00E94620800914A04109167 -:105720004B0420914C0430914D04601B710B820B93 -:10573000930B6F3F7F4F8F4F9F4710F40E94980D40 -:10574000E11001C0F1100E94B30D809142038A3034 -:1057500008F0BAC380914003909141030E94FB1B63 -:10576000089708F4B1C304E610E025E030E04BE30D -:1057700053E064E084E10E94A032892B09F075C3F4 -:105780001092420320913203222359F080913B036F -:1057900090913C0398278927982790933C03809306 -:1057A0003B0386E0E4E2F3E0DE01919601900D9286 -:1057B0008A95E1F786E0FE01B196DE01119601902F -:1057C0000D928A95E1F786E0FE013196A5E3B3E0FC -:1057D00001900D928A95E1F790913F0380913603F5 -:1057E00097FD3AC38E7F8093360380913303909167 -:1057F0003403009709F02AC360913B0380913C0376 -:1058000000913D0310913E03222309F4F2C241E0CE -:105810000E94FB0C2091300330913103820F931FC3 -:10582000909331038093300341E0602F812F0E94D9 -:10583000FB0C20912E0330912F03820F931F909326 -:105840002F0380932E0360E373E08AE393E00E94CA -:10585000DC0C6EE273E089E393E00E94DC0C1092B2 -:1058600037031092380386E0E5E3F3E0DE0111969A -:1058700001900D928A95E1F786E0FE013196A4E24F -:10588000B3E001900D928A95E1F7309126032091C3 -:105890002703909128038091290370912003609140 -:1058A00021034091220350912303F0912503E091BD -:1058B0001F03FE13E0C2332311F07313DCC2222353 -:1058C00011F02613D8C2882311F08513D4C299236E -:1058D00019F081E04913D0C280E0CEC286E992E09F -:1058E00061CD80916C04843009F43BC00E94980D16 -:1058F00040E060E080E00E94210D80E00E94B81648 -:105900008091E702811109C0F092E702809177044B -:1059100081708093E6020E94E50F10925604A8E180 -:10592000B0E0E0E40FB6F894A895A09360000FBE35 -:10593000E093600083B7817F846083BF83B7816019 -:1059400083BF7894889583B78E7F83BF0FB6F89412 -:10595000A89580916000886180936000109260003B -:105960000FBE80916B04882361F00E943425EFE420 -:10597000F3E08191811178C429E533E02E173F07C8 -:10598000C1F780916C04853009F4ABCF10925F04AD -:105990000E94FA0F0E94C20E0E94B8161092E702EF -:1059A0008091E602882349F080917704816080939A -:1059B000770460E086950E9469160E94410DEFCD44 -:1059C000C394FF0C37E0C31200CE0F5F1F4F0A30A5 -:1059D000110509F0F0CD8FEF8BAB8CAB1DAA0E94A7 -:1059E0000A1C8160782F9FAB8EAB4BA95CA96DA977 -:1059F0008FA90E94A2240ACE0E940A1C90931D0324 -:105A000080931C0360E080E00E949A080E94C20E0E -:105A10008093F9020E949F0E882331F14091F50294 -:105A20005091F6026091F7027091F8022FB7F89446 -:105A30008091570490915804A0915904B0915A0450 -:105A40002FBF841B950BA60BB70B81339547A10580 -:105A5000B10540F00E94980D80914F04882309F40D -:105A600056CE4DCE0E94B30D0E949F0E882309F49E -:105A7000D5C061E080E00E949A0860E08CE791E088 -:105A80000E948B1362E080E00E949A088091760465 -:105A90000E94CB0C823009F49BC008F090C0882390 -:105AA00009F496C0813009F499C065E080E00E9455 -:105AB0009A0860E08AE991E00E948B1366E080E03A -:105AC0000E949A086091F902669561708FE991E0F1 -:105AD0000E948B1367E080E00E949A086091F902AF -:105AE0006095617084EA91E00E948B1368E080E029 -:105AF0000E949A086091F90262FB662760F988EAC1 -:105B000091E00E948B137DA66CA64091F10250910A -:105B1000F2026091F3027091F4022FB7F894809131 -:105B2000570490915804A0915904B0915A042FBF82 -:105B3000841B950BA60BB70B8D329140A105B105C7 -:105B400008F48ACF0E9462086093F1027093F20217 -:105B50008093F3029093F4028091F002811104C0CB -:105B600080916701811142C06DE080E00E949A0837 -:105B700060E08DEA91E00E948B136AE080E00E9471 -:105B80009A0881E0809367018091EF0290E001968E -:105B9000817099278093EF0221E030E0281B390BB8 -:105BA00040E6429FC001439F900D11242091EE02D8 -:105BB000222351F1855C9B4F0E9492064DCF83308A -:105BC00089F0843009F071CF60E08EE891E003C085 -:105BD00060E082E891E00E948B1367CF60E088E884 -:105BE00091E0F9CF60E084E991E0F5CF6AE080E0F0 -:105BF0000E949A0860E08DEA91E00E948B136BE0AE -:105C000080E00E949A08C0CF2091ED02222319F073 -:105C100085589C4FD1CF85549D4FCECF64E080E016 -:105C20000E949A0860E083EB91E00E948B1365E08C -:105C300080E00E949A0860E089EB91E00E948B135B -:105C400069E080E00E949A088BEF94E0B5CF8091E4 -:105C50001B0361E070E081115ACD082F10E02B0189 -:105C6000082E02C0440C551C0A94E2F7A9014421F5 -:105C70005521452B09F448C090911A0390FD46C068 -:105C80008295880F807680936A01980136952795D2 -:105C90003695279520936D01815E80936B0110925C -:105CA0006E0124E630E047E050E068E671E088E706 -:105CB0000E944C32892B09F02ACDA80175E0440FCF -:105CC000551F7A95E1F780911A0380FD2DC0425847 -:105CD0005B4F04E610E020E230E060E488E70E94D9 -:105CE0007332892B09F013CD0E94B30DC201809548 -:105CF000909540907C0450907D0448225922509207 -:105D00007D0440927C0403CD8F5FA7CF880F880F5E -:105D1000880F80936A0110926D01895F80936B01F7 -:105D200083E080936E01BDCFEAEFF2E080E2DF0115 -:105D30001D928A95E9F7EEE0F2E0F9AFE8AF0AE0EC -:105D400012E099249394A8ADB9AD2D91B9AFA8AF45 -:105D5000F80121908F01240E352E311CC10182588B -:105D60009B4F1C01E22FF0E0E650FD4F30E020E0B9 -:105D700067E0A62EA21AB92C022E01C0BB0C0A9411 -:105D8000EAF7610190E0D6018D916D018B216A2DBA -:105D9000691B6770862E062E000C770BB82F01C08A -:105DA000BB0F8A94EAF78B2E719561957109677024 -:105DB000772701C086956A95EAF7882A8081882A24 -:105DC00080829F5F9830F9F62F5F3F4F31962830E1 -:105DD000310571F6E2E1F2E028AD39ADE217F307E3 -:105DE00009F0B1CF04E610E020E230E04AEF52E0E3 -:105DF00074CF45E00E94FB0C20912C0330912D03C1 -:105E0000281B390B30932D0320932C0345E0602F82 -:105E1000812F0E94FB0C20912A0330912B03281B19 -:105E2000390B30932B0320932A036CE273E087E352 -:105E300093E00E94DC0C6AE273E088E393E00E9446 -:105E4000DC0C10923A03109239030DCD0197909318 -:105E500034038093330307CD81608093360384E05D -:105E60000E94B31384E190E0F2CF809142038F5FF0 -:105E700080934203F8CC81E080FF0FC0E091520490 -:105E8000F0915304309749F082E08093240304801A -:105E9000F581E02D84E293E009951092260310929B -:105EA0002703109228031092290386E0E4E2F3E02E -:105EB000AEE1B3E001900D928A95E1F70E940A1CD1 -:105EC00090934103809340030E94C20E909143033C -:105ED000891731F00E94C20E809343030E94B816C6 -:105EE00080916C04843009F051CB83E08093E90009 -:105EF0008091E80082FF4ACB8091E80090E085FF26 -:105F00000BC00E94F40630E2E32EF12C8E010F5FED -:105F10001F4F8823E1F091E08091E8008B77809318 -:105F2000E800992309F432CBE981E150E33108F02C -:105F300071C0F0E0EC5EF84C0C9449358091F100B2 -:105F4000D8018D938D01B1E0EB1AF10821F3809116 -:105F5000E80085FDF3CF8091E8008B778093E8001F -:105F60000E94F406882399F3D6CF1A8289E08B83A6 -:105F700011C08A81823009F48FC1833091F1813060 -:105F800009F048C00E9462080E944F356B837C83F1 -:105F90008D839E8380916C04843009F0F7CA109140 -:105FA000E9001F709091EC00892F817090FD80E8CE -:105FB000182B82E08093E9008091E80080FF0DC0FB -:105FC00050E040E060E270E0CE0101960E942507BB -:105FD0008091E8008E778093E8001F701093E900AD -:105FE000D5CADE011396EFE4F3E081918D9323E0AF -:105FF000E935F207D1F7CECF8A81823059F46B812F -:106000007C818D819E810E944F3586E290E00E94C6 -:106010008935C0CF8FEF8983BDCF4C816B818A8159 -:106020000E9492149827892798279E838D83B2CF48 -:106030000D811E811027012710278A81EB803EE009 -:10604000E39E700111249CE8899FE00CF11C11244F -:106050008C8190E0880F991FE80EF91E612FC7010F -:1060600087960E948935602FC7018896D0CF0E94FD -:10607000161490CF8A818138C1F060F4803809F01D -:1060800089CF20E04B8160917904809178040E944F -:10609000521580CF8238E9F0833809F07BCF20E0B9 -:1060A00040917A046C818B81F2CF60E08B810E94F9 -:1060B00069168B81811103C00E94E50F6BCF80911F -:1060C000770481608093770460E086950E9469166A -:1060D00061CF8B8180937B045DCF8A81813899F079 -:1060E00030F4803809F056CF80917A0440CF82385E -:1060F00091F0833809F04ECF809178048B838091A2 -:1061000079048C8347CF8091770480FF02C0869505 -:106110002ECF80E02CCF80917B0429CF6091770433 -:10612000709178048091790490917A040E944015CE -:1061300031CF80E18A832ECF81E08A838DE117CF32 -:10614000CA80DB80DC24CD24DC248E010F5F1F4F4E -:10615000EC80E00EF12EF11CC6018D519D4F0E1505 -:106160001F0509F417CFADE1CA16A1E0DA0650F415 -:106170000E947535F8018483BFEFCB1ADB0A0F5FED -:106180001F4FEACFD80114961C92F6CF0A811B81CB -:10619000102701271027FE0131966F01EC80E00ED9 -:1061A000F12EF11CC8018D519D4FE016F10609F446 -:1061B000F1CE0D31F1E01F0728F4D60114966C9151 -:1061C0000E948935BFEFCB1ADB0A0F5F1F4FEACF62 -:1061D0000E940614DFCE85E0ADCFCA80DB80DC24D0 -:1061E000CD24DC248E010F5F1F4FEC80E00EF12EDA -:1061F000F11CC6018796E016F10609F4CBCEECEB54 -:10620000CE16E2E0DE0658F40E947535D8011496E9 -:106210008C93FFEFCF1ADF0A0F5F1F4FEACFF80111 -:106220001482F7CF0A811B811027012710279E01B6 -:106230002F5F3F4F6901EC80E00EF12EF11CC80189 -:106240008796E016F10609F4A5CE0C3B32E0130761 -:1062500028F4D60114966C910E948935BFEFCB1AB1 -:10626000DB0A0F5F1F4FEBCF09BD19BD09B400FE5C -:10627000FDCF8091D8008F7D8093D8008091E00081 -:1062800082608093E0008091E00081FDFCCF10925D -:106290005F040E94FA0F75CB86E290E00E9475358C -:1062A0001B821C821D828E8375CE1092B9008CE0F9 -:1062B0008093B80008959F92AF92BF92CF92DF92E1 -:1062C000EF92FF920F931F93CF93DF93B82EEB01C2 -:1062D0000E940A1C6C01EE24E394F12CC431D10518 -:1062E00060F025E0E22EF12CCF3FDC0731F0CE014B -:1062F00064E170E00E9415357B0184EAA82E94E8E1 -:10630000992E1092BC00A092BC000E940A1C8C0125 -:106310008091BC0087FF0DC08091B900887F8830D4 -:1063200039F18091B900887F803111F10FEF1FEFB3 -:1063300009C00E940A1C801B910B8E159F0540F31B -:106340000EEF1FEFCF3FDC07E1F2C6010E94FB1BFF -:106350008C179D07B0F2C801DF91CF911F910F916B -:10636000FF90EF90DF90CF90BF90AF909F900895F7 -:10637000B092BB009092BC000E940A1C8C018091DC -:10638000BC0087FF0AC08091B900887F883111F076 -:10639000803461F610E000E0DECF0E940A1C801B12 -:1063A000910B8E159F0558F3CBCF0F931F93CF936F -:1063B000DF93EB018093BB0084E88093BC000E94D4 -:1063C0000A1C8C018091BC0087FF11C02091B9008C -:1063D000287F81E090E0283211F490E080E09195F0 -:1063E00081959109DF91CF911F910F910895CF3F32 -:1063F000DC0741F30E940A1C801B910B8C179D0740 -:1064000008F38EEF9FEFEECF0F931F93CF93DF93A1 -:10641000EC0184EC8093BC000E940A1C8C018091EA -:10642000BC0087FF08C08091BB0090E0DF91CF9156 -:106430001F910F910895CF3FDC0789F30E940A1C3A -:10644000801B910B8C179D0750F38EEF9FEFEECFC3 -:106450000F931F93CF93DF93EC0184E88093BC00EC -:106460000E940A1C8C018091BC0087FF08C08091AB -:10647000BB0090E0DF91CF911F910F910895CF3F26 -:10648000DC0789F30E940A1C801B910B8C179D0767 -:1064900050F38EEF9FEFEECFCF92DF92EF92FF920D -:1064A0000F931F93CF93DF936B018A017901B90199 -:1064B0000E945B31E6010C0D1D1DC017D10761F470 -:1064C00024E92093BC00DF91CF911F910F91FF90A1 -:1064D000EF90DF90CF90089597FDF2CFB7018991AB -:1064E0000E94D531EACFCF92DF92EF92FF920F93C5 -:1064F0001F93CF93DF93C62F6A017901B8010E94E1 -:106500005B3197FD0CC0B8018C2F0E94D531E6019C -:10651000EC0CFD1CCE15DF0511F097FF0CC024E933 -:106520002093BC00DF91CF911F910F91FF90EF90CE -:10653000DF90CF900895B80189910E94D531EACFBC -:10654000CF92DF92EF92FF920F931F93CF93DF933F -:10655000F82EE62EEA016901B8010E945B3197FD31 -:1065600015C0B8018E2D0E94D53197FD0FC0B8011E -:106570008F2D81600E945B31F12CE12C21E0C21A49 -:10658000D108EC14FD0400F597FF11C024E9209315 -:10659000BC001816190614F490E080E0DF91CF914A -:1065A0001F910F91FF90EF90DF90CF900895C80159 -:1065B0000E94043297FD04C0FE01EE0DFF1D808392 -:1065C0002FEFE21AF20ADDCF97FDE0CFC8010E945B -:1065D000283297FDDBCFCC0DDD1D8883D7CF84E932 -:1065E0008093BC0008958EE14A9B02C08150E1F780 -:1065F0004A9BFECF08955A9880E28A95F1F75A9AFD -:106600000895FC013BE03A95F1F798E020E080E046 -:1066100031E040E14A95F1F7880F4A9B02C0816062 -:10662000232742E04A95F1F7000040E14A95F1F74F -:10663000915079F790E19A95F1F799B132E03A9556 -:10664000F1F7000040E14A95F1F792FB992790F9A4 -:1066500092272081920F90830895EF92FF920F93DB -:106660001F93CF93DF930F92CDB7DEB719828C01C2 -:106670007C01E60EF11C0E151F0561F481E0998185 -:10668000911180E00F90DF91CF911F910F91FF90BA -:10669000EF9008950E94F332CE0101960E940133DB -:1066A000F80181938F01E7CF529A5A9A0895529830 -:1066B0005A9AEA9AE9E6F0E080818F7C8083089517 -:1066C0006150770B91E001C0990F6A95EAF720E0DD -:1066D00031E0911108C0222391F05A9A80E28A9504 -:1066E000F1F75A980895492F482339F05A9A2327E9 -:1066F00040E24A95F1F79695ECCF5A98F9CF5A981F -:10670000EDCFFF920F931F93CF93DF93EC018C019A -:10671000060F111DC017D10731F4DF91CF911F91E2 -:106720000F91FF900895F9900E94FB3268E08F2D41 -:106730000E946033EFCF1F920F920FB60F92112479 -:10674000EF92FF920F931F932F933F934F935F937B -:106750006F937F938F939F93AF93BF93EF93FF9329 -:10676000CF93DF930F92CDB7DEB719820E94F33239 -:10677000CE0101960E940133A82FA695A695A69555 -:10678000282F229525709A2F9570290F922F93709C -:1067900026952695920F982797708981982B09F056 -:1067A00075C0A83008F072C080E18A95F1F75A9A56 -:1067B000529AB2E0BA95F1F700C05A98EA2EF12C3D -:1067C000EAE0AE9FD0011124AF5FBE4F1896ED9165 -:1067D000FC9119973097B1F06091F8017091F9012F -:1067E00016962D913C911797260F371F13968D9172 -:1067F0009C911497680F791F15964C9115971296D6 -:106800008C9109958AE08E9DF0018F9DF00D1124E9 -:10681000EF5FFE4F6581662351F02091F8013091C2 -:10682000F90186819781820F931F0E9481330E9414 -:10683000FB32F0E1FA95F1F75A9852985A9A80E1B2 -:106840008A95F1F78AE08E9D80018F9D100D1124AD -:106850000F5F1E4FD80112966C911297662371F14B -:106860002091F8013091F90113968D919C91820F3E -:10687000931F0E942D33D801ED91FC91882311F0D4 -:1068800088E001C082E080830E94F3320F90DF91A4 -:10689000CF91FF91EF91BF91AF919F918F917F9198 -:1068A0006F915F914F913F912F911F910F91FF90A9 -:1068B000EF900F900FBE0F901F901895ED91FC91E7 -:1068C000DFCF0F931F93CF93DF93EC0108970CF06A -:1068D000A9C08AE08C9FF0018D9FF00D1124EF5F1D -:1068E000FE4F80819181892B09F49CC0F894529AC3 -:1068F0005A9885E08A95F1F700008C2F869585706F -:106900009C2F9570890F982F937086958695890F87 -:106910008E0193E0000F111F9A95E1F7082B0E945A -:10692000FB3200C068E0802F0E946033A0E1AA958E -:10693000F1F752985A9A4A9B27C087E090E04A990B -:1069400025C08AE08C9F80018D9F100D11240F5F60 -:106950001E4FF80165816623A1F12091F801309165 -:10696000F90186819781820F931F0E942D33811137 -:1069700028C0529A5A9AD801ED91FC9182E0808306 -:10698000789482E090E016C000C0D5CF0197B9F4AA -:10699000529A5A9A8AE08C9FF0018D9FF00D112433 -:1069A000EF5FFE4F0190F081E02D81E080837894CD -:1069B00081E090E0DF91CF911F910F91089500C089 -:1069C000BECF0E94F332B0E2BA95F1F75A98529ACC -:1069D000E0E1EA95F1F78AE08C9FF0018D9FF00DE0 -:1069E0001124EF5FFE4F6281662351F02091F80180 -:1069F0003091F90183819481820F931F0E9481332A -:106A00000E94FB328AE08C9FF0018D9FF00D1124D3 -:106A1000EF5FFE4F0190F081E02D1082789490E0BE -:106A200080E0C8CF84E090E0C5CFAA1BBB1B51E13A -:106A300007C0AA1FBB1FA617B70710F0A61BB70BEE -:106A4000881F991F5A95A9F780959095BC01CD0193 -:106A50000895991B79E004C0991F961708F0961BBA -:106A6000881F7A95C9F78095089597FB072E16F42D -:106A7000009407D077FD09D00E94153507FC05D09A -:106A80003EF4909581959F4F0895709561957F4F45 -:106A90000895EE0FFF1F0590F491E02D09946927EA -:106AA000962769277827872778270895FB01DC0137 -:106AB00002C005900D9241505040D8F70895FB0157 -:106AC000DC0104C08D910190801921F441505040A7 -:106AD000C8F7881B990B0895FB01DC0102C00190E7 -:106AE0000D9241505040D8F70895F999FECF92BDCC -:106AF00081BDF89A992780B50895A6E1B0E044E0F9 -:106B000050E00C94AF35A8E1B0E042E050E00C94C6 -:106B1000AF35262FF999FECF92BD81BDF89A019726 -:106B200000B4021639F01FBA20BD0FB6F894FA9AD5 -:106B3000F99A0FBE08950396272F0E948A350E9466 -:106B40008935252F0E948A35242F0C948A35019689 -:106B5000272F0E948A350C948935DC01CB01FC017A -:106B6000F999FECF06C0F2BDE1BDF89A319600B4A6 -:106B70000D9241505040B8F708950E94FF3508F437 -:106B800081E00895E89409C097FB3EF490958095C4 -:106B9000709561957F4F8F4F9F4F9923A9F0F92FE3 -:106BA00096E9BB279395F695879577956795B79561 -:106BB000F111F8CFFAF4BB0F11F460FF1BC06F5F47 -:106BC0007F4F8F4F9F4F16C0882311F096E911C059 -:106BD000772321F09EE8872F762F05C0662371F07A -:106BE00096E8862F70E060E02AF09A95660F771F8E -:106BF000881FDAF7880F9695879597F90895990F6A -:106C00000008550FAA0BE0E8FEEF16161706E80776 -:106C1000F907C0F012161306E407F50798F0621B97 -:106C2000730B840B950B39F40A2661F0232B242B6C -:106C3000252B21F408950A2609F4A140A6958FEF8B -:106C4000811D811D08950E9436360C94A7360E943E -:106C5000993638F00E94A03620F0952311F00C945C -:106C600090360C94963611240C94DB360E94B8367C -:106C700070F3959FC1F3950F50E0551F629FF0018F -:106C8000729FBB27F00DB11D639FAA27F00DB11DA8 -:106C9000AA1F649F6627B00DA11D661F829F222731 -:106CA000B00DA11D621F739FB00DA11D621F839FB8 -:106CB000A00D611D221F749F3327A00D611D231F8E -:106CC000849F600D211D822F762F6A2F11249F57DC -:106CD00050409AF0F1F088234AF0EE0FFF1FBB1FDF -:106CE000661F771F881F91505040A9F79E3F51059E -:106CF00080F00C9490360C94DB365F3FE4F3983EC2 -:106D0000D4F3869577956795B795F795E7959F5F47 -:106D1000C1F7FE2B880F911D9695879597F90895D9 -:106D200097F99F6780E870E060E008959FEF80EC3E -:106D3000089500240A9416161706180609060895E1 -:106D400000240A9412161306140605060895092E47 -:106D50000394000C11F4882352F0BB0F40F4BF2BB6 -:106D600011F460FF04C06F5F7F4F8F4F9F4F0895F6 -:106D700057FD9058440F551F59F05F3F71F04795EC -:106D8000880F97FB991F61F09F3F79F087950895D1 -:106D9000121613061406551FF2CF4695F1DF08C0F0 -:106DA000161617061806991FF1CF8695710561050D -:106DB00008940895E894BB2766277727CB0197F9B5 -:106DC0000895F894FFCFEA101211651112116511A0 -:106DD00045117D1165117A128712121512151B15B6 -:106DE0001B151D151B151B151B151215121522152C -:106DF0001B151B152215671CDD1CE01CF41CF71C61 -:106E00000A1D131D371D7D1DAF1DC31D491D6C1DA2 -:106E1000052105215E215E2190213821382138216C -:106E2000AA211B222B222B22B52FB92FFC2F0D308C -:106E3000183037303A306D308E300A300A309930A1 -:0E6E40009C30A030C630E830EB30ED3012311F -:106E4E0001380200000001000000003802000000BE -:106E5E0005010000003802000000010600000038A5 -:106E6E0002000000010700000038020408000000C4 -:106E7E000000003802090C0000000000003802017A -:106E8E001500000000000036323331F7F6676697C2 -:106E9E00C6343500000000000180005F082E0E0D84 -:106EAE000E090E050EF4F5010021007F22000300ED -:106EBE004A004A4A01F6F731333236674C4159459A -:106ECE00520042617365200047616D65200052617A -:106EDE00697365004C6F776572004C4F434B0043EE -:106EEE00617073004E756D005363726C002020202C -:106EFE00202000534F4C415200544D5053540081AA -:106F0E008283E200E900EA00B500B600B700CD00CA -:106F1E008301CC008A0192019401210223022402F2 -:106F2E002502260227022A02B300B4006F00700069 -:106F3E000603060806010606AF0200FF0100010067 -:106F4E0000FFFF0000010001FF00000810181810DC -:106F5E0008000001020202020202020202024022A4 -:0E6F6E007B99017701FC00000C190C390C0016 +:104150007F906F905F900C94E70E8160809377045E +:1041600061E086950F900F900F900F900F90DF9168 +:10417000CF911F910F91FF90EF90DF90CF90BF9064 +:10418000AF909F908F907F906F905F900C94691686 +:1041900041EA57E16AEA77E10F900F900F900F9094 +:1041A0000F90DF91CF911F910F91FF90EF90DF90D3 +:1041B000CF90BF90AF909F908F907F906F905F90C7 +:1041C0000C9409094AEA57E161EA77E1E5CF45E352 +:1041D00056E16EE376E1E0CF4EE356E165E376E14A +:1041E000DBCF4DE156E169E276E1D6CF49E256E117 +:1041F0006DE176E1D1CF41E156E165E076E1CCCFEA +:1042000048E556E167E476E1C7CF0F900F900F9035 +:104210000F900F90DF91CF911F910F91FF90EF9032 +:10422000DF90CF90BF90AF909F908F907F906F90D6 +:104230005F900C94B4170E3D1C4509F0A7CD0F906C +:104240000F900F900F900F90DF91CF911F910F91D2 +:10425000FF90EF90DF90CF90BF90AF909F908F90A6 +:104260007F906F905F900C943618C8010E94A30B4A +:10427000D82E9ACD092F0F70907F11F00295007FF4 +:10428000812F2223C9F0002369F090E2910F98302A +:1042900010F011110BC080915F04082B00935F0494 +:1042A0000E94820B812F0E94570C17C080919102AF +:1042B000082B00939102F4CF0E941E0C002369F09A +:1042C0000095105E183010F0B11027C080915F0487 +:1042D000082300935F040E94820B98E0C91AD1085A +:1042E000E4E0CE16D10408F0C1CA0E94C20E0F90BD +:1042F0000F900F900F900F90DF91CF911F910F9122 +:10430000FF90EF90DF90CF90BF90AF909F908F90F5 +:104310007F906F905F900C94B81680919102082363 +:1043200000939102D8CF892F8F70907F903211F037 +:104330008295807FF1E0BF120CC0222329F0333038 +:1043400060F60E94140CC9CF323038F60E94090C76 +:10435000C4CF222341F03323A1F340FFA3CF4F70FA +:10436000F7014583EECF332389F3193309F0F5C004 +:10437000FFEF27EE33E0F15020403040E1F700C07E +:104380000000812F0E941E0CA8CF892F869586954C +:10439000837061F0813009F0A0CF812F93702111DB +:1043A00002C090E080E00E946E0897CF812F93704A +:1043B000211102C090E080E00E9484088ECF892FF6 +:1043C0008370A1F5211189CF812F82958695877001 +:1043D000880F880F412F4F70082E01C0440F0A9498 +:1043E000EAF7212F207114FF07C02FE030E001C051 +:1043F000220F8A95EAF720959695969593709230BC +:1044000081F0822F842B933030F48091920291308E +:1044100029F0242B82230E94050C5FCF842B822B52 +:10442000FACF242B809192028227F5CF8695222302 +:1044300011F0892F8170882309F44FCF812F829545 +:1044400086958770880F880F412F4F70082E01C006 +:10445000440F0A94EAF7212F207114FF07C02FE0C0 +:1044600030E001C0220F8A95EAF72095969596953F +:104470009370923081F0822F842B933030F48091AE +:104480007604913029F0242B82230E94791725CFBE +:10449000842B822BFACF242B809176048227F5CFB0 +:1044A000092F0F70222329F0802F0E949617812F49 +:1044B00048CF812F0E94090C802F0E948A170DCFB0 +:1044C000812FE1EF1E1789F1E11750F0F0EF1F1770 +:1044D000B9F02223B1F13111E5CE892F8F7129C0B6 +:1044E00042EF141749F153EF1513F3CF80E0222365 +:1044F00061F29F7181E001C0880F9A95EAF7C5CFFC +:10450000222379F0323008F0E8CE292F2F7181E094 +:1045100090E001C0880F2A95EAF7909176048927E8 +:10452000B4CF333008F0D9CEF0CF892F8F7122234A +:1045300021F20E949617D1CE892F8F712223C9F3C1 +:10454000BCCF332379F0893341F48FEF97EEE3E06A +:1045500081509040E040E1F712CF8FE39CE9019752 +:10456000F1F70DCF892F8F71A8CF0031FFE51F071D +:1045700009F4C3CB01312FE5120709F4DBCB0E940C +:1045800062086093F5027093F6028093F7029093AD +:10459000F802F7018281043F110509F438CD08F0D3 +:1045A00033CC0C32110509F443CD08F0C5CB0A30E9 +:1045B000110509F448CD0531110509F44FCD093035 +:1045C000110509F0C3CBF7018281882309F4BECB22 +:1045D000809176040E94CB0C813009F0B7CB81E347 +:1045E0000E94B313B3CB00313FE5130709F489CB25 +:1045F00001314FE5140769F682E084CB85E0DE01E6 +:10460000119601900D928A95E1F7F7012281898137 +:104610009A81211140C90E94A30B182F44C91F93EE +:10462000CF93DF9380915D02807FA9F480915A023D +:10463000882389F080918F02D0915E0260915802A8 +:1046400070915902A0915B02B0915C02C62FC72302 +:1046500016E0D81304C0DF91CF911F91089590E028 +:10466000109711F0CF3F19F401968770F2CF189F81 +:104670009001199F300D1124F901E15AFD4F41813C +:104680004713F2CF40814613EFCF42814111ECCF67 +:10469000438154814A1B5B0B403A510528F78091B6 +:1046A0005D028F70806180935D02F901EC59FD4FCE +:1046B00080818F708061808388E592E00E94161C63 +:1046C000DF91CF911F910C94990BAF92BF92CF9233 +:1046D000DF92EF92FF920F931F93CF93DF93CDB7AB +:1046E000DEB761970FB6F894DEBF0FBECDBF8C0169 +:1046F00085E0F801DE011D9601900D928A95E1F7A3 +:10470000F801E28088E5A82E82E0B82E60915B0275 +:1047100070915C026115710509F432C190915802E3 +:1047200040915902892F84238F3F09F429C12081A8 +:104730003181C380D480F0905A02F601E61BF70B5A +:10474000FF2009F4E8C080915D02582F507FE03AC5 +:10475000F10508F0ABC0511177C0FE2C431321C006 +:1047600092131FC0E1101DC08F70806180935D02A5 +:10477000C5010E94161C80915D02F80185838F2D72 +:1047800061960FB6F894DEBF0FBECDBFDF91CF911B +:104790001F910F91FF90EF90DF90CF90BF90AF905F +:1047A0000895CD2829F0822F83238F3F09F003C17C +:1047B00080E0F82FF170DF2E80FF3CC080918F02E7 +:1047C00040915E0256E0841315C02D873E878D858B +:1047D0009E850E94F414292F22952F702230F0F02C +:1047E000243018F59F70F1F0F8019581907FD1F495 +:1047F000D12C1EC090E0589FF001599FF00D11245C +:10480000E15AFD4F6181361306C06081261303C053 +:104810006281E6120FC001968770D5CF9F7011F0AC +:10482000882331F3805E883018F3C8010E94161C7B +:10483000FD2CA5CFEE2009F4A2CF80915D0281600E +:1048400080935D02F12C9BCF431306C0921304C0EA +:10485000F801EE2009F479C0C8010E9400158823F0 +:1048600009F1EE20F9F080915D02803270F0209124 +:1048700058023091590238872F831986DB86CA8601 +:104880008C87CE0107960E94161C86E0F801A8E5E9 +:10489000B2E001900D928A95E1F70E940F23FF2468 +:1048A000F3946DCFC8010E94161CF9CF51110AC0B4 +:1048B00088E592E00E94161C86E0F50111928A9527 +:1048C000E9F7C0CF43130FC092130DC0E1100BC026 +:1048D000F8018583C8010E94161C86E0F50111923B +:1048E0008A95E9F74CCFC8010E9400158823D1F2C0 +:1048F000EE20C1F280915D02803238F220915802A0 +:10490000309159023A8329831B82DD82CC828E83C7 +:10491000CE010196B8CFE03AF105F8F6FE2CEE2074 +:1049200009F243131FC092131DC080915D0280FDE8 +:1049300010C0982F907F69F0F8018583903F31F087 +:10494000982F907F905F8F70892B8583C8010E947C +:10495000161C86E0F801A8E5B2E001900D928A9558 +:10496000E1F70DCFC8010E94001581118ECF809113 +:104970005D02816080935D02C8010E94161CFFCE1B +:10498000EE2009F48FCFC8010E940015F82E88236D +:1049900009F488CF86E0F801A8E5B2E001900D9215 +:1049A0008A95E1F780915802909159020E94F4147F +:1049B0000E940F23E4CE81E08E25FBCE1F93CF9380 +:1049C000DF93CDB7DEB767970FB6F894DEBF0FBEA3 +:1049D000CDBF4B8B5C8B6D8B7E8B8F8B611110925F +:1049E00091021A8A198A85E0FE017396DE011D96EE +:1049F00001900D928A95E1F786E0FE013D96DE0179 +:104A0000179601900D928A95E1F7CE0107960E94C4 +:104A10006523882389F016E080918F0290915E02D1 +:104A200089134BC067960FB6F894DEBF0FBECDBF9B +:104A3000DF91CF911F91089586E0FE013796DE0148 +:104A4000119601900D928A95E1F78A859B85892BB5 +:104A500011F38F81988589238F3FE9F220915E02BF +:104A600030E0C90101968770992740918F0248175D +:104A7000190681F410925F040E94FA0F10925E02F0 +:104A800010928F0286E0E8E5F2E0DF011D928A9540 +:104A9000E9F7C1CF96E0929FD001939FB00D11240A +:104AA000A15ABD4FFE01319601900D929A95E1F702 +:104AB00080935E020E94990BAECF819FC0011124AA +:104AC000815A9D4F0E946523882309F4ABCF8091C2 +:104AD0008F0290E001968770992780938F029CCF78 +:104AE0009F92AF92BF92CF92DF92EF92FF920F937D +:104AF0001F93CF93DF93CDB7DEB764970FB6F894CB +:104B0000DEBF0FBECDBF8E010F5F1F4F8AE0D80101 +:104B10001D928A95E9F79EE4C92E91E0D92EF12CD9 +:104B2000E12CAA24A394B12CF60181916F018F3F4F +:104B300009F44AC0F894E82FE295EF70F0E021A163 +:104B40008F70A50102C0440F551F8A95E2F7CA0174 +:104B5000922F982B91A392A18095892382A30E94E2 +:104B6000BC0900C0E7E4F1E030E020E0912C419185 +:104B70004F3F09F47DC0A42FA295AF70B0E090968E +:104B80008C9190E04F7002C0959587954A95E2F719 +:104B900080FD6EC08A2D022E01C0880F0A94EAF7AC +:104BA000982A2F5F3F4F2730310509F7F6013197DB +:104BB00080818F3F11F00E94BE0950EA5A95F1F7AB +:104BC000F801EE0DFF1D90828FEFE81AF80A95E0CC +:104BD000E916F10409F0A8CF4AE050E0B80188EDE9 +:104BE00092E00E949B357C01892B41F08AE0F8011C +:104BF000A8EDB2E001900D928A95E1F71091E302E1 +:104C0000E114F104B9F181E0809395020E940A1C3D +:104C100090939402809393028091930290919402D6 +:104C20000E94FB1B069770F0A8EDB2E0E12FF0E0C8 +:104C3000E15BFC4F8D91819322E0AD3DB207D1F74E +:104C40001092950281E090E0EF28C1F064960FB6D3 +:104C5000F894DEBF0FBECDBFDF91CF911F910F91B2 +:104C6000FF90EF90DF90CF90BF90AF909F9008950E +:104C700080E096CF809195028111CECF0E949F0E49 +:104C8000B82EE091E302882309F4C7C08E01005FCB +:104C90001F4F85E0D8011D928A95E9F7F0E09F014A +:104CA000215B3C4F79018091D102AE014B5E5F4F99 +:104CB0006A018A3008F086C044E75AE1B801C701AA +:104CC0000E945B0E882309F494C041EE57E2B801BC +:104CD000C7010E945B0E882309F48BC04BE958E1A1 +:104CE000B801C7010E945B0E882309F482C047E81F +:104CF00059E1B801C7010E945B0E882309F479C00D +:104D000045E659E1B801C7010E945B0E882309F40A +:104D100070C01092D102E091E202F0E0AF01415B7D +:104D20005C4FD80110E0FA019191AF018D91981775 +:104D300031F09F0121503109F90180831B2DCA16E2 +:104D4000DB0689F780919C02882371F080919A029A +:104D500090919B020E94FB1B893E934028F082EEBB +:104D60000E941E0C10929C0288E9C82E82E0D82E68 +:104D7000F12CE12CD6018D916D018823D1F086951F +:104D8000F70109F447C0EC50FE4F808191819C8768 +:104D90008B871D860E940A1C8160782F9F878E87D3 +:104DA000F601319710824B855C856D858F850E9459 +:104DB000DE24B2E0EB0EF11CE4E0EE16F104D1F6D5 +:104DC000812F44CF80919602909197020E94FB1B05 +:104DD000843F914008F070CFA091E202B0E0A15B67 +:104DE000BC4FF8011D921192CE16DF06D9F71B2D8C +:104DF000A9CF8091D1028F3F31F08F5F8093D10294 +:104E00008A3008F488CF0E940A1C909397028093FE +:104E10009602E2CFE051FE4FB8CFF0E0E15BFC4FED +:104E2000F89485E0A0EBB2E001900D928A95E1F74D +:104E300065E070E080EB92E00E94F3088093AF029F +:104E40000E94BC09F894E091EB02F0E0E851FD4FBC +:104E500080818B878093B60261E070E0CE010B9673 +:104E60000E94F3088093B5020E94BC09F894C09098 +:104E7000B702D090B802E090B902F090BA028091E7 +:104E80009D0290919E02A0919F02B091A002C8162F +:104E9000D906EA06FB06D1F0C0929D02D0929E028E +:104EA000E0929F02F092A0020E949F0E81110EC01C +:104EB0000E946208C61AD70AE80AF90AC092D2020A +:104EC000D092D302E092D402F092D5020E94BC09A3 +:104ED000F8948091C202882321F184FF04C090914C +:104EE000C30290935C0380FF0DC08091BB0280FFE2 +:104EF00025C09091770491609093770460E0869547 +:104F00000E9469168091C20281FF09C020E0409191 +:104F1000BE026091BD028091BC020E9452151092A7 +:104F2000C2020E94BC09F8948091C402882349F00F +:104F30000E94B30D0E94BC0980E088CE0E94E50F5C +:104F4000E1CF0E94980DF6CFEF92FF920F931F933F +:104F5000CF93DF9300D000D00F92CDB7DEB7162FDE +:104F6000E82EF12CC701880F991F662339F18C5068 +:104F70009E4FFC01808191819A83898301E00B839C +:104F80000E940A1C8160782F9D838C83F701E8566C +:104F9000FD4F0127110F102B108349815A816B811E +:104FA0008D810F900F900F900F900F90DF91CF9108 +:104FB0001F910F91FF90EF900C94DE2480519E4F33 +:104FC000D8CFCF92DF92EF92FF920F931F93CF93A0 +:104FD000DF930F92CDB7DEB7EE24E394F12C06EB0E +:104FE00012E09E012F5F3F4F4BEA52E063E082E008 +:104FF0000E94C519082F882321F1C090E5028C2D4D +:1050000090E09C0128513D4F79011981F90180817F +:10501000181BD12E80E00AC0DA94F70180818F5FDF +:10502000808360E08C2D0E94A427802F1D14A4F3A0 +:10503000912F17FD90E0191B11110EC081110E94D4 +:10504000800B802F0F90DF91CF911F910F91FF90D8 +:10505000EF90DF90CF9008951F5FF701808181501E +:10506000808361E08C2D0E94A427802FE5CF1F92C2 +:105070001FB61F9211248F939F93AF93BF9380917C +:105080005604811113C08091570490915804A09147 +:105090005904B0915A044196A11DB11D8093570443 +:1050A00090935804A0935904B0935A04BF91AF91C0 +:1050B0009F918F911F901FBE1F901895CDB7DEB79F +:1050C000E9970FB6F894DEBF0FBECDBF84B7877FD8 +:1050D00084BF0FB6F894A895809160008861809392 +:1050E0006000109260000FBE80E890E00FB6F89468 +:1050F00080936100909361000FBE85B7806885BF83 +:1051000085B7806885BF8AEB99E090932F028093E2 +:105110002E020E94D5060E94A0078091E2008460C2 +:105120008093E200789480916C048823A1F0109120 +:10513000E9001F709091EC00892F817090FD80E84C +:10514000182B1092E9008091E80083FD0E94031063 +:105150001F701093E90082E084BD93E095BD9AEF43 +:1051600097BD80936E001092D2021092D3021092DB +:10517000D4021092D5020E942715811102C00E940C +:1051800083140E949F0E80935801809158018823B8 +:1051900009F4C6C010926F0185E2809370010E94ED +:1051A0009F0E81110E9490338091580181112FC070 +:1051B000FE01359686E0DF011D928A95E9F786E6C5 +:1051C000898387E98A8386EC8B8384E38C8385E3F8 +:1051D0008D833497AEE4B1E0CE010B9621912D93EF +:1051E0008E179F07D9F787E0E5E7F1E0DE0191969A +:1051F00001900D928A95E1F7FE01B196A7E4B1E026 +:10520000CE01889621912D938E179F07D9F7809113 +:10521000580195E0811190E09093E30285E0891BAD +:105220008093E2020EE411E0A3E5EA2EA1E0FA2E5B +:10523000F80181918F018F3F11F00E94BE09E016A5 +:10524000F106B1F707E411E0FEE4EF2EF1E0FF2EE6 +:10525000D8018D918D018F3F11F00E94BE09E0169B +:10526000F106B1F7E8EDF2E082EE92E0AFE4B3E0F0 +:1052700011921D928E179F07D9F70E94B11A8111C2 +:1052800002C00E94361882E090E00E94B1358093FF +:10529000440384E090E00E94B135182F82E290E050 +:1052A0000E94B135982F812F9093D7028093D60218 +:1052B0000E947025EFE7FBEB3197F1F700C000008B +:1052C0000E94702580914F0380FF2EC06FEF7FEF0B +:1052D00090E080E00E94E33581E08093E00080E28E +:1052E0008093D8001092C9008FE19EE40197F1F7F6 +:1052F00000C0000087E090EBDC0180938006909373 +:105300008106A0938206B093830688E19CE00FB6E5 +:10531000F894A895809360000FBE90936000FFCF33 +:1053200085E280936F0139CF83E090E00E94B13530 +:105330000E94050C809176040E94D0160E94B11A3A +:10534000811102C00E94361888E190E00E94B935B0 +:1053500060933D0470933E0480933F049093400417 +:10536000672B682B692B11F40E9406180E9491315B +:1053700067E081E00E94A71365E586E10E94A7131C +:1053800063E687E10E94A71360EA8AE10E94A713FF +:1053900069E98BE10E94A71365EF8CE10E94A713D6 +:1053A00060EA8DE10E94A71360E38EE10E94A713DB +:1053B00066E083E00E94A71361E08CE00E94A713DF +:1053C00060E081E00E94A71360E08CE00E94A713D8 +:1053D0006FE084E00E94A71361E08CE00E94A713B5 +:1053E0000E949F0E811102C00E94933383E080933C +:1053F0001A0380E2809343040E9491316DE070E0D3 +:105400008CE992E00E94680D892BE9F580911A03DE +:1054100063E070E081FD9EC289E992E00E94680D20 +:10542000892B89F56DE070E089E892E00E94680DB3 +:10543000892B49F50E9462086058774C8E4F9F4F28 +:1054400060934A0470934B0480934C0490934D04F2 +:10545000EEE7F4E080E092E0DF019C011D92215034 +:105460003040E1F7F0937F06E0937E068FEF9FEFE9 +:1054700090937D0480937C0481E080934F0480931B +:105480004E0410921B038091E402811136C00E94E9 +:10549000B11A811104C00E9436180E94C31788E017 +:1054A00090E00E94B93560937704709378048093FC +:1054B000790490937A0480915B03836080935B030B +:1054C0006E7F71F40E94C31788E090E00E94B935A6 +:1054D00060937704709378048093790490937A04AE +:1054E0000E940E098091770480FF04C060E08695D9 +:1054F0000E94691681E08093E40280915801811135 +:1055000006C084EF8093660185EF8093650120914A +:105510006601A22FA295AF70B0E091963C91919751 +:105520002F7081E090E0BC01022E01C0660F0A944A +:10553000EAF7462F4095432391964C939197929684 +:105540003C919297362B92963C93929740916501AD +:10555000E42FE295EF70F0E031A14F70042E01C00E +:10556000880F0A94EAF7982F9095932391A392A11C +:10557000892B82A390968C9190E002C09595879597 +:105580002A95E2F7817020A130E002C03595279579 +:105590004A95E2F792E020FF90E0892B8093EC029D +:1055A0008091580111E081278093EB02312F381B45 +:1055B0003093E5020E94913140E060E080E00E947B +:1055C000210D60E08AE00E94691689EA92E09093DA +:1055D0005E0380935D0381E00E94791780EE90E086 +:1055E00090935A0180935901109332030E94410D08 +:1055F0008BE591E090935304809352043E018DE338 +:10560000680E711C80916C04FF24F39400E112E198 +:10561000853009F4F2C10E947025E82E81110E94A4 +:105620006208E5E4F3E0AFE4B3E010E000E0B02EA0 +:10563000DD9081918D1509F404C28D25C12CFF24C4 +:10564000F394982F9F2109F4F7C10E949F0E88239D +:1056500099F0CEA6BFA6DF2081E009F480E088ABF8 +:105660000E940A1C8160782F9AAB89AB4EA55FA57A +:1056700068A98AA90E94DE24F801EB5BFC4F8081B7 +:10568000F826F0828091EC02E82FEE0FEE0F909159 +:105690006601A92FA295AF70B0E090962C9130E0F2 +:1056A0009F7002C0359527959A95E2F721703327B0 +:1056B00090916501A92FA295AF70B0E090964C91A2 +:1056C00050E09F7002C0559547959A95E2F7CA0140 +:1056D0008170992740FF02C082E090E0822B8E2BE0 +:1056E0008093EC021091EB028F70E82FF0E0E6500F +:1056F000FE4F80819091EA02890F8093EA02F12C9B +:1057000084306CF0E12FF0E0E851FD4F80818F5F35 +:10571000808360E0812F0E94A427FF24F39480916E +:10572000EA028D3F6CF4E12FF0E0E851FD4F8081FB +:105730008150808361E0812F0E94A427FF24F3948D +:105740008091EA02082E000C990B64E070E00E9440 +:1057500071358093EA02F1100E94800B80914F0412 +:10576000882351F180911C0390911D030E94FB1B23 +:10577000C29708F07DC120917C0430917D042115F1 +:10578000310509F0A0C280914E048823A9F00E943F +:10579000620800914A0410914B0420914C0430910E +:1057A0004D04601B710B820B930B6F3F7F4F8F4F2C +:1057B0009F4710F40E94980DE11001C0F1100E9463 +:1057C000B30D809142038A3008F0BAC38091400340 +:1057D000909141030E94FB1B089708F4B1C304E6B3 +:1057E00010E025E030E04BE353E064E084E10E9408 +:1057F000DC32892B09F075C31092420320913203E9 +:10580000222359F080913B0390913C0398278927EC +:10581000982790933C0380933B0386E0E4E2F3E017 +:10582000DE01919601900D928A95E1F786E0FE01E6 +:10583000B196DE01119601900D928A95E1F786E00E +:10584000FE013196A5E3B3E001900D928A95E1F750 +:1058500090913F038091360397FD3AC38E7F8093EA +:1058600036038091330390913403009709F02AC3E3 +:1058700060913B0380913C0300913D0310913E03F6 +:10588000222309F4F2C241E00E94FB0C2091300374 +:1058900030913103820F931F909331038093300333 +:1058A00041E0602F812F0E94FB0C20912E0330914C +:1058B0002F03820F931F90932F0380932E0360E397 +:1058C00073E08AE393E00E94DC0C6EE273E089E30C +:1058D00093E00E94DC0C109237031092380386E0AC +:1058E000E5E3F3E0DE01119601900D928A95E1F770 +:1058F00086E0FE013196A4E2B3E001900D928A9514 +:10590000E1F730912603209127039091280380919D +:10591000290370912003609121034091220350914B +:105920002303F0912503E0911F03FE13E0C233230C +:1059300011F07313DCC2222311F02613D8C288237E +:1059400011F08513D4C2992319F081E04913D0C214 +:1059500080E0CEC286E992E061CD80916C04843013 +:1059600009F43BC00E94980D40E060E080E00E9496 +:10597000210D80E00E94B8168091E702811109C0D4 +:10598000F092E7028091770481708093E6020E9492 +:10599000E50F10925604A8E1B0E0E0E40FB6F894E9 +:1059A000A895A09360000FBEE093600083B7817F4D +:1059B000846083BF83B7816083BF7894889583B701 +:1059C0008E7F83BF0FB6F894A895809160008861A0 +:1059D00080936000109260000FBE80916B0488235A +:1059E00061F00E947025EFE4F3E08191811178C4A9 +:1059F00029E533E02E173F07C1F780916C0485300D +:105A000009F4ABCF10925F040E94FA0F0E94C20EFD +:105A10000E94B8161092E7028091E602882349F0AE +:105A20008091770481608093770460E086950E947E +:105A300069160E94410DEFCDC394FF0C37E0C312ED +:105A400000CE0F5F1F4F0A30110509F0F0CD8FEF28 +:105A50008BAB8CAB1DAA0E940A1C8160782F9FAB78 +:105A60008EAB4BA95CA96DA98FA90E94DE240ACE3A +:105A70000E940A1C90931D0380931C0360E080E049 +:105A80000E949A080E94C20E8093F9020E949F0E03 +:105A9000882331F14091F5025091F6026091F702AE +:105AA0007091F8022FB7F8948091570490915804A0 +:105AB000A0915904B0915A042FBF841B950BA60BDB +:105AC000B70B81339547A105B10540F00E94980DB1 +:105AD00080914F04882309F456CE4DCE0E94B30D19 +:105AE0000E949F0E882309F4D5C061E080E00E94E7 +:105AF0009A0860E08CE791E00E948B1362E080E0FE +:105B00000E949A08809176040E94CB0C823009F49E +:105B10009BC008F090C0882309F496C0813009F436 +:105B200099C065E080E00E949A0860E08AE991E00F +:105B30000E948B1366E080E00E949A086091F9024F +:105B4000669561708FE991E00E948B1367E080E0B9 +:105B50000E949A086091F9026095617084EA91E070 +:105B60000E948B1368E080E00E949A086091F9021D +:105B700062FB662760F988EA91E00E948B137DA69C +:105B80006CA64091F1025091F2026091F302709183 +:105B9000F4022FB7F8948091570490915804A09183 +:105BA0005904B0915A042FBF841B950BA60BB70B59 +:105BB0008D329140A105B10508F48ACF0E94620898 +:105BC0006093F1027093F2028093F3029093F402D7 +:105BD0008091F002811104C080916701811142C05F +:105BE0006DE080E00E949A0860E08DEA91E00E94FA +:105BF0008B136AE080E00E949A0881E0809367013D +:105C00008091EF0290E00196817099278093EF02D6 +:105C100021E030E0281B390B40E6429FC001439F42 +:105C2000900D11242091EE02222351F1855C9B4FAF +:105C30000E9492064DCF833089F0843009F071CFF5 +:105C400060E08EE891E003C060E082E891E00E94AD +:105C50008B1367CF60E088E891E0F9CF60E084E9DA +:105C600091E0F5CF6AE080E00E949A0860E08DEA5A +:105C700091E00E948B136BE080E00E949A08C0CFF5 +:105C80002091ED02222319F085589C4FD1CF8554E5 +:105C90009D4FCECF64E080E00E949A0860E083EBE5 +:105CA00091E00E948B1365E080E00E949A0860E01A +:105CB00089EB91E00E948B1369E080E00E949A08D2 +:105CC0008BEF94E0B5CF80911B0361E070E0811110 +:105CD0005ACD082F10E02B01082E02C0440C551C91 +:105CE0000A94E2F7A90144215521452B09F448C043 +:105CF00090911A0390FD46C08295880F807680931C +:105D00006A019801369527953695279520936D0160 +:105D1000815E80936B0110926E0124E630E047E0D3 +:105D200050E068E671E088E70E948832892B09F02C +:105D30002ACDA80175E0440F551F7A95E1F78091AF +:105D40001A0380FD2DC042585B4F04E610E020E2AC +:105D500030E060E488E70E94AF32892B09F013CD70 +:105D60000E94B30DC2018095909540907C045090A4 +:105D70007D044822592250927D0440927C0403CD38 +:105D80008F5FA7CF880F880F880F80936A011092CA +:105D90006D01895F80936B0183E080936E01BDCFBD +:105DA000EAEFF2E080E2DF011D928A95E9F7EEE08A +:105DB000F2E0F9AFE8AF0AE012E099249394A8ADBD +:105DC000B9AD2D91B9AFA8AFF80121908F01240E84 +:105DD000352E311CC10182589B4F1C01E22FF0E08F +:105DE000E650FD4F30E020E067E0A62EA21AB92C65 +:105DF000022E01C0BB0C0A94EAF7610190E0D601C3 +:105E00008D916D018B216A2D691B6770862E062E80 +:105E1000000C770BB82F01C0BB0F8A94EAF78B2ECA +:105E20007195619571096770772701C086956A95AC +:105E3000EAF7882A8081882A80829F5F9830F9F665 +:105E40002F5F3F4F31962830310571F6E2E1F2E0E5 +:105E500028AD39ADE217F30709F0B1CF04E610E041 +:105E600020E230E04AEF52E074CF45E00E94FB0CA4 +:105E700020912C0330912D03281B390B30932D03D7 +:105E800020932C0345E0602F812F0E94FB0C209172 +:105E90002A0330912B03281B390B30932B032093BB +:105EA0002A036CE273E087E393E00E94DC0C6AE271 +:105EB00073E088E393E00E94DC0C10923A031092A6 +:105EC00039030DCD0197909334038093330307CDAD +:105ED00081608093360384E00E94B31384E190E0F4 +:105EE000F2CF809142038F5F80934203F8CC81E030 +:105EF00080FF0FC0E0915204F0915304309749F0B5 +:105F000082E0809324030480F581E02D84E293E015 +:105F100009951092260310922703109228031092DD +:105F2000290386E0E4E2F3E0AEE1B3E001900D92F4 +:105F30008A95E1F70E940A1C9093410380934003E5 +:105F40000E94C20E90914303891731F00E94C20E45 +:105F5000809343030E94B81680916C04843009F04A +:105F600051CB83E08093E9008091E80082FF4ACB27 +:105F70008091E80090E085FF0BC00E94F40630E2BB +:105F8000E32EF12C8E010F5F1F4F8823E1F091E08B +:105F90008091E8008B778093E800992309F432CB55 +:105FA000E981E150E33108F071C0F0E0E05BF84CCA +:105FB0000C9485358091F100D8018D938D01B1E06D +:105FC000EB1AF10821F38091E80085FDF3CF809171 +:105FD000E8008B778093E8000E94F406882399F309 +:105FE000D6CF1A8289E08B8311C08A81823009F46E +:105FF0008FC1833091F1813009F048C00E9462085E +:106000000E948B356B837C838D839E8380916C048F +:10601000843009F0F7CA1091E9001F709091EC00EC +:10602000892F817090FD80E8182B82E08093E90031 +:106030008091E80080FF0DC050E040E060E270E039 +:10604000CE0101960E9425078091E8008E7780930B +:10605000E8001F701093E900D5CADE011396EFE443 +:10606000F3E081918D9323E0E935F207D1F7CECFAC +:106070008A81823059F46B817C818D819E810E945E +:106080008B3586E290E00E94C535C0CF8FEF8983C3 +:10609000BDCF4C816B818A810E94921498278927F9 +:1060A00098279E838D83B2CF0D811E8110270127F3 +:1060B00010278A81EB803EE0E39E700111249CE86A +:1060C000899FE00CF11C11248C8190E0880F991FAE +:1060D000E80EF91E612FC70187960E94C535602F13 +:1060E000C7018896D0CF0E94161490CF8A8181383C +:1060F000C1F060F4803809F089CF20E04B816091D5 +:106100007904809178040E94521580CF8238E9F09A +:10611000833809F07BCF20E040917A046C818B8139 +:10612000F2CF60E08B810E9469168B81811103C0E0 +:106130000E94E50F6BCF8091770481608093770494 +:1061400060E086950E94691661CF8B8180937B0405 +:106150005DCF8A81813899F030F4803809F056CFCC +:1061600080917A0440CF823891F0833809F04ECF85 +:10617000809178048B83809179048C8347CF8091C0 +:10618000770480FF02C086952ECF80E02CCF8091CF +:106190007B0429CF60917704709178048091790411 +:1061A00090917A040E94401531CF80E18A832ECFEE +:1061B00081E08A838DE117CFCA80DB80DC24CD2487 +:1061C000DC248E010F5F1F4FEC80E00EF12EF11CDE +:1061D000C6018D519D4F0E151F0509F417CFADE176 +:1061E000CA16A1E0DA0650F40E94B135F8018483A2 +:1061F000BFEFCB1ADB0A0F5F1F4FEACFD80114960F +:106200001C92F6CF0A811B81102701271027FE015F +:1062100031966F01EC80E00EF12EF11CC8018D511A +:106220009D4FE016F10609F4F1CE0D31F1E01F07A4 +:1062300028F4D60114966C910E94C535BFEFCB1A95 +:10624000DB0A0F5F1F4FEACF0E940614DFCE85E006 +:10625000ADCFCA80DB80DC24CD24DC248E010F5F2F +:106260001F4FEC80E00EF12EF11CC6018796E01660 +:10627000F10609F4CBCEECEBCE16E2E0DE0658F4E4 +:106280000E94B135D80114968C93FFEFCF1ADF0A24 +:106290000F5F1F4FEACFF8011482F7CF0A811B81ED +:1062A0001027012710279E012F5F3F4F6901EC80C7 +:1062B000E00EF12EF11CC8018796E016F10609F4F4 +:1062C000A5CE0C3B32E0130728F4D60114966C914E +:1062D0000E94C535BFEFCB1ADB0A0F5F1F4FEBCF14 +:1062E00009BD19BD09B400FEFDCF8091D8008F7D96 +:1062F0008093D8008091E00082608093E0008091DC +:10630000E00081FDFCCF10925F040E94FA0F75CB74 +:1063100086E290E00E94B1351B821C821D828E8332 +:1063200075CE1092B9008CE08093B80008959F92CA +:10633000AF92BF92CF92DF92EF92FF920F931F9393 +:10634000CF93DF93B82EEB010E940A1C6C01EE2460 +:10635000E394F12CC431D10560F025E0E22EF12C5C +:10636000CF3FDC0731F0CE0164E170E00E9451358F +:106370007B0184EAA82E94E8992E1092BC00A0928A +:10638000BC000E940A1C8C018091BC0087FF0DC0DC +:106390008091B900887F883039F18091B900887F79 +:1063A000803111F10FEF1FEF09C00E940A1C801B02 +:1063B000910B8E159F0540F30EEF1FEFCF3FDC07CB +:1063C000E1F2C6010E94FB1B8C179D07B0F2C801C9 +:1063D000DF91CF911F910F91FF90EF90DF90CF90C1 +:1063E000BF90AF909F900895B092BB009092BC0078 +:1063F0000E940A1C8C018091BC0087FF0AC080911A +:10640000B900887F883111F0803461F610E000E037 +:10641000DECF0E940A1C801B910B8E159F0558F33E +:10642000CBCF0F931F93CF93DF93EB018093BB00F0 +:1064300084E88093BC000E940A1C8C018091BC00FF +:1064400087FF11C02091B900287F81E090E02832B9 +:1064500011F490E080E0919581959109DF91CF91C1 +:106460001F910F910895CF3FDC0741F30E940A1C52 +:10647000801B910B8C179D0708F38EEF9FEFEECFDB +:106480000F931F93CF93DF93EC0184EC8093BC00B8 +:106490000E940A1C8C018091BC0087FF08C080917B +:1064A000BB0090E0DF91CF911F910F910895CF3FF6 +:1064B000DC0789F30E940A1C801B910B8C179D0737 +:1064C00050F38EEF9FEFEECF0F931F93CF93DF9399 +:1064D000EC0184E88093BC000E940A1C8C0180912E +:1064E000BC0087FF08C08091BB0090E0DF91CF9196 +:1064F0001F910F910895CF3FDC0789F30E940A1C7A +:10650000801B910B8C179D0750F38EEF9FEFEECF02 +:10651000CF92DF92EF92FF920F931F93CF93DF936F +:106520006B018A017901B9010E949731E6010C0DD6 +:106530001D1DC017D10761F424E92093BC00DF9131 +:10654000CF911F910F91FF90EF90DF90CF90089522 +:1065500097FDF2CFB70189910E941132EACFCF9215 +:10656000DF92EF92FF920F931F93CF93DF93C62F8B +:106570006A017901B8010E94973197FD0CC0B801FA +:106580008C2F0E941132E601EC0CFD1CCE15DF05AC +:1065900011F097FF0CC024E92093BC00DF91CF914C +:1065A0001F910F91FF90EF90DF90CF900895B80169 +:1065B00089910E941132EACFCF92DF92EF92FF923F +:1065C0000F931F93CF93DF93F82EE62EEA01690114 +:1065D000B8010E94973197FD15C0B8018E2D0E9419 +:1065E000113297FD0FC0B8018F2D81600E94973145 +:1065F000F12CE12C21E0C21AD108EC14FD0400F5C5 +:1066000097FF11C024E92093BC001816190614F452 +:1066100090E080E0DF91CF911F910F91FF90EF907C +:10662000DF90CF900895C8010E94403297FD04C0CA +:10663000FE01EE0DFF1D80832FEFE21AF20ADDCF7F +:1066400097FDE0CFC8010E94643297FDDBCFCC0DEF +:10665000DD1D8883D7CF84E98093BC0008958EE147 +:106660004A9B02C08150E1F74A9BFECF08955A9899 +:1066700080E28A95F1F75A9A0895FC013BE03A9539 +:10668000F1F798E020E080E031E040E14A95F1F751 +:10669000880F4A9B02C08160232742E04A95F1F7A8 +:1066A000000040E14A95F1F7915079F790E19A9511 +:1066B000F1F799B132E03A95F1F7000040E14A95DF +:1066C000F1F792FB992790F992272081920F9083FE +:1066D0000895EF92FF920F931F93CF93DF930F9242 +:1066E000CDB7DEB719828C017C01E60EF11C0E15C8 +:1066F0001F0561F481E09981911180E00F90DF9195 +:10670000CF911F910F91FF90EF9008950E942F332A +:10671000CE0101960E943D33F80181938F01E7CFAE +:10672000529A5A9A089552985A9AEA9AE9E6F0E0EB +:1067300080818F7C808308956150770B91E001C048 +:10674000990F6A95EAF720E031E0911108C0222301 +:1067500091F05A9A80E28A95F1F75A980895492F54 +:10676000482339F05A9A232740E24A95F1F7969543 +:10677000ECCF5A98F9CF5A98EDCFFF920F931F9311 +:10678000CF93DF93EC018C01060F111DC017D107C9 +:1067900031F4DF91CF911F910F91FF900895F990FF +:1067A0000E94373368E08F2D0E949C33EFCF1F92F9 +:1067B0000F920FB60F921124EF92FF920F931F9337 +:1067C0002F933F934F935F936F937F938F939F93F9 +:1067D000AF93BF93EF93FF93CF93DF930F92CDB718 +:1067E000DEB719820E942F33CE0101960E943D33FD +:1067F000A82FA695A695A695282F229525709A2FA5 +:106800009570290F922F937026952695920F9827B1 +:1068100097708981982B09F075C0A83008F072C074 +:1068200080E18A95F1F75A9A529AB2E0BA95F1F757 +:1068300000C05A98EA2EF12CEAE0AE9FD001112454 +:10684000AF5FBE4F1896ED91FC9119973097B1F05C +:106850006091F8017091F90116962D913C9117976E +:10686000260F371F13968D919C911497680F791FEF +:1068700015964C91159712968C9109958AE08E9DEC +:10688000F0018F9DF00D1124EF5FFE4F65816623AF +:1068900051F02091F8013091F90186819781820FA2 +:1068A000931F0E94BD330E943733F0E1FA95F1F750 +:1068B0005A9852985A9A80E18A95F1F78AE08E9D0B +:1068C00080018F9D100D11240F5F1E4FD80112966D +:1068D0006C911297662371F12091F8013091F901C2 +:1068E00013968D919C91820F931F0E946933D8015A +:1068F000ED91FC91882311F088E001C082E0808353 +:106900000E942F330F90DF91CF91FF91EF91BF91B4 +:10691000AF919F918F917F916F915F914F913F9137 +:106920002F911F910F91FF90EF900F900FBE0F903E +:106930001F901895ED91FC91DFCF0F931F93CF938C +:10694000DF93EC0108970CF0A9C08AE08C9FF0015E +:106950008D9FF00D1124EF5FFE4F80819181892B77 +:1069600009F49CC0F894529A5A9885E08A95F1F7F8 +:1069700000008C2F869585709C2F9570890F982F1D +:10698000937086958695890F8E0193E0000F111FF5 +:106990009A95E1F7082B0E94373300C068E0802FFA +:1069A0000E949C33A0E1AA95F1F752985A9A4A9B0B +:1069B00027C087E090E04A9925C08AE08C9F80013B +:1069C0008D9F100D11240F5F1E4FF8016581662306 +:1069D000A1F12091F8013091F90186819781820F10 +:1069E000931F0E946933811128C0529A5A9AD80184 +:1069F000ED91FC9182E08083789482E090E016C073 +:106A000000C0D5CF0197B9F4529A5A9A8AE08C9F68 +:106A1000F0018D9FF00D1124EF5FFE4F0190F0818A +:106A2000E02D81E08083789481E090E0DF91CF9148 +:106A30001F910F91089500C0BECF0E942F33B0E286 +:106A4000BA95F1F75A98529AE0E1EA95F1F78AE09F +:106A50008C9FF0018D9FF00D1124EF5FFE4F62813E +:106A6000662351F02091F8013091F90183819481DE +:106A7000820F931F0E94BD330E9437338AE08C9FA0 +:106A8000F0018D9FF00D1124EF5FFE4F0190F0811A +:106A9000E02D1082789490E080E0C8CF84E090E010 +:106AA000C5CFAA1BBB1B51E107C0AA1FBB1FA6175E +:106AB000B70710F0A61BB70B881F991F5A95A9F7A7 +:106AC00080959095BC01CD010895991B79E004C093 +:106AD000991F961708F0961B881F7A95C9F780951D +:106AE000089597FB072E16F4009407D077FD09D080 +:106AF0000E94513507FC05D03EF4909581959F4F3B +:106B00000895709561957F4F0895EE0FFF1F0590D2 +:106B1000F491E02D0994692796276927782787271C +:106B200078270895FB01DC0102C005900D924150C9 +:106B30005040D8F70895FB01DC0104C08D9101900D +:106B4000801921F441505040C8F7881B990B0895D3 +:106B5000FB01DC0102C001900D9241505040D8F77A +:106B60000895F999FECF92BD81BDF89A992780B515 +:106B70000895A6E1B0E044E050E00C94EB35A8E1C4 +:106B8000B0E042E050E00C94EB35262FF999FECFAF +:106B900092BD81BDF89A019700B4021639F01FBA70 +:106BA00020BD0FB6F894FA9AF99A0FBE089503968D +:106BB000272F0E94C6350E94C535252F0E94C63555 +:106BC000242F0C94C6350196272F0E94C6350C94AD +:106BD000C535DC01CB01FC01F999FECF06C0F2BD41 +:106BE000E1BDF89A319600B40D9241505040B8F78B +:106BF00008950E943B3608F481E00895E89409C0A6 +:106C000097FB3EF490958095709561957F4F8F4FDF +:106C10009F4F9923A9F0F92F96E9BB279395F695F5 +:106C2000879577956795B795F111F8CFFAF4BB0F73 +:106C300011F460FF1BC06F5F7F4F8F4F9F4F16C0D7 +:106C4000882311F096E911C0772321F09EE8872F61 +:106C5000762F05C0662371F096E8862F70E060E01D +:106C60002AF09A95660F771F881FDAF7880F969596 +:106C7000879597F90895990F0008550FAA0BE0E83A +:106C8000FEEF16161706E807F907C0F012161306EE +:106C9000E407F50798F0621B730B840B950B39F42E +:106CA0000A2661F0232B242B252B21F408950A2694 +:106CB00009F4A140A6958FEF811D811D08950E94C2 +:106CC00072360C94E3360E94D53638F00E94DC36DA +:106CD00020F0952311F00C94CC360C94D23611246C +:106CE0000C9417370E94F43670F3959FC1F3950FFB +:106CF00050E0551F629FF001729FBB27F00DB11D40 +:106D0000639FAA27F00DB11DAA1F649F6627B00DCF +:106D1000A11D661F829F2227B00DA11D621F739FB8 +:106D2000B00DA11D621F839FA00D611D221F749FC6 +:106D30003327A00D611D231F849F600D211D822F0D +:106D4000762F6A2F11249F5750409AF0F1F0882334 +:106D50004AF0EE0FFF1FBB1F661F771F881F915061 +:106D60005040A9F79E3F510580F00C94CC360C940E +:106D700017375F3FE4F3983ED4F386957795679590 +:106D8000B795F795E7959F5FC1F7FE2B880F911D8B +:106D90009695879597F9089597F99F6780E870E031 +:106DA00060E008959FEF80EC089500240A94161681 +:106DB000170618060906089500240A9412161306E9 +:106DC000140605060895092E0394000C11F4882377 +:106DD00052F0BB0F40F4BF2B11F460FF04C06F5F93 +:106DE0007F4F8F4F9F4F089557FD9058440F551F69 +:106DF00059F05F3F71F04795880F97FB991F61F03D +:106E00009F3F79F087950895121613061406551FB3 +:106E1000F2CF4695F1DF08C0161617061806991F1F +:106E2000F1CF86957105610508940895E894BB2714 +:106E300066277727CB0197F90895F894FFCFEA10DA +:106E4000121165111211651145117D1165117A122A +:106E50008712121512151B151B151D151B151B1559 +:106E60001B151215121522151B151B152215671C53 +:106E7000DD1CE01CF41CF71C0A1D131D371D7D1DB5 +:106E8000AF1DC31D491D6C1D3A213A219321932149 +:106E9000C5216D216D216D21DF21502260226022EC +:106EA000F12FF52F38304930543073307630A93017 +:106EB000CA3046304630D530D830DC30023124314B +:066EC000273129314E319B +:106EC6000138020000000100000000380200000046 +:106ED600050100000038020000000106000000382D +:106EE600020000000107000000380204080000004C +:106EF6000000003802090C00000000000038020102 +:106F06001500000000000036323331F7F667669749 +:106F1600C6343500000000000180005F082E0E0D0B +:106F26000E090E050EF4F5010021007F2200030074 +:106F36004A004A4A01F6F731333236674C41594521 +:106F4600520042617365200047616D652000526101 +:106F5600697365004C6F776572004C4F434B004375 +:106F6600617073004E756D005363726C00202020B3 +:106F7600202000534F4C415200544D505354008131 +:106F86008283E200E900EA00B500B600B700CD0052 +:106F96008301CC008A01920194012102230224027A +:106FA6002502260227022A02B300B4006F007000F1 +:106FB6000603060806010606AF0200FF01000100EF +:106FC60000FFFF0000010001FF0000081018181064 +:106FD600080000010202020202020202020240222C +:0E6FE6007B99017701FC00000C190C390C009E :00000001FF From 053ce1e1ac77926117c0cf74207cb6545aac3b91 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 28 Nov 2021 01:19:29 -0500 Subject: [PATCH 081/155] Added haptic feedback for control key on game layer. --- keyboards/solartempest/sofle/config.h | 7 +- .../solartempest/sofle/keymaps/via/keymap.c | 9 +- .../solartempest/sofle/keymaps/via/snakey.c | 4 +- .../sofle/sofle VIA layout trackball.json | 4 +- .../sofle/solartempest_sofle_via.hex | 2776 ++++++++--------- 5 files changed, 1405 insertions(+), 1395 deletions(-) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index fd39b7d5c5df..1a347769b69a 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -63,8 +63,11 @@ #define NO_ACTION_FUNCTION // Disabled to save space -#define NO_ACTION_ONESHOT //Save 244 bytes (-244). -#define NO_RESET //Save 40 bytes (-40). +#define NO_ACTION_ONESHOT //Save 244 bytes (-244). +#define NO_RESET //Save 40 bytes (-40). +#undef LOCKING_SUPPORT_ENABLE //For MX lock keys only. +#undef LOCKING_RESYNC_ENABLE //For MX lock keys only. +#define LAYER_STATE_8BIT //For less than 8 bits worth of layers. // Encoder support #define ENCODERS_PAD_A { F5 } diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index 0bc1726b0b61..a92b78ff829d 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -168,9 +168,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these report_mouse_t currentReport = pointing_device_get_report(); if (pressed) { currentReport.buttons |= button; - #ifdef HAPTIC_ENABLE //Haptic feedback when trackball button is pressed + /*#ifdef HAPTIC_ENABLE //Haptic feedback when trackball button is pressed DRV_pulse(4); //sharp_click - #endif + #endif*/ } else { currentReport.buttons &= ~button; } @@ -356,6 +356,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { isSneaking = false; } + #ifdef HAPTIC_ENABLE //Set different patterns for keys on certain layers. In this case it is for gaming feedback. + if (record->event.pressed && (get_highest_layer(layer_state)==1)) { + DRV_pulse(51); //buzz_20 + } + #endif return true; case KC_SPC: if (record->event.pressed) { //Pet jumps when enter is pressed. diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey.c b/keyboards/solartempest/sofle/keymaps/via/snakey.c index 8f1f59dba073..c8dc8bdfb420 100644 --- a/keyboards/solartempest/sofle/keymaps/via/snakey.c +++ b/keyboards/solartempest/sofle/keymaps/via/snakey.c @@ -234,7 +234,9 @@ /* wpm counter */ char wpm_str[8]; oled_set_cursor(0,13); - sprintf(wpm_str, " %03d", current_wpm_read); + //sprintf(wpm_str, " %03d", current_wpm_read); //Replaced with two lines of code below to save space. + oled_write_P(PSTR("WPM: "), false); + oled_write(get_u8_str(get_current_wpm(), ' '), false); oled_write(wpm_str, false); oled_set_cursor(0,14); oled_write(" wpm", false); diff --git a/keyboards/solartempest/sofle/sofle VIA layout trackball.json b/keyboards/solartempest/sofle/sofle VIA layout trackball.json index f794311887be..c8673f835d02 100644 --- a/keyboards/solartempest/sofle/sofle VIA layout trackball.json +++ b/keyboards/solartempest/sofle/sofle VIA layout trackball.json @@ -268,7 +268,7 @@ "KC_8", "KC_7", "KC_6", - "C(KC_MINS)", + "C(S(KC_TAB))", "KC_PIPE", "KC_RPRN", "KC_LPRN", @@ -282,7 +282,7 @@ "KC_DOT", "KC_RBRC", "KC_LBRC", - "C(KC_PPLS)", + "C(KC_TAB)", "KC_TRNS", "KC_TRNS", "KC_TRNS", diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index 315fa5275ec2..136dfb3bc2c3 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,9 +1,9 @@ -:100000000C9449060C9490060C9490060C94D733EB +:100000000C9449060C9490060C9490060C94DA33E8 :100010000C9490060C9490060C9490060C94900608 -:100020000C9490060C9490060C94001B0C94BC1A33 -:100030000C9437280C9490060C9490060C9490061F +:100020000C9490060C9490060C94FB1A0C94B71A3E +:100030000C943A280C9490060C9490060C9490061C :100040000C9490060C9490060C9490060C949006D8 -:100050000C9490060C94D71B0C9490060C9490066C +:100050000C9490060C94D21B0C9490060C94900671 :100060000C9490060C9490060C9490060C949006B8 :100070000C9490060C9490060C9490060C949006A8 :100080000C9490060C9490060C9490060C94900698 @@ -205,9 +205,9 @@ :100CC000800610928106109282061092830614BE4E :100CD00084B7877F84BF0FB6F894A8958091600091 :100CE000886180936000109260000FBEE0E0F8E33E -:100CF000099512E0A0E0B1E0E6ECFEE602C0059046 +:100CF000099512E0A0E0B1E0ECECFEE602C0059040 :100D00000D92AE32B107D9F726E0AEE2B2E001C0F3 -:100D10001D92A038B207E1F70E945E280C941D379F +:100D10001D92A038B207E1F70E9461280C94203799 :100D20000C940000CF93DF9340917E0650917F0694 :100D30004E5754409A01205A3F4F21303240C0F064 :100D400020E032E0241B350B60917C0470917D041F @@ -296,7 +296,7 @@ :101270004E2F4983E8835A83DF91CF911F910F91BD :10128000FF90EF90DF90BF90AF900895E62EF12C85 :101290004491D42EE42FF0E026E0829FC001112477 -:1012A0002FEF30E0B9010E945135802F90E0880F78 +:1012A0002FEF30E0B9010E945435802F90E0880F75 :1012B000991F55E5569FD001579FB00D11248A1BE9 :1012C0009B0B982F990F890F5901AE18BF08AE9E3E :1012D000D001AF9EB00DBE9EB00D11245B2F189FA4 @@ -409,1385 +409,1385 @@ :1019800080819181CF911F910F910C946E08CF911E :101990001F910F910895982F92959F7011F0892FA4 :1019A00094E0282F2695269511F09E5F822F86952C -:1019B00009F09F5F892F0895DC01FB0180819181EF -:1019C000803891054CF08FE78C93808191818F57FF -:1019D000910991838083089581382FEF92073CF419 -:1019E00081E88C938081918181589F4FF2CF8C93B5 -:1019F000118210820895681708F5861B682F21E070 -:101A0000469FA0011124649FF001659FF00D1124F1 -:101A10004091590150915A01E49FC001E59F900DFA -:101A2000F49F900D1124880F892F881F990B919591 -:101A3000222319F09195819591090895681B20E062 -:101A4000DFCF0F931F93CF93DF9300D000D0CDB79C -:101A5000DEB789836A834B831C8204E610E024E0AE -:101A600030E0AE014F5F5F4F60E084E10E94AF3233 -:101A70000F900F900F900F90DF91CF911F910F91CA -:101A8000089580913203882329F047E669E98BE2C3 -:101A90000C94210D6091590170915A0190E080E001 -:101AA0000E94FE3520E030E040E05CE30E945F36BB -:101AB00020E030E040E85FE30E94F935882321F020 -:101AC00047EC6BE180E0E4CF41E265EA89EDE0CFED -:101AD000CF92DF92EF92FF920F931F93CF93DF93FA -:101AE0006C017B0164E670E088E70E949731EC01AD -:101AF00097FD12C010E000E0F601E00FF11F8491A5 -:101B000064E670E00E941132EC01892B29F40F5F2A -:101B10001F4F0E151F0581F70E942B33CE01DF9159 -:101B2000CF911F910F91FF90EF90DF90CF9008958C -:101B300080914E0490914F04911103C091E0892748 -:101B40000895882369F062E070E08CEE9BE00E94CB -:101B5000680D892B19F080914E04089510924E045F -:101B600080914E04EBCFCF93C0914E0480914F04EF -:101B70008823D1F00E9462086058774C8E4F9F4FA7 -:101B800060934A0470934B0480934C0490934D04EB -:101B9000C11108C062E070E08AEE9BE00E94680D0F -:101BA000892B29F0C0914E048C2FCF91089581E0AC -:101BB00080934E04F7CF90916C04943029F5809374 -:101BC0005B0470935D0460935C049093E9008FEF75 -:101BD0009091E800815095FD06C095ED9A95F1F73A -:101BE00000008111F5CF8091E80085FF0DC050E025 -:101BF00040E063E070E08BE594E00E94250780916F -:101C0000E8008E778093E8000895BC0184E00C948E -:101C1000DB0DBC0183E00C94DB0D9C0184E0809320 -:101C2000E9009FEF8091E800915085FD06C085EDA9 -:101C30008A95F1F700009111F5CF8091E80085FFBA -:101C40000CC050E040E066E070E0C9010E9425074A -:101C50008091E8008E778093E8000895CF93DF931A -:101C6000EC0181E08093E9008FEF9091E8008150D2 -:101C700095FD06C095ED9A95F1F700008111F5CF1D -:101C80008091E80085FF14C050E040E068E070E01B -:101C9000CE010E9425078091E8008E778093E800AE -:101CA00088E0FE01A2E6B4E001900D928A95E1F78A -:101CB000DF91CF9108959F92AF92BF92CF92DF9222 -:101CC000EF92FF920F931F93CF93DF937C015B0101 -:101CD0006A018091D10201E010E08A3010F40AE03C -:101CE00010E0C1E0D0E0F894B501C701F601099514 -:101CF000982E0E94BC09911004C021960C171D0754 -:101D00006CF4892DDF91CF911F910F91FF90EF908F -:101D1000DF90CF90BF90AF909F900895CC9F90019F -:101D2000CD9F300D300D112490E080E045E34A95C1 -:101D3000F1F70000019682179307C1F7D4CF809185 -:101D4000A102811110C08091D80080618093D800D9 -:101D50008AE18A95F1F700C08091D90080FF0AC01E -:101D600081E08093A10281E09091A102913009F07D -:101D700080E0089582E08093A1020E94D50610922F -:101D80006C04F1CF0E949F0E882351F0E091520421 -:101D9000F0915304309721F00190F081E02D0994E7 -:101DA00080E008951F93CF93DF93182FEB010E94DB -:101DB000570C8FE99FE00197F1F700C000002197D1 -:101DC000C1F7812FDF91CF911F910C941E0C4F9280 -:101DD0005F926F927F928F929F92AF92BF92CF92BB -:101DE000DF92EF92FF920F931F93CF93DF93CDB7C4 -:101DF000DEB7CE5DD1090FB6F894DEBF0FBECDBF02 -:101E0000509070019091770490FF5DC080905D03C9 -:101E100090905E038114910409F068C0E0E6F6E05A -:101E20009E012F5F3F4FBE0161527F4FC901A491B8 -:101E30004A2F50E0DA01AA0FBB1FA40FB51FA15A09 -:101E4000BC4FCD90DD90EC90D901CD92DD92ED921A -:101E50009D0131966A177B0751F720916F0143E08E -:101E6000249F800D911D1124539A2BB1277F3BB1E4 -:101E700038605FB7F894BC01549E600D711D112449 -:101E80008617970709F08EC05FBF8FE594E0019732 -:101E9000F1F700C00000C252DF4F0FB6F894DEBF6A -:101EA0000FBECDBFDF91CF911F910F91FF90EF90AB -:101EB000DF90CF90BF90AF909F908F907F906F906A -:101EC0005F904F900895809171012091720133E0ED -:101ED000839FF0011124E15AFC4F821708F096CF3E -:101EE0001182108212828F5F3396F7CF90FF96CFC8 -:101EF000D12CC12C66246394712C53E0452E809123 -:101F00005C0393010C2C01C0220F0A94EAF7822390 -:101F100009F43FC0F601EE0FFF1FE80DF91DE59033 -:101F2000F490E114F10409F479CF45E050E0B701F1 -:101F3000CE0101960E94923509810F3F51F18A81AD -:101F4000800F9927991F8B34910514F08AE490E053 -:101F50005C01AA0CBB1C8A0D9B1DDC01A15ABC4F65 -:101F60005D01049D80011124015A1C4F0A151B05B7 -:101F700020F0B5E0EB0EF11CD8CF4D81413A08F0CE -:101F800040EA98016C818B810E9424090D5F1F4FEC -:101F9000EDCFEFEFCE1ADE0AF8E0CF16D10409F04C -:101FA000AECF3CCFFC014191CF01E8E03BB900004E -:101FB00000C047FF2BB9440F000000C000C000C0A4 -:101FC0002BB900C0EA9591F75BCFE7E7F4E0808199 -:101FD0008E7F8083E9E5F3E08281816082832FEF49 -:101FE00080E792E0215080409040E1F700C000007F -:101FF0000C94E70EE2E3F2E086E0DF011D928A95A1 -:10200000E9F70C94F70B1F93CF93DF93CDB7DEB7AF -:10201000AA970FB6F894DEBF0FBECDBF8EE694E050 -:102020002091F100DC012D93CD01B4E086379B07B0 -:10203000B9F780916F04833009F471C0B8F481302E -:1020400009F448C0823009F4B4C08091E80083FFED -:102050003CC180916E0490916F049A3008F035C1B4 -:10206000E92FF0E0E15EF84C0C9485358A3009F4F4 -:102070008FC08B3009F470C0893039F780916E04BD -:10208000813219F78091720490917304009711F0D6 -:102090000297D9F68091E800877F8093E8008091CD -:1020A000E80082FF37C09091F3008091F200029720 -:1020B00029F48091F1008B7F813021F48091F1002F -:1020C000809361048091E8008B778093E8000E9400 -:1020D0004F07BBCF80916E04813A09F0B6CF809153 -:1020E000E800877F8093E8008091720490917304E8 -:1020F000892B61F468E082E694E070E00E940108B8 -:102100008091E8008B778093E8009FCF60E090E0BB -:1021100080E0F3CF80916C048111C1CF96CF809184 -:102120006E04813A09F091CF80917204909173040A -:10213000892B09F08ACF8091E800877F8093E8009F -:102140008091E80080FFFCCF809174018093F100C2 -:102150008091E8008E77B9CF80916E04813209F0CA -:1021600074CF8091720490917304892B09F06DCF24 -:102170008091E800877F8093E8000E944F0780915C -:1021800070048093740110925F040E94FA0F5DCF77 -:1021900080916E04813209F058CF8091E800877FEA -:1021A0008093E8000E944F0780917104809360043F -:1021B0004CCF80916E04813A09F047CF8091E800BE -:1021C000877F8093E8008091E80080FFFCCF8091BA -:1021D0006004BCCF803899F0823809F076C08091D5 -:1021E00072048F70873008F070C08093E90080918E -:1021F000EB0085FB882780F91092E90006C08091EA -:102200006A0490916B04911182609091E800977F2D -:102210009093E8008093F1001092F1008091E80023 -:102220008E77B5C1882309F4A2C1823009F04DC070 -:10223000809170048111A6C1809172048F702FEF7C -:10224000280F263008F041C08093E9002091EB0070 -:1022500020FF98C1933031F48091EB00806280932D -:10226000EB0090C19091EB0090619093EB0021E026 -:1022700030E001C0220F8A95EAF72093EA0010921D -:10228000EA008091EB008860EACF81111EC01091B6 -:1022900070041F778091E3008078812B8093E300A6 -:1022A0008091E800877F8093E8000E944F0780912B -:1022B000E80080FFFCCF8091E30080688093E3001A -:1022C00082E0111183E080936C048091E80083FF29 -:1022D0000AC08091E800877F8093E8008091EB003E -:1022E00080628093EB00AA960FB6F894DEBF0FBE13 -:1022F000CDBFDF91CF911F9108958058823028F78C -:1023000020917004309171042C3DE3E03E07A1F56B -:1023100083E08A838AE289834FB7F894DE011396BB -:1023200020E03EE051E2E32FF0E050935700E491CB -:1023300020FF03C0E295EF703F5FEF708E2F90E0BB -:10234000EA30C0F0C7968D939D932F5F243159F7E3 -:102350004FBF8091E800877F8093E8006AE270E0D9 -:10236000CE0101960E9401088091E8008B7780934E -:10237000E800ABCFC096E7CF8091720490917304D0 -:10238000432F55274330510509F44AC078F54130B1 -:10239000510509F47AC08BE590E0EEEEFBE04230A7 -:1023A000510509F092CF2091E800277F2093E800A3 -:1023B00020917404309175048217930708F49C01EE -:1023C00040E02115310509F065C0411163C08091DD -:1023D000E80082FDC9CF80916C04882329F2853002 -:1023E00019F28091E80083FFF2CFBECF4132510550 -:1023F00009F43CC04232510509F067CF83309105A2 -:1024000008F063CFFC01EE0FFF1FEF5DFD4F019061 -:10241000F081E02D825E9D4FDC018C9190E01AC02E -:10242000332721303105D1F02115310561F02230FB -:10243000310509F04ACFEBE5FCE0E4918E2F90E006 -:10244000EBE5FCE007C0EDE8FCE0E4918E2F90E0C6 -:10245000EDE8FCE0009709F438CFA5CFEBE7FCE00E -:10246000E4918E2F90E0EBE7FCE0F4CF8330910510 -:1024700008F02BCF880F991FFC01E95DFD4F0190FB -:10248000F081E02D89E090E08ECF82E190E0E9E4F8 -:10249000FCE089CF80916C04882309F465CF8530F6 -:1024A00009F462CF8091E80083FD5ECF8091E8005F -:1024B00082FD8DCF8091E80080FF83CF9091F30063 -:1024C0008091F2002115310519F08830910550F006 -:1024D00041E0089709F040E08091E8008E77809312 -:1024E000E8006FCF44914093F100319621503109BB -:1024F0000196E8CF803809F0E8CE8091E800877F28 -:102500008093E80080916D048093F10087CE811163 -:10251000DCCE10917004123008F0D7CE8091E80024 -:10252000877F8093E80010936D040E944F0711236A -:1025300011F084E005C08091E30087FDFACF81E0CF -:1025400080936C0442E061EC81E00E946E0742E2FD -:1025500061EC84E00E946E0742E261EC82E00E943E -:102560006E0742E260EC83E00E946E07AECE80917F -:102570007004813009F0A9CE81E0933009F080E049 -:1025800080936B041092E9008091E800877F80932C -:10259000E8000E944F0799CE1F93CF93DF93162F29 -:1025A000C0917E06D0917F068A30D1F420914304F9 -:1025B000CE018E579440622F70E00E945135281B47 -:1025C000822F66E00E946535C82FC15020F4DF914C -:1025D000CF911F91089560E080E20E94CC12F5CF68 -:1025E0008D30E9F4CE57D44020914304622F70E03F -:1025F000CE010E945135281B822F9E01280F311DCC -:102600002115324018F080E0D0E0C0E0C80FD11DA5 -:10261000C258DB4FD0937F06C0937E06D8CF96E09A -:10262000FE01A4E4B4E001900D929A95E1F7803E9A -:1026300090F186E0FE0111928A95E9F7C0917E063D -:10264000D0917F06111133C046E050E0BE0184E412 -:1026500094E00E949B359E012E573440892B91F5C2 -:102660002A5F3F4F40914304642F70E0C9010E94EC -:102670005135481B463010F4240F311D211572E0EE -:10268000370710F030E020E022583B4F30937F06B0 -:1026900020937E069CCFF6E08F9FB00111246655F3 -:1026A000794F46E050E0CE010E949235C7CF9E019F -:1026B0002A5F3F4FFE012E173F0731F28081809540 -:1026C0008193F9CFC90145E0969587954A95E1F741 -:1026D00041E050E0BA0102C0660F771F8A95E2F729 -:1026E000CB0160917C0470917D04862B972BB901FE -:1026F0006B5F7F4FE5E076956795EA95E1F702C05D -:10270000440F551F6A95E2F7842B952B90937D0417 -:1027100080937C04A5CFFF920F931F93CF93DF93F9 -:10272000EC01F62EFC0101900020E9F78F01015029 -:102730001109C017D10730F0DF91CF911F910F9190 -:10274000FF9008956F2D89910E94CC12F2CFE1E4A1 -:10275000F4E08083618324E630E042E050E0BF0192 -:1027600084EB0C948832CF93C82F60E08CE00E94F9 -:10277000A7136C2F84E00E94A71361E08CE0CF9137 -:102780000C94A7131F93CF93DF93CDB7DEB7629757 -:102790000FB6F894DEBF0FBECDBF96E0E4E2F3E0E3 -:1027A000DE01179601900D929A95E1F796E0FE01F1 -:1027B0003796DE011D9601900D929A95E1F71885E6 -:1027C000882309F1162B84E00E94B3131E8786E04C -:1027D000FE013D96DE01119601900D928A95E1F77A -:1027E00086E0FE013196A4E2B3E001900D928A9555 -:1027F000E1F762960FB6F894DEBF0FBECDBFDF9152 -:10280000CF911F91089560951623E0CFCF93DF936A -:10281000C3EED2E060E0CE010E94C5352196C1151D -:1028200084E0D807B9F7DF91CF9108956F927F9236 -:102830008F929F92AF92BF92CF92DF92EF92FF92D0 -:102840000F931F93CF93DF938AEAC82E86E0D82E8A -:1028500091ECE92EF12CE701CC58D10936011BC0CF -:10286000F50185909490692DC8010E94C535682DA9 -:10287000C80101960E94C53582E0A80EB11C0E5F0A -:102880001F4FC017D10761F78EE0680E711C2E969E -:10289000CE15DF0529F08E010E5011095301E0CF4E -:1028A0007E018CE8E80EF11C8CE8C80ED11C8DE787 -:1028B000E81683E0F80679F6DF91CF911F910F912A -:1028C000FF90EF90DF90CF90BF90AF909F908F9050 -:1028D0007F906F900895CF93C82F6FEF811161E2C1 -:1028E00083E290E00E94C5356FEFC11161E184E29F -:1028F00090E00E94C5356FEFC11166E285E290E07D -:10290000CF910C94C53580E00E946B1460E086E2A4 -:1029100090E00E94C5350E9416140E94061481E0C2 -:102920000C946B140F931F93CF93DF93C42FD0E0BD -:10293000CC0FDD1F2EE0629FC00DD11D11243CE89D -:10294000839FC00DD11D1124CE0187960E94B13501 -:10295000082F10E0102F0027CE0188960E94B13575 -:102960009801282BC901DF91CF911F910F910895F4 -:10297000462F853038F47A3028F4673018F4672F02 -:102980000C94921490E080E00895CF92DF92FF9231 -:102990000F931F93CF93DF936C0100917604809186 -:1029A0009202082BC7E0D0E010E0FC2EC8010C2EEC -:1029B00002C0959587950A94E2F780FD0CC0219797 -:1029C000A0F7F12C8F2DDF91CF911F910F91FF90E8 -:1029D000DF90CF900895B6018C2F0E94B8140E940A -:1029E000180A019761F3EECFCF93DF93EC010E94B9 -:1029F000C514BE010E94B814DF91CF910C94180A3F -:102A0000FC01808191810E94F414292F2F709295EE -:102A10009F7092509E3078F4E92FF0E0E75DF84C1B -:102A20000C948535803F19F020F4883E20F481E035 -:102A30000895843FE1F380E00895883EC0F3813F2C -:102A4000D1F7F5CF822F869586958695089583E2F6 -:102A500090E00E94B135813289F484E290E00E94D6 -:102A6000B135813159F485E290E00E94B13591E0B1 -:102A7000863209F090E0892F8170089580E0FCCFC4 -:102A8000CF92DF92EF92FF926B017C010E940E09C0 -:102A9000B701A60188E090E0FF90EF90DF90CF9023 -:102AA0000C94D735AF92BF92CF92DF92EF92FF9204 -:102AB0000F931F93CF93DF9300D00F92CDB7DEB764 -:102AC000082FF62E142FE22E8091770480FF4FC03E -:102AD000E82FE695AE2FB0E0AE5EBD4F9C9190938F -:102AE00059038E7F823009F056C0413A08F040EA1F -:102AF0009E012F5F3F4F6F2D802F0E9424098091F0 -:102B0000770480FF11C02B8139814A818091710146 -:102B10009091720153E0859FF0011124E15AFC4F1E -:102B2000891798F10E94E70E80917804801308C0FD -:102B3000809179048F1104C080917A04811729F063 -:102B400080915B03826080935B0300937804F09232 -:102B5000790410937A04EE2051F06091770470911B -:102B600078048091790490917A040E9440150F9026 -:102B70000F900F90DF91CF911F910F91FF90EF90E9 -:102B8000DF90CF90BF90AF90089541833083228330 -:102B90008F5F3396C5CF923039F6E2508E2F817019 -:102BA000D82EE695F0E0E55AF94FA590B490C12CE7 -:102BB000BB2460917301C61608F0B4CF2C2D30E011 -:102BC000A29EC001A39E900DB29E900D112470E0B4 -:102BD0000E945135802FD11016C0860F409171018F -:102BE000420F532F511D9A01220F331F240F351FFF -:102BF000215A3C4F412F113A08F040EA6F2D0E94B4 -:102C00002409C394D6CF861BE9CFE7E7F4E04381DC -:102C100021E1421B08F440E021E0628181810C94B3 -:102C20005215E7E7F4E0438121E1420F08F44FEF4A -:102C300021E0628181810C945215E7E7F4E0628122 -:102C400021E1621B08F460E021E0438181810C9462 -:102C50005215E7E7F4E0628121E1620F08F46FEFBB -:102C600021E0438181810C945215E7E7F4E08181F2 -:102C700021E04381628188500C945215E7E7F4E02B -:102C8000818121E043816281885F0C94521580919B -:102C90007B04882319F0815080937B046091770432 -:102CA000709178048091790490917A040C94401585 -:102CB00080917B04833018F48F5F80937B04609154 -:102CC0007704709178048091790490917A040C943F -:102CD00040159091770490FF27C0917081111DC01D -:102CE00092609093770480915B03816080935B0393 -:102CF000662351F060917704709178048091790493 -:102D000090917A040E94401520E040917A046091ED -:102D10007904809178040C9452158C3010F09661EF -:102D2000E0CF880F982BDDCF089521E030E0A90196 -:102D300002C0440F551F8A95E2F7CA0120915C0337 -:102D4000662391F0822B80935C0380915B0380610A -:102D500080935B0380915A03811109C080917704AD -:102D600060E086950C94691680958223ECCF0895D7 -:102D7000CF93DF93C82FC17082FBDD27D0F981FB91 -:102D8000662760F985E00E94951661E06C2786E071 -:102D90000E9495166D2F87E0DF91CF910C949516C8 -:102DA0000F931F93CF93C82F61E08111682F61703B -:102DB00080E00E949516C1FB662760F9C11101C031 -:102DC00060E081E00E949516C2FB662760F9C111A0 -:102DD00001C060E082E00E949516C3FB662760F99F -:102DE000C11101C060E083E00E949516C4FB662714 -:102DF00060F9C11101C060E084E00E9495164C2F7B -:102E000050E070E060E0DB01CA01F4E0B695A79500 -:102E100097958795FA95D1F70097A105B10549F1E6 -:102E2000AC01BD0184E08A019B01E2E03695279563 -:102E300017950795EA95D1F701151105210531057B -:102E400019F08E5FB901A80176956795579547955A -:102E5000452B462B472B09F08F5F8230D1F158F478 -:102E60008823E9F0813059F18C2FCF911F910F9178 -:102E7000089580E0D8CF8330A1F18430A9F720E015 -:102E800040E56FEF8AED0E94521587E00E94B31370 -:102E900080910001882341F3109232030DC020E09D -:102EA00040E56FEF82E30E94521580910001882374 -:102EB00099F381E0809332030E94410DD5CF20E049 -:102EC00040E56FEF8CEF0E94521585E40E94B3132A -:102ED000CBCF20E040E56FEF80E50E94521585E200 -:102EE000F5CF20E040E56FEF86E70E9452158FE1B5 -:102EF000EDCF0E94D016809376040C94F70B80914E -:102F00007604982F9670963019F488600C9479178F -:102F1000877FFCCF21E030E001C0220F8A95EAF7DD -:102F200020958091760482230C94791721E030E07B -:102F300001C0220F8A95EAF780917604822B0C94C7 -:102F40007917809177048695815009F48BE061E0D0 -:102F50000C9469168091770486958F5F8C3008F009 -:102F600081E061E00C9469168091770480FF07C0CE -:102F7000869582588F77893010F40C94AA1761E0F7 -:102F800082E00C946916E7E7F4E083E08083118225 -:102F90008FEF828380EA83831482A9E5B3E01296DF -:102FA0008C911297836012968C93608171818281DB -:102FB00093810C944015AB01BC0188E190E00C9426 -:102FC000D735CF93C82FEFE3F4E0982F990F990FDF -:102FD000990F80818770892B8083E0E4F4E09C2F37 -:102FE0009295969597708081887F892B80836091D8 -:102FF0003D0470913E0480913F04909140040E94F2 -:10300000DB176C2F82E0CF910C94A713EDE3F4E073 -:1030100089E88083118282818C7F828360913D0464 -:1030200070913E0480913F04909140040C94DB1712 -:10303000EDE3F4E080818E7F808360913D047091A8 -:103040003E0480913F04909140040C94DB17EDE323 -:10305000F4E080818160808360913D0470913E0442 -:1030600080913F04909140040C94DB1769EE7EEF51 -:1030700090E080E00E94E33560E082E090E00E9412 -:10308000C53560E083E090E00E94C5351092920261 -:1030900060E084E090E00E94C53560E082E290E06C -:1030A0000E94C53560E085E090E00E94C53560E093 -:1030B00086E090E00E94C5356FEF87E090E00E94C7 -:1030C000C53540E050E0BA0188E090E00E94D73575 -:1030D00060E08DE090E00E94C53540E050E0BA012C -:1030E00088E190E00E94D73560E087E190E00E949F -:1030F000C53540E050E0BA018CE190E00E94D73540 -:1031000070E060E080E290E00E94E3350E940618E3 -:1031100080E00E946B140E94831440E050E0BA01EA -:103120008FE090E00E94D73540E050E0BA0183E1A3 -:1031300090E00C94D7350F931F93CF93DF9300D07B -:1031400000D0CDB7DEB74091C5025091C602609164 -:10315000C7027091C8022FB7F894809157049091DC -:103160005804A0915904B0915A042FBF841B950BA9 -:10317000A60BB70B84369105A105B10588F10E9415 -:103180009F0E882379F10E9462086E5F7F4F8F4FF8 -:103190009F4F69837A838B839C8380912C019091CC -:1031A0002D0181559D4F40912B0150E04530510537 -:1031B00010F044E050E0BE016F5F7F4F0E94A835E1 -:1031C00084E090E00E949D34892BD9F40E9462082B -:1031D0006093C5027093C6028093C7029093C802A1 -:1031E00081E010C00E9462080091D2021091D302C7 -:1031F0002091D4023091D502600F711F821F931F5E -:10320000C4CF80E00F900F900F900F90DF91CF917F -:103210001F910F9108958F929F92AF92BF92CF927C -:10322000DF92EF92FF920F931F93CF93DF93EB0107 -:1032300088809980AA80BB809FB7F894C09057047B -:10324000D0905804E0905904F0905A049FBFC818D9 -:10325000D908EA08FB0894E6C916D104E104F10490 -:1032600010F4442311F1E82E082E000CFF089AE018 -:103270008902F0011124EF5FFE4F83819481815513 -:103280009D4F428150E00417150708F4A801B901C9 -:103290000E94A835C7010E949D34892BA1F40E9489 -:1032A0006208688379838A839B8381E0DF91CF9171 -:1032B0001F910F91FF90EF90DF90CF90BF90AF9054 -:1032C0009F908F90089580E0F1CF0F931F93CF933D -:1032D000DF930F92CDB7DEB780914E0489832091A2 -:1032E000C40290E041E02817190609F440E001E02B -:1032F00010E09E012F5F3F4F6DEC72E086E00E9470 -:103300000B190F90DF91CF911F910F9108950F939B -:103310001F93CF93DF93CDB7DEB729970FB6F894FD -:10332000DEBF0FBECDBF85E0E7E7F4E0DE0111961A -:1033300001900D928A95E1F78091590390915A037B -:10334000A0915B03B0915C038E839F83A887B987AC -:1033500041E08885811101C040E009E010E09E0154 -:103360002F5F3F4F69EC72E085E00E940B198111DD -:1033700010925B0329960FB6F894DEBF0FBECDBF47 -:10338000DF91CF911F910F9108956F927F928F924D -:103390009F92AF92BF92CF92DF92EF92FF920F93E4 -:1033A0001F93CF93DF930F92CDB7DEB7862E5A01CE -:1033B0006901682E880F7708C3010E949D34892B0C -:1033C00009F088C08AE0869DF001879DF00D1124E8 -:1033D000EF5FFE4F458150E04115510511F041E08E -:1033E00050E08AE0869DF001879DF00D1124EF5F8B -:1033F000FE4F6681778161557D4FCE0101960E9417 -:10340000A835F50140815181628173812FB7F8940D -:103410008091570490915804A0915904B0915A0496 -:103420002FBF841B950BA60BB70B84369105A10506 -:10343000B10540F4B701C8010E94F30899818917CA -:1034400009F44FC0082C000C9908C4010E949D3457 -:10345000892B91F0B12C8B2D0F90DF91CF911F9183 -:103460000F91FF90EF90DF90CF90BF90AF909F9023 -:103470008F907F906F9008958AE0889DF001899DDC -:10348000F00D1124EF5FFE4F458150E0E416F50684 -:1034900008F4A7018AE0889DF001899DF00D1124B0 -:1034A000EF5FFE4F6681778161557D4FC6010E94B7 -:1034B000A835B701C8010E94F30899818913CACFC2 -:1034C0000E946208F5016083718382839383BB2429 -:1034D000B394C1CFB12CA701B801C6010E94A83591 -:1034E000BACFBB24B394F7CFCF92DF92EF92FF9283 -:1034F0000F931F93CF93DF9300D000D00F92CDB7DF -:10350000DEB76B0185E0E82EF12C00EB12E09E01A6 -:103510002F5F3F4F47EA52E061E080E00E94C5190B -:10352000882349F095E0FE013196A2EAB2E00190CD -:103530000D929A95E1F795E0E2EAF2E0D60101906A -:103540000D929A95E1F70F900F900F900F900F90BA -:10355000DF91CF911F910F91FF90EF90DF90CF906F -:10356000089590E080E00E94BF35893E9E4F11F49F -:103570000C94271580E008951F920F920FB60F92BA -:1035800011242F933F934F935F936F937F938F9368 -:103590009F93AF93BF93CF93DF93EF93FF93D0911C -:1035A000E900DF708091EC00C82FC17080FDC0E899 -:1035B0001092E9008091F000877F8093F00078946A -:1035C0000E9403101092E9008091F00088608093BF -:1035D000F000CD2BCF70C093E900FF91EF91DF9108 -:1035E000CF91BF91AF919F918F917F916F915F919B -:1035F0004F913F912F910F900FBE0F901F901895F4 -:103600001F920F920FB60F9211242F933F934F9357 -:103610005F936F937F938F939F93AF93BF93EF933A -:10362000FF938091E10082FF09C08091E20082FF58 -:1036300005C08091E1008B7F8093E1008091DA00EA -:1036400080FF24C08091D80080FF20C08091DA00E4 -:103650008E7F8093DA008091D90080FF9BC080E14B -:1036600089BD82E189BD09B400FEFDCF81E0809370 -:103670006C0480915E04811109C00E94D5060E94ED -:10368000A0078091E20084608093E2008091E100D5 -:1036900080FF17C08091E20080FF13C08091E2009C -:1036A0008E7F8093E2008091E20080618093E2004F -:1036B0008091D80080628093D80019BC85E0809307 -:1036C0006C048091E10084FF29C08091E20084FFB6 -:1036D00025C080E189BD82E189BD89B5982F9170AF -:1036E00080FFFBCF8091D8008F7D8093D8008091A0 -:1036F000E1008F7E8093E1008091E2008F7E8093D5 -:10370000E2008091E20081608093E20080916D048C -:10371000882309F445C084E080936C048091E10023 -:1037200083FF27C08091E20083FF23C08091E100E6 -:10373000877F8093E10082E080936C0410926D0497 -:103740008091E1008E7F8093E1008091E2008E7F86 -:103750008093E2008091E20080618093E20042E089 -:1037600060E080E00E946E078091F00088608093A6 -:10377000F000FF91EF91BF91AF919F918F917F9159 -:103780006F915F914F913F912F910F900FBE0F90CE -:103790001F90189519BC10926C0410925E0476CF9D -:1037A0008091E30087FD93E090936C04B7CF789409 -:1037B0001F921FB61F9211248F939F93AF93BF93B5 -:1037C0008091570490915804A0915904B0915A04E3 -:1037D0000196A11DB11D8093570490935804A093A6 -:1037E0005904B0935A04BF91AF919F918F911F904C -:1037F0001FBE1F9018959C014FB7F89480915704F5 -:1038000090915804A0915904B0915A044FBF821B63 -:10381000930B08952FB7F894809157049091580412 -:10382000A0915904B0915A042FBF08955F926F92EE -:103830007F928F929F92AF92BF92CF92DF92EF9240 -:10384000FF920F931F93CF93DF9300D000D00F927E -:10385000CDB7DEB77C01FC0183819481892B31F0E7 -:103860008081918189238F3F09F0C8C60F900F9006 -:103870000F900F900F90DF91CF911F910F91FF90BC -:10388000EF90DF90CF90BF90AF909F908F907F9000 -:103890006F905F9008950E94C514182F682F89813A -:1038A0009A810E94CB0B69817A81812F0E94B81482 -:1038B0008C01F7018281882361F0F801E65EFC4506 -:1038C000ED30F10530F4E95CF84C0C9485350E943C -:1038D0002718D0903D04D0FE1CC08D2D8695837096 -:1038E000F7019281992309F460C1823090F4B70105 -:1038F000C8010E94B108882361F0D694D694D6946A -:1039000080913E0483708295880F807E8D290E946D -:10391000B313F7018281882309F465C6C801825177 -:103920009F45409708F021C68FEF93E00E94B13584 -:10393000025193EEA92E92E0B92E811197CF011179 -:1039400038C11C821B82662463948AE0582E85014C -:103950000F5F1F4FC5010E94B13589831A828823EA -:1039600009F484CF9FEF980F933008F031C18A8318 -:10397000698232E0A30EB11CC8010E94B1358B836D -:10398000882309F473CF8E010F5F1F4FF801208148 -:103990002223E9F2213009F055C1918182819130D1 -:1039A00009F018C10E5F1F4F6AE070E0893311F40F -:1039B00060E570E00E94D20E13C10E94181889CFF2 -:1039C00080913D0480FF0DC00E94181860913D0455 -:1039D00070913E0480913F04909140040E94DB1757 -:1039E00078CF0E942718F2CF0E94061872CF9091CC -:1039F0003D04892F86958F5F8370880F997F892B6F -:103A000080933D04982F9670963001F7897F8093BC -:103A10003D04DCCF90913E04892F8B7F92FF846020 -:103A200080933E04D3CF80913D04982F9695969530 -:103A3000969580913E0483708295880F807E892BB5 -:103A40008C3798F48F5F282F220F220F220F90912E -:103A50003D049770922B90933D04829586958370D8 -:103A600090913E049C7F892BDBCF81E0ECCF80914D -:103A70003D04982F96959695969580913E04837077 -:103A80008295880F807E892B11F08150DCCF8BE7E7 -:103A9000DACF30913E04932F969596959695209186 -:103AA0003F04822F83708295880F807E892B90E05F -:103AB0000196482F440F440F440F3770342B309336 -:103AC0003E0435E0969587953A95E1F783702C7F13 -:103AD000822B80933F047ACF30913E04932F9695AA -:103AE0009695969520913F04822F83708295880F3A -:103AF000807E892B8150990BDCCF80913F0482FF1F -:103B000012C08B7F80933F0460913D0470913E040E -:103B100080913F04909140040E94DB1760E081E0B7 -:103B20000E94A713D6CE846080933F0460913D0429 -:103B300070913E0480913F04909140040E94DB17F5 -:103B400060E08CE00E94A71364E182E00E94A7136A -:103B500065E081E00E94A71361E08CE0E1CF8091F5 -:103B60003F04982F9695969596958091400482955E -:103B7000880F807E892B883720F4865F0E94E117AA -:103B8000A8CE88E7FBCF80913F04982F9695969515 -:103B90009695809140048295880F807E892B843190 -:103BA00010F08A50EBCF84E1E9CF882309F4B1CE3D -:103BB0009ECEA114F4E0BF0609F458CEC5010E94C0 -:103BC000B135811101C001502FEFA21AB20AB7CE50 -:103BD0005801D9CE923039F40E5F1F4F0E94570C16 -:103BE0000F5F1F4FD3CE933029F40E5F1F4F0E94FB -:103BF0001E0CF6CF943019F00F5F1F4FF1CF0E5F00 -:103C00001F4F30E020E0B8016F5F7F4FF801418126 -:103C10008053990B8A30910550F02150310900F3FF -:103C20008FE99FE00197F1F700C00000F6CF529EA8 -:103C3000F001539EF00D11249C012E0F3F1F842F85 -:103C40008B01E1CFE22FF0E0E75FFD4F7490822F10 -:103C500086958695869590E0FC01E750FE4FE490AE -:103C60002770F12C022E02C0F594E7940A94E2F733 -:103C7000E1E0EE22FF24FC01E751FE4FC490D12C7D -:103C8000022E02C0D594C7940A94E2F7F1E0CF2245 -:103C9000DD24FC01E752FE4F8490912C02C09594E4 -:103CA00087942A95E2F721E082229924E114F10415 -:103CB00019F081EE0E94570CC114D10419F086EE60 -:103CC0000E94570C39E36AE070E0731202C060E5AD -:103CD00070E0872D0E94D20ECD2819F086EE0E944A -:103CE0001E0CEF2819F081EE0E941E0C892809F4A1 -:103CF00077CF6AE070E08CE25DCE81E00E9496179B -:103D000003C081E00E948A170F900F900F900F90D0 -:103D10000F90DF91CF911F910F91FF90EF90DF9067 -:103D2000CF90BF90AF909F908F907F906F905F905B -:103D30000C947F1782E0E2CF013E110509F404C123 -:103D400008F04DC0003E110509F469C1F7019281E8 -:103D5000911171C280915F0482720A3CFCE51F07D9 -:103D600009F449C208F09FC1053C3CE5130709F47A -:103D70002EC208F083C1033C5CE5150709F408C2B4 -:103D800008F020C2023C1C4509F4B2C1F7010081D1 -:103D90001181992309F469C2C8010E94C514D82E63 -:103DA000682FC8010E94CB0BB8018D2D0E94B8145A -:103DB0000E94180A182FB82EF70122814581342F4E -:103DC00032953F70892F82958F70C82ED12C8C3000 -:103DD00008F083C2F601EC5BF84C0C948535043E88 -:103DE000110509F41CC1053E110509F0AFCF809300 -:103DF0003C0210933B0200933A02882309F4A1C0CD -:103E000081E08093EE02A2CF0238FFE51F0709F49C -:103E100076C038F5063F110509F4FFC008F4FBC071 -:103E200000383FE5130709F44DC001384FE514078A -:103E300009F08CCF882309F45BC080919C0281112A -:103E400006C081E080939C0282EE0E94570C0E9483 -:103E50000A1C90939B0280939A0281EE0E94570C59 -:103E600043C004385FE5150709F471C008F45BC06E -:103E70000538EFE51E0709F4B0C00638FFE51F0757 -:103E800009F064CF882309F4C2C060915901709190 -:103E90005A0190E080E00E94FE3520E030E040E0F2 -:103EA0005CE30E945F3620E030E040E85FE30E9480 -:103EB000F9358111A9C080EE90E090935A0180936A -:103EC000590195C08823B9F080919C02811106C0E8 -:103ED00081E080939C0282EE0E94570C0E940A1C93 -:103EE00090939B0280939A028BE20E94570C2ECFF4 -:103EF00081EE0E941E0C8BE20E941E0C27CF8823AD -:103F000009F424CF81EE0E94570C83EE0E94570CD7 -:103F10008FE40E94570C8FE40E941E0C83EE0E94D7 -:103F20001E0C81EEE9CF882309F410CF81EE0E94A8 -:103F3000570C83EE0E94570C80E50E94570C80E5D9 -:103F4000EBCF1092EE0202CF8093390252CF88233A -:103F500079F180913902882349F080913A020E94D8 -:103F60001E0C80EE0E94570C8AE20CC080913C022D -:103F70008823D1F380913A020E941E0C80EE0E94A9 -:103F8000570C8CE40F900F900F900F900F90DF91D3 -:103F9000CF911F910F91FF90EF90DF90CF90BF9046 -:103FA000AF909F908F907F906F905F900C94570C84 -:103FB0008AE20E941E0C8CE40E941E0C80EE0E947D -:103FC0001E0C80913902811105C080913C0288232A -:103FD00009F44CCC80913A02D5CF8823C1F080916E -:103FE0003203882339F010923203109200010E94AC -:103FF000410DACCE809100018111F7CF81E080931B -:10400000320380930001F3CF80E890E056CF61E067 -:104010000E94C2139BCE62E0FBCF64E0F9CF8823FD -:1040200021F081E08093ED0291CE1092ED028ECED0 -:10403000882331F081E08093F0021092670186CEF0 -:104040001092F00283CE882349F0809176040E947A -:10405000CB0C813019F482E30E94B313F701828103 -:10406000882309F4B0C2809176040E94CB0C813081 -:1040700009F0A9C284E30E94B313A5C2073C2CE552 -:10408000120709F4AEC008F4A7C0083C4CE51407B9 -:1040900009F4ACC0093C1C4509F078CE45E056E176 -:1040A00061E176E179C0043DECE51E07A8F40E3C21 -:1040B000FCE51F0708F0DACB0C3C2CE5120709F4ED -:1040C0009FC047E456E168E576E10D3C1C4508F4E5 -:1040D00063C061E081E046C0053D4CE5140709F48A -:1040E000C5CB08F492C00D351D4509F4BFCB4ECEAB -:1040F0008091770480FF31C08E7F80937704609138 -:104100007704709178048091790490917A040E94E8 -:10411000401580915B03816080935B039FEFE0E734 -:10412000F2E09150E040F040E1F700C000000F9055 -:104130000F900F900F900F90DF91CF911F910F91E3 -:10414000FF90EF90DF90CF90BF90AF909F908F90B7 -:104150007F906F905F900C94E70E8160809377045E -:1041600061E086950F900F900F900F900F90DF9168 -:10417000CF911F910F91FF90EF90DF90CF90BF9064 -:10418000AF909F908F907F906F905F900C94691686 -:1041900041EA57E16AEA77E10F900F900F900F9094 -:1041A0000F90DF91CF911F910F91FF90EF90DF90D3 -:1041B000CF90BF90AF909F908F907F906F905F90C7 -:1041C0000C9409094AEA57E161EA77E1E5CF45E352 -:1041D00056E16EE376E1E0CF4EE356E165E376E14A -:1041E000DBCF4DE156E169E276E1D6CF49E256E117 -:1041F0006DE176E1D1CF41E156E165E076E1CCCFEA -:1042000048E556E167E476E1C7CF0F900F900F9035 -:104210000F900F90DF91CF911F910F91FF90EF9032 -:10422000DF90CF90BF90AF909F908F907F906F90D6 -:104230005F900C94B4170E3D1C4509F0A7CD0F906C -:104240000F900F900F900F90DF91CF911F910F91D2 -:10425000FF90EF90DF90CF90BF90AF909F908F90A6 -:104260007F906F905F900C943618C8010E94A30B4A -:10427000D82E9ACD092F0F70907F11F00295007FF4 -:10428000812F2223C9F0002369F090E2910F98302A -:1042900010F011110BC080915F04082B00935F0494 -:1042A0000E94820B812F0E94570C17C080919102AF -:1042B000082B00939102F4CF0E941E0C002369F09A -:1042C0000095105E183010F0B11027C080915F0487 -:1042D000082300935F040E94820B98E0C91AD1085A -:1042E000E4E0CE16D10408F0C1CA0E94C20E0F90BD -:1042F0000F900F900F900F90DF91CF911F910F9122 -:10430000FF90EF90DF90CF90BF90AF909F908F90F5 -:104310007F906F905F900C94B81680919102082363 -:1043200000939102D8CF892F8F70907F903211F037 -:104330008295807FF1E0BF120CC0222329F0333038 -:1043400060F60E94140CC9CF323038F60E94090C76 -:10435000C4CF222341F03323A1F340FFA3CF4F70FA -:10436000F7014583EECF332389F3193309F0F5C004 -:10437000FFEF27EE33E0F15020403040E1F700C07E -:104380000000812F0E941E0CA8CF892F869586954C -:10439000837061F0813009F0A0CF812F93702111DB -:1043A00002C090E080E00E946E0897CF812F93704A -:1043B000211102C090E080E00E9484088ECF892FF6 -:1043C0008370A1F5211189CF812F82958695877001 -:1043D000880F880F412F4F70082E01C0440F0A9498 -:1043E000EAF7212F207114FF07C02FE030E001C051 -:1043F000220F8A95EAF720959695969593709230BC -:1044000081F0822F842B933030F48091920291308E -:1044100029F0242B82230E94050C5FCF842B822B52 -:10442000FACF242B809192028227F5CF8695222302 -:1044300011F0892F8170882309F44FCF812F829545 -:1044400086958770880F880F412F4F70082E01C006 -:10445000440F0A94EAF7212F207114FF07C02FE0C0 -:1044600030E001C0220F8A95EAF72095969596953F -:104470009370923081F0822F842B933030F48091AE -:104480007604913029F0242B82230E94791725CFBE -:10449000842B822BFACF242B809176048227F5CFB0 -:1044A000092F0F70222329F0802F0E949617812F49 -:1044B00048CF812F0E94090C802F0E948A170DCFB0 -:1044C000812FE1EF1E1789F1E11750F0F0EF1F1770 -:1044D000B9F02223B1F13111E5CE892F8F7129C0B6 -:1044E00042EF141749F153EF1513F3CF80E0222365 -:1044F00061F29F7181E001C0880F9A95EAF7C5CFFC -:10450000222379F0323008F0E8CE292F2F7181E094 -:1045100090E001C0880F2A95EAF7909176048927E8 -:10452000B4CF333008F0D9CEF0CF892F8F7122234A -:1045300021F20E949617D1CE892F8F712223C9F3C1 -:10454000BCCF332379F0893341F48FEF97EEE3E06A -:1045500081509040E040E1F712CF8FE39CE9019752 -:10456000F1F70DCF892F8F71A8CF0031FFE51F071D -:1045700009F4C3CB01312FE5120709F4DBCB0E940C -:1045800062086093F5027093F6028093F7029093AD -:10459000F802F7018281043F110509F438CD08F0D3 -:1045A00033CC0C32110509F443CD08F0C5CB0A30E9 -:1045B000110509F448CD0531110509F44FCD093035 -:1045C000110509F0C3CBF7018281882309F4BECB22 -:1045D000809176040E94CB0C813009F0B7CB81E347 -:1045E0000E94B313B3CB00313FE5130709F489CB25 -:1045F00001314FE5140769F682E084CB85E0DE01E6 -:10460000119601900D928A95E1F7F7012281898137 -:104610009A81211140C90E94A30B182F44C91F93EE -:10462000CF93DF9380915D02807FA9F480915A023D -:10463000882389F080918F02D0915E0260915802A8 -:1046400070915902A0915B02B0915C02C62FC72302 -:1046500016E0D81304C0DF91CF911F91089590E028 -:10466000109711F0CF3F19F401968770F2CF189F81 -:104670009001199F300D1124F901E15AFD4F41813C -:104680004713F2CF40814613EFCF42814111ECCF67 -:10469000438154814A1B5B0B403A510528F78091B6 -:1046A0005D028F70806180935D02F901EC59FD4FCE -:1046B00080818F708061808388E592E00E94161C63 -:1046C000DF91CF911F910C94990BAF92BF92CF9233 -:1046D000DF92EF92FF920F931F93CF93DF93CDB7AB -:1046E000DEB761970FB6F894DEBF0FBECDBF8C0169 -:1046F00085E0F801DE011D9601900D928A95E1F7A3 -:10470000F801E28088E5A82E82E0B82E60915B0275 -:1047100070915C026115710509F432C190915802E3 -:1047200040915902892F84238F3F09F429C12081A8 -:104730003181C380D480F0905A02F601E61BF70B5A -:10474000FF2009F4E8C080915D02582F507FE03AC5 -:10475000F10508F0ABC0511177C0FE2C431321C006 -:1047600092131FC0E1101DC08F70806180935D02A5 -:10477000C5010E94161C80915D02F80185838F2D72 -:1047800061960FB6F894DEBF0FBECDBFDF91CF911B -:104790001F910F91FF90EF90DF90CF90BF90AF905F -:1047A0000895CD2829F0822F83238F3F09F003C17C -:1047B00080E0F82FF170DF2E80FF3CC080918F02E7 -:1047C00040915E0256E0841315C02D873E878D858B -:1047D0009E850E94F414292F22952F702230F0F02C -:1047E000243018F59F70F1F0F8019581907FD1F495 -:1047F000D12C1EC090E0589FF001599FF00D11245C -:10480000E15AFD4F6181361306C06081261303C053 -:104810006281E6120FC001968770D5CF9F7011F0AC -:10482000882331F3805E883018F3C8010E94161C7B -:10483000FD2CA5CFEE2009F4A2CF80915D0281600E -:1048400080935D02F12C9BCF431306C0921304C0EA -:10485000F801EE2009F479C0C8010E9400158823F0 -:1048600009F1EE20F9F080915D02803270F0209124 -:1048700058023091590238872F831986DB86CA8601 -:104880008C87CE0107960E94161C86E0F801A8E5E9 -:10489000B2E001900D928A95E1F70E940F23FF2468 -:1048A000F3946DCFC8010E94161CF9CF51110AC0B4 -:1048B00088E592E00E94161C86E0F50111928A9527 -:1048C000E9F7C0CF43130FC092130DC0E1100BC026 -:1048D000F8018583C8010E94161C86E0F50111923B -:1048E0008A95E9F74CCFC8010E9400158823D1F2C0 -:1048F000EE20C1F280915D02803238F220915802A0 -:10490000309159023A8329831B82DD82CC828E83C7 -:10491000CE010196B8CFE03AF105F8F6FE2CEE2074 -:1049200009F243131FC092131DC080915D0280FDE8 -:1049300010C0982F907F69F0F8018583903F31F087 -:10494000982F907F905F8F70892B8583C8010E947C -:10495000161C86E0F801A8E5B2E001900D928A9558 -:10496000E1F70DCFC8010E94001581118ECF809113 -:104970005D02816080935D02C8010E94161CFFCE1B -:10498000EE2009F48FCFC8010E940015F82E88236D -:1049900009F488CF86E0F801A8E5B2E001900D9215 -:1049A0008A95E1F780915802909159020E94F4147F -:1049B0000E940F23E4CE81E08E25FBCE1F93CF9380 -:1049C000DF93CDB7DEB767970FB6F894DEBF0FBEA3 -:1049D000CDBF4B8B5C8B6D8B7E8B8F8B611110925F -:1049E00091021A8A198A85E0FE017396DE011D96EE -:1049F00001900D928A95E1F786E0FE013D96DE0179 -:104A0000179601900D928A95E1F7CE0107960E94C4 -:104A10006523882389F016E080918F0290915E02D1 -:104A200089134BC067960FB6F894DEBF0FBECDBF9B -:104A3000DF91CF911F91089586E0FE013796DE0148 -:104A4000119601900D928A95E1F78A859B85892BB5 -:104A500011F38F81988589238F3FE9F220915E02BF -:104A600030E0C90101968770992740918F0248175D -:104A7000190681F410925F040E94FA0F10925E02F0 -:104A800010928F0286E0E8E5F2E0DF011D928A9540 -:104A9000E9F7C1CF96E0929FD001939FB00D11240A -:104AA000A15ABD4FFE01319601900D929A95E1F702 -:104AB00080935E020E94990BAECF819FC0011124AA -:104AC000815A9D4F0E946523882309F4ABCF8091C2 -:104AD0008F0290E001968770992780938F029CCF78 -:104AE0009F92AF92BF92CF92DF92EF92FF920F937D -:104AF0001F93CF93DF93CDB7DEB764970FB6F894CB -:104B0000DEBF0FBECDBF8E010F5F1F4F8AE0D80101 -:104B10001D928A95E9F79EE4C92E91E0D92EF12CD9 -:104B2000E12CAA24A394B12CF60181916F018F3F4F -:104B300009F44AC0F894E82FE295EF70F0E021A163 -:104B40008F70A50102C0440F551F8A95E2F7CA0174 -:104B5000922F982B91A392A18095892382A30E94E2 -:104B6000BC0900C0E7E4F1E030E020E0912C419185 -:104B70004F3F09F47DC0A42FA295AF70B0E090968E -:104B80008C9190E04F7002C0959587954A95E2F719 -:104B900080FD6EC08A2D022E01C0880F0A94EAF7AC -:104BA000982A2F5F3F4F2730310509F7F6013197DB -:104BB00080818F3F11F00E94BE0950EA5A95F1F7AB -:104BC000F801EE0DFF1D90828FEFE81AF80A95E0CC -:104BD000E916F10409F0A8CF4AE050E0B80188EDE9 -:104BE00092E00E949B357C01892B41F08AE0F8011C -:104BF000A8EDB2E001900D928A95E1F71091E302E1 -:104C0000E114F104B9F181E0809395020E940A1C3D -:104C100090939402809393028091930290919402D6 -:104C20000E94FB1B069770F0A8EDB2E0E12FF0E0C8 -:104C3000E15BFC4F8D91819322E0AD3DB207D1F74E -:104C40001092950281E090E0EF28C1F064960FB6D3 -:104C5000F894DEBF0FBECDBFDF91CF911F910F91B2 -:104C6000FF90EF90DF90CF90BF90AF909F9008950E -:104C700080E096CF809195028111CECF0E949F0E49 -:104C8000B82EE091E302882309F4C7C08E01005FCB -:104C90001F4F85E0D8011D928A95E9F7F0E09F014A -:104CA000215B3C4F79018091D102AE014B5E5F4F99 -:104CB0006A018A3008F086C044E75AE1B801C701AA -:104CC0000E945B0E882309F494C041EE57E2B801BC -:104CD000C7010E945B0E882309F48BC04BE958E1A1 -:104CE000B801C7010E945B0E882309F482C047E81F -:104CF00059E1B801C7010E945B0E882309F479C00D -:104D000045E659E1B801C7010E945B0E882309F40A -:104D100070C01092D102E091E202F0E0AF01415B7D -:104D20005C4FD80110E0FA019191AF018D91981775 -:104D300031F09F0121503109F90180831B2DCA16E2 -:104D4000DB0689F780919C02882371F080919A029A -:104D500090919B020E94FB1B893E934028F082EEBB -:104D60000E941E0C10929C0288E9C82E82E0D82E68 -:104D7000F12CE12CD6018D916D018823D1F086951F -:104D8000F70109F447C0EC50FE4F808191819C8768 -:104D90008B871D860E940A1C8160782F9F878E87D3 -:104DA000F601319710824B855C856D858F850E9459 -:104DB000DE24B2E0EB0EF11CE4E0EE16F104D1F6D5 -:104DC000812F44CF80919602909197020E94FB1B05 -:104DD000843F914008F070CFA091E202B0E0A15B67 -:104DE000BC4FF8011D921192CE16DF06D9F71B2D8C -:104DF000A9CF8091D1028F3F31F08F5F8093D10294 -:104E00008A3008F488CF0E940A1C909397028093FE -:104E10009602E2CFE051FE4FB8CFF0E0E15BFC4FED -:104E2000F89485E0A0EBB2E001900D928A95E1F74D -:104E300065E070E080EB92E00E94F3088093AF029F -:104E40000E94BC09F894E091EB02F0E0E851FD4FBC -:104E500080818B878093B60261E070E0CE010B9673 -:104E60000E94F3088093B5020E94BC09F894C09098 -:104E7000B702D090B802E090B902F090BA028091E7 -:104E80009D0290919E02A0919F02B091A002C8162F -:104E9000D906EA06FB06D1F0C0929D02D0929E028E -:104EA000E0929F02F092A0020E949F0E81110EC01C -:104EB0000E946208C61AD70AE80AF90AC092D2020A -:104EC000D092D302E092D402F092D5020E94BC09A3 -:104ED000F8948091C202882321F184FF04C090914C -:104EE000C30290935C0380FF0DC08091BB0280FFE2 -:104EF00025C09091770491609093770460E0869547 -:104F00000E9469168091C20281FF09C020E0409191 -:104F1000BE026091BD028091BC020E9452151092A7 -:104F2000C2020E94BC09F8948091C402882349F00F -:104F30000E94B30D0E94BC0980E088CE0E94E50F5C -:104F4000E1CF0E94980DF6CFEF92FF920F931F933F -:104F5000CF93DF9300D000D00F92CDB7DEB7162FDE -:104F6000E82EF12CC701880F991F662339F18C5068 -:104F70009E4FFC01808191819A83898301E00B839C -:104F80000E940A1C8160782F9D838C83F701E8566C -:104F9000FD4F0127110F102B108349815A816B811E -:104FA0008D810F900F900F900F900F90DF91CF9108 -:104FB0001F910F91FF90EF900C94DE2480519E4F33 -:104FC000D8CFCF92DF92EF92FF920F931F93CF93A0 -:104FD000DF930F92CDB7DEB7EE24E394F12C06EB0E -:104FE00012E09E012F5F3F4F4BEA52E063E082E008 -:104FF0000E94C519082F882321F1C090E5028C2D4D -:1050000090E09C0128513D4F79011981F90180817F -:10501000181BD12E80E00AC0DA94F70180818F5FDF -:10502000808360E08C2D0E94A427802F1D14A4F3A0 -:10503000912F17FD90E0191B11110EC081110E94D4 -:10504000800B802F0F90DF91CF911F910F91FF90D8 -:10505000EF90DF90CF9008951F5FF701808181501E -:10506000808361E08C2D0E94A427802FE5CF1F92C2 -:105070001FB61F9211248F939F93AF93BF9380917C -:105080005604811113C08091570490915804A09147 -:105090005904B0915A044196A11DB11D8093570443 -:1050A00090935804A0935904B0935A04BF91AF91C0 -:1050B0009F918F911F901FBE1F901895CDB7DEB79F -:1050C000E9970FB6F894DEBF0FBECDBF84B7877FD8 -:1050D00084BF0FB6F894A895809160008861809392 -:1050E0006000109260000FBE80E890E00FB6F89468 -:1050F00080936100909361000FBE85B7806885BF83 -:1051000085B7806885BF8AEB99E090932F028093E2 -:105110002E020E94D5060E94A0078091E2008460C2 -:105120008093E200789480916C048823A1F0109120 -:10513000E9001F709091EC00892F817090FD80E84C -:10514000182B1092E9008091E80083FD0E94031063 -:105150001F701093E90082E084BD93E095BD9AEF43 -:1051600097BD80936E001092D2021092D3021092DB -:10517000D4021092D5020E942715811102C00E940C -:1051800083140E949F0E80935801809158018823B8 -:1051900009F4C6C010926F0185E2809370010E94ED -:1051A0009F0E81110E9490338091580181112FC070 -:1051B000FE01359686E0DF011D928A95E9F786E6C5 -:1051C000898387E98A8386EC8B8384E38C8385E3F8 -:1051D0008D833497AEE4B1E0CE010B9621912D93EF -:1051E0008E179F07D9F787E0E5E7F1E0DE0191969A -:1051F00001900D928A95E1F7FE01B196A7E4B1E026 -:10520000CE01889621912D938E179F07D9F7809113 -:10521000580195E0811190E09093E30285E0891BAD -:105220008093E2020EE411E0A3E5EA2EA1E0FA2E5B -:10523000F80181918F018F3F11F00E94BE09E016A5 -:10524000F106B1F707E411E0FEE4EF2EF1E0FF2EE6 -:10525000D8018D918D018F3F11F00E94BE09E0169B -:10526000F106B1F7E8EDF2E082EE92E0AFE4B3E0F0 -:1052700011921D928E179F07D9F70E94B11A8111C2 -:1052800002C00E94361882E090E00E94B1358093FF -:10529000440384E090E00E94B135182F82E290E050 -:1052A0000E94B135982F812F9093D7028093D60218 -:1052B0000E947025EFE7FBEB3197F1F700C000008B -:1052C0000E94702580914F0380FF2EC06FEF7FEF0B -:1052D00090E080E00E94E33581E08093E00080E28E -:1052E0008093D8001092C9008FE19EE40197F1F7F6 -:1052F00000C0000087E090EBDC0180938006909373 -:105300008106A0938206B093830688E19CE00FB6E5 -:10531000F894A895809360000FBE90936000FFCF33 -:1053200085E280936F0139CF83E090E00E94B13530 -:105330000E94050C809176040E94D0160E94B11A3A -:10534000811102C00E94361888E190E00E94B935B0 -:1053500060933D0470933E0480933F049093400417 -:10536000672B682B692B11F40E9406180E9491315B -:1053700067E081E00E94A71365E586E10E94A7131C -:1053800063E687E10E94A71360EA8AE10E94A713FF -:1053900069E98BE10E94A71365EF8CE10E94A713D6 -:1053A00060EA8DE10E94A71360E38EE10E94A713DB -:1053B00066E083E00E94A71361E08CE00E94A713DF -:1053C00060E081E00E94A71360E08CE00E94A713D8 -:1053D0006FE084E00E94A71361E08CE00E94A713B5 -:1053E0000E949F0E811102C00E94933383E080933C -:1053F0001A0380E2809343040E9491316DE070E0D3 -:105400008CE992E00E94680D892BE9F580911A03DE -:1054100063E070E081FD9EC289E992E00E94680D20 -:10542000892B89F56DE070E089E892E00E94680DB3 -:10543000892B49F50E9462086058774C8E4F9F4F28 -:1054400060934A0470934B0480934C0490934D04F2 -:10545000EEE7F4E080E092E0DF019C011D92215034 -:105460003040E1F7F0937F06E0937E068FEF9FEFE9 -:1054700090937D0480937C0481E080934F0480931B -:105480004E0410921B038091E402811136C00E94E9 -:10549000B11A811104C00E9436180E94C31788E017 -:1054A00090E00E94B93560937704709378048093FC -:1054B000790490937A0480915B03836080935B030B -:1054C0006E7F71F40E94C31788E090E00E94B935A6 -:1054D00060937704709378048093790490937A04AE -:1054E0000E940E098091770480FF04C060E08695D9 -:1054F0000E94691681E08093E40280915801811135 -:1055000006C084EF8093660185EF8093650120914A -:105510006601A22FA295AF70B0E091963C91919751 -:105520002F7081E090E0BC01022E01C0660F0A944A -:10553000EAF7462F4095432391964C939197929684 -:105540003C919297362B92963C93929740916501AD -:10555000E42FE295EF70F0E031A14F70042E01C00E -:10556000880F0A94EAF7982F9095932391A392A11C -:10557000892B82A390968C9190E002C09595879597 -:105580002A95E2F7817020A130E002C03595279579 -:105590004A95E2F792E020FF90E0892B8093EC029D -:1055A0008091580111E081278093EB02312F381B45 -:1055B0003093E5020E94913140E060E080E00E947B -:1055C000210D60E08AE00E94691689EA92E09093DA -:1055D0005E0380935D0381E00E94791780EE90E086 -:1055E00090935A0180935901109332030E94410D08 -:1055F0008BE591E090935304809352043E018DE338 -:10560000680E711C80916C04FF24F39400E112E198 -:10561000853009F4F2C10E947025E82E81110E94A4 -:105620006208E5E4F3E0AFE4B3E010E000E0B02EA0 -:10563000DD9081918D1509F404C28D25C12CFF24C4 -:10564000F394982F9F2109F4F7C10E949F0E88239D -:1056500099F0CEA6BFA6DF2081E009F480E088ABF8 -:105660000E940A1C8160782F9AAB89AB4EA55FA57A -:1056700068A98AA90E94DE24F801EB5BFC4F8081B7 -:10568000F826F0828091EC02E82FEE0FEE0F909159 -:105690006601A92FA295AF70B0E090962C9130E0F2 -:1056A0009F7002C0359527959A95E2F721703327B0 -:1056B00090916501A92FA295AF70B0E090964C91A2 -:1056C00050E09F7002C0559547959A95E2F7CA0140 -:1056D0008170992740FF02C082E090E0822B8E2BE0 -:1056E0008093EC021091EB028F70E82FF0E0E6500F -:1056F000FE4F80819091EA02890F8093EA02F12C9B -:1057000084306CF0E12FF0E0E851FD4F80818F5F35 -:10571000808360E0812F0E94A427FF24F39480916E -:10572000EA028D3F6CF4E12FF0E0E851FD4F8081FB -:105730008150808361E0812F0E94A427FF24F3948D -:105740008091EA02082E000C990B64E070E00E9440 -:1057500071358093EA02F1100E94800B80914F0412 -:10576000882351F180911C0390911D030E94FB1B23 -:10577000C29708F07DC120917C0430917D042115F1 -:10578000310509F0A0C280914E048823A9F00E943F -:10579000620800914A0410914B0420914C0430910E -:1057A0004D04601B710B820B930B6F3F7F4F8F4F2C -:1057B0009F4710F40E94980DE11001C0F1100E9463 -:1057C000B30D809142038A3008F0BAC38091400340 -:1057D000909141030E94FB1B089708F4B1C304E6B3 -:1057E00010E025E030E04BE353E064E084E10E9408 -:1057F000DC32892B09F075C31092420320913203E9 -:10580000222359F080913B0390913C0398278927EC -:10581000982790933C0380933B0386E0E4E2F3E017 -:10582000DE01919601900D928A95E1F786E0FE01E6 -:10583000B196DE01119601900D928A95E1F786E00E -:10584000FE013196A5E3B3E001900D928A95E1F750 -:1058500090913F038091360397FD3AC38E7F8093EA -:1058600036038091330390913403009709F02AC3E3 -:1058700060913B0380913C0300913D0310913E03F6 -:10588000222309F4F2C241E00E94FB0C2091300374 -:1058900030913103820F931F909331038093300333 -:1058A00041E0602F812F0E94FB0C20912E0330914C -:1058B0002F03820F931F90932F0380932E0360E397 -:1058C00073E08AE393E00E94DC0C6EE273E089E30C -:1058D00093E00E94DC0C109237031092380386E0AC -:1058E000E5E3F3E0DE01119601900D928A95E1F770 -:1058F00086E0FE013196A4E2B3E001900D928A9514 -:10590000E1F730912603209127039091280380919D -:10591000290370912003609121034091220350914B -:105920002303F0912503E0911F03FE13E0C233230C -:1059300011F07313DCC2222311F02613D8C288237E -:1059400011F08513D4C2992319F081E04913D0C214 -:1059500080E0CEC286E992E061CD80916C04843013 -:1059600009F43BC00E94980D40E060E080E00E9496 -:10597000210D80E00E94B8168091E702811109C0D4 -:10598000F092E7028091770481708093E6020E9492 -:10599000E50F10925604A8E1B0E0E0E40FB6F894E9 -:1059A000A895A09360000FBEE093600083B7817F4D -:1059B000846083BF83B7816083BF7894889583B701 -:1059C0008E7F83BF0FB6F894A895809160008861A0 -:1059D00080936000109260000FBE80916B0488235A -:1059E00061F00E947025EFE4F3E08191811178C4A9 -:1059F00029E533E02E173F07C1F780916C0485300D -:105A000009F4ABCF10925F040E94FA0F0E94C20EFD -:105A10000E94B8161092E7028091E602882349F0AE -:105A20008091770481608093770460E086950E947E -:105A300069160E94410DEFCDC394FF0C37E0C312ED -:105A400000CE0F5F1F4F0A30110509F0F0CD8FEF28 -:105A50008BAB8CAB1DAA0E940A1C8160782F9FAB78 -:105A60008EAB4BA95CA96DA98FA90E94DE240ACE3A -:105A70000E940A1C90931D0380931C0360E080E049 -:105A80000E949A080E94C20E8093F9020E949F0E03 -:105A9000882331F14091F5025091F6026091F702AE -:105AA0007091F8022FB7F8948091570490915804A0 -:105AB000A0915904B0915A042FBF841B950BA60BDB -:105AC000B70B81339547A105B10540F00E94980DB1 -:105AD00080914F04882309F456CE4DCE0E94B30D19 -:105AE0000E949F0E882309F4D5C061E080E00E94E7 -:105AF0009A0860E08CE791E00E948B1362E080E0FE -:105B00000E949A08809176040E94CB0C823009F49E -:105B10009BC008F090C0882309F496C0813009F436 -:105B200099C065E080E00E949A0860E08AE991E00F -:105B30000E948B1366E080E00E949A086091F9024F -:105B4000669561708FE991E00E948B1367E080E0B9 -:105B50000E949A086091F9026095617084EA91E070 -:105B60000E948B1368E080E00E949A086091F9021D -:105B700062FB662760F988EA91E00E948B137DA69C -:105B80006CA64091F1025091F2026091F302709183 -:105B9000F4022FB7F8948091570490915804A09183 -:105BA0005904B0915A042FBF841B950BA60BB70B59 -:105BB0008D329140A105B10508F48ACF0E94620898 -:105BC0006093F1027093F2028093F3029093F402D7 -:105BD0008091F002811104C080916701811142C05F -:105BE0006DE080E00E949A0860E08DEA91E00E94FA -:105BF0008B136AE080E00E949A0881E0809367013D -:105C00008091EF0290E00196817099278093EF02D6 -:105C100021E030E0281B390B40E6429FC001439F42 -:105C2000900D11242091EE02222351F1855C9B4FAF -:105C30000E9492064DCF833089F0843009F071CFF5 -:105C400060E08EE891E003C060E082E891E00E94AD -:105C50008B1367CF60E088E891E0F9CF60E084E9DA -:105C600091E0F5CF6AE080E00E949A0860E08DEA5A -:105C700091E00E948B136BE080E00E949A08C0CFF5 -:105C80002091ED02222319F085589C4FD1CF8554E5 -:105C90009D4FCECF64E080E00E949A0860E083EBE5 -:105CA00091E00E948B1365E080E00E949A0860E01A -:105CB00089EB91E00E948B1369E080E00E949A08D2 -:105CC0008BEF94E0B5CF80911B0361E070E0811110 -:105CD0005ACD082F10E02B01082E02C0440C551C91 -:105CE0000A94E2F7A90144215521452B09F448C043 -:105CF00090911A0390FD46C08295880F807680931C -:105D00006A019801369527953695279520936D0160 -:105D1000815E80936B0110926E0124E630E047E0D3 -:105D200050E068E671E088E70E948832892B09F02C -:105D30002ACDA80175E0440F551F7A95E1F78091AF -:105D40001A0380FD2DC042585B4F04E610E020E2AC -:105D500030E060E488E70E94AF32892B09F013CD70 -:105D60000E94B30DC2018095909540907C045090A4 -:105D70007D044822592250927D0440927C0403CD38 -:105D80008F5FA7CF880F880F880F80936A011092CA -:105D90006D01895F80936B0183E080936E01BDCFBD -:105DA000EAEFF2E080E2DF011D928A95E9F7EEE08A -:105DB000F2E0F9AFE8AF0AE012E099249394A8ADBD -:105DC000B9AD2D91B9AFA8AFF80121908F01240E84 -:105DD000352E311CC10182589B4F1C01E22FF0E08F -:105DE000E650FD4F30E020E067E0A62EA21AB92C65 -:105DF000022E01C0BB0C0A94EAF7610190E0D601C3 -:105E00008D916D018B216A2D691B6770862E062E80 -:105E1000000C770BB82F01C0BB0F8A94EAF78B2ECA -:105E20007195619571096770772701C086956A95AC -:105E3000EAF7882A8081882A80829F5F9830F9F665 -:105E40002F5F3F4F31962830310571F6E2E1F2E0E5 -:105E500028AD39ADE217F30709F0B1CF04E610E041 -:105E600020E230E04AEF52E074CF45E00E94FB0CA4 -:105E700020912C0330912D03281B390B30932D03D7 -:105E800020932C0345E0602F812F0E94FB0C209172 -:105E90002A0330912B03281B390B30932B032093BB -:105EA0002A036CE273E087E393E00E94DC0C6AE271 -:105EB00073E088E393E00E94DC0C10923A031092A6 -:105EC00039030DCD0197909334038093330307CDAD -:105ED00081608093360384E00E94B31384E190E0F4 -:105EE000F2CF809142038F5F80934203F8CC81E030 -:105EF00080FF0FC0E0915204F0915304309749F0B5 -:105F000082E0809324030480F581E02D84E293E015 -:105F100009951092260310922703109228031092DD -:105F2000290386E0E4E2F3E0AEE1B3E001900D92F4 -:105F30008A95E1F70E940A1C9093410380934003E5 -:105F40000E94C20E90914303891731F00E94C20E45 -:105F5000809343030E94B81680916C04843009F04A -:105F600051CB83E08093E9008091E80082FF4ACB27 -:105F70008091E80090E085FF0BC00E94F40630E2BB -:105F8000E32EF12C8E010F5F1F4F8823E1F091E08B -:105F90008091E8008B778093E800992309F432CB55 -:105FA000E981E150E33108F071C0F0E0E05BF84CCA -:105FB0000C9485358091F100D8018D938D01B1E06D -:105FC000EB1AF10821F38091E80085FDF3CF809171 -:105FD000E8008B778093E8000E94F406882399F309 -:105FE000D6CF1A8289E08B8311C08A81823009F46E -:105FF0008FC1833091F1813009F048C00E9462085E -:106000000E948B356B837C838D839E8380916C048F -:10601000843009F0F7CA1091E9001F709091EC00EC -:10602000892F817090FD80E8182B82E08093E90031 -:106030008091E80080FF0DC050E040E060E270E039 -:10604000CE0101960E9425078091E8008E7780930B -:10605000E8001F701093E900D5CADE011396EFE443 -:10606000F3E081918D9323E0E935F207D1F7CECFAC -:106070008A81823059F46B817C818D819E810E945E -:106080008B3586E290E00E94C535C0CF8FEF8983C3 -:10609000BDCF4C816B818A810E94921498278927F9 -:1060A00098279E838D83B2CF0D811E8110270127F3 -:1060B00010278A81EB803EE0E39E700111249CE86A -:1060C000899FE00CF11C11248C8190E0880F991FAE -:1060D000E80EF91E612FC70187960E94C535602F13 -:1060E000C7018896D0CF0E94161490CF8A8181383C -:1060F000C1F060F4803809F089CF20E04B816091D5 -:106100007904809178040E94521580CF8238E9F09A -:10611000833809F07BCF20E040917A046C818B8139 -:10612000F2CF60E08B810E9469168B81811103C0E0 -:106130000E94E50F6BCF8091770481608093770494 -:1061400060E086950E94691661CF8B8180937B0405 -:106150005DCF8A81813899F030F4803809F056CFCC -:1061600080917A0440CF823891F0833809F04ECF85 -:10617000809178048B83809179048C8347CF8091C0 -:10618000770480FF02C086952ECF80E02CCF8091CF -:106190007B0429CF60917704709178048091790411 -:1061A00090917A040E94401531CF80E18A832ECFEE -:1061B00081E08A838DE117CFCA80DB80DC24CD2487 -:1061C000DC248E010F5F1F4FEC80E00EF12EF11CDE -:1061D000C6018D519D4F0E151F0509F417CFADE176 -:1061E000CA16A1E0DA0650F40E94B135F8018483A2 -:1061F000BFEFCB1ADB0A0F5F1F4FEACFD80114960F -:106200001C92F6CF0A811B81102701271027FE015F -:1062100031966F01EC80E00EF12EF11CC8018D511A -:106220009D4FE016F10609F4F1CE0D31F1E01F07A4 -:1062300028F4D60114966C910E94C535BFEFCB1A95 -:10624000DB0A0F5F1F4FEACF0E940614DFCE85E006 -:10625000ADCFCA80DB80DC24CD24DC248E010F5F2F -:106260001F4FEC80E00EF12EF11CC6018796E01660 -:10627000F10609F4CBCEECEBCE16E2E0DE0658F4E4 -:106280000E94B135D80114968C93FFEFCF1ADF0A24 -:106290000F5F1F4FEACFF8011482F7CF0A811B81ED -:1062A0001027012710279E012F5F3F4F6901EC80C7 -:1062B000E00EF12EF11CC8018796E016F10609F4F4 -:1062C000A5CE0C3B32E0130728F4D60114966C914E -:1062D0000E94C535BFEFCB1ADB0A0F5F1F4FEBCF14 -:1062E00009BD19BD09B400FEFDCF8091D8008F7D96 -:1062F0008093D8008091E00082608093E0008091DC -:10630000E00081FDFCCF10925F040E94FA0F75CB74 -:1063100086E290E00E94B1351B821C821D828E8332 -:1063200075CE1092B9008CE08093B80008959F92CA -:10633000AF92BF92CF92DF92EF92FF920F931F9393 -:10634000CF93DF93B82EEB010E940A1C6C01EE2460 -:10635000E394F12CC431D10560F025E0E22EF12C5C -:10636000CF3FDC0731F0CE0164E170E00E9451358F -:106370007B0184EAA82E94E8992E1092BC00A0928A -:10638000BC000E940A1C8C018091BC0087FF0DC0DC -:106390008091B900887F883039F18091B900887F79 -:1063A000803111F10FEF1FEF09C00E940A1C801B02 -:1063B000910B8E159F0540F30EEF1FEFCF3FDC07CB -:1063C000E1F2C6010E94FB1B8C179D07B0F2C801C9 -:1063D000DF91CF911F910F91FF90EF90DF90CF90C1 -:1063E000BF90AF909F900895B092BB009092BC0078 -:1063F0000E940A1C8C018091BC0087FF0AC080911A -:10640000B900887F883111F0803461F610E000E037 -:10641000DECF0E940A1C801B910B8E159F0558F33E -:10642000CBCF0F931F93CF93DF93EB018093BB00F0 -:1064300084E88093BC000E940A1C8C018091BC00FF -:1064400087FF11C02091B900287F81E090E02832B9 -:1064500011F490E080E0919581959109DF91CF91C1 -:106460001F910F910895CF3FDC0741F30E940A1C52 -:10647000801B910B8C179D0708F38EEF9FEFEECFDB -:106480000F931F93CF93DF93EC0184EC8093BC00B8 -:106490000E940A1C8C018091BC0087FF08C080917B -:1064A000BB0090E0DF91CF911F910F910895CF3FF6 -:1064B000DC0789F30E940A1C801B910B8C179D0737 -:1064C00050F38EEF9FEFEECF0F931F93CF93DF9399 -:1064D000EC0184E88093BC000E940A1C8C0180912E -:1064E000BC0087FF08C08091BB0090E0DF91CF9196 -:1064F0001F910F910895CF3FDC0789F30E940A1C7A -:10650000801B910B8C179D0750F38EEF9FEFEECF02 -:10651000CF92DF92EF92FF920F931F93CF93DF936F -:106520006B018A017901B9010E949731E6010C0DD6 -:106530001D1DC017D10761F424E92093BC00DF9131 -:10654000CF911F910F91FF90EF90DF90CF90089522 -:1065500097FDF2CFB70189910E941132EACFCF9215 -:10656000DF92EF92FF920F931F93CF93DF93C62F8B -:106570006A017901B8010E94973197FD0CC0B801FA -:106580008C2F0E941132E601EC0CFD1CCE15DF05AC -:1065900011F097FF0CC024E92093BC00DF91CF914C -:1065A0001F910F91FF90EF90DF90CF900895B80169 -:1065B00089910E941132EACFCF92DF92EF92FF923F -:1065C0000F931F93CF93DF93F82EE62EEA01690114 -:1065D000B8010E94973197FD15C0B8018E2D0E9419 -:1065E000113297FD0FC0B8018F2D81600E94973145 -:1065F000F12CE12C21E0C21AD108EC14FD0400F5C5 -:1066000097FF11C024E92093BC001816190614F452 -:1066100090E080E0DF91CF911F910F91FF90EF907C -:10662000DF90CF900895C8010E94403297FD04C0CA -:10663000FE01EE0DFF1D80832FEFE21AF20ADDCF7F -:1066400097FDE0CFC8010E94643297FDDBCFCC0DEF -:10665000DD1D8883D7CF84E98093BC0008958EE147 -:106660004A9B02C08150E1F74A9BFECF08955A9899 -:1066700080E28A95F1F75A9A0895FC013BE03A9539 -:10668000F1F798E020E080E031E040E14A95F1F751 -:10669000880F4A9B02C08160232742E04A95F1F7A8 -:1066A000000040E14A95F1F7915079F790E19A9511 -:1066B000F1F799B132E03A95F1F7000040E14A95DF -:1066C000F1F792FB992790F992272081920F9083FE -:1066D0000895EF92FF920F931F93CF93DF930F9242 -:1066E000CDB7DEB719828C017C01E60EF11C0E15C8 -:1066F0001F0561F481E09981911180E00F90DF9195 -:10670000CF911F910F91FF90EF9008950E942F332A -:10671000CE0101960E943D33F80181938F01E7CFAE -:10672000529A5A9A089552985A9AEA9AE9E6F0E0EB -:1067300080818F7C808308956150770B91E001C048 -:10674000990F6A95EAF720E031E0911108C0222301 -:1067500091F05A9A80E28A95F1F75A980895492F54 -:10676000482339F05A9A232740E24A95F1F7969543 -:10677000ECCF5A98F9CF5A98EDCFFF920F931F9311 -:10678000CF93DF93EC018C01060F111DC017D107C9 -:1067900031F4DF91CF911F910F91FF900895F990FF -:1067A0000E94373368E08F2D0E949C33EFCF1F92F9 -:1067B0000F920FB60F921124EF92FF920F931F9337 -:1067C0002F933F934F935F936F937F938F939F93F9 -:1067D000AF93BF93EF93FF93CF93DF930F92CDB718 -:1067E000DEB719820E942F33CE0101960E943D33FD -:1067F000A82FA695A695A695282F229525709A2FA5 -:106800009570290F922F937026952695920F9827B1 -:1068100097708981982B09F075C0A83008F072C074 -:1068200080E18A95F1F75A9A529AB2E0BA95F1F757 -:1068300000C05A98EA2EF12CEAE0AE9FD001112454 -:10684000AF5FBE4F1896ED91FC9119973097B1F05C -:106850006091F8017091F90116962D913C9117976E -:10686000260F371F13968D919C911497680F791FEF -:1068700015964C91159712968C9109958AE08E9DEC -:10688000F0018F9DF00D1124EF5FFE4F65816623AF -:1068900051F02091F8013091F90186819781820FA2 -:1068A000931F0E94BD330E943733F0E1FA95F1F750 -:1068B0005A9852985A9A80E18A95F1F78AE08E9D0B -:1068C00080018F9D100D11240F5F1E4FD80112966D -:1068D0006C911297662371F12091F8013091F901C2 -:1068E00013968D919C91820F931F0E946933D8015A -:1068F000ED91FC91882311F088E001C082E0808353 -:106900000E942F330F90DF91CF91FF91EF91BF91B4 -:10691000AF919F918F917F916F915F914F913F9137 -:106920002F911F910F91FF90EF900F900FBE0F903E -:106930001F901895ED91FC91DFCF0F931F93CF938C -:10694000DF93EC0108970CF0A9C08AE08C9FF0015E -:106950008D9FF00D1124EF5FFE4F80819181892B77 -:1069600009F49CC0F894529A5A9885E08A95F1F7F8 -:1069700000008C2F869585709C2F9570890F982F1D -:10698000937086958695890F8E0193E0000F111FF5 -:106990009A95E1F7082B0E94373300C068E0802FFA -:1069A0000E949C33A0E1AA95F1F752985A9A4A9B0B -:1069B00027C087E090E04A9925C08AE08C9F80013B -:1069C0008D9F100D11240F5F1E4FF8016581662306 -:1069D000A1F12091F8013091F90186819781820F10 -:1069E000931F0E946933811128C0529A5A9AD80184 -:1069F000ED91FC9182E08083789482E090E016C073 -:106A000000C0D5CF0197B9F4529A5A9A8AE08C9F68 -:106A1000F0018D9FF00D1124EF5FFE4F0190F0818A -:106A2000E02D81E08083789481E090E0DF91CF9148 -:106A30001F910F91089500C0BECF0E942F33B0E286 -:106A4000BA95F1F75A98529AE0E1EA95F1F78AE09F -:106A50008C9FF0018D9FF00D1124EF5FFE4F62813E -:106A6000662351F02091F8013091F90183819481DE -:106A7000820F931F0E94BD330E9437338AE08C9FA0 -:106A8000F0018D9FF00D1124EF5FFE4F0190F0811A -:106A9000E02D1082789490E080E0C8CF84E090E010 -:106AA000C5CFAA1BBB1B51E107C0AA1FBB1FA6175E -:106AB000B70710F0A61BB70B881F991F5A95A9F7A7 -:106AC00080959095BC01CD010895991B79E004C093 -:106AD000991F961708F0961B881F7A95C9F780951D -:106AE000089597FB072E16F4009407D077FD09D080 -:106AF0000E94513507FC05D03EF4909581959F4F3B -:106B00000895709561957F4F0895EE0FFF1F0590D2 -:106B1000F491E02D0994692796276927782787271C -:106B200078270895FB01DC0102C005900D924150C9 -:106B30005040D8F70895FB01DC0104C08D9101900D -:106B4000801921F441505040C8F7881B990B0895D3 -:106B5000FB01DC0102C001900D9241505040D8F77A -:106B60000895F999FECF92BD81BDF89A992780B515 -:106B70000895A6E1B0E044E050E00C94EB35A8E1C4 -:106B8000B0E042E050E00C94EB35262FF999FECFAF -:106B900092BD81BDF89A019700B4021639F01FBA70 -:106BA00020BD0FB6F894FA9AF99A0FBE089503968D -:106BB000272F0E94C6350E94C535252F0E94C63555 -:106BC000242F0C94C6350196272F0E94C6350C94AD -:106BD000C535DC01CB01FC01F999FECF06C0F2BD41 -:106BE000E1BDF89A319600B40D9241505040B8F78B -:106BF00008950E943B3608F481E00895E89409C0A6 -:106C000097FB3EF490958095709561957F4F8F4FDF -:106C10009F4F9923A9F0F92F96E9BB279395F695F5 -:106C2000879577956795B795F111F8CFFAF4BB0F73 -:106C300011F460FF1BC06F5F7F4F8F4F9F4F16C0D7 -:106C4000882311F096E911C0772321F09EE8872F61 -:106C5000762F05C0662371F096E8862F70E060E01D -:106C60002AF09A95660F771F881FDAF7880F969596 -:106C7000879597F90895990F0008550FAA0BE0E83A -:106C8000FEEF16161706E807F907C0F012161306EE -:106C9000E407F50798F0621B730B840B950B39F42E -:106CA0000A2661F0232B242B252B21F408950A2694 -:106CB00009F4A140A6958FEF811D811D08950E94C2 -:106CC00072360C94E3360E94D53638F00E94DC36DA -:106CD00020F0952311F00C94CC360C94D23611246C -:106CE0000C9417370E94F43670F3959FC1F3950FFB -:106CF00050E0551F629FF001729FBB27F00DB11D40 -:106D0000639FAA27F00DB11DAA1F649F6627B00DCF -:106D1000A11D661F829F2227B00DA11D621F739FB8 -:106D2000B00DA11D621F839FA00D611D221F749FC6 -:106D30003327A00D611D231F849F600D211D822F0D -:106D4000762F6A2F11249F5750409AF0F1F0882334 -:106D50004AF0EE0FFF1FBB1F661F771F881F915061 -:106D60005040A9F79E3F510580F00C94CC360C940E -:106D700017375F3FE4F3983ED4F386957795679590 -:106D8000B795F795E7959F5FC1F7FE2B880F911D8B -:106D90009695879597F9089597F99F6780E870E031 -:106DA00060E008959FEF80EC089500240A94161681 -:106DB000170618060906089500240A9412161306E9 -:106DC000140605060895092E0394000C11F4882377 -:106DD00052F0BB0F40F4BF2B11F460FF04C06F5F93 -:106DE0007F4F8F4F9F4F089557FD9058440F551F69 -:106DF00059F05F3F71F04795880F97FB991F61F03D -:106E00009F3F79F087950895121613061406551FB3 -:106E1000F2CF4695F1DF08C0161617061806991F1F -:106E2000F1CF86957105610508940895E894BB2714 -:106E300066277727CB0197F90895F894FFCFEA10DA -:106E4000121165111211651145117D1165117A122A -:106E50008712121512151B151B151D151B151B1559 -:106E60001B151215121522151B151B152215671C53 -:106E7000DD1CE01CF41CF71C0A1D131D371D7D1DB5 -:106E8000AF1DC31D491D6C1D3A213A219321932149 -:106E9000C5216D216D216D21DF21502260226022EC -:106EA000F12FF52F38304930543073307630A93017 -:106EB000CA3046304630D530D830DC30023124314B -:066EC000273129314E319B -:106EC6000138020000000100000000380200000046 -:106ED600050100000038020000000106000000382D -:106EE600020000000107000000380204080000004C -:106EF6000000003802090C00000000000038020102 -:106F06001500000000000036323331F7F667669749 -:106F1600C6343500000000000180005F082E0E0D0B -:106F26000E090E050EF4F5010021007F2200030074 -:106F36004A004A4A01F6F731333236674C41594521 -:106F4600520042617365200047616D652000526101 -:106F5600697365004C6F776572004C4F434B004375 -:106F6600617073004E756D005363726C00202020B3 -:106F7600202000534F4C415200544D505354008131 -:106F86008283E200E900EA00B500B600B700CD0052 -:106F96008301CC008A01920194012102230224027A -:106FA6002502260227022A02B300B4006F007000F1 -:106FB6000603060806010606AF0200FF01000100EF -:106FC60000FFFF0000010001FF0000081018181064 -:106FD600080000010202020202020202020240222C -:0E6FE6007B99017701FC00000C190C390C009E +:1019B00009F09F5F892F0895CF93DF93CDB7DEB7EE +:1019C00062970FB6F894DEBF0FBECDBF96E0E4E29B +:1019D000F3E0DE01179601900D929A95E1F796E0FB +:1019E000FE013796DE011D9601900D929A95E1F762 +:1019F00098858823E9F0962B9E8786E0FE013D9628 +:101A0000DE01119601900D928A95E1F786E0FE01C4 +:101A10003196A4E2B3E001900D928A95E1F76296C7 +:101A20000FB6F894DEBF0FBECDBFDF91CF91089502 +:101A300060959623E1CFDC01FB01808191818038A4 +:101A400091054CF08FE78C93808191818F5791099C +:101A500091838083089581382FEF92073CF481E8C9 +:101A60008C938081918181589F4FF2CF8C9311820A +:101A700010820895681708F5861B682F21E0469F9D +:101A8000A0011124649FF001659FF00D1124409185 +:101A9000590150915A01E49FC001E59F900DF49FB8 +:101AA000900D1124880F892F881F990B919522235F +:101AB00019F09195819591090895681B20E0DFCF79 +:101AC0000F931F93CF93DF9300D000D0CDB7DEB735 +:101AD00089836A834B831C8204E610E024E030E0B3 +:101AE000AE014F5F5F4F60E084E10E94B2320F9021 +:101AF0000F900F900F90DF91CF911F910F9108954C +:101B000080913203882329F047E669E98BE20C943F +:101B1000600D6091590170915A0190E080E00E943F +:101B2000013620E030E040E05CE30E94623620E0D5 +:101B300030E040E85FE30E94FC35882321F047EC69 +:101B40006BE180E0E4CF41E265EA89EDE0CFCF923E +:101B5000DF92EF92FF920F931F93CF93DF936C016D +:101B60007B0164E670E088E70E949A31EC0197FD02 +:101B700012C010E000E0F601E00FF11F849164E66E +:101B800070E00E941432EC01892B29F40F5F1F4F83 +:101B90000E151F0581F70E942E33CE01DF91CF91E4 +:101BA0001F910F91FF90EF90DF90CF90089580915B +:101BB0004E0490914F04911103C091E0892708953C +:101BC000882369F062E070E08CEE9BE00E94A70D34 +:101BD000892B19F080914E04089510924E04809143 +:101BE0004E04EBCFCF93C0914E0480914F048823D5 +:101BF000D1F00E9462086058774C8E4F9F4F6093DF +:101C00004A0470934B0480934C0490934D04C1118B +:101C100008C062E070E08AEE9BE00E94A70D892B6D +:101C200029F0C0914E048C2FCF91089581E08093CC +:101C30004E04F7CF90916C04943029F580935B04A7 +:101C400070935D0460935C049093E9008FEF909132 +:101C5000E800815095FD06C095ED9A95F1F70000DA +:101C60008111F5CF8091E80085FF0DC050E040E084 +:101C700063E070E08BE594E00E9425078091E80026 +:101C80008E778093E8000895BC0184E00C941A0ECE +:101C9000BC0183E00C941A0E9C0184E08093E9005F +:101CA0009FEF8091E800915085FD06C085ED8A95F3 +:101CB000F1F700009111F5CF8091E80085FF0CC08D +:101CC00050E040E066E070E0C9010E942507809185 +:101CD000E8008E778093E8000895CF93DF93EC01BE +:101CE00081E08093E9008FEF9091E800815095FDAD +:101CF00006C095ED9A95F1F700008111F5CF80911E +:101D0000E80085FF14C050E040E068E070E0CE01DC +:101D10000E9425078091E8008E778093E80088E094 +:101D2000FE01A2E6B4E001900D928A95E1F7DF9101 +:101D3000CF9108959F92AF92BF92CF92DF92EF9290 +:101D4000FF920F931F93CF93DF937C015B016A0196 +:101D50008091D10201E010E08A3010F40AE010E036 +:101D6000C1E0D0E0F894B501C701F6010995982EBD +:101D70000E94BC09911004C021960C171D076CF439 +:101D8000892DDF91CF911F910F91FF90EF90DF9000 +:101D9000CF90BF90AF909F900895CC9F9001CD9F22 +:101DA000300D300D112490E080E045E34A95F1F7C5 +:101DB0000000019682179307C1F7D4CF8091A1024A +:101DC000811110C08091D80080618093D8008AE191 +:101DD0008A95F1F700C08091D90080FF0AC081E0A8 +:101DE0008093A10281E09091A102913009F080E0FE +:101DF000089582E08093A1020E94D50610926C049F +:101E0000F1CF0E94DE0E882351F0E0915204F09150 +:101E10005304309721F00190F081E02D099480E087 +:101E200008951F93CF93DF93182FEB010E94570C57 +:101E30008FE99FE00197F1F700C000002197C1F7FB +:101E4000812FDF91CF911F910C941E0C4F925F92C6 +:101E50006F927F928F929F92AF92BF92CF92DF92BA +:101E6000EF92FF920F931F93CF93DF93CDB7DEB71F +:101E7000CE5DD1090FB6F894DEBF0FBECDBF509036 +:101E800070019091770490FF5DC080905D03909009 +:101E90005E038114910409F068C0E0E6F6E09E015B +:101EA0002F5F3F4FBE0161527F4FC901A4914A2F5E +:101EB00050E0DA01AA0FBB1FA40FB51FA15ABC4FF7 +:101EC000CD90DD90EC90D901CD92DD92ED929D0107 +:101ED00031966A177B0751F720916F0143E0249FE9 +:101EE000800D911D1124539A2BB1277F3BB138608F +:101EF0005FB7F894BC01549E600D711D11248617C4 +:101F0000970709F08EC05FBF8FE594E00197F1F766 +:101F100000C00000C252DF4F0FB6F894DEBF0FBE04 +:101F2000CDBFDF91CF911F910F91FF90EF90DF9088 +:101F3000CF90BF90AF909F908F907F906F905F9069 +:101F40004F900895809171012091720133E0839F39 +:101F5000F0011124E15AFC4F821708F096CF11824C +:101F6000108212828F5F3396F7CF90FF96CFD12CDD +:101F7000C12C66246394712C53E0452E80915C0340 +:101F800093010C2C01C0220F0A94EAF7822309F472 +:101F90003FC0F601EE0FFF1FE80DF91DE590F4902C +:101FA000E114F10409F479CF45E050E0B701CE0126 +:101FB00001960E94953509810F3F51F18A81800F6A +:101FC0009927991F8B34910514F08AE490E05C0105 +:101FD000AA0CBB1C8A0D9B1DDC01A15ABC4F5D01E4 +:101FE000049D80011124015A1C4F0A151B0520F085 +:101FF000B5E0EB0EF11CD8CF4D81413A08F040EA34 +:1020000098016C818B810E9424090D5F1F4FEDCFD9 +:10201000EFEFCE1ADE0AF8E0CF16D10409F0AECF0A +:102020003CCFFC014191CF01E8E03BB9000000C08A +:1020300047FF2BB9440F000000C000C000C02BB9FF +:1020400000C0EA9591F75BCFE7E7F4E080818E7FEF +:102050008083E9E5F3E08281816082832FEF80E76E +:1020600092E0215080409040E1F700C000000C94C5 +:10207000260FE2E3F2E086E0DF011D928A95E9F7A0 +:102080000C94F70B1F93CF93DF93CDB7DEB7AA97CE +:102090000FB6F894DEBF0FBECDBF8EE694E0209160 +:1020A000F100DC012D93CD01B4E086379B07B9F731 +:1020B00080916F04833009F471C0B8F4813009F461 +:1020C00048C0823009F4B4C08091E80083FF3CC16D +:1020D00080916E0490916F049A3008F035C1E92F19 +:1020E000F0E0EE5DF84C0C9488358A3009F48FC02E +:1020F0008B3009F470C0893039F780916E048132D9 +:1021000019F78091720490917304009711F002976F +:10211000D9F68091E800877F8093E8008091E800FD +:1021200082FF37C09091F3008091F200029729F46A +:102130008091F1008B7F813021F48091F1008093B8 +:1021400061048091E8008B778093E8000E944F073C +:10215000BBCF80916E04813A09F0B6CF8091E80040 +:10216000877F8093E8008091720490917304892B9B +:1021700061F468E082E694E070E00E9401088091DA +:10218000E8008B778093E8009FCF60E090E080E0EC +:10219000F3CF80916C048111C1CF96CF80916E04F2 +:1021A000813A09F091CF8091720490917304892B48 +:1021B00009F08ACF8091E800877F8093E8008091C2 +:1021C000E80080FFFCCF809174018093F100809142 +:1021D000E8008E77B9CF80916E04813209F074CF18 +:1021E0008091720490917304892B09F06DCF8091D6 +:1021F000E800877F8093E8000E944F078091700479 +:102200008093740110925F040E9439105DCF809119 +:102210006E04813209F058CF8091E800877F809367 +:10222000E8000E944F0780917104809360044CCFB6 +:1022300080916E04813A09F047CF8091E800877F52 +:102240008093E8008091E80080FFFCCF80916004DB +:10225000BCCF803899F0823809F076C08091720442 +:102260008F70873008F070C08093E9008091EB0098 +:1022700085FB882780F91092E90006C080916A04E6 +:1022800090916B04911182609091E800977F9093F8 +:10229000E8008093F1001092F1008091E8008E77C1 +:1022A000B5C1882309F4A2C1823009F04DC08091E4 +:1022B00070048111A6C1809172048F702FEF280FD6 +:1022C000263008F041C08093E9002091EB0020FF08 +:1022D00098C1933031F48091EB0080628093EB00E1 +:1022E00090C19091EB0090619093EB0021E030E081 +:1022F00001C0220F8A95EAF72093EA001092EA00C3 +:102300008091EB008860EACF81111EC010917004AB +:102310001F778091E3008078812B8093E300809188 +:10232000E800877F8093E8000E944F078091E800D3 +:1023300080FFFCCF8091E30080688093E30082E01F +:10234000111183E080936C048091E80083FF0AC040 +:102350008091E800877F8093E8008091EB008062A5 +:102360008093EB00AA960FB6F894DEBF0FBECDBFE8 +:10237000DF91CF911F9108958058823028F72091E6 +:102380007004309171042C3DE3E03E07A1F583E039 +:102390008A838AE289834FB7F894DE01139620E09E +:1023A0003EE051E2E32FF0E050935700E49120FF2C +:1023B00003C0E295EF703F5FEF708E2F90E0EA3040 +:1023C000C0F0C7968D939D932F5F243159F74FBF6F +:1023D0008091E800877F8093E8006AE270E0CE0198 +:1023E00001960E9401088091E8008B778093E800B5 +:1023F000ABCFC096E7CF8091720490917304432FC6 +:1024000055274330510509F44AC078F5413051054C +:1024100009F47AC08BE590E0EEEEFBE04230510526 +:1024200009F092CF2091E800277F2093E8002091C7 +:102430007404309175048217930708F49C0140E0FE +:102440002115310509F065C0411163C08091E80094 +:1024500082FDC9CF80916C04882329F2853019F25E +:102460008091E80083FFF2CFBECF4132510509F4DD +:102470003CC04232510509F067CF8330910508F026 +:1024800063CFFC01EE0FFF1FEF5DFD4F0190F08168 +:10249000E02D825E9D4FDC018C9190E01AC03327C5 +:1024A00021303105D1F02115310561F0223031059F +:1024B00009F04ACFEBE5FCE0E4918E2F90E0EBE5EC +:1024C000FCE007C0EDE8FCE0E4918E2F90E0EDE841 +:1024D000FCE0009709F438CFA5CFEBE7FCE0E491EE +:1024E0008E2F90E0EBE7FCE0F4CF8330910508F00D +:1024F0002BCF880F991FFC01E95DFD4F0190F08102 +:10250000E02D89E090E08ECF82E190E0E9E4FCE00C +:1025100089CF80916C04882309F465CF853009F454 +:1025200062CF8091E80083FD5ECF8091E80082FD5C +:102530008DCF8091E80080FF83CF9091F300809150 +:10254000F2002115310519F08830910550F041E075 +:10255000089709F040E08091E8008E778093E800CA +:102560006FCF44914093F10031962150310901968B +:10257000E8CF803809F0E8CE8091E800877F80932B +:10258000E80080916D048093F10087CE8111DCCE4C +:1025900010917004123008F0D7CE8091E800877F48 +:1025A0008093E80010936D040E944F07112311F0EF +:1025B00084E005C08091E30087FDFACF81E080933D +:1025C0006C0442E061EC81E00E946E0742E261EC43 +:1025D00084E00E946E0742E261EC82E00E946E0796 +:1025E00042E260EC83E00E946E07AECE8091700400 +:1025F000813009F0A9CE81E0933009F080E080932A +:102600006B041092E9008091E800877F8093E800D6 +:102610000E944F0799CE1F93CF93DF93162FC0913F +:102620007E06D0917F068A30D1F420914304CE01FA +:102630008E579440622F70E00E945435281B822FE1 +:1026400066E00E946835C82FC15020F4DF91CF9119 +:102650001F91089560E080E20E940B13F5CF8D304A +:10266000E9F4CE57D44020914304622F70E0CE01AC +:102670000E945435281B822F9E01280F311D2115E1 +:10268000324018F080E0D0E0C0E0C80FD11DC25841 +:10269000DB4FD0937F06C0937E06D8CF96E0FE0135 +:1026A000A4E4B4E001900D929A95E1F7803E90F198 +:1026B00086E0FE0111928A95E9F7C0917E06D091DD +:1026C0007F06111133C046E050E0BE0184E494E07F +:1026D0000E949E359E012E573440892B91F52A5F2A +:1026E0003F4F40914304642F70E0C9010E9454356C +:1026F000481B463010F4240F311D211572E03707B6 +:1027000010F030E020E022583B4F30937F062093BA +:102710007E069CCFF6E08F9FB00111246655794F5D +:1027200046E050E0CE010E949535C7CF9E012A5F5A +:102730003F4FFE012E173F0731F280818095819334 +:10274000F9CFC90145E0969587954A95E1F741E0B3 +:1027500050E0BA0102C0660F771F8A95E2F7CB01FD +:1027600060917C0470917D04862B972BB9016B5F7F +:102770007F4FE5E076956795EA95E1F702C0440F53 +:10278000551F6A95E2F7842B952B90937D048093D7 +:102790007C04A5CFFF920F931F93CF93DF93EC019F +:1027A000F62EFC0101900020E9F78F01015011097C +:1027B000C017D10730F0DF91CF911F910F91FF909B +:1027C00008956F2D89910E940B13F2CFE1E4F4E09C +:1027D0008083618324E630E042E050E0BF0184EB77 +:1027E0000C948B32CF93C82F60E08CE00E94E613EC +:1027F0006C2F84E00E94E61361E08CE0CF910C9492 +:10280000E613CF93DF93C3EED2E060E0CE010E94E7 +:10281000C8352196C11584E0D807B9F7DF91CF916B +:1028200008956F927F928F929F92AF92BF92CF92B4 +:10283000DF92EF92FF920F931F93CF93DF938AEA79 +:10284000C82E86E0D82E91ECE92EF12CE701CC5869 +:10285000D10936011BC0F50185909490692DC801FE +:102860000E94C835682DC80101960E94C83582E0D3 +:10287000A80EB11C0E5F1F4FC017D10761F78EE085 +:10288000680E711C2E96CE15DF0529F08E010E50B4 +:1028900011095301E0CF7E018CE8E80EF11C8CE8B1 +:1028A000C80ED11C8DE7E81683E0F80679F6DF91B3 +:1028B000CF911F910F91FF90EF90DF90CF90BF903D +:1028C000AF909F908F907F906F900895CF93C82F77 +:1028D0006FEF811161E283E290E00E94C8356FEFF3 +:1028E000C11161E184E290E00E94C8356FEFC1112F +:1028F00068E285E290E0CF910C94C83580E00E94B8 +:10290000661460E086E290E00E94C8350E941114CF +:102910000E94011481E00C9466140F931F93CF93CF +:10292000DF93C42FD0E0CC0FDD1F2EE0629FC00DDF +:10293000D11D11243CE8839FC00DD11D1124CE016F +:1029400087960E94B435082F10E0102F0027CE0183 +:1029500088960E94B4359801282BC901DF91CF9148 +:102960001F910F910895462F853038F47A3028F45E +:10297000673018F4672F0C948D1490E080E0089570 +:10298000CF92DF92FF920F931F93CF93DF936C014F +:102990000091760480919202082BC7E0D0E010E00D +:1029A000FC2EC8010C2E02C0959587950A94E2F77B +:1029B00080FD0CC02197A0F7F12C8F2DDF91CF91D6 +:1029C0001F910F91FF90DF90CF900895B6018C2F4B +:1029D0000E94B3140E94180A019761F3EECFCF93BF +:1029E000DF93EC010E94C014BE010E94B314DF917A +:1029F000CF910C94180AFC01808191810E94EF1400 +:102A0000292F2F7092959F7092509E3078F4E92F65 +:102A1000F0E0E45DF84C0C948835803F19F020F428 +:102A2000883E20F481E00895843FE1F380E008953A +:102A3000883EC0F3813FD1F7F5CF822F86958695EA +:102A40008695089583E290E00E94B435813289F43E +:102A500084E290E00E94B435813159F485E290E03F +:102A60000E94B43591E0883209F090E0892F81709E +:102A7000089580E0FCCFCF92DF92EF92FF926B013E +:102A80007C010E940E09B701A60188E090E0FF904A +:102A9000EF90DF90CF900C94DA35AF92BF92CF9247 +:102AA000DF92EF92FF920F931F93CF93DF9300D0AB +:102AB0000F92CDB7DEB7082FF62E142FE22E80919D +:102AC000770480FF4FC0E82FE695AE2FB0E0AE5EF2 +:102AD000BD4F9C91909359038E7F823009F056C070 +:102AE000413A08F040EA9E012F5F3F4F6F2D802F43 +:102AF0000E9424098091770480FF11C02B813981C5 +:102B00004A81809171019091720153E0859FF0019B +:102B10001124E15AFC4F891798F10E94260F8091E9 +:102B20007804801308C0809179048F1104C08091CB +:102B30007A04811729F080915B03826080935B03A4 +:102B400000937804F092790410937A04EE2051F007 +:102B500060917704709178048091790490917A045F +:102B60000E943B150F900F900F90DF91CF911F9116 +:102B70000F91FF90EF90DF90CF90BF90AF900895AE +:102B80004183308322838F5F3396C5CF923039F6ED +:102B9000E2508E2F8170D82EE695F0E0E55AF94F7D +:102BA000A590B490C12CBB2460917301C61608F0A7 +:102BB000B4CF2C2D30E0A29EC001A39E900DB29EFA +:102BC000900D112470E00E945435802FD11016C052 +:102BD000860F40917101420F532F511D9A01220F10 +:102BE000331F240F351F215A3C4F412F113A08F053 +:102BF00040EA6F2D0E942409C394D6CF861BE9CFEB +:102C0000E7E7F4E0438121E1421B08F440E021E0E2 +:102C1000628181810C944D15E7E7F4E0438121E165 +:102C2000420F08F44FEF21E0628181810C944D1531 +:102C3000E7E7F4E0628121E1621B08F460E021E053 +:102C4000438181810C944D15E7E7F4E0628121E135 +:102C5000620F08F46FEF21E0438181810C944D15E0 +:102C6000E7E7F4E0818121E04381628188500C94A0 +:102C70004D15E7E7F4E0818121E043816281885FBF +:102C80000C944D1580917B04882319F0815080931A +:102C90007B0460917704709178048091790490911D +:102CA0007A040C943B1580917B04833018F48F5F79 +:102CB00080937B046091770470917804809179040B +:102CC00090917A040C943B159091770490FF27C063 +:102CD000917081111DC092609093770480915B0385 +:102CE000816080935B03662351F06091770470915B +:102CF00078048091790490917A040E943B1520E039 +:102D000040917A0460917904809178040C944D1577 +:102D10008C3010F09661E0CF880F982BDDCF0895AE +:102D200021E030E0A90102C0440F551F8A95E2F767 +:102D3000CA0120915C03662391F0822B80935C038F +:102D400080915B03806180935B0380915A038111C2 +:102D500009C08091770460E086950C946416809594 +:102D60008223ECCF0895CF93DF93C82FC17082FBED +:102D7000DD27D0F981FB662760F985E00E94901677 +:102D800061E06C2786E00E9490166D2F87E0DF914E +:102D9000CF910C9490160F931F93CF93C82F61E09F +:102DA0008111682F617080E00E949016C1FB662738 +:102DB00060F9C11101C060E081E00E949016C2FB81 +:102DC000662760F9C11101C060E082E00E949016A0 +:102DD000C3FB662760F9C11101C060E083E00E9477 +:102DE0009016C4FB662760F9C11101C060E084E061 +:102DF0000E9490164C2F50E070E060E0DB01CA01A9 +:102E0000F4E0B695A79597958795FA95D1F7009731 +:102E1000A105B10549F1AC01BD0184E08A019B0126 +:102E2000E2E03695279517950795EA95D1F70115B4 +:102E300011052105310519F08E5FB901A8017695BC +:102E4000679557954795452B462B472B09F08F5F84 +:102E50008230D1F158F48823E9F0813059F18C2F78 +:102E6000CF911F910F91089580E0D8CF8330A1F1C9 +:102E70008430A9F720E040E56FEF8AED0E944D1500 +:102E800087E00E94F21380910001882341F31092A1 +:102E900032030DC020E040E56FEF82E30E944D1544 +:102EA00080910001882399F381E0809332030E948E +:102EB000800DD5CF20E040E56FEF8CEF0E944D15DF +:102EC00085E40E94F213CBCF20E040E56FEF80E570 +:102ED0000E944D1585E2F5CF20E040E56FEF86E7D3 +:102EE0000E944D158FE1EDCF0E94CB1680937604A2 +:102EF0000C94F70B80917604982F9670963019F405 +:102F000088600C947417877FFCCF21E030E001C00B +:102F1000220F8A95EAF720958091760482230C94FB +:102F2000741721E030E001C0220F8A95EAF7809102 +:102F30007604822B0C9474178091770486958150C7 +:102F400009F48BE061E00C94641680917704869517 +:102F50008F5F8C3008F081E061E00C946416809102 +:102F6000770480FF07C0869582588F77893010F4E8 +:102F70000C94A51761E082E00C946416E7E7F4E096 +:102F800083E0808311828FEF828380EA83831482BF +:102F9000A9E5B3E012968C911297836012968C93F8 +:102FA00060817181828193810C943B15AB01BC01DE +:102FB00088E190E00C94DA35CF93C82FEFE3F4E08A +:102FC000982F990F990F990F80818770892B808393 +:102FD000E0E4F4E09C2F9295969597708081887F2D +:102FE000892B808360913D0470913E0480913F0461 +:102FF000909140040E94D6176C2F82E0CF910C94E0 +:10300000E613EDE3F4E089E88083118282818C7F0E +:10301000828360913D0470913E0480913F049091C1 +:1030200040040C94D617EDE3F4E080818E7F80831A +:1030300060913D0470913E0480913F049091400462 +:103040000C94D617EDE3F4E0808181608083609179 +:103050003D0470913E0480913F04909140040C9493 +:10306000D61769EE7EEF90E080E00E94E63560E0E2 +:1030700082E090E00E94C83560E083E090E00E942A +:10308000C8351092920260E084E090E00E94C8355A +:1030900060E082E290E00E94C83560E085E090E068 +:1030A0000E94C83560E086E090E00E94C8356FEF6E +:1030B00087E090E00E94C83540E050E0BA0188E027 +:1030C00090E00E94DA3560E08DE090E00E94C83523 +:1030D00040E050E0BA0188E190E00E94DA3560E01B +:1030E00087E190E00E94C83540E050E0BA018CE1F1 +:1030F00090E00E94DA3570E060E080E290E00E94AB +:10310000E6350E94011880E00E9466140E947E1439 +:1031100040E050E0BA018FE090E00E94DA3540E0F4 +:1031200050E0BA0183E190E00C94DA350F931F93DD +:10313000CF93DF9300D000D0CDB7DEB74091C5026A +:103140005091C6026091C7027091C8022FB7F894DF +:103150008091570490915804A0915904B0915A0459 +:103160002FBF841B950BA60BB70B84369105A105C9 +:10317000B10588F10E94DE0E882379F10E94620871 +:103180006E5F7F4F8F4F9F4F69837A838B839C83C2 +:1031900080912C0190912D0181559D4F40912B01E3 +:1031A00050E04530510510F044E050E0BE016F5F43 +:1031B0007F4F0E94AB3584E090E00E94A034892BC1 +:1031C000D9F40E9462086093C5027093C60280938E +:1031D000C7029093C80281E010C00E94620800916B +:1031E000D2021091D3022091D4023091D502600F07 +:1031F000711F821F931FC4CF80E00F900F900F901C +:103200000F90DF91CF911F910F9108958F929F9210 +:10321000AF92BF92CF92DF92EF92FF920F931F93E4 +:10322000CF93DF93EB0188809980AA80BB809FB702 +:10323000F894C0905704D0905804E0905904F0904E +:103240005A049FBFC818D908EA08FB0894E6C916B3 +:10325000D104E104F10410F4442311F1E82E082E06 +:10326000000CFF089AE08902F0011124EF5FFE4F85 +:103270008381948181559D4F428150E00417150749 +:1032800008F4A801B9010E94AB35C7010E94A0341F +:10329000892BA1F40E946208688379838A839B83C7 +:1032A00081E0DF91CF911F910F91FF90EF90DF9020 +:1032B000CF90BF90AF909F908F90089580E0F1CF16 +:1032C0000F931F93CF93DF930F92CDB7DEB780910B +:1032D0004E0489832091C40290E041E0281719062A +:1032E00009F440E001E010E09E012F5F3F4F6DECDC +:1032F00072E086E00E9406190F90DF91CF911F9136 +:103300000F9108950F931F93CF93DF93CDB7DEB73F +:1033100029970FB6F894DEBF0FBECDBF85E0E7E773 +:10332000F4E0DE01119601900D928A95E1F780910B +:10333000590390915A03A0915B03B0915C038E8373 +:103340009F83A887B98741E08885811101C040E04B +:1033500009E010E09E012F5F3F4F69EC72E085E0CD +:103360000E940619811110925B0329960FB6F894FA +:10337000DEBF0FBECDBFDF91CF911F910F9108959A +:103380006F927F928F929F92AF92BF92CF92DF9275 +:10339000EF92FF920F931F93CF93DF930F92CDB7CE +:1033A000DEB7862E5A016901682E880F7708C3019F +:1033B0000E94A034892B09F088C08AE0869DF00124 +:1033C000879DF00D1124EF5FFE4F458150E04115C0 +:1033D000510511F041E050E08AE0869DF001879DA3 +:1033E000F00D1124EF5FFE4F6681778161557D4FAF +:1033F000CE0101960E94AB35F50140815181628179 +:1034000073812FB7F8948091570490915804A0913C +:103410005904B0915A042FBF841B950BA60BB70B10 +:1034200084369105A105B10540F4B701C8010E9499 +:10343000F3089981891709F44FC0082C000C9908EA +:10344000C4010E94A034892B91F0B12C8B2D0F90D8 +:10345000DF91CF911F910F91FF90EF90DF90CF9070 +:10346000BF90AF909F908F907F906F9008958AE06B +:10347000889DF001899DF00D1124EF5FFE4F45817D +:1034800050E0E416F50608F4A7018AE0889DF001F3 +:10349000899DF00D1124EF5FFE4F668177816155A4 +:1034A0007D4FC6010E94AB35B701C8010E94F308E9 +:1034B00099818913CACF0E946208F50160837183E4 +:1034C00082839383BB24B394C1CFB12CA701B801ED +:1034D000C6010E94AB35BACFBB24B394F7CFCF92CD +:1034E000DF92EF92FF920F931F93CF93DF9300D061 +:1034F00000D00F92CDB7DEB76B0185E0E82EF12C3E +:1035000000EB12E09E012F5F3F4F47EA52E061E07F +:1035100080E00E94C019882349F095E0FE013196B1 +:10352000A2EAB2E001900D929A95E1F795E0E2EA05 +:10353000F2E0D60101900D929A95E1F70F900F906D +:103540000F900F900F90DF91CF911F910F91FF90EF +:10355000EF90DF90CF90089590E080E00E94C23518 +:10356000893E9E4F11F40C94221580E008951F921D +:103570000F920FB60F9211242F933F934F935F93A7 +:103580006F937F938F939F93AF93BF93CF93DF936B +:10359000EF93FF93D091E900DF708091EC00C82F8A +:1035A000C17080FDC0E81092E9008091F000877F33 +:1035B0008093F00078940E9442101092E90080916C +:1035C000F00088608093F000CD2BCF70C093E900AD +:1035D000FF91EF91DF91CF91BF91AF919F918F912B +:1035E0007F916F915F914F913F912F910F900FBEFF +:1035F0000F901F9018951F920F920FB60F921124E3 +:103600002F933F934F935F936F937F938F939F93EA +:10361000AF93BF93EF93FF938091E10082FF09C0C6 +:103620008091E20082FF05C08091E1008B7F809352 +:10363000E1008091DA0080FF24C08091D80080FFF3 +:1036400020C08091DA008E7F8093DA008091D900CB +:1036500080FF9BC080E189BD82E189BD09B400FE85 +:10366000FDCF81E080936C0480915E04811109C0DC +:103670000E94D5060E94A0078091E200846080939A +:10368000E2008091E10080FF17C08091E20080FF9E +:1036900013C08091E2008E7F8093E2008091E2006F +:1036A00080618093E2008091D80080628093D8008E +:1036B00019BC85E080936C048091E10084FF29C0EF +:1036C0008091E20084FF25C080E189BD82E189BD4F +:1036D00089B5982F917080FFFBCF8091D8008F7DA6 +:1036E0008093D8008091E1008F7E8093E1008091EB +:1036F000E2008F7E8093E2008091E20081608093FF +:10370000E20080916D04882309F445C084E0809331 +:103710006C048091E10083FF27C08091E20083FF69 +:1037200023C08091E100877F8093E10082E0809355 +:103730006C0410926D048091E1008E7F8093E10013 +:103740008091E2008E7F8093E2008091E2008061B0 +:103750008093E20042E060E080E00E946E0780918A +:10376000F00088608093F000FF91EF91BF91AF91DE +:103770009F918F917F916F915F914F913F912F9189 +:103780000F900FBE0F901F90189519BC10926C04EB +:1037900010925E0476CF8091E30087FD93E09093D2 +:1037A0006C04B7CF78941F921FB61F9211248F9389 +:1037B0009F93AF93BF938091570490915804A09129 +:1037C0005904B0915A040196A11DB11D809357046C +:1037D00090935804A0935904B0935A04BF91AF91A9 +:1037E0009F918F911F901FBE1F9018959C014FB7FE +:1037F000F8948091570490915804A0915904B09185 +:103800005A044FBF821B930B08952FB7F8948091F1 +:10381000570490915804A0915904B0915A042FBFB5 +:1038200008955F926F927F928F929F92AF92BF9214 +:10383000CF92DF92EF92FF920F931F93CF93DF937C +:1038400000D000D00F92CDB7DEB77C01FC018381A0 +:103850009481892B31F08081918189238F3F09F0F8 +:10386000D0C60F900F900F900F900F90DF91CF91D7 +:103870001F910F91FF90EF90DF90CF90BF90AF908E +:103880009F908F907F906F905F9008950E94C014DA +:10389000182F682F89819A810E94CB0B69817A81C8 +:1038A000812F0E94B3148C01F7018281882361F07B +:1038B000F801E65EFC45ED30F10530F4E65CF84CCD +:1038C0000C9488350E942218D0903D04D0FE1CC074 +:1038D0008D2D86958370F7019281992309F460C13B +:1038E000823090F4B701C8010E94B108882361F0CA +:1038F000D694D694D69480913E0483708295880F96 +:10390000807E8D290E94F213F7018281882309F4B9 +:103910006DC6C80182519F45409708F02BC68FEFB6 +:1039200093E00E94B435025193EEA92E92E0B92E95 +:10393000811197CF011138C11C821B8266246394C8 +:103940008AE0582E85010F5F1F4FC5010E94B435D4 +:1039500089831A82882309F484CF9FEF980F9330CC +:1039600008F031C18A83698232E0A30EB11CC8011C +:103970000E94B4358B83882309F473CF8E010F5FC7 +:103980001F4FF80120812223E9F2213009F055C1AF +:1039900091818281913009F018C10E5F1F4F6AE05A +:1039A00070E0893311F460E570E00E94110F13C1DB +:1039B0000E94131889CF80913D0480FF0DC00E94A2 +:1039C000131860913D0470913E0480913F049091E2 +:1039D00040040E94D61778CF0E942218F2CF0E948E +:1039E000011872CF90913D04892F86958F5F837067 +:1039F000880F997F892B80933D04982F967096307D +:103A000001F7897F80933D04DCCF90913E04892F9C +:103A10008B7F92FF846080933E04D3CF80913D04DE +:103A2000982F96959695969580913E0483708295F1 +:103A3000880F807E892B8C3798F48F5F282F220F78 +:103A4000220F220F90913D049770922B90933D048A +:103A500082958695837090913E049C7F892BDBCF65 +:103A600081E0ECCF80913D04982F969596959695A0 +:103A700080913E0483708295880F807E892B11F09F +:103A80008150DCCF8BE7DACF30913E04932F9695AF +:103A90009695969520913F04822F83708295880F8A +:103AA000807E892B90E00196482F440F440F440FED +:103AB0003770342B30933E0435E0969587953A95D0 +:103AC000E1F783702C7F822B80933F047ACF309173 +:103AD0003E04932F96959695969520913F04822FBC +:103AE00083708295880F807E892B8150990BDCCF63 +:103AF00080913F0482FF12C08B7F80933F046091CE +:103B00003D0470913E0480913F04909140040E94D6 +:103B1000D61760E081E00E94E613D6CE84608093E1 +:103B20003F0460913D0470913E0480913F04909168 +:103B300040040E94D61760E08CE00E94E61364E126 +:103B400082E00E94E61365E081E00E94E61361E0F6 +:103B50008CE0E1CF80913F04982F969596959695AD +:103B6000809140048295880F807E892B883720F4CD +:103B7000865F0E94DC17A8CE88E7FBCF80913F04C8 +:103B8000982F969596959695809140048295880FEA +:103B9000807E892B843110F08A50EBCF84E1E9CF0D +:103BA000882309F4B1CE9ECEA114F4E0BF0609F437 +:103BB00058CEC5010E94B435811101C001502FEFCC +:103BC000A21AB20AB7CE5801D9CE923039F40E5F9C +:103BD0001F4F0E94570C0F5F1F4FD3CE933029F415 +:103BE0000E5F1F4F0E941E0CF6CF943019F00F5F2E +:103BF0001F4FF1CF0E5F1F4F30E020E0B8016F5F25 +:103C00007F4FF80141818053990B8A30910550F024 +:103C10002150310900F38FE99FE00197F1F700C0CF +:103C20000000F6CF529EF001539EF00D11249C012E +:103C30002E0F3F1F842F8B01E1CFE22FF0E0E75FD3 +:103C4000FD4F7490822F86958695869590E0FC01B5 +:103C5000E750FE4FE4902770F12C022E02C0F5943D +:103C6000E7940A94E2F7E1E0EE22FF24FC01E75139 +:103C7000FE4FC490D12C022E02C0D594C7940A9452 +:103C8000E2F7F1E0CF22DD24FC01E752FE4F849001 +:103C9000912C02C0959487942A95E2F721E0822224 +:103CA0009924E114F10419F081EE0E94570CC1141B +:103CB000D10419F086EE0E94570C39E36AE070E0F7 +:103CC000731202C060E570E0872D0E94110FCD28AD +:103CD00019F086EE0E941E0CEF2819F081EE0E946A +:103CE0001E0C892809F477CF6AE070E08CE25DCE83 +:103CF00081E00E94911703C081E00E9485170F9018 +:103D00000F900F900F900F90DF91CF911F910F9117 +:103D1000FF90EF90DF90CF90BF90AF909F908F90EB +:103D20007F906F905F900C947A1782E0E2CF013E13 +:103D3000110509F404C108F04DC0003E110509F455 +:103D400069C1F701928191117BC280915F048272F7 +:103D50000A3CFCE51F0709F453C208F0A9C1053C61 +:103D60003CE5130709F438C208F08DC1033C5CE55B +:103D7000150709F412C208F02AC2023C1C4509F4D6 +:103D8000BCC1F70100811181992309F473C2C801F4 +:103D90000E94C014D82E682FC8010E94CB0BB80116 +:103DA0008D2D0E94B3140E94180A182FB82EF70107 +:103DB00022814581342F32953F70892F82958F70F3 +:103DC000C82ED12C8C3008F08DC2F601E95BF84C7E +:103DD0000C948835043E110509F41CC1053E1105FB +:103DE00009F0AFCF80933C0210933B0200933A025C +:103DF000882309F4A1C081E08093EE02A2CF0238AB +:103E0000FFE51F0709F476C038F5063F110509F4F0 +:103E1000FFC008F4FBC000383FE5130709F44DC0AC +:103E200001384FE5140709F08CCF882309F45BC0F3 +:103E300080919C02811106C081E080939C0282EEF9 +:103E40000E94570C0E94051C90939B0280939A023B +:103E500081EE0E94570C43C004385FE5150709F452 +:103E600071C008F45BC00538EFE51E0709F4B0C067 +:103E70000638FFE51F0709F064CF882309F4C2C0A4 +:103E80006091590170915A0190E080E00E940136E2 +:103E900020E030E040E05CE30E94623620E030E069 +:103EA00040E85FE30E94FC358111A9C080EE90E0FC +:103EB00090935A018093590195C08823B9F080915D +:103EC0009C02811106C081E080939C0282EE0E94D8 +:103ED000570C0E94051C90939B0280939A028BE2E0 +:103EE0000E94570C2ECF81EE0E941E0C8BE20E9486 +:103EF0001E0C27CF882309F424CF81EE0E94570C93 +:103F000083EE0E94570C8FE40E94570C8FE40E94AE +:103F10001E0C83EE0E941E0C81EEE9CF882309F46B +:103F200010CF81EE0E94570C83EE0E94570C80E563 +:103F30000E94570C80E5EBCF1092EE0202CF8093E7 +:103F4000390252CF882379F180913902882349F0D0 +:103F500080913A020E941E0C80EE0E94570C8AE269 +:103F60000CC080913C028823D1F380913A020E94D8 +:103F70001E0C80EE0E94570C8CE40F900F900F9057 +:103F80000F900F90DF91CF911F910F91FF90EF90C5 +:103F9000DF90CF90BF90AF909F908F907F906F9069 +:103FA0005F900C94570C8AE20E941E0C8CE40E94D5 +:103FB0001E0C80EE0E941E0C80913902811105C0FA +:103FC00080913C02882309F44CCC80913A02D5CFF1 +:103FD0008823C1F080913203882339F01092320394 +:103FE000109200010E94800DACCE809100018111E1 +:103FF000F7CF81E08093320380930001F3CF80E814 +:1040000090E056CF61E00E94DC0C9BCE62E0FBCFDB +:1040100064E0F9CF882371F081E08093ED02809114 +:1040200076040E94CB0C813009F08BCE83E30E9492 +:10403000F21387CE1092ED0284CE882331F081E016 +:104040008093F002109267017CCE1092F00279CE3C +:10405000882349F0809176040E94CB0C813019F4BA +:1040600082E30E94F213F7018281882309F4B0C22F +:10407000809176040E94CB0C813009F0A9C284E3C0 +:104080000E94F213A5C2073C2CE5120709F4AEC04A +:1040900008F4A7C0083C4CE5140709F4ACC0093C7F +:1040A0001C4509F06ECE40E056E16CE076E179C047 +:1040B000043DECE51E07A8F40E3CFCE51F0708F0E4 +:1040C000D0CB0C3C2CE5120709F49FC042E456E12A +:1040D00063E576E10D3C1C4508F463C061E081E0D6 +:1040E00046C0053D4CE5140709F4BBCB08F492C06B +:1040F0000D351D4509F4B5CB44CE8091770480FF82 +:1041000031C08E7F8093770460917704709178043A +:104110008091790490917A040E943B1580915B0311 +:10412000816080935B039FEFE0E7F2E09150E04015 +:10413000F040E1F700C000000F900F900F900F903B +:104140000F90DF91CF911F910F91FF90EF90DF9033 +:10415000CF90BF90AF909F908F907F906F905F9027 +:104160000C94260F81608093770461E086950F9010 +:104170000F900F900F900F90DF91CF911F910F91A3 +:10418000FF90EF90DF90CF90BF90AF909F908F9077 +:104190007F906F905F900C9464164CE957E165EA4C +:1041A00077E10F900F900F900F900F90DF91CF91CC +:1041B0001F910F91FF90EF90DF90CF90BF90AF9045 +:1041C0009F908F907F906F905F900C94090945EAC3 +:1041D00057E16CE977E1E5CF40E356E169E376E149 +:1041E000E0CF49E356E160E376E1DBCF48E156E119 +:1041F00064E276E1D6CF44E256E168E176E1D1CFE0 +:104200004CE056E160E076E1CCCF43E556E162E474 +:1042100076E1C7CF0F900F900F900F900F90DF9126 +:10422000CF911F910F91FF90EF90DF90CF90BF90B3 +:10423000AF909F908F907F906F905F900C94AF178E +:104240000E3D1C4509F09DCD0F900F900F900F90E3 +:104250000F90DF91CF911F910F91FF90EF90DF9022 +:10426000CF90BF90AF909F908F907F906F905F9016 +:104270000C943118C8010E94A30BD82E90CD092FA1 +:104280000F70907F11F00295007F812F2223C9F0DB +:10429000002369F090E2910F983010F011110BC0DB +:1042A00080915F04082B00935F040E94820B812F92 +:1042B0000E94570C17C080919102082B0093910225 +:1042C000F4CF0E941E0C002369F00095105E183098 +:1042D00010F0B11027C080915F04082300935F04A1 +:1042E0000E94820B98E0C91AD108E4E0CE16D104EE +:1042F00008F0B7CA0E94010F0F900F900F900F9017 +:104300000F90DF91CF911F910F91FF90EF90DF9071 +:10431000CF90BF90AF909F908F907F906F905F9065 +:104320000C94B31680919102082300939102D8CF88 +:10433000892F8F70907F903211F08295807FF1E00D +:10434000BF120CC0222329F0333060F60E94140CF7 +:10435000C9CF323038F60E94090CC4CF222341F075 +:104360003323A1F340FFA3CF4F70F7014583EECF76 +:10437000332389F3193309F0F5C0FFEF27EE33E05B +:10438000F15020403040E1F700C00000812F0E9432 +:104390001E0CA8CF892F86958695837061F0813099 +:1043A00009F0A0CF812F9370211102C090E080E02E +:1043B0000E946E0897CF812F9370211102C090E068 +:1043C00080E00E9484088ECF892F8370A1F521118F +:1043D00089CF812F829586958770880F880F412F0E +:1043E0004F70082E01C0440F0A94EAF7212F207164 +:1043F00014FF07C02FE030E001C0220F8A95EAF7D2 +:104400002095969596959370923081F0822F842B0B +:10441000933030F480919202913029F0242B822342 +:104420000E94050C5FCF842B822BFACF242B809126 +:1044300092028227F5CF8695222311F0892F817071 +:10444000882309F44FCF812F829586958770880F36 +:10445000880F412F4F70082E01C0440F0A94EAF7CD +:10446000212F207114FF07C02FE030E001C0220F80 +:104470008A95EAF72095969596959370923081F0FB +:10448000822F842B933030F480917604913029F080 +:10449000242B82230E94741725CF842B822BFACFE2 +:1044A000242B809176048227F5CF092F0F702223C9 +:1044B00029F0802F0E949117812F48CF812F0E94D1 +:1044C000090C802F0E9485170DCF812FE1EF1E1759 +:1044D00089F1E11750F0F0EF1F17B9F02223B1F185 +:1044E0003111E5CE892F8F7129C042EF141749F1A0 +:1044F00053EF1513F3CF80E0222361F29F7181E027 +:1045000001C0880F9A95EAF7C5CF222379F032309F +:1045100008F0E8CE292F2F7181E090E001C0880FCC +:104520002A95EAF7909176048927B4CF333008F0C2 +:10453000D9CEF0CF892F8F71222321F20E949117BB +:10454000D1CE892F8F712223C9F3BCCF332379F0C9 +:10455000893341F48FEF97EEE3E081509040E040E3 +:10456000E1F712CF8FE39CE90197F1F70DCF892F87 +:104570008F71A8CF0031FFE51F0709F4B9CB0131D6 +:104580002FE5120709F4D1CB0E9462086093F5026F +:104590007093F6028093F7029093F802F7018281FC +:1045A000043F110509F42ECD08F029CC0C32110579 +:1045B00009F443CD08F0BBCB0A30110509F448CD0E +:1045C0000531110509F44FCD0930110509F0B9CBBA +:1045D000F7018281882309F4B4CB809176040E948C +:1045E000CB0C813009F0ADCB81E321CD00313FE52B +:1045F000130709F481CB01314FE5140779F682E006 +:104600007CCB85E0DE01119601900D928A95E1F751 +:10461000F701228189819A81211138C90E94A30B57 +:10462000182F3CC91F93CF93DF9380915D02807F49 +:10463000A9F480915A02882389F080918F02D09149 +:104640005E026091580270915902A0915B02B09194 +:104650005C02C62FC72316E0D81304C0DF91CF91A8 +:104660001F91089590E0109711F0CF3F19F4019633 +:104670008770F2CF189F9001199F300D1124F90116 +:10468000E15AFD4F41814713F2CF40814613EFCFEE +:1046900042814111ECCF438154814A1B5B0B403A6C +:1046A000510528F780915D028F70806180935D02D3 +:1046B000F901EC59FD4F80818F708061808388E51E +:1046C00092E00E94111CDF91CF911F910C94990BE5 +:1046D000AF92BF92CF92DF92EF92FF920F931F9310 +:1046E000CF93DF93CDB7DEB761970FB6F894DEBFF7 +:1046F0000FBECDBF8C0185E0F801DE011D96019053 +:104700000D928A95E1F7F801E28088E5A82E82E013 +:10471000B82E60915B0270915C026115710509F41D +:1047200032C19091580240915902892F84238F3FC2 +:1047300009F429C120813181C380D480F0905A02CC +:10474000F601E61BF70BFF2009F4E8C080915D023B +:10475000582F507FE03AF10508F0ABC0511177C0F7 +:10476000FE2C431321C092131FC0E1101DC08F7097 +:10477000806180935D02C5010E94111C80915D02E1 +:10478000F80185838F2D61960FB6F894DEBF0FBEBA +:10479000CDBFDF91CF911F910F91FF90EF90DF90F0 +:1047A000CF90BF90AF900895CD2829F0822F83231A +:1047B0008F3F09F003C180E0F82FF170DF2E80FFFA +:1047C0003CC080918F0240915E0256E0841315C078 +:1047D0002D873E878D859E850E94EF14292F229577 +:1047E0002F702230F0F0243018F59F70F1F0F801AE +:1047F0009581907FD1F4D12C1EC090E0589FF0019C +:10480000599FF00D1124E15AFD4F6181361306C006 +:104810006081261303C06281E6120FC00196877083 +:10482000D5CF9F7011F0882331F3805E883018F364 +:10483000C8010E94111CFD2CA5CFEE2009F4A2CFC7 +:1048400080915D02816080935D02F12C9BCF4313C8 +:1048500006C0921304C0F801EE2009F479C0C80123 +:104860000E94FB14882309F1EE20F9F080915D028B +:10487000803270F0209158023091590238872F838E +:104880001986DB86CA868C87CE0107960E94111C8A +:1048900086E0F801A8E5B2E001900D928A95E1F773 +:1048A0000E941223FF24F3946DCFC8010E94111CB3 +:1048B000F9CF51110AC088E592E00E94111C86E0F0 +:1048C000F50111928A95E9F7C0CF43130FC09213F7 +:1048D0000DC0E1100BC0F8018583C8010E94111CB6 +:1048E00086E0F50111928A95E9F74CCFC8010E9444 +:1048F000FB148823D1F2EE20C1F280915D02803258 +:1049000038F220915802309159023A8329831B8250 +:10491000DD82CC828E83CE010196B8CFE03AF105DC +:10492000F8F6FE2CEE2009F243131FC092131DC0AF +:1049300080915D0280FD10C0982F907F69F0F80192 +:104940008583903F31F0982F907F905F8F70892BF7 +:104950008583C8010E94111C86E0F801A8E5B2E039 +:1049600001900D928A95E1F70DCFC8010E94FB14CA +:1049700081118ECF80915D02816080935D02C801BC +:104980000E94111CFFCEEE2009F48FCFC8010E94B7 +:10499000FB14F82E882309F488CF86E0F801A8E5F7 +:1049A000B2E001900D928A95E1F7809158029091C2 +:1049B00059020E94EF140E941223E4CE81E08E255A +:1049C000FBCE1F93CF93DF93CDB7DEB767970FB6BC +:1049D000F894DEBF0FBECDBF4B8B5C8B6D8B7E8B97 +:1049E0008F8B6111109291021A8A198A85E0FE015B +:1049F0007396DE011D9601900D928A95E1F786E08F +:104A0000FE013D96DE01179601900D928A95E1F721 +:104A1000CE0107960E946823882389F016E08091D2 +:104A20008F0290915E0289134BC067960FB6F8947F +:104A3000DEBF0FBECDBFDF91CF911F91089586E0FD +:104A4000FE013796DE01119601900D928A95E1F7ED +:104A50008A859B85892B11F38F81988589238F3FC8 +:104A6000E9F220915E0230E0C90101968770992732 +:104A700040918F024817190681F410925F040E943A +:104A8000391010925E0210928F0286E0E8E5F2E0A3 +:104A9000DF011D928A95E9F7C1CF96E0929FD00180 +:104AA000939FB00D1124A15ABD4FFE013196019084 +:104AB0000D929A95E1F780935E020E94990BAECF1A +:104AC000819FC0011124815A9D4F0E946823882331 +:104AD00009F4ABCF80918F0290E0019687709927FF +:104AE00080938F029CCF9F92AF92BF92CF92DF9222 +:104AF000EF92FF920F931F93CF93DF93CDB7DEB763 +:104B000064970FB6F894DEBF0FBECDBF8E010F5F66 +:104B10001F4F8AE0D8011D928A95E9F79EE4C92EBD +:104B200091E0D92EF12CE12CAA24A394B12CF6010A +:104B300081916F018F3F09F44AC0F894E82FE29504 +:104B4000EF70F0E021A18F70A50102C0440F551F46 +:104B50008A95E2F7CA01922F982B91A392A1809592 +:104B6000892382A30E94BC0900C0E7E4F1E030E0A1 +:104B700020E0912C41914F3F09F47DC0A42FA295D4 +:104B8000AF70B0E090968C9190E04F7002C0959518 +:104B900087954A95E2F780FD6EC08A2D022E01C0EE +:104BA000880F0A94EAF7982A2F5F3F4F2730310584 +:104BB00009F7F601319780818F3F11F00E94BE09FD +:104BC00050EA5A95F1F7F801EE0DFF1D90828FEF34 +:104BD000E81AF80A95E0E916F10409F0A8CF4AE0CE +:104BE00050E0B80188ED92E00E949E357C01892B4F +:104BF00041F08AE0F801A8EDB2E001900D928A95AB +:104C0000E1F71091E302E114F104B9F181E080933E +:104C100095020E94051C90939402809393028091C8 +:104C20009302909194020E94F61B069770F0A8EDF3 +:104C3000B2E0E12FF0E0E15BFC4F8D91819322E047 +:104C4000AD3DB207D1F71092950281E090E0EF28D8 +:104C5000C1F064960FB6F894DEBF0FBECDBFDF91F2 +:104C6000CF911F910F91FF90EF90DF90CF90BF9069 +:104C7000AF909F90089580E096CF8091950281112A +:104C8000CECF0E94DE0EB82EE091E302882309F415 +:104C9000C7C08E01005F1F4F85E0D8011D928A9525 +:104CA000E9F7F0E09F01215B3C4F79018091D1024F +:104CB000AE014B5E5F4F6A018A3008F086C04FE656 +:104CC0005AE1B801C7010E949A0E882309F494C0E2 +:104CD00044EE57E2B801C7010E949A0E882309F4F6 +:104CE0008BC046E958E1B801C7010E949A0E88239B +:104CF00009F482C042E859E1B801C7010E949A0E46 +:104D0000882309F479C040E659E1B801C7010E943F +:104D10009A0E882309F470C01092D102E091E20249 +:104D2000F0E0AF01415B5C4FD80110E0FA019191D6 +:104D3000AF018D91981731F09F0121503109F90190 +:104D400080831B2DCA16DB0689F780919C0288237D +:104D500071F080919A0290919B020E94F61B893E0D +:104D6000934028F082EE0E941E0C10929C0288E96B +:104D7000C82E82E0D82EF12CE12CD6018D916D0148 +:104D80008823D1F08695F70109F447C0EC50FE4F17 +:104D9000808191819C878B871D860E94051C816084 +:104DA000782F9F878E87F601319710824B855C851F +:104DB0006D858F850E94E124B2E0EB0EF11CE4E0EA +:104DC000EE16F104D1F6812F44CF80919602909196 +:104DD00097020E94F61B843F914008F070CFA0918B +:104DE000E202B0E0A15BBC4FF8011D921192CE1619 +:104DF000DF06D9F71B2DA9CF8091D1028F3F31F06B +:104E00008F5F8093D1028A3008F488CF0E94051CFE +:104E10009093970280939602E2CFE051FE4FB8CF75 +:104E2000F0E0E15BFC4FF89485E0A0EBB2E001908C +:104E30000D928A95E1F765E070E080EB92E00E94C8 +:104E4000F3088093AF020E94BC09F894E091EB0252 +:104E5000F0E0E851FD4F80818B878093B60261E0DE +:104E600070E0CE010B960E94F3088093B5020E9479 +:104E7000BC09F894C090B702D090B802E090B90293 +:104E8000F090BA0280919D0290919E02A0919F02A3 +:104E9000B091A002C816D906EA06FB06D1F0C0926E +:104EA0009D02D0929E02E0929F02F092A0020E9488 +:104EB000DE0E81110EC00E946208C61AD70AE80AE7 +:104EC000F90AC092D202D092D302E092D402F092B8 +:104ED000D5020E94BC09F8948091C202882321F176 +:104EE00084FF04C09091C30290935C0380FF0DC0C7 +:104EF0008091BB0280FF25C09091770491609093D0 +:104F0000770460E086950E9464168091C20281FF5A +:104F100009C020E04091BE026091BD028091BC02B8 +:104F20000E944D151092C2020E94BC09F894809113 +:104F3000C402882349F00E94F20D0E94BC0980E05F +:104F400088CE0E942410E1CF0E94D70DF6CFEF92B9 +:104F5000FF920F931F93CF93DF9300D000D00F9257 +:104F6000CDB7DEB7162FE82EF12CC701880F991F99 +:104F7000662339F18C509E4FFC01808191819A8388 +:104F8000898301E00B830E94051C8160782F9D833B +:104F90008C83F701E856FD4F0127110F102B10836A +:104FA00049815A816B818D810F900F900F900F90E6 +:104FB0000F90DF91CF911F910F91FF90EF900C9484 +:104FC000E12480519E4FD8CFCF92DF92EF92FF9293 +:104FD0000F931F93CF93DF930F92CDB7DEB7EE24DD +:104FE000E394F12C06EB12E09E012F5F3F4F4BEA5A +:104FF00052E063E082E00E94C019082F882321F16B +:10500000C090E5028C2D90E09C0128513D4F790124 +:105010001981F9018081181BD12E80E00AC0DA9431 +:10502000F70180818F5F808360E08C2D0E94A7272D +:10503000802F1D14A4F3912F17FD90E0191B11115F +:105040000EC081110E94800B802F0F90DF91CF91B5 +:105050001F910F91FF90EF90DF90CF9008951F5F09 +:10506000F70180818150808361E08C2D0E94A72709 +:10507000802FE5CF1F921FB61F9211248F939F930D +:10508000AF93BF9380915604811113C08091570450 +:1050900090915804A0915904B0915A044196A11DD1 +:1050A000B11D8093570490935804A0935904B09372 +:1050B0005A04BF91AF919F918F911F901FBE1F9077 +:1050C0001895CDB7DEB7E9970FB6F894DEBF0FBEDF +:1050D000CDBF84B7877F84BF0FB6F894A895809121 +:1050E0006000886180936000109260000FBE80E8CD +:1050F00090E00FB6F89480936100909361000FBE2A +:1051000085B7806885BF85B7806885BF8AEB99E0E1 +:1051100090932F0280932E020E94D5060E94A00732 +:105120008091E20084608093E200789480916C0426 +:105130008823A1F01091E9001F709091EC00892F55 +:10514000817090FD80E8182B1092E9008091E800B2 +:1051500083FD0E9442101F701093E90082E084BD1D +:1051600093E095BD9AEF97BD80936E001092D202A6 +:105170001092D3021092D4021092D5020E942215EE +:10518000811102C00E947E140E94DE0E809358019D +:1051900080915801882309F4C6C010926F0185E2FE +:1051A000809370010E94DE0E81110E9493338091E2 +:1051B000580181112FC0FE01359686E0DF011D9256 +:1051C0008A95E9F786E6898387E98A8386EC8B836B +:1051D00084E38C8385E38D833497AEE4B1E0CE0124 +:1051E0000B9621912D938E179F07D9F787E0E5E75E +:1051F000F1E0DE01919601900D928A95E1F7FE01B2 +:10520000B196A7E4B1E0CE01889621912D938E1737 +:105210009F07D9F78091580195E0811190E0909314 +:10522000E30285E0891B8093E2020EE411E0A3E52E +:10523000EA2EA1E0FA2EF80181918F018F3F11F043 +:105240000E94BE09E016F106B1F707E411E0FEE4A2 +:10525000EF2EF1E0FF2ED8018D918D018F3F11F0DF +:105260000E94BE09E016F106B1F7E8EDF2E082EE29 +:1052700092E0AFE4B3E011921D928E179F07D9F729 +:105280000E94AC1A811102C00E94311882E090E0A5 +:105290000E94B4358093440384E090E00E94B435CA +:1052A000182F82E290E00E94B435982F812F9093BE +:1052B000D7028093D6020E947325EFE7FBEB31976C +:1052C000F1F700C000000E94732580914F0380FF1A +:1052D0002EC06FEF7FEF90E080E00E94E63581E026 +:1052E0008093E00080E28093D8001092C9008FE1A3 +:1052F0009EE40197F1F700C0000087E090EBDC012D +:105300008093800690938106A0938206B0938306D3 +:1053100088E19CE00FB6F894A895809360000FBEDA +:1053200090936000FFCF85E280936F0139CF83E0D7 +:1053300090E00E94B4350E94050C809176040E9492 +:10534000CB160E94AC1A811102C00E94311888E16C +:1053500090E00E94BC3560933D0470933E048093BE +:105360003F0490934004672B682B692B11F40E9433 +:1053700001180E94943167E081E00E94E61365E520 +:1053800086E10E94E61363E687E10E94E61360EA85 +:105390008AE10E94E61369E98BE10E94E61365EF5A +:1053A0008CE10E94E61360EA8DE10E94E61360E35F +:1053B0008EE10E94E61366E083E00E94E61361E05E +:1053C0008CE00E94E61360E081E00E94E61360E05A +:1053D0008CE00E94E6136FE084E00E94E61361E037 +:1053E0008CE00E94E6130E94DE0E811102C00E9432 +:1053F000963383E080931A0380E2809343040E94F3 +:1054000094316DE070E08CE992E00E94A70D892B49 +:10541000E9F580911A0363E070E081FD9EC289E99D +:1054200092E00E94A70D892B89F56DE070E089E874 +:1054300092E00E94A70D892B49F50E9462086058EE +:10544000774C8E4F9F4F60934A0470934B04809328 +:105450004C0490934D04EEE7F4E080E092E0DF012D +:105460009C011D9221503040E1F7F0937F06E093BC +:105470007E068FEF9FEF90937D0480937C0481E004 +:1054800080934F0480934E0410921B038091E4029A +:10549000811136C00E94AC1A811104C00E943118DB +:1054A0000E94BE1788E090E00E94BC3560937704AC +:1054B000709378048093790490937A0480915B03CD +:1054C000836080935B036E7F71F40E94BE1788E057 +:1054D00090E00E94BC3560937704709378048093C9 +:1054E000790490937A040E940E098091770480FFDA +:1054F00004C060E086950E94641681E08093E40217 +:1055000080915801811106C084EF8093660185EF78 +:105510008093650120916601A22FA295AF70B0E043 +:1055200091963C9191972F7081E090E0BC01022E02 +:1055300001C0660F0A94EAF7462F409543239196DF +:105540004C93919792963C919297362B92963C93DE +:10555000929740916501E42FE295EF70F0E031A160 +:105560004F70042E01C0880F0A94EAF7982F909587 +:10557000932391A392A1892B82A390968C9190E082 +:1055800002C0959587952A95E2F7817020A130E0B9 +:1055900002C0359527954A95E2F792E020FF90E00A +:1055A000892B8093EC028091580111E08127809330 +:1055B000EB02312F381B3093E5020E94943140E01A +:1055C00060E080E00E94600D60E08AE00E94641666 +:1055D00089EA92E090935E0380935D0381E00E94EC +:1055E000741780EE90E090935A01809359011093C4 +:1055F00032030E94800D8BE591E0909353048093D9 +:1056000052043E018DE3680E711C80916C04FF24EE +:10561000F39400E112E1853009F4F2C10E94732590 +:10562000E82E81110E946208E5E4F3E0AFE4B3E004 +:1056300010E000E0B02EDD9081918D1509F404C2D8 +:105640008D25C12CFF24F394982F9F2109F4F7C1D5 +:105650000E94DE0E882399F0CEA6BFA6DF2081E04F +:1056600009F480E088AB0E94051C8160782F9AAB1A +:1056700089AB4EA55FA568A98AA90E94E124F8011B +:10568000EB5BFC4F8081F826F0828091EC02E82FE2 +:10569000EE0FEE0F90916601A92FA295AF70B0E0CA +:1056A00090962C9130E09F7002C0359527959A9581 +:1056B000E2F72170332790916501A92FA295AF7071 +:1056C000B0E090964C9150E09F7002C05595479580 +:1056D0009A95E2F7CA018170992740FF02C082E0E3 +:1056E00090E0822B8E2B8093EC021091EB028F7056 +:1056F000E82FF0E0E650FE4F80819091EA02890F9A +:105700008093EA02F12C84306CF0E12FF0E0E85154 +:10571000FD4F80818F5F808360E0812F0E94A727EB +:10572000FF24F3948091EA028D3F6CF4E12FF0E0C6 +:10573000E851FD4F80818150808361E0812F0E947C +:10574000A727FF24F3948091EA02082E000C990BFE +:1057500064E070E00E9474358093EA02F1100E94C8 +:10576000800B80914F04882351F180911C0390910C +:105770001D030E94F61BC29708F07DC120917C0496 +:1057800030917D042115310509F0A0C280914E04AD +:105790008823A9F00E94620800914A0410914B04EA +:1057A00020914C0430914D04601B710B820B930BC4 +:1057B0006F3F7F4F8F4F9F4710F40E94D70DE1102E +:1057C00001C0F1100E94F20D809142038A3008F06E +:1057D000BAC380914003909141030E94F61B089741 +:1057E00008F4B1C304E610E025E030E04BE353E0F9 +:1057F00064E084E10E94DF32892B09F075C31092C6 +:10580000420320913203222359F080913B0390916F +:105810003C0398278927982790933C0380933B0368 +:1058200086E0E4E2F3E0DE01919601900D928A9524 +:10583000E1F786E0FE01B196DE01119601900D922E +:105840008A95E1F786E0FE013196A5E3B3E0019089 +:105850000D928A95E1F790913F038091360397FD71 +:105860003AC38E7F80933603809133039091340343 +:10587000009709F02AC360913B0380913C0300919B +:105880003D0310913E03222309F4F2C241E00E943D +:105890003A0D2091300330913103820F931F909382 +:1058A00031038093300341E0602F812F0E943A0D35 +:1058B00020912E0330912F03820F931F90932F037B +:1058C00080932E0360E373E08AE393E00E941B0D54 +:1058D0006EE273E089E393E00E941B0D10923703A0 +:1058E0001092380386E0E5E3F3E0DE0111960190C3 +:1058F0000D928A95E1F786E0FE013196A4E2B3E0CD +:1059000001900D928A95E1F73091260320912703AB +:1059100090912803809129037091200360912103C5 +:105920004091220350912303F0912503E0911F033E +:10593000FE13E0C2332311F07313DCC2222311F0F3 +:105940002613D8C2882311F08513D4C2992319F0E5 +:1059500081E04913D0C280E0CEC286E992E061CDF9 +:1059600080916C04843009F43BC00E94D70D40E064 +:1059700060E080E00E94600D80E00E94B31680919C +:10598000E702811109C0F092E702809177048170EB +:105990008093E6020E94241010925604A8E1B0E021 +:1059A000E0E40FB6F894A895A09360000FBEE093D2 +:1059B000600083B7817F846083BF83B7816083BFCA +:1059C0007894889583B78E7F83BF0FB6F894A89597 +:1059D00080916000886180936000109260000FBE2B +:1059E00080916B04882361F00E947325EFE4F3E05B +:1059F0008191811178C429E533E02E173F07C1F763 +:105A000080916C04853009F4ABCF10925F040E9442 +:105A100039100E94010F0E94B3161092E702809184 +:105A2000E602882349F080917704816080937704AF +:105A300060E086950E9464160E94800DEFCDC394AD +:105A4000FF0C37E0C31200CE0F5F1F4F0A30110565 +:105A500009F0F0CD8FEF8BAB8CAB1DAA0E94051C1B +:105A60008160782F9FAB8EAB4BA95CA96DA98FA9E4 +:105A70000E94E1240ACE0E94051C90931D0380938E +:105A80001C0360E080E00E949A080E94010F80934E +:105A9000F9020E94DE0E882331F14091F502509107 +:105AA000F6026091F7027091F8022FB7F894809196 +:105AB000570490915804A0915904B0915A042FBFF3 +:105AC000841B950BA60BB70B81339547A105B10538 +:105AD00040F00E94D70D80914F04882309F456CEE0 +:105AE0004DCE0E94F20D0E94DE0E882309F4D5C02F +:105AF00061E080E00E949A0860E08CE791E00E94FB +:105B0000CA1362E080E00E949A08809176040E94A5 +:105B1000CB0C823009F49BC008F090C0882309F4B4 +:105B200096C0813009F499C065E080E00E949A082F +:105B300060E08AE991E00E94CA1366E080E00E947A +:105B40009A086091F902669561708FE991E00E9470 +:105B5000CA1367E080E00E949A086091F90260959C +:105B6000617084EA91E00E94CA1368E080E00E94BC +:105B70009A086091F90262FB662760F988EA91E071 +:105B80000E94CA137DA66CA64091F1025091F202C8 +:105B90006091F3027091F4022FB7F894809157044A +:105BA00090915804A0915904B0915A042FBF841BBE +:105BB000950BA60BB70B8D329140A105B10508F4EA +:105BC0008ACF0E9462086093F1027093F202809380 +:105BD000F3029093F4028091F002811104C080914D +:105BE0006701811142C06DE080E00E949A0860E088 +:105BF0008DEA91E00E94CA136AE080E00E949A0850 +:105C000081E0809367018091EF0290E001968170BE +:105C100099278093EF0221E030E0281B390B40E602 +:105C2000429FC001439F900D11242091EE02222338 +:105C300051F1855C9B4F0E9492064DCF833089F0D5 +:105C4000843009F071CF60E08EE891E003C060E03D +:105C500082E891E00E94CA1367CF60E088E891E093 +:105C6000F9CF60E084E991E0F5CF6AE080E00E943E +:105C70009A0860E08DEA91E00E94CA136BE080E030 +:105C80000E949A08C0CF2091ED02222319F0855876 +:105C90009C4FD1CF85549D4FCECF64E080E00E94D1 +:105CA0009A0860E083EB91E00E94CA1365E080E00F +:105CB0000E949A0860E089EB91E00E94CA1369E0B3 +:105CC00080E00E949A088BEF94E0B5CF80911B038F +:105CD00061E070E081115ACD082F10E02B01082EF1 +:105CE00002C0440C551C0A94E2F7A9014421552135 +:105CF000452B09F448C090911A0390FD46C0829547 +:105D0000880F807680936A0198013695279536959D +:105D1000279520936D01815E80936B0110926E0137 +:105D200024E630E047E050E068E671E088E70E9452 +:105D30008B32892B09F02ACDA80175E0440F551F3D +:105D40007A95E1F780911A0380FD2DC042585B4F90 +:105D500004E610E020E230E060E488E70E94B2321E +:105D6000892B09F013CD0E94F20DC2018095909508 +:105D700040907C0450907D044822592250927D042A +:105D800040927C0403CD8F5FA7CF880F880F880FC8 +:105D900080936A0110926D01895F80936B0183E0AB +:105DA00080936E01BDCFEAEFF2E080E2DF011D9249 +:105DB0008A95E9F7EEE0F2E0F9AFE8AF0AE012E029 +:105DC00099249394A8ADB9AD2D91B9AFA8AFF801BE +:105DD00021908F01240E352E311CC10182589B4F1A +:105DE0001C01E22FF0E0E650FD4F30E020E067E0DC +:105DF000A62EA21AB92C022E01C0BB0C0A94EAF7F7 +:105E0000610190E0D6018D916D018B216A2D691B96 +:105E10006770862E062E000C770BB82F01C0BB0FC3 +:105E20008A94EAF78B2E71956195710967707727CF +:105E300001C086956A95EAF7882A8081882A80823F +:105E40009F5F9830F9F62F5F3F4F3196283031052C +:105E500071F6E2E1F2E028AD39ADE217F30709F09F +:105E6000B1CF04E610E020E230E04AEF52E074CF18 +:105E700045E00E943A0D20912C0330912D03281B00 +:105E8000390B30932D0320932C0345E0602F812F95 +:105E90000E943A0D20912A0330912B03281B390BC5 +:105EA00030932B0320932A036CE273E087E393E0A3 +:105EB0000E941B0D6AE273E088E393E00E941B0DD1 +:105EC00010923A03109239030DCD01979093340349 +:105ED0008093330307CD81608093360384E00E9472 +:105EE000F21384E190E0F2CF809142038F5F8093C0 +:105EF0004203F8CC81E080FF0FC0E0915204F091A2 +:105F00005304309749F082E0809324030480F581A4 +:105F1000E02D84E293E00995109226031092270366 +:105F2000109228031092290386E0E4E2F3E0AEE148 +:105F3000B3E001900D928A95E1F70E94051C9093C1 +:105F40004103809340030E94010F909143038917FE +:105F500031F00E94010F809343030E94B316809199 +:105F60006C04843009F051CB83E08093E900809188 +:105F7000E80082FF4ACB8091E80090E085FF0BC0EB +:105F80000E94F40630E2E32EF12C8E010F5F1F4FCA +:105F90008823E1F091E08091E8008B778093E8001E +:105FA000992309F432CBE981E150E33108F071C063 +:105FB000F0E0ED5AF84C0C9488358091F100D8014E +:105FC0008D938D01B1E0EB1AF10821F38091E80087 +:105FD00085FDF3CF8091E8008B778093E8000E94E5 +:105FE000F406882399F3D6CF1A8289E08B8311C0F7 +:105FF0008A81823009F48FC1833091F1813009F0B8 +:1060000048C00E9462080E948E356B837C838D831A +:106010009E8380916C04843009F0F7CA1091E900E6 +:106020001F709091EC00892F817090FD80E8182BF3 +:1060300082E08093E9008091E80080FF0DC050E08D +:1060400040E060E270E0CE0101960E942507809159 +:10605000E8008E778093E8001F701093E900D5CA9E +:10606000DE011396EFE4F3E081918D9323E0E935AF +:10607000F207D1F7CECF8A81823059F46B817C81CF +:106080008D819E810E948E3586E290E00E94C83507 +:10609000C0CF8FEF8983BDCF4C816B818A810E94F5 +:1060A0008D149827892798279E838D83B2CF0D81E1 +:1060B0001E811027012710278A81EB803EE0E39E96 +:1060C000700111249CE8899FE00CF11C11248C8143 +:1060D00090E0880F991FE80EF91E612FC70187967F +:1060E0000E94C835602FC7018896D0CF0E94111436 +:1060F00090CF8A818138C1F060F4803809F089CF6F +:1061000020E04B8160917904809178040E944D15C4 +:1061100080CF8238E9F0833809F07BCF20E04091CE +:106120007A046C818B81F2CF60E08B810E946416CF +:106130008B81811103C00E9424106BCF8091770462 +:1061400081608093770460E086950E94641661CF39 +:106150008B8180937B045DCF8A81813899F030F404 +:10616000803809F056CF80917A0440CF823891F080 +:10617000833809F04ECF809178048B838091790425 +:106180008C8347CF8091770480FF02C086952ECF05 +:1061900080E02CCF80917B0429CF609177047091AF +:1061A00078048091790490917A040E943B1531CF54 +:1061B00080E18A832ECF81E08A838DE117CFCA8068 +:1061C000DB80DC24CD24DC248E010F5F1F4FEC80AC +:1061D000E00EF12EF11CC6018D519D4F0E151F05CD +:1061E00009F417CFADE1CA16A1E0DA0650F40E9417 +:1061F000B435F8018483BFEFCB1ADB0A0F5F1F4F62 +:10620000EACFD80114961C92F6CF0A811B81102781 +:1062100001271027FE0131966F01EC80E00EF12E70 +:10622000F11CC8018D519D4FE016F10609F4F1CE25 +:106230000D31F1E01F0728F4D60114966C910E94ED +:10624000C835BFEFCB1ADB0A0F5F1F4FEACF0E94A2 +:106250000114DFCE85E0ADCFCA80DB80DC24CD2405 +:10626000DC248E010F5F1F4FEC80E00EF12EF11C3D +:10627000C6018796E016F10609F4CBCEECEBCE16FC +:10628000E2E0DE0658F40E94B435D80114968C93EF +:10629000FFEFCF1ADF0A0F5F1F4FEACFF80114821A +:1062A000F7CF0A811B811027012710279E012F5F3E +:1062B0003F4F6901EC80E00EF12EF11CC80187967A +:1062C000E016F10609F4A5CE0C3B32E0130728F4E2 +:1062D000D60114966C910E94C835BFEFCB1ADB0A29 +:1062E0000F5F1F4FEBCF09BD19BD09B400FEFDCFF5 +:1062F0008091D8008F7D8093D8008091E0008260EB +:106300008093E0008091E00081FDFCCF10925F045B +:106310000E94391075CB86E290E00E94B4351B8252 +:106320001C821D828E8375CE1092B9008CE0809302 +:10633000B80008959F92AF92BF92CF92DF92EF92F2 +:10634000FF920F931F93CF93DF93B82EEB010E9420 +:10635000051C6C01EE24E394F12CC431D10560F0EE +:1063600025E0E22EF12CCF3FDC0731F0CE0164E1D5 +:1063700070E00E9454357B0184EAA82E94E8992E9F +:106380001092BC00A092BC000E94051C8C01809160 +:10639000BC0087FF0DC08091B900887F883039F13B +:1063A0008091B900887F803111F10FEF1FEF09C094 +:1063B0000E94051C801B910B8E159F0540F30EEF6C +:1063C0001FEFCF3FDC07E1F2C6010E94F61B8C17DE +:1063D0009D07B0F2C801DF91CF911F910F91FF90FF +:1063E000EF90DF90CF90BF90AF909F900895B092C4 +:1063F000BB009092BC000E94051C8C018091BC00E7 +:1064000087FF0AC08091B900887F883111F08034FD +:1064100061F610E000E0DECF0E94051C801B910BAE +:106420008E159F0558F3CBCF0F931F93CF93DF9318 +:10643000EB018093BB0084E88093BC000E94051CA4 +:106440008C018091BC0087FF11C02091B900287F8A +:1064500081E090E0283211F490E080E09195819500 +:106460009109DF91CF911F910F910895CF3FDC07E4 +:1064700041F30E94051C801B910B8C179D0708F3AC +:106480008EEF9FEFEECF0F931F93CF93DF93EC012F +:1064900084EC8093BC000E94051C8C018091BC00A0 +:1064A00087FF08C08091BB0090E0DF91CF911F91E2 +:1064B0000F910895CF3FDC0789F30E94051C801BD4 +:1064C000910B8C179D0750F38EEF9FEFEECF0F933C +:1064D0001F93CF93DF93EC0184E88093BC000E946C +:1064E000051C8C018091BC0087FF08C08091BB0017 +:1064F00090E0DF91CF911F910F910895CF3FDC077E +:1065000089F30E94051C801B910B8C179D0750F38B +:106510008EEF9FEFEECFCF92DF92EF92FF920F932D +:106520001F93CF93DF936B018A017901B9010E9418 +:106530009A31E6010C0D1D1DC017D10761F424E945 +:106540002093BC00DF91CF911F910F91FF90EF90AE +:10655000DF90CF90089597FDF2CFB70189910E9407 +:106560001432EACFCF92DF92EF92FF920F931F93F4 +:10657000CF93DF93C62F6A017901B8010E949A3147 +:1065800097FD0CC0B8018C2F0E941432E601EC0C70 +:10659000FD1CCE15DF0511F097FF0CC024E92093F8 +:1065A000BC00DF91CF911F910F91FF90EF90DF9092 +:1065B000CF900895B80189910E941432EACFCF920A +:1065C000DF92EF92FF920F931F93CF93DF93F82EFA +:1065D000E62EEA016901B8010E949A3197FD15C0C3 +:1065E000B8018E2D0E94143297FD0FC0B8018F2D77 +:1065F00081600E949A31F12CE12C21E0C21AD1086D +:10660000EC14FD0400F597FF11C024E92093BC00B1 +:106610001816190614F490E080E0DF91CF911F91D5 +:106620000F91FF90EF90DF90CF900895C8010E94E6 +:10663000433297FD04C0FE01EE0DFF1D80832FEF56 +:10664000E21AF20ADDCF97FDE0CFC8010E9467325F +:1066500097FDDBCFCC0DDD1D8883D7CF84E98093F8 +:10666000BC0008958EE14A9B02C08150E1F74A9B2D +:10667000FECF08955A9880E28A95F1F75A9A0895C4 +:10668000FC013BE03A95F1F798E020E080E031E052 +:1066900040E14A95F1F7880F4A9B02C081602327A9 +:1066A00042E04A95F1F7000040E14A95F1F7915038 +:1066B00079F790E19A95F1F799B132E03A95F1F7CF +:1066C000000040E14A95F1F792FB992790F9922753 +:1066D0002081920F90830895EF92FF920F931F9362 +:1066E000CF93DF930F92CDB7DEB719828C017C0177 +:1066F000E60EF11C0E151F0561F481E099819111E0 +:1067000080E00F90DF91CF911F910F91FF90EF905C +:1067100008950E943233CE0101960E944033F80161 +:1067200081938F01E7CF529A5A9A089552985A9AB4 +:10673000EA9AE9E6F0E080818F7C808308956150D9 +:10674000770B91E001C0990F6A95EAF720E031E0FC +:10675000911108C0222391F05A9A80E28A95F1F7AC +:106760005A980895492F482339F05A9A232740E22E +:106770004A95F1F79695ECCF5A98F9CF5A98EDCF04 +:10678000FF920F931F93CF93DF93EC018C01060FC1 +:10679000111DC017D10731F4DF91CF911F910F91D7 +:1067A000FF900895F9900E943A3368E08F2D0E947F +:1067B0009F33EFCF1F920F920FB60F921124EF92DB +:1067C000FF920F931F932F933F934F935F936F937A +:1067D0007F938F939F93AF93BF93EF93FF93CF9349 +:1067E000DF930F92CDB7DEB719820E943233CE010C +:1067F00001960E944033A82FA695A695A695282F0E +:10680000229525709A2F9570290F922F93702695B7 +:106810002695920F982797708981982B09F075C05B +:10682000A83008F072C080E18A95F1F75A9A529A1E +:10683000B2E0BA95F1F700C05A98EA2EF12CEAE0DE +:10684000AE9FD0011124AF5FBE4F1896ED91FC9121 +:1068500019973097B1F06091F8017091F90116968F +:106860002D913C911797260F371F13968D919C9170 +:106870001497680F791F15964C91159712968C9165 +:1068800009958AE08E9DF0018F9DF00D1124EF5F38 +:10689000FE4F6581662351F02091F8013091F90196 +:1068A00086819781820F931F0E94C0330E943A33E2 +:1068B000F0E1FA95F1F75A9852985A9A80E18A9540 +:1068C000F1F78AE08E9D80018F9D100D11240F5FDE +:1068D0001E4FD80112966C911297662371F1209188 +:1068E000F8013091F90113968D919C91820F931FBD +:1068F0000E946C33D801ED91FC91882311F088E05F +:1069000001C082E080830E9432330F90DF91CF91EB +:10691000FF91EF91BF91AF919F918F917F916F9177 +:106920005F914F913F912F911F910F91FF90EF90A9 +:106930000F900FBE0F901F901895ED91FC91DFCF37 +:106940000F931F93CF93DF93EC0108970CF0A9C02E +:106950008AE08C9FF0018D9FF00D1124EF5FFE4FB8 +:1069600080819181892B09F49CC0F894529A5A989D +:1069700085E08A95F1F700008C2F869585709C2F15 +:106980009570890F982F937086958695890F8E0143 +:1069900093E0000F111F9A95E1F7082B0E943A33FC +:1069A00000C068E0802F0E949F33A0E1AA95F1F714 +:1069B00052985A9A4A9B27C087E090E04A9925C08E +:1069C0008AE08C9F80018D9F100D11240F5F1E4F58 +:1069D000F80165816623A1F12091F8013091F90158 +:1069E00086819781820F931F0E946C33811128C08A +:1069F000529A5A9AD801ED91FC9182E08083789462 +:106A000082E090E016C000C0D5CF0197B9F4529A49 +:106A10005A9A8AE08C9FF0018D9FF00D1124EF5F50 +:106A2000FE4F0190F081E02D81E08083789481E039 +:106A300090E0DF91CF911F910F91089500C0BECFDC +:106A40000E943233B0E2BA95F1F75A98529AE0E1D7 +:106A5000EA95F1F78AE08C9FF0018D9FF00D1124EB +:106A6000EF5FFE4F6281662351F02091F801309173 +:106A7000F90183819481820F931F0E94C0330E9489 +:106A80003A338AE08C9FF0018D9FF00D1124EF5F67 +:106A9000FE4F0190F081E02D1082789490E080E02C +:106AA000C8CF84E090E0C5CFAA1BBB1B51E107C053 +:106AB000AA1FBB1FA617B70710F0A61BB70B881F8E +:106AC000991F5A95A9F780959095BC01CD0108951D +:106AD000991B79E004C0991F961708F0961B881F30 +:106AE0007A95C9F78095089597FB072E16F40094C0 +:106AF00007D077FD09D00E94543507FC05D03EF43D +:106B0000909581959F4F0895709561957F4F089559 +:106B1000EE0FFF1F0590F491E02D09946927962749 +:106B200069277827872778270895FB01DC0102C0B1 +:106B300005900D9241505040D8F70895FB01DC01BB +:106B400004C08D910190801921F441505040C8F744 +:106B5000881B990B0895FB01DC0102C001900D9286 +:106B600041505040D8F70895F999FECF92BD81BDAC +:106B7000F89A992780B50895A6E1B0E044E050E086 +:106B80000C94EE35A8E1B0E042E050E00C94EE3514 +:106B9000262FF999FECF92BD81BDF89A019700B4D6 +:106BA000021639F01FBA20BD0FB6F894FA9AF99A76 +:106BB0000FBE08950396272F0E94C9350E94C8353D +:106BC000252F0E94C935242F0C94C9350196272FF3 +:106BD0000E94C9350C94C835DC01CB01FC01F99940 +:106BE000FECF06C0F2BDE1BDF89A319600B40D9219 +:106BF00041505040B8F708950E943E3608F481E0B5 +:106C00000895E89409C097FB3EF49095809570959F +:106C100061957F4F8F4F9F4F9923A9F0F92F96E9E8 +:106C2000BB279395F695879577956795B795F1115D +:106C3000F8CFFAF4BB0F11F460FF1BC06F5F7F4FFA +:106C40008F4F9F4F16C0882311F096E911C077230C +:106C500021F09EE8872F762F05C0662371F096E815 +:106C6000862F70E060E02AF09A95660F771F881FE4 +:106C7000DAF7880F9695879597F90895990F000888 +:106C8000550FAA0BE0E8FEEF16161706E807F907FE +:106C9000C0F012161306E407F50798F0621B730B99 +:106CA000840B950B39F40A2661F0232B242B252B1A +:106CB00021F408950A2609F4A140A6958FEF811DBD +:106CC000811D08950E9475360C94E6360E94D836D0 +:106CD00038F00E94DF3620F0952311F00C94CF3667 +:106CE0000C94D53611240C941A370E94F73670F3A1 +:106CF000959FC1F3950F50E0551F629FF001729F61 +:106D0000BB27F00DB11D639FAA27F00DB11DAA1F6F +:106D1000649F6627B00DA11D661F829F2227B00DBC +:106D2000A11D621F739FB00DA11D621F839FA00D47 +:106D3000611D221F749F3327A00D611D231F849F97 +:106D4000600D211D822F762F6A2F11249F575040EE +:106D50009AF0F1F088234AF0EE0FFF1FBB1F661F69 +:106D6000771F881F91505040A9F79E3F510580F032 +:106D70000C94CF360C941A375F3FE4F3983ED4F36B +:106D8000869577956795B795F795E7959F5FC1F7D6 +:106D9000FE2B880F911D9695879597F9089597F981 +:106DA0009F6780E870E060E008959FEF80EC0895B1 +:106DB00000240A94161617061806090608950024DA +:106DC0000A9412161306140605060895092E039454 +:106DD000000C11F4882352F0BB0F40F4BF2B11F4C8 +:106DE00060FF04C06F5F7F4F8F4F9F4F089557FD27 +:106DF0009058440F551F59F05F3F71F04795880F29 +:106E000097FB991F61F09F3F79F0879508951216BF +:106E100013061406551FF2CF4695F1DF08C016166B +:106E200017061806991FF1CF86957105610508941C +:106E30000895E894BB2766277727CB0197F9089533 +:106E4000F894FFCF29115111A4115111A4118411EB +:106E5000BC11A411B912C6120D150D151615161573 +:106E600018151615161516150D150D151D151615D3 +:106E700016151D15621CD81CDB1CEF1CF21C051D11 +:106E80000E1D321D781DAA1DBE1D441D671D3F210C +:106E90003F2198219821CA21722172217221E42177 +:106EA000552265226522F42FF82F3B304C305730A5 +:106EB00076307930AC30CD3049304930D830DB30A5 +:0C6EC000DF30053127312A312C315131EF +:106ECC000138020000000100000000380200000040 +:106EDC000501000000380200000001060000003827 +:106EEC000200000001070000003802040800000046 +:106EFC000000003802090C000000000000380201FC +:106F0C001500000000000036323331F7F667669743 +:106F1C00C6343500000000000180005F086D0E4C87 +:106F2C000E480E440EF4F5010021007F22000300F0 +:106F3C004A004A4A01F6F731333236674C4159451B +:106F4C00520042617365200047616D6520005261FB +:106F5C00697365004C6F776572004C4F434B00436F +:106F6C00617073004E756D005363726C00202020AD +:106F7C00202000534F4C415200544D50535400812B +:106F8C008283E200E900EA00B500B600B700CD004C +:106F9C008301CC008A019201940121022302240274 +:106FAC002502260227022A02B300B4006F007000EB +:106FBC000603060806010606AF0200FF01000100E9 +:106FCC0000FFFF0000010001FF000008101818105E +:106FDC000800000102020202020202020202402226 +:0E6FEC007B99017701FC00000C190C390C0098 :00000001FF From 6d17ddc6fb590f486484f24de8e207bb602f2c93 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 28 Nov 2021 01:27:41 -0500 Subject: [PATCH 082/155] Update ignores --- .gitignore | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index f3b76f7edf5b..939da4a87f60 100644 --- a/.gitignore +++ b/.gitignore @@ -20,11 +20,12 @@ api_data/v1 doxygen/ quantum/version.h -*.bin +#*.bin *.eep -*.hex +#*.hex *.qmk *.uf2 +.lnk # Old-style QMK Makefiles /keyboards/*/Makefile From 96346e5bbbff51a254a0f5efd13f5d32d725396e Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 28 Nov 2021 20:32:34 -0500 Subject: [PATCH 083/155] Updated for breaking changes. Minor code still in progress. --- keyboards/solartempest/sofle/config.h | 25 +- .../solartempest/sofle/keymaps/via/bongocat.c | 3 +- .../solartempest/sofle/keymaps/via/keymap.c | 237 +- .../solartempest/sofle/keymaps/via/luna.c | 5 +- .../solartempest/sofle/keymaps/via/oled.c | 3 +- .../solartempest/sofle/keymaps/via/snakey.c | 59 +- .../sofle/keymaps/via/snakey_minimal.c | 61 +- keyboards/solartempest/sofle/rules.mk | 8 +- .../sofle/solartempest_sofle_via.hex | 3478 ++++++++--------- 9 files changed, 1937 insertions(+), 1942 deletions(-) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index 1a347769b69a..2c62293e841d 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -58,16 +58,15 @@ #define COMBO_TERM 400 //Default combo time is 200ms. This is the time delay allowed between deleting each whole word with shift-backspace. #endif -// Disabled for LTO +// Disabled to save space #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION - -// Disabled to save space #define NO_ACTION_ONESHOT //Save 244 bytes (-244). #define NO_RESET //Save 40 bytes (-40). +#define LAYER_STATE_8BIT //For less than 8 bits worth of layers. #undef LOCKING_SUPPORT_ENABLE //For MX lock keys only. #undef LOCKING_RESYNC_ENABLE //For MX lock keys only. -#define LAYER_STATE_8BIT //For less than 8 bits worth of layers. +//#define SUPER_ALT_TAB_ENABLE //Enable super alt tab custom keycode(+178). // Encoder support #define ENCODERS_PAD_A { F5 } @@ -81,15 +80,16 @@ // OLED settings #ifdef OLED_ENABLE - #define OLED_TIMEOUT 80000 //80000 = 80secs, 120000 = 2mins in ms. - #define OLED_BRIGHTNESS 90 //Default is 100. - #define SPLIT_OLED_ENABLE //Synx on/off OLED state between halves (+100). - //#define SPLIT_WPM_ENABLE //Enable WPM across split keyboards (+106-268). + #define OLED_TIMEOUT 80000 //80000 = 80secs, 120000 = 2mins in ms. + #define OLED_BRIGHTNESS 90 //Default is 100. + #define SPLIT_OLED_ENABLE //Synx on/off OLED state between halves (+100). + //#define SPLIT_WPM_ENABLE //Enable WPM across split keyboards (+106-268). //#define SPLIT_LAYER_STATE_ENABLE //Keep on master to save space (+142). //#define SPLIT_LED_STATE_ENABLE //Keep on master to save space (+112). //#define SPLIT_MODS_ENABLE //Keep on master to save space (+138). - #define OLED_LOGO //Enable to print snakey custom logo on slave side (+108). - //#define OLED_NO_SLAVE //Enable for snakey to not render slave OLED (-160). + #define OLED_LOGO //Enable to print snakey custom logo on slave side (+108). + //#define OLED_NO_SLAVE //Enable for snakey keyboard pet code to not render slave OLED (-160). + #define SNEAK_DISABLE //Disable snakey keyboard pet sneak animation to save space (-132). #endif // Haptic feedback settings @@ -104,6 +104,7 @@ #define V_RMS 2.0 //Per ELV1411A datasheet. #define F_LRA 150 //Resonant frequency per ELV1411A datasheet. + //#define HAPTIC_OFF_IN_LOW_POWER 1 //Turn off haptic feedback while sleeping (+54). #define NO_HAPTIC_PUNCTUATION #define NO_HAPTIC_ALPHA #define NO_HAPTIC_MOD @@ -113,11 +114,10 @@ // Pimoroni trackball settings #ifdef POINTING_DEVICE_ENABLE - #define PIMORONI_TRACKBALL_INTERVAL_MS 8 //Default is 8ms + //#define PIMORONI_TRACKBALL_INTERVAL_MS 6 //Default is 8ms //#define PIMORONI_TRACKBALL_ROTATE //Change according to your particular installed trackball orientation. #define PIMORONI_TRACKBALL_INVERT_Y #define PIMORONI_TRACKBALL_INVERT_X - //#define PIMORONI_TRACKBALL_CLICK //Incompatible with keymap mouse keys. Use trackball_register_button() and trackball_click() instead. #endif // RGB settings @@ -130,7 +130,6 @@ #define RGBLIGHT_LIMIT_VAL 160 //Power draw may still exceed the USB limitations of 0.6A at max brightness with white colour with this setting. #define RGBLIGHT_LAYERS //Enable layer light indicators #define RGBLIGHT_SLEEP //Turn off LEDs when computer sleeping (+72) - //#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF //Shows lock key lighting status even when RGB is off //RGB LED Conversion macro from physical array to electric array (+146). This results in better looking animated effects. //First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping diff --git a/keyboards/solartempest/sofle/keymaps/via/bongocat.c b/keyboards/solartempest/sofle/keymaps/via/bongocat.c index 73ded11b4a76..093736b7a196 100644 --- a/keyboards/solartempest/sofle/keymaps/via/bongocat.c +++ b/keyboards/solartempest/sofle/keymaps/via/bongocat.c @@ -198,7 +198,7 @@ static void render_anim(void) { } } -void oled_task_user(void) { +bool oled_task_user(void) { led_usb_state = host_keyboard_led_state(); if (is_keyboard_master()) { print_status_narrow(); @@ -209,5 +209,6 @@ void oled_task_user(void) { sprintf(wpm_str, " %03d\n WPM", get_current_wpm()); oled_write(wpm_str, false); } + return false; } #endif diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index a92b78ff829d..08840a31fe0f 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -17,7 +17,6 @@ */ #include QMK_KEYBOARD_H -#include //This is required for OLED sprintf. #ifdef ENCODER_ENABLE #include "encoder.c" @@ -26,14 +25,16 @@ #ifdef OLED_ENABLE //#include "oled.c" //Stock OLED code //Note that the keyboard animations below take a large amount of space! - //#include "bongocat.c" //OLED code for Bongocat, original code by foureight84. Disable RGBLIGHT to make enough space. + //#include "bongocat.c" //OLED code for Bongocat, original code by foureight84. //#include "luna.c" //OLED code for Luna, original code by Hellsingcoder and adapted by Jackasaur. //#include "snakey.c" //OLED code for Snakey, customized from Luna. If not used, do not use OLED_LOGO in config.h. + //#include //This is required for OLED sprintf (should not be required anymore since sprintf removed from my code). #include "snakey_minimal.c" //OLED code for Snakey, without WPM/related animations to save space. If not used, do not use OLED_LOGO in config.h. #endif #ifdef POINTING_DEVICE_ENABLE - #include "drivers/sensors/pimoroni_trackball.h" + bool trackball_is_scrolling = true; //Default mode is scrolling + bool trackball_is_precision = false; //Default mode is less precise bool was_scrolling = true; //Remember preferred state of trackball scrolling #endif @@ -47,8 +48,10 @@ //Variables for custom keycodes -bool is_alt_tab_active = false; // Super Alt Tab Code -uint16_t alt_tab_timer = 0; +#ifdef SUPER_ALT_TAB_ENABLE + bool is_alt_tab_active = false; // Super Alt Tab Code + uint16_t alt_tab_timer = 0; +#endif bool lshift_held = false; // LShift Backspace Delete whole Word Code bool rshift_held = false; // RShift Backspace Delete whole Word Code static uint16_t held_shift = 0; @@ -133,74 +136,72 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //Can skip these #ifdef POINTING_DEVICE_ENABLE void run_trackball_cleanup(void) { //Set colour of trackball LED. Does not require RGBLIGHT_ENABLE if colour shorthands are not used. #ifdef POINTING_DEVICE_ENABLE - if (trackball_is_scrolling()) { - trackball_set_rgbw(43, 153, 103, 0x00); - } else if (trackball_get_precision() != 1.0) { - trackball_set_rgbw(0, 27, 199, 0x00); + if (trackball_is_scrolling) { + pimoroni_trackball_set_rgbw(43, 153, 103, 0x00); + } else if (!trackball_is_precision) { + pimoroni_trackball_set_rgbw(0, 27, 199, 0x00); } else { - trackball_set_rgbw(217, 165, 33, 0x00); //RGB_GOLDENROD in number form. + pimoroni_trackball_set_rgbw(217, 165, 33, 0x00); //RGB_GOLDENROD in number form. } #endif } - #if defined(PIMORONI_TRACKBALL_ROTATE) || defined(PIMORONI_TRACKBALL_INVERT_Y) - bool pointing_device_task_user(pimoroni_data* trackball_data) { //Code from Dasky. This corrects the rotate/inversion scrolling issue currently in QMK Master. - if (trackball_is_scrolling()) { - pimoroni_data temp = *trackball_data; - #ifdef PIMORONI_TRACKBALL_ROTATE - trackball_data->up = temp.down; - trackball_data->down = temp.up; - #endif - #ifdef PIMORONI_TRACKBALL_INVERT_Y - trackball_data->left = temp.right; - trackball_data->right = temp.left; - #endif - } - return true; + uint8_t pointing_device_handle_buttons(uint8_t buttons, bool pressed, pointing_device_buttons_t button) { + if (pressed) { + buttons |= 1 << (button); + #ifdef HAPTIC_ENABLE //Haptic feedback when trackball button is pressed + DRV_pulse(4); //sharp_click + #endif + } else { + buttons &= ~(1 << (button)); } - #endif + return buttons; + } + + report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) { + if (trackball_is_scrolling) { + mouse_report.h = mouse_report.x; + #ifndef PIMORONI_TRACKBALL_INVERT_X + mouse_report.v = 0.3*mouse_report.y; //Multiplier to lower scrolling sensitivity + #else + mouse_report.v = 0.3*-mouse_report.y; //invert vertical scroll direction + #endif + mouse_report.x = mouse_report.y = 0; + } + return mouse_report; + } #if !defined(MOUSEKEY_ENABLE) //Allows for button clicks on keymap even though mousekeys is not defined. static bool mouse_button_one, trackball_button_one; #endif - void trackball_register_button(bool pressed, enum mouse_buttons button) { //Register mouse keys for trackball. + void trackball_register_button(bool pressed, enum mouse_buttons button) { report_mouse_t currentReport = pointing_device_get_report(); if (pressed) { currentReport.buttons |= button; - /*#ifdef HAPTIC_ENABLE //Haptic feedback when trackball button is pressed - DRV_pulse(4); //sharp_click - #endif*/ } else { currentReport.buttons &= ~button; } pointing_device_set_report(currentReport); } - - void trackball_click(bool pressed, report_mouse_t* mouse) { //Use for mouse buttons. Click+drag is done with keymap and not compatible with trackball click functions. - if (pressed) { //trackball pressed - //tap_code_delay(KC_A,300); //Use delay as simple debounce for key strokes - mouse->buttons |= MOUSE_BTN1; - #ifdef HAPTIC_ENABLE //Haptic feedback when trackball button is pressed - DRV_pulse(4); //sharp_click - #endif - } else { //released - mouse->buttons &= ~MOUSE_BTN1; - } - } #endif void matrix_scan_user(void) { - if (is_alt_tab_active) { //Allows for use of super alt tab. - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } - #ifdef ENCODER_ENABLE - encoder_action_unregister(); - #endif + #ifdef SUPER_ALT_TAB_ENABLE + if (is_alt_tab_active) { //Allows for use of super alt tab. + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } + #endif + #ifdef ENCODER_ENABLE + encoder_action_unregister(); + #endif + if (timer_elapsed32(oled_timer) > 60000) { //60000ms = 60s + pimoroni_trackball_set_rgbw(0,0,0, 0x00); //Turn off Pimoroni trackball LED when computer is idle for 1 minute. Would use suspend_power_down_user but the code is not working. + } } @@ -212,32 +213,34 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif switch (keycode) { //For keycode overrides + #ifdef SUPER_ALT_TAB_ENABLE case ATABF: //Alt tab forwards - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_TAB); - } else { - unregister_code(KC_TAB); - } - return true; + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + return true; case ATABR: //Alt tab reverse - if (record->event.pressed) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - register_code(KC_LSHIFT); - register_code(KC_TAB); - } else { - unregister_code(KC_LSHIFT); - unregister_code(KC_TAB); - } - return true; + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_LSHIFT); + register_code(KC_TAB); + } else { + unregister_code(KC_LSHIFT); + unregister_code(KC_TAB); + } + return true; + #endif case NMR: //Move window to next monitor on right if (record->event.pressed) { @@ -308,15 +311,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef POINTING_DEVICE_ENABLE //Allow modes when trackball is enabled. case PM_SCROLL: if (record->event.pressed) { - if (trackball_is_scrolling()){ //Enable toggling for trackball scrolling - trackball_set_scrolling(false); + if (trackball_is_scrolling || was_scrolling){ //Enable toggling for trackball scrolling + trackball_is_scrolling=false; was_scrolling=false; //Tracks status of scrolling setting. Works with holding of layer key for mouse mode. - }else if(was_scrolling==true){ - trackball_set_scrolling(false); - was_scrolling=false; - } - else{ - trackball_set_scrolling(true); + } else{ + trackball_is_scrolling=true; was_scrolling=true; } run_trackball_cleanup(); @@ -324,38 +323,40 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } case PM_PRECISION: if (record->event.pressed) { - if (trackball_get_precision()==1){ //Enable toggling for trackball precision - trackball_set_precision(1.75); + if (trackball_is_precision){ //Enable toggling for trackball precision + pimoroni_trackball_set_precision(1.75); + trackball_is_precision=false; } else{ - trackball_set_precision(1); + pimoroni_trackball_set_precision(0.8); + trackball_is_precision=true; } run_trackball_cleanup(); break; } - #if !defined(MOUSEKEY_ENABLE) //Allow for using mouse buttons in the keymap when mouse keys is not enabled. - case KC_MS_BTN1: - mouse_button_one = record->event.pressed; - trackball_button_one = record->event.pressed; - //trackball_register_button(mouse_button_one | trackball_button_one, MOUSE_BTN1); - trackball_register_button(mouse_button_one, MOUSE_BTN1); - break; - case KC_MS_BTN2: - trackball_register_button(record->event.pressed, MOUSE_BTN2); - break; - case KC_MS_BTN3: - trackball_register_button(record->event.pressed, MOUSE_BTN3); - break; - #endif + #ifndef MOUSEKEY_ENABLE //Allow for using mouse buttons in the keymap when mouse keys is not enabled. + case KC_MS_BTN1: + mouse_button_one = record->event.pressed; + trackball_register_button(mouse_button_one | trackball_button_one, MOUSE_BTN1); + break; + case KC_MS_BTN2: + trackball_register_button(record->event.pressed, MOUSE_BTN2); + break; + case KC_MS_BTN3: + trackball_register_button(record->event.pressed, MOUSE_BTN3); + break; + #endif #endif #ifdef KEYBOARD_PET // KEYBOARD PET STATUS case KC_LCTL: case KC_RCTL: + #ifndef SNEAK_DISABLE if (record->event.pressed) { //Pet sneaks when control held. isSneaking = true; } else { isSneaking = false; } + #endif #ifdef HAPTIC_ENABLE //Set different patterns for keys on certain layers. In this case it is for gaming feedback. if (record->event.pressed && (get_highest_layer(layer_state)==1)) { DRV_pulse(51); //buzz_20 @@ -392,23 +393,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } -#if defined(OLED_ENABLE) || defined(POINTING_DEVICE_ENABLE) - void suspend_power_down_user(void) { - #ifdef OLED_ENABLE //Turn off OLEDs when computer is sleeping - oled_off(); - #endif - #ifdef POINTING_DEVICE_ENABLE - trackball_set_rgbw(0,0,0, 0x00); //Turn off Pimoroni trackball LED when computer is sleeping - #endif - } -#endif -#ifdef POINTING_DEVICE_ENABLE - void suspend_wakeup_init_user(void) { //turn on Pimoroni LED when awoken - run_trackball_cleanup(); - } -#endif - - #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS) //LED Lock keys status indicators are used since the sofle doesn't have dedicated LEDS for this. //Note 1: These will assign static colour and brightness to the LED range specified. @@ -447,10 +431,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { rgblight_sethsv_noeeprom(50,255,80); #ifdef POINTING_DEVICE_ENABLE if (was_scrolling==true){ //Check if was scrolling when layer was left - trackball_set_scrolling(true); + trackball_is_scrolling=true; run_trackball_cleanup(); } else{ - trackball_set_scrolling(false); + trackball_is_scrolling=false; run_trackball_cleanup(); } #endif @@ -480,7 +464,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif #ifdef POINTING_DEVICE_ENABLE //Set trackball mouse mode when layer 4 is activated if (was_scrolling==true){ //Check if in scrolling mode when layer was activated - trackball_set_scrolling(false); + trackball_is_scrolling=false; run_trackball_cleanup(); } #endif @@ -508,8 +492,19 @@ void keyboard_post_init_user(void) #endif layer_move(0); //Start on layer0 by default to set LED colours. Can remove to save a very small amount of space. #ifdef POINTING_DEVICE_ENABLE - trackball_set_precision(1.75); //Start trackball with lower precision mode - trackball_set_scrolling(true); //Start trackball in scrolling mode + pimoroni_trackball_set_precision(1.75); //Start trackball with lower precision mode run_trackball_cleanup(); #endif } + +#ifdef POINTING_DEVICE_ENABLE + void suspend_power_down_user(void) { //Code does not work, need to confirm why + pimoroni_trackball_set_rgbw(0,0,0, 0x00); //Turn off Pimoroni trackball LED when computer is sleeping + } +#endif + +#ifdef POINTING_DEVICE_ENABLE + void suspend_wakeup_init_user(void) { //turn on Pimoroni LED when awoken + run_trackball_cleanup(); + } +#endif diff --git a/keyboards/solartempest/sofle/keymaps/via/luna.c b/keyboards/solartempest/sofle/keymaps/via/luna.c index a18a7889e8c5..d19eda64cad0 100644 --- a/keyboards/solartempest/sofle/keymaps/via/luna.c +++ b/keyboards/solartempest/sofle/keymaps/via/luna.c @@ -285,7 +285,7 @@ return OLED_ROTATION_270; } - void oled_task_user(void) { + bool oled_task_user(void) { /* KEYBOARD PET VARIABLES START */ current_wpm_read = get_current_wpm(); led_usb_state = host_keyboard_led_state(); @@ -295,7 +295,7 @@ if (is_keyboard_master()) { //Drashna's OLED timeout off code for animations if (timer_elapsed32(oled_timer) > 30000) { oled_off(); - return; + return false; } else { oled_on(); } @@ -306,5 +306,6 @@ } else { print_logo_narrow(); } + return false; } #endif diff --git a/keyboards/solartempest/sofle/keymaps/via/oled.c b/keyboards/solartempest/sofle/keymaps/via/oled.c index 190477ab5cca..2cd5456d78d4 100644 --- a/keyboards/solartempest/sofle/keymaps/via/oled.c +++ b/keyboards/solartempest/sofle/keymaps/via/oled.c @@ -72,11 +72,12 @@ return rotation; } - void oled_task_user(void) { + bool oled_task_user(void) { if (is_keyboard_master()) { print_status_narrow(); } else { render_logo(); } + return false; } #endif \ No newline at end of file diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey.c b/keyboards/solartempest/sofle/keymaps/via/snakey.c index c8dc8bdfb420..3485f880a7f7 100644 --- a/keyboards/solartempest/sofle/keymaps/via/snakey.c +++ b/keyboards/solartempest/sofle/keymaps/via/snakey.c @@ -41,7 +41,9 @@ // status variables int current_wpm_read = 0; - bool isSneaking = false; + #ifndef SNEAK_DISABLE + bool isSneaking = false; + #endif bool isJumping = false; bool showedJump = true; bool isBarking = false; @@ -157,27 +159,29 @@ }; // Sneak - static const char PROGMEM sneak[2][ANIM_SIZE] = { - // 'sneak1', 32x22px - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xcc, 0xf8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, - 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0x7f, 0xf1, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, - 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x01, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, - }, - - // 'sneak2', 32x22px - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xe0, 0xf8, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, - 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0x7f, 0xf0, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, - 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; + #ifndef SNEAK_DISABLE + static const char PROGMEM sneak[2][ANIM_SIZE] = { + // 'sneak1', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xcc, 0xf8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, + 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x7f, 0xf1, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, + 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x01, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, + }, + + // 'sneak2', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xe0, 0xf8, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, + 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x7f, 0xf0, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, + 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + #endif // animation void animate_luna(void) { @@ -201,8 +205,10 @@ // current status if(isBarking) { oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); - } else if(isSneaking) { - oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + #ifndef SNEAK_DISABLE + } else if(isSneaking) { + oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + #endif } else if(current_wpm_read <= MIN_WALK_SPEED) { oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); } else if(current_wpm_read <= MIN_RUN_SPEED) { @@ -295,7 +301,7 @@ return OLED_ROTATION_270; } - void oled_task_user(void) { + bool oled_task_user(void) { /* KEYBOARD PET VARIABLES START */ current_wpm_read = get_current_wpm(); /* KEYBOARD PET VARIABLES END */ @@ -304,7 +310,7 @@ if (is_keyboard_master()) { //Drashna's OLED timeout off code for animations if (timer_elapsed32(oled_timer) > 30000) { oled_off(); - return; + return false; } else { oled_on(); } @@ -315,5 +321,6 @@ } else { print_logo_narrow(); } + return false; } #endif diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c b/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c index ab2069a2fde6..37a533938ab6 100644 --- a/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c +++ b/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c @@ -37,7 +37,9 @@ uint8_t current_frame = 0; // status variables - bool isSneaking = false; + #ifndef SNEAK_DISABLE + bool isSneaking = false; + #endif bool isJumping = false; bool showedJump = true; bool isBarking = false; @@ -109,27 +111,28 @@ }; // Sneak - static const char PROGMEM sneak[2][ANIM_SIZE] = { - // 'sneak1', 32x22px - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xcc, 0xf8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, - 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0x7f, 0xf1, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, - 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x01, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, - }, - - // 'sneak2', 32x22px - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xe0, 0xf8, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, - 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0x7f, 0xf0, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, - 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; + #ifndef SNEAK_DISABLE + static const char PROGMEM sneak[2][ANIM_SIZE] = { + // 'sneak1', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xcc, 0xf8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, + 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x7f, 0xf1, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, + 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x01, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, + }, + // 'sneak2', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xe0, 0xf8, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, + 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x7f, 0xf0, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, + 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + #endif // animation void animate_luna(void) { @@ -153,9 +156,10 @@ // current status if(isBarking) { oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); - - } else if(isSneaking) { - oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + #ifndef SNEAK_DISABLE + } else if(isSneaking) { + oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + #endif } else { oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); } @@ -224,13 +228,13 @@ return OLED_ROTATION_270; } - void oled_task_user(void) { + bool oled_task_user(void) { led_usb_state = host_keyboard_led_state(); - if (is_keyboard_master()) { //Drashna's OLED timeout off code for animations + if (is_keyboard_master()) { //OLED timeout 30000ms = 30s if (timer_elapsed32(oled_timer) > 30000) { oled_off(); - return; + return false; } else { oled_on(); } @@ -243,5 +247,6 @@ print_logo_narrow(); #endif } + return false; } #endif diff --git a/keyboards/solartempest/sofle/rules.mk b/keyboards/solartempest/sofle/rules.mk index 0fa232935525..a72ebd90003e 100644 --- a/keyboards/solartempest/sofle/rules.mk +++ b/keyboards/solartempest/sofle/rules.mk @@ -12,9 +12,9 @@ GRAVE_ESC_ENABLE = no # Save space by not using KC_GESC (+127) SPACE_CADET_ENABLE = no # Save space by not using space cadet left/right shift (+350) LTO_ENABLE = yes # Save space by link time optimization -EXTRAKEY_ENABLE = yes # Audio control and System control (+450) RGBLIGHT_ENABLE = yes # RGB lighting (+3826) ENCODER_ENABLE = yes # Rotary encoders (+1112) +EXTRAKEY_ENABLE = yes # Audio control and System control (+450) MOUSEKEY_ENABLE = no # Mouse keys (+1482). Not required for trackball usage. NKRO_ENABLE = no # 6KRO by default. NKRO works if enabled (+328) COMBO_ENABLE = no # Tap combo chording (+952) @@ -25,7 +25,7 @@ OLED_DRIVER = SSD1306 # Specify OLED driver WPM_ENABLE = no # WPM counter for typing-speed-reactive keyboard pets (+1298) POINTING_DEVICE_ENABLE = yes # Enable Pimoroni Trackball on master (+2304) -QUANTUM_LIB_SRC += i2c_master.c -SRC += drivers/sensors/pimoroni_trackball.c +POINTING_DEVICE_DRIVER = pimoroni_trackball -HAPTIC_ENABLE += DRV2605L # Enable Pimoroni Haptic Bzzz LRA (+1192) +HAPTIC_ENABLE = yes # Enable Pimoroni Haptic Bzzz LRA (+1192) +HAPTIC_DRIVER += DRV2605L diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index 136dfb3bc2c3..53e65b8de97e 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,14 +1,14 @@ -:100000000C9449060C9490060C9490060C94DA33E8 -:100010000C9490060C9490060C9490060C94900608 -:100020000C9490060C9490060C94FB1A0C94B71A3E -:100030000C943A280C9490060C9490060C9490061C -:100040000C9490060C9490060C9490060C949006D8 -:100050000C9490060C94D21B0C9490060C94900671 -:100060000C9490060C9490060C9490060C949006B8 -:100070000C9490060C9490060C9490060C949006A8 -:100080000C9490060C9490060C9490060C94900698 -:100090000C9490060C9490060C9490060C94900688 -:1000A0000C9490060C9490060C94900637032B64E5 +:100000000C94E9050C9430060C9430060C945E3385 +:100010000C9430060C9430060C9430060C94300688 +:100020000C9430060C9430060C941B240C94D723AB +:100030000C9414290C9430060C9430060C94300661 +:100040000C9430060C9430060C9430060C94300658 +:100050000C9430060C94F4240C9430060C94300666 +:100060000C9430060C9430060C9430060C94300638 +:100070000C9430060C9430060C9430060C94300628 +:100080000C9430060C9430060C9430060C94300618 +:100090000C9430060C9430060C9430060C94300608 +:1000A0000C9430060C9430060C94300637032B6405 :1000B000AAFF000000001C032B64AAFF0000000040 :1000C00004032B64AAFF000000000000D7FF78FFA4 :1000D00000000000000080FF64FF0000000000003E @@ -54,1740 +54,1726 @@ :10035000010102060C040000000000000000000083 :1003600000387C60E0E0F0F0F8F9FFFFFFFFFF7E6F :100370001C00000000000000000000000000000061 -:10038000000000000000000000000000000000006D -:100390000000000000000000000000000000CCF899 -:1003A00070000000000000C0F0F8F87CFCEEE6FCF5 -:1003B000FC7878B00000000000000000003F7FF1F2 -:1003C000F8F87C7CF8F0F0F1E7EFEFFEFEFEFCFCC5 -:1003D000F8F06000010306020000000000000000C9 -:1003E000000000000000000000000000000000000D -:1003F0000000000000000000000000000080E0F8A5 -:100400001C000000000000C0F0F8F87CFCEEE6FCE8 -:10041000FC7878300000000000000000003F7FF012 -:10042000F8F87C7CF8F0F0F1E7EFEFFEFEFEFCFC64 -:10043000F8F0600000000000000000000000000074 -:1004400080C0C0E0E03070E0E0C0C080000000008C -:100450000000000000000000000000000000001F7D -:100460007FFFFFE7E7EFEFCFCB83830100000000C2 -:1004700000000000000000000000000000061C3822 -:1004800078F1E3E3E7F7F7FFFFFFFF7F3E000000AF -:10049000000000000000000000000000000000005C -:1004A0000000000000000000000000000080C0E02C -:1004B000E060E0C0C080800000000000000000009C -:1004C0000000000020F8FEFFFFFF9F0F0E1F1F3FE0 -:1004D0003F7EE683030F43439088080000031E3CE1 -:1004E00078F0E0E0F0F0FBFFFFFF7F7F38000000D6 -:1004F0000000000000000000000000000004F6B84A -:10050000F8D8F0E0C000000080C0E0E0F0F0F0F0CB -:10051000E0E0C080000000000000000080C0E1F3C7 -:10052000FB7F1F0F0000F0FFFF3F03010000008072 -:10053000C1F3FF7F1F000080C0E0301E3F3F7FF906 -:10054000F0F070783C3F1F0F03000000001C3F7F5D -:100550007FFBF1F0783C1E0F030000000101010158 -:10056000010101010102020202020202020203036E -:10057000030303030303040404040404040505053E -:100580000505060606060607070707070808080800 -:10059000090909090A0A0A0B0B0B0C0C0C0D0D0DAD -:1005A0000E0E0E0F0F0F1010111111121213131443 -:1005B00014151516161717181819191A1A1B1B1CBB -:1005C0001D1D1E1E1F202021222223242425262615 -:1005D000272829292A2B2C2D2D2E2F30313232334A -:1005E0003435363738393A3B3C3D3E3F4041424353 -:1005F0004445464748494A4C4D4E4F505153545537 -:100600005658595A5B5D5E5F616264656668696BE6 -:100610006C6D6F7072737577787A7B7D7E80828364 -:100620008587888A8C8E8F91939596989A9C9EA0A8 -:10063000A2A3A5A7A9ABADAFB1B3B5B7BABCBEC0B5 -:10064000C2C4C6C9CBCDCFD1D4D6D8DBDDDFE2E47E -:10065000E7E9EBEEF0F3F5F8FAFDFFFFAA7F55406E -:100660001C1004010D190A24232221201F1E1D1B0A -:100670001A18171615141312110F0E0C0B09080770 -:1006800006050302002D3945483C303F2526272822 -:10069000292A2B2C2E2F31323334353637383A3B3A -:1006A0003D3E404142434446474907087F08070012 -:1006B0003E5B4F5B3E003E6B4F6B3E001C3E7C3E04 -:1006C0001C00183C7E3C18001C577D571C001C5E0B -:1006D0007F5E1C0000183C180000FFE7C3E7FF0026 -:1006E000001824180000FFE7DBE7FF0030483A0657 -:1006F0000E00262979292600407F05050700407F46 -:1007000005253F005A3CE73C5A007F3E1C1C080070 -:10071000081C1C3E7F0014227F2214005F5F005FD4 -:100720005F0006097F017F00006689956A006060AE -:100730006060600094A2FFA2940008047E04080098 -:1007400010207E20100008082A1C0800081C2A0817 -:1007500008001E10101010000C1E0C1E0C0030386B -:100760003E383000060E3E0E06000000000000007D -:1007700000005F000000000700070000147F147FE6 -:100780001400242A7F2A12002313086462003649C9 -:1007900056205000000807030000001C2241000002 -:1007A0000041221C00002A1C7F1C2A0008083E0869 -:1007B00008000080703000000808080808000000E9 -:1007C000606000002010080402003E5149453E00D0 -:1007D00000427F4000007249494946002141494D8D -:1007E00033001814127F10002745454539003C4A54 -:1007F000494931004121110907003649494936006C -:10080000464949291E000000140000000040340041 -:1008100000000008142241001414141414000041B4 -:10082000221408000201590906003E415D594E009C -:100830007C1211127C007F49494936003E414141FA -:1008400022007F4141413E007F49494941007F09E3 -:10085000090901003E41415173007F0808087F00EB -:1008600000417F4100002040413F01007F081422E9 -:1008700041007F40404040007F021C027F007F0417 -:1008800008107F003E4141413E007F0909090600F2 -:100890003E4151215E007F091929460026494949F8 -:1008A000320003017F0103003F4040403F001F2012 -:1008B00040201F003F4038403F006314081463008D -:1008C0000304780403006159494D4300007F41410E -:1008D0004100020408102000004141417F00040251 -:1008E00001020400404040404000000307080000AF -:1008F0002054547840007F2844443800384444440D -:100900002800384444287F00385454541800000804 -:100910007E09020018A4A49C78007F0804047800D3 -:1009200000447D4000002040403D00007F102844EE -:10093000000000417F4000007C04780478007C08BF -:1009400004047800384444443800FC182424180077 -:1009500018242418FC007C0804040800485454544B -:10096000240004043F4424003C4040207C001C2020 -:1009700040201C003C4030403C00442810284400EB -:100980004C9090907C004464544C440000083641E4 -:10099000000000007700000000413608000002015E -:1009A000020402003C2623263C0000000000000058 -:1009B000404040F0F8F8FF38FFF8F83FF8F8FF380B -:1009C000FFF8F8F040404000000000000080C0C088 -:1009D000C0800000C0C08000000080C0C000C0C057 -:1009E000000080C0C00000000000C0C0C0C0C00047 -:1009F000C0C0000000000000000000000000000077 -:100A000000000000000000000000000000000000E6 -:100A100000000000000000000000000000000000D6 -:100A2000000000000000000000C0F0F8FC3E1E06C0 -:100A3000010000007F4141417F007F4141417F0033 -:100A40000080C0E07E5B4F5BFEC00000C000DCD7D2 -:100A5000DEDEDED7DC00C000000000000000000089 +:1003800080C0C0E0E03070E0E0C0C080000000004D +:100390000000000000000000000000000000001F3E +:1003A0007FFFFFE7E7EFEFCFCB8383010000000083 +:1003B00000000000000000000000000000061C38E3 +:1003C00078F1E3E3E7F7F7FFFFFFFF7F3E00000070 +:1003D000000000000000000000000000000000001D +:1003E0000000000000000000000000000080C0E0ED +:1003F000E060E0C0C080800000000000000000005D +:100400000000000020F8FEFFFFFF9F0F0E1F1F3FA0 +:100410003F7EE683030F43439088080000031E3CA1 +:1004200078F0E0E0F0F0FBFFFFFF7F7F3800000096 +:100430000000000000000000000000000004F6B80A +:10044000F8D8F0E0C000000080C0E0E0F0F0F0F08C +:10045000E0E0C080000000000000000080C0E1F388 +:10046000FB7F1F0F0000F0FFFF3F03010000008033 +:10047000C1F3FF7F1F000080C0E0301E3F3F7FF9C7 +:10048000F0F070783C3F1F0F03000000001C3F7F1E +:100490007FFBF1F0783C1E0F030000000101010119 +:1004A000010101010102020202020202020203032F +:1004B00003030303030304040404040404050505FF +:1004C00005050606060606070707070708080808C1 +:1004D000090909090A0A0A0B0B0B0C0C0C0D0D0D6E +:1004E0000E0E0E0F0F0F1010111111121213131404 +:1004F00014151516161717181819191A1A1B1B1C7C +:100500001D1D1E1E1F2020212222232424252626D5 +:10051000272829292A2B2C2D2D2E2F30313232330A +:100520003435363738393A3B3C3D3E3F4041424313 +:100530004445464748494A4C4D4E4F5051535455F7 +:100540005658595A5B5D5E5F616264656668696BA7 +:100550006C6D6F7072737577787A7B7D7E80828325 +:100560008587888A8C8E8F91939596989A9C9EA069 +:10057000A2A3A5A7A9ABADAFB1B3B5B7BABCBEC076 +:10058000C2C4C6C9CBCDCFD1D4D6D8DBDDDFE2E43F +:10059000E7E9EBEEF0F3F5F8FAFDFFFFAA7F55402F +:1005A0001C1004010D190A24232221201F1E1D1BCB +:1005B0001A18171615141312110F0E0C0B09080731 +:1005C00006050302002D3945483C303F25262728E3 +:1005D000292A2B2C2E2F31323334353637383A3BFB +:1005E0003D3E404142434446474907087F080700D3 +:1005F0003E5B4F5B3E003E6B4F6B3E001C3E7C3EC5 +:100600001C00183C7E3C18001C577D571C001C5ECB +:100610007F5E1C0000183C180000FFE7C3E7FF00E6 +:10062000001824180000FFE7DBE7FF0030483A0617 +:100630000E00262979292600407F05050700407F06 +:1006400005253F005A3CE73C5A007F3E1C1C080031 +:10065000081C1C3E7F0014227F2214005F5F005F95 +:100660005F0006097F017F00006689956A0060606F +:100670006060600094A2FFA2940008047E04080059 +:1006800010207E20100008082A1C0800081C2A08D8 +:1006900008001E10101010000C1E0C1E0C0030382C +:1006A0003E383000060E3E0E06000000000000003E +:1006B00000005F000000000700070000147F147FA7 +:1006C0001400242A7F2A120023130864620036498A +:1006D00056205000000807030000001C22410000C3 +:1006E0000041221C00002A1C7F1C2A0008083E082A +:1006F00008000080703000000808080808000000AA +:10070000606000002010080402003E5149453E0090 +:1007100000427F4000007249494946002141494D4D +:1007200033001814127F10002745454539003C4A14 +:10073000494931004121110907003649494936002C +:10074000464949291E000000140000000040340002 +:100750000000000814224100141414141400004175 +:10076000221408000201590906003E415D594E005D +:100770007C1211127C007F49494936003E414141BB +:1007800022007F4141413E007F49494941007F09A4 +:10079000090901003E41415173007F0808087F00AC +:1007A00000417F4100002040413F01007F081422AA +:1007B00041007F40404040007F021C027F007F04D8 +:1007C00008107F003E4141413E007F0909090600B3 +:1007D0003E4151215E007F091929460026494949B9 +:1007E000320003017F0103003F4040403F001F20D3 +:1007F00040201F003F4038403F006314081463004E +:100800000304780403006159494D4300007F4141CE +:100810004100020408102000004141417F00040211 +:10082000010204004040404040000003070800006F +:100830002054547840007F284444380038444444CD +:100840002800384444287F003854545418000008C5 +:100850007E09020018A4A49C78007F080404780094 +:1008600000447D4000002040403D00007F102844AF +:10087000000000417F4000007C04780478007C0880 +:1008800004047800384444443800FC182424180038 +:1008900018242418FC007C0804040800485454540C +:1008A000240004043F4424003C4040207C001C20E1 +:1008B00040201C003C4030403C00442810284400AC +:1008C0004C9090907C004464544C440000083641A5 +:1008D000000000007700000000413608000002011F +:1008E000020402003C2623263C0000000000000019 +:1008F000404040F0F8F8FF38FFF8F83FF8F8FF38CC +:10090000FFF8F8F040404000000000000080C0C048 +:10091000C0800000C0C08000000080C0C000C0C017 +:10092000000080C0C00000000000C0C0C0C0C00007 +:10093000C0C0000000000000000000000000000037 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 +:10096000000000000000000000C0F0F8FC3E1E0681 +:10097000010000007F4141417F007F4141417F00F4 +:100980000080C0E07E5B4F5BFEC00000C000DCD793 +:10099000DEDEDED7DC00C00000000000000000004A +:1009A0000000000000000000000000000000000047 +:1009B000494949FFFFFFFFE0DFBFBF00BFBFDFE0E6 +:1009C000FFFFFFFF49494900000000001F3F606032 +:1009D000E0BF1F007F7F071E381E077F7F007F7FDD +:1009E0000E1F3B716000000000007F7F0C0C0C00AC +:1009F0007E7E007F7E0303007F7E03037E7E0303F3 +:100A00007F7E000F3E703C063C703E0F00327B49FB +:100A1000493F7E007F7E0303001E3F69696F260009 +:100A2000000000000000000000030F1F3F3C787032 +:100A3000600000007F4141417F007F4141417F00D4 +:100A4000307B7F7830202030787F3B0003000F7FA1 +:100A50000F0F0F7F0F0003000000000000000000D8 :100A60000000000000000000000000000000000086 -:100A7000494949FFFFFFFFE0DFBFBF00BFBFDFE025 -:100A8000FFFFFFFF49494900000000001F3F606071 -:100A9000E0BF1F007F7F071E381E077F7F007F7F1C -:100AA0000E1F3B716000000000007F7F0C0C0C00EB -:100AB0007E7E007F7E0303007F7E03037E7E030332 -:100AC0007F7E000F3E703C063C703E0F00327B493B -:100AD000493F7E007F7E0303001E3F69696F260049 -:100AE000000000000000000000030F1F3F3C787072 -:100AF000600000007F4141417F007F4141417F0014 -:100B0000307B7F7830202030787F3B0003000F7FE0 -:100B10000F0F0F7F0F000300000000000000000017 -:100B200000000000000000000000000000000000C5 -:100B3000010101070F0F7F0F7F0F0F7E0F0F7F0F38 -:100B40007F0F0F07010101000000000000000000FE -:100B50000001010000000000000000000000000093 -:100B60000000000000000000000000000000000085 -:100B70000000000000000000000000000000000075 -:100B80000000000000000000000000000000000065 -:100B90000000000000000000000000000000000055 -:100BA0000000000000000000000000000000000045 -:100BB0000000000000000000000000000000000035 -:100BC0000000000000000000000000000000000025 -:100BD0000000000000000000000000000000000015 -:100BE0000000000000000000000000AF00AE09029D -:100BF0005B00030100A0FA090400000103010100E9 -:100C00000921110100012240000705810308000AA3 -:100C10000904010002030000000921110100012262 -:100C200022000705820320000107050303200001BD -:100C30000904020001030000000921110100012242 -:100C40007B000705840320000A1201000200000057 -:100C50000832FC87120200010200011E0353006FDC -:100C6000006C00610072006900750073005F005342 -:100C7000006F0066006C006500000010034B00650B -:100C8000007900680069007600650000000403092F -:100C9000040011241FBECFEFDAE0DEBFCDBF04B6E3 -:100CA00003FE27C08091800690918106A091820664 -:100CB000B09183068730904BA740B04BD1F410928F -:100CC000800610928106109282061092830614BE4E -:100CD00084B7877F84BF0FB6F894A8958091600091 -:100CE000886180936000109260000FBEE0E0F8E33E -:100CF000099512E0A0E0B1E0ECECFEE602C0059040 -:100D00000D92AE32B107D9F726E0AEE2B2E001C0F3 -:100D10001D92A038B207E1F70E9461280C94203799 -:100D20000C940000CF93DF9340917E0650917F0694 -:100D30004E5754409A01205A3F4F21303240C0F064 -:100D400020E032E0241B350B60917C0470917D041F -:100D5000FC01CA01240F351FC1E0D0E082179307C0 -:100D600050F070937D0460937C04DF91CF910895DF -:100D700020E630E0E9CF4491DC01A258BB4F5C9102 -:100D8000451781F04C93AC01A5E056954795AA957F -:100D9000E1F7DE0102C0AA0FBB1F4A95E2F7AD01E1 -:100DA0006A2B752B01963196D9CFE8EDF0E0808162 -:100DB0008E7F80831092E2001092DA001092E100A0 -:100DC000A0EEB0E08C9181608C9380818F778083DE -:100DD00019BCA7EDB0E08C918E7F8C9380818F7EC3 -:100DE000808310925E0408952091E4003091E50024 -:100DF00095E6A9012091EC00822F817020FF06C0AA -:100E00008091E80080FF06C080E008952091E8000E -:100E100022FD1AC080916C04882389F0853089F006 -:100E20008091EB0085FD0FC02091E4003091E5003A -:100E300042175307F9F29150E1F684E0089582E0F9 -:100E4000089583E0089581E00895EF92FF920F9353 -:100E50001F93CF937C018B010E94F406C82F811150 -:100E600017C08091E80085FD0BC08091E8008E7767 -:100E70008093E8000E94F406882399F3C82F08C0E5 -:100E8000F70181917F018093F1000150110949F729 -:100E90008C2FCF911F910F91FF90EF90089580912B -:100EA0006E0487FF13C08091E80082FF06C0809126 -:100EB000E8008B778093E80004C080916C04811176 -:100EC000F2CF089580916C048823D9F38091E800D3 -:100ED00080FFF8CF8091E8008E77ECCF982F909329 -:100EE000E900242F762F50E0891731F07091EC0043 -:100EF0002091ED005091F00021FD07C09F5F9730D9 -:100F000071F78093E90081E008953091EB003E7F16 -:100F10003093EB003091ED003D7F3093ED00309148 -:100F2000EB0031603093EB007093EC002093ED0008 -:100F30005093F0002091EE0027FDE0CF80E008956F -:100F4000CF92DF92EF92FF920F931F93CF93DF9395 -:100F5000C8EDD0E088818F7E8883E7EDF0E0808166 -:100F60008160808384E082BF81E080935E04888119 -:100F70008E7F888302EE10E0F80110821092DA0072 -:100F800081EEC82ED12CF601108288818F7788835C -:100F900088818068888388818F7D888319BC1092BE -:100FA0006C0410926D0410926B0410926A0490EE1F -:100FB000E92EF12CF70180818B7F8083888181600D -:100FC000888342E060E080E00E946E07F601808145 -:100FD0008E7F8083F801808181608083808188603A -:100FE0008083F70180818E7F808388818061888300 -:100FF000DF91CF911F910F91FF90EF90DF90CF90F5 -:101000000895FC01809174049091750486179707E8 -:10101000A0F06115710529F49091E8009E779093F6 -:10102000E80090E06115710551F4911108C08091BC -:10103000E80082FF34C080E00895BC01F2CF8091C7 -:101040006C048823C1F18530C1F18091E80083FDF3 -:1010500030C08091E80082FDEACF8091E80080FFF7 -:10106000E1CF8091F3002091F200382F61157105D6 -:1010700019F02830310558F091E02830310509F099 -:1010800090E02091E8002E772093E800CBCF81916B -:101090008093F100615071092F5F3F4FE7CF80913E -:1010A0006C04882341F0853041F08091E80083FF93 -:1010B000BECF81E0089582E0089583E00895809195 -:1010C000610408952FB7F894609157047091580403 -:1010D0008091590490915A042FBF0895209154048F -:1010E000309155042817390771F090935504809377 -:1010F0005404E0915204F0915304309721F000849D -:10110000F185E02D09940895209150043091510407 -:101110002817390771F09093510480935004E0919F -:101120005204F0915304309721F00680F781E02DAE -:10113000099408952091430436E0839FC00111244F -:10114000629F800D911D1124811522E0920714F0F9 -:1011500090E080E082589B4F90937F0680937E06BC -:101160000895883E9105C8F4803E910548F48B327D -:10117000910540F48832910518F404974A9758F481 -:1011800080E008958C32910530F089339105C0F3E9 -:1011900084369105A9F381E011C0811522E59207FB -:1011A00070F48115E1E59E0758F790548115904140 -:1011B00090F7FB019581907F81E011F308958115EF -:1011C00028E5920740F38115E9E59E0728F090563F -:1011D0008115904270F3DFCFFB019581907F81E014 -:1011E000903271F6EBCFFC01680F791F8FEF91E31E -:1011F0002191822728E030E087FF09C0880F8927E6 -:1012000021503109C9F7E617F70791F70895880FBC -:10121000F7CFFA01811101C0FB0109948091770495 -:10122000982F9E7F61F48170826080937704809113 -:101230007A04813A18F080EA80937A04089588311C -:10124000B0F381708661F1CFAF92BF92DF92EF92DF -:10125000FF920F931F93CF93DF93082F162FE9016F -:10126000E42FF0E0E55AFA4F611110C0E4915E2FCF -:101270004E2F4983E8835A83DF91CF911F910F91BD -:10128000FF90EF90DF90BF90AF900895E62EF12C85 -:101290004491D42EE42FF0E026E0829FC001112477 -:1012A0002FEF30E0B9010E945435802F90E0880F75 -:1012B000991F55E5569FD001579FB00D11248A1BE9 -:1012C0009B0B982F990F890F5901AE18BF08AE9E3E -:1012D000D001AF9EB00DBE9EB00D11245B2F189FA4 -:1012E00080011124012F11275901A01AB10AAE9EC5 -:1012F0008001AF9E100DBE9E100D11245901A81A39 -:10130000B108AE9CC001AF9C900DBE9C900D112405 -:10131000892F9927281B390B2E9FC0012F9F900DD5 -:101320003E9F900D1124E92F62307105A1F050F419 -:101330006115710509F49DCF6130710581F0EB2FC6 -:10134000512F97CF6430710569F080F066307105D8 -:1013500009F48FCFF4CFE42F4B2F592F8ACFE42FEE -:10136000412F87CFEB2F542F492F83CF4B2F5D2D4C -:10137000E12F7FCF80E0089578940895F894E82FC6 -:10138000E295EF70F0E031A1282F2F7081E090E01E -:1013900001C0880F2A95EAF7982F9095932391A37F -:1013A00092A1892B82A30C94BC099091D60292FF42 -:1013B00006C0282F28712830F9F4877F846093FFB6 -:1013C00006C0282F28712831F1F4877E846120918E -:1013D000D70220FF06C0382F38713830D9F4877F04 -:1013E000816021FF06C0282F28712831D1F4877E23 -:1013F000816194FD877E0895282F24712430F9F6A9 -:101400008B7F8860DCCF282F2471243101F78B7EFD -:101410008861DDCF382F3171313019F78E7F8860C8 -:10142000E0CF282F2171213121F78E7E8861E1CF15 -:10143000CF93DF93EC018238910581F1B0F58133D0 -:10144000910509F491C020F58932910509F485C010 -:101450008A9709F490C0C11521E5D20708F0AAC007 -:10146000C11530E5D30708F0F2C0CF3BD10508F035 -:1014700089C0C83AD10508F0DFC0C53AD10508F0E7 -:10148000D3C0C430D105F8F4C130D105E1F040C07B -:101490008533910509F45AC0C997E9F68091D602BF -:1014A000837089F0C0EED0E00EC0833E910599F1C3 -:1014B00070F4803E910501F1823E910561F68091C4 -:1014C000D60282FD21C0CE01DF91CF910895863EE4 -:1014D000910561F1873E910571F1843E910509F016 -:1014E000BACF8091D70281FFEECF8091D602C7EEAE -:1014F000D0E084FD0DC0E7CF8091D60280FDF7C01B -:101500009091D70290FFDFCFC3EED0E084FFDBCF16 -:10151000D0E0C0E0D8CF8091D60282FDEBC09091A0 -:10152000D70290FDBFCF84FFCECFF2CF8091D602FD -:1015300083FDDDCFC8CF8091D60283FDDEC09091C0 -:10154000D70291FFF0CFC4EED0E0BDCF8091D6029C -:1015500085FFB9CFC9E2D0E0B6CF8091D60285FF32 -:10156000B2CFC5E3D0E0AFCF8091D60286FFABCF3C -:10157000CAE2D0E0A8CF8091D60286FFA4CFC1E313 -:10158000D0E0A1CFC11540E2D40760F4C11581E0DD -:10159000D80708F098CFCE01815E9109079708F42B -:1015A00092CFB6CFC11590E4D90708F4B1CFDF7060 -:1015B000D06A89CFC11524E5D20778F4C11533E587 -:1015C000D30708F072C0C11542E5D40708F05CC02B -:1015D000DC2FCC27C16FD06A76CFC1158AE5D8073A -:1015E00078F4C11599E5D90708F073C0C11528E54D -:1015F000D20708F48DCFDC2FCC27C06FD06A63CF21 -:10160000CE0190568115904208F082CF8D2F8F71B8 -:101610000E94D50990E0982F882788279F719C0108 -:101620002C2BE901D0624FCFC55AD0E0C154DE4F18 -:10163000C881D0E0D06447CFC85AD0E0CC0FDD1FBE -:10164000CE53DE4F0990D881C02DD4643CCFCE015B -:1016500064E0969587956A95E1F783702C2F26951F -:101660002695237040E2249F90011124382B8C2F63 -:101670008370C1E0D0E002C0CC0FDD1F8A95E2F795 -:10168000C22BD32BDC681FCFCE018370992721E0BA -:1016900030E002C0220F331F8A95E2F7C695C69547 -:1016A00080E2C89FE0011124EBCFCE01837099271F -:1016B00021E030E002C0220F331F8A95E2F7C69581 -:1016C000C69590E2C99FE0011124C22BD32BDA68A2 -:1016D000FACE8C2F8F700E94D50934E0D695C7952D -:1016E0003A95E1F7CF709C2FEC01D069ECCEC9E3BD -:1016F000D0E0E9CEC2EED0E0E6CEC6EED0E0E3CE5A -:101700000C94620880915F0490919102892B9091D2 -:101710009002892B80933002E0915204F09153049F -:10172000309731F00280F381E02D80E392E009945C -:10173000089580918F0290915E02981301C00895E0 -:101740008F5F8770FACF27E0929F800D1124982F2A -:10175000977086958695869523E0829FF0011124E7 -:10176000E35CFD4F50E040E080E0219130E0092E45 -:1017700002C0369527950A94E2F721703327042E8C -:1017800001C0220F0A94EAF7822B4F5F5F4F43306C -:10179000510559F7089527E0929F800D1124982F45 -:1017A000977041E001C0440F9A95EAF786958695B7 -:1017B000869593E0899FF0011124E35CFD4F90E052 -:1017C00080E070E05191DF0111979B01082E02C06B -:1017D000369527950A94E2F7217021952527242331 -:1017E00025272C9301968330910561F7089590E0A9 -:1017F00080E00E94840890E080E00E946E081092D1 -:101800009102109290020C94820B809392020C949D -:10181000F70B882341F0809590915F048923809392 -:101820005F040C94820B0895882339F090915F0433 -:10183000982B90935F040C94820B08958823B1F148 -:101840009CEF980F913A70F4E2E3F2E091918913E2 -:1018500003C0DF0111971C9242E0E833F407B1F7AF -:101860000C94820B90E2980F983088F4877021E0F6 -:1018700030E0A90102C0440F551F8A95E2F7CA0162 -:10188000809590915F04892380935F04E9CF9BE565 -:10189000980F933020F490E080E00C948408885AEC -:1018A000873120F490E080E00C946E0808950F9347 -:1018B0001F93CF93C82F882309F469C08CEF8C0F36 -:1018C000813AB0F502E312E088E392E0F801219159 -:1018D000C21701F122E0E833F207C9F7EFEF80E029 -:1018E000D8019D918D01C91781F0EF3F19F4911135 -:1018F00001C0E82F8F5F863099F7EF3F31F00E2E51 -:10190000000CFF0BE05DFD4FC283CF911F910F9143 -:101910000C94820BE2E3F2E02191C21303C0DF01D9 -:1019200011971C928E179F07B9F70E94820BD6CF92 -:1019300080E28C0F883068F4C77021E030E001C08D -:10194000220FCA95EAF780915F04822B80935F048F -:10195000DCCFEBE5EC0FE33050F4F0E0E154FE4F68 -:10196000808190E0CF911F910F910C948408C85A08 -:10197000C73168F4EC2FF0E0EE0FFF1FEE53FE4F7F -:1019800080819181CF911F910F910C946E08CF911E -:101990001F910F910895982F92959F7011F0892FA4 -:1019A00094E0282F2695269511F09E5F822F86952C -:1019B00009F09F5F892F0895CF93DF93CDB7DEB7EE -:1019C00062970FB6F894DEBF0FBECDBF96E0E4E29B -:1019D000F3E0DE01179601900D929A95E1F796E0FB -:1019E000FE013796DE011D9601900D929A95E1F762 -:1019F00098858823E9F0962B9E8786E0FE013D9628 -:101A0000DE01119601900D928A95E1F786E0FE01C4 -:101A10003196A4E2B3E001900D928A95E1F76296C7 -:101A20000FB6F894DEBF0FBECDBFDF91CF91089502 -:101A300060959623E1CFDC01FB01808191818038A4 -:101A400091054CF08FE78C93808191818F5791099C -:101A500091838083089581382FEF92073CF481E8C9 -:101A60008C938081918181589F4FF2CF8C9311820A -:101A700010820895681708F5861B682F21E0469F9D -:101A8000A0011124649FF001659FF00D1124409185 -:101A9000590150915A01E49FC001E59F900DF49FB8 -:101AA000900D1124880F892F881F990B919522235F -:101AB00019F09195819591090895681B20E0DFCF79 -:101AC0000F931F93CF93DF9300D000D0CDB7DEB735 -:101AD00089836A834B831C8204E610E024E030E0B3 -:101AE000AE014F5F5F4F60E084E10E94B2320F9021 -:101AF0000F900F900F90DF91CF911F910F9108954C -:101B000080913203882329F047E669E98BE20C943F -:101B1000600D6091590170915A0190E080E00E943F -:101B2000013620E030E040E05CE30E94623620E0D5 -:101B300030E040E85FE30E94FC35882321F047EC69 -:101B40006BE180E0E4CF41E265EA89EDE0CFCF923E -:101B5000DF92EF92FF920F931F93CF93DF936C016D -:101B60007B0164E670E088E70E949A31EC0197FD02 -:101B700012C010E000E0F601E00FF11F849164E66E -:101B800070E00E941432EC01892B29F40F5F1F4F83 -:101B90000E151F0581F70E942E33CE01DF91CF91E4 -:101BA0001F910F91FF90EF90DF90CF90089580915B -:101BB0004E0490914F04911103C091E0892708953C -:101BC000882369F062E070E08CEE9BE00E94A70D34 -:101BD000892B19F080914E04089510924E04809143 -:101BE0004E04EBCFCF93C0914E0480914F048823D5 -:101BF000D1F00E9462086058774C8E4F9F4F6093DF -:101C00004A0470934B0480934C0490934D04C1118B -:101C100008C062E070E08AEE9BE00E94A70D892B6D -:101C200029F0C0914E048C2FCF91089581E08093CC -:101C30004E04F7CF90916C04943029F580935B04A7 -:101C400070935D0460935C049093E9008FEF909132 -:101C5000E800815095FD06C095ED9A95F1F70000DA -:101C60008111F5CF8091E80085FF0DC050E040E084 -:101C700063E070E08BE594E00E9425078091E80026 -:101C80008E778093E8000895BC0184E00C941A0ECE -:101C9000BC0183E00C941A0E9C0184E08093E9005F -:101CA0009FEF8091E800915085FD06C085ED8A95F3 -:101CB000F1F700009111F5CF8091E80085FF0CC08D -:101CC00050E040E066E070E0C9010E942507809185 -:101CD000E8008E778093E8000895CF93DF93EC01BE -:101CE00081E08093E9008FEF9091E800815095FDAD -:101CF00006C095ED9A95F1F700008111F5CF80911E -:101D0000E80085FF14C050E040E068E070E0CE01DC -:101D10000E9425078091E8008E778093E80088E094 -:101D2000FE01A2E6B4E001900D928A95E1F7DF9101 -:101D3000CF9108959F92AF92BF92CF92DF92EF9290 -:101D4000FF920F931F93CF93DF937C015B016A0196 -:101D50008091D10201E010E08A3010F40AE010E036 -:101D6000C1E0D0E0F894B501C701F6010995982EBD -:101D70000E94BC09911004C021960C171D076CF439 -:101D8000892DDF91CF911F910F91FF90EF90DF9000 -:101D9000CF90BF90AF909F900895CC9F9001CD9F22 -:101DA000300D300D112490E080E045E34A95F1F7C5 -:101DB0000000019682179307C1F7D4CF8091A1024A -:101DC000811110C08091D80080618093D8008AE191 -:101DD0008A95F1F700C08091D90080FF0AC081E0A8 -:101DE0008093A10281E09091A102913009F080E0FE -:101DF000089582E08093A1020E94D50610926C049F -:101E0000F1CF0E94DE0E882351F0E0915204F09150 -:101E10005304309721F00190F081E02D099480E087 -:101E200008951F93CF93DF93182FEB010E94570C57 -:101E30008FE99FE00197F1F700C000002197C1F7FB -:101E4000812FDF91CF911F910C941E0C4F925F92C6 -:101E50006F927F928F929F92AF92BF92CF92DF92BA -:101E6000EF92FF920F931F93CF93DF93CDB7DEB71F -:101E7000CE5DD1090FB6F894DEBF0FBECDBF509036 -:101E800070019091770490FF5DC080905D03909009 -:101E90005E038114910409F068C0E0E6F6E09E015B -:101EA0002F5F3F4FBE0161527F4FC901A4914A2F5E -:101EB00050E0DA01AA0FBB1FA40FB51FA15ABC4FF7 -:101EC000CD90DD90EC90D901CD92DD92ED929D0107 -:101ED00031966A177B0751F720916F0143E0249FE9 -:101EE000800D911D1124539A2BB1277F3BB138608F -:101EF0005FB7F894BC01549E600D711D11248617C4 -:101F0000970709F08EC05FBF8FE594E00197F1F766 -:101F100000C00000C252DF4F0FB6F894DEBF0FBE04 -:101F2000CDBFDF91CF911F910F91FF90EF90DF9088 -:101F3000CF90BF90AF909F908F907F906F905F9069 -:101F40004F900895809171012091720133E0839F39 -:101F5000F0011124E15AFC4F821708F096CF11824C -:101F6000108212828F5F3396F7CF90FF96CFD12CDD -:101F7000C12C66246394712C53E0452E80915C0340 -:101F800093010C2C01C0220F0A94EAF7822309F472 -:101F90003FC0F601EE0FFF1FE80DF91DE590F4902C -:101FA000E114F10409F479CF45E050E0B701CE0126 -:101FB00001960E94953509810F3F51F18A81800F6A -:101FC0009927991F8B34910514F08AE490E05C0105 -:101FD000AA0CBB1C8A0D9B1DDC01A15ABC4F5D01E4 -:101FE000049D80011124015A1C4F0A151B0520F085 -:101FF000B5E0EB0EF11CD8CF4D81413A08F040EA34 -:1020000098016C818B810E9424090D5F1F4FEDCFD9 -:10201000EFEFCE1ADE0AF8E0CF16D10409F0AECF0A -:102020003CCFFC014191CF01E8E03BB9000000C08A -:1020300047FF2BB9440F000000C000C000C02BB9FF -:1020400000C0EA9591F75BCFE7E7F4E080818E7FEF -:102050008083E9E5F3E08281816082832FEF80E76E -:1020600092E0215080409040E1F700C000000C94C5 -:10207000260FE2E3F2E086E0DF011D928A95E9F7A0 -:102080000C94F70B1F93CF93DF93CDB7DEB7AA97CE -:102090000FB6F894DEBF0FBECDBF8EE694E0209160 -:1020A000F100DC012D93CD01B4E086379B07B9F731 -:1020B00080916F04833009F471C0B8F4813009F461 -:1020C00048C0823009F4B4C08091E80083FF3CC16D -:1020D00080916E0490916F049A3008F035C1E92F19 -:1020E000F0E0EE5DF84C0C9488358A3009F48FC02E -:1020F0008B3009F470C0893039F780916E048132D9 -:1021000019F78091720490917304009711F002976F -:10211000D9F68091E800877F8093E8008091E800FD -:1021200082FF37C09091F3008091F200029729F46A -:102130008091F1008B7F813021F48091F1008093B8 -:1021400061048091E8008B778093E8000E944F073C -:10215000BBCF80916E04813A09F0B6CF8091E80040 -:10216000877F8093E8008091720490917304892B9B -:1021700061F468E082E694E070E00E9401088091DA -:10218000E8008B778093E8009FCF60E090E080E0EC -:10219000F3CF80916C048111C1CF96CF80916E04F2 -:1021A000813A09F091CF8091720490917304892B48 -:1021B00009F08ACF8091E800877F8093E8008091C2 -:1021C000E80080FFFCCF809174018093F100809142 -:1021D000E8008E77B9CF80916E04813209F074CF18 -:1021E0008091720490917304892B09F06DCF8091D6 -:1021F000E800877F8093E8000E944F078091700479 -:102200008093740110925F040E9439105DCF809119 -:102210006E04813209F058CF8091E800877F809367 -:10222000E8000E944F0780917104809360044CCFB6 -:1022300080916E04813A09F047CF8091E800877F52 -:102240008093E8008091E80080FFFCCF80916004DB -:10225000BCCF803899F0823809F076C08091720442 -:102260008F70873008F070C08093E9008091EB0098 -:1022700085FB882780F91092E90006C080916A04E6 -:1022800090916B04911182609091E800977F9093F8 -:10229000E8008093F1001092F1008091E8008E77C1 -:1022A000B5C1882309F4A2C1823009F04DC08091E4 -:1022B00070048111A6C1809172048F702FEF280FD6 -:1022C000263008F041C08093E9002091EB0020FF08 -:1022D00098C1933031F48091EB0080628093EB00E1 -:1022E00090C19091EB0090619093EB0021E030E081 -:1022F00001C0220F8A95EAF72093EA001092EA00C3 -:102300008091EB008860EACF81111EC010917004AB -:102310001F778091E3008078812B8093E300809188 -:10232000E800877F8093E8000E944F078091E800D3 -:1023300080FFFCCF8091E30080688093E30082E01F -:10234000111183E080936C048091E80083FF0AC040 -:102350008091E800877F8093E8008091EB008062A5 -:102360008093EB00AA960FB6F894DEBF0FBECDBFE8 -:10237000DF91CF911F9108958058823028F72091E6 -:102380007004309171042C3DE3E03E07A1F583E039 -:102390008A838AE289834FB7F894DE01139620E09E -:1023A0003EE051E2E32FF0E050935700E49120FF2C -:1023B00003C0E295EF703F5FEF708E2F90E0EA3040 -:1023C000C0F0C7968D939D932F5F243159F74FBF6F -:1023D0008091E800877F8093E8006AE270E0CE0198 -:1023E00001960E9401088091E8008B778093E800B5 -:1023F000ABCFC096E7CF8091720490917304432FC6 -:1024000055274330510509F44AC078F5413051054C -:1024100009F47AC08BE590E0EEEEFBE04230510526 -:1024200009F092CF2091E800277F2093E8002091C7 -:102430007404309175048217930708F49C0140E0FE -:102440002115310509F065C0411163C08091E80094 -:1024500082FDC9CF80916C04882329F2853019F25E -:102460008091E80083FFF2CFBECF4132510509F4DD -:102470003CC04232510509F067CF8330910508F026 -:1024800063CFFC01EE0FFF1FEF5DFD4F0190F08168 -:10249000E02D825E9D4FDC018C9190E01AC03327C5 -:1024A00021303105D1F02115310561F0223031059F -:1024B00009F04ACFEBE5FCE0E4918E2F90E0EBE5EC -:1024C000FCE007C0EDE8FCE0E4918E2F90E0EDE841 -:1024D000FCE0009709F438CFA5CFEBE7FCE0E491EE -:1024E0008E2F90E0EBE7FCE0F4CF8330910508F00D -:1024F0002BCF880F991FFC01E95DFD4F0190F08102 -:10250000E02D89E090E08ECF82E190E0E9E4FCE00C -:1025100089CF80916C04882309F465CF853009F454 -:1025200062CF8091E80083FD5ECF8091E80082FD5C -:102530008DCF8091E80080FF83CF9091F300809150 -:10254000F2002115310519F08830910550F041E075 -:10255000089709F040E08091E8008E778093E800CA -:102560006FCF44914093F10031962150310901968B -:10257000E8CF803809F0E8CE8091E800877F80932B -:10258000E80080916D048093F10087CE8111DCCE4C -:1025900010917004123008F0D7CE8091E800877F48 -:1025A0008093E80010936D040E944F07112311F0EF -:1025B00084E005C08091E30087FDFACF81E080933D -:1025C0006C0442E061EC81E00E946E0742E261EC43 -:1025D00084E00E946E0742E261EC82E00E946E0796 -:1025E00042E260EC83E00E946E07AECE8091700400 -:1025F000813009F0A9CE81E0933009F080E080932A -:102600006B041092E9008091E800877F8093E800D6 -:102610000E944F0799CE1F93CF93DF93162FC0913F -:102620007E06D0917F068A30D1F420914304CE01FA -:102630008E579440622F70E00E945435281B822FE1 -:1026400066E00E946835C82FC15020F4DF91CF9119 -:102650001F91089560E080E20E940B13F5CF8D304A -:10266000E9F4CE57D44020914304622F70E0CE01AC -:102670000E945435281B822F9E01280F311D2115E1 -:10268000324018F080E0D0E0C0E0C80FD11DC25841 -:10269000DB4FD0937F06C0937E06D8CF96E0FE0135 -:1026A000A4E4B4E001900D929A95E1F7803E90F198 -:1026B00086E0FE0111928A95E9F7C0917E06D091DD -:1026C0007F06111133C046E050E0BE0184E494E07F -:1026D0000E949E359E012E573440892B91F52A5F2A -:1026E0003F4F40914304642F70E0C9010E9454356C -:1026F000481B463010F4240F311D211572E03707B6 -:1027000010F030E020E022583B4F30937F062093BA -:102710007E069CCFF6E08F9FB00111246655794F5D -:1027200046E050E0CE010E949535C7CF9E012A5F5A -:102730003F4FFE012E173F0731F280818095819334 -:10274000F9CFC90145E0969587954A95E1F741E0B3 -:1027500050E0BA0102C0660F771F8A95E2F7CB01FD -:1027600060917C0470917D04862B972BB9016B5F7F -:102770007F4FE5E076956795EA95E1F702C0440F53 -:10278000551F6A95E2F7842B952B90937D048093D7 -:102790007C04A5CFFF920F931F93CF93DF93EC019F -:1027A000F62EFC0101900020E9F78F01015011097C -:1027B000C017D10730F0DF91CF911F910F91FF909B -:1027C00008956F2D89910E940B13F2CFE1E4F4E09C -:1027D0008083618324E630E042E050E0BF0184EB77 -:1027E0000C948B32CF93C82F60E08CE00E94E613EC -:1027F0006C2F84E00E94E61361E08CE0CF910C9492 -:10280000E613CF93DF93C3EED2E060E0CE010E94E7 -:10281000C8352196C11584E0D807B9F7DF91CF916B -:1028200008956F927F928F929F92AF92BF92CF92B4 -:10283000DF92EF92FF920F931F93CF93DF938AEA79 -:10284000C82E86E0D82E91ECE92EF12CE701CC5869 -:10285000D10936011BC0F50185909490692DC801FE -:102860000E94C835682DC80101960E94C83582E0D3 -:10287000A80EB11C0E5F1F4FC017D10761F78EE085 -:10288000680E711C2E96CE15DF0529F08E010E50B4 -:1028900011095301E0CF7E018CE8E80EF11C8CE8B1 -:1028A000C80ED11C8DE7E81683E0F80679F6DF91B3 -:1028B000CF911F910F91FF90EF90DF90CF90BF903D -:1028C000AF909F908F907F906F900895CF93C82F77 -:1028D0006FEF811161E283E290E00E94C8356FEFF3 -:1028E000C11161E184E290E00E94C8356FEFC1112F -:1028F00068E285E290E0CF910C94C83580E00E94B8 -:10290000661460E086E290E00E94C8350E941114CF -:102910000E94011481E00C9466140F931F93CF93CF -:10292000DF93C42FD0E0CC0FDD1F2EE0629FC00DDF -:10293000D11D11243CE8839FC00DD11D1124CE016F -:1029400087960E94B435082F10E0102F0027CE0183 -:1029500088960E94B4359801282BC901DF91CF9148 -:102960001F910F910895462F853038F47A3028F45E -:10297000673018F4672F0C948D1490E080E0089570 -:10298000CF92DF92FF920F931F93CF93DF936C014F -:102990000091760480919202082BC7E0D0E010E00D -:1029A000FC2EC8010C2E02C0959587950A94E2F77B -:1029B00080FD0CC02197A0F7F12C8F2DDF91CF91D6 -:1029C0001F910F91FF90DF90CF900895B6018C2F4B -:1029D0000E94B3140E94180A019761F3EECFCF93BF -:1029E000DF93EC010E94C014BE010E94B314DF917A -:1029F000CF910C94180AFC01808191810E94EF1400 -:102A0000292F2F7092959F7092509E3078F4E92F65 -:102A1000F0E0E45DF84C0C948835803F19F020F428 -:102A2000883E20F481E00895843FE1F380E008953A -:102A3000883EC0F3813FD1F7F5CF822F86958695EA -:102A40008695089583E290E00E94B435813289F43E -:102A500084E290E00E94B435813159F485E290E03F -:102A60000E94B43591E0883209F090E0892F81709E -:102A7000089580E0FCCFCF92DF92EF92FF926B013E -:102A80007C010E940E09B701A60188E090E0FF904A -:102A9000EF90DF90CF900C94DA35AF92BF92CF9247 -:102AA000DF92EF92FF920F931F93CF93DF9300D0AB -:102AB0000F92CDB7DEB7082FF62E142FE22E80919D -:102AC000770480FF4FC0E82FE695AE2FB0E0AE5EF2 -:102AD000BD4F9C91909359038E7F823009F056C070 -:102AE000413A08F040EA9E012F5F3F4F6F2D802F43 -:102AF0000E9424098091770480FF11C02B813981C5 -:102B00004A81809171019091720153E0859FF0019B -:102B10001124E15AFC4F891798F10E94260F8091E9 -:102B20007804801308C0809179048F1104C08091CB -:102B30007A04811729F080915B03826080935B03A4 -:102B400000937804F092790410937A04EE2051F007 -:102B500060917704709178048091790490917A045F -:102B60000E943B150F900F900F90DF91CF911F9116 -:102B70000F91FF90EF90DF90CF90BF90AF900895AE -:102B80004183308322838F5F3396C5CF923039F6ED -:102B9000E2508E2F8170D82EE695F0E0E55AF94F7D -:102BA000A590B490C12CBB2460917301C61608F0A7 -:102BB000B4CF2C2D30E0A29EC001A39E900DB29EFA -:102BC000900D112470E00E945435802FD11016C052 -:102BD000860F40917101420F532F511D9A01220F10 -:102BE000331F240F351F215A3C4F412F113A08F053 -:102BF00040EA6F2D0E942409C394D6CF861BE9CFEB -:102C0000E7E7F4E0438121E1421B08F440E021E0E2 -:102C1000628181810C944D15E7E7F4E0438121E165 -:102C2000420F08F44FEF21E0628181810C944D1531 -:102C3000E7E7F4E0628121E1621B08F460E021E053 -:102C4000438181810C944D15E7E7F4E0628121E135 -:102C5000620F08F46FEF21E0438181810C944D15E0 -:102C6000E7E7F4E0818121E04381628188500C94A0 -:102C70004D15E7E7F4E0818121E043816281885FBF -:102C80000C944D1580917B04882319F0815080931A -:102C90007B0460917704709178048091790490911D -:102CA0007A040C943B1580917B04833018F48F5F79 -:102CB00080937B046091770470917804809179040B -:102CC00090917A040C943B159091770490FF27C063 -:102CD000917081111DC092609093770480915B0385 -:102CE000816080935B03662351F06091770470915B -:102CF00078048091790490917A040E943B1520E039 -:102D000040917A0460917904809178040C944D1577 -:102D10008C3010F09661E0CF880F982BDDCF0895AE -:102D200021E030E0A90102C0440F551F8A95E2F767 -:102D3000CA0120915C03662391F0822B80935C038F -:102D400080915B03806180935B0380915A038111C2 -:102D500009C08091770460E086950C946416809594 -:102D60008223ECCF0895CF93DF93C82FC17082FBED -:102D7000DD27D0F981FB662760F985E00E94901677 -:102D800061E06C2786E00E9490166D2F87E0DF914E -:102D9000CF910C9490160F931F93CF93C82F61E09F -:102DA0008111682F617080E00E949016C1FB662738 -:102DB00060F9C11101C060E081E00E949016C2FB81 -:102DC000662760F9C11101C060E082E00E949016A0 -:102DD000C3FB662760F9C11101C060E083E00E9477 -:102DE0009016C4FB662760F9C11101C060E084E061 -:102DF0000E9490164C2F50E070E060E0DB01CA01A9 -:102E0000F4E0B695A79597958795FA95D1F7009731 -:102E1000A105B10549F1AC01BD0184E08A019B0126 -:102E2000E2E03695279517950795EA95D1F70115B4 -:102E300011052105310519F08E5FB901A8017695BC -:102E4000679557954795452B462B472B09F08F5F84 -:102E50008230D1F158F48823E9F0813059F18C2F78 -:102E6000CF911F910F91089580E0D8CF8330A1F1C9 -:102E70008430A9F720E040E56FEF8AED0E944D1500 -:102E800087E00E94F21380910001882341F31092A1 -:102E900032030DC020E040E56FEF82E30E944D1544 -:102EA00080910001882399F381E0809332030E948E -:102EB000800DD5CF20E040E56FEF8CEF0E944D15DF -:102EC00085E40E94F213CBCF20E040E56FEF80E570 -:102ED0000E944D1585E2F5CF20E040E56FEF86E7D3 -:102EE0000E944D158FE1EDCF0E94CB1680937604A2 -:102EF0000C94F70B80917604982F9670963019F405 -:102F000088600C947417877FFCCF21E030E001C00B -:102F1000220F8A95EAF720958091760482230C94FB -:102F2000741721E030E001C0220F8A95EAF7809102 -:102F30007604822B0C9474178091770486958150C7 -:102F400009F48BE061E00C94641680917704869517 -:102F50008F5F8C3008F081E061E00C946416809102 -:102F6000770480FF07C0869582588F77893010F4E8 -:102F70000C94A51761E082E00C946416E7E7F4E096 -:102F800083E0808311828FEF828380EA83831482BF -:102F9000A9E5B3E012968C911297836012968C93F8 -:102FA00060817181828193810C943B15AB01BC01DE -:102FB00088E190E00C94DA35CF93C82FEFE3F4E08A -:102FC000982F990F990F990F80818770892B808393 -:102FD000E0E4F4E09C2F9295969597708081887F2D -:102FE000892B808360913D0470913E0480913F0461 -:102FF000909140040E94D6176C2F82E0CF910C94E0 -:10300000E613EDE3F4E089E88083118282818C7F0E -:10301000828360913D0470913E0480913F049091C1 -:1030200040040C94D617EDE3F4E080818E7F80831A -:1030300060913D0470913E0480913F049091400462 -:103040000C94D617EDE3F4E0808181608083609179 -:103050003D0470913E0480913F04909140040C9493 -:10306000D61769EE7EEF90E080E00E94E63560E0E2 -:1030700082E090E00E94C83560E083E090E00E942A -:10308000C8351092920260E084E090E00E94C8355A -:1030900060E082E290E00E94C83560E085E090E068 -:1030A0000E94C83560E086E090E00E94C8356FEF6E -:1030B00087E090E00E94C83540E050E0BA0188E027 -:1030C00090E00E94DA3560E08DE090E00E94C83523 -:1030D00040E050E0BA0188E190E00E94DA3560E01B -:1030E00087E190E00E94C83540E050E0BA018CE1F1 -:1030F00090E00E94DA3570E060E080E290E00E94AB -:10310000E6350E94011880E00E9466140E947E1439 -:1031100040E050E0BA018FE090E00E94DA3540E0F4 -:1031200050E0BA0183E190E00C94DA350F931F93DD -:10313000CF93DF9300D000D0CDB7DEB74091C5026A -:103140005091C6026091C7027091C8022FB7F894DF -:103150008091570490915804A0915904B0915A0459 -:103160002FBF841B950BA60BB70B84369105A105C9 -:10317000B10588F10E94DE0E882379F10E94620871 -:103180006E5F7F4F8F4F9F4F69837A838B839C83C2 -:1031900080912C0190912D0181559D4F40912B01E3 -:1031A00050E04530510510F044E050E0BE016F5F43 -:1031B0007F4F0E94AB3584E090E00E94A034892BC1 -:1031C000D9F40E9462086093C5027093C60280938E -:1031D000C7029093C80281E010C00E94620800916B -:1031E000D2021091D3022091D4023091D502600F07 -:1031F000711F821F931FC4CF80E00F900F900F901C -:103200000F90DF91CF911F910F9108958F929F9210 -:10321000AF92BF92CF92DF92EF92FF920F931F93E4 -:10322000CF93DF93EB0188809980AA80BB809FB702 -:10323000F894C0905704D0905804E0905904F0904E -:103240005A049FBFC818D908EA08FB0894E6C916B3 -:10325000D104E104F10410F4442311F1E82E082E06 -:10326000000CFF089AE08902F0011124EF5FFE4F85 -:103270008381948181559D4F428150E00417150749 -:1032800008F4A801B9010E94AB35C7010E94A0341F -:10329000892BA1F40E946208688379838A839B83C7 -:1032A00081E0DF91CF911F910F91FF90EF90DF9020 -:1032B000CF90BF90AF909F908F90089580E0F1CF16 -:1032C0000F931F93CF93DF930F92CDB7DEB780910B -:1032D0004E0489832091C40290E041E0281719062A -:1032E00009F440E001E010E09E012F5F3F4F6DECDC -:1032F00072E086E00E9406190F90DF91CF911F9136 -:103300000F9108950F931F93CF93DF93CDB7DEB73F -:1033100029970FB6F894DEBF0FBECDBF85E0E7E773 -:10332000F4E0DE01119601900D928A95E1F780910B -:10333000590390915A03A0915B03B0915C038E8373 -:103340009F83A887B98741E08885811101C040E04B -:1033500009E010E09E012F5F3F4F69EC72E085E0CD -:103360000E940619811110925B0329960FB6F894FA -:10337000DEBF0FBECDBFDF91CF911F910F9108959A -:103380006F927F928F929F92AF92BF92CF92DF9275 -:10339000EF92FF920F931F93CF93DF930F92CDB7CE -:1033A000DEB7862E5A016901682E880F7708C3019F -:1033B0000E94A034892B09F088C08AE0869DF00124 -:1033C000879DF00D1124EF5FFE4F458150E04115C0 -:1033D000510511F041E050E08AE0869DF001879DA3 -:1033E000F00D1124EF5FFE4F6681778161557D4FAF -:1033F000CE0101960E94AB35F50140815181628179 -:1034000073812FB7F8948091570490915804A0913C -:103410005904B0915A042FBF841B950BA60BB70B10 -:1034200084369105A105B10540F4B701C8010E9499 -:10343000F3089981891709F44FC0082C000C9908EA -:10344000C4010E94A034892B91F0B12C8B2D0F90D8 -:10345000DF91CF911F910F91FF90EF90DF90CF9070 -:10346000BF90AF909F908F907F906F9008958AE06B -:10347000889DF001899DF00D1124EF5FFE4F45817D -:1034800050E0E416F50608F4A7018AE0889DF001F3 -:10349000899DF00D1124EF5FFE4F668177816155A4 -:1034A0007D4FC6010E94AB35B701C8010E94F308E9 -:1034B00099818913CACF0E946208F50160837183E4 -:1034C00082839383BB24B394C1CFB12CA701B801ED -:1034D000C6010E94AB35BACFBB24B394F7CFCF92CD -:1034E000DF92EF92FF920F931F93CF93DF9300D061 -:1034F00000D00F92CDB7DEB76B0185E0E82EF12C3E -:1035000000EB12E09E012F5F3F4F47EA52E061E07F -:1035100080E00E94C019882349F095E0FE013196B1 -:10352000A2EAB2E001900D929A95E1F795E0E2EA05 -:10353000F2E0D60101900D929A95E1F70F900F906D -:103540000F900F900F90DF91CF911F910F91FF90EF -:10355000EF90DF90CF90089590E080E00E94C23518 -:10356000893E9E4F11F40C94221580E008951F921D -:103570000F920FB60F9211242F933F934F935F93A7 -:103580006F937F938F939F93AF93BF93CF93DF936B -:10359000EF93FF93D091E900DF708091EC00C82F8A -:1035A000C17080FDC0E81092E9008091F000877F33 -:1035B0008093F00078940E9442101092E90080916C -:1035C000F00088608093F000CD2BCF70C093E900AD -:1035D000FF91EF91DF91CF91BF91AF919F918F912B -:1035E0007F916F915F914F913F912F910F900FBEFF -:1035F0000F901F9018951F920F920FB60F921124E3 -:103600002F933F934F935F936F937F938F939F93EA -:10361000AF93BF93EF93FF938091E10082FF09C0C6 -:103620008091E20082FF05C08091E1008B7F809352 -:10363000E1008091DA0080FF24C08091D80080FFF3 -:1036400020C08091DA008E7F8093DA008091D900CB -:1036500080FF9BC080E189BD82E189BD09B400FE85 -:10366000FDCF81E080936C0480915E04811109C0DC -:103670000E94D5060E94A0078091E200846080939A -:10368000E2008091E10080FF17C08091E20080FF9E -:1036900013C08091E2008E7F8093E2008091E2006F -:1036A00080618093E2008091D80080628093D8008E -:1036B00019BC85E080936C048091E10084FF29C0EF -:1036C0008091E20084FF25C080E189BD82E189BD4F -:1036D00089B5982F917080FFFBCF8091D8008F7DA6 -:1036E0008093D8008091E1008F7E8093E1008091EB -:1036F000E2008F7E8093E2008091E20081608093FF -:10370000E20080916D04882309F445C084E0809331 -:103710006C048091E10083FF27C08091E20083FF69 -:1037200023C08091E100877F8093E10082E0809355 -:103730006C0410926D048091E1008E7F8093E10013 -:103740008091E2008E7F8093E2008091E2008061B0 -:103750008093E20042E060E080E00E946E0780918A -:10376000F00088608093F000FF91EF91BF91AF91DE -:103770009F918F917F916F915F914F913F912F9189 -:103780000F900FBE0F901F90189519BC10926C04EB -:1037900010925E0476CF8091E30087FD93E09093D2 -:1037A0006C04B7CF78941F921FB61F9211248F9389 -:1037B0009F93AF93BF938091570490915804A09129 -:1037C0005904B0915A040196A11DB11D809357046C -:1037D00090935804A0935904B0935A04BF91AF91A9 -:1037E0009F918F911F901FBE1F9018959C014FB7FE -:1037F000F8948091570490915804A0915904B09185 -:103800005A044FBF821B930B08952FB7F8948091F1 -:10381000570490915804A0915904B0915A042FBFB5 -:1038200008955F926F927F928F929F92AF92BF9214 -:10383000CF92DF92EF92FF920F931F93CF93DF937C -:1038400000D000D00F92CDB7DEB77C01FC018381A0 -:103850009481892B31F08081918189238F3F09F0F8 -:10386000D0C60F900F900F900F900F90DF91CF91D7 -:103870001F910F91FF90EF90DF90CF90BF90AF908E -:103880009F908F907F906F905F9008950E94C014DA -:10389000182F682F89819A810E94CB0B69817A81C8 -:1038A000812F0E94B3148C01F7018281882361F07B -:1038B000F801E65EFC45ED30F10530F4E65CF84CCD -:1038C0000C9488350E942218D0903D04D0FE1CC074 -:1038D0008D2D86958370F7019281992309F460C13B -:1038E000823090F4B701C8010E94B108882361F0CA -:1038F000D694D694D69480913E0483708295880F96 -:10390000807E8D290E94F213F7018281882309F4B9 -:103910006DC6C80182519F45409708F02BC68FEFB6 -:1039200093E00E94B435025193EEA92E92E0B92E95 -:10393000811197CF011138C11C821B8266246394C8 -:103940008AE0582E85010F5F1F4FC5010E94B435D4 -:1039500089831A82882309F484CF9FEF980F9330CC -:1039600008F031C18A83698232E0A30EB11CC8011C -:103970000E94B4358B83882309F473CF8E010F5FC7 -:103980001F4FF80120812223E9F2213009F055C1AF -:1039900091818281913009F018C10E5F1F4F6AE05A -:1039A00070E0893311F460E570E00E94110F13C1DB -:1039B0000E94131889CF80913D0480FF0DC00E94A2 -:1039C000131860913D0470913E0480913F049091E2 -:1039D00040040E94D61778CF0E942218F2CF0E948E -:1039E000011872CF90913D04892F86958F5F837067 -:1039F000880F997F892B80933D04982F967096307D -:103A000001F7897F80933D04DCCF90913E04892F9C -:103A10008B7F92FF846080933E04D3CF80913D04DE -:103A2000982F96959695969580913E0483708295F1 -:103A3000880F807E892B8C3798F48F5F282F220F78 -:103A4000220F220F90913D049770922B90933D048A -:103A500082958695837090913E049C7F892BDBCF65 -:103A600081E0ECCF80913D04982F969596959695A0 -:103A700080913E0483708295880F807E892B11F09F -:103A80008150DCCF8BE7DACF30913E04932F9695AF -:103A90009695969520913F04822F83708295880F8A -:103AA000807E892B90E00196482F440F440F440FED -:103AB0003770342B30933E0435E0969587953A95D0 -:103AC000E1F783702C7F822B80933F047ACF309173 -:103AD0003E04932F96959695969520913F04822FBC -:103AE00083708295880F807E892B8150990BDCCF63 -:103AF00080913F0482FF12C08B7F80933F046091CE -:103B00003D0470913E0480913F04909140040E94D6 -:103B1000D61760E081E00E94E613D6CE84608093E1 -:103B20003F0460913D0470913E0480913F04909168 -:103B300040040E94D61760E08CE00E94E61364E126 -:103B400082E00E94E61365E081E00E94E61361E0F6 -:103B50008CE0E1CF80913F04982F969596959695AD -:103B6000809140048295880F807E892B883720F4CD -:103B7000865F0E94DC17A8CE88E7FBCF80913F04C8 -:103B8000982F969596959695809140048295880FEA -:103B9000807E892B843110F08A50EBCF84E1E9CF0D -:103BA000882309F4B1CE9ECEA114F4E0BF0609F437 -:103BB00058CEC5010E94B435811101C001502FEFCC -:103BC000A21AB20AB7CE5801D9CE923039F40E5F9C -:103BD0001F4F0E94570C0F5F1F4FD3CE933029F415 -:103BE0000E5F1F4F0E941E0CF6CF943019F00F5F2E -:103BF0001F4FF1CF0E5F1F4F30E020E0B8016F5F25 -:103C00007F4FF80141818053990B8A30910550F024 -:103C10002150310900F38FE99FE00197F1F700C0CF -:103C20000000F6CF529EF001539EF00D11249C012E -:103C30002E0F3F1F842F8B01E1CFE22FF0E0E75FD3 -:103C4000FD4F7490822F86958695869590E0FC01B5 -:103C5000E750FE4FE4902770F12C022E02C0F5943D -:103C6000E7940A94E2F7E1E0EE22FF24FC01E75139 -:103C7000FE4FC490D12C022E02C0D594C7940A9452 -:103C8000E2F7F1E0CF22DD24FC01E752FE4F849001 -:103C9000912C02C0959487942A95E2F721E0822224 -:103CA0009924E114F10419F081EE0E94570CC1141B -:103CB000D10419F086EE0E94570C39E36AE070E0F7 -:103CC000731202C060E570E0872D0E94110FCD28AD -:103CD00019F086EE0E941E0CEF2819F081EE0E946A -:103CE0001E0C892809F477CF6AE070E08CE25DCE83 -:103CF00081E00E94911703C081E00E9485170F9018 -:103D00000F900F900F900F90DF91CF911F910F9117 -:103D1000FF90EF90DF90CF90BF90AF909F908F90EB -:103D20007F906F905F900C947A1782E0E2CF013E13 -:103D3000110509F404C108F04DC0003E110509F455 -:103D400069C1F701928191117BC280915F048272F7 -:103D50000A3CFCE51F0709F453C208F0A9C1053C61 -:103D60003CE5130709F438C208F08DC1033C5CE55B -:103D7000150709F412C208F02AC2023C1C4509F4D6 -:103D8000BCC1F70100811181992309F473C2C801F4 -:103D90000E94C014D82E682FC8010E94CB0BB80116 -:103DA0008D2D0E94B3140E94180A182FB82EF70107 -:103DB00022814581342F32953F70892F82958F70F3 -:103DC000C82ED12C8C3008F08DC2F601E95BF84C7E -:103DD0000C948835043E110509F41CC1053E1105FB -:103DE00009F0AFCF80933C0210933B0200933A025C -:103DF000882309F4A1C081E08093EE02A2CF0238AB -:103E0000FFE51F0709F476C038F5063F110509F4F0 -:103E1000FFC008F4FBC000383FE5130709F44DC0AC -:103E200001384FE5140709F08CCF882309F45BC0F3 -:103E300080919C02811106C081E080939C0282EEF9 -:103E40000E94570C0E94051C90939B0280939A023B -:103E500081EE0E94570C43C004385FE5150709F452 -:103E600071C008F45BC00538EFE51E0709F4B0C067 -:103E70000638FFE51F0709F064CF882309F4C2C0A4 -:103E80006091590170915A0190E080E00E940136E2 -:103E900020E030E040E05CE30E94623620E030E069 -:103EA00040E85FE30E94FC358111A9C080EE90E0FC -:103EB00090935A018093590195C08823B9F080915D -:103EC0009C02811106C081E080939C0282EE0E94D8 -:103ED000570C0E94051C90939B0280939A028BE2E0 -:103EE0000E94570C2ECF81EE0E941E0C8BE20E9486 -:103EF0001E0C27CF882309F424CF81EE0E94570C93 -:103F000083EE0E94570C8FE40E94570C8FE40E94AE -:103F10001E0C83EE0E941E0C81EEE9CF882309F46B -:103F200010CF81EE0E94570C83EE0E94570C80E563 -:103F30000E94570C80E5EBCF1092EE0202CF8093E7 -:103F4000390252CF882379F180913902882349F0D0 -:103F500080913A020E941E0C80EE0E94570C8AE269 -:103F60000CC080913C028823D1F380913A020E94D8 -:103F70001E0C80EE0E94570C8CE40F900F900F9057 -:103F80000F900F90DF91CF911F910F91FF90EF90C5 -:103F9000DF90CF90BF90AF909F908F907F906F9069 -:103FA0005F900C94570C8AE20E941E0C8CE40E94D5 -:103FB0001E0C80EE0E941E0C80913902811105C0FA -:103FC00080913C02882309F44CCC80913A02D5CFF1 -:103FD0008823C1F080913203882339F01092320394 -:103FE000109200010E94800DACCE809100018111E1 -:103FF000F7CF81E08093320380930001F3CF80E814 -:1040000090E056CF61E00E94DC0C9BCE62E0FBCFDB -:1040100064E0F9CF882371F081E08093ED02809114 -:1040200076040E94CB0C813009F08BCE83E30E9492 -:10403000F21387CE1092ED0284CE882331F081E016 -:104040008093F002109267017CCE1092F00279CE3C -:10405000882349F0809176040E94CB0C813019F4BA -:1040600082E30E94F213F7018281882309F4B0C22F -:10407000809176040E94CB0C813009F0A9C284E3C0 -:104080000E94F213A5C2073C2CE5120709F4AEC04A -:1040900008F4A7C0083C4CE5140709F4ACC0093C7F -:1040A0001C4509F06ECE40E056E16CE076E179C047 -:1040B000043DECE51E07A8F40E3CFCE51F0708F0E4 -:1040C000D0CB0C3C2CE5120709F49FC042E456E12A -:1040D00063E576E10D3C1C4508F463C061E081E0D6 -:1040E00046C0053D4CE5140709F4BBCB08F492C06B -:1040F0000D351D4509F4B5CB44CE8091770480FF82 -:1041000031C08E7F8093770460917704709178043A -:104110008091790490917A040E943B1580915B0311 -:10412000816080935B039FEFE0E7F2E09150E04015 -:10413000F040E1F700C000000F900F900F900F903B -:104140000F90DF91CF911F910F91FF90EF90DF9033 -:10415000CF90BF90AF909F908F907F906F905F9027 -:104160000C94260F81608093770461E086950F9010 -:104170000F900F900F900F90DF91CF911F910F91A3 -:10418000FF90EF90DF90CF90BF90AF909F908F9077 -:104190007F906F905F900C9464164CE957E165EA4C -:1041A00077E10F900F900F900F900F90DF91CF91CC -:1041B0001F910F91FF90EF90DF90CF90BF90AF9045 -:1041C0009F908F907F906F905F900C94090945EAC3 -:1041D00057E16CE977E1E5CF40E356E169E376E149 -:1041E000E0CF49E356E160E376E1DBCF48E156E119 -:1041F00064E276E1D6CF44E256E168E176E1D1CFE0 -:104200004CE056E160E076E1CCCF43E556E162E474 -:1042100076E1C7CF0F900F900F900F900F90DF9126 -:10422000CF911F910F91FF90EF90DF90CF90BF90B3 -:10423000AF909F908F907F906F905F900C94AF178E -:104240000E3D1C4509F09DCD0F900F900F900F90E3 -:104250000F90DF91CF911F910F91FF90EF90DF9022 -:10426000CF90BF90AF909F908F907F906F905F9016 -:104270000C943118C8010E94A30BD82E90CD092FA1 -:104280000F70907F11F00295007F812F2223C9F0DB -:10429000002369F090E2910F983010F011110BC0DB -:1042A00080915F04082B00935F040E94820B812F92 -:1042B0000E94570C17C080919102082B0093910225 -:1042C000F4CF0E941E0C002369F00095105E183098 -:1042D00010F0B11027C080915F04082300935F04A1 -:1042E0000E94820B98E0C91AD108E4E0CE16D104EE -:1042F00008F0B7CA0E94010F0F900F900F900F9017 -:104300000F90DF91CF911F910F91FF90EF90DF9071 -:10431000CF90BF90AF909F908F907F906F905F9065 -:104320000C94B31680919102082300939102D8CF88 -:10433000892F8F70907F903211F08295807FF1E00D -:10434000BF120CC0222329F0333060F60E94140CF7 -:10435000C9CF323038F60E94090CC4CF222341F075 -:104360003323A1F340FFA3CF4F70F7014583EECF76 -:10437000332389F3193309F0F5C0FFEF27EE33E05B -:10438000F15020403040E1F700C00000812F0E9432 -:104390001E0CA8CF892F86958695837061F0813099 -:1043A00009F0A0CF812F9370211102C090E080E02E -:1043B0000E946E0897CF812F9370211102C090E068 -:1043C00080E00E9484088ECF892F8370A1F521118F -:1043D00089CF812F829586958770880F880F412F0E -:1043E0004F70082E01C0440F0A94EAF7212F207164 -:1043F00014FF07C02FE030E001C0220F8A95EAF7D2 -:104400002095969596959370923081F0822F842B0B -:10441000933030F480919202913029F0242B822342 -:104420000E94050C5FCF842B822BFACF242B809126 -:1044300092028227F5CF8695222311F0892F817071 -:10444000882309F44FCF812F829586958770880F36 -:10445000880F412F4F70082E01C0440F0A94EAF7CD -:10446000212F207114FF07C02FE030E001C0220F80 -:104470008A95EAF72095969596959370923081F0FB -:10448000822F842B933030F480917604913029F080 -:10449000242B82230E94741725CF842B822BFACFE2 -:1044A000242B809176048227F5CF092F0F702223C9 -:1044B00029F0802F0E949117812F48CF812F0E94D1 -:1044C000090C802F0E9485170DCF812FE1EF1E1759 -:1044D00089F1E11750F0F0EF1F17B9F02223B1F185 -:1044E0003111E5CE892F8F7129C042EF141749F1A0 -:1044F00053EF1513F3CF80E0222361F29F7181E027 -:1045000001C0880F9A95EAF7C5CF222379F032309F -:1045100008F0E8CE292F2F7181E090E001C0880FCC -:104520002A95EAF7909176048927B4CF333008F0C2 -:10453000D9CEF0CF892F8F71222321F20E949117BB -:10454000D1CE892F8F712223C9F3BCCF332379F0C9 -:10455000893341F48FEF97EEE3E081509040E040E3 -:10456000E1F712CF8FE39CE90197F1F70DCF892F87 -:104570008F71A8CF0031FFE51F0709F4B9CB0131D6 -:104580002FE5120709F4D1CB0E9462086093F5026F -:104590007093F6028093F7029093F802F7018281FC -:1045A000043F110509F42ECD08F029CC0C32110579 -:1045B00009F443CD08F0BBCB0A30110509F448CD0E -:1045C0000531110509F44FCD0930110509F0B9CBBA -:1045D000F7018281882309F4B4CB809176040E948C -:1045E000CB0C813009F0ADCB81E321CD00313FE52B -:1045F000130709F481CB01314FE5140779F682E006 -:104600007CCB85E0DE01119601900D928A95E1F751 -:10461000F701228189819A81211138C90E94A30B57 -:10462000182F3CC91F93CF93DF9380915D02807F49 -:10463000A9F480915A02882389F080918F02D09149 -:104640005E026091580270915902A0915B02B09194 -:104650005C02C62FC72316E0D81304C0DF91CF91A8 -:104660001F91089590E0109711F0CF3F19F4019633 -:104670008770F2CF189F9001199F300D1124F90116 -:10468000E15AFD4F41814713F2CF40814613EFCFEE -:1046900042814111ECCF438154814A1B5B0B403A6C -:1046A000510528F780915D028F70806180935D02D3 -:1046B000F901EC59FD4F80818F708061808388E51E -:1046C00092E00E94111CDF91CF911F910C94990BE5 -:1046D000AF92BF92CF92DF92EF92FF920F931F9310 -:1046E000CF93DF93CDB7DEB761970FB6F894DEBFF7 -:1046F0000FBECDBF8C0185E0F801DE011D96019053 -:104700000D928A95E1F7F801E28088E5A82E82E013 -:10471000B82E60915B0270915C026115710509F41D -:1047200032C19091580240915902892F84238F3FC2 -:1047300009F429C120813181C380D480F0905A02CC -:10474000F601E61BF70BFF2009F4E8C080915D023B -:10475000582F507FE03AF10508F0ABC0511177C0F7 -:10476000FE2C431321C092131FC0E1101DC08F7097 -:10477000806180935D02C5010E94111C80915D02E1 -:10478000F80185838F2D61960FB6F894DEBF0FBEBA -:10479000CDBFDF91CF911F910F91FF90EF90DF90F0 -:1047A000CF90BF90AF900895CD2829F0822F83231A -:1047B0008F3F09F003C180E0F82FF170DF2E80FFFA -:1047C0003CC080918F0240915E0256E0841315C078 -:1047D0002D873E878D859E850E94EF14292F229577 -:1047E0002F702230F0F0243018F59F70F1F0F801AE -:1047F0009581907FD1F4D12C1EC090E0589FF0019C -:10480000599FF00D1124E15AFD4F6181361306C006 -:104810006081261303C06281E6120FC00196877083 -:10482000D5CF9F7011F0882331F3805E883018F364 -:10483000C8010E94111CFD2CA5CFEE2009F4A2CFC7 -:1048400080915D02816080935D02F12C9BCF4313C8 -:1048500006C0921304C0F801EE2009F479C0C80123 -:104860000E94FB14882309F1EE20F9F080915D028B -:10487000803270F0209158023091590238872F838E -:104880001986DB86CA868C87CE0107960E94111C8A -:1048900086E0F801A8E5B2E001900D928A95E1F773 -:1048A0000E941223FF24F3946DCFC8010E94111CB3 -:1048B000F9CF51110AC088E592E00E94111C86E0F0 -:1048C000F50111928A95E9F7C0CF43130FC09213F7 -:1048D0000DC0E1100BC0F8018583C8010E94111CB6 -:1048E00086E0F50111928A95E9F74CCFC8010E9444 -:1048F000FB148823D1F2EE20C1F280915D02803258 -:1049000038F220915802309159023A8329831B8250 -:10491000DD82CC828E83CE010196B8CFE03AF105DC -:10492000F8F6FE2CEE2009F243131FC092131DC0AF -:1049300080915D0280FD10C0982F907F69F0F80192 -:104940008583903F31F0982F907F905F8F70892BF7 -:104950008583C8010E94111C86E0F801A8E5B2E039 -:1049600001900D928A95E1F70DCFC8010E94FB14CA -:1049700081118ECF80915D02816080935D02C801BC -:104980000E94111CFFCEEE2009F48FCFC8010E94B7 -:10499000FB14F82E882309F488CF86E0F801A8E5F7 -:1049A000B2E001900D928A95E1F7809158029091C2 -:1049B00059020E94EF140E941223E4CE81E08E255A -:1049C000FBCE1F93CF93DF93CDB7DEB767970FB6BC -:1049D000F894DEBF0FBECDBF4B8B5C8B6D8B7E8B97 -:1049E0008F8B6111109291021A8A198A85E0FE015B -:1049F0007396DE011D9601900D928A95E1F786E08F -:104A0000FE013D96DE01179601900D928A95E1F721 -:104A1000CE0107960E946823882389F016E08091D2 -:104A20008F0290915E0289134BC067960FB6F8947F -:104A3000DEBF0FBECDBFDF91CF911F91089586E0FD -:104A4000FE013796DE01119601900D928A95E1F7ED -:104A50008A859B85892B11F38F81988589238F3FC8 -:104A6000E9F220915E0230E0C90101968770992732 -:104A700040918F024817190681F410925F040E943A -:104A8000391010925E0210928F0286E0E8E5F2E0A3 -:104A9000DF011D928A95E9F7C1CF96E0929FD00180 -:104AA000939FB00D1124A15ABD4FFE013196019084 -:104AB0000D929A95E1F780935E020E94990BAECF1A -:104AC000819FC0011124815A9D4F0E946823882331 -:104AD00009F4ABCF80918F0290E0019687709927FF -:104AE00080938F029CCF9F92AF92BF92CF92DF9222 -:104AF000EF92FF920F931F93CF93DF93CDB7DEB763 -:104B000064970FB6F894DEBF0FBECDBF8E010F5F66 -:104B10001F4F8AE0D8011D928A95E9F79EE4C92EBD -:104B200091E0D92EF12CE12CAA24A394B12CF6010A -:104B300081916F018F3F09F44AC0F894E82FE29504 -:104B4000EF70F0E021A18F70A50102C0440F551F46 -:104B50008A95E2F7CA01922F982B91A392A1809592 -:104B6000892382A30E94BC0900C0E7E4F1E030E0A1 -:104B700020E0912C41914F3F09F47DC0A42FA295D4 -:104B8000AF70B0E090968C9190E04F7002C0959518 -:104B900087954A95E2F780FD6EC08A2D022E01C0EE -:104BA000880F0A94EAF7982A2F5F3F4F2730310584 -:104BB00009F7F601319780818F3F11F00E94BE09FD -:104BC00050EA5A95F1F7F801EE0DFF1D90828FEF34 -:104BD000E81AF80A95E0E916F10409F0A8CF4AE0CE -:104BE00050E0B80188ED92E00E949E357C01892B4F -:104BF00041F08AE0F801A8EDB2E001900D928A95AB -:104C0000E1F71091E302E114F104B9F181E080933E -:104C100095020E94051C90939402809393028091C8 -:104C20009302909194020E94F61B069770F0A8EDF3 -:104C3000B2E0E12FF0E0E15BFC4F8D91819322E047 -:104C4000AD3DB207D1F71092950281E090E0EF28D8 -:104C5000C1F064960FB6F894DEBF0FBECDBFDF91F2 -:104C6000CF911F910F91FF90EF90DF90CF90BF9069 -:104C7000AF909F90089580E096CF8091950281112A -:104C8000CECF0E94DE0EB82EE091E302882309F415 -:104C9000C7C08E01005F1F4F85E0D8011D928A9525 -:104CA000E9F7F0E09F01215B3C4F79018091D1024F -:104CB000AE014B5E5F4F6A018A3008F086C04FE656 -:104CC0005AE1B801C7010E949A0E882309F494C0E2 -:104CD00044EE57E2B801C7010E949A0E882309F4F6 -:104CE0008BC046E958E1B801C7010E949A0E88239B -:104CF00009F482C042E859E1B801C7010E949A0E46 -:104D0000882309F479C040E659E1B801C7010E943F -:104D10009A0E882309F470C01092D102E091E20249 -:104D2000F0E0AF01415B5C4FD80110E0FA019191D6 -:104D3000AF018D91981731F09F0121503109F90190 -:104D400080831B2DCA16DB0689F780919C0288237D -:104D500071F080919A0290919B020E94F61B893E0D -:104D6000934028F082EE0E941E0C10929C0288E96B -:104D7000C82E82E0D82EF12CE12CD6018D916D0148 -:104D80008823D1F08695F70109F447C0EC50FE4F17 -:104D9000808191819C878B871D860E94051C816084 -:104DA000782F9F878E87F601319710824B855C851F -:104DB0006D858F850E94E124B2E0EB0EF11CE4E0EA -:104DC000EE16F104D1F6812F44CF80919602909196 -:104DD00097020E94F61B843F914008F070CFA0918B -:104DE000E202B0E0A15BBC4FF8011D921192CE1619 -:104DF000DF06D9F71B2DA9CF8091D1028F3F31F06B -:104E00008F5F8093D1028A3008F488CF0E94051CFE -:104E10009093970280939602E2CFE051FE4FB8CF75 -:104E2000F0E0E15BFC4FF89485E0A0EBB2E001908C -:104E30000D928A95E1F765E070E080EB92E00E94C8 -:104E4000F3088093AF020E94BC09F894E091EB0252 -:104E5000F0E0E851FD4F80818B878093B60261E0DE -:104E600070E0CE010B960E94F3088093B5020E9479 -:104E7000BC09F894C090B702D090B802E090B90293 -:104E8000F090BA0280919D0290919E02A0919F02A3 -:104E9000B091A002C816D906EA06FB06D1F0C0926E -:104EA0009D02D0929E02E0929F02F092A0020E9488 -:104EB000DE0E81110EC00E946208C61AD70AE80AE7 -:104EC000F90AC092D202D092D302E092D402F092B8 -:104ED000D5020E94BC09F8948091C202882321F176 -:104EE00084FF04C09091C30290935C0380FF0DC0C7 -:104EF0008091BB0280FF25C09091770491609093D0 -:104F0000770460E086950E9464168091C20281FF5A -:104F100009C020E04091BE026091BD028091BC02B8 -:104F20000E944D151092C2020E94BC09F894809113 -:104F3000C402882349F00E94F20D0E94BC0980E05F -:104F400088CE0E942410E1CF0E94D70DF6CFEF92B9 -:104F5000FF920F931F93CF93DF9300D000D00F9257 -:104F6000CDB7DEB7162FE82EF12CC701880F991F99 -:104F7000662339F18C509E4FFC01808191819A8388 -:104F8000898301E00B830E94051C8160782F9D833B -:104F90008C83F701E856FD4F0127110F102B10836A -:104FA00049815A816B818D810F900F900F900F90E6 -:104FB0000F90DF91CF911F910F91FF90EF900C9484 -:104FC000E12480519E4FD8CFCF92DF92EF92FF9293 -:104FD0000F931F93CF93DF930F92CDB7DEB7EE24DD -:104FE000E394F12C06EB12E09E012F5F3F4F4BEA5A -:104FF00052E063E082E00E94C019082F882321F16B -:10500000C090E5028C2D90E09C0128513D4F790124 -:105010001981F9018081181BD12E80E00AC0DA9431 -:10502000F70180818F5F808360E08C2D0E94A7272D -:10503000802F1D14A4F3912F17FD90E0191B11115F -:105040000EC081110E94800B802F0F90DF91CF91B5 -:105050001F910F91FF90EF90DF90CF9008951F5F09 -:10506000F70180818150808361E08C2D0E94A72709 -:10507000802FE5CF1F921FB61F9211248F939F930D -:10508000AF93BF9380915604811113C08091570450 -:1050900090915804A0915904B0915A044196A11DD1 -:1050A000B11D8093570490935804A0935904B09372 -:1050B0005A04BF91AF919F918F911F901FBE1F9077 -:1050C0001895CDB7DEB7E9970FB6F894DEBF0FBEDF -:1050D000CDBF84B7877F84BF0FB6F894A895809121 -:1050E0006000886180936000109260000FBE80E8CD -:1050F00090E00FB6F89480936100909361000FBE2A -:1051000085B7806885BF85B7806885BF8AEB99E0E1 -:1051100090932F0280932E020E94D5060E94A00732 -:105120008091E20084608093E200789480916C0426 -:105130008823A1F01091E9001F709091EC00892F55 -:10514000817090FD80E8182B1092E9008091E800B2 -:1051500083FD0E9442101F701093E90082E084BD1D -:1051600093E095BD9AEF97BD80936E001092D202A6 -:105170001092D3021092D4021092D5020E942215EE -:10518000811102C00E947E140E94DE0E809358019D -:1051900080915801882309F4C6C010926F0185E2FE -:1051A000809370010E94DE0E81110E9493338091E2 -:1051B000580181112FC0FE01359686E0DF011D9256 -:1051C0008A95E9F786E6898387E98A8386EC8B836B -:1051D00084E38C8385E38D833497AEE4B1E0CE0124 -:1051E0000B9621912D938E179F07D9F787E0E5E75E -:1051F000F1E0DE01919601900D928A95E1F7FE01B2 -:10520000B196A7E4B1E0CE01889621912D938E1737 -:105210009F07D9F78091580195E0811190E0909314 -:10522000E30285E0891B8093E2020EE411E0A3E52E -:10523000EA2EA1E0FA2EF80181918F018F3F11F043 -:105240000E94BE09E016F106B1F707E411E0FEE4A2 -:10525000EF2EF1E0FF2ED8018D918D018F3F11F0DF -:105260000E94BE09E016F106B1F7E8EDF2E082EE29 -:1052700092E0AFE4B3E011921D928E179F07D9F729 -:105280000E94AC1A811102C00E94311882E090E0A5 -:105290000E94B4358093440384E090E00E94B435CA -:1052A000182F82E290E00E94B435982F812F9093BE -:1052B000D7028093D6020E947325EFE7FBEB31976C -:1052C000F1F700C000000E94732580914F0380FF1A -:1052D0002EC06FEF7FEF90E080E00E94E63581E026 -:1052E0008093E00080E28093D8001092C9008FE1A3 -:1052F0009EE40197F1F700C0000087E090EBDC012D -:105300008093800690938106A0938206B0938306D3 -:1053100088E19CE00FB6F894A895809360000FBEDA -:1053200090936000FFCF85E280936F0139CF83E0D7 -:1053300090E00E94B4350E94050C809176040E9492 -:10534000CB160E94AC1A811102C00E94311888E16C -:1053500090E00E94BC3560933D0470933E048093BE -:105360003F0490934004672B682B692B11F40E9433 -:1053700001180E94943167E081E00E94E61365E520 -:1053800086E10E94E61363E687E10E94E61360EA85 -:105390008AE10E94E61369E98BE10E94E61365EF5A -:1053A0008CE10E94E61360EA8DE10E94E61360E35F -:1053B0008EE10E94E61366E083E00E94E61361E05E -:1053C0008CE00E94E61360E081E00E94E61360E05A -:1053D0008CE00E94E6136FE084E00E94E61361E037 -:1053E0008CE00E94E6130E94DE0E811102C00E9432 -:1053F000963383E080931A0380E2809343040E94F3 -:1054000094316DE070E08CE992E00E94A70D892B49 -:10541000E9F580911A0363E070E081FD9EC289E99D -:1054200092E00E94A70D892B89F56DE070E089E874 -:1054300092E00E94A70D892B49F50E9462086058EE -:10544000774C8E4F9F4F60934A0470934B04809328 -:105450004C0490934D04EEE7F4E080E092E0DF012D -:105460009C011D9221503040E1F7F0937F06E093BC -:105470007E068FEF9FEF90937D0480937C0481E004 -:1054800080934F0480934E0410921B038091E4029A -:10549000811136C00E94AC1A811104C00E943118DB -:1054A0000E94BE1788E090E00E94BC3560937704AC -:1054B000709378048093790490937A0480915B03CD -:1054C000836080935B036E7F71F40E94BE1788E057 -:1054D00090E00E94BC3560937704709378048093C9 -:1054E000790490937A040E940E098091770480FFDA -:1054F00004C060E086950E94641681E08093E40217 -:1055000080915801811106C084EF8093660185EF78 -:105510008093650120916601A22FA295AF70B0E043 -:1055200091963C9191972F7081E090E0BC01022E02 -:1055300001C0660F0A94EAF7462F409543239196DF -:105540004C93919792963C919297362B92963C93DE -:10555000929740916501E42FE295EF70F0E031A160 -:105560004F70042E01C0880F0A94EAF7982F909587 -:10557000932391A392A1892B82A390968C9190E082 -:1055800002C0959587952A95E2F7817020A130E0B9 -:1055900002C0359527954A95E2F792E020FF90E00A -:1055A000892B8093EC028091580111E08127809330 -:1055B000EB02312F381B3093E5020E94943140E01A -:1055C00060E080E00E94600D60E08AE00E94641666 -:1055D00089EA92E090935E0380935D0381E00E94EC -:1055E000741780EE90E090935A01809359011093C4 -:1055F00032030E94800D8BE591E0909353048093D9 -:1056000052043E018DE3680E711C80916C04FF24EE -:10561000F39400E112E1853009F4F2C10E94732590 -:10562000E82E81110E946208E5E4F3E0AFE4B3E004 -:1056300010E000E0B02EDD9081918D1509F404C2D8 -:105640008D25C12CFF24F394982F9F2109F4F7C1D5 -:105650000E94DE0E882399F0CEA6BFA6DF2081E04F -:1056600009F480E088AB0E94051C8160782F9AAB1A -:1056700089AB4EA55FA568A98AA90E94E124F8011B -:10568000EB5BFC4F8081F826F0828091EC02E82FE2 -:10569000EE0FEE0F90916601A92FA295AF70B0E0CA -:1056A00090962C9130E09F7002C0359527959A9581 -:1056B000E2F72170332790916501A92FA295AF7071 -:1056C000B0E090964C9150E09F7002C05595479580 -:1056D0009A95E2F7CA018170992740FF02C082E0E3 -:1056E00090E0822B8E2B8093EC021091EB028F7056 -:1056F000E82FF0E0E650FE4F80819091EA02890F9A -:105700008093EA02F12C84306CF0E12FF0E0E85154 -:10571000FD4F80818F5F808360E0812F0E94A727EB -:10572000FF24F3948091EA028D3F6CF4E12FF0E0C6 -:10573000E851FD4F80818150808361E0812F0E947C -:10574000A727FF24F3948091EA02082E000C990BFE -:1057500064E070E00E9474358093EA02F1100E94C8 -:10576000800B80914F04882351F180911C0390910C -:105770001D030E94F61BC29708F07DC120917C0496 -:1057800030917D042115310509F0A0C280914E04AD -:105790008823A9F00E94620800914A0410914B04EA -:1057A00020914C0430914D04601B710B820B930BC4 -:1057B0006F3F7F4F8F4F9F4710F40E94D70DE1102E -:1057C00001C0F1100E94F20D809142038A3008F06E -:1057D000BAC380914003909141030E94F61B089741 -:1057E00008F4B1C304E610E025E030E04BE353E0F9 -:1057F00064E084E10E94DF32892B09F075C31092C6 -:10580000420320913203222359F080913B0390916F -:105810003C0398278927982790933C0380933B0368 -:1058200086E0E4E2F3E0DE01919601900D928A9524 -:10583000E1F786E0FE01B196DE01119601900D922E -:105840008A95E1F786E0FE013196A5E3B3E0019089 -:105850000D928A95E1F790913F038091360397FD71 -:105860003AC38E7F80933603809133039091340343 -:10587000009709F02AC360913B0380913C0300919B -:105880003D0310913E03222309F4F2C241E00E943D -:105890003A0D2091300330913103820F931F909382 -:1058A00031038093300341E0602F812F0E943A0D35 -:1058B00020912E0330912F03820F931F90932F037B -:1058C00080932E0360E373E08AE393E00E941B0D54 -:1058D0006EE273E089E393E00E941B0D10923703A0 -:1058E0001092380386E0E5E3F3E0DE0111960190C3 -:1058F0000D928A95E1F786E0FE013196A4E2B3E0CD -:1059000001900D928A95E1F73091260320912703AB -:1059100090912803809129037091200360912103C5 -:105920004091220350912303F0912503E0911F033E -:10593000FE13E0C2332311F07313DCC2222311F0F3 -:105940002613D8C2882311F08513D4C2992319F0E5 -:1059500081E04913D0C280E0CEC286E992E061CDF9 -:1059600080916C04843009F43BC00E94D70D40E064 -:1059700060E080E00E94600D80E00E94B31680919C -:10598000E702811109C0F092E702809177048170EB -:105990008093E6020E94241010925604A8E1B0E021 -:1059A000E0E40FB6F894A895A09360000FBEE093D2 -:1059B000600083B7817F846083BF83B7816083BFCA -:1059C0007894889583B78E7F83BF0FB6F894A89597 -:1059D00080916000886180936000109260000FBE2B -:1059E00080916B04882361F00E947325EFE4F3E05B -:1059F0008191811178C429E533E02E173F07C1F763 -:105A000080916C04853009F4ABCF10925F040E9442 -:105A100039100E94010F0E94B3161092E702809184 -:105A2000E602882349F080917704816080937704AF -:105A300060E086950E9464160E94800DEFCDC394AD -:105A4000FF0C37E0C31200CE0F5F1F4F0A30110565 -:105A500009F0F0CD8FEF8BAB8CAB1DAA0E94051C1B -:105A60008160782F9FAB8EAB4BA95CA96DA98FA9E4 -:105A70000E94E1240ACE0E94051C90931D0380938E -:105A80001C0360E080E00E949A080E94010F80934E -:105A9000F9020E94DE0E882331F14091F502509107 -:105AA000F6026091F7027091F8022FB7F894809196 -:105AB000570490915804A0915904B0915A042FBFF3 -:105AC000841B950BA60BB70B81339547A105B10538 -:105AD00040F00E94D70D80914F04882309F456CEE0 -:105AE0004DCE0E94F20D0E94DE0E882309F4D5C02F -:105AF00061E080E00E949A0860E08CE791E00E94FB -:105B0000CA1362E080E00E949A08809176040E94A5 -:105B1000CB0C823009F49BC008F090C0882309F4B4 -:105B200096C0813009F499C065E080E00E949A082F -:105B300060E08AE991E00E94CA1366E080E00E947A -:105B40009A086091F902669561708FE991E00E9470 -:105B5000CA1367E080E00E949A086091F90260959C -:105B6000617084EA91E00E94CA1368E080E00E94BC -:105B70009A086091F90262FB662760F988EA91E071 -:105B80000E94CA137DA66CA64091F1025091F202C8 -:105B90006091F3027091F4022FB7F894809157044A -:105BA00090915804A0915904B0915A042FBF841BBE -:105BB000950BA60BB70B8D329140A105B10508F4EA -:105BC0008ACF0E9462086093F1027093F202809380 -:105BD000F3029093F4028091F002811104C080914D -:105BE0006701811142C06DE080E00E949A0860E088 -:105BF0008DEA91E00E94CA136AE080E00E949A0850 -:105C000081E0809367018091EF0290E001968170BE -:105C100099278093EF0221E030E0281B390B40E602 -:105C2000429FC001439F900D11242091EE02222338 -:105C300051F1855C9B4F0E9492064DCF833089F0D5 -:105C4000843009F071CF60E08EE891E003C060E03D -:105C500082E891E00E94CA1367CF60E088E891E093 -:105C6000F9CF60E084E991E0F5CF6AE080E00E943E -:105C70009A0860E08DEA91E00E94CA136BE080E030 -:105C80000E949A08C0CF2091ED02222319F0855876 -:105C90009C4FD1CF85549D4FCECF64E080E00E94D1 -:105CA0009A0860E083EB91E00E94CA1365E080E00F -:105CB0000E949A0860E089EB91E00E94CA1369E0B3 -:105CC00080E00E949A088BEF94E0B5CF80911B038F -:105CD00061E070E081115ACD082F10E02B01082EF1 -:105CE00002C0440C551C0A94E2F7A9014421552135 -:105CF000452B09F448C090911A0390FD46C0829547 -:105D0000880F807680936A0198013695279536959D -:105D1000279520936D01815E80936B0110926E0137 -:105D200024E630E047E050E068E671E088E70E9452 -:105D30008B32892B09F02ACDA80175E0440F551F3D -:105D40007A95E1F780911A0380FD2DC042585B4F90 -:105D500004E610E020E230E060E488E70E94B2321E -:105D6000892B09F013CD0E94F20DC2018095909508 -:105D700040907C0450907D044822592250927D042A -:105D800040927C0403CD8F5FA7CF880F880F880FC8 -:105D900080936A0110926D01895F80936B0183E0AB -:105DA00080936E01BDCFEAEFF2E080E2DF011D9249 -:105DB0008A95E9F7EEE0F2E0F9AFE8AF0AE012E029 -:105DC00099249394A8ADB9AD2D91B9AFA8AFF801BE -:105DD00021908F01240E352E311CC10182589B4F1A -:105DE0001C01E22FF0E0E650FD4F30E020E067E0DC -:105DF000A62EA21AB92C022E01C0BB0C0A94EAF7F7 -:105E0000610190E0D6018D916D018B216A2D691B96 -:105E10006770862E062E000C770BB82F01C0BB0FC3 -:105E20008A94EAF78B2E71956195710967707727CF -:105E300001C086956A95EAF7882A8081882A80823F -:105E40009F5F9830F9F62F5F3F4F3196283031052C -:105E500071F6E2E1F2E028AD39ADE217F30709F09F -:105E6000B1CF04E610E020E230E04AEF52E074CF18 -:105E700045E00E943A0D20912C0330912D03281B00 -:105E8000390B30932D0320932C0345E0602F812F95 -:105E90000E943A0D20912A0330912B03281B390BC5 -:105EA00030932B0320932A036CE273E087E393E0A3 -:105EB0000E941B0D6AE273E088E393E00E941B0DD1 -:105EC00010923A03109239030DCD01979093340349 -:105ED0008093330307CD81608093360384E00E9472 -:105EE000F21384E190E0F2CF809142038F5F8093C0 -:105EF0004203F8CC81E080FF0FC0E0915204F091A2 -:105F00005304309749F082E0809324030480F581A4 -:105F1000E02D84E293E00995109226031092270366 -:105F2000109228031092290386E0E4E2F3E0AEE148 -:105F3000B3E001900D928A95E1F70E94051C9093C1 -:105F40004103809340030E94010F909143038917FE -:105F500031F00E94010F809343030E94B316809199 -:105F60006C04843009F051CB83E08093E900809188 -:105F7000E80082FF4ACB8091E80090E085FF0BC0EB -:105F80000E94F40630E2E32EF12C8E010F5F1F4FCA -:105F90008823E1F091E08091E8008B778093E8001E -:105FA000992309F432CBE981E150E33108F071C063 -:105FB000F0E0ED5AF84C0C9488358091F100D8014E -:105FC0008D938D01B1E0EB1AF10821F38091E80087 -:105FD00085FDF3CF8091E8008B778093E8000E94E5 -:105FE000F406882399F3D6CF1A8289E08B8311C0F7 -:105FF0008A81823009F48FC1833091F1813009F0B8 -:1060000048C00E9462080E948E356B837C838D831A -:106010009E8380916C04843009F0F7CA1091E900E6 -:106020001F709091EC00892F817090FD80E8182BF3 -:1060300082E08093E9008091E80080FF0DC050E08D -:1060400040E060E270E0CE0101960E942507809159 -:10605000E8008E778093E8001F701093E900D5CA9E -:10606000DE011396EFE4F3E081918D9323E0E935AF -:10607000F207D1F7CECF8A81823059F46B817C81CF -:106080008D819E810E948E3586E290E00E94C83507 -:10609000C0CF8FEF8983BDCF4C816B818A810E94F5 -:1060A0008D149827892798279E838D83B2CF0D81E1 -:1060B0001E811027012710278A81EB803EE0E39E96 -:1060C000700111249CE8899FE00CF11C11248C8143 -:1060D00090E0880F991FE80EF91E612FC70187967F -:1060E0000E94C835602FC7018896D0CF0E94111436 -:1060F00090CF8A818138C1F060F4803809F089CF6F -:1061000020E04B8160917904809178040E944D15C4 -:1061100080CF8238E9F0833809F07BCF20E04091CE -:106120007A046C818B81F2CF60E08B810E946416CF -:106130008B81811103C00E9424106BCF8091770462 -:1061400081608093770460E086950E94641661CF39 -:106150008B8180937B045DCF8A81813899F030F404 -:10616000803809F056CF80917A0440CF823891F080 -:10617000833809F04ECF809178048B838091790425 -:106180008C8347CF8091770480FF02C086952ECF05 -:1061900080E02CCF80917B0429CF609177047091AF -:1061A00078048091790490917A040E943B1531CF54 -:1061B00080E18A832ECF81E08A838DE117CFCA8068 -:1061C000DB80DC24CD24DC248E010F5F1F4FEC80AC -:1061D000E00EF12EF11CC6018D519D4F0E151F05CD -:1061E00009F417CFADE1CA16A1E0DA0650F40E9417 -:1061F000B435F8018483BFEFCB1ADB0A0F5F1F4F62 -:10620000EACFD80114961C92F6CF0A811B81102781 -:1062100001271027FE0131966F01EC80E00EF12E70 -:10622000F11CC8018D519D4FE016F10609F4F1CE25 -:106230000D31F1E01F0728F4D60114966C910E94ED -:10624000C835BFEFCB1ADB0A0F5F1F4FEACF0E94A2 -:106250000114DFCE85E0ADCFCA80DB80DC24CD2405 -:10626000DC248E010F5F1F4FEC80E00EF12EF11C3D -:10627000C6018796E016F10609F4CBCEECEBCE16FC -:10628000E2E0DE0658F40E94B435D80114968C93EF -:10629000FFEFCF1ADF0A0F5F1F4FEACFF80114821A -:1062A000F7CF0A811B811027012710279E012F5F3E -:1062B0003F4F6901EC80E00EF12EF11CC80187967A -:1062C000E016F10609F4A5CE0C3B32E0130728F4E2 -:1062D000D60114966C910E94C835BFEFCB1ADB0A29 -:1062E0000F5F1F4FEBCF09BD19BD09B400FEFDCFF5 -:1062F0008091D8008F7D8093D8008091E0008260EB -:106300008093E0008091E00081FDFCCF10925F045B -:106310000E94391075CB86E290E00E94B4351B8252 -:106320001C821D828E8375CE1092B9008CE0809302 -:10633000B80008959F92AF92BF92CF92DF92EF92F2 -:10634000FF920F931F93CF93DF93B82EEB010E9420 -:10635000051C6C01EE24E394F12CC431D10560F0EE -:1063600025E0E22EF12CCF3FDC0731F0CE0164E1D5 -:1063700070E00E9454357B0184EAA82E94E8992E9F -:106380001092BC00A092BC000E94051C8C01809160 -:10639000BC0087FF0DC08091B900887F883039F13B -:1063A0008091B900887F803111F10FEF1FEF09C094 -:1063B0000E94051C801B910B8E159F0540F30EEF6C -:1063C0001FEFCF3FDC07E1F2C6010E94F61B8C17DE -:1063D0009D07B0F2C801DF91CF911F910F91FF90FF -:1063E000EF90DF90CF90BF90AF909F900895B092C4 -:1063F000BB009092BC000E94051C8C018091BC00E7 -:1064000087FF0AC08091B900887F883111F08034FD -:1064100061F610E000E0DECF0E94051C801B910BAE -:106420008E159F0558F3CBCF0F931F93CF93DF9318 -:10643000EB018093BB0084E88093BC000E94051CA4 -:106440008C018091BC0087FF11C02091B900287F8A -:1064500081E090E0283211F490E080E09195819500 -:106460009109DF91CF911F910F910895CF3FDC07E4 -:1064700041F30E94051C801B910B8C179D0708F3AC -:106480008EEF9FEFEECF0F931F93CF93DF93EC012F -:1064900084EC8093BC000E94051C8C018091BC00A0 -:1064A00087FF08C08091BB0090E0DF91CF911F91E2 -:1064B0000F910895CF3FDC0789F30E94051C801BD4 -:1064C000910B8C179D0750F38EEF9FEFEECF0F933C -:1064D0001F93CF93DF93EC0184E88093BC000E946C -:1064E000051C8C018091BC0087FF08C08091BB0017 -:1064F00090E0DF91CF911F910F910895CF3FDC077E -:1065000089F30E94051C801B910B8C179D0750F38B -:106510008EEF9FEFEECFCF92DF92EF92FF920F932D -:106520001F93CF93DF936B018A017901B9010E9418 -:106530009A31E6010C0D1D1DC017D10761F424E945 -:106540002093BC00DF91CF911F910F91FF90EF90AE -:10655000DF90CF90089597FDF2CFB70189910E9407 -:106560001432EACFCF92DF92EF92FF920F931F93F4 -:10657000CF93DF93C62F6A017901B8010E949A3147 -:1065800097FD0CC0B8018C2F0E941432E601EC0C70 -:10659000FD1CCE15DF0511F097FF0CC024E92093F8 -:1065A000BC00DF91CF911F910F91FF90EF90DF9092 -:1065B000CF900895B80189910E941432EACFCF920A -:1065C000DF92EF92FF920F931F93CF93DF93F82EFA -:1065D000E62EEA016901B8010E949A3197FD15C0C3 -:1065E000B8018E2D0E94143297FD0FC0B8018F2D77 -:1065F00081600E949A31F12CE12C21E0C21AD1086D -:10660000EC14FD0400F597FF11C024E92093BC00B1 -:106610001816190614F490E080E0DF91CF911F91D5 -:106620000F91FF90EF90DF90CF900895C8010E94E6 -:10663000433297FD04C0FE01EE0DFF1D80832FEF56 -:10664000E21AF20ADDCF97FDE0CFC8010E9467325F -:1066500097FDDBCFCC0DDD1D8883D7CF84E98093F8 -:10666000BC0008958EE14A9B02C08150E1F74A9B2D -:10667000FECF08955A9880E28A95F1F75A9A0895C4 -:10668000FC013BE03A95F1F798E020E080E031E052 -:1066900040E14A95F1F7880F4A9B02C081602327A9 -:1066A00042E04A95F1F7000040E14A95F1F7915038 -:1066B00079F790E19A95F1F799B132E03A95F1F7CF -:1066C000000040E14A95F1F792FB992790F9922753 -:1066D0002081920F90830895EF92FF920F931F9362 -:1066E000CF93DF930F92CDB7DEB719828C017C0177 -:1066F000E60EF11C0E151F0561F481E099819111E0 -:1067000080E00F90DF91CF911F910F91FF90EF905C -:1067100008950E943233CE0101960E944033F80161 -:1067200081938F01E7CF529A5A9A089552985A9AB4 -:10673000EA9AE9E6F0E080818F7C808308956150D9 -:10674000770B91E001C0990F6A95EAF720E031E0FC -:10675000911108C0222391F05A9A80E28A95F1F7AC -:106760005A980895492F482339F05A9A232740E22E -:106770004A95F1F79695ECCF5A98F9CF5A98EDCF04 -:10678000FF920F931F93CF93DF93EC018C01060FC1 -:10679000111DC017D10731F4DF91CF911F910F91D7 -:1067A000FF900895F9900E943A3368E08F2D0E947F -:1067B0009F33EFCF1F920F920FB60F921124EF92DB -:1067C000FF920F931F932F933F934F935F936F937A -:1067D0007F938F939F93AF93BF93EF93FF93CF9349 -:1067E000DF930F92CDB7DEB719820E943233CE010C -:1067F00001960E944033A82FA695A695A695282F0E -:10680000229525709A2F9570290F922F93702695B7 -:106810002695920F982797708981982B09F075C05B -:10682000A83008F072C080E18A95F1F75A9A529A1E -:10683000B2E0BA95F1F700C05A98EA2EF12CEAE0DE -:10684000AE9FD0011124AF5FBE4F1896ED91FC9121 -:1068500019973097B1F06091F8017091F90116968F -:106860002D913C911797260F371F13968D919C9170 -:106870001497680F791F15964C91159712968C9165 -:1068800009958AE08E9DF0018F9DF00D1124EF5F38 -:10689000FE4F6581662351F02091F8013091F90196 -:1068A00086819781820F931F0E94C0330E943A33E2 -:1068B000F0E1FA95F1F75A9852985A9A80E18A9540 -:1068C000F1F78AE08E9D80018F9D100D11240F5FDE -:1068D0001E4FD80112966C911297662371F1209188 -:1068E000F8013091F90113968D919C91820F931FBD -:1068F0000E946C33D801ED91FC91882311F088E05F -:1069000001C082E080830E9432330F90DF91CF91EB -:10691000FF91EF91BF91AF919F918F917F916F9177 -:106920005F914F913F912F911F910F91FF90EF90A9 -:106930000F900FBE0F901F901895ED91FC91DFCF37 -:106940000F931F93CF93DF93EC0108970CF0A9C02E -:106950008AE08C9FF0018D9FF00D1124EF5FFE4FB8 -:1069600080819181892B09F49CC0F894529A5A989D -:1069700085E08A95F1F700008C2F869585709C2F15 -:106980009570890F982F937086958695890F8E0143 -:1069900093E0000F111F9A95E1F7082B0E943A33FC -:1069A00000C068E0802F0E949F33A0E1AA95F1F714 -:1069B00052985A9A4A9B27C087E090E04A9925C08E -:1069C0008AE08C9F80018D9F100D11240F5F1E4F58 -:1069D000F80165816623A1F12091F8013091F90158 -:1069E00086819781820F931F0E946C33811128C08A -:1069F000529A5A9AD801ED91FC9182E08083789462 -:106A000082E090E016C000C0D5CF0197B9F4529A49 -:106A10005A9A8AE08C9FF0018D9FF00D1124EF5F50 -:106A2000FE4F0190F081E02D81E08083789481E039 -:106A300090E0DF91CF911F910F91089500C0BECFDC -:106A40000E943233B0E2BA95F1F75A98529AE0E1D7 -:106A5000EA95F1F78AE08C9FF0018D9FF00D1124EB -:106A6000EF5FFE4F6281662351F02091F801309173 -:106A7000F90183819481820F931F0E94C0330E9489 -:106A80003A338AE08C9FF0018D9FF00D1124EF5F67 -:106A9000FE4F0190F081E02D1082789490E080E02C -:106AA000C8CF84E090E0C5CFAA1BBB1B51E107C053 -:106AB000AA1FBB1FA617B70710F0A61BB70B881F8E -:106AC000991F5A95A9F780959095BC01CD0108951D -:106AD000991B79E004C0991F961708F0961B881F30 -:106AE0007A95C9F78095089597FB072E16F40094C0 -:106AF00007D077FD09D00E94543507FC05D03EF43D -:106B0000909581959F4F0895709561957F4F089559 -:106B1000EE0FFF1F0590F491E02D09946927962749 -:106B200069277827872778270895FB01DC0102C0B1 -:106B300005900D9241505040D8F70895FB01DC01BB -:106B400004C08D910190801921F441505040C8F744 -:106B5000881B990B0895FB01DC0102C001900D9286 -:106B600041505040D8F70895F999FECF92BD81BDAC -:106B7000F89A992780B50895A6E1B0E044E050E086 -:106B80000C94EE35A8E1B0E042E050E00C94EE3514 -:106B9000262FF999FECF92BD81BDF89A019700B4D6 -:106BA000021639F01FBA20BD0FB6F894FA9AF99A76 -:106BB0000FBE08950396272F0E94C9350E94C8353D -:106BC000252F0E94C935242F0C94C9350196272FF3 -:106BD0000E94C9350C94C835DC01CB01FC01F99940 -:106BE000FECF06C0F2BDE1BDF89A319600B40D9219 -:106BF00041505040B8F708950E943E3608F481E0B5 -:106C00000895E89409C097FB3EF49095809570959F -:106C100061957F4F8F4F9F4F9923A9F0F92F96E9E8 -:106C2000BB279395F695879577956795B795F1115D -:106C3000F8CFFAF4BB0F11F460FF1BC06F5F7F4FFA -:106C40008F4F9F4F16C0882311F096E911C077230C -:106C500021F09EE8872F762F05C0662371F096E815 -:106C6000862F70E060E02AF09A95660F771F881FE4 -:106C7000DAF7880F9695879597F90895990F000888 -:106C8000550FAA0BE0E8FEEF16161706E807F907FE -:106C9000C0F012161306E407F50798F0621B730B99 -:106CA000840B950B39F40A2661F0232B242B252B1A -:106CB00021F408950A2609F4A140A6958FEF811DBD -:106CC000811D08950E9475360C94E6360E94D836D0 -:106CD00038F00E94DF3620F0952311F00C94CF3667 -:106CE0000C94D53611240C941A370E94F73670F3A1 -:106CF000959FC1F3950F50E0551F629FF001729F61 -:106D0000BB27F00DB11D639FAA27F00DB11DAA1F6F -:106D1000649F6627B00DA11D661F829F2227B00DBC -:106D2000A11D621F739FB00DA11D621F839FA00D47 -:106D3000611D221F749F3327A00D611D231F849F97 -:106D4000600D211D822F762F6A2F11249F575040EE -:106D50009AF0F1F088234AF0EE0FFF1FBB1F661F69 -:106D6000771F881F91505040A9F79E3F510580F032 -:106D70000C94CF360C941A375F3FE4F3983ED4F36B -:106D8000869577956795B795F795E7959F5FC1F7D6 -:106D9000FE2B880F911D9695879597F9089597F981 -:106DA0009F6780E870E060E008959FEF80EC0895B1 -:106DB00000240A94161617061806090608950024DA -:106DC0000A9412161306140605060895092E039454 -:106DD000000C11F4882352F0BB0F40F4BF2B11F4C8 -:106DE00060FF04C06F5F7F4F8F4F9F4F089557FD27 -:106DF0009058440F551F59F05F3F71F04795880F29 -:106E000097FB991F61F09F3F79F0879508951216BF -:106E100013061406551FF2CF4695F1DF08C016166B -:106E200017061806991FF1CF86957105610508941C -:106E30000895E894BB2766277727CB0197F9089533 -:106E4000F894FFCF29115111A4115111A4118411EB -:106E5000BC11A411B912C6120D150D151615161573 -:106E600018151615161516150D150D151D151615D3 -:106E700016151D15621CD81CDB1CEF1CF21C051D11 -:106E80000E1D321D781DAA1DBE1D441D671D3F210C -:106E90003F2198219821CA21722172217221E42177 -:106EA000552265226522F42FF82F3B304C305730A5 -:106EB00076307930AC30CD3049304930D830DB30A5 -:0C6EC000DF30053127312A312C315131EF -:106ECC000138020000000100000000380200000040 -:106EDC000501000000380200000001060000003827 -:106EEC000200000001070000003802040800000046 -:106EFC000000003802090C000000000000380201FC -:106F0C001500000000000036323331F7F667669743 -:106F1C00C6343500000000000180005F086D0E4C87 -:106F2C000E480E440EF4F5010021007F22000300F0 -:106F3C004A004A4A01F6F731333236674C4159451B -:106F4C00520042617365200047616D6520005261FB -:106F5C00697365004C6F776572004C4F434B00436F -:106F6C00617073004E756D005363726C00202020AD -:106F7C00202000534F4C415200544D50535400812B -:106F8C008283E200E900EA00B500B600B700CD004C -:106F9C008301CC008A019201940121022302240274 -:106FAC002502260227022A02B300B4006F007000EB -:106FBC000603060806010606AF0200FF01000100E9 -:106FCC0000FFFF0000010001FF000008101818105E -:106FDC000800000102020202020202020202402226 -:0E6FEC007B99017701FC00000C190C390C0098 +:100A7000010101070F0F7F0F7F0F0F7E0F0F7F0FF9 +:100A80007F0F0F07010101000000000000000000BF +:100A90000001010000000000000000000000000054 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B20000000000000000000000000AF00AE09025D +:100B30005B00030100A0FA090400000103010100A9 +:100B40000921110100012240000705810308000A64 +:100B50000904010002030000000921110100012223 +:100B6000220007058203200001070503032000017E +:100B70000904020001030000000921110100012203 +:100B80007B000705840320000A1201000200000018 +:100B90000832FC87120200010200011E0353006F9D +:100BA000006C00610072006900750073005F005303 +:100BB000006F0066006C006500000010034B0065CC +:100BC00000790068006900760065000000040309F0 +:100BD000040011241FBECFEFDAE0DEBFCDBF04B6A4 +:100BE00003FE27C08091700690917106A091720655 +:100BF000B09173068730904BA740B04BD1F4109260 +:100C0000700610927106109272061092730614BE4E +:100C100084B7877F84BF0FB6F894A8958091600051 +:100C2000886180936000109260000FBEE0E0F8E3FE +:100C3000099512E0A0E0B1E0EEEEFDE602C00590FD +:100C40000D92A033B107D9F726E0A0E3B2E001C0CE +:100C50001D92A037B207E1F70E943B290C94B136F0 +:100C60000C940000CF93DF9340916E0650916F0675 +:100C70004E5654409A01205A3F4F21303240C0F026 +:100C800020E032E0241B350B60916C0470916D0400 +:100C9000FC01CA01240F351FC1E0D0E08217930781 +:100CA00050F070936D0460936C04DF91CF910895C0 +:100CB00020E630E0E9CF4491DC01A259BB4F5C91C2 +:100CC000451781F04C93AC01A5E056954795AA9540 +:100CD000E1F7DE0102C0AA0FBB1F4A95E2F7AD01A2 +:100CE0006A2B752B01963196D9CFE8EDF0E0808123 +:100CF0008E7F80831092E2001092DA001092E10061 +:100D0000A0EEB0E08C9181608C9380818F7780839E +:100D100019BCA7EDB0E08C918E7F8C9380818F7E83 +:100D2000808310924E0408952091E4003091E500F4 +:100D300095E6A9012091EC00822F817020FF06C06A +:100D40008091E80080FF06C080E008952091E800CF +:100D500022FD1AC080915C04882389F0853089F0D7 +:100D60008091EB0085FD0FC02091E4003091E500FB +:100D700042175307F9F29150E1F684E0089582E0BA +:100D8000089583E0089581E00895EF92FF920F9314 +:100D90001F93CF937C018B010E949406C82F811171 +:100DA00017C08091E80085FD0BC08091E8008E7728 +:100DB0008093E8000E949406882399F3C82F08C006 +:100DC000F70181917F018093F1000150110949F7EA +:100DD0008C2FCF911F910F91FF90EF9008958091EC +:100DE0005E0487FF13C08091E80082FF06C08091F7 +:100DF000E8008B778093E80004C080915C04811147 +:100E0000F2CF089580915C048823D9F38091E800A3 +:100E100080FFF8CF8091E8008E77ECCF982F9093E9 +:100E2000E900242F762F50E0891731F07091EC0003 +:100E30002091ED005091F00021FD07C09F5F973099 +:100E400071F78093E90081E008953091EB003E7FD7 +:100E50003093EB003091ED003D7F3093ED00309109 +:100E6000EB0031603093EB007093EC002093ED00C9 +:100E70005093F0002091EE0027FDE0CF80E0089530 +:100E8000CF92DF92EF92FF920F931F93CF93DF9356 +:100E9000C8EDD0E088818F7E8883E7EDF0E0808127 +:100EA0008160808384E082BF81E080934E048881EA +:100EB0008E7F888302EE10E0F80110821092DA0033 +:100EC00081EEC82ED12CF601108288818F7788831D +:100ED00088818068888388818F7D888319BC10927F +:100EE0005C0410925D0410925B0410925A0490EE20 +:100EF000E92EF12CF70180818B7F808388818160CE +:100F0000888342E060E080E00E940E07F601808165 +:100F10008E7F8083F80180818160808380818860FA +:100F20008083F70180818E7F8083888180618883C0 +:100F3000DF91CF911F910F91FF90EF90DF90CF90B5 +:100F40000895FC01809164049091650486179707C9 +:100F5000A0F06115710529F49091E8009E779093B7 +:100F6000E80090E06115710551F4911108C080917D +:100F7000E80082FF34C080E00895BC01F2CF809188 +:100F80005C048823C1F18530C1F18091E80083FDC4 +:100F900030C08091E80082FDEACF8091E80080FFB8 +:100FA000E1CF8091F3002091F200382F6115710597 +:100FB00019F02830310558F091E02830310509F05A +:100FC00090E02091E8002E772093E800CBCF81912C +:100FD0008093F100615071092F5F3F4FE7CF8091FF +:100FE0005C04882341F0853041F08091E80083FF64 +:100FF000BECF81E0089582E0089583E008950895CA +:10100000809151040895CF92DF92EF92FF922FB713 +:10101000F894C0904704D0904804E0904904F090C0 +:101020004A042FBFA7019601261B370B480B590B0B +:10103000CA01B901FF90EF90DF90CF9008952FB7CC +:10104000F89460914704709148048091490490910C +:101050004A042FBF08952091440430914504281775 +:10106000390771F09093450480934404E091420461 +:10107000F0914304309721F00084F185E02D09942C +:10108000089520914004309141042817390771F0E8 +:101090009093410480934004E0914204F091430412 +:1010A000309721F00680F781E02D0994089581158D +:1010B00020E59207F8F48115E0E49E0788F589336E +:1010C000910570F48C32910548F48430910580F0DC +:1010D0008E31910518F08897039750F480E00895B9 +:1010E00084369105D9F320F0805E91090897B0F31A +:1010F00081E01BC08115F9E59F0750F4811528E5B3 +:101100009207A0F491558F3F910509F088F7E6CF3B +:101110008115EAE59E0710F390568115904240F73D +:10112000FB019581907F81E0C9F20895FB019581D3 +:10113000907F81E0903291F6F8CF20912F0436E035 +:10114000839FC0011124629F800D911D1124811580 +:1011500022E0920714F090E080E082599B4F909338 +:101160006F0680936E060895FC01680F791F8FEF5C +:1011700091E32191822728E030E087FF09C0880FA2 +:10118000892721503109C9F7E617F70791F7089524 +:10119000880FF7CFFA01811101C0FB0109948091FA +:1011A0006704982F9E7F61F481708260809367044A +:1011B00080916A04813A18F080EA80936A04089565 +:1011C0008831B0F381708661F1CFAF92BF92DF9228 +:1011D000EF92FF920F931F93CF93DF93082F162F59 +:1011E000E901E42FF0E0E556FB4F611110C0E491F6 +:1011F0005E2F4E2F4983E8835A83DF91CF911F9151 +:101200000F91FF90EF90DF90BF90AF900895E62E82 +:10121000F12C4491D42EE42FF0E026E0829FC0010F +:1012200011242FEF30E0B9010E94D834802F90E0D4 +:10123000880F991F55E5569FD001579FB00D112477 +:101240008A1B9B0B982F990F890F5901AE18BF0865 +:10125000AE9ED001AF9EB00DBE9EB00D11245B2F8F +:10126000189F80011124012F11275901A01AB10ADA +:10127000AE9E8001AF9E100DBE9E100D112459012F +:10128000A81AB108AE9CC001AF9C900DBE9C900DF9 +:101290001124892F9927281B390B2E9FC0012F9FBE +:1012A000900D3E9F900D1124E92F62307105A1F041 +:1012B00050F46115710509F49DCF6130710581F01D +:1012C000EB2F512F97CF6430710569F080F06630B5 +:1012D000710509F48FCFF4CFE42F4B2F592F8ACF0C +:1012E000E42F412F87CFEB2F542F492F83CF4B2F44 +:1012F0005D2DE12F7FCF80E0089578940895F894D4 +:10130000E82FE295EF70F0E031A1282F2F7081E0F7 +:1013100090E001C0880F2A95EAF7982F90959323C3 +:1013200091A392A1892B82A30C947D099091D7025D +:1013300092FF06C0282F28712830F9F4877F846037 +:1013400093FF06C0282F28712831F1F4877E84612D +:101350002091D80220FF06C0382F38713830D9F4D8 +:10136000877F816021FF06C0282F28712831D1F4A2 +:10137000877E816194FD877E0895282F2471243013 +:10138000F9F68B7F8860DCCF282F2471243101F798 +:101390008B7E8861DDCF382F3171313019F78E7F28 +:1013A0008860E0CF282F2171213121F78E7E88615E +:1013B000E1CFCF93DF93EC018238910581F1B0F555 +:1013C0008133910509F491C020F58932910509F422 +:1013D00085C08A9709F490C0C11521E5D20708F0AD +:1013E000AAC0C11530E5D30708F0F2C0CF3BD10544 +:1013F00008F089C0C83AD10508F0DFC0C53AD10568 +:1014000008F0D3C0C430D105F8F4C130D105E1F003 +:1014100040C08533910509F45AC0C997E9F6809117 +:10142000D702837089F0C0EED0E00EC0833E9105F4 +:1014300099F170F4803E910501F1823E910561F6CB +:101440008091D70282FD21C0CE01DF91CF91089516 +:10145000863E910561F1873E910571F1843E9105CB +:1014600009F0BACF8091D80281FFEECF8091D702E8 +:10147000C7EED0E084FD0DC0E7CF8091D70280FD9C +:10148000F7C09091D80290FFDFCFC3EED0E084FF89 +:10149000DBCFD0E0C0E0D8CF8091D70282FDEBC097 +:1014A0009091D80290FDBFCF84FFCECFF2CF809134 +:1014B000D70283FDDDCFC8CF8091D70283FDDEC088 +:1014C0009091D80291FFF0CFC4EED0E0BDCF8091D3 +:1014D000D70285FFB9CFC9E2D0E0B6CF8091D7025D +:1014E00085FFB2CFC5E3D0E0AFCF8091D70286FFB2 +:1014F000ABCFCAE2D0E0A8CF8091D70286FFA4CFBD +:10150000C1E3D0E0A1CFC11540E2D40760F4C1151A +:1015100081E0D80708F098CFCE01815E9109079746 +:1015200008F492CFB6CFC11590E4D90708F4B1CF33 +:10153000DF70D06A89CFC11524E5D20778F4C115D0 +:1015400033E5D30708F072C0C11542E5D40708F0AF +:101550005CC0DC2FCC27C16FD06A76CFC1158AE57D +:10156000D80778F4C11599E5D90708F073C0C115FB +:1015700028E5D20708F48DCFDC2FCC27C06FD06AC6 +:1015800063CFCE0190568115904208F082CF8D2F07 +:101590008F710E94960990E0982F882788279F7165 +:1015A0009C012C2BE901D0624FCFC55AD0E0CE531D +:1015B000DE4FC881D0E0D06447CFC85AD0E0CC0F0E +:1015C000DD1FCB53DE4F0990D881C02DD4643CCFB2 +:1015D000CE0164E0969587956A95E1F783702C2F8C +:1015E00026952695237040E2249F90011124382BE4 +:1015F0008C2F8370C1E0D0E002C0CC0FDD1F8A9534 +:10160000E2F7C22BD32BDC681FCFCE018370992762 +:1016100021E030E002C0220F331F8A95E2F7C69521 +:10162000C69580E2C89FE0011124EBCFCE01837004 +:10163000992721E030E002C0220F331F8A95E2F79C +:10164000C695C69590E2C99FE0011124C22BD32B09 +:10165000DA68FACE8C2F8F700E94960934E0D69506 +:10166000C7953A95E1F7CF709C2FEC01D069ECCE8D +:10167000C9E3D0E0E9CEC2EED0E0E6CEC6EED0E0DF +:10168000E3CE0C941F0880914F0490919402892B13 +:1016900090919302892B80933202E0914204F09161 +:1016A0004304309731F00280F381E02D82E392E031 +:1016B000099408958091920290916102981301C05B +:1016C00008958F5F8770FACF27E0929F800D1124D5 +:1016D000982F977086958695869523E0829FF001D6 +:1016E0001124E05CFD4F50E040E080E0219130E0CB +:1016F000092E02C0369527950A94E2F72170332708 +:10170000042E01C0220F0A94EAF7822B4F5F5F4F2D +:101710004330510559F7089527E0929F800D112419 +:10172000982F977041E001C0440F9A95EAF786958B +:101730008695869593E0899FF0011124E05CFD4F2A +:1017400090E080E070E05191DF0111979B01082E3D +:1017500002C0369527950A94E2F721702195252736 +:10176000242325272C9301968330910561F7089552 +:1017700090E080E00E94410890E080E00E942B0809 +:1017800010929402109293020C94430B8093950252 +:101790000C94B80B882341F0809590914F048923D5 +:1017A00080934F040C94430B0895882339F0909153 +:1017B0004F04982B90934F040C94430B0895882367 +:1017C000B1F19CEF980F913A70F4E4E3F2E091915B +:1017D000891303C0DF0111971C9242E0EA33F4073A +:1017E000B1F70C94430B90E2980F983088F487700F +:1017F00021E030E0A90102C0440F551F8A95E2F7AD +:10180000CA01809590914F04892380934F04E9CFBA +:101810009BE5980F933020F490E080E00C94410811 +:10182000885A873120F490E080E00C942B080895CA +:101830000F931F93CF93C82F882309F469C08CEFAF +:101840008C0F813AB0F504E312E08AE392E0F801EC +:101850002191C21701F122E0EA33F207C9F7EFEF55 +:1018600080E0D8019D918D01C91781F0EF3F19F4F7 +:10187000911101C0E82F8F5F863099F7EF3F31F06B +:101880000E2E000CFF0BEE5CFD4FC283CF911F911B +:101890000F910C94430BE4E3F2E02191C21303C0D7 +:1018A000DF0111971C928E179F07B9F70E94430B17 +:1018B000D6CF80E28C0F883068F4C77021E030E02A +:1018C00001C0220FCA95EAF780914F04822B8093C2 +:1018D0004F04DCCFEBE5EC0FE33050F4F0E0EE53D7 +:1018E000FE4F808190E0CF911F910F910C944108A1 +:1018F000C85AC73168F4EC2FF0E0EE0FFF1FEB532E +:10190000FE4F80819181CF911F910F910C942B08F4 +:10191000CF911F910F910895982F92959F7011F07C +:10192000892F94E0282F2695269511F09E5F822F0F +:10193000869509F09F5F892F0895CF93DF93CDB7E8 +:10194000DEB762970FB6F894DEBF0FBECDBF96E04C +:10195000EAE3F3E0DE01179601900D929A95E1F724 +:1019600096E0FE013796DE011D9601900D929A9544 +:10197000E1F798858823E9F0962B9E8786E0FE01A3 +:101980003D96DE01119601900D928A95E1F786E071 +:10199000FE013196AAE3B3E001900D928A95E1F73A +:1019A00062960FB6F894DEBF0FBECDBFDF91CF9128 +:1019B000089560959623E1CF0F931F93CF93DF9304 +:1019C00000D000D0CDB7DEB789836A834B831C82F9 +:1019D00004E610E024E030E0AE014F5F5F4F60E0CE +:1019E00084E10E9436320F900F900F900F90DF919C +:1019F000CF911F910F91089580916F01882329F055 +:101A000047E669E98BE20C94DC0C80913B0247ECE1 +:101A10006BE18823C1F341E265EA89EDF4CFCF920F +:101A2000DF92EF92FF920F931F93CF93DF936C019E +:101A30007B0164E670E088E70E941E31EC0197FDAF +:101A400012C010E000E0F601E00FF11F849164E69F +:101A500070E00E949831EC01892B29F40F5F1F4F31 +:101A60000E151F0581F70E94B232CE01DF91CF9192 +:101A70001F910F91FF90EF90DF90CF90089580918C +:101A80003A0490913B04911103C091E08927089595 +:101A9000882369F062E070E08CE29BE00E940F0D09 +:101AA000892B19F080913A04089510923A0480919C +:101AB0003A04EBCFCF93C0913A0480913B04882342 +:101AC000D1F00E941F086058774C8E4F9F4F609353 +:101AD0003604709337048093380490933904C1110D +:101AE00008C062E070E08AE29BE00E940F0D892B43 +:101AF00029F0C0913A048C2FCF91089581E0809312 +:101B00003A04F7CF80934B0470934D0460934C04D8 +:101B100080915C048430F9F48093E9008FEF909118 +:101B2000E800815095FD06C095ED9A95F1F700000B +:101B30008111F5CF8091E80085FF0DC050E040E0B5 +:101B400063E070E08BE494E00E94C5068091E800B9 +:101B50008E778093E8000895BC0184E00C94820D98 +:101B6000BC0183E00C94820D9C0184E08093E90029 +:101B70009FEF8091E800915085FD06C085ED8A9524 +:101B8000F1F700009111F5CF8091E80085FF0CC0BE +:101B900050E040E066E070E0C9010E94C506809117 +:101BA000E8008E778093E8000895CF93DF93EC01EF +:101BB00081E08093E9008FEF9091E800815095FDDE +:101BC00006C095ED9A95F1F700008111F5CF80914F +:101BD000E80085FF14C050E040E068E070E0CE010E +:101BE0000E94C5068091E8008E778093E80088E027 +:101BF000FE01A2E5B4E001900D928A95E1F7DF9134 +:101C0000CF9108959F92AF92BF92CF92DF92EF92C1 +:101C1000FF920F931F93CF93DF937C015B016A01C7 +:101C20008091D20201E010E08A3010F40AE010E066 +:101C3000C1E0D0E0F894B501C701F6010995982EEE +:101C40000E947D09911004C021960C171D076CF4A9 +:101C5000892DDF91CF911F910F91FF90EF90DF9031 +:101C6000CF90BF90AF909F900895CC9F9001CD9F53 +:101C7000300D300D112490E080E045E34A95F1F7F6 +:101C80000000019682179307C1F7D4CF8091A2027A +:101C9000811110C08091D80080618093D8008AE1C2 +:101CA0008A95F1F700C08091D90080FF0AC081E0D9 +:101CB0008093A20281E09091A202913009F080E02D +:101CC000089582E08093A2020E94750610925C043F +:101CD000F1CF0E94460E882351F0E0914204F0912A +:101CE0004304309721F00190F081E02D099480E0C9 +:101CF00008951F93CF93DF93182FEB010E94180CC8 +:101D00008FE99FE00197F1F700C000002197C1F72C +:101D1000812FDF91CF911F910C94DF0BCF93DF9335 +:101D2000C3EED2E060E0CE010E944C352196C11591 +:101D300084E0D807B9F7DF91CF9108956F927F9231 +:101D40008F929F92AF92BF92CF92DF92EF92FF92CB +:101D50000F931F93CF93DF938EE2C82E8BE0D82E84 +:101D600091ECE92EF12CE701CC58D10936011BC0CA +:101D7000F50185909490692DC8010E944C35682D1D +:101D8000C80101960E944C3582E0A80EB11C0E5F7E +:101D90001F4FC017D10761F78EE0680E711C2E9699 +:101DA000CE15DF0529F08E010E5011095301E0CF49 +:101DB0007E018CE8E80EF11C8CE8C80ED11C8DE782 +:101DC000E81683E0F80679F6DF91CF911F910F9125 +:101DD000FF90EF90DF90CF90BF90AF909F908F904B +:101DE0007F906F900895CF93C82F6FEF811161E2BC +:101DF00083E290E00E944C356FEFC11161E184E213 +:101E000090E00E944C356FEFC11168E285E290E0EE +:101E1000CF910C944C3580E00E94F30E60E086E296 +:101E200090E00E944C350E949E0E0E948E0E81E032 +:101E30000C94F30E0F931F93CF93DF93C42FD0E036 +:101E4000CC0FDD1F2EE0629FC00DD11D11243CE898 +:101E5000839FC00DD11D1124CE0187960E94383575 +:101E6000082F10E0102F0027CE0188960E943835E9 +:101E70009801282BC901DF91CF911F910F910895EF +:101E8000462F853038F47A3028F4673018F4672FFD +:101E90000C941A0F90E080E00895CF92DF92FF92A9 +:101EA0000F931F93CF93DF936C0100916604809191 +:101EB0009502082BC7E0D0E010E0FC2EC8010C2EE4 +:101EC00002C0959587950A94E2F780FD0CC0219792 +:101ED000A0F7F12C8F2DDF91CF911F910F91FF90E3 +:101EE000DF90CF900895B6018C2F0E94400F0E9482 +:101EF000D909019761F3EECFCF93DF93EC010E94F4 +:101F00004D0FBE010E94400FDF91CF910C94D90973 +:101F1000FC01808191810E947C0F292F2F70929566 +:101F20009F7092509E3078F4E92FF0E0ED54F94C18 +:101F30000C940C35803F19F020F4883E20F481E0A9 +:101F40000895843FE1F380E00895883EC0F3813F27 +:101F5000D1F7F5CF822F869586958695089583E2F1 +:101F600090E00E943835813289F484E290E00E944A +:101F70003835813159F485E290E00E94383591E09E +:101F8000883209F090E0892F8170089580E0FCCFBD +:101F90001F93CF93DF93CDB7DEB768970FB6F89452 +:101FA000DEBF0FBECDBF40913A0350913B0360911D +:101FB0003C0370913D0380913E0390913F030E944A +:101FC000332520933A0330933B0360933E03709391 +:101FD0003F03142F119510933C03652F6195609377 +:101FE0003D0386E0EAE3F3E0DE01179601900D92EF +:101FF0008A95E1F786E0FE013796DE0111960190A1 +:102000000D928A95E1F79B858C8520916F012223A3 +:10201000B1F0772761950CF47095072E000C880BB2 +:10202000990B0E94B8352AE939E949E95EE30E9433 +:102030001C360E948035962F812F60E010E01B83B4 +:102040006C839D838E8386E0FE013196DE011D96B2 +:1020500001900D928A95E1F786E0FE013D96DE0142 +:10206000539601900D928A95E1F786E0FE017396F2 +:10207000DE01119601900D928A95E1F786E0FE014E +:102080003196AAE3B3E001900D928A95E1F786E0DC +:10209000EAE3F3E0DE01179601900D928A95E1F7ED +:1020A00086E0E4E3F3E0DE01119601900D928A955B +:1020B000E1F746E050E0BE016F5F7F4FCE0107962B +:1020C0000E942235892B79F0E0914204F09143047B +:1020D000309749F082E080933A030480F581E02D47 +:1020E0008AE393E0099510923C0310923D0310920D +:1020F0003E0310923F0386E0EAE3F3E0A4E3B3E09B +:1021000001900D928A95E1F768960FB6F894DEBFBC +:102110000FBECDBFDF91CF911F9108954F925F9277 +:102120006F927F928F929F92AF92BF92CF92DF92E7 +:10213000EF92FF920F931F93CF93DF93CDB7DEB74C +:10214000CE5DD1090FB6F894DEBF0FBECDBF509063 +:1021500073019091670490FF5DC080904D03909053 +:102160004E038114910409F068C0E0EAF5E09E0195 +:102170002F5F3F4FBE0161527F4FC901A4914A2F8B +:1021800050E0DA01AA0FBB1FA40FB51FA15BBC4F23 +:10219000CD90DD90EC90D901CD92DD92ED929D0134 +:1021A00031966A177B0751F72091720143E0249F13 +:1021B000800D911D1124539A2BB1277F3BB13860BC +:1021C0005FB7F894BC01549E600D711D11248617F1 +:1021D000970709F08EC05FBF8FE594E00197F1F794 +:1021E00000C00000C252DF4F0FB6F894DEBF0FBE32 +:1021F000CDBFDF91CF911F910F91FF90EF90DF90B6 +:10220000CF90BF90AF909F908F907F906F905F9096 +:102210004F900895809174012091750133E0839F60 +:10222000F0011124E15BFC4F821708F096CF118278 +:10223000108212828F5F3396F7CF90FF96CFD12C0A +:10224000C12C66246394712C53E0452E80914C037D +:1022500093010C2C01C0220F0A94EAF7822309F49F +:102260003FC0F601EE0FFF1FE80DF91DE590F49059 +:10227000E114F10409F479CF45E050E0B701CE0153 +:1022800001960E94193509810F3F51F18A81800F13 +:102290009927991F8B34910514F08AE490E05C0132 +:1022A000AA0CBB1C8A0D9B1DDC01A15BBC4F5D0110 +:1022B000049D80011124015B1C4F0A151B0520F0B1 +:1022C000B5E0EB0EF11CD8CF4D81413A08F040EA61 +:1022D00098016C818B810E94E5080D5F1F4FEDCF47 +:1022E000EFEFCE1ADE0AF8E0CF16D10409F0AECF38 +:1022F0003CCFFC014191CF01E8E03BB9000000C0B8 +:1023000047FF2BB9440F000000C000C000C02BB92C +:1023100000C0EA9591F75BCFE7E6F4E080818E7F1D +:102320008083E9E4F3E08281816082832FEF80E79C +:1023300092E0215080409040E1F700C000000C94F2 +:102340008E10E4E3F2E086E0DF011D928A95E9F762 +:102350000C94B80B1F93CF93DF93CDB7DEB7AA973A +:102360000FB6F894DEBF0FBECDBF8EE594E020918E +:10237000F100DC012D93CD01B4E086369B07B9F75F +:1023800080915F04833009F472C0B8F4813009F49D +:1023900049C0823009F4B5C08091E80083FF8DC246 +:1023A00080915E0490915F049A3008F086C2E92F14 +:1023B000F0E0EF53F94C0C940C358A3009F490C0DE +:1023C0008B3009F471C0893039F780915E04813215 +:1023D00019F78091620490916304009711F00297BD +:1023E000D9F68091E800877F8093E8008091E8002B +:1023F00082FF38C09091F3008091F200029731F48F +:102400008091F100813011F0863021F48091F1004B +:10241000809351048091E8008B778093E8000E94BC +:10242000EF06BACF80915E04813A09F0B5CF809172 +:10243000E800877F8093E8008091620490916304B4 +:10244000892B61F468E082E594E070E00E94A107C6 +:102450008091E8008B778093E8009ECF60E090E069 +:1024600080E0F3CF80915C048111C0CF95CF809143 +:102470005E04813A09F090CF8091620490916304E8 +:10248000892B09F089CF8091E800877F8093E8004D +:102490008091E80080FFFCCF809177018093F1006C +:1024A0008091E8008E77B9CF80915E04813209F087 +:1024B00073CF8091620490916304892B09F06CCFF3 +:1024C0008091E800877F8093E8000E94EF0680916A +:1024D00060048093770110924F040E94A1115CCF99 +:1024E00080915E04813209F057CF8091E800877FA8 +:1024F0008093E8000E94EF0680916104809350046D +:102500004BCF80915E04813A09F046CF8091E8007C +:10251000877F8093E8008091E80080FFFCCF809166 +:102520005004BCCF803899F0823809F0C6C1809140 +:1025300062048F70873008F0C0C18093E9008091F9 +:10254000EB0085FB882780F91092E90006C0809196 +:102550005A0490915B04911182609091E800977FFA +:102560009093E8008093F1001092F1008091E800D0 +:102570008E779FC1882309F48DC1823009F09DC1F7 +:1025800080916004811190C1809162048F702FEF5F +:10259000280F263008F091C18093E9002091EB00CC +:1025A00020FF82C1933031F48091EB0080628093F0 +:1025B000EB007AC19091EB0090619093EB0021E0E9 +:1025C00030E001C0220F8A95EAF72093EA001092CA +:1025D000EA008091EB008860EACF81116EC1109112 +:1025E00060041F778091E3008078812B8093E30063 +:1025F0008091E800877F8093E8000E94EF06809139 +:10260000E80080FFFCCF8091E30080688093E300C6 +:1026100082E0111183E080935C044FC180588230C6 +:1026200008F04BC120916004309161042C3DE3E03F +:102630003E07A1F583E08A838AE289834FB7F89445 +:10264000DE01139620E03EE051E2E32FF0E05093EC +:102650005700E49120FF03C0E295EF703F5FEF70F9 +:102660008E2F90E0EA30C0F0C7968D939D932F5F38 +:10267000243159F74FBF8091E800877F8093E800AD +:102680006AE270E0CE0101960E94A1078091E80005 +:102690008B778093E80011C1C096E7CF80916204E8 +:1026A00090916304432F55274330510509F44AC0E4 +:1026B00078F54130510509F47AC08BE590E0EEE2FF +:1026C000FBE04230510509F0F8C02091E800277F77 +:1026D0002093E800209164043091650482179307E9 +:1026E00008F49C0140E02115310509F065C0411155 +:1026F00063C08091E80082FDC9CF80915C0488238B +:1027000029F2853019F28091E80083FFF2CFBECF25 +:102710004132510509F43CC04232510509F0CDC0A7 +:102720008330910508F0C9C0FC01EE0FFF1FEC5D7E +:10273000FD4F0190F081E02D8F5D9D4FDC018C916C +:1027400090E01AC0332721303105D1F02115310531 +:1027500061F02230310509F0B0C0EBE9FBE0E49113 +:102760008E2F90E0EBE9FBE007C0EDECFBE0E4919D +:102770008E2F90E0EDECFBE0009709F49EC0A5CF12 +:10278000EBEBFBE0E4918E2F90E0EBEBFBE0F4CF82 +:102790008330910508F091C0880F991FFC01E65D18 +:1027A000FD4F0190F081E02D89E090E08ECF82E135 +:1027B00090E0E9E8FBE089CF80915C04882309F48C +:1027C00065CF853009F462CF8091E80083FD5ECF4C +:1027D0008091E80082FD8DCF8091E80080FF83CF5B +:1027E0009091F3008091F2002115310519F08830A5 +:1027F000910550F041E0089709F040E08091E80031 +:102800008E778093E8006FCF44914093F10031962A +:10281000215031090196E8CF803809F04EC08091EF +:10282000E800877F8093E80080915D048093F10049 +:102830009DCE811142C0109160041230F0F580915C +:10284000E800877F8093E80010935D040E94EF0604 +:10285000112311F084E005C08091E30087FDFACFD9 +:1028600081E080935C0442E061EC81E00E940E070D +:1028700042E261EC84E00E940E0742E261EC82E0F9 +:102880000E940E0742E260EC83E00E940E078091F6 +:102890005C0413C080916004813079F481E093304E +:1028A00009F080E080935B041092E9008091E800D9 +:1028B000877F8093E8000E94EF068091E80083FF05 +:1028C0000AC08091E800877F8093E8008091EB0048 +:1028D00080628093EB00AA960FB6F894DEBF0FBE1D +:1028E000CDBFDF91CF911F9108951F93CF93DF93B9 +:1028F000162FC0916E06D0916F068A30D1F42091C8 +:102900002F04CE018E569440622F70E00E94D8347E +:10291000281B822F66E00E94EC34C82FC15020F49F +:10292000DF91CF911F91089560E080E20E947514BD +:10293000F5CF8D30E9F4CE56D44020912F04622F8C +:1029400070E0CE010E94D834281B822F9E01280FF0 +:10295000311D2115324018F080E0D0E0C0E0C80FF2 +:10296000D11DC259DB4FD0936F06C0936E06D8CFEE +:1029700096E0FE01A0E3B4E001900D929A95E1F794 +:10298000803E90F186E0FE0111928A95E9F7C091B0 +:102990006E06D0916F06111133C046E050E0BE01C3 +:1029A00080E394E00E9422359E012E563440892B0C +:1029B00091F52A5F3F4F40912F04642F70E0C901C9 +:1029C0000E94D834481B463010F4240F311D2115C5 +:1029D00072E0370710F030E020E022593B4F30938F +:1029E0006F0620936E069CCFF6E08F9FB0011124F6 +:1029F00066517A4F46E050E0CE010E941935C7CFAC +:102A00009E012A5F3F4FFE012E173F0731F2808162 +:102A100080958193F9CFC90145E0969587954A95B0 +:102A2000E1F741E050E0BA0102C0660F771F8A95D6 +:102A3000E2F7CB0160916C0470916D04862B972BAB +:102A4000B9016B5F7F4FE5E076956795EA95E1F711 +:102A500002C0440F551F6A95E2F7842B952B909383 +:102A60006D0480936C04A5CFFF920F931F93CF93B7 +:102A7000DF93EC01F62EFC0101900020E9F78F01B5 +:102A800001501109C017D10730F0DF91CF911F918C +:102A90000F91FF9008956F2D89910E947514F2CFC8 +:102AA000EDE2F4E08083618324E630E042E050E030 +:102AB000BF0184EB0C940F32CF93C82F60E08CE001 +:102AC0000E9450156C2F84E00E94501561E08CE04C +:102AD000CF910C945015CF92DF92EF92FF926B0141 +:102AE0007C010E94CF08B701A60188E090E0FF902A +:102AF000EF90DF90CF900C945E35AF92BF92CF9263 +:102B0000DF92EF92FF920F931F93CF93DF9300D04A +:102B10000F92CDB7DEB7082FF62E142FE22E80913C +:102B2000670480FF4FC0E82FE695AE2FB0E0AB5EA4 +:102B3000BD4F9C91909349038E7F823009F056C01F +:102B4000413A08F040EA9E012F5F3F4F6F2D802FE2 +:102B50000E94E5088091670480FF11C02B813981B4 +:102B60004A81809174019091750153E0859FF00135 +:102B70001124E15BFC4F891798F10E948E1080911F +:102B80006804801308C0809169048F1104C080918B +:102B90006A04811729F080914B03826080934B0374 +:102BA00000936804F092690410936A04EE2051F0D7 +:102BB00060916704709168048091690490916A043F +:102BC0000E946B150F900F900F90DF91CF911F9186 +:102BD0000F91FF90EF90DF90CF90BF90AF9008954E +:102BE0004183308322838F5F3396C5CF923039F68D +:102BF000E2508E2F8170D82EE695F0E0E556FA4F20 +:102C0000A590B490C12CBB2460917601C61608F043 +:102C1000B4CF2C2D30E0A29EC001A39E900DB29E99 +:102C2000900D112470E00E94D834802FD11016C06E +:102C3000860F40917401420F532F511D9A01220FAC +:102C4000331F240F351F215B3C4F412F113A08F0F1 +:102C500040EA6F2D0E94E508C394D6CF861BE9CFCA +:102C6000E7E6F4E0438121E1421B08F440E021E083 +:102C7000628181810C947D15E7E6F4E0438121E1D6 +:102C8000420F08F44FEF21E0628181810C947D15A1 +:102C9000E7E6F4E0628121E1621B08F460E021E0F4 +:102CA000438181810C947D15E7E6F4E0628121E1A6 +:102CB000620F08F46FEF21E0438181810C947D1550 +:102CC000E7E6F4E0818121E04381628188500C9441 +:102CD0007D15E7E6F4E0818121E043816281885F30 +:102CE0000C947D1580916B04882319F0815080939A +:102CF0006B046091670470916804809169049091FD +:102D00006A040C946B1580916B04833018F48F5F08 +:102D100080936B04609167047091680480916904EA +:102D200090916A040C946B159091670490FF27C0F2 +:102D3000917081111DC092609093670480914B0344 +:102D4000816080934B03662351F06091670470911A +:102D500068048091690490916A040E946B1520E0D8 +:102D600040916A0460916904809168040C947D1517 +:102D70008C3010F09661E0CF880F982BDDCF08954E +:102D800021E030E0A90102C0440F551F8A95E2F707 +:102D9000CA0120914C03662391F0822B80934C034F +:102DA00080914B03806180934B0380914A03811192 +:102DB00009C08091670460E086950C949416809514 +:102DC0008223ECCF0895CF93DF93C82FC17082FB8D +:102DD000DD27D0F981FB662760F985E00E94C016E7 +:102DE00061E06C2786E00E94C0166D2F87E0DF91BE +:102DF000CF910C94C0160F931F93CF93C82F61E00F +:102E00008111682F617080E00E94C016C1FB6627A7 +:102E100060F9C11101C060E081E00E94C016C2FBF0 +:102E2000662760F9C11101C060E082E00E94C0160F +:102E3000C3FB662760F9C11101C060E083E00E9416 +:102E4000C016C4FB662760F9C11101C060E084E0D0 +:102E50000E94C0164C2F50E070E060E0DB01CA0118 +:102E6000F4E0B695A79597958795FA95D1F70097D1 +:102E7000A105B10549F1AC01BD0184E08A019B01C6 +:102E8000E2E03695279517950795EA95D1F7011554 +:102E900011052105310519F08E5FB901A80176955C +:102EA000679557954795452B462B472B09F08F5F24 +:102EB0008230D1F158F48823E9F0813059F18C2F18 +:102EC000CF911F910F91089580E0D8CF8330A1F169 +:102ED0008430A9F720E040E56FEF8AED0E947D1570 +:102EE00087E00E945C1580910001882341F31092D5 +:102EF0006F010DC020E040E56FEF82E30E947D1579 +:102F000080910001882399F381E080936F010E94F2 +:102F1000FC0CD5CF20E040E56FEF8CEF0E947D15D3 +:102F200085E40E945C15CBCF20E040E56FEF80E5A3 +:102F30000E947D1585E2F5CF20E040E56FEF86E742 +:102F40000E947D158FE1EDCF0E94FB1680936604F1 +:102F50000C94B80B80916604982F9670963019F4F3 +:102F600088600C94A417877FFCCF21E030E001C07B +:102F7000220F8A95EAF720958091660482230C94AB +:102F8000A41721E030E001C0220F8A95EAF7809172 +:102F90006604822B0C94A417809167048695815057 +:102FA00009F48BE061E00C94941680916704869597 +:102FB0008F5F8C3008F081E061E00C949416809172 +:102FC000670480FF07C0869582588F77893010F498 +:102FD0000C94D51761E082E00C949416E7E6F4E0D7 +:102FE00083E0808311828FEF828380EA838314825F +:102FF000A9E4B3E012968C911297836012968C9399 +:1030000060817181828193810C946B15AB01BC014D +:1030100088E190E00C945E35CF93C82FEEE3F4E0A6 +:10302000982F990F990F990F80818770892B808332 +:10303000EFE3F4E09C2F9295969597708081887FBE +:10304000892B808360913C0470913D0480913E0403 +:1030500090913F040E9406186C2F82E0CF910C944F +:103060005015ECE3F4E089E88083118282818C7F43 +:10307000828360913C0470913D0480913E04909164 +:103080003F040C940618ECE3F4E080818E7F80838B +:1030900060913C0470913D0480913E0490913F0406 +:1030A0000C940618ECE3F4E08081816080836091E9 +:1030B0003C0470913D0480913E0490913F040C9437 +:1030C00006180E94183140E060E080E00C94DC0CAF +:1030D00069EE7EEF90E080E00E946A3560E082E079 +:1030E00090E00E944C3560E083E090E00E944C3517 +:1030F0001092950260E084E090E00E944C3560E020 +:1031000082E290E00E944C3560E085E090E00E9411 +:103110004C3560E086E090E00E944C356FEF87E030 +:1031200090E00E944C3540E050E0BA0188E090E029 +:103130000E945E3560E08DE090E00E944C3540E0FA +:1031400050E0BA0188E190E00E945E3560E087E1DE +:1031500090E00E944C3540E050E0BA018CE190E0F4 +:103160000E945E3570E060E080E290E00E946A3587 +:103170000E94311880E00E94F30E0E940B0F40E085 +:1031800050E0BA018FE090E00E945E3540E050E0F0 +:10319000BA0183E190E00C945E355F926F927F926A +:1031A0008F929F92AF92BF92CF92DF92EF92FF9257 +:1031B0000F931F93CF93DF9300D000D00F92CDB722 +:1031C000DEB77C01FC0183819481892B31F0808101 +:1031D000918189238F3F09F081C60F900F900F9046 +:1031E0000F900F90DF91CF911F910F91FF90EF9073 +:1031F000DF90CF90BF90AF909F908F907F906F9017 +:103200005F9008950E944D0F182F682F89819A8131 +:103210000E948C0B69817A81812F0E94400F8C0162 +:10322000F7018281882361F0F801E65EFC45ED300C +:10323000F10530F4E553F94C0C940C350E9452180A +:10324000D0903C04D0FE1CC08D2D86958370F70174 +:103250009281992309F460C1823090F4B701C801CA +:103260000E945708882361F0D694D694D694809112 +:103270003D0483708295880F807E8D290E945C15A5 +:10328000F7018281882309F41EC6C80182519F4537 +:10329000409708F0DCC58FEF93E00E94383502516B +:1032A00093EEA92E92E0B92E811197CF011138C16A +:1032B0001C821B82662463948AE0582E85010F5F6E +:1032C0001F4FC5010E94383589831A82882309F46B +:1032D00084CF9FEF980F933008F031C18A836982C1 +:1032E00032E0A30EB11CC8010E9438358B838823BD +:1032F00009F473CF8E010F5F1F4FF8012081222345 +:10330000E9F2213009F055C191818281913009F0B3 +:1033100018C10E5F1F4F6AE070E0893311F460E559 +:1033200070E00E94790E13C10E94431889CF8091EA +:103330003C0480FF0DC00E94431860913C047091D2 +:103340003D0480913E0490913F040E94061878CF7E +:103350000E945218F2CF0E94311872CF90913C0413 +:10336000892F86958F5F8370880F997F892B809333 +:103370003C04982F9670963001F7897F80933C0427 +:10338000DCCF90913D04892F8B7F92FF84608093E6 +:103390003D04D3CF80913C04982F969596959695B1 +:1033A00080913D0483708295880F807E892B8C37B5 +:1033B00098F48F5F282F220F220F220F90913C0448 +:1033C0009770922B90933C04829586958370909190 +:1033D0003D049C7F892BDBCF81E0ECCF80913C04C6 +:1033E000982F96959695969580913D048370829539 +:1033F000880F807E892B11F08150DCCF8BE7DACFEC +:1034000030913D04932F96959695969520913E0484 +:10341000822F83708295880F807E892B90E00196A1 +:10342000482F440F440F440F3770342B30933D0422 +:1034300035E0969587953A95E1F783702C7F822B3E +:1034400080933E047ACF30913D04932F96959695C4 +:10345000969520913E04822F83708295880F807EFE +:10346000892B8150990BDCCF80913E0482FF12C0E2 +:103470008B7F80933E0460913C0470913D04809169 +:103480003E0490913F040E94061860E081E00E9493 +:103490005015D6CE846080933E0460913C047091B8 +:1034A0003D0480913E0490913F040E94061860E024 +:1034B0008CE00E94501564E182E00E94501565E0A6 +:1034C00081E00E94501561E08CE0E1CF80913E04E4 +:1034D000982F96959695969580913F048295880FA2 +:1034E000807E892B883720F4865F0E940C18A8CE36 +:1034F00088E7FBCF80913E04982F969596959695F8 +:1035000080913F048295880F807E892B843110F052 +:103510008A50EBCF84E1E9CF882309F4B1CE9ECE67 +:10352000A114F4E0BF0609F458CEC5010E94383555 +:10353000811101C001502FEFA21AB20AB7CE580173 +:10354000D9CE923039F40E5F1F4F0E94180C0F5FD6 +:103550001F4FD3CE933029F40E5F1F4F0E94DF0B15 +:10356000F6CF943019F00F5F1F4FF1CF0E5F1F4F52 +:1035700030E020E0B8016F5F7F4FF8014181805358 +:10358000990B8A30910550F02150310900F38FE9F1 +:103590009FE00197F1F700C00000F6CF529EF001C6 +:1035A000539EF00D11249C012E0F3F1F842F8B0181 +:1035B000E1CFE22FF0E0E75FFD4F7490822F869518 +:1035C0008695869590E0FC01E750FE4FE4902770C9 +:1035D000F12C022E02C0F594E7940A94E2F7E1E0A0 +:1035E000EE22FF24FC01E751FE4FC490D12C022EA5 +:1035F00002C0D594C7940A94E2F7F1E0CF22DD240B +:10360000FC01E752FE4F8490912C02C09594879460 +:103610002A95E2F721E082229924E114F10419F0BD +:1036200081EE0E94180CC114D10419F086EE0E949C +:10363000180C39E36AE070E0731202C060E570E0D4 +:10364000872D0E94790ECD2819F086EE0E94DF0B9F +:10365000EF2819F081EE0E94DF0B892809F477CF5B +:103660006AE070E08CE25DCE81E00E94C11703C089 +:1036700081E00E94B5170F900F900F900F900F9060 +:10368000DF91CF911F910F91FF90EF90DF90CF903E +:10369000BF90AF909F908F907F906F905F900C94B1 +:1036A000AA1782E0E2CF013E110509F4B4C0043E3E +:1036B000110519F0003E110591F5882381F18091E3 +:1036C00066040E948C0C813051F583E30E945C15E6 +:1036D00026C00238FFE51F0709F46AC078F4053FE9 +:1036E000110509F413C1063F110509F411C1043F86 +:1036F0001105A9F461E00E949D0C11C004383FE55A +:10370000130709F48BC008F469C005385FE5150795 +:1037100009F4CAC006389FE5190709F4DDC0F701AE +:1037200092819111FAC180914F0482720A3CFCE5AA +:103730001F0709F4D2C108F028C1053C3CE5130776 +:1037400009F4B7C108F00CC1033C5CE5150709F4A6 +:1037500091C108F0A9C1023C1C4509F43BC1F70125 +:1037600000811181992309F4F2C1C8010E944D0F13 +:10377000D82E682FC8010E948C0BB8018D2D0E9495 +:10378000400F0E94D909182FB82EF70122814581D8 +:10379000342F32953F70892F82958F70C82ED12C8F +:1037A0008C3008F00CC2F601E852F94C0C940C3540 +:1037B000882309F4B4CF81EE0E94180C83EE0E9496 +:1037C000180C8FE40E94180C8FE40E94DF0B83EE2C +:1037D0000E94DF0B81EE0E94DF0BA1CF882309F44A +:1037E0009ECF81EE0E94180C83EE0E94180C80E59B +:1037F0000E94180C80E5E9CF80933F0210933E02AF +:1038000000933D02882321F081E08093EE0287CF70 +:103810001092EE0284CF80933C02F0CF882379F19E +:1038200080913C02882349F080913D020E94DF0B89 +:1038300080EE0E94180C8AE20CC080913F0288231F +:10384000D1F380913D020E94DF0B80EE0E94180CA4 +:103850008CE40F900F900F900F900F90DF91CF910D +:103860001F910F91FF90EF90DF90CF90BF90AF909E +:103870009F908F907F906F905F900C94180C8AE2CD +:103880000E94DF0B8CE40E94DF0B80EE0E94DF0BB6 +:1038900080913C02811105C080913F02882309F488 +:1038A0009CCC80913D02D5CF882309F423CF809111 +:1038B0006F01811104C080910001882339F01092BA +:1038C0006F01109200010E94FC0C29CF81E08093CF +:1038D0006F0180930001F7CF882309F40BCF80910B +:1038E0003B02882349F080EE90E090937101809331 +:1038F000700110923B02E7CF86E690E09093710151 +:103900008093700181E080933B02DDCF62E0F3CED3 +:1039100064E0F1CE882331F081E08093F0021092D0 +:103920006701FDCE1092F002FACE882349F0809113 +:1039300066040E948C0C813019F482E30E945C15AD +:10394000F7018281882309F4B0C2809166040E9445 +:103950008C0C813009F0A9C284E30E945C15A5C2D9 +:10396000073C2CE5120709F4AEC008F4A7C0083CD8 +:103970004CE5140709F4ACC0093C1C4509F0EFCE36 +:1039800040E356E16CE376E179C0043DECE51E07C7 +:10399000A8F40E3CFCE51F0708F01FCC0C3C2CE5FE +:1039A000120709F49FC042E756E163E876E10D3C57 +:1039B0001C4508F463C061E081E046C0053D4CE56C +:1039C000140709F40ACC08F492C00D351D4509F41A +:1039D00004CCC5CE8091670480FF31C08E7F809378 +:1039E0006704609167047091680480916904909104 +:1039F0006A040E946B1580914B03816080934B0396 +:103A00009FEFE0E7F2E09150E040F040E1F700C0C6 +:103A100000000F900F900F900F900F90DF91CF91BB +:103A20001F910F91FF90EF90DF90CF90BF90AF90DC +:103A30009F908F907F906F905F900C948E1081601C +:103A40008093670461E086950F900F900F900F9020 +:103A50000F90DF91CF911F910F91FF90EF90DF902A +:103A6000CF90BF90AF909F908F907F906F905F901E +:103A70000C9494164CEC57E165ED77E10F900F90A4 +:103A80000F900F900F90DF91CF911F910F91FF90AA +:103A9000EF90DF90CF90BF90AF909F908F907F90EE +:103AA0006F905F900C94CA0845ED57E16CEC77E19C +:103AB000E5CF40E656E169E676E1E0CF49E656E13A +:103AC00060E676E1DBCF48E456E164E576E1D6CF07 +:103AD00044E556E168E476E1D1CF4CE356E160E39A +:103AE00076E1CCCF43E856E162E776E1C7CF0F90AD +:103AF0000F900F900F900F90DF91CF911F910F912A +:103B0000FF90EF90DF90CF90BF90AF909F908F90FD +:103B10007F906F905F900C94DF170E3D1C4509F06D +:103B20001ECE0F900F900F900F900F90DF91CF91BE +:103B30001F910F91FF90EF90DF90CF90BF90AF90CB +:103B40009F908F907F906F905F900C946818C80141 +:103B50000E94640BD82E11CE092F0F70907F11F0A8 +:103B60000295007F812F2223C9F0002369F090E2A3 +:103B7000910F983010F011110BC080914F04082B59 +:103B800000934F040E94430B812F0E94180C17C012 +:103B900080919402082B00939402F4CF0E94DF0BD3 +:103BA000002369F00095105E183010F0B11027C0A6 +:103BB00080914F04082300934F040E94430B98E028 +:103BC000C91AD108E4E0CE16D10408F006CB0E9451 +:103BD000690E0F900F900F900F900F90DF91CF9183 +:103BE0001F910F91FF90EF90DF90CF90BF90AF901B +:103BF0009F908F907F906F905F900C94E3168091D0 +:103C00009402082300939402D8CF892F8F70907F5D +:103C1000903211F08295807FF1E0BF120CC0222318 +:103C200029F0333060F60E94D50BC9CF323038F618 +:103C30000E94CA0BC4CF222341F03323A1F340FFDB +:103C4000A3CF4F70F7014583EECF332389F31933A8 +:103C500009F0F5C0FFEF27EE33E0F150204030408F +:103C6000E1F700C00000812F0E94DF0BA8CF892F51 +:103C700086958695837061F0813009F0A0CF812F01 +:103C80009370211102C090E080E00E942B0897CF32 +:103C9000812F9370211102C090E080E00E944108C2 +:103CA0008ECF892F8370A1F5211189CF812F829525 +:103CB00086958770880F880F412F4F70082E01C09E +:103CC000440F0A94EAF7212F207114FF07C02FE058 +:103CD00030E001C0220F8A95EAF7209596959695D7 +:103CE0009370923081F0822F842B933030F4809146 +:103CF0009502913029F0242B82230E94C60B5FCFBE +:103D0000842B822BFACF242B809195028227F5CF2A +:103D10008695222311F0892F8170882309F44FCFD3 +:103D2000812F829586958770880F880F412F4F705D +:103D3000082E01C0440F0A94EAF7212F207114FFC6 +:103D400007C02FE030E001C0220F8A95EAF72095E6 +:103D5000969596959370923081F0822F842B9330B4 +:103D600030F480916604913029F0242B82230E9444 +:103D7000A41725CF842B822BFACF242B80916604A5 +:103D80008227F5CF092F0F70222329F0802F0E9460 +:103D9000C117812F48CF812F0E94CA0B802F0E940C +:103DA000B5170DCF812FE1EF1E1789F1E11750F004 +:103DB000F0EF1F17B9F02223B1F13111E5CE892FB1 +:103DC0008F7129C042EF141749F153EF1513F3CF48 +:103DD00080E0222361F29F7181E001C0880F9A95F3 +:103DE000EAF7C5CF222379F0323008F0E8CE292F48 +:103DF0002F7181E090E001C0880F2A95EAF7909139 +:103E000066048927B4CF333008F0D9CEF0CF892F9C +:103E10008F71222321F20E94C117D1CE892F8F7179 +:103E20002223C9F3BCCF332379F0893341F48FEFD8 +:103E300097EEE3E081509040E040E1F712CF8FE34E +:103E40009CE90197F1F70DCF892F8F71A8CF003131 +:103E5000FFE51F0709F408CC01312FE5120709F42B +:103E600020CC0E941F086093F5027093F6028093A5 +:103E7000F7029093F802F7018281053E110509F4DB +:103E8000BBCC08F026CC0C32110509F443CD08F068 +:103E90000ACC0A30110509F448CD0531110509F4A1 +:103EA0004FCD0930110509F03ACCF7018281882302 +:103EB00009F435CC809166040E948C0C813009F0A5 +:103EC0002ECC81E303CC00313FE5130709F4D0CBBE +:103ED00001314FE5140779F682E0CBCB85E0DE01B6 +:103EE000119601900D928A95E1F7F701228189815F +:103EF0009A81211187C90E94640B182F8BC91F93C7 +:103F0000CF93DF9380916002807FA9F480915D025E +:103F1000882389F080919202D091610260915B02C6 +:103F200070915C02A0915E02B0915F02C62FC72320 +:103F300016E0D81304C0DF91CF911F91089590E04F +:103F4000109711F0CF3F19F401968770F2CF189FA8 +:103F50009001199F300D1124F901EE59FD4F418157 +:103F60004713F2CF40814613EFCF42814111ECCF8E +:103F7000438154814A1B5B0B403A510528F78091DD +:103F800060028F70806180936002F901E959FD4FF2 +:103F900080818F70806180838BE592E00E94CD18D4 +:103FA000DF91CF911F910C945A0BAF92BF92CF9299 +:103FB000DF92EF92FF920F931F93CF93DF93CDB7D2 +:103FC000DEB761970FB6F894DEBF0FBECDBF8C0190 +:103FD00085E0F801DE011D9601900D928A95E1F7CA +:103FE000F801E2808BE5A82E82E0B82E60915E0297 +:103FF00070915F026115710509F432C190915B0205 +:1040000040915C02892F84238F3F09F429C12081CC +:104010003181C380D480F0905D02F601E61BF70B7E +:10402000FF2009F4E8C080916002582F507FE03AE9 +:10403000F10508F0ABC0511177C0FE2C431321C02D +:1040400092131FC0E1101DC08F70806180936002C9 +:10405000C5010E94CD1880916002F80185838F2DE3 +:1040600061960FB6F894DEBF0FBECDBFDF91CF9142 +:104070001F910F91FF90EF90DF90CF90BF90AF9086 +:104080000895CD2829F0822F83238F3F09F003C1A3 +:1040900080E0F82FF170DF2E80FF3CC0809192020B +:1040A0004091610256E0841315C02D873E878D85AF +:1040B0009E850E947C0F292F22952F702230F0F0D0 +:1040C000243018F59F70F1F0F8019581907FD1F4BC +:1040D000D12C1EC090E0589FF001599FF00D112483 +:1040E000EE59FD4F6181361306C06081261303C06F +:1040F0006281E6120FC001968770D5CF9F7011F0D4 +:10410000882331F3805E883018F3C8010E94CD18EF +:10411000FD2CA5CFEE2009F4A2CF80916002816032 +:1041200080936002F12C9BCF431306C0921304C00E +:10413000F801EE2009F479C0C8010E94880F882395 +:1041400009F1EE20F9F080916002803270F0209148 +:104150005B0230915C0238872F831986DB86CA8622 +:104160008C87CE0107960E94CD1886E0F801ABE55A +:10417000B2E001900D928A95E1F70E947F1FFF2423 +:10418000F3946DCFC8010E94CD18F9CF51110AC028 +:104190008BE592E00E94CD1886E0F50111928A9598 +:1041A000E9F7C0CF43130FC092130DC0E1100BC04D +:1041B000F8018583C8010E94CD1886E0F5011192AF +:1041C0008A95E9F74CCFC8010E94880F8823D1F265 +:1041D000EE20C1F280916002803238F220915B02C1 +:1041E00030915C023A8329831B82DD82CC828E83EC +:1041F000CE010196B8CFE03AF105F8F6FE2CEE209C +:1042000009F243131FC092131DC08091600280FD0C +:1042100010C0982F907F69F0F8018583903F31F0AE +:10422000982F907F905F8F70892B8583C8010E94A3 +:10423000CD1886E0F801ABE5B2E001900D928A95C9 +:10424000E1F70DCFC8010E94880F81118ECF8091B8 +:104250006002816080936002C8010E94CD18FFCE89 +:10426000EE2009F48FCFC8010E94880FF82E882312 +:1042700009F488CF86E0F801ABE5B2E001900D9239 +:104280008A95E1F780915B0290915C020E947C0F1D +:104290000E947F1FE4CE81E08E25FBCE1F93CF933B +:1042A000DF93CDB7DEB767970FB6F894DEBF0FBECA +:1042B000CDBF4B8B5C8B6D8B7E8B8F8B6111109286 +:1042C00094021A8A198A85E0FE017396DE011D9612 +:1042D00001900D928A95E1F786E0FE013D96DE01A0 +:1042E000179601900D928A95E1F7CE0107960E94EC +:1042F000D51F882389F016E0809192029091610287 +:1043000089134BC067960FB6F894DEBF0FBECDBFC2 +:10431000DF91CF911F91089586E0FE013796DE016F +:10432000119601900D928A95E1F78A859B85892BDC +:1043300011F38F81988589238F3FE9F220916102E3 +:1043400030E0C90101968770992740919202481781 +:10435000190681F410924F040E94A111109261027B +:104360001092920286E0EBE5F2E0DF011D928A9561 +:10437000E9F7C1CF96E0929FD001939FB00D112431 +:10438000AE59BD4FFE01319601900D929A95E1F71D +:10439000809361020E945A0BAECF819FC00111240D +:1043A0008E599D4F0E94D51F882309F4ABCF809171 +:1043B000920290E0019687709927809392029CCF99 +:1043C0000F931F93CF93DF9300D000D0CDB7DEB70C +:1043D0006091C6027091C7028091C8029091C90293 +:1043E0000E940308643671058105910588F10E94D9 +:1043F000460E882379F10E941F086E5F7F4F8F4F12 +:104400009F4F69837A838B839C8380912C01909149 +:104410002D0180559D4F40912B0150E045305105B5 +:1044200010F044E050E0BE016F5F7F4F0E942F35D7 +:1044300084E090E00E942434892BD9F40E941F0864 +:104440006093C6027093C7028093C8029093C9021A +:1044500081E010C00E941F080091D3021091D40285 +:104460002091D5023091D602600F711F821F931FD9 +:10447000C4CF80E00F900F900F900F90DF91CF91FD +:104480001F910F910895BF92CF92DF92EF92FF920A +:104490000F931F93CF93DF93B82EEB01F42E690196 +:1044A000688179818A819B810E9403086436710545 +:1044B0008105910510F4FF2019F1EB2C0B2C000C59 +:1044C000FF088B2D9AE08902F0011124EF5FFE4F67 +:1044D0008381948180559D4F428150E004171507D8 +:1044E00008F4A801B6010E942F35C7010E942434A8 +:1044F000892B89F40E941F08688379838A839B83B0 +:1045000081E0DF91CF911F910F91FF90EF90DF90AD +:10451000CF90BF90089580E0F4CF0F931F93CF9377 +:10452000DF930F92CDB7DEB780913A048983209153 +:10453000C50290E041E02817190609F440E001E0C7 +:1045400010E09E012F5F3F4F6EEC72E086E00E940C +:1045500043220F90DF91CF911F910F9108950F93F8 +:104560001F93CF93DF93CDB7DEB729970FB6F8949B +:10457000DEBF0FBECDBF85E0E7E6F4E0DE011196B9 +:1045800001900D928A95E1F78091490390914A0339 +:10459000A0914B03B0914C038E839F83A887B9876A +:1045A00041E08885811101C040E009E010E09E01F2 +:1045B0002F5F3F4F6AEC72E085E00E944322811139 +:1045C00010924B0329960FB6F894DEBF0FBECDBFF5 +:1045D000DF91CF911F910F9108956F927F928F92EB +:1045E0009F92AF92BF92CF92DF92EF92FF920F9382 +:1045F0001F93CF93DF930F92CDB7DEB7862E5A016C +:104600006901682E880F7708C3010E942434892B22 +:1046100009F07BC08AE0869DF001879DF00D112492 +:10462000EF5FFE4F458150E04115510511F041E02B +:1046300050E08AE0869DF001879DF00D1124EF5F28 +:10464000FE4F6681778160557D4FCE0101960E94B5 +:104650002F35F50160817181828193810E94030869 +:10466000643671058105910540F4B701C8010E94C7 +:10467000B4089981891709F44FC0082C000C9908D7 +:10468000C4010E942434892B91F0B12C8B2D0F9002 +:10469000DF91CF911F910F91FF90EF90DF90CF901E +:1046A000BF90AF909F908F907F906F9008958AE019 +:1046B000889DF001899DF00D1124EF5FFE4F45812B +:1046C00050E0E416F50608F4A7018AE0889DF001A1 +:1046D000899DF00D1124EF5FFE4F66817781605553 +:1046E0007D4FC6010E942F35B701C8010E94B40852 +:1046F00099818913CACF0E941F08F50160837183D5 +:1047000082839383BB24B394C1CFB12CA701B8019A +:10471000C6010E942F35BACFBB24B394F7CFCF92F6 +:10472000DF92EF92FF920F931F93CF93DF9300D00E +:1047300000D00F92CDB7DEB76B0185E0E82EF12CEB +:1047400001EB12E09E012F5F3F4F48EA52E061E02B +:1047500080E00E94ED22882349F095E0FE01319629 +:10476000A3EAB2E001900D929A95E1F795E0E3EAB1 +:10477000F2E0D60101900D929A95E1F70F900F901B +:104780000F900F900F90DF91CF911F910F91FF909D +:10479000EF90DF90CF90089590E080E00E94463542 +:1047A000893E9E4F11F40C94AF0F80E008951F9244 +:1047B0000F920FB60F9211242F933F934F935F9355 +:1047C0006F937F938F939F93AF93BF93CF93DF9319 +:1047D000EF93FF93D091E900DF708091EC00C82F38 +:1047E000C17080FDC0E81092E9008091F000877FE1 +:1047F0008093F00078940E94AA111092E9008091B1 +:10480000F00088608093F000CD2BCF70C093E9005A +:10481000FF91EF91DF91CF91BF91AF919F918F91D8 +:104820007F916F915F914F913F912F910F900FBEAC +:104830000F901F9018951F920F920FB60F92112490 +:104840002F933F934F935F936F937F938F939F9398 +:10485000AF93BF93EF93FF938091E10082FF09C074 +:104860008091E20082FF05C08091E1008B7F809300 +:10487000E1008091DA0080FF24C08091D80080FFA1 +:1048800020C08091DA008E7F8093DA008091D90079 +:1048900080FF9DC080E189BD82E189BD09B400FE31 +:1048A000FDCF81E080935C0480914E04811109C0AA +:1048B0000E9475060E9440078091E2008460809308 +:1048C000E2008091E10080FF17C08091E20080FF4C +:1048D00013C08091E2008E7F8093E2008091E2001D +:1048E00080618093E2008091D80080628093D8003C +:1048F00019BC85E080935C048091E10084FF2BC0AB +:104900008091E20084FF27C080E189BD82E189BDFA +:1049100089B5982F917080FFFBCF8091D8008F7D53 +:104920008093D8008091E1008F7E8093E100809198 +:10493000E2008F7E8093E2008091E20081608093AC +:10494000E20080915D04882309F447C084E08093ED +:104950005C0480915C048091E10083FF27C080911A +:10496000E20083FF23C08091E100877F8093E10014 +:1049700082E080935C0410925D048091E1008E7F60 +:104980008093E1008091E2008E7F8093E20080912D +:10499000E20080618093E20042E060E080E00E94FB +:1049A0000E078091F00088608093F000FF91EF91F6 +:1049B000BF91AF919F918F917F916F915F914F9137 +:1049C0003F912F910F900FBE0F901F90189519BC1B +:1049D00010925C0410924E0474CF8091E30087FD26 +:1049E00093E090935C04B5CF78941F921FB61F920A +:1049F00011248F939F93AF93BF938091470490911D +:104A00004804A0914904B0914A040196A11DB11D2A +:104A10008093470490934804A0934904B0934A04B8 +:104A2000BF91AF919F918F911F901FBE1F901895BE +:104A30009C014FB7F8948091470490914804A0914D +:104A40004904B0914A044FBF821B930B08952FB7BE +:104A5000F8948091470490914804A0914904B09142 +:104A60004A042FBF0895AF92BF92DF92EF92FF9258 +:104A70000F931F93CF93DF93CDB7DEB761970FB638 +:104A8000F894DEBF0FBECDBF4C87888B998BE52E87 +:104A9000D62EF72E5E0127E0A20EB11C85E0F501AF +:104AA00011928A95E9F7809148038A3008F095C001 +:104AB00080914603909147030E941825089708F4B7 +:104AC0008CC004E610E025E030E0A50164E084E15C +:104AD0000E946332892B09F0DEC0109248038B8557 +:104AE00087FDD1C0E894E0F880914403909145039C +:104AF000009709F0C2C08F819885891708F091C08E +:104B0000981B892F41E02091700130917101889F9D +:104B1000C001112455E0589FF001599FF00D112458 +:104B2000E29FB001E39F700DF29F700D1124660F9C +:104B3000672F661F770B7195442319F07195619566 +:104B400071098091420390914303680F791F898511 +:104B50009A85891708F068C0981B892F41E0889FC3 +:104B6000C001112455E0589FF001599FF00D112408 +:104B7000E29FC001E39F900DF29F900D1124880FDA +:104B8000892F881F990B9195442319F09195819550 +:104B900091092091400330914103820F931F6038A7 +:104BA00071050CF444C06F5771097093430360930F +:104BB00042033FE7D32E803891050CF44BC08F574A +:104BC000910990934103809340039FE7F92E0E943F +:104BD00027259093470380934603ED86DE86FF8664 +:104BE00086E0FE013C96DE01119601900D928A95B9 +:104BF000E1F729813A814B815C816D817E8180E082 +:104C000090E061960FB6F894DEBF0FBECDBFDF9186 +:104C1000CF911F910F91FF90EF90DF90BF90AF90D9 +:104C20000895891B40E06FCF891B40E098CF613821 +:104C3000FFEF7F074CF461587F4F709343036093FD +:104C4000420321E8D22EB7CFD62E10924303109202 +:104C50004203B1CF81382FEF92074CF481589F4F18 +:104C6000909341038093400381E8F82EB0CFF82E53 +:104C70001092410310924003AACF019790934503ED +:104C800080934403A4CF6894E0F884E00E945C150C +:104C900084E190E0F3CF809148038F5F80934803D5 +:104CA00096CF9F92AF92BF92CF92DF92EF92FF92F8 +:104CB0000F931F93CF93DF93CDB7DEB764970FB6F3 +:104CC000F894DEBF0FBECDBF8E010F5F1F4F8AE08D +:104CD000D8011D928A95E9F79EE4C92E91E0D92E5C +:104CE000F12CE12CAA24A394B12CF60181916F013F +:104CF0008F3F09F444C0F894E82FE295EF70F0E09C +:104D000021A18F70A50102C0440F551F8A95E2F7BB +:104D1000CA01922F982B91A392A18095892382A3F7 +:104D20000E947D0900C0E7E4F1E0912C31E021917F +:104D30002F3F09F478C0A22FA295AF70B0E09096F3 +:104D40008C9190E02F7002C0959587952A95E2F797 +:104D500080FD69C0832F982A330F51E0EE34F507A8 +:104D600031F7F601319780818F3F11F00E947F0962 +:104D700080EA8A95F1F7F801EE0DFF1D9082AFEF02 +:104D8000EA1AFA0AB5E0EB16F10409F0AECF4AE0F0 +:104D900050E0B80189ED92E00E9422357C01892B18 +:104DA00041F08AE0F801A9EDB2E001900D928A95F8 +:104DB000E1F71091E402E114F104B9F181E080938C +:104DC00098020E94272590939702809396028091E3 +:104DD0009602909197020E941825069770F0A9ED0F +:104DE000B2E0E12FF0E0E65DFC4F8D91819322E08F +:104DF000AE3DB207D1F71092980281E090E0EF2823 +:104E0000C1F064960FB6F894DEBF0FBECDBFDF9140 +:104E1000CF911F910F91FF90EF90DF90CF90BF90B7 +:104E2000AF909F90089580E096CF80919802811175 +:104E3000CECF0E94460ED82EE091E402882309F4DA +:104E4000C9C07E0140E1E40EF11C85E0D7011D924E +:104E50008A95E9F70E2F10E0065D1C4F8091D20273 +:104E60008A3008F080C04FE853E2B701C8010E94C1 +:104E7000020E882309F49AC04EEB58E2B701C8012C +:104E80000E94020E882309F491C040EE51E2B7015E +:104E9000C8010E94020E882309F488C04FEA52E23A +:104EA000B701C8010E94020E882309F47FC04DE8B3 +:104EB00052E2B701C8010E94020E882309F476C0AD +:104EC0001092D2028091E30290E045E050E0B701F9 +:104ED000865D9C4F0E94223521E02093A102892B00 +:104EE00009F057C0D12C8BE9E82E82E0F82E10E0B3 +:104EF00000E0D7018D917D018823D1F08695F801DE +:104F000009F465C0E950FE4F808191819C878B87B1 +:104F10001D860E9427258160782F9F878E87F70145 +:104F2000319710824B855C856D858F850E944E215F +:104F30000E5F1F4F04301105E1F66091F50270918C +:104F4000F6028091F7029091F8020E940308613600 +:104F50007A4E8105910528F040E060E080E00E94F3 +:104F6000DC0C8D2D4ECF8091990290919A020E9477 +:104F70001825843F914008F076CF8091A1028823C4 +:104F800009F4B0CF85E0F70111928A95E9F7109204 +:104F9000A102A091E302B0E0A65DBC4F85E0FE0156 +:104FA000709601900D928A95E1F79DCF8091D20283 +:104FB0008F3F31F08F5F8093D2028A3008F482CF26 +:104FC0000E94272590939A0280939902D6CFED50A4 +:104FD000FE4F9ACFF0E0E65DFC4FF89485E0A1EB40 +:104FE000B2E001900D928A95E1F765E070E081EB07 +:104FF00092E00E94B4088093B0020E947D09F89468 +:10500000E091EC02F0E0E751FD4F80818B878093C7 +:10501000B70261E070E0CE010B960E94B408809365 +:10502000B6020E947D09F894C090B802D090B902EF +:10503000E090BA02F090BB0280919D0290919E0296 +:10504000A0919F02B091A002C816D906EA06FB06FD +:10505000D1F0C0929D02D0929E02E0929F02F09207 +:10506000A0020E94460E81110EC00E941F08C61A9F +:10507000D70AE80AF90AC092D302D092D402E09289 +:10508000D502F092D6020E947D09F8948091C30265 +:10509000882321F184FF04C09091C40290934C03B3 +:1050A00080FF0DC08091BC0280FF25C090916704F5 +:1050B00091609093670460E086950E9494168091B9 +:1050C000C30281FF09C020E04091BF026091BE028F +:1050D0008091BD020E947D151092C3020E947D093D +:1050E000F8948091C502882349F00E945A0D0E94CD +:1050F0007D0980E086CE0E948C11E1CF0E943F0D99 +:10510000F6CFEF92FF920F931F93CF93DF9300D0D0 +:1051100000D00F92CDB7DEB7162FE82EF12CC701C5 +:10512000880F991F662339F189509E4FFC018081B9 +:1051300091819A83898301E00B830E9427258160F6 +:10514000782F9D838C83F701E556FD4F0127110FC2 +:10515000102B108349815A816B818D810F900F90A4 +:105160000F900F900F90DF91CF911F910F91FF90B3 +:10517000EF900C944E218D509E4FD8CFCF92DF925E +:10518000EF92FF920F931F93CF93DF930F92CDB7C0 +:10519000DEB7EE24E394F12C07EB12E09E012F5FC3 +:1051A0003F4F4CEA52E063E082E00E94ED22082F7C +:1051B000882321F1C090E6028C2D90E09C012751BC +:1051C0003D4F79011981F9018081181BD12E80E0B2 +:1051D0000AC0DA94F70180818F5F808360E08C2DB4 +:1051E0000E948128802F1D14A4F3912F17FD90E0B9 +:1051F000191B11110EC081110E94410B802F0F90BD +:10520000DF91CF911F910F91FF90EF90DF90CF90A2 +:1052100008951F5FF70180818150808361E08C2DAC +:105220000E948128802FE5CF1F921FB61F92112464 +:105230008F939F93AF93BF9380914604811113C0C6 +:105240008091470490914804A0914904B0914A0488 +:105250004196A11DB11D8093470490934804A093EB +:105260004904B0934A04BF91AF919F918F911F90D1 +:105270001FBE1F901895CDB7DEB7E0970FB6F89414 +:10528000DEBF0FBECDBF84B7877F84BF0FB6F89453 +:10529000A895809160008861809360001092600002 +:1052A0000FBE80E890E00FB6F89480936100909371 +:1052B00061000FBE85B7806885BF85B7806885BFF0 +:1052C0008BE799E090933102809330020E9475063B +:1052D0000E9440078091E20084608093E20078940D +:1052E00080915C048823A1F01091E9001F709091D7 +:1052F000EC00892F817090FD80E8182B1092E90056 +:105300008091E80083FD0E94AA111F701093E900AC +:1053100082E084BD93E095BD9AEF97BD80936E00C7 +:105320001092D3021092D4021092D5021092D6029B +:105330000E94AF0F811102C00E940B0F0E94460E07 +:105340008093580180915801882309F4C9C01092B4 +:10535000720185E2809373010E94460E81110E94C2 +:1053600017338091580181112FC0FE01359686E0D8 +:10537000DF011D928A95E9F786E6898387E98A83AA +:1053800086EC8B8384E38C8385E38D833497AEE452 +:10539000B1E0CE010B9621912D938E179F07D9F77F +:1053A00087E0E8E7F1E0DE01919601900D928A95A1 +:1053B000E1F7FE01B196A7E4B1E0CE018896219114 +:1053C0002D938E179F07D9F78091580195E0811191 +:1053D00090E09093E40285E0891B8093E3020EE461 +:1053E00011E083E5E82E81E0F82EF80181918F012C +:1053F0008F3F11F00E947F09E016F106B1F707E434 +:1054000011E0BEE4EB2EB1E0FB2ED8018D918D01B1 +:105410008F3F11F00E947F09E016F106B1F78AE094 +:10542000EAE2F3E0DF01282F1D922A95E9F7E9ED82 +:10543000F2E0DF011D928A95E9F70E94CC238111E9 +:1054400002C00E94681882E090E00E943835809384 +:105450001F0384E090E00E943835182F82E290E02C +:105460000E943835982F812F9093D8028093D702CD +:105470000E945126EFE7FBEB3197F1F700C00000E7 +:105480000E94512680912A0380FF2EC06FEF7FEF8C +:1054900090E080E00E946A3581E08093E00080E245 +:1054A0008093D8001092C9008FE19EE40197F1F734 +:1054B00000C0000087E090EBDC01809370069093C1 +:1054C0007106A0937206B093730688E19CE00FB654 +:1054D000F894A895809360000FBE90936000FFCF72 +:1054E00085E28093720136CF83E090E00E943835E8 +:1054F0000E94C60B809166040E94FB160E94CC237A +:10550000811102C00E94681888E190E00E94403535 +:1055100060933C0470933D0480933E0490933F0459 +:10552000672B682B692B11F40E9431180E941831E7 +:1055300067E081E00E94501565E586E10E94501504 +:1055400063E687E10E94501560EA8AE10E945015E7 +:1055500069E98BE10E94501565EF8CE10E945015BE +:1055600060EA8DE10E94501560E38EE10E945015C3 +:1055700066E083E00E94501561E08CE00E945015C7 +:1055800060E081E00E94501560E08CE00E945015C0 +:105590006FE084E00E94501561E08CE00E9450159D +:1055A0000E94460E811102C00E941A3383E080934C +:1055B0001A0380E280932F040E9418316DE070E09E +:1055C0008CE992E00E940F0D892BE9F580911A0376 +:1055D00063E070E081FD0BC289E992E00E940F0D4B +:1055E000892B89F56DE070E089E892E00E940F0D4B +:1055F000892B49F50E941F086058774C8E4F9F4FAA +:105600006093360470933704809338049093390480 +:10561000EEE6F4E080E092E0DF019C011D92215073 +:105620003040E1F7F0936F06E0936E068FEF9FEF47 +:1056300090936D0480936C0481E080933B0480938D +:105640003A0410921B038091E502811136C00E943A +:10565000CC23811104C00E9468180E94EE1788E0D4 +:1056600090E00E94403560936704709368048093D3 +:10567000690490936A0480914B03836080934B0389 +:105680006E7F71F40E94EE1788E090E00E94403532 +:1056900060936704709368048093690490936A042C +:1056A0000E94CF088091670480FF04C060E0869567 +:1056B0000E94941681E08093E50280915801811147 +:1056C00006C084EF8093660185EF80936501209189 +:1056D0006601A22FA295AF70B0E091963C91919790 +:1056E0002F7081E090E0BC01022E01C0660F0A9489 +:1056F000EAF7462F4095432391964C9391979296C3 +:105700003C919297362B92963C93929740916501EB +:10571000E42FE295EF70F0E031A14F70042E01C04C +:10572000880F0A94EAF7982F9095932391A392A15A +:10573000892B82A390968C9190E002C095958795D5 +:105740002A95E2F7817020A130E002C035952795B7 +:105750004A95E2F792E020FF90E0892B8093ED02DA +:105760009091580181E098279093EC02891B8093D7 +:10577000E6020E94611860E08AE00E94941689EABD +:1057800092E090934E0380934D0381E00E94A41712 +:1057900080EE90E090937101809370010E94FC0C68 +:1057A00089E591E09093430480934204A0E46A2E3B +:1057B00080915C04FF24F39400E112E1853009F448 +:1057C00065C10E945126E82E81110E941F08FAE24D +:1057D0002F2EF3E03F2EE0E2F3E0D10110E000E0F5 +:1057E000B02EDD9081918D1509F474C18D25C12CE9 +:1057F000FF24F394982F9F2109F467C10E94460E5D +:10580000882399F0C9A2BAA2DF2081E009F480E0E0 +:105810008BA30E9427258160782F9DA38CA349A18B +:105820005AA16BA18DA10E944E21F801E05EFC4FB0 +:105830008081F826F0828091ED02E82FEE0FEE0FC6 +:1058400090916601A92FA295AF70B0E090962C912F +:1058500030E09F7002C0359527959A95E2F7217048 +:10586000332790916501A92FA295AF70B0E0909673 +:105870004C9150E09F7002C0559547959A95E2F77C +:10588000CA018170992740FF02C082E090E0822B1C +:105890008E2B8093ED021091EC028F70E82FF0E0D8 +:1058A000E350FE4F80819091EB02890F8093EB02D1 +:1058B000F12C84306CF0E12FF0E0E751FD4F808156 +:1058C0008F5F808360E0812F0E948128FF24F39402 +:1058D0008091EB028D3F6CF4E12FF0E0E751FD4F3A +:1058E00080818150808361E0812F0E948128FF2484 +:1058F000F3948091EB02082E000C990B64E070E0A9 +:105900000E94F8348093EB02F1100E94410B8091C9 +:105910003B04882351F180911C0390911D030E9448 +:105920001825C29708F0EDC020916C0430916D04E9 +:105930002115310509F0EDC180913A048823A9F0C1 +:105940000E941F08009136041091370420913804FA +:1059500030913904601B710B820B930B6F3F7F4FAB +:105960008F4F9F4710F40E943F0DE11001C0F110CE +:105970000E945A0D0E94C80F0E94690E90911E034A +:10598000891731F00E94690E80931E030E94E3166E +:1059900080915C04843009F00BCF83E08093E900B0 +:1059A0008091E80082FF04CF8091E80090E085FFBD +:1059B0000CC00E94940630E2E32EF12C8E010F5FA2 +:1059C0001F4F882309F484C291E08091E8008B770F +:1059D0008093E800992309F4EBCEE981E150E331AB +:1059E00008F0DAC2F0E0EC51F94C0C940C3586E981 +:1059F00092E0F4CD80915C04843009F437C080E0FB +:105A00000E94E3168091E802811109C0F092E80239 +:105A10008091670481708093E7020E948C110E943C +:105A20003F0D0E94C80F1092460488E190E00FB627 +:105A3000F894A895809360000FBE6092600083B7D1 +:105A4000817F846083BF83B7816083BF78948895AA +:105A500083B78E7F83BF0FB6F894A89580916000BE +:105A6000886180936000109260000FBE80915B049B +:105A7000882361F00E945126EAE2F3E081918111CE +:105A8000B6C3A4E3B3E0AE17BF07C1F780915C04CF +:105A9000853009F4AFCF10924F040E94A1110E94EB +:105AA000690E0E94E3161092E8028091E7028823B3 +:105AB00049F08091670481608093670460E0869577 +:105AC0000E9494160E94FC0C7CCEC394FF0C27E02D +:105AD000C21290CE0F5F1F4F0A30110509F080CE21 +:105AE0008FEF88A789A71AA60E9427258160782FA3 +:105AF0009CA78BA748A559A56AA58CA50E944E21F5 +:105B00009ACE0E94272590931D0380931C0360E08A +:105B100080E00E949D080E94690E8093F9020E9415 +:105B2000460E8823C9F06091F5027091F6028091CB +:105B3000F7029091F8020E940308613375478105CE +:105B4000910540F00E943F0D80913B04882309F4A9 +:105B5000F3CEEACE0E945A0D0E94460E882309F425 +:105B6000BFC061E080E00E949D0860E08FE791E0A7 +:105B70000E94341562E080E00E949D0880916604D6 +:105B80000E948C0C823009F48CC008F081C08823FC +:105B900009F487C0813009F48AC065E080E00E9482 +:105BA0009D0860E08DE991E00E94341566E080E098 +:105BB0000E949D086091F9026695617082EA91E009 +:105BC0000E94341567E080E00E949D086091F90210 +:105BD0006095617087EA91E00E94341568E080E08A +:105BE0000E949D086091F90262FB662760F98BEACA +:105BF00091E00E9434156091F1027091F20280915F +:105C0000F3029091F4020E9403086D327140810505 +:105C1000910508F499CF0E941F086093F1027093D8 +:105C2000F2028093F3029093F4028091F0028111CA +:105C300004C080916701811142C06DE080E00E9444 +:105C40009D0860E080EB91E00E9434156AE080E0FE +:105C50000E949D0881E0809367018091EF0290E0AF +:105C60000196817099278093EF0221E030E0281B94 +:105C7000390B40E6429FC001439F900D11242091B3 +:105C8000EE02222351F185589C4F0E9432065CCFD0 +:105C9000833089F0843009F080CF60E081E991E0C1 +:105CA00003C060E085E891E00E94341576CF60E0A3 +:105CB0008BE891E0F9CF60E087E991E0F5CF6AE009 +:105CC00080E00E949D0860E080EB91E00E94341526 +:105CD0006BE080E00E949D08C0CF85549D4FD5CFDA +:105CE00064E080E00E949D0860E086EB91E00E9405 +:105CF000341565E080E00E949D0860E08CEB91E047 +:105D00000E94341569E080E00E949D088BE394E0D6 +:105D1000BCCF80911B0361E070E081110DCE082F94 +:105D200010E02B01082E02C0440C551C0A94E2F727 +:105D3000A90144215521452B09F448C090911A032B +:105D400090FD46C08295880F807680936A01980105 +:105D5000369527953695279520936D01815E809322 +:105D60006B0110926E0124E630E047E050E068E6F7 +:105D700071E088E70E940F32892B09F0DDCDA80180 +:105D800075E0440F551F7A95E1F780911A0380FD65 +:105D90002DC042595B4F04E610E020E230E060E4A1 +:105DA00088E70E943632892B09F0C6CD0E945A0D31 +:105DB000C2018095909540906C0450906D044822EB +:105DC000592250926D0440926C04B6CD8F5FA7CFDC +:105DD000880F880F880F80936A0110926D01895F88 +:105DE00080936B0183E080936E01BDCFEAEFF2E018 +:105DF00080E2DF011D928A95E9F7E1E1F2E0F8AB7C +:105E0000EFA70DE012E067E0A62E99249394AFA5CA +:105E1000B8A96D91B8ABAFA7F80181918F01840F3C +:105E2000952F911D9C0122593B4F3EA72DA7E62F90 +:105E3000F0E0E650FD4F30E020E07A2C721AB92CE9 +:105E4000022E01C0BB0C0A94EAF7CDA4DEA490E0B8 +:105E5000D6018D916D018B21672D691B6770862E90 +:105E6000062E000C770BB82F01C0BB0F8A94EAF7FF +:105E70008B2E7195619571096770772701C08695A2 +:105E80006A95EAF7882A8081882A80829F5F983005 +:105E9000F9F62F5F3F4F31962830310571F6E5E175 +:105EA000F2E02FA538A9E217F30709F0B0CF04E616 +:105EB00010E020E230E04AEF52E071CF8091F10033 +:105EC000D8018D938D01B1E0EB1AF10809F47CCD76 +:105ED0008091E80085FDF2CF8091E8008B77809378 +:105EE000E8000E949406882399F36ECD1A8289E017 +:105EF0008B8311C08A81823009F491C1833091F182 +:105F0000813009F049C00E941F080E9412356B833E +:105F10007C838D839E8380915C04843009F048CC1F +:105F20001091E9001F709091EC00892F817090FD15 +:105F300080E8182B82E08093E9008091E80080FFE0 +:105F40000DC050E040E060E270E0CE0101960E949A +:105F5000C5068091E8008E778093E8001F7010934B +:105F6000E90026CCFE013396D1018D911D0181936C +:105F7000B4E32B16B3E03B06B9F7CDCF8A8182306C +:105F800059F46B817C818D819E810E94123586E25D +:105F900090E00E944C35BFCF8FEF8983BCCF4C81FE +:105FA0006B818A810E941A0F9827892798279E83E0 +:105FB0008D83B1CFED80FE80FE24EF24FE248A8104 +:105FC0000B81EEE00E9F80011124FCE88F9F000DF5 +:105FD000111D11248C8190E0880F991F080F191F43 +:105FE0006F2DC80187960E944C356E2DC80188968A +:105FF000D0CF0E949E0E8FCF8A818138C1F060F48D +:10600000803809F088CF20E04B816091690480914D +:1060100068040E947D157FCF8238E9F0833809F04B +:106020007ACF20E040916A046C818B81F2CF60E0EE +:106030008B810E9494168B81811103C00E948C1168 +:106040006ACF8091670481608093670460E08695E1 +:106050000E94941660CF8B8180936B045CCF8A8101 +:10606000813899F030F4803809F055CF80916A0476 +:106070003FCF823891F0833809F04DCF809168048A +:106080008B83809169048C8346CF8091670480FF65 +:1060900002C086952DCF80E02BCF80916B0428CF56 +:1060A00060916704709168048091690490916A041A +:1060B0000E946B1530CF80E18A832DCF81E08A83E7 +:1060C0008DE116CFCA80DB80DC24CD24DC248E0158 +:1060D0000F5F1F4FEC80E00EF12EF11CC6018D51B9 +:1060E0009D4F0E151F0509F416CF2DE1C21621E0B4 +:1060F000D20658F40E943835D80114968C93FFEFDD +:10610000CF1ADF0A0F5F1F4FE9CFF8011482F7CFD4 +:106110000A811B811027012710279E012F5F3F4F07 +:106120006901EC80E00EF12EF11CC8018D519D4FEC +:10613000E016F10609F4EFCE0D3131E0130728F433 +:10614000D60114966C910E944C35BFEFCB1ADB0A36 +:106150000F5F1F4FEACF0E948E0EDDCE85E0ACCFE1 +:10616000CA80DB80DC24CD24DC248E010F5F1F4F2E +:10617000EC80E00EF12EF11CC6018796E016F106C8 +:1061800009F4C9CEECEBCE16E2E0DE0658F40E942C +:106190003835D80114968C93FFEFCF1ADF0A0F5FC2 +:1061A0001F4FEACFF8011482F7CF0A811B81102715 +:1061B000012710279E012F5F3F4F6901EC80E00E01 +:1061C000F12EF11CC8018796E016F10609F4A3CE62 +:1061D0000C3B32E0130728F4D60114966C910E9410 +:1061E0004C35BFEFCB1ADB0A0F5F1F4FEBCF09BD5A +:1061F00019BD09B400FEFDCF8091D8008F7D80933A +:10620000D8008091E00082608093E0008091E000FF +:1062100081FDFCCF10924F040E94A11137CC86E281 +:1062200090E00E9438351B821C821D828E8373CEC3 +:106230001092B9008CE08093B80008959F92AF92BD +:10624000BF92CF92DF92EF92FF920F931F93CF9363 +:10625000DF93B82EEB010E9427256C01EE24E39416 +:10626000F12CC431D10560F025E0E22EF12CCF3FB6 +:10627000DC0731F0CE0164E170E00E94D8347B018C +:1062800084EAA82E94E8992E1092BC00A092BC003B +:106290000E9427258C018091BC0087FF0DC0809152 +:1062A000B900887F883039F18091B900887F8031CA +:1062B00011F10FEF1FEF09C00E942725801B910BE2 +:1062C0008E159F0540F30EEF1FEFCF3FDC07E1F285 +:1062D000C6010E9418258C179D07B0F2C801DF91F6 +:1062E000CF911F910F91FF90EF90DF90CF90BF90D3 +:1062F000AF909F900895B092BB009092BC000E9416 +:1063000027258C018091BC0087FF0AC08091B900CD +:10631000887F883111F0803461F610E000E0DECF34 +:106320000E942725801B910B8E159F0558F3CBCF1C +:106330000F931F93CF93DF93EB018093BB0084E80F +:106340008093BC000E9427258C018091BC0087FFB0 +:1063500011C02091B900287F81E090E0283211F42B +:1063600090E080E0919581959109DF91CF911F9107 +:106370000F910895CF3FDC0741F30E942725801B32 +:10638000910B8C179D0708F38EEF9FEFEECF0F93C5 +:106390001F93CF93DF93EC0184EC8093BC000E94A9 +:1063A00027258C018091BC0087FF08C08091BB002D +:1063B00090E0DF91CF911F910F910895CF3FDC07BF +:1063C00089F30E942725801B910B8C179D0750F3A2 +:1063D0008EEF9FEFEECF0F931F93CF93DF93EC01E0 +:1063E00084E88093BC000E9427258C018091BC002A +:1063F00087FF08C08091BB0090E0DF91CF911F9193 +:106400000F910895CF3FDC0789F30E942725801B59 +:10641000910B8C179D0750F38EEF9FEFEECFCF922D +:10642000DF92EF92FF920F931F93CF93DF936B0155 +:106430008A017901B9010E941E31E6010C0D1D1D72 +:10644000C017D10761F424E92093BC00DF91CF91FC +:106450001F910F91FF90EF90DF90CF90089597FDDF +:10646000F2CFB70189910E949831EACFCF92DF92A3 +:10647000EF92FF920F931F93CF93DF93C62F6A0182 +:106480007901B8010E941E3197FD0CC0B8018C2F14 +:106490000E949831E601EC0CFD1CCE15DF0511F0D1 +:1064A00097FF0CC024E92093BC00DF91CF911F918E +:1064B0000F91FF90EF90DF90CF900895B8018991F0 +:1064C0000E949831EACFCF92DF92EF92FF920F9322 +:1064D0001F93CF93DF93F82EE62EEA016901B801EE +:1064E0000E941E3197FD15C0B8018E2D0E94983173 +:1064F00097FD0FC0B8018F2D81600E941E31F12CD5 +:10650000E12C21E0C21AD108EC14FD0400F597FF3C +:1065100011C024E92093BC001816190614F490E069 +:1065200080E0DF91CF911F910F91FF90EF90DF906E +:10653000CF900895C8010E94C73197FD04C0FE01A5 +:10654000EE0DFF1D80832FEFE21AF20ADDCF97FDDB +:10655000E0CFC8010E94EB3197FDDBCFCC0DDD1DF4 +:106560008883D7CF84E98093BC0008958EE14A9B4D +:1065700002C08150E1F74A9BFECF08955A9880E20D +:106580008A95F1F75A9A0895FC013BE03A95F1F7A4 +:1065900098E020E080E031E040E14A95F1F7880F93 +:1065A0004A9B02C08160232742E04A95F1F7000030 +:1065B00040E14A95F1F7915079F790E19A95F1F71A +:1065C00099B132E03A95F1F7000040E14A95F1F7D0 +:1065D00092FB992790F992272081920F908308953A +:1065E000EF92FF920F931F93CF93DF930F92CDB74C +:1065F000DEB719828C017C01E60EF11C0E151F0519 +:1066000061F481E09981911180E00F90DF91CF9149 +:106610001F910F91FF90EF9008950E94B632CE0126 +:1066200001960E94C432F80181938F01E7CF529AFC +:106630005A9A089552985A9AEA9AE9E6F0E08081C7 +:106640008F7C808308956150770B91E001C0990F92 +:106650006A95EAF720E031E0911108C0222391F019 +:106660005A9A80E28A95F1F75A980895492F48235B +:1066700039F05A9A232740E24A95F1F79695ECCFE4 +:106680005A98F9CF5A98EDCFFF920F931F93CF935B +:10669000DF93EC018C01060F111DC017D10731F4F7 +:1066A000DF91CF911F910F91FF900895F9900E9473 +:1066B000BE3268E08F2D0E942333EFCF1F920F92DE +:1066C0000FB60F921124EF92FF920F931F932F9307 +:1066D0003F934F935F936F937F938F939F93AF936A +:1066E000BF93EF93FF93CF93DF930F92CDB7DEB7B6 +:1066F00019820E94B632CE0101960E94C432A82FA0 +:10670000A695A695A695282F229525709A2F957067 +:10671000290F922F937026952695920F98279770A0 +:106720008981982B09F075C0A83008F072C080E10B +:106730008A95F1F75A9A529AB2E0BA95F1F700C0E9 +:106740005A98EA2EF12CEAE0AE9FD0011124AF5FF7 +:10675000BE4F1896ED91FC9119973097B1F060916A +:10676000FB017091FC0116962D913C911797260F15 +:10677000371F13968D919C911497680F791F15966A +:106780004C91159712968C9109958AE08E9DF00197 +:106790008F9DF00D1124EF5FFE4F6581662351F050 +:1067A0002091FB013091FC0186819781820F931F1C +:1067B0000E9444330E94BE32F0E1FA95F1F75A98F4 +:1067C00052985A9A80E18A95F1F78AE08E9D80016D +:1067D0008F9D100D11240F5F1E4FD80112966C91E2 +:1067E0001297662371F12091FB013091FC01139601 +:1067F0008D919C91820F931F0E94F032D801ED91F0 +:10680000FC91882311F088E001C082E080830E941F +:10681000B6320F90DF91CF91FF91EF91BF91AF9181 +:106820009F918F917F916F915F914F913F912F91A8 +:106830001F910F91FF90EF900F900FBE0F901F9040 +:106840001895ED91FC91DFCF0F931F93CF93DF93BA +:10685000EC0108970CF0A9C08AE08C9FF0018D9F95 +:10686000F00D1124EF5FFE4F80819181892B09F497 +:106870009CC0F894529A5A9885E08A95F1F70000E6 +:106880008C2F869585709C2F9570890F982F93700B +:1068900086958695890F8E0193E0000F111F9A95BA +:1068A000E1F7082B0E94BE3200C068E0802F0E94F2 +:1068B0002333A0E1AA95F1F752985A9A4A9B27C030 +:1068C00087E090E04A9925C08AE08C9F80018D9FE7 +:1068D000100D11240F5F1E4FF80165816623A1F191 +:1068E0002091FB013091FC0186819781820F931FDB +:1068F0000E94F032811128C0529A5A9AD801ED9123 +:10690000FC9182E08083789482E090E016C000C021 +:10691000D5CF0197B9F4529A5A9A8AE08C9FF00128 +:106920008D9FF00D1124EF5FFE4F0190F081E02D5F +:1069300081E08083789481E090E0DF91CF911F9196 +:106940000F91089500C0BECF0E94B632B0E2BA9552 +:10695000F1F75A98529AE0E1EA95F1F78AE08C9FB4 +:10696000F0018D9FF00D1124EF5FFE4F62816623D1 +:1069700051F02091FB013091FC0183819481820FC1 +:10698000931F0E9444330E94BE328AE08C9FF00124 +:106990008D9FF00D1124EF5FFE4F0190F081E02DEF +:1069A0001082789490E080E0C8CF84E090E0C5CF7A +:1069B000AA1BBB1B51E107C0AA1FBB1FA617B70725 +:1069C00010F0A61BB70B881F991F5A95A9F7809541 +:1069D0009095BC01CD010895991B79E004C0991FE1 +:1069E000961708F0961B881F7A95C9F78095089529 +:1069F00097FB072E16F4009407D077FD09D00E946C +:106A0000D83407FC05D03EF4909581959F4F0895AA +:106A1000709561957F4F0895EE0FFF1F0590F491DB +:106A2000E02D0994692796276927782787277827F3 +:106A30000895FB01DC0102C005900D9241505040C9 +:106A4000D8F70895FB01DC0104C08D9101908019F5 +:106A500021F441505040C8F7881B990B0895FB0161 +:106A6000DC0102C001900D9241505040D8F70895CA +:106A7000F999FECF92BD81BDF89A992780B5089506 +:106A8000A6E1B0E044E050E00C947235A8E1B0E03B +:106A900042E050E00C947235262FF999FECF92BD5A +:106AA00081BDF89A019700B4021639F01FBA20BDD3 +:106AB0000FB6F894FA9AF99A0FBE08950396272F05 +:106AC0000E944D350E944C35252F0E944D35242FB4 +:106AD0000C944D350196272F0E944D350C944C3562 +:106AE000DC01CB01FC01F999FECF06C0F2BDE1BD8E +:106AF000F89A319600B40D9241505040B8F708957D +:106B00000E9487356894B1110C94163608950E943E +:106B1000FB3588F09F5798F0B92F9927B751B0F0FF +:106B2000E1F0660F771F881F991F1AF0BA95C9F711 +:106B300014C0B13091F00E941536B1E008950C9464 +:106B40001536672F782F8827B85F39F0B93FCCF317 +:106B5000869577956795B395D9F73EF4909580958E +:106B6000709561957F4F8F4F9F4F0895E89409C0AE +:106B700097FB3EF490958095709561957F4F8F4F70 +:106B80009F4F9923A9F0F92F96E9BB279395F69586 +:106B9000879577956795B795F111F8CFFAF4BB0F04 +:106BA00011F460FF1BC06F5F7F4F8F4F9F4F16C068 +:106BB000882311F096E911C0772321F09EE8872FF2 +:106BC000762F05C0662371F096E8862F70E060E0AE +:106BD0002AF09A95660F771F881FDAF7880F969527 +:106BE000879597F9089557FD9058440F551F59F010 +:106BF0005F3F71F04795880F97FB991F61F09F3FAA +:106C000079F087950895121613061406551FF2CFD2 +:106C10004695F1DF08C0161617061806991FF1CF22 +:106C200086957105610508940895E894BB27662749 +:106C30007727CB0197F908950E942F360C94A03640 +:106C40000E94923638F00E94993620F0952311F078 +:106C50000C9489360C948F3611240C9416360E94AD +:106C6000F33570F3959FC1F3950F50E0551F629F68 +:106C7000F001729FBB27F00DB11D639FAA27F00D95 +:106C8000B11DAA1F649F6627B00DA11D661F829FBC +:106C90002227B00DA11D621F739FB00DA11D621FA1 +:106CA000839FA00D611D221F749F3327A00D611DBE +:106CB000231F849F600D211D822F762F6A2F1124A0 +:106CC0009F5750409AF0F1F088234AF0EE0FFF1FD3 +:106CD000BB1F661F771F881F91505040A9F79E3F2A +:106CE000510580F00C9489360C9416365F3FE4F31E +:106CF000983ED4F3869577956795B795F795E79580 +:106D00009F5FC1F7FE2B880F911D9695879597F988 +:106D1000089597F99F6780E870E060E008959FEF1D +:106D200080EC089500240A94161617061806090622 +:106D3000089500240A9412161306140605060895F1 +:106D4000092E0394000C11F4882352F0BB0F40F479 +:106D5000BF2B11F460FF04C06F5F7F4F8F4F9F4FB9 +:106D60000895F894FFCF9A0F9A0FA30FA30FA50FC2 +:106D7000A30FA30FA30F9A0F9A0FAA0FA30FA30F8E +:106D8000AA0F9212BA125D14BA125D14ED120E130C +:106D90005D140C1419141E1994199719AB19AE1916 +:106DA000C119CA19EE19341A661A7A1A001A231A66 +:106DB000AC1DAC1D051E051E371EDF1DDF1DDF1DB2 +:106DC000511EC21ED21ED21E762F7A2FBE2FCF2F5B +:106DD000DA2FF92FFC2F2F305030CC2FCC2F5B30F7 +:0E6DE0005E3062308830AB30AE30B030D5302F +:106DEE00013A0200000001000000003A020000001B +:106DFE0005010000003A0200000001060000003A02 +:106E0E000200000001070000003A02040800000022 +:106E1E000000003A02090C0000000000003A0201D6 +:106E2E001500000000000036323331F7F667669722 +:106E3E00C634350000000000010008D50DB40DB0B9 +:106E4E000DAC0DFF07F4F5010021007F22000301B8 +:106E5E008000004A004A4A01F6F731333236674C59 +:106E6E00415945520042617365200047616D6520AE +:106E7E00005261697365004C6F776572004C4F4329 +:106E8E004B0043617073004E756D005363726C005E +:106E9E00202020202000534F4C415200544D50537F +:106EAE005400818283E200E900EA00B500B600B723 +:106EBE0000CD008301CC008A0192019401210223AE +:106ECE000224022502260227022A02B300B4006F12 +:106EDE000070000603060806010606B00200FF0158 +:106EEE0000010000FFFF0000010001FF000008107C +:106EFE001818100800000102020202020202020229 +:106F0E000240227B99017701FC00400B590B790B53 :00000001FF From bb72963fa62b910b0535210e8d69f886e1c608b7 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 28 Nov 2021 20:39:32 -0500 Subject: [PATCH 084/155] Add firmware file for breaking changes updates. --- .gitignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 768f40b1918c..7dc97231b350 100644 --- a/.gitignore +++ b/.gitignore @@ -20,9 +20,9 @@ api_data/v1 doxygen/ quantum/version.h -*.bin +#*.bin *.eep -*.hex +#*.hex *.qmk *.uf2 From f4899eb28844edcd67a96b13ffda9237cc46f01b Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 28 Nov 2021 20:44:08 -0500 Subject: [PATCH 085/155] Updated firmware file only for breaking changes. No code changes. --- .../ps17/solartempest_ps17_via.hex | 2720 +++++++++-------- 1 file changed, 1366 insertions(+), 1354 deletions(-) diff --git a/keyboards/solartempest/ps17/solartempest_ps17_via.hex b/keyboards/solartempest/ps17/solartempest_ps17_via.hex index 1ebdd82124ae..bae27a5b97ac 100644 --- a/keyboards/solartempest/ps17/solartempest_ps17_via.hex +++ b/keyboards/solartempest/ps17/solartempest_ps17_via.hex @@ -1,9 +1,9 @@ :100000000C949E030C94E5030C94E5030C94E50317 :100010000C94E5030C94E5030C94E5030C94E503C0 -:100020000C94E5030C94E5030C9434260C94F02511 -:100030000C942F270C94E5030C94E5030C94E50332 +:100020000C94E5030C94E5030C9487260C9443266A +:100030000C9484270C94E5030C94E5030C94E503DD :100040000C94E5030C94E5030C94E5030C94E50390 -:100050000C94E5030C940B270C94E5030C94E50336 +:100050000C94E5030C9460270C94E5030C94E503E1 :100060000C94E5030C94E5030C94E5030C94E50370 :100070000C94E5030C94E5030C94E5030C94E50360 :100080000C94E5030C94E5030C94E5030C94E50350 @@ -19,7 +19,7 @@ :100120000319012AB700150126B700950175108142 :1001300000C0050C0901A101850419012AA00215BE :100140000126A002950175108100C005010906A1D4 -:10015000018505050719E029E715002501950875B2 +:10015000018506050719E029E715002501950875B1 :100160000181020507190029EF1500250195F07599 :10017000018102050819012905950575019102956E :100180000175039101C00660FF0961A101096215B3 @@ -115,21 +115,21 @@ :10072000370000001203410054004C0041004E000D :1007300054004900530000000403090411241FBEA3 :10074000CFEFDAE0DEBFCDBF04B603FE27C0809155 -:100750009A0390919B03A0919C03B0919D038730D5 -:10076000904BA740B04BD1F410929A0310929B0388 -:1007700010929C0310929D0314BE84B7877F84BFA0 +:100750009D0390919E03A0919F03B091A0038730C9 +:10076000904BA740B04BD1F410929D0310929E0382 +:1007700010929F031092A00314BE84B7877F84BF9A :100780000FB6F894A895809160008861809360000E :10079000109260000FBEE0E0F8E3099511E0A0E0E0 -:1007A000B1E0EEE7FDE502C005900D92A83CB1076F -:1007B000D9F723E0A8ECB1E001C01D92AA39B20735 -:1007C000E1F70E9456270C947F2E0C940000E8ED70 +:1007A000B1E0EAE3FEE502C005900D92AA3CB10774 +:1007B000D9F723E0AAECB1E001C01D92AD39B20730 +:1007C000E1F70E94AB270C94DD2E0C940000E8EDBD :1007D000F0E080818E7F80831092E2001092DA0038 :1007E0001092E100A0EEB0E08C9181608C9380814A :1007F0008F77808319BCA7EDB0E08C918E7F8C93AE -:1008000080818F7E80831092680308952091E40098 +:1008000080818F7E808310926B0308952091E40095 :100810003091E50095E6A9012091EC00822F8170CE :1008200020FF06C08091E80080FF06C080E00895A8 -:100830002091E80022FD1AC080918E03882389F060 +:100830002091E80022FD1AC080919103882389F05D :10084000853089F08091EB0085FD0FC02091E40098 :100850003091E50042175307F9F29150E1F684E038 :10086000089582E0089583E0089581E00895EF926D @@ -138,9 +138,9 @@ :10089000E8008E778093E8000E940604882399F38D :1008A000C82F08C0F70181917F018093F1000150AA :1008B000110949F78C2FCF911F910F91FF90EF9065 -:1008C00008958091900387FF13C08091E80082FF14 +:1008C00008958091930387FF13C08091E80082FF11 :1008D00006C08091E8008B778093E80004C0809187 -:1008E0008E038111F2CF089580918E038823D9F36E +:1008E00091038111F2CF0895809191038823D9F368 :1008F0008091E80080FFF8CF8091E8008E77ECCF00 :10090000982F9093E900242F762F50E0891731F02B :100910007091EC002091ED005091F00021FD07C096 @@ -151,1360 +151,1372 @@ :1009600080E00895CF92DF92EF92FF920F931F9352 :10097000CF93DF93C8EDD0E088818F7E8883E7ED49 :10098000F0E080818160808384E082BF81E0809399 -:10099000680388818E7F888302EE10E0F801108260 +:100990006B0388818E7F888302EE10E0F80110825D :1009A0001092DA0081EEC82ED12CF60110828881D7 :1009B0008F77888388818068888388818F7D88830A -:1009C00019BC10928E0310928F0310928D03109217 -:1009D0008C0390EEE92EF12CF70180818B7F8083D0 +:1009C00019BC10929103109292031092900310920E +:1009D0008F0390EEE92EF12CF70180818B7F8083CD :1009E00088818160888342E060E080E00E9480042A :1009F000F60180818E7F8083F80180818160808311 :100A0000808188608083F70180818E7F80838881E8 :100A100080618883DF91CF911F910F91FF90EF90BC -:100A2000DF90CF900895FC018091960390919703F9 +:100A2000DF90CF900895FC018091990390919A03F3 :100A300086179707A0F06115710529F49091E800D9 :100A40009E779093E80090E06115710551F4911143 :100A500008C08091E80082FF34C080E00895BC01A6 -:100A6000F2CF80918E038823C1F18530C1F180914E +:100A6000F2CF809191038823C1F18530C1F180914B :100A7000E80083FD30C08091E80082FDEACF8091DC :100A8000E80080FFE1CF8091F3002091F200382F41 :100A90006115710519F02830310558F091E02830C2 :100AA000310509F090E02091E8002E772093E800CE :100AB000CBCF81918093F100615071092F5F3F4F3F -:100AC000E7CF80918E03882341F0853041F08091FB +:100AC000E7CF80919103882341F0853041F08091F8 :100AD000E80083FFBECF81E0089582E0089583E0BF -:100AE000089580916B0308959C014FB7F89480910D -:100AF0005F0390916003A0916103B09162034FBFC7 -:100B0000821B930B08952FB7F89480915F03909107 -:100B10006003A0916103B09162032FBF08952091FB -:100B20005C0330915D032817390771F090935D03E2 -:100B300080935C03E0915A03F0915B03309721F0BE -:100B40000084F185E02D0994089520915803309197 -:100B500059032817390771F090935903809358036C -:100B6000E0915A03F0915B03309721F00680F78102 -:100B7000E02D09940895E0915A03F0915B033097BA -:100B800021F00190F081E02D099480E00895DC01CE -:100B90006091540380915503962F891301C00895E5 -:100BA000292F30E0F901EE0FFF1FE45BFC4F40817D -:100BB00051814A175B07A1F487E08A9FA0018B9FB0 -:100BC000500D1124435E5E4F81E0FA018483961339 -:100BD000E6CF2F5F3F4F23703327209354030895B0 -:100BE0002F5F3F4F922F9370D8CF1092E90210924F -:100BF000E802EDE1F1E08581811102C014821682E4 -:100C0000379681E0E734F807B1F70895FA018111CA -:100C100001C0FB01099408958091E302982F9E7F03 -:100C200061F4817082608093E3028091E602853BEB -:100C300018F084EB8093E60208958A34B0F3817053 -:100C40008864F1CFAF92BF92DF92EF92FF920F9341 -:100C50001F93CF93DF93182F062FE901453B08F030 -:100C600044EBE42FF0E0E655FD4F011110C0E49194 -:100C70005E2F4E2F4983E8835A83DF91CF911F91D6 -:100C80000F91FF90EF90DF90BF90AF900895202FCD -:100C900030E04491D42EE42EF12C56E0159FC00193 -:100CA0001124EFEFF0E0BF010E94892D812F90E029 -:100CB000880F991F55E5569FD001579FB00D1124FD -:100CC0008A1B9B0B982F990F890F5F01A21AB30AF9 -:100CD000AE9CD001AF9CB00DBE9CB00D11245B2F1B -:100CE000089F80011124012F11275F01A01AB10A6A -:100CF000AE9C8001AF9C100DBE9C100D11245F01B5 -:100D0000A81AB108A29EC001A39E900DB29E900D9C -:100D10001124892F9927E81BF90BEE9DC001EF9D47 -:100D2000900DFE9D900D1124E92F62307105A1F008 -:100D300050F46115710509F49DCF6130710581F0A2 -:100D4000EB2F512F97CF6430710569F080F066303A -:100D5000710509F48FCFF4CFE42F4B2F592F8ACF91 -:100D6000E42F412F87CFEB2F542F492F83CF4B2FC9 -:100D70005D2DE12F7FCF0E9483059C0190917E0223 -:100D800080917F02982B21F030937B0220937A028E -:100D90009091800280918102982B21F0309379020A -:100DA00020937802E0915A03F0915B03309749F069 -:100DB00082E080937C020480F581E02D8CE792E054 -:100DC0000994089540917E02803F59F480917F02FA -:100DD00087FF0DC010927F0241110BC01092760266 -:100DE00008C0813F81F480917F0218169CF3442350 -:100DF00081F08091800290918102892B09F05AC084 -:100E0000109275020895823F49F447FFF0CF109287 -:100E10007E0280917F028111ECCFE0CF833F19F4F5 -:100E20001416ACF3E4CF90918002893F29F419168F -:100E3000F4F610928002DBCF8A3F19F497FFD7CFE8 -:100E4000F8CF909181028B3F29F497FFD0CF109279 -:100E50008102CDCF8C3F19F41916CCF3C8CF9CE09A -:100E6000980F953090F4845F990B21E030E0B90140 -:100E700002C0660F771F8A95E2F7CB0180959091AB -:100E80007D02892380937D02B2CF8D3F31F4809122 -:100E900077028E7F80937702AACF8E3F21F48091D4 -:100EA00077028D7FF7CF8F3F09F0A1CF8091770236 -:100EB0008B7FF0CF08958091770280FD16C081FD71 -:100EC00016C082FD16C0809175028823A1F0883279 -:100ED00080F428E0829FC001112468E270E00E9443 -:100EE0009D2D862F672B39F0089582E0089584E0C8 -:100EF000089588E0089581E008958091770280FD4B -:100F000014C081FD14C082FD16C080917602882332 -:100F100081F0843180F422E3829FC001112464E1D6 -:100F200070E00E949D2D862F08958CE0089589E140 -:100F3000089585E0089582E30895803F31F40E948A -:100F40007D07819580937F020895813F19F40E9467 -:100F50007D07F8CF823F31F40E947D078195809311 -:100F60007E020895833F19F40E947D07F8CF893FE0 -:100F700029F40E945B078093800208958A3F21F440 -:100F80000E945B078195F7CF8B3F31F40E945B078E -:100F900081958093810208958C3F19F40E945B072C -:100FA000F8CF9CE0980F953070F4845F990B21E0A6 -:100FB00030E001C0220F8A95EAF780917D02822BF2 -:100FC00080937D0208958D3F31F480917702816096 -:100FD0008093770208958E3F21F48091770282609A -:100FE000F7CF8F3FB9F7809177028460F1CF80E02F -:100FF0000895F894E82FE295EF70F0E031A1282FE2 -:101000002F7081E090E001C0880F2A95EAF7982FB1 -:101010009095932391A392A1892B82A3789408950C -:101020009091630392FF06C0282F28712830F9F4AD -:10103000877F846093FF06C0282F28712831F1F440 -:10104000877E84612091640320FF06C0382F3871A9 -:101050003830D9F4877F816021FF06C0282F28719E -:101060002831D1F4877E816194FD877E0895282FF1 -:1010700024712430F9F68B7F8860DCCF282F24710F -:10108000243101F78B7E8861DDCF382F317131300B -:1010900019F78E7F8860E0CF282F2171213121F749 -:1010A0008E7E8861E1CFCF93DF93EC01823891058A -:1010B000A9F1D8F58133910509F496C048F5893234 -:1010C000910509F48AC08A9709F495C0C11521E5F4 -:1010D000D20708F0BCC0C11530E5D30708F014C131 -:1010E000C83ED10508F09CC0C03ED10560F5C83AA5 -:1010F000D10508F087C0C53AD10508F0FDC0C13060 -:10110000D10509F12097F9F0C430D105E0F440C0D1 -:101110008533910509F45AC0C997C1F680916303DC -:10112000837089F0C0EED0E00EC0833E910599F146 -:1011300070F4803E910501F1823E910539F680916F -:10114000630382FD21C0CE01DF91CF910895863ED9 -:10115000910561F1873E910571F1843E910509F099 -:10116000B5CF8091640381FFEECF80916303C7EE1A -:10117000D0E084FD0DC0E7CF8091630380FD12C1F4 -:101180009091640390FFDFCFC3EED0E084FFDBCF0C -:10119000D0E0C0E0D8CF8091630382FD06C190917A -:1011A000640390FDBFCF84FFCECFF2CF8091630365 -:1011B00083FDDDCFC8CF8091630383FDF9C090919B -:1011C000640391FFF0CFC4EED0E0BDCF8091630304 -:1011D00085FFB9CFC9E2D0E0B6CF8091630385FF28 -:1011E000B2CFC5E3D0E0AFCF8091630386FFABCF32 -:1011F000CAE2D0E0A8CF8091630386FFA4CFC1E309 -:10120000D0E0A1CFCF3BD10518F6C85AD0E0CC0F23 -:10121000DD1FC45BDE4F0990D881C02DD46493CF0D -:10122000C11540E2D40758F4C11581E0D80708F091 -:101230008ACFC03FD10508F4ABCFD06584CFC115AC -:1012400090E4D90708F4A4CFDF70D06A7CCFC11531 -:1012500025E5D20700F5C11534E5D30708F08AC0AB -:10126000C11543E5D40708F071C0C11582E5D80760 -:1012700008F467C0CE018370992721E030E002C0F6 -:10128000220F331F8A95E2F7C695C69580E2C89F64 -:10129000E001112452C0C11599E5D907A8F4C11580 -:1012A00028E5D20708F06BC0C11536E5D30708F072 -:1012B0006FCF8C2F0E941008C82FD0E0DC2FCC27D6 -:1012C000CC27DF71D0623FCFC1154AE5D40708F4BF -:1012D0005BC0CE0190568115904208F059CF8D2FFA -:1012E0008F710E94100890E0982F882788279F719F -:1012F0009C012C2BE901E6CFC55AD0E0C75BDE4F3D -:10130000C881D0E0D0641FCFCE01E4E096958795E8 -:10131000EA95E1F783702C2F26952695237040E2FD -:10132000249F90011124382B8C2F8370C1E0D0E0D2 -:1013300002C0CC0FDD1F8A95E2F7C22BD32BDC68ED -:1013400002CFDC2FCC27C16FD06AFDCECE018370D7 -:10135000992721E030E002C0220F331F8A95E2F77F -:10136000C695C69590E2C99FE0011124C22BD32BEC -:10137000DA68E9CEDC2FCC27C46FD06AE4CEDC2F4C -:10138000CC27C06FD06ADFCE8C2F8F700E941008E0 -:1013900034E0D695C7953A95E1F7CF709C2FEC01D4 -:1013A000D069D1CEC9E3D0E0CECEC2EED0E0CBCE74 -:1013B000C6EED0E0C8CE8091450281111092450260 -:1013C00008958091690390914402892B9091430282 -:1013D000892B8093CA01909145029923A1F0892B12 -:1013E0008093CA0180914801882341F18091630371 -:1013F00087FF24C08EE1ECECF1E090E0815000F535 -:1014000091110E94DB09E0915A03F0915B03309740 -:10141000E1F080914801882359F08091630387FFB0 -:1014200007C08091CA018093CB0185E08093CA01F7 -:101430000280F381E02D8AEC91E0099486E0DBCF15 -:1014400021912223D9F29F5FD9CF0895909148012D -:101450009923D1F09091630397FF16C0E82FE6958A -:10146000E695E695EE31E0F4F0E0E653FE4F282FE6 -:10147000277081E090E001C0880F2A95EAF78095F7 -:101480009281892382830895ECECF1E09191891394 -:1014900003C0DF0111971C9291E0E23DF907B1F71B -:1014A0000895909148019923C1F09091630397FFAB -:1014B00014C0E82FE695E695E695EE31F8F4F0E0F5 -:1014C000E653FE4F877021E030E001C0220F8A957D -:1014D000EAF78281822B82830895ACECB1E0EFEFD2 -:1014E00090E02D91821751F0EF3F19F4211101C0C6 -:1014F000E92F9F5F9630A9F7EF3F09F408950E2E6C -:10150000000CFF0BE653FE4FE6CF80914102909115 -:101510000002981301C008958F5F8770FACF990F6A -:10152000990F890F982F977086958695869524E058 -:10153000829FF0011124E451FE4F50E040E080E032 -:10154000219130E0092E02C0369527950A94E2F7E2 -:1015500021703327042E01C0220F0A94EAF7822B50 -:101560004F5F5F4F4430510559F70895990F990F18 -:10157000890F982F977041E001C0440F9A95EAF7C0 -:1015800086958695869594E0899FF0011124E45113 -:10159000FE4F30E020E070E05191DF011197CB0168 -:1015A000022E02C0969587950A94E2F78170819584 -:1015B0008527842385278C932F5F3F4F2430310567 -:1015C00059F7089590E080E00E94A50590E080E042 -:1015D0000E948F0510924402109243020E94E1097A -:1015E00086E0ECE7F2E0DF011D928A95E9F71092C0 -:1015F000760210927502109277020C94BB069093BB -:101600004702809346020C94E20A882341F08095B9 -:10161000909144028923809344020C94E109089537 -:10162000882339F090914402982B909344020C94B3 -:10163000E1090895882341F08095909169038923F9 -:10164000809369030C94E1090895882339F09091FF -:101650006903982B909369030C94E10908958823FA -:1016600009F459C0823871F40E94BB0581FF53C050 -:1016700089E30E94510A0E94E10989E30E94260A37 -:101680000C94E109833859F40E94BB0580FF43C0E4 -:1016900083E50E94510A0E94E10983E5EFCF843877 -:1016A00059F40E94BB0582FF36C087E40E94510AAC -:1016B0000E94E10987E4E2CF9CEF980F913AF0F2A3 -:1016C00090E2980F983088F4877021E030E0A9010B -:1016D00002C0440F551F8A95E2F7CA018095909188 -:1016E0006903892380936903CBCF9BE5980F9330DF -:1016F00020F490E080E00C94A50598E5980F9731D0 -:1017000020F490E080E00C948F05803F20F00E9450 -:10171000E2060C94BB060895809580FF08C0589A95 -:1017200081FF07C05D9A82FF06C05C9A08955898B1 -:10173000F7CF5D98F8CF5C98089590918E03943020 -:1017400029F5809365037093670360936603909314 -:10175000E9008FEF9091E800815095FD06C095ED6E -:101760009A95F1F700008111F5CF8091E80085FF8F -:101770000DC050E040E063E070E085E693E00E9439 -:1017800037048091E8008E778093E8000895BC01CB -:1017900084E00C949D0BBC0183E00C949D0B9C0198 -:1017A00084E08093E9009FEF8091E800915085FDEF -:1017B00006C085ED8A95F1F700009111F5CF809173 -:1017C000E80085FF0CC050E040E066E070E0C90131 -:1017D0000E9437048091E8008E778093E800089596 -:1017E000CF93DF93EC01809148018823B1F1809180 -:1017F000630387FF32C060E284E08093E9008FEFEB -:101800009091E800815095FD06C095ED9A95F1F70D -:1018100000008111F5CF8091E80085FF1BC0809109 -:10182000480170E050E040E0811104C050E040E029 -:1018300068E070E0CE010E9437048091E8008E7766 -:101840008093E80080E2FE01ACE6B3E001900D92E7 -:101850008A95E1F7DF91CF91089568E081E0CDCFDF -:1018600081E08093E00080E28093D8001092C9006C -:101870008FE19EE40197F1F700C0000087E090EB54 -:10188000DC0180939A0390939B03A0939C03B093F5 -:101890009D0388E19CE00FB6F894A89580936000C2 -:1018A0000FBE90936000FFCFCF93C82F882309F419 -:1018B000AEC08238C1F40E94BB0581FDA8C089E397 -:1018C0000E94510A0E94E1092FEF81EE94E021501D -:1018D00080409040E1F700C0000089E30E94260AA2 -:1018E000CF910C94E1098338A1F40E94BB0580FDDF -:1018F0008EC083E50E94510A0E94E1092FEF81EE1C -:1019000094E0215080409040E1F700C0000083E562 -:10191000E5CF8438A1F40E94BB0582FD78C087E43E -:101920000E94510A0E94E1092FEF81EE94E02150BC -:1019300080409040E1F700C0000087E4CFCF8CEFFB -:101940008C0F813A88F580914801882301F18091BC -:10195000630387FF1CC0EC2FE695E695E695F0E063 -:10196000E653FE4F828190E04C2F477021E030E03B -:1019700002C0220F331F4A95E2F782239323892B5B -:1019800079F08C2F0E94260A0E94E10909C0ECEC34 -:10199000F1E08191C817A9F321E0E23DF207C9F710 -:1019A0008C2F0E94510A9CCF80E28C0F883068F403 -:1019B000C77021E030E001C0220FCA95EAF780919C -:1019C0006903822B809369038BCFEBE5EC0FE33047 -:1019D00040F4F0E0E75BFE4F808190E0CF910C9403 -:1019E000A505E8E5EC0FE73150F4F0E0EE0FFF1F3E -:1019F000E45BFE4F80819181CF910C948F05C03FB5 -:101A000030F08C2F0E949D07CF910C94BB06CF9194 -:101A100008951F93CF93DF93182FCAE0D0E0893346 -:101A200011F4C0E5D0E0812F0E94540C8FE99FE0B3 -:101A30000197F1F700C000002197C1F7812FDF91D6 -:101A4000CF911F910C942F0BDF92EF92FF920F9387 -:101A50001F93CF93DF93E82FF0E0E85EFD4FD49023 -:101A6000282F26952695269530E0F901E85FFD4F51 -:101A70000491877010E0082E02C0159507950A940E -:101A8000E2F701701127F901E850FE4FE490F12CC4 -:101A9000082E02C0F594E7940A94E2F791E0E92257 -:101AA000FF24F901E851FE4FC491D0E002C0D59562 -:101AB000C7958A95E2F7C170DD270115110519F068 -:101AC00081EE0E94540CE114F10419F086EE0E949C -:101AD000540C8D2D0E94090DEF2819F086EE0E94FE -:101AE0002F0B012B19F081EE0E942F0BCD2B51F003 -:101AF0008CE2DF91CF911F910F91FF90EF90DF90DB -:101B00000C94090DDF91CF911F910F91FF90EF90F1 -:101B1000DF900895CF93DF93C7E0D2E060E0CE017D -:101B20000E944B2E2196C11584E0D807B9F7DF91AA -:101B3000CF9108956F927F928F929F92AF92BF92B2 -:101B4000CF92DF92EF92FF920F931F93CF93DF9389 -:101B50008BECC82E84E0D82E0FE510E0E801E0976A -:101B600036011CC0F50185909490692DC7010E9433 -:101B70004B2E682DC70101960E944B2E82E0A80EC5 -:101B8000B11C82E0E80EF11CCE15DF0559F788E0A4 -:101B9000680E711C28960C171D0731F07E0188E035 -:101BA000E81AF1085301DECF005D1F4F80E3C80E35 -:101BB000D11C0F3382E0180789F6DF91CF911F9176 -:101BC0000F91FF90EF90DF90CF90BF90AF909F90DC -:101BD0008F907F906F900895CF93C82F6FEF8111F2 -:101BE00061E283E290E00E944B2E6FEFC11161E150 -:101BF00084E290E00E944B2E6FEFC11165E285E216 -:101C000090E0CF910C944B2E80E00E94EC0D60E0B0 -:101C100086E290E00E944B2E0E949A0D0E948A0D4F -:101C200081E00C94EC0DCF93C0916403C2FB992723 -:101C300090F9981781F080FBC2F9C093640360911A -:101C4000630384E090E00E944B2E6C2F82E290E0D0 -:101C5000CF910C944B2ECF9108950F931F93CF9358 -:101C6000DF9328E0629FE001112450E0440F551FEC -:101C7000C40FD51F30E3839FC00DD11D1124CE01A9 -:101C800087960E94372E082F10E0102F0027CE01D4 -:101C900088960E94372E9801282BC901DF91CF9199 -:101CA0001F910F910895462F8A3038F4763028F42A -:101CB000643018F4672F0C942D0E90E080E00895A6 -:101CC000BF92CF92DF92EF92FF920F931F93CF9329 -:101CD000DF937C0100919803109199038091460253 -:101CE00090914702082B192BCFE0D0E0CC24C3946D -:101CF000D12CBC2EC6010C2E02C0880F991F0A944D -:101D0000E2F780239123892B71F4219790F7B12C6E -:101D10008B2DDF91CF911F910F91FF90EF90DF906E -:101D2000CF90BF900895B7018C2F0E94530E0E9450 -:101D30005308019751F3ECCFCF93DF93EC010E944E -:101D4000600EBE010E94530EDF91CF910C94530898 -:101D5000FC0186819781009779F00E945308292F12 -:101D60002F7092959F7092509E30A0F4E92FF0E072 -:101D7000EF57F14D0C94D32D808191810E949C0EE0 -:101D8000EECF803F19F020F4883E20F481E00895E2 -:101D9000843FE1F380E00895883EC0F3813FD1F7AE -:101DA000F5CF822F86958695869508951F93CF93BC -:101DB000DF9300D000D00F92CDB7DEB7FC012681B3 -:101DC00037812115310541F525E0DE01119601909D -:101DD0000D922A95E1F7FC01228189819A812223C3 -:101DE000B9F06623A9F00E94600E182F682F898130 -:101DF0009A810E94B60A69817A81812F0F900F9093 -:101E00000F900F900F90DF91CF911F910C94530E74 -:101E10000E948F0A182FEFCFC9010F900F900F90DB -:101E20000F900F90DF91CF911F91089583E290E082 -:101E30000E94372E813289F484E290E00E94372E8E -:101E4000813159F485E290E00E94372E91E085328D -:101E500009F090E0892F8170089580E0FCCF6091B7 -:101E6000E302669570E04BE050E08AE091E00E946A -:101E70001D2E892B19F481E080938A020E9483052C -:101E800090938402809383020895CF92DF92EF9221 -:101E90000F931F93CF93DF93CDB7DEB7C455D1090E -:101EA0000FB6F894DEBF0FBECDBF609119018091CF -:101EB000E30280FF4CC0EFEAF3E09E012F5F3F4F4B -:101EC0008E010B5A1F4FC901A4914A2F50E0DA012D -:101ED000AA0FBB1FA40FB51FA157BD4FCD90DD901A -:101EE000EC90D901CD92DD92ED929D0131960A17C9 -:101EF0001B0751F72091180143E0249F800D911D8D -:101F00001124279A25B12F7735B130685FB7F8943F -:101F1000FC01649FE00DF11D1124BF0168177907D2 -:101F200049F55FBFEFE5F4E03197F1F700C000003D -:101F3000CC5ADF4F0FB6F894DEBF0FBECDBFDF9196 -:101F4000CF911F910F91EF90DF90CF9008958091E6 -:101F50001A0190911B0123E0829FF0011124E157A7 -:101F6000FD4F891708F0A7CF1182108212828F5F70 -:101F70003396F7CFDC014D91CD01E8E035B9000093 -:101F800000C047FF25B9440F000000C000C000C0DA -:101F900025B900C0EA9591F7C1CF0F931F93CF9356 -:101FA000DF93EC0110E000E090911C019017110606 -:101FB00009F06CF40E94450F8C8190E001968170CD -:101FC00099278C83DF91CF911F910F9108952091D4 -:101FD0001A01A801420F511D9A01220F331F240F2D -:101FE000351F21573D4F4C816091E5028091E402FD -:101FF00096959017110651F04CF0442349F040910A -:10200000E6020E9422060F5F1F4FCECF4423B9F392 -:1020100040E0F7CF8F929F92AF92BF92CF92DF9224 -:10202000EF92FF920F931F93CF93DF93EC014C81BC -:10203000042F10E09801D8010E94E82D9B01AC010B -:102040000E94FE2D4B015C01E0E2F0E0E01BF10B91 -:10205000A5E5B0E0AC019B010E94FE2D6B017C0167 -:102060009F01DF010E94E02D9B01AC010E94092E1F -:102070009B01AC01280D391D4A1D5B1DC701B6012E -:102080000E94B12DF22E822F90E039E23F1560F1CF -:1020900043E0249F9001112435952795122F109528 -:1020A00000E085E5E82EEF1880911C01081758F133 -:1020B0000E94450F9C8181E0992319F0903219F418 -:1020C0008FEF8093170180911701890F8C83DF9127 -:1020D000CF911F910F91FF90EF90DF90CF90BF9025 -:1020E000AF909F908F90089525E530E0B901681B6F -:1020F000790B9B01220F331F260F371F37FFCCCFE1 -:102100002F5F3F4FC9CF8E2D01FD8F2D20911A01DA -:10211000622F600F7727771F9B01220F331F260F37 -:10212000371F21573D4F412F6091E5020E94220643 -:102130000F5FBACF0F931F93CF93DF9380911A0154 -:1021400090911B0123E0829FF0011124E157FD4F84 -:10215000891740F1C0E0D3E060911C01C61740F13F -:102160000E94450F2091150180918D02820F80936E -:102170008D0290911601920F90931601191654F446 -:10218000082E000C990B40911C014150550B8417EF -:1021900095071CF0219520931501DF91CF911F9198 -:1021A0000F9108951182108212828F5F3396D0CFE3 -:1021B0000C2F10E070E0C8010E949D2D20911A01A3 -:1021C000820F482F50E020918D02022E000C330B1D -:1021D00002171307BCF020911601022E000C330BDE -:1021E000201731077CF08D9F9001112421573D4F1E -:1021F0004091E6026091E5028091E4020E9422068D -:10220000CF5FAACFFA01EE0FFF1FE40FF51FE157D2 -:10221000FD4F118210821282F3CF9F92AF92BF9234 -:10222000CF92DF92EF92FF920F931F93CF93DF93A2 -:10223000FC0182810FEF80FF01E010E04CE1942E61 -:10224000A0901C011A15D0F00E94450F80918C02BD -:10225000013009F054C0811102C080911C018150ED -:1022600080938C02DF91CF911F910F91FF90EF909F -:10227000DF90CF90BF90AF909F900895C0911A01CA -:10228000C12ED12CCC0DDD2DD11DCE01880F991F73 -:10229000C80FD91FC157DD4F198218821A8234E046 -:1022A000E32EF12CB12C80918C028B0D8D311CF121 -:1022B000692D0E947B2D892F082E000C990BC816C2 -:1022C000D90691F48091E6028E9DA0018F9D500D5C -:1022D000112455954795559547959E016091E502C6 -:1022E0008091E4020E942206B00EF1E0EF1AF1089C -:1022F000D1F61F5FA5CF87FFDFCF8A0DDDCF90E03E -:10230000019660911C0170E00E949D2DA9CFEF9273 -:10231000FF921F93CF93DF93EC0110E0EE24EA9439 -:10232000F12C60911C01161770F00E94450F9A81E4 -:102330008C8190FF27C08F5F8C83DF91CF911F919D -:10234000FF90EF90089520911A01422F410F5527D9 -:10235000551FCA019A01220F331F280F391F215719 -:102360003D4F70E0C7010E949D2D962F8C814091BA -:10237000E6026091E502199F800D11240E94220659 -:102380001F5FCFCF8150D8CF1F93CF93DF9300D063 -:102390000F92CDB7DEB7122F9091E30290FF16C0D7 -:1023A0009E012F5F3F4F0E9422068B819981212F32 -:1023B00030E0F901EE0FFF1FE20FF31FE157FD4F71 -:1023C0002A812183908382830E94450F0F900F9072 -:1023D0000F90DF91CF911F9108959091E30290FFAC -:1023E00014C090911A0120911B0133E0939FF001DA -:1023F0001124E157FD4F921710F00C94450F818383 -:10240000608342839F5F3396F6CF08950F931F93A7 -:10241000CF93DF9300D00F92CDB7DEB78C018091C0 -:102420008E0281110AC09E012F5F3F4F44EB6FEF78 -:102430000E9422068A8180938E02F80164816130B5 -:1024400069F080918E0240E0662361F040E06230E6 -:1024500011F440918E0280E060E004C060918E0231 -:1024600040E080E00E94ED11F801848190E0019647 -:1024700063E070E00E949D2D84830F900F900F9079 -:10248000DF91CF911F910F910895CF93DF9300D0EB -:102490000F92CDB7DEB79091E30290FF0AC09E0184 -:1024A0002F5F3F4F0E9422064B8169818A810E94E3 -:1024B000ED110F900F900F90DF91CF910895CF9372 -:1024C000DF93EC01E3EEF2E0438162818C810E94B4 -:1024D00045128C818F5F8C83DF91CF910895CF93CC -:1024E000DF93EC01EC81F0E0E553FC4F4491E3EE27 -:1024F000F2E0628181810E9445128C818F5F8C8322 -:10250000DF91CF910895CF92DF92EF92FF926B010E -:102510007C010E940C06B701A60188E090E0FF90C4 -:10252000EF90DF90CF900C945D2EAF92BF92CF9240 -:10253000DF92EF92FF920F931F93CF93DF9300D020 -:102540000F92CDB7DEB7182FF62E042FE22E909102 -:10255000E30290FF29C0E92FE695AE2FB0E0AC561C -:10256000BE4F8C91809389029E7F923059F59E01D7 -:102570002F5F3F4F812F0E9422064B8169818A8104 -:102580000E94ED111093E402F092E5020093E6023E -:10259000EE2051F06091E3027091E4028091E50237 -:1025A0009091E6020E9483120F900F900F90DF919E -:1025B000CF911F910F91FF90EF90DF90CF90BF9040 -:1025C000AF900895823019F40091E602DBCF863097 -:1025D00019F41091E402D6CF8930D9F3893191F6FC -:1025E000E9518E2F8170D82EE695F0E0E655FC4F2C -:1025F000A590B490C12CBB2460911C01C61618F0A4 -:102600000E94450FBFCF2C2D30E0A29EC001A39E9B -:10261000900DB29E900D112470E00E94892D812FA3 -:10262000D11013C0860F40911A01420F532F511D34 -:102630009A01220F331F240F351F21573D4F402F82 -:102640006F2D0E942206C394D7CF861BECCFE3EEFA -:10265000F2E0438128E0421B08F440E021E062817F -:1026600081810C949512E3EEF2E0438128E0420F61 -:1026700008F44FEF21E0628181810C949512E3EE22 -:10268000F2E0628128E0621B08F460E021E043810F -:1026900081810C949512E3EEF2E0628128E0620FF2 -:1026A00008F46FEF21E0438181810C949512E3EEF1 -:1026B000F2E0818121E04381628188500C9495127F -:1026C000E3EEF2E0818121E043816281885F0C9436 -:1026D00095128091E702882319F081508093E702D8 -:1026E0006091E3027091E4028091E5029091E6022C -:1026F0000C9483128091E702833018F48F5F8093EB -:10270000E7026091E3027091E4028091E50290910A -:10271000E6020C9483129091E30290FF36C0917010 -:10272000811129C092609093E302662351F0609179 -:10273000E3027091E4028091E5029091E6020E942A -:1027400083126091E302669570E04BE050E08AE00E -:1027500091E00E941D2E892BA9F010928A0281E03F -:102760008093860220E04091E6026091E50280912C -:10277000E4020C949512853210F09864D4CF880F3F -:10278000982BD1CF0E942F0FEACF089560E00C94D0 -:102790008B1321E030E0A90102C0440F551F8A9538 -:1027A000E2F7CA0120918B02662391F0822B80937D -:1027B0008B0280918A02811105C08091E302869587 -:1027C0000E94C6138091E30280FD05C00C94450F62 -:1027D00080958223ECCF08950F931F93CF93DF93BF -:1027E000EC0161E0009709F0682F617080E00E94C1 -:1027F000C91360E0209721F0BE017695679561705E -:1028000081E00E94C91360E0209731F0BE01769507 -:10281000679576956795617082E00E94C91360E0C4 -:10282000209739F0BE0113E0769567951A95E1F788 -:10283000617083E00E94C91360E0209739F0BE0107 -:10284000B4E076956795BA95E1F7617084E00E94EF -:10285000C913AE0170E060E0BB27A72F962F852F2C -:102860000097A105B105D9F1AC01BD0188E08A014D -:102870009B01F4E03695279517950795FA95D1F7C2 -:10288000011511052105310519F08C5FB901A80169 -:102890008A019B01E2E03695279517950795EA9501 -:1028A000D1F7011511052105310519F08E5FB90128 -:1028B000A8017695679557954795452B462B472B4D -:1028C00009F08F5F823019F160F4882399F081302C -:1028D000C1F0CE01DF91CF911F910F91089580E05B -:1028E000C6CF8330C9F08430A1F720E044E66FEF13 -:1028F0008FE004C020E044E66FEF82E30E9495126F -:10290000E8CF20E044E66FEF85E00E94951220E0DA -:1029100044E66FEF80E8F2CF20E044E66FEF87ED0A -:10292000EDCF0E94EC1390939903809398030C943D -:10293000E20A80919803909199039C0126703327B5 -:102940002630310519F488600C949114877FFCCFF0 -:1029500021E030E002C0220F331F8A95E2F7209574 -:1029600030958091980390919903822393230C943E -:102970009114909142028095892380934202282FDE -:10298000277039F4282F082E000C330B92171306EA -:1029900021F49091640392FF07C0859585958595F4 -:1029A0000E94A81410924202089521E030E002C073 -:1029B000220F331F8A95E2F7809198039091990333 -:1029C000822B932B0C9491148091E3028695815075 -:1029D00009F484E261E00C948B138091E302869504 -:1029E0008F5F853208F081E061E00C948B13909149 -:1029F000E30290FF07C09695981720F0961710F401 -:102A00000C94ED1461E00C948B13E3EEF2E083E0A0 +:100AE0000895089580916E0308959C014FB7F8947E +:100AF0008091620390916303A0916403B0916503B8 +:100B00004FBF821B930B08952FB7F8948091620317 +:100B100090916303A0916403B09165032FBF089582 +:100B200020915F03309160032817390771F090938B +:100B3000600380935F03E0915D03F0915E03309763 +:100B400021F00084F185E02D0994089520915B0344 +:100B500030915C032817390771F090935C03809300 +:100B60005B03E0915D03F0915E03309721F0068016 +:100B7000F781E02D09940895E0915D03F0915E0303 +:100B8000309721F00190F081E02D099480E00895E4 +:100B9000DC016091570380915803962F891301C09F +:100BA0000895292F30E0F901EE0FFF1FE15BFC4FA4 +:100BB000408151814A175B07A1F487E08A9FA00119 +:100BC0008B9F500D1124415E5E4F81E0FA018483BA +:100BD0009613E6CF2F5F3F4F2370332720935703A1 +:100BE00008952F5F3F4F922F9370D8CF1092EC0251 +:100BF0001092EB02EFE1F1E08581811102C01482D5 +:100C00001682379681E0E934F807B1F70895FA01C2 +:100C1000811101C0FB01099408958091E602982F8B +:100C20009E7F61F4817082608093E6028091E90288 +:100C3000853B18F084EB8093E90208958A34B0F381 +:100C400081708864F1CFAF92BF92DF92EF92FF92F2 +:100C50000F931F93CF93DF93182F062FE901453B86 +:100C600008F044EBE42FF0E0E655FD4F011110C011 +:100C7000E4915E2F4E2F4983E8835A83DF91CF9111 +:100C80001F910F91FF90EF90DF90BF90AF9008956C +:100C9000202F30E04491D42EE42EF12C56E0159F05 +:100CA000C0011124EFEFF0E0BF010E94E72D812F7A +:100CB00090E0880F991F55E5569FD001579FB00DC2 +:100CC00011248A1B9B0B982F990F890F5F01A21A81 +:100CD000B30AAE9CD001AF9CB00DBE9CB00D1124E8 +:100CE0005B2F089F80011124012F11275F01A01A9B +:100CF000B10AAE9C8001AF9C100DBE9C100D11245A +:100D00005F01A81AB108A29EC001A39E900DB29ED9 +:100D1000900D1124892F9927E81BF90BEE9DC00136 +:100D2000EF9D900DFE9D900D1124E92F623071050D +:100D3000A1F050F46115710509F49DCF6130710582 +:100D400081F0EB2F512F97CF6430710569F080F05F +:100D50006630710509F48FCFF4CFE42F4B2F592F54 +:100D60008ACFE42F412F87CFEB2F542F492F83CFEA +:100D70004B2F5D2DE12F7FCF0E9484059C01909128 +:100D8000810280918202982B21F030937E02209381 +:100D90007D029091830280918402982B21F0309300 +:100DA0007C0220937B02E0915D03F0915E0330971B +:100DB00049F082E080937F020480F581E02D8FE787 +:100DC00092E00994089540918102803F59F4809106 +:100DD000820287FF0DC01092820241110BC0109257 +:100DE000790208C0813F81F48091820218169CF339 +:100DF000442381F08091830290918402892B09F031 +:100E00005AC0109278020895823F49F447FFF0CF0C +:100E100010928102809182028111ECCFE0CF833F5A +:100E200019F41416ACF3E4CF90918302893F29F4AE +:100E30001916F4F610928302DBCF8A3F19F497FF5C +:100E4000D7CFF8CF909184028B3F29F497FFD0CF72 +:100E500010928402CDCF8C3F19F41916CCF3C8CF71 +:100E60009CE0980F953090F4845F990B21E030E07E +:100E7000B90102C0660F771F8A95E2F7CB01809512 +:100E800090918002892380938002B2CF8D3F31F40C +:100E900080917A028E7F80937A02AACF8E3F21F4CE +:100EA00080917A028D7FF7CF8F3F09F0A1CF80919B +:100EB0007A028B7FF0CF089580917A0280FD16C070 +:100EC00081FD16C082FD16C0809178028823A1F0B2 +:100ED000883280F428E0829FC001112468E270E02B +:100EE0000E94FB2D862F672B39F0089582E008952C +:100EF00084E0089588E0089581E0089580917A0261 +:100F000080FD14C081FD14C082FD16C0809179025D +:100F1000882381F0843180F422E3829FC001112470 +:100F200064E170E00E94FB2D862F08958CE0089507 +:100F300089E1089585E0089582E30895803F31F4C2 +:100F40000E947E078195809382020895813F19F463 +:100F50000E947E07F8CF823F31F40E947E07819580 +:100F6000809381020895833F19F40E947E07F8CF91 +:100F7000893F29F40E945C078093830208958A3F89 +:100F800021F40E945C078195F7CF8B3F31F40E94DA +:100F90005C0781958093840208958C3F19F40E9428 +:100FA0005C07F8CF9CE0980F953070F4845F990B44 +:100FB00021E030E001C0220F8A95EAF7809180029B +:100FC000822B8093800208958D3F31F480917A02C4 +:100FD000816080937A0208958E3F21F480917A0295 +:100FE0008260F7CF8F3FB9F780917A028460F1CFAA +:100FF00080E00895F894E82FE295EF70F0E031A1D9 +:10100000282F2F7081E090E001C0880F2A95EAF721 +:10101000982F9095932391A392A1892B82A37894E2 +:1010200008959091660392FF06C0282F28712830FA +:10103000F9F4877F846093FF06C0282F2871283138 +:10104000F1F4877E84612091670320FF06C0382F6A +:1010500038713830D9F4877F816021FF06C0282F8E +:1010600028712831D1F4877E816194FD877E0895AF +:10107000282F24712430F9F68B7F8860DCCF282F4D +:101080002471243101F78B7E8861DDCF382F3171D7 +:10109000313019F78E7F8860E0CF282F2171213100 +:1010A00021F78E7E8861E1CFCF93DF93EC01823808 +:1010B0009105A9F1D8F58133910509F496C048F559 +:1010C0008932910509F48AC08A9709F495C0C1153F +:1010D00021E5D20708F0BCC0C11530E5D30708F000 +:1010E00014C1C83ED10508F09CC0C03ED10560F5D2 +:1010F000C83AD10508F087C0C53AD10508F0FDC04F +:10110000C130D10509F12097F9F0C430D105E0F4E0 +:1011100040C08533910509F45AC0C997C1F6809142 +:101120006603837089F0C0EED0E00EC0833E910567 +:1011300099F170F4803E910501F1823E910539F6F6 +:101140008091660382FD21C0CE01DF91CF91089589 +:10115000863E910561F1873E910571F1843E9105CE +:1011600009F0B5CF8091670381FFEECF80916603D0 +:10117000C7EED0E084FD0DC0E7CF8091660380FD0F +:1011800012C19091670390FFDFCFC3EED0E084FFE0 +:10119000DBCFD0E0C0E0D8CF8091660382FD06C1EE +:1011A0009091670390FDBFCF84FFCECFF2CF8091A7 +:1011B000660383FDDDCFC8CF8091660383FDF9C050 +:1011C0009091670391FFF0CFC4EED0E0BDCF809146 +:1011D000660385FFB9CFC9E2D0E0B6CF8091660340 +:1011E00085FFB2CFC5E3D0E0AFCF8091660386FF25 +:1011F000ABCFCAE2D0E0A8CF8091660386FFA4CF30 +:10120000C1E3D0E0A1CFCF3BD10518F6C85AD0E05A +:10121000CC0FDD1FC25BDE4F0990D881C02DD46496 +:1012200093CFC11540E2D40758F4C11581E0D80727 +:1012300008F08ACFC03FD10508F4ABCFD06584CF8A +:10124000C11590E4D90708F4A4CFDF70D06A7CCF31 +:10125000C11525E5D20700F5C11534E5D30708F01F +:101260008AC0C11543E5D40708F071C0C11582E5F5 +:10127000D80708F467C0CE018370992721E030E0D9 +:1012800002C0220F331F8A95E2F7C695C69580E209 +:10129000C89FE001112452C0C11599E5D907A8F4EF +:1012A000C11528E5D20708F06BC0C11536E5D30794 +:1012B00008F06FCF8C2F0E941108C82FD0E0DC2FD0 +:1012C000CC27CC27DF71D0623FCFC1154AE5D407C8 +:1012D00008F45BC0CE0190568115904208F059CFBA +:1012E0008D2F8F710E94110890E0982F88278827F2 +:1012F0009F719C012C2BE901E6CFC55AD0E0C55B5C +:10130000DE4FC881D0E0D0641FCFCE01E4E09695D7 +:101310008795EA95E1F783702C2F26952695237003 +:1013200040E2249F90011124382B8C2F8370C1E060 +:10133000D0E002C0CC0FDD1F8A95E2F7C22BD32B81 +:10134000DC6802CFDC2FCC27C16FD06AFDCECE0186 +:101350008370992721E030E002C0220F331F8A9565 +:10136000E2F7C695C69590E2C99FE0011124C22B11 +:10137000D32BDA68E9CEDC2FCC27C46FD06AE4CE59 +:10138000DC2FCC27C06FD06ADFCE8C2F8F700E94ED +:10139000110834E0D695C7953A95E1F7CF709C2FA8 +:1013A000EC01D069D1CEC9E3D0E0CECEC2EED0E020 +:1013B000CBCEC6EED0E0C8CE80914802811110920B +:1013C00048020895809590916C03982390936C0344 +:1013D000089580916C0390914702892B9091460269 +:1013E000892B8093CC01909148029923A1F0892BFD +:1013F0008093CC0180914A01882341F1809166035A +:1014000087FF24C08EE1EEECF1E090E0815000F522 +:1014100091110E94DC09E0915D03F0915E03309729 +:10142000E1F080914A01882359F08091660387FF9B +:1014300007C08091CC018093CD0186E08093CC01E0 +:101440000280F381E02D8CEC91E0099486E0DBCF03 +:1014500021912223D9F29F5FD9CF089590914A011B +:101460009923D1F09091660397FF16C0E82FE69577 +:10147000E695E695EE31E0F4F0E0E453FE4F282FD8 +:10148000277081E090E001C0880F2A95EAF78095E7 +:101490009281892382830895EEECF1E09191891382 +:1014A00003C0DF0111971C9291E0E43DF907B1F709 +:1014B000089590914A019923C1F09091660397FF96 +:1014C00014C0E82FE695E695E695EE31F8F4F0E0E5 +:1014D000E453FE4F877021E030E001C0220F8A956F +:1014E000EAF78281822B82830895AEECB1E0EFEFC0 +:1014F00090E02D91821751F0EF3F19F4211101C0B6 +:10150000E92F9F5F9630A9F7EF3F09F408950E2E5B +:10151000000CFF0BE453FE4FE6CF80914402909104 +:101520000302981301C008958F5F8770FACF990F57 +:10153000990F890F982F977086958695869524E048 +:10154000829FF0011124E151FE4F50E040E080E025 +:10155000219130E0092E02C0369527950A94E2F7D2 +:1015600021703327042E01C0220F0A94EAF7822B40 +:101570004F5F5F4F4430510559F70895990F990F08 +:10158000890F982F977041E001C0440F9A95EAF7B0 +:1015900086958695869594E0899FF0011124E15106 +:1015A000FE4F30E020E070E05191DF011197CB0158 +:1015B000022E02C0969587950A94E2F78170819574 +:1015C0008527842385278C932F5F3F4F2430310557 +:1015D00059F7089590E080E00E94A60590E080E031 +:1015E0000E94900510924702109246020E94E9095B +:1015F00086E0EFE7F2E0DF011D928A95E9F71092AD +:1016000079021092780210927A020C94BC069093A0 +:101610004A02809349020C94EA0A882341F080959B +:10162000909147028923809347020C94E909089519 +:10163000882339F090914702982B909347020C949D +:10164000E9090895882321F00E94E2090C94E90930 +:101650000895882339F090916C03982B90936C0334 +:101660000C94E9090895882309F452C0823871F472 +:101670000E94BC0581FF4CC089E30E94590A0E9468 +:10168000E90989E30E942E0A0C94E909833859F488 +:101690000E94BC0580FF3CC083E50E94590A0E945D +:1016A000E90983E5EFCF843859F40E94BC0582FF35 +:1016B0002FC087E40E94590A0E94E90987E4E2CF1B +:1016C0009CEF980F913AF0F290E2980F983050F416 +:1016D000877091E001C0990F8A95EAF7892F0E94DF +:1016E000E209D2CF9BE5980F933020F490E080E0A0 +:1016F0000C94A60598E5980F973120F490E080E0CF +:101700000C949005803F20F00E94E3060C94BC06E8 +:101710000895809580FF08C0589A81FF07C05D9AA0 +:1017200082FF06C05C9A08955898F7CF5D98F8CF6D +:101730005C9808958093680370936A0360936903CB +:10174000809191038430F9F48093E9008FEF9091B8 +:10175000E800815095FD06C095ED9A95F1F70000DF +:101760008111F5CF8091E80085FF0DC050E040E089 +:1017700063E070E088E693E00E9437048091E8001F +:101780008E778093E8000895BC0184E00C949A0B56 +:10179000BC0183E00C949A0B9C0184E08093E900E7 +:1017A0009FEF8091E800915085FD06C085ED8A95F8 +:1017B000F1F700009111F5CF8091E80085FF0CC092 +:1017C00050E040E066E070E0C9010E94370480917B +:1017D000E8008E778093E8000895CF93DF93EC01C3 +:1017E00080914A018823B1F18091660387FF32C05E +:1017F00060E284E08093E9008FEF9091E8008150EF +:1018000095FD06C095ED9A95F1F700008111F5CF91 +:101810008091E80085FF1BC080914A0170E050E094 +:1018200040E0811104C050E040E068E070E0CE018B +:101830000E9437048091E8008E778093E80080E270 +:10184000FE01AFE6B3E001900D928A95E1F7DF91DA +:10185000CF91089568E081E0CDCF81E08093E000F2 +:1018600080E28093D8001092C9008FE19EE4019736 +:10187000F1F700C0000087E090EBDC0180939D034E +:1018800090939E03A0939F03B093A00388E19CE0F4 +:101890000FB6F894A895809360000FBE90936000F7 +:1018A000FFCFCF93C82F882309F4AEC08238C1F48C +:1018B0000E94BC0581FDA8C089E30E94590A0E94CC +:1018C000E9092FEF81EE94E0215080409040E1F74C +:1018D00000C0000089E30E942E0ACF910C94E90910 +:1018E0008338A1F40E94BC0580FD8EC083E50E9470 +:1018F000590A0E94E9092FEF81EE94E021508040BF +:101900009040E1F700C0000083E5E5CF8438A1F402 +:101910000E94BC0582FD78C087E40E94590A0E949B +:10192000E9092FEF81EE94E0215080409040E1F7EB +:1019300000C0000087E4CFCF8CEF8C0F813A88F590 +:1019400080914A01882301F18091660387FF1CC0C2 +:10195000EC2FE695E695E695F0E0E453FE4F8281A4 +:1019600090E04C2F477021E030E002C0220F331F7F +:101970004A95E2F782239323892B79F08C2F0E94DA +:101980002E0A0E94E90909C0EEECF1E08191C81726 +:10199000A9F321E0E43DF207C9F78C2F0E94590A10 +:1019A0009CCF80E28C0F883068F4C77021E030E073 +:1019B00001C0220FCA95EAF780916C03822B8093B5 +:1019C0006C038BCFEBE5EC0FE33040F4F0E0E55B2C +:1019D000FE4F808190E0CF910C94A605E8E5EC0FD6 +:1019E000E73150F4F0E0EE0FFF1FE25BFE4F808125 +:1019F0009181CF910C949005C03F30F08C2F0E94C4 +:101A00009E07CF910C94BC06CF9108951F93CF935E +:101A1000DF93182FCAE0D0E0893311F4C0E5D0E09D +:101A2000812F0E94510C8FE99FE00197F1F700C0D0 +:101A300000002197C1F7812FDF91CF911F910C9466 +:101A4000330BDF92EF92FF920F931F93CF93DF93AD +:101A5000E82FF0E0E85EFD4FD490282F26952695DC +:101A6000269530E0F901E85FFD4F0491877010E0A2 +:101A7000082E02C0159507950A94E2F70170112708 +:101A8000F901E850FE4FE490F12C082E02C0F594C5 +:101A9000E7940A94E2F791E0E922FF24F901E85182 +:101AA000FE4FC491D0E002C0D595C7958A95E2F764 +:101AB000C170DD270115110519F081EE0E94510C4E +:101AC000E114F10419F086EE0E94510C8D2D0E9454 +:101AD000060DEF2819F086EE0E94330B012B19F04A +:101AE00081EE0E94330BCD2B51F08CE2DF91CF9130 +:101AF0001F910F91FF90EF90DF900C94060DDF91F6 +:101B0000CF911F910F91FF90EF90DF900895CF93A9 +:101B1000DF93C7E0D2E060E0CE010E94A92E2196BB +:101B2000C11584E0D807B9F7DF91CF9108956F927E +:101B30007F928F929F92AF92BF92CF92DF92EF925D +:101B4000FF920F931F93CF93DF938BECC82E84E00B +:101B5000D82E0FE510E0E801E09736011CC0F50132 +:101B600085909490692DC7010E94A92E682DC70108 +:101B700001960E94A92E82E0A80EB11C82E0E80E18 +:101B8000F11CCE15DF0559F788E0680E711C289608 +:101B90000C171D0731F07E0188E0E81AF1085301A7 +:101BA000DECF005D1F4F80E3C80ED11C0F3382E0F3 +:101BB000180789F6DF91CF911F910F91FF90EF9059 +:101BC000DF90CF90BF90AF909F908F907F906F905D +:101BD0000895CF93C82F6FEF811161E283E290E007 +:101BE0000E94A92E6FEFC11161E184E290E00E9492 +:101BF000A92E6FEFC11168E285E290E0CF910C94BD +:101C0000A92E80E00E94E90D60E086E290E00E944B +:101C1000A92E0E94970D0E94870D81E00C94E90D7A +:101C20000F931F93CF93DF9328E0629FE00111246D +:101C300050E0440F551FC40FD51F30E3839FC00DE4 +:101C4000D11D1124CE0187960E94952E082F10E0F9 +:101C5000102F0027CE0188960E94952E9801282BE0 +:101C6000C901DF91CF911F910F910895462F8A30BE +:101C700038F4763028F4643018F4672F0C94100E82 +:101C800090E080E00895BF92CF92DF92EF92FF92B2 +:101C90000F931F93CF93DF937C0100919B031091CF +:101CA0009C038091490290914A02082B192BCFE0A6 +:101CB000D0E0CC24C394D12CBC2EC6010C2E02C083 +:101CC000880F991F0A94E2F780239123892B71F4DE +:101CD000219790F7B12C8B2DDF91CF911F910F9110 +:101CE000FF90EF90DF90CF90BF900895B7018C2FB9 +:101CF0000E94360E0E945408019751F3ECCFCF9307 +:101D0000DF93EC010E94430EBE010E94360EDF916C +:101D1000CF910C945408FC0186819781009779F04B +:101D20000E945408292F2F7092959F7092509E30D8 +:101D3000A0F4E92FF0E0E152F14D0C94312E8081B6 +:101D400091810E947F0EEECF803F19F020F4883EF3 +:101D500020F481E00895843FE1F380E00895883E17 +:101D6000C0F3813FD1F7F5CF822F86958695869572 +:101D700008951F93CF93DF9300D000D00F92CDB77B +:101D8000DEB7FC01268137812115310541F525E0BB +:101D9000DE01119601900D922A95E1F7FC01228156 +:101DA00089819A812223B9F06623A9F00E94430E0B +:101DB000182F682F89819A810E94BE0A69817A81D1 +:101DC000812F0F900F900F900F900F90DF91CF9178 +:101DD0001F910C94360E0E94970A182FEFCFC9015D +:101DE0000F900F900F900F900F90DF91CF911F9158 +:101DF000089583E290E00E94952E813289F484E276 +:101E000090E00E94952E813159F485E290E00E9485 +:101E1000952E91E0883209F090E0892F8170089525 +:101E200080E0FCCF6091E602669570E04BE050E008 +:101E30008CE091E00E947B2E892B19F481E0809345 +:101E40008D020E94840590938702809386020895F4 +:101E5000CF92DF92EF920F931F93CF93DF93CDB783 +:101E6000DEB7C455D1090FB6F894DEBF0FBECDBFA3 +:101E700060911B018091E60280FF4CC0EFEAF3E025 +:101E80009E012F5F3F4F8E010B5A1F4FC901A49136 +:101E90004A2F50E0DA01AA0FBB1FA40FB51FAE56A0 +:101EA000BD4FCD90DD90EC90D901CD92DD92ED92B9 +:101EB0009D0131960A171B0751F720911A0143E043 +:101EC000249F800D911D1124279A25B12F7735B1BC +:101ED00030685FB7F894FC01649FE00DF11D112498 +:101EE000BF016817790749F55FBFEFE5F4E0319767 +:101EF000F1F700C00000CC5ADF4F0FB6F894DEBFF8 +:101F00000FBECDBFDF91CF911F910F91EF90DF906A +:101F1000CF90089580911C0190911D0123E0829F34 +:101F2000F0011124EE56FD4F891708F0A7CF11825A +:101F3000108212828F5F3396F7CFDC014D91CD0175 +:101F4000E8E035B9000000C047FF25B9440F0000A4 +:101F500000C000C000C025B900C0EA9591F7C1CF0C +:101F60000F931F93CF93DF93EC0110E000E090916B +:101F70001E019017110609F06CF40E94280F8C8145 +:101F800090E00196817099278C83DF91CF911F910A +:101F90000F91089520911C01A801420F511D9A0133 +:101FA000220F331F240F351F2E563D4F4C81609159 +:101FB000E8028091E70296959017110651F04CF0D7 +:101FC000442349F04091E9020E9423060F5F1F4F0E +:101FD000CECF4423B9F340E0F7CF8F929F92AF92D8 +:101FE000BF92CF92DF92EF92FF920F931F93CF9306 +:101FF000DF93EC014C81042F10E09801D8010E947E +:10200000462E9B01AC010E945C2E4B015C01E0E27C +:10201000F0E0E01BF10BA5E5B0E0AC019B010E94F4 +:102020005C2E6B017C019F01DF010E943E2E9B0113 +:10203000AC010E94672E9B01AC01280D391D4A1D81 +:102040005B1DC701B6010E940F2EF22E822F90E079 +:1020500039E23F1560F143E0249F9001112435954A +:102060002795122F109500E085E5E82EEF18809156 +:102070001E01081758F10E94280F9C8181E09923C6 +:1020800019F0903219F48FEF8093190180911901A2 +:10209000890F8C83DF91CF911F910F91FF90EF906B +:1020A000DF90CF90BF90AF909F908F90089525E5DF +:1020B00030E0B901681B790B9B01220F331F260FFB +:1020C000371F37FFCCCF2F5F3F4FC9CF8E2D01FD7C +:1020D0008F2D20911C01622F600F7727771F9B01A6 +:1020E000220F331F260F371F2E563D4F412F609171 +:1020F000E8020E9423060F5FBACF0F931F93CF937E +:10210000DF9380911C0190911D0123E0829FF001DB +:102110001124EE56FD4F891740F1C0E0D3E06091E5 +:102120001E01C61740F10E94280F209117018091CF +:102130009002820F8093900290911801920F9093D9 +:102140001801191654F4082E000C990B40911E0129 +:102150004150550B841795071CF0219520931701CA +:10216000DF91CF911F910F910895118210821282F9 +:102170008F5F3396D0CF0C2F10E070E0C8010E9423 +:10218000FB2D20911C01820F482F50E020919002DE +:10219000022E000C330B02171307BCF0209118011C +:1021A000022E000C330B201731077CF08D9F90011D +:1021B00011242E563D4F4091E9026091E802809132 +:1021C000E7020E942306CF5FAACFFA01EE0FFF1F9E +:1021D000E40FF51FEE56FD4F118210821282F3CFED +:1021E0009F92AF92BF92CF92DF92EF92FF920F93A6 +:1021F0001F93CF93DF93FC0182810FEF80FF01E0FB +:1022000010E04CE1942EA0901E011A15D0F00E940F +:10221000280F80918F02013009F054C0811102C053 +:1022200080911E01815080938F02DF91CF911F9189 +:102230000F91FF90EF90DF90CF90BF90AF909F9065 +:102240000895C0911C01C12ED12CCC0DDD2DD11DC6 +:10225000CE01880F991FC80FD91FCE56DD4F1982A6 +:1022600018821A8234E0E32EF12CB12C80918F0277 +:102270008B0D8D311CF1692D0E94D92D892F082ECF +:10228000000C990BC816D90691F48091E9028E9D35 +:10229000A0018F9D500D1124559547955595479553 +:1022A0009E016091E8028091E7020E942306B00E31 +:1022B000F1E0EF1AF108D1F61F5FA5CF87FFDFCF5E +:1022C0008A0DDDCF90E0019660911E0170E00E94C2 +:1022D000FB2DA9CFEF92FF921F93CF93DF93EC01D9 +:1022E00010E0EE24EA94F12C60911E01161770F0B4 +:1022F0000E94280F9A818C8190FF27C08F5F8C836A +:10230000DF91CF911F91FF90EF90089520911C01D4 +:10231000422F410F5527551FCA019A01220F331F23 +:10232000280F391F2E563D4F70E0C7010E94FB2D2C +:10233000962F8C814091E9026091E802199F800DEF +:1023400011240E9423061F5FCFCF8150D8CF1F9347 +:10235000CF93DF9300D00F92CDB7DEB7122F9091BD +:10236000E60290FF16C09E012F5F3F4F0E9423069A +:102370008B819981212F30E0F901EE0FFF1FE20FD1 +:10238000F31FEE56FD4F2A812183908382830E94A2 +:10239000280F0F900F900F90DF91CF911F9108950C +:1023A0009091E60290FF14C090911C0120911D01B4 +:1023B00033E0939FF0011124EE56FD4F921710F079 +:1023C0000C94280F8183608342839F5F3396F6CFFE +:1023D00008950F931F93CF93DF9300D00F92CDB743 +:1023E000DEB78C018091910281110AC09E012F5F9E +:1023F0003F4F44EB6FEF0E9423068A818093910246 +:10240000F8016481613069F08091910240E06623B7 +:1024100061F040E0623011F44091910280E060E0B0 +:1024200004C06091910240E080E00E94D011F80168 +:10243000848190E0019663E070E00E94FB2D84832C +:102440000F900F900F90DF91CF911F910F910895F2 +:10245000CF93DF9300D00F92CDB7DEB79091E60215 +:1024600090FF0AC09E012F5F3F4F0E9423064B81C1 +:1024700069818A810E94D0110F900F900F90DF9197 +:10248000CF910895CF93DF93EC01E6EEF2E0438124 +:1024900062818C810E9428128C818F5F8C83DF91F6 +:1024A000CF910895CF93DF93EC01EC81F0E0E553F9 +:1024B000FC4F4491E6EEF2E0628181810E94281295 +:1024C0008C818F5F8C83DF91CF910895CF92DF92C3 +:1024D000EF92FF926B017C010E940D06B701A601ED +:1024E00088E090E0FF90EF90DF90CF900C94BB2EAF +:1024F000AF92BF92CF92DF92EF92FF920F931F9312 +:10250000CF93DF9300D00F92CDB7DEB7182FF62E02 +:10251000042FE22E9091E60290FF29C0E92FE69564 +:10252000AE2FB0E0AA56BE4F8C9180938C029E7F56 +:10253000923059F59E012F5F3F4F812F0E94230655 +:102540004B8169818A810E94D0111093E702F09239 +:10255000E8020093E902EE2051F06091E6027091EA +:10256000E7028091E8029091E9020E9466120F90C2 +:102570000F900F90DF91CF911F910F91FF90EF90EF +:10258000DF90CF90BF90AF900895823019F4009102 +:10259000E902DBCF863019F41091E702D6CF8930FB +:1025A000D9F3893191F6E9518E2F8170D82EE695B5 +:1025B000F0E0E655FC4FA590B490C12CBB2460918F +:1025C0001E01C61618F00E94280FBFCF2C2D30E038 +:1025D000A29EC001A39E900DB29E900D112470E0AA +:1025E0000E94E72D812FD11013C0860F40911C014E +:1025F000420F532F511D9A01220F331F240F351FF5 +:102600002E563D4F402F6F2D0E942306C394D7CFE7 +:10261000861BECCFE6EEF2E0438128E0421B08F493 +:1026200040E021E0628181810C947812E6EEF2E0D4 +:10263000438128E0420F08F44FEF21E0628181815D +:102640000C947812E6EEF2E0628128E0621B08F456 +:1026500060E021E0438181810C947812E6EEF2E0A3 +:10266000628128E0620F08F46FEF21E043818181ED +:102670000C947812E6EEF2E0818121E043816281E0 +:1026800088500C947812E6EEF2E0818121E04381DB +:102690006281885F0C9478128091EA02882319F095 +:1026A00081508093EA026091E6027091E702809186 +:1026B000E8029091E9020C9466128091EA0283305C +:1026C00018F48F5F8093EA026091E6027091E7024E +:1026D0008091E8029091E9020C9466129091E602D2 +:1026E00090FF36C09170811129C092609093E602EC +:1026F000662351F06091E6027091E7028091E80252 +:102700009091E9020E9466126091E602669570E07F +:102710004BE050E08CE091E00E947B2E892BA9F0E9 +:1027200010928D0281E08093890220E04091E902BD +:102730006091E8028091E7020C947812853210F0E3 +:102740009864D4CF880F982BD1CF0E94120FEACF74 +:10275000089560E00C946E1321E030E0A90102C0FE +:10276000440F551F8A95E2F7CA0120918E02662315 +:1027700091F0822B80938E0280918D02811105C091 +:102780008091E60286950E94A9138091E60280FD61 +:1027900005C00C94280F80958223ECCF08950F93E9 +:1027A0001F93CF93DF93EC0161E0009709F0682F4E +:1027B000617080E00E94AC1360E0209721F0BE01C0 +:1027C00076956795617081E00E94AC1360E0209778 +:1027D00031F0BE017695679576956795617082E0D8 +:1027E0000E94AC1360E0209739F0BE0113E07695AB +:1027F00067951A95E1F7617083E00E94AC1360E081 +:10280000209739F0BE01B4E076956795BA95E1F767 +:10281000617084E00E94AC13AE0170E060E0BB2701 +:10282000A72F962F852F0097A105B105D9F1AC01EF +:10283000BD0188E08A019B01F4E036952795179544 +:102840000795FA95D1F7011511052105310519F004 +:102850008C5FB901A8018A019B01E2E036952795BA +:1028600017950795EA95D1F7011511052105310551 +:1028700019F08E5FB901A801769567955795479530 +:10288000452B462B472B09F08F5F823019F160F4FE +:10289000882399F08130C1F0CE01DF91CF911F9153 +:1028A0000F91089580E0C6CF8330C9F08430A1F73E +:1028B00020E044E66FEF8FE004C020E044E66FEFD5 +:1028C00082E30E947812E8CF20E044E66FEF85E0D3 +:1028D0000E94781220E044E66FEF80E8F2CF20E01B +:1028E00044E66FEF87EDEDCF0E94CF1390939C03EA +:1028F00080939B030C94EA0A80919B0390919C0324 +:102900009C01267033272630310519F488600C9419 +:102910007414877FFCCF21E030E002C0220F331F08 +:102920008A95E2F72095309580919B0390919C03C6 +:10293000822393230C9474149091450280958923EB +:1029400080934502282F277091F4282F082E000C21 +:10295000330B9217130659F09091670392FD07C04D +:102960008595859585950E948B1410924502089552 +:10297000CF93C0916703C2FB992790F9981799F0FC +:1029800080FBC2F9C09367036091660384E090E026 +:102990000E94A92E6C2F82E290E00E94A92E82E074 +:1029A000CF910C949C14CF91089521E030E002C0A7 +:1029B000220F331F8A95E2F780919B0390919C032D +:1029C000822B932B0C9474148091E602869581508F +:1029D00009F484E261E00C946E138091E60286951E +:1029E0008F5F853208F081E061E00C946E13909166 +:1029F000E60290FF07C09695981720F0961710F4FE +:102A00000C94ED1461E00C946E13E6EEF2E083E0BA :102A1000808311828FEF828388E2838314826081B6 -:102A20007181828193810C94831269EE7EEF90E034 -:102A300080E00E94692E60E082E090E00E944B2ED0 -:102A400060E083E090E00E944B2E109247021092CB -:102A5000460260E084E090E00E944B2E60E082E25B -:102A600090E00E944B2E60E085E090E00E944B2EAB -:102A700060E086E090E00E944B2E6FEF87E090E0F0 -:102A80000E944B2E40E050E0BA0188E090E00E94A6 -:102A90005D2E60E08DE090E00E944B2E40E050E023 -:102AA000BA0188E190E00E945D2E60E087E190E04D -:102AB0000E944B2E40E050E0BA018CE190E00E9471 -:102AC0005D2E70E060E080E290E00E94692E40E0C0 -:102AD00050E0BA0188E190E00E945D2E80E00E9403 -:102AE000EC0D0E94040E40E050E0BA018FE090E04F -:102AF0000E945D2E40E050E0BA0183E190E00C942A -:102B00005D2E90E080E00E94452E893E9E4F11F49C -:102B10000C94160F80E0089580914801ECECF1E0F0 -:102B2000882359F08091630387FF07C08EE1DF019E -:102B30001D928A95E9F70C94E20A86E0F8CF9F92FD -:102B4000AF92BF92CF92DF92EF92FF920F931F93BB -:102B5000CF93DF9300D000D0CDB7DEB77C01FC016E -:102B600083819481892B31F08081918189238F3FEA -:102B700009F001C60F900F900F900F90DF91CF9149 -:102B80001F910F91FF90EF90DF90CF90BF90AF908B -:102B90009F900895980122513F452031310508F05A -:102BA000DFC58FEF93E00E94372E025167E0C62EFB -:102BB00062E0D62E882339F1809142028770D1F2EB -:102BC000F70182818823B1F282E00F900F900F907D -:102BD0000F90DF91CF911F910F91FF90EF90DF90B9 -:102BE000CF90BF90AF909F900C94B914C114F4E0B3 -:102BF000DF0611F3C6010E94372E811101C001507A -:102C00002FEFC21AD20A0111F1CF1C821B82BB2402 -:102C1000B3945AE0A52E86010F5F1F4FC6010E9494 -:102C2000372E89831A82882339F29FEF980F9330C9 -:102C300008F58A83B98232E0C30ED11CC8010E9414 -:102C4000372E8B83882309F4B7CF8E010F5F1F4F78 -:102C5000F80180818823F9F2813009F043C0918125 -:102C60008281913049F40E5F1F4F0E94090D0F5F62 -:102C70001F4FEECF6801E9CF923029F40E5F1F4F4E -:102C80000E94540CF4CF933029F40E5F1F4F0E9422 -:102C90002F0BEDCF943019F00F5F1F4FE8CF0E5F71 -:102CA0001F4F30E020E0B8016F5F7F4FF801418196 -:102CB0008053990B8A30910550F021503109B8F2B8 -:102CC0008FE99FE00197F1F700C00000F6CFA29EC8 -:102CD000F001A39EF00D11249C012E0F3F1F842FA5 -:102CE0008B01E1CF0E94240DC2CF81E00E94D51458 -:102CF0000E94991461CF81E00E94A814F9CF82E06C -:102D0000FBCF882309F404C180915702811106C0CA -:102D100081E08093570282EE0E94540C0E9483054A -:102D200090935602809355028BE20E94540CF70157 -:102D30008281882369F0C801815E9C45059740F433 -:102D40006FE1600F609358028CE090E00E944B2E80 -:102D500017FF5EC0F7018281882309F459C00E94E1 -:102D6000BB05869581708093EB019091580291305C -:102D700029F4882319F089E30E94090D80916903E1 -:102D80008093EA011092690380915802813009F41E -:102D9000A8C1882309F4A1C1823009F4B5C18430E7 -:102DA00009F4B9C1EFE3FCE93197F1F700C0000085 -:102DB0005801E894B7F84CE0C42ED12CC5010C2C76 -:102DC00002C0969587950A94E2F78F7096EF980F58 -:102DD000963008F4A5C1805D0E94240DF4E0CF1A5E -:102DE000D1082CEFC2162FEFD20641F7809158027E -:102DF000813009F49BC1882309F494C1823009F41D -:102E000091C1843009F49EC18091EA0180936903E5 -:102E1000F7018281882369F18091690382720C3CF9 -:102E2000FCE51F0709F441C208F0C1C1063C3CE5BE -:102E3000130709F426C208F098C1033CECE51E070D -:102E400009F415C208F080C1023C2CE5120709F410 -:102E5000E7C10A358DE5180709F465C208F03FC2DD -:102E60000115ECE51E0709F44CC20E3D1C4509F4A2 -:102E700057C2F70186819781009709F458C20E94D2 -:102E800053088C01F701D280C580C2943FE0C32271 -:102E9000809142028770A1F0AD2CDD2091F0812F4E -:102EA000807F803421F080E2800F883048F082E01B -:102EB0000E94B914809142028770AA24A3948111C0 -:102EC000A12C912E92942FE09222FBE0F91508F4A8 -:102ED0007BC2E92DF0E0E157F14D0C94D32D88230E -:102EE000A1F080915702811106C081E080935702C2 -:102EF00082EE0E94540C0E948305909356028093A8 -:102F0000550281EE0E94540C0FCF81EE0E942F0BD0 -:102F10008BE20E942F0B0BCF882309F408CF81EEA0 -:102F20000E94540C83EE0E94540C8FE40E94540CB7 -:102F30008FE40E942F0B83EE0E942F0B81EEE9CFCE -:102F4000882309F4F4CE81EE0E94540C83EE0E9493 -:102F5000540C80E50E94540C80E5EBCF882309F4E3 -:102F60002BCE1091540281E01827109354020E9436 -:102F7000830590935302809352021123C9F028E1F4 -:102F800048E76FEF8FE00E94C41129E148E76FEF37 -:102F90008FE00E94C4112AE148E76FEF8FE00E94A2 -:102FA000C4112BE148E76FEF8FE00E94C41104CEFB -:102FB00010921A018CE180931B0180931C0181E225 -:102FC0000E94C613F9CD882309F4B1CE80EE0E9489 -:102FD000540C81EE0E94540C80E10E94540C80E15C -:102FE0000E942F0B81EE0E942F0B80EE0E942F0B70 -:102FF00080914B0291E022E148E76FEF89278093AF -:103000004B02882351F08FE00E94C41126E148E76B -:103010006FEF8FE00E94C4118ACE8FEA0E94C41124 -:1030200026E148E76FEF8FEAF5CF882309F4C4CD96 -:103030001091510201E01027109351020E94830564 -:1030400090934F0280934E028091500210921A0189 -:10305000882319F18CE180931B0180931C0181E28C -:103060000E94C61328E044E666EE80E00E94C41188 -:1030700029E044E666EE80E00E94C4112DE044E6BB -:1030800066EE80E00E94C41100935102109250023B -:1030900010924D0210924C028FCD8CE180931B0157 -:1030A00080931C0181E21123A9F00E94C61328E03D -:1030B00044E666EE80E00E94C41129E044E666EE34 -:1030C00080E00E94C4112DE044E666EE80E00E949C -:1030D000C411DCCF0E94C613D9CF82EE0E94540CDB -:1030E00061CE83E00E94100B88E10E94540C8FE3B4 -:1030F0009CE90197F1F700C0000088E10E942F0BC6 -:1031000083E00E94050B4ECE82EE0E94540C87E5B0 -:103110000E94090D47CE86EE0E94090D88E1F8CF86 -:10312000895A5ACE82EE0E942F0B6ECE8CE20E94FC -:10313000090D8091EB01882309F466CE89E30E9492 -:10314000090D62CE88E2FBCF043C3CE5130709F48D -:1031500093C047E553E160E673E1053C9CE5190740 -:1031600009F077CE0E94060627CD093CECE51E0744 -:1031700009F491C070F4073C2CE5120709F486C0ED -:103180004BE453E16FE373E1083C3CE5130751F373 -:1031900060CE0A3C9CE5190709F482C049E653E178 -:1031A0006AE773E10B3CECE51E07E1F252CE013D0C -:1031B000FCE51F0709F487C0B0F40E3C3CE513079B -:1031C00009F47BC008F476C00F3C9CE5190709F4AC -:1031D00077C06EE089E0003DECE51E0709F039CECE -:1031E0000E94F714E9CC043DFCE51F0709F471C007 -:1031F00068F4023D3CE5130709F468C0033D8CE523 -:10320000180709F026CE61E088E12EC0053D9CE557 -:10321000190709F461C00D35100709F4CDCC19CE9A -:103220008091E30280FF1BC08E7F8093E302609158 -:10323000E3027091E4028091E5029091E6020E941F -:10324000831210928A02FFEF20E732E0F150204013 -:103250003040E1F700C000000E94450FADCC816016 -:103260008093E30261E086950E948B13A5CC44EE27 -:1032700054E16DEE74E176CF4DEE54E164EE74E10D -:1032800071CF40E653E167E573E16CCF4FE353E163 -:103290006BE473E167CF47E253E163E373E162CF2D -:1032A00043E353E167E273E15DCF4AE753E169E647 -:1032B00073E158CF61E081E0D7CF65E082E090CF45 -:1032C00068E086E08DCF64E18FE08ACF67E185E139 -:1032D00087CF62E289E184CF61E083E2C5CF0B351D -:1032E0002DE5120711F10C351D4509F0C2CD809175 -:1032F000640382FB882780F991E089270E94130EDE -:10330000B8CD109269030E948C158FEF94E3ECE026 -:1033100081509040E040E1F700C000000E94300C76 -:103320000E94151549CC81E0E9CF80E0E7CF82818A -:1033300000811181882369F0C8010E94600ED82E97 -:10334000682FC8010E94B60AB8018D2D0E94530E45 -:1033500096CDC8010E948F0AD82EF6CF212F2F704C -:10336000C22E107F19F0C29490EFC922DD20C9F05F -:10337000CC2069F080E2800F883010F001110BC082 -:1033800080916903C82AC09269030E94E109802FD5 -:103390000E94540C19C080914402C82AC092440271 -:1033A000F4CF802F0E942F0BCC2071F0C09480E2CC -:1033B000800F883010F001113BC080916903C82252 -:1033C000C09269030E94E109292D2850330B243053 -:1033D000310520F40E94BB050E948C0BAA20A9F0A5 -:1033E0008091420280FD11C0F7011282859585957A -:1033F00085950E94D514C7010E949F1580914202B5 -:103400008595859585950E94A81460E0C7010F9069 -:103410000F900F900F90DF91CF911F910F91FF9020 -:10342000EF90DF90CF90BF90AF909F900C94D60E0E -:1034300080914402C822C0924402C4CF312F3F7011 -:10344000B32E107F103219F0B29480EFB82200230F -:1034500069F0013081F1DD20D9F1CC2091F1F70143 -:10346000858180FF94CF8F7085832BC0DD20B1F0E4 -:1034700090914502892F8B29C11003C00E94250B12 -:10348000A3CFE1E0CE12FACF2091640322FD9CCFBE -:10349000981709F499CF8093450296CFC11006C0C2 -:1034A0000E94DB098B2D0E941A0B8ECFF1E0CF1604 -:1034B00009F48ACFF5CFDD2031F022E02C1508F495 -:1034C00083CF8B2DDBCF31E03C1508F47DCFEACFE5 -:1034D000CC2041F3093369F4FFEF27EE33E0F150DC -:1034E00020403040E1F700C00000802F0E942F0BE9 -:1034F0006BCF8FE39CE90197F1F7F5CF812F86958C -:103500008695837061F0813009F05ECFC8019370B9 -:10351000D11002C090E080E00E948F0555CFC80115 -:103520009370D11002C090E080E00E94A5054CCFBE -:10353000802FDD2029F00E949D070E94BB0644CF0A -:103540000E94E206FACF812F837009F03FC0D110AC -:103550003BCF402F429546954770440F440F802F34 -:103560008F7090E0042E02C0880F991F0A94E2F732 -:1035700030E020E004FF09C02FE030E002C0220F5D -:10358000331F4A95E2F720953095169516951370DE -:10359000123099F078F44091460250914702113070 -:1035A00039F0822B932B842395230E94FF0A0CCFA2 -:1035B000842B952B822B932BF8CF822B932B20914E -:1035C00046023091470282279327EFCF8695DD2070 -:1035D00011F0812F8170882309F4F6CE402F429597 -:1035E00046954770440F440F802F8F7090E0042E53 -:1035F00002C0880F991F0A94E2F730E020E004FF30 -:1036000009C02FE030E002C0220F331F4A95E2F7D5 -:1036100020953095169516951370123099F078F420 -:103620004091980350919903113039F0822B932BDC -:10363000842395230E949114C7CE842B952B822B33 -:10364000932BF8CF822B932B2091980330919903E1 -:1036500082279327EFCF1F70DD2029F0812F0E9452 -:10366000D514802F0BCF802F0E941A0B812F0E9420 -:10367000A814AACE023F09F441C060F4003F11F142 -:10368000013FA1F1DD2009F457C0C11080CE812F88 -:103690008F7131C0033FB9F1043FA1F7DD2009F478 -:1036A00040C01F71812F0E94D5148091640382FD58 -:1036B00007C0F8E01F9FC00111248360809342027D -:1036C000812F19C0DD2069F091E09C1508F47CCEB3 -:1036D0001F7181E090E002C0880F991F1A95E2F7F0 -:1036E000B3CFE2E0EC1508F46FCEF2CF812F8F71EB -:1036F000DD2009F4BCCF0E94D51466CE812F8F71D6 -:10370000DD20C9F3B4CF90E080E0DD2009F492CF52 -:103710001F7181E090E002C0880F991F1A95E2F7AF -:1037200089CF81E00E94B91421E02C1508F04CCE1D -:1037300082E00E94B91448CECC2079F0093341F4DC -:103740003FEF87EE93E0315080409040E1F7CBCEE1 -:10375000EFE3FCE93197F1F7C6CE812F8F7187CF68 -:1037600000313FE5130709F4C0CA01319FE519078D -:10377000A9F482E0BBCA61E0C7010E94D60E8C01A9 -:10378000F7018281811106CA0031FFE51F0709F4A4 -:10379000B2CA01312FE5120709F4B1CAF801E058A5 -:1037A000FF45E730F10508F0C2CAE556F14D0C942B -:1037B000D32DCF93DF938091FD01807FA1F4809181 -:1037C000FA01882381F080914102D091000260913A -:1037D000F8017091F901A091FB01B091FC01C62F95 -:1037E000C723D81303C0DF91CF91089590E01097BD -:1037F00011F0CF3F19F401968770F3CF9C0143E09D -:10380000220F331F4A95E1F7F901EF5FFD4F418128 -:103810004713F1CF40814613EECF42814111EBCFE8 -:10382000438154814A1B5B0B403A510520F780913C -:10383000FD018F7080618093FD01F901EA5FFD4F0A -:1038400080818F708061808388EF91E00E949F1556 -:10385000DF91CF910C94850AAF92BF92CF92DF9205 -:10386000EF92FF920F931F93CF93DF93CDB7DEB705 -:1038700065970FB6F894DEBF0FBECDBF8C0185E013 -:10388000F801DE01519601900D928A95E1F7F80159 -:10389000E28068EFA62E61E0B62E6091FB01709188 -:1038A000FC016115710509F468C19091F80140911E -:1038B000F901892F84238F3F09F45FC12081318171 -:1038C000C380D480F090FA01F601E61BF70BFF20CD -:1038D00009F41DC18091FD01582F507FE03AF10598 -:1038E00008F0D0C0511181C0FE2C43132BC092139D -:1038F00029C06091FE017091FF01F8014681578156 -:1039000064177507F9F4E1101DC08F708061809312 -:10391000FD01C5010E949F158091FD01F80185837D -:103920008F2D65960FB6F894DEBF0FBECDBFDF9129 -:10393000CF911F910F91FF90EF90DF90CF90BF90AC -:10394000AF900895CD2829F0822F83238F3F09F06F -:103950002FC180E0F82FF170DF2E80FF3CC08091F6 -:10396000410240910002841315C0298B3A8B89894A -:103970009A890E949C0E292F22952F702230F8F0F0 -:10398000243020F59F70F9F0F8019581907FD9F4EB -:10399000D12C1FC090E0FC0153E0EE0FFF1F5A95A1 -:1039A000E1F7EF5FFD4F5181351306C050812513BC -:1039B00003C05281E5120FC001968770D4CF9F706B -:1039C00011F0882329F3805E883010F3C8010E942B -:1039D0009F15FD2CA5CFEE2009F4A2CF8091FD010B -:1039E00081608093FD01F12C9BCF43131BC0921388 -:1039F00019C04091FE015091FF01F80126813781E5 -:103A00004217530779F4E1100DC08583C8010E9465 -:103A10009F1588E0F801A8EFB1E001900D928A951A -:103A2000E1F77ECFC8010E94A80E882339F1EE206D -:103A300029F18091FD018032A0F02091F8013091B0 -:103A4000F9013A8729871B86DD86CC868E8780918F -:103A5000FE019091FF01988B8F87CE0109960E94FD -:103A60009F1588E0F801A8EFB1E001900D928A95CA -:103A7000E1F70E94D91BFF24F39452CFC8010E94A2 -:103A80009F15F9CF51110AC088EF91E00E949F1550 -:103A900088E0F50111928A95E9F7A5CF431318C084 -:103AA000921316C04091FE015091FF01F80126814A -:103AB00037814217530761F4E1100AC08583C801BA -:103AC0000E949F1588E0F50111928A95E9F728CFA9 -:103AD000C8010E94A80E882389F2EE2079F2809115 -:103AE000FD01803208F4BDCF2091F8013091F90139 -:103AF0003A8329831B82DD82CC828E838091FE01F2 -:103B00009091FF0198878F83CE010196A8CFE03A6C -:103B1000F105C0F6FE2CEE2009F4B0CF43131FC010 -:103B200092131DC02091FE013091FF01F8018681A2 -:103B300097812817390799F49091FD0190FD69CF7D -:103B4000907F09F466CF8091FD018583903F09F451 -:103B50005DCF982F907F905F8F70892B56CFC801D3 -:103B60000E94A80E81117DCF8091FD01816080931C -:103B7000FD01C8010E949F15D3CEEE2009F47ECF2F -:103B8000C8010E94A80EF82E882309F477CF88E098 -:103B9000F801A8EFB1E001900D928A95E1F78091CC -:103BA000F8019091F9010E949C0E0E94D91BB8CE99 -:103BB00081E08E25CFCE1F93CF93DF93CDB7DEB7B5 -:103BC000AA970FB6F894DEBF0FBECDBF80E993E091 -:103BD0002091F100DC012D93CD01B3E088399B07E2 -:103BE000B9F780919103833009F471C0B8F4813042 -:103BF00009F448C0823009F4B4C08091E80083FF22 -:103C00003CC180919003909191039A3008F035C1A6 -:103C1000E92FF0E0EE55F14D0C94D32D8A3009F4E4 -:103C20008FC08B3009F470C0893039F780919003D0 -:103C3000813219F78091940390919503009711F0C8 -:103C40000297D9F68091E800877F8093E800809101 -:103C5000E80082FF37C09091F3008091F200029754 -:103C600029F48091F1008B7F813021F48091F10063 -:103C700080936B038091E8008B778093E8000E942B -:103C80006104BBCF80919003813A09F0B6CF809157 -:103C9000E800877F8093E8008091940390919503DA -:103CA000892B61F460E28CE693E070E00E941305DA -:103CB0008091E8008B778093E8009FCF60E090E0F0 -:103CC00080E0F3CF80918E038111C1CF96CF809198 -:103CD0009003813A09F091CF8091940390919503DC -:103CE000892B09F08ACF8091E800877F8093E800D4 -:103CF0008091E80080FFFCCF809148018093F10023 -:103D00008091E8008E77B9CF80919003813209F0DD -:103D100074CF8091940390919503892B09F06DCF16 -:103D20008091E800877F8093E8000E946104809181 -:103D3000920380934801109269030E948C155DCF15 -:103D400080919003813209F058CF8091E800877FFD -:103D50008093E8000E9461048091930380936A033A -:103D60004CCF80919003813A09F047CF8091E800D1 -:103D7000877F8093E8008091E80080FFFCCF8091EE -:103D80006A03BCCF803899F0823809F076C0809100 -:103D900094038F70873008F070C08093E9008091A1 -:103DA000EB0085FB882780F91092E90006C080911E -:103DB0008C0390918D03911182609091E800977F20 -:103DC0009093E8008093F1001092F1008091E80058 -:103DD0008E77B5C1882309F4A2C1823009F04DC0A5 -:103DE000809192038111A6C1809194038F702FEF6F -:103DF000280F263008F041C08093E9002091EB00A5 -:103E000020FF98C1933031F48091EB008062809361 -:103E1000EB0090C19091EB0090619093EB0021E05A -:103E200030E001C0220F8A95EAF72093EA00109251 -:103E3000EA008091EB008860EACF81111EC01091EA -:103E400092031F778091E3008078812B8093E300B9 -:103E50008091E800877F8093E8000E946104809150 -:103E6000E80080FFFCCF8091E30080688093E3004E -:103E700082E0111183E080938E038091E80083FF3C -:103E80000AC08091E800877F8093E8008091EB0072 -:103E900080628093EB00AA960FB6F894DEBF0FBE47 -:103EA000CDBFDF91CF911F9108958058823028F7C0 -:103EB00020919203309193032C3DE3E03E07A1F55E -:103EC00083E08A838AE289834FB7F894DE011396F0 -:103ED00020E03EE051E2E32FF0E050935700E49100 -:103EE00020FF03C0E295EF703F5FEF708E2F90E0F0 -:103EF000EA30C0F0C7968D939D932F5F243159F718 -:103F00004FBF8091E800877F8093E8006AE270E00D -:103F1000CE0101960E9413058091E8008B77809373 -:103F2000E800ABCFC096E7CF8091940390919503C2 -:103F3000432F55274330510509F44AC078F54130E5 -:103F4000510509F47AC08BE590E0EBEAF6E04230E7 -:103F5000510509F092CF2091E800277F2093E800D7 -:103F600020919603309197038217930708F49C01E0 -:103F700040E02115310509F065C0411163C0809111 -:103F8000E80082FDC9CF80918E03882329F2853015 -:103F900019F28091E80083FFF2CFBECF4132510584 -:103FA00009F43CC04232510509F067CF83309105D6 -:103FB00008F063CFFC01EE0FFF1FE454FE4F0190A9 -:103FC000F081E02D87549E4FDC018C9190E01AC067 -:103FD000332721303105D1F02115310561F0223030 -:103FE000310509F04ACFE8E1F7E0E4918E2F90E047 -:103FF000E8E1F7E007C0E8E3F7E0E4918E2F90E016 -:10400000E8E3F7E0009709F438CFA5CFE4E2F7E062 -:10401000E4918E2F90E0E4E2F7E0F4CF8330910555 -:1040200008F02BCF880F991FFC01EE53FE4F019033 -:10403000F081E02D89E090E08ECF82E190E0E6E033 -:10404000F7E089CF80918E03882309F465CF85300E -:1040500009F462CF8091E80083FD5ECF8091E80093 -:1040600082FD8DCF8091E80080FF83CF9091F30097 -:104070008091F2002115310519F08830910550F03A -:1040800041E0089709F040E08091E8008E77809346 -:10409000E8006FCF44914093F100319621503109EF -:1040A0000196E8CF803809F0E8CE8091E800877F5C -:1040B0008093E80080918F038093F10087CE811177 -:1040C000DCCE10919203123008F0D7CE8091E80038 -:1040D000877F8093E80010938F030E94610411236F -:1040E00011F084E005C08091E30087FDFACF81E004 -:1040F00080938E0342E061EC81E00E94800442E202 -:1041000061EC84E00E94800442E261EC82E00E9463 -:10411000800442E260EC83E00E948004AECE809195 -:104120009203813009F0A9CE81E0933009F080E05C -:1041300080938D031092E9008091E800877F80933F -:10414000E8000E94610499CECF93DF93CDB7DEB72C -:1041500060970FB6F894DEBF0FBECDBF29873A87B0 -:104160004B875C876D877E878F87988BCE010996FA -:104170000E942C1C811112C088E0FE013996DE01DC -:10418000119601900D928A95E1F78C859D85892B7A -:1041900029F089859A8589238F3FA9F5809141026D -:1041A0009091000289131CC060960FB6F894DEBF90 -:1041B0000FBECDBFDF91CF91089593E0AA0FBB1F33 -:1041C0009A95E1F7AF5FBD4F98E0FE0131960190FF -:1041D0000D929A95E1F7809300020E94850ADECF46 -:1041E000B8E08B9FC00111248F5F9D4F0E942C1C53 -:1041F0008823D1F28091410290E00196877099273F -:1042000080934102CBCFA0910002B0E0CD01019696 -:1042100087709927209141022817190671F610928C -:1042200069030E948C15109200021092410288E0EE -:10423000E8EFF1E0DF011D928A95E9F7AFCF0F9328 -:104240001F93CF93DF938091EB02E091EA02CCE0E1 -:1042500081111AC0DF91CF911F910F910895D1E084 -:10426000DE0FD093EA020E2F10E0EC9FF001112434 -:10427000E451FD4F83819481892B29F080819181C4 -:1042800089238F3F51F4ED2F8091EB02E81738F32B -:104290001092EB021092EA02DDCFC09FD001C19FC5 -:1042A000B00D1124A451BD4F16968D919C91179776 -:1042B000892B29F418968D919C91019651F42081B7 -:1042C00031814281538164817581868197810E9409 -:1042D000A420C09FF001C19FF00D1124E451FD4FB7 -:1042E00014821382D0CF109257031092560310926B -:1042F000470180915503809354030E94F5050C9467 -:104300001F212F923F924F925F926F927F928F92D6 -:104310009F92AF92BF92CF92DF92EF92FF920F9354 -:104320001F93CF93DF93C0915403E7E0FE2E01E08B -:1043300010E0FCE02F2EAEEFEA2E809155038C1397 -:1043400016C00E941F21DF91CF911F910F91FF9006 -:10435000EF90DF90CF90BF90AF909F908F907F9025 -:104360006F905F904F903F902F900C94F505D0E0A8 -:10437000FE01EE0FFF1FE45BFC4F80819181F89EF0 -:10438000F001F99EF00D1124E35EFE4F248121110E -:1043900058C03090EB02ACEEB2E030E020E0412CAF -:1043A0005F01231508F04BC01A966D907C901B9707 -:1043B000F501808091804FEF5FEF512CC52CD12CFF -:1043C000F601EE0FFF1FE80DF91D65917491661659 -:1043D000770609F4A601672B11F05394EFCF4F3FF6 -:1043E0005407B1F1B80102C0660F771F4A95E2F792 -:1043F000462AA80102C0440F551F5A94E2F74150C3 -:1044000051094416150601F5229EF001239EF00D78 -:104410001124E451FD4FF89ED001F99EB00D1124F6 -:10442000A35EBE4F12962D913C911397378326833E -:10443000E082E1829187808771E015967C930E94EB -:10444000C7052196C37079CF14961C921E921397BC -:104450002F5F3F4F1C96A5CF9F92AF92BF92CF92F6 -:10446000DF92EF92FF920F931F93CF93DF9300D0D1 -:1044700000D000D0CDB7DEB78E010F5F1F4F86E0B2 -:10448000F80111928A95E9F78AE7C82E81E0D82EC3 -:10449000F12CE12CAA24A394B12CF60181916F0197 -:1044A0008F3F09F449C0F894E82FE295EF70F0E0EF -:1044B00021A18F70A50102C0440F551F8A95E2F714 -:1044C000CA01922F982B91A392A18095892382A350 -:1044D000789400C0E0E8F1E030E020E0912C4191D8 -:1044E0004F3F09F473C0A42FA295AF70B0E090962F -:1044F0008C9190E04F7002C0959587954A95E2F7B0 -:1045000080FD64C08A2D022E01C0880F0A94EAF74C -:10451000982A2F5F3F4F2430310509F7F601319774 -:1045200080818F3F11F00E94F90750EA5A95F1F708 -:10453000F801EE0DFF1D90828FEFE81AF80AE6E011 -:10454000EE16F10409F0A9CF46E050E0B8018CE581 -:1045500092E00E942A2EFF24F394009709F4F12C94 -:10456000892BB1F186E0F801ACE5B2E001900D9243 -:104570008A95E1F781E080934A020E948305909337 -:1045800049028093480280914802909149020E941A -:104590007405059708F180915C0280936F02809109 -:1045A0005D028093700280915E028093710280911F -:1045B0005F02809372028091600280937302809107 -:1045C00061028093740210924A0206C080E0A0CF7C -:1045D00080914A028111D7CF80914701882301F150 -:1045E00080915603909157030097D1F00E94740573 -:1045F0002091E8023091E9022817390788F4909158 -:10460000540380915503981709F47EC00E948121BC -:104610001092E9021092E80210925703109256038A -:1046200080915702882371F0809155029091560233 -:104630000E947405893E934028F082EE0E942F0B61 -:104640001092570280915402882391F08091520277 -:10465000909153020E947405883E934048F00E9456 -:104660008305909353028093520283E70E94090DC1 -:104670008091500290915102992309F44EC081110A -:1046800030C080914E0290914F020E947405813695 -:104690009A4E78F080914C0290914D020196909341 -:1046A0004D0280934C020E94830590934F028093A9 -:1046B0004E0280914C0290914D024F9708F45CC0DD -:1046C00010921A018CE180931B0180931C018FE0F2 -:1046D0000E94C61381E08093500210924D02109206 -:1046E0004C028F2D26960FB6F894DEBF0FBECDBFBD -:1046F000DF91CF911F910F91FF90EF90DF90CF90BE -:10470000BF90AF909F9008950E941F211092570371 -:10471000109256030E94F50583CF8111E2CF80915C -:104720004B02882361F022E148E76FEF8FE00E949F -:10473000C41126E148E76FEF8FE00E94C411809119 -:104740005402882371F228E148E76FEF8FE00E945E -:10475000C41129E148E76FEF8FE00E94C4112AE1FC -:1047600048E76FEF8FE00E94C4112BE148E76FEF3D -:104770008FE00E94C411B5CF28E044E666EE80E0E9 -:104780000E94C41129E044E666EE80E00E94C41154 -:104790002DE044E666EE80E00E94C411C0CF2F9267 -:1047A0003F924F925F926F927F928F929F92AF92C1 -:1047B000BF92CF92DF92EF92FF920F931F93CF930E -:1047C000DF93CDB7DEB769970FB6F894DEBF0FBEA3 -:1047D000CDBF498B5A8B6B8B7C8B8D8B611110926B -:1047E00044021D861E861F86188A85E0FE0171968A -:1047F000DE01199601900D928A95E1F78C859D85D1 -:10480000892B31F089859A8589238F3F09F0D4C19E -:1048100029853A854B855C856D857E858F85988950 -:104820000E94A420C3C028EFC2162CE5D20629F4AA -:10483000882379F00E947321EBCF39EFC3163CE552 -:10484000D30639F4882329F0809147018111F2CFF2 -:10485000C3C10DE111E0E12CB12CA12C882483947B -:10486000912C9EEF592E44244394F801608171816C -:1048700066246A94762C20E0422F50E0FA01EE0F75 -:10488000FF1FE60FF71F85919491C816D90609F40A -:104890003A01892B11F02F5FEFCFF12CFFEF6F164C -:1048A0007F0609F445C0F8014481F09047018F2D3F -:1048B000411180E0F82FF170FF2EF80125808681EC -:1048C0009B85992309F408C1FF2009F405C1211033 -:1048D00014C0A40101C0440F6A94EAF7842B8683B4 -:1048E0008091E8029091E9028039914030F440E9EA -:1048F00051E05093E9024093E802C40102C0880FDE -:10490000991F2A95E2F70197F801268128171906C1 -:1049100079F48091560390915703009709F45FC092 -:104920000E9474058139914008F459C0F80144820D -:10493000EF28FFEFAF1ABF0A095F1F4F26E0A2164C -:10494000B10409F092CF8B85882309F420C1EE20B1 -:1049500009F41DC10E948305909357038093560369 -:104960008091EB02883010F591E0980F9093EB0264 -:1049700098E0FE013996DE01119601900D929A950C -:10498000E1F73CE0839FC001112484519D4F28E052 -:10499000FE013196DC0101900D922A95E1F72FEF8F -:1049A0003FEFFC0131872087D386C28669960FB618 -:1049B000F894DEBF0FBECDBFDF91CF911F910F9155 -:1049C000FF90EF90DF90CF90BF90AF909F908F902F -:1049D0007F906F905F904F903F902F9008958091BF -:1049E000540360905503982FF0E0E0E0861114C066 -:1049F000909354030E171F0709F49ACF90E0FC011F -:104A0000EE0FFF1FE45BFC4FB182A0820196837022 -:104A10009927809355038CCF282E312CF101EE0F6E -:104A2000FF1FE45BFC4F20813181F7E0F29FD00152 -:104A3000F39FB00D1124A35EBE4F2D913C911197B1 -:104A4000398F288F712C60E070E0E72FF0E0EE0FD7 -:104A5000FF1F288D398DE20FF31F25913491211509 -:104A60003105E1F0F8010190F081E02DFF8BEE8B34 -:104A700060E005C02417350709F47F2C6F5FE62F2F -:104A8000F0E0EE0FFF1F4E895F89E40FF51F45919F -:104A900054914115510571F77F5FD7CF7720C9F049 -:104AA000F801671708F0FD0144820E171F0721F473 -:104AB00090935403F72C3CCF981305C0AE17BF0753 -:104AC00011F49F5F937091012F5F3F4F822F83708E -:104AD0008DCFF0E0E0E0F7CF90E021101FC0B401EF -:104AE00002C0660F771F2A95E2F79B01215031091A -:104AF0002817390731F4442309F447C0C5010E943F -:104B0000C705C40101C0880F6A94EAF7982F9095F1 -:104B1000F801868189238683F22C0ACF9C01062C1A -:104B200002C0359527950A94E2F7A90141705527EF -:104B3000BC016150710986239723892B11F5452B00 -:104B400001F1F80182819381892BC1F01B821C82C3 -:104B50001D821E8259825A820E9483058160582FCD -:104B60009D838C83F801828193818F83988729812B -:104B70003A814B816D817E810E94A420F8011582CB -:104B8000C0CFF22FF1702F2EBCCF2F2CBACF909127 -:104B9000540380915503981731F00E948121EE2033 -:104BA00009F436CE03CF0E941F21109257031092B2 -:104BB00056030E94F505F3CF61E0CE0109960E94ED -:104BC000D60E6C018B85F7EFCF16FCE5DF0609F0FA -:104BD0002ACE882309F43DCE81E08093470118CE88 -:104BE0001F920F920FB60F9211242F933F934F9362 -:104BF0005F936F937F938F939F93AF93BF93CF9365 -:104C0000DF93EF93FF93D091E900DF708091EC0088 -:104C1000C82FC17080FDC0E81092E9008091F000BB -:104C2000877F8093F00078940E94DB1D1092E9004A -:104C30008091F00088608093F000CD2BCF70C093FE -:104C4000E900FF91EF91DF91CF91BF91AF919F91DB -:104C50008F917F916F915F914F913F912F910F9025 -:104C60000FBE0F901F9018951F920F920FB60F92C4 -:104C700011242F933F934F935F936F937F938F9361 -:104C80009F93AF93BF93EF93FF938091E10082FFD7 -:104C900009C08091E20082FF05C08091E1008B7F16 -:104CA0008093E1008091DA0080FF24C08091D800D9 -:104CB00080FF20C08091DA008E7F8093DA0080919F -:104CC000D90080FF9BC080E189BD82E189BD09B424 -:104CD00000FEFDCF81E080938E03809168038111F7 -:104CE00009C00E94E7030E94B2048091E200846040 -:104CF0008093E2008091E10080FF17C08091E20084 -:104D000080FF13C08091E2008E7F8093E20080914B -:104D1000E20080618093E2008091D80080628093FD -:104D2000D80019BC85E080938E038091E10084FF58 -:104D300029C08091E20084FF25C080E189BD82E125 -:104D400089BD89B5982F917080FFFBCF8091D800E5 -:104D50008F7D8093D8008091E1008F7E8093E10069 -:104D60008091E2008F7E8093E2008091E20081607A -:104D70008093E20080918F03882309F445C084E08A -:104D800080938E038091E10083FF27C08091E20031 -:104D900083FF23C08091E100877F8093E10082E060 -:104DA00080938E0310928F038091E1008E7F809319 -:104DB000E1008091E2008E7F8093E2008091E2002A -:104DC00080618093E20042E060E080E00E94800425 -:104DD0008091F00088608093F000FF91EF91BF9187 -:104DE000AF919F918F917F916F915F914F913F9183 -:104DF0002F910F900FBE0F901F90189519BC109215 -:104E00008E031092680376CF8091E30087FD93E0D4 -:104E100090938E03B7CF78941F921FB61F921124E0 -:104E20008F939F93AF93BF9380915F0390916003A3 -:104E3000A0916103B09162030196A11DB11D809301 -:104E40005F0390936003A0936103B0936203BF91EB -:104E5000AF919F918F911F901FBE1F9018951F9229 -:104E60001FB61F9211248F939F93AF93BF9380918E -:104E70005E03811113C080915F0390916003A09144 -:104E80006103B09162034196A11DB11D80935F0340 -:104E900090936003A0936103B0936203BF91AF91BD -:104EA0009F918F911F901FBE1F901895CDB7DEB7B1 -:104EB000EE970FB6F894DEBF0FBECDBF84B7877FE5 -:104EC00084BF0FB6F894A8958091600088618093A4 -:104ED0006000109260000FBE80E890E00FB6F8947A -:104EE00080936100909361000FBE85B7806885BF95 -:104EF00085B7806885BF87EF97E09093C90180935D -:104F0000C8010E94E7030E94B2048091E20084601D -:104F10008093E200789480918E038823A1F0109111 -:104F2000E9001F709091EC00892F817090FD80E85E -:104F3000182B1092E9008091E80083FD0E94DB1D90 -:104F40001F701093E90082E084BD93E095BD9AEF55 -:104F500097BD80936E000E94160F811102C00E94BF -:104F6000040E0AE711E020E8C22E21E0D22EF8015B -:104F700081918F018F3F11F00E94F907C016D10671 -:104F8000B1F786EF0E94F90787EF0E94F90783E9DE -:104F90000E94F90786E90E94F907ECE5F2E082E653 -:104FA00092E0AFE6B2E011921D928E179F07D9F7FB -:104FB0000E948115811102C00E94151582E090E0C7 -:104FC0000E94372E8093680284E090E00E94372E82 -:104FD000182F82E290E00E94372E982F812F909315 -:104FE0006403809363030E942C228FE39CE9019762 -:104FF000F1F700C000000E942C2280916F0280FF18 -:1050000008C06FEF7FEF90E080E00E94692E0E9461 -:10501000300C83E090E00E94372E90E00E94FF0A5F -:1050200080919803909199030E94EC13509A589A9A -:10503000559A5D9A549A5C9A8CE090E00E94372EC3 -:1050400090E0B0E0A0E08093580290935902A093C2 -:105050005A02B0935B0280916202811132C00E94B9 -:105060008115811104C00E9415150E94051588E064 -:1050700090E00E943F2E6093E3027093E4028093DD -:10508000E5029093E6026E7F71F40E94051588E0B8 -:1050900090E00E943F2E6093E3027093E4028093BD -:1050A000E5029093E6020E940C0610928A0280911B -:1050B000E30280FF03C086950E94C61381E08093BF -:1050C00062025198599A52985A9A89B1869581707C -:1050D0004A9931C290E0892B809366026091630304 -:1050E0006068609363031091640384E090E00E9421 -:1050F0004B2E612F82E290E00E944B2E81E20E94B3 -:10510000C61381E090E00E94911480E091E09093BA -:105110005B0380935A0318E1C12ED12C00E4A02E2A -:105120008FE692E096E0B92EB80E80918E03992416 -:10513000939400E112E1853009F451C20E942C22BF -:10514000882359F08FB7F89440915F035091600322 -:1051500060916103709162038FBFE9E6F2E0AFE610 -:10516000B2E010E000E0302F8D919191981709F492 -:1051700060C2292F282790E099249394422F492137 -:1051800009F452C29DAB3EAB892191E009F490E055 -:105190009FAB0E9483058160782F99AF88AF4DA99E -:1051A0005EA96FA989AD0E94CF23F801E759FD4F91 -:1051B00080819826908280918A028823D1F1809103 -:1051C0008902E091E302E695E81BE09385028230D4 -:1051D00009F046C2F0E0EA55FD4FE4910E2F10E0D1 -:1051E000BFE68B2EB2E19B2E80918602882361F070 -:1051F000109286020E94830590938402809383021A -:1052000010928802109287020E948305E091830227 -:10521000F09184028E1B9F0B8F3F9F4750F4E00F4D -:10522000F11FF0938402E093830283E892E0F4019B -:105230000995E0916602EE0FEE0FE093660289B1E8 -:1052400081FBEE24E0F84A9965C280E08E29E82BC4 -:10525000E0936602EF70F0E0EC57FE4F8081909192 -:105260006502890F8093650220E0843034F18091DB -:1052700064028F5F8093640212E018AB19AA81E088 -:105280008AAB0E9483058160782F9CAB8BAB48A9C9 -:1052900059A96AA98CA90E94CF231BA71CA61DA6E9 -:1052A0000E9483058160782F9FA78EA74BA55CA5E0 -:1052B0006DA58FA50E94CF2321E0809165028D3FCF -:1052C0002CF5809164028150809364021EA21FA27B -:1052D00081E088A70E9483058160782F9AA789A71B -:1052E0004EA15FA168A58AA50E94CF2319A21AA288 -:1052F0001BA20E9483058160782F9DA38CA349A1E6 -:105300005AA16BA18DA10E94CF2321E0809165025B -:10531000082E000C990B64E070E00E949D2D809394 -:105320006502222359F08FB7F89440915F035091A2 -:10533000600360916103709162038FBF86E0ECE7C8 -:10534000F2E0DE01119601900D928A95E1F79090BE -:105350007E0280907F021091800200918102109263 -:105360007E0210927F021092800210928102892D9B -:10537000882909F448C080917A0290917B020E94AA -:1053800074059C0190917602992309F4AFC32333ED -:105390003105C8F19F3F19F09F5F909376029920E5 -:1053A00059F00E947D079FEF19140CF491E0899F3A -:1053B000802D112480937E02882059F00E947D0761 -:1053C0009FEF18140CF491E0899F802D1124809395 -:1053D0007F0230917E023323B1F020917F0222239D -:1053E00091F045EB3403C0011124992309F495C1D0 -:1053F00090937E0245EB240390011124332309F49A -:1054000090C130937F02812F802B09F448C0809196 -:105410007802909179020E9474059C019091750226 -:10542000992309F45EC325363105C8F19F3F19F071 -:105430009F5F90937502112359F00E945B079FEFC5 -:1054400011160CF491E0899F802D11248093800225 -:10545000002359F00E945B079FEF10160CF491E0B7 -:10546000899F802D11248093810230918002332303 -:10547000B1F020918102222391F045EB3403C00169 -:105480001124992309F451C19093800245EB240320 -:1054900090011124332309F44CC13093810280918F -:1054A0007E0290917F02892B90918002892B9091AE -:1054B0008102892B11F00E94BB0686E0FE01319625 -:1054C000ACE7B2E001900D928A95E1F70E94BB052E -:1054D00090916702891731F00E94BB0580936702A3 -:1054E0000E948C0B80918E03843009F01ECE83E0E5 -:1054F0008093E9008091E80082FF17CE8091E80058 -:1055000090E085FF06C00E940604882309F415C1B7 -:1055100091E08091E8008B778093E800992309F46B -:1055200004CEE981E150E33108F089C1F0E0E455AF -:10553000F14D0C94D32D92E0CECD80918E0384302A -:1055400009F440C080E00E948C0B10928A02809186 -:105550008202811116C0909282028091E302982FFC -:105560009170909363028E7F8093E3029FEFE0E758 -:10557000F2E09150E040F040E1F700C000000E94EE -:10558000450F10925E030FB6F894A895C092600084 -:105590000FBEA092600083B7817F846083BF83B712 -:1055A000816083BF7894889583B78E7F83BF0FB661 -:1055B000F894A895809160008861809360001092B3 -:1055C00060000FBE80918D03882349F00E942C2239 -:1055D000EFE6F2E08191811163C2BE12FBCF8091B0 -:1055E0008E03853009F4A9CF109269030E948C15AF -:1055F0000E94BB050E948C0B109282028091630274 -:10560000882359F08091E30281608093E3028695BC -:105610000E94C6130E942F0F91CD80918B02882388 -:10562000C9F30E94450FF6CF9F5F990C943009F0A3 -:10563000A5CD0F5F1F4F0630110509F094CD8FEFF8 -:105640008AAF8BAF1CAE0E9483058160782F9EAF1E -:105650008DAF4AAD5BAD6CAD8EAD0E94CF23ABCDAF -:10566000863059F4F0E0ED55FD4FE4910E2F10E037 -:10567000AFE58A2EA2E19A2EB7CD893061F4E69586 -:10568000F0E0E056FD4FE4910E2F10E0F7E88F2E8A -:10569000F1E19F2EA9CD8F3061F4E695F0E0E3565D -:1056A000FD4FE4910E2F10E0EDE08E2EE1E19E2EF5 -:1056B0009BCD853159F4F0E0E656FD4FE4910E2F75 -:1056C00010E07AE9872E70E1972E8ECD08E210E087 -:1056D0004AE0842E40E1942E883109F485CD83324E -:1056E00049F4E8E9F2E00591149166E0862E62E162 -:1056F000962E7ACD04EF11E05DEC852E5FE0952EBD -:10570000843209F471CD00ED17E03BE0832E36E0E2 -:10571000932E6ACD82E090E099CD81E080937E0265 -:1057200069CE81E080937F026ECE81E0809380021B -:10573000ADCE81E080938102B2CE00E210E0CE01D6 -:1057400001964C018091E80085FD0AC08091E80037 -:105750008B778093E8000E940604882399F3D8CEC3 -:105760008091F100F40181934F010150110951F72B -:10577000CFCE1A8289E08B832DC08A81823009F4D2 -:10578000A7C18330A9F0813009F059C02FB7F89430 -:1057900060915F0370916003809161039091620357 -:1057A0002FBF0E94D92D6B837C838D839E8312C073 -:1057B00080916F028B83809170028C838091710243 -:1057C0008D83809172028E83809173028F8380918A -:1057D0007402888780918E03843009F0A6CC1091E2 -:1057E000E9001F709091EC00892F817090FD80E896 -:1057F000182B82E08093E9008091E80080FF0DC0C3 -:1058000050E040E060E270E0CE0101960E94370473 -:105810008091E8008E778093E8001F701093E90074 -:1058200084CC8A81823059F46B817C818D819E8108 -:105830000E94D92D86E290E00E944B2ECBCF8FEFB5 -:105840008983C8CF4C816B818A810E942D0E982755 -:10585000892798279E838D83BDCF8D809E80982435 -:10586000892498248A810B81F8E00F9F80011124FC -:1058700020E3829F000D111D11248C8190E0880F80 -:10588000991F080F191F692DC80187960E944B2E7A -:10589000682DC8018896D0CF0E949A0D9BCF8A812F -:1058A0008138C1F060F4803809F094CF20E04B815A -:1058B0006091E5028091E4020E9495128BCF8238BC -:1058C00049F1833809F086CF20E04091E6026C81EF -:1058D0008B81F2CF8B810E94C6139B818091E30262 -:1058E000911111C08E7F8093E30210928A024FEFD4 -:1058F00080E792E0415080409040E1F700C0000016 -:105900000E94450F67CF81608093E30286950E94D5 -:10591000C61360CF8B818093E7025CCF8A81813888 -:1059200099F030F4803809F055CF8091E60223CF0A -:10593000823891F0833809F04DCF8091E4028B8357 -:105940008091E5028C8346CF8091E30280FF02C004 -:10595000869511CF80E00FCF8091E7020CCF609148 -:10596000E3027091E4028091E5029091E6020E94C8 -:10597000831230CF80E18A832DCF81E08A8389EF43 -:10598000FACE0A811B81102701271027FE013196CC -:105990003F018C80CF01880D911D4C01C801895FAA -:1059A0009D4F8614970409F415CF093FE1E01E07C7 -:1059B00050F40E94372EF30184830F5F1F4FFFEFD7 -:1059C0006F1A7F0AEBCFF3011482F7CF0A811B8194 -:1059D000102701271027CE0101963C018C80800EF4 -:1059E000912E911CC801895F9D4F8016910609F484 -:1059F000F1CE093FE1E01E0720F4F30164810E942B -:105A00004B2EFFEF6F1A7F0A0F5F1F4FEBCF0E94E5 -:105A10008A0DE0CE8AE0AFCF0A811B8110270127D3 -:105A20001027CE0101963C018C80FC01E80DF11D90 -:105A30004F01C80187968614970409F4CBCE003E27 -:105A4000F1E01F0750F40E94372EF30184830F5FAB -:105A50001F4FFFEF6F1A7F0AECCFF3011482F7CFCD -:105A60000A811B81102701271027CE0101963C01D6 -:105A70008C80800E912E911CC8018796801691060D -:105A800009F4A8CE003EE1E01E0720F4F301648192 -:105A90000E944B2EFFEF6F1A7F0A0F5F1F4FECCF54 -:105AA00009BD19BD09B400FEFDCF8091D8008F7DDE -:105AB0008093D8008091E00082608093E000809124 -:105AC000E00081FDFCCF109269030E948C1587CD08 -:105AD00086E290E00E94372E1B821C821D828E83FC -:105AE00079CE2D32314008F0A3CCD9CC2D323140C3 -:105AF00008F052CC88CC87FB082E062687FD8195BE -:105B000067FD61950E94112E0EF4919507FC819519 -:105B10000895AA1BBB1B51E107C0AA1FBB1FA617F4 -:105B2000B70710F0A61BB70B881F991F5A95A9F746 -:105B300080959095BC01CD01089597FB072E16F432 -:105B4000009407D077FD09D00E94892D07FC05D06D -:105B50003EF4909581959F4F0895709561957F4F84 -:105B60000895A1E21A2EAA1BBB1BFD010DC0AA1F9E -:105B7000BB1FEE1FFF1FA217B307E407F50720F0B6 -:105B8000A21BB30BE40BF50B661F771F881F991F31 -:105B90001A9469F760957095809590959B01AC017A -:105BA000BD01CF010895EE0FFF1F0590F491E02D88 -:105BB00009946927962769277827872778270895E2 -:105BC0000E94E82D332312F48A1B9B0B0C94F92DB1 -:105BD000A29FB001B39FC001A39F700D811D11242E -:105BE000911DB29F700D811D1124911D08950E9479 -:105BF000E82DB7FF0895821B930B08950E94E82DAE -:105C0000A59F900DB49F900DA49F800D911D112410 -:105C10000895B7FF0C94FE2D0E94FE2D821B930B5E -:105C20000895991B79E004C0991F961708F0961BF8 -:105C3000881F7A95C9F780950895FC01415050401E -:105C400030F001900616D1F73197CF0108958827DB -:105C500099270895FB01DC0104C08D910190801902 -:105C600021F441505040C8F7881B990B0895F999C9 -:105C7000FECF92BD81BDF89A992780B50895A6E11F -:105C8000B0E044E050E00C94712EA8E1B0E042E0B6 -:105C900050E00C94712E262FF999FECF92BD81BD54 -:105CA000F89A019700B4021639F01FBA20BD0FB65A -:105CB000F894FA9AF99A0FBE08950396272F0E9436 -:105CC0004C2E0E944B2E252F0E944C2E242F0C94DC -:105CD0004C2E0196272F0E944C2E0C944B2EDC014B -:105CE000CB01FC01F999FECF06C0F2BDE1BDF89AE7 -:105CF000319600B40D9241505040B8F70895F89491 -:105D0000FFCFC10EC10ECA0ECA0ECC0ECA0ECA0EED -:105D1000CA0EC10EC10ED10ECA0ECA0ED10EAE19D8 -:105D2000AE191E1A1E1A7E1A981AE419E419A31A3B -:105D30002B1B3A1B3A1B81166F178C17A017AE1737 -:105D4000E3171518C21EEA1E3D1FEA1E3D1F1D1F48 -:105D5000551F3D1F52205F20B92BBD2B112C222C2B -:105D60002D2C4C2C4F2C8E2CAF2C1F2C1F2CBA2CD6 -:0E5D7000BD2CC12CE62C072D0A2D0C2D302D3C -:105D7E007105F00BCF0BCB0BC70B01191A1B1C1D9A -:105D8E001E1F202122010201001C001C1CCA002A19 -:105D9E0000000000C4004C00000000BE00500000D7 -:105DAE000000B8005100000000B2004F00000000DB -:105DBE00AC0052000000000101818283E200E90084 -:105DCE00EA00B500B600B700CD008301CC008A0111 -:105DDE0092019401210223022402250226022702A7 -:105DEE002A02B300B4006F007000F03435366667D7 -:105DFE00F6F7939600FF0100010000FFFF0000017F -:105E0E000001FF000001020202020606060909094E -:105E1E000909090F0F0F0F0F0F151515181919195D -:105E2E001919191919191923244022B6A801860126 -:085E3E00D000BD06D606F606F1 +:102A20007181828193810C94661280914A01EEEC4F +:102A3000F1E0882359F08091660387FF07C08EE19B +:102A4000DF011D928A95E9F70C94EA0A86E0F8CF37 +:102A50001F93CF93DF93CDB7DEB7AA970FB6F89445 +:102A6000DEBF0FBECDBF83E993E02091F100DC0112 +:102A70002D93CD01B3E08B399B07B9F78091940377 +:102A8000833009F472C0B8F4813009F449C082304F +:102A900009F4B5C08091E80083FF8DC28091930353 +:102AA000909194039A3008F086C2E92FF0E0E35148 +:102AB000F14D0C94312E8A3009F490C08B3009F41A +:102AC00071C0893039F780919303813219F7809171 +:102AD000970390919803009711F00297D9F680918F +:102AE000E800877F8093E8008091E80082FF38C08B +:102AF0009091F3008091F200029731F48091F100FF +:102B0000813011F0863021F48091F10080936E03C2 +:102B10008091E8008B778093E8000E946104BACF2F +:102B200080919303813A09F0B5CF8091E800877FC7 +:102B30008093E8008091970390919803892B61F42A +:102B400060E28FE693E070E00E9413058091E80058 +:102B50008B778093E8009ECF60E090E080E0F3CF39 +:102B6000809191038111C0CF95CF80919303813AD9 +:102B700009F090CF8091970390919803892B09F0E9 +:102B800089CF8091E800877F8093E8008091E800FA +:102B900080FFFCCF80914A018093F1008091E80092 +:102BA0008E77B9CF80919303813209F073CF8091F2 +:102BB000970390919803892B09F06CCF8091E800DE +:102BC000877F8093E8000E94610480919503809341 +:102BD0004A0110926C030E9415155CCF80919303FB +:102BE000813209F057CF8091E800877F8093E80019 +:102BF0000E9461048091960380936D034BCF809176 +:102C00009303813A09F046CF8091E800877F809353 +:102C1000E8008091E80080FFFCCF80916D03BCCF7D +:102C2000803899F0823809F0C6C1809197038F707F +:102C3000873008F0C0C18093E9008091EB0085FBEC +:102C4000882780F91092E90006C080918F03909147 +:102C50009003911182609091E800977F9093E80033 +:102C60008093F1001092F1008091E8008E779FC16F +:102C7000882309F48DC1823009F09DC180919503AC +:102C8000811190C1809197038F702FEF280F26300C +:102C900008F091C18093E9002091EB0020FF82C1F0 +:102CA000933031F48091EB0080628093EB007AC125 +:102CB0009091EB0090619093EB0021E030E001C037 +:102CC000220F8A95EAF72093EA001092EA00809199 +:102CD000EB008860EACF81116EC1109195031F77D8 +:102CE0008091E3008078812B8093E3008091E8005D +:102CF000877F8093E8000E9461048091E80080FF54 +:102D0000FCCF8091E30080688093E30082E01111A2 +:102D100083E0809391034FC18058823008F04BC10B +:102D200020919503309196032C3DE3E03E07A1F5F9 +:102D300083E08A838AE289834FB7F894DE01139691 +:102D400020E03EE051E2E32FF0E050935700E491A1 +:102D500020FF03C0E295EF703F5FEF708E2F90E091 +:102D6000EA30C0F0C7968D939D932F5F243159F7B9 +:102D70004FBF8091E800877F8093E8006AE270E0AF +:102D8000CE0101960E9413058091E8008B77809315 +:102D9000E80011C1C096E7CF809197039091980306 +:102DA000432F55274330510509F44AC078F5413087 +:102DB000510509F47AC08BE590E0EBEAF6E0423089 +:102DC000510509F0F8C02091E800277F2093E80022 +:102DD0002091990330919A038217930708F49C017C +:102DE00040E02115310509F065C0411163C08091B3 +:102DF000E80082FDC9CF80919103882329F28530B4 +:102E000019F28091E80083FFF2CFBECF4132510525 +:102E100009F43CC04232510509F0CDC08330910520 +:102E200008F0C9C0FC01EE0FFF1FE254FE4F0190F5 +:102E3000F081E02D85549E4FDC018C9190E01AC00A +:102E4000332721303105D1F02115310561F02230D1 +:102E5000310509F0B0C0E8E1F7E0E4918E2F90E091 +:102E6000E8E1F7E007C0E8E3F7E0E4918E2F90E0B7 +:102E7000E8E3F7E0009709F49EC0A5CFE4E2F7E0AD +:102E8000E4918E2F90E0E4E2F7E0F4CF83309105F7 +:102E900008F091C0880F991FFC01EC53FE4F019080 +:102EA000F081E02D89E090E08ECF82E190E0E6E0D5 +:102EB000F7E089CF80919103882309F465CF8530AD +:102EC00009F462CF8091E80083FD5ECF8091E80035 +:102ED00082FD8DCF8091E80080FF83CF9091F30039 +:102EE0008091F2002115310519F08830910550F0DC +:102EF00041E0089709F040E08091E8008E778093E8 +:102F0000E8006FCF44914093F10031962150310990 +:102F10000196E8CF803809F04EC08091E800877FA5 +:102F20008093E800809192038093F1009DCE8111FF +:102F300042C0109195031230F0F58091E800877F30 +:102F40008093E800109392030E946104112311F012 +:102F500084E005C08091E30087FDFACF81E0809393 +:102F6000910342E061EC81E00E94800442E261EC66 +:102F700084E00E94800442E261EC82E00E948004CE +:102F800042E260EC83E00E9480048091910313C0D0 +:102F900080919503813079F481E0933009F080E0ED +:102FA000809390031092E9008091E800877F8093DE +:102FB000E8000E9461048091E80083FF0AC08091CC +:102FC000E800877F8093E8008091EB008062809327 +:102FD000EB00AA960FB6F894DEBF0FBECDBFDF910F +:102FE000CF911F91089569EE7EEF90E080E00E94FE +:102FF000C72E60E082E090E00E94A92E60E083E0AE +:1030000090E00E94A92E10924A021092490260E0BC +:1030100084E090E00E94A92E60E082E290E00E94AD +:10302000A92E60E085E090E00E94A92E60E086E095 +:1030300090E00E94A92E6FEF87E090E00E94A92EF9 +:1030400040E050E0BA0188E090E00E94BB2E60E0D2 +:103050008DE090E00E94A92E40E050E0BA0188E1A6 +:1030600090E00E94BB2E60E087E190E00E94A92ED4 +:1030700040E050E0BA018CE190E00E94BB2E70E08D +:1030800060E080E290E00E94C72E40E050E0BA018C +:1030900088E190E00E94BB2E80E00E94E90D0E9432 +:1030A000010E40E050E0BA018FE090E00E94BB2E9C +:1030B00040E050E0BA0183E190E00C94BB2E8F9287 +:1030C0009F92AF92BF92CF92DF92EF92FF920F93B7 +:1030D0001F93CF93DF9300D000D0CDB7DEB76C0144 +:1030E000FC0183819481892B31F080819181892336 +:1030F0008F3F09F057C60F900F900F900F90DF9100 +:10310000CF911F910F91FF90EF90DF90CF90BF90E4 +:10311000AF909F908F900895980122513F452031A4 +:10312000310508F034C68FEF93E00E94952E0251CE +:1031300077E0E72E72E0F72E882361F18091450257 +:103140008770C9F2F60182818823A9F28091670312 +:1031500082FDD1CF82E00F900F900F900F90DF9102 +:10316000CF911F910F91FF90EF90DF90CF90BF9084 +:10317000AF909F908F900C949C14E114F4E0FF06A4 +:10318000E9F2C7010E94952E811101C001502FEF75 +:10319000E21AF20A0111F1CF1C821B82BB24B39404 +:1031A0006AE0A62E87010F5F1F4FC7010E94952E70 +:1031B00089831A82882311F29FEF980F933008F5C4 +:1031C0008A83B98232E0E30EF11CC8010E94952E79 +:1031D0008B83882309F4B2CF8E010F5F1F4FF80154 +:1031E00080818823F9F2813009F043C09181828186 +:1031F000913049F40E5F1F4F0E94060D0F5F1F4F65 +:10320000EECF7801E9CF923029F40E5F1F4F0E9474 +:10321000510CF4CF933029F40E5F1F4F0E94330BF3 +:10322000EDCF943019F00F5F1F4FE8CF0E5F1F4FA7 +:1032300030E020E0B8016F5F7F4FF801418180539B +:10324000990B8A30910550F021503109B8F28FE97D +:103250009FE00197F1F700C00000F6CFA29EF001B9 +:10326000A39EF00D11249C012E0F3F1F842F8B0174 +:10327000E1CF0E94210DC2CF81E00E94D5140E94AF +:103280007C145CCF81E00E948B14F9CF82E0FBCFED +:10329000882309F41AC180915A02811106C081E085 +:1032A00080935A0282EE0E94510C0E9484059093F2 +:1032B0005902809358028BE20E94510CF6018281E0 +:1032C000882369F0C801815E9C45059740F46FE151 +:1032D000600F60935B028CE090E00E94A92E17FFC4 +:1032E00070C0F6018281882309F46BC00E94BC057E +:1032F000869581708093EE010E94BC058170809359 +:10330000ED0180915B02813039F48091EE018823D8 +:1033100019F089E30E94060D80916C038093EC0103 +:1033200010926C0380915B02813009F4B7C188234D +:1033300009F4B0C1823009F4C4C1843009F4D5C1A4 +:103340008FE39CE90197F1F700C000005801E89471 +:10335000B7F84CE0E42EF12C5AE0852E912CC501F3 +:103360000E2C02C0969587950A94E2F78F70909183 +:103370005B02923009F0C0C18A3008F0BBC190E016 +:103380000996B4010E94FB2D875A0E94060D94E015 +:10339000E91AF108ECEFEE16EFEFFE0601F7809167 +:1033A0005B02813009F4B6C1882309F4AFC18230D1 +:1033B00009F4BCC1843009F4C2C18091EC0180934E +:1033C0006C03F6018281882369F180916C0382721B +:1033D0000C3CFCE51F0709F465C208F0E5C1063C9A +:1033E0003CE5130709F44AC208F0BCC1033CECE514 +:1033F0001E0709F439C208F0A4C1023C2CE51207EB +:1034000009F40BC20A358DE5180709F489C208F0E2 +:1034100063C20115ECE51E0709F470C20E3D1C45A0 +:1034200009F47BC2F60186819781009709F47CC27A +:103430000E9454088C01F601F280B580B2943FE0FE +:10344000B322809145028770C1F0AF2CFF20B1F00C +:10345000812F807F803421F080E2800F883068F0F7 +:103460008091670382FD09C082E00E949C148091D4 +:1034700045028770AA24A3948111A12C912E9294C5 +:103480002FE09222FBE0F91508F4CDC2E92DF0E01F +:10349000E950F14D0C94312E8823A1F080915A020D +:1034A000811106C081E080935A0282EE0E94510C85 +:1034B0000E948405909359028093580281EE0E94E5 +:1034C000510CF9CE81EE0E94330B8BE20E94330B3C +:1034D000F5CE882309F4F2CE81EE0E94510C83EEE2 +:1034E0000E94510C8FE40E94510C8FE40E94330B18 +:1034F00083EE0E94330B81EEE9CF882309F4DECE00 +:1035000081EE0E94510C83EE0E94510C80E50E94D6 +:10351000510C80E5EBCF882309F410CE10915702AF +:1035200081E01827109357020E9484059093560259 +:10353000809355021123C9F028E148E76FEF8FE02F +:103540000E94A71129E148E76FEF8FE00E94A711C1 +:103550002AE148E76FEF8FE00E94A7112BE148E7CF +:103560006FEF8FE00E94A711E9CD10921C018CE152 +:1035700080931D0180931E0181E20E94A913DECD7C +:10358000882309F49BCE80EE0E94510C81EE0E94AC +:10359000510C80E10E94510C80E10E94330B81EEBE +:1035A0000E94330B80EE0E94330B80914E0291E01B +:1035B00022E148E76FEF892780934E02882351F07C +:1035C0008FE00E94A71126E148E76FEF8FE00E948D +:1035D000A71174CE8FEA0E94A71126E148E76FEF8A +:1035E0008FEAF5CF882309F4A9CD1091540201E0A8 +:1035F0001027109354020E948405909352028093E6 +:1036000051028091530210921C01882319F18CE120 +:1036100080931D0180931E0181E20E94A91328E07E +:1036200044E666EE80E00E94A71129E044E666EEDB +:1036300080E00E94A7112DE044E666EE80E00E9443 +:10364000A71100935402109253021092500210924C +:103650004F0274CD8CE180931D0180931E0181E2A5 +:103660001123A9F00E94A91328E044E666EE80E049 +:103670000E94A71129E044E666EE80E00E94A711AF +:103680002DE044E666EE80E00E94A711DCCF0E94A8 +:10369000A913D9CF82EE0E94510C52CE83E00E9432 +:1036A000180B88E10E94510C8FE39CE90197F1F718 +:1036B00000C0000088E10E94330B83E00E940D0BE4 +:1036C0003FCE8091ED01811103C083E50E94060D7C +:1036D00082EE0E94510CEFE3FCE93197F1F700C054 +:1036E000000087E50E94060D2BCE86EE0E94060D97 +:1036F00088E1F8CF865049CE96EF980F963020F0AB +:10370000805D0E94210D43CE895AFBCF82EE0E943C +:10371000330B53CE8CE20E94060D8091EE0188237C +:1037200009F44BCE89E30E94060D47CE82EE0E943B +:10373000330B8091ED01811140CE83E5F4CF88E217 +:10374000F2CF043C3CE5130709F493C04AE353E18C +:1037500063E473E1053C9CE5190709F053CE0E9430 +:103760000706ECCC093CECE51E0709F491C070F4A7 +:10377000073C2CE5120709F486C04EE253E162E2F1 +:1037800073E1083C3CE5130751F33CCE0A3C9CE551 +:10379000190709F482C04CE453E16DE573E10B3C79 +:1037A000ECE51E07E1F22ECE013DFCE51F0709F412 +:1037B00087C0B0F40E3C3CE5130709F47BC008F465 +:1037C00076C00F3C9CE5190709F477C06EE089E0EC +:1037D000003DECE51E0709F015CE0E94F714AECCB3 +:1037E000043DFCE51F0709F471C068F4023D3CE5A7 +:1037F000130709F468C0033D8CE5180709F002CEF1 +:1038000061E088E12EC0053D9CE5190709F461C01F +:103810000D35100709F492CCF5CD8091E60280FFBA +:103820001BC08E7F8093E6026091E6027091E702F2 +:103830008091E8029091E9020E94661210928D0236 +:10384000FFEF20E732E0F15020403040E1F700C0C8 +:1038500000000E94280F72CC81608093E60261E034 +:1038600086950E946E136ACC44EE54E16DEE74E1CD +:1038700076CF4DEE54E164EE74E171CF43E453E151 +:103880006AE373E16CCF42E253E16EE273E167CF2A +:103890004AE053E166E173E162CF46E153E16AE059 +:1038A00073E15DCF4DE553E16CE473E158CF61E026 +:1038B00081E0D7CF65E082E090CF68E086E08DCFF1 +:1038C00064E18FE08ACF67E185E187CF62E289E139 +:1038D00084CF61E083E2C5CF0B352DE5120711F1EE +:1038E0000C351D4509F09ECD8091670382FB88272A +:1038F00080F991E089270E94B81494CD10926C034E +:103900000E9415158FEF94E3ECE081509040E04069 +:10391000E1F700C000000E942D0C0E94F3170ECCAE +:1039200081E0E9CF80E0E7CF8281008111818823A7 +:1039300069F0C8010E94430EF82E682FC8010E944A +:10394000BE0AB8018F2D0E94360E72CDC8010E94AA +:10395000970AF82EF6CF212F2F70E22E107F19F044 +:10396000E29490EFE922FF20B9F0EE2069F080E2C6 +:10397000800F883010F0011109C080916C03E82A93 +:10398000E0926C030E94E909802F4BC080914702AE +:10399000E82AE0924702F6CF802F0E94330BEE20F8 +:1039A00009F441C080E2800F883010F0011104C09A +:1039B0008E2D0E94E20906C0E09480914702E82221 +:1039C000E09247020E94E9092EC0312F3F70E32E9A +:1039D000107F103219F0E29480EFE822002381F08A +:1039E000013009F47EC0FF2009F488C0BB2009F42F +:1039F0007EC0F601858180FFC7CF8F70858377C039 +:103A00002091670322FF4AC0FF2009F441C0EE2045 +:103A100039F080916C03E82AE0926C030E94E90976 +:103A200080E00E94510C292D2850330B24303105A1 +:103A300020F40E94BC050E94890BAA20A9F0809165 +:103A4000450280FD11C0F601128285958595859508 +:103A50000E94D514C6010E945F1880914502859589 +:103A6000859585950E948B1460E0C6010F900F909C +:103A70000F900F90DF91CF911F910F91FF90EF90DA +:103A8000DF90CF90BF90AF909F908F900C94B90E25 +:103A900080E00E94330BEE2031F28ACFFF20A1F0AC +:103AA000909148028E2D892BB11003C00E94290BE2 +:103AB000BACFE1E0BE12FACF22FDB5CF891709F4E3 +:103AC000B2CF80934802AFCFB11006C00E94DC098C +:103AD0008E2D0E94220BA7CFF1E0BF1609F4A3CFD1 +:103AE000F5CFFF2031F022E02B1508F49CCF8E2D6E +:103AF000DDCF31E03B1508F496CFEACFBB2041F390 +:103B0000093369F4FFEF27EE33E0F15020403040F5 +:103B1000E1F700C00000802F0E94330B84CF8FE3B9 +:103B20009CE90197F1F7F5CF812F869586958370F3 +:103B300061F0813009F077CFC8019370F11002C0B5 +:103B400090E080E00E9490056ECFC8019370F11064 +:103B500002C090E080E00E94A60565CF802FFF2084 +:103B600029F00E949E070E94BC065DCF0E94E306DA +:103B7000FACF812F837009F03FC0F11054CF402F4E +:103B8000429546954770440F440F802F8F7090E008 +:103B9000042E02C0880F991F0A94E2F730E020E05B +:103BA00004FF09C02FE030E002C0220F331F4A9506 +:103BB000E2F720953095169516951370123099F00E +:103BC00078F44091490250914A02113039F0822B29 +:103BD000932B842395230E94070B25CF842B952BB1 +:103BE000822B932BF8CF822B932B2091490230917B +:103BF0004A0282279327EFCF8695FF2011F0812F6D +:103C00008170882309F40FCF402F42954695477065 +:103C1000440F440F802F8F7090E0042E02C0880F55 +:103C2000991F0A94E2F730E020E004FF09C02FE07A +:103C300030E002C0220F331F4A95E2F720953095FD +:103C4000169516951370123099F078F440919B03F5 +:103C500050919C03113039F0822B932B84239523B0 +:103C60000E947414E0CE842B952B822B932BF8CFDB +:103C7000822B932B20919B0330919C0382279327C7 +:103C8000EFCF1F70FF2029F0812F0E94D514802FC5 +:103C90000DCF802F0E94220B812F0E948B14C3CE48 +:103CA000023F71F160F4003FB9F0013F81F0FF2065 +:103CB00009F459C0B11068CE812F8F7125C0033F20 +:103CC00031F1043FA1F78091670382FF2EC0812F5D +:103CD0008F71FF2011F318C0FF2069F091E09B1550 +:103CE00008F4A1CE1F7181E090E002C0880F991FF7 +:103CF0001A95E2F7BFCFE2E0EB1508F494CEF2CFCD +:103D0000812F8F71F110C9CF0E94D5148CCE90E015 +:103D100080E0FF2009F4A4CF1F7181E090E002C091 +:103D2000880F991F1A95E2F79BCFFF2089F01F712A +:103D3000812F0E94D5148091670382FD07C0F8E0AF +:103D40001F9FC0011124836080934502812FDCCF27 +:103D500081E00E949C1421E02B1508F064CE82E0E3 +:103D60000E949C1460CEBB2079F0093341F43FEFF0 +:103D700087EE93E0315080409040E1F7CACEEFE308 +:103D8000FCE93197F1F7C5CE812F8F7186CF0031D5 +:103D90003FE5130709F470CA01319FE51907A9F43B +:103DA00082E06BCA61E0C6010E94B90E8C01F60187 +:103DB00082818111B1C90031FFE51F0709F462CA90 +:103DC00001312FE5120709F461CAF801E058FF45F7 +:103DD000E730F10508F072CAED5FF04D0C94312E1A +:103DE000CF93DF9380910002807FA1F48091FD0149 +:103DF000882381F080914402D09103026091FB01FD +:103E00007091FC01A091FE01B091FF01C62FC72364 +:103E1000D81303C0DF91CF91089590E0109711F06F +:103E2000CF3F19F401968770F3CF9C0143E0220F36 +:103E3000331F4A95E1F7F901EC5FFD4F41814713CC +:103E4000F1CF40814613EECF42814111EBCF438148 +:103E500054814A1B5B0B403A510520F780910002C8 +:103E60008F70806180930002F901E75FFD4F8081D0 +:103E70008F70806180838BEF91E00E945F18DF91EB +:103E8000CF910C948D0AAF92BF92CF92DF92EF92B6 +:103E9000FF920F931F93CF93DF93CDB7DEB7659754 +:103EA0000FB6F894DEBF0FBECDBF8C0185E0F801E0 +:103EB000DE01519601900D928A95E1F7F801E280BA +:103EC0006BEFA62E61E0B62E6091FE017091FF01AE +:103ED0006115710509F468C19091FB014091FC01E5 +:103EE000892F84238F3F09F45FC120813181C380F2 +:103EF000D480F090FD01F601E61BF70BFF2009F4DA +:103F00001DC180910002582F507FE03AF10508F062 +:103F1000D0C0511181C0FE2C43132BC0921329C075 +:103F20006091010270910202F80146815781641785 +:103F30007507F9F4E1101DC08F7080618093000255 +:103F4000C5010E945F1880910002F80185838F2DC2 +:103F500065960FB6F894DEBF0FBECDBFDF91CF914F +:103F60001F910F91FF90EF90DF90CF90BF90AF9097 +:103F70000895CD2829F0822F83238F3F09F02FC188 +:103F800080E0F82FF170DF2E80FF3CC0809144026A +:103F900040910302841315C0298B3A8B89899A8931 +:103FA0000E947F0E292F22952F702230F8F02430A6 +:103FB00020F59F70F9F0F8019581907FD9F4D12C0C +:103FC0001FC090E0FC0153E0EE0FFF1F5A95E1F790 +:103FD000EC5FFD4F5181351306C05081251303C09E +:103FE0005281E5120FC001968770D4CF9F7011F0F7 +:103FF000882329F3805E883010F3C8010E945F187F +:10400000FD2CA5CFEE2009F4A2CF809100028160A3 +:1040100080930002F12C9BCF43131BC0921319C055 +:104020004091010250910202F80126813781421726 +:10403000530779F4E1100DC08583C8010E945F1811 +:1040400088E0F801ABEFB1E001900D928A95E1F7BD +:104050007ECFC8010E948B0E882339F1EE2029F112 +:10406000809100028032A0F02091FB013091FC0190 +:104070003A8729871B86DD86CC868E878091010250 +:1040800090910202988B8F87CE0109960E945F184B +:1040900088E0F801ABEFB1E001900D928A95E1F76D +:1040A0000E94F01EFF24F39452CFC8010E945F18B3 +:1040B000F9CF51110AC08BEF91E00E945F1888E0A0 +:1040C000F50111928A95E9F7A5CF431318C0921311 +:1040D00016C04091010250910202F80126813781F9 +:1040E0004217530761F4E1100AC08583C8010E949A +:1040F0005F1888E0F50111928A95E9F728CFC80189 +:104100000E948B0E882389F2EE2079F280910002C2 +:10411000803208F4BDCF2091FB013091FC013A833D +:1041200029831B82DD82CC828E8380910102909153 +:10413000020298878F83CE010196A8CFE03AF1055D +:10414000C0F6FE2CEE2009F4B0CF43131FC092132B +:104150001DC02091010230910202F80186819781F1 +:104160002817390799F49091000290FD69CF907F4C +:1041700009F466CF809100028583903F09F45DCFFA +:10418000982F907F905F8F70892B56CFC8010E9427 +:104190008B0E81117DCF809100028160809300029F +:1041A000C8010E945F18D3CEEE2009F47ECFC8016B +:1041B0000E948B0EF82E882309F477CF88E0F8014F +:1041C000ABEFB1E001900D928A95E1F78091FB0190 +:1041D0009091FC010E947F0E0E94F01EB8CE81E0FB +:1041E0008E25CFCECF93DF93CDB7DEB760970FB6D6 +:1041F000F894DEBF0FBECDBF29873A874B875C8717 +:104200006D877E878F87988BCE0109960E94431F0A +:10421000811112C088E0FE013996DE0111960190ED +:104220000D928A95E1F78C859D85892B29F08985EA +:104230009A8589238F3FA9F58091440290910302CA +:1042400089131CC060960FB6F894DEBF0FBECDBFB9 +:10425000DF91CF91089593E0AA0FBB1F9A95E1F7E4 +:10426000AC5FBD4F98E0FE01319601900D929A959A +:10427000E1F7809303020E948D0ADECFB8E08B9FA6 +:10428000C00111248C5F9D4F0E94431F8823D1F2EF +:104290008091440290E001968770992780934402B0 +:1042A000CBCFA0910302B0E0CD0101968770992792 +:1042B000209144022817190671F610926C030E948F +:1042C0001515109203021092440288E0EBEFF1E022 +:1042D000DF011D928A95E9F7AFCF0F931F93CF931C +:1042E000DF938091EE02E091ED02CCE081111AC0E3 +:1042F000DF91CF911F910F910895D1E0DE0FD09300 +:10430000ED020E2F10E0EC9FF0011124E151FD4F62 +:1043100083819481892B29F08081918189238F3F2A +:1043200051F4ED2F8091EE02E81738F31092EE026F +:104330001092ED02DDCFC09FD001C19FB00D1124BE +:10434000A151BD4F16968D919C911797892B29F4F9 +:1043500018968D919C91019651F420813181428172 +:10436000538164817581868197810E94F220C09F6C +:10437000F001C19FF00D1124E151FD4F1482138211 +:10438000D0CF10925A031092590310924901809194 +:104390005803809357030E94F6050C946D212F92C9 +:1043A0003F924F925F926F927F928F929F92AF92C5 +:1043B000BF92CF92DF92EF92FF920F931F93CF9312 +:1043C000DF93C0915703E7E0FE2E01E010E0FCE030 +:1043D0002F2EAEEFEA2E809158038C1316C00E9448 +:1043E0006D21DF91CF911F910F91FF90EF90DF90A2 +:1043F000CF90BF90AF909F908F907F906F905F9085 +:104400004F903F902F900C94F605D0E0FE01EE0FF8 +:10441000FF1FE15BFC4F80819181F89EF001F99EC6 +:10442000F00D1124E15EFE4F2481211158C030901F +:10443000EE02AFEEB2E030E020E0412C5F01231548 +:1044400008F04BC01A966D907C901B97F501808008 +:1044500091804FEF5FEF512CC52CD12CF601EE0F60 +:10446000FF1FE80DF91D659174916616770609F432 +:10447000A601672B11F05394EFCF4F3F5407B1F1D2 +:10448000B80102C0660F771F4A95E2F7462AA801D5 +:1044900002C0440F551F5A94E2F741505109441687 +:1044A000150601F5229EF001239EF00D1124E15125 +:1044B000FD4FF89ED001F99EB00D1124A15EBE4FB4 +:1044C00012962D913C91139737832683E082E182E7 +:1044D0009187808771E015967C930E94C80521968C +:1044E000C37079CF14961C921E9213972F5F3F4F83 +:1044F0001C96A5CF2F923F924F925F926F927F9220 +:104500008F929F92AF92BF92CF92DF92EF92FF92E3 +:104510000F931F93CF93DF93CDB7DEB769970FB695 +:10452000F894DEBF0FBECDBF498B5A8B6B8B7C8B53 +:104530008D8B6111109247021D861E861F86188A78 +:1045400085E0FE017196DE01199601900D928A9523 +:10455000E1F78C859D85892B31F089859A858923A2 +:104560008F3F09F0D4C129853A854B855C856D85DF +:104570007E858F8598890E94F220C3C028EFC216DD +:104580002CE5D20629F4882379F00E94C121EBCFD3 +:1045900039EFC3163CE5D30639F4882329F080911E +:1045A00049018111F2CFC3C10FE111E0E12CB12C1F +:1045B000A12C88248394912C9EEF592E442443945B +:1045C000F8016081718166246A94762C20E0422F84 +:1045D00050E0FA01EE0FFF1FE60FF71F859194914F +:1045E000C816D90609F43A01892B11F02F5FEFCFD5 +:1045F000F12CFFEF6F167F0609F445C0F8014481E6 +:10460000F09049018F2D411180E0F82FF170FF2EBD +:10461000F801258086819B85992309F408C1FF2034 +:1046200009F405C1211014C0A40101C0440F6A940B +:10463000EAF7842B86838091EB029091EC0280391B +:10464000914030F440E951E05093EC024093EB028A +:10465000C40102C0880F991F2A95E2F70197F8015B +:1046600026812817190679F48091590390915A03ED +:10467000009709F45FC00E9475058139914008F4E4 +:1046800059C0F8014482EF28FFEFAF1ABF0A095F53 +:104690001F4F26E0A216B10409F092CF8B85882324 +:1046A00009F420C1EE2009F41DC10E9484059093F5 +:1046B0005A03809359038091EE02883010F591E0FF +:1046C000980F9093EE0298E0FE013996DE01119664 +:1046D00001900D929A95E1F73CE0839FC00111246F +:1046E00081519D4F28E0FE013196DC0101900D9231 +:1046F0002A95E1F72FEF3FEFFC0131872087D38622 +:10470000C28669960FB6F894DEBF0FBECDBFDF91AB +:10471000CF911F910F91FF90EF90DF90CF90BF90BE +:10472000AF909F908F907F906F905F904F903F9051 +:104730002F9008958091570360905803982FF0E0D0 +:10474000E0E0861114C0909357030E171F0709F479 +:104750009ACF90E0FC01EE0FFF1FE15BFC4FB182AE +:10476000A082019683709927809358038CCF282EBE +:10477000312CF101EE0FFF1FE15BFC4F20813181F5 +:10478000F7E0F29FD001F39FB00D1124A15EBE4F60 +:104790002D913C911197398F288F712C60E070E03A +:1047A000E72FF0E0EE0FFF1F288D398DE20FF31F8A +:1047B0002591349121153105E1F0F8010190F08146 +:1047C000E02DFF8BEE8B60E005C02417350709F460 +:1047D0007F2C6F5FE62FF0E0EE0FFF1F4E895F89A1 +:1047E000E40FF51F459154914115510571F77F5F15 +:1047F000D7CF7720C9F0F801671708F0FD01448290 +:104800000E171F0721F490935703F72C3CCF9813F2 +:1048100005C0AE17BF0711F49F5F937091012F5F22 +:104820003F4F822F83708DCFF0E0E0E0F7CF90E034 +:1048300021101FC0B40102C0660F771F2A95E2F74E +:104840009B01215031092817390731F4442309F419 +:1048500047C0C5010E94C805C40101C0880F6A9401 +:10486000EAF7982F9095F801868189238683F22CA8 +:104870000ACF9C01062C02C0359527950A94E2F7D1 +:10488000A90141705527BC01615071098623972306 +:10489000892B11F5452B01F1F80182819381892B38 +:1048A000C1F01B821C821D821E8259825A820E9484 +:1048B00084058160582F9D838C83F80182819381C8 +:1048C0008F83988729813A814B816D817E810E94F7 +:1048D000F220F8011582C0CFF22FF1702F2EBCCF3D +:1048E0002F2CBACF9091570380915803981731F02D +:1048F0000E94CF21EE2009F436CE03CF0E946D2115 +:1049000010925A03109259030E94F605F3CF61E00A +:10491000CE0109960E94B90E6C018B85F7EFCF1678 +:10492000FCE5DF0609F02ACE882309F43DCE81E0BC +:104930008093490118CE9F92AF92BF92CF92DF929F +:10494000EF92FF920F931F93CF93DF9300D000D08D +:1049500000D0CDB7DEB78E010F5F1F4F86E0F801A4 +:1049600011928A95E9F78CE7C82E81E0D82EF12CB8 +:10497000E12CAA24A394B12CF60181916F018F3F01 +:1049800009F443C0F894E82FE295EF70F0E021A11C +:104990008F70A50102C0440F551F8A95E2F7CA0126 +:1049A000922F982B91A392A18095892382A378942A +:1049B00000C0E2E8F1E0912C31E021912F3F09F4B1 +:1049C0006EC0A22FA295AF70B0E090968C9190E04F +:1049D0002F7002C0959587952A95E2F780FD5FC0FC +:1049E000832F982A330F51E0E638F50731F7F601A7 +:1049F000319780818F3F11F00E94FA0780EA8A95F3 +:104A0000F1F7F801EE0DFF1D9082EFEFEE1AFE0AAE +:104A1000F6E0EF16F10409F0AFCF46E050E0B80140 +:104A20008FE592E00E94882EFF24F394009709F40A +:104A3000F12C892BB1F186E0F801AFE5B2E00190ED +:104A40000D928A95E1F781E080934D020E948405E2 +:104A500090934C0280934B0280914B0290914C02B8 +:104A60000E947505059708F180915F02809372029C +:104A7000809160028093730280916102809374023E +:104A80008091620280937502809163028093760226 +:104A9000809164028093770210924D0206C080E0FC +:104AA000A0CF80914D028111D7CF809149018823F9 +:104AB00001F18091590390915A030097D1F00E941F +:104AC00075052091EB023091EC022817390788F424 +:104AD0009091570380915803981709F47EC00E9463 +:104AE000CF211092EC021092EB0210925A03109216 +:104AF000590380915A02882371F080915802909155 +:104B000059020E947505893E934028F082EE0E946A +:104B1000330B10925A0280915702882391F08091B2 +:104B20005502909156020E947505883E934048F0C8 +:104B30000E948405909356028093550283E70E9459 +:104B4000060D8091530290915402992309F44EC0AE +:104B5000811130C080915102909152020E947505DE +:104B600081369A4E78F080914F02909150020196D2 +:104B70009093500280934F020E94840590935202BA +:104B80008093510280914F02909150024F9708F408 +:104B90005CC010921C018CE180931D0180931E016A +:104BA0008FE00E94A91381E080935302109250027B +:104BB00010924F028F2D26960FB6F894DEBF0FBECF +:104BC000CDBFDF91CF911F910F91FF90EF90DF90BC +:104BD000CF90BF90AF909F9008950E946D2110924A +:104BE0005A03109259030E94F60583CF8111E2CF38 +:104BF00080914E02882361F022E148E76FEF8FE059 +:104C00000E94A71126E148E76FEF8FE00E94A711ED +:104C100080915702882371F228E148E76FEF8FE017 +:104C20000E94A71129E148E76FEF8FE00E94A711CA +:104C30002AE148E76FEF8FE00E94A7112BE148E7D8 +:104C40006FEF8FE00E94A711B5CF28E044E666EE33 +:104C500080E00E94A71129E044E666EE80E00E9411 +:104C6000A7112DE044E666EE80E00E94A711C0CFB8 +:104C700090E080E00E94A32E893E9E4F11F40C9498 +:104C8000F90E80E008951F920F920FB60F92112433 +:104C90002F933F934F935F936F937F938F939F9344 +:104CA000AF93BF93CF93DF93EF93FF93D091E9003E +:104CB000DF708091EC00C82FC17080FDC0E81092B9 +:104CC000E9008091F000877F8093F00078940E9443 +:104CD00028151092E9008091F00088608093F00020 +:104CE000CD2BCF70C093E900FF91EF91DF91CF9171 +:104CF000BF91AF919F918F917F916F915F914F91F4 +:104D00003F912F910F900FBE0F901F9018951F92FB +:104D10000F920FB60F9211242F933F934F935F93EF +:104D20006F937F938F939F93AF93BF93EF93FF9373 +:104D30008091E10082FF09C08091E20082FF05C0FE +:104D40008091E1008B7F8093E1008091DA0080FF09 +:104D500024C08091D80080FF20C08091DA008E7F2F +:104D60008093DA008091D90080FF9DC080E189BDE9 +:104D700082E189BD09B400FEFDCF81E080939103FB +:104D800080916B03811109C00E94E7030E94B20465 +:104D90008091E20084608093E2008091E10080FFD6 +:104DA00017C08091E20080FF13C08091E2008E7FE7 +:104DB0008093E2008091E20080618093E200809124 +:104DC000D80080628093D80019BC85E0809391035D +:104DD0008091E10084FF2BC08091E20084FF27C016 +:104DE00080E189BD82E189BD89B5982F917080FFEE +:104DF000FBCF8091D8008F7D8093D8008091E10017 +:104E00008F7E8093E1008091E2008F7E8093E200AC +:104E10008091E20081608093E20080919203882378 +:104E200009F447C084E080939103809191038091BD +:104E3000E10083FF27C08091E20083FF23C08091BF +:104E4000E100877F8093E10082E0809391031092DC +:104E500092038091E1008E7F8093E1008091E200D7 +:104E60008E7F8093E2008091E20080618093E20077 +:104E700042E060E080E00E9480048091F000886061 +:104E80008093F000FF91EF91BF91AF919F918F912F +:104E90007F916F915F914F913F912F910F900FBE36 +:104EA0000F901F90189519BC1092910310926B03EC +:104EB00074CF8091E30087FD93E090939103B5CF89 +:104EC00078941F921FB61F9211248F939F93AF93D4 +:104ED000BF938091620390916303A0916403B091AA +:104EE00065030196A11DB11D809362039093630336 +:104EF000A0936403B0936503BF91AF919F918F918D +:104F00001F901FBE1F9018951F921FB61F9211244D +:104F10008F939F93AF93BF9380916103811113C0CF +:104F20008091620390916303A0916403B091650343 +:104F30004196A11DB11D8093620390936303A093DA +:104F40006403B0936503BF91AF919F918F911F90C0 +:104F50001FBE1F901895CDB7DEB7EE970FB6F89429 +:104F6000DEBF0FBECDBF84B7877F84BF0FB6F89476 +:104F7000A895809160008861809360001092600025 +:104F80000FBE80E890E00FB6F89480936100909394 +:104F900061000FBE85B7806885BF85B7806885BF13 +:104FA00088EF97E09093CB018093CA010E94E703BA +:104FB0000E94B2048091E20084608093E2007894C1 +:104FC000809191038823A1F01091E9001F709091C6 +:104FD000EC00892F817090FD80E8182B1092E90079 +:104FE0008091E80083FD0E9428151F701093E9004E +:104FF00082E084BD93E095BD9AEF97BD80936E00EB +:105000000E94F90E811102C00E94010E0CE711E00E +:1050100022E8C22E21E0D22ED8018D918D018F3F42 +:1050200011F00E94FA07C016D106B1F786EF0E9470 +:10503000FA0787EF0E94FA0783E90E94FA0786E9D8 +:105040000E94FA0786E0E2E7F2E0DF01282F1D92D6 +:105050002A95E9F7EFE5F2E0DF011D928A95E9F77D +:105060000E943826811102C00E94F31782E090E06E +:105070000E94952E80936B0284E090E00E94952E12 +:10508000182F82E290E00E94952E982F812F909306 +:105090006703809366030E949B24EFE3FCE931974A +:1050A000F1F700C000000E949B248091720280FFF3 +:1050B00008C06FEF7FEF90E080E00E94C72E0E9453 +:1050C0002D0C83E090E00E94952E90E00E94070B4B +:1050D00080919B0390919C030E94CF13509A589A01 +:1050E000559A5D9A549A5C9A8CE090E00E94952EB5 +:1050F00090E0B0E0A0E080935B0290935C02A0930C +:105100005D02B0935E0280916502811132C00E94FF +:105110003826811104C00E94F3170E94051588E00B +:1051200090E00E949D2E6093E6027093E7028093C8 +:10513000E8029093E9026E7F71F40E94051588E001 +:1051400090E00E949D2E6093E6027093E7028093A8 +:10515000E8029093E9020E940D0610928D02809160 +:10516000E60280FF03C086950E94A91381E0809328 +:1051700065025198599A52985A9A89B186958170C8 +:105180004A994EC290E0892B809369026091660330 +:105190006068609366031091670384E090E00E946A +:1051A000A92E612F82E290E00E94A92E81E20E9446 +:1051B000A91381E090E00E94741480E091E0909344 +:1051C0005E0380935D0308E1C02ED12C82E792E05C +:1051D00096E0B92EB80E80919103853021F510E448 +:1051E000912E8824839400E112E18091910385300F +:1051F00009F418C210926C030E9415150E94BC0598 +:105200000E94890B1092850280916602882309F41E +:105210005DC28091E60281608093E60286950E94DD +:10522000A9130E94120F0E949B24882359F08FB764 +:10523000F89440916203509163036091640370910C +:1052400065038FBFA2E7B2E0ECE6F2E010E000E019 +:10525000302F8D919191981709F445C2292F282755 +:1052600090E099249394422F492109F437C29DABD1 +:105270003EAB892191E009F490E09FAB0E94840548 +:105280008160782F99AF88AF4DA95EA96FA989ADCC +:105290000E947A22F801E459FD4F8081982690827D +:1052A00080918D028823D1F180918C02E091E602F9 +:1052B000E695E81BE0938802823009F02BC2F0E00B +:1052C000EA55FD4FE4910E2F10E0B2E58B2EB2E1CE +:1052D0009B2E80918902882361F0109289020E949E +:1052E0008405909387028093860210928B0210921D +:1052F0008A020E948405E0918602F09187028E1B4B +:105300009F0B8F3F9F4750F4E00FF11FF0938702F0 +:10531000E093860286E892E0F4010995E091690243 +:10532000EE0FEE0FE093690289B181FBEE24E0F805 +:105330004A994AC280E08E29E82BE0936902EF7017 +:10534000F0E0EA57FE4F808190916802890F8093C8 +:10535000680220E0843034F1809167028F5F80938F +:10536000670212E018AB19AA81E08AAB0E9484059B +:105370008160782F9CAB8BAB48A959A96AA98CA9ED +:105380000E947A221BA71CA61DA60E94840581608C +:10539000782F9FA78EA74BA55CA56DA58FA50E9412 +:1053A0007A2221E0809168028D3F2CF5809167027E +:1053B0008150809367021EA21FA281E088A70E94ED +:1053C00084058160782F9AA789A74EA15FA168A55F +:1053D0008AA50E947A2219A21AA21BA20E94840501 +:1053E0008160782F9DA38CA349A15AA16BA18DA1A7 +:1053F0000E947A2221E080916802082E000C990B0D +:1054000064E070E00E94FB2D80936802222359F033 +:105410008FB7F894409162035091630360916403E5 +:10542000709165038FBF86E0EFE7F2E0DE01119631 +:1054300001900D928A95E1F790908102809082020E +:1054400010918302009184021092810210928202D4 +:105450001092830210928402892D882909F448C091 +:1054600080917D0290917E020E9475059C01909131 +:105470007902992309F498C323333105C8F19F3F7A +:1054800019F09F5F90937902992059F00E947E074E +:105490009FEF19140CF491E0899F802D11248093C3 +:1054A0008102882059F00E947E079FEF18140CF4A7 +:1054B00091E0899F802D1124809382023091810296 +:1054C0003323B1F020918202222391F045EB340383 +:1054D000C0011124992309F47AC19093810245EB0C +:1054E000240390011124332309F475C130938202FF +:1054F000812F802B09F448C080917B0290917C021F +:105500000E9475059C0190917802992309F447C384 +:1055100025363105C8F19F3F19F09F5F90937802BF +:10552000112359F00E945C079FEF11160CF491E0D3 +:10553000899F802D112480938302002359F00E94BB +:105540005C079FEF10160CF491E0899F802D1124C9 +:1055500080938402309183023323B1F0209184023E +:10556000222391F045EB3403C0011124992309F45F +:1055700036C19093830245EB240390011124332319 +:1055800009F431C1309384028091810290918202AA +:10559000892B90918302892B90918402892B11F0A1 +:1055A0000E94BC0686E0FE013196AFE7B2E00190B2 +:1055B0000D928A95E1F70E94BC0590916A028917C5 +:1055C00031F00E94BC0580936A020E94890B809191 +:1055D0009103843009F0FFCD83E08093E90080914E +:1055E000E80082FFF8CD8091E80090E085FF06C0DA +:1055F0000E940604882309F4FAC091E08091E80033 +:105600008B778093E800992309F4E5CDE981E15097 +:10561000E33108F06EC1F0E0E65FF04D0C94312EFE +:1056200092E0B1CD80919103843009F440C080E0D4 +:105630000E94890B10928D0280918502811116C003 +:10564000809285028091E602982F91709093660275 +:105650008E7F8093E602FFEF20E742E0F15020408A +:105660004040E1F700C000000E94280F1092610343 +:105670000FB6F894A895C09260000FBE909260009B +:1056800083B7817F846083BF83B7816083BF789451 +:10569000889583B78E7F83BF0FB6F894A8958091C5 +:1056A0006000886180936000109260000FBE80915E +:1056B0009003882309F499CD0E949B24E2E7F2E04D +:1056C000819181114BC2BE12FBCF8FCD80918E0292 +:1056D000882309F4A6CD0E94280FA3CD9F5F990CC3 +:1056E000943009F0C0CD0F5F1F4F0630110509F04F +:1056F000AFCD8FEF8AAF8BAF1CAE0E948405816067 +:10570000782F9EAF8DAF4AAD5BAD6CAD8EAD0E9474 +:105710007A22C6CD863059F4F0E0ED55FD4FE49184 +:105720000E2F10E0A2E48A2EA2E19A2ED2CD89306B +:1057300061F4E695F0E0E056FD4FE4910E2F10E0A5 +:10574000FAE68F2EF1E19F2EC4CD8F3061F4E695FD +:10575000F0E0E356FD4FE4910E2F10E0E0EF8E2EC7 +:10576000E0E19E2EB6CD853159F4F0E0E656FD4FCE +:10577000E4910E2F10E07DE7872E70E1972EA9CDE2 +:1057800008E210E04DEE842E4FE0942E883109F4AB +:10579000A0CD833249F4E8E9F2E00591149169EE75 +:1057A000862E61E1962E95CD04EF11E050EB852E0B +:1057B0005FE0952E843209F48CCD00ED17E03CE0DB +:1057C000832E36E0932E85CD82E090E0B4CD81E04B +:1057D0008093810284CE81E08093820289CE81E031 +:1057E00080938302C8CE81E080938402CDCE00E214 +:1057F00010E0CE0101964C018091E80085FD0AC0C1 +:105800008091E8008B778093E8000E94060488234B +:1058100099F3F3CE8091F100D4018D934D010150A5 +:10582000110951F7EACE1A8289E08B832DC08A8153 +:10583000823009F4ABC18330A9F0813009F059C03E +:105840002FB7F894609162037091630380916403B1 +:10585000909165032FBF0E94372E6B837C838D83CD +:105860009E8312C0809172028B83809173028C831D +:10587000809174028D83809175028E83809176026F +:105880008F8380917702888780919103843009F01B +:10589000A2CC1091E9001F709091EC00892F8170CB +:1058A00090FD80E8182B82E08093E9008091E80069 +:1058B00080FF0DC050E040E060E270E0CE01019654 +:1058C0000E9437048091E8008E778093E8001F7073 +:1058D0001093E90080CC8A81823059F46B817C81FD +:1058E0008D819E810E94372E86E290E00E94A92E33 +:1058F000CBCF8FEF8983C8CF4C816B818A810E9487 +:10590000100E9827892798279E838D83BDCF8D8081 +:105910009E809824892498248A810B81B8E00B9F6B +:1059200080011124E0E38E9F000D111D11248C8154 +:1059300090E0880F991F080F191F692DC8018796DD +:105940000E94A92E682DC8018896D0CF0E94970D7D +:105950009BCF8A818138C1F060F4803809F094CF00 +:1059600020E04B816091E8028091E7020E9478126A +:105970008BCF823849F1833809F086CF20E04091FF +:10598000E9026C818B81F2CF8B810E94A9139B81EC +:105990008091E602911111C08E7F8093E6021092F1 +:1059A0008D02FFEF20E742E0F15020404040E1F758 +:1059B00000C000000E94280F67CF81608093E6023C +:1059C00086950E94A91360CF8B818093EA025CCFF9 +:1059D0008A81813899F030F4803809F055CF809170 +:1059E000E90223CF823891F0833809F04DCF8091BE +:1059F000E7028B838091E8028C8346CF8091E60298 +:105A000080FF02C0869511CF80E00FCF8091EA021F +:105A10000CCF6091E6027091E7028091E8029091CC +:105A2000E9020E94661230CF80E18A832DCF81E0A7 +:105A30008A8389EFFACE0A811B811027012710275C +:105A4000CE0101963C018C80DC01A80DB11D4D01F9 +:105A5000C801895F9D4F8614970409F415CF093F4B +:105A6000B1E01B0750F40E94952EF30184830F5F71 +:105A70001F4FBFEF6B1A7B0AEBCFD30114961C921A +:105A8000F6CF0A811B81102701271027FE013196CE +:105A90003F018C80800E912E911CC801895F9D4F23 +:105AA0008016910609F4F0CE093FF1E01F0728F4B3 +:105AB000D30114966C910E94A92EBFEF6B1A7B0A3A +:105AC0000F5F1F4FEACF0E94870DDECE8AE0ADCF79 +:105AD0000A811B81102701271027FE0131963F0103 +:105AE0008C80CF01880D911D4C01C80187968614CA +:105AF000970409F4C9CE003EA1E01A0750F40E94B1 +:105B0000952EF30184830F5F1F4FBFEF6B1A7B0A43 +:105B1000ECCFD30114961C92F6CF0A811B8110277B +:105B200001271027FE0131963F018C80800E912EB7 +:105B3000911CC80187968016910609F4A5CE003EF7 +:105B4000F1E01F0728F4D30114966C910E94A92E4E +:105B5000BFEF6B1A7B0A0F5F1F4FEBCF09BD19BD5B +:105B600009B400FEFDCF8091D8008F7D8093D800CE +:105B70008091E00082608093E0008091E00081FDF0 +:105B8000FCCF10926C030E9415152FCB86E290E09B +:105B90000E94952E1B821C821D828E8375CE2D3213 +:105BA000314008F0BACCF0CC2D32314008F069CC4D +:105BB0009FCC87FB082E062687FD819567FD6195A2 +:105BC0000E946F2E0EF4919507FC81950895AA1BF3 +:105BD000BB1B51E107C0AA1FBB1FA617B70710F0D8 +:105BE000A61BB70B881F991F5A95A9F7809590950A +:105BF000BC01CD01089597FB072E16F4009407D041 +:105C000077FD09D00E94E72D07FC05D03EF4909562 +:105C100081959F4F0895709561957F4F0895A1E2FA +:105C20001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F16 +:105C3000FF1FA217B307E407F50720F0A21BB30B61 +:105C4000E40BF50B661F771F881F991F1A9469F7DD +:105C500060957095809590959B01AC01BD01CF0139 +:105C60000895EE0FFF1F0590F491E02D0994692728 +:105C70009627692778278727782708950E94462E38 +:105C8000332312F48A1B9B0B0C94572EA29FB00156 +:105C9000B39FC001A39F700D811D1124911DB29F60 +:105CA000700D811D1124911D08950E94462EB7FF8D +:105CB0000895821B930B08950E94462EA59F900D78 +:105CC000B49F900DA49F800D911D11240895B7FFDE +:105CD0000C945C2E0E945C2E821B930B0895991BE2 +:105CE00079E004C0991F961708F0961B881F7A95D3 +:105CF000C9F780950895FC014150504030F0019063 +:105D00000616D1F73197CF0108958827992708956E +:105D1000FB01DC0104C08D910190801921F44150F8 +:105D20005040C8F7881B990B0895F999FECF92BD92 +:105D300081BDF89A992780B50895A6E1B0E044E0C6 +:105D400050E00C94CF2EA8E1B0E042E050E00C947B +:105D5000CF2E262FF999FECF92BD81BDF89A0197DB +:105D600000B4021639F01FBA20BD0FB6F894FA9AA3 +:105D7000F99A0FBE08950396272F0E94AA2E0E941B +:105D8000A92E252F0E94AA2E242F0C94AA2E01960C +:105D9000272F0E94AA2E0C94A92EDC01CB01FC0116 +:105DA000F999FECF06C0F2BDE1BDF89A319600B474 +:105DB0000D9241505040B8F70895F894FFCFA40ECB +:105DC000A40EAD0EAD0EAF0EAD0EAD0EAD0EA40E0B +:105DD000A40EB40EAD0EAD0EB40E10163816DB17B1 +:105DE0003816DB176B168C16DB178A179717AB1C48 +:105DF000AB1CE51CE51C941DAE1D131D131DB91D28 +:105E0000411E501E501E48194C1A691A7D1A8B1AD1 +:105E1000C01AF21A132C172C6B2C7C2C872CA62C56 +:105E2000A92CE82C092D792C792C142D172D1B2D3C +:0A5E3000412D632D662D682D8D2D88 +:105E3A007205ED0BCC0BC80BC40B710501191A1BAB +:105E4A001C1D1E1F202122010201001C001C1CCA4D +:105E5A00002A00000000C4004C00000000BE0050F0 +:105E6A0000000000B8005100000000B2004F00001E +:105E7A000000AC0052000000000101818283E200B0 +:105E8A00E900EA00B500B600B700CD008301CC00F6 +:105E9A008A01920194012102230224022502260288 +:105EAA0027022A02B300B4006F007000F0343536BE +:105EBA006667F6F7939600FF0100010000FFFF00F6 +:105ECA0000010001FF0000010202020206060609A3 +:105EDA0009090909090F0F0F0F0F0F1515151819C1 +:105EEA0019191919191919191923244022B6A801BF +:0A5EFA008601D000BD06D606F606AC :00000001FF From 5d0a402901d0c98c9e137940a876e0b5fee9af65 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 28 Nov 2021 20:48:16 -0500 Subject: [PATCH 086/155] Update firmware for breaking changes. No code changes. --- .../solartempest/9e/solartempest_9e_via.hex | 2641 +++++++++-------- 1 file changed, 1322 insertions(+), 1319 deletions(-) diff --git a/keyboards/solartempest/9e/solartempest_9e_via.hex b/keyboards/solartempest/9e/solartempest_9e_via.hex index 231ed93af297..de104edae5a8 100644 --- a/keyboards/solartempest/9e/solartempest_9e_via.hex +++ b/keyboards/solartempest/9e/solartempest_9e_via.hex @@ -1,9 +1,9 @@ :100000000C94A3040C94EA040C94EA040C94EA04FF :100010000C94EA040C94EA040C94EA040C94EA04A8 -:100020000C94EA040C94EA040C943F250C94FB24F1 -:100030000C943A260C94EA040C94EA040C94EA0416 +:100020000C94EA040C94EA040C9464250C942025A6 +:100030000C9461260C94EA040C94EA040C94EA04EF :100040000C94EA040C94EA040C94EA040C94EA0478 -:100050000C94EA040C9416260C94EA040C94EA041A +:100050000C94EA040C943D260C94EA040C94EA04F3 :100060000C94EA040C94EA040C94EA040C94EA0458 :100070000C94EA040C94EA040C94EA040C94EA0448 :100080000C94EA040C94EA040C94EA040C94EA0438 @@ -20,7 +20,7 @@ :10013000012AB700150126B700950175108100C08E :10014000050C0901A101850419012AA00215012647 :10015000A002950175108100C005010906A1018565 -:1001600005050719E029E7150025019508750181A6 +:1001600006050719E029E7150025019508750181A5 :10017000020507190029EF1500250195F075018189 :10018000020508190129059505750191029501756A :10019000039101C00660FF0961A1010962150026F3 @@ -147,22 +147,22 @@ :100920000200010803410039006500000012034184 :100930000074006C0061006E0074006900730000B8 :1009400000040309040011241FBECFEFD0E1DEBF75 -:10095000CDBF04B603FE27C080919103909192030E -:10096000A0919303B09194038730904BA740B04B74 -:10097000D1F410929103109292031092930310926B -:10098000940314BE84B7877F84BF0FB6F894A895EC +:10095000CDBF04B603FE27C080919303909194030A +:10096000A0919503B09196038730904BA740B04B70 +:10097000D1F4109293031092940310929503109265 +:10098000960314BE84B7877F84BF0FB6F894A895EA :1009900080916000886180936000109260000FBEBB -:1009A000E0E0F8E7099523E0A2EEB1E001C01D9276 -:1009B000A139B207E1F711E0A0E0B1E0EEE0FDE51A -:1009C00002C005900D92A23EB107D9F70E946126A0 -:1009D0000C944E2E0C940000E8EDF0E080818C7FAA +:1009A000E0E0F8E7099523E0A4EEB1E001C01D9274 +:1009B000A339B207E1F711E0A0E0B1E0E8E3FDE51B +:1009C00002C005900D92A43EB107D9F70E94882677 +:1009D0000C94632E0C940000E8EDF0E080818C7F95 :1009E00080831092E2001092DA001092E100A0EEF3 :1009F000B0E08C9181608C9380818F77808319BC6B :100A0000A7EDB0E08C918E7F8C9380818F7E808368 -:100A10001092DA0208952091E4003091E50095E605 +:100A10001092DC0208952091E4003091E50095E603 :100A2000A9012091EC00822F817020FF06C08091E7 :100A3000E80080FF06C080E008952091E80022FDD4 -:100A40001AC08091FF02882389F0853089F0809157 +:100A40001AC080910103882389F0853089F0809154 :100A5000EB0085FD0FC02091E4003091E5004217C6 :100A60005307F9F29150E1F684E0089582E0089589 :100A700083E0089581E00895EF92FF920F931F9312 @@ -170,10 +170,10 @@ :100A90008091E80085FD0BC08091E8008E778093FF :100AA000E8000E940B05882399F3C82F08C0F701BE :100AB00081917F018093F1000150110949F78C2F3A -:100AC000CF911F910F91FF90EF90089580910103B6 +:100AC000CF911F910F91FF90EF90089580910303B4 :100AD00087FF13C08091E80082FF06C08091E80084 -:100AE0008B778093E80004C08091FF028111F2CFE0 -:100AF00008958091FF028823D9F38091E80080FF58 +:100AE0008B778093E80004C0809101038111F2CFDD +:100AF0000895809101038823D9F38091E80080FF55 :100B0000F8CF8091E8008E77ECCF982F9093E90092 :100B1000242F762F50E0891731F07091EC0020914E :100B2000ED005091F00021FD07C09F5F973071F7F5 @@ -183,1323 +183,1326 @@ :100B6000F0002091EE0027FDE0CF80E00895CF92C5 :100B7000DF92EF92FF920F931F93CF93DF93C8ED15 :100B8000D0E088818F7E8883E7EDF0E0808181600E -:100B9000808381E08093DA0288818C7F888302EEF3 +:100B9000808381E08093DC0288818C7F888302EEF1 :100BA00010E0D8011C921092DA0081EEC82ED12CF0 :100BB000D6011C9288818F7788838881806888839A :100BC00088818F7D888380818068808319BC1092A2 -:100BD000FF02109200031092FE021092FD0290EEAE +:100BD000010310920203109200031092FF0290EEA4 :100BE000E92EF12CF70180818B7F808388818160E1 :100BF000888342E060E080E00E948505D6018C9108 :100C00008E7F8C93F80180818160808380818860F1 :100C10008083D7018C918E7F8C93888180618883BB :100C2000DF91CF911F910F91FF90EF90DF90CF90C8 -:100C30000895FC0180910703909108038617970798 +:100C30000895FC018091090390910A038617970794 :100C4000A0F06115710529F49091E8009E779093CA :100C5000E80090E06115710551F4911108C0809190 :100C6000E80082FF33C080E00895BC01F2CF80919C -:100C7000FF028823B9F18530B9F18091E80083FD46 +:100C700001038823B9F18530B9F18091E80083FD43 :100C80002FC08091E80082FDEACF8091E80080FFCC :100C9000E1CF2091F2003091F3006115710519F058 :100CA0002830310558F091E02830310509F090E006 :100CB0002091E8002E772093E800CCCF819180939B -:100CC000F100615071092F5F3F4FE7CF8091FF0224 +:100CC000F100615071092F5F3F4FE7CF8091010321 :100CD000882341F0853041F08091E80083FFBFCF49 -:100CE00081E0089582E0089583E008958091DC0218 -:100CF00008959C014FB7F8948091D1029091D2024F -:100D0000A091D302B091D4024FBF821B930B0895E0 -:100D10002FB7F8948091D1029091D202A091D30282 -:100D2000B091D4022FBF08952091CE023091CF020E -:100D30002817390771F09093CF028093CE02E0918B -:100D4000CC02F091CD02309721F00084F185E02DA6 -:100D5000099408952091CA023091CB0228173907CF -:100D600071F09093CB028093CA02E091CC02F09193 -:100D7000CD02309721F00680F781E02D0994089587 -:100D8000E091CC02F091CD02309721F00190F081FA -:100D9000E02D099480E00895FA01811101C0FB0162 -:100DA0000994089580918903982F9E7F61F4817042 -:100DB00082608093890380918C03853B18F084EBDB -:100DC00080938C0308958A34B0F381708864F1CFE6 -:100DD000AF92BF92DF92EF92FF920F931F93CF9348 -:100DE000DF93182F062FE901453B08F044EBE42F71 -:100DF000F0E0E853FD4F011110C0E4915E2F4E2F3B -:100E00004983E8835A83DF91CF911F910F91FF901F -:100E1000EF90DF90BF90AF900895202F30E0449185 -:100E2000D42EE42EF12C56E0159FC0011124EFEFD3 -:100E3000F0E0BF010E944F2D812F90E0880F991F95 -:100E400055E5569FD001579FB00D11248A1B9B0B6F -:100E5000982F990F890F5F01A21AB30AAE9CD00197 -:100E6000AF9CB00DBE9CB00D11245B2F089F80017C -:100E70001124012F11275F01A01AB10AAE9C800135 -:100E8000AF9C100DBE9C100D11245F01A81AB10873 -:100E9000A29EC001A39E900DB29E900D1124892F99 -:100EA0009927E81BF90BEE9DC001EF9D900DFE9D6B -:100EB000900D1124E92F62307105A1F050F46115F5 -:100EC000710509F49DCF6130710581F0EB2F512F31 -:100ED00097CF6430710569F080F06630710509F4D0 -:100EE0008FCFF4CFE42F4B2F592F8ACFE42F412FF0 -:100EF00087CFEB2F542F492F83CF4B2F5D2DE12F21 -:100F00007FCF0E9488069C019091B7028091B80221 -:100F1000982B21F03093B4022093B3029091B90240 -:100F20008091BA02982B21F03093B2022093B10243 -:100F3000E091CC02F091CD02309749F082E08093AD -:100F4000B5020480F581E02D85EB92E009940895C7 -:100F50004091B702803F59F48091B80287FF0DC0DD -:100F60001092B80241110BC01092AF0208C0813F2D -:100F700081F48091B80218169CF3442381F080918B -:100F8000B9029091BA02892B09F05AC01092AE02B0 -:100F90000895823F49F447FFF0CF1092B702809145 -:100FA000B8028111ECCFE0CF833F19F41416ACF3F3 -:100FB000E4CF9091B902893F29F41916F4F6109202 -:100FC000B902DBCF8A3F19F497FFD7CFF8CF9091C2 -:100FD000BA028B3F29F497FFD0CF1092BA02CDCF3F -:100FE0008C3F19F41916CCF3C8CF9CE0980F9530BC -:100FF00090F4845F990B21E030E0B90102C0660FE4 -:10100000771F8A95E2F7CB0180959091B6028923EC -:101010008093B602B2CF8D3F31F48091B0028E7FC3 -:101020008093B002AACF8E3F21F48091B0028D7FD1 -:10103000F7CF8F3F09F0A1CF8091B0028B7FF0CF27 -:1010400008958091B00280FD16C081FD16C082FD1A -:1010500016C08091AE028823A1F0883280F428E087 -:10106000829FC001112468E270E00E94632D862FE8 -:10107000672B39F0089582E0089584E0089588E0B0 -:10108000089581E008958091B00280FD14C081FD33 -:1010900014C082FD16C08091AF02882381F0843194 -:1010A00080F422E3829FC001112464E170E00E9479 -:1010B000632D862F08958CE0089589E1089585E0D9 -:1010C000089582E30895803F31F40E94430881959A -:1010D0008093B8020895813F19F40E944308F8CF25 -:1010E000823F31F40E94430881958093B7020895AE -:1010F000833F19F40E944308F8CF893F29F40E94E6 -:1011000021088093B90208958A3F21F40E942108A2 -:101110008195F7CF8B3F31F40E9421088195809310 -:10112000BA0208958C3F19F40E942108F8CF9CE080 -:10113000980F953070F4845F990B21E030E001C086 -:10114000220F8A95EAF78091B602822B8093B6022D -:1011500008958D3F31F48091B00281608093B00298 -:1011600008958E3F21F48091B0028260F7CF8F3FC7 -:10117000B9F78091B0028460F1CF80E00895F894CF -:10118000E82FE295EF70F0E031A1282F2F7081E079 -:1011900090E001C0880F2A95EAF7982F9095932345 -:1011A00091A392A1892B82A3789408959091D5025E -:1011B00092FF06C0282F28712830F9F4877F8460B9 -:1011C00093FF06C0282F28712831F1F4877E8461AF -:1011D0002091D60220FF06C0382F38713830D9F45C -:1011E000877F816021FF06C0282F28712831D1F424 -:1011F000877E816194FD877E0895282F2471243095 -:10120000F9F68B7F8860DCCF282F2471243101F719 -:101210008B7E8861DDCF382F3171313019F78E7FA9 -:101220008860E0CF282F2171213121F78E7E8861DF -:10123000E1CFCF93DF93EC0182389105A9F1D8F586 -:101240008133910509F496C048F58932910509F476 -:101250008AC08A9709F495C0C11521E5D20708F024 -:10126000BCC0C11530E5D30708F014C1C83ED10594 -:1012700008F09CC0C03ED10560F5C83AD10508F021 -:1012800087C0C53AD10508F0FDC0C130D10509F1CC -:101290002097F9F0C430D105E0F440C085339105C2 -:1012A00009F45AC0C997C1F68091D502837089F0BC -:1012B000C0EED0E00EC0833E910599F170F4803EFF -:1012C000910501F1823E910539F68091D50282FDAA -:1012D00021C0CE01DF91CF910895863E910561F145 -:1012E000873E910571F1843E910509F0B5CF80915B -:1012F000D60281FFEECF8091D502C7EED0E084FD0B -:101300000DC0E7CF8091D50280FD12C19091D60229 -:1013100090FFDFCFC3EED0E084FFDBCFD0E0C0E0B2 -:10132000D8CF8091D50282FD06C19091D60290FD62 -:10133000BFCF84FFCECFF2CF8091D50283FDDDCF2A -:10134000C8CF8091D50283FDF9C09091D60291FF5C -:10135000F0CFC4EED0E0BDCF8091D50285FFB9CFEC -:10136000C9E2D0E0B6CF8091D50285FFB2CFC5E308 -:10137000D0E0AFCF8091D50286FFABCFCAE2D0E0FC -:10138000A8CF8091D50286FFA4CFC1E3D0E0A1CF42 -:10139000CF3BD10518F6C85AD0E0CC0FDD1FCF5D8A -:1013A000DE4F0990D881C02DD46493CFC11540E29F -:1013B000D40758F4C11581E0D80708F08ACFC03FA0 -:1013C000D10508F4ABCFD06584CFC11590E4D9071F -:1013D00008F4A4CFDF70D06A7CCFC11525E5D20711 -:1013E00000F5C11534E5D30708F08AC0C11543E5FF -:1013F000D40708F071C0C11582E5D80708F467C0AA -:10140000CE018370992721E030E002C0220F331F04 -:101410008A95E2F7C695C69580E2C89FE00111243F -:1014200052C0C11599E5D907A8F4C11528E5D2071E -:1014300008F06BC0C11536E5D30708F06FCF8C2FCD -:101440000E94D608C82FD0E0DC2FCC27CC27DF7134 -:10145000D0623FCFC1154AE5D40708F45BC0CE0186 -:1014600090568115904208F059CF8D2F8F710E94B0 -:10147000D60890E0982F882788279F719C012C2BF5 -:10148000E901E6CFC55AD0E0C25EDE4FC881D0E0A8 -:10149000D0641FCFCE01E4E096958795EA95E1F7F9 -:1014A00083702C2F26952695237040E2249F90016F -:1014B0001124382B8C2F8370C1E0D0E002C0CC0FF8 -:1014C000DD1F8A95E2F7C22BD32BDC6802CFDC2F1D -:1014D000CC27C16FD06AFDCECE018370992721E061 -:1014E00030E002C0220F331F8A95E2F7C695C695F9 -:1014F00090E2C99FE0011124C22BD32BDA68E9CE18 -:10150000DC2FCC27C46FD06AE4CEDC2FCC27C06F91 -:10151000D06ADFCE8C2F8F700E94D60834E0D6952B -:10152000C7953A95E1F7CF709C2FEC01D069D1CEE9 -:10153000C9E3D0E0CECEC2EED0E0CBCEC6EED0E056 -:10154000C8CE80915902811110925902089580915C -:10155000580290915702892B90915602892B8093C3 -:10156000E401909159029923A1F0892B8093E40121 -:1015700080911D01882341F18091D50287FF24C00D -:101580008EE1E6EEF1E090E0815000F591110E94CD -:10159000A10AE091CC02F091CD023097E1F0809168 -:1015A0001D01882359F08091D50287FF07C08091E3 -:1015B000E4018093E50185E08093E4010280F381FA -:1015C000E02D84EE91E0099486E0DBCF2191222387 -:1015D000D9F29F5FD9CF089590911D019923D1F041 -:1015E0009091D50297FF16C0E82FE695E695E6950F -:1015F000EE31E0F4F0E0EC51FE4F282F277081E04F -:1016000090E001C0880F2A95EAF78095928189239E -:1016100082830895E6EEF1E09191891303C0DF0122 -:1016200011971C9291E0EC3EF907B1F70895909163 -:101630001D019923C1F09091D50297FF14C0E82FA6 -:10164000E695E695E695EE31F8F4F0E0EC51FE4FC4 -:10165000877021E030E001C0220F8A95EAF782818D -:10166000822B82830895A6EEB1E0EFEF90E02D91FA -:10167000821751F0EF3F19F4211101C0E92F9F5F4C -:101680009630A9F7EF3F09F408950E2E000CFF0BDA -:10169000EC51FE4FE6CF80915402909123029813B3 -:1016A00001C008958F5F8770FACF2CE0929F800D64 -:1016B0001124982F977086958695869524E0829FB1 -:1016C000F0011124EB5FFD4F50E040E080E02191FC -:1016D00030E0092E02C0369527950A94E2F7217072 -:1016E0003327042E01C0220F0A94EAF7822B4F5FA2 -:1016F0005F4F4430510559F708952CE0929F800DBB -:101700001124982F977041E001C0440F9A95EAF791 -:1017100086958695869594E0899FF0011124EB5F6C -:10172000FD4F90E080E070E05191DF0111979B0147 -:10173000082E02C0369527950A94E2F7217021956C -:101740002527242325272C9301968430910561F7C2 -:10175000089590E080E00E94AA0690E080E00E9458 -:10176000940610925702109256020E94A70A86E031 -:10177000E5EBF2E0DF011D928A95E9F71092AF02E6 -:101780001092AE021092B0020C94810790935B020B -:1017900080935A020C94A90B882341F08095909174 -:1017A00058028923809358020C94A70A089588232D -:1017B00039F090915802982B909358020C94A70AF4 -:1017C0000895882309F459C0823871F40E94C00634 -:1017D00081FF53C089E30E94170B0E94A70A89E387 -:1017E0000E94EC0A0C94A70A833859F40E94C006A0 -:1017F00080FF43C083E50E94170B0E94A70A83E580 -:10180000EFCF843859F40E94C00682FF36C087E4C7 -:101810000E94170B0E94A70A87E4E2CF9CEF980F63 -:10182000913AF0F290E2980F983088F4877021E0B6 -:1018300030E0A90102C0440F551F8A95E2F7CA01A2 -:10184000809590915802892380935802CBCF9BE5D5 -:10185000980F933020F490E080E00C94AA0698E56D -:10186000980F973120F490E080E00C949406803F2C -:1018700020F00E94A8070C94810708959091FF0220 -:10188000943029F58093D7027093D9026093D802DF -:101890009093E9008FEF9091E800815095FD06C08C -:1018A00095ED9A95F1F700008111F5CF8091E80050 -:1018B00085FF0DC050E040E063E070E087ED92E00E -:1018C0000E943C058091E8008E778093E80008959F -:1018D000BC0184E00C943E0CBC0183E00C943E0CF3 -:1018E0009C0184E08093E9009FEF8091E800915093 -:1018F00085FD06C085ED8A95F1F700009111F5CFC1 -:101900008091E80085FF0CC050E040E066E070E0A8 -:10191000C9010E943C058091E8008E778093E80021 -:101920000895CF93DF93EC0180911D018823B1F1DD -:101930008091D50287FF32C060E284E08093E900A5 -:101940008FEF9091E800815095FD06C095ED9A9536 -:10195000F1F700008111F5CF8091E80085FF1BC0F1 -:1019600080911D0170E050E040E0811104C050E022 -:1019700040E068E070E0CE010E943C058091E80004 -:101980008E778093E80080E2FE01ADEDB2E0019039 -:101990000D928A95E1F7DF91CF91089568E081E09B -:1019A000CDCF81E08093E00080E28093D800109258 -:1019B000C9008FE19EE40197F1F700C0000087E0C5 -:1019C00090EBDC018093910390939203A093930397 -:1019D000B093940388E19CE00FB6F894A8958093A7 -:1019E00060000FBE90936000FFCFCF93C82F882375 -:1019F00009F4AEC08238C1F40E94C00681FDA8C0BF -:101A000089E30E94170B0E94A70A2FEF81EE94E052 -:101A1000215080409040E1F700C0000089E30E941F -:101A2000EC0ACF910C94A70A8338A1F40E94C00657 -:101A300080FD8EC083E50E94170B0E94A70A2FEF3E -:101A400081EE94E0215080409040E1F700C000001A -:101A500083E5E5CF8438A1F40E94C00682FD78C0FA -:101A600087E40E94170B0E94A70A2FEF81EE94E0F3 -:101A7000215080409040E1F700C0000087E4CFCFC4 -:101A80008CEF8C0F813A88F580911D01882301F13C -:101A90008091D50287FF1CC0EC2FE695E695E69570 -:101AA000F0E0EC51FE4F828190E04C2F477021E036 -:101AB00030E002C0220F331F4A95E2F782239323BE -:101AC000892B79F08C2F0E94EC0A0E94A70A09C08A -:101AD000E6EEF1E08191C817A9F321E0EC3EF207B0 -:101AE000C9F78C2F0E94170B9CCF80E28C0F883097 -:101AF00068F4C77021E030E001C0220FCA95EAF710 -:101B000080915802822B809358028BCFEBE5EC0F2B -:101B1000E33040F4F0E0E25EFE4F808190E0CF9150 -:101B20000C94AA06E8E5EC0FE73150F4F0E0EE0F74 -:101B3000FF1FEF5DFE4F80819181CF910C94940641 -:101B4000C03F30F08C2F0E946308CF910C94810726 -:101B5000CF9108951F93CF93DF93182FD0E0C0E06B -:101B6000893311F4C0E5D0E0812F0E94F50C209755 -:101B700031F4812FDF91CF911F910C94E10B8FE90C -:101B80009FE00197F1F700C000002197F0CF0F937D -:101B90001F93CF93DF93C62FD42F022FFC01828196 -:101BA0008823A1F0609390030E94880690938F038E -:101BB00080938E03C77081E001C0880FCA95EAF751 -:101BC000DF91CF911F910F910C94D70B80919003CF -:101BD000681335C080918E0390918F030E9479061F -:101BE000883C910560F510E21D0FCD17B9F080E239 -:101BF0008C0F883040F4C77081E001C0880FCA950F -:101C0000EAF70E94CC0B183048F481E09D2F9770C2 -:101C100001C0880F9A95EAF70E94D70B802F0E9487 -:101C2000AA0D183098F4D77081E001C0880FDA95BA -:101C3000EAF7DF91CF911F910F910C94CC0BC770F5 -:101C400081E001C0880FCA95EAF7F3CFDF91CF9109 -:101C50001F910F910895CF93DF93C7EED3E060E01B -:101C6000CE010E94D62D2196C11588E0D807B9F77C -:101C7000DF91CF9108956F927F928F929F92AF9252 -:101C8000BF92CF92DF92EF92FF920F931F93CF9369 -:101C9000DF9386EFC82E84E0D82E9FE9E92EF12C41 -:101CA000E701C056D10936011BC0F501859094901B -:101CB000692DC8010E94D62D682DC80101960E9489 -:101CC000D62D82E0A80EB11C0E5F1F4FC017D107A2 -:101CD00061F788E1680E711C6896CE15DF0529F062 -:101CE0008E01085111095301E0CF7E0180E6E80E14 -:101CF000F11C80E6C80ED11C8FE5E81684E0F806DA -:101D000079F6DF91CF911F910F91FF90EF90DF90C7 -:101D1000CF90BF90AF909F908F907F906F900895DD -:101D2000CF93C82F6FEF811161E283E290E00E94B0 -:101D3000D62D6FEFC11161E184E290E00E94D62DB3 -:101D40006FEFC11165E285E290E0CF910C94D62D42 -:101D500080E00E94900E60E086E290E00E94D62D26 -:101D60000E943B0E0E942B0E81E00C94900ECF93AC -:101D7000C92F682F84E090E00E94D62D6C2F82E25C -:101D800090E0CF910C94D62D9091D60292FB222711 -:101D900020F9281751F080FB92F99093D602809198 -:101DA000D5029091D6020C94B70E08950F931F930D -:101DB000CF93DF93C42FD0E0CC0FDD1F28E1629FCB -:101DC000C00DD11D112430E6839FC00DD11D1124FB -:101DD000CE0187960E94C22D082F10E0102F0027F9 -:101DE000CE0188960E94C22D9801282BC901DF914F -:101DF000CF911F910F910895462F8A3038F4743097 -:101E000028F46C3018F4672F0C94D60E90E080E024 -:101E10000895BF92CF92DF92EF92FF920F931F939C -:101E2000CF93DF937C010091090310910A03809105 -:101E30005A0290915B02082B192BCFE0D0E0CC2402 -:101E4000C394D12CBC2EC6010C2E02C0880F991F42 -:101E50000A94E2F780239123892B71F4219790F75C -:101E6000B12C8B2DDF91CF911F910F91FF90EF90AF -:101E7000DF90CF90BF900895B7018C2F0E94FC0E89 -:101E80000E941909019751F3ECCFCF93DF93EC0136 -:101E90000E94090FBE010E94FC0EDF91CF910C94AD -:101EA0001909FC01808191810E94450F292F2F7013 -:101EB00092959F7092509E3078F4E92FF0E0E05BAD -:101EC000F14D0C94772D803F19F020F4883E20F4DA -:101ED00081E00895843FE1F380E00895883EC0F3F7 -:101EE000813FD1F7F5CF822F869586958695089507 -:101EF00083E290E00E94C22D813289F484E290E076 -:101F00000E94C22D813159F485E290E00E94C22DD9 -:101F100091E0853209F090E0892F8170089580E08A -:101F2000FCCFCF9384E090E00E94C22DC82F82E2C4 -:101F300090E00E94C22D982F8C2FCF910895609130 -:101F40008903669570E04BE050E08AE091E00E94E2 -:101F5000A82D892B19F481E08093C5020E94880680 -:101F60009093BF028093BE0208954F925F926F924A -:101F70007F928F929F92AF92BF92CF92DF92EF9219 -:101F8000FF920F931F93CF93DF93CDB7DEB7CE575A -:101F9000D1090FB6F894DEBF0FBECDBF5090190126 -:101FA0008091890380FF5DC08090BC029090BD024B -:101FB0008114910409F068C0EDECF3E09E012F5FFD -:101FC0003F4FBE0161587F4FC901A4914A2F50E095 -:101FD000DA01AA0FBB1FA40FB51FA55FBC4FCD90A0 -:101FE000DD90EC90D901CD92DD92ED929D0131967C -:101FF0006A177B0751F72091180143E0249F800D59 -:10200000911D11246E9A2EB12F7B3EB130645FB7C3 -:10201000F894BC01549E600D711D1124861797071A -:1020200009F08DC05FBF8FE594E00197F1F700C024 -:102030000000C258DF4F0FB6F894DEBF0FBECDBF11 -:10204000DF91CF911F910F91FF90EF90DF90CF9094 -:10205000BF90AF909F908F907F906F905F904F90C8 -:10206000089580911A0190911B0123E0829FF00155 -:102070001124E55FFC4F891708F096CF118210827A -:1020800012828F5F3396F7CF8091BB02811194CF7C -:10209000D12CC12C66246394712C53E0452E809181 -:1020A000C60293010C2C01C0220F0A94EAF7822386 -:1020B00009F43CC0F601EE0FFF1FE80DF91DE59095 -:1020C000F490E114F10409F477CF45E050E0B70152 -:1020D000CE0101960E949F2D09810F3F39F18A811F -:1020E000800F9927991F8B32910514F08AE290E0B6 -:1020F0005C01AA0CBB1C8A0D9B1DDC01A55FBC4FBB -:102100005D01049D80011124055F1C4F0A151B050C -:1021100020F0B5E0EB0EF11CD8CF98014D816C8119 -:102120008B810E94E8060D5F1F4FF0CFEFEFCE1AB4 -:10213000DE0AF8E0CF16D10409F0B1CF3DCFFC01A3 -:102140004191CF01E8E03EB9000000C047FF2EB941 -:10215000440F000000C000C000C02EB900C0EA95C6 -:1021600091F75CCFCF93DF9300D00F92CDB7DEB75E -:102170008091890380FF13C09E012F5F3F4F44E68B -:1021800066EE80E00E94E8068B8199812A81209387 -:10219000840390938303809385030E94B50F0F906F -:1021A0000F900F90DF91CF9108950F931F93CF93CE -:1021B000DF93EC0110E000E090911C0190171106F4 -:1021C00009F06CF40E94B50F8C8190E0019681704B -:1021D00099278C83DF91CF911F910F9108952091C2 -:1021E0001A01A801420F511D9A01220F331F240F1B -:1021F000351F255F3C4F4C8160918B0380918A0392 -:1022000096959017110651F04CF0442349F04091F7 -:102210008C030E94E8060F5F1F4FCECF4423B9F313 -:1022200040E0F7CF8F929F92AF92BF92CF92DF9212 -:10223000EF92FF920F931F93CF93DF93EC014C81AA -:10224000042F10E09801D8010E943F2E9B01AC01A1 -:102250000E940A2E4B015C01E0E2F0E0E01BF10B72 -:10226000A5E5B0E0AC019B010E940A2E6B017C0148 -:102270009F01DF010E94842D9B01AC010E94152E5D -:102280009B01AC01280D391D4A1D5B1DC701B6011C -:102290000E941D2EF22E822F90E039E23F1560F150 -:1022A00043E0249F9001112435952795122F109516 -:1022B00000E085E5E82EEF1880911C01081758F121 -:1022C0000E94B50F9C8181E0992319F0903219F496 -:1022D0008FEF8093170180911701890F8C83DF9115 -:1022E000CF911F910F91FF90EF90DF90CF90BF9013 -:1022F000AF909F908F90089525E530E0B901681B5D -:10230000790B9B01220F331F260F371F37FFCCCFCE -:102310002F5F3F4FC9CF8E2D01FD8F2D20911A01C8 -:10232000622F600F7727771F9B01220F331F260F25 -:10233000371F255F3C4F412F60918B030E94E806B9 -:102340000F5FBACF0F931F93CF93DF9380911A0142 -:1023500090911B0123E0829FF0011124E55FFC4F67 -:10236000891740F1C0E0D3E060911C01C61740F12D -:102370000E94B50F209115018091C802820F8093B1 -:10238000C80290911601920F90931601191654F4F9 -:10239000082E000C990B40911C014150550B8417DD -:1023A00095071CF0219520931501DF91CF911F9186 -:1023B0000F9108951182108212828F5F3396D0CFD1 -:1023C0000C2F10E070E0C8010E94632D20911A01CB -:1023D000820F482F50E02091C802022E000C330BD0 -:1023E00002171307BCF020911601022E000C330BCC -:1023F000201731077CF08D9F90011124255F3C4F01 -:1024000040918C0360918B0380918A030E94E806BF -:10241000CF5FAACFFA01EE0FFF1FE40FF51FE55FB4 -:10242000FC4F118210821282F3CF1F93CF93DF9360 -:10243000FC018281DFEF80FFD1E0C0E01AE29091E1 -:102440001C01C91788F00E94B50F8091C702D130D6 -:10245000C9F5811102C080911C0181508093C7028F -:10246000DF91CF911F910895E0911A014C2F50E018 -:102470009A012E0F311DF901EE0FFF1FE20FF31F1E -:10248000E55FFC4F1182108212828091C7028B326D -:10249000ACF0612F0E94412D892F082E000C990B62 -:1024A0004817590749F49F0140918C0360918B03B1 -:1024B00080918A030E94E806CF5FC1CF87FFEDCFEE -:1024C000890FEBCF90E0019660911C0170E00E94B3 -:1024D000632DC4CFEF92FF921F93CF93DF93EC0154 -:1024E00010E0EE24EA94F12C60911C01161770F0B4 -:1024F0000E94B50F9A818C8190FF27C08F5F8C83DB -:10250000DF91CF911F91FF90EF90089520911A01D4 -:10251000422F410F5527551FCA019A01220F331F21 -:10252000280F391F255F3C4F70E0C7010E94632DC3 -:10253000962F8C8140918C0360918B03199F800DA5 -:1025400011240E94E8061F5FCFCF8150D8CF909111 -:10255000890390FF14C090911A0120911B0133E070 -:10256000939FF0011124E55FFC4F921710F00C943B -:10257000B50F8183608342839F5F3396F6CF0895C2 -:102580000F931F93CF93DF9300D00F92CDB7DEB799 -:102590008C018091C90281110AC09E012F5F3F4FBB -:1025A00044EB6FEF0E94E8068A818093C902F8012C -:1025B0006481613069F08091C90240E0662361F076 -:1025C00040E0623011F44091C90280E060E004C054 -:1025D0006091C90240E080E00E94A712F801848166 -:1025E00090E0019663E070E00E94632D84830F9079 -:1025F0000F900F90DF91CF911F910F910895CF937E -:10260000DF9300D00F92CDB7DEB79091890390FF92 -:102610000AC09E012F5F3F4F0E94E8064B816981EF -:102620008A810E94A7120F900F900F90DF91CF9197 -:102630000895CF93DF93EC01E9E8F3E043816281F1 -:102640008C810E94FF128C818F5F8C83DF91CF91F0 -:102650000895CF93DF93EC01EC81F0E0EA50FC4F5A -:102660004491E9E8F3E0628181810E94FF128C814C -:102670008F5F8C83DF91CF910895CF92DF92EF929D -:10268000FF926B017C010E94D206B701A60188E08F -:1026900090E0FF90EF90DF90CF900C94E82DAF92F8 -:1026A000BF92CF92DF92EF92FF920F931F93CF933F -:1026B000DF9300D00F92CDB7DEB7182FF62E042F80 -:1026C000E22E9091890390FF29C0E92FE695AE2F65 -:1026D000B0E0A255BE4F8C918093C4029E7F923091 -:1026E00059F59E012F5F3F4F812F0E94E8064B81D5 -:1026F00069818A810E94A71210938A03F0928B034A -:1027000000938C03EE2051F06091890370918A034D -:1027100080918B0390918C030E943D130F900F903A -:102720000F90DF91CF911F910F91FF90EF90DF906D -:10273000CF90BF90AF900895823019F400918C0330 -:10274000DBCF863019F410918A03D6CF8930D9F3C4 -:10275000893191F6E9518E2F8170D82EE695F0E0FF -:10276000E853FC4FA590B490C12CBB2460911C0190 -:10277000C61618F00E94B50FBFCF2C2D30E0A29ED8 -:10278000C001A39E900DB29E900D112470E00E9496 -:102790004F2D812FD11013C0860F40911A01420F87 -:1027A000532F511D9A01220F331F240F351F255F10 -:1027B0003C4F402F6F2D0E94E806C394D7CF861B55 -:1027C000ECCFE9E8F3E0438128E0421B08F440E065 -:1027D00021E0628181810C944F13E9E8F3E04381A9 -:1027E00028E0420F08F44FEF21E0628181810C94D0 -:1027F0004F13E9E8F3E0628128E0621B08F460E02F -:1028000021E0438181810C944F13E9E8F3E0628178 -:1028100028E0620F08F46FEF21E0438181810C947E -:102820004F13E9E8F3E0818121E043816281885020 -:102830000C944F13E9E8F3E0818121E04381628148 -:10284000885F0C944F1380918D03882319F0815079 -:1028500080938D036091890370918A0380918B032B -:1028600090918C030C943D1380918D03833018F468 -:102870008F5F80938D036091890370918A038091AB -:102880008B0390918C030C943D139091890390FFDE -:1028900036C09170811129C092609093890366239C -:1028A00051F06091890370918A0380918B0390911C -:1028B0008C030E943D1360918903669570E04BE0A4 -:1028C00050E08AE091E00E94A82D892BA9F0109297 -:1028D000C50281E08093C10220E040918C036091A9 -:1028E0008B0380918A030C944F13853210F0986407 -:1028F000D4CF880F982BD1CF0E949F0FEACF089595 -:1029000060E00C94451421E030E0A90102C0440FBE -:10291000551F8A95E2F7CA012091C602662391F0FD -:10292000822B8093C6028091C502811105C08091DF -:10293000890386950E9480148091890380FD05C0DB -:102940000C94B50F80958223ECCF0895CF93DF933D -:10295000C82FC17082FBDD27D0F981FB662760F9A3 -:1029600084E00E94831461E06C2785E00E94831458 -:102970006D2F86E0DF91CF910C9483140F931F93FA -:10298000CF93DF93EC0161E0009709F0682F61704D -:1029900080E00E94831460E0209721F0BE017695CC -:1029A0006795617081E00E94831460E0209731F0A8 -:1029B000BE017695679576956795617082E00E9475 -:1029C000831460E0209739F0BE01B3E076956795F7 -:1029D000BA95E1F7617083E00E948314AE0170E064 -:1029E00060E0BB27A72F962F852F0097A105B10583 -:1029F000D9F1AC01BD0188E08A019B01F4E0369574 -:102A0000279517950795FA95D1F701151105210519 -:102A1000310519F08C5FB901A8018A019B01E2E040 -:102A20003695279517950795EA95D1F70115110564 -:102A30002105310519F08E5FB901A80176956795DA -:102A400057954795452B462B472B09F08F5F8130D3 -:102A5000C9F0882359F08230D1F08330E9F020E0CA -:102A60004EE16FEF80E406C080E0C6CF20E04EE18B -:102A70006FEF82E30E944F13CE01DF91CF911F9140 -:102A80000F91089520E04EE16FEF8EE1F3CF20E04B -:102A90004EE16FEF8AE6EECF20E04EE16FEF87ED7B -:102AA000E9CF0E94BE1490930A03809309030C940B -:102AB000A90B8091090390910A039C01267033278A -:102AC0002630310519F488600C945115877FFCCFAE -:102AD00021E030E002C0220F331F8A95E2F72095F3 -:102AE00030958091090390910A03822393230C94DB -:102AF0005115909155028095892380935502282F76 -:102B0000277039F4282F082E000C330B9217130668 -:102B100021F49091D60292FF07C085958595859501 -:102B20000E94681510925502089521E030E002C01D -:102B3000220F331F8A95E2F78091090390910A03CF -:102B4000822B932B0C94511580918903869581508B -:102B500009F484E261E00C94451480918903869520 -:102B60008F5F853208F081E061E00C94451490910C -:102B7000890390FF07C09695981720F0961710F4D8 -:102B80000C94AD1561E00C944514E9E8F3E083E0A2 +:100CE00081E0089582E0089583E008950895809159 +:100CF000DE0208959C014FB7F8948091D302909141 +:100D0000D402A091D502B091D6024FBF821B930BA3 +:100D100008952FB7F8948091D3029091D402A091B6 +:100D2000D502B091D6022FBF08952091D002309104 +:100D3000D1022817390771F09093D1028093D00225 +:100D4000E091CE02F091CF02309721F00084F1853E +:100D5000E02D099408952091CC023091CD022817FE +:100D6000390771F09093CD028093CC02E091CE02CE +:100D7000F091CF02309721F00680F781E02D0994A1 +:100D80000895E091CE02F091CF02309721F00190CA +:100D9000F081E02D099480E00895FA01811101C0ED +:100DA000FB010994089580918B03982F9E7F61F435 +:100DB0008170826080938B0380918E03853B18F055 +:100DC00084EB80938E0308958A34B0F38170886435 +:100DD000F1CFAF92BF92DF92EF92FF920F931F93EA +:100DE000CF93DF93182F062FE901453B08F044EB22 +:100DF000E42FF0E0E853FD4F011110C0E4915E2FA5 +:100E00004E2F4983E8835A83DF91CF911F910F9131 +:100E1000FF90EF90DF90BF90AF900895202F30E0CB +:100E20004491D42EE42EF12C56E0159FC0011124DC +:100E3000EFEFF0E0BF010E94642D812F90E0880F5A +:100E4000991F55E5569FD001579FB00D11248A1B5D +:100E50009B0B982F990F890F5F01A21AB30AAE9CC2 +:100E6000D001AF9CB00DBE9CB00D11245B2F089F2C +:100E700080011124012F11275F01A01AB10AAE9C35 +:100E80008001AF9C100DBE9C100D11245F01A81AAB +:100E9000B108A29EC001A39E900DB29E900D112498 +:100EA000892F9927E81BF90BEE9DC001EF9D900D4E +:100EB000FE9D900D1124E92F62307105A1F050F4D0 +:100EC0006115710509F49DCF6130710581F0EB2F3B +:100ED000512F97CF6430710569F080F0663071054D +:100EE00009F48FCFF4CFE42F4B2F592F8ACFE42F63 +:100EF000412F87CFEB2F542F492F83CF4B2F5D2DC1 +:100F0000E12F7FCF0E9489069C019091B9028091C8 +:100F1000BA02982B21F03093B6022093B50290913B +:100F2000BB028091BC02982B21F03093B402209335 +:100F3000B302E091CE02F091CF02309749F082E007 +:100F40008093B7020480F581E02D87EB92E009944D +:100F500008954091B902803F59F48091BA0287FF09 +:100F60000DC01092BA0241110BC01092B10208C01C +:100F7000813F81F48091BA0218169CF3442381F0DA +:100F80008091BB029091BC02892B09F05AC010924B +:100F9000B0020895823F49F447FFF0CF1092B902A2 +:100FA0008091BA028111ECCFE0CF833F19F414167F +:100FB000ACF3E4CF9091BB02893F29F41916F4F603 +:100FC0001092BB02DBCF8A3F19F497FFD7CFF8CF3F +:100FD0009091BC028B3F29F497FFD0CF1092BC02B6 +:100FE000CDCF8C3F19F41916CCF3C8CF9CE0980FE5 +:100FF000953090F4845F990B21E030E0B90102C094 +:10100000660F771F8A95E2F7CB0180959091B80221 +:1010100089238093B802B2CF8D3F31F48091B20220 +:101020008E7F8093B202AACF8E3F21F48091B202CC +:101030008D7FF7CF8F3F09F0A1CF8091B2028B7FD8 +:10104000F0CF08958091B20280FD16C081FD16C0D8 +:1010500082FD16C08091B0028823A1F0883280F40E +:1010600028E0829FC001112468E270E00E94782D80 +:10107000862F672B39F0089582E0089584E0089563 +:1010800088E0089581E008958091B20280FD14C047 +:1010900081FD14C082FD16C08091B102882381F0C9 +:1010A000843180F422E3829FC001112464E170E066 +:1010B0000E94782D862F08958CE0089589E1089587 +:1010C00085E0089582E30895803F31F40E9444084A +:1010D00081958093BA020895813F19F40E944408D3 +:1010E000F8CF823F31F40E94440881958093B90281 +:1010F0000895833F19F40E944408F8CF893F29F4EA +:101100000E9422088093BB0208958A3F21F40E9426 +:1011100022088195F7CF8B3F31F40E9422088195F8 +:101120008093BC0208958C3F19F40E942208F8CFE6 +:101130009CE0980F953070F4845F990B21E030E0CB +:1011400001C0220F8A95EAF78091B802822B809322 +:10115000B80208958D3F31F48091B202816080938E +:10116000B20208958E3F21F48091B2028260F7CFDF +:101170008F3FB9F78091B2028460F1CF80E008958B +:10118000F894E82FE295EF70F0E031A1282F2F704E +:1011900081E090E001C0880F2A95EAF7982F90959A +:1011A000932391A392A1892B82A37894089590917F +:1011B000D70292FF06C0282F28712830F9F4877FC4 +:1011C000846093FF06C0282F28712831F1F4877EB0 +:1011D00084612091D80220FF06C0382F3871383042 +:1011E000D9F4877F816021FF06C0282F287128311C +:1011F000D1F4877E816194FD877E0895282F247124 +:101200002430F9F68B7F8860DCCF282F24712431BD +:1012100001F78B7E8861DDCF382F3171313019F7BE +:101220008E7F8860E0CF282F2171213121F78E7EBB +:101230008861E1CFCF93DF93EC0182389105A9F16A +:10124000D8F58133910509F496C048F589329105A6 +:1012500009F48AC08A9709F495C0C11521E5D2071F +:1012600008F0BCC0C11530E5D30708F014C1C83E72 +:10127000D10508F09CC0C03ED10560F5C83AD10543 +:1012800008F087C0C53AD10508F0FDC0C130D105CE +:1012900009F12097F9F0C430D105E0F440C085335E +:1012A000910509F45AC0C997C1F68091D70283709D +:1012B00089F0C0EED0E00EC0833E910599F170F444 +:1012C000803E910501F1823E910539F68091D70269 +:1012D00082FD21C0CE01DF91CF910895863E910518 +:1012E00061F1873E910571F1843E910509F0B5CF1A +:1012F0008091D80281FFEECF8091D702C7EED0E077 +:1013000084FD0DC0E7CF8091D70280FD12C190917E +:10131000D80290FFDFCFC3EED0E084FFDBCFD0E078 +:10132000C0E0D8CF8091D70282FD06C19091D8024B +:1013300090FDBFCF84FFCECFF2CF8091D70283FD47 +:10134000DDCFC8CF8091D70283FDF9C09091D8023C +:1013500091FFF0CFC4EED0E0BDCF8091D70285FFE2 +:10136000B9CFC9E2D0E0B6CF8091D70285FFB2CF26 +:10137000C5E3D0E0AFCF8091D70286FFABCFCAE202 +:10138000D0E0A8CF8091D70286FFA4CFC1E3D0E000 +:10139000A1CFCF3BD10518F6C85AD0E0CC0FDD1F46 +:1013A000CD5DDE4F0990D881C02DD46493CFC11597 +:1013B00040E2D40758F4C11581E0D80708F08ACF7D +:1013C000C03FD10508F4ABCFD06584CFC11590E400 +:1013D000D90708F4A4CFDF70D06A7CCFC11525E50A +:1013E000D20700F5C11534E5D30708F08AC0C1154E +:1013F00043E5D40708F071C0C11582E5D80708F4A9 +:1014000067C0CE018370992721E030E002C0220F2F +:10141000331F8A95E2F7C695C69580E2C89FE00122 +:10142000112452C0C11599E5D907A8F4C11528E5C2 +:10143000D20708F06BC0C11536E5D30708F06FCFAF +:101440008C2F0E94D708C82FD0E0DC2FCC27CC27C8 +:10145000DF71D0623FCFC1154AE5D40708F45BC005 +:10146000CE0190568115904208F059CF8D2F8F7183 +:101470000E94D70890E0982F882788279F719C01A9 +:101480002C2BE901E6CFC55AD0E0C05EDE4FC88103 +:10149000D0E0D0641FCFCE01E4E096958795EA9521 +:1014A000E1F783702C2F26952695237040E2249F28 +:1014B00090011124382B8C2F8370C1E0D0E002C042 +:1014C000CC0FDD1F8A95E2F7C22BD32BDC6802CF4D +:1014D000DC2FCC27C16FD06AFDCECE018370992757 +:1014E00021E030E002C0220F331F8A95E2F7C69553 +:1014F000C69590E2C99FE0011124C22BD32BDA6874 +:10150000E9CEDC2FCC27C46FD06AE4CEDC2FCC2709 +:10151000C06FD06ADFCE8C2F8F700E94D70834E066 +:10152000D695C7953A95E1F7CF709C2FEC01D0691D +:10153000D1CEC9E3D0E0CECEC2EED0E0CBCEC6EE67 +:10154000D0E0C8CE80915B02811110925B020895B9 +:10155000809590915A02982390935A020895809111 +:101560005A0290915902892B90915802892B8093AD +:10157000E60190915B029923A1F0892B8093E6010B +:1015800080911F01882341F18091D70287FF24C0F9 +:101590008EE1E8EEF1E090E0815000F591110E94BB +:1015A000A20AE091CE02F091CF023097E1F0809153 +:1015B0001F01882359F08091D70287FF07C08091CF +:1015C000E6018093E70186E08093E6010280F381E3 +:1015D000E02D86EE91E0099486E0DBCF2191222375 +:1015E000D9F29F5FD9CF089590911F019923D1F02F +:1015F0009091D70297FF16C0E82FE695E695E695FD +:10160000EE31E0F4F0E0EA51FE4F282F277081E040 +:1016100090E001C0880F2A95EAF78095928189238E +:1016200082830895E8EEF1E09191891303C0DF0110 +:1016300011971C9291E0EE3EF907B1F70895909151 +:101640001F019923C1F09091D70297FF14C0E82F92 +:10165000E695E695E695EE31F8F4F0E0EA51FE4FB6 +:10166000877021E030E001C0220F8A95EAF782817D +:10167000822B82830895A8EEB1E0EFEF90E02D91E8 +:10168000821751F0EF3F19F4211101C0E92F9F5F3C +:101690009630A9F7EF3F09F408950E2E000CFF0BCA +:1016A000EA51FE4FE6CF80915602909125029813A1 +:1016B00001C008958F5F8770FACF2CE0929F800D54 +:1016C0001124982F977086958695869524E0829FA1 +:1016D000F0011124E95FFD4F50E040E080E02191EE +:1016E00030E0092E02C0369527950A94E2F7217062 +:1016F0003327042E01C0220F0A94EAF7822B4F5F92 +:101700005F4F4430510559F708952CE0929F800DAA +:101710001124982F977041E001C0440F9A95EAF781 +:1017200086958695869594E0899FF0011124E95F5E +:10173000FD4F90E080E070E05191DF0111979B0137 +:10174000082E02C0369527950A94E2F7217021955C +:101750002527242325272C9301968430910561F7B2 +:10176000089590E080E00E94AB0690E080E00E9447 +:10177000950610925902109258020E94AF0A86E014 +:10178000E7EBF2E0DF011D928A95E9F71092B102D2 +:101790001092B0021092B2020C94820790935D02F4 +:1017A00080935C020C94B10B882321F00E94A80A5C +:1017B0000C94AF0A0895882339F090915A02982B1F +:1017C00090935A020C94AF0A0895882309F452C0EA +:1017D000823871F40E94C10681FF4CC089E30E94E7 +:1017E0001F0B0E94AF0A89E30E94F40A0C94AF0A0F +:1017F000833859F40E94C10680FF3CC083E50E94F3 +:101800001F0B0E94AF0A83E5EFCF843859F40E9482 +:10181000C10682FF2FC087E40E941F0B0E94AF0AFF +:1018200087E4E2CF9CEF980F913AF0F290E2980FA4 +:10183000983050F4877091E001C0990F8A95EAF7CB +:10184000892F0E94A80AD2CF9BE5980F933020F4ED +:1018500090E080E00C94AB0698E5980F973120F467 +:1018600090E080E00C949506803F20F00E94A9074C +:101870000C94820708958093D9027093DB026093E1 +:10188000DA02809101038430F9F48093E9008FEF4C +:101890009091E800815095FD06C095ED9A95F1F77D +:1018A00000008111F5CF8091E80085FF0DC050E068 +:1018B00040E063E070E089ED92E00E943C05809199 +:1018C000E8008E778093E8000895BC0184E00C94D2 +:1018D0003B0CBC0183E00C943B0C9C0184E08093A6 +:1018E000E9009FEF8091E800915085FD06C085EDED +:1018F0008A95F1F700009111F5CF8091E80085FFFE +:101900000CC050E040E066E070E0C9010E943C0578 +:101910008091E8008E778093E8000895CF93DF935D +:10192000EC0180911F018823B1F18091D70287FFDC +:1019300032C060E284E08093E9008FEF9091E8008C +:10194000815095FD06C095ED9A95F1F70000811143 +:10195000F5CF8091E80085FF1BC080911F0170E0EA +:1019600050E040E0811104C050E040E068E070E0E9 +:10197000CE010E943C058091E8008E778093E800BC +:1019800080E2FE01AFEDB2E001900D928A95E1F7A1 +:10199000DF91CF91089568E081E0CDCF81E0809321 +:1019A000E00080E28093D8001092C9008FE19EE4AD +:1019B0000197F1F700C0000087E090EBDC01809315 +:1019C000930390939403A0939503B093960388E1B7 +:1019D0009CE00FB6F894A895809360000FBE90939A +:1019E0006000FFCFCF93C82F882309F4AEC08238A0 +:1019F000C1F40E94C10681FDA8C089E30E941F0BAB +:101A00000E94AF0A2FEF81EE94E021508040904079 +:101A1000E1F700C0000089E30E94F40ACF910C9422 +:101A2000AF0A8338A1F40E94C10680FD8EC083E511 +:101A30000E941F0B0E94AF0A2FEF81EE94E021500D +:101A400080409040E1F700C0000083E5E5CF843896 +:101A5000A1F40E94C10682FD78C087E40E941F0B9A +:101A60000E94AF0A2FEF81EE94E021508040904019 +:101A7000E1F700C0000087E4CFCF8CEF8C0F813AF4 +:101A800088F580911F01882301F18091D70287FF9B +:101A90001CC0EC2FE695E695E695F0E0EA51FE4F86 +:101AA000828190E04C2F477021E030E002C0220F8D +:101AB000331F4A95E2F782239323892B79F08C2FE9 +:101AC0000E94F40A0E94AF0A09C0E8EEF1E0819199 +:101AD000C817A9F321E0EE3EF207C9F78C2F0E9448 +:101AE0001F0B9CCF80E28C0F883068F4C77021E018 +:101AF00030E001C0220FCA95EAF780915A02822B8A +:101B000080935A028BCFEBE5EC0FE33040F4F0E02A +:101B1000E05EFE4F808190E0CF910C94AB06E8E54B +:101B2000EC0FE73150F4F0E0EE0FFF1FED5DFE4FDC +:101B300080819181CF910C949506C03F30F08C2F1D +:101B40000E946408CF910C948207CF9108951F934F +:101B5000CF93DF93182FD0E0C0E0893311F4C0E5B4 +:101B6000D0E0812F0E94F20C209731F4812FDF9179 +:101B7000CF911F910C94E50B8FE99FE00197F1F74E +:101B800000C000002197F0CF0F931F93CF93DF93F6 +:101B9000C62FD42F022FFC0182818823A1F06093ED +:101BA00092030E9489069093910380939003C770DB +:101BB00081E001C0880FCA95EAF7DF91CF911F91AC +:101BC0000F910C94DB0B80919203681335C08091C8 +:101BD0009003909191030E947A06883C910560F5EC +:101BE00010E21D0FCD17B9F080E28C0F883040F461 +:101BF000C77081E001C0880FCA95EAF70E94D40B34 +:101C0000183048F481E09D2F977001C0880F9A9595 +:101C1000EAF70E94DB0B802F0E94A70D183098F482 +:101C2000D77081E001C0880FDA95EAF7DF91CF9194 +:101C30001F910F910C94D40BC77081E001C0880FE5 +:101C4000CA95EAF7F3CFDF91CF911F910F910895D5 +:101C5000CF93DF93C7EED3E060E0CE010E94EB2D7F +:101C60002196C11588E0D807B9F7DF91CF91089583 +:101C70006F927F928F929F92AF92BF92CF92DF929C +:101C8000EF92FF920F931F93CF93DF9386EFC82EAF +:101C900084E0D82E9FE9E92EF12CE701C056D10946 +:101CA00036011BC0F50185909490692DC8010E94F2 +:101CB000EB2D682DC80101960E94EB2D82E0A80E45 +:101CC000B11C0E5F1F4FC017D10761F788E1680E86 +:101CD000711C6896CE15DF0529F08E010851110997 +:101CE0005301E0CF7E0180E6E80EF11C80E6C80ECD +:101CF000D11C8FE5E81684E0F80679F6DF91CF91E4 +:101D00001F910F91FF90EF90DF90CF90BF90AF9019 +:101D10009F908F907F906F900895CF93C82F6FEF13 +:101D2000811161E283E290E00E94EB2D6FEFC1111F +:101D300061E184E290E00E94EB2D6FEFC11168E257 +:101D400085E290E0CF910C94EB2D80E00E948D0E07 +:101D500060E086E290E00E94EB2D0E94380E0E9427 +:101D6000280E81E00C948D0ECF93C92F682F84E04C +:101D700090E00E94EB2D6C2F82E290E0CF910C94CA +:101D8000EB2D0F931F93CF93DF93C42FD0E0CC0F95 +:101D9000DD1F28E1629FC00DD11D112430E6839F15 +:101DA000C00DD11D1124CE0187960E94D72D082F7A +:101DB00010E0102F0027CE0188960E94D72D9801A1 +:101DC000282BC901DF91CF911F910F910895462FC4 +:101DD0008A3038F4743028F46C3018F4672F0C947F +:101DE000C10E90E080E00895BF92CF92DF92EF9213 +:101DF000FF920F931F93CF93DF937C0100910B030E +:101E000010910C0380915C0290915D02082B192BBC +:101E1000CFE0D0E0CC24C394D12CBC2EC6010C2E34 +:101E200002C0880F991F0A94E2F780239123892B1F +:101E300071F4219790F7B12C8B2DDF91CF911F91E9 +:101E40000F91FF90EF90DF90CF90BF900895B70172 +:101E50008C2F0E94E70E0E941A09019751F3ECCFD4 +:101E6000CF93DF93EC010E94F40EBE010E94E70EB7 +:101E7000DF91CF910C941A09FC01808191810E941D +:101E8000300F292F2F7092959F7092509E3078F4CA +:101E9000E92FF0E0EB59F14D0C948C2D803F19F0B7 +:101EA00020F4883E20F481E00895843FE1F380E04F +:101EB0000895883EC0F3813FD1F7F5CF822F8695F4 +:101EC00086958695089583E290E00E94D72D813211 +:101ED00089F484E290E00E94D72D813159F485E2A3 +:101EE00090E00E94D72D91E0883209F090E0892F90 +:101EF0008170089580E0FCCFCF9384E090E00E9451 +:101F0000D72DC82F82E290E00E94D72D982F8C2FDA +:101F1000CF91089560918B03669570E04BE050E09F +:101F20008CE091E00E94BD2D892B19F481E0809313 +:101F3000C7020E9489069093C1028093C00208954F +:101F40004F925F926F927F928F929F92AF92BF92C9 +:101F5000CF92DF92EF92FF920F931F93CF93DF9375 +:101F6000CDB7DEB7CE57D1090FB6F894DEBF0FBE9E +:101F7000CDBF50901B0180918B0380FF5DC080908E +:101F8000BE029090BF028114910409F068C0EDEC8C +:101F9000F3E09E012F5F3F4FBE0161587F4FC901A3 +:101FA000A4914A2F50E0DA01AA0FBB1FA40FB51F5E +:101FB000A35FBC4FCD90DD90EC90D901CD92DD9226 +:101FC000ED929D0131966A177B0751F720911A0116 +:101FD00043E0249F800D911D11246E9A2EB12F7B1A +:101FE0003EB130645FB7F894BC01549E600D711D22 +:101FF00011248617970709F08DC05FBF8FE594E025 +:102000000197F1F700C00000C258DF4F0FB6F894F7 +:10201000DEBF0FBECDBFDF91CF911F910F91FF901B +:10202000EF90DF90CF90BF90AF909F908F907F9078 +:102030006F905F904F90089580911C0190911D01C9 +:1020400023E0829FF0011124E35FFC4F891708F021 +:1020500096CF1182108212828F5F3396F7CF8091D4 +:10206000BD02811194CFD12CC12C66246394712CB4 +:1020700053E0452E8091C80293010C2C01C0220F21 +:102080000A94EAF7822309F43CC0F601EE0FFF1F21 +:10209000E80DF91DE590F490E114F10409F477CF0F +:1020A00045E050E0B701CE0101960E94B42D0981B0 +:1020B0000F3F39F18A81800F9927991F8B32910543 +:1020C00014F08AE290E05C01AA0CBB1C8A0D9B1DF7 +:1020D000DC01A35FBC4F5D01049D80011124035FFF +:1020E0001C4F0A151B0520F0B5E0EB0EF11CD8CFF4 +:1020F00098014D816C818B810E94E9060D5F1F4F15 +:10210000F0CFEFEFCE1ADE0AF8E0CF16D10409F0D7 +:10211000B1CF3DCFFC014191CF01E8E03EB90000D5 +:1021200000C047FF2EB9440F000000C000C000C02F +:102130002EB900C0EA9591F75CCFCF93DF9300D022 +:102140000F92CDB7DEB780918B0380FF13C09E0145 +:102150002F5F3F4F44E666EE80E00E94E9068B81E8 +:1021600099812A8120938603909385038093870326 +:102170000E94A00F0F900F900F90DF91CF910895C4 +:102180000F931F93CF93DF93EC0110E000E0909149 +:102190001E019017110609F06CF40E94A00F8C81AB +:1021A00090E00196817099278C83DF91CF911F91E8 +:1021B0000F91089520911C01A801420F511D9A0111 +:1021C000220F331F240F351F235F3C4F4C8160913A +:1021D0008D0380918C0396959017110651F04CF069 +:1021E000442349F040918E030E94E9060F5F1F4F80 +:1021F000CECF4423B9F340E0F7CF8F929F92AF92B6 +:10220000BF92CF92DF92EF92FF920F931F93CF93E3 +:10221000DF93EC014C81042F10E09801D8010E945B +:10222000542E9B01AC010E941F2E4B015C01E0E289 +:10223000F0E0E01BF10BA5E5B0E0AC019B010E94D2 +:102240001F2E6B017C019F01DF010E94992D9B01D4 +:10225000AC010E942A2E9B01AC01280D391D4A1D9C +:102260005B1DC701B6010E94322EF22E822F90E034 +:1022700039E23F1560F143E0249F90011124359528 +:102280002795122F109500E085E5E82EEF18809134 +:102290001E01081758F10E94A00F9C8181E099232C +:1022A00019F0903219F48FEF809319018091190180 +:1022B000890F8C83DF91CF911F910F91FF90EF9049 +:1022C000DF90CF90BF90AF909F908F90089525E5BD +:1022D00030E0B901681B790B9B01220F331F260FD9 +:1022E000371F37FFCCCF2F5F3F4FC9CF8E2D01FD5A +:1022F0008F2D20911C01622F600F7727771F9B0184 +:10230000220F331F260F371F235F3C4F412F609151 +:102310008D030E94E9060F5FBACF0F931F93CF93EF +:10232000DF9380911C0190911D0123E0829FF001B9 +:102330001124E35FFC4F891740F1C0E0D3E06091C6 +:102340001E01C61740F10E94A00F20911701809135 +:10235000CA02820F8093CA0290911801920F909343 +:102360001801191654F4082E000C990B40911E0107 +:102370004150550B841795071CF0219520931701A8 +:10238000DF91CF911F910F910895118210821282D7 +:102390008F5F3396D0CF0C2F10E070E0C8010E9401 +:1023A000782D20911C01820F482F50E02091CA0205 +:1023B000022E000C330B02171307BCF020911801FA +:1023C000022E000C330B201731077CF08D9F9001FB +:1023D0001124235F3C4F40918E0360918D038091C7 +:1023E0008C030E94E906CF5FAACFFA01EE0FFF1F10 +:1023F000E40FF51FE35FFC4F118210821282F3CFCE +:102400001F93CF93DF93FC018281DFEF80FFD1E048 +:10241000C0E01AE290911E01C91788F00E94A00F37 +:102420008091C902D130C9F5811102C080911E018D +:1024300081508093C902DF91CF911F910895E0915F +:102440001C014C2F50E09A012E0F311DF901EE0FA7 +:10245000FF1FE20FF31FE35FFC4F11821082128215 +:102460008091C9028B32ACF0612F0E94562D892FCA +:10247000082E000C990B4817590749F49F01409109 +:102480008E0360918D0380918C030E94E906CF5FDB +:10249000C1CF87FFEDCF890FEBCF90E00196609120 +:1024A0001E0170E00E94782DC4CFEF92FF921F931F +:1024B000CF93DF93EC0110E0EE24EA94F12C6091CD +:1024C0001E01161770F00E94A00F9A818C8190FF58 +:1024D00027C08F5F8C83DF91CF911F91FF90EF908A +:1024E000089520911C01422F410F5527551FCA0105 +:1024F0009A01220F331F280F391F235F3C4F70E0D2 +:10250000C7010E94782D962F8C8140918E03609197 +:102510008D03199F800D11240E94E9061F5FCFCF04 +:102520008150D8CF90918B0390FF14C090911C01E3 +:1025300020911D0133E0939FF0011124E35FFC4FD4 +:10254000921710F00C94A00F8183608342839F5FE9 +:102550003396F6CF08950F931F93CF93DF9300D058 +:102560000F92CDB7DEB78C018091CB0281110AC0EA +:102570009E012F5F3F4F44EB6FEF0E94E9068A8177 +:102580008093CB02F8016481613069F08091CB02C5 +:1025900040E0662361F040E0623011F44091CB02EC +:1025A00080E060E004C06091CB0240E080E00E94E7 +:1025B0009212F801848190E0019663E070E00E943D +:1025C000782D84830F900F900F90DF91CF911F9102 +:1025D0000F910895CF93DF9300D00F92CDB7DEB760 +:1025E00090918B0390FF0AC09E012F5F3F4F0E9486 +:1025F000E9064B8169818A810E9492120F900F90A7 +:102600000F90DF91CF910895CF93DF93EC01EBE82A +:10261000F3E0438162818C810E94EA128C818F5F9A +:102620008C83DF91CF910895CF93DF93EC01EC8100 +:10263000F0E0EA50FC4F4491EBE8F3E062818181E5 +:102640000E94EA128C818F5F8C83DF91CF91089575 +:10265000CF92DF92EF92FF926B017C010E94D30632 +:10266000B701A60188E090E0FF90EF90DF90CF9057 +:102670000C94FD2DAF92BF92CF92DF92EF92FF921A +:102680000F931F93CF93DF9300D00F92CDB7DEB798 +:10269000182FF62E042FE22E90918B0390FF29C065 +:1026A000E92FE695AE2FB0E0A055BE4F8C918093F8 +:1026B000C6029E7F923059F59E012F5F3F4F812FBA +:1026C0000E94E9064B8169818A810E9492121093CF +:1026D0008C03F0928D0300938E03EE2051F06091F5 +:1026E0008B0370918C0380918D0390918E030E94D7 +:1026F00028130F900F900F90DF91CF911F910F91A2 +:10270000FF90EF90DF90CF90BF90AF900895823010 +:1027100019F400918E03DBCF863019F410918C03ED +:10272000D6CF8930D9F3893191F6E9518E2F817056 +:10273000D82EE695F0E0E853FC4FA590B490C12C5C +:10274000BB2460911E01C61618F00E94A00FBFCFD7 +:102750002C2D30E0A29EC001A39E900DB29E900D44 +:10276000112470E00E94642D812FD11013C0860FB8 +:1027700040911C01420F532F511D9A01220F331F0C +:10278000240F351F235F3C4F402F6F2D0E94E90619 +:10279000C394D7CF861BECCFEBE8F3E0438128E06E +:1027A000421B08F440E021E0628181810C943A13DD +:1027B000EBE8F3E0438128E0420F08F44FEF21E01B +:1027C000628181810C943A13EBE8F3E0628128E0A6 +:1027D000621B08F460E021E0438181810C943A138C +:1027E000EBE8F3E0628128E0620F08F46FEF21E08C +:1027F000438181810C943A13EBE8F3E0818121E07D +:102800004381628188500C943A13EBE8F3E08181B4 +:1028100021E043816281885F0C943A1380918F0399 +:10282000882319F0815080938F0360918B037091FE +:102830008C0380918D0390918E030C9428138091CA +:102840008F03833018F48F5F80938F0360918B0325 +:1028500070918C0380918D0390918E030C942813BA +:1028600090918B0390FF36C09170811129C09260C6 +:1028700090938B03662351F060918B0370918C03CE +:1028800080918D0390918E030E94281360918B0399 +:10289000669570E04BE050E08CE091E00E94BD2D29 +:1028A000892BA9F01092C70281E08093C30220E037 +:1028B00040918E0360918D0380918C030C943A13A8 +:1028C000853210F09864D4CF880F982BD1CF0E9416 +:1028D0008A0FEACF089560E00C94301421E030E0D4 +:1028E000A90102C0440F551F8A95E2F7CA01209141 +:1028F000C802662391F0822B8093C8028091C702A0 +:10290000811105C080918B0386950E946B14809184 +:102910008B0380FD05C00C94A00F80958223ECCF23 +:102920000895CF93DF93C82FC17082FBDD27D0F9C4 +:1029300081FB662760F984E00E946E1461E06C27D9 +:1029400085E00E946E146D2F86E0DF91CF910C948C +:102950006E140F931F93CF93DF93EC0161E0009708 +:1029600009F0682F617080E00E946E1460E020978B +:1029700021F0BE0176956795617081E00E946E142A +:1029800060E0209731F0BE01769567957695679562 +:10299000617082E00E946E1460E0209739F0BE0101 +:1029A000B3E076956795BA95E1F7617083E00E9490 +:1029B0006E14AE0170E060E0BB27A72F962F852F25 +:1029C0000097A105B105D9F1AC01BD0188E08A01EC +:1029D0009B01F4E03695279517950795FA95D1F761 +:1029E000011511052105310519F08C5FB901A80108 +:1029F0008A019B01E2E03695279517950795EA95A0 +:102A0000D1F7011511052105310519F08E5FB901C6 +:102A1000A8017695679557954795452B462B472BEB +:102A200009F08F5F8130C9F0882359F08230D1F0EE +:102A30008330E9F020E04EE16FEF80E406C080E0F3 +:102A4000C6CF20E04EE16FEF82E30E943A13CE0141 +:102A5000DF91CF911F910F91089520E04EE16FEF2C +:102A60008EE1F3CF20E04EE16FEF8AE6EECF20E07B +:102A70004EE16FEF87EDE9CF0E94A91490930C030C +:102A800080930B030C94B10B80910B0390910C037A +:102A90009C01267033272630310519F488600C9488 +:102AA0003C15877FFCCF21E030E002C0220F331FAE +:102AB0008A95E2F72095309580910B0390910C0355 +:102AC000822393230C943C1590915702809589237F +:102AD00080935702282F277091F4282F082E000C7E +:102AE000330B9217130659F09091D80292FD07C04C +:102AF0008595859585950E945315109257020895E6 +:102B00009091D80292FB222720F9281769F080FBC8 +:102B100092F99093D8028091D7029091D8020E94A6 +:102B2000B40E82E00C946415089521E030E002C0F8 +:102B3000220F331F8A95E2F780910B0390910C03CB +:102B4000822B932B0C943C1580918B03869581509E +:102B500009F484E261E00C94301480918B03869533 +:102B60008F5F853208F081E061E00C943014909121 +:102B70008B0390FF07C09695981720F0961710F4D6 +:102B80000C94AD1561E00C943014EBE8F3E083E0B5 :102B9000808311828FEF828384EB83831482608130 -:102BA0007181828193810C943D1369EE7EEF90E0F8 -:102BB00080E00E94F42D60E082E090E00E94D62D3B -:102BC00060E083E090E00E94D62D10925B021092AC -:102BD0005A0260E084E090E00E94D62D60E082E23C -:102BE00090E00E94D62D60E085E090E00E94D62D16 -:102BF00060E086E090E00E94D62D6FEF87E090E0E5 -:102C00000E94D62D40E050E0BA0188E090E00E949A -:102C1000E82D60E08DE090E00E94D62D40E050E08D -:102C2000BA0188E190E00E94E82D60E087E190E041 -:102C30000E94D62D40E050E0BA018CE190E00E9465 -:102C4000E82D70E060E080E290E00E94F42D40E02A -:102C500050E0BA0188E190E00E94E82D80E00E94F7 -:102C6000900E0E94A80E40E050E0BA018FE090E084 -:102C70000E94E82D40E050E0BA0183E190E00C941E -:102C8000E82D90E080E00E94D02D893E9E4F11F407 -:102C90000C94780F80E008951092580280911D01E5 -:102CA000E6EEF1E0882359F08091D50287FF07C056 -:102CB0008EE1DF011D928A95E9F70C94A90B86E05D -:102CC000F8CF1F93CF93DF93CDB7DEB7AA970FB698 -:102CD000F894DEBF0FBECDBF81E093E02091F100FC -:102CE000DC012D93CD01B3E089309B07B9F78091CA -:102CF0000203833009F471C0B8F4813009F448C08C -:102D0000823009F4B2C08091E80083FF3AC180911B -:102D10000103909102039A3008F033C1E92FF0E0EB -:102D2000E25AF14D0C94772D8A3009F48DC08B3026 -:102D300009F470C0893039F780910103813219F7A5 -:102D40008091050390910603009711F00297D9F640 -:102D50008091E800877F8093E8008091E80082FFFF -:102D600037C08091F2009091F300029729F480918E -:102D7000F1008B7F813021F48091F1008093DC029F -:102D80008091E8008B778093E8000E946605BBCFB6 -:102D900080910103813A09F0B6CF8091E800877FE6 -:102DA0008093E8008091050390910603892B61F4DC -:102DB00060E28DED92E070E00E9419068091E800DB -:102DC0008B778093E8009FCF60E090E080E0F3CFC6 -:102DD0008091FF028111C1CF96CF80910103813A8A -:102DE00009F091CF8091050390910603892B09F09A -:102DF0008ACF8091E800877F8093E8008091E80087 -:102E000080FFFCCF80911D018093F1008091E8004C -:102E10008E77B9CF80910103813209F074CF809110 -:102E2000050390910603892B09F06DCF8091E8008E -:102E3000877F8093E8000E9466058091030380935A -:102E40001D010E944C165FCF80910103813209F071 -:102E50005ACF8091E800877F8093E8000E94660542 -:102E6000809104038093DB024ECF80910103813A6D -:102E700009F049CF8091E800877F8093E800809136 -:102E8000E80080FFFCCF8091DB02BECF803899F054 -:102E9000823809F076C0809105038F70873008F082 -:102EA00070C08093E9008091EB0085FB882780F952 -:102EB0001092E90006C08091FD029091FE029111EE -:102EC00082609091E800977F9093E8008093F100F2 -:102ED0001092F1008091E8008E77B5C1882309F443 -:102EE000A2C1823009F04DC0809103038111A6C1B7 -:102EF000809105038F702FEF280F263008F041C016 -:102F00008093E9002091EB0020FF98C1933031F4C9 -:102F10008091EB0080628093EB0090C19091EB0078 -:102F200090619093EB0021E030E001C0220F8A9580 -:102F3000EAF72093EA001092EA008091EB008860A3 -:102F4000EACF81111EC0109103031F778091E30027 -:102F50008078812B8093E3008091E800877F8093C5 -:102F6000E8000E9466058091E80080FFFCCF809118 -:102F7000E30080688093E30082E0111183E0809396 -:102F8000FF028091E80083FF0AC08091E800877FFC -:102F90008093E8008091EB0080628093EB00AA961A -:102FA0000FB6F894DEBF0FBECDBFDF91CF911F915A -:102FB00008958058823028F720910303309104034C -:102FC0002C3DE3E03E07A1F583E08A838AE2898312 -:102FD0004FB7F894DE01139620E03EE051E2E32F74 -:102FE000F0E050935700E49120FF03C0E295EF70AA -:102FF0003F5FEF708E2F90E0EA30C0F0C7968D9360 -:103000009D932F5F243159F74FBF8091E800877F50 -:103010008093E8006AE270E0CE0101960E941906F2 -:103020008091E8008B778093E800ABCFC096E7CF24 -:103030008091050390910603432F55274330510596 -:1030400009F44AC078F54130510509F47AC08BE59E -:1030500090E0E6EBF8E04230510509F092CF209184 -:10306000E800277F2093E8002091070330910803B0 -:103070008217930708F49C0140E02115310509F0FF -:1030800065C0411163C08091E80082FDC9CF809185 -:10309000FF02882329F2853019F28091E80083FF2E -:1030A000F2CFBECF4132510509F43CC04232510546 -:1030B00009F067CF8330910508F063CFFC01EE0F74 -:1030C000FF1FEA52FE4F0190F081E02D8D529E4F7E -:1030D000DC018C9190E01AC0332721303105D1F00A -:1030E0002115310561F02230310509F04ACFE3E2C4 -:1030F000F9E0E4918E2F90E0E3E2F9E007C0E1E42B -:10310000F9E0E4918E2F90E0E1E4F9E0009709F412 -:1031100038CFA5CFEDE2F9E0E4918E2F90E0EDE21B -:10312000F9E0F4CF8330910508F02BCF880F991F79 -:10313000FC01E452FE4F0190F081E02D89E090E027 -:103140008ECF82E190E0E1E1F9E089CF8091FF024A -:10315000882309F465CF853009F462CF8091E800B7 -:1031600083FD5ECF8091E80082FD8DCF8091E800E5 -:1031700080FF83CF8091F2009091F30021153105FB -:1031800019F08830910550F041E0089709F040E0CF -:103190008091E8008E778093E8006FCF4491409350 -:1031A000F1003196215031090196E8CF803809F0BD -:1031B000E8CE8091E800877F8093E800809100034B -:1031C0008093F10087CE8111DCCE10910303123081 -:1031D00008F0D7CE8091E800877F8093E8001093B5 -:1031E00000030E946605112311F084E005C0809160 -:1031F000E30087FDFACF81E08093FF0242E061ECBB -:1032000081E00E94850542E261EC84E00E94850530 -:1032100042E261EC82E00E94850542E260EC83E0DC -:103220000E948505AECE80910303813009F0A9CEBE -:1032300081E0933009F080E08093FE021092E90073 -:103240008091E800877F8093E8000E94660599CE10 -:103250003F924F925F926F927F928F929F92AF9226 -:10326000BF92CF92DF92EF92FF920F931F93CF9373 -:10327000DF9300D000D00F92CDB7DEB78C01FC01F8 -:1032800083819481892B31F08081918189238F3FC3 -:1032900009F056C60F900F900F900F900F90DF918E -:1032A000CF911F910F91FF90EF90DF90CF90BF9043 -:1032B000AF909F908F907F906F905F904F903F90D6 -:1032C00008950E94090FF82E682F89819A810E9423 -:1032D0007D0B69817A818F2D0E94FC0E7C01F801A3 -:1032E0008281882309F41EC6970122513F4520316F -:1032F000310508F0D6C58FEF97E00E94C22DFEEE93 -:10330000EF0E57EE852E53E0952E882381F18091A4 -:103310005502877009F4BECFF8018281882309F431 -:10332000B9CF82E00F900F900F900F900F90DF9128 -:10333000CF911F910F91FF90EF90DF90CF90BF90B2 -:10334000AF909F908F907F906F905F904F903F9045 -:103350000C947915811428E09206C9F2C4010E94E8 -:10336000C22D811101C0EA943FEF831A930AE11044 -:10337000F1CF1C821B82442443944AE0342E740112 -:103380004FEFE41AF40AC4010E94C22D89831A8205 -:10339000882309F4BCCF9FEF980F933000F58A8300 -:1033A000498252E0850E911CC7010E94C22D8B8379 -:1033B000882309F4ACCFCE0101967C01F70120816E -:1033C0002223E9F2213009F049C0918182819130B4 -:1033D00041F4F2E0EF0EF11C0E94AA0D09C0470172 -:1033E000EACF923049F422E0E20EF11C0E94F50C83 -:1033F0003FEFE31AF30AE2CF933031F432E0E30E09 -:10340000F11C0E94E10BF4CF943021F04FEFE41A4D -:10341000F40AEECF52E0E50EF11C30E020E0B701F7 -:103420006F5F7F4FF70141818053990B8A3091057F -:1034300050F021503109E0F28FE99FE00197F1F758 -:1034400000C00000F6CF329EF001339EF00D112433 -:103450009C012E0F3F1F842F7B01E1CFE22FF0E074 -:10346000EA5DFD4F5490822F86958695869590E073 -:10347000FC01EA5EFD4F64902770712C022E02C0A1 -:10348000759467940A94E2F7E1E06E227724FC01D8 -:10349000EA5FFD4FA490B12C022E02C0B594A79410 -:1034A0000A94E2F7F1E0AF22BB24FC01EA50FE4FA0 -:1034B000C490D12C02C0D594C7942A95E2F721E09C -:1034C000C222DD246114710419F081EE0E94F50C12 -:1034D000A114B10419F086EE0E94F50C852D0E940E -:1034E000AA0DAB2819F086EE0E94E10B672819F0AF -:1034F00081EE0E94E10BCD2809F47ACF8CE26CCFEB -:1035000081E00E9495150E94591501CF81E00E942B -:103510006815F9CF82E0F5CFF3E8EF16FFE5FF0677 -:1035200009F4C5C024E8E2162FE5F20609F0D9C473 -:10353000882309F4ECCEF0906A02EE24E394FE2492 -:10354000F0926A020E948806909368028093670254 -:103550008091690210921A01882309F4B6C08AE2A8 -:1035600080931B0180931C0181E20E9480140E94C1 -:10357000B210E0926A0210926902109266021092F2 -:103580006502C5CE882309F47AC080916D0281114D -:1035900006C081E080936D0282EE0E94F50C0E94CD -:1035A000880690936C0280936B028BE20E94F50C6C -:1035B000F8018281882309F4D4C410929003F3E0C7 -:1035C000EF16FDE5FF0608F0B3C02AEFE2162CE582 -:1035D000F20630F4C70182509C45449708F0AEC013 -:1035E0000E94910F9093D6028093D50240E1E41699 -:1035F0004CE5F40609F48AC108F0F8C088E0E81642 -:103600008CE5F80609F470C108F0C4C0E4E0EE16D9 -:10361000ECE5FE0609F45AC108F0A6C022E0E21665 -:103620002CE5F20609F44CC18091D502826033E0AA -:10363000E3163CE5F30609F446C18091D50290916A -:10364000D6020E94B70E0E944C1661CE8823A1F0CC -:1036500080916D02811106C081E080936D0282EE3F -:103660000E94F50C0E94880690936C0280936B0276 -:1036700081EE0E94F50C99CF81EE0E94E10B8BE266 -:103680000E94E10B95CF882309F492CF81EE0E942E -:10369000F50C83EE0E94F50C8FE40E94F50C8FE48C -:1036A0000E94E10B83EE0E94E10B81EEE9CF8823BB -:1036B00009F47ECF81EE0E94F50C83EE0E94F50C9A -:1036C00080E50E94F50C80E5EBCF8AE280931B0138 -:1036D00080931C0181E2FF2029F00E9480140E9447 -:1036E000B21049CF0E94801446CFE5EFEE16ECE50C -:1036F000FE06B9F090F026EFE2162CE5F20609F08E -:1037000057CF27E245EE66EE09C427E245EE65EEA7 -:1037100005C426E241EE60EE01C427E245EE64EE08 -:10372000FDC326E241EE62EEF9C328E241E0EFCFAD -:1037300031E6E3163DE5F30609F452CF80915802D5 -:1037400046E1E4164CE5F40609F018C48A7A91E0E3 -:1037500009F490E0909304028111FDC089E20E9477 -:10376000170B0E94A70AD3CD8091D502806146E055 -:10377000E4164CE5F40609F4A6C08091D5028860F1 -:1037800057E0E5165CE5F50608F49DC08091D5028A -:10379000806299C08CE0E8168CE5F80609F4AEC0AA -:1037A00078F48091D5028C60EAE0EE16ECE5FE0636 -:1037B00009F489C008F49CC08091D5028E7F83C033 -:1037C0008091D502877F2EE0E2162CE5F20609F4FF -:1037D0007AC08091D5028B7F3FE0E3163CE5F3068B -:1037E00008F471C08091D5028F7E6DC04CEFE41655 -:1037F0004CE5F40609F486C0A0F584E1E8168CE5F2 -:10380000F80609F497C098F4E2E1EE16ECE5FE063E -:1038100009F480C08091D5028F7BF3E1EF16FCE5BF -:10382000FF0608F450C08091D502837F4CC02AEF78 -:10383000E2162CE5F20609F44DC008F051C045E14E -:10384000E4164CE5F40609F0F8CE8091D50282FB2F -:10385000992790F921E0922790FB82F990FB83F958 -:1038600032C0E1145DE5F50609F45AC0A0F4809178 -:10387000D60283609EEFE9169CE5F90671F180910E -:10388000D6028D7FEFEFEE16ECE5FE0630F180916B -:10389000D6028C7F22C0F2E0EF16FDE5FF0609F4A8 -:1038A00058C008F450C031E6E3163DE5F30609F0D0 -:1038B000C4CE9091D502892F8F7E94FF806103C082 -:1038C0008091D50281608093D502B7CE8091D502D8 -:1038D0008460F9CF8091D60281608093D602ADCE0C -:1038E0008091D6028260F9CF8091D5028064EBCFBF -:1038F0000E944C168091D5028068E5CF8091D50258 -:103900008D7FE1CF8091D6028E7FE7CF8091D50267 -:103910008F7DD9CF0E944C168091D5028F77D3CF5F -:103920008091D602982F909591708E7F892B90FB75 -:1039300081F9D3CF0E944C169091D502892F97FB25 -:1039400087F98058C0CF61E08EE090E00E94D62DCC -:1039500074CE60E0F9CF85E302CF85E30CC380919C -:10396000890380FF1BC08E7F809389036091890348 -:1039700070918A0380918B0390918C030E943D1378 -:103980001092C5025FEF80E792E051508040904076 -:10399000E1F700C000000E94B50FB9CC81608093B0 -:1039A000890361E086950E944514B1CC44EA55E153 -:1039B0006DEA75E10E94CC06AACC4DEA55E164EAB5 -:1039C00075E1F8CF4AE154E161E174E1F3CF49EFE9 -:1039D00053E165E074E1EECF41EE53E16DEE73E14A -:1039E000E9CF4DEE53E161EE73E1E4CF44E354E1FE -:1039F00063E274E1DFCF61E081E0D5CF65E082E092 -:103A00000E94B71584CC68E086E0FACF64E18FE0CD -:103A1000F7CF67E185E1F4CF62E289E1F1CF61E0C0 -:103A200083E2C1CF4BE5E4164DE5F40611F15CE508 -:103A3000E5165DE5F50609F0D3C28091D60282FB5A -:103A4000882780F991E089270E94C40EC9C20E948C -:103A50004C168FEF94E3ECE081509040E040E1F7AA -:103A600000C000000E94D10C0E94D51550CC81E00E -:103A7000EBCF80E0E9CFC7010E94550BD82EBFC223 -:103A80002F2D2F70C22E8F2D807F19F0C29490EFB2 -:103A9000C922DD20C9F0CC2069F080E28E0D88308B -:103AA00010F081100BC080915802C82AC0925802B1 -:103AB0000E94A70A8E2D0E94F50C19C08091570212 -:103AC000C82AC0925702F4CF8E2D0E94E10BCC2061 -:103AD00071F0C09480E28E0D883010F081103EC0ED -:103AE00080915802C822C09258020E94A70AE92D6C -:103AF000E850FF0B349720F40E94C0060E94A614E1 -:103B0000AA2009F4C7CB8091550280FDC3CBF801F0 -:103B100012828595859585950E949515C8010E940C -:103B20002819809155028595859585950F900F9060 -:103B30000F900F900F90DF91CF911F910F91FF90F9 -:103B4000EF90DF90CF90BF90AF909F908F907F903D -:103B50006F905F904F903F900C9468158091570242 -:103B6000C822C0925702C1CF3F2D3F70B32E8F2D78 -:103B7000807F803219F0B29480EFB822882071F0F3 -:103B800041E0841681F1DD20D9F1CC2091F1F801DA -:103B9000858180FF8FCF8F7085832BC0DD20B1F0B2 -:103BA000909159028B2D892BC11003C00E94D70B15 -:103BB0009ECF51E0C512FACF2091D60222FD97CFB9 -:103BC000981709F494CF8093590291CFC11006C081 -:103BD0000E94A10A8B2D0E94CC0B89CF81E0C816D0 -:103BE00009F485CFF5CFDD2031F095E09C1508F480 -:103BF0007ECF8B2DDBCFE4E0EC1508F478CFEACF55 -:103C0000CC2041F3F9E38F1209C02FEF37EE43E0E8 -:103C1000215030404040E1F700C000008E2D0E944E -:103C2000E10B65CF8F2D86958695837061F081308D -:103C300009F05DCFC7019370D11002C090E080E021 -:103C40000E94940654CFC7019370D11002C090E037 -:103C500080E00E94AA064BCF8E2DDD2029F00E9425 -:103C600063080E94810743CF0E94A807FACF8F2DD7 -:103C7000837009F040C0D1103ACF4E2D4295469541 -:103C80004770440F440F8E2D8F7090E0042E02C0B9 -:103C9000880F991F0A94E2F730E020E0E4FE09C0A3 -:103CA0002FE030E002C0220F331F4A95E2F7209543 -:103CB00030954F2D469546954370423099F078F4F3 -:103CC00060915A0270915B02413039F0822B932B44 -:103CD000862397230E94C60B0ACF862B972B822B15 -:103CE000932BF8CF822B932B20915A0230915B02B9 -:103CF00082279327EFCF8695DD2011F08F2D8170DD -:103D0000882309F4F4CE4E2D429546954770440F12 -:103D1000440F8E2D8F7090E0042E02C0880F991FE3 -:103D20000A94E2F730E020E0E4FE09C02FE030E042 -:103D300002C0220F331F4A95E2F7209530954F2D90 -:103D4000469546954370423099F078F460910903A6 -:103D500070910A03413039F0822B932B86239723ED -:103D60000E945115C4CE862B972B822B932BF8CF14 -:103D7000822B932B2091090330910A0382279327EA -:103D8000EFCF5F2D5F70F52EDD2029F0852F0E948B -:103D900095158E2D0BCF8E2D0E94CC0B8F2D0E9452 -:103DA0006815A5CE8E2D92EF891609F449C0981595 -:103DB00070F0E0EF8E1639F1F1EF8F16C9F1DD20CA -:103DC00009F45FC0C11076CE8F2D8F7136C023EFFE -:103DD0008216D9F134EF8312F2CFDD2009F446C008 -:103DE000FF2DFF71FF2E8F2F0E9495158091D60217 -:103DF00082FD07C028E0F29EC001112483608093F9 -:103E000055028F2D1AC0DD2071F044E04C1508F4E6 -:103E10006ECE2F2D2F7181E090E002C0880F991F88 -:103E20002A95E2F7A7CF55E05C1508F460CEF1CFF4 -:103E30008F2D8F71DD2009F4B2CF0E94951557CEDA -:103E40008F2D8F71DD20C9F3AACF90E080E0DD20B7 -:103E500009F486CF9F2D9F7121E030E0F90102C067 -:103E6000EE0FFF1F9A95E2F7CF017ACF81E00E9413 -:103E7000791531E03C1508F03ACE82E00E947915C0 -:103E800036CECC2059F0893309F0C8CE4FEF57EE2B -:103E900083E0415050408040E1F7BECE8F2D8F71BE -:103EA0007ECFF0E1EF16FFE5FF0609F429CB21E113 -:103EB000E2162FE5F20609F42DCB42E8E4164FE5B1 -:103EC000F40609F4E0CB08F027CB90E8E9169FE56B -:103ED000F90609F457CBE1E8EE16EFE5FE0609F422 -:103EE000B5CB33EFE3163CE5F30609F412CC08F04A -:103EF000FCCB58EDE5165CE5F50609F406CC89ED3A -:103F0000E8168CE5F80609F410CC97EDE9169CE567 -:103F1000F90609F04DCB26E241EE61EEC8010E94A0 -:103F2000C70DF5C930E1E3163FE5F30609F4EECA23 -:103F300041E1E4164FE5F40609F0BFCF82E0E7CA9D -:103F400085E0DE01119601900D928A95E1F7F80166 -:103F5000228189819A812111B4C90E94550BF82EC2 -:103F6000B8C9F6E1EF16FCE5FF06D1F58091040231 -:103F70008111F3CC89E20E94EC0AF3CB82722CEC23 -:103F8000E2162CE5F20609F431CD08F0A7C046ECA4 -:103F9000E4164CE5F40609F415CD08F076C093EC70 -:103FA000E9169CE5F90609F401CD08F05DC0F2ECD4 -:103FB000EF16FCE5FF0609F4D2CCEAE5EE16EDE5D6 -:103FC000FE0609F454CD08F02DCDE1142CE5F206DF -:103FD00009F43DCD3EEDE3163CE5F30609F444CD8E -:103FE000F8018281E080F180882309F444CDC70183 -:103FF0000E94090FD82E682FC7010E947D0BB701C0 -:104000008D2D0E94FC0E0E9419097C01882EF8015A -:10401000D280C580C2943FE0C32280915502877050 -:10402000A1F0AD2CDD2091F08F2D807F803421F028 -:1040300080E28E0D883048F082E00E9479158091F0 -:1040400055028770AA24A3948111A12C9F2C9294CD -:104050002FE09222FBE0F91508F449CDE92DF0E0BC -:10406000E859F14D0C94772D24ECE2162CE5F2067C -:1040700009F4A3CC41E154E16AE174E135ECE316C3 -:104080003CE5F30609F496CC98CF49ECE4164CE5F0 -:10409000F40609F4A1CC88F497ECE9169CE5F9063E -:1040A00009F495CC45E054E169EF73E1E8ECEE16D4 -:1040B000ECE5FE0609F47ECC80CFFAECEF16FCE5C9 -:1040C000FF0609F48ECC43E254E164E374E12BEC87 -:1040D000E2162CE5F20609F46DCC6FCF31EDE31654 -:1040E0003CE5F30609F492CCB8F45EECE5165CE529 -:1040F000F50609F483CC08F47ECC9FECE9169CE528 -:10410000F90609F480CC6EE089E0E0EDEE16ECE50E -:10411000FE0609F475CC51CFF4EDEF16FCE5FF0671 -:1041200009F47ACC78F432EDE3163CE5F30609F4B1 -:1041300070CC61E088E143EDE4164CE5F40609F447 -:1041400032CC3BCF55EDE5165CE5F50609F467CCBE -:104150008DE5E816F80609F4DAC82FCF1F93CF9340 -:10416000DF9380912202807FA9F480911F0288232F -:1041700089F080915402D091230260911D027091C8 -:104180001E02A0912002B0912102C62FC72316E083 -:10419000D81304C0DF91CF911F91089590E010973C -:1041A00011F0CF3F19F401968770F2CF189F90015C -:1041B000199F300D1124F901EC5DFD4F418147132A -:1041C000F2CF40814613EFCF42814111ECCF4381C2 -:1041D00054814A1B5B0B483C510528F78091220211 -:1041E0008F70806180932202F901E75DFD4F80812D -:1041F0008F70806180838DE192E00E942819DF91A9 -:10420000CF911F910C944B0BAF92BF92CF92DF9244 -:10421000EF92FF920F931F93CF93DF93CDB7DEB74B -:1042200061970FB6F894DEBF0FBECDBF8C0185E05D -:10423000F801DE011D9601900D928A95E1F7F801D3 -:10424000E2808DE1A82E82E0B82E6091200270916C -:1042500021026115710509F432C190911D0240914E -:104260001E02892F84238F3F09F429C120813181C7 -:10427000C380D480F0901F02F601E61BF70BFF20ED -:1042800009F4E8C080912202582F507FE83CF105E4 -:1042900008F0ABC0511177C0FE2C431321C092131C -:1042A0001FC0E1101DC08F70806180932202C50184 -:1042B0000E94281980912202F80185838F2D619632 -:1042C0000FB6F894DEBF0FBECDBFDF91CF911F9127 -:1042D0000F91FF90EF90DF90CF90BF90AF90089537 -:1042E000CD2829F0822F83238F3F09F003C180E07E -:1042F000F82FF170DF2E80FF3CC080915402409176 -:10430000230256E0841315C02D873E878D859E8538 -:104310000E94450F292F22952F702230F0F0243073 -:1043200018F59F70F1F0F8019581907FD1F4D12CB0 -:104330001EC090E0589FF001599FF00D1124EC5DD4 -:10434000FD4F6181361306C06081261303C0628170 -:10435000E6120FC001968770D5CF9F7011F08823A9 -:1043600031F3805E883018F3C8010E942819FD2CB3 -:10437000A5CFEE2009F4A2CF809122028160809324 -:104380002202F12C9BCF431306C0921304C0F80104 -:10439000EE2009F479C0C8010E94510F882309F169 -:1043A000EE20F9F080912202803270F020911D02FF -:1043B00030911E0238872F831986DB86CA868C8748 -:1043C000CE0107960E94281986E0F801ADE1B2E01F -:1043D00001900D928A95E1F70E94AE20FF24F3949C -:1043E0006DCFC8010E942819F9CF51110AC08DE183 -:1043F00092E00E94281986E0F50111928A95E9F76A -:10440000C0CF43130FC092130DC0E1100BC0F801D1 -:104410008583C8010E94281986E0F50111928A95CA -:10442000E9F74CCFC8010E94510F8823D1F2EE204A -:10443000C1F280912202803238F220911D02309127 -:104440001E023A8329831B82DD82CC828E83CE01B9 -:104450000196B8CFE83CF105F8F6FE2CEE2009F203 -:1044600043131FC092131DC08091220280FD10C013 -:10447000982F907F69F0F8018583903F31F0982F55 -:10448000907F905F8F70892B8583C8010E942819C7 -:1044900086E0F801ADE1B2E001900D928A95E1F776 -:1044A0000DCFC8010E94510F81118ECF8091220241 -:1044B000816080932202C8010E942819FFCEEE205D -:1044C00009F48FCFC8010E94510FF82E882309F4F8 -:1044D00088CF86E0F801ADE1B2E001900D928A95B7 -:1044E000E1F780911D0290911E020E94450F0E94EB -:1044F000AE20E4CE81E08E25FBCE1F93CF93DF93D9 -:10450000CDB7DEB767970FB6F894DEBF0FBECDBF4D -:104510004B8B5C8B6D8B7E8B8F8B61111092570256 -:104520001A8A198A85E0FE017396DE011D960190B4 -:104530000D928A95E1F786E0FE013D96DE01179621 -:1045400001900D928A95E1F7CE0107960E94042111 -:10455000882389F016E080915402909123028913F8 -:1045600049C067960FB6F894DEBF0FBECDBFDF918E -:10457000CF911F91089586E0FE013796DE011196D6 -:1045800001900D928A95E1F78A859B85892B11F31D -:104590008F81988589238F3FE9F22091230230E0B3 -:1045A000C90101968770992740915402481719064E -:1045B00071F40E944C16109223021092540286E06D -:1045C000EDE1F2E0DF011D928A95E9F7C3CF96E0B5 -:1045D000929FD001939FB00D1124AC5DBD4FFE01A1 -:1045E000319601900D929A95E1F7809323020E94F3 -:1045F0004B0BB0CF819FC00111248C5D9D4F0E9459 -:104600000421882309F4ADCF8091540290E00196F3 -:1046100087709927809354029ECF8F929F92AF927A -:10462000BF92CF92DF92EF92FF920F931F93CF939F -:10463000DF93CDB7DEB72D970FB6F894DEBF0FBE70 -:10464000CDBF8E010F5F1F4F88E0F80111928A9550 -:10465000E9F74FE4E42E41E0F42E6801AA24A39484 -:10466000B12CF70181917F018F3F09F44BC0F89481 -:10467000E82FE295EF70F0E021A18F70A50102C054 -:10468000440F551F8A95E2F7CA01922F982B91A3E8 -:1046900092A18095892382A3789400C0E3E5F1E09C -:1046A00030E020E0912C812C81918F3F09F47EC075 -:1046B000A82FA295AF70B0E090964C9150E08F700B -:1046C00002C0559547958A95E2F740FD6FC0C50138 -:1046D000022E02C0880F991F0A94E2F7882A992AAD -:1046E0002F5F3F4F2C303105F9F6F701319780816C -:1046F0008F3F11F00E94BF0850EA5A95F1F7F6017A -:1047000091828082F2E0CF0ED11C23E5E21621E0F7 -:10471000F20609F0A6CF48E050E0B8018EE692E03C -:104720000E94B52DCC24C394009709F4C12C892B89 -:1047300009F43FC088E0F801AEE6B2E001900D92C6 -:104740008A95E1F781E080935E020E94880690934B -:104750005D0280935C0280915C0290915D020E94F8 -:104760007906069750F180916E0290916F029093B6 -:10477000A7028093A602809170029091710290939B -:10478000A9028093A8028091720290917302909383 -:10479000AB028093AA02809174029091750290936B -:1047A000AD028093AC0210925E0207C090E080E000 -:1047B00095CF80915E028111CECF80916D028823CA -:1047C00071F080916B0290916C020E947906893E93 -:1047D000934028F082EE0E94E10B10926D028091CE -:1047E0006A02882399F18091690281112FC080911A -:1047F0006702909168020E94790681369A4E78F09D -:104800008091650290916602019690936602809372 -:1048100065020E94880690936802809367028091E7 -:104820006502909166024F9788F010921A018AE211 -:1048300080931B0180931C018FE00E94801481E013 -:1048400080936902109266021092650238E7E32EA7 -:1048500032E0F32E10E000E0BB24B394F701D190D6 -:104860007F01DD2051F10115110509F05FC0B09203 -:1048700063020E9488069093600280935F02D69440 -:10488000C801880F991FDD2009F45DC08F589E4F25 -:10489000FC01808191819A8789871B860E94880606 -:1048A0008160782F9D878C87F70131971082498529 -:1048B0005A856B858D850E947D220F5F1F4F0930C1 -:1048C000110561F61091640280916302111164C0B8 -:1048D0008823E1F110921A0184E080931B018093F8 -:1048E0001C018FE00E9480141092630281E080938B -:1048F000640280916902811105C080916A02811170 -:104900000E94B2108C2D2D960FB6F894DEBF0FBE0C -:10491000CDBFDF91CF911F910F91FF90EF90DF906E -:10492000CF90BF90AF909F908F9008950530110564 -:1049300019F4B09262029DCF0630110509F09FCFA5 -:10494000B092610296CF815A9E4FA2CF80916202AF -:10495000882379F086E180931A018AE180931B0114 -:1049600084E080931C018FE00E9480141092620208 -:10497000BDCF809161028823A9F08AE180931A015A -:104980008EE180931B0184E080931C018FE00E94E4 -:10499000801410926102AACF811126C08091620218 -:1049A000811122C08091610281111EC080915F023D -:1049B000909160020E947906853F9140A8F01123F2 -:1049C00051F010921A018AE280931B0180931C011E -:1049D00081E20E948014109263021092620210928F -:1049E00061021092640285CF1092630210926202FB -:1049F000109261027ECF1F920F920FB60F92112478 -:104A00002F933F934F935F936F937F938F939F93D6 -:104A1000AF93BF93CF93DF93EF93FF93D091E900D0 -:104A2000DF708091EC00C82FC17080FDC0E810924B -:104A3000E9008091F000877F8093F00078940E94D5 -:104A400061161092E9008091F00088608093F00078 -:104A5000CD2BCF70C093E900FF91EF91DF91CF9103 -:104A6000BF91AF919F918F917F916F915F914F9186 -:104A70003F912F910F900FBE0F901F9018951F928E -:104A80000F920FB60F9211242F933F934F935F9382 -:104A90006F937F938F939F93AF93BF93EF93FF9306 -:104AA0008091E10082FF09C08091E20082FF05C091 -:104AB0008091E1008B7F8093E1008091DA0080FF9C -:104AC00024C08091D80080FF20C08091DA008E7FC2 -:104AD0008093DA008091D90080FF9BC088E189BD76 -:104AE0008AE189BD09B400FEFDCF81E08093FF0219 -:104AF0008091DA02811109C00E94EC040E94B7057E -:104B00008091E20084608093E2008091E10080FF68 -:104B100017C08091E20080FF13C08091E2008E7F79 -:104B20008093E2008091E20080618093E2008091B6 -:104B3000D80080628093D80019BC85E08093FF0282 -:104B40008091E10084FF29C08091E20084FF25C0AC -:104B500088E189BD8AE189BD89B5982F917080FF70 -:104B6000FBCF8091D8008F7D8093D8008091E100A9 -:104B70008F7E8093E1008091E2008F7E8093E2003F -:104B80008091E20081608093E2008091000388239D -:104B900009F445C084E08093FF028091E10083FF27 -:104BA00027C08091E20083FF23C08091E100877FCE -:104BB0008093E10082E08093FF02109200038091D5 -:104BC000E1008E7F8093E1008091E2008E7F8093F0 -:104BD000E2008091E20080618093E20042E060E0C8 -:104BE00080E00E9485058091F00088608093F0004D -:104BF000FF91EF91BF91AF919F918F917F916F91B5 -:104C00005F914F913F912F910F900FBE0F901F908A -:104C1000189519BC1092FF021092DA0276CF80919B -:104C2000E30087FD93E09093FF02B7CF78941F9243 -:104C30001FB61F9211248F939F93AF93BF938091C0 -:104C4000D1029091D202A091D302B091D4020196E8 -:104C5000A11DB11D8093D1029093D202A093D302E3 -:104C6000B093D402BF91AF919F918F911F901FBEBF -:104C70001F9018951F921FB61F9211248F939F9318 -:104C8000AF93BF938091D002811113C08091D10264 -:104C90009091D202A091D302B091D4024196A11D6D -:104CA000B11D8093D1029093D202A093D302B0930E -:104CB000D402BF91AF919F918F911F901FBE1F9003 -:104CC0001895CDB7DEB7E0970FB6F894DEBF0FBEEC -:104CD000CDBF84B7877F84BF0FB6F894A895809125 -:104CE0006000886180936000109260000FBE80E8D1 -:104CF00090E00FB6F89480936100909361000FBE2E -:104D000085B7806885BF85B7806885BF8DEB98E0E3 -:104D10009093E3018093E2010E94EC040E94B705A6 -:104D20008091E20084608093E20078948091FF0299 -:104D30008823A1F01091E9001F709091EC00892F59 -:104D4000817090FD80E8182B1092E9008091E800B6 -:104D500083FD0E9461161F701093E90082E084BDFC -:104D600093E095BD9AEF97BD80936E000E94780FF7 -:104D7000811102C00E94A80E80EF0E94BF0881EF3F -:104D80000E94BF0882EF0E94BF0883EF0E94BF0805 -:104D900003E511E0FFE5EF2EF1E0FF2ED8018D9144 -:104DA0008D018F3F11F00E94BF08E016F106B1F7A8 -:104DB00010926F0210926E021092A7021092A60239 -:104DC00010927102109270021092A9021092A80221 -:104DD00010927302109272021092AB021092AA0209 -:104DE00010927502109274021092AD021092AC02F1 -:104DF0000E944116811102C00E94D51582E090E008 -:104E00000E94C22D80939D020E94910F9093D60222 -:104E10008093D5020E940D23EFE7FBEB3197F1F76A -:104E200000C000000E940D238091A60280FF08C0F0 -:104E30006FEF7FEF90E080E00E94F42D0E94D10C94 -:104E400083E090E00E94C22D90E00E94C60B80910A -:104E5000090390910A030E94BE1480917602811189 -:104E600032C00E944116811104C00E94D5150E94D3 -:104E7000C51588E090E00E94CA2D60938903709365 -:104E80008A0380938B0390938C036E7F71F40E944E -:104E9000C51588E090E00E94CA2D60938903709345 -:104EA0008A0380938B0390938C030E94D206109206 -:104EB000C5028091890380FF03C086950E948014FB -:104EC00081E0809376026EEA71E0E3E98E2EE2E003 -:104ED0009E2E2CE931E0E5EAF1E041E050E011914D -:104EE000812F82958F7090E0DC019196FC909197D4 -:104EF0001F70E12E6A0101C0CC0C1A95EAF70C2D47 -:104F000000950F2191960C93919792961C919297F0 -:104F10001C2992961C93D901FD909D010F2D02959D -:104F20000F7010E0D8019196BC90BF2DBF70FB2E82 -:104F30006A0101C0CC0CBA95EAF7DC2CD094DB20D6 -:104F4000D8019196DC9291979296DC909297DC280A -:104F50009296DC92DC0190968C9190E002C095953F -:104F60008795EA94E2F78170D80190960C9110E051 -:104F700002C015950795FA94E2F790E000FD92E0E3 -:104F8000892BD4018D934D016E177F0709F0A7CFB0 -:104F90008091D50280688093D5028091D50290914E -:104FA000D6020E94B70E86EA92E09093BD028093EB -:104FB000BC0281E20E94801481E090E00E945115C1 -:104FC00080E091E09093CD028093CC0258E1252EB1 -:104FD000312C8091FF02FF24F39408E11AE185301F -:104FE00009F4B3C20E940D23882359F08FB7F894B7 -:104FF0004091D1025091D2026091D3027091D402BB -:105000008FBFA6EAB2E0EEE9F2E010E000E0702F18 -:105010008D919D91219131912817390709F4BEC2D4 -:105020002827392760E0EE24E394F12CA9014E21D2 -:105030005F21452B09F4ACC269A37AA39C012E2100 -:105040003F2191E0232B09F490E09BA30E94880666 -:105050008160782F9DA38CA349A15AA16BA18DA13A -:105060000E947D22000F111FF801E256FD4F808142 -:105070009181E826F926F182E0828091C502882399 -:10508000D1F18091C402E0918903E695E81BE09399 -:10509000C002823009F099C2F0E0EC53FD4FE49178 -:1050A0000E2F10E029E2E22E23E1F22E8091C102C0 -:1050B000882361F01092C1020E9488069093BF027B -:1050C0008093BE021092C3021092C2020E94880610 -:1050D000E091BE02F091BF028E1B9F0B8F3F9F4756 -:1050E00050F4E00FF11FF093BF02E093BE028EEB8D -:1050F00092E0F70109953AE8E32E32E0F32E01E859 -:1051000012E048E7842E42E0942E83E991E09CA7C8 -:105110008BA7D12CC12CACE9B1E0BEA7ADA7E5EAC5 -:10512000F1E0F8ABEFA753E9652E52E0752E512C54 -:1051300044244394D301ED913D01EE0FEE0FAFA552 -:10514000B8A92D91B8ABAFA7A22FA295AF70B0E0D0 -:1051500090968C9190E02F7002C0959587952A9536 -:10516000E2F781709927ADA5BEA54D91BEA7ADA769 -:10517000A42FA295AF70B0E090962C9130E04F70C4 -:1051800002C0359527954A95E2F7A9014170552748 -:1051900020FF02C042E050E0842BE82BD30111979E -:1051A000EC93ABA5BCA5AD90BCA7ABA7EF70F0E0AE -:1051B000ED57FE4F8081F7019081890F8083B12CDC -:1051C000082E000C990B20E08A159B05DCF0D80115 -:1051D0008C918F5F8C93F601E15AFE4F8081918113 -:1051E0009A8389834B820E9488068160782F9D83F1 -:1051F0008C83F401408249815A816B818D810E94A8 -:105200007D2221E0D7018C91082E000C990B4427B8 -:1052100055274A195B0948175907E4F0F8018081BE -:1052200081508083F601EF58FE4F808191819A83EF -:1052300089834B820E9488068160782F9D838C83AE -:10524000E2E0D401EC9349815A816B818D810E9407 -:105250007D2221E0D7018C91082E000C990BB5011D -:105260000E94632DF70181937F01522A0F5F1F4F28 -:10527000FFEF8F1A9F0A22E0C20ED11C42E1C41632 -:10528000D10409F057CF552059F08FB7F8944091C9 -:10529000D1025091D2026091D3027091D4028FBF9B -:1052A00086E0E5EBF2E0DE01119601900D928A9521 -:1052B000E1F7F090B702E090B8021091B9020091C6 -:1052C000BA021092B7021092B8021092B90210926C -:1052D000BA028F2D8E2909F448C08091B3029091B3 -:1052E000B4020E9479069C019091AF02992309F4BF -:1052F000C3C323333105C8F19F3F19F09F5F9093DB -:10530000AF02FF2059F00E9443089FEF1F140CF4D6 -:1053100091E0899F802D11248093B702EE2059F0EF -:105320000E9443089FEF1E140CF491E0899F802D8A -:1053300011248093B8023091B7023323B1F0209149 -:10534000B802222391F045EB3403C00111249923C4 -:1053500009F495C19093B70245EB24039001112401 -:10536000332309F490C13093B802812F802B09F4C4 -:1053700048C08091B1029091B2020E9479069C01CE -:105380009091AE02992309F472C325363105C8F114 -:105390009F3F19F09F5F9093AE02112359F00E9436 -:1053A00021089FEF11160CF491E0899F802D1124A4 -:1053B0008093B902002359F00E9421089FEF101634 -:1053C0000CF491E0899F802D11248093BA023091D2 -:1053D000B9023323B1F02091BA02222391F045EBB8 -:1053E0003403C0011124992309F451C19093B902E7 -:1053F00045EB240390011124332309F44CC130936D -:10540000BA028091B7029091B802892B9091B902AB -:10541000892B9091BA02892B11F00E94810786E0B6 -:10542000FE013196A5EBB2E001900D928A95E1F76D -:105430000E94C00690919C02891731F00E94C0061C -:1054400080939C020E94A6148091FF02843009F090 -:10545000C0CD83E08093E9008091E80082FFB9CD60 -:105460008091E80090E085FF06C00E940B0588232C -:1054700009F415C191E08091E8008B778093E800F2 -:10548000992309F4A6CDE981E150E33108F09BC1ED -:10549000F0E0EC58F14D0C94772D8091FF028430B0 -:1054A00009F441C080E00E94A6141092C5028091C8 -:1054B000BB02811116C0F092BB0280918903982F24 -:1054C0009170909377028E7F80938903BFEFE0E71E -:1054D000F2E0B150E040F040E1F700C000000E946F -:1054E000B50F1092D00220E40FB6F894A895209240 -:1054F00060000FBE2093600083B7817F846083BF0C -:1055000083B7816083BF7894889583B78E7F83BF8C -:105510000FB6F894A8958091600088618093600030 -:10552000109260000FBE8091FE02882371F00E94ED -:105530000D23E6EAF2E081919191892B09F078C27E -:105540008EEA92E08E179F07B1F78091FF028530B7 -:1055500009F4A3CF0E944C160E94C0060E94A61414 -:105560001092BB0280917702882359F080918903C1 -:1055700081608093890386950E9480140E949F0F0A -:1055800031CD8091C6028823C9F30E94B50FF6CFB2 -:105590006F5FEE0CFF1C6C3009F048CD0F5F1F4FA2 -:1055A0000430110509F033CD8FEF8EA38FA318A619 -:1055B0000E9488068160782F9AA789A74EA15FA1D3 -:1055C00068A58AA50E947D2258CD863059F4F0E066 -:1055D000EF53FD4FE4910E2F10E099E1E92E93E196 -:1055E000F92E64CD893061F4E695F0E0E254FD4F88 -:1055F000E4910E2F10E08AE6E82E82E1F82E56CDD7 -:105600008F3061F4E695F0E0E554FD4FE4910E2F04 -:1056100010E0B5E1EB2EB2E1FB2E48CD853159F417 -:10562000F0E0E854FD4FE4910E2F10E0A2EAEA2EDC -:10563000A1E1FA2E3BCD08E210E072E1E72E71E124 -:10564000F72E883109F432CD833249F4E6EBF2E0EB -:1056500005911491F0ECEF2EF2E1FF2E27CD04EF2F -:1056600011E0E5EDEE2EE0E1FE2E843209F41ECDD0 -:1056700000ED17E061EDE62E66E0F62E17CD81E035 -:105680008093B70269CE81E08093B8026ECE81E04C -:105690008093B902ADCE81E08093BA02B2CE00E22F -:1056A00010E0CE0101967C018091E80085FD0AC0E2 -:1056B0008091E8008B778093E8000E940B05882397 -:1056C00099F3D8CE8091F100D7018D937D010150DF -:1056D000110951F7CFCE1A8289E08B833FC08A81AE -:1056E000823009F4BBC18330A9F0813009F06BC06E -:1056F0002FB7F8946091D1027091D2028091D302B9 -:105700009091D4022FBF0E947D2D6B837C838D836B -:105710009E8324C08091A6029091A7029827892792 -:1057200098279C838B838091A8029091A902982747 -:10573000892798279E838D838091AA029091AB023E -:1057400098278927982798878F838091AC0290911A -:10575000AD029827892798279A8789878091FF0229 -:10576000843009F036CC1091E9001F709091EC0064 -:10577000892F817090FD80E8182B82E08093E900EA -:105780008091E80080FF0DC050E040E060E270E0F2 -:10579000CE0101960E943C058091E8008E778093AF -:1057A000E8001F701093E90014CC8A81823059F40C -:1057B0006B817C818D819E810E947D2D86E290E0AF -:1057C0000E94D62DCBCF8FEF8983C8CF4C816B81C0 -:1057D0008A810E94D60E9827892798279E838D83D9 -:1057E000BDCFED80FE80FE24EF24FE248A810B8154 -:1057F000B8E10B9F80011124E0E68E9F000D111D82 -:1058000011248C8190E0880F991F080F191F6F2DAC -:10581000C80187960E94D62D6E2DC8018896D0CFDC -:105820000E943B0E9BCF8A818138C1F060F48038A2 -:1058300009F094CF20E04B8160918B0380918A0323 -:105840000E944F138BCF823849F1833809F086CFFD -:1058500020E040918C036C818B81F2CF8B810E9480 -:1058600080149B8180918903911111C08E7F809358 -:1058700089031092C502FFEF20E742E0F15020407B -:105880004040E1F700C000000E94B50F67CF816083 -:105890008093890386950E94801460CF8B818093CA -:1058A0008D035CCF8A81813899F030F4803809F01B -:1058B00055CF80918C0311CF823891F0833809F055 -:1058C0004DCF80918A038B8380918B038C8346CF4D -:1058D0008091890380FF02C08695FFCE80E0FDCED7 -:1058E00080918D03FACE6091890370918A03809133 -:1058F0008B0390918C030E943D1330CF80E18A830B -:105900002DCF84E08A8389E1E8CE0A811B811027AC -:1059100001271027CE0101966C01EC80DC01AE0D51 -:10592000B11D7D01C80189519C4FEC14FD0409F49F -:1059300015CF0931B4E01B0750F40E94C22DF601C7 -:1059400084830F5F1F4FBFEFCB1ADB0AEBCFD6016B -:1059500014961C92F6CF0A811B811027012710276D -:10596000FE0131966F01EC80E00EF12EF11CC801B2 -:1059700089519C4FE016F10609F4F0CE0931F4E0AC -:105980001F0728F4D60114966C910E94D62DBFEF04 -:10599000CB1ADB0A0F5F1F4FEACF0E942B0EDECE21 -:1059A0008AE0ADCF0A811B81102701271027FE0155 -:1059B00031966F01EC80CF018E0D911D7C01C801E5 -:1059C0008796EC14FD0409F4C9CE003CA3E01A0745 -:1059D00050F40E94C22DF60184830F5F1F4FBFEF6A -:1059E000CB1ADB0AECCFD60114961C92F6CF0A81B3 -:1059F0001B81102701271027FE0131966F01EC80D3 -:105A0000E00EF12EF11CC8018796E016F10609F4AC -:105A1000A5CE003CF3E01F0728F4D60114966C9144 -:105A20000E94D62DBFEFCB1ADB0A0F5F1F4FEBCFC3 -:105A300009BD19BD09B400FEFDCF8091D8008F7D4E -:105A40008093D8008091E00082608093E000809194 -:105A5000E00081FDFCCF0E944C1677CD86E290E0FD -:105A60000E94C22D1B821C821D828E8377CE2D3216 -:105A7000314008F08FCCC5CC2D32314008F03ECCFF -:105A800074CC87FB082E062687FD819567FD6195FE -:105A90000E94932D0EF4919507FC81950895AA1B01 -:105AA000BB1B51E107C0AA1FBB1FA617B70710F009 -:105AB000A61BB70B881F991F5A95A9F7809590953B -:105AC000BC01CD01089597FB072E16F4009407D072 -:105AD00077FD09D00E944F2D07FC05D03EF490952C -:105AE00081959F4F0895709561957F4F0895EE0FB2 -:105AF000FF1F0590F491E02D0994692796276927E7 -:105B000078278727782708950E943F2E332312F4A1 -:105B10008A1B9B0B0C948E2D0E943F2EB7FF08957D -:105B2000821B930B0895991B79E004C0991F961767 -:105B300008F0961B881F7A95C9F780950895FB0198 -:105B4000DC0102C005900D9241505040D8F70895F5 -:105B5000FC014150504030F001900616D1F73197CA -:105B6000CF010895882799270895FB01DC0104C01F -:105B70008D910190801921F441505040C8F7881B45 -:105B8000990B0895F999FECF92BD81BDF89A992796 -:105B900080B50895A6E1B0E044E050E00C94FC2DFF -:105BA000A8E1B0E042E050E00C94FC2D262FF999DA -:105BB000FECF92BD81BDF89A019700B4021639F06C -:105BC0001FBA20BD0FB6F894FA9AF99A0FBE08953D -:105BD0000396272F0E94D72D0E94D62D252F0E9495 -:105BE000D72D242F0C94D72D0196272F0E94D72D27 -:105BF0000C94D62DDC01CB01FC01F999FECF06C037 -:105C0000F2BDE1BDF89A319600B40D92415050407A -:105C1000B8F708950E943F2EA59F900DB49F900D58 -:105C2000A49F800D911D11240895B7FF0C940A2E96 -:105C30000E940A2E821B930B0895A1E21A2EAA1B22 -:105C4000BB1BFD010DC0AA1FBB1FEE1FFF1FA2172C -:105C5000B307E407F50720F0A21BB30BE40BF50B29 -:105C6000661F771F881F991F1A9469F760957095B2 -:105C7000809590959B01AC01BD01CF010895A29F35 -:105C8000B001B39FC001A39F700D811D1124911D10 -:105C9000B29F700D811D1124911D0895F894FFCFBE -:105CA000630F630F6C0F6C0F6E0F6C0F6C0F6C0F2C -:105CB000630F630F730F6C0F6C0F730F46176E1724 -:105CC000C1176E17C117A117D917C117D618E31836 -:105CD000401D401DB41DB41D121E2C1E771D771DC6 -:105CE000371EC11ED21ED21E6B2B6F2BD52BE62B5F -:105CF000F12B102C132C522C732CE32BE32B7E2C2A -:0E5D0000812C852CAB2CCD2CD02CD22CF72C4A -:105D0E007606910C700C6C0C680C01191A1B1C1D7C -:105D1E001E1F202122010201002A002A2A0181824F -:105D2E0083E200E900EA00B500B600B700CD0083BB -:105D3E0001CC008A01920194012102230224022542 -:105D4E0002260227022A02B300B4006F007000F090 -:105D5E00F1F2F3F5F6F700010203040537363502CA -:105D6E0000020102020B000B010B020B03050308DC -:105D7E0003000000010002090009010902090303E2 -:105D8E0003060300FF0100010000FFFF00000100F9 -:105D9E0001FF000404040404040402026162646648 -:105DAE0090929497066063656791939596070001AC -:105DBE00020202020606060909090909090F0F0F58 -:105DCE000F0F0F1515151819191919191919191960 -:105DDE001923244022B6B6019401DE00C808E1085A -:025DEE000109A9 +:102BA0007181828193810C94281310925A02809132 +:102BB0001F01E8EEF1E0882359F08091D70287FFEA +:102BC00007C08EE1DF011D928A95E9F70C94B10BE5 +:102BD00086E0F8CF1F93CF93DF93CDB7DEB7AA97E8 +:102BE0000FB6F894DEBF0FBECDBF83E093E0209117 +:102BF000F100DC012D93CD01B3E08B309B07B9F7D9 +:102C000080910403833009F472C0B8F4813009F470 +:102C100049C0823009F4B3C08091E80083FF8BC2C1 +:102C200080910303909104039A3008F084C2E92F45 +:102C3000F0E0ED58F14D0C948C2D8A3009F48EC0E3 +:102C40008B3009F471C0893039F7809103038132E8 +:102C500019F78091070390910803009711F00297EC +:102C6000D9F68091E800877F8093E8008091E800A2 +:102C700082FF38C08091F2009091F300029731F406 +:102C80008091F100813011F0863021F48091F100C3 +:102C90008093DE028091E8008B778093E8000E94A9 +:102CA0006605BACF80910303813A09F0B5CF8091D0 +:102CB000E800877F8093E8008091070390910803E4 +:102CC000892B61F460E28FED92E070E00E941906BA +:102CD0008091E8008B778093E8009ECF60E090E0E1 +:102CE00080E0F3CF809101038111C0CF95CF809117 +:102CF0000303813A09F090CF809107039091080374 +:102D0000892B09F089CF8091E800877F8093E800C4 +:102D10008091E80080FFFCCF80911F018093F1003B +:102D20008091E8008E77B9CF80910303813209F05A +:102D300073CF8091070390910803892B09F06CCF22 +:102D40008091E800877F8093E8000E94660580916B +:102D5000050380931F010E94D5155ECF8091030368 +:102D6000813209F059CF8091E800877F8093E80095 +:102D70000E946605809106038093DD024DCF80910D +:102D80000303813A09F048CF8091E800877F809360 +:102D9000E8008091E80080FFFCCF8091DD02BECF8B +:102DA000803899F0823809F0C6C1809107038F708E +:102DB000873008F0C0C18093E9008091EB0085FB6B +:102DC000882780F91092E90006C08091FF02909157 +:102DD0000003911182609091E800977F9093E80042 +:102DE0008093F1001092F1008091E8008E779FC1EE +:102DF000882309F48DC1823009F09DC180910503BB +:102E0000811190C1809107038F702FEF280F26301A +:102E100008F091C18093E9002091EB0020FF82C16E +:102E2000933031F48091EB0080628093EB007AC1A3 +:102E30009091EB0090619093EB0021E030E001C0B5 +:102E4000220F8A95EAF72093EA001092EA00809117 +:102E5000EB008860EACF81116EC1109105031F77E6 +:102E60008091E3008078812B8093E3008091E800DB +:102E7000877F8093E8000E9466058091E80080FFCC +:102E8000FCCF8091E30080688093E30082E0111121 +:102E900083E0809301034FC18058823008F04BC11A +:102EA00020910503309106032C3DE3E03E07A1F598 +:102EB00083E08A838AE289834FB7F894DE01139610 +:102EC00020E03EE051E2E32FF0E050935700E49120 +:102ED00020FF03C0E295EF703F5FEF708E2F90E010 +:102EE000EA30C0F0C7968D939D932F5F243159F738 +:102EF0004FBF8091E800877F8093E8006AE270E02E +:102F0000CE0101960E9419068091E8008B7780938C +:102F1000E80011C1C096E7CF8091070390910803A4 +:102F2000432F55274330510509F44AC078F5413005 +:102F3000510509F47AC08BE590E0E6EBF8E0423009 +:102F4000510509F0F8C02091E800277F2093E800A0 +:102F50002091090330910A038217930708F49C011A +:102F600040E02115310509F065C0411163C0809131 +:102F7000E80082FDC9CF80910103882329F28530C2 +:102F800019F28091E80083FFF2CFBECF41325105A4 +:102F900009F43CC04232510509F0CDC0833091059F +:102FA00008F0C9C0FC01EE0FFF1FE852FE4F019070 +:102FB000F081E02D8B529E4FDC018C9190E01AC085 +:102FC000332721303105D1F02115310561F0223050 +:102FD000310509F0B0C0E3E2F9E0E4918E2F90E012 +:102FE000E3E2F9E007C0E1E4F9E0E4918E2F90E03C +:102FF000E1E4F9E0009709F49EC0A5CFEDE2F9E025 +:10300000E4918E2F90E0EDE2F9E0F4CF833091056A +:1030100008F091C0880F991FFC01E252FE4F019009 +:10302000F081E02D89E090E08ECF82E190E0E1E157 +:10303000F9E089CF80910103882309F465CF8530B9 +:1030400009F462CF8091E80083FD5ECF8091E800B3 +:1030500082FD8DCF8091E80080FF83CF8091F200C8 +:103060009091F3002115310519F08830910550F049 +:1030700041E0089709F040E08091E8008E77809366 +:10308000E8006FCF44914093F1003196215031090F +:103090000196E8CF803809F04EC08091E800877F24 +:1030A0008093E800809102038093F1009DCE81110E +:1030B00042C0109105031230F0F58091E800877F3F +:1030C0008093E800109302030E946605112311F01B +:1030D00084E005C08091E30087FDFACF81E0809312 +:1030E000010342E061EC81E00E94850542E261EC6F +:1030F00084E00E94850542E261EC82E00E94850541 +:1031000042E260EC83E00E9485058091010313C0D8 +:1031100080910503813079F481E0933009F080E0FB +:10312000809300031092E9008091E800877F8093EC +:10313000E8000E9466058091E80083FF0AC0809144 +:10314000E800877F8093E8008091EB0080628093A5 +:10315000EB00AA960FB6F894DEBF0FBECDBFDF918D +:10316000CF911F91089569EE7EEF90E080E00E947C +:10317000092E60E082E090E00E94EB2D60E083E0A9 +:1031800090E00E94EB2D10925D0210925C0260E0D4 +:1031900084E090E00E94EB2D60E082E290E00E94EB +:1031A000EB2D60E085E090E00E94EB2D60E086E092 +:1031B00090E00E94EB2D6FEF87E090E00E94EB2DF6 +:1031C00040E050E0BA0188E090E00E94FD2D60E010 +:1031D0008DE090E00E94EB2D40E050E0BA0188E1E4 +:1031E00090E00E94FD2D60E087E190E00E94EB2DD1 +:1031F00040E050E0BA018CE190E00E94FD2D70E0CB +:1032000060E080E290E00E94092E40E050E0BA01C8 +:1032100088E190E00E94FD2D80E00E948D0E0E94CA +:10322000A50E40E050E0BA018FE090E00E94FD2D35 +:1032300040E050E0BA0183E190E00C94FD2D3F9214 +:103240004F925F926F927F928F929F92AF92BF92B6 +:10325000CF92DF92EF92FF920F931F93CF93DF9362 +:1032600000D000D00F92CDB7DEB78C01FC01838176 +:103270009481892B31F08081918189238F3F09F0DE +:1032800073C60F900F900F900F900F90DF91CF911A +:103290001F910F91FF90EF90DF90CF90BF90AF9074 +:1032A0009F908F907F906F905F904F903F90089588 +:1032B0000E94F40EF82E682F89819A810E94850B56 +:1032C00069817A818F2D0E94E70E7C01F80182814D +:1032D000882309F43BC6970122513F45203131052F +:1032E00008F0F3C58FEF97E00E94D72DFEEEEF0EAA +:1032F00057EE852E53E0952E8823A1F18091570239 +:10330000877009F4BECFF8018281882309F4B9CF10 +:103310008091D80282FDB5CF82E00F900F900F9080 +:103320000F900F90DF91CF911F910F91FF90EF9031 +:10333000DF90CF90BF90AF909F908F907F906F90D5 +:103340005F904F903F900C946415811428E0920692 +:10335000A9F2C4010E94D72D811101C0EA943FEF68 +:10336000831A930AE110F1CF1C821B8244244394F8 +:103370004AE0342E74014FEFE41AF40AC4010E94AB +:10338000D72D89831A82882309F4B8CF9FEF980F2D +:10339000933000F58A83498252E0850E911CC70163 +:1033A0000E94D72D8B83882309F4A8CFCE010196E4 +:1033B0007C01F70120812223E9F2213009F049C084 +:1033C00091818281913041F4F2E0EF0EF11C0E9474 +:1033D000A70D09C04701EACF923049F422E0E20E7E +:1033E000F11C0E94F20C3FEFE31AF30AE2CF933094 +:1033F00031F432E0E30EF11C0E94E50BF4CF94307F +:1034000021F04FEFE41AF40AEECF52E0E50EF11C82 +:1034100030E020E0B7016F5F7F4FF70141818053BB +:10342000990B8A30910550F021503109E0F28FE973 +:103430009FE00197F1F700C00000F6CF329EF00147 +:10344000339EF00D11249C012E0F3F1F842F7B0112 +:10345000E1CFE22FF0E0EA5DFD4F5490822F869598 +:103460008695869590E0FC01EA5EFD4F649027709A +:10347000712C022E02C0759467940A94E2F7E1E081 +:103480006E227724FC01EA5FFD4FA490B12C022E3E +:1034900002C0B594A7940A94E2F7F1E0AF22BB24EE +:1034A000FC01EA50FE4FC490D12C02C0D594C794C1 +:1034B0002A95E2F721E0C222DD246114710419F09B +:1034C00081EE0E94F20CA114B10419F086EE0E9464 +:1034D000F20C852D0E94A70DAB2819F086EE0E94F4 +:1034E000E50B672819F081EE0E94E50BCD2809F461 +:1034F0007ACF8CE26CCF81E00E9495150E94441532 +:10350000FDCE81E00E945315F9CF82E0F5CFF3E8BC +:10351000EF16FFE5FF0609F4C5C024E8E2162FE523 +:10352000F20609F0F2C4882309F4E8CEF0906C02A8 +:10353000EE24E394FE24F0926C020E94890690939C +:103540006A028093690280916B0210921C018823A9 +:1035500009F4B6C08AE280931D0180931E0181E2C6 +:103560000E946B140E949D10E0926C0210926B02FC +:103570001092680210926702C1CE882309F47AC0C3 +:1035800080916F02811106C081E080936F0282EE0C +:103590000E94F20C0E94890690936E0280936D0245 +:1035A0008BE20E94F20CF8018281882309F4EDC4B9 +:1035B00010929203F3E0EF16FDE5FF0608F0B3C0AA +:1035C0002AEFE2162CE5F20630F4C70182509C4542 +:1035D000449708F0AEC00E947C0F9093D80280936D +:1035E000D70240E1E4164CE5F40609F48AC108F07C +:1035F000F8C088E0E8168CE5F80609F470C108F018 +:10360000C4C0E4E0EE16ECE5FE0609F45AC108F089 +:10361000A6C022E0E2162CE5F20609F44CC1809126 +:10362000D702826033E0E3163CE5F30609F446C1B5 +:103630008091D7029091D8020E94B40E0E94D515B5 +:103640005DCE8823A1F080916F02811106C081E0D8 +:1036500080936F0282EE0E94F20C0E948906909382 +:103660006E0280936D0281EE0E94F20C99CF81EE82 +:103670000E94E50B8BE20E94E50B95CF882309F4AD +:1036800092CF81EE0E94F20C83EE0E94F20C8FE446 +:103690000E94F20C8FE40E94E50B83EE0E94E50B82 +:1036A00081EEE9CF882309F47ECF81EE0E94F20CEF +:1036B00083EE0E94F20C80E50E94F20C80E5EBCFD5 +:1036C0008AE280931D0180931E0181E2FF2029F090 +:1036D0000E946B140E949D1049CF0E946B1446CF2C +:1036E000E5EFEE16ECE5FE06B9F090F026EFE216F7 +:1036F0002CE5F20609F057CF27E245EE66EE22C42C +:1037000027E245EE65EE1EC426E241EE60EE1AC4E5 +:1037100027E245EE64EE16C426E241EE62EE12C4E4 +:1037200028E241E0EFCF31E6E3163DE5F30609F488 +:1037300052CF80915A0246E1E4164CE5F40609F0B6 +:1037400031C48A7A91E009F490E0909306028111E5 +:10375000FDC089E20E941F0B0E94AF0ACFCD80916D +:10376000D702806146E0E4164CE5F40609F4A6C0F1 +:103770008091D702886057E0E5165CE5F50608F40D +:103780009DC08091D702806299C08CE0E8168CE5DC +:10379000F80609F4AEC078F48091D7028C60EAE0B4 +:1037A000EE16ECE5FE0609F489C008F49CC0809191 +:1037B000D7028E7F83C08091D702877F2EE0E216EA +:1037C0002CE5F20609F47AC08091D7028B7F3FE0A6 +:1037D000E3163CE5F30608F471C08091D7028F7EB2 +:1037E0006DC04CEFE4164CE5F40609F486C0A0F574 +:1037F00084E1E8168CE5F80609F497C098F4E2E154 +:10380000EE16ECE5FE0609F480C08091D7028F7BAE +:10381000F3E1EF16FCE5FF0608F450C08091D702F3 +:10382000837F4CC02AEFE2162CE5F20609F44DC066 +:1038300008F051C045E1E4164CE5F40609F0F8CE75 +:103840008091D70282FB992790F921E0922790FB83 +:1038500082F990FB83F932C0E1145DE5F50609F4C5 +:103860005AC0A0F48091D80283609EEFE9169CE5CF +:10387000F90671F18091D8028D7FEFEFEE16ECE53D +:10388000FE0630F18091D8028C7F22C0F2E0EF1664 +:10389000FDE5FF0609F458C008F450C031E6E31610 +:1038A0003DE5F30609F0C4CE9091D702892F8F7EB3 +:1038B00094FF806103C08091D70281608093D7021A +:1038C000B7CE8091D7028460F9CF8091D802816011 +:1038D0008093D802ADCE8091D8028260F9CF8091DA +:1038E000D7028064EBCF0E94D5158091D702806803 +:1038F000E5CF8091D7028D7FE1CF8091D8028E7F76 +:10390000E7CF8091D7028F7DD9CF0E94D5158091C6 +:10391000D7028F77D3CF8091D802982F909591704E +:103920008E7F892B90FB81F9D3CF0E94D515909182 +:10393000D702892F97FB87F98058C0CF61E08EE0CE +:1039400090E00E94EB2D74CE60E0F9CF85E302CFCA +:1039500085E325C380918B0380FF1BC08E7F8093FE +:103960008B0360918B0370918C0380918D039091F8 +:103970008E030E9428131092C7025FEF80E792E047 +:10398000515080409040E1F700C000000E94A00F1D +:10399000B5CC816080938B0361E086950E943014E2 +:1039A000ADCC44EA55E16DEA75E10E94CD06A6CCA6 +:1039B0004DEA55E164EA75E1F8CF45E054E16CEF7A +:1039C00073E1F3CF44EE53E160EF73E1EECF4CECE3 +:1039D00053E168ED73E1E9CF48ED53E16CEC73E13D +:1039E000E4CF4FE154E16EE074E1DFCF61E081E0CC +:1039F000D5CF65E082E00E94B71580CC68E086E014 +:103A0000FACF64E18FE0F7CF67E185E1F4CF62E2BE +:103A100089E1F1CF61E083E2C1CF4BE5E4164DE5EA +:103A2000F40611F15CE5E5165DE5F50609F0ECC27A +:103A30008091D80282FB882780F991E089270E9433 +:103A40008015E2C20E94D5158FEF94E3ECE081501F +:103A50009040E040E1F700C000000E94CE0C0E94C0 +:103A6000B3184CCC81E0EBCF80E0E9CFC7010E94D6 +:103A70005D0BD82ED8C22F2D2F70C22E8F2D807F98 +:103A800019F0C29490EFC922DD20B9F0CC2069F082 +:103A900080E28E0D883010F0811009C080915A02AA +:103AA000C82AC0925A020E94AF0A8E2D4DC0809142 +:103AB0005902C82AC0925902F6CF8E2D0E94E50BFA +:103AC000CC2009F443C080E28E0D883010F08110C4 +:103AD00004C08C2D0E94A80A06C0C094809159028F +:103AE000C822C09259020E94AF0A30C03F2D3F70D9 +:103AF000C32E8F2D807F803219F0C29480EFC822B0 +:103B0000882089F041E0841609F480C0DD2009F4A2 +:103B10008AC0BB2009F480C0F801858180FFC5CF31 +:103B20008F70858379C02091D80222FF4CC0DD20A0 +:103B300009F443C0CC2039F080915A02C82AC092BF +:103B40005A020E94AF0A80E00E94F20CE92DE85070 +:103B5000FF0B349720F40E94C1060E949114AA2002 +:103B600009F48FCB8091570280FD8BCBF801128234 +:103B70008595859585950E949515C8010E941F1908 +:103B8000809157028595859585950F900F900F90A0 +:103B90000F900F90DF91CF911F910F91FF90EF90B9 +:103BA000DF90CF90BF90AF909F908F907F906F905D +:103BB0005F904F903F900C94531580E00E94E50B6E +:103BC000CC2021F286CFDD20A1F090915B028C2DDC +:103BD000892BB11003C00E94DB0BB8CF51E0B512A6 +:103BE000FACF22FDB3CF891709F4B0CF80935B02DF +:103BF000ADCFB11006C00E94A20A8C2D0E94D40B3A +:103C0000A5CF81E0B81609F4A1CFF5CFDD2031F0C2 +:103C100095E09B1508F49ACF8C2DDDCFE4E0EB15F1 +:103C200008F494CFEACFBB2041F3F9E38F1209C027 +:103C30002FEF37EE43E0215030404040E1F700C025 +:103C400000008E2D0E94E50B81CF8F2D86958695E5 +:103C5000837061F0813009F079CFC7019370D11082 +:103C600002C090E080E00E94950670CFC70193707B +:103C7000D11002C090E080E00E94AB0667CF8E2D8D +:103C8000DD2029F00E9464080E9482075FCF0E9415 +:103C9000A907FACF8F2D837009F040C0D11056CFFD +:103CA0004E2D429546954770440F440F8E2D8F70D0 +:103CB00090E0042E02C0880F991F0A94E2F730E0CA +:103CC00020E0E4FE09C02FE030E002C0220F331FE5 +:103CD0004A95E2F7209530954F2D469546954370CD +:103CE000423099F078F460915C0270915D0241304D +:103CF00039F0822B932B862397230E94CE0B26CF5D +:103D0000862B972B822B932BF8CF822B932B2091F2 +:103D10005C0230915D0282279327EFCF8695DD20EC +:103D200011F08F2D8170882309F410CF4E2D42950C +:103D300046954770440F440F8E2D8F7090E0042EEF +:103D400002C0880F991F0A94E2F730E020E0E4FEF9 +:103D500009C02FE030E002C0220F331F4A95E2F77E +:103D6000209530954F2D469546954370423099F0F9 +:103D700078F460910B0370910C03413039F0822B81 +:103D8000932B862397230E943C15E0CE862B972BFE +:103D9000822B932BF8CF822B932B20910B03309106 +:103DA0000C0382279327EFCF5F2D5F70F52EDD2068 +:103DB00029F0852F0E9495158E2D0DCF8E2D0E94F6 +:103DC000D40B8F2D0E945315C1CE8E2D92EF8916E4 +:103DD000A1F1981570F0E0EF8E16D1F0F1EF8F168B +:103DE00091F0DD2009F461C0B1105FCE8F2D8F718D +:103DF00028C023EF821641F134EF8312F2CF809175 +:103E0000D80282FF32C08F2D8F71DD20D9F219C008 +:103E1000DD2071F044E04B1508F498CE2F2D2F7162 +:103E200081E090E002C0880F991F2A95E2F7B5CF94 +:103E300055E05B1508F48ACEF1CF8F2D8F71D1102C +:103E4000C1CF0E94951582CE90E080E0DD2009F47C +:103E50009ACF9F2D9F7121E030E0F90102C0EE0F53 +:103E6000FF1F9A95E2F7CF018ECFDD2099F0FF2D4D +:103E7000FF71FF2E8F2F0E9495158091D80282FD31 +:103E800007C028E0F29EC00111248360809357028E +:103E90008F2DD7CF81E00E94641531E03B1508F0EB +:103EA00055CE82E00E94641551CEBB2059F0893373 +:103EB00009F0C7CE4FEF57EE83E0415050408040AD +:103EC000E1F7BDCE8F2D8F717DCFF0E1EF16FFE5CD +:103ED000FF0609F410CB21E1E2162FE5F20609F402 +:103EE00014CB42E8E4164FE5F40609F4C7CB08F01A +:103EF0000ECB90E8E9169FE5F90609F43ECBE1E820 +:103F0000EE16EFE5FE0609F49CCB33EFE3163CE535 +:103F1000F30609F4F9CB08F0E3CB58EDE5165CE5C0 +:103F2000F50609F4EDCB89EDE8168CE5F80609F401 +:103F3000F7CB97EDE9169CE5F90609F034CB26E2BC +:103F400041EE61EEC8010E94C40DD8C930E1E3160C +:103F50003FE5F30609F4D5CA41E1E4164FE5F4065E +:103F600009F0BFCF82E0CECA85E0DE011196019054 +:103F70000D928A95E1F7F801228189819A812111B8 +:103F800097C90E945D0BF82E9BC9F6E1EF16FCE580 +:103F9000FF06D1F5809106028111DACC89E20E94F8 +:103FA000F40ADACB82722CECE2162CE5F20609F464 +:103FB00018CD08F0ABC046ECE4164CE5F40609F465 +:103FC000FCCC08F07AC093ECE9169CE5F90609F4FC +:103FD000E8CC08F061C0F2ECEF16FCE5FF0609F44E +:103FE000B9CCEAE5EE16EDE5FE0609F43BCD08F0A6 +:103FF00014CDE1142CE5F20609F424CD3EEDE316D0 +:104000003CE5F30609F42BCDF8018281E080F180D4 +:10401000882309F42BCDC7010E94F40ED82E682FF7 +:10402000C7010E94850BB7018D2D0E94E70E0E94EB +:104030001A097C01882EF801D280B580B2943FE045 +:10404000B322809157028770C1F0AD2CDD20B1F012 +:104050008F2D807F803421F080E28E0D883068F0D3 +:104060008091D80282FD09C082E00E94641580918F +:1040700057028770AA24A3948111A12C9F2C92949B +:104080002FE09222FBE0F91508F460CDE92DF0E075 +:10409000E358F14D0C948C2D24ECE2162CE5F2063D +:1040A00009F486CC4CEF53E165E074E135ECE3169E +:1040B0003CE5F30609F479CC94CF49ECE4164CE5E1 +:1040C000F40609F484CC88F497ECE9169CE5F9062B +:1040D00009F478CC40EF53E164EE73E1E8ECEE16BE +:1040E000ECE5FE0609F461CC7CCFFAECEF16FCE5BA +:1040F000FF0609F471CC4EE054E16FE174E12BEC62 +:10410000E2162CE5F20609F450CC6BCF31EDE31644 +:104110003CE5F30609F475CCB8F45EECE5165CE515 +:10412000F50609F466CC08F461CC9FECE9169CE531 +:10413000F90609F463CC6EE089E0E0EDEE16ECE5FB +:10414000FE0609F458CC4DCFF4EDEF16FCE5FF0662 +:1041500009F45DCC78F432EDE3163CE5F30609F49E +:1041600053CC61E088E143EDE4164CE5F40609F434 +:1041700015CC37CF55EDE5165CE5F50609F44ACCCC +:104180008DE5E816F80609F4B9C82BCF1F93CF9335 +:10419000DF9380912402807FA9F4809121028823FB +:1041A00089F080915602D091250260911F02709192 +:1041B0002002A0912202B0912302C62FC72316E04D +:1041C000D81304C0DF91CF911F91089590E010970C +:1041D00011F0CF3F19F401968770F2CF189F90012C +:1041E000199F300D1124F901EA5DFD4F41814713FC +:1041F000F2CF40814613EFCF42814111ECCF438192 +:1042000054814A1B5B0B483C510528F780912402DE +:104210008F70806180932402F901E55DFD4F8081FC +:104220008F70806180838FE192E00E941F19DF917F +:10423000CF911F910C94530BAF92BF92CF92DF920C +:10424000EF92FF920F931F93CF93DF93CDB7DEB71B +:1042500061970FB6F894DEBF0FBECDBF8C0185E02D +:10426000F801DE011D9601900D928A95E1F7F801A3 +:10427000E2808FE1A82E82E0B82E60912202709138 +:1042800023026115710509F432C190911F0240911A +:104290002002892F84238F3F09F429C12081318195 +:1042A000C380D480F0902102F601E61BF70BFF20BB +:1042B00009F4E8C080912402582F507FE83CF105B2 +:1042C00008F0ABC0511177C0FE2C431321C09213EC +:1042D0001FC0E1101DC08F70806180932402C50152 +:1042E0000E941F1980912402F80185838F2D619609 +:1042F0000FB6F894DEBF0FBECDBFDF91CF911F91F7 +:104300000F91FF90EF90DF90CF90BF90AF90089506 +:10431000CD2829F0822F83238F3F09F003C180E04D +:10432000F82FF170DF2E80FF3CC080915602409143 +:10433000250256E0841315C02D873E878D859E8506 +:104340000E94300F292F22952F702230F0F0243058 +:1043500018F59F70F1F0F8019581907FD1F4D12C80 +:104360001EC090E0589FF001599FF00D1124EA5DA6 +:10437000FD4F6181361306C06081261303C0628140 +:10438000E6120FC001968770D5CF9F7011F0882379 +:1043900031F3805E883018F3C8010E941F19FD2C8C +:1043A000A5CFEE2009F4A2CF8091240281608093F2 +:1043B0002402F12C9BCF431306C0921304C0F801D2 +:1043C000EE2009F479C0C8010E943C0F882309F14E +:1043D000EE20F9F080912402803270F020911F02CB +:1043E0003091200238872F831986DB86CA868C8716 +:1043F000CE0107960E941F1986E0F801AFE1B2E0F6 +:1044000001900D928A95E1F70E94C620FF24F39453 +:104410006DCFC8010E941F19F9CF51110AC08FE159 +:1044200092E00E941F1986E0F50111928A95E9F742 +:10443000C0CF43130FC092130DC0E1100BC0F801A1 +:104440008583C8010E941F1986E0F50111928A95A3 +:10445000E9F74CCFC8010E943C0F8823D1F2EE202F +:10446000C1F280912402803238F220911F023091F3 +:1044700020023A8329831B82DD82CC828E83CE0187 +:104480000196B8CFE83CF105F8F6FE2CEE2009F2D3 +:1044900043131FC092131DC08091240280FD10C0E1 +:1044A000982F907F69F0F8018583903F31F0982F25 +:1044B000907F905F8F70892B8583C8010E941F19A0 +:1044C00086E0F801AFE1B2E001900D928A95E1F744 +:1044D0000DCFC8010E943C0F81118ECF8091240224 +:1044E000816080932402C8010E941F19FFCEEE2034 +:1044F00009F48FCFC8010E943C0FF82E882309F4DD +:1045000088CF86E0F801AFE1B2E001900D928A9584 +:10451000E1F780911F02909120020E94300F0E94CB +:10452000C620E4CE81E08E25FBCE1F93CF93DF9390 +:10453000CDB7DEB767970FB6F894DEBF0FBECDBF1D +:104540004B8B5C8B6D8B7E8B8F8B61111092590224 +:104550001A8A198A85E0FE017396DE011D96019084 +:104560000D928A95E1F786E0FE013D96DE011796F1 +:1045700001900D928A95E1F7CE0107960E941C21C9 +:10458000882389F016E080915602909125028913C4 +:1045900049C067960FB6F894DEBF0FBECDBFDF915E +:1045A000CF911F91089586E0FE013796DE011196A6 +:1045B00001900D928A95E1F78A859B85892B11F3ED +:1045C0008F81988589238F3FE9F22091250230E081 +:1045D000C90101968770992740915602481719061C +:1045E00071F40E94D515109225021092560286E0B1 +:1045F000EFE1F2E0DF011D928A95E9F7C3CF96E083 +:10460000929FD001939FB00D1124AA5DBD4FFE0172 +:10461000319601900D929A95E1F7809325020E94C0 +:10462000530BB0CF819FC00111248A5D9D4F0E9422 +:104630001C21882309F4ADCF8091560290E00196A9 +:1046400087709927809356029ECF6F927F928F92A8 +:104650009F92AF92BF92CF92DF92EF92FF920F9311 +:104660001F93CF93DF93CDB7DEB72D970FB6F89496 +:10467000DEBF0FBECDBF8E010F5F1F4F88E0F80178 +:1046800011928A95E9F751E5E52E51E0F52E680182 +:1046900065E5662E61E0762E88248394912CF701DF +:1046A00081917F018F3F09F446C0F894E82FE2958D +:1046B000EF70F0E021A18F70A40102C0440F551FDC +:1046C0008A95E2F7CA01922F982B91A392A1809527 +:1046D000892382A3789400C0E5E5F1E021E030E091 +:1046E000B12CA12C41914F3F09F477C0A42FA29582 +:1046F000AF70B0E090968C9190E04F7002C09595AD +:1047000087954A95E2F780FD68C0C901A82AB92AB1 +:10471000220F331F51E0E136F50721F7F7013197FA +:1047200080818F3F11F00E94C00880EA8A95F1F7DE +:10473000F601B182A082F2E0CF0ED11C6E147F048C +:1047400009F0ADCF48E050E0B80180E792E00E9468 +:10475000CA2DBB24B394009709F4B12C892B09F41A +:104760003FC088E0F801A0E7B2E001900D928A9581 +:10477000E1F781E0809360020E94890690935F02D6 +:1047800080935E0280915E0290915F020E947A06A1 +:10479000069750F180917002909171029093A90256 +:1047A0008093A80280917202909173029093AB0261 +:1047B0008093AA0280917402909175029093AD0249 +:1047C0008093AC0280917602909177029093AF0231 +:1047D0008093AE021092600207C090E080E096CF16 +:1047E000809160028111CECF80916F02882371F099 +:1047F00080916D0290916E020E947A06893E9340EC +:1048000028F082EE0E94E50B10926F0280916C02FC +:10481000882399F180916B0281112FC080916902E8 +:1048200090916A020E947A0681369A4E78F08091C1 +:1048300067029091680201969093680280936702E4 +:104840000E94890690936A028093690280916702B0 +:10485000909168024F9788F010921C018AE2809331 +:104860001D0180931E018FE00E946B1481E08093F4 +:104870006B0210926802109267023AE7E32E32E070 +:10488000F32E10E000E0CC24C394F701D1907F0117 +:10489000DD2051F10115110509F062C0C0926502D9 +:1048A0000E9489069093620280936102D694C801A7 +:1048B000880F991FDD2009F460C08D589E4FFC01C0 +:1048C000808191819A8789871B860E9489068160F1 +:1048D000782F9D878C87F7013197108249855A85FB +:1048E0006B858D850E9495220F5F1F4F0930110542 +:1048F00061F61091660280916502111167C08823EC +:1049000009F43EC010921C0184E080931D01809345 +:104910001E018FE00E946B141092650281E080936B +:10492000660280916B02811105C080916C02811139 +:104930000E949D108B2D2D960FB6F894DEBF0FBEF2 +:10494000CDBFDF91CF911F910F91FF90EF90DF903E +:10495000CF90BF90AF909F908F907F906F90089571 +:104960000530110519F4C09264029ACF0630110582 +:1049700009F09CCFC092630293CF8F599E4F9FCF77 +:1049800080916402882379F086E180931C018AE19A +:1049900080931D0184E080931E018FE00E946B14C0 +:1049A00010926402BBCF809163028823A9F08AE150 +:1049B00080931C018EE180931D0184E080931E0191 +:1049C0008FE00E946B1410926302A8CF811126C061 +:1049D00080916402811122C08091630281111EC006 +:1049E00080916102909162020E947A06853F914017 +:1049F000A8F0112351F010921C018AE280931D014E +:104A000080931E0181E20E946B1410926502109245 +:104A10006402109263021092660283CF10926502C4 +:104A200010926402109263027CCF90E080E00E94BA +:104A3000E52D893E9E4F11F40C94630F80E008959C +:104A40001F920F920FB60F9211242F933F934F9303 +:104A50005F936F937F938F939F93AF93BF93CF9306 +:104A6000DF93EF93FF93D091E900DF708091EC002A +:104A7000C82FC17080FDC0E81092E9008091F0005D +:104A8000877F8093F00078940E94EA151092E900E5 +:104A90008091F00088608093F000CD2BCF70C093A0 +:104AA000E900FF91EF91DF91CF91BF91AF919F917D +:104AB0008F917F916F915F914F913F912F910F90C7 +:104AC0000FBE0F901F9018951F920F920FB60F9266 +:104AD00011242F933F934F935F936F937F938F9303 +:104AE0009F93AF93BF93EF93FF938091E10082FF79 +:104AF00009C08091E20082FF05C08091E1008B7FB8 +:104B00008093E1008091DA0080FF24C08091D8007A +:104B100080FF20C08091DA008E7F8093DA00809140 +:104B2000D90080FF9DC088E189BD8AE189BD09B4B3 +:104B300000FEFDCF81E0809301038091DC028111B2 +:104B400009C00E94EC040E94B7058091E2008460D5 +:104B50008093E2008091E10080FF17C08091E20025 +:104B600080FF13C08091E2008E7F8093E2008091ED +:104B7000E20080618093E2008091D800806280939F +:104B8000D80019BC85E0809301038091E10084FF87 +:104B90002BC08091E20084FF27C088E189BD8AE1B3 +:104BA00089BD89B5982F917080FFFBCF8091D80087 +:104BB0008F7D8093D8008091E1008F7E8093E1000B +:104BC0008091E2008F7E8093E2008091E20081601C +:104BD0008093E20080910203882309F447C084E0B7 +:104BE00080930103809101038091E10083FF27C03E +:104BF0008091E20083FF23C08091E100877F809352 +:104C0000E10082E080930103109202038091E100B1 +:104C10008E7F8093E1008091E2008E7F8093E2009E +:104C20008091E20080618093E20042E060E080E0F9 +:104C30000E9485058091F00088608093F000FF91CC +:104C4000EF91BF91AF919F918F917F916F915F9104 +:104C50004F913F912F910F900FBE0F901F9018957D +:104C600019BC109201031092DC0274CF8091E30012 +:104C700087FD93E090930103B5CF78941F921FB600 +:104C80001F9211248F939F93AF93BF938091D30270 +:104C90009091D402A091D502B091D6020196A11DA7 +:104CA000B11D8093D3029093D402A093D502B09308 +:104CB000D602BF91AF919F918F911F901FBE1F9001 +:104CC00018951F921FB61F9211248F939F93AF9335 +:104CD000BF938091D202811113C08091D302909131 +:104CE000D402A091D502B091D6024196A11DB11D6A +:104CF0008093D3029093D402A093D502B093D602AE +:104D0000BF91AF919F918F911F901FBE1F901895DB +:104D1000CDB7DEB7E0970FB6F894DEBF0FBECDBFBC +:104D200084B7877F84BF0FB6F894A8958091600000 +:104D3000886180936000109260000FBE80E890E070 +:104D40000FB6F89480936100909361000FBE85B711 +:104D5000806885BF85B7806885BF8EEB98E09093AB +:104D6000E5018093E4010E94EC040E94B705809164 +:104D7000E20084608093E2007894809101038823AC +:104D8000A1F01091E9001F709091EC00892F8170C3 +:104D900090FD80E8182B1092E9008091E80083FDD7 +:104DA0000E94EA151F701093E90082E084BD93E031 +:104DB00095BD9AEF97BD80936E000E94630F81119D +:104DC00002C00E94A50E80EF0E94C00881EF0E94E1 +:104DD000C00882EF0E94C00883EF0E94C00805E56A +:104DE00011E0F1E6EF2EF1E0FF2ED8018D918D015B +:104DF0008F3F11F00E94C008E016F106B1F788E07D +:104E0000E8EAF2E0DF01282F1D922A95E9F7E0E7B2 +:104E1000F2E0DF011D928A95E9F70E9415258111C4 +:104E200002C00E94B31882E090E00E94D72D8093C8 +:104E30009F020E947C0F9093D8028093D7020E9419 +:104E40002523EFE7FBEB3197F1F700C000000E944C +:104E500025238091A80280FF08C06FEF7FEF90E0CC +:104E600080E00E94092E0E94CE0C83E090E00E9418 +:104E7000D72D90E00E94CE0B80910B0390910C03F4 +:104E80000E94A91480917802811132C00E941525D8 +:104E9000811104C00E94B3180E94C51588E090E0FB +:104EA0000E94DF2D60938B0370938C0380938D039E +:104EB00090938E036E7F71F40E94C51588E090E098 +:104EC0000E94DF2D60938B0370938C0380938D037E +:104ED00090938E030E94D3061092C70280918B0399 +:104EE00080FF03C086950E946B1481E08093780256 +:104EF00060EB71E0E5E98E2EE2E09E2E2EE931E0D6 +:104F0000E7EAF1E041E050E01191812F82958F7046 +:104F100090E0DC019196FC9091971F70E12E6A0160 +:104F200001C0CC0C1A95EAF70C2D00950F21919633 +:104F30000C93919792961C9192971C2992961C9390 +:104F4000D901FD909D010F2D02950F7010E0D80141 +:104F50009196BC90BF2DBF70FB2E6A0101C0CC0C96 +:104F6000BA95EAF7DC2CD094DB20D8019196DC923C +:104F700091979296DC909297DC289296DC92DC01D5 +:104F800090968C9190E002C095958795EA94E2F70F +:104F90008170D80190960C9110E002C0159507958C +:104FA000FA94E2F790E000FD92E0892BD4018D9312 +:104FB0004D016E177F0709F0A7CF8091D702806857 +:104FC0008093D7028091D7029091D8020E94B40EAC +:104FD00086EA92E09093BF028093BE0281E20E9433 +:104FE0006B1481E090E00E943C1580E091E090938A +:104FF000CF028093CE0258E1252E312C80910103FF +:10500000FF24F39408E11AE1853009F4B3C20E9449 +:105010002523882359F08FB7F8944091D3025091FB +:10502000D4026091D5027091D6028FBFA8EAB2E097 +:10503000E0EAF2E010E000E0702F8D919D91219167 +:1050400031912817390709F4BEC22827392760E0B3 +:10505000EE24E394F12CA9014E215F21452B09F4A4 +:10506000ACC269A37AA39C012E213F2191E0232B9E +:1050700009F490E09BA30E9489068160782F9DA38C +:105080008CA349A15AA16BA18DA10E949522000F6A +:10509000111FF801E056FD4F80819181E826F92625 +:1050A000F182E0828091C7028823D1F18091C6020B +:1050B000E0918B03E695E81BE093C202823009F091 +:1050C00099C2F0E0EC53FD4FE4910E2F10E024E183 +:1050D000E22E23E1F22E8091C302882361F0109228 +:1050E000C3020E9489069093C1028093C00210926D +:1050F000C5021092C4020E948906E091C002F0919C +:10510000C1028E1B9F0B8F3F9F4750F4E00FF11F92 +:10511000F093C102E093C00280EC92E0F7010995A0 +:105120003CE8E32E32E0F32E03E812E04AE7842E57 +:1051300042E0942E85E991E09CA78BA7D12CC12C4D +:10514000AEE9B1E0BEA7ADA7E7EAF1E0F8ABEFA7A3 +:1051500055E9652E52E0752E512C44244394D30119 +:10516000ED913D01EE0FEE0FAFA5B8A92D91B8ABB3 +:10517000AFA7A22FA295AF70B0E090968C9190E06F +:105180002F7002C0959587952A95E2F7817099272F +:10519000ADA5BEA54D91BEA7ADA7A42FA295AF709A +:1051A000B0E090962C9130E04F7002C03595279575 +:1051B0004A95E2F7A9014170552720FF02C042E05D +:1051C00050E0842BE82BD3011197EC93ABA5BCA541 +:1051D000AD90BCA7ABA7EF70F0E0EB57FE4F80811E +:1051E000F7019081890F8083B12C082E000C990B58 +:1051F00020E08A159B05DCF0D8018C918F5F8C93A1 +:10520000F601EF59FE4F808191819A8389834B8209 +:105210000E9489068160782F9D838C83F4014082EF +:1052200049815A816B818D810E94952221E0D701AD +:105230008C91082E000C990B442755274A195B09BD +:1052400048175907E4F0F801808181508083F60106 +:10525000ED58FE4F808191819A8389834B820E9411 +:1052600089068160782F9D838C83E2E0D401EC93E2 +:1052700049815A816B818D810E94952221E0D7015D +:105280008C91082E000C990BB5010E94782DF70126 +:1052900081937F01522A0F5F1F4FFFEF8F1A9F0AE2 +:1052A00022E0C20ED11C42E1C416D10409F057CF4E +:1052B000552059F08FB7F8944091D3025091D40201 +:1052C0006091D5027091D6028FBF86E0E7EBF2E0E5 +:1052D000DE01119601900D928A95E1F7F090B902E6 +:1052E000E090BA021091BB020091BC021092B90288 +:1052F0001092BA021092BB021092BC028F2D8E291E +:1053000009F448C08091B5029091B6020E947A06D5 +:105310009C019091B102992309F4C3C32333310551 +:10532000C8F19F3F19F09F5F9093B102FF2059F0A1 +:105330000E9444089FEF1F140CF491E0899F802D78 +:1053400011248093B902EE2059F00E9444089FEF87 +:105350001E140CF491E0899F802D11248093BA02D1 +:105360003091B9023323B1F02091BA02222391F097 +:1053700045EB3403C0011124992309F495C190939E +:10538000B90245EB240390011124332309F490C1A1 +:105390003093BA02812F802B09F448C08091B30268 +:1053A0009091B4020E947A069C019091B0029923D8 +:1053B00009F472C325363105C8F19F3F19F09F5F8C +:1053C0009093B002112359F00E9422089FEF11160A +:1053D0000CF491E0899F802D11248093BB0200235F +:1053E00059F00E9422089FEF10160CF491E0899F5B +:1053F000802D11248093BC023091BB023323B1F085 +:105400002091BC02222391F045EB3403C00111240A +:10541000992309F451C19093BB0245EB24039001F9 +:105420001124332309F44CC13093BC028091B9029A +:105430009091BA02892B9091BB02892B9091BC026A +:10544000892B11F00E94820786E0FE013196A7EBBE +:10545000B2E001900D928A95E1F70E94C106909109 +:105460009E02891731F00E94C10680939E020E941D +:10547000911480910103843009F0C0CD83E08093C2 +:10548000E9008091E80082FFB9CD8091E80090E0CA +:1054900085FF06C00E940B05882309F415C191E021 +:1054A0008091E8008B778093E800992309F4A6CDDA +:1054B000E981E150E33108F09BC1F0E0E757F14D9D +:1054C0000C948C2D80910103843009F441C080E05C +:1054D0000E9491141092C7028091BD02811116C0E2 +:1054E000F092BD0280918B03982F91709093790276 +:1054F0008E7F80938B03BFEFE0E7F2E0B150E04096 +:10550000F040E1F700C000000E94A00F1092D2020C +:1055100020E40FB6F894A895209260000FBE209367 +:10552000600083B7817F846083BF83B7816083BF5E +:105530007894889583B78E7F83BF0FB6F894A8952B +:1055400080916000886180936000109260000FBEBF +:1055500080910003882371F00E942523E8EAF2E09D +:1055600081919191892B09F078C280EB92E08E179E +:105570009F07B1F780910103853009F4A3CF0E9402 +:10558000D5150E94C1060E9491141092BD0280910F +:105590007902882359F080918B03816080938B037B +:1055A00086950E946B140E948A0F31CD8091C802AB +:1055B0008823C9F30E94A00FF6CF6F5FEE0CFF1C8B +:1055C0006C3009F048CD0F5F1F4F0430110509F012 +:1055D00033CD8FEF8EA38FA318A60E94890681601A +:1055E000782F9AA789A74EA15FA168A58AA50E94D6 +:1055F000952258CD863059F4F0E0EF53FD4FE491F9 +:105600000E2F10E094E0E92E93E1F92E64CD89305D +:1056100061F4E695F0E0E254FD4FE4910E2F10E0C6 +:1056200085E5E82E82E1F82E56CD8F3061F4E695BF +:10563000F0E0E554FD4FE4910E2F10E0B0E0EB2ECA +:10564000B2E1FB2E48CD853159F4F0E0E854FD4F2E +:10565000E4910E2F10E0ADE8EA2EA1E1FA2E3BCD49 +:1056600008E210E07DEFE72E70E1F72E883109F4B3 +:1056700032CD833249F4E6EBF2E005911491FBEA76 +:10568000EF2EF2E1FF2E27CD04EF11E0E0ECEE2E3D +:10569000E0E1FE2E843209F41ECD00ED17E062ED4C +:1056A000E62E66E0F62E17CD81E08093B90269CE32 +:1056B00081E08093BA026ECE81E08093BB02ADCED2 +:1056C00081E08093BC02B2CE00E210E0CE010196F0 +:1056D0007C018091E80085FD0AC08091E8008B770D +:1056E0008093E8000E940B05882399F3D8CE80911F +:1056F000F100D7018D937D010150110951F7CFCEF3 +:105700001A8289E08B833FC08A81823009F4BBC151 +:105710008330A9F0813009F06BC02FB7F894609105 +:10572000D3027091D4028091D5029091D6022FBFFE +:105730000E94922D6B837C838D839E8324C08091F5 +:10574000A8029091A9029827892798279C838B8388 +:105750008091AA029091AB029827892798279E836F +:105760008D838091AC029091AD029827892798276C +:1057700098878F838091AE029091AF0298278927F6 +:1057800098279A87898780910103843009F036CC65 +:105790001091E9001F709091EC00892F817090FDAD +:1057A00080E8182B82E08093E9008091E80080FF78 +:1057B0000DC050E040E060E270E0CE0101960E9432 +:1057C0003C058091E8008E778093E8001F7010936D +:1057D000E90014CC8A81823059F46B817C818D81FF +:1057E0009E810E94922D86E290E00E94EB2DCBCF0D +:1057F0008FEF8983C8CF4C816B818A810E94C10E53 +:105800009827892798279E838D83BDCFED80FE80C2 +:10581000FE24EF24FE248A810B81B8E10B9F8001D6 +:105820001124E0E68E9F000D111D11248C8190E063 +:10583000880F991F080F191F6F2DC80187960E94A6 +:10584000EB2D6E2DC8018896D0CF0E94380E9BCFCD +:105850008A818138C1F060F4803809F094CF20E06B +:105860004B8160918D0380918C030E943A138BCF02 +:10587000823849F1833809F086CF20E040918E03C9 +:105880006C818B81F2CF8B810E946B149B81809104 +:105890008B03911111C08E7F80938B031092C702EE +:1058A000FFEF20E742E0F15020404040E1F700C028 +:1058B00000000E94A00F67CF816080938B038695C4 +:1058C0000E946B1460CF8B8180938F035CCF8A81A1 +:1058D000813899F030F4803809F055CF80918E03EB +:1058E00011CF823891F0833809F04DCF80918C032D +:1058F0008B8380918D038C8346CF80918B0380FFB7 +:1059000002C08695FFCE80E0FDCE80918F03FACE57 +:1059100060918B0370918C0380918D0390918E0325 +:105920000E94281330CF80E18A832DCF84E08A83C0 +:1059300089E1E8CE0A811B81102701271027CE01BB +:1059400001966C01EC80DC01AE0DB11D7D01C8013A +:1059500089519C4FEC14FD0409F415CF0931B4E0D2 +:105960001B0750F40E94D72DF60184830F5F1F4F51 +:10597000BFEFCB1ADB0AEBCFD60114961C92F6CF01 +:105980000A811B81102701271027FE0131966F0124 +:10599000EC80E00EF12EF11CC80189519C4FE016FD +:1059A000F10609F4F0CE0931F4E01F0728F4D6011E +:1059B00014966C910E94EB2DBFEFCB1ADB0A0F5FA0 +:1059C0001F4FEACF0E94280EDECE8AE0ADCF0A81BB +:1059D0001B81102701271027FE0131966F01EC80F3 +:1059E000CF018E0D911D7C01C8018796EC14FD043A +:1059F00009F4C9CE003CA3E01A0750F40E94D72D49 +:105A0000F60184830F5F1F4FBFEFCB1ADB0AECCF89 +:105A1000D60114961C92F6CF0A811B81102701270C +:105A20001027FE0131966F01EC80E00EF12EF11C83 +:105A3000C8018796E016F10609F4A5CE003CF3E014 +:105A40001F0728F4D60114966C910E94EB2DBFEF2E +:105A5000CB1ADB0A0F5F1F4FEBCF09BD19BD09B48D +:105A600000FEFDCF8091D8008F7D8093D80080917B +:105A7000E00082608093E0008091E00081FDFCCF37 +:105A80000E94D51577CD86E290E00E94D72D1B822B +:105A90001C821D828E8377CE2D32314008F08FCC50 +:105AA000C5CC2D32314008F03ECC74CC87FB082E9B +:105AB000062687FD819567FD61950E94A82D0EF44D +:105AC000919507FC81950895AA1BBB1B51E107C066 +:105AD000AA1FBB1FA617B70710F0A61BB70B881F7E +:105AE000991F5A95A9F780959095BC01CD0108950D +:105AF00097FB072E16F4009407D077FD09D00E947B +:105B0000642D07FC05D03EF4909581959F4F089534 +:105B1000709561957F4F0895EE0FFF1F0590F491EA +:105B2000E02D099469279627692778278727782702 +:105B300008950E94542E332312F48A1B9B0B0C945D +:105B4000A32D0E94542EB7FF0895821B930B089536 +:105B5000991B79E004C0991F961708F0961B881FBF +:105B60007A95C9F780950895FB01DC0102C0059084 +:105B70000D9241505040D8F70895FC0141505040DB +:105B800030F001900616D1F73197CF01089588279C +:105B900099270895FB01DC0104C08D9101908019C3 +:105BA00021F441505040C8F7881B990B0895F9998A +:105BB000FECF92BD81BDF89A992780B50895A6E1E0 +:105BC000B0E044E050E00C94112EA8E1B0E042E0D7 +:105BD00050E00C94112E262FF999FECF92BD81BD75 +:105BE000F89A019700B4021639F01FBA20BD0FB61B +:105BF000F894FA9AF99A0FBE08950396272F0E94F7 +:105C0000EC2D0E94EB2D252F0E94EC2D242F0C94BF +:105C1000EC2D0196272F0E94EC2D0C94EB2DDC012E +:105C2000CB01FC01F999FECF06C0F2BDE1BDF89AA7 +:105C3000319600B40D9241505040B8F708950E943B +:105C4000542EA59F900DB49F900DA49F800D911D83 +:105C500011240895B7FF0C941F2E0E941F2E821B43 +:105C6000930B0895A1E21A2EAA1BBB1BFD010DC0C8 +:105C7000AA1FBB1FEE1FFF1FA217B307E407F507FC +:105C800020F0A21BB30BE40BF50B661F771F881FD8 +:105C9000991F1A9469F760957095809590959B016E +:105CA000AC01BD01CF010895A29FB001B39FC00117 +:105CB000A39F700D811D1124911DB29F700D811D38 +:105CC0001124911D0895F894FFCF4E0F4E0F570FDA +:105CD000570F590F570F570F570F4E0F4E0F5E0F9D +:105CE000570F570F5E0FD016F8169B18F8169B1813 +:105CF0002B174C179B184A1857183B1D3B1D761D38 +:105D0000761D251E3F1EA61DA61D4A1ED41EE51E7D +:105D1000E51E802B842BEA2BFB2B062C252C282C14 +:105D2000672C882CF82BF82B932C962C9A2CC02CB3 +:085D3000E22CE52CE72C0C2D00 +:105D380077068E0C6D0C690C650C760601191A1B1A +:105D48001C1D1E1F202122010201002A002A2A01EF +:105D5800818283E200E900EA00B500B600B700CD11 +:105D6800008301CC008A01920194012102230224BC +:105D7800022502260227022A02B300B4006F00702F +:105D880000F0F1F2F3F5F6F70001020304053736E7 +:105D9800350200020102020B000B010B020B030586 +:105DA80003080300000001000209000901090209B3 +:105DB800030303060300FF0100010000FFFF0000CA +:105DC800010001FF000404040404040402026162E7 +:105DD80064669092949706606365679193959607B9 +:105DE8000001020202020606060909090909090F4B +:105DF8000F0F0F0F0F15151518191919191919194A +:105E080019191923244022B6B6019401DE00C808E6 +:045E1800E108010993 :00000001FF From 418c347ce7f108d3955970b7e3f3a3e94d126676 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 28 Nov 2021 22:30:00 -0500 Subject: [PATCH 087/155] Updates after breaking changes. Changed LED timeout and effects definitions. --- .../pro/ansi/keymaps/solartempest/config.h | 91 +++++++++--------- .../gmmk_pro_ansi_solartempest.bin | Bin 36584 -> 36980 bytes .../pro/ansi/keymaps/solartempest/jonavin.c | 73 -------------- .../pro/ansi/keymaps/solartempest/jonavin.h | 19 ---- .../pro/ansi/keymaps/solartempest/keymap.c | 18 +--- .../pro/ansi/keymaps/solartempest/rules.mk | 7 -- 6 files changed, 50 insertions(+), 158 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h b/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h index 5d79e27b89a1..202a321f7689 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/config.h @@ -32,49 +32,52 @@ #ifdef RGB_MATRIX_ENABLE #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_HUE_WAVE #define RGB_DISABLE_WHEN_USB_SUSPENDED + #define RGB_DISABLE_TIMEOUT 300000 //300000ms = 5 minutes (Suspect the max timer is <5mins). - #define RGB_MATRIX_KEYPRESSES - #define DISABLE_RGB_MATRIX_SOLID_COLOR //Remove or keep effects not desired - #define DISABLE_RGB_MATRIX_BREATHING - #define DISABLE_RGB_MATRIX_ALPHAS_MODS - #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN - #define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT - #define DISABLE_RGB_MATRIX_BAND_SAT - #define DISABLE_RGB_MATRIX_BAND_VAL - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT - #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT - #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL - #define DISABLE_RGB_MATRIX_CYCLE_ALL - #define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT - #define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN - #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL - #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON - #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL - #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL - #define DISABLE_RGB_MATRIX_DUAL_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_BEACON - #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS - #define DISABLE_RGB_MATRIX_RAINDROPS - #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS - #define DISABLE_RGB_MATRIX_HUE_BREATHING - #define DISABLE_RGB_MATRIX_HUE_PENDULUM - //#define DISABLE_RGB_MATRIX_HUE_WAVE - #define DISABLE_RGB_MATRIX_PIXEL_RAIN - #define DISABLE_RGB_MATRIX_PIXEL_FLOW - #define DISABLE_RGB_MATRIX_PIXEL_FRACTAL - #define DISABLE_RGB_MATRIX_TYPING_HEATMAP - #define DISABLE_RGB_MATRIX_DIGITAL_RAIN - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS - #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS - //#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS - #define DISABLE_RGB_MATRIX_SPLASH - #define DISABLE_RGB_MATRIX_MULTISPLASH - #define DISABLE_RGB_MATRIX_SOLID_SPLASH - #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH + #define RGB_MATRIX_KEYPRESSES //Remove or keep effects not desired + #undef ENABLE_RGB_MATRIX_SOLID_COLOR + #undef ENABLE_RGB_MATRIX_ALPHAS_MODS + #undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN + #undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + #undef ENABLE_RGB_MATRIX_BREATHING + #undef ENABLE_RGB_MATRIX_BAND_SAT + #undef ENABLE_RGB_MATRIX_BAND_VAL + #undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + #undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + #undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT + #undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL + #undef ENABLE_RGB_MATRIX_CYCLE_ALL + #undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + #undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN + #undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + #undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN + #undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + #undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL + #undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL + #undef ENABLE_RGB_MATRIX_DUAL_BEACON + #undef ENABLE_RGB_MATRIX_RAINBOW_BEACON + #undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS + #undef ENABLE_RGB_MATRIX_RAINDROPS + #undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + #undef ENABLE_RGB_MATRIX_HUE_BREATHING + #undef ENABLE_RGB_MATRIX_HUE_PENDULUM + #define ENABLE_RGB_MATRIX_HUE_WAVE //Enabled + #undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL + #undef ENABLE_RGB_MATRIX_PIXEL_RAIN + #undef ENABLE_RGB_MATRIX_PIXEL_FLOW + #undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL + #undef ENABLE_RGB_MATRIX_TYPING_HEATMAP + #undef ENABLE_RGB_MATRIX_DIGITAL_RAIN + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS + #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS //Enabled + #undef ENABLE_RGB_MATRIX_SPLASH + #undef ENABLE_RGB_MATRIX_MULTISPLASH + #undef ENABLE_RGB_MATRIX_SOLID_SPLASH + #undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH #endif diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro_ansi_solartempest.bin b/keyboards/gmmk/pro/ansi/keymaps/solartempest/gmmk_pro_ansi_solartempest.bin index 1f9b33233744c3b04a261bad6aa7f09b3ad93933..543666052026b5e0669ffca15ac16abb5df215f8 100644 GIT binary patch delta 17310 zcma((33yXg*7v@bH0ho$&=q(|S_ln=LRpFkq-mQjDO3R!0VOSqDT+i?CRN6iP09!g zKK>a5o#}u&D6*tbhaw?t?&D0N;uPFKgs`adN`d#XzW>~p6d9fW`=@;8zI)F-cR%;s zbI!ft(ks;UcFKWdh&e_f<%$0Sew_E;(fwa_buLB94*|Xg=mC&FjvUII$C0ua;QuQ0 zOMKdI{(IVAmi=|w@&8v=4xPIPpc&w|0Gj}QUD1DsYy4&B)&K9bv#;YvJY7~-& zAf_E7}rA8_vV#Fus-WJ&irK9S?`*n0B<)H0YPkZF%Jo}e%)Twg};*J~|4`GfA zx!=+t=GXZrrTlfVe9YLYZJlwZWRuAIMVYD9`AioouJT~c6I!WAJY_Uz+bNyA8S|)RS|z`5OfCV z+#XyO?acFnqYE;ZhgQVJOC5PRY=$B)OC8w|-UWG&hK@r=8m{lOA@0GzcEBtMRm3{7 zMrvw})RC2;yP%{)3PTdcA0pkn86q8d6Jm42t9# zyIfb-{p}^h(Y2`qhTK`;EUZDCEL3Qs&sN=h?JmSA13H+xdM8txXg|@5(pPerYU-6` zB-(!PRo(o{T|fGUIdkhW?5j9TXV|_2+|Iks`_QoS9@3SOQn!XnbETKUogoLAve%@Z zZV!C~q<@!4^Ci+8X*B&IybL+VJT$jGc+iL33sxW{;SIuWs!o|n#$|>Ohf%vx=5bw8 z8Ky&>mk+C4%1*>J`dycl2F!^375BJK87BtI6Ijx{j?dS8ia>Xf8dahK*(sra&3ZsnAeSk5xd@1&e&k^N&r_SiWwg7LTN?0U3bq|T<4E$A2uE^e*n4O;-BgmYhjMd#&6p5@Y zF}tKU5}lAofTajK%>j10z7i=DS0N<_Ukbjd0C@mf0QO|!^I205;o6(Nm(q}OK!2np z+;_AC1OVHdlwSnM5iz95d&Gw8Pub+$Cqc$Um{R1wc9X5A>=gL}?B1lpxh)Zy37gOs z#Ep)imlzYZkI>QFgGUIi9&&qqB(?x@Iq2go=pSuT9YAe!+7e8LD>B1NZ4U@Cv&jEl zs#(>E)H2xAKLSgN{84sD@&v~g7a5hZ6LY~Z;#T`nbL2XCcybbzFj23 z@nqm_2nz!~Dg552?4-DpB7!Zhh;40}+k7xOuOU$hn_k9E@*_?VV79omg2-P3EIU8N zl9Kc+QvR?8Dc8d{w1)jOrHpzKnoTuOGXm_?)Ld#oE4v6%g#q?0_{ak6Pf=uos!4{q zB7wE3iX56qwsZ3(8X<17sDKTD+7P$?FyREGTjp7*%kauLrLaO_`<$F(+eFNj3&v|I zV1^l3+X5u2HwediF-L%K+P+Cde`x}{2C4Q+1JGZS$AZ^JE%b$26l7sNY9 z9bv8M`3^bvSK-x;Uf+0KlKU=of?DJ+yOo_fC*m$fqJ5m?!ox)2w;6eWqg2=M;?OX&B>Q zBCT-#%yk4>g_FJX9fx{SQ_JBb&E+ys2AT)|-bG&{1N`%$YJ4yJ+k;8!uegCj$_qZy z2$UO~!EveC?y>m$jy2AEoqf%fn9%8AUBDhNWj7*>>4CGrRuRER_S^vR(c9=8=yWC! zwnQ+Hya?pqMBeOCCLHRaQ|WG+`$I(J?~WYoL8*v)Yz5+~B5Ow1+cpDh~`X@M|_2` zcu8a-bS(gI&3Cq=(1|%dh(Xz#4dUmnke}4y(0fs_Qor6uj+T?XSd+Xzox`bU%$Lqlsb2wAyFYRfal8FN z2rYi$;>8Y_=Yj#!Hh$FK(#tk%KGqpS-Ar6`Bp|Wt8wAo-4j7 z5)s~rxKVz*g;pc(aCqNE48^_*;}MRVyY>*4|04YQ#bReFtm@T^r0m~)4bJhyZ=duJ zV4eC)9e5Q&T63;LVk_7xpZnXOjH3_rq`2au#Aj=xhj2zGZUZge4qC7uoA4&Y6#*|E z5b&)7Qsl!fgfc+hVpE*PYKrjRMs~FII$a>}8*Yk^Z#8Cn$cmeSHei^&p*H6Z`_oRP zG}J`cvC=W?Fn}<15wiCs_P7+F_NiQCsiMN+XecT!(p`Px!X3lJOBiyt{1hT#5LC}D zfKLE|A)=l~CDN*Q$ay+TN{ReM5JQMt7fW4pvqf3I$FtdESy=_M;ee(1MNuM% zAO*d}Koq8eAmW9t!<~<3|ABe;}u+vM~nPp5gDhDUGcpS{eKVO zS%5gR>OeN=PElH!MEih4QlMrXc?JmhPHp{;79xa|-W~Q*Cu3GO46v)GPO$GXVlTaq zbE#t-w>k9Zw!8QL%y9*txU28d7W*vwM&m#)WA87FVKy3byj$&uy0*4W%T23|Z+o$0 zlTmegdrLwMRyX!4(zidhwWYDwp-A8Qn8-gHrirkH71`j%W8|DdeiG)Fbn5mI9EStB z_%he9cgos*QTC^HM);|rI1T7!J2wkx-(~@~|HXblkhMm5V`x_!(t}~N!X>E4)_Cl9 zM#KeL_t?>JFbrG&RQo?doMU5r+s>;rMS2&{aq)(0ovqR8y5O96%p2hcg?=vHWyV^o{plhR=LO+iEju1VgG)>bGME=O2+DmMg!uLif(pKA?d0Uq zdZ0EHbY|%$;{Xre<#5zG>XPm0c1P`-#(XaY+_frlw3i-*i%xVDoK6`{nuw=~@C{HJqQ%OHKy>7usXFv+r=NV7pmXLbvjts8{?B_h8~ zDp^?*;g>^651hb9B6#qlQuz&Vo;b)f_w!P_ex9rZ8w={C$R~x#q&^K5)Jjd?gbLat zD}B-BiSRRS>+)YcMQvK>^nNcI;q>-(`vE9BUMkxi9OKj0Vm3}A1CALN#M_X5Az2Cs zVT_i#DvO7(#RJ~FI^YIndfT8tn_#S}JUz*TM!ez4tc@1TlbSSF6~&qx3{9O;WPA>L zhEjRBq8*RLdA{s8(MzY}QG_?5vzHr^)sXqK_(+IhF8IJt7YTD8Pj*E2C*g9kN6BQb z0~5h#C~dRU`5rfIW~J8R#R8bDeAVJ(6i!4UWLTV!_x&c$BG?dwk>|{HwH~#3U%qN0ovoXPwW6CuvHT2b^2-Z4qr%mMl z6#g2_m`g#@#mt&Xw&Au2A0Pb8Cj%OhPmk<#>g}V2QY5>2f_^Y2mf|F_B=Yf&klv0< ziNw^~boL4MRmSsP1&AOb&H84GjDnK%ewqXQ$xRgYzI1IYjm_Csnw!%V&13xt9qoM| z*{Ux~Wr=%00V(7rX&T%GDoAI8J?ZE}LIrjbzbX~TwW}(!ZMV|k>> zRyArHe(Twb6@}>H;^o41`p;%rBmd;5g98nbSQ2&oPeb3q-iooq*fq3!f5bA>^Y{NW6nFI zRx&-xPTCx;@k^=3C@!h)ML#MbvtZ~@*^G)5@0T5`jENqFq;V)dC(|wRQDd4o0hBIM zj?@`nr|g^#j3=QJ!68W=| z*MhjVKuv(K8*~iJQu(7^Y-NaYp8w05Xm4prx|4lw!wSsg9;2RsiAxAe8V8!#5eeU&A*WzNBCld{4nQAHJj@1K%%W`4>QSrnq?m#jS?j zzgJYjj1nbFK(x#uqNEFGY}GVq(<5B0O~@A|LnC$ zDL_ApFAEig4fhG^k~#TtCN^$pfn!Mc4I$Tn3Rd@~!92bsX4NUR)8NjcCcnU=hK0gh zDn`vr0QaPU^_Ao2kiBl6FS>VY5t)#UJ9 zEk1FN>yoevslWI2bwbsdSRnH2MGe%XaMXnPC&MHf2Qgci7-{2R`>J64YLLKWWP1Qg zI@jz&1$Z;H8J5+sK}a#2>%cpSruwXyI85*+)o4ukjWE9k&b~}HE<}Ygk0OTK6^g5s z)#y!$8pI_E5gz$b3t-d0O{=A#pCds?7HGS z{PO~gwj1RhqKmpNl^I0- zZFkwNyv@JJJ8)ax|NJ7a1Mzl;oy-01;mGgeYr9qH|JZ3 z#DtD0(OG~?00OOK*ohK(5Pn%T3hi!^R$PON@j2BmwFk$Q~PUcXG&IX2mb9%Aa6CoQEA$(l6&-f0Q0^ z*MaAW0S2^CE5lAHQS1Nik2mYA=jN1Ok*QbZuj|l5xj*`e@8TcCcL6&DP60*~Y2`rn zrIJ-?q@*+g7zx2LZ1KnjJdpkENJl@Cx9>*l+&kQq`RE)Gq!H;=+NdFeNRG%4cZ>Wo zH<3RwQ$JIk^J9hLR2z7zK4*82(x)B~WkMDrf`Z_VvA$7bYVH*AofA!H$Q?Pj==G}# zI<u0)LAp{`x!T!Z$WXO*Ksi{*0(Y+ce*2|7uwd1#P|KYnHTkShaP4m@ zjiaa;YuQC({wS-2OICKq*e9A!!rrIg2OqT8Yde>IrC(P{z{A=8hYzA?;!Fm)2~U zj!F>1ssnWWeCw+wa_wM|aBS1K7l*fqM|%|&$2%ZY6IJ>(5swD@%>6g0NvaLDFRm5& z9Z>s)v8<*{6JKSHdoj;0XDit$Wh3q`@O&$LwXdv})+Fpq=)v+3pAeQ`O{Bdhnnh~) z*13Uoy<3f$-6iI3yDEr#;?p+>MXCfa7PEiRbR{%RjeC#%xNOAunUUPO_?KQ3WM`FI z<9m{l60g=LrS#ww+Vrx3(aQpLl+<#hM@%(bNn&*F22M;#0msBqRzF^=`4bGl0|Ov) z@NR4%*hJM4cDN4)GIAXI%=oc*8{0X)!m&GoM_+&fw?=E;c5Bj#FN@W3aAjqJ`6v%5 zz%DU*O3e5rP?aqOPU=l^&^!rx*RUyiyS7rPXTCn!ql|0JA7vU^Y0VGuLqoEjcuZ3A zo_G}E)gk%SO1u>1jFk7}KsqNR%kD{w5u^bkEi~MQG&=jY!hCk!9kU(C4R^y#ApjXm zS*O~puFC_(KyJ$MGPN1@csuwJ>Djq(>S+hm@32j8X|itxDT6d=CY5O(XwZvAx;P2^ zjdD(wJV1@LSAFgF8fP?L3dK(b}WD5)v z(J%qD2|L`42o;$y$2g4ra3EE8 z<}}j&(>DVat#9#WLi{W%Lxjgp!`yuiKz0~mQZkp_0A#QCGpjoDtXrxxYfym-?x&HE zV-E562GeSOPBjE0{CGgF&n?}2{O{A62h_GWDCk?8lA>}417!}F+5lWOC zP}Iv!*(R-hn?mkcVEeP}J6p+Nk*5!r945yDp`~kSQ;q#2`#QU_ggALmvL8;;;*;!; zlk^bgOdbMZ`D7AbJb6gf?X|-Uw5Uo&z0NIaGr)tk;+>yc?}657l0QLv<^1C$cj-HQ zWqa8hQ0q2!fT48!J0LU|@Nth3Q2_%7X?)EBZmyhC%fUE790Rwmoc9$WTSYEkav*gX zj@&`wW#4Reok2~d`PsJ&t?||sNa=^6+|Q0FuO4teEEY*2r>a_6jZj(Vdb`|&hM7HK z{x|GP<<(Stg#E6(#*rO4?ZXA1fyi4i87c1vxBzerV7vh-(*QOAECBcrU^jrWQ_Dp7 zq=;GvZa6SL3m_$rr0E22A;eImy+=pSG|nvV@qsBiFw?D8!}A8nnH@pHGTmvAA|+-( zD%-6auO@7%bcG#KVevLYd~thQnHgXFJq!Nbc|tX}&f zLfQ&jympn1+(OemY^Et=+cWw_^bipOcy}9MTMEg2!ePEfU<+ywQSA^+EQ4X_(`cARdj!aKLtkYd&BLFc3#a_!ol* zZnQ4py((9#j)%)8rrU5$EQ#;~gWX*~SNM4s-i(J3mvFz}qxl;I85kOJgVk9vkkV&$ zLmZWu01GZZd5{{j0jvva7tvrlq1J$hl=BCaUHH!L$8_K^-M%p=N%F;vl(1abgA-83J6vV1}+~NE6DG~5$B56-%uWN@J|y?fcls{A zW!=QLikWr;2a0ebG}puy*6hzCG4L#DWhQ!=;ps5H+usi1d;Tz=%jTH}^$+s1MXc36 zu5yvrgOpd<7UZY7*}KgB)2oBvRn^P9OdDa3AV0&++RbCN3;jEx1_#vev0o0hrPj7% zsrK>ntr@L0FgawPHO*(e=Gkdx*u%`|Z+&OrsEuML){o2hXP|v$m^b(>kB9kx3GEOn z*|qf(@qG5(`eOVF+gsl-+Zn)H4eADNBRJo7LA*5=QmT)h zl~U0XlA?5#;?^CCs!YhekbPy!ywqudLA8TwFn2IC5JE4TI`y#!tT0bA1{1@8GEsni z3oa~)CzRk+or-#`6_+YKagehKJoK1b8Y1eIRx7+ri zwN)=?zn(f^NSubU&5ouae>Avx$R?%h(yh5pkf}B{MyqbfldlAdFF~AHAo%g7j(sG0w4(b+WFa$gb)aO z9c|8ZQ*eG0pD%gzvl`kVK3iJCT$X%s1P4BOaDdR}DCO6;;jcR&19Mu*hl;pbI75Q` zTp$96qQ_%ZBkD;ciAn1fPmC1fHck= zSC?;<<;B$i?>vdL-v{M5!1sz}t~SK z?q}N!+!_pg59_cR_=AG7QLAimwnXjZ}mXWMoEp?_;*{i_n!08O+9 z|L_f{&0){Y$QjY!yIE*q8m*h5r6~~pMnw*3#sqCLJFCe%x#xTp)*TCJ>-mL9`v$AN zCnIM8D1GN*V;Vm+V{l>ppIG}=fPbGyp8>Bj=loe9Vka`IOVWC4v6qf!U67LqWSM}D?wA)B}SV}f&%VX0rF%biY4x%zs0a}<{T{FS&$#| z;lODFIFJIvf}w#N0d`kuWZ=aM@Y^G_eA%b94U8EQ4}}N(TW)dq4CH428!kBv@66O% zo6;me9=xIof8fhC;nI#dG?z-lTgRf4-Kit5$&%&>8cseFDgSaGQeFlK12_Rb2I%W8 z={XtQ>cQ;W_nI7S;l!FpS0Qd#I05`Dn42ybu2D;gD-Ux|h2x-?XDsAUArrI_CWfn} z&|5G`WP{i`;ee=;nc$ee7mfr0lLP;5a%f;~4)~VkwU4eM?+{6Cq*m7@8{{;&Ncq?` zox^<=Dk3{Mx-tX6a+2v8Z+@M29o$nfsA%As+`4r88Rwa}#LpRRkx8b`1lj+Bz`!Gd z%$fj9M*P|H%`=RLU)e4U7eOMQ$v!@_%0Y#dz+BN; z68Vi_a7Bf^A1+av{n5)M;$8j|#EGbfs}^`~L!L+nkSH))R(KS4h@@4WDfJ@%Xhdt5>-%|0C?Dww@y7#%|HFKJm&ktzg8tJW*i-Pb z2xdfjGIT9+*{5=m0f_uoH*2|nPOcBu;V{4lWIX}80lo(?u4BKrzv!MngejBG`TY{S zP2Iv+;jNcQb`Y840v9=XNo%|ad zGB__R*|Dg(MQ4>wAdG>y6n4|B(js#x-i+B@R>WRu);Cj|N18x1fIB)aEZavIam(-E zVr33eJ~o^EY1X9Kj-ae32^BsGzDkU^yMwER`nyO0k|sJ6;;P>PBat6AS6Hblu8@3eE9_G)QM# z^XSo!y*gje}P6oOmNVybFN`7;0*SiK%hY+laY^I6eFHoO1kE)-@*! zFJVv38B}l>Hm?ePt%BN#c(PSTd2_T}Tp8T`9TF32TQ#J~oqnvX6ta`(ClL2!OhPuj zEvq5Cg}9SlCBQ$1=a8}2OVWI|Ga=$AD!X1XVnn$@_qk+8*?MsTS#5v7e(By_49=*Hs~xpc+wYTyni zGfl{x%o_W9so`Z!do0k%;D;@GOG%}x@wbhLTM@XBkGK~CDDPS0pl)&nu_oZaV{Z8F zShUT$I(KxA&OO?+!$_ST3FpEd@#*HR*3HJG?pfBippr$FewMA)2Q2A%TP=jAgN=eK z&-!Za57MYqo!RyCnztCiJhmFGE36roSr()@4kZ#Qqx9z+RW6MQa-oYz%^GJ}j#G_tcSqvUfB!s4-;ELl*+8(-}sN?X;lS02C)Y|@?uyZz1kVhS3&|$Nx*Fc>mAPoE z)-uOZ)d*Ktk?TIt{wxLyo86=XJE^>BknGP^iuhx}YU3#q^7@vE>Uh=9Ak+GMe^9cl_IEvSH7Y z(R>m9#|1L_2)t#r zfhWzf%8~?b)b(&N$$)WB*1X(;xQAHvLpfzfB5iX_`Bwt+zYI<|=4FX4)t$D`^#;DZ!jYm}kwi!lnfO_m*lJtbZ`! zxYC1BA48c23Bx8JwVyv4M%sCn9bg|r2Q@MiF%_VL>ZB4s-vR0w=1#HUhjQSjB54Af zYaKY~-OxRP?9MICjFWH_8QbB|YsM-;_Q)l#$k(vhu!Z2J?ufFrH7Uo;XvGonRw|RQT+2Akx|4+8xqA^;`(J*D( ztoyq*3s00}a2EM^4}!_V+(TfZlJDK@;za|JHVaQPn}w%Jh$X~6zo@_CMk^{t-1n{V z8fb_i3yIX{AKm^a*$MD_63Gnt!nav?5}txMXi^N++)*q%Tm5URx_kePR>u@iayQmj zdMJ3H97Vqh-`5siSXlVb5}%^hOrpEkS02v8jcnJ$r4C}o zu7G0pk^ymGd|<|ua0+oM5$j|g3Z6j@+&j#?+c(U-3*51Mq*rPHK?CV~Ntp~N@s%ex z4*Y{qY8x?}xs~E)x2VKDeN-QM@?umL@dQwr#iPDV&1y$%8T6(ixW^~UFgQZ2+un;0 zIQ#vFMaqgK`Vw#9e=ap30>ATgTS19QZbr)a@LdQ{*11ubUjka8-sp*&aHb=*sH{6x zKUVUlPZ%>sIe2XLnAqQh3E-P3*$52t?xPaB1Ri1V1vYQ779V3LFV2boHbOWHes{|@ zE*=vPKOK`&Z?b<{JQP2_|HH-Sa00w%&?eSrSf*Rp14|0x3P87i`6C0qNV&)62> z0`{`4!a?%D1q8OjSJID{;AQB+N1(@1+@~?zk%P-`;Xa7r4jf#63wI=jd-LGSw{Qny zxb}l@-NL;Y!~Oo?;V8}l4Y$XT>kt0z7UAz>xRnRLx`kUG!`To1a0|CGhI{m2=oXIL zG%5`uKmTCT`o4iY8pF*xm=8Exb@64s;dt+f47O|Bty4^om9)C*z$m*I3PD$(MFS(B9Jv<+NIq5$u zOFs46DZ3uYk;Q$ke`I-$R?3GfNIyGpSrMMh)-Jmbx3GU+_BgI$`~9X9UtvG~&G=$s z_oXUCk-TR92yPBZ8kh&1%juqY^A=;Ow+@8vwSXDIf3YL&S$OsSTKhOmm91x2w&?Qm z0x4>emjyO~em)W97^rsFWT9Ql2V@`#2*~dJX$OT9b>D zJEtQhf+49|X-vf4lF68lXhsJ>cW*7(f5Ns~Tk(+BhoH%SXADNrbn@(@DW-j=4N<)yq04>1LSfFi-iraY9Q zvZB}Z%wd&qdAUA1}`#+PUe0=Wr{r+2iXYS0I z*O@ajXU;h@;Z_56;{atv62yE?A^G3`16aNEKP&ftwKZ}bl9vL^16U2Pc^$IK{{)e@ z0sgN_zsK*~@Sm6cecgXgTmS!!*?~A0z%>9bK)?0>|2qHPQMk_e-xHtrAF%x;DX>e* zy@uCBZ3syDdA(c`#iq}K==4BJWlGh%divsQL6TWt=5DN0^|%qOan&pLlHR4*{PB831ZMK4c;vQ1L{K@Y0KYPDHmC(S_fh%_y4p$(ZfdKw+dmlGn;LdYk1v;}Kvr__*X`8J9= ze}zH(gyZ8O++atJGu&orf2%H(zDCk2#84H<^|3ZQF}coMRstl;TO>RV(uTA;+JICU zbF2eQ4qQmei=N94a~X1wdPObqmFoJ_wtiKbdI^6mF#XPh>fQRN z3o%fGl$P-S3~1`q^%JeOsEVZey?Xj<`;8(U&D)O`*+~O^otVqyEuyDG6g@ssZpRFC zfXppXY(G}?2%?0ov;CnB4XbowevN;NEcW~~Lz;!sNIP&rdsCVj^B)TNEW?`Zm|yJQ z8Wnw>fx-V0m`*}JiCe!5{N~1djsLGQ$$8z)Y6ar|;kyQyGJlC|zvg87RqG<5~jmF6gtNm$|ZW%i>KXhL+;^#1KLvh>txaA)sTxctxjAN zChcLN$&IaivVU`gu7d#sR5=);>*c^9s3`TH0Y(sCesP+ncwK>6R89 zvdA>^JASx7AuDh|l$DfSr{#&9qp{=^m7{g~!y= z9!YYn`4@NTo#i#Zy0dJU5k0>KuR{8vnrrS9o9J-{zk}3@n(y8Dw#y&C z_i)WQs~hE?a}s(7g+`MVVsCmVd^LpOLZjK`KMo}wp^`Bnyeu?g351=H)8wT2dY|Zd zJ@}RzIlcoiLzeVoFiu5_gq8597lwiw^b)82hC(+B`a6F@VVAd95x?3?X#Pc%@b!KS ztG#cXkAwAp%{Nt+dLF4Ss6^!h48>=Q;rIfGr$*v)A)XkCFNAn3wDh@80i#THk$S}p z<|rPCcppizP{J1s$4eN>3cEg>D1(gOf)f5+-xk@3^Gfv_std|#fV&zD$15TJeI#B3 z@s3D*7R1j+;uR48A`-8H_+KOO84z!e#AieNSa5YnEJ)8!N9qh#RK^1GXt0*7Qodg= zr5W#}HJhARQ|NlADn6&bfMbzbRMjc*B#Pf3OyNbzEtj!M^1GZDgIrLaHepMoz?`b+ z-xb&p$)S%H*r!*;MRM(`v!RAp1i6~%w6XIdg(lx^|8doGp#qhWobh*a`l?O|a<4_F z6^)7%IPT87OZH2u-$IphB6&G?EBEE32D#s$-H zn6ybhMG8CuYmcnEr(oSZvKh&@0+;}v0N4(|0qg_749$PuiXi-JE4MA?kEz3t;c0i= zdyt^lPPERnlTpcAFmDJTex;Y<9ish)T!;DPu#af|^+;-oolt}LGkzks z*_($IQohSeN=kU$v7#2NltPxj!4Jwf~oM9hL&`}GOV(mM;`+vCFg3j*&J zJq=>UU>!=hjH$6Us z`tA?hN=RK3xOd@mM&N!6BV!VlN)UfSPj-1J{BI3Um^*0qTwKW34!~i=LI>dkG*s6(#vNwaLWb@Av!F4-` zczdMm1Ys6)!@Vt3;!3bsHtk#)l(-s1h5WmbB6&g?^NpJx^lejvHohaM{ zjbRc04K(&&B8mMi$Wn>4%sU;1x`|W-g2@0jS*(+$@`Uo{ZxK=wP-;VlM{CB0ziBtAyVu9%|}wkJrRGYLqcb(bMUWw`gpL zw?t^Xeo_vLnqW3YFy8@YSZ7b!vzwl=)Uk2Eu!7*&Xc^mJ8^Qj`cBV(Brg@&$X(dic zHv`<0X$M}QU<7b7@R`9nID9^BI@3dsZ|hF5CQN~YHl0sGNoX1TJBmI1}s^FsR==rrhvgCS*GuF$0vP}l6V}rV%V^DjO=+TRRapU2)U2sN6aEO-&-*XR# zQUiiDFp>%4n^5AA^Nu^)Mh$Q1s9}GC^!^TzV8efNj?a&CRNwN|5ZNfr6pd)!x+GBN&W$7tfhXJ=)(3FYeYq*uhWVAfn4jcd3qs*^ zua`7o)ws|w>#c`BIMbt7)S=T&5HHWc&ZnG+f80CGjrdhw7D9`+*o~6-rCuGd4XgS!C-FF8%B=}pRmym4gE!Ni#8U~E zpy12i{t*7zn*`xZZ-VE>yPc08;t zny2IYXQf!q^4`MuOpq6uo|!*2gWNKhc&d7^LsKOMn*8p4nxJHt=HA%56J z0M7%o`7z(w8x}FLmXMUU&d`3@aOSQ!tqHgrEUj86sTWm#iFOnfgA)M zO2c9P(>>|Akp7mWxf!Wy{1mq#RSV(4)YNI@AjWFihj_65EOT{a3w;hH3BIr8kMB)G zOKtb0Ny|2p=5SgWewv$>HW9*S(njW01nZix=BD$Oo3uqJleN4jND$sFdM=814}Elz zAn8KfnsH9l{S-*Swc73uFtm{9`3JWu zJyZH4(9Ceprw_57^WAViXxX2IMqGC;XYdpWzpYnn^0*fP?mKrF^CVz8+~$^OL-h14 zOLSGCrBRPuX1lcO3_V8}jpmu~XwkC~lxCTPce{bw>i};8P=++qJd^0DJ&7EzL0W0> zwCvrK1VS{%wb!Dz4YXDanx14CR0XSL<4DU(dhDW)^7b?n+O@l0*9_}O(WcLFO1n-; zI03gWvAj^4?cxN~-d`A{c%d}ab173^=N4ut8iJ{uzFdKOwj;@trHn5to#{)#!W}op}_^Ll+d|#CyaWhfSH|w z9KO*^D^yoIp*uwO)NXyY)6@2J`O^lOCDZbB`Eh-g3&Hfi6>RUJN8zETn{qG2!zdFd zJT$LEam&0`<$Nc^@`0}D>=$k{;&W%?reZLQ8rPk1TT$0($t%FxS4yK?3Zbz5g;L6O z$b$0!;=+YAFQdP5lP0heX)imOLUNv7x}X7~J$@Vejr-BkSl0t>hu0CzZ+@*wZCqtq zW)wYAaW_bE(X%Arw0&i3+%!lVcR>Ywl{3^~q}nOOFu>cookF~|K=howr($o5^y_!&e|0X+B0J(aeXKLBYJ!>mJ8bH>QrOgA2oig&X$snkR z`uk}s7;2!m_N6aG(qR9aX#SVha31GHsJ-V?WG;(Vgk%aFMKVYs2T6lx%%XsFTF7Jy zhNa0)M@P5LeDZQK=B{kMk*1@P-2*CY452+L?I*|335abJaIu>aUcl4 zcK{I`oI@z8Vy0!LOx_Z8jvL4%4J2bCMZk$@$gpJC5R+zx5t5>g z7zH<-89ewQQ4Zdr??uK$4rPkZgcFGjiBLrNPkMu*dl{AW?cP@+Qz3eO78Q0<0i^12 z(hHdi;sy=(@NKAvFfOj*WiKiq+|o5E%z7E+`nGASo_5I$3oHv{vh!qWMbGxgQT?4m zZYT9fo8-{`HDu4iY6Yh`gZT}ufQ0WFq54kevfa=OIqxa{BAD@VI|VrlT4@O9wt|fZ zUvLn!D)`n2B|jsku1R56w0ztIt|-7w6O=J3CTu|!w_-K{aJBGFhVMhrp6Kxsy#c=6 z;QaK6RykBg{2L;4y@U`kLO@E=WiEVa2IXL$5wZ`FvYelL71!$cfII0m}B+xSHdBULZdQ9WgnnL}Tq6CBp!3064B&3jKO?0|@ zxgGHICu{|>(iRc{I4QE?V_ik@8}oW2+YtCE~e&xlcibeH{xuodN8 zbN3NJJYGA+=nABsWlXjjPYJRDSw$=ZiBKHzN}Yw&B+jlqE*%Yd z6S$}If9OwQ69Fa>3;=0w9k*_ny5BW8*GO&wz$otEuyI(=T^N>$M>pRdmVm8&S)}rp z(C{eul15w*{{p}XAO#L58@W13MY6dM$YS|@r(`|9=Zmh4hON8AN5aM6qeT1ypA6!2 zVKcw$lNz#&L}-BFB1e~L?nps2)^RNb+Idex**qvc!w1$JzXei7c9hfWmgacflYt@u zX1fiH#fN>d(_<^+s-?MO1uApA?epRtO{AAGKB*?nA!Vu2C-mLmM_2+^6$11$nHxWH z#>BzCA`{-THEW^~q?`A{+s0}s8|^AGbr)~V+R;R?|MG_GBYq&%B(?z5g?@G1CnJ?w z!5eMRn650G`m;nyYG|RxXI^3!dx=>L3qS{ZToh^fWG->k)8y#;9sM znY%s8+MndXZhvrsgEF))6k)>=Dt8nPv67rRFy(%5knpKc_){o+)lt-PTGo%<)}%Q9 zIgFQhNR3&a^du-r$?f9hti1TTCUT1g3ZH{;1nP?oS$T1N*bNTiDJC0N0_(EE_IEh{ z>Y?u2Vnvn&-23>xMD9YNGJz8%LMkGAjpV+{MUNiCCW?5{eJmO>F&%5)?2=Il9n0iv z;p!)c$B62sOEe{q*ais63euMV6nIbG$V{v!l%YOS1|6enU`P( zZ#ybEDtam%RJmN01)jU_VWJ4WFI@x{A4$s$8EmwY5^!eJGly`& zM9+;-nT|hjQALAQgcxl2)|3V_ae_$Z59!L~rb8^4x&~ti$4xJK8L#556r~Qh3T>12 zm%`S-(?m}rXe}R);o`@uqVD~u@J9@xN(J|c6VNt;8f|7O$Ls1OaQ?Vkjp!if1gi11xr6L|pjr){q8$V*? zeZka<=shnBl6LuCnvL#`L$O^t6xWU8j>52@1;vSOF+t;~=EbMNv2Y&|NzZ}woUz=B31ji|+<^(j)+0eY`kFh;(a?wu`|h%7 zSf^Mf1-DEJ8}uym%fNh?;>3G$Y}7kMXg>}Y4caQLMO`A-GT)u)mPakg8pY<7n6mty zLw-qjG$tu&cQo>Q_WPw>C3rnbA1Uolhx99upGfkPpgp$E^CZP zb>_CU>{0d=RvhPQ`eSKI#|f}8k+aY|3fwsK@sSWFg9{Hi_sd5B>u9Yu5u77K@^f7?{e<2a4upn$D4=iDggN4F|u5-1I-iZo-Uf$rAe zS%M^15AeL+>w+%KSgkb+As5(K5#@W~z^w=ELC__`pq_K|H}tQ_GRFfkr+YBm)QX4Ef8ZsIccWRplZJFOVHFi^3C74&5RW>WL`D^kPUJH_;L<_Y#6fs z2%kCt9)tWOgQ6wVw7V>^9OWqBQWOd42EXTWZ+!WGr!MpcJ!)TCThQ|^-0NP4+oW@T zS%^da1fqNs3*cM0!zDYGv|nP4bZl;koi1VPZDTA?w~>|jNlSSRM;c2AIqyJ};}SP#%AjcyNPY~PnN%fNze1IQmZ-{H%X_jY=Z|oZ zA2cUgjON(lWOG48f|BOpB?((@`I}{jMP5Km(@UIviW*v#;H5?n~%# zJ9k@G82uK=69$~QN^a!T{+V%bDagAH2x$tq0wG>xO(z`sv0|s&!Y!Gqq>c;RwyAZ| zm*E{iq8gs8aQ*aU*^dJ`B!z5>GCAmJMJ+E_q%6ueI0K&B+&X<3^=p7TrZ2xgCV0V( zbH0Yny>l{>KLpSX@FhU$6eQ0E*aNT*pc}viAaC(|Qhmfsi>qW*)wj@8Vkvzil6YMx z?h?8E)3WfBT-&rVe4N7->G*vvvqEWo5~z9t;EQLG{3-a#ThvU@vqe;D!1)EHWe%jC z6caUqD;Hvqiw)g_>ACv3Q@h<@XbwzqD3zj;)OZB8a*87nQl!R1kV%*x9$M(Sm`7FT>_alpiV{TDRoBsmwlY-IQ4Brz19ka~bV1Ca{PR1)1-7!^m9n@$R z4*d@Ev9J%ypA~jPm@NDd&K-2O!d&5n-&I&4Y;|*%vVk%82PKp#E9jXS8Vl?nHTh+R*?WjmPjXi@KX` z;4)I;(Lv7}ftRNZNO?8T(FWMub8T=LI79;n?9Ko;blO1n=>Romrx1lqZA3+Fxm~x` z2kyI|XI((vh9`j;JEp@uhQ){d9_0TgTxbg|DeM*t>=Sb~t1-N6%QC}VUVwYQVxVG^ zeW2w{{cu;dA*~+q!vfr;3RQJ&;3x33Ms-NR1B=PMR+Hazf1n5qWWT2}Aj?l8Ia16V z){$8xxi$8_%ScHF@xx=LLC1s2_cSc!KX6rsW(kRL`%5)Uv42%%>7D+?2lPxG(@}Z{ zLoBv~sSkMce!s^bY3-6cSac;!; zAU+xPD6woy?+hs3t%u#mX1W5N#oU65%<(~Q!1GrhJOHw1T97uyF^0*5MceBoi}#kh z4yaPJU^P5KcwF~nz%#|y0O4F;!1FGbSvhEc-}9sZ#@nL`J9$S(x#abJ&-zxbrgA`% ztXB&tiHoTxlkN9B*2-Bb$EpSIVQ3){T3F;GMw8myxL*C}Pj&D<4kWAu)Rirqt8zi& zcV0Y}8U2I%A{>Tc?0r?^l0Wq|YzcVIdX0|;Je$1@5bou+SKWuVaGz8S!#la2s_F%6 zeR!`mu=GK63Gi`DmZ+=3W&O!Ojh(`pVA;rNTABw>V&P9t$fh$gzz( zFnw8q!Z&EzpmGe4$p%7rfJ>-ex2PWY^vK|lP03P#wZQEcam5gvqD5AzHsM0KGYWDR z`6Uoe_Ji_Ss1BKVmtcgX9QYTE#LU?bZIPQ9xs3)b(pr~Bh*U+H7lhN0KN@@# zWJc+VBvXbB1df@DlvUPbN?(T(`?;wQYY4@b)Jz1A$bp(!5O&x61;V#y6k19B=!zuE z)~pJfoHzj)G*ohNpb9C|*j~?#Hl%77C}wY6$c&BjM;^9Bhn}gx&F4vZORuLQKs-@F z&+GtVdOgpJ7{p~9_@lZ*o)+EBLq^P}wi5r90*upMG2pomloUZk)||^t0nd}YX>E8k zaV!w|>35SRb3#q}J?Wy~QwU%W2H^gL2;RSi!f&AYeZgMO91zAq&p+W>{%XiUBX42U zTfwt}`HKPy$3o7vL%;;l!-I9$m;X2L2oBl|MWYN+6h(>jSWbBwO5LJJ==vM z`ynoU))D+C?vq(Va;Nn&MxzOV=^Qe+9iJ%?vrBkFA*-PBk}WcLi_uGCE^&5p{~X|{ zA99OYr11J7++933ezvl5sE7;x<&;)P%KMvXwM6;4fI+@@z)Q;gF!#W9hFsCg%1@bM z*$f-G#@!yk`y>@~xsvU>kR58j0d4P?#l16IS9rjuvBVh~dTAO+Uys!2rn>+seV&)W z4Oxdo&oL21TWH%~g-T?>1i0)ug+ufeudiTKKdw+e488;Pna+$tulqy6Qh>CxT$3OV zGnZHJ?up#SIZA7xp>YMJ{%OT1gZg0%?<7e%?eSNH$7{3(Gz^?SN~BCT=YvACr03J5 z40Eb$FvMTCF{&-V+%(JJ|AoHn2z{mEGf*Z>!B_6gX{m;2%PYc0Cd2$?bdT#2^!3<$ zMt5`bvc38w*D@1y$}EC#qk<5@u!qaYQ>Yi+#iqs;wCSf6Nd2BW&cF#D!9Z@pwKfqt zh#zqrIRcU46E=|fxiS-;J#w4wA7XXoAm%K<#{kJK(!63gnK3_JPmdp45}v!9%A5+k z3oGGqtXExucS|5P&-;q-p#tLFB@~8d2d@Y%p_B?N&UVXpYR3)MK{FML0|()w7IT<71|wPA*Q~V1!9eA zz8IxA$Ea1TL^;3;GWRVZ)c}cZ2G0a5uNdGtu=JuYch%0V1!+7ot^o0u{G_p~&hUH{ z+4srlb8=_`E5CDV?Q2_`7}v~<|cT8V80^iQ6%;^?$-smsjvAdR%g4mwsB?cCXGolkt`UvO62ku z7UBoEMGI4tG6RyMM7L1vK=MD$NAe5vxMvqmUhsUc1Uy5z8^A}0;k|e7HleZxwlpH? zu<)3598@28;VFU69_s~FWdoEcP}qyeTbf)#avHc`N}vtI|Kw+~Nedtm`NiCzMI-yS zgJh*I(-m7*$W*6R&>%m}WtH4Ri?m~mfp%K~IMES*#Q)RUj6XzyrxEYYsLf-OG73t3 zo_T=Hti{}AU>DwmOrwD5E4fb=<>m>#UekiwOj8u}nrXwk;E?cxXBAp{9N189qxTWh z0rACL^5UuKr+q)JO*YNkM0ahW$ymQN?W>&!%zu(wy?BuH9Bf|=_tN72G3Pol1quo) znaCYooKKzZ<-T7$z*+?C3cBGAwWS~2p^Y;D>p#MVxl4m?25^Yq+bRWzOA2+mQ>r49i&UpOWl2QM zAo)T|KeoM-wt~)y_)mP)usk-W>V3AzK`9ptDN`OTjd5v~e$pu|k(Zq5M1=>9M8}3l zV8_l2OnXCD9JM1Yo>hO12LIV~OrP2DXlYy*74>cxf*a^#8N-*RIrbXk(^l2)H8tte zzMcRf&-5X zIhJM|BYF8NNiNuDK0*%8d`{nap)oBh1D*t~+--F{7qXHRC18udwk52AS1@G*tA?}C zmHd7or5aus`LruvH+`CMOrPCR%`?%jo3ty>32_a{CEBHGQ?q`t@vSaOwra^4c+Y{s zdhGA32g$_LI?Hyz_mSF0({cUP3m4rhYn$}_oG+O)OJhqiGdN?TDVIE7q_p{t_B0As zdaw=B+X)dA_+L%~*lwS!UZjctk|mU zMMS?J;6RZ+4p*+$ZtB9W}*^{?o;APOPY9(<7d=aNxUC0t4|T)(BM z&}i<`TpG18T-8$LqV~=x72ZNly{)E?O^tBW77JPVRBf?PnXiYiJYQZ>Eac}?Dq2X( zN2=mZT3IYGS+tOvUo0r{8@n~gT-FJ{a#BQeLh^7c{F?h&?yIG#^mORAb7|(dD)`9) z5$5Cq5WGpXN*isQyM#z<9q}I*^sQRjqy=9oWt_Jp4V-B|aub)Om*hrD5Ju1@_;HUj z!$cWtB4z%1(p*L)Nk5h`ZG#6}MRpn%<3eNU64BEdyyZsf_D+Pj-ODui&)mn$21#I> zV(#j)*UCN%Dr`}P#w7~7)X?iD)Oq0?LBFEQ=wIk^FN`V(KyK&XfJdnt!C7$?b}tM5 z!LNMeB!Ktrt?(3&`+WJhNx;cjl6~|t@V4*!*hqS8@06(8JLUTJ&X~mFWd-)BE5Q)x zlq5o0b;?MjBfKYcI6EbyxJeIvW=&;x!+K<*$$CP$@37|t&C%oFu#I+24LwqCgeTO` zL!O3sG+sQ{8I$x@mo#=}23M+aaP0AJT|(xCLKb)Hs2Pz{`6W1&8&~QIbz>Ws>c&6~ z^5`M9z7tWGizI5lY6JU@Vf{h6)Czjj?qnuoF z%^jj|uxaxAX?74GC*hr=nG6)eNh*5kz{AFX{3J_bDhQZ)K?>~b@IodpEc)^g{F()+ zv1*x7WhQ0&RL)}4*PWD-J84Rjgd!JBD*P4~FlAe(3(HKICfK)d>9V_whE~CB9W)P#CdNmybI042(}0EQ{;LiRL;Ux3(JCmwka@iuTMHQ%nYmO0}(uy(SO(pur=V6#io z{S@{33Myn2o^m(e-fV@}%5}}Rb=EgrV0RT@?LpUv!czssJVlQhak=?6T07pE3QaYv z9qDYm-M$QKU+M^(Xp8SL(T)P$&p5e%Jd#$p>4TXOQxd6918t;D>#a2(kXF^uDwv^j z4nZ7tnVZDR4M(~3)tPXcIA(R>cw(eJ3$-i-*->DbV1|u34^Q7ktdTe=jrEr1gM7n# z?tH@$a8CX!*b{0WLHk+U!PUvbIARF%Pl#XN#YcZY+De9&K6hqDfe#v5n+v~3B#P6O z)v4BkATdn?*B9CP|1UgN1{2+}ckxM9ec#ciwmy$uGh8dw`;rT`-NH z%K*QlCSGhx7&^KmK|3ns10FYWq+B&>WaMw$xKGv`g-JfZS=S80J=~wysMTKu`YaK8 zEp3B^pmw{-VnO`3!SMGJ?%J9$(I+CQH#zm%JiNcTYV8#qgVc(aQ*ctpRB}b@a-t@I zm2!0lw{+d!z9_YRC7#5sUSDh_dGI_8OoU4zzYVxrTCW22VcgjWuD$ivUEF68+()gF z=laT>jNsmFO}UHvFoJu%HRmqwod|As>*z4f3LQ5@kbi6~xm)nn2yR>J?7O%ZBDg17 zm*2&0iQvqwkKM&tBDfW;+wS7lL~sjRUjdxCY*?qK`c%*9WbXY(|Cu@qev)+v(Bx2- z!!rWvd`@}LQ_k&sZ1b4t$i8yH43jd77I`I^^TS>lnA&GLW$I;1r{0XgQ*WlhT8>F3 zhT9|Dj18OM)Q(B!{;@$HLtK2(kHU|&*K-+<4^Q8(Khr6nBXvm(duvs<>Spd;vac2# zGEi&D;}h{A?!e=D%qabQe-2me3}>k?uyb z=-awk3lJK5unVpRE`fSdPb^((!fkHB#?164?_g>4dF>oUkpapz>+yk4&ClX6FK_-eA*m4Ojp!RbIH}#j@ z@fkoH>f!90Qeokp-!u+WN1x;3pVVXy^2IAjUM5%v+T~%FjOaP-D6;Qwp7A8c@|6Ku z#Y`cmfGe=1G_QH82**6ph7^?U9B{a~>FIYVxzK_f1e%R?SLwVJi%u=X2%~cJK7?l$ zKC}p)twF5sAH2~D{aenh-nJbtZN9y&nu<@?A$b5`{8Zrml;)Y+GqCkf-~vMMM*=4p z?IaHD3jNWM?|t`&%P^4E!1f^MzA~HVfV&0Sz_a0!3%+snup|I-03=CCXdPI-&jGvx z@C85-;O7JAR3AlC3s7@c{U(g1+(XZevkn7`G#j7_;68vdfN=mr08#-+w;g|krr{^? zeL&I#-}m<)rWH^=1oxCL4z+O);(txAUQ)XT)h>VJA;`6Z2)GQkBhhLxq?at>7C--e z_L!AO{`n(F{^)8LCeoq9z%l})$O&%V3r7aL!;4mux`M`|5eB#=1Xy6;GInOj-;=_{ zApqB1mx86u)jO?NdINkEcJBNimr;caxd|^0&U`qi@2lh4Nuixv4KE z. } #endif // RGB_MATRIX_ENABLE -// TIMEOUTS -#ifdef IDLE_TIMEOUT_ENABLE - static uint16_t timeout_timer = 0; - static uint16_t timeout_counter = 0; //in minute intervals - static uint16_t timeout_threshold = TIMEOUT_THRESHOLD_DEFAULT; - - uint16_t get_timeout_threshold(void) { - return timeout_threshold; - } - - void timeout_reset_timer(void) { - timeout_timer = timer_read(); - timeout_counter = 0; - }; - - void timeout_update_threshold(bool increase) { - if (increase && timeout_threshold < TIMEOUT_THRESHOLD_MAX) timeout_threshold++; - if (!increase && timeout_threshold > 0) timeout_threshold--; - }; - - void timeout_tick_timer(void) { - if (timeout_threshold > 0) { - if (timer_elapsed(timeout_timer) >= 60000) { // 1 minute tick - timeout_counter++; - timeout_timer = timer_read(); - } - #ifdef RGB_MATRIX_ENABLE - if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { - rgb_matrix_disable_noeeprom(); - } - #endif - } // timeout_threshold = 0 will disable timeout - } - - __attribute__((weak)) void matrix_scan_keymap(void) {} -#endif // IDLE_TIMEOUT_ENABLE - -void matrix_scan_user(void) { - #ifdef IDLE_TIMEOUT_ENABLE - timeout_tick_timer(); - matrix_scan_keymap(); - #endif -} - #if defined(ENCODER_ENABLE) && defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality #ifndef DYNAMIC_KEYMAP_LAYER_COUNT @@ -145,11 +101,6 @@ bool encoder_update_user(uint8_t index, bool clockwise) { register_mods(MOD_BIT(KC_LALT)); } else { switch (selected_layer) { - case _FN1: - #ifdef IDLE_TIMEOUT_ENABLE - timeout_update_threshold(true); - #endif - break; default: tap_code(KC_VOLU); // Otherwise it just changes volume break; @@ -178,11 +129,6 @@ bool encoder_update_user(uint8_t index, bool clockwise) { register_mods(MOD_BIT(KC_LALT)); } else { switch (selected_layer) { - case _FN1: - #ifdef IDLE_TIMEOUT_ENABLE - timeout_update_threshold(false); - #endif - break; default: tap_code(KC_VOLD); break; @@ -213,18 +159,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else unregister_code16(keycode); break; - #ifdef IDLE_TIMEOUT_ENABLE - case RGB_TOI: - if(record->event.pressed) { - timeout_update_threshold(true); - } else unregister_code16(keycode); - break; - case RGB_TOD: - if(record->event.pressed) { - timeout_update_threshold(false); //decrease timeout - } else unregister_code16(keycode); - break; - #endif // IDLE_TIMEOUT_ENABLE #ifdef RGB_MATRIX_ENABLE case RGB_NITE: if(record->event.pressed) { @@ -259,9 +193,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef RGB_MATRIX_ENABLE rgb_matrix_enable_noeeprom(); #endif - #ifdef IDLE_TIMEOUT_ENABLE - timeout_reset_timer(); //reset activity timer - #endif } break; } @@ -278,7 +209,6 @@ void activate_numlock(bool turn_on) { // INITIAL STARTUP - __attribute__ ((weak)) void keyboard_post_init_keymap(void) {} void keyboard_post_init_user(void) { @@ -286,7 +216,4 @@ void keyboard_post_init_user(void) { #ifdef STARTUP_NUMLOCK_ON activate_numlock(true); // turn on Num lock by default so that the numpad layer always has predictable results #endif // STARTUP_NUMLOC_ON - #ifdef IDLE_TIMEOUT_ENABLE - timeout_timer = timer_read(); // set inital time for ide timeout - #endif } \ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h b/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h index 151fe19372b8..49e79054cb90 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/jonavin.h @@ -34,8 +34,6 @@ enum custom_user_keycodes { KC_00 = SAFE_RANGE, ENCFUNC, //Encoder functions KC_WINLCK, //Toggles Win key on and off - RGB_TOI, //Timeout idle time up - RGB_TOD, //Timeout idle time down RGB_NITE, //Turns off all rgb but allow rgb indicators to work NMR, //Move window to monitor on right NML //Move window to monitor on left @@ -61,27 +59,10 @@ enum custom_user_keycodes { #ifdef RGB_MATRIX_ENABLE -//RGB custom colours - #define RGB_GODSPEED 0x00, 0xE4, 0xFF // colour for matching keycaps - #define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Nautilus Font colours - void activate_rgb_nightmode (bool turn_on); bool get_rgb_nightmode(void); #endif -// IDLE TIMEOUTS -#ifdef IDLE_TIMEOUT_ENABLE - #define TIMEOUT_THRESHOLD_DEFAULT 5 // default timeout minutes - #define TIMEOUT_THRESHOLD_MAX 140 // upper limits (2 hours and 10 minutes -- no rgb indicators above this value) - - //prototype functions - uint16_t get_timeout_threshold(void); - void timeout_reset_timer(void); - void timeout_update_threshold(bool increase); - void timeout_tick_timer(void); -#endif //IDLE_TIMEOUT_ENABLE - - // OTHER FUNCTION PROTOTYPE void activate_numlock(bool turn_on); diff --git a/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c index bba76349175d..97d30b0cf9c2 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/solartempest/keymap.c @@ -43,7 +43,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_VAI, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, RESET, KC_HOME, KC_CAPS, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, - _______, _______, RGB_HUI, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, + _______, _______, RGB_HUI, _______, _______, _______, KC_NLCK, _______, _______, _______, _______, _______, RGB_MOD, _______, _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI ), @@ -114,18 +114,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { for (uint8_t i=0; i= 140 minutes, just show these 3 lights - rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_RED); - rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_RED); - rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_RED); - }*/ break; case _LOWER: for (uint8_t i=0; i Date: Tue, 30 Nov 2021 09:31:04 +0800 Subject: [PATCH 088/155] Update keyboards/keychron/q1/rev_0101/rev_0101.c Co-authored-by: Drashna Jaelre --- keyboards/keychron/q1/rev_0101/rev_0101.c | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/keychron/q1/rev_0101/rev_0101.c b/keyboards/keychron/q1/rev_0101/rev_0101.c index 387e44876291..4c8f0238c34b 100644 --- a/keyboards/keychron/q1/rev_0101/rev_0101.c +++ b/keyboards/keychron/q1/rev_0101/rev_0101.c @@ -16,6 +16,7 @@ #include "quantum.h" +#ifdef RGB_MATRIX_ENABLE #ifdef RGB_MATRIX_ENABLE const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL] = { /* Refer to IS31 manual for these locations From 9dc4969977448056fd203ea9b9cd5b7e4a2cd670 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 30 Nov 2021 09:41:42 +0800 Subject: [PATCH 089/155] Update config.h --- keyboards/keychron/q1/config.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/keyboards/keychron/q1/config.h b/keyboards/keychron/q1/config.h index c895fa672a0f..1d32ea41bdb2 100644 --- a/keyboards/keychron/q1/config.h +++ b/keyboards/keychron/q1/config.h @@ -16,7 +16,6 @@ #pragma once - /* USB Device descriptor parameter */ #define VENDOR_ID 0x3434 #define MANUFACTURER Keychron @@ -63,4 +62,4 @@ #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS #define DISABLE_RGB_MATRIX_HUE_BREATHING #define DISABLE_RGB_MATRIX_HUE_PENDULUM -#define DISABLE_RGB_MATRIX_HUE_WAVE \ No newline at end of file +#define DISABLE_RGB_MATRIX_HUE_WAVE From 0876eda3ca9ef6906cfc7e2fde6044dbfc38a290 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 30 Nov 2021 09:49:07 +0800 Subject: [PATCH 090/155] Update config.h --- keyboards/keychron/q1/config.h | 63 ++++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 15 deletions(-) diff --git a/keyboards/keychron/q1/config.h b/keyboards/keychron/q1/config.h index 1d32ea41bdb2..0bc02a228e42 100644 --- a/keyboards/keychron/q1/config.h +++ b/keyboards/keychron/q1/config.h @@ -48,18 +48,51 @@ /* turn off effects when suspended */ #define RGB_DISABLE_WHEN_USB_SUSPENDED -/* Disable a single effect */ -#define DISABLE_RGB_MATRIX_ALPHAS_MODS -#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN -#define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT -#define DISABLE_RGB_MATRIX_BAND_SAT -#define DISABLE_RGB_MATRIX_BAND_VAL -#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT -#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL -#define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT -#define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL -#define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS -#define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS -#define DISABLE_RGB_MATRIX_HUE_BREATHING -#define DISABLE_RGB_MATRIX_HUE_PENDULUM -#define DISABLE_RGB_MATRIX_HUE_WAVE +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +// #define ENABLE_RGB_MATRIX_ALPHAS_MODS +// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_BREATHING +// #define ENABLE_RGB_MATRIX_BAND_SAT +// #define ENABLE_RGB_MATRIX_BAND_VAL +// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +#define ENABLE_RGB_MATRIX_CYCLE_ALL +#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +#define ENABLE_RGB_MATRIX_DUAL_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_BEACON +// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +#define ENABLE_RGB_MATRIX_RAINDROPS +// #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +// #define ENABLE_RGB_MATRIX_HUE_BREATHING +// #define ENABLE_RGB_MATRIX_HUE_PENDULUM +// #define ENABLE_RGB_MATRIX_HUE_WAVE +// #define ENABLE_RGB_MATRIX_PIXEL_RAIN +// #define ENABLE_RGB_MATRIX_PIXEL_FLOW +// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP +#define ENABLE_RGB_MATRIX_DIGITAL_RAIN +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +#define ENABLE_RGB_MATRIX_SPLASH +#define ENABLE_RGB_MATRIX_MULTISPLASH +#define ENABLE_RGB_MATRIX_SOLID_SPLASH +#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH From 03194afcd0190a77e84aef739ec2e24f3a87db3d Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 30 Nov 2021 09:51:18 +0800 Subject: [PATCH 091/155] Update config.h --- keyboards/keychron/q1/config.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/keyboards/keychron/q1/config.h b/keyboards/keychron/q1/config.h index 0bc02a228e42..62d2b3e98565 100644 --- a/keyboards/keychron/q1/config.h +++ b/keyboards/keychron/q1/config.h @@ -45,9 +45,6 @@ /* NKRO */ #define FORCE_NKRO -/* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED - // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects From a70e66c37d498075a6399cecaae579e33a702c07 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Tue, 30 Nov 2021 20:32:33 -0500 Subject: [PATCH 092/155] Optimized layer lighting and updated OLED WPM. Much more space efficient. --- keyboards/solartempest/sofle/config.h | 10 +- .../solartempest/sofle/keymaps/via/bongocat.c | 12 +- .../solartempest/sofle/keymaps/via/keymap.c | 57 +- .../solartempest/sofle/keymaps/via/luna.c | 7 +- .../solartempest/sofle/keymaps/via/snakey.c | 16 +- .../sofle/keymaps/via/snakey_minimal.c | 8 +- keyboards/solartempest/sofle/rules.mk | 2 +- .../sofle/sofle VIA layout trackball.json | 2 +- .../sofle/solartempest_sofle_via.hex | 3532 ++++++++--------- 9 files changed, 1797 insertions(+), 1849 deletions(-) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index 2c62293e841d..b86f2d64ab00 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -83,13 +83,15 @@ #define OLED_TIMEOUT 80000 //80000 = 80secs, 120000 = 2mins in ms. #define OLED_BRIGHTNESS 90 //Default is 100. #define SPLIT_OLED_ENABLE //Synx on/off OLED state between halves (+100). - //#define SPLIT_WPM_ENABLE //Enable WPM across split keyboards (+106-268). + #ifdef WPM_ENABLE + #define SPLIT_WPM_ENABLE //Enable WPM across split keyboards (+106-268). + #endif //#define SPLIT_LAYER_STATE_ENABLE //Keep on master to save space (+142). //#define SPLIT_LED_STATE_ENABLE //Keep on master to save space (+112). //#define SPLIT_MODS_ENABLE //Keep on master to save space (+138). #define OLED_LOGO //Enable to print snakey custom logo on slave side (+108). - //#define OLED_NO_SLAVE //Enable for snakey keyboard pet code to not render slave OLED (-160). - #define SNEAK_DISABLE //Disable snakey keyboard pet sneak animation to save space (-132). + //#define OLED_NO_SLAVE //Disable snakey keyboard pet slave OLED rendering (-160). + //#define SNEAK_DISABLE //Disable snakey keyboard pet sneak animation to save space (-132). #endif // Haptic feedback settings @@ -128,7 +130,7 @@ //#define RGBLIGHT_ANIMATIONS // Very memory intensive (+2604) #define RGBLIGHT_EFFECT_STATIC_GRADIENT //Preferred RGB effect (+262) #define RGBLIGHT_LIMIT_VAL 160 //Power draw may still exceed the USB limitations of 0.6A at max brightness with white colour with this setting. - #define RGBLIGHT_LAYERS //Enable layer light indicators + //#define RGBLIGHT_LAYERS //Enable layer light indicators. Not required as updates are done in layer_state_set_user and led_update_user (+588). #define RGBLIGHT_SLEEP //Turn off LEDs when computer sleeping (+72) //RGB LED Conversion macro from physical array to electric array (+146). This results in better looking animated effects. diff --git a/keyboards/solartempest/sofle/keymaps/via/bongocat.c b/keyboards/solartempest/sofle/keymaps/via/bongocat.c index 093736b7a196..76d7525d91c8 100644 --- a/keyboards/solartempest/sofle/keymaps/via/bongocat.c +++ b/keyboards/solartempest/sofle/keymaps/via/bongocat.c @@ -4,7 +4,7 @@ Check out their post and other work! https://github.com/foureight84/qmk_firmware/tree/sofle_foureight84 */ #ifdef OLED_ENABLE -char wpm_str[4]; +uint32_t oled_timer = 0; //OLED timeout led_t led_usb_state; static void print_status_narrow(void) { @@ -201,13 +201,19 @@ static void render_anim(void) { bool oled_task_user(void) { led_usb_state = host_keyboard_led_state(); if (is_keyboard_master()) { + if (timer_elapsed32(oled_timer) > 30000) { + oled_off(); + return false; + } else { + oled_on(); + } print_status_narrow(); } else { oled_set_cursor(0,1); render_anim(); oled_set_cursor(0,13); - sprintf(wpm_str, " %03d\n WPM", get_current_wpm()); - oled_write(wpm_str, false); + oled_write_P(PSTR("WPM: "), false); + oled_write(get_u8_str(get_current_wpm(), ' '), false); } return false; } diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index 08840a31fe0f..de017b357bad 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -28,7 +28,6 @@ //#include "bongocat.c" //OLED code for Bongocat, original code by foureight84. //#include "luna.c" //OLED code for Luna, original code by Hellsingcoder and adapted by Jackasaur. //#include "snakey.c" //OLED code for Snakey, customized from Luna. If not used, do not use OLED_LOGO in config.h. - //#include //This is required for OLED sprintf (should not be required anymore since sprintf removed from my code). #include "snakey_minimal.c" //OLED code for Snakey, without WPM/related animations to save space. If not used, do not use OLED_LOGO in config.h. #endif @@ -387,46 +386,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { DRV_pulse(49); //buzz_60 } #endif - } return true; } -#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS) - //LED Lock keys status indicators are used since the sofle doesn't have dedicated LEDS for this. - //Note 1: These will assign static colour and brightness to the LED range specified. - //Note 2: Base layer0 is required for lock layers to work, even if range for static LED colours is set to 0,0. - const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); //Static RGB colour is ignored as range is 0,0. - const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 252,255,125}); - const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 95,255,90}); - const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 128,255,100}); - const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 0, 215,255,120}); - const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 3, 43,100,170}); //White-left caps lock indication - const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({28, 3, 43,100,170}); //White-right num lock indication. Since this indicator is inverted, it must be on the master side of the keyboard to shut off properly when the computer is sleeping. - const rgblight_segment_t PROGMEM my_scrollock_layer[] = RGBLIGHT_LAYER_SEGMENTS({55, 3, 43,100,170}); //White-middle-right scroll lock indication - const rgblight_segment_t *const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( //Lighting layers - my_layer0_layer, //Base layer with no indications - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_layer4_layer, - my_capslock_layer, //Highest status indicators override other layers - my_numlock_layer, - my_scrollock_layer - ); -#endif - -#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS) - layer_state_t layer_state_set_user(layer_state_t state) //Use for layer lighting. This is independent from lock key LED indicators. +#ifdef RGBLIGHT_ENABLE + layer_state_t layer_state_set_user(layer_state_t state) //Use for layer lighting. This method uses less space than RGBLIGHT_LAYER_SEGMENTS. { - rgblight_set_layer_state(0, layer_state_cmp(state, 0)); - rgblight_set_layer_state(1, layer_state_cmp(state, 1)); - rgblight_set_layer_state(2, layer_state_cmp(state, 2)); - rgblight_set_layer_state(3, layer_state_cmp(state, 3)); - rgblight_set_layer_state(4, layer_state_cmp(state, 4)); - - switch(biton32(state)){ // Change all other LEDs based on layer state as well + switch (get_highest_layer(state)) { // Change all other LEDs based on layer state as well case 0: rgblight_sethsv_noeeprom(50,255,80); #ifdef POINTING_DEVICE_ENABLE @@ -471,12 +439,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return state; } - - bool led_update_user(led_t led_state) + + bool led_update_user(led_t led_state) //Lock key status indicators { - rgblight_set_layer_state(5, led_state.caps_lock); //Activate capslock lighting layer - rgblight_set_layer_state(6, !(led_state.num_lock)); //Invert the indication so numlock does not always appear "on". - rgblight_set_layer_state(7, led_state.scroll_lock); //Activate scrollock lighting layer + if(led_state.caps_lock){ + rgblight_sethsv_range(43,100,170, 4,7); //White-left caps lock indication + } + if(!(led_state.num_lock)){ + rgblight_sethsv_range(43,100,170, 28,31); //White-right num lock indication. Since this indicator is inverted, it must be on the master side of the keyboard to shut off properly when the computer is sleeping. + } + if(led_state.scroll_lock){ + rgblight_sethsv_range(43,100,170, 16,19); //White-middle scroll lock indication + } return true; } #endif @@ -487,9 +461,6 @@ void keyboard_post_init_user(void) #ifdef RGBLIGHT_ENABLE rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 #endif - #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS) - rgblight_layers = my_rgb_layers; //Enable LED layer lighting - #endif layer_move(0); //Start on layer0 by default to set LED colours. Can remove to save a very small amount of space. #ifdef POINTING_DEVICE_ENABLE pimoroni_trackball_set_precision(1.75); //Start trackball with lower precision mode diff --git a/keyboards/solartempest/sofle/keymaps/via/luna.c b/keyboards/solartempest/sofle/keymaps/via/luna.c index d19eda64cad0..31055609c26b 100644 --- a/keyboards/solartempest/sofle/keymaps/via/luna.c +++ b/keyboards/solartempest/sofle/keymaps/via/luna.c @@ -225,12 +225,9 @@ oled_write("TMPST", false); /* wpm counter */ - char wpm_str[8]; oled_set_cursor(0,10); - sprintf(wpm_str, " %03d", current_wpm_read); - oled_write(wpm_str, false); - oled_set_cursor(0,11); - oled_write(" wpm", false); + oled_write_P(PSTR("WPM: "), false); + oled_write(get_u8_str(get_current_wpm(), ' '), false); } static void print_status_narrow(void) { diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey.c b/keyboards/solartempest/sofle/keymaps/via/snakey.c index 3485f880a7f7..c456e47a9326 100644 --- a/keyboards/solartempest/sofle/keymaps/via/snakey.c +++ b/keyboards/solartempest/sofle/keymaps/via/snakey.c @@ -238,14 +238,9 @@ #endif /* wpm counter */ - char wpm_str[8]; oled_set_cursor(0,13); - //sprintf(wpm_str, " %03d", current_wpm_read); //Replaced with two lines of code below to save space. oled_write_P(PSTR("WPM: "), false); oled_write(get_u8_str(get_current_wpm(), ' '), false); - oled_write(wpm_str, false); - oled_set_cursor(0,14); - oled_write(" wpm", false); } #endif @@ -293,7 +288,7 @@ oled_write("Scrl", led_usb_state.scroll_lock); /* KEYBOARD PET RENDER START */ - render_luna(0,13); + render_luna(0,12); /* KEYBOARD PET RENDER END */ } @@ -306,17 +301,14 @@ current_wpm_read = get_current_wpm(); /* KEYBOARD PET VARIABLES END */ led_usb_state = host_keyboard_led_state(); - - if (is_keyboard_master()) { //Drashna's OLED timeout off code for animations - if (timer_elapsed32(oled_timer) > 30000) { + + if (is_keyboard_master()) { + if (timer_elapsed32(oled_timer) > 30000) {//OLED timeout 30000ms = 30s oled_off(); return false; } else { oled_on(); } - } - - if (is_keyboard_master()) { print_status_narrow(); } else { print_logo_narrow(); diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c b/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c index 37a533938ab6..99600c046eb1 100644 --- a/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c +++ b/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c @@ -231,16 +231,14 @@ bool oled_task_user(void) { led_usb_state = host_keyboard_led_state(); - if (is_keyboard_master()) { //OLED timeout 30000ms = 30s - if (timer_elapsed32(oled_timer) > 30000) { + + if (is_keyboard_master()) { + if (timer_elapsed32(oled_timer) > 30000) {//OLED timeout 30000ms = 30s oled_off(); return false; } else { oled_on(); } - } - - if (is_keyboard_master()) { print_status_narrow(); } else { #ifndef OLED_NO_SLAVE diff --git a/keyboards/solartempest/sofle/rules.mk b/keyboards/solartempest/sofle/rules.mk index a72ebd90003e..9d29739aae44 100644 --- a/keyboards/solartempest/sofle/rules.mk +++ b/keyboards/solartempest/sofle/rules.mk @@ -22,7 +22,7 @@ COMBO_ENABLE = no # Tap combo chording (+952) OLED_ENABLE = yes # Must be disabled if OLEDs are not installed (+3608-4774 with pet) OLED_DRIVER = SSD1306 # Specify OLED driver -WPM_ENABLE = no # WPM counter for typing-speed-reactive keyboard pets (+1298) +WPM_ENABLE = no # WPM counter for typing-speed-reactive keyboard pets (+782) POINTING_DEVICE_ENABLE = yes # Enable Pimoroni Trackball on master (+2304) POINTING_DEVICE_DRIVER = pimoroni_trackball diff --git a/keyboards/solartempest/sofle/sofle VIA layout trackball.json b/keyboards/solartempest/sofle/sofle VIA layout trackball.json index c8673f835d02..c8e387509ab5 100644 --- a/keyboards/solartempest/sofle/sofle VIA layout trackball.json +++ b/keyboards/solartempest/sofle/sofle VIA layout trackball.json @@ -355,7 +355,7 @@ "USER05", "USER06", "USER02", - "KC_TRNS", + "KC_SLCK", "KC_TRNS", "KC_WWW_REFRESH", "KC_TRNS", diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index 53e65b8de97e..3e4f7bc4f42c 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,1779 +1,1761 @@ -:100000000C94E9050C9430060C9430060C945E3385 -:100010000C9430060C9430060C9430060C94300688 -:100020000C9430060C9430060C941B240C94D723AB -:100030000C9414290C9430060C9430060C94300661 -:100040000C9430060C9430060C9430060C94300658 -:100050000C9430060C94F4240C9430060C94300666 -:100060000C9430060C9430060C9430060C94300638 -:100070000C9430060C9430060C9430060C94300628 -:100080000C9430060C9430060C9430060C94300618 -:100090000C9430060C9430060C9430060C94300608 -:1000A0000C9430060C9430060C94300637032B6405 -:1000B000AAFF000000001C032B64AAFF0000000040 -:1000C00004032B64AAFF000000000000D7FF78FFA4 -:1000D00000000000000080FF64FF0000000000003E -:1000E0005FFF5AFF000000000000FCFF7DFF0000E2 -:1000F000000000005FFF5AFF000000000501090238 -:10010000A10185020901A1000509190129081500AD -:100110002501950875018102050109300931158114 -:10012000257F95027508810609381581257F95017F -:1001300075088106050C0A38021581257F95017521 -:10014000088106C0C005010980A101850319012AA3 -:10015000B700150126B700950175108100C0050C88 -:100160000901A101850419012AA002150126A00296 -:10017000950175108100C00660FF0961A101096247 -:10018000150026FF009520750881020963150026D9 -:10019000FF00952075089102C005010906A101051F -:1001A0000719E029E71500250195087501810295D9 -:1001B00001750881010507190029FF150026FF00B8 -:1001C0009506750881000508190129059505750131 -:1001D0009102950175039101C0000000000000002C -:1001E000000000000000000000000000000000000F -:1001F000000000000000000000000000007E0F0072 -:10020000D4FFFFFFC70000007800000000000000DE -:10021000002A2B2800000000000000000000000061 -:100220000000000029000000002C1E3420212224A0 -:10023000342627252E362D3738271E1F202122232E -:100240002425263333362E37381F040506070809C0 -:100250000A0B0C0D0E0F1011121314151617181986 -:100260001A1B1C1D2F3130232D35040506070809E4 -:100270000A0B0C0D0E0F1011121314151617181966 -:100280001A1B1C1D2F3130354C00DA02815AD9F16E -:10029000DB20A4A62EAF00A0C000A1C800AED58070 -:1002A000A81FD300408D142000F200E800DE00D427 -:1002B00000CA00C000B600AC000000000000000052 -:1002C0000000000000E0F0F0F8F8CCCCF8F8F0F016 -:1002D00060000000000000000000000000000000BE -:1002E00000000000000F3F7FFCF9F1E1C181000038 -:1002F00000000000000000000000000000000000FE -:100300000C387060E0E0F0F0F8F9FFFFFFFFFF7ECF -:100310001C000000000000000000000000000000C1 -:100320000000000000E0F0F0F8F8CCCCF8F8F0F0B5 -:10033000600000000000000000000000000000005D -:1003400000000000000F3F7FFCF9F1E1C1810000D7 -:10035000010102060C040000000000000000000083 -:1003600000387C60E0E0F0F0F8F9FFFFFFFFFF7E6F -:100370001C00000000000000000000000000000061 -:1003800080C0C0E0E03070E0E0C0C080000000004D -:100390000000000000000000000000000000001F3E -:1003A0007FFFFFE7E7EFEFCFCB8383010000000083 -:1003B00000000000000000000000000000061C38E3 -:1003C00078F1E3E3E7F7F7FFFFFFFF7F3E00000070 -:1003D000000000000000000000000000000000001D -:1003E0000000000000000000000000000080C0E0ED -:1003F000E060E0C0C080800000000000000000005D -:100400000000000020F8FEFFFFFF9F0F0E1F1F3FA0 -:100410003F7EE683030F43439088080000031E3CA1 -:1004200078F0E0E0F0F0FBFFFFFF7F7F3800000096 -:100430000000000000000000000000000004F6B80A -:10044000F8D8F0E0C000000080C0E0E0F0F0F0F08C -:10045000E0E0C080000000000000000080C0E1F388 -:10046000FB7F1F0F0000F0FFFF3F03010000008033 -:10047000C1F3FF7F1F000080C0E0301E3F3F7FF9C7 -:10048000F0F070783C3F1F0F03000000001C3F7F1E -:100490007FFBF1F0783C1E0F030000000101010119 -:1004A000010101010102020202020202020203032F -:1004B00003030303030304040404040404050505FF -:1004C00005050606060606070707070708080808C1 -:1004D000090909090A0A0A0B0B0B0C0C0C0D0D0D6E -:1004E0000E0E0E0F0F0F1010111111121213131404 -:1004F00014151516161717181819191A1A1B1B1C7C -:100500001D1D1E1E1F2020212222232424252626D5 -:10051000272829292A2B2C2D2D2E2F30313232330A -:100520003435363738393A3B3C3D3E3F4041424313 -:100530004445464748494A4C4D4E4F5051535455F7 -:100540005658595A5B5D5E5F616264656668696BA7 -:100550006C6D6F7072737577787A7B7D7E80828325 -:100560008587888A8C8E8F91939596989A9C9EA069 -:10057000A2A3A5A7A9ABADAFB1B3B5B7BABCBEC076 -:10058000C2C4C6C9CBCDCFD1D4D6D8DBDDDFE2E43F -:10059000E7E9EBEEF0F3F5F8FAFDFFFFAA7F55402F -:1005A0001C1004010D190A24232221201F1E1D1BCB -:1005B0001A18171615141312110F0E0C0B09080731 -:1005C00006050302002D3945483C303F25262728E3 -:1005D000292A2B2C2E2F31323334353637383A3BFB -:1005E0003D3E404142434446474907087F080700D3 -:1005F0003E5B4F5B3E003E6B4F6B3E001C3E7C3EC5 -:100600001C00183C7E3C18001C577D571C001C5ECB -:100610007F5E1C0000183C180000FFE7C3E7FF00E6 -:10062000001824180000FFE7DBE7FF0030483A0617 -:100630000E00262979292600407F05050700407F06 -:1006400005253F005A3CE73C5A007F3E1C1C080031 -:10065000081C1C3E7F0014227F2214005F5F005F95 -:100660005F0006097F017F00006689956A0060606F -:100670006060600094A2FFA2940008047E04080059 -:1006800010207E20100008082A1C0800081C2A08D8 -:1006900008001E10101010000C1E0C1E0C0030382C -:1006A0003E383000060E3E0E06000000000000003E -:1006B00000005F000000000700070000147F147FA7 -:1006C0001400242A7F2A120023130864620036498A -:1006D00056205000000807030000001C22410000C3 -:1006E0000041221C00002A1C7F1C2A0008083E082A -:1006F00008000080703000000808080808000000AA -:10070000606000002010080402003E5149453E0090 -:1007100000427F4000007249494946002141494D4D -:1007200033001814127F10002745454539003C4A14 -:10073000494931004121110907003649494936002C -:10074000464949291E000000140000000040340002 -:100750000000000814224100141414141400004175 -:10076000221408000201590906003E415D594E005D -:100770007C1211127C007F49494936003E414141BB -:1007800022007F4141413E007F49494941007F09A4 -:10079000090901003E41415173007F0808087F00AC -:1007A00000417F4100002040413F01007F081422AA -:1007B00041007F40404040007F021C027F007F04D8 -:1007C00008107F003E4141413E007F0909090600B3 -:1007D0003E4151215E007F091929460026494949B9 -:1007E000320003017F0103003F4040403F001F20D3 -:1007F00040201F003F4038403F006314081463004E -:100800000304780403006159494D4300007F4141CE -:100810004100020408102000004141417F00040211 -:10082000010204004040404040000003070800006F -:100830002054547840007F284444380038444444CD -:100840002800384444287F003854545418000008C5 -:100850007E09020018A4A49C78007F080404780094 -:1008600000447D4000002040403D00007F102844AF -:10087000000000417F4000007C04780478007C0880 -:1008800004047800384444443800FC182424180038 -:1008900018242418FC007C0804040800485454540C -:1008A000240004043F4424003C4040207C001C20E1 -:1008B00040201C003C4030403C00442810284400AC -:1008C0004C9090907C004464544C440000083641A5 -:1008D000000000007700000000413608000002011F -:1008E000020402003C2623263C0000000000000019 -:1008F000404040F0F8F8FF38FFF8F83FF8F8FF38CC -:10090000FFF8F8F040404000000000000080C0C048 -:10091000C0800000C0C08000000080C0C000C0C017 -:10092000000080C0C00000000000C0C0C0C0C00007 -:10093000C0C0000000000000000000000000000037 -:1009400000000000000000000000000000000000A7 -:100950000000000000000000000000000000000097 -:10096000000000000000000000C0F0F8FC3E1E0681 -:10097000010000007F4141417F007F4141417F00F4 -:100980000080C0E07E5B4F5BFEC00000C000DCD793 -:10099000DEDEDED7DC00C00000000000000000004A +:100000000C9418060C945F060C945F060C94CE3288 +:100010000C945F060C945F060C945F060C945F06CC +:100020000C945F060C945F060C9494230C9450235C +:100030000C9487280C945F060C945F060C945F0662 +:100040000C945F060C945F060C945F060C945F069C +:100050000C945F060C946D240C945F060C945F0660 +:100060000C945F060C945F060C945F060C945F067C +:100070000C945F060C945F060C945F060C945F066C +:100080000C945F060C945F060C945F060C945F065C +:100090000C945F060C945F060C945F060C945F064C +:1000A0000C945F060C945F060C945F060501090230 +:1000B000A10185020901A1000509190129081500FE +:1000C0002501950875018102050109300931158165 +:1000D000257F95027508810609381581257F9501D0 +:1000E00075088106050C0A38021581257F95017572 +:1000F000088106C0C005010980A101850319012AF4 +:10010000B700150126B700950175108100C0050CD8 +:100110000901A101850419012AA002150126A002E6 +:10012000950175108100C00660FF0961A101096297 +:10013000150026FF00952075088102096315002629 +:10014000FF00952075089102C005010906A101056F +:100150000719E029E7150025019508750181029529 +:1001600001750881010507190029FF150026FF0008 +:100170009506750881000508190129059505750181 +:100180009102950175039101C0000000000000007C +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000007E0F00C2 +:1001B000D4FFFFFFC700000078000000000000002F +:1001C000002A2B28000000000000000000000000B2 +:1001D0000000000029000000002C1E3420212224F1 +:1001E000342627252E362D3738271E1F202122237F +:1001F0002425263333362E37381F04050607080911 +:100200000A0B0C0D0E0F10111213141516171819D6 +:100210001A1B1C1D2F3130232D3504050607080934 +:100220000A0B0C0D0E0F10111213141516171819B6 +:100230001A1B1C1D2F3130354C00DA02815AD9F1BE +:10024000DB20A4A62EAF00A0C000A1C800AED580C0 +:10025000A81FD300408D1420000000000000000003 +:10026000000000E0F0F0F8F8CCCCF8F8F0F0600016 +:10027000000000000000000000000000000000007E +:100280000000000F3F7FFCF9F1E1C1810000000098 +:1002900000000000000000000000000000000C381A +:1002A0007060E0E0F0F0F8F9FFFFFFFFFF7E1C0058 +:1002B000000000000000000000000000000000003E +:1002C000000000E0F0F0F8F8CCCCF8F8F0F06000B6 +:1002D000000000000000000000000000000000001E +:1002E0000000000F3F7FFCF9F1E1C1810000010136 +:1002F00002060C04000000000000000000000038AE +:100300007C60E0E0F0F0F8F9FFFFFFFFFF7E1C00EB +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:10033000000000000000000000000000CCF8700089 +:100340000000000000C0F0F8F87CFCEEE6FCFC7851 +:1003500078B00000000000000000003F7FF1F8F8D6 +:100360007C7CF8F0F0F1E7EFEFFEFEFEFCFCF8F02D +:100370006000010306020000000000000000000011 +:10038000000000000000000000000000000000006D +:10039000000000000000000000000080E0F81C00E9 +:1003A0000000000000C0F0F8F87CFCEEE6FCFC78F1 +:1003B00078300000000000000000003F7FF0F8F8F7 +:1003C0007C7CF8F0F0F1E7EFEFFEFEFEFCFCF8F0CD +:1003D000600000000000000000000000000080C07D +:1003E000C0E0E03070E0E0C0C0800000000000002D +:1003F000000000000000000000000000001F7FFF60 +:10040000FFE7E7EFEFCFCB838301000000000000A0 +:100410000000000000000000000000061C3878F119 +:10042000E3E3E7F7F7FFFFFFFF7F3E000000000078 +:1004300000000000000000000000000000000000BC +:10044000000000000000000000000080C0E0E0604C +:10045000E0C0C0808000000000000000000000003C +:10046000000020F8FEFFFFFF9F0F0E1F1F3F3F7E83 +:10047000E683030F43439088080000031E3C78F096 +:10048000E0E0F0F0FBFFFFFF7F7F3800000000009E +:10049000000000000000000000000004F6B8F8D8DA +:1004A000F0E0C000000080C0E0E0F0F0F0F0E0E03C +:1004B000C080000000000000000080C0E1F3FB7F6E +:1004C0001F0F0000F0FFFF3F030100000080C1F399 +:1004D000FF7F1F000080C0E0301E3F3F7FF9F0F03B +:1004E00070783C3F1F0F03000000001C3F7F7FFB24 +:1004F000F1F0783C1E0F0300000001010101010131 +:1005000001010102020202020202020203030303CA +:10051000030303030404040404040405050505059A +:100520000606060606070707070708080808090958 +:1005300009090A0A0A0B0B0B0C0C0C0D0D0D0E0E03 +:100540000E0F0F0F10101111111212131314141596 +:100550001516161717181819191A1A1B1B1C1D1D0A +:100560001E1E1F2020212222232424252626272860 +:1005700029292A2B2C2D2D2E2F3031323233343590 +:10058000363738393A3B3C3D3E3F40414243444593 +:10059000464748494A4C4D4E4F5051535455565872 +:1005A000595A5B5D5E5F616264656668696B6C6D1C +:1005B0006F7072737577787A7B7D7E808283858792 +:1005C000888A8C8E8F91939596989A9C9EA0A2A3D0 +:1005D000A5A7A9ABADAFB1B3B5B7BABCBEC0C2C4D5 +:1005E000C6C9CBCDCFD1D4D6D8DBDDDFE2E4E7E995 +:1005F000EBEEF0F3F5F8FAFDFFFFAA7F55401C1073 +:1006000004010D190A24232221201F1E1D1B1A1864 +:10061000171615141312110F0E0C0B0908070605F7 +:100620000302002D3945483C303F25262728292A3A +:100630002B2C2E2F31323334353637383A3B3D3E72 +:10064000404142434446474907087F0807003E5B54 +:100650004F5B3E003E6B4F6B3E001C3E7C3E1C00E1 +:10066000183C7E3C18001C577D571C001C5E7F5EAA +:100670001C0000183C180000FFE7C3E7FF0000184B +:1006800024180000FFE7DBE7FF0030483A060E00C1 +:10069000262979292600407F05050700407F05258A +:1006A0003F005A3CE73C5A007F3E1C1C0800081CD7 +:1006B0001C3E7F0014227F2214005F5F005F5F00FA +:1006C00006097F017F00006689956A0060606060AE +:1006D000600094A2FFA2940008047E040800102089 +:1006E0007E20100008082A1C0800081C2A080800A0 +:1006F0001E10101010000C1E0C1E0C0030383E385E +:100700003000060E3E0E0600000000000000000053 +:100710005F000000000700070000147F147F140032 +:10072000242A7F2A120023130864620036495620C7 +:100730005000000807030000001C22410000004197 +:10074000221C00002A1C7F1C2A0008083E08080002 +:100750000080703000000808080808000000606091 +:1007600000002010080402003E5149453E000042AE +:100770007F4000007249494946002141494D3300FC +:100780001814127F10002745454539003C4A494955 +:1007900031004121110907003649494936004649CF +:1007A00049291E0000001400000000403400000031 +:1007B00000081422410014141414140000412214DF +:1007C00008000201590906003E415D594E007C12A5 +:1007D00011127C007F49494936003E4141412200C7 +:1007E0007F4141413E007F49494941007F09090954 +:1007F00001003E41415173007F0808087F0000411D +:100800007F4100002040413F01007F081422410049 +:100810007F40404040007F021C027F007F040810A0 +:100820007F003E4141413E007F09090906003E41EB +:1008300051215E007F0919294600264949493200A5 +:1008400003017F0103003F4040403F001F20402044 +:100850001F003F4038403F00631408146300030446 +:10086000780403006159494D4300007F4141410034 +:10087000020408102000004141417F0004020102EF +:10088000040040404040400000030708000020549E +:10089000547840007F2844443800384444442800B9 +:1008A000384444287F0038545454180000087E0906 +:1008B000020018A4A49C78007F0804047800004477 +:1008C0007D4000002040403D00007F102844000093 +:1008D00000417F4000007C04780478007C08040418 +:1008E0007800384444443800FC18242418001824A4 +:1008F0002418FC007C0804040800485454542400C4 +:1009000004043F4424003C4040207C001C20402044 +:100910001C003C4030403C004428102844004C90CF +:1009200090907C004464544C440000083641000020 +:1009300000007700000000413608000002010204B8 +:1009400002003C2623263C0000000000000040403E +:1009500040F0F8F8FF38FFF8F83FF8F8FF38FFF8F4 +:10096000F8F040404000000000000080C0C0C0809F +:100970000000C0C08000000080C0C000C0C00000F7 +:1009800080C0C00000000000C0C0C0C0C000C0C027 +:100990000000000000000000000000000000000057 :1009A0000000000000000000000000000000000047 -:1009B000494949FFFFFFFFE0DFBFBF00BFBFDFE0E6 -:1009C000FFFFFFFF49494900000000001F3F606032 -:1009D000E0BF1F007F7F071E381E077F7F007F7FDD -:1009E0000E1F3B716000000000007F7F0C0C0C00AC -:1009F0007E7E007F7E0303007F7E03037E7E0303F3 -:100A00007F7E000F3E703C063C703E0F00327B49FB -:100A1000493F7E007F7E0303001E3F69696F260009 -:100A2000000000000000000000030F1F3F3C787032 -:100A3000600000007F4141417F007F4141417F00D4 -:100A4000307B7F7830202030787F3B0003000F7FA1 -:100A50000F0F0F7F0F0003000000000000000000D8 -:100A60000000000000000000000000000000000086 -:100A7000010101070F0F7F0F7F0F0F7E0F0F7F0FF9 -:100A80007F0F0F07010101000000000000000000BF -:100A90000001010000000000000000000000000054 -:100AA0000000000000000000000000000000000046 -:100AB0000000000000000000000000000000000036 -:100AC0000000000000000000000000000000000026 -:100AD0000000000000000000000000000000000016 -:100AE0000000000000000000000000000000000006 -:100AF00000000000000000000000000000000000F6 +:1009B0000000000000000000000000000000000037 +:1009C00000000000000000C0F0F8FC3E1E06010020 +:1009D00000007F4141417F007F4141417F00008015 +:1009E000C0E07E5B4F5BFEC00000C000DCD7DEDEF7 +:1009F000DED7DC00C00000000000000000000000A6 +:100A00000000000000000000000000000000494954 +:100A100049FFFFFFFFE0DFBFBF00BFBFDFE0FFFF19 +:100A2000FFFF49494900000000001F3F6060E0BF30 +:100A30001F007F7F071E381E077F7F007F7F0E1FEE +:100A40003B716000000000007F7F0C0C0C007E7E7C +:100A5000007F7E0303007F7E03037E7E03037F7E91 +:100A6000000F3E703C063C703E0F00327B49493F10 +:100A70007E007F7E0303001E3F69696F2600000031 +:100A800000000000000000030F1F3F3C7870600072 +:100A900000007F4141417F007F4141417F00307B29 +:100AA0007F7830202030787F3B0003000F7F0F0FCE +:100AB0000F7F0F0003000000000000000000000096 +:100AC0000000000000000000000000000000010124 +:100AD00001070F0F7F0F7F0F0F7E0F0F7F0F7F0F0D +:100AE0000F070101010000000000000000000001EC +:100AF00001000000000000000000000000000000F5 :100B000000000000000000000000000000000000E5 :100B100000000000000000000000000000000000D5 -:100B20000000000000000000000000AF00AE09025D -:100B30005B00030100A0FA090400000103010100A9 -:100B40000921110100012240000705810308000A64 -:100B50000904010002030000000921110100012223 -:100B6000220007058203200001070503032000017E -:100B70000904020001030000000921110100012203 -:100B80007B000705840320000A1201000200000018 -:100B90000832FC87120200010200011E0353006F9D -:100BA000006C00610072006900750073005F005303 -:100BB000006F0066006C006500000010034B0065CC -:100BC00000790068006900760065000000040309F0 -:100BD000040011241FBECFEFDAE0DEBFCDBF04B6A4 -:100BE00003FE27C08091700690917106A091720655 -:100BF000B09173068730904BA740B04BD1F4109260 -:100C0000700610927106109272061092730614BE4E -:100C100084B7877F84BF0FB6F894A8958091600051 -:100C2000886180936000109260000FBEE0E0F8E3FE -:100C3000099512E0A0E0B1E0EEEEFDE602C00590FD -:100C40000D92A033B107D9F726E0A0E3B2E001C0CE -:100C50001D92A037B207E1F70E943B290C94B136F0 -:100C60000C940000CF93DF9340916E0650916F0675 -:100C70004E5654409A01205A3F4F21303240C0F026 -:100C800020E032E0241B350B60916C0470916D0400 -:100C9000FC01CA01240F351FC1E0D0E08217930781 -:100CA00050F070936D0460936C04DF91CF910895C0 -:100CB00020E630E0E9CF4491DC01A259BB4F5C91C2 -:100CC000451781F04C93AC01A5E056954795AA9540 -:100CD000E1F7DE0102C0AA0FBB1F4A95E2F7AD01A2 -:100CE0006A2B752B01963196D9CFE8EDF0E0808123 -:100CF0008E7F80831092E2001092DA001092E10061 -:100D0000A0EEB0E08C9181608C9380818F7780839E -:100D100019BCA7EDB0E08C918E7F8C9380818F7E83 -:100D2000808310924E0408952091E4003091E500F4 -:100D300095E6A9012091EC00822F817020FF06C06A -:100D40008091E80080FF06C080E008952091E800CF -:100D500022FD1AC080915C04882389F0853089F0D7 -:100D60008091EB0085FD0FC02091E4003091E500FB -:100D700042175307F9F29150E1F684E0089582E0BA -:100D8000089583E0089581E00895EF92FF920F9314 -:100D90001F93CF937C018B010E949406C82F811171 -:100DA00017C08091E80085FD0BC08091E8008E7728 -:100DB0008093E8000E949406882399F3C82F08C006 -:100DC000F70181917F018093F1000150110949F7EA -:100DD0008C2FCF911F910F91FF90EF9008958091EC -:100DE0005E0487FF13C08091E80082FF06C08091F7 -:100DF000E8008B778093E80004C080915C04811147 -:100E0000F2CF089580915C048823D9F38091E800A3 -:100E100080FFF8CF8091E8008E77ECCF982F9093E9 -:100E2000E900242F762F50E0891731F07091EC0003 -:100E30002091ED005091F00021FD07C09F5F973099 -:100E400071F78093E90081E008953091EB003E7FD7 -:100E50003093EB003091ED003D7F3093ED00309109 -:100E6000EB0031603093EB007093EC002093ED00C9 -:100E70005093F0002091EE0027FDE0CF80E0089530 -:100E8000CF92DF92EF92FF920F931F93CF93DF9356 -:100E9000C8EDD0E088818F7E8883E7EDF0E0808127 -:100EA0008160808384E082BF81E080934E048881EA -:100EB0008E7F888302EE10E0F80110821092DA0033 -:100EC00081EEC82ED12CF601108288818F7788831D -:100ED00088818068888388818F7D888319BC10927F -:100EE0005C0410925D0410925B0410925A0490EE20 -:100EF000E92EF12CF70180818B7F808388818160CE -:100F0000888342E060E080E00E940E07F601808165 -:100F10008E7F8083F80180818160808380818860FA -:100F20008083F70180818E7F8083888180618883C0 -:100F3000DF91CF911F910F91FF90EF90DF90CF90B5 -:100F40000895FC01809164049091650486179707C9 -:100F5000A0F06115710529F49091E8009E779093B7 -:100F6000E80090E06115710551F4911108C080917D -:100F7000E80082FF34C080E00895BC01F2CF809188 -:100F80005C048823C1F18530C1F18091E80083FDC4 -:100F900030C08091E80082FDEACF8091E80080FFB8 -:100FA000E1CF8091F3002091F200382F6115710597 -:100FB00019F02830310558F091E02830310509F05A -:100FC00090E02091E8002E772093E800CBCF81912C -:100FD0008093F100615071092F5F3F4FE7CF8091FF -:100FE0005C04882341F0853041F08091E80083FF64 -:100FF000BECF81E0089582E0089583E008950895CA -:10100000809151040895CF92DF92EF92FF922FB713 -:10101000F894C0904704D0904804E0904904F090C0 -:101020004A042FBFA7019601261B370B480B590B0B -:10103000CA01B901FF90EF90DF90CF9008952FB7CC -:10104000F89460914704709148048091490490910C -:101050004A042FBF08952091440430914504281775 -:10106000390771F09093450480934404E091420461 -:10107000F0914304309721F00084F185E02D09942C -:10108000089520914004309141042817390771F0E8 -:101090009093410480934004E0914204F091430412 -:1010A000309721F00680F781E02D0994089581158D -:1010B00020E59207F8F48115E0E49E0788F589336E -:1010C000910570F48C32910548F48430910580F0DC -:1010D0008E31910518F08897039750F480E00895B9 -:1010E00084369105D9F320F0805E91090897B0F31A -:1010F00081E01BC08115F9E59F0750F4811528E5B3 -:101100009207A0F491558F3F910509F088F7E6CF3B -:101110008115EAE59E0710F390568115904240F73D -:10112000FB019581907F81E0C9F20895FB019581D3 -:10113000907F81E0903291F6F8CF20912F0436E035 -:10114000839FC0011124629F800D911D1124811580 -:1011500022E0920714F090E080E082599B4F909338 -:101160006F0680936E060895FC01680F791F8FEF5C -:1011700091E32191822728E030E087FF09C0880FA2 -:10118000892721503109C9F7E617F70791F7089524 -:10119000880FF7CFFA01811101C0FB0109948091FA -:1011A0006704982F9E7F61F481708260809367044A -:1011B00080916A04813A18F080EA80936A04089565 -:1011C0008831B0F381708661F1CFAF92BF92DF9228 -:1011D000EF92FF920F931F93CF93DF93082F162F59 -:1011E000E901E42FF0E0E556FB4F611110C0E491F6 -:1011F0005E2F4E2F4983E8835A83DF91CF911F9151 -:101200000F91FF90EF90DF90BF90AF900895E62E82 -:10121000F12C4491D42EE42FF0E026E0829FC0010F -:1012200011242FEF30E0B9010E94D834802F90E0D4 -:10123000880F991F55E5569FD001579FB00D112477 -:101240008A1B9B0B982F990F890F5901AE18BF0865 -:10125000AE9ED001AF9EB00DBE9EB00D11245B2F8F -:10126000189F80011124012F11275901A01AB10ADA -:10127000AE9E8001AF9E100DBE9E100D112459012F -:10128000A81AB108AE9CC001AF9C900DBE9C900DF9 -:101290001124892F9927281B390B2E9FC0012F9FBE -:1012A000900D3E9F900D1124E92F62307105A1F041 -:1012B00050F46115710509F49DCF6130710581F01D -:1012C000EB2F512F97CF6430710569F080F06630B5 -:1012D000710509F48FCFF4CFE42F4B2F592F8ACF0C -:1012E000E42F412F87CFEB2F542F492F83CF4B2F44 -:1012F0005D2DE12F7FCF80E0089578940895F894D4 -:10130000E82FE295EF70F0E031A1282F2F7081E0F7 -:1013100090E001C0880F2A95EAF7982F90959323C3 -:1013200091A392A1892B82A30C947D099091D7025D -:1013300092FF06C0282F28712830F9F4877F846037 -:1013400093FF06C0282F28712831F1F4877E84612D -:101350002091D80220FF06C0382F38713830D9F4D8 -:10136000877F816021FF06C0282F28712831D1F4A2 -:10137000877E816194FD877E0895282F2471243013 -:10138000F9F68B7F8860DCCF282F2471243101F798 -:101390008B7E8861DDCF382F3171313019F78E7F28 -:1013A0008860E0CF282F2171213121F78E7E88615E -:1013B000E1CFCF93DF93EC018238910581F1B0F555 -:1013C0008133910509F491C020F58932910509F422 -:1013D00085C08A9709F490C0C11521E5D20708F0AD -:1013E000AAC0C11530E5D30708F0F2C0CF3BD10544 -:1013F00008F089C0C83AD10508F0DFC0C53AD10568 -:1014000008F0D3C0C430D105F8F4C130D105E1F003 -:1014100040C08533910509F45AC0C997E9F6809117 -:10142000D702837089F0C0EED0E00EC0833E9105F4 -:1014300099F170F4803E910501F1823E910561F6CB -:101440008091D70282FD21C0CE01DF91CF91089516 -:10145000863E910561F1873E910571F1843E9105CB -:1014600009F0BACF8091D80281FFEECF8091D702E8 -:10147000C7EED0E084FD0DC0E7CF8091D70280FD9C -:10148000F7C09091D80290FFDFCFC3EED0E084FF89 -:10149000DBCFD0E0C0E0D8CF8091D70282FDEBC097 -:1014A0009091D80290FDBFCF84FFCECFF2CF809134 -:1014B000D70283FDDDCFC8CF8091D70283FDDEC088 -:1014C0009091D80291FFF0CFC4EED0E0BDCF8091D3 -:1014D000D70285FFB9CFC9E2D0E0B6CF8091D7025D -:1014E00085FFB2CFC5E3D0E0AFCF8091D70286FFB2 -:1014F000ABCFCAE2D0E0A8CF8091D70286FFA4CFBD -:10150000C1E3D0E0A1CFC11540E2D40760F4C1151A -:1015100081E0D80708F098CFCE01815E9109079746 -:1015200008F492CFB6CFC11590E4D90708F4B1CF33 -:10153000DF70D06A89CFC11524E5D20778F4C115D0 -:1015400033E5D30708F072C0C11542E5D40708F0AF -:101550005CC0DC2FCC27C16FD06A76CFC1158AE57D -:10156000D80778F4C11599E5D90708F073C0C115FB -:1015700028E5D20708F48DCFDC2FCC27C06FD06AC6 -:1015800063CFCE0190568115904208F082CF8D2F07 -:101590008F710E94960990E0982F882788279F7165 -:1015A0009C012C2BE901D0624FCFC55AD0E0CE531D -:1015B000DE4FC881D0E0D06447CFC85AD0E0CC0F0E -:1015C000DD1FCB53DE4F0990D881C02DD4643CCFB2 -:1015D000CE0164E0969587956A95E1F783702C2F8C -:1015E00026952695237040E2249F90011124382BE4 -:1015F0008C2F8370C1E0D0E002C0CC0FDD1F8A9534 -:10160000E2F7C22BD32BDC681FCFCE018370992762 -:1016100021E030E002C0220F331F8A95E2F7C69521 -:10162000C69580E2C89FE0011124EBCFCE01837004 -:10163000992721E030E002C0220F331F8A95E2F79C -:10164000C695C69590E2C99FE0011124C22BD32B09 -:10165000DA68FACE8C2F8F700E94960934E0D69506 -:10166000C7953A95E1F7CF709C2FEC01D069ECCE8D -:10167000C9E3D0E0E9CEC2EED0E0E6CEC6EED0E0DF -:10168000E3CE0C941F0880914F0490919402892B13 -:1016900090919302892B80933202E0914204F09161 -:1016A0004304309731F00280F381E02D82E392E031 -:1016B000099408958091920290916102981301C05B -:1016C00008958F5F8770FACF27E0929F800D1124D5 -:1016D000982F977086958695869523E0829FF001D6 -:1016E0001124E05CFD4F50E040E080E0219130E0CB -:1016F000092E02C0369527950A94E2F72170332708 -:10170000042E01C0220F0A94EAF7822B4F5F5F4F2D -:101710004330510559F7089527E0929F800D112419 -:10172000982F977041E001C0440F9A95EAF786958B -:101730008695869593E0899FF0011124E05CFD4F2A -:1017400090E080E070E05191DF0111979B01082E3D -:1017500002C0369527950A94E2F721702195252736 -:10176000242325272C9301968330910561F7089552 -:1017700090E080E00E94410890E080E00E942B0809 -:1017800010929402109293020C94430B8093950252 -:101790000C94B80B882341F0809590914F048923D5 -:1017A00080934F040C94430B0895882339F0909153 -:1017B0004F04982B90934F040C94430B0895882367 -:1017C000B1F19CEF980F913A70F4E4E3F2E091915B -:1017D000891303C0DF0111971C9242E0EA33F4073A -:1017E000B1F70C94430B90E2980F983088F487700F -:1017F00021E030E0A90102C0440F551F8A95E2F7AD -:10180000CA01809590914F04892380934F04E9CFBA -:101810009BE5980F933020F490E080E00C94410811 -:10182000885A873120F490E080E00C942B080895CA -:101830000F931F93CF93C82F882309F469C08CEFAF -:101840008C0F813AB0F504E312E08AE392E0F801EC -:101850002191C21701F122E0EA33F207C9F7EFEF55 -:1018600080E0D8019D918D01C91781F0EF3F19F4F7 -:10187000911101C0E82F8F5F863099F7EF3F31F06B -:101880000E2E000CFF0BEE5CFD4FC283CF911F911B -:101890000F910C94430BE4E3F2E02191C21303C0D7 -:1018A000DF0111971C928E179F07B9F70E94430B17 -:1018B000D6CF80E28C0F883068F4C77021E030E02A -:1018C00001C0220FCA95EAF780914F04822B8093C2 -:1018D0004F04DCCFEBE5EC0FE33050F4F0E0EE53D7 -:1018E000FE4F808190E0CF911F910F910C944108A1 -:1018F000C85AC73168F4EC2FF0E0EE0FFF1FEB532E -:10190000FE4F80819181CF911F910F910C942B08F4 -:10191000CF911F910F910895982F92959F7011F07C -:10192000892F94E0282F2695269511F09E5F822F0F -:10193000869509F09F5F892F0895CF93DF93CDB7E8 -:10194000DEB762970FB6F894DEBF0FBECDBF96E04C -:10195000EAE3F3E0DE01179601900D929A95E1F724 -:1019600096E0FE013796DE011D9601900D929A9544 -:10197000E1F798858823E9F0962B9E8786E0FE01A3 -:101980003D96DE01119601900D928A95E1F786E071 -:10199000FE013196AAE3B3E001900D928A95E1F73A -:1019A00062960FB6F894DEBF0FBECDBFDF91CF9128 -:1019B000089560959623E1CF0F931F93CF93DF9304 -:1019C00000D000D0CDB7DEB789836A834B831C82F9 -:1019D00004E610E024E030E0AE014F5F5F4F60E0CE -:1019E00084E10E9436320F900F900F900F90DF919C -:1019F000CF911F910F91089580916F01882329F055 -:101A000047E669E98BE20C94DC0C80913B0247ECE1 -:101A10006BE18823C1F341E265EA89EDF4CFCF920F -:101A2000DF92EF92FF920F931F93CF93DF936C019E -:101A30007B0164E670E088E70E941E31EC0197FDAF -:101A400012C010E000E0F601E00FF11F849164E69F -:101A500070E00E949831EC01892B29F40F5F1F4F31 -:101A60000E151F0581F70E94B232CE01DF91CF9192 -:101A70001F910F91FF90EF90DF90CF90089580918C -:101A80003A0490913B04911103C091E08927089595 -:101A9000882369F062E070E08CE29BE00E940F0D09 -:101AA000892B19F080913A04089510923A0480919C -:101AB0003A04EBCFCF93C0913A0480913B04882342 -:101AC000D1F00E941F086058774C8E4F9F4F609353 -:101AD0003604709337048093380490933904C1110D -:101AE00008C062E070E08AE29BE00E940F0D892B43 -:101AF00029F0C0913A048C2FCF91089581E0809312 -:101B00003A04F7CF80934B0470934D0460934C04D8 -:101B100080915C048430F9F48093E9008FEF909118 -:101B2000E800815095FD06C095ED9A95F1F700000B -:101B30008111F5CF8091E80085FF0DC050E040E0B5 -:101B400063E070E08BE494E00E94C5068091E800B9 -:101B50008E778093E8000895BC0184E00C94820D98 -:101B6000BC0183E00C94820D9C0184E08093E90029 -:101B70009FEF8091E800915085FD06C085ED8A9524 -:101B8000F1F700009111F5CF8091E80085FF0CC0BE -:101B900050E040E066E070E0C9010E94C506809117 -:101BA000E8008E778093E8000895CF93DF93EC01EF -:101BB00081E08093E9008FEF9091E800815095FDDE -:101BC00006C095ED9A95F1F700008111F5CF80914F -:101BD000E80085FF14C050E040E068E070E0CE010E -:101BE0000E94C5068091E8008E778093E80088E027 -:101BF000FE01A2E5B4E001900D928A95E1F7DF9134 -:101C0000CF9108959F92AF92BF92CF92DF92EF92C1 -:101C1000FF920F931F93CF93DF937C015B016A01C7 -:101C20008091D20201E010E08A3010F40AE010E066 -:101C3000C1E0D0E0F894B501C701F6010995982EEE -:101C40000E947D09911004C021960C171D076CF4A9 -:101C5000892DDF91CF911F910F91FF90EF90DF9031 -:101C6000CF90BF90AF909F900895CC9F9001CD9F53 -:101C7000300D300D112490E080E045E34A95F1F7F6 -:101C80000000019682179307C1F7D4CF8091A2027A -:101C9000811110C08091D80080618093D8008AE1C2 -:101CA0008A95F1F700C08091D90080FF0AC081E0D9 -:101CB0008093A20281E09091A202913009F080E02D -:101CC000089582E08093A2020E94750610925C043F -:101CD000F1CF0E94460E882351F0E0914204F0912A -:101CE0004304309721F00190F081E02D099480E0C9 -:101CF00008951F93CF93DF93182FEB010E94180CC8 -:101D00008FE99FE00197F1F700C000002197C1F72C -:101D1000812FDF91CF911F910C94DF0BCF93DF9335 -:101D2000C3EED2E060E0CE010E944C352196C11591 -:101D300084E0D807B9F7DF91CF9108956F927F9231 -:101D40008F929F92AF92BF92CF92DF92EF92FF92CB -:101D50000F931F93CF93DF938EE2C82E8BE0D82E84 -:101D600091ECE92EF12CE701CC58D10936011BC0CA -:101D7000F50185909490692DC8010E944C35682D1D -:101D8000C80101960E944C3582E0A80EB11C0E5F7E -:101D90001F4FC017D10761F78EE0680E711C2E9699 -:101DA000CE15DF0529F08E010E5011095301E0CF49 -:101DB0007E018CE8E80EF11C8CE8C80ED11C8DE782 -:101DC000E81683E0F80679F6DF91CF911F910F9125 -:101DD000FF90EF90DF90CF90BF90AF909F908F904B -:101DE0007F906F900895CF93C82F6FEF811161E2BC -:101DF00083E290E00E944C356FEFC11161E184E213 -:101E000090E00E944C356FEFC11168E285E290E0EE -:101E1000CF910C944C3580E00E94F30E60E086E296 -:101E200090E00E944C350E949E0E0E948E0E81E032 -:101E30000C94F30E0F931F93CF93DF93C42FD0E036 -:101E4000CC0FDD1F2EE0629FC00DD11D11243CE898 -:101E5000839FC00DD11D1124CE0187960E94383575 -:101E6000082F10E0102F0027CE0188960E943835E9 -:101E70009801282BC901DF91CF911F910F910895EF -:101E8000462F853038F47A3028F4673018F4672FFD -:101E90000C941A0F90E080E00895CF92DF92FF92A9 -:101EA0000F931F93CF93DF936C0100916604809191 -:101EB0009502082BC7E0D0E010E0FC2EC8010C2EE4 -:101EC00002C0959587950A94E2F780FD0CC0219792 -:101ED000A0F7F12C8F2DDF91CF911F910F91FF90E3 -:101EE000DF90CF900895B6018C2F0E94400F0E9482 -:101EF000D909019761F3EECFCF93DF93EC010E94F4 -:101F00004D0FBE010E94400FDF91CF910C94D90973 -:101F1000FC01808191810E947C0F292F2F70929566 -:101F20009F7092509E3078F4E92FF0E0ED54F94C18 -:101F30000C940C35803F19F020F4883E20F481E0A9 -:101F40000895843FE1F380E00895883EC0F3813F27 -:101F5000D1F7F5CF822F869586958695089583E2F1 -:101F600090E00E943835813289F484E290E00E944A -:101F70003835813159F485E290E00E94383591E09E -:101F8000883209F090E0892F8170089580E0FCCFBD -:101F90001F93CF93DF93CDB7DEB768970FB6F89452 -:101FA000DEBF0FBECDBF40913A0350913B0360911D -:101FB0003C0370913D0380913E0390913F030E944A -:101FC000332520933A0330933B0360933E03709391 -:101FD0003F03142F119510933C03652F6195609377 -:101FE0003D0386E0EAE3F3E0DE01179601900D92EF -:101FF0008A95E1F786E0FE013796DE0111960190A1 -:102000000D928A95E1F79B858C8520916F012223A3 -:10201000B1F0772761950CF47095072E000C880BB2 -:10202000990B0E94B8352AE939E949E95EE30E9433 -:102030001C360E948035962F812F60E010E01B83B4 -:102040006C839D838E8386E0FE013196DE011D96B2 -:1020500001900D928A95E1F786E0FE013D96DE0142 -:10206000539601900D928A95E1F786E0FE017396F2 -:10207000DE01119601900D928A95E1F786E0FE014E -:102080003196AAE3B3E001900D928A95E1F786E0DC -:10209000EAE3F3E0DE01179601900D928A95E1F7ED -:1020A00086E0E4E3F3E0DE01119601900D928A955B -:1020B000E1F746E050E0BE016F5F7F4FCE0107962B -:1020C0000E942235892B79F0E0914204F09143047B -:1020D000309749F082E080933A030480F581E02D47 -:1020E0008AE393E0099510923C0310923D0310920D -:1020F0003E0310923F0386E0EAE3F3E0A4E3B3E09B -:1021000001900D928A95E1F768960FB6F894DEBFBC -:102110000FBECDBFDF91CF911F9108954F925F9277 -:102120006F927F928F929F92AF92BF92CF92DF92E7 -:10213000EF92FF920F931F93CF93DF93CDB7DEB74C -:10214000CE5DD1090FB6F894DEBF0FBECDBF509063 -:1021500073019091670490FF5DC080904D03909053 -:102160004E038114910409F068C0E0EAF5E09E0195 -:102170002F5F3F4FBE0161527F4FC901A4914A2F8B -:1021800050E0DA01AA0FBB1FA40FB51FA15BBC4F23 -:10219000CD90DD90EC90D901CD92DD92ED929D0134 -:1021A00031966A177B0751F72091720143E0249F13 -:1021B000800D911D1124539A2BB1277F3BB13860BC -:1021C0005FB7F894BC01549E600D711D11248617F1 -:1021D000970709F08EC05FBF8FE594E00197F1F794 -:1021E00000C00000C252DF4F0FB6F894DEBF0FBE32 -:1021F000CDBFDF91CF911F910F91FF90EF90DF90B6 -:10220000CF90BF90AF909F908F907F906F905F9096 -:102210004F900895809174012091750133E0839F60 -:10222000F0011124E15BFC4F821708F096CF118278 -:10223000108212828F5F3396F7CF90FF96CFD12C0A -:10224000C12C66246394712C53E0452E80914C037D -:1022500093010C2C01C0220F0A94EAF7822309F49F -:102260003FC0F601EE0FFF1FE80DF91DE590F49059 -:10227000E114F10409F479CF45E050E0B701CE0153 -:1022800001960E94193509810F3F51F18A81800F13 -:102290009927991F8B34910514F08AE490E05C0132 -:1022A000AA0CBB1C8A0D9B1DDC01A15BBC4F5D0110 -:1022B000049D80011124015B1C4F0A151B0520F0B1 -:1022C000B5E0EB0EF11CD8CF4D81413A08F040EA61 -:1022D00098016C818B810E94E5080D5F1F4FEDCF47 -:1022E000EFEFCE1ADE0AF8E0CF16D10409F0AECF38 -:1022F0003CCFFC014191CF01E8E03BB9000000C0B8 -:1023000047FF2BB9440F000000C000C000C02BB92C -:1023100000C0EA9591F75BCFE7E6F4E080818E7F1D -:102320008083E9E4F3E08281816082832FEF80E79C -:1023300092E0215080409040E1F700C000000C94F2 -:102340008E10E4E3F2E086E0DF011D928A95E9F762 -:102350000C94B80B1F93CF93DF93CDB7DEB7AA973A -:102360000FB6F894DEBF0FBECDBF8EE594E020918E -:10237000F100DC012D93CD01B4E086369B07B9F75F -:1023800080915F04833009F472C0B8F4813009F49D -:1023900049C0823009F4B5C08091E80083FF8DC246 -:1023A00080915E0490915F049A3008F086C2E92F14 -:1023B000F0E0EF53F94C0C940C358A3009F490C0DE -:1023C0008B3009F471C0893039F780915E04813215 -:1023D00019F78091620490916304009711F00297BD -:1023E000D9F68091E800877F8093E8008091E8002B -:1023F00082FF38C09091F3008091F200029731F48F -:102400008091F100813011F0863021F48091F1004B -:10241000809351048091E8008B778093E8000E94BC -:10242000EF06BACF80915E04813A09F0B5CF809172 -:10243000E800877F8093E8008091620490916304B4 -:10244000892B61F468E082E594E070E00E94A107C6 -:102450008091E8008B778093E8009ECF60E090E069 -:1024600080E0F3CF80915C048111C0CF95CF809143 -:102470005E04813A09F090CF8091620490916304E8 -:10248000892B09F089CF8091E800877F8093E8004D -:102490008091E80080FFFCCF809177018093F1006C -:1024A0008091E8008E77B9CF80915E04813209F087 -:1024B00073CF8091620490916304892B09F06CCFF3 -:1024C0008091E800877F8093E8000E94EF0680916A -:1024D00060048093770110924F040E94A1115CCF99 -:1024E00080915E04813209F057CF8091E800877FA8 -:1024F0008093E8000E94EF0680916104809350046D -:102500004BCF80915E04813A09F046CF8091E8007C -:10251000877F8093E8008091E80080FFFCCF809166 -:102520005004BCCF803899F0823809F0C6C1809140 -:1025300062048F70873008F0C0C18093E9008091F9 -:10254000EB0085FB882780F91092E90006C0809196 -:102550005A0490915B04911182609091E800977FFA -:102560009093E8008093F1001092F1008091E800D0 -:102570008E779FC1882309F48DC1823009F09DC1F7 -:1025800080916004811190C1809162048F702FEF5F -:10259000280F263008F091C18093E9002091EB00CC -:1025A00020FF82C1933031F48091EB0080628093F0 -:1025B000EB007AC19091EB0090619093EB0021E0E9 -:1025C00030E001C0220F8A95EAF72093EA001092CA -:1025D000EA008091EB008860EACF81116EC1109112 -:1025E00060041F778091E3008078812B8093E30063 -:1025F0008091E800877F8093E8000E94EF06809139 -:10260000E80080FFFCCF8091E30080688093E300C6 -:1026100082E0111183E080935C044FC180588230C6 -:1026200008F04BC120916004309161042C3DE3E03F -:102630003E07A1F583E08A838AE289834FB7F89445 -:10264000DE01139620E03EE051E2E32FF0E05093EC -:102650005700E49120FF03C0E295EF703F5FEF70F9 -:102660008E2F90E0EA30C0F0C7968D939D932F5F38 -:10267000243159F74FBF8091E800877F8093E800AD -:102680006AE270E0CE0101960E94A1078091E80005 -:102690008B778093E80011C1C096E7CF80916204E8 -:1026A00090916304432F55274330510509F44AC0E4 -:1026B00078F54130510509F47AC08BE590E0EEE2FF -:1026C000FBE04230510509F0F8C02091E800277F77 -:1026D0002093E800209164043091650482179307E9 -:1026E00008F49C0140E02115310509F065C0411155 -:1026F00063C08091E80082FDC9CF80915C0488238B -:1027000029F2853019F28091E80083FFF2CFBECF25 -:102710004132510509F43CC04232510509F0CDC0A7 -:102720008330910508F0C9C0FC01EE0FFF1FEC5D7E -:10273000FD4F0190F081E02D8F5D9D4FDC018C916C -:1027400090E01AC0332721303105D1F02115310531 -:1027500061F02230310509F0B0C0EBE9FBE0E49113 -:102760008E2F90E0EBE9FBE007C0EDECFBE0E4919D -:102770008E2F90E0EDECFBE0009709F49EC0A5CF12 -:10278000EBEBFBE0E4918E2F90E0EBEBFBE0F4CF82 -:102790008330910508F091C0880F991FFC01E65D18 -:1027A000FD4F0190F081E02D89E090E08ECF82E135 -:1027B00090E0E9E8FBE089CF80915C04882309F48C -:1027C00065CF853009F462CF8091E80083FD5ECF4C -:1027D0008091E80082FD8DCF8091E80080FF83CF5B -:1027E0009091F3008091F2002115310519F08830A5 -:1027F000910550F041E0089709F040E08091E80031 -:102800008E778093E8006FCF44914093F10031962A -:10281000215031090196E8CF803809F04EC08091EF -:10282000E800877F8093E80080915D048093F10049 -:102830009DCE811142C0109160041230F0F580915C -:10284000E800877F8093E80010935D040E94EF0604 -:10285000112311F084E005C08091E30087FDFACFD9 -:1028600081E080935C0442E061EC81E00E940E070D -:1028700042E261EC84E00E940E0742E261EC82E0F9 -:102880000E940E0742E260EC83E00E940E078091F6 -:102890005C0413C080916004813079F481E093304E -:1028A00009F080E080935B041092E9008091E800D9 -:1028B000877F8093E8000E94EF068091E80083FF05 -:1028C0000AC08091E800877F8093E8008091EB0048 -:1028D00080628093EB00AA960FB6F894DEBF0FBE1D -:1028E000CDBFDF91CF911F9108951F93CF93DF93B9 -:1028F000162FC0916E06D0916F068A30D1F42091C8 -:102900002F04CE018E569440622F70E00E94D8347E -:10291000281B822F66E00E94EC34C82FC15020F49F -:10292000DF91CF911F91089560E080E20E947514BD -:10293000F5CF8D30E9F4CE56D44020912F04622F8C -:1029400070E0CE010E94D834281B822F9E01280FF0 -:10295000311D2115324018F080E0D0E0C0E0C80FF2 -:10296000D11DC259DB4FD0936F06C0936E06D8CFEE -:1029700096E0FE01A0E3B4E001900D929A95E1F794 -:10298000803E90F186E0FE0111928A95E9F7C091B0 -:102990006E06D0916F06111133C046E050E0BE01C3 -:1029A00080E394E00E9422359E012E563440892B0C -:1029B00091F52A5F3F4F40912F04642F70E0C901C9 -:1029C0000E94D834481B463010F4240F311D2115C5 -:1029D00072E0370710F030E020E022593B4F30938F -:1029E0006F0620936E069CCFF6E08F9FB0011124F6 -:1029F00066517A4F46E050E0CE010E941935C7CFAC -:102A00009E012A5F3F4FFE012E173F0731F2808162 -:102A100080958193F9CFC90145E0969587954A95B0 -:102A2000E1F741E050E0BA0102C0660F771F8A95D6 -:102A3000E2F7CB0160916C0470916D04862B972BAB -:102A4000B9016B5F7F4FE5E076956795EA95E1F711 -:102A500002C0440F551F6A95E2F7842B952B909383 -:102A60006D0480936C04A5CFFF920F931F93CF93B7 -:102A7000DF93EC01F62EFC0101900020E9F78F01B5 -:102A800001501109C017D10730F0DF91CF911F918C -:102A90000F91FF9008956F2D89910E947514F2CFC8 -:102AA000EDE2F4E08083618324E630E042E050E030 -:102AB000BF0184EB0C940F32CF93C82F60E08CE001 -:102AC0000E9450156C2F84E00E94501561E08CE04C -:102AD000CF910C945015CF92DF92EF92FF926B0141 -:102AE0007C010E94CF08B701A60188E090E0FF902A -:102AF000EF90DF90CF900C945E35AF92BF92CF9263 -:102B0000DF92EF92FF920F931F93CF93DF9300D04A -:102B10000F92CDB7DEB7082FF62E142FE22E80913C -:102B2000670480FF4FC0E82FE695AE2FB0E0AB5EA4 -:102B3000BD4F9C91909349038E7F823009F056C01F -:102B4000413A08F040EA9E012F5F3F4F6F2D802FE2 -:102B50000E94E5088091670480FF11C02B813981B4 -:102B60004A81809174019091750153E0859FF00135 -:102B70001124E15BFC4F891798F10E948E1080911F -:102B80006804801308C0809169048F1104C080918B -:102B90006A04811729F080914B03826080934B0374 -:102BA00000936804F092690410936A04EE2051F0D7 -:102BB00060916704709168048091690490916A043F -:102BC0000E946B150F900F900F90DF91CF911F9186 -:102BD0000F91FF90EF90DF90CF90BF90AF9008954E -:102BE0004183308322838F5F3396C5CF923039F68D -:102BF000E2508E2F8170D82EE695F0E0E556FA4F20 -:102C0000A590B490C12CBB2460917601C61608F043 -:102C1000B4CF2C2D30E0A29EC001A39E900DB29E99 -:102C2000900D112470E00E94D834802FD11016C06E -:102C3000860F40917401420F532F511D9A01220FAC -:102C4000331F240F351F215B3C4F412F113A08F0F1 -:102C500040EA6F2D0E94E508C394D6CF861BE9CFCA -:102C6000E7E6F4E0438121E1421B08F440E021E083 -:102C7000628181810C947D15E7E6F4E0438121E1D6 -:102C8000420F08F44FEF21E0628181810C947D15A1 -:102C9000E7E6F4E0628121E1621B08F460E021E0F4 -:102CA000438181810C947D15E7E6F4E0628121E1A6 -:102CB000620F08F46FEF21E0438181810C947D1550 -:102CC000E7E6F4E0818121E04381628188500C9441 -:102CD0007D15E7E6F4E0818121E043816281885F30 -:102CE0000C947D1580916B04882319F0815080939A -:102CF0006B046091670470916804809169049091FD -:102D00006A040C946B1580916B04833018F48F5F08 -:102D100080936B04609167047091680480916904EA -:102D200090916A040C946B159091670490FF27C0F2 -:102D3000917081111DC092609093670480914B0344 -:102D4000816080934B03662351F06091670470911A -:102D500068048091690490916A040E946B1520E0D8 -:102D600040916A0460916904809168040C947D1517 -:102D70008C3010F09661E0CF880F982BDDCF08954E -:102D800021E030E0A90102C0440F551F8A95E2F707 -:102D9000CA0120914C03662391F0822B80934C034F -:102DA00080914B03806180934B0380914A03811192 -:102DB00009C08091670460E086950C949416809514 -:102DC0008223ECCF0895CF93DF93C82FC17082FB8D -:102DD000DD27D0F981FB662760F985E00E94C016E7 -:102DE00061E06C2786E00E94C0166D2F87E0DF91BE -:102DF000CF910C94C0160F931F93CF93C82F61E00F -:102E00008111682F617080E00E94C016C1FB6627A7 -:102E100060F9C11101C060E081E00E94C016C2FBF0 -:102E2000662760F9C11101C060E082E00E94C0160F -:102E3000C3FB662760F9C11101C060E083E00E9416 -:102E4000C016C4FB662760F9C11101C060E084E0D0 -:102E50000E94C0164C2F50E070E060E0DB01CA0118 -:102E6000F4E0B695A79597958795FA95D1F70097D1 -:102E7000A105B10549F1AC01BD0184E08A019B01C6 -:102E8000E2E03695279517950795EA95D1F7011554 -:102E900011052105310519F08E5FB901A80176955C -:102EA000679557954795452B462B472B09F08F5F24 -:102EB0008230D1F158F48823E9F0813059F18C2F18 -:102EC000CF911F910F91089580E0D8CF8330A1F169 -:102ED0008430A9F720E040E56FEF8AED0E947D1570 -:102EE00087E00E945C1580910001882341F31092D5 -:102EF0006F010DC020E040E56FEF82E30E947D1579 -:102F000080910001882399F381E080936F010E94F2 -:102F1000FC0CD5CF20E040E56FEF8CEF0E947D15D3 -:102F200085E40E945C15CBCF20E040E56FEF80E5A3 -:102F30000E947D1585E2F5CF20E040E56FEF86E742 -:102F40000E947D158FE1EDCF0E94FB1680936604F1 -:102F50000C94B80B80916604982F9670963019F4F3 -:102F600088600C94A417877FFCCF21E030E001C07B -:102F7000220F8A95EAF720958091660482230C94AB -:102F8000A41721E030E001C0220F8A95EAF7809172 -:102F90006604822B0C94A417809167048695815057 -:102FA00009F48BE061E00C94941680916704869597 -:102FB0008F5F8C3008F081E061E00C949416809172 -:102FC000670480FF07C0869582588F77893010F498 -:102FD0000C94D51761E082E00C949416E7E6F4E0D7 -:102FE00083E0808311828FEF828380EA838314825F -:102FF000A9E4B3E012968C911297836012968C9399 -:1030000060817181828193810C946B15AB01BC014D -:1030100088E190E00C945E35CF93C82FEEE3F4E0A6 -:10302000982F990F990F990F80818770892B808332 -:10303000EFE3F4E09C2F9295969597708081887FBE -:10304000892B808360913C0470913D0480913E0403 -:1030500090913F040E9406186C2F82E0CF910C944F -:103060005015ECE3F4E089E88083118282818C7F43 -:10307000828360913C0470913D0480913E04909164 -:103080003F040C940618ECE3F4E080818E7F80838B -:1030900060913C0470913D0480913E0490913F0406 -:1030A0000C940618ECE3F4E08081816080836091E9 -:1030B0003C0470913D0480913E0490913F040C9437 -:1030C00006180E94183140E060E080E00C94DC0CAF -:1030D00069EE7EEF90E080E00E946A3560E082E079 -:1030E00090E00E944C3560E083E090E00E944C3517 -:1030F0001092950260E084E090E00E944C3560E020 -:1031000082E290E00E944C3560E085E090E00E9411 -:103110004C3560E086E090E00E944C356FEF87E030 -:1031200090E00E944C3540E050E0BA0188E090E029 -:103130000E945E3560E08DE090E00E944C3540E0FA -:1031400050E0BA0188E190E00E945E3560E087E1DE -:1031500090E00E944C3540E050E0BA018CE190E0F4 -:103160000E945E3570E060E080E290E00E946A3587 -:103170000E94311880E00E94F30E0E940B0F40E085 -:1031800050E0BA018FE090E00E945E3540E050E0F0 -:10319000BA0183E190E00C945E355F926F927F926A -:1031A0008F929F92AF92BF92CF92DF92EF92FF9257 -:1031B0000F931F93CF93DF9300D000D00F92CDB722 -:1031C000DEB77C01FC0183819481892B31F0808101 -:1031D000918189238F3F09F081C60F900F900F9046 -:1031E0000F900F90DF91CF911F910F91FF90EF9073 -:1031F000DF90CF90BF90AF909F908F907F906F9017 -:103200005F9008950E944D0F182F682F89819A8131 -:103210000E948C0B69817A81812F0E94400F8C0162 -:10322000F7018281882361F0F801E65EFC45ED300C -:10323000F10530F4E553F94C0C940C350E9452180A -:10324000D0903C04D0FE1CC08D2D86958370F70174 -:103250009281992309F460C1823090F4B701C801CA -:103260000E945708882361F0D694D694D694809112 -:103270003D0483708295880F807E8D290E945C15A5 -:10328000F7018281882309F41EC6C80182519F4537 -:10329000409708F0DCC58FEF93E00E94383502516B -:1032A00093EEA92E92E0B92E811197CF011138C16A -:1032B0001C821B82662463948AE0582E85010F5F6E -:1032C0001F4FC5010E94383589831A82882309F46B -:1032D00084CF9FEF980F933008F031C18A836982C1 -:1032E00032E0A30EB11CC8010E9438358B838823BD -:1032F00009F473CF8E010F5F1F4FF8012081222345 -:10330000E9F2213009F055C191818281913009F0B3 -:1033100018C10E5F1F4F6AE070E0893311F460E559 -:1033200070E00E94790E13C10E94431889CF8091EA -:103330003C0480FF0DC00E94431860913C047091D2 -:103340003D0480913E0490913F040E94061878CF7E -:103350000E945218F2CF0E94311872CF90913C0413 -:10336000892F86958F5F8370880F997F892B809333 -:103370003C04982F9670963001F7897F80933C0427 -:10338000DCCF90913D04892F8B7F92FF84608093E6 -:103390003D04D3CF80913C04982F969596959695B1 -:1033A00080913D0483708295880F807E892B8C37B5 -:1033B00098F48F5F282F220F220F220F90913C0448 -:1033C0009770922B90933C04829586958370909190 -:1033D0003D049C7F892BDBCF81E0ECCF80913C04C6 -:1033E000982F96959695969580913D048370829539 -:1033F000880F807E892B11F08150DCCF8BE7DACFEC -:1034000030913D04932F96959695969520913E0484 -:10341000822F83708295880F807E892B90E00196A1 -:10342000482F440F440F440F3770342B30933D0422 -:1034300035E0969587953A95E1F783702C7F822B3E -:1034400080933E047ACF30913D04932F96959695C4 -:10345000969520913E04822F83708295880F807EFE -:10346000892B8150990BDCCF80913E0482FF12C0E2 -:103470008B7F80933E0460913C0470913D04809169 -:103480003E0490913F040E94061860E081E00E9493 -:103490005015D6CE846080933E0460913C047091B8 -:1034A0003D0480913E0490913F040E94061860E024 -:1034B0008CE00E94501564E182E00E94501565E0A6 -:1034C00081E00E94501561E08CE0E1CF80913E04E4 -:1034D000982F96959695969580913F048295880FA2 -:1034E000807E892B883720F4865F0E940C18A8CE36 -:1034F00088E7FBCF80913E04982F969596959695F8 -:1035000080913F048295880F807E892B843110F052 -:103510008A50EBCF84E1E9CF882309F4B1CE9ECE67 -:10352000A114F4E0BF0609F458CEC5010E94383555 -:10353000811101C001502FEFA21AB20AB7CE580173 -:10354000D9CE923039F40E5F1F4F0E94180C0F5FD6 -:103550001F4FD3CE933029F40E5F1F4F0E94DF0B15 -:10356000F6CF943019F00F5F1F4FF1CF0E5F1F4F52 -:1035700030E020E0B8016F5F7F4FF8014181805358 -:10358000990B8A30910550F02150310900F38FE9F1 -:103590009FE00197F1F700C00000F6CF529EF001C6 -:1035A000539EF00D11249C012E0F3F1F842F8B0181 -:1035B000E1CFE22FF0E0E75FFD4F7490822F869518 -:1035C0008695869590E0FC01E750FE4FE4902770C9 -:1035D000F12C022E02C0F594E7940A94E2F7E1E0A0 -:1035E000EE22FF24FC01E751FE4FC490D12C022EA5 -:1035F00002C0D594C7940A94E2F7F1E0CF22DD240B -:10360000FC01E752FE4F8490912C02C09594879460 -:103610002A95E2F721E082229924E114F10419F0BD -:1036200081EE0E94180CC114D10419F086EE0E949C -:10363000180C39E36AE070E0731202C060E570E0D4 -:10364000872D0E94790ECD2819F086EE0E94DF0B9F -:10365000EF2819F081EE0E94DF0B892809F477CF5B -:103660006AE070E08CE25DCE81E00E94C11703C089 -:1036700081E00E94B5170F900F900F900F900F9060 -:10368000DF91CF911F910F91FF90EF90DF90CF903E -:10369000BF90AF909F908F907F906F905F900C94B1 -:1036A000AA1782E0E2CF013E110509F4B4C0043E3E -:1036B000110519F0003E110591F5882381F18091E3 -:1036C00066040E948C0C813051F583E30E945C15E6 -:1036D00026C00238FFE51F0709F46AC078F4053FE9 -:1036E000110509F413C1063F110509F411C1043F86 -:1036F0001105A9F461E00E949D0C11C004383FE55A -:10370000130709F48BC008F469C005385FE5150795 -:1037100009F4CAC006389FE5190709F4DDC0F701AE -:1037200092819111FAC180914F0482720A3CFCE5AA -:103730001F0709F4D2C108F028C1053C3CE5130776 -:1037400009F4B7C108F00CC1033C5CE5150709F4A6 -:1037500091C108F0A9C1023C1C4509F43BC1F70125 -:1037600000811181992309F4F2C1C8010E944D0F13 -:10377000D82E682FC8010E948C0BB8018D2D0E9495 -:10378000400F0E94D909182FB82EF70122814581D8 -:10379000342F32953F70892F82958F70C82ED12C8F -:1037A0008C3008F00CC2F601E852F94C0C940C3540 -:1037B000882309F4B4CF81EE0E94180C83EE0E9496 -:1037C000180C8FE40E94180C8FE40E94DF0B83EE2C -:1037D0000E94DF0B81EE0E94DF0BA1CF882309F44A -:1037E0009ECF81EE0E94180C83EE0E94180C80E59B -:1037F0000E94180C80E5E9CF80933F0210933E02AF -:1038000000933D02882321F081E08093EE0287CF70 -:103810001092EE0284CF80933C02F0CF882379F19E -:1038200080913C02882349F080913D020E94DF0B89 -:1038300080EE0E94180C8AE20CC080913F0288231F -:10384000D1F380913D020E94DF0B80EE0E94180CA4 -:103850008CE40F900F900F900F900F90DF91CF910D -:103860001F910F91FF90EF90DF90CF90BF90AF909E -:103870009F908F907F906F905F900C94180C8AE2CD -:103880000E94DF0B8CE40E94DF0B80EE0E94DF0BB6 -:1038900080913C02811105C080913F02882309F488 -:1038A0009CCC80913D02D5CF882309F423CF809111 -:1038B0006F01811104C080910001882339F01092BA -:1038C0006F01109200010E94FC0C29CF81E08093CF -:1038D0006F0180930001F7CF882309F40BCF80910B -:1038E0003B02882349F080EE90E090937101809331 -:1038F000700110923B02E7CF86E690E09093710151 -:103900008093700181E080933B02DDCF62E0F3CED3 -:1039100064E0F1CE882331F081E08093F0021092D0 -:103920006701FDCE1092F002FACE882349F0809113 -:1039300066040E948C0C813019F482E30E945C15AD -:10394000F7018281882309F4B0C2809166040E9445 -:103950008C0C813009F0A9C284E30E945C15A5C2D9 -:10396000073C2CE5120709F4AEC008F4A7C0083CD8 -:103970004CE5140709F4ACC0093C1C4509F0EFCE36 -:1039800040E356E16CE376E179C0043DECE51E07C7 -:10399000A8F40E3CFCE51F0708F01FCC0C3C2CE5FE -:1039A000120709F49FC042E756E163E876E10D3C57 -:1039B0001C4508F463C061E081E046C0053D4CE56C -:1039C000140709F40ACC08F492C00D351D4509F41A -:1039D00004CCC5CE8091670480FF31C08E7F809378 -:1039E0006704609167047091680480916904909104 -:1039F0006A040E946B1580914B03816080934B0396 -:103A00009FEFE0E7F2E09150E040F040E1F700C0C6 -:103A100000000F900F900F900F900F90DF91CF91BB -:103A20001F910F91FF90EF90DF90CF90BF90AF90DC -:103A30009F908F907F906F905F900C948E1081601C -:103A40008093670461E086950F900F900F900F9020 -:103A50000F90DF91CF911F910F91FF90EF90DF902A -:103A6000CF90BF90AF909F908F907F906F905F901E -:103A70000C9494164CEC57E165ED77E10F900F90A4 -:103A80000F900F900F90DF91CF911F910F91FF90AA -:103A9000EF90DF90CF90BF90AF909F908F907F90EE -:103AA0006F905F900C94CA0845ED57E16CEC77E19C -:103AB000E5CF40E656E169E676E1E0CF49E656E13A -:103AC00060E676E1DBCF48E456E164E576E1D6CF07 -:103AD00044E556E168E476E1D1CF4CE356E160E39A -:103AE00076E1CCCF43E856E162E776E1C7CF0F90AD -:103AF0000F900F900F900F90DF91CF911F910F912A -:103B0000FF90EF90DF90CF90BF90AF909F908F90FD -:103B10007F906F905F900C94DF170E3D1C4509F06D -:103B20001ECE0F900F900F900F900F90DF91CF91BE -:103B30001F910F91FF90EF90DF90CF90BF90AF90CB -:103B40009F908F907F906F905F900C946818C80141 -:103B50000E94640BD82E11CE092F0F70907F11F0A8 -:103B60000295007F812F2223C9F0002369F090E2A3 -:103B7000910F983010F011110BC080914F04082B59 -:103B800000934F040E94430B812F0E94180C17C012 -:103B900080919402082B00939402F4CF0E94DF0BD3 -:103BA000002369F00095105E183010F0B11027C0A6 -:103BB00080914F04082300934F040E94430B98E028 -:103BC000C91AD108E4E0CE16D10408F006CB0E9451 -:103BD000690E0F900F900F900F900F90DF91CF9183 -:103BE0001F910F91FF90EF90DF90CF90BF90AF901B -:103BF0009F908F907F906F905F900C94E3168091D0 -:103C00009402082300939402D8CF892F8F70907F5D -:103C1000903211F08295807FF1E0BF120CC0222318 -:103C200029F0333060F60E94D50BC9CF323038F618 -:103C30000E94CA0BC4CF222341F03323A1F340FFDB -:103C4000A3CF4F70F7014583EECF332389F31933A8 -:103C500009F0F5C0FFEF27EE33E0F150204030408F -:103C6000E1F700C00000812F0E94DF0BA8CF892F51 -:103C700086958695837061F0813009F0A0CF812F01 -:103C80009370211102C090E080E00E942B0897CF32 -:103C9000812F9370211102C090E080E00E944108C2 -:103CA0008ECF892F8370A1F5211189CF812F829525 -:103CB00086958770880F880F412F4F70082E01C09E -:103CC000440F0A94EAF7212F207114FF07C02FE058 -:103CD00030E001C0220F8A95EAF7209596959695D7 -:103CE0009370923081F0822F842B933030F4809146 -:103CF0009502913029F0242B82230E94C60B5FCFBE -:103D0000842B822BFACF242B809195028227F5CF2A -:103D10008695222311F0892F8170882309F44FCFD3 -:103D2000812F829586958770880F880F412F4F705D -:103D3000082E01C0440F0A94EAF7212F207114FFC6 -:103D400007C02FE030E001C0220F8A95EAF72095E6 -:103D5000969596959370923081F0822F842B9330B4 -:103D600030F480916604913029F0242B82230E9444 -:103D7000A41725CF842B822BFACF242B80916604A5 -:103D80008227F5CF092F0F70222329F0802F0E9460 -:103D9000C117812F48CF812F0E94CA0B802F0E940C -:103DA000B5170DCF812FE1EF1E1789F1E11750F004 -:103DB000F0EF1F17B9F02223B1F13111E5CE892FB1 -:103DC0008F7129C042EF141749F153EF1513F3CF48 -:103DD00080E0222361F29F7181E001C0880F9A95F3 -:103DE000EAF7C5CF222379F0323008F0E8CE292F48 -:103DF0002F7181E090E001C0880F2A95EAF7909139 -:103E000066048927B4CF333008F0D9CEF0CF892F9C -:103E10008F71222321F20E94C117D1CE892F8F7179 -:103E20002223C9F3BCCF332379F0893341F48FEFD8 -:103E300097EEE3E081509040E040E1F712CF8FE34E -:103E40009CE90197F1F70DCF892F8F71A8CF003131 -:103E5000FFE51F0709F408CC01312FE5120709F42B -:103E600020CC0E941F086093F5027093F6028093A5 -:103E7000F7029093F802F7018281053E110509F4DB -:103E8000BBCC08F026CC0C32110509F443CD08F068 -:103E90000ACC0A30110509F448CD0531110509F4A1 -:103EA0004FCD0930110509F03ACCF7018281882302 -:103EB00009F435CC809166040E948C0C813009F0A5 -:103EC0002ECC81E303CC00313FE5130709F4D0CBBE -:103ED00001314FE5140779F682E0CBCB85E0DE01B6 -:103EE000119601900D928A95E1F7F701228189815F -:103EF0009A81211187C90E94640B182F8BC91F93C7 -:103F0000CF93DF9380916002807FA9F480915D025E -:103F1000882389F080919202D091610260915B02C6 -:103F200070915C02A0915E02B0915F02C62FC72320 -:103F300016E0D81304C0DF91CF911F91089590E04F -:103F4000109711F0CF3F19F401968770F2CF189FA8 -:103F50009001199F300D1124F901EE59FD4F418157 -:103F60004713F2CF40814613EFCF42814111ECCF8E -:103F7000438154814A1B5B0B403A510528F78091DD -:103F800060028F70806180936002F901E959FD4FF2 -:103F900080818F70806180838BE592E00E94CD18D4 -:103FA000DF91CF911F910C945A0BAF92BF92CF9299 -:103FB000DF92EF92FF920F931F93CF93DF93CDB7D2 -:103FC000DEB761970FB6F894DEBF0FBECDBF8C0190 -:103FD00085E0F801DE011D9601900D928A95E1F7CA -:103FE000F801E2808BE5A82E82E0B82E60915E0297 -:103FF00070915F026115710509F432C190915B0205 -:1040000040915C02892F84238F3F09F429C12081CC -:104010003181C380D480F0905D02F601E61BF70B7E -:10402000FF2009F4E8C080916002582F507FE03AE9 -:10403000F10508F0ABC0511177C0FE2C431321C02D -:1040400092131FC0E1101DC08F70806180936002C9 -:10405000C5010E94CD1880916002F80185838F2DE3 -:1040600061960FB6F894DEBF0FBECDBFDF91CF9142 -:104070001F910F91FF90EF90DF90CF90BF90AF9086 -:104080000895CD2829F0822F83238F3F09F003C1A3 -:1040900080E0F82FF170DF2E80FF3CC0809192020B -:1040A0004091610256E0841315C02D873E878D85AF -:1040B0009E850E947C0F292F22952F702230F0F0D0 -:1040C000243018F59F70F1F0F8019581907FD1F4BC -:1040D000D12C1EC090E0589FF001599FF00D112483 -:1040E000EE59FD4F6181361306C06081261303C06F -:1040F0006281E6120FC001968770D5CF9F7011F0D4 -:10410000882331F3805E883018F3C8010E94CD18EF -:10411000FD2CA5CFEE2009F4A2CF80916002816032 -:1041200080936002F12C9BCF431306C0921304C00E -:10413000F801EE2009F479C0C8010E94880F882395 -:1041400009F1EE20F9F080916002803270F0209148 -:104150005B0230915C0238872F831986DB86CA8622 -:104160008C87CE0107960E94CD1886E0F801ABE55A -:10417000B2E001900D928A95E1F70E947F1FFF2423 -:10418000F3946DCFC8010E94CD18F9CF51110AC028 -:104190008BE592E00E94CD1886E0F50111928A9598 -:1041A000E9F7C0CF43130FC092130DC0E1100BC04D -:1041B000F8018583C8010E94CD1886E0F5011192AF -:1041C0008A95E9F74CCFC8010E94880F8823D1F265 -:1041D000EE20C1F280916002803238F220915B02C1 -:1041E00030915C023A8329831B82DD82CC828E83EC -:1041F000CE010196B8CFE03AF105F8F6FE2CEE209C -:1042000009F243131FC092131DC08091600280FD0C -:1042100010C0982F907F69F0F8018583903F31F0AE -:10422000982F907F905F8F70892B8583C8010E94A3 -:10423000CD1886E0F801ABE5B2E001900D928A95C9 -:10424000E1F70DCFC8010E94880F81118ECF8091B8 -:104250006002816080936002C8010E94CD18FFCE89 -:10426000EE2009F48FCFC8010E94880FF82E882312 -:1042700009F488CF86E0F801ABE5B2E001900D9239 -:104280008A95E1F780915B0290915C020E947C0F1D -:104290000E947F1FE4CE81E08E25FBCE1F93CF933B -:1042A000DF93CDB7DEB767970FB6F894DEBF0FBECA -:1042B000CDBF4B8B5C8B6D8B7E8B8F8B6111109286 -:1042C00094021A8A198A85E0FE017396DE011D9612 -:1042D00001900D928A95E1F786E0FE013D96DE01A0 -:1042E000179601900D928A95E1F7CE0107960E94EC -:1042F000D51F882389F016E0809192029091610287 -:1043000089134BC067960FB6F894DEBF0FBECDBFC2 -:10431000DF91CF911F91089586E0FE013796DE016F -:10432000119601900D928A95E1F78A859B85892BDC -:1043300011F38F81988589238F3FE9F220916102E3 -:1043400030E0C90101968770992740919202481781 -:10435000190681F410924F040E94A111109261027B -:104360001092920286E0EBE5F2E0DF011D928A9561 -:10437000E9F7C1CF96E0929FD001939FB00D112431 -:10438000AE59BD4FFE01319601900D929A95E1F71D -:10439000809361020E945A0BAECF819FC00111240D -:1043A0008E599D4F0E94D51F882309F4ABCF809171 -:1043B000920290E0019687709927809392029CCF99 -:1043C0000F931F93CF93DF9300D000D0CDB7DEB70C -:1043D0006091C6027091C7028091C8029091C90293 -:1043E0000E940308643671058105910588F10E94D9 -:1043F000460E882379F10E941F086E5F7F4F8F4F12 -:104400009F4F69837A838B839C8380912C01909149 -:104410002D0180559D4F40912B0150E045305105B5 -:1044200010F044E050E0BE016F5F7F4F0E942F35D7 -:1044300084E090E00E942434892BD9F40E941F0864 -:104440006093C6027093C7028093C8029093C9021A -:1044500081E010C00E941F080091D3021091D40285 -:104460002091D5023091D602600F711F821F931FD9 -:10447000C4CF80E00F900F900F900F90DF91CF91FD -:104480001F910F910895BF92CF92DF92EF92FF920A -:104490000F931F93CF93DF93B82EEB01F42E690196 -:1044A000688179818A819B810E9403086436710545 -:1044B0008105910510F4FF2019F1EB2C0B2C000C59 -:1044C000FF088B2D9AE08902F0011124EF5FFE4F67 -:1044D0008381948180559D4F428150E004171507D8 -:1044E00008F4A801B6010E942F35C7010E942434A8 -:1044F000892B89F40E941F08688379838A839B83B0 -:1045000081E0DF91CF911F910F91FF90EF90DF90AD -:10451000CF90BF90089580E0F4CF0F931F93CF9377 -:10452000DF930F92CDB7DEB780913A048983209153 -:10453000C50290E041E02817190609F440E001E0C7 -:1045400010E09E012F5F3F4F6EEC72E086E00E940C -:1045500043220F90DF91CF911F910F9108950F93F8 -:104560001F93CF93DF93CDB7DEB729970FB6F8949B -:10457000DEBF0FBECDBF85E0E7E6F4E0DE011196B9 -:1045800001900D928A95E1F78091490390914A0339 -:10459000A0914B03B0914C038E839F83A887B9876A -:1045A00041E08885811101C040E009E010E09E01F2 -:1045B0002F5F3F4F6AEC72E085E00E944322811139 -:1045C00010924B0329960FB6F894DEBF0FBECDBFF5 -:1045D000DF91CF911F910F9108956F927F928F92EB -:1045E0009F92AF92BF92CF92DF92EF92FF920F9382 -:1045F0001F93CF93DF930F92CDB7DEB7862E5A016C -:104600006901682E880F7708C3010E942434892B22 -:1046100009F07BC08AE0869DF001879DF00D112492 -:10462000EF5FFE4F458150E04115510511F041E02B -:1046300050E08AE0869DF001879DF00D1124EF5F28 -:10464000FE4F6681778160557D4FCE0101960E94B5 -:104650002F35F50160817181828193810E94030869 -:10466000643671058105910540F4B701C8010E94C7 -:10467000B4089981891709F44FC0082C000C9908D7 -:10468000C4010E942434892B91F0B12C8B2D0F9002 -:10469000DF91CF911F910F91FF90EF90DF90CF901E -:1046A000BF90AF909F908F907F906F9008958AE019 -:1046B000889DF001899DF00D1124EF5FFE4F45812B -:1046C00050E0E416F50608F4A7018AE0889DF001A1 -:1046D000899DF00D1124EF5FFE4F66817781605553 -:1046E0007D4FC6010E942F35B701C8010E94B40852 -:1046F00099818913CACF0E941F08F50160837183D5 -:1047000082839383BB24B394C1CFB12CA701B8019A -:10471000C6010E942F35BACFBB24B394F7CFCF92F6 -:10472000DF92EF92FF920F931F93CF93DF9300D00E -:1047300000D00F92CDB7DEB76B0185E0E82EF12CEB -:1047400001EB12E09E012F5F3F4F48EA52E061E02B -:1047500080E00E94ED22882349F095E0FE01319629 -:10476000A3EAB2E001900D929A95E1F795E0E3EAB1 -:10477000F2E0D60101900D929A95E1F70F900F901B -:104780000F900F900F90DF91CF911F910F91FF909D -:10479000EF90DF90CF90089590E080E00E94463542 -:1047A000893E9E4F11F40C94AF0F80E008951F9244 -:1047B0000F920FB60F9211242F933F934F935F9355 -:1047C0006F937F938F939F93AF93BF93CF93DF9319 -:1047D000EF93FF93D091E900DF708091EC00C82F38 -:1047E000C17080FDC0E81092E9008091F000877FE1 -:1047F0008093F00078940E94AA111092E9008091B1 -:10480000F00088608093F000CD2BCF70C093E9005A -:10481000FF91EF91DF91CF91BF91AF919F918F91D8 -:104820007F916F915F914F913F912F910F900FBEAC -:104830000F901F9018951F920F920FB60F92112490 -:104840002F933F934F935F936F937F938F939F9398 -:10485000AF93BF93EF93FF938091E10082FF09C074 -:104860008091E20082FF05C08091E1008B7F809300 -:10487000E1008091DA0080FF24C08091D80080FFA1 -:1048800020C08091DA008E7F8093DA008091D90079 -:1048900080FF9DC080E189BD82E189BD09B400FE31 -:1048A000FDCF81E080935C0480914E04811109C0AA -:1048B0000E9475060E9440078091E2008460809308 -:1048C000E2008091E10080FF17C08091E20080FF4C -:1048D00013C08091E2008E7F8093E2008091E2001D -:1048E00080618093E2008091D80080628093D8003C -:1048F00019BC85E080935C048091E10084FF2BC0AB -:104900008091E20084FF27C080E189BD82E189BDFA -:1049100089B5982F917080FFFBCF8091D8008F7D53 -:104920008093D8008091E1008F7E8093E100809198 -:10493000E2008F7E8093E2008091E20081608093AC -:10494000E20080915D04882309F447C084E08093ED -:104950005C0480915C048091E10083FF27C080911A -:10496000E20083FF23C08091E100877F8093E10014 -:1049700082E080935C0410925D048091E1008E7F60 -:104980008093E1008091E2008E7F8093E20080912D -:10499000E20080618093E20042E060E080E00E94FB -:1049A0000E078091F00088608093F000FF91EF91F6 -:1049B000BF91AF919F918F917F916F915F914F9137 -:1049C0003F912F910F900FBE0F901F90189519BC1B -:1049D00010925C0410924E0474CF8091E30087FD26 -:1049E00093E090935C04B5CF78941F921FB61F920A -:1049F00011248F939F93AF93BF938091470490911D -:104A00004804A0914904B0914A040196A11DB11D2A -:104A10008093470490934804A0934904B0934A04B8 -:104A2000BF91AF919F918F911F901FBE1F901895BE -:104A30009C014FB7F8948091470490914804A0914D -:104A40004904B0914A044FBF821B930B08952FB7BE -:104A5000F8948091470490914804A0914904B09142 -:104A60004A042FBF0895AF92BF92DF92EF92FF9258 -:104A70000F931F93CF93DF93CDB7DEB761970FB638 -:104A8000F894DEBF0FBECDBF4C87888B998BE52E87 -:104A9000D62EF72E5E0127E0A20EB11C85E0F501AF -:104AA00011928A95E9F7809148038A3008F095C001 -:104AB00080914603909147030E941825089708F4B7 -:104AC0008CC004E610E025E030E0A50164E084E15C -:104AD0000E946332892B09F0DEC0109248038B8557 -:104AE00087FDD1C0E894E0F880914403909145039C -:104AF000009709F0C2C08F819885891708F091C08E -:104B0000981B892F41E02091700130917101889F9D -:104B1000C001112455E0589FF001599FF00D112458 -:104B2000E29FB001E39F700DF29F700D1124660F9C -:104B3000672F661F770B7195442319F07195619566 -:104B400071098091420390914303680F791F898511 -:104B50009A85891708F068C0981B892F41E0889FC3 -:104B6000C001112455E0589FF001599FF00D112408 -:104B7000E29FC001E39F900DF29F900D1124880FDA -:104B8000892F881F990B9195442319F09195819550 -:104B900091092091400330914103820F931F6038A7 -:104BA00071050CF444C06F5771097093430360930F -:104BB00042033FE7D32E803891050CF44BC08F574A -:104BC000910990934103809340039FE7F92E0E943F -:104BD00027259093470380934603ED86DE86FF8664 -:104BE00086E0FE013C96DE01119601900D928A95B9 -:104BF000E1F729813A814B815C816D817E8180E082 -:104C000090E061960FB6F894DEBF0FBECDBFDF9186 -:104C1000CF911F910F91FF90EF90DF90BF90AF90D9 -:104C20000895891B40E06FCF891B40E098CF613821 -:104C3000FFEF7F074CF461587F4F709343036093FD -:104C4000420321E8D22EB7CFD62E10924303109202 -:104C50004203B1CF81382FEF92074CF481589F4F18 -:104C6000909341038093400381E8F82EB0CFF82E53 -:104C70001092410310924003AACF019790934503ED -:104C800080934403A4CF6894E0F884E00E945C150C -:104C900084E190E0F3CF809148038F5F80934803D5 -:104CA00096CF9F92AF92BF92CF92DF92EF92FF92F8 -:104CB0000F931F93CF93DF93CDB7DEB764970FB6F3 -:104CC000F894DEBF0FBECDBF8E010F5F1F4F8AE08D -:104CD000D8011D928A95E9F79EE4C92E91E0D92E5C -:104CE000F12CE12CAA24A394B12CF60181916F013F -:104CF0008F3F09F444C0F894E82FE295EF70F0E09C -:104D000021A18F70A50102C0440F551F8A95E2F7BB -:104D1000CA01922F982B91A392A18095892382A3F7 -:104D20000E947D0900C0E7E4F1E0912C31E021917F -:104D30002F3F09F478C0A22FA295AF70B0E09096F3 -:104D40008C9190E02F7002C0959587952A95E2F797 -:104D500080FD69C0832F982A330F51E0EE34F507A8 -:104D600031F7F601319780818F3F11F00E947F0962 -:104D700080EA8A95F1F7F801EE0DFF1D9082AFEF02 -:104D8000EA1AFA0AB5E0EB16F10409F0AECF4AE0F0 -:104D900050E0B80189ED92E00E9422357C01892B18 -:104DA00041F08AE0F801A9EDB2E001900D928A95F8 -:104DB000E1F71091E402E114F104B9F181E080938C -:104DC00098020E94272590939702809396028091E3 -:104DD0009602909197020E941825069770F0A9ED0F -:104DE000B2E0E12FF0E0E65DFC4F8D91819322E08F -:104DF000AE3DB207D1F71092980281E090E0EF2823 -:104E0000C1F064960FB6F894DEBF0FBECDBFDF9140 -:104E1000CF911F910F91FF90EF90DF90CF90BF90B7 -:104E2000AF909F90089580E096CF80919802811175 -:104E3000CECF0E94460ED82EE091E402882309F4DA -:104E4000C9C07E0140E1E40EF11C85E0D7011D924E -:104E50008A95E9F70E2F10E0065D1C4F8091D20273 -:104E60008A3008F080C04FE853E2B701C8010E94C1 -:104E7000020E882309F49AC04EEB58E2B701C8012C -:104E80000E94020E882309F491C040EE51E2B7015E -:104E9000C8010E94020E882309F488C04FEA52E23A -:104EA000B701C8010E94020E882309F47FC04DE8B3 -:104EB00052E2B701C8010E94020E882309F476C0AD -:104EC0001092D2028091E30290E045E050E0B701F9 -:104ED000865D9C4F0E94223521E02093A102892B00 -:104EE00009F057C0D12C8BE9E82E82E0F82E10E0B3 -:104EF00000E0D7018D917D018823D1F08695F801DE -:104F000009F465C0E950FE4F808191819C878B87B1 -:104F10001D860E9427258160782F9F878E87F70145 -:104F2000319710824B855C856D858F850E944E215F -:104F30000E5F1F4F04301105E1F66091F50270918C -:104F4000F6028091F7029091F8020E940308613600 -:104F50007A4E8105910528F040E060E080E00E94F3 -:104F6000DC0C8D2D4ECF8091990290919A020E9477 -:104F70001825843F914008F076CF8091A1028823C4 -:104F800009F4B0CF85E0F70111928A95E9F7109204 -:104F9000A102A091E302B0E0A65DBC4F85E0FE0156 -:104FA000709601900D928A95E1F79DCF8091D20283 -:104FB0008F3F31F08F5F8093D2028A3008F482CF26 -:104FC0000E94272590939A0280939902D6CFED50A4 -:104FD000FE4F9ACFF0E0E65DFC4FF89485E0A1EB40 -:104FE000B2E001900D928A95E1F765E070E081EB07 -:104FF00092E00E94B4088093B0020E947D09F89468 -:10500000E091EC02F0E0E751FD4F80818B878093C7 -:10501000B70261E070E0CE010B960E94B408809365 -:10502000B6020E947D09F894C090B802D090B902EF -:10503000E090BA02F090BB0280919D0290919E0296 -:10504000A0919F02B091A002C816D906EA06FB06FD -:10505000D1F0C0929D02D0929E02E0929F02F09207 -:10506000A0020E94460E81110EC00E941F08C61A9F -:10507000D70AE80AF90AC092D302D092D402E09289 -:10508000D502F092D6020E947D09F8948091C30265 -:10509000882321F184FF04C09091C40290934C03B3 -:1050A00080FF0DC08091BC0280FF25C090916704F5 -:1050B00091609093670460E086950E9494168091B9 -:1050C000C30281FF09C020E04091BF026091BE028F -:1050D0008091BD020E947D151092C3020E947D093D -:1050E000F8948091C502882349F00E945A0D0E94CD -:1050F0007D0980E086CE0E948C11E1CF0E943F0D99 -:10510000F6CFEF92FF920F931F93CF93DF9300D0D0 -:1051100000D00F92CDB7DEB7162FE82EF12CC701C5 -:10512000880F991F662339F189509E4FFC018081B9 -:1051300091819A83898301E00B830E9427258160F6 -:10514000782F9D838C83F701E556FD4F0127110FC2 -:10515000102B108349815A816B818D810F900F90A4 -:105160000F900F900F90DF91CF911F910F91FF90B3 -:10517000EF900C944E218D509E4FD8CFCF92DF925E -:10518000EF92FF920F931F93CF93DF930F92CDB7C0 -:10519000DEB7EE24E394F12C07EB12E09E012F5FC3 -:1051A0003F4F4CEA52E063E082E00E94ED22082F7C -:1051B000882321F1C090E6028C2D90E09C012751BC -:1051C0003D4F79011981F9018081181BD12E80E0B2 -:1051D0000AC0DA94F70180818F5F808360E08C2DB4 -:1051E0000E948128802F1D14A4F3912F17FD90E0B9 -:1051F000191B11110EC081110E94410B802F0F90BD -:10520000DF91CF911F910F91FF90EF90DF90CF90A2 -:1052100008951F5FF70180818150808361E08C2DAC -:105220000E948128802FE5CF1F921FB61F92112464 -:105230008F939F93AF93BF9380914604811113C0C6 -:105240008091470490914804A0914904B0914A0488 -:105250004196A11DB11D8093470490934804A093EB -:105260004904B0934A04BF91AF919F918F911F90D1 -:105270001FBE1F901895CDB7DEB7E0970FB6F89414 -:10528000DEBF0FBECDBF84B7877F84BF0FB6F89453 -:10529000A895809160008861809360001092600002 -:1052A0000FBE80E890E00FB6F89480936100909371 -:1052B00061000FBE85B7806885BF85B7806885BFF0 -:1052C0008BE799E090933102809330020E9475063B -:1052D0000E9440078091E20084608093E20078940D -:1052E00080915C048823A1F01091E9001F709091D7 -:1052F000EC00892F817090FD80E8182B1092E90056 -:105300008091E80083FD0E94AA111F701093E900AC -:1053100082E084BD93E095BD9AEF97BD80936E00C7 -:105320001092D3021092D4021092D5021092D6029B -:105330000E94AF0F811102C00E940B0F0E94460E07 -:105340008093580180915801882309F4C9C01092B4 -:10535000720185E2809373010E94460E81110E94C2 -:1053600017338091580181112FC0FE01359686E0D8 -:10537000DF011D928A95E9F786E6898387E98A83AA -:1053800086EC8B8384E38C8385E38D833497AEE452 -:10539000B1E0CE010B9621912D938E179F07D9F77F -:1053A00087E0E8E7F1E0DE01919601900D928A95A1 -:1053B000E1F7FE01B196A7E4B1E0CE018896219114 -:1053C0002D938E179F07D9F78091580195E0811191 -:1053D00090E09093E40285E0891B8093E3020EE461 -:1053E00011E083E5E82E81E0F82EF80181918F012C -:1053F0008F3F11F00E947F09E016F106B1F707E434 -:1054000011E0BEE4EB2EB1E0FB2ED8018D918D01B1 -:105410008F3F11F00E947F09E016F106B1F78AE094 -:10542000EAE2F3E0DF01282F1D922A95E9F7E9ED82 -:10543000F2E0DF011D928A95E9F70E94CC238111E9 -:1054400002C00E94681882E090E00E943835809384 -:105450001F0384E090E00E943835182F82E290E02C -:105460000E943835982F812F9093D8028093D702CD -:105470000E945126EFE7FBEB3197F1F700C00000E7 -:105480000E94512680912A0380FF2EC06FEF7FEF8C -:1054900090E080E00E946A3581E08093E00080E245 -:1054A0008093D8001092C9008FE19EE40197F1F734 -:1054B00000C0000087E090EBDC01809370069093C1 -:1054C0007106A0937206B093730688E19CE00FB654 -:1054D000F894A895809360000FBE90936000FFCF72 -:1054E00085E28093720136CF83E090E00E943835E8 -:1054F0000E94C60B809166040E94FB160E94CC237A -:10550000811102C00E94681888E190E00E94403535 -:1055100060933C0470933D0480933E0490933F0459 -:10552000672B682B692B11F40E9431180E941831E7 -:1055300067E081E00E94501565E586E10E94501504 -:1055400063E687E10E94501560EA8AE10E945015E7 -:1055500069E98BE10E94501565EF8CE10E945015BE -:1055600060EA8DE10E94501560E38EE10E945015C3 -:1055700066E083E00E94501561E08CE00E945015C7 -:1055800060E081E00E94501560E08CE00E945015C0 -:105590006FE084E00E94501561E08CE00E9450159D -:1055A0000E94460E811102C00E941A3383E080934C -:1055B0001A0380E280932F040E9418316DE070E09E -:1055C0008CE992E00E940F0D892BE9F580911A0376 -:1055D00063E070E081FD0BC289E992E00E940F0D4B -:1055E000892B89F56DE070E089E892E00E940F0D4B -:1055F000892B49F50E941F086058774C8E4F9F4FAA -:105600006093360470933704809338049093390480 -:10561000EEE6F4E080E092E0DF019C011D92215073 -:105620003040E1F7F0936F06E0936E068FEF9FEF47 -:1056300090936D0480936C0481E080933B0480938D -:105640003A0410921B038091E502811136C00E943A -:10565000CC23811104C00E9468180E94EE1788E0D4 -:1056600090E00E94403560936704709368048093D3 -:10567000690490936A0480914B03836080934B0389 -:105680006E7F71F40E94EE1788E090E00E94403532 -:1056900060936704709368048093690490936A042C -:1056A0000E94CF088091670480FF04C060E0869567 -:1056B0000E94941681E08093E50280915801811147 -:1056C00006C084EF8093660185EF80936501209189 -:1056D0006601A22FA295AF70B0E091963C91919790 -:1056E0002F7081E090E0BC01022E01C0660F0A9489 -:1056F000EAF7462F4095432391964C9391979296C3 -:105700003C919297362B92963C93929740916501EB -:10571000E42FE295EF70F0E031A14F70042E01C04C -:10572000880F0A94EAF7982F9095932391A392A15A -:10573000892B82A390968C9190E002C095958795D5 -:105740002A95E2F7817020A130E002C035952795B7 -:105750004A95E2F792E020FF90E0892B8093ED02DA -:105760009091580181E098279093EC02891B8093D7 -:10577000E6020E94611860E08AE00E94941689EABD -:1057800092E090934E0380934D0381E00E94A41712 -:1057900080EE90E090937101809370010E94FC0C68 -:1057A00089E591E09093430480934204A0E46A2E3B -:1057B00080915C04FF24F39400E112E1853009F448 -:1057C00065C10E945126E82E81110E941F08FAE24D -:1057D0002F2EF3E03F2EE0E2F3E0D10110E000E0F5 -:1057E000B02EDD9081918D1509F474C18D25C12CE9 -:1057F000FF24F394982F9F2109F467C10E94460E5D -:10580000882399F0C9A2BAA2DF2081E009F480E0E0 -:105810008BA30E9427258160782F9DA38CA349A18B -:105820005AA16BA18DA10E944E21F801E05EFC4FB0 -:105830008081F826F0828091ED02E82FEE0FEE0FC6 -:1058400090916601A92FA295AF70B0E090962C912F -:1058500030E09F7002C0359527959A95E2F7217048 -:10586000332790916501A92FA295AF70B0E0909673 -:105870004C9150E09F7002C0559547959A95E2F77C -:10588000CA018170992740FF02C082E090E0822B1C -:105890008E2B8093ED021091EC028F70E82FF0E0D8 -:1058A000E350FE4F80819091EB02890F8093EB02D1 -:1058B000F12C84306CF0E12FF0E0E751FD4F808156 -:1058C0008F5F808360E0812F0E948128FF24F39402 -:1058D0008091EB028D3F6CF4E12FF0E0E751FD4F3A -:1058E00080818150808361E0812F0E948128FF2484 -:1058F000F3948091EB02082E000C990B64E070E0A9 -:105900000E94F8348093EB02F1100E94410B8091C9 -:105910003B04882351F180911C0390911D030E9448 -:105920001825C29708F0EDC020916C0430916D04E9 -:105930002115310509F0EDC180913A048823A9F0C1 -:105940000E941F08009136041091370420913804FA -:1059500030913904601B710B820B930B6F3F7F4FAB -:105960008F4F9F4710F40E943F0DE11001C0F110CE -:105970000E945A0D0E94C80F0E94690E90911E034A -:10598000891731F00E94690E80931E030E94E3166E -:1059900080915C04843009F00BCF83E08093E900B0 -:1059A0008091E80082FF04CF8091E80090E085FFBD -:1059B0000CC00E94940630E2E32EF12C8E010F5FA2 -:1059C0001F4F882309F484C291E08091E8008B770F -:1059D0008093E800992309F4EBCEE981E150E331AB -:1059E00008F0DAC2F0E0EC51F94C0C940C3586E981 -:1059F00092E0F4CD80915C04843009F437C080E0FB -:105A00000E94E3168091E802811109C0F092E80239 -:105A10008091670481708093E7020E948C110E943C -:105A20003F0D0E94C80F1092460488E190E00FB627 -:105A3000F894A895809360000FBE6092600083B7D1 -:105A4000817F846083BF83B7816083BF78948895AA -:105A500083B78E7F83BF0FB6F894A89580916000BE -:105A6000886180936000109260000FBE80915B049B -:105A7000882361F00E945126EAE2F3E081918111CE -:105A8000B6C3A4E3B3E0AE17BF07C1F780915C04CF -:105A9000853009F4AFCF10924F040E94A1110E94EB -:105AA000690E0E94E3161092E8028091E7028823B3 -:105AB00049F08091670481608093670460E0869577 -:105AC0000E9494160E94FC0C7CCEC394FF0C27E02D -:105AD000C21290CE0F5F1F4F0A30110509F080CE21 -:105AE0008FEF88A789A71AA60E9427258160782FA3 -:105AF0009CA78BA748A559A56AA58CA50E944E21F5 -:105B00009ACE0E94272590931D0380931C0360E08A -:105B100080E00E949D080E94690E8093F9020E9415 -:105B2000460E8823C9F06091F5027091F6028091CB -:105B3000F7029091F8020E940308613375478105CE -:105B4000910540F00E943F0D80913B04882309F4A9 -:105B5000F3CEEACE0E945A0D0E94460E882309F425 -:105B6000BFC061E080E00E949D0860E08FE791E0A7 -:105B70000E94341562E080E00E949D0880916604D6 -:105B80000E948C0C823009F48CC008F081C08823FC -:105B900009F487C0813009F48AC065E080E00E9482 -:105BA0009D0860E08DE991E00E94341566E080E098 -:105BB0000E949D086091F9026695617082EA91E009 -:105BC0000E94341567E080E00E949D086091F90210 -:105BD0006095617087EA91E00E94341568E080E08A -:105BE0000E949D086091F90262FB662760F98BEACA -:105BF00091E00E9434156091F1027091F20280915F -:105C0000F3029091F4020E9403086D327140810505 -:105C1000910508F499CF0E941F086093F1027093D8 -:105C2000F2028093F3029093F4028091F0028111CA -:105C300004C080916701811142C06DE080E00E9444 -:105C40009D0860E080EB91E00E9434156AE080E0FE -:105C50000E949D0881E0809367018091EF0290E0AF -:105C60000196817099278093EF0221E030E0281B94 -:105C7000390B40E6429FC001439F900D11242091B3 -:105C8000EE02222351F185589C4F0E9432065CCFD0 -:105C9000833089F0843009F080CF60E081E991E0C1 -:105CA00003C060E085E891E00E94341576CF60E0A3 -:105CB0008BE891E0F9CF60E087E991E0F5CF6AE009 -:105CC00080E00E949D0860E080EB91E00E94341526 -:105CD0006BE080E00E949D08C0CF85549D4FD5CFDA -:105CE00064E080E00E949D0860E086EB91E00E9405 -:105CF000341565E080E00E949D0860E08CEB91E047 -:105D00000E94341569E080E00E949D088BE394E0D6 -:105D1000BCCF80911B0361E070E081110DCE082F94 -:105D200010E02B01082E02C0440C551C0A94E2F727 -:105D3000A90144215521452B09F448C090911A032B -:105D400090FD46C08295880F807680936A01980105 -:105D5000369527953695279520936D01815E809322 -:105D60006B0110926E0124E630E047E050E068E6F7 -:105D700071E088E70E940F32892B09F0DDCDA80180 -:105D800075E0440F551F7A95E1F780911A0380FD65 -:105D90002DC042595B4F04E610E020E230E060E4A1 -:105DA00088E70E943632892B09F0C6CD0E945A0D31 -:105DB000C2018095909540906C0450906D044822EB -:105DC000592250926D0440926C04B6CD8F5FA7CFDC -:105DD000880F880F880F80936A0110926D01895F88 -:105DE00080936B0183E080936E01BDCFEAEFF2E018 -:105DF00080E2DF011D928A95E9F7E1E1F2E0F8AB7C -:105E0000EFA70DE012E067E0A62E99249394AFA5CA -:105E1000B8A96D91B8ABAFA7F80181918F01840F3C -:105E2000952F911D9C0122593B4F3EA72DA7E62F90 -:105E3000F0E0E650FD4F30E020E07A2C721AB92CE9 -:105E4000022E01C0BB0C0A94EAF7CDA4DEA490E0B8 -:105E5000D6018D916D018B21672D691B6770862E90 -:105E6000062E000C770BB82F01C0BB0F8A94EAF7FF -:105E70008B2E7195619571096770772701C08695A2 -:105E80006A95EAF7882A8081882A80829F5F983005 -:105E9000F9F62F5F3F4F31962830310571F6E5E175 -:105EA000F2E02FA538A9E217F30709F0B0CF04E616 -:105EB00010E020E230E04AEF52E071CF8091F10033 -:105EC000D8018D938D01B1E0EB1AF10809F47CCD76 -:105ED0008091E80085FDF2CF8091E8008B77809378 -:105EE000E8000E949406882399F36ECD1A8289E017 -:105EF0008B8311C08A81823009F491C1833091F182 -:105F0000813009F049C00E941F080E9412356B833E -:105F10007C838D839E8380915C04843009F048CC1F -:105F20001091E9001F709091EC00892F817090FD15 -:105F300080E8182B82E08093E9008091E80080FFE0 -:105F40000DC050E040E060E270E0CE0101960E949A -:105F5000C5068091E8008E778093E8001F7010934B -:105F6000E90026CCFE013396D1018D911D0181936C -:105F7000B4E32B16B3E03B06B9F7CDCF8A8182306C -:105F800059F46B817C818D819E810E94123586E25D -:105F900090E00E944C35BFCF8FEF8983BCCF4C81FE -:105FA0006B818A810E941A0F9827892798279E83E0 -:105FB0008D83B1CFED80FE80FE24EF24FE248A8104 -:105FC0000B81EEE00E9F80011124FCE88F9F000DF5 -:105FD000111D11248C8190E0880F991F080F191F43 -:105FE0006F2DC80187960E944C356E2DC80188968A -:105FF000D0CF0E949E0E8FCF8A818138C1F060F48D -:10600000803809F088CF20E04B816091690480914D -:1060100068040E947D157FCF8238E9F0833809F04B -:106020007ACF20E040916A046C818B81F2CF60E0EE -:106030008B810E9494168B81811103C00E948C1168 -:106040006ACF8091670481608093670460E08695E1 -:106050000E94941660CF8B8180936B045CCF8A8101 -:10606000813899F030F4803809F055CF80916A0476 -:106070003FCF823891F0833809F04DCF809168048A -:106080008B83809169048C8346CF8091670480FF65 -:1060900002C086952DCF80E02BCF80916B0428CF56 -:1060A00060916704709168048091690490916A041A -:1060B0000E946B1530CF80E18A832DCF81E08A83E7 -:1060C0008DE116CFCA80DB80DC24CD24DC248E0158 -:1060D0000F5F1F4FEC80E00EF12EF11CC6018D51B9 -:1060E0009D4F0E151F0509F416CF2DE1C21621E0B4 -:1060F000D20658F40E943835D80114968C93FFEFDD -:10610000CF1ADF0A0F5F1F4FE9CFF8011482F7CFD4 -:106110000A811B811027012710279E012F5F3F4F07 -:106120006901EC80E00EF12EF11CC8018D519D4FEC -:10613000E016F10609F4EFCE0D3131E0130728F433 -:10614000D60114966C910E944C35BFEFCB1ADB0A36 -:106150000F5F1F4FEACF0E948E0EDDCE85E0ACCFE1 -:10616000CA80DB80DC24CD24DC248E010F5F1F4F2E -:10617000EC80E00EF12EF11CC6018796E016F106C8 -:1061800009F4C9CEECEBCE16E2E0DE0658F40E942C -:106190003835D80114968C93FFEFCF1ADF0A0F5FC2 -:1061A0001F4FEACFF8011482F7CF0A811B81102715 -:1061B000012710279E012F5F3F4F6901EC80E00E01 -:1061C000F12EF11CC8018796E016F10609F4A3CE62 -:1061D0000C3B32E0130728F4D60114966C910E9410 -:1061E0004C35BFEFCB1ADB0A0F5F1F4FEBCF09BD5A -:1061F00019BD09B400FEFDCF8091D8008F7D80933A -:10620000D8008091E00082608093E0008091E000FF -:1062100081FDFCCF10924F040E94A11137CC86E281 -:1062200090E00E9438351B821C821D828E8373CEC3 -:106230001092B9008CE08093B80008959F92AF92BD -:10624000BF92CF92DF92EF92FF920F931F93CF9363 -:10625000DF93B82EEB010E9427256C01EE24E39416 -:10626000F12CC431D10560F025E0E22EF12CCF3FB6 -:10627000DC0731F0CE0164E170E00E94D8347B018C -:1062800084EAA82E94E8992E1092BC00A092BC003B -:106290000E9427258C018091BC0087FF0DC0809152 -:1062A000B900887F883039F18091B900887F8031CA -:1062B00011F10FEF1FEF09C00E942725801B910BE2 -:1062C0008E159F0540F30EEF1FEFCF3FDC07E1F285 -:1062D000C6010E9418258C179D07B0F2C801DF91F6 -:1062E000CF911F910F91FF90EF90DF90CF90BF90D3 -:1062F000AF909F900895B092BB009092BC000E9416 -:1063000027258C018091BC0087FF0AC08091B900CD -:10631000887F883111F0803461F610E000E0DECF34 -:106320000E942725801B910B8E159F0558F3CBCF1C -:106330000F931F93CF93DF93EB018093BB0084E80F -:106340008093BC000E9427258C018091BC0087FFB0 -:1063500011C02091B900287F81E090E0283211F42B -:1063600090E080E0919581959109DF91CF911F9107 -:106370000F910895CF3FDC0741F30E942725801B32 -:10638000910B8C179D0708F38EEF9FEFEECF0F93C5 -:106390001F93CF93DF93EC0184EC8093BC000E94A9 -:1063A00027258C018091BC0087FF08C08091BB002D -:1063B00090E0DF91CF911F910F910895CF3FDC07BF -:1063C00089F30E942725801B910B8C179D0750F3A2 -:1063D0008EEF9FEFEECF0F931F93CF93DF93EC01E0 -:1063E00084E88093BC000E9427258C018091BC002A -:1063F00087FF08C08091BB0090E0DF91CF911F9193 -:106400000F910895CF3FDC0789F30E942725801B59 -:10641000910B8C179D0750F38EEF9FEFEECFCF922D -:10642000DF92EF92FF920F931F93CF93DF936B0155 -:106430008A017901B9010E941E31E6010C0D1D1D72 -:10644000C017D10761F424E92093BC00DF91CF91FC -:106450001F910F91FF90EF90DF90CF90089597FDDF -:10646000F2CFB70189910E949831EACFCF92DF92A3 -:10647000EF92FF920F931F93CF93DF93C62F6A0182 -:106480007901B8010E941E3197FD0CC0B8018C2F14 -:106490000E949831E601EC0CFD1CCE15DF0511F0D1 -:1064A00097FF0CC024E92093BC00DF91CF911F918E -:1064B0000F91FF90EF90DF90CF900895B8018991F0 -:1064C0000E949831EACFCF92DF92EF92FF920F9322 -:1064D0001F93CF93DF93F82EE62EEA016901B801EE -:1064E0000E941E3197FD15C0B8018E2D0E94983173 -:1064F00097FD0FC0B8018F2D81600E941E31F12CD5 -:10650000E12C21E0C21AD108EC14FD0400F597FF3C -:1065100011C024E92093BC001816190614F490E069 -:1065200080E0DF91CF911F910F91FF90EF90DF906E -:10653000CF900895C8010E94C73197FD04C0FE01A5 -:10654000EE0DFF1D80832FEFE21AF20ADDCF97FDDB -:10655000E0CFC8010E94EB3197FDDBCFCC0DDD1DF4 -:106560008883D7CF84E98093BC0008958EE14A9B4D -:1065700002C08150E1F74A9BFECF08955A9880E20D -:106580008A95F1F75A9A0895FC013BE03A95F1F7A4 -:1065900098E020E080E031E040E14A95F1F7880F93 -:1065A0004A9B02C08160232742E04A95F1F7000030 -:1065B00040E14A95F1F7915079F790E19A95F1F71A -:1065C00099B132E03A95F1F7000040E14A95F1F7D0 -:1065D00092FB992790F992272081920F908308953A -:1065E000EF92FF920F931F93CF93DF930F92CDB74C -:1065F000DEB719828C017C01E60EF11C0E151F0519 -:1066000061F481E09981911180E00F90DF91CF9149 -:106610001F910F91FF90EF9008950E94B632CE0126 -:1066200001960E94C432F80181938F01E7CF529AFC -:106630005A9A089552985A9AEA9AE9E6F0E08081C7 -:106640008F7C808308956150770B91E001C0990F92 -:106650006A95EAF720E031E0911108C0222391F019 -:106660005A9A80E28A95F1F75A980895492F48235B -:1066700039F05A9A232740E24A95F1F79695ECCFE4 -:106680005A98F9CF5A98EDCFFF920F931F93CF935B -:10669000DF93EC018C01060F111DC017D10731F4F7 -:1066A000DF91CF911F910F91FF900895F9900E9473 -:1066B000BE3268E08F2D0E942333EFCF1F920F92DE -:1066C0000FB60F921124EF92FF920F931F932F9307 -:1066D0003F934F935F936F937F938F939F93AF936A -:1066E000BF93EF93FF93CF93DF930F92CDB7DEB7B6 -:1066F00019820E94B632CE0101960E94C432A82FA0 -:10670000A695A695A695282F229525709A2F957067 -:10671000290F922F937026952695920F98279770A0 -:106720008981982B09F075C0A83008F072C080E10B -:106730008A95F1F75A9A529AB2E0BA95F1F700C0E9 -:106740005A98EA2EF12CEAE0AE9FD0011124AF5FF7 -:10675000BE4F1896ED91FC9119973097B1F060916A -:10676000FB017091FC0116962D913C911797260F15 -:10677000371F13968D919C911497680F791F15966A -:106780004C91159712968C9109958AE08E9DF00197 -:106790008F9DF00D1124EF5FFE4F6581662351F050 -:1067A0002091FB013091FC0186819781820F931F1C -:1067B0000E9444330E94BE32F0E1FA95F1F75A98F4 -:1067C00052985A9A80E18A95F1F78AE08E9D80016D -:1067D0008F9D100D11240F5F1E4FD80112966C91E2 -:1067E0001297662371F12091FB013091FC01139601 -:1067F0008D919C91820F931F0E94F032D801ED91F0 -:10680000FC91882311F088E001C082E080830E941F -:10681000B6320F90DF91CF91FF91EF91BF91AF9181 -:106820009F918F917F916F915F914F913F912F91A8 -:106830001F910F91FF90EF900F900FBE0F901F9040 -:106840001895ED91FC91DFCF0F931F93CF93DF93BA -:10685000EC0108970CF0A9C08AE08C9FF0018D9F95 -:10686000F00D1124EF5FFE4F80819181892B09F497 -:106870009CC0F894529A5A9885E08A95F1F70000E6 -:106880008C2F869585709C2F9570890F982F93700B -:1068900086958695890F8E0193E0000F111F9A95BA -:1068A000E1F7082B0E94BE3200C068E0802F0E94F2 -:1068B0002333A0E1AA95F1F752985A9A4A9B27C030 -:1068C00087E090E04A9925C08AE08C9F80018D9FE7 -:1068D000100D11240F5F1E4FF80165816623A1F191 -:1068E0002091FB013091FC0186819781820F931FDB -:1068F0000E94F032811128C0529A5A9AD801ED9123 -:10690000FC9182E08083789482E090E016C000C021 -:10691000D5CF0197B9F4529A5A9A8AE08C9FF00128 -:106920008D9FF00D1124EF5FFE4F0190F081E02D5F -:1069300081E08083789481E090E0DF91CF911F9196 -:106940000F91089500C0BECF0E94B632B0E2BA9552 -:10695000F1F75A98529AE0E1EA95F1F78AE08C9FB4 -:10696000F0018D9FF00D1124EF5FFE4F62816623D1 -:1069700051F02091FB013091FC0183819481820FC1 -:10698000931F0E9444330E94BE328AE08C9FF00124 -:106990008D9FF00D1124EF5FFE4F0190F081E02DEF -:1069A0001082789490E080E0C8CF84E090E0C5CF7A -:1069B000AA1BBB1B51E107C0AA1FBB1FA617B70725 -:1069C00010F0A61BB70B881F991F5A95A9F7809541 -:1069D0009095BC01CD010895991B79E004C0991FE1 -:1069E000961708F0961B881F7A95C9F78095089529 -:1069F00097FB072E16F4009407D077FD09D00E946C -:106A0000D83407FC05D03EF4909581959F4F0895AA -:106A1000709561957F4F0895EE0FFF1F0590F491DB -:106A2000E02D0994692796276927782787277827F3 -:106A30000895FB01DC0102C005900D9241505040C9 -:106A4000D8F70895FB01DC0104C08D9101908019F5 -:106A500021F441505040C8F7881B990B0895FB0161 -:106A6000DC0102C001900D9241505040D8F70895CA -:106A7000F999FECF92BD81BDF89A992780B5089506 -:106A8000A6E1B0E044E050E00C947235A8E1B0E03B -:106A900042E050E00C947235262FF999FECF92BD5A -:106AA00081BDF89A019700B4021639F01FBA20BDD3 -:106AB0000FB6F894FA9AF99A0FBE08950396272F05 -:106AC0000E944D350E944C35252F0E944D35242FB4 -:106AD0000C944D350196272F0E944D350C944C3562 -:106AE000DC01CB01FC01F999FECF06C0F2BDE1BD8E -:106AF000F89A319600B40D9241505040B8F708957D -:106B00000E9487356894B1110C94163608950E943E -:106B1000FB3588F09F5798F0B92F9927B751B0F0FF -:106B2000E1F0660F771F881F991F1AF0BA95C9F711 -:106B300014C0B13091F00E941536B1E008950C9464 -:106B40001536672F782F8827B85F39F0B93FCCF317 -:106B5000869577956795B395D9F73EF4909580958E -:106B6000709561957F4F8F4F9F4F0895E89409C0AE -:106B700097FB3EF490958095709561957F4F8F4F70 -:106B80009F4F9923A9F0F92F96E9BB279395F69586 -:106B9000879577956795B795F111F8CFFAF4BB0F04 -:106BA00011F460FF1BC06F5F7F4F8F4F9F4F16C068 -:106BB000882311F096E911C0772321F09EE8872FF2 -:106BC000762F05C0662371F096E8862F70E060E0AE -:106BD0002AF09A95660F771F881FDAF7880F969527 -:106BE000879597F9089557FD9058440F551F59F010 -:106BF0005F3F71F04795880F97FB991F61F09F3FAA -:106C000079F087950895121613061406551FF2CFD2 -:106C10004695F1DF08C0161617061806991FF1CF22 -:106C200086957105610508940895E894BB27662749 -:106C30007727CB0197F908950E942F360C94A03640 -:106C40000E94923638F00E94993620F0952311F078 -:106C50000C9489360C948F3611240C9416360E94AD -:106C6000F33570F3959FC1F3950F50E0551F629F68 -:106C7000F001729FBB27F00DB11D639FAA27F00D95 -:106C8000B11DAA1F649F6627B00DA11D661F829FBC -:106C90002227B00DA11D621F739FB00DA11D621FA1 -:106CA000839FA00D611D221F749F3327A00D611DBE -:106CB000231F849F600D211D822F762F6A2F1124A0 -:106CC0009F5750409AF0F1F088234AF0EE0FFF1FD3 -:106CD000BB1F661F771F881F91505040A9F79E3F2A -:106CE000510580F00C9489360C9416365F3FE4F31E -:106CF000983ED4F3869577956795B795F795E79580 -:106D00009F5FC1F7FE2B880F911D9695879597F988 -:106D1000089597F99F6780E870E060E008959FEF1D -:106D200080EC089500240A94161617061806090622 -:106D3000089500240A9412161306140605060895F1 -:106D4000092E0394000C11F4882352F0BB0F40F479 -:106D5000BF2B11F460FF04C06F5F7F4F8F4F9F4FB9 -:106D60000895F894FFCF9A0F9A0FA30FA30FA50FC2 -:106D7000A30FA30FA30F9A0F9A0FAA0FA30FA30F8E -:106D8000AA0F9212BA125D14BA125D14ED120E130C -:106D90005D140C1419141E1994199719AB19AE1916 -:106DA000C119CA19EE19341A661A7A1A001A231A66 -:106DB000AC1DAC1D051E051E371EDF1DDF1DDF1DB2 -:106DC000511EC21ED21ED21E762F7A2FBE2FCF2F5B -:106DD000DA2FF92FFC2F2F305030CC2FCC2F5B30F7 -:0E6DE0005E3062308830AB30AE30B030D5302F -:106DEE00013A0200000001000000003A020000001B -:106DFE0005010000003A0200000001060000003A02 -:106E0E000200000001070000003A02040800000022 -:106E1E000000003A02090C0000000000003A0201D6 -:106E2E001500000000000036323331F7F667669722 -:106E3E00C634350000000000010008D50DB40DB0B9 -:106E4E000DAC0DFF07F4F5010021007F22000301B8 -:106E5E008000004A004A4A01F6F731333236674C59 -:106E6E00415945520042617365200047616D6520AE -:106E7E00005261697365004C6F776572004C4F4329 -:106E8E004B0043617073004E756D005363726C005E -:106E9E00202020202000534F4C415200544D50537F -:106EAE005400818283E200E900EA00B500B600B723 -:106EBE0000CD008301CC008A0192019401210223AE -:106ECE000224022502260227022A02B300B4006F12 -:106EDE000070000603060806010606B00200FF0158 -:106EEE0000010000FFFF0000010001FF000008107C -:106EFE001818100800000102020202020202020229 -:106F0E000240227B99017701FC00400B590B790B53 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B8000000000000000000000AF00AE09025B00A2 +:100B9000030100A0FA09040000010301010009217A +:100BA000110100012240000705810308000A090421 +:100BB00001000203000000092111010001222200AE +:100BC0000705820320000107050303200001090433 +:100BD00002000103000000092111010001227B0035 +:100BE0000705840320000A120100020000000832F9 +:100BF000FC87120200010200011E0353006F006C0B +:100C000000610072006900750073005F0053006F9F +:100C10000066006C006500000010034B0065007961 +:100C20000068006900760065000000040309040004 +:100C300011241FBECFEFDAE0DEBFCDBF04B603FE46 +:100C400027C080916D0690916E06A0916F06B091BD +:100C500070068730904BA740B04BD1F410926D06D0 +:100C600010926E0610926F061092700614BE84B732 +:100C7000877F84BF0FB6F894A89580916000886143 +:100C800080936000109260000FBEE0E0F8E30995E9 +:100C900012E0A0E0B1E0EEECFCE602C005900D929F +:100CA000A033B107D9F726E0A0E3B2E001C01D925E +:100CB000AD36B207E1F70E94AE280C9421360C94B1 +:100CC0000000CF93DF9340916B0650916C064B561A +:100CD00054409A01205A3F4F21303240C0F020E06A +:100CE00032E0241B350B6091690470916A04FC01A9 +:100CF000CA01240F351FC1E0D0E08217930750F0DE +:100D000070936A0460936904DF91CF91089520E69F +:100D100030E0E9CF4491DC01A559BB4F5C91451708 +:100D200081F04C93AC01A5E056954795AA95E1F763 +:100D3000DE0102C0AA0FBB1F4A95E2F7AD016A2B84 +:100D4000752B01963196D9CFE8EDF0E080818E7F4A +:100D500080831092E2001092DA001092E100A0EE7F +:100D6000B0E08C9181608C9380818F77808319BCF7 +:100D7000A7EDB0E08C918E7F8C9380818F7E8083F5 +:100D800010926D0308952091E4003091E50095E6FE +:100D9000A9012091EC00822F817020FF06C0809174 +:100DA000E80080FF06C080E008952091E80022FD61 +:100DB0001AC080917B03882389F0853089F0809167 +:100DC000EB0085FD0FC02091E4003091E500421753 +:100DD0005307F9F29150E1F684E0089582E0089516 +:100DE00083E0089581E00895EF92FF920F931F939F +:100DF000CF937C018B010E94C306C82F811117C0BD +:100E00008091E80085FD0BC08091E8008E7780938B +:100E1000E8000E94C306882399F3C82F08C0F70191 +:100E200081917F018093F1000150110949F78C2FC6 +:100E3000CF911F910F91FF90EF90089580917D03C6 +:100E400087FF13C08091E80082FF06C08091E80010 +:100E50008B778093E80004C080917B038111F2CFEF +:100E6000089580917B038823D9F38091E80080FF67 +:100E7000F8CF8091E8008E77ECCF982F9093E9001F +:100E8000242F762F50E0891731F07091EC002091DB +:100E9000ED005091F00021FD07C09F5F973071F782 +:100EA0008093E90081E008953091EB003E7F30931C +:100EB000EB003091ED003D7F3093ED003091EB0081 +:100EC00031603093EB007093EC002093ED00509371 +:100ED000F0002091EE0027FDE0CF80E00895CF9252 +:100EE000DF92EF92FF920F931F93CF93DF93C8EDA2 +:100EF000D0E088818F7E8883E7EDF0E0808181609B +:100F0000808384E082BF81E080936D0388818E7F3F +:100F1000888302EE10E0F80110821092DA0081EE70 +:100F2000C82ED12CF601108288818F778883888122 +:100F30008068888388818F7D888319BC10927B03A9 +:100F400010927C0310927A031092790390EEE92EAE +:100F5000F12CF70180818B7F808388818160888379 +:100F600042E060E080E00E943D07F60180818E7FD4 +:100F70008083F801808181608083808188608083A4 +:100F8000F70180818E7F8083888180618883DF91F3 +:100F9000CF911F910F91FF90EF90DF90CF90089528 +:100FA000FC01809183039091840386179707A0F03A +:100FB0006115710529F49091E8009E779093E800FF +:100FC00090E06115710551F4911108C08091E8001D +:100FD00082FF34C080E00895BC01F2CF80917B0392 +:100FE0008823C1F18530C1F18091E80083FD30C0D4 +:100FF0008091E80082FDEACF8091E80080FFE1CF98 +:101000008091F3002091F200382F6115710519F0DD +:101010002830310558F091E02830310509F090E092 +:101020002091E8002E772093E800CBCF8191809328 +:10103000F100615071092F5F3F4FE7CF80917B0333 +:10104000882341F0853041F08091E80083FFBECFD6 +:1010500081E0089582E0089583E0089508958091E5 +:1010600070030895CF92DF92EF92FF922FB7F8941A +:10107000C0906603D0906703E0906803F090690326 +:101080002FBFA7019601261B370B480B590BCA012E +:10109000B901FF90EF90DF90CF9008952FB7F894AB +:1010A0006091660370916703809168039091690372 +:1010B0002FBF0895209163033091640328173907E7 +:1010C00071F09093640380936303E0916103F09166 +:1010D0006203309721F00084F185E02D0994089592 +:1010E00020915F03309160032817390771F09093C6 +:1010F000600380935F03E0916103F0916203309796 +:1011000021F00680F781E02D09940895811520E5EE +:101110009207F8F48115E0E49E0788F5893391057C +:1011200070F48C32910548F48430910580F08E3152 +:10113000910518F08897039750F480E0089584365D +:101140009105D9F320F0805E91090897B0F381E012 +:101150001BC08115F9E59F0750F4811528E592071A +:10116000A0F491558F3F910509F088F7E6CF8115DE +:10117000EAE59E0710F390568115904240F7FB0177 +:101180009581907F81E0C9F20895FB019581907F60 +:1011900081E0903291F6F8CF20914E0336E0839FA4 +:1011A000C0011124629F800D911D1124811522E040 +:1011B000920714F090E080E085599B4F90936C0665 +:1011C00080936B060895FC01680F791F8FEF91E300 +:1011D0002191822728E030E087FF09C0880F892706 +:1011E00021503109C9F7E617F70791F70895880FDD +:1011F000F7CFFA01811101C0FB01099480916404C9 +:10120000982F9E7F61F48170826080936404809146 +:101210006704813A18F080EA809367040895883162 +:10122000B0F381708661F1CFAF92BF92DF92EF92FF +:10123000FF920F931F93CF93DF93082F162FE9018F +:10124000E42FF0E0E750FB4F611110C0E4915E2FF6 +:101250004E2F4983E8835A83DF91CF911F910F91DD +:10126000FF90EF90DF90BF90AF900895E62EF12CA5 +:101270004491D42EE42FF0E026E0829FC001112497 +:101280002FEF30E0B9010E944834802F90E0880FA2 +:10129000991F55E5569FD001579FB00D11248A1B09 +:1012A0009B0B982F990F890F5901AE18BF08AE9E5E +:1012B000D001AF9EB00DBE9EB00D11245B2F189FC4 +:1012C00080011124012F11275901A01AB10AAE9EE5 +:1012D0008001AF9E100DBE9E100D11245901A81A59 +:1012E000B108AE9CC001AF9C900DBE9C900D112426 +:1012F000892F9927281B390B2E9FC0012F9F900DF6 +:101300003E9F900D1124E92F62307105A1F050F439 +:101310006115710509F49DCF6130710581F0EB2FE6 +:10132000512F97CF6430710569F080F066307105F8 +:1013300009F48FCFF4CFE42F4B2F592F8ACFE42F0E +:10134000412F87CFEB2F542F492F83CF4B2F5D2D6C +:10135000E12F7FCF80E0089578940895F894E82FE6 +:10136000E295EF70F0E031A1282F2F7081E090E03E +:1013700001C0880F2A95EAF7982F9095932391A39F +:1013800092A1892B82A30C94AC099091D60292FF72 +:1013900006C0282F28712830F9F4877F846093FFD6 +:1013A00006C0282F28712831F1F4877E84612091AE +:1013B000D70220FF06C0382F38713830D9F4877F24 +:1013C000816021FF06C0282F28712831D1F4877E43 +:1013D000816194FD877E0895282F24712430F9F6C9 +:1013E0008B7F8860DCCF282F2471243101F78B7E1E +:1013F0008861DDCF382F3171313019F78E7F8860E9 +:10140000E0CF282F2171213121F78E7E8861E1CF35 +:10141000CF93DF93EC018238910581F1B0F58133F0 +:10142000910509F491C020F58932910509F485C030 +:101430008A9709F490C0C11521E5D20708F0AAC027 +:10144000C11530E5D30708F0F2C0CF3BD10508F055 +:1014500089C0C83AD10508F0DFC0C53AD10508F007 +:10146000D3C0C430D105F8F4C130D105E1F040C09B +:101470008533910509F45AC0C997E9F68091D602DF +:10148000837089F0C0EED0E00EC0833E910599F1E3 +:1014900070F4803E910501F1823E910561F68091E4 +:1014A000D60282FD21C0CE01DF91CF910895863E04 +:1014B000910561F1873E910571F1843E910509F036 +:1014C000BACF8091D70281FFEECF8091D602C7EECE +:1014D000D0E084FD0DC0E7CF8091D60280FDF7C03B +:1014E0009091D70290FFDFCFC3EED0E084FFDBCF37 +:1014F000D0E0C0E0D8CF8091D60282FDEBC09091C1 +:10150000D70290FDBFCF84FFCECFF2CF8091D6021D +:1015100083FDDDCFC8CF8091D60283FDDEC09091E0 +:10152000D70291FFF0CFC4EED0E0BDCF8091D602BC +:1015300085FFB9CFC9E2D0E0B6CF8091D60285FF52 +:10154000B2CFC5E3D0E0AFCF8091D60286FFABCF5C +:10155000CAE2D0E0A8CF8091D60286FFA4CFC1E333 +:10156000D0E0A1CFC11540E2D40760F4C11581E0FD +:10157000D80708F098CFCE01815E9109079708F44B +:1015800092CFB6CFC11590E4D90708F4B1CFDF7080 +:10159000D06A89CFC11524E5D20778F4C11533E5A7 +:1015A000D30708F072C0C11542E5D40708F05CC04B +:1015B000DC2FCC27C16FD06A76CFC1158AE5D8075A +:1015C00078F4C11599E5D90708F073C0C11528E56D +:1015D000D20708F48DCFDC2FCC27C06FD06A63CF41 +:1015E000CE0190568115904208F082CF8D2F8F71D9 +:1015F0000E94C50990E0982F882788279F719C0139 +:101600002C2BE901D0624FCFC55AD0E0CE53DE4F2C +:10161000C881D0E0D06447CFC85AD0E0CC0FDD1FDE +:10162000CB53DE4F0990D881C02DD4643CCFCE017E +:1016300064E0969587956A95E1F783702C2F26953F +:101640002695237040E2249F90011124382B8C2F83 +:101650008370C1E0D0E002C0CC0FDD1F8A95E2F7B5 +:10166000C22BD32BDC681FCFCE018370992721E0DA +:1016700030E002C0220F331F8A95E2F7C695C69567 +:1016800080E2C89FE0011124EBCFCE01837099273F +:1016900021E030E002C0220F331F8A95E2F7C695A1 +:1016A000C69590E2C99FE0011124C22BD32BDA68C2 +:1016B000FACE8C2F8F700E94C50934E0D695C7955D +:1016C0003A95E1F7CF709C2FEC01D069ECCEC9E3DD +:1016D000D0E0E9CEC2EED0E0E6CEC6EED0E0E3CE7A +:1016E0000C944E0880916E0390919402892B9091F6 +:1016F0009302892B80933202E0916103F09162039F +:10170000309731F00280F381E02D82E392E009947A +:1017100008958091920290916102981301C00895FA +:101720008F5F8770FACF27E0929F800D1124982F4A +:10173000977086958695869523E0829FF001112407 +:10174000E05CFD4F50E040E080E0219130E0092E68 +:1017500002C0369527950A94E2F721703327042EAC +:1017600001C0220F0A94EAF7822B4F5F5F4F43308C +:10177000510559F7089527E0929F800D1124982F65 +:10178000977041E001C0440F9A95EAF786958695D7 +:10179000869593E0899FF0011124E05CFD4F90E075 +:1017A00080E070E05191DF0111979B01082E02C08B +:1017B000369527950A94E2F7217021952527242351 +:1017C00025272C9301968330910561F7089590E0C9 +:1017D00080E00E94700890E080E00E945A08109219 +:1017E0009402109293020C94720B809395020C94C5 +:1017F000E70B882341F0809590916E0389238093B5 +:101800006E030C94720B0895882339F090916E0347 +:10181000982B90936E030C94720B08958823B1F16A +:101820009CEF980F913A70F4E4E3F2E09191891300 +:1018300003C0DF0111971C9242E0EA33F407B1F7CD +:101840000C94720B90E2980F983088F4877021E026 +:1018500030E0A90102C0440F551F8A95E2F7CA0182 +:10186000809590916E03892380936E03E9CF9BE569 +:10187000980F933020F490E080E00C947008885A20 +:10188000873120F490E080E00C945A0808950F937B +:101890001F93CF93C82F882309F469C08CEF8C0F56 +:1018A000813AB0F504E312E08AE392E0F801219175 +:1018B000C21701F122E0EA33F207C9F7EFEF80E047 +:1018C000D8019D918D01C91781F0EF3F19F4911155 +:1018D00001C0E82F8F5F863099F7EF3F31F00E2E71 +:1018E000000CFF0BEE5CFD4FC283CF911F910F9157 +:1018F0000C94720BE4E3F2E02191C21303C0DF0108 +:1019000011971C928E179F07B9F70E94720BD6CFC2 +:1019100080E28C0F883068F4C77021E030E001C0AD +:10192000220FCA95EAF780916E03822B80936E0393 +:10193000DCCFEBE5EC0FE33050F4F0E0EE53FE4F7C +:10194000808190E0CF911F910F910C947008C85A3C +:10195000C73168F4EC2FF0E0EE0FFF1FEB53FE4FA2 +:1019600080819181CF911F910F910C945A08CF9152 +:101970001F910F910895982F92959F7011F0892FC4 +:1019800094E0282F2695269511F09E5F822F86954C +:1019900009F09F5F892F0895CF93DF93CDB7DEB70E +:1019A00062970FB6F894DEBF0FBECDBF96E0EAE3B4 +:1019B000F3E0DE01179601900D929A95E1F796E01B +:1019C000FE013796DE011D9601900D929A95E1F782 +:1019D00098858823E9F0962B9E8786E0FE013D9648 +:1019E000DE01119601900D928A95E1F786E0FE01E5 +:1019F0003196AAE3B3E001900D928A95E1F76296E1 +:101A00000FB6F894DEBF0FBECDBFDF91CF91089522 +:101A100060959623E1CF80936A0370936C03609383 +:101A20006B0380917B038430F9F48093E9008FEF9E +:101A30009091E800815095FD06C095ED9A95F1F7DB +:101A400000008111F5CF8091E80085FF0DC050E0C6 +:101A500040E063E070E08AE693E00E94F406809143 +:101A6000E8008E778093E8000895BC0184E00C9430 +:101A70000B0DBC0183E00C940B0D9C0184E0809362 +:101A8000E9009FEF8091E800915085FD06C085ED4B +:101A90008A95F1F700009111F5CF8091E80085FF5C +:101AA0000CC050E040E066E070E0C9010E94F4061E +:101AB0008091E8008E778093E8000895CF93DF93BC +:101AC000EC0181E08093E9008FEF9091E800815074 +:101AD00095FD06C095ED9A95F1F700008111F5CFBF +:101AE0008091E80085FF14C050E040E068E070E0BD +:101AF000CE010E94F4068091E8008E778093E80082 +:101B000088E0FE01A1E7B3E001900D928A95E1F72C +:101B1000DF91CF910895CF92DF92EF920F931F93B1 +:101B2000CF93DF93CDB7DEB7CE5DD1090FB6F89472 +:101B3000DEBF0FBECDBF609173018091640480FF52 +:101B40004CC0EEEFF5E09E012F5F3F4F8E0101523A +:101B50001F4FC901A4914A2F50E0DA01AA0FBB1F01 +:101B6000A40FB51FAA57BC4FCD90DD90EC90D901C2 +:101B7000CD92DD92ED929D013196A017B10751F7FC +:101B80002091720143E0249F800D911D1124539AEE +:101B90002BB1277F3BB138605FB7F894FC01649F9D +:101BA000E00DF11D1124BF018617970749F55FBFAE +:101BB000EFE5F4E03197F1F700C00000C252DF4FCB +:101BC0000FB6F894DEBF0FBECDBFDF91CF911F914E +:101BD0000F91EF90DF90CF900895809174019091D4 +:101BE000750123E0829FF0011124EA57FC4F891709 +:101BF00008F0A7CF1182108212828F5F3396F7CF41 +:101C0000DC014D91CD01E8E03BB9000000C047FF89 +:101C10002BB9440F000000C000C000C02BB900C0A9 +:101C2000EA9591F7C1CF0F931F93CF93DF9300D025 +:101C30000F92CDB7DEB7182F062F8091640480FF76 +:101C400022C09E012F5F3F4F40EA64E68BE20E9474 +:101C500014091017C0F48B8199812A8133E0139FF6 +:101C6000F0011124EA57FC4F2183908382831F5F88 +:101C700033960113F9CF0E948B0D8FE99FE00197F6 +:101C8000F1F700C000000F900F900F90DF91CF91FF +:101C90001F910F910895CF93DF93C82FD82FD17044 +:101CA00081FF04C067E084E00E94130ED11104C0DC +:101CB0006FE18CE10E94130EC2FF06C063E180E178 +:101CC000DF91CF910C94130EDF91CF910895E4E64C +:101CD000F4E080818E7F8083E9E4F3E0828181609B +:101CE00082832FEF80E792E0215080409040E1F71F +:101CF00000C000000C948B0D9F92AF92BF92CF92C8 +:101D0000DF92EF92FF920F931F93CF93DF937C01AB +:101D10005B016A018091D10201E010E08A3010F489 +:101D20000AE010E0C1E0D0E0F894B501C701F60187 +:101D30000995982E0E94AC09911004C021960C17A9 +:101D40001D076CF4892DDF91CF911F910F91FF90AA +:101D5000EF90DF90CF90BF90AF909F900895CC9F71 +:101D60009001CD9F300D300D112490E080E045E3CF +:101D70004A95F1F70000019682179307C1F7D4CF77 +:101D80008091A202811110C08091D800806180935F +:101D9000D8008AE18A95F1F700C08091D90080FFD0 +:101DA0000AC081E08093A20281E09091A20291306A +:101DB00009F080E0089582E08093A2020E94A406C8 +:101DC00010927B03F1CF0E94C00E882351F0E09166 +:101DD0006103F0916203309721F00190F081E02DD2 +:101DE000099480E008951F93CF93DF93182FEB01A0 +:101DF0000E94470C8FE99FE00197F1F700C00000B7 +:101E00002197C1F7812FDF91CF911F910C940E0C78 +:101E10000F931F93CF93DF9300D000D0CDB7DEB7E1 +:101E200089836A834B831C8204E610E024E030E05F +:101E3000AE014F5F5F4F60E084E10E94A6310F90DA +:101E40000F900F900F90DF91CF911F910F910895F8 +:101E500080916F01882329F047E669E98BE20C94B1 +:101E6000080F80913B0247EC6BE18823C1F341E20C +:101E700065EA89EDF4CFCF92DF92EF92FF920F9354 +:101E80001F93CF93DF936C017B0164E670E088E7DA +:101E90000E948E30EC0197FD12C010E000E0F601C8 +:101EA000E00FF11F849164E670E00E940831EC01BC +:101EB000892B29F40F5F1F4F0E151F0581F70E9414 +:101EC0002232CE01DF91CF911F910F91FF90EF90C1 +:101ED000DF90CF9008958091590390915A0391110A +:101EE00003C091E089270895882369F062E070E0DB +:101EF0008AE89BE00E943B0F892B19F080915903DF +:101F000008951092590380915903EBCFCF93C0915C +:101F1000590380915A038823D1F00E944E086058DB +:101F2000774C8E4F9F4F6093550370935603809369 +:101F3000570390935803C11108C062E070E088E82D +:101F40009BE00E943B0F892B29F0C09159038C2FF5 +:101F5000CF91089581E080935903F7CFCF93DF931A +:101F6000C3EED2E060E0CE010E94BC342196C115E0 +:101F700084E0D807B9F7DF91CF9108956F927F92EF +:101F80008F929F92AF92BF92CF92DF92EF92FF9289 +:101F90000F931F93CF93DF938CE8C82E8BE0D82E3E +:101FA00091ECE92EF12CE701CC58D10936011BC088 +:101FB000F50185909490692DC8010E94BC34682D6C +:101FC000C80101960E94BC3482E0A80EB11C0E5FCD +:101FD0001F4FC017D10761F78EE0680E711C2E9657 +:101FE000CE15DF0529F08E010E5011095301E0CF07 +:101FF0007E018CE8E80EF11C8CE8C80ED11C8DE740 +:10200000E81683E0F80679F6DF91CF911F910F91E2 +:10201000FF90EF90DF90CF90BF90AF909F908F9008 +:102020007F906F900895CF93C82F6FEF811161E279 +:1020300083E290E00E94BC346FEFC11161E184E261 +:1020400090E00E94BC346FEFC11160E385E290E044 +:10205000CF910C94BC3480E00E94131060E086E2C3 +:1020600090E00E94BC340E94BE0F0E94AE0F81E03F +:102070000C9413100F931F93CF93DF93C42FD0E0D2 +:10208000CC0FDD1F2EE0629FC00DD11D11243CE856 +:10209000839FC00DD11D1124CE0187960E94A834C4 +:1020A000082F10E0102F0027CE0188960E94A83438 +:1020B0009801282BC901DF91CF911F910F910895AD +:1020C000462F853038F47A3028F4673018F4672FBB +:1020D0000C943A1090E080E00895CF92DF92FF9246 +:1020E0000F931F93CF93DF936C0100918503809131 +:1020F0009502082BC7E0D0E010E0FC2EC8010C2EA2 +:1021000002C0959587950A94E2F780FD0CC021974F +:10211000A0F7F12C8F2DDF91CF911F910F91FF90A0 +:10212000DF90CF900895B6018C2F0E9460100E941E +:10213000080A019761F3EECFCF93DF93EC010E9481 +:102140006D10BE010E946010DF91CF910C94080ABF +:10215000FC01808191810E949C10292F2F70929503 +:102160009F7092509E3078F4E92FF0E0ED5DF94CCD +:102170000C947C34803F19F020F4883E20F481E0F8 +:102180000895843FE1F380E00895883EC0F3813FE5 +:10219000D1F7F5CF822F869586958695089583E2AF +:1021A00090E00E94A834813289F484E290E00E9499 +:1021B000A834813159F485E290E00E94A83491E07E +:1021C000803309F090E0892F8170089580E0FCCF82 +:1021D0001F93CF93DF93CDB7DEB768970FB6F89410 +:1021E000DEBF0FBECDBF40913A0350913B036091DB +:1021F0003C0370913D0380913E0390913F030E9408 +:10220000AC2420933A0330933B0360933E037093D6 +:102210003F03142F119510933C03652F6195609334 +:102220003D0386E0EAE3F3E0DE01179601900D92AC +:102230008A95E1F786E0FE013796DE01119601905E +:102240000D928A95E1F79B858C8520916F01222361 +:10225000B1F0772761950CF47095072E000C880B70 +:10226000990B0E9428352AE939E949E95EE30E9481 +:102270008C350E94F034962F812F60E010E01B8394 +:102280006C839D838E8386E0FE013196DE011D9670 +:1022900001900D928A95E1F786E0FE013D96DE0100 +:1022A000539601900D928A95E1F786E0FE017396B0 +:1022B000DE01119601900D928A95E1F786E0FE010C +:1022C0003196AAE3B3E001900D928A95E1F786E09A +:1022D000EAE3F3E0DE01179601900D928A95E1F7AB +:1022E00086E0E4E3F3E0DE01119601900D928A9519 +:1022F000E1F746E050E0BE016F5F7F4FCE010796E9 +:102300000E949234892B79F0E0916103F09162038D +:10231000309749F082E080933A030480F581E02D04 +:102320008AE393E0099510923C0310923D031092CA +:102330003E0310923F0386E0EAE3F3E0A4E3B3E058 +:1023400001900D928A95E1F768960FB6F894DEBF7A +:102350000FBECDBFDF91CF911F910895E4E3F2E06E +:1023600086E0DF011D928A95E9F70C94E70B1F9335 +:10237000CF93DF93CDB7DEB7AA970FB6F894DEBF41 +:102380000FBECDBF8DE793E02091F100DC012D93CE +:10239000CD01B3E085389B07B9F780917E03833088 +:1023A00009F472C0B8F4813009F449C0823009F4EC +:1023B000B5C08091E80083FF8DC280917D0390912C +:1023C0007E039A3008F086C2E92FF0E0EF5CF94C0A +:1023D0000C947C348A3009F490C08B3009F471C0BD +:1023E000893039F780917D03813219F7809181031B +:1023F00090918203009711F00297D9F68091E8003E +:10240000877F8093E8008091E80082FF38C0909138 +:10241000F3008091F200029731F48091F100813055 +:1024200011F0863021F48091F10080937003809147 +:10243000E8008B778093E8000E941E07BACF809156 +:102440007D03813A09F0B5CF8091E800877F8093C2 +:10245000E8008091810390918203892B61F468E008 +:1024600081E793E070E00E94D0078091E8008B77CD +:102470008093E8009ECF60E090E080E0F3CF809111 +:102480007B038111C0CF95CF80917D03813A09F004 +:1024900090CF8091810390918203892B09F089CF9D +:1024A0008091E800877F8093E8008091E80080FFBA +:1024B000FCCF809177018093F1008091E8008E77C6 +:1024C000B9CF80917D03813209F073CF8091810370 +:1024D00090918203892B09F06CCF8091E800877F6F +:1024E0008093E8000E941E0780917F03809377010C +:1024F00010926E030E94AE115CCF80917D038132F9 +:1025000009F057CF8091E800877F8093E8000E9410 +:102510001E078091800380936F034BCF80917D03D2 +:10252000813A09F046CF8091E800877F8093E800E8 +:102530008091E80080FFFCCF80916F03BCCF803892 +:1025400099F0823809F0C6C1809181038F7087307D +:1025500008F0C0C18093E9008091EB0085FB8827DB +:1025600080F91092E90006C08091790390917A0376 +:10257000911182609091E800977F9093E80080939A +:10258000F1001092F1008091E8008E779FC18823BE +:1025900009F48DC1823009F09DC180917F038111C2 +:1025A00090C1809181038F702FEF280F263008F0A3 +:1025B00091C18093E9002091EB0020FF82C193300C +:1025C00031F48091EB0080628093EB007AC19091AE +:1025D000EB0090619093EB0021E030E001C0220F0E +:1025E0008A95EAF72093EA001092EA008091EB00C6 +:1025F0008860EACF81116EC110917F031F778091AF +:10260000E3008078812B8093E3008091E800877F4E +:102610008093E8000E941E078091E80080FFFCCFB5 +:102620008091E30080688093E30082E0111183E0F1 +:1026300080937B034FC18058823008F04BC12091BA +:102640007F03309180032C3DE3E03E07A1F583E05A +:102650008A838AE289834FB7F894DE01139620E0DB +:102660003EE051E2E32FF0E050935700E49120FF69 +:1026700003C0E295EF703F5FEF708E2F90E0EA307D +:10268000C0F0C7968D939D932F5F243159F74FBFAC +:102690008091E800877F8093E8006AE270E0CE01D5 +:1026A00001960E94D0078091E8008B778093E80024 +:1026B00011C1C096E7CF8091810390918203432F8F +:1026C00055274330510509F44AC078F5413051058A +:1026D00009F47AC08BE590E0ECE8FBE0423051056C +:1026E00009F0F8C02091E800277F2093E8002091AE +:1026F0008303309184038217930708F49C0140E020 +:102700002115310509F065C0411163C08091E800D1 +:1027100082FDC9CF80917B03882329F2853019F28D +:102720008091E80083FFF2CFBECF4132510509F41A +:102730003CC04232510509F0CDC08330910508F00C +:10274000C9C0FC01EE0FFF1FEC5DFD4F0190F08151 +:10275000E02D8F5D9D4FDC018C9190E01AC03327F6 +:1027600021303105D1F02115310561F022303105DC +:1027700009F0B0C0E9EFFBE0E4918E2F90E0E9EFC3 +:10278000FBE007C0EBE2FCE0E4918E2F90E0EBE28F +:10279000FCE0009709F49EC0A5CFE9E1FCE0E491DC +:1027A0008E2F90E0E9E1FCE0F4CF8330910508F052 +:1027B00091C0880F991FFC01E65DFD4F0190F081EB +:1027C000E02D89E090E08ECF82E190E0E7EEFBE043 +:1027D00089CF80917B03882309F465CF853009F484 +:1027E00062CF8091E80083FD5ECF8091E80082FD9A +:1027F0008DCF8091E80080FF83CF9091F30080918E +:10280000F2002115310519F08830910550F041E0B2 +:10281000089709F040E08091E8008E778093E80007 +:102820006FCF44914093F1003196215031090196C8 +:10283000E8CF803809F04EC08091E800877F809310 +:10284000E80080917C038093F1009DCE811142C00D +:1028500010917F031230F0F58091E800877F80931C +:10286000E80010937C030E941E07112311F084E0FE +:1028700005C08091E30087FDFACF81E080937B0360 +:1028800042E061EC81E00E943D0742E261EC84E0BD +:102890000E943D0742E261EC82E00E943D0742E275 +:1028A00060EC83E00E943D0780917B0313C0809120 +:1028B0007F03813079F481E0933009F080E08093E8 +:1028C0007A031092E9008091E800877F8093E80006 +:1028D0000E941E078091E80083FF0AC08091E800F3 +:1028E000877F8093E8008091EB0080628093EB000B +:1028F000AA960FB6F894DEBF0FBECDBFDF91CF9181 +:102900001F9108951F93CF93DF93162FC0916B06ED +:10291000D0916C068A30D1F420914E03CE018B56B3 +:102920009440622F70E00E944834281B822F66E09A +:102930000E945C34C82FC15020F4DF91CF911F91C9 +:10294000089560E080E20E948214F5CF8D30E9F4B2 +:10295000CB56D44020914E03622F70E0CE010E94EE +:102960004834281B822F9E01280F311D211532402B +:1029700018F080E0D0E0C0E0C80FD11DC559DB4F92 +:10298000D0936C06C0936B06D8CF96E0FE01AFE4FF +:10299000B3E001900D929A95E1F7803E90F186E0C8 +:1029A000FE0111928A95E9F7C0916B06D0916C06F1 +:1029B000111133C046E050E0BE018FE493E00E9465 +:1029C00092349E012B563440892B91F52A5F3F4F5C +:1029D00040914E03642F70E0C9010E944834481BA7 +:1029E000463010F4240F311D211572E0370710F026 +:1029F00030E020E025593B4F30936C0620936B0666 +:102A00009CCFF6E08F9FB0011124685B794F46E0C0 +:102A100050E0CE010E948934C7CF9E012A5F3F4F0C +:102A2000FE012E173F0731F2808180958193F9CF07 +:102A3000C90145E0969587954A95E1F741E050E058 +:102A4000BA0102C0660F771F8A95E2F7CB01609149 +:102A5000690470916A04862B972BB9016B5F7F4FD5 +:102A6000E5E076956795EA95E1F702C0440F551FBA +:102A70006A95E2F7842B952B90936A0480936904FE +:102A8000A5CFFF920F931F93CF93DF93EC01F62E08 +:102A9000FC0101900020E9F78F0101501109C017D6 +:102AA000D10730F0DF91CF911F910F91FF900895E2 +:102AB0006F2D89910E948214F2CFECE4F3E08083C1 +:102AC000618324E630E042E050E0BF0184EB0C94E7 +:102AD0007F31CF93C82F60E08CE00E945D156C2F92 +:102AE00084E00E945D1561E08CE0CF910C945D154F +:102AF000CF92DF92EF92FF926B017C010E94FE0861 +:102B0000B701A60188E090E0FF90EF90DF90CF90B2 +:102B10000C94CE34AF92BF92CF92DF92EF92FF929D +:102B20000F931F93CF93DF9300D00F92CDB7DEB7F3 +:102B3000082FF62E142FE22E8091640480FF4FC0E0 +:102B4000E82FE695AE2FB0E0AB5EBD4F9C91909321 +:102B500049038E7F823009F056C0413A08F040EABE +:102B60009E012F5F3F4F6F2D802F0E94140980918F +:102B7000640480FF11C02B8139814A8180917401E6 +:102B80009091750153E0859FF0011124EA57FC4FA5 +:102B9000891798F10E948B0D80916504801308C0FD +:102BA000809166048F1104C080916704811729F019 +:102BB00080914B03826080934B0300936504F092F5 +:102BC000660410936704EE2051F0609164047091E4 +:102BD000650480916604909167040E9478150F90B7 +:102BE0000F900F90DF91CF911F910F91FF90EF9079 +:102BF000DF90CF90BF90AF900895418330832283C0 +:102C00008F5F3396C5CF923039F6E2508E2F8170A8 +:102C1000D82EE695F0E0E750FA4FA590B490C12C7D +:102C2000BB2460917601C61608F0B4CF2C2D30E09D +:102C3000A29EC001A39E900DB29E900D112470E043 +:102C40000E944834802FD11016C0860F4091740125 +:102C5000420F532F511D9A01220F331F240F351F8E +:102C60002A573C4F412F113A08F040EA6F2D0E943D +:102C70001409C394D6CF861BE9CFE4E6F4E0438180 +:102C800021E1421B08F440E021E0628181810C9443 +:102C90008A15E4E6F4E0438121E1420F08F44FEFA6 +:102CA00021E0628181810C948A15E4E6F4E062817E +:102CB00021E1621B08F460E021E0438181810C94F2 +:102CC0008A15E4E6F4E0628121E1620F08F46FEF17 +:102CD00021E0438181810C948A15E4E6F4E081814E +:102CE00021E04381628188500C948A15E4E6F4E087 +:102CF000818121E043816281885F0C948A15CF93A2 +:102D0000C82F0E94BB0C8230B1F138F48823C9F07F +:102D1000813039F18C2FCF9108958330A1F1843027 +:102D2000C9F720E040E56FEF8AED0E948A1587E041 +:102D30000E94691580910001882361F310926F0150 +:102D40000DC020E040E56FEF82E30E948A1580917C +:102D50000001882399F381E080936F010E94280F7E +:102D6000D9CF20E040E56FEF8CEF0E948A1585E413 +:102D70000E946915CFCF20E040E56FEF80E50E940B +:102D80008A1585E2F5CF20E040E56FEF86E70E94E7 +:102D90008A158FE1EDCF0E947F16809385030C94F6 +:102DA000E70B80918503982F9670963019F4886010 +:102DB0000C94CB16877FFCCF21E030E001C0220FBE +:102DC0008A95EAF720958091850382230C94CB168F +:102DD00021E030E001C0220F8A95EAF78091850357 +:102DE000822B0C94CB1680916804882319F08150B3 +:102DF0008093680460916404709165048091660416 +:102E0000909167040C94781580916804833018F4CD +:102E10008F5F809368046091640470916504809171 +:102E20006604909167040C9478159091640490FF67 +:102E300027C0917081111DC09260909364048091AD +:102E40004B03816080934B03662351F060916404CF +:102E50007091650480916604909167040E947815D2 +:102E600020E04091670460916604809165040C94B1 +:102E70008A158C3010F09661E0CF880F982BDDCF4B +:102E80000895809164048695815009F48BE061E097 +:102E90000C9415178091640486958F5F8C3008F030 +:102EA00081E061E00C9415178091640480FF07C0F5 +:102EB000869582588F77893010F40C944A1761E018 +:102EC00082E00C941517E4E6F4E083E0808311823D +:102ED0008FEF828380EA83831482A9E4B3E01296A1 +:102EE0008C911297836012968C936081718182819C +:102EF00093810C947815AB01BC0188E190E00C94AF +:102F0000CE34CF93C82FEDE5F3E0982F990F990FAA +:102F1000990F80818770892B8083EEE5F3E09C2FE9 +:102F20009295969597708081887F892B8083609198 +:102F30005B0370915C0380915D0390915E030E943E +:102F40007B176C2F82E0CF910C945D15EBE5F3E0DD +:102F500089E88083118282818C7F828360915B0308 +:102F600070915C0380915D0390915E030C947B17DC +:102F7000EBE5F3E080818E7F808360915B0370914D +:102F80005C0380915D0390915E030C947B17EBE5ED +:102F9000F3E080818160808360915B0370915C03CA +:102FA00080915D0390915E030C947B170E948830A2 +:102FB00040E060E080E00C94080F69EE7EEF90E066 +:102FC00080E00E94DA3460E082E090E00E94BC344D +:102FD00060E083E090E00E94BC341092950260E0D3 +:102FE00084E090E00E94BC3460E082E290E00E94C5 +:102FF000BC3460E085E090E00E94BC3460E086E094 +:1030000090E00E94BC346FEF87E090E00E94BC34F7 +:1030100040E050E0BA0188E090E00E94CE3460E0E9 +:103020008DE090E00E94BC3440E050E0BA0188E1BD +:1030300090E00E94CE3460E087E190E00E94BC34D2 +:1030400040E050E0BA018CE190E00E94CE3470E0A4 +:1030500060E080E290E00E94DA340E94A61780E0EF +:103060000E9413100E942B1040E050E0BA018FE044 +:1030700090E00E94CE3440E050E0BA0183E190E05D +:103080000C94CE345F926F927F928F929F92AF9208 +:10309000BF92CF92DF92EF92FF920F931F93CF9345 +:1030A000DF9300D000D00F92CDB7DEB77C01FC01DA +:1030B00083819481892B31F08081918189238F3F95 +:1030C00009F088C60F900F900F900F900F90DF912E +:1030D000CF911F910F91FF90EF90DF90CF90BF9015 +:1030E000AF909F908F907F906F905F9008950E9417 +:1030F0006D10182F682F89819A810E94BB0B6981FE +:103100007A81812F0E9460108C01F70182818823CF +:1031100061F0F801E65EFC45ED30F10530F4E55C68 +:10312000F94C0C947C340E94C717D0905B03D0FEFE +:103130001CC08D2D86958370F7019281992309F427 +:1031400060C1823090F4B701C8010E9486088823CC +:1031500061F0D694D694D69480915C038370829566 +:10316000880F807E8D290E946915F701828188234E +:1031700009F425C6C80182519F45409708F0E3C570 +:103180008FEF93E00E94A834025193EEA92E92E0B3 +:10319000B92E811197CF011138C11C821B82662480 +:1031A00063948AE0582E85010F5F1F4FC5010E946E +:1031B000A83489831A82882309F484CF9FEF980F5B +:1031C000933008F031C18A83698232E0A30EB11CCA +:1031D000C8010E94A8348B83882309F473CF8E0121 +:1031E0000F5F1F4FF80120812223E9F2213009F0FF +:1031F00055C191818281913009F018C10E5F1F4F36 +:103200006AE070E0893311F460E570E00E94F30E2B +:1032100013C10E94B81789CF80915B0380FF0DC056 +:103220000E94B81760915B0370915C0380915D030D +:1032300090915E030E947B1778CF0E94C717F2CF50 +:103240000E94A61772CF90915B03892F86958F5F9E +:103250008370880F997F892B80935B03982F9670DA +:10326000963001F7897F80935B03DCCF90915C03FC +:10327000892F8B7F92FF846080935C03D3CF8091F2 +:103280005B03982F96959695969580915C03837035 +:103290008295880F807E892B8C3798F48F5F282F3A +:1032A000220F220F220F90915B039770922B909325 +:1032B0005B0382958695837090915C039C7F892B3C +:1032C000DBCF81E0ECCF80915B03982F96959695AC +:1032D000969580915C0383708295880F807E892B00 +:1032E00011F08150DCCF8BE7DACF30915C03932F64 +:1032F00096959695969520915D03822F8370829581 +:10330000880F807E892B90E00196482F440F440F50 +:10331000440F3770342B30935C0335E096958795D6 +:103320003A95E1F783702C7F822B80935D037ACFEF +:1033300030915C03932F96959695969520915D0319 +:10334000822F83708295880F807E892B8150990B04 +:10335000DCCF80915D0382FF12C08B7F80935D0381 +:1033600060915B0370915C0380915D0390915E03BB +:103370000E947B1760E081E00E945D15D6CE8460DC +:1033800080935D0360915B0370915C0380915D03AA +:1033900090915E030E947B1760E08CE00E945D15B7 +:1033A00064E182E00E945D1565E081E00E945D15A8 +:1033B00061E08CE0E1CF80915D03982F9695969522 +:1033C000969580915E038295880F807E892B883741 +:1033D00020F4865F0E948117A8CE88E7FBCF8091FA +:1033E0005D03982F96959695969580915E038295AC +:1033F000880F807E892B843110F08A50EBCF84E1D6 +:10340000E9CF882309F4B1CE9ECEA114F4E0BF0623 +:1034100009F458CEC5010E94A834811101C00150A1 +:103420002FEFA21AB20AB7CE5801D9CE923039F492 +:103430000E5F1F4F0E94470C0F5F1F4FD3CE93307C +:1034400029F40E5F1F4F0E940E0CF6CF943019F036 +:103450000F5F1F4FF1CF0E5F1F4F30E020E0B8012C +:103460006F5F7F4FF80141818053990B8A3091053E +:1034700050F02150310900F38FE99FE00197F1F7F7 +:1034800000C00000F6CF529EF001539EF00D1124B3 +:103490009C012E0F3F1F842F8B01E1CFE22FF0E024 +:1034A000E754FE4F7490822F86958695869590E01E +:1034B000FC01E755FE4FE4902770F12C022E02C06C +:1034C000F594E7940A94E2F7E1E0EE22FF24FC0190 +:1034D000E756FE4FC490D12C022E02C0D594C7945B +:1034E0000A94E2F7F1E0CF22DD24FC01E757FE4F1A +:1034F0008490912C02C0959487942A95E2F721E05C +:1035000082229924E114F10419F081EE0E94470C03 +:10351000C114D10419F086EE0E94470C39E36AE029 +:1035200070E0731202C060E570E0872D0E94F30E18 +:10353000CD2819F086EE0E940E0CEF2819F081EECE +:103540000E940E0C892809F477CF6AE070E08CE2C3 +:103550005DCE81E00E94E81603C081E00E94DC1687 +:103560000F900F900F900F900F90DF91CF911F91C0 +:103570000F91FF90EF90DF90CF90BF90AF909F9012 +:103580008F907F906F905F900C94D11682E0E2CF85 +:10359000013E110509F4B8C0043E110519F0003EC2 +:1035A0001105B1F5882309F42EC181E08093ED0265 +:1035B000809185030E94BB0C813051F583E30E940A +:1035C000691526C00238FFE51F0709F46AC078F4C0 +:1035D000053F110509F413C1063F110509F411C196 +:1035E000043F1105A9F461E00E94CC0C11C004381D +:1035F0003FE5130709F48BC008F469C005385FE59F +:10360000150709F4CAC006389FE5190709F4DDC09B +:10361000F70192819111FDC180916E0382720A3C83 +:10362000FCE51F0709F4D5C108F02BC1053C3CE5BA +:10363000130709F4BAC108F00FC1033C5CE5150794 +:1036400009F494C108F0ACC1023C1C4509F43EC128 +:10365000F70100811181992309F4F5C1C8010E9485 +:103660006D10D82E682FC8010E94BB0BB8018D2D9C +:103670000E9460100E94080A182FB82EF7012281BC +:103680004581342F32953F70892F82958F70C82ED7 +:10369000D12C8C3008F00FC2F601E85BF94C0C9489 +:1036A0007C34882309F4B4CF81EE0E94470C83EE6A +:1036B0000E94470C8FE40E94470C8FE40E940E0C7E +:1036C00083EE0E940E0C81EE0E940E0CA1CF882387 +:1036D00009F49ECF81EE0E94470C83EE0E94470CB6 +:1036E00080E50E94470C80E5E9CF80933F0210936C +:1036F0003E0200933D02882321F081E08093EE0298 +:1037000087CF1092EE0284CF80933C02F0CF8823C3 +:1037100079F180913C02882349F080913D020E941A +:103720000E0C80EE0E94470C8AE20CC080913F0292 +:103730008823D1F380913D020E940E0C80EE0E94FE +:10374000470C8CE40F900F900F900F900F90DF912B +:10375000CF911F910F91FF90EF90DF90CF90BF908E +:10376000AF909F908F907F906F905F900C94470CDC +:103770008AE20E940E0C8CE40E940E0C80EE0E94E5 +:103780000E0C80913C02811105C080913F0288237C +:1037900009F498CC80913D02D5CF882309F423CF3A +:1037A00080916F01811104C080910001882339F05C +:1037B00010926F01109200010E94280F29CF81E022 +:1037C00080936F0180930001F7CF882309F40BCF1A +:1037D00080913B02882349F080EE90E09093710144 +:1037E0008093700110923B02E7CF86E690E09093C1 +:1037F00071018093700181E080933B02DDCF62E034 +:10380000F3CE64E0F1CE1092ED0202CF882331F0C6 +:1038100081E08093F00210926701FACE1092F002DC +:10382000F7CE882349F0809185030E94BB0C81303C +:1038300019F482E30E946915F7018281882309F453 +:10384000B0C2809185030E94BB0C813009F0A9C2EF +:1038500084E30E946915A5C2073C2CE5120709F410 +:10386000AEC008F4A7C0083C4CE5140709F4ACC08E +:10387000093C1C4509F0ECCE4DE356E169E476E1E4 +:1038800079C0043DECE51E07A8F40E3CFCE51F07DB +:1038900008F018CC0C3C2CE5120709F49FC043EF4C +:1038A00056E164E077E10D3C1C4508F463C061E03B +:1038B00081E046C0053D4CE5140709F403CC08F44B +:1038C00092C00D351D4509F4FDCBC2CE8091640434 +:1038D00080FF31C08E7F8093640460916404709196 +:1038E000650480916604909167040E947815809128 +:1038F0004B03816080934B039FEFE0E7F2E0915030 +:10390000E040F040E1F700C000000F900F900F90F2 +:103910000F900F90DF91CF911F910F91FF90EF903B +:10392000DF90CF90BF90AF909F908F907F906F90DF +:103930005F900C948B0D81608093640461E08695A8 +:103940000F900F900F900F900F90DF91CF911F91DC +:103950000F91FF90EF90DF90CF90BF90AF909F902E +:103960008F907F906F905F900C94151741E457E112 +:103970006AE477E10F900F900F900F900F90DF9116 +:10398000CF911F910F91FF90EF90DF90CF90BF905C +:10399000AF909F908F907F906F905F900C94F908FC +:1039A0004AE457E161E477E1E5CF4DE656E166E7A9 +:1039B00076E1E0CF46E756E16DE676E1DBCF45E51F +:1039C00056E161E676E1D6CF41E656E165E576E17E +:1039D000D1CF49E456E16DE376E1CCCF44E057E145 +:1039E00063EF76E1C7CF0F900F900F900F900F907D +:1039F000DF91CF911F910F91FF90EF90DF90CF90CB +:103A0000BF90AF909F908F907F906F905F900C943D +:103A100054170E3D1C4509F01BCE0F900F900F90D0 +:103A20000F900F90DF91CF911F910F91FF90EF902A +:103A3000DF90CF90BF90AF909F908F907F906F90CE +:103A40005F900C94DD17C8010E94930BD82E0ECE08 +:103A5000092F0F70907F11F00295007F812F222394 +:103A6000C9F0002369F090E2910F983010F0111125 +:103A70000BC080916E03082B00936E030E94720BA3 +:103A8000812F0E94470C17C080919402082B00934D +:103A90009402F4CF0E940E0C002369F00095105E92 +:103AA000183010F0B11027C080916E0308230093E6 +:103AB0006E030E94720B98E0C91AD108E4E0CE169A +:103AC000D10408F0FFCA0E94E30E0F900F900F90F0 +:103AD0000F900F90DF91CF911F910F91FF90EF907A +:103AE000DF90CF90BF90AF909F908F907F906F901E +:103AF0005F900C944B0E80919402082300939402E3 +:103B0000D8CF892F8F70907F903211F08295807F6F +:103B1000F1E0BF120CC0222329F0333060F60E947E +:103B2000040CC9CF323038F60E94F90BC4CF2223DF +:103B300041F03323A1F340FFA3CF4F70F70145833A +:103B4000EECF332389F3193309F0F5C0FFEF27EEE9 +:103B500033E0F15020403040E1F700C00000812FF9 +:103B60000E940E0CA8CF892F86958695837061F0F0 +:103B7000813009F0A0CF812F9370211102C090E015 +:103B800080E00E945A0897CF812F9370211102C0C4 +:103B900090E080E00E9470088ECF892F8370A1F59D +:103BA000211189CF812F829586958770880F880F84 +:103BB000412F4F70082E01C0440F0A94EAF7212FBD +:103BC000207114FF07C02FE030E001C0220F8A955A +:103BD000EAF72095969596959370923081F0822F12 +:103BE000842B933030F480919502913029F0242B6E +:103BF00082230E94F50B5FCF842B822BFACF242BDC +:103C0000809195028227F5CF8695222311F0892F86 +:103C10008170882309F44FCF812F82958695877014 +:103C2000880F880F412F4F70082E01C0440F0A944F +:103C3000EAF7212F207114FF07C02FE030E001C008 +:103C4000220F8A95EAF72095969596959370923073 +:103C500081F0822F842B933030F480918503913052 +:103C600029F0242B82230E94CB1625CF842B822B74 +:103C7000FACF242B809185038227F5CF092F0F706F +:103C8000222329F0802F0E94E816812F48CF812F10 +:103C90000E94F90B802F0E94DC160DCF812FE1EFDF +:103CA0001E1789F1E11750F0F0EF1F17B9F022232A +:103CB000B1F13111E5CE892F8F7129C042EF141770 +:103CC00049F153EF1513F3CF80E0222361F29F7186 +:103CD00081E001C0880F9A95EAF7C5CF222379F0D9 +:103CE000323008F0E8CE292F2F7181E090E001C03A +:103CF000880F2A95EAF7909185038927B4CF33304E +:103D000008F0D9CEF0CF892F8F71222321F20E94A3 +:103D1000E816D1CE892F8F712223C9F3BCCF33236C +:103D200079F0893341F48FEF97EEE3E081509040D2 +:103D3000E040E1F712CF8FE39CE90197F1F70DCF57 +:103D4000892F8F71A8CF0031FFE51F0709F401CC3F +:103D500001312FE5120709F419CC0E944E08609337 +:103D6000F5027093F6028093F7029093F802F70140 +:103D70008281053E110509F4B8CC08F023CC0C3241 +:103D8000110509F443CD08F003CC0A30110509F4FC +:103D900048CD0531110509F44FCD0930110509F061 +:103DA00037CCF7018281882309F432CC80918503D6 +:103DB0000E94BB0C813009F02BCC81E300CC003198 +:103DC0003FE5130709F4C9CB01314FE5140779F634 +:103DD00082E0C4CB85E0DE01119601900D928A95B8 +:103DE000E1F7F701228189819A81211180C90E941E +:103DF000930B182F84C91F93CF93DF938091600298 +:103E0000807FA9F480915D02882389F080919202DD +:103E1000D091610260915B0270915C02A0915E02A0 +:103E2000B0915F02C62FC72316E0D81304C0DF91FC +:103E3000CF911F91089590E0109711F0CF3F19F4A2 +:103E400001968770F2CF189F9001199F300D1124B1 +:103E5000F901EE59FD4F41814713F2CF40814613DE +:103E6000EFCF42814111ECCF438154814A1B5B0B60 +:103E7000403A510528F7809160028F7080618093ED +:103E80006002F901E959FD4F80818F708061808364 +:103E90008BE592E00E944218DF91CF911F910C9424 +:103EA000890BAF92BF92CF92DF92EF92FF920F9366 +:103EB0001F93CF93DF93CDB7DEB761970FB6F8941A +:103EC000DEBF0FBECDBF8C0185E0F801DE011D967F +:103ED00001900D928A95E1F7F801E2808BE5A82E1A +:103EE00082E0B82E60915E0270915F0261157105EB +:103EF00009F432C190915B0240915C02892F8423C6 +:103F00008F3F09F429C120813181C380D480F09092 +:103F10005D02F601E61BF70BFF2009F4E8C0809173 +:103F20006002582F507FE03AF10508F0ABC0511104 +:103F300077C0FE2C431321C092131FC0E1101DC097 +:103F40008F70806180936002C5010E944218809149 +:103F50006002F80185838F2D61960FB6F894DEBF5D +:103F60000FBECDBFDF91CF911F910F91FF90EF90CA +:103F7000DF90CF90BF90AF900895CD2829F0822F89 +:103F800083238F3F09F003C180E0F82FF170DF2E0B +:103F900080FF3CC0809192024091610256E0841300 +:103FA00015C02D873E878D859E850E949C10292FE8 +:103FB00022952F702230F0F0243018F59F70F1F028 +:103FC000F8019581907FD1F4D12C1EC090E0589FCC +:103FD000F001599FF00D1124EE59FD4F6181361308 +:103FE00006C06081261303C06281E6120FC00196ED +:103FF0008770D5CF9F7011F0882331F3805E8830B1 +:1040000018F3C8010E944218FD2CA5CFEE2009F438 +:10401000A2CF80916002816080936002F12C9BCFDF +:10402000431306C0921304C0F801EE2009F479C0CE +:10403000C8010E94A810882309F1EE20F9F08091B0 +:104040006002803270F020915B0230915C02388710 +:104050002F831986DB86CA868C87CE0107960E943D +:10406000421886E0F801ABE5B2E001900D928A9526 +:10407000E1F70E94FB1EFF24F3946DCFC8010E945C +:104080004218F9CF51110AC08BE592E00E94421804 +:1040900086E0F50111928A95E9F7C0CF43130FC06E +:1040A00092130DC0E1100BC0F8018583C8010E9476 +:1040B000421886E0F50111928A95E9F74CCFC801C4 +:1040C0000E94A8108823D1F2EE20C1F280916002F4 +:1040D000803238F220915B0230915C023A8329836E +:1040E0001B82DD82CC828E83CE010196B8CFE03A6E +:1040F000F105F8F6FE2CEE2009F243131FC09213CF +:104100001DC08091600280FD10C0982F907F69F0E3 +:10411000F8018583903F31F0982F907F905F8F70EA +:10412000892B8583C8010E94421886E0F801ABE51F +:10413000B2E001900D928A95E1F70DCFC8010E947F +:10414000A81081118ECF80916002816080936002FF +:10415000C8010E944218FFCEEE2009F48FCFC8019B +:104160000E94A810F82E882309F488CF86E0F80171 +:10417000ABE5B2E001900D928A95E1F780915B0288 +:1041800090915C020E949C100E94FB1EE4CE81E094 +:104190008E25FBCE1F93CF93DF93CDB7DEB7679706 +:1041A0000FB6F894DEBF0FBECDBF4B8B5C8B6D8B13 +:1041B0007E8B8F8B6111109294021A8A198A85E086 +:1041C000FE017396DE011D9601900D928A95E1F72E +:1041D00086E0FE013D96DE01179601900D928A95CC +:1041E000E1F7CE0107960E94511F882389F016E05F +:1041F000809192029091610289134BC067960FB62D +:10420000F894DEBF0FBECDBFDF91CF911F9108950F +:1042100086E0FE013796DE01119601900D928A9597 +:10422000E1F78A859B85892B11F38F8198858923F6 +:104230008F3FE9F22091610230E0C9010196877059 +:104240009927409192024817190681F410926E0343 +:104250000E94AE11109261021092920286E0EBE58C +:10426000F2E0DF011D928A95E9F7C1CF96E0929FB7 +:10427000D001939FB00D1124AE59BD4FFE01319670 +:1042800001900D929A95E1F7809361020E94890B4B +:10429000AECF819FC00111248E599D4F0E94511FA6 +:1042A000882309F4ABCF8091920290E00196877049 +:1042B0009927809392029CCF0F931F93CF93DF9304 +:1042C00000D000D0CDB7DEB76091C5027091C602B4 +:1042D0008091C7029091C8020E943208643671052D +:1042E0008105910588F10E94C00E882379F10E9412 +:1042F0004E086E5F7F4F8F4F9F4F69837A838B830A +:104300009C8380912C0190912D0180559D4F40916F +:104310002B0150E04530510510F044E050E0BE0163 +:104320006F5F7F4F0E949F3484E090E00E9494333F +:10433000892BD9F40E944E086093C5027093C6027F +:104340008093C7029093C80281E010C00E944E087B +:104350000091D2021091D3022091D4023091D50263 +:10436000600F711F821F931FC4CF80E00F900F90CA +:104370000F900F90DF91CF911F910F910895BF92F1 +:10438000CF92DF92EF92FF920F931F93CF93DF9321 +:10439000B82EEB01F42E6901688179818A819B81B5 +:1043A0000E943208643671058105910510F4FF20E2 +:1043B00019F1EB2C0B2C000CFF088B2D9AE08902D5 +:1043C000F0011124EF5FFE4F8381948180559D4F52 +:1043D000428150E00417150708F4A801B6010E94B5 +:1043E0009F34C7010E949433892B89F40E944E08A0 +:1043F000688379838A839B8381E0DF91CF911F91CA +:104400000F91FF90EF90DF90CF90BF90089580E0E4 +:10441000F4CF0F931F93CF93DF930F92CDB7DEB7F7 +:104420008091590389832091C40290E041E02817CC +:10443000190609F440E001E010E09E012F5F3F4FB4 +:104440006DEC72E086E00E94BF210F90DF91CF916A +:104450001F910F9108950F931F93CF93DF93CDB7C3 +:10446000DEB728970FB6F894DEBF0FBECDBF85E04C +:10447000E4E6F4E0DE01119601900D928A95E1F7F1 +:104480008091490390914A03A0914B038E839F83AF +:10449000A88741E08885811101C040E008E010E074 +:1044A0009E012F5F3F4F69EC72E085E00E94BF21C3 +:1044B000811110924B0328960FB6F894DEBF0FBE01 +:1044C000CDBFDF91CF911F910F9108956F927F9291 +:1044D0008F929F92AF92BF92CF92DF92EF92FF9214 +:1044E0000F931F93CF93DF930F92CDB7DEB7862E36 +:1044F0005A016901682E880F7708C3010E9494331E +:10450000892B09F07BC08AE0869DF001879DF00D24 +:104510001124EF5FFE4F458150E04115510511F028 +:1045200041E050E08AE0869DF001879DF00D112466 +:10453000EF5FFE4F6681778160557D4FCE0101961A +:104540000E949F34F50160817181828193810E9474 +:104550003208643671058105910540F4B701C80140 +:104560000E94E3089981891709F44FC0082C000CB8 +:104570009908C4010E949433892B91F0B12C8B2DA2 +:104580000F90DF91CF911F910F91FF90EF90DF90EF +:10459000CF90BF90AF909F908F907F906F90089535 +:1045A0008AE0889DF001899DF00D1124EF5FFE4F98 +:1045B000458150E0E416F50608F4A7018AE0889DDD +:1045C000F001899DF00D1124EF5FFE4F6681778128 +:1045D00060557D4FC6010E949F34B701C8010E94FB +:1045E000E30899818913CACF0E944E08F5016083C0 +:1045F000718382839383BB24B394C1CFB12CA70171 +:10460000B801C6010E949F34BACFBB24B394F7CF40 +:10461000CF92DF92EF92FF920F931F93CF93DF938E +:1046200000D000D00F92CDB7DEB76B0185E0E82E49 +:10463000F12C01EB12E09E012F5F3F4F48EA52E060 +:1046400061E080E00E946622882349F095E0FE0147 +:104650003196A3EAB2E001900D929A95E1F795E0C8 +:10466000E3EAF2E0D60101900D929A95E1F70F90FE +:104670000F900F900F900F90DF91CF911F910F919E +:10468000FF90EF90DF90CF90089590E080E00E943F +:10469000B634893E9E4F11F40C94CF1080E00895FB +:1046A0001F920F920FB60F9211242F933F934F93A7 +:1046B0005F936F937F938F939F93AF93BF93CF93AA +:1046C000DF93EF93FF93D091E900DF708091EC00CE +:1046D000C82FC17080FDC0E81092E9008091F00001 +:1046E000877F8093F00078940E94B7111092E900C0 +:1046F0008091F00088608093F000CD2BCF70C09344 +:10470000E900FF91EF91DF91CF91BF91AF919F9120 +:104710008F917F916F915F914F913F912F910F906A +:104720000FBE0F901F9018951F920F920FB60F9209 +:1047300011242F933F934F935F936F937F938F93A6 +:104740009F93AF93BF93EF93FF938091E10082FF1C +:1047500009C08091E20082FF05C08091E1008B7F5B +:104760008093E1008091DA0080FF24C08091D8001E +:1047700080FF20C08091DA008E7F8093DA008091E4 +:10478000D90080FF9DC080E189BD82E189BD09B467 +:1047900000FEFDCF81E080937B0380916D0381114A +:1047A00009C00E94A4060E946F078091E200846005 +:1047B0008093E2008091E10080FF17C08091E200C9 +:1047C00080FF13C08091E2008E7F8093E200809191 +:1047D000E20080618093E2008091D8008062809343 +:1047E000D80019BC85E080937B038091E10084FFB1 +:1047F0002BC08091E20084FF27C080E189BD82E167 +:1048000089BD89B5982F917080FFFBCF8091D8002A +:104810008F7D8093D8008091E1008F7E8093E100AE +:104820008091E2008F7E8093E2008091E2008160BF +:104830008093E20080917C03882309F447C084E0E0 +:1048400080937B0380917B038091E10083FF27C0ED +:104850008091E20083FF23C08091E100877F8093F5 +:10486000E10082E080937B0310927C038091E10061 +:104870008E7F8093E1008091E2008E7F8093E20042 +:104880008091E20080618093E20042E060E080E09D +:104890000E943D078091F00088608093F000FF91B6 +:1048A000EF91BF91AF919F918F917F916F915F91A8 +:1048B0004F913F912F910F900FBE0F901F90189521 +:1048C00019BC10927B0310926D0374CF8091E300AA +:1048D00087FD93E090937B03B5CF78941F921FB62A +:1048E0001F9211248F939F93AF93BF938091660380 +:1048F00090916703A0916803B09169030196A11D8F +:10490000B11D8093660390936703A0936803B093EF +:104910006903BF91AF919F918F911F901FBE1F9010 +:1049200018959C014FB7F8948091660390916703A6 +:10493000A0916803B09169034FBF821B930B089548 +:104940002FB7F8948091660390916703A091680354 +:10495000B09169032FBF0895AF92BF92DF92EF929B +:10496000FF920F931F93CF93DF93CDB7DEB761977D +:104970000FB6F894DEBF0FBECDBF4C87888B998BE6 +:10498000E52ED62EF72E5E0127E0A20EB11C85E0A3 +:10499000F50111928A95E9F7809148038A3008F071 +:1049A00095C080914603909147030E9491240897F7 +:1049B00008F48CC004E610E025E030E0A50164E0D6 +:1049C00084E10E94D331892B09F0DEC010924803A4 +:1049D0008B8587FDD1C0E894E0F8809144039091E5 +:1049E0004503009709F0C2C08F819885891708F0A8 +:1049F00091C0981B892F41E0209170013091710185 +:104A0000889FC001112455E0589FF001599FF00D77 +:104A10001124E29FB001E39F700DF29F700D1124ED +:104A2000660F672F661F770B7195442319F07195F8 +:104A3000619571098091420390914303680F791F3A +:104A400089859A85891708F068C0981B892F41E0ED +:104A5000889FC001112455E0589FF001599FF00D27 +:104A60001124E29FC001E39F900DF29F900D11244D +:104A7000880F892F881F990B9195442319F09195E0 +:104A8000819591092091400330914103820F931F3A +:104A9000603871050CF444C06F577109709343037B +:104AA000609342033FE7D32E803891050CF44BC04E +:104AB0008F57910990934103809340039FE7F92E0C +:104AC0000E94A0249093470380934603ED86DE86E0 +:104AD000FF8686E0FE013C96DE01119601900D9264 +:104AE0008A95E1F729813A814B815C816D817E81D4 +:104AF00080E090E061960FB6F894DEBF0FBECDBFA8 +:104B0000DF91CF911F910F91FF90EF90DF90BF90B9 +:104B1000AF900895891B40E06FCF891B40E098CF8C +:104B20006138FFEF7F074CF461587F4F7093430368 +:104B30006093420321E8D22EB7CFD62E10924303C2 +:104B400010924203B1CF81382FEF92074CF4815875 +:104B50009F4F909341038093400381E8F82EB0CF9C +:104B6000F82E1092410310924003AACF0197909320 +:104B7000450380934403A4CF6894E0F884E00E9446 +:104B8000691584E190E0F3CF809148038F5F8093B3 +:104B9000480396CF9F92AF92BF92CF92DF92EF924F +:104BA000FF920F931F93CF93DF93CDB7DEB7649738 +:104BB0000FB6F894DEBF0FBECDBF8E010F5F1F4F43 +:104BC0008AE0D8011D928A95E9F79EE4C92E91E00A +:104BD000D92EF12CE12CAA24A394B12CF6018191B9 +:104BE0006F018F3F09F444C0F894E82FE295EF700D +:104BF000F0E021A18F70A50102C0440F551F8A95D6 +:104C0000E2F7CA01922F982B91A392A18095892354 +:104C100082A30E94AC0900C0E7E4F1E0912C31E0EE +:104C200021912F3F09F478C0A22FA295AF70B0E078 +:104C300090968C9190E02F7002C0959587952A955B +:104C4000E2F780FD69C0832F982A330F51E0EE34DC +:104C5000F50731F7F601319780818F3F11F00E94FF +:104C6000AE0980EA8A95F1F7F801EE0DFF1D9082FA +:104C7000AFEFEA1AFA0AB5E0EB16F10409F0AECF8D +:104C80004AE050E0B80188ED92E00E9492347C0145 +:104C9000892B41F08AE0F801A8EDB2E001900D9275 +:104CA0008A95E1F71091E302E114F104B9F181E092 +:104CB000809398020E94A02490939702809396027A +:104CC00080919602909197020E949124069770F02D +:104CD000A8EDB2E0E12FF0E0E65DFC4F8D9181930D +:104CE00022E0AD3DB207D1F71092980281E090E04A +:104CF000EF28C1F064960FB6F894DEBF0FBECDBFAB +:104D0000DF91CF911F910F91FF90EF90DF90CF90A7 +:104D1000BF90AF909F90089580E096CF80919802C9 +:104D20008111CECF0E94C00ED82EE091E3028823DD +:104D300009F4C9C07E0140E1E40EF11C85E0D70111 +:104D40001D928A95E9F70E2F10E0065D1C4F8091A9 +:104D5000D1028A3008F080C048E053E2B701C801B0 +:104D60000E947C0E882309F49AC041E358E2B701FF +:104D7000C8010E947C0E882309F491C04CE551E2E1 +:104D8000B701C8010E947C0E882309F488C04BE259 +:104D900052E2B701C8010E947C0E882309F47FC04B +:104DA00049E052E2B701C8010E947C0E882309F451 +:104DB00076C01092D1028091E20290E045E050E08E +:104DC000B701865D9C4F0E94923421E02093A1029E +:104DD000892B09F057C0D12C8BE9E82E82E0F82E00 +:104DE00010E000E0D7018D917D018823D1F08695F8 +:104DF000F80109F465C0E950FE4F808191819C87DC +:104E00008B871D860E94A0248160782F9F878E87C4 +:104E1000F701319710824B855C856D858F850E94E7 +:104E2000CA200E5F1F4F04301105E1F66091F502B4 +:104E30007091F6028091F7029091F8020E94320878 +:104E400061367A4E8105910528F040E060E080E00F +:104E50000E94080F8D2D4ECF8091990290919A0259 +:104E60000E949124843F914008F076CF8091A10266 +:104E7000882309F4B0CF85E0F70111928A95E9F70C +:104E80001092A102A091E202B0E0A65DBC4F85E0C5 +:104E9000FE01709601900D928A95E1F79DCF809169 +:104EA000D1028F3F31F08F5F8093D1028A3008F4B6 +:104EB00082CF0E94A02490939A0280939902D6CF29 +:104EC000ED50FE4F9ACFF0E0E65DFC4FF89485E0A0 +:104ED000A1EBB2E001900D928A95E1F765E070E0F8 +:104EE00081EB92E00E94E3088093B0020E94AC093B +:104EF000F894E091EB02F0E0E851FD4F80818B8760 +:104F00008093B70261E070E0CE010B960E94E30847 +:104F10008093B6020E94AC09F894C090B802D09079 +:104F2000B902E090BA02F090BB0280919D0290918C +:104F30009E02A0919F02B091A002C816D906EA066F +:104F4000FB06D1F0C0929D02D0929E02E0929F0299 +:104F5000F092A0020E94C00E81110EC00E944E0865 +:104F6000C61AD70AE80AF90AC092D202D092D3022E +:104F7000E092D402F092D5020E94AC09F89480919C +:104F8000C3028823F1F080FF0DC08091BC0280FF36 +:104F900025C09091640491609093640460E08695CC +:104FA0000E9415178091C30281FF09C020E0409143 +:104FB000BF026091BE028091BD020E948A151092CC +:104FC000C3020E94AC09F8948091C402882349F07E +:104FD0000E94860F0E94AC0980E08CCE0E94670E72 +:104FE000E1CF0E946B0FF6CFEF92FF920F931F93CA +:104FF000CF93DF9300D000D00F92CDB7DEB7162F3E +:10500000E82EF12CC701880F991F662339F18950CA +:105010009E4FFC01808191819A83898301E00B83FB +:105020000E94A0248160782F9D838C83F701E55630 +:10503000FD4F0127110F102B108349815A816B817D +:105040008D810F900F900F900F900F90DF91CF9167 +:105050001F910F91FF90EF900C94CA208D509E4F9E +:10506000D8CFCF92DF92EF92FF920F931F93CF93FF +:10507000DF930F92CDB7DEB7EE24E394F12C07EB6C +:1050800012E09E012F5F3F4F4CEA52E063E082E066 +:105090000E946622082F882321F1C090E5028C2D02 +:1050A00090E09C0128513D4F79011981F9018081DF +:1050B000181BD12E80E00AC0DA94F70180818F5F3F +:1050C000808360E08C2D0E94F427802F1D14A4F3B0 +:1050D000912F17FD90E0191B11110EC081110E9434 +:1050E000700B802F0F90DF91CF911F910F91FF9048 +:1050F000EF90DF90CF9008951F5FF701808181507E +:10510000808361E08C2D0E94F427802FE5CF1F92D1 +:105110001FB61F9211248F939F93AF93BF938091DB +:105120006503811113C08091660390916703A0917C +:105130006803B09169034196A11DB11D8093660378 +:1051400090936703A0936803B0936903BF91AF91F5 +:105150009F918F911F901FBE1F901895CDB7DEB7FE +:10516000E0970FB6F894DEBF0FBECDBF84B7877F40 +:1051700084BF0FB6F894A8958091600088618093F1 +:105180006000109260000FBE80E890E00FB6F894C7 +:1051900080936100909361000FBE85B7806885BFE2 +:1051A00085B7806885BF8AEA99E090933102809341 +:1051B00030020E94A4060E946F078091E200846082 +:1051C0008093E200789480917B038823A1F0109172 +:1051D000E9001F709091EC00892F817090FD80E8AC +:1051E000182B1092E9008091E80083FD0E94B7110E +:1051F0001F701093E90082E084BD93E095BD9AEFA3 +:1052000097BD80936E001092D2021092D30210923A +:10521000D4021092D5020E94CF10811102C00E94C8 +:105220002B100E94C00E8093580180915801882352 +:1052300009F4C9C01092720185E2809373010E9443 +:10524000C00E81110E9487328091580181112FC0B8 +:10525000FE01359686E0DF011D928A95E9F786E624 +:10526000898387E98A8386EC8B8384E38C8385E357 +:105270008D833497AEE4B1E0CE010B9621912D934E +:105280008E179F07D9F787E0E8E7F1E0DE019196F6 +:1052900001900D928A95E1F7FE01B196A7E4B1E085 +:1052A000CE01889621912D938E179F07D9F7809173 +:1052B000580195E0811190E09093E30285E0891B0D +:1052C0008093E2020EE411E083E5E82E81E0F82EFF +:1052D000F80181918F018F3F11F00E94AE09E01615 +:1052E000F106B1F707E411E0BEE4EB2EB1E0FB2ECE +:1052F000D8018D918D018F3F11F00E94AE09E0160B +:10530000F106B1F78AE0EAE2F3E0DF01282F1D920F +:105310002A95E9F7E8EDF2E0DF011D928A95E9F7B9 +:105320000E944523811102C00E94DD1782E090E0B7 +:105330000E94A83480931F0384E090E00E94A83468 +:10534000182F82E290E00E94A834982F812F90932A +:10535000D7028093D6020E94CA25EFE7FBEB319774 +:10536000F1F700C000000E94CA2580912A0380FF47 +:105370002EC06FEF7FEF90E080E00E94DA3481E092 +:105380008093E00080E28093D8001092C9008FE102 +:105390009EE40197F1F700C0000087E090EBDC018C +:1053A00080936D0690936E06A0936F06B09370067F +:1053B00088E19CE00FB6F894A895809360000FBE3A +:1053C00090936000FFCF85E28093720136CF83E037 +:1053D00090E00E94A8340E94F50B809185030E9402 +:1053E0007F160E944523811102C00E94DD1788E1CB +:1053F00090E00E94B03460935B0370935C038093F1 +:105400005D0390935E03672B682B692B11F40E9458 +:10541000A6170E94883067E081E00E945D1565E56F +:1054200086E10E945D1563E687E10E945D1560EAF2 +:105430008AE10E945D1569E98BE10E945D1565EFC7 +:105440008CE10E945D1560EA8DE10E945D1560E3CC +:105450008EE10E945D1566E083E00E945D1561E0CB +:105460008CE00E945D1560E081E00E945D1560E0C7 +:105470008CE00E945D156FE084E00E945D1561E0A4 +:105480008CE00E945D150E94C00E811102C00E9436 +:105490008A3283E080931A0380E280934E030E9455 +:1054A00088306DE070E08CE492E00E943B0F892B25 +:1054B000E9F580911A0363E070E081FD05C289E49B +:1054C00092E00E943B0F892B89F56DE070E089E343 +:1054D00092E00E943B0F892B49F50E944E086058CC +:1054E000774C8E4F9F4F6093550370935603809374 +:1054F000570390935803EBE6F4E080E092E0DF017D +:105500009C011D9221503040E1F7F0936C06E0932E +:105510006B068FEF9FEF90936A048093690481E09C +:1055200080935A038093590310921B038091E402E5 +:10553000811136C00E944523811104C00E94DD17ED +:105540000E94631788E090E00E94B0346093640486 +:1055500070936504809366049093670480914B0375 +:10556000836080934B036E7F71F40E94631788E021 +:1055700090E00E94B034609364047093650480935B +:105580006604909367040E94FE088091640480FF83 +:1055900004C060E086950E94151781E08093E402C4 +:1055A00080915801811106C084EF8093660185EFD8 +:1055B0008093650120916601A22FA295AF70B0E0A3 +:1055C00091963C9191972F7081E090E0BC01022E62 +:1055D00001C0660F0A94EAF7462F4095432391963F +:1055E0004C93919792963C919297362B92963C933E +:1055F000929740916501E42FE295EF70F0E031A1C0 +:105600004F70042E01C0880F0A94EAF7982F9095E6 +:10561000932391A392A1892B82A390968C9190E0E1 +:1056200002C0959587952A95E2F7817020A130E018 +:1056300002C0359527954A95E2F792E020FF90E069 +:10564000892B8093EC029091580181E098279093E8 +:10565000EB02891B8093E5020E94D61760E08AE086 +:105660000E94151781E00E94CB1680EE90E0909387 +:105670007101809370010E94280F89E591E0909359 +:10568000620380936103A0E46A2E80917B03FF2470 +:10569000F39400E112E1853009F465C10E94CA2546 +:1056A000E82E81110E944E08FAE22F2EF3E03F2EE1 +:1056B000E0E2F3E0D10110E000E0B02EDD90819156 +:1056C0008D1509F474C18D25C12CFF24F394982FF6 +:1056D0009F2109F467C10E94C00E882399F0C9A2D6 +:1056E000BAA2DF2081E009F480E08BA30E94A0240D +:1056F0008160782F9DA38CA349A15AA16BA18DA194 +:105700000E94CA20F801E05EFC4F8081F826F082FA +:105710008091EC02E82FEE0FEE0F90916601A92F19 +:10572000A295AF70B0E090962C9130E09F7002C0CF +:10573000359527959A95E2F7217033279091650169 +:10574000A92FA295AF70B0E090964C9150E09F7059 +:1057500002C0559547959A95E2F7CA01817099273D +:1057600040FF02C082E090E0822B8E2B8093EC02FF +:105770001091EB028F70E82FF0E0E350FE4F808134 +:105780009091EA02890F8093EA02F12C84306CF048 +:10579000E12FF0E0E851FD4F80818F5F808360E072 +:1057A000812F0E94F427FF24F3948091EA028D3F19 +:1057B0006CF4E12FF0E0E851FD4F8081815080834F +:1057C00061E0812F0E94F427FF24F3948091EA0284 +:1057D000082E000C990B64E070E00E9468348093FE +:1057E000EA02F1100E94700B80915A03882351F154 +:1057F00080911C0390911D030E949124C29708F090 +:10580000EDC02091690430916A042115310509F039 +:10581000F0C1809159038823A9F00E944E0800919D +:105820005503109156032091570330915803601B84 +:10583000710B820B930B6F3F7F4F8F4F9F4710F47D +:105840000E946B0FE11001C0F1100E94860F0E94B0 +:10585000E8100E94E30E90911E03891731F00E9418 +:10586000E30E80931E030E944B0E80917B038430D5 +:1058700009F00BCF83E08093E9008091E80082FF7C +:1058800004CF8091E80090E085FF0CC00E94C30621 +:1058900030E2E32EF12C8E010F5F1F4F882309F4B5 +:1058A00087C291E08091E8008B778093E80099238C +:1058B00009F4EBCEE981E150E33108F0DDC2F0E01C +:1058C000EC5AF94C0C947C3486E492E0FACD809149 +:1058D0007B03843009F437C080E00E944B0E809136 +:1058E000E702811109C0F092E7028091640481709F +:1058F0008093E6020E94670E0E946B0F0E94E810E0 +:105900001092650388E190E00FB6F894A895809313 +:1059100060000FBE6092600083B7817F846083BFA8 +:1059200083B7816083BF7894889583B78E7F83BF68 +:105930000FB6F894A895809160008861809360000C +:10594000109260000FBE80917A03882361F00E945C +:10595000CA25EAE2F3E081918111B9C3A4E3B3E07F +:10596000AE17BF07C1F780917B03853009F4AFCF35 +:1059700010926E030E94AE110E94E30E0E944B0E25 +:105980001092E7028091E602882349F08091640436 +:1059900081608093640460E086950E9415170E94E0 +:1059A000280F7CCEC394FF0C27E0C21290CE0F5F6D +:1059B0001F4F0A30110509F080CE8FEF88A789A705 +:1059C0001AA60E94A0248160782F9CA78BA748A5C7 +:1059D00059A56AA58CA50E94CA209ACE0E94A0242F +:1059E00090931D0380931C0360E080E00E94CC082C +:1059F0000E94E30E8093F9020E94C00E882309F4EE +:105A0000DFC06091F5027091F6028091F7029091EB +:105A1000F8020E943208613375478105910540F014 +:105A20000E946B0F80915A03882309F4F2CEE9CECD +:105A30000E94860F61E080E00E94CC0860E08FE762 +:105A400091E00E94411562E080E00E94CC088091C4 +:105A500085030E94BB0C823009F48CC008F081C021 +:105A6000882309F487C0813009F48AC065E080E0AA +:105A70000E94CC0860E08DE991E00E94411566E04B +:105A800080E00E94CC086091F9026695617082EA1C +:105A900091E00E94411567E080E00E94CC0860918F +:105AA000F9026095617087EA91E00E94411568E013 +:105AB00080E00E94CC086091F90262FB662760F9E1 +:105AC0008BEA91E00E9441156091F1027091F2021F +:105AD0008091F3029091F4020E9432086D3271407D +:105AE0008105910508F49ECF0E944E086093F10253 +:105AF0007093F2028093F3029093F4028091F0028B +:105B0000811104C080916701811142C06DE080E085 +:105B10000E94CC0860E080EB91E00E9441156AE0B1 +:105B200080E00E94CC0881E0809367018091EF02C1 +:105B300090E00196817099278093EF0221E030E098 +:105B4000281B390B40E6429FC001439F900D112452 +:105B50002091EE02222351F187529C4F0E94610650 +:105B600061CF833089F0843009F080CF60E081E933 +:105B700091E003C060E085E891E00E94411576CF96 +:105B800060E08BE891E0F9CF60E087E991E0F5CF44 +:105B90006AE080E00E94CC0860E080EB91E00E9427 +:105BA00041156BE080E00E94CC08C0CF2091ED024F +:105BB000222319F0875E9C4FD1CF875A9D4FCECFBD +:105BC00064E080E00E94CC0860E086EB91E00E94F7 +:105BD000411565E080E00E94CC0860E08CEB91E02C +:105BE0000E94411569E080E00E94CC0889E994E0B8 +:105BF000B5CF80911B0361E070E081110ACE082FC0 +:105C000010E02B01082E02C0440C551C0A94E2F748 +:105C1000A90144215521452B09F448C090911A034C +:105C200090FD46C08295880F807680936A01980126 +:105C3000369527953695279520936D01815E809343 +:105C40006B0110926E0124E630E047E050E068E618 +:105C500071E088E70E947F31892B09F0DACDA80135 +:105C600075E0440F551F7A95E1F780911A0380FD86 +:105C70002DC045595B4F04E610E020E230E060E4BF +:105C800088E70E94A631892B09F0C3CD0E94860FB8 +:105C9000C201809590954090690450906A04482212 +:105CA000592250926A0440926904B3CD8F5FA7CF06 +:105CB000880F880F880F80936A0110926D01895FA9 +:105CC00080936B0183E080936E01BDCFEAEFF2E039 +:105CD00080E2DF011D928A95E9F7E1E1F2E0F8AB9D +:105CE000EFA70DE012E067E0A62E99249394AFA5EC +:105CF000B8A96D91B8ABAFA7F80181918F01840F5E +:105D0000952F911D9C0125593B4F3EA72DA7E62FAE +:105D1000F0E0E650FD4F30E020E07A2C721AB92C0A +:105D2000022E01C0BB0C0A94EAF7CDA4DEA490E0D9 +:105D3000D6018D916D018B21672D691B6770862EB1 +:105D4000062E000C770BB82F01C0BB0F8A94EAF720 +:105D50008B2E7195619571096770772701C08695C3 +:105D60006A95EAF7882A8081882A80829F5F983026 +:105D7000F9F62F5F3F4F31962830310571F6E5E196 +:105D8000F2E02FA538A9E217F30709F0B0CF04E637 +:105D900010E020E230E04AEF52E071CF8091F10054 +:105DA000D8018D938D01B1E0EB1AF10809F479CD9A +:105DB0008091E80085FDF2CF8091E8008B77809399 +:105DC000E8000E94C306882399F36BCD1A8289E00C +:105DD0008B8311C08A81823009F491C1833091F1A3 +:105DE000813009F049C00E944E080E9482346B83C2 +:105DF0007C838D839E8380917B03843009F045CC26 +:105E00001091E9001F709091EC00892F817090FD36 +:105E100080E8182B82E08093E9008091E80080FF01 +:105E20000DC050E040E060E270E0CE0101960E94BB +:105E3000F4068091E8008E778093E8001F7010933D +:105E4000E90023CCFE013396D1018D911D01819390 +:105E5000B4E32B16B3E03B06B9F7CDCF8A8182308D +:105E600059F46B817C818D819E810E94823486E20F +:105E700090E00E94BC34BFCF8FEF8983BCCF4C81B0 +:105E80006B818A810E943A109827892798279E83E0 +:105E90008D83B1CFED80FE80FE24EF24FE248A8125 +:105EA0000B81EEE00E9F80011124FCE88F9F000D16 +:105EB000111D11248C8190E0880F991F080F191F64 +:105EC0006F2DC80187960E94BC346E2DC80188963C +:105ED000D0CF0E94BE0F8FCF8A818138C1F060F48D +:105EE000803809F088CF20E04B8160916604809172 +:105EF00065040E948A157FCF8238E9F0833809F063 +:105F00007ACF20E0409167046C818B81F2CF60E012 +:105F10008B810E9415178B81811103C00E94670E2F +:105F20006ACF8091640481608093640460E0869508 +:105F30000E94151760CF8B81809368045CCF8A81A3 +:105F4000813899F030F4803809F055CF809167049A +:105F50003FCF823891F0833809F04DCF80916504AE +:105F60008B83809166048C8346CF8091640480FF8C +:105F700002C086952DCF80E02BCF8091680428CF7A +:105F80006091640470916504809166049091670447 +:105F90000E94781530CF80E18A832DCF81E08A83FB +:105FA0008DE116CFCA80DB80DC24CD24DC248E0179 +:105FB0000F5F1F4FEC80E00EF12EF11CC6018D51DA +:105FC0009D4F0E151F0509F416CF2DE1C21621E0D5 +:105FD000D20658F40E94A834D80114968C93FFEF8F +:105FE000CF1ADF0A0F5F1F4FE9CFF8011482F7CFF6 +:105FF0000A811B811027012710279E012F5F3F4F29 +:106000006901EC80E00EF12EF11CC8018D519D4F0D +:10601000E016F10609F4EFCE0D3131E0130728F454 +:10602000D60114966C910E94BC34BFEFCB1ADB0AE8 +:106030000F5F1F4FEACF0E94AE0FDDCE85E0ACCFE1 +:10604000CA80DB80DC24CD24DC248E010F5F1F4F4F +:10605000EC80E00EF12EF11CC6018796E016F106E9 +:1060600009F4C9CEECEBCE16E2E0DE0658F40E944D +:10607000A834D80114968C93FFEFCF1ADF0A0F5F74 +:106080001F4FEACFF8011482F7CF0A811B81102736 +:10609000012710279E012F5F3F4F6901EC80E00E22 +:1060A000F12EF11CC8018796E016F10609F4A3CE83 +:1060B0000C3B32E0130728F4D60114966C910E9431 +:1060C000BC34BFEFCB1ADB0A0F5F1F4FEBCF09BD0C +:1060D00019BD09B400FEFDCF8091D8008F7D80935B +:1060E000D8008091E00082608093E0008091E00021 +:1060F00081FDFCCF10926E030E94AE1134CC86E27B +:1061000090E00E94A8341B821C821D828E8373CE75 +:106110001092B9008CE08093B80008959F92AF92DE +:10612000BF92CF92DF92EF92FF920F931F93CF9384 +:10613000DF93B82EEB010E94A0246C01EE24E394BF +:10614000F12CC431D10560F025E0E22EF12CCF3FD7 +:10615000DC0731F0CE0164E170E00E9448347B013D +:1061600084EAA82E94E8992E1092BC00A092BC005C +:106170000E94A0248C018091BC0087FF0DC08091FB +:10618000B900887F883039F18091B900887F8031EB +:1061900011F10FEF1FEF09C00E94A024801B910B8B +:1061A0008E159F0540F30EEF1FEFCF3FDC07E1F2A6 +:1061B000C6010E9491248C179D07B0F2C801DF919F +:1061C000CF911F910F91FF90EF90DF90CF90BF90F4 +:1061D000AF909F900895B092BB009092BC000E9437 +:1061E000A0248C018091BC0087FF0AC08091B90077 +:1061F000887F883111F0803461F610E000E0DECF56 +:106200000E94A024801B910B8E159F0558F3CBCFC5 +:106210000F931F93CF93DF93EB018093BB0084E830 +:106220008093BC000E94A0248C018091BC0087FF59 +:1062300011C02091B900287F81E090E0283211F44C +:1062400090E080E0919581959109DF91CF911F9128 +:106250000F910895CF3FDC0741F30E94A024801BDB +:10626000910B8C179D0708F38EEF9FEFEECF0F93E6 +:106270001F93CF93DF93EC0184EC8093BC000E94CA +:10628000A0248C018091BC0087FF08C08091BB00D6 +:1062900090E0DF91CF911F910F910895CF3FDC07E0 +:1062A00089F30E94A024801B910B8C179D0750F34B +:1062B0008EEF9FEFEECF0F931F93CF93DF93EC0101 +:1062C00084E88093BC000E94A0248C018091BC00D3 +:1062D00087FF08C08091BB0090E0DF91CF911F91B4 +:1062E0000F910895CF3FDC0789F30E94A024801B03 +:1062F000910B8C179D0750F38EEF9FEFEECFCF924F +:10630000DF92EF92FF920F931F93CF93DF936B0176 +:106310008A017901B9010E948E30E6010C0D1D1D24 +:10632000C017D10761F424E92093BC00DF91CF911D +:106330001F910F91FF90EF90DF90CF90089597FD00 +:10634000F2CFB70189910E940831EACFCF92DF9254 +:10635000EF92FF920F931F93CF93DF93C62F6A01A3 +:106360007901B8010E948E3097FD0CC0B8018C2FC6 +:106370000E940831E601EC0CFD1CCE15DF0511F082 +:1063800097FF0CC024E92093BC00DF91CF911F91AF +:106390000F91FF90EF90DF90CF900895B801899111 +:1063A0000E940831EACFCF92DF92EF92FF920F93D3 +:1063B0001F93CF93DF93F82EE62EEA016901B8010F +:1063C0000E948E3097FD15C0B8018E2D0E940831B5 +:1063D00097FD0FC0B8018F2D81600E948E30F12C87 +:1063E000E12C21E0C21AD108EC14FD0400F597FF5E +:1063F00011C024E92093BC001816190614F490E08B +:1064000080E0DF91CF911F910F91FF90EF90DF908F +:10641000CF900895C8010E94373197FD04C0FE0156 +:10642000EE0DFF1D80832FEFE21AF20ADDCF97FDFC +:10643000E0CFC8010E945B3197FDDBCFCC0DDD1DA5 +:106440008883D7CF84E98093BC0008958EE14A9B6E +:1064500002C08150E1F74A9BFECF08955A9880E22E +:106460008A95F1F75A9A0895FC013BE03A95F1F7C5 +:1064700098E020E080E031E040E14A95F1F7880FB4 +:106480004A9B02C08160232742E04A95F1F7000051 +:1064900040E14A95F1F7915079F790E19A95F1F73B +:1064A00099B132E03A95F1F7000040E14A95F1F7F1 +:1064B00092FB992790F992272081920F908308955B +:1064C000EF92FF920F931F93CF93DF930F92CDB76D +:1064D000DEB719828C017C01E60EF11C0E151F053A +:1064E00061F481E09981911180E00F90DF91CF916B +:1064F0001F910F91FF90EF9008950E942632CE01D8 +:1065000001960E943432F80181938F01E7CF529AAD +:106510005A9A089552985A9AEA9AE9E6F0E08081E8 +:106520008F7C808308956150770B91E001C0990FB3 +:106530006A95EAF720E031E0911108C0222391F03A +:106540005A9A80E28A95F1F75A980895492F48237C +:1065500039F05A9A232740E24A95F1F79695ECCF05 +:106560005A98F9CF5A98EDCFFF920F931F93CF937C +:10657000DF93EC018C01060F111DC017D10731F418 +:10658000DF91CF911F910F91FF900895F9900E9494 +:106590002E3268E08F2D0E949332EFCF1F920F9220 +:1065A0000FB60F921124EF92FF920F931F932F9328 +:1065B0003F934F935F936F937F938F939F93AF938B +:1065C000BF93EF93FF93CF93DF930F92CDB7DEB7D7 +:1065D00019820E942632CE0101960E943432A82FE1 +:1065E000A695A695A695282F229525709A2F957089 +:1065F000290F922F937026952695920F98279770C2 +:106600008981982B09F075C0A83008F072C080E12C +:106610008A95F1F75A9A529AB2E0BA95F1F700C00A +:106620005A98EA2EF12CEAE0AE9FD0011124AF5F18 +:10663000BE4F1896ED91FC9119973097B1F060918B +:10664000FB017091FC0116962D913C911797260F36 +:10665000371F13968D919C911497680F791F15968B +:106660004C91159712968C9109958AE08E9DF001B8 +:106670008F9DF00D1124EF5FFE4F6581662351F071 +:106680002091FB013091FC0186819781820F931F3D +:106690000E94B4320E942E32F0E1FA95F1F75A9836 +:1066A00052985A9A80E18A95F1F78AE08E9D80018E +:1066B0008F9D100D11240F5F1E4FD80112966C9103 +:1066C0001297662371F12091FB013091FC01139622 +:1066D0008D919C91820F931F0E946032D801ED91A1 +:1066E000FC91882311F088E001C082E080830E9441 +:1066F00026320F90DF91CF91FF91EF91BF91AF9133 +:106700009F918F917F916F915F914F913F912F91C9 +:106710001F910F91FF90EF900F900FBE0F901F9061 +:106720001895ED91FC91DFCF0F931F93CF93DF93DB +:10673000EC0108970CF0A9C08AE08C9FF0018D9FB6 +:10674000F00D1124EF5FFE4F80819181892B09F4B8 +:106750009CC0F894529A5A9885E08A95F1F7000007 +:106760008C2F869585709C2F9570890F982F93702C +:1067700086958695890F8E0193E0000F111F9A95DB +:10678000E1F7082B0E942E3200C068E0802F0E94A3 +:106790009332A0E1AA95F1F752985A9A4A9B27C0E2 +:1067A00087E090E04A9925C08AE08C9F80018D9F08 +:1067B000100D11240F5F1E4FF80165816623A1F1B2 +:1067C0002091FB013091FC0186819781820F931FFC +:1067D0000E946032811128C0529A5A9AD801ED91D4 +:1067E000FC9182E08083789482E090E016C000C043 +:1067F000D5CF0197B9F4529A5A9A8AE08C9FF0014A +:106800008D9FF00D1124EF5FFE4F0190F081E02D80 +:1068100081E08083789481E090E0DF91CF911F91B7 +:106820000F91089500C0BECF0E942632B0E2BA9503 +:10683000F1F75A98529AE0E1EA95F1F78AE08C9FD5 +:10684000F0018D9FF00D1124EF5FFE4F62816623F2 +:1068500051F02091FB013091FC0183819481820FE2 +:10686000931F0E94B4320E942E328AE08C9FF00166 +:106870008D9FF00D1124EF5FFE4F0190F081E02D10 +:106880001082789490E080E0C8CF84E090E0C5CF9B +:10689000AA1BBB1B51E107C0AA1FBB1FA617B70746 +:1068A00010F0A61BB70B881F991F5A95A9F7809562 +:1068B0009095BC01CD010895991B79E004C0991F02 +:1068C000961708F0961B881F7A95C9F7809508954A +:1068D00097FB072E16F4009407D077FD09D00E948D +:1068E000483407FC05D03EF4909581959F4F08955C +:1068F000709561957F4F0895EE0FFF1F0590F491FD +:10690000E02D099469279627692778278727782714 +:106910000895FB01DC0102C005900D9241505040EA +:10692000D8F70895FB01DC0104C08D910190801916 +:1069300021F441505040C8F7881B990B0895FB0182 +:10694000DC0102C001900D9241505040D8F70895EB +:10695000F999FECF92BD81BDF89A992780B5089527 +:10696000A6E1B0E044E050E00C94E234A8E1B0E0ED +:1069700042E050E00C94E234262FF999FECF92BD0C +:1069800081BDF89A019700B4021639F01FBA20BDF4 +:106990000FB6F894FA9AF99A0FBE08950396272F26 +:1069A0000E94BD340E94BC34252F0E94BD34242F88 +:1069B0000C94BD340196272F0E94BD340C94BC3436 +:1069C000DC01CB01FC01F999FECF06C0F2BDE1BDAF +:1069D000F89A319600B40D9241505040B8F708959E +:1069E0000E94F7346894B1110C94863508950E9482 +:1069F0006B3588F09F5798F0B92F9927B751B0F0B1 +:106A0000E1F0660F771F881F991F1AF0BA95C9F732 +:106A100014C0B13091F00E948535B1E008950C9416 +:106A20008535672F782F8827B85F39F0B93FCCF3C9 +:106A3000869577956795B395D9F73EF490958095AF +:106A4000709561957F4F8F4F9F4F0895E89409C0CF +:106A500097FB3EF490958095709561957F4F8F4F91 +:106A60009F4F9923A9F0F92F96E9BB279395F695A7 +:106A7000879577956795B795F111F8CFFAF4BB0F25 +:106A800011F460FF1BC06F5F7F4F8F4F9F4F16C089 +:106A9000882311F096E911C0772321F09EE8872F13 +:106AA000762F05C0662371F096E8862F70E060E0CF +:106AB0002AF09A95660F771F881FDAF7880F969548 +:106AC000879597F9089557FD9058440F551F59F031 +:106AD0005F3F71F04795880F97FB991F61F09F3FCB +:106AE00079F087950895121613061406551FF2CFF4 +:106AF0004695F1DF08C0161617061806991FF1CF44 +:106B000086957105610508940895E894BB2766276A +:106B10007727CB0197F908950E949F350C94103682 +:106B20000E94023638F00E94093620F0952311F0B9 +:106B30000C94F9350C94FF3511240C9486350E9481 +:106B4000633570F3959FC1F3950F50E0551F629F19 +:106B5000F001729FBB27F00DB11D639FAA27F00DB6 +:106B6000B11DAA1F649F6627B00DA11D661F829FDD +:106B70002227B00DA11D621F739FB00DA11D621FC2 +:106B8000839FA00D611D221F749F3327A00D611DDF +:106B9000231F849F600D211D822F762F6A2F1124C1 +:106BA0009F5750409AF0F1F088234AF0EE0FFF1FF4 +:106BB000BB1F661F771F881F91505040A9F79E3F4B +:106BC000510580F00C94F9350C9486355F3FE4F361 +:106BD000983ED4F3869577956795B795F795E795A1 +:106BE0009F5FC1F7FE2B880F911D9695879597F9AA +:106BF000089597F99F6780E870E060E008959FEF3F +:106C000080EC089500240A94161617061806090643 +:106C1000089500240A941216130614060506089512 +:106C2000092E0394000C11F4882352F0BB0F40F49A +:106C3000BF2B11F460FF04C06F5F7F4F8F4F9F4FDA +:106C40000895F894FFCFBA10BA10C310C310C5103E +:106C5000C310C310C310BA10BA10CA10C310C310A7 +:106C6000CA109F12C7126A14C7126A14FA121B13B1 +:106C70006A1419142614931809190C1920192319C8 +:106C800036193F196319A919DB19EF1975199819E4 +:106C9000281D281D811D811DB31D5B1D5B1D5B1DF6 +:106CA000CD1D3E1E4E1E4E1EE62EEA2E2E2F3F2FCF +:106CB0004A2F692F6C2F9F2FC02F3C2F3C2FCB2F9B +:0E6CC000CE2FD22FF82F1B301E302030453043 +:106CCE00013A0200000001000000003A020000003C +:106CDE0005010000003A0200000001060000003A23 +:106CEE000200000001070000003A02040800000044 +:106CFE000000003A02080C0000000000003A0201F9 +:106D0E001400000000000036323331F7F667669744 +:106D1E00C634350000000000012F085E0D3D0D3910 +:106D2E000D350D2E08F4F5010021007F2200030120 +:106D3E008000004A004A4A01F6F731333236674C7A +:106D4E00415945520042617365200047616D6520CF +:106D5E00005261697365004C6F776572004C4F434A +:106D6E004B0043617073004E756D005363726C007F +:106D7E00202020202000534F4C415200544D5053A0 +:106D8E005400818283E200E900EA00B500B600B744 +:106D9E0000CD008301CC008A0192019401210223CF +:106DAE000224022502260227022A02B300B4006F33 +:106DBE000070000603060806010606B00200FF0179 +:106DCE0000010000FFFF0000010001FF000008109D +:106DDE00181810080000010202020202020202024A +:106DEE000240227B49012701AC009E0BB70BD70B4B :00000001FF From d5ad8ab9125923709affab84eddece74b4b47a37 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Tue, 30 Nov 2021 20:57:10 -0500 Subject: [PATCH 093/155] Optimize layer lighting code for space saving. --- keyboards/solartempest/ps17/config.h | 8 +- .../solartempest/ps17/keymaps/via/keymap.c | 6 +- .../ps17/solartempest_ps17_via.hex | 2703 ++++++++--------- 3 files changed, 1342 insertions(+), 1375 deletions(-) diff --git a/keyboards/solartempest/ps17/config.h b/keyboards/solartempest/ps17/config.h index 98a8933f6b37..e29caf530514 100644 --- a/keyboards/solartempest/ps17/config.h +++ b/keyboards/solartempest/ps17/config.h @@ -61,10 +61,6 @@ #define TAPPING_TOGGLE 2 //Tap TT twice to toggle layer #define TAPPING_TERM 160 //Tapping duration in ms -// Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap. -#define LOCKING_SUPPORT_ENABLE -#define LOCKING_RESYNC_ENABLE // Locking resynchronize hack - // For LED status indicators #define LED_NUM_LOCK_PIN D0 #define LED_CAPS_LOCK_PIN D5 @@ -79,8 +75,8 @@ #define RGBLIGHT_VAL_STEP 8 #define RGBLIGHT_DEFAULT_VAL 40 //Default brightness on clearing EEPROM #define RGBLIGHT_LIMIT_VAL 180 //Brightness level max is 255 - #define RGBLIGHT_LAYERS //Enable layer light indicators - #define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF + //#define RGBLIGHT_LAYERS //Enable layer light indicators. Not required as layer_state_set_user is used instead. + //#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF #define RGBLIGHT_SLEEP //Turn off LEDs when computer sleeping (+72) #define RGBLIGHT_ANIMATIONS //Very memory intensive (+2604) diff --git a/keyboards/solartempest/ps17/keymaps/via/keymap.c b/keyboards/solartempest/ps17/keymaps/via/keymap.c index d0383cdc91a4..d85616310b29 100644 --- a/keyboards/solartempest/ps17/keymaps/via/keymap.c +++ b/keyboards/solartempest/ps17/keymaps/via/keymap.c @@ -391,11 +391,11 @@ void keyboard_post_init_user(void) { #ifdef RGBLIGHT_ENABLE layer_state_t layer_state_set_user(layer_state_t state) { - rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active + /*rgblight_set_layer_state(0, layer_state_cmp(state, 0)); // Multiple layers will light up if both kb layers are active rgblight_set_layer_state(1, layer_state_cmp(state, 1)); rgblight_set_layer_state(2, layer_state_cmp(state, 2)); rgblight_set_layer_state(3, layer_state_cmp(state, 3)); - rgblight_set_layer_state(4, layer_state_cmp(state, 4)); + rgblight_set_layer_state(4, layer_state_cmp(state, 4));*/ // This is what the LED layout is. // 1, 0, @@ -406,7 +406,7 @@ layer_state_t layer_state_set_user(layer_state_t state) { // 22, 21, 20, 19, // 27, 26, 25, 24, 23 - switch(biton32(state)){ // Change all other LEDs based on layer state as well + switch (get_highest_layer(state)) { // Change all other LEDs based on layer state as well case 0: rgblight_sethsv_noeeprom(50,255,100); //You can selectively decrease certain LEDs if you are have a clear acrylic case and the shine-through is bothersome. Rgblight_sethsv_at() can be used here for those LEDs (0, 2, 4, 14, and 23). Otherwise some black tape on the acrylic plate or foam underneath the FR4 plate will do the trick. diff --git a/keyboards/solartempest/ps17/solartempest_ps17_via.hex b/keyboards/solartempest/ps17/solartempest_ps17_via.hex index bae27a5b97ac..9d9c27806520 100644 --- a/keyboards/solartempest/ps17/solartempest_ps17_via.hex +++ b/keyboards/solartempest/ps17/solartempest_ps17_via.hex @@ -1,9 +1,9 @@ :100000000C949E030C94E5030C94E5030C94E50317 :100010000C94E5030C94E5030C94E5030C94E503C0 -:100020000C94E5030C94E5030C9487260C9443266A -:100030000C9484270C94E5030C94E5030C94E503DD +:100020000C94E5030C94E5030C94A7250C9463252C +:100030000C94A4260C94E5030C94E5030C94E503BE :100040000C94E5030C94E5030C94E5030C94E50390 -:100050000C94E5030C9460270C94E5030C94E503E1 +:100050000C94E5030C9480260C94E5030C94E503C2 :100060000C94E5030C94E5030C94E5030C94E50370 :100070000C94E5030C94E5030C94E5030C94E50360 :100080000C94E5030C94E5030C94E5030C94E50350 @@ -115,21 +115,21 @@ :10072000370000001203410054004C0041004E000D :1007300054004900530000000403090411241FBEA3 :10074000CFEFDAE0DEBFCDBF04B603FE27C0809155 -:100750009D0390919E03A0919F03B091A0038730C9 -:10076000904BA740B04BD1F410929D0310929E0382 -:1007700010929F031092A00314BE84B7877F84BF9A +:100750009C0390919D03A0919E03B0919F038730CD +:10076000904BA740B04BD1F410929C0310929D0384 +:1007700010929E0310929F0314BE84B7877F84BF9C :100780000FB6F894A895809160008861809360000E :10079000109260000FBEE0E0F8E3099511E0A0E0E0 -:1007A000B1E0EAE3FEE502C005900D92AA3CB10774 -:1007B000D9F723E0AAECB1E001C01D92AD39B20730 -:1007C000E1F70E94AB270C94DD2E0C940000E8EDBD +:1007A000B1E0E8E6FCE502C005900D92AA3CB10775 +:1007B000D9F723E0AAECB1E001C01D92AC39B20731 +:1007C000E1F70E94CB260C94F42D0C940000E8ED88 :1007D000F0E080818E7F80831092E2001092DA0038 :1007E0001092E100A0EEB0E08C9181608C9380814A :1007F0008F77808319BCA7EDB0E08C918E7F8C93AE -:1008000080818F7E808310926B0308952091E40095 +:1008000080818F7E808310926A0308952091E40096 :100810003091E50095E6A9012091EC00822F8170CE :1008200020FF06C08091E80080FF06C080E00895A8 -:100830002091E80022FD1AC080919103882389F05D +:100830002091E80022FD1AC080919003882389F05E :10084000853089F08091EB0085FD0FC02091E40098 :100850003091E50042175307F9F29150E1F684E038 :10086000089582E0089583E0089581E00895EF926D @@ -138,9 +138,9 @@ :10089000E8008E778093E8000E940604882399F38D :1008A000C82F08C0F70181917F018093F1000150AA :1008B000110949F78C2FCF911F910F91FF90EF9065 -:1008C00008958091930387FF13C08091E80082FF11 +:1008C00008958091920387FF13C08091E80082FF12 :1008D00006C08091E8008B778093E80004C0809187 -:1008E00091038111F2CF0895809191038823D9F368 +:1008E00090038111F2CF0895809190038823D9F36A :1008F0008091E80080FFF8CF8091E8008E77ECCF00 :10090000982F9093E900242F762F50E0891731F02B :100910007091EC002091ED005091F00021FD07C096 @@ -151,1372 +151,1343 @@ :1009600080E00895CF92DF92EF92FF920F931F9352 :10097000CF93DF93C8EDD0E088818F7E8883E7ED49 :10098000F0E080818160808384E082BF81E0809399 -:100990006B0388818E7F888302EE10E0F80110825D +:100990006A0388818E7F888302EE10E0F80110825E :1009A0001092DA0081EEC82ED12CF60110828881D7 :1009B0008F77888388818068888388818F7D88830A -:1009C00019BC10929103109292031092900310920E -:1009D0008F0390EEE92EF12CF70180818B7F8083CD +:1009C00019BC109290031092910310928F03109211 +:1009D0008E0390EEE92EF12CF70180818B7F8083CE :1009E00088818160888342E060E080E00E9480042A :1009F000F60180818E7F8083F80180818160808311 :100A0000808188608083F70180818E7F80838881E8 :100A100080618883DF91CF911F910F91FF90EF90BC -:100A2000DF90CF900895FC018091990390919A03F3 +:100A2000DF90CF900895FC018091980390919903F5 :100A300086179707A0F06115710529F49091E800D9 :100A40009E779093E80090E06115710551F4911143 :100A500008C08091E80082FF34C080E00895BC01A6 -:100A6000F2CF809191038823C1F18530C1F180914B +:100A6000F2CF809190038823C1F18530C1F180914C :100A7000E80083FD30C08091E80082FDEACF8091DC :100A8000E80080FFE1CF8091F3002091F200382F41 :100A90006115710519F02830310558F091E02830C2 :100AA000310509F090E02091E8002E772093E800CE :100AB000CBCF81918093F100615071092F5F3F4F3F -:100AC000E7CF80919103882341F0853041F08091F8 +:100AC000E7CF80919003882341F0853041F08091F9 :100AD000E80083FFBECF81E0089582E0089583E0BF -:100AE0000895089580916E0308959C014FB7F8947E -:100AF0008091620390916303A0916403B0916503B8 -:100B00004FBF821B930B08952FB7F8948091620317 -:100B100090916303A0916403B09165032FBF089582 -:100B200020915F03309160032817390771F090938B -:100B3000600380935F03E0915D03F0915E03309763 -:100B400021F00084F185E02D0994089520915B0344 -:100B500030915C032817390771F090935C03809300 -:100B60005B03E0915D03F0915E03309721F0068016 -:100B7000F781E02D09940895E0915D03F0915E0303 -:100B8000309721F00190F081E02D099480E00895E4 -:100B9000DC016091570380915803962F891301C09F -:100BA0000895292F30E0F901EE0FFF1FE15BFC4FA4 -:100BB000408151814A175B07A1F487E08A9FA00119 -:100BC0008B9F500D1124415E5E4F81E0FA018483BA -:100BD0009613E6CF2F5F3F4F2370332720935703A1 -:100BE00008952F5F3F4F922F9370D8CF1092EC0251 -:100BF0001092EB02EFE1F1E08581811102C01482D5 -:100C00001682379681E0E934F807B1F70895FA01C2 -:100C1000811101C0FB01099408958091E602982F8B -:100C20009E7F61F4817082608093E6028091E90288 -:100C3000853B18F084EB8093E90208958A34B0F381 -:100C400081708864F1CFAF92BF92DF92EF92FF92F2 -:100C50000F931F93CF93DF93182F062FE901453B86 -:100C600008F044EBE42FF0E0E655FD4F011110C011 -:100C7000E4915E2F4E2F4983E8835A83DF91CF9111 -:100C80001F910F91FF90EF90DF90BF90AF9008956C -:100C9000202F30E04491D42EE42EF12C56E0159F05 -:100CA000C0011124EFEFF0E0BF010E94E72D812F7A -:100CB00090E0880F991F55E5569FD001579FB00DC2 -:100CC00011248A1B9B0B982F990F890F5F01A21A81 -:100CD000B30AAE9CD001AF9CB00DBE9CB00D1124E8 -:100CE0005B2F089F80011124012F11275F01A01A9B -:100CF000B10AAE9C8001AF9C100DBE9C100D11245A -:100D00005F01A81AB108A29EC001A39E900DB29ED9 -:100D1000900D1124892F9927E81BF90BEE9DC00136 -:100D2000EF9D900DFE9D900D1124E92F623071050D -:100D3000A1F050F46115710509F49DCF6130710582 -:100D400081F0EB2F512F97CF6430710569F080F05F -:100D50006630710509F48FCFF4CFE42F4B2F592F54 -:100D60008ACFE42F412F87CFEB2F542F492F83CFEA -:100D70004B2F5D2DE12F7FCF0E9484059C01909128 -:100D8000810280918202982B21F030937E02209381 -:100D90007D029091830280918402982B21F0309300 -:100DA0007C0220937B02E0915D03F0915E0330971B -:100DB00049F082E080937F020480F581E02D8FE787 -:100DC00092E00994089540918102803F59F4809106 -:100DD000820287FF0DC01092820241110BC0109257 -:100DE000790208C0813F81F48091820218169CF339 -:100DF000442381F08091830290918402892B09F031 -:100E00005AC0109278020895823F49F447FFF0CF0C -:100E100010928102809182028111ECCFE0CF833F5A -:100E200019F41416ACF3E4CF90918302893F29F4AE -:100E30001916F4F610928302DBCF8A3F19F497FF5C -:100E4000D7CFF8CF909184028B3F29F497FFD0CF72 -:100E500010928402CDCF8C3F19F41916CCF3C8CF71 -:100E60009CE0980F953090F4845F990B21E030E07E -:100E7000B90102C0660F771F8A95E2F7CB01809512 -:100E800090918002892380938002B2CF8D3F31F40C -:100E900080917A028E7F80937A02AACF8E3F21F4CE -:100EA00080917A028D7FF7CF8F3F09F0A1CF80919B -:100EB0007A028B7FF0CF089580917A0280FD16C070 -:100EC00081FD16C082FD16C0809178028823A1F0B2 -:100ED000883280F428E0829FC001112468E270E02B -:100EE0000E94FB2D862F672B39F0089582E008952C -:100EF00084E0089588E0089581E0089580917A0261 -:100F000080FD14C081FD14C082FD16C0809179025D -:100F1000882381F0843180F422E3829FC001112470 -:100F200064E170E00E94FB2D862F08958CE0089507 -:100F300089E1089585E0089582E30895803F31F4C2 -:100F40000E947E078195809382020895813F19F463 -:100F50000E947E07F8CF823F31F40E947E07819580 -:100F6000809381020895833F19F40E947E07F8CF91 -:100F7000893F29F40E945C078093830208958A3F89 -:100F800021F40E945C078195F7CF8B3F31F40E94DA -:100F90005C0781958093840208958C3F19F40E9428 -:100FA0005C07F8CF9CE0980F953070F4845F990B44 -:100FB00021E030E001C0220F8A95EAF7809180029B -:100FC000822B8093800208958D3F31F480917A02C4 -:100FD000816080937A0208958E3F21F480917A0295 -:100FE0008260F7CF8F3FB9F780917A028460F1CFAA -:100FF00080E00895F894E82FE295EF70F0E031A1D9 -:10100000282F2F7081E090E001C0880F2A95EAF721 -:10101000982F9095932391A392A1892B82A37894E2 -:1010200008959091660392FF06C0282F28712830FA -:10103000F9F4877F846093FF06C0282F2871283138 -:10104000F1F4877E84612091670320FF06C0382F6A -:1010500038713830D9F4877F816021FF06C0282F8E -:1010600028712831D1F4877E816194FD877E0895AF -:10107000282F24712430F9F68B7F8860DCCF282F4D -:101080002471243101F78B7E8861DDCF382F3171D7 -:10109000313019F78E7F8860E0CF282F2171213100 -:1010A00021F78E7E8861E1CFCF93DF93EC01823808 -:1010B0009105A9F1D8F58133910509F496C048F559 -:1010C0008932910509F48AC08A9709F495C0C1153F -:1010D00021E5D20708F0BCC0C11530E5D30708F000 -:1010E00014C1C83ED10508F09CC0C03ED10560F5D2 -:1010F000C83AD10508F087C0C53AD10508F0FDC04F -:10110000C130D10509F12097F9F0C430D105E0F4E0 -:1011100040C08533910509F45AC0C997C1F6809142 -:101120006603837089F0C0EED0E00EC0833E910567 -:1011300099F170F4803E910501F1823E910539F6F6 -:101140008091660382FD21C0CE01DF91CF91089589 -:10115000863E910561F1873E910571F1843E9105CE -:1011600009F0B5CF8091670381FFEECF80916603D0 -:10117000C7EED0E084FD0DC0E7CF8091660380FD0F -:1011800012C19091670390FFDFCFC3EED0E084FFE0 -:10119000DBCFD0E0C0E0D8CF8091660382FD06C1EE -:1011A0009091670390FDBFCF84FFCECFF2CF8091A7 -:1011B000660383FDDDCFC8CF8091660383FDF9C050 -:1011C0009091670391FFF0CFC4EED0E0BDCF809146 -:1011D000660385FFB9CFC9E2D0E0B6CF8091660340 -:1011E00085FFB2CFC5E3D0E0AFCF8091660386FF25 -:1011F000ABCFCAE2D0E0A8CF8091660386FFA4CF30 -:10120000C1E3D0E0A1CFCF3BD10518F6C85AD0E05A -:10121000CC0FDD1FC25BDE4F0990D881C02DD46496 -:1012200093CFC11540E2D40758F4C11581E0D80727 -:1012300008F08ACFC03FD10508F4ABCFD06584CF8A -:10124000C11590E4D90708F4A4CFDF70D06A7CCF31 -:10125000C11525E5D20700F5C11534E5D30708F01F -:101260008AC0C11543E5D40708F071C0C11582E5F5 -:10127000D80708F467C0CE018370992721E030E0D9 -:1012800002C0220F331F8A95E2F7C695C69580E209 -:10129000C89FE001112452C0C11599E5D907A8F4EF -:1012A000C11528E5D20708F06BC0C11536E5D30794 -:1012B00008F06FCF8C2F0E941108C82FD0E0DC2FD0 -:1012C000CC27CC27DF71D0623FCFC1154AE5D407C8 -:1012D00008F45BC0CE0190568115904208F059CFBA -:1012E0008D2F8F710E94110890E0982F88278827F2 -:1012F0009F719C012C2BE901E6CFC55AD0E0C55B5C -:10130000DE4FC881D0E0D0641FCFCE01E4E09695D7 -:101310008795EA95E1F783702C2F26952695237003 -:1013200040E2249F90011124382B8C2F8370C1E060 -:10133000D0E002C0CC0FDD1F8A95E2F7C22BD32B81 -:10134000DC6802CFDC2FCC27C16FD06AFDCECE0186 -:101350008370992721E030E002C0220F331F8A9565 -:10136000E2F7C695C69590E2C99FE0011124C22B11 -:10137000D32BDA68E9CEDC2FCC27C46FD06AE4CE59 -:10138000DC2FCC27C06FD06ADFCE8C2F8F700E94ED -:10139000110834E0D695C7953A95E1F7CF709C2FA8 -:1013A000EC01D069D1CEC9E3D0E0CECEC2EED0E020 -:1013B000CBCEC6EED0E0C8CE80914802811110920B -:1013C00048020895809590916C03982390936C0344 -:1013D000089580916C0390914702892B9091460269 -:1013E000892B8093CC01909148029923A1F0892BFD -:1013F0008093CC0180914A01882341F1809166035A -:1014000087FF24C08EE1EEECF1E090E0815000F522 -:1014100091110E94DC09E0915D03F0915E03309729 -:10142000E1F080914A01882359F08091660387FF9B -:1014300007C08091CC018093CD0186E08093CC01E0 -:101440000280F381E02D8CEC91E0099486E0DBCF03 -:1014500021912223D9F29F5FD9CF089590914A011B -:101460009923D1F09091660397FF16C0E82FE69577 -:10147000E695E695EE31E0F4F0E0E453FE4F282FD8 -:10148000277081E090E001C0880F2A95EAF78095E7 -:101490009281892382830895EEECF1E09191891382 -:1014A00003C0DF0111971C9291E0E43DF907B1F709 -:1014B000089590914A019923C1F09091660397FF96 -:1014C00014C0E82FE695E695E695EE31F8F4F0E0E5 -:1014D000E453FE4F877021E030E001C0220F8A956F -:1014E000EAF78281822B82830895AEECB1E0EFEFC0 -:1014F00090E02D91821751F0EF3F19F4211101C0B6 -:10150000E92F9F5F9630A9F7EF3F09F408950E2E5B -:10151000000CFF0BE453FE4FE6CF80914402909104 -:101520000302981301C008958F5F8770FACF990F57 -:10153000990F890F982F977086958695869524E048 -:10154000829FF0011124E151FE4F50E040E080E025 -:10155000219130E0092E02C0369527950A94E2F7D2 -:1015600021703327042E01C0220F0A94EAF7822B40 -:101570004F5F5F4F4430510559F70895990F990F08 -:10158000890F982F977041E001C0440F9A95EAF7B0 -:1015900086958695869594E0899FF0011124E15106 -:1015A000FE4F30E020E070E05191DF011197CB0158 -:1015B000022E02C0969587950A94E2F78170819574 -:1015C0008527842385278C932F5F3F4F2430310557 -:1015D00059F7089590E080E00E94A60590E080E031 -:1015E0000E94900510924702109246020E94E9095B -:1015F00086E0EFE7F2E0DF011D928A95E9F71092AD -:1016000079021092780210927A020C94BC069093A0 -:101610004A02809349020C94EA0A882341F080959B -:10162000909147028923809347020C94E909089519 -:10163000882339F090914702982B909347020C949D -:10164000E9090895882321F00E94E2090C94E90930 -:101650000895882339F090916C03982B90936C0334 -:101660000C94E9090895882309F452C0823871F472 -:101670000E94BC0581FF4CC089E30E94590A0E9468 -:10168000E90989E30E942E0A0C94E909833859F488 -:101690000E94BC0580FF3CC083E50E94590A0E945D -:1016A000E90983E5EFCF843859F40E94BC0582FF35 -:1016B0002FC087E40E94590A0E94E90987E4E2CF1B -:1016C0009CEF980F913AF0F290E2980F983050F416 -:1016D000877091E001C0990F8A95EAF7892F0E94DF -:1016E000E209D2CF9BE5980F933020F490E080E0A0 -:1016F0000C94A60598E5980F973120F490E080E0CF -:101700000C949005803F20F00E94E3060C94BC06E8 -:101710000895809580FF08C0589A81FF07C05D9AA0 -:1017200082FF06C05C9A08955898F7CF5D98F8CF6D -:101730005C9808958093680370936A0360936903CB -:10174000809191038430F9F48093E9008FEF9091B8 -:10175000E800815095FD06C095ED9A95F1F70000DF -:101760008111F5CF8091E80085FF0DC050E040E089 -:1017700063E070E088E693E00E9437048091E8001F -:101780008E778093E8000895BC0184E00C949A0B56 -:10179000BC0183E00C949A0B9C0184E08093E900E7 -:1017A0009FEF8091E800915085FD06C085ED8A95F8 -:1017B000F1F700009111F5CF8091E80085FF0CC092 -:1017C00050E040E066E070E0C9010E94370480917B -:1017D000E8008E778093E8000895CF93DF93EC01C3 -:1017E00080914A018823B1F18091660387FF32C05E -:1017F00060E284E08093E9008FEF9091E8008150EF -:1018000095FD06C095ED9A95F1F700008111F5CF91 -:101810008091E80085FF1BC080914A0170E050E094 -:1018200040E0811104C050E040E068E070E0CE018B -:101830000E9437048091E8008E778093E80080E270 -:10184000FE01AFE6B3E001900D928A95E1F7DF91DA -:10185000CF91089568E081E0CDCF81E08093E000F2 -:1018600080E28093D8001092C9008FE19EE4019736 -:10187000F1F700C0000087E090EBDC0180939D034E -:1018800090939E03A0939F03B093A00388E19CE0F4 -:101890000FB6F894A895809360000FBE90936000F7 -:1018A000FFCFCF93C82F882309F4AEC08238C1F48C -:1018B0000E94BC0581FDA8C089E30E94590A0E94CC -:1018C000E9092FEF81EE94E0215080409040E1F74C -:1018D00000C0000089E30E942E0ACF910C94E90910 -:1018E0008338A1F40E94BC0580FD8EC083E50E9470 -:1018F000590A0E94E9092FEF81EE94E021508040BF -:101900009040E1F700C0000083E5E5CF8438A1F402 -:101910000E94BC0582FD78C087E40E94590A0E949B -:10192000E9092FEF81EE94E0215080409040E1F7EB -:1019300000C0000087E4CFCF8CEF8C0F813A88F590 -:1019400080914A01882301F18091660387FF1CC0C2 -:10195000EC2FE695E695E695F0E0E453FE4F8281A4 -:1019600090E04C2F477021E030E002C0220F331F7F -:101970004A95E2F782239323892B79F08C2F0E94DA -:101980002E0A0E94E90909C0EEECF1E08191C81726 -:10199000A9F321E0E43DF207C9F78C2F0E94590A10 -:1019A0009CCF80E28C0F883068F4C77021E030E073 -:1019B00001C0220FCA95EAF780916C03822B8093B5 -:1019C0006C038BCFEBE5EC0FE33040F4F0E0E55B2C -:1019D000FE4F808190E0CF910C94A605E8E5EC0FD6 -:1019E000E73150F4F0E0EE0FFF1FE25BFE4F808125 -:1019F0009181CF910C949005C03F30F08C2F0E94C4 -:101A00009E07CF910C94BC06CF9108951F93CF935E -:101A1000DF93182FCAE0D0E0893311F4C0E5D0E09D -:101A2000812F0E94510C8FE99FE00197F1F700C0D0 -:101A300000002197C1F7812FDF91CF911F910C9466 -:101A4000330BDF92EF92FF920F931F93CF93DF93AD -:101A5000E82FF0E0E85EFD4FD490282F26952695DC -:101A6000269530E0F901E85FFD4F0491877010E0A2 -:101A7000082E02C0159507950A94E2F70170112708 -:101A8000F901E850FE4FE490F12C082E02C0F594C5 -:101A9000E7940A94E2F791E0E922FF24F901E85182 -:101AA000FE4FC491D0E002C0D595C7958A95E2F764 -:101AB000C170DD270115110519F081EE0E94510C4E -:101AC000E114F10419F086EE0E94510C8D2D0E9454 -:101AD000060DEF2819F086EE0E94330B012B19F04A -:101AE00081EE0E94330BCD2B51F08CE2DF91CF9130 -:101AF0001F910F91FF90EF90DF900C94060DDF91F6 -:101B0000CF911F910F91FF90EF90DF900895CF93A9 -:101B1000DF93C7E0D2E060E0CE010E94A92E2196BB -:101B2000C11584E0D807B9F7DF91CF9108956F927E -:101B30007F928F929F92AF92BF92CF92DF92EF925D -:101B4000FF920F931F93CF93DF938BECC82E84E00B -:101B5000D82E0FE510E0E801E09736011CC0F50132 -:101B600085909490692DC7010E94A92E682DC70108 -:101B700001960E94A92E82E0A80EB11C82E0E80E18 -:101B8000F11CCE15DF0559F788E0680E711C289608 -:101B90000C171D0731F07E0188E0E81AF1085301A7 -:101BA000DECF005D1F4F80E3C80ED11C0F3382E0F3 -:101BB000180789F6DF91CF911F910F91FF90EF9059 -:101BC000DF90CF90BF90AF909F908F907F906F905D -:101BD0000895CF93C82F6FEF811161E283E290E007 -:101BE0000E94A92E6FEFC11161E184E290E00E9492 -:101BF000A92E6FEFC11168E285E290E0CF910C94BD -:101C0000A92E80E00E94E90D60E086E290E00E944B -:101C1000A92E0E94970D0E94870D81E00C94E90D7A -:101C20000F931F93CF93DF9328E0629FE00111246D -:101C300050E0440F551FC40FD51F30E3839FC00DE4 -:101C4000D11D1124CE0187960E94952E082F10E0F9 -:101C5000102F0027CE0188960E94952E9801282BE0 -:101C6000C901DF91CF911F910F910895462F8A30BE -:101C700038F4763028F4643018F4672F0C94100E82 -:101C800090E080E00895BF92CF92DF92EF92FF92B2 -:101C90000F931F93CF93DF937C0100919B031091CF -:101CA0009C038091490290914A02082B192BCFE0A6 -:101CB000D0E0CC24C394D12CBC2EC6010C2E02C083 -:101CC000880F991F0A94E2F780239123892B71F4DE -:101CD000219790F7B12C8B2DDF91CF911F910F9110 -:101CE000FF90EF90DF90CF90BF900895B7018C2FB9 -:101CF0000E94360E0E945408019751F3ECCFCF9307 -:101D0000DF93EC010E94430EBE010E94360EDF916C -:101D1000CF910C945408FC0186819781009779F04B -:101D20000E945408292F2F7092959F7092509E30D8 -:101D3000A0F4E92FF0E0E152F14D0C94312E8081B6 -:101D400091810E947F0EEECF803F19F020F4883EF3 -:101D500020F481E00895843FE1F380E00895883E17 -:101D6000C0F3813FD1F7F5CF822F86958695869572 -:101D700008951F93CF93DF9300D000D00F92CDB77B -:101D8000DEB7FC01268137812115310541F525E0BB -:101D9000DE01119601900D922A95E1F7FC01228156 -:101DA00089819A812223B9F06623A9F00E94430E0B -:101DB000182F682F89819A810E94BE0A69817A81D1 -:101DC000812F0F900F900F900F900F90DF91CF9178 -:101DD0001F910C94360E0E94970A182FEFCFC9015D -:101DE0000F900F900F900F900F90DF91CF911F9158 -:101DF000089583E290E00E94952E813289F484E276 -:101E000090E00E94952E813159F485E290E00E9485 -:101E1000952E91E0883209F090E0892F8170089525 -:101E200080E0FCCF6091E602669570E04BE050E008 -:101E30008CE091E00E947B2E892B19F481E0809345 -:101E40008D020E94840590938702809386020895F4 -:101E5000CF92DF92EF920F931F93CF93DF93CDB783 -:101E6000DEB7C455D1090FB6F894DEBF0FBECDBFA3 -:101E700060911B018091E60280FF4CC0EFEAF3E025 -:101E80009E012F5F3F4F8E010B5A1F4FC901A49136 -:101E90004A2F50E0DA01AA0FBB1FA40FB51FAE56A0 -:101EA000BD4FCD90DD90EC90D901CD92DD92ED92B9 -:101EB0009D0131960A171B0751F720911A0143E043 -:101EC000249F800D911D1124279A25B12F7735B1BC -:101ED00030685FB7F894FC01649FE00DF11D112498 -:101EE000BF016817790749F55FBFEFE5F4E0319767 -:101EF000F1F700C00000CC5ADF4F0FB6F894DEBFF8 -:101F00000FBECDBFDF91CF911F910F91EF90DF906A -:101F1000CF90089580911C0190911D0123E0829F34 -:101F2000F0011124EE56FD4F891708F0A7CF11825A -:101F3000108212828F5F3396F7CFDC014D91CD0175 -:101F4000E8E035B9000000C047FF25B9440F0000A4 -:101F500000C000C000C025B900C0EA9591F7C1CF0C -:101F60000F931F93CF93DF93EC0110E000E090916B -:101F70001E019017110609F06CF40E94280F8C8145 -:101F800090E00196817099278C83DF91CF911F910A -:101F90000F91089520911C01A801420F511D9A0133 -:101FA000220F331F240F351F2E563D4F4C81609159 -:101FB000E8028091E70296959017110651F04CF0D7 -:101FC000442349F04091E9020E9423060F5F1F4F0E -:101FD000CECF4423B9F340E0F7CF8F929F92AF92D8 -:101FE000BF92CF92DF92EF92FF920F931F93CF9306 -:101FF000DF93EC014C81042F10E09801D8010E947E -:10200000462E9B01AC010E945C2E4B015C01E0E27C -:10201000F0E0E01BF10BA5E5B0E0AC019B010E94F4 -:102020005C2E6B017C019F01DF010E943E2E9B0113 -:10203000AC010E94672E9B01AC01280D391D4A1D81 -:102040005B1DC701B6010E940F2EF22E822F90E079 -:1020500039E23F1560F143E0249F9001112435954A -:102060002795122F109500E085E5E82EEF18809156 -:102070001E01081758F10E94280F9C8181E09923C6 -:1020800019F0903219F48FEF8093190180911901A2 -:10209000890F8C83DF91CF911F910F91FF90EF906B -:1020A000DF90CF90BF90AF909F908F90089525E5DF -:1020B00030E0B901681B790B9B01220F331F260FFB -:1020C000371F37FFCCCF2F5F3F4FC9CF8E2D01FD7C -:1020D0008F2D20911C01622F600F7727771F9B01A6 -:1020E000220F331F260F371F2E563D4F412F609171 -:1020F000E8020E9423060F5FBACF0F931F93CF937E -:10210000DF9380911C0190911D0123E0829FF001DB -:102110001124EE56FD4F891740F1C0E0D3E06091E5 -:102120001E01C61740F10E94280F209117018091CF -:102130009002820F8093900290911801920F9093D9 -:102140001801191654F4082E000C990B40911E0129 -:102150004150550B841795071CF0219520931701CA -:10216000DF91CF911F910F910895118210821282F9 -:102170008F5F3396D0CF0C2F10E070E0C8010E9423 -:10218000FB2D20911C01820F482F50E020919002DE -:10219000022E000C330B02171307BCF0209118011C -:1021A000022E000C330B201731077CF08D9F90011D -:1021B00011242E563D4F4091E9026091E802809132 -:1021C000E7020E942306CF5FAACFFA01EE0FFF1F9E -:1021D000E40FF51FEE56FD4F118210821282F3CFED -:1021E0009F92AF92BF92CF92DF92EF92FF920F93A6 -:1021F0001F93CF93DF93FC0182810FEF80FF01E0FB -:1022000010E04CE1942EA0901E011A15D0F00E940F -:10221000280F80918F02013009F054C0811102C053 -:1022200080911E01815080938F02DF91CF911F9189 -:102230000F91FF90EF90DF90CF90BF90AF909F9065 -:102240000895C0911C01C12ED12CCC0DDD2DD11DC6 -:10225000CE01880F991FC80FD91FCE56DD4F1982A6 -:1022600018821A8234E0E32EF12CB12C80918F0277 -:102270008B0D8D311CF1692D0E94D92D892F082ECF -:10228000000C990BC816D90691F48091E9028E9D35 -:10229000A0018F9D500D1124559547955595479553 -:1022A0009E016091E8028091E7020E942306B00E31 -:1022B000F1E0EF1AF108D1F61F5FA5CF87FFDFCF5E -:1022C0008A0DDDCF90E0019660911E0170E00E94C2 -:1022D000FB2DA9CFEF92FF921F93CF93DF93EC01D9 -:1022E00010E0EE24EA94F12C60911E01161770F0B4 -:1022F0000E94280F9A818C8190FF27C08F5F8C836A -:10230000DF91CF911F91FF90EF90089520911C01D4 -:10231000422F410F5527551FCA019A01220F331F23 -:10232000280F391F2E563D4F70E0C7010E94FB2D2C -:10233000962F8C814091E9026091E802199F800DEF -:1023400011240E9423061F5FCFCF8150D8CF1F9347 -:10235000CF93DF9300D00F92CDB7DEB7122F9091BD -:10236000E60290FF16C09E012F5F3F4F0E9423069A -:102370008B819981212F30E0F901EE0FFF1FE20FD1 -:10238000F31FEE56FD4F2A812183908382830E94A2 -:10239000280F0F900F900F90DF91CF911F9108950C -:1023A0009091E60290FF14C090911C0120911D01B4 -:1023B00033E0939FF0011124EE56FD4F921710F079 -:1023C0000C94280F8183608342839F5F3396F6CFFE -:1023D00008950F931F93CF93DF9300D00F92CDB743 -:1023E000DEB78C018091910281110AC09E012F5F9E -:1023F0003F4F44EB6FEF0E9423068A818093910246 -:10240000F8016481613069F08091910240E06623B7 -:1024100061F040E0623011F44091910280E060E0B0 -:1024200004C06091910240E080E00E94D011F80168 -:10243000848190E0019663E070E00E94FB2D84832C -:102440000F900F900F90DF91CF911F910F910895F2 -:10245000CF93DF9300D00F92CDB7DEB79091E60215 -:1024600090FF0AC09E012F5F3F4F0E9423064B81C1 -:1024700069818A810E94D0110F900F900F90DF9197 -:10248000CF910895CF93DF93EC01E6EEF2E0438124 -:1024900062818C810E9428128C818F5F8C83DF91F6 -:1024A000CF910895CF93DF93EC01EC81F0E0E553F9 -:1024B000FC4F4491E6EEF2E0628181810E94281295 -:1024C0008C818F5F8C83DF91CF910895CF92DF92C3 -:1024D000EF92FF926B017C010E940D06B701A601ED -:1024E00088E090E0FF90EF90DF90CF900C94BB2EAF -:1024F000AF92BF92CF92DF92EF92FF920F931F9312 -:10250000CF93DF9300D00F92CDB7DEB7182FF62E02 -:10251000042FE22E9091E60290FF29C0E92FE69564 -:10252000AE2FB0E0AA56BE4F8C9180938C029E7F56 -:10253000923059F59E012F5F3F4F812F0E94230655 -:102540004B8169818A810E94D0111093E702F09239 -:10255000E8020093E902EE2051F06091E6027091EA -:10256000E7028091E8029091E9020E9466120F90C2 -:102570000F900F90DF91CF911F910F91FF90EF90EF -:10258000DF90CF90BF90AF900895823019F4009102 -:10259000E902DBCF863019F41091E702D6CF8930FB -:1025A000D9F3893191F6E9518E2F8170D82EE695B5 -:1025B000F0E0E655FC4FA590B490C12CBB2460918F -:1025C0001E01C61618F00E94280FBFCF2C2D30E038 -:1025D000A29EC001A39E900DB29E900D112470E0AA -:1025E0000E94E72D812FD11013C0860F40911C014E -:1025F000420F532F511D9A01220F331F240F351FF5 -:102600002E563D4F402F6F2D0E942306C394D7CFE7 -:10261000861BECCFE6EEF2E0438128E0421B08F493 -:1026200040E021E0628181810C947812E6EEF2E0D4 -:10263000438128E0420F08F44FEF21E0628181815D -:102640000C947812E6EEF2E0628128E0621B08F456 -:1026500060E021E0438181810C947812E6EEF2E0A3 -:10266000628128E0620F08F46FEF21E043818181ED -:102670000C947812E6EEF2E0818121E043816281E0 -:1026800088500C947812E6EEF2E0818121E04381DB -:102690006281885F0C9478128091EA02882319F095 -:1026A00081508093EA026091E6027091E702809186 -:1026B000E8029091E9020C9466128091EA0283305C -:1026C00018F48F5F8093EA026091E6027091E7024E -:1026D0008091E8029091E9020C9466129091E602D2 -:1026E00090FF36C09170811129C092609093E602EC -:1026F000662351F06091E6027091E7028091E80252 -:102700009091E9020E9466126091E602669570E07F -:102710004BE050E08CE091E00E947B2E892BA9F0E9 -:1027200010928D0281E08093890220E04091E902BD -:102730006091E8028091E7020C947812853210F0E3 -:102740009864D4CF880F982BD1CF0E94120FEACF74 -:10275000089560E00C946E1321E030E0A90102C0FE -:10276000440F551F8A95E2F7CA0120918E02662315 -:1027700091F0822B80938E0280918D02811105C091 -:102780008091E60286950E94A9138091E60280FD61 -:1027900005C00C94280F80958223ECCF08950F93E9 -:1027A0001F93CF93DF93EC0161E0009709F0682F4E -:1027B000617080E00E94AC1360E0209721F0BE01C0 -:1027C00076956795617081E00E94AC1360E0209778 -:1027D00031F0BE017695679576956795617082E0D8 -:1027E0000E94AC1360E0209739F0BE0113E07695AB -:1027F00067951A95E1F7617083E00E94AC1360E081 -:10280000209739F0BE01B4E076956795BA95E1F767 -:10281000617084E00E94AC13AE0170E060E0BB2701 -:10282000A72F962F852F0097A105B105D9F1AC01EF -:10283000BD0188E08A019B01F4E036952795179544 -:102840000795FA95D1F7011511052105310519F004 -:102850008C5FB901A8018A019B01E2E036952795BA -:1028600017950795EA95D1F7011511052105310551 -:1028700019F08E5FB901A801769567955795479530 -:10288000452B462B472B09F08F5F823019F160F4FE -:10289000882399F08130C1F0CE01DF91CF911F9153 -:1028A0000F91089580E0C6CF8330C9F08430A1F73E -:1028B00020E044E66FEF8FE004C020E044E66FEFD5 -:1028C00082E30E947812E8CF20E044E66FEF85E0D3 -:1028D0000E94781220E044E66FEF80E8F2CF20E01B -:1028E00044E66FEF87EDEDCF0E94CF1390939C03EA -:1028F00080939B030C94EA0A80919B0390919C0324 -:102900009C01267033272630310519F488600C9419 -:102910007414877FFCCF21E030E002C0220F331F08 -:102920008A95E2F72095309580919B0390919C03C6 -:10293000822393230C9474149091450280958923EB -:1029400080934502282F277091F4282F082E000C21 -:10295000330B9217130659F09091670392FD07C04D -:102960008595859585950E948B1410924502089552 -:10297000CF93C0916703C2FB992790F9981799F0FC -:1029800080FBC2F9C09367036091660384E090E026 -:102990000E94A92E6C2F82E290E00E94A92E82E074 -:1029A000CF910C949C14CF91089521E030E002C0A7 -:1029B000220F331F8A95E2F780919B0390919C032D -:1029C000822B932B0C9474148091E602869581508F -:1029D00009F484E261E00C946E138091E60286951E -:1029E0008F5F853208F081E061E00C946E13909166 -:1029F000E60290FF07C09695981720F0961710F4FE -:102A00000C94ED1461E00C946E13E6EEF2E083E0BA -:102A1000808311828FEF828388E2838314826081B6 -:102A20007181828193810C94661280914A01EEEC4F -:102A3000F1E0882359F08091660387FF07C08EE19B -:102A4000DF011D928A95E9F70C94EA0A86E0F8CF37 -:102A50001F93CF93DF93CDB7DEB7AA970FB6F89445 -:102A6000DEBF0FBECDBF83E993E02091F100DC0112 -:102A70002D93CD01B3E08B399B07B9F78091940377 -:102A8000833009F472C0B8F4813009F449C082304F -:102A900009F4B5C08091E80083FF8DC28091930353 -:102AA000909194039A3008F086C2E92FF0E0E35148 -:102AB000F14D0C94312E8A3009F490C08B3009F41A -:102AC00071C0893039F780919303813219F7809171 -:102AD000970390919803009711F00297D9F680918F -:102AE000E800877F8093E8008091E80082FF38C08B -:102AF0009091F3008091F200029731F48091F100FF -:102B0000813011F0863021F48091F10080936E03C2 -:102B10008091E8008B778093E8000E946104BACF2F -:102B200080919303813A09F0B5CF8091E800877FC7 -:102B30008093E8008091970390919803892B61F42A -:102B400060E28FE693E070E00E9413058091E80058 -:102B50008B778093E8009ECF60E090E080E0F3CF39 -:102B6000809191038111C0CF95CF80919303813AD9 -:102B700009F090CF8091970390919803892B09F0E9 -:102B800089CF8091E800877F8093E8008091E800FA -:102B900080FFFCCF80914A018093F1008091E80092 -:102BA0008E77B9CF80919303813209F073CF8091F2 -:102BB000970390919803892B09F06CCF8091E800DE -:102BC000877F8093E8000E94610480919503809341 -:102BD0004A0110926C030E9415155CCF80919303FB -:102BE000813209F057CF8091E800877F8093E80019 -:102BF0000E9461048091960380936D034BCF809176 -:102C00009303813A09F046CF8091E800877F809353 -:102C1000E8008091E80080FFFCCF80916D03BCCF7D -:102C2000803899F0823809F0C6C1809197038F707F -:102C3000873008F0C0C18093E9008091EB0085FBEC -:102C4000882780F91092E90006C080918F03909147 -:102C50009003911182609091E800977F9093E80033 -:102C60008093F1001092F1008091E8008E779FC16F -:102C7000882309F48DC1823009F09DC180919503AC -:102C8000811190C1809197038F702FEF280F26300C -:102C900008F091C18093E9002091EB0020FF82C1F0 -:102CA000933031F48091EB0080628093EB007AC125 -:102CB0009091EB0090619093EB0021E030E001C037 -:102CC000220F8A95EAF72093EA001092EA00809199 -:102CD000EB008860EACF81116EC1109195031F77D8 -:102CE0008091E3008078812B8093E3008091E8005D -:102CF000877F8093E8000E9461048091E80080FF54 -:102D0000FCCF8091E30080688093E30082E01111A2 -:102D100083E0809391034FC18058823008F04BC10B -:102D200020919503309196032C3DE3E03E07A1F5F9 -:102D300083E08A838AE289834FB7F894DE01139691 -:102D400020E03EE051E2E32FF0E050935700E491A1 -:102D500020FF03C0E295EF703F5FEF708E2F90E091 -:102D6000EA30C0F0C7968D939D932F5F243159F7B9 -:102D70004FBF8091E800877F8093E8006AE270E0AF -:102D8000CE0101960E9413058091E8008B77809315 -:102D9000E80011C1C096E7CF809197039091980306 -:102DA000432F55274330510509F44AC078F5413087 -:102DB000510509F47AC08BE590E0EBEAF6E0423089 -:102DC000510509F0F8C02091E800277F2093E80022 -:102DD0002091990330919A038217930708F49C017C -:102DE00040E02115310509F065C0411163C08091B3 -:102DF000E80082FDC9CF80919103882329F28530B4 -:102E000019F28091E80083FFF2CFBECF4132510525 -:102E100009F43CC04232510509F0CDC08330910520 -:102E200008F0C9C0FC01EE0FFF1FE254FE4F0190F5 -:102E3000F081E02D85549E4FDC018C9190E01AC00A -:102E4000332721303105D1F02115310561F02230D1 -:102E5000310509F0B0C0E8E1F7E0E4918E2F90E091 -:102E6000E8E1F7E007C0E8E3F7E0E4918E2F90E0B7 -:102E7000E8E3F7E0009709F49EC0A5CFE4E2F7E0AD -:102E8000E4918E2F90E0E4E2F7E0F4CF83309105F7 -:102E900008F091C0880F991FFC01EC53FE4F019080 -:102EA000F081E02D89E090E08ECF82E190E0E6E0D5 -:102EB000F7E089CF80919103882309F465CF8530AD -:102EC00009F462CF8091E80083FD5ECF8091E80035 -:102ED00082FD8DCF8091E80080FF83CF9091F30039 -:102EE0008091F2002115310519F08830910550F0DC -:102EF00041E0089709F040E08091E8008E778093E8 -:102F0000E8006FCF44914093F10031962150310990 -:102F10000196E8CF803809F04EC08091E800877FA5 -:102F20008093E800809192038093F1009DCE8111FF -:102F300042C0109195031230F0F58091E800877F30 -:102F40008093E800109392030E946104112311F012 -:102F500084E005C08091E30087FDFACF81E0809393 -:102F6000910342E061EC81E00E94800442E261EC66 -:102F700084E00E94800442E261EC82E00E948004CE -:102F800042E260EC83E00E9480048091910313C0D0 -:102F900080919503813079F481E0933009F080E0ED -:102FA000809390031092E9008091E800877F8093DE -:102FB000E8000E9461048091E80083FF0AC08091CC -:102FC000E800877F8093E8008091EB008062809327 -:102FD000EB00AA960FB6F894DEBF0FBECDBFDF910F -:102FE000CF911F91089569EE7EEF90E080E00E94FE -:102FF000C72E60E082E090E00E94A92E60E083E0AE -:1030000090E00E94A92E10924A021092490260E0BC -:1030100084E090E00E94A92E60E082E290E00E94AD -:10302000A92E60E085E090E00E94A92E60E086E095 -:1030300090E00E94A92E6FEF87E090E00E94A92EF9 -:1030400040E050E0BA0188E090E00E94BB2E60E0D2 -:103050008DE090E00E94A92E40E050E0BA0188E1A6 -:1030600090E00E94BB2E60E087E190E00E94A92ED4 -:1030700040E050E0BA018CE190E00E94BB2E70E08D -:1030800060E080E290E00E94C72E40E050E0BA018C -:1030900088E190E00E94BB2E80E00E94E90D0E9432 -:1030A000010E40E050E0BA018FE090E00E94BB2E9C -:1030B00040E050E0BA0183E190E00C94BB2E8F9287 -:1030C0009F92AF92BF92CF92DF92EF92FF920F93B7 -:1030D0001F93CF93DF9300D000D0CDB7DEB76C0144 -:1030E000FC0183819481892B31F080819181892336 -:1030F0008F3F09F057C60F900F900F900F90DF9100 -:10310000CF911F910F91FF90EF90DF90CF90BF90E4 -:10311000AF909F908F900895980122513F452031A4 -:10312000310508F034C68FEF93E00E94952E0251CE -:1031300077E0E72E72E0F72E882361F18091450257 -:103140008770C9F2F60182818823A9F28091670312 -:1031500082FDD1CF82E00F900F900F900F90DF9102 -:10316000CF911F910F91FF90EF90DF90CF90BF9084 -:10317000AF909F908F900C949C14E114F4E0FF06A4 -:10318000E9F2C7010E94952E811101C001502FEF75 -:10319000E21AF20A0111F1CF1C821B82BB24B39404 -:1031A0006AE0A62E87010F5F1F4FC7010E94952E70 -:1031B00089831A82882311F29FEF980F933008F5C4 -:1031C0008A83B98232E0E30EF11CC8010E94952E79 -:1031D0008B83882309F4B2CF8E010F5F1F4FF80154 -:1031E00080818823F9F2813009F043C09181828186 -:1031F000913049F40E5F1F4F0E94060D0F5F1F4F65 -:10320000EECF7801E9CF923029F40E5F1F4F0E9474 -:10321000510CF4CF933029F40E5F1F4F0E94330BF3 -:10322000EDCF943019F00F5F1F4FE8CF0E5F1F4FA7 -:1032300030E020E0B8016F5F7F4FF801418180539B -:10324000990B8A30910550F021503109B8F28FE97D -:103250009FE00197F1F700C00000F6CFA29EF001B9 -:10326000A39EF00D11249C012E0F3F1F842F8B0174 -:10327000E1CF0E94210DC2CF81E00E94D5140E94AF -:103280007C145CCF81E00E948B14F9CF82E0FBCFED -:10329000882309F41AC180915A02811106C081E085 -:1032A00080935A0282EE0E94510C0E9484059093F2 -:1032B0005902809358028BE20E94510CF6018281E0 -:1032C000882369F0C801815E9C45059740F46FE151 -:1032D000600F60935B028CE090E00E94A92E17FFC4 -:1032E00070C0F6018281882309F46BC00E94BC057E -:1032F000869581708093EE010E94BC058170809359 -:10330000ED0180915B02813039F48091EE018823D8 -:1033100019F089E30E94060D80916C038093EC0103 -:1033200010926C0380915B02813009F4B7C188234D -:1033300009F4B0C1823009F4C4C1843009F4D5C1A4 -:103340008FE39CE90197F1F700C000005801E89471 -:10335000B7F84CE0E42EF12C5AE0852E912CC501F3 -:103360000E2C02C0969587950A94E2F78F70909183 -:103370005B02923009F0C0C18A3008F0BBC190E016 -:103380000996B4010E94FB2D875A0E94060D94E015 -:10339000E91AF108ECEFEE16EFEFFE0601F7809167 -:1033A0005B02813009F4B6C1882309F4AFC18230D1 -:1033B00009F4BCC1843009F4C2C18091EC0180934E -:1033C0006C03F6018281882369F180916C0382721B -:1033D0000C3CFCE51F0709F465C208F0E5C1063C9A -:1033E0003CE5130709F44AC208F0BCC1033CECE514 -:1033F0001E0709F439C208F0A4C1023C2CE51207EB -:1034000009F40BC20A358DE5180709F489C208F0E2 -:1034100063C20115ECE51E0709F470C20E3D1C45A0 -:1034200009F47BC2F60186819781009709F47CC27A -:103430000E9454088C01F601F280B580B2943FE0FE -:10344000B322809145028770C1F0AF2CFF20B1F00C -:10345000812F807F803421F080E2800F883068F0F7 -:103460008091670382FD09C082E00E949C148091D4 -:1034700045028770AA24A3948111A12C912E9294C5 -:103480002FE09222FBE0F91508F4CDC2E92DF0E01F -:10349000E950F14D0C94312E8823A1F080915A020D -:1034A000811106C081E080935A0282EE0E94510C85 -:1034B0000E948405909359028093580281EE0E94E5 -:1034C000510CF9CE81EE0E94330B8BE20E94330B3C -:1034D000F5CE882309F4F2CE81EE0E94510C83EEE2 -:1034E0000E94510C8FE40E94510C8FE40E94330B18 -:1034F00083EE0E94330B81EEE9CF882309F4DECE00 -:1035000081EE0E94510C83EE0E94510C80E50E94D6 -:10351000510C80E5EBCF882309F410CE10915702AF -:1035200081E01827109357020E9484059093560259 -:10353000809355021123C9F028E148E76FEF8FE02F -:103540000E94A71129E148E76FEF8FE00E94A711C1 -:103550002AE148E76FEF8FE00E94A7112BE148E7CF -:103560006FEF8FE00E94A711E9CD10921C018CE152 -:1035700080931D0180931E0181E20E94A913DECD7C -:10358000882309F49BCE80EE0E94510C81EE0E94AC -:10359000510C80E10E94510C80E10E94330B81EEBE -:1035A0000E94330B80EE0E94330B80914E0291E01B -:1035B00022E148E76FEF892780934E02882351F07C -:1035C0008FE00E94A71126E148E76FEF8FE00E948D -:1035D000A71174CE8FEA0E94A71126E148E76FEF8A -:1035E0008FEAF5CF882309F4A9CD1091540201E0A8 -:1035F0001027109354020E948405909352028093E6 -:1036000051028091530210921C01882319F18CE120 -:1036100080931D0180931E0181E20E94A91328E07E -:1036200044E666EE80E00E94A71129E044E666EEDB -:1036300080E00E94A7112DE044E666EE80E00E9443 -:10364000A71100935402109253021092500210924C -:103650004F0274CD8CE180931D0180931E0181E2A5 -:103660001123A9F00E94A91328E044E666EE80E049 -:103670000E94A71129E044E666EE80E00E94A711AF -:103680002DE044E666EE80E00E94A711DCCF0E94A8 -:10369000A913D9CF82EE0E94510C52CE83E00E9432 -:1036A000180B88E10E94510C8FE39CE90197F1F718 -:1036B00000C0000088E10E94330B83E00E940D0BE4 -:1036C0003FCE8091ED01811103C083E50E94060D7C -:1036D00082EE0E94510CEFE3FCE93197F1F700C054 -:1036E000000087E50E94060D2BCE86EE0E94060D97 -:1036F00088E1F8CF865049CE96EF980F963020F0AB -:10370000805D0E94210D43CE895AFBCF82EE0E943C -:10371000330B53CE8CE20E94060D8091EE0188237C -:1037200009F44BCE89E30E94060D47CE82EE0E943B -:10373000330B8091ED01811140CE83E5F4CF88E217 -:10374000F2CF043C3CE5130709F493C04AE353E18C -:1037500063E473E1053C9CE5190709F053CE0E9430 -:103760000706ECCC093CECE51E0709F491C070F4A7 -:10377000073C2CE5120709F486C04EE253E162E2F1 -:1037800073E1083C3CE5130751F33CCE0A3C9CE551 -:10379000190709F482C04CE453E16DE573E10B3C79 -:1037A000ECE51E07E1F22ECE013DFCE51F0709F412 -:1037B00087C0B0F40E3C3CE5130709F47BC008F465 -:1037C00076C00F3C9CE5190709F477C06EE089E0EC -:1037D000003DECE51E0709F015CE0E94F714AECCB3 -:1037E000043DFCE51F0709F471C068F4023D3CE5A7 -:1037F000130709F468C0033D8CE5180709F002CEF1 -:1038000061E088E12EC0053D9CE5190709F461C01F -:103810000D35100709F492CCF5CD8091E60280FFBA -:103820001BC08E7F8093E6026091E6027091E702F2 -:103830008091E8029091E9020E94661210928D0236 -:10384000FFEF20E732E0F15020403040E1F700C0C8 -:1038500000000E94280F72CC81608093E60261E034 -:1038600086950E946E136ACC44EE54E16DEE74E1CD -:1038700076CF4DEE54E164EE74E171CF43E453E151 -:103880006AE373E16CCF42E253E16EE273E167CF2A -:103890004AE053E166E173E162CF46E153E16AE059 -:1038A00073E15DCF4DE553E16CE473E158CF61E026 -:1038B00081E0D7CF65E082E090CF68E086E08DCFF1 -:1038C00064E18FE08ACF67E185E187CF62E289E139 -:1038D00084CF61E083E2C5CF0B352DE5120711F1EE -:1038E0000C351D4509F09ECD8091670382FB88272A -:1038F00080F991E089270E94B81494CD10926C034E -:103900000E9415158FEF94E3ECE081509040E04069 -:10391000E1F700C000000E942D0C0E94F3170ECCAE -:1039200081E0E9CF80E0E7CF8281008111818823A7 -:1039300069F0C8010E94430EF82E682FC8010E944A -:10394000BE0AB8018F2D0E94360E72CDC8010E94AA -:10395000970AF82EF6CF212F2F70E22E107F19F044 -:10396000E29490EFE922FF20B9F0EE2069F080E2C6 -:10397000800F883010F0011109C080916C03E82A93 -:10398000E0926C030E94E909802F4BC080914702AE -:10399000E82AE0924702F6CF802F0E94330BEE20F8 -:1039A00009F441C080E2800F883010F0011104C09A -:1039B0008E2D0E94E20906C0E09480914702E82221 -:1039C000E09247020E94E9092EC0312F3F70E32E9A -:1039D000107F103219F0E29480EFE822002381F08A -:1039E000013009F47EC0FF2009F488C0BB2009F42F -:1039F0007EC0F601858180FFC7CF8F70858377C039 -:103A00002091670322FF4AC0FF2009F441C0EE2045 -:103A100039F080916C03E82AE0926C030E94E90976 -:103A200080E00E94510C292D2850330B24303105A1 -:103A300020F40E94BC050E94890BAA20A9F0809165 -:103A4000450280FD11C0F601128285958595859508 -:103A50000E94D514C6010E945F1880914502859589 -:103A6000859585950E948B1460E0C6010F900F909C -:103A70000F900F90DF91CF911F910F91FF90EF90DA -:103A8000DF90CF90BF90AF909F908F900C94B90E25 -:103A900080E00E94330BEE2031F28ACFFF20A1F0AC -:103AA000909148028E2D892BB11003C00E94290BE2 -:103AB000BACFE1E0BE12FACF22FDB5CF891709F4E3 -:103AC000B2CF80934802AFCFB11006C00E94DC098C -:103AD0008E2D0E94220BA7CFF1E0BF1609F4A3CFD1 -:103AE000F5CFFF2031F022E02B1508F49CCF8E2D6E -:103AF000DDCF31E03B1508F496CFEACFBB2041F390 -:103B0000093369F4FFEF27EE33E0F15020403040F5 -:103B1000E1F700C00000802F0E94330B84CF8FE3B9 -:103B20009CE90197F1F7F5CF812F869586958370F3 -:103B300061F0813009F077CFC8019370F11002C0B5 -:103B400090E080E00E9490056ECFC8019370F11064 -:103B500002C090E080E00E94A60565CF802FFF2084 -:103B600029F00E949E070E94BC065DCF0E94E306DA -:103B7000FACF812F837009F03FC0F11054CF402F4E -:103B8000429546954770440F440F802F8F7090E008 -:103B9000042E02C0880F991F0A94E2F730E020E05B -:103BA00004FF09C02FE030E002C0220F331F4A9506 -:103BB000E2F720953095169516951370123099F00E -:103BC00078F44091490250914A02113039F0822B29 -:103BD000932B842395230E94070B25CF842B952BB1 -:103BE000822B932BF8CF822B932B2091490230917B -:103BF0004A0282279327EFCF8695FF2011F0812F6D -:103C00008170882309F40FCF402F42954695477065 -:103C1000440F440F802F8F7090E0042E02C0880F55 -:103C2000991F0A94E2F730E020E004FF09C02FE07A -:103C300030E002C0220F331F4A95E2F720953095FD -:103C4000169516951370123099F078F440919B03F5 -:103C500050919C03113039F0822B932B84239523B0 -:103C60000E947414E0CE842B952B822B932BF8CFDB -:103C7000822B932B20919B0330919C0382279327C7 -:103C8000EFCF1F70FF2029F0812F0E94D514802FC5 -:103C90000DCF802F0E94220B812F0E948B14C3CE48 -:103CA000023F71F160F4003FB9F0013F81F0FF2065 -:103CB00009F459C0B11068CE812F8F7125C0033F20 -:103CC00031F1043FA1F78091670382FF2EC0812F5D -:103CD0008F71FF2011F318C0FF2069F091E09B1550 -:103CE00008F4A1CE1F7181E090E002C0880F991FF7 -:103CF0001A95E2F7BFCFE2E0EB1508F494CEF2CFCD -:103D0000812F8F71F110C9CF0E94D5148CCE90E015 -:103D100080E0FF2009F4A4CF1F7181E090E002C091 -:103D2000880F991F1A95E2F79BCFFF2089F01F712A -:103D3000812F0E94D5148091670382FD07C0F8E0AF -:103D40001F9FC0011124836080934502812FDCCF27 -:103D500081E00E949C1421E02B1508F064CE82E0E3 -:103D60000E949C1460CEBB2079F0093341F43FEFF0 -:103D700087EE93E0315080409040E1F7CACEEFE308 -:103D8000FCE93197F1F7C5CE812F8F7186CF0031D5 -:103D90003FE5130709F470CA01319FE51907A9F43B -:103DA00082E06BCA61E0C6010E94B90E8C01F60187 -:103DB00082818111B1C90031FFE51F0709F462CA90 -:103DC00001312FE5120709F461CAF801E058FF45F7 -:103DD000E730F10508F072CAED5FF04D0C94312E1A -:103DE000CF93DF9380910002807FA1F48091FD0149 -:103DF000882381F080914402D09103026091FB01FD -:103E00007091FC01A091FE01B091FF01C62FC72364 -:103E1000D81303C0DF91CF91089590E0109711F06F -:103E2000CF3F19F401968770F3CF9C0143E0220F36 -:103E3000331F4A95E1F7F901EC5FFD4F41814713CC -:103E4000F1CF40814613EECF42814111EBCF438148 -:103E500054814A1B5B0B403A510520F780910002C8 -:103E60008F70806180930002F901E75FFD4F8081D0 -:103E70008F70806180838BEF91E00E945F18DF91EB -:103E8000CF910C948D0AAF92BF92CF92DF92EF92B6 -:103E9000FF920F931F93CF93DF93CDB7DEB7659754 -:103EA0000FB6F894DEBF0FBECDBF8C0185E0F801E0 -:103EB000DE01519601900D928A95E1F7F801E280BA -:103EC0006BEFA62E61E0B62E6091FE017091FF01AE -:103ED0006115710509F468C19091FB014091FC01E5 -:103EE000892F84238F3F09F45FC120813181C380F2 -:103EF000D480F090FD01F601E61BF70BFF2009F4DA -:103F00001DC180910002582F507FE03AF10508F062 -:103F1000D0C0511181C0FE2C43132BC0921329C075 -:103F20006091010270910202F80146815781641785 -:103F30007507F9F4E1101DC08F7080618093000255 -:103F4000C5010E945F1880910002F80185838F2DC2 -:103F500065960FB6F894DEBF0FBECDBFDF91CF914F -:103F60001F910F91FF90EF90DF90CF90BF90AF9097 -:103F70000895CD2829F0822F83238F3F09F02FC188 -:103F800080E0F82FF170DF2E80FF3CC0809144026A -:103F900040910302841315C0298B3A8B89899A8931 -:103FA0000E947F0E292F22952F702230F8F02430A6 -:103FB00020F59F70F9F0F8019581907FD9F4D12C0C -:103FC0001FC090E0FC0153E0EE0FFF1F5A95E1F790 -:103FD000EC5FFD4F5181351306C05081251303C09E -:103FE0005281E5120FC001968770D4CF9F7011F0F7 -:103FF000882329F3805E883010F3C8010E945F187F -:10400000FD2CA5CFEE2009F4A2CF809100028160A3 -:1040100080930002F12C9BCF43131BC0921319C055 -:104020004091010250910202F80126813781421726 -:10403000530779F4E1100DC08583C8010E945F1811 -:1040400088E0F801ABEFB1E001900D928A95E1F7BD -:104050007ECFC8010E948B0E882339F1EE2029F112 -:10406000809100028032A0F02091FB013091FC0190 -:104070003A8729871B86DD86CC868E878091010250 -:1040800090910202988B8F87CE0109960E945F184B -:1040900088E0F801ABEFB1E001900D928A95E1F76D -:1040A0000E94F01EFF24F39452CFC8010E945F18B3 -:1040B000F9CF51110AC08BEF91E00E945F1888E0A0 -:1040C000F50111928A95E9F7A5CF431318C0921311 -:1040D00016C04091010250910202F80126813781F9 -:1040E0004217530761F4E1100AC08583C8010E949A -:1040F0005F1888E0F50111928A95E9F728CFC80189 -:104100000E948B0E882389F2EE2079F280910002C2 -:10411000803208F4BDCF2091FB013091FC013A833D -:1041200029831B82DD82CC828E8380910102909153 -:10413000020298878F83CE010196A8CFE03AF1055D -:10414000C0F6FE2CEE2009F4B0CF43131FC092132B -:104150001DC02091010230910202F80186819781F1 -:104160002817390799F49091000290FD69CF907F4C -:1041700009F466CF809100028583903F09F45DCFFA -:10418000982F907F905F8F70892B56CFC8010E9427 -:104190008B0E81117DCF809100028160809300029F -:1041A000C8010E945F18D3CEEE2009F47ECFC8016B -:1041B0000E948B0EF82E882309F477CF88E0F8014F -:1041C000ABEFB1E001900D928A95E1F78091FB0190 -:1041D0009091FC010E947F0E0E94F01EB8CE81E0FB -:1041E0008E25CFCECF93DF93CDB7DEB760970FB6D6 -:1041F000F894DEBF0FBECDBF29873A874B875C8717 -:104200006D877E878F87988BCE0109960E94431F0A -:10421000811112C088E0FE013996DE0111960190ED -:104220000D928A95E1F78C859D85892B29F08985EA -:104230009A8589238F3FA9F58091440290910302CA -:1042400089131CC060960FB6F894DEBF0FBECDBFB9 -:10425000DF91CF91089593E0AA0FBB1F9A95E1F7E4 -:10426000AC5FBD4F98E0FE01319601900D929A959A -:10427000E1F7809303020E948D0ADECFB8E08B9FA6 -:10428000C00111248C5F9D4F0E94431F8823D1F2EF -:104290008091440290E001968770992780934402B0 -:1042A000CBCFA0910302B0E0CD0101968770992792 -:1042B000209144022817190671F610926C030E948F -:1042C0001515109203021092440288E0EBEFF1E022 -:1042D000DF011D928A95E9F7AFCF0F931F93CF931C -:1042E000DF938091EE02E091ED02CCE081111AC0E3 -:1042F000DF91CF911F910F910895D1E0DE0FD09300 -:10430000ED020E2F10E0EC9FF0011124E151FD4F62 -:1043100083819481892B29F08081918189238F3F2A -:1043200051F4ED2F8091EE02E81738F31092EE026F -:104330001092ED02DDCFC09FD001C19FB00D1124BE -:10434000A151BD4F16968D919C911797892B29F4F9 -:1043500018968D919C91019651F420813181428172 -:10436000538164817581868197810E94F220C09F6C -:10437000F001C19FF00D1124E151FD4F1482138211 -:10438000D0CF10925A031092590310924901809194 -:104390005803809357030E94F6050C946D212F92C9 -:1043A0003F924F925F926F927F928F929F92AF92C5 -:1043B000BF92CF92DF92EF92FF920F931F93CF9312 -:1043C000DF93C0915703E7E0FE2E01E010E0FCE030 -:1043D0002F2EAEEFEA2E809158038C1316C00E9448 -:1043E0006D21DF91CF911F910F91FF90EF90DF90A2 -:1043F000CF90BF90AF909F908F907F906F905F9085 -:104400004F903F902F900C94F605D0E0FE01EE0FF8 -:10441000FF1FE15BFC4F80819181F89EF001F99EC6 -:10442000F00D1124E15EFE4F2481211158C030901F -:10443000EE02AFEEB2E030E020E0412C5F01231548 -:1044400008F04BC01A966D907C901B97F501808008 -:1044500091804FEF5FEF512CC52CD12CF601EE0F60 -:10446000FF1FE80DF91D659174916616770609F432 -:10447000A601672B11F05394EFCF4F3F5407B1F1D2 -:10448000B80102C0660F771F4A95E2F7462AA801D5 -:1044900002C0440F551F5A94E2F741505109441687 -:1044A000150601F5229EF001239EF00D1124E15125 -:1044B000FD4FF89ED001F99EB00D1124A15EBE4FB4 -:1044C00012962D913C91139737832683E082E182E7 -:1044D0009187808771E015967C930E94C80521968C -:1044E000C37079CF14961C921E9213972F5F3F4F83 -:1044F0001C96A5CF2F923F924F925F926F927F9220 -:104500008F929F92AF92BF92CF92DF92EF92FF92E3 -:104510000F931F93CF93DF93CDB7DEB769970FB695 -:10452000F894DEBF0FBECDBF498B5A8B6B8B7C8B53 -:104530008D8B6111109247021D861E861F86188A78 -:1045400085E0FE017196DE01199601900D928A9523 -:10455000E1F78C859D85892B31F089859A858923A2 -:104560008F3F09F0D4C129853A854B855C856D85DF -:104570007E858F8598890E94F220C3C028EFC216DD -:104580002CE5D20629F4882379F00E94C121EBCFD3 -:1045900039EFC3163CE5D30639F4882329F080911E -:1045A00049018111F2CFC3C10FE111E0E12CB12C1F -:1045B000A12C88248394912C9EEF592E442443945B -:1045C000F8016081718166246A94762C20E0422F84 -:1045D00050E0FA01EE0FFF1FE60FF71F859194914F -:1045E000C816D90609F43A01892B11F02F5FEFCFD5 -:1045F000F12CFFEF6F167F0609F445C0F8014481E6 -:10460000F09049018F2D411180E0F82FF170FF2EBD -:10461000F801258086819B85992309F408C1FF2034 -:1046200009F405C1211014C0A40101C0440F6A940B -:10463000EAF7842B86838091EB029091EC0280391B -:10464000914030F440E951E05093EC024093EB028A -:10465000C40102C0880F991F2A95E2F70197F8015B -:1046600026812817190679F48091590390915A03ED -:10467000009709F45FC00E9475058139914008F4E4 -:1046800059C0F8014482EF28FFEFAF1ABF0A095F53 -:104690001F4F26E0A216B10409F092CF8B85882324 -:1046A00009F420C1EE2009F41DC10E9484059093F5 -:1046B0005A03809359038091EE02883010F591E0FF -:1046C000980F9093EE0298E0FE013996DE01119664 -:1046D00001900D929A95E1F73CE0839FC00111246F -:1046E00081519D4F28E0FE013196DC0101900D9231 -:1046F0002A95E1F72FEF3FEFFC0131872087D38622 -:10470000C28669960FB6F894DEBF0FBECDBFDF91AB -:10471000CF911F910F91FF90EF90DF90CF90BF90BE -:10472000AF909F908F907F906F905F904F903F9051 -:104730002F9008958091570360905803982FF0E0D0 -:10474000E0E0861114C0909357030E171F0709F479 -:104750009ACF90E0FC01EE0FFF1FE15BFC4FB182AE -:10476000A082019683709927809358038CCF282EBE -:10477000312CF101EE0FFF1FE15BFC4F20813181F5 -:10478000F7E0F29FD001F39FB00D1124A15EBE4F60 -:104790002D913C911197398F288F712C60E070E03A -:1047A000E72FF0E0EE0FFF1F288D398DE20FF31F8A -:1047B0002591349121153105E1F0F8010190F08146 -:1047C000E02DFF8BEE8B60E005C02417350709F460 -:1047D0007F2C6F5FE62FF0E0EE0FFF1F4E895F89A1 -:1047E000E40FF51F459154914115510571F77F5F15 -:1047F000D7CF7720C9F0F801671708F0FD01448290 -:104800000E171F0721F490935703F72C3CCF9813F2 -:1048100005C0AE17BF0711F49F5F937091012F5F22 -:104820003F4F822F83708DCFF0E0E0E0F7CF90E034 -:1048300021101FC0B40102C0660F771F2A95E2F74E -:104840009B01215031092817390731F4442309F419 -:1048500047C0C5010E94C805C40101C0880F6A9401 -:10486000EAF7982F9095F801868189238683F22CA8 -:104870000ACF9C01062C02C0359527950A94E2F7D1 -:10488000A90141705527BC01615071098623972306 -:10489000892B11F5452B01F1F80182819381892B38 -:1048A000C1F01B821C821D821E8259825A820E9484 -:1048B00084058160582F9D838C83F80182819381C8 -:1048C0008F83988729813A814B816D817E810E94F7 -:1048D000F220F8011582C0CFF22FF1702F2EBCCF3D -:1048E0002F2CBACF9091570380915803981731F02D -:1048F0000E94CF21EE2009F436CE03CF0E946D2115 -:1049000010925A03109259030E94F605F3CF61E00A -:10491000CE0109960E94B90E6C018B85F7EFCF1678 -:10492000FCE5DF0609F02ACE882309F43DCE81E0BC -:104930008093490118CE9F92AF92BF92CF92DF929F -:10494000EF92FF920F931F93CF93DF9300D000D08D -:1049500000D0CDB7DEB78E010F5F1F4F86E0F801A4 -:1049600011928A95E9F78CE7C82E81E0D82EF12CB8 -:10497000E12CAA24A394B12CF60181916F018F3F01 -:1049800009F443C0F894E82FE295EF70F0E021A11C -:104990008F70A50102C0440F551F8A95E2F7CA0126 -:1049A000922F982B91A392A18095892382A378942A -:1049B00000C0E2E8F1E0912C31E021912F3F09F4B1 -:1049C0006EC0A22FA295AF70B0E090968C9190E04F -:1049D0002F7002C0959587952A95E2F780FD5FC0FC -:1049E000832F982A330F51E0E638F50731F7F601A7 -:1049F000319780818F3F11F00E94FA0780EA8A95F3 -:104A0000F1F7F801EE0DFF1D9082EFEFEE1AFE0AAE -:104A1000F6E0EF16F10409F0AFCF46E050E0B80140 -:104A20008FE592E00E94882EFF24F394009709F40A -:104A3000F12C892BB1F186E0F801AFE5B2E00190ED -:104A40000D928A95E1F781E080934D020E948405E2 -:104A500090934C0280934B0280914B0290914C02B8 -:104A60000E947505059708F180915F02809372029C -:104A7000809160028093730280916102809374023E -:104A80008091620280937502809163028093760226 -:104A9000809164028093770210924D0206C080E0FC -:104AA000A0CF80914D028111D7CF809149018823F9 -:104AB00001F18091590390915A030097D1F00E941F -:104AC00075052091EB023091EC022817390788F424 -:104AD0009091570380915803981709F47EC00E9463 -:104AE000CF211092EC021092EB0210925A03109216 -:104AF000590380915A02882371F080915802909155 -:104B000059020E947505893E934028F082EE0E946A -:104B1000330B10925A0280915702882391F08091B2 -:104B20005502909156020E947505883E934048F0C8 -:104B30000E948405909356028093550283E70E9459 -:104B4000060D8091530290915402992309F44EC0AE -:104B5000811130C080915102909152020E947505DE -:104B600081369A4E78F080914F02909150020196D2 -:104B70009093500280934F020E94840590935202BA -:104B80008093510280914F02909150024F9708F408 -:104B90005CC010921C018CE180931D0180931E016A -:104BA0008FE00E94A91381E080935302109250027B -:104BB00010924F028F2D26960FB6F894DEBF0FBECF -:104BC000CDBFDF91CF911F910F91FF90EF90DF90BC -:104BD000CF90BF90AF909F9008950E946D2110924A -:104BE0005A03109259030E94F60583CF8111E2CF38 -:104BF00080914E02882361F022E148E76FEF8FE059 -:104C00000E94A71126E148E76FEF8FE00E94A711ED -:104C100080915702882371F228E148E76FEF8FE017 -:104C20000E94A71129E148E76FEF8FE00E94A711CA -:104C30002AE148E76FEF8FE00E94A7112BE148E7D8 -:104C40006FEF8FE00E94A711B5CF28E044E666EE33 -:104C500080E00E94A71129E044E666EE80E00E9411 -:104C6000A7112DE044E666EE80E00E94A711C0CFB8 -:104C700090E080E00E94A32E893E9E4F11F40C9498 -:104C8000F90E80E008951F920F920FB60F92112433 -:104C90002F933F934F935F936F937F938F939F9344 -:104CA000AF93BF93CF93DF93EF93FF93D091E9003E -:104CB000DF708091EC00C82FC17080FDC0E81092B9 -:104CC000E9008091F000877F8093F00078940E9443 -:104CD00028151092E9008091F00088608093F00020 -:104CE000CD2BCF70C093E900FF91EF91DF91CF9171 -:104CF000BF91AF919F918F917F916F915F914F91F4 -:104D00003F912F910F900FBE0F901F9018951F92FB -:104D10000F920FB60F9211242F933F934F935F93EF -:104D20006F937F938F939F93AF93BF93EF93FF9373 -:104D30008091E10082FF09C08091E20082FF05C0FE -:104D40008091E1008B7F8093E1008091DA0080FF09 -:104D500024C08091D80080FF20C08091DA008E7F2F -:104D60008093DA008091D90080FF9DC080E189BDE9 -:104D700082E189BD09B400FEFDCF81E080939103FB -:104D800080916B03811109C00E94E7030E94B20465 -:104D90008091E20084608093E2008091E10080FFD6 -:104DA00017C08091E20080FF13C08091E2008E7FE7 -:104DB0008093E2008091E20080618093E200809124 -:104DC000D80080628093D80019BC85E0809391035D -:104DD0008091E10084FF2BC08091E20084FF27C016 -:104DE00080E189BD82E189BD89B5982F917080FFEE -:104DF000FBCF8091D8008F7D8093D8008091E10017 -:104E00008F7E8093E1008091E2008F7E8093E200AC -:104E10008091E20081608093E20080919203882378 -:104E200009F447C084E080939103809191038091BD -:104E3000E10083FF27C08091E20083FF23C08091BF -:104E4000E100877F8093E10082E0809391031092DC -:104E500092038091E1008E7F8093E1008091E200D7 -:104E60008E7F8093E2008091E20080618093E20077 -:104E700042E060E080E00E9480048091F000886061 -:104E80008093F000FF91EF91BF91AF919F918F912F -:104E90007F916F915F914F913F912F910F900FBE36 -:104EA0000F901F90189519BC1092910310926B03EC -:104EB00074CF8091E30087FD93E090939103B5CF89 -:104EC00078941F921FB61F9211248F939F93AF93D4 -:104ED000BF938091620390916303A0916403B091AA -:104EE00065030196A11DB11D809362039093630336 -:104EF000A0936403B0936503BF91AF919F918F918D -:104F00001F901FBE1F9018951F921FB61F9211244D -:104F10008F939F93AF93BF9380916103811113C0CF -:104F20008091620390916303A0916403B091650343 -:104F30004196A11DB11D8093620390936303A093DA -:104F40006403B0936503BF91AF919F918F911F90C0 -:104F50001FBE1F901895CDB7DEB7EE970FB6F89429 -:104F6000DEBF0FBECDBF84B7877F84BF0FB6F89476 -:104F7000A895809160008861809360001092600025 -:104F80000FBE80E890E00FB6F89480936100909394 -:104F900061000FBE85B7806885BF85B7806885BF13 -:104FA00088EF97E09093CB018093CA010E94E703BA -:104FB0000E94B2048091E20084608093E2007894C1 -:104FC000809191038823A1F01091E9001F709091C6 -:104FD000EC00892F817090FD80E8182B1092E90079 -:104FE0008091E80083FD0E9428151F701093E9004E -:104FF00082E084BD93E095BD9AEF97BD80936E00EB -:105000000E94F90E811102C00E94010E0CE711E00E -:1050100022E8C22E21E0D22ED8018D918D018F3F42 -:1050200011F00E94FA07C016D106B1F786EF0E9470 -:10503000FA0787EF0E94FA0783E90E94FA0786E9D8 -:105040000E94FA0786E0E2E7F2E0DF01282F1D92D6 -:105050002A95E9F7EFE5F2E0DF011D928A95E9F77D -:105060000E943826811102C00E94F31782E090E06E -:105070000E94952E80936B0284E090E00E94952E12 -:10508000182F82E290E00E94952E982F812F909306 -:105090006703809366030E949B24EFE3FCE931974A -:1050A000F1F700C000000E949B248091720280FFF3 -:1050B00008C06FEF7FEF90E080E00E94C72E0E9453 -:1050C0002D0C83E090E00E94952E90E00E94070B4B -:1050D00080919B0390919C030E94CF13509A589A01 -:1050E000559A5D9A549A5C9A8CE090E00E94952EB5 -:1050F00090E0B0E0A0E080935B0290935C02A0930C -:105100005D02B0935E0280916502811132C00E94FF -:105110003826811104C00E94F3170E94051588E00B -:1051200090E00E949D2E6093E6027093E7028093C8 -:10513000E8029093E9026E7F71F40E94051588E001 -:1051400090E00E949D2E6093E6027093E7028093A8 -:10515000E8029093E9020E940D0610928D02809160 -:10516000E60280FF03C086950E94A91381E0809328 -:1051700065025198599A52985A9A89B186958170C8 -:105180004A994EC290E0892B809369026091660330 -:105190006068609366031091670384E090E00E946A -:1051A000A92E612F82E290E00E94A92E81E20E9446 -:1051B000A91381E090E00E94741480E091E0909344 -:1051C0005E0380935D0308E1C02ED12C82E792E05C -:1051D00096E0B92EB80E80919103853021F510E448 -:1051E000912E8824839400E112E18091910385300F -:1051F00009F418C210926C030E9415150E94BC0598 -:105200000E94890B1092850280916602882309F41E -:105210005DC28091E60281608093E60286950E94DD -:10522000A9130E94120F0E949B24882359F08FB764 -:10523000F89440916203509163036091640370910C -:1052400065038FBFA2E7B2E0ECE6F2E010E000E019 -:10525000302F8D919191981709F445C2292F282755 -:1052600090E099249394422F492109F437C29DABD1 -:105270003EAB892191E009F490E09FAB0E94840548 -:105280008160782F99AF88AF4DA95EA96FA989ADCC -:105290000E947A22F801E459FD4F8081982690827D -:1052A00080918D028823D1F180918C02E091E602F9 -:1052B000E695E81BE0938802823009F02BC2F0E00B -:1052C000EA55FD4FE4910E2F10E0B2E58B2EB2E1CE -:1052D0009B2E80918902882361F0109289020E949E -:1052E0008405909387028093860210928B0210921D -:1052F0008A020E948405E0918602F09187028E1B4B -:105300009F0B8F3F9F4750F4E00FF11FF0938702F0 -:10531000E093860286E892E0F4010995E091690243 -:10532000EE0FEE0FE093690289B181FBEE24E0F805 -:105330004A994AC280E08E29E82BE0936902EF7017 -:10534000F0E0EA57FE4F808190916802890F8093C8 -:10535000680220E0843034F1809167028F5F80938F -:10536000670212E018AB19AA81E08AAB0E9484059B -:105370008160782F9CAB8BAB48A959A96AA98CA9ED -:105380000E947A221BA71CA61DA60E94840581608C -:10539000782F9FA78EA74BA55CA56DA58FA50E9412 -:1053A0007A2221E0809168028D3F2CF5809167027E -:1053B0008150809367021EA21FA281E088A70E94ED -:1053C00084058160782F9AA789A74EA15FA168A55F -:1053D0008AA50E947A2219A21AA21BA20E94840501 -:1053E0008160782F9DA38CA349A15AA16BA18DA1A7 -:1053F0000E947A2221E080916802082E000C990B0D -:1054000064E070E00E94FB2D80936802222359F033 -:105410008FB7F894409162035091630360916403E5 -:10542000709165038FBF86E0EFE7F2E0DE01119631 -:1054300001900D928A95E1F790908102809082020E -:1054400010918302009184021092810210928202D4 -:105450001092830210928402892D882909F448C091 -:1054600080917D0290917E020E9475059C01909131 -:105470007902992309F498C323333105C8F19F3F7A -:1054800019F09F5F90937902992059F00E947E074E -:105490009FEF19140CF491E0899F802D11248093C3 -:1054A0008102882059F00E947E079FEF18140CF4A7 -:1054B00091E0899F802D1124809382023091810296 -:1054C0003323B1F020918202222391F045EB340383 -:1054D000C0011124992309F47AC19093810245EB0C -:1054E000240390011124332309F475C130938202FF -:1054F000812F802B09F448C080917B0290917C021F -:105500000E9475059C0190917802992309F447C384 -:1055100025363105C8F19F3F19F09F5F90937802BF -:10552000112359F00E945C079FEF11160CF491E0D3 -:10553000899F802D112480938302002359F00E94BB -:105540005C079FEF10160CF491E0899F802D1124C9 -:1055500080938402309183023323B1F0209184023E -:10556000222391F045EB3403C0011124992309F45F -:1055700036C19093830245EB240390011124332319 -:1055800009F431C1309384028091810290918202AA -:10559000892B90918302892B90918402892B11F0A1 -:1055A0000E94BC0686E0FE013196AFE7B2E00190B2 -:1055B0000D928A95E1F70E94BC0590916A028917C5 -:1055C00031F00E94BC0580936A020E94890B809191 -:1055D0009103843009F0FFCD83E08093E90080914E -:1055E000E80082FFF8CD8091E80090E085FF06C0DA -:1055F0000E940604882309F4FAC091E08091E80033 -:105600008B778093E800992309F4E5CDE981E15097 -:10561000E33108F06EC1F0E0E65FF04D0C94312EFE -:1056200092E0B1CD80919103843009F440C080E0D4 -:105630000E94890B10928D0280918502811116C003 -:10564000809285028091E602982F91709093660275 -:105650008E7F8093E602FFEF20E742E0F15020408A -:105660004040E1F700C000000E94280F1092610343 -:105670000FB6F894A895C09260000FBE909260009B -:1056800083B7817F846083BF83B7816083BF789451 -:10569000889583B78E7F83BF0FB6F894A8958091C5 -:1056A0006000886180936000109260000FBE80915E -:1056B0009003882309F499CD0E949B24E2E7F2E04D -:1056C000819181114BC2BE12FBCF8FCD80918E0292 -:1056D000882309F4A6CD0E94280FA3CD9F5F990CC3 -:1056E000943009F0C0CD0F5F1F4F0630110509F04F -:1056F000AFCD8FEF8AAF8BAF1CAE0E948405816067 -:10570000782F9EAF8DAF4AAD5BAD6CAD8EAD0E9474 -:105710007A22C6CD863059F4F0E0ED55FD4FE49184 -:105720000E2F10E0A2E48A2EA2E19A2ED2CD89306B -:1057300061F4E695F0E0E056FD4FE4910E2F10E0A5 -:10574000FAE68F2EF1E19F2EC4CD8F3061F4E695FD -:10575000F0E0E356FD4FE4910E2F10E0E0EF8E2EC7 -:10576000E0E19E2EB6CD853159F4F0E0E656FD4FCE -:10577000E4910E2F10E07DE7872E70E1972EA9CDE2 -:1057800008E210E04DEE842E4FE0942E883109F4AB -:10579000A0CD833249F4E8E9F2E00591149169EE75 -:1057A000862E61E1962E95CD04EF11E050EB852E0B -:1057B0005FE0952E843209F48CCD00ED17E03CE0DB -:1057C000832E36E0932E85CD82E090E0B4CD81E04B -:1057D0008093810284CE81E08093820289CE81E031 -:1057E00080938302C8CE81E080938402CDCE00E214 -:1057F00010E0CE0101964C018091E80085FD0AC0C1 -:105800008091E8008B778093E8000E94060488234B -:1058100099F3F3CE8091F100D4018D934D010150A5 -:10582000110951F7EACE1A8289E08B832DC08A8153 -:10583000823009F4ABC18330A9F0813009F059C03E -:105840002FB7F894609162037091630380916403B1 -:10585000909165032FBF0E94372E6B837C838D83CD -:105860009E8312C0809172028B83809173028C831D -:10587000809174028D83809175028E83809176026F -:105880008F8380917702888780919103843009F01B -:10589000A2CC1091E9001F709091EC00892F8170CB -:1058A00090FD80E8182B82E08093E9008091E80069 -:1058B00080FF0DC050E040E060E270E0CE01019654 -:1058C0000E9437048091E8008E778093E8001F7073 -:1058D0001093E90080CC8A81823059F46B817C81FD -:1058E0008D819E810E94372E86E290E00E94A92E33 -:1058F000CBCF8FEF8983C8CF4C816B818A810E9487 -:10590000100E9827892798279E838D83BDCF8D8081 -:105910009E809824892498248A810B81B8E00B9F6B -:1059200080011124E0E38E9F000D111D11248C8154 -:1059300090E0880F991F080F191F692DC8018796DD -:105940000E94A92E682DC8018896D0CF0E94970D7D -:105950009BCF8A818138C1F060F4803809F094CF00 -:1059600020E04B816091E8028091E7020E9478126A -:105970008BCF823849F1833809F086CF20E04091FF -:10598000E9026C818B81F2CF8B810E94A9139B81EC -:105990008091E602911111C08E7F8093E6021092F1 -:1059A0008D02FFEF20E742E0F15020404040E1F758 -:1059B00000C000000E94280F67CF81608093E6023C -:1059C00086950E94A91360CF8B818093EA025CCFF9 -:1059D0008A81813899F030F4803809F055CF809170 -:1059E000E90223CF823891F0833809F04DCF8091BE -:1059F000E7028B838091E8028C8346CF8091E60298 -:105A000080FF02C0869511CF80E00FCF8091EA021F -:105A10000CCF6091E6027091E7028091E8029091CC -:105A2000E9020E94661230CF80E18A832DCF81E0A7 -:105A30008A8389EFFACE0A811B811027012710275C -:105A4000CE0101963C018C80DC01A80DB11D4D01F9 -:105A5000C801895F9D4F8614970409F415CF093F4B -:105A6000B1E01B0750F40E94952EF30184830F5F71 -:105A70001F4FBFEF6B1A7B0AEBCFD30114961C921A -:105A8000F6CF0A811B81102701271027FE013196CE -:105A90003F018C80800E912E911CC801895F9D4F23 -:105AA0008016910609F4F0CE093FF1E01F0728F4B3 -:105AB000D30114966C910E94A92EBFEF6B1A7B0A3A -:105AC0000F5F1F4FEACF0E94870DDECE8AE0ADCF79 -:105AD0000A811B81102701271027FE0131963F0103 -:105AE0008C80CF01880D911D4C01C80187968614CA -:105AF000970409F4C9CE003EA1E01A0750F40E94B1 -:105B0000952EF30184830F5F1F4FBFEF6B1A7B0A43 -:105B1000ECCFD30114961C92F6CF0A811B8110277B -:105B200001271027FE0131963F018C80800E912EB7 -:105B3000911CC80187968016910609F4A5CE003EF7 -:105B4000F1E01F0728F4D30114966C910E94A92E4E -:105B5000BFEF6B1A7B0A0F5F1F4FEBCF09BD19BD5B -:105B600009B400FEFDCF8091D8008F7D8093D800CE -:105B70008091E00082608093E0008091E00081FDF0 -:105B8000FCCF10926C030E9415152FCB86E290E09B -:105B90000E94952E1B821C821D828E8375CE2D3213 -:105BA000314008F0BACCF0CC2D32314008F069CC4D -:105BB0009FCC87FB082E062687FD819567FD6195A2 -:105BC0000E946F2E0EF4919507FC81950895AA1BF3 -:105BD000BB1B51E107C0AA1FBB1FA617B70710F0D8 -:105BE000A61BB70B881F991F5A95A9F7809590950A -:105BF000BC01CD01089597FB072E16F4009407D041 -:105C000077FD09D00E94E72D07FC05D03EF4909562 -:105C100081959F4F0895709561957F4F0895A1E2FA -:105C20001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F16 -:105C3000FF1FA217B307E407F50720F0A21BB30B61 -:105C4000E40BF50B661F771F881F991F1A9469F7DD -:105C500060957095809590959B01AC01BD01CF0139 -:105C60000895EE0FFF1F0590F491E02D0994692728 -:105C70009627692778278727782708950E94462E38 -:105C8000332312F48A1B9B0B0C94572EA29FB00156 -:105C9000B39FC001A39F700D811D1124911DB29F60 -:105CA000700D811D1124911D08950E94462EB7FF8D -:105CB0000895821B930B08950E94462EA59F900D78 -:105CC000B49F900DA49F800D911D11240895B7FFDE -:105CD0000C945C2E0E945C2E821B930B0895991BE2 -:105CE00079E004C0991F961708F0961B881F7A95D3 -:105CF000C9F780950895FC014150504030F0019063 -:105D00000616D1F73197CF0108958827992708956E -:105D1000FB01DC0104C08D910190801921F44150F8 -:105D20005040C8F7881B990B0895F999FECF92BD92 -:105D300081BDF89A992780B50895A6E1B0E044E0C6 -:105D400050E00C94CF2EA8E1B0E042E050E00C947B -:105D5000CF2E262FF999FECF92BD81BDF89A0197DB -:105D600000B4021639F01FBA20BD0FB6F894FA9AA3 -:105D7000F99A0FBE08950396272F0E94AA2E0E941B -:105D8000A92E252F0E94AA2E242F0C94AA2E01960C -:105D9000272F0E94AA2E0C94A92EDC01CB01FC0116 -:105DA000F999FECF06C0F2BDE1BDF89A319600B474 -:105DB0000D9241505040B8F70895F894FFCFA40ECB -:105DC000A40EAD0EAD0EAF0EAD0EAD0EAD0EA40E0B -:105DD000A40EB40EAD0EAD0EB40E10163816DB17B1 -:105DE0003816DB176B168C16DB178A179717AB1C48 -:105DF000AB1CE51CE51C941DAE1D131D131DB91D28 -:105E0000411E501E501E48194C1A691A7D1A8B1AD1 -:105E1000C01AF21A132C172C6B2C7C2C872CA62C56 -:105E2000A92CE82C092D792C792C142D172D1B2D3C -:0A5E3000412D632D662D682D8D2D88 -:105E3A007205ED0BCC0BC80BC40B710501191A1BAB -:105E4A001C1D1E1F202122010201001C001C1CCA4D -:105E5A00002A00000000C4004C00000000BE0050F0 -:105E6A0000000000B8005100000000B2004F00001E -:105E7A000000AC0052000000000101818283E200B0 -:105E8A00E900EA00B500B600B700CD008301CC00F6 -:105E9A008A01920194012102230224022502260288 -:105EAA0027022A02B300B4006F007000F0343536BE -:105EBA006667F6F7939600FF0100010000FFFF00F6 -:105ECA0000010001FF0000010202020206060609A3 -:105EDA0009090909090F0F0F0F0F0F1515151819C1 -:105EEA0019191919191919191923244022B6A801BF -:0A5EFA008601D000BD06D606F606AC +:100AE0000895089580916D0308959C014FB7F8947F +:100AF0008091610390916203A0916303B0916403BC +:100B00004FBF821B930B08952FB7F8948091610318 +:100B100090916203A0916303B09164032FBF089585 +:100B200020914A012223C9F02091650327FF15C0B7 +:100B3000E62FE695E695E695EE31D8F4E80FF92F25 +:100B4000F11D677021E030E001C0220F6A95EAF7DD +:100B500020958281282322830895FC0132960896ED +:100B60002191621303C0DF0111971C92E817F90766 +:100B7000B9F7089520915E0330915F032817390774 +:100B800071F090935F0380935E03E0915C03F091BA +:100B90005D03309721F00084F185E02D09940895DC +:100BA00020915A0330915B032817390771F0909315 +:100BB0005B0380935A03E0915C03F0915D033097EF +:100BC00021F00680F781E02D09940895E0915C03FF +:100BD000F0915D03309721F00190F081E02D0994B0 +:100BE00080E00895DC016091560380915703962FB1 +:100BF000891301C00895292F30E0F901EE0FFF1F7E +:100C0000E25BFC4F408151814A175B07A1F487E00A +:100C10008A9FA0018B9F500D1124415E5E4F81E0A1 +:100C2000FA0184839613E6CF2F5F3F4F237033275B +:100C30002093560308952F5F3F4F922F9370D8CF84 +:100C40001092EB021092EA02EFE1F1E0858181114E +:100C500002C014821682379681E0E934F807B1F7B2 +:100C60000895FA01811101C0FB0109940895809152 +:100C7000E502982F9E7F61F4817082608093E50287 +:100C80008091E802853B18F084EB8093E802089598 +:100C90008A34B0F381708864F1CFAF92BF92DF9253 +:100CA000EF92FF920F931F93CF93DF93182F062F8E +:100CB000E901453B08F044EBE42FF0E0E655FD4F39 +:100CC000011110C0E4915E2F4E2F4983E8835A83AF +:100CD000DF91CF911F910F91FF90EF90DF90BF9028 +:100CE000AF900895202F30E04491D42EE42EF12CC3 +:100CF00056E0159FC0011124EFEFF0E0BF010E9404 +:100D0000FE2C812F90E0880F991F55E5569FD0014A +:100D1000579FB00D11248A1B9B0B982F990F890F99 +:100D20005F01A21AB30AAE9CD001AF9CB00DBE9C6D +:100D3000B00D11245B2F089F80011124012F112772 +:100D40005F01A01AB10AAE9C8001AF9C100DBE9C41 +:100D5000100D11245F01A81AB108A29EC001A39E24 +:100D6000900DB29E900D1124892F9927E81BF90B45 +:100D7000EE9DC001EF9D900DFE9D900D1124E92F79 +:100D800062307105A1F050F46115710509F49DCF31 +:100D90006130710581F0EB2F512F97CF64307105D1 +:100DA00069F080F06630710509F48FCFF4CFE42F3D +:100DB0004B2F592F8ACFE42F412F87CFEB2F542F62 +:100DC000492F83CF4B2F5D2DE12F7FCF0E948405CC +:100DD0009C019091820280918302982B21F03093A4 +:100DE0007F0220937E029091840280918502982B4D +:100DF00021F030937D0220937C02E0915C03F0911E +:100E00005D03309749F082E0809380020480F58191 +:100E1000E02D80E892E00994089540918202803F9D +:100E200059F48091830287FF0DC010928302411113 +:100E30000BC010927A0208C0813F81F48091830236 +:100E400018169CF3442381F08091840290918502CE +:100E5000892B09F05AC0109279020895823F49F413 +:100E600047FFF0CF10928202809183028111ECCF74 +:100E7000E0CF833F19F41416ACF3E4CF90918402D1 +:100E8000893F29F41916F4F610928402DBCF8A3FC9 +:100E900019F497FFD7CFF8CF909185028B3F29F4B3 +:100EA00097FFD0CF10928502CDCF8C3F19F4191641 +:100EB000CCF3C8CF9CE0980F953090F4845F990BE9 +:100EC00021E030E0B90102C0660F771F8A95E2F792 +:100ED000CB01809590918102892380938102B2CFCA +:100EE0008D3F31F480917B028E7F80937B02AACF6D +:100EF0008E3F21F480917B028D7FF7CF8F3F09F0E9 +:100F0000A1CF80917B028B7FF0CF089580917B02EF +:100F100080FD16C081FD16C082FD16C08091790249 +:100F20008823A1F0883280F428E0829FC001112438 +:100F300068E270E00E94122D862F672B39F0089529 +:100F400082E0089584E0089588E0089581E008959E +:100F500080917B0280FD14C081FD14C082FD16C00B +:100F600080917A02882381F0843180F422E3829F89 +:100F7000C001112464E170E00E94122D862F0895B3 +:100F80008CE0089589E1089585E0089582E308954D +:100F9000803F31F40E94A8078195809383020895D1 +:100FA000813F19F40E94A807F8CF823F31F40E94D4 +:100FB000A8078195809382020895833F19F40E94C7 +:100FC000A807F8CF893F29F40E94860780938402FE +:100FD00008958A3F21F40E9486078195F7CF8B3FC1 +:100FE00031F40E94860781958093850208958C3F95 +:100FF00019F40E948607F8CF9CE0980F953070F4A2 +:10100000845F990B21E030E001C0220F8A95EAF756 +:1010100080918102822B8093810208958D3F31F46B +:1010200080917B02816080937B0208958E3F21F442 +:1010300080917B028260F7CF8F3FB9F780917B026E +:101040008460F1CF80E00895F894E82FE295EF7086 +:10105000F0E031A1282F2F7081E090E001C0880FCF +:101060002A95EAF7982F9095932391A392A1892B23 +:1010700082A3789408959091650392FF06C0282F6B +:1010800028712830F9F4877F846093FF06C0282FE9 +:1010900028712831F1F4877E84612091660320FF56 +:1010A00006C0382F38713830D9F4877F816021FF2E +:1010B00006C0282F28712831D1F4877E816194FDE4 +:1010C000877E0895282F24712430F9F68B7F88605D +:1010D000DCCF282F2471243101F78B7E8861DDCF8E +:1010E000382F3171313019F78E7F8860E0CF282F8B +:1010F0002171213121F78E7E8861E1CFCF93DF937B +:10110000EC0182389105A9F1D8F58133910509F4F4 +:1011100096C048F58932910509F48AC08A9709F486 +:1011200095C0C11521E5D20708F0BCC0C11530E556 +:10113000D30708F014C1C83ED10508F09CC0C03EDA +:10114000D10560F5C83AD10508F087C0C53AD10588 +:1011500008F0FDC0C130D10509F12097F9F0C43085 +:10116000D105E0F440C08533910509F45AC0C99710 +:10117000C1F680916503837089F0C0EED0E00EC0A7 +:10118000833E910599F170F4803E910501F1823E14 +:10119000910539F68091650382FD21C0CE01DF9172 +:1011A000CF910895863E910561F1873E910571F1D9 +:1011B000843E910509F0B5CF8091660381FFEECFA3 +:1011C00080916503C7EED0E084FD0DC0E7CF80912C +:1011D000650380FD12C19091660390FFDFCFC3EEDF +:1011E000D0E084FFDBCFD0E0C0E0D8CF80916503B2 +:1011F00082FD06C19091660390FDBFCF84FFCECFE4 +:10120000F2CF8091650383FDDDCFC8CF8091650368 +:1012100083FDF9C09091660391FFF0CFC4EED0E05A +:10122000BDCF8091650385FFB9CFC9E2D0E0B6CFCD +:101230008091650385FFB2CFC5E3D0E0AFCF809149 +:10124000650386FFABCFCAE2D0E0A8CF80916503EB +:1012500086FFA4CFC1E3D0E0A1CFCF3BD10518F6E4 +:10126000C85AD0E0CC0FDD1FC25BDE4F0990D88199 +:10127000C02DD46493CFC11540E2D40758F4C115F2 +:1012800081E0D80708F08ACFC03FD10508F4ABCF82 +:10129000D06584CFC11590E4D90708F4A4CFDF70DE +:1012A000D06A7CCFC11525E5D20700F5C11534E51C +:1012B000D30708F08AC0C11543E5D40708F071C010 +:1012C000C11582E5D80708F467C0CE01837099275D +:1012D00021E030E002C0220F331F8A95E2F7C69565 +:1012E000C69580E2C89FE001112452C0C11599E55E +:1012F000D907A8F4C11528E5D20708F06BC0C115BD +:1013000036E5D30708F06FCF8C2F0E943B08C82F1B +:10131000D0E0DC2FCC27CC27DF71D0623FCFC115C6 +:101320004AE5D40708F45BC0CE019056811590427F +:1013300008F059CF8D2F8F710E943B0890E0982FB5 +:10134000882788279F719C012C2BE901E6CFC55A7D +:10135000D0E0C55BDE4FC881D0E0D0641FCFCE01A6 +:10136000E4E096958795EA95E1F783702C2F269512 +:101370002695237040E2249F90011124382B8C2F56 +:101380008370C1E0D0E002C0CC0FDD1F8A95E2F788 +:10139000C22BD32BDC6802CFDC2FCC27C16FD06AE5 +:1013A000FDCECE018370992721E030E002C0220FEC +:1013B000331F8A95E2F7C695C69590E2C99FE00172 +:1013C0001124C22BD32BDA68E9CEDC2FCC27C46FD3 +:1013D000D06AE4CEDC2FCC27C06FD06ADFCE8C2F52 +:1013E0008F700E943B0834E0D695C7953A95E1F797 +:1013F000CF709C2FEC01D069D1CEC9E3D0E0CECE26 +:10140000C2EED0E0CBCEC6EED0E0C8CE809148028E +:101410008111109248020895809590916B03982352 +:1014200090936B03089580916B0390914702892BF1 +:1014300090914602892B8093CC0190914802992388 +:10144000A1F0892B8093CC0180914A01882341F13E +:101450008091650387FF24C08EE1EEECF1E090E01F +:10146000815000F591110E94060AE0915C03F09111 +:101470005D033097E1F080914A01882359F0809113 +:10148000650387FF07C08091CC018093CD0186E082 +:101490008093CC010280F381E02D8CEC91E00994E3 +:1014A00086E0DBCF21912223D9F29F5FD9CF089527 +:1014B0008091440290910302981301C008958F5FB8 +:1014C0008770FACF990F990F890F982F977086958B +:1014D0008695869524E0829FF0011124E151FE4F0C +:1014E00050E040E080E0219130E0092E02C03695C6 +:1014F00027950A94E2F721703327042E01C0220FAA +:101500000A94EAF7822B4F5F5F4F4430510559F739 +:101510000895990F990F890F982F977041E001C096 +:10152000440F9A95EAF786958695869594E0899F6B +:10153000F0011124E151FE4F30E020E070E05191C4 +:10154000DF011197CB01022E02C0969587950A9470 +:10155000E2F7817081958527842385278C932F5FFF +:101560003F4F2430310559F7089590E080E00E9404 +:10157000D00590E080E00E94BA05109247021092D8 +:1015800046020E94130A86E0E0E8F2E0DF011D92C5 +:101590008A95E9F710927A021092790210927B02F2 +:1015A0000C94E60690934A02809349020C94B50A83 +:1015B000882341F0809590914702892380934702C8 +:1015C0000C94130A0895882339F090914702982BC0 +:1015D000909347020C94130A0895882321F00E94E7 +:1015E0000C0A0C94130A0895882339F090916B0328 +:1015F000982B90936B030C94130A0895882379F128 +:101600009CEF980F913A38F4682F8CEC91E00E948F +:1016100090050C94130A90E2980F983050F487705C +:1016200091E001C0990F8A95EAF7892F0E940C0A70 +:10163000F0CF9BE5980F933020F490E080E00C947D +:10164000D00598E5980F973120F490E080E00C9455 +:10165000BA05803F20F00E940D070C94E60608951D +:10166000CF93C82F882309F49CC08CEF8C0F813A4C +:1016700008F064C080914A018823D1F1809165030C +:1016800087FF36C0EC2FE695E695E695F0E0E4534B +:10169000FE4F828190E04C2F477021E030E002C085 +:1016A000220F331F4A95E2F782239323892B61F09F +:1016B0006C2F8CEC91E00E9490050E94130A22C0CE +:1016C0008091650387FF22C0EC2FE695E695E695AD +:1016D000F0E0E453FE4FC77021E030E001C0220F7C +:1016E000CA95EAF78281822B8283CF910C94130AE8 +:1016F000EEECF1E084ED91E02191C217C9F28E1772 +:101700009F07D1F780914A018111DACFAEECB1E0A9 +:10171000EFEF80E09D91C91741F3EF3F19F491116C +:1017200001C0E82F8F5F8630A9F7EF3FF1F20E2E50 +:10173000000CFF0BE453FE4FC283D7CF80E28C0F27 +:10174000883068F4C77021E030E001C0220FCA95EC +:10175000EAF780916B03822B80936B03C6CFEBE596 +:10176000EC0FE33040F4F0E0E55BFE4F808190E069 +:10177000CF910C94D005E8E5EC0FE73150F4F0E0A0 +:10178000EE0FFF1FE25BFE4F80819181CF910C94A1 +:10179000BA05C03F30F08C2F0E94C807CF910C943F +:1017A000E606CF910895809580FF08C0589A81FF82 +:1017B00007C05D9A82FF06C05C9A08955898F7CFDB +:1017C0005D98F8CF5C9808958093670370936903E0 +:1017D00060936803809190038430F9F48093E9006A +:1017E0008FEF9091E800815095FD06C095ED9A9598 +:1017F000F1F700008111F5CF8091E80085FF0DC061 +:1018000050E040E063E070E087E693E00E94370438 +:101810008091E8008E778093E8000895BC0184E011 +:101820000C94E40BBC0183E00C94E40B9C0184E079 +:101830008093E9009FEF8091E800915085FD06C0FC +:1018400085ED8A95F1F700009111F5CF8091E800C0 +:1018500085FF0CC050E040E066E070E0C9010E94E6 +:1018600037048091E8008E778093E8000895CF9345 +:10187000DF93EC0180914A018823B1F180916503E7 +:1018800087FF32C060E284E08093E9008FEF90919F +:10189000E800815095FD06C095ED9A95F1F700009E +:1018A0008111F5CF8091E80085FF1BC080914A012E +:1018B00070E050E040E0811104C050E040E068E09A +:1018C00070E0CE010E9437048091E8008E7780930B +:1018D000E80080E2FE01AEE6B3E001900D928A9549 +:1018E000E1F7DF91CF91089568E081E0CDCF81E00D +:1018F0008093E00080E28093D8001092C9008FE1CD +:101900009EE40197F1F700C0000087E090EBDC0156 +:1019100080939C0390939D03A0939E03B0939F0399 +:1019200088E19CE00FB6F894A895809360000FBE04 +:1019300090936000FFCFCF92DF92EF920F931F93AF +:10194000CF93DF93CDB7DEB7C455D1090FB6F89466 +:10195000DEBF0FBECDBF60911B018091E50280FF0D +:101960004CC0EFEAF3E09E012F5F3F4F8E010B5A10 +:101970001F4FC901A4914A2F50E0DA01AA0FBB1FE3 +:10198000A40FB51FAF56BD4FCD90DD90EC90D9019F +:10199000CD92DD92ED929D013196A017B10751F7DE +:1019A00020911A0143E0249F800D911D1124279A54 +:1019B00025B12F7735B130685FB7F894FC01649F8B +:1019C000E00DF11D1124BF018617970749F55FBF90 +:1019D000EFE5F4E03197F1F700C00000CC5ADF4F9B +:1019E0000FB6F894DEBF0FBECDBFDF91CF911F9130 +:1019F0000F91EF90DF90CF90089580911C0190910E +:101A00001D0123E0829FF0011124EF56FD4F89173D +:101A100008F0A7CF1182108212828F5F3396F7CF22 +:101A2000DC014D91CD01E8E035B9000000C047FF71 +:101A300025B9440F000000C000C000C025B900C097 +:101A4000EA9591F7C1CF0F931F93CF93DF93EC01EA +:101A500010E000E090911E019017110609F06CF45F +:101A60000E949B0C8C8190E00196817099278C8359 +:101A7000DF91CF911F910F91089520911C01A80132 +:101A8000420F511D9A01220F331F240F351F2F566D +:101A90003D4F4C816091E7028091E6029695901748 +:101AA000110651F04CF0442349F04091E8020E94A5 +:101AB0004D060F5F1F4FCECF4423B9F340E0F7CF61 +:101AC0008F929F92AF92BF92CF92DF92EF92FF924E +:101AD0000F931F93CF93DF93EC014C81042F10E001 +:101AE0009801D8010E945D2D9B01AC010E94732DCD +:101AF0004B015C01E0E2F0E0E01BF10BA5E5B0E09A +:101B0000AC019B010E94732D6B017C019F01DF01E1 +:101B10000E94552D9B01AC010E947E2D9B01AC01C2 +:101B2000280D391D4A1D5B1DC701B6010E94262DD7 +:101B3000F22E822F90E039E23F1560F143E0249FBE +:101B40009001112435952795122F109500E085E519 +:101B5000E82EEF1880911E01081758F10E949B0C87 +:101B60009C8181E0992319F0903219F48FEF8093D2 +:101B7000190180911901890F8C83DF91CF911F91F9 +:101B80000F91FF90EF90DF90CF90BF90AF909F901C +:101B90008F90089525E530E0B901681B790B9B0112 +:101BA000220F331F260F371F37FFCCCF2F5F3F4F3A +:101BB000C9CF8E2D01FD8F2D20911C01622F600F4A +:101BC0007727771F9B01220F331F260F371F2F56B2 +:101BD0003D4F412F6091E7020E944D060F5FBACF43 +:101BE0000F931F93CF93DF9380911C0190911D0160 +:101BF00023E0829FF0011124EF56FD4F891740F139 +:101C0000C0E0D3E060911E01C61740F10E949B0C1A +:101C10002091170180918F02820F80938F02909103 +:101C20001801920F90931801191654F4082E000C05 +:101C3000990B40911E014150550B841795071CF0DC +:101C4000219520931701DF91CF911F910F91089556 +:101C50001182108212828F5F3396D0CF0C2F10E04A +:101C600070E0C8010E94122D20911C01820F482FA4 +:101C700050E020918F02022E000C330B0217130745 +:101C8000BCF020911801022E000C330B20173107F5 +:101C90007CF08D9F900111242F563D4F4091E8021A +:101CA0006091E7028091E6020E944D06CF5FAACFC5 +:101CB000FA01EE0FFF1FE40FF51FEF56FD4F1182E3 +:101CC00010821282F3CF9F92AF92BF92CF92DF9297 +:101CD000EF92FF920F931F93CF93DF93FC018281CA +:101CE0000FEF80FF01E010E04CE1942EA0901E0168 +:101CF0001A15D0F00E949B0C80918E02013009F0E1 +:101D000054C0811102C080911E01815080938E02C7 +:101D1000DF91CF911F910F91FF90EF90DF90CF90C7 +:101D2000BF90AF909F900895C0911C01C12ED12CFF +:101D3000CC0DDD2DD11DCE01880F991FC80FD91FE5 +:101D4000CF56DD4F198218821A8234E0E32EF12C2F +:101D5000B12C80918E028B0D8D311CF1692D0E946A +:101D6000F02C892F082E000C990BC816D90691F477 +:101D70008091E8028E9DA0018F9D500D11245595F4 +:101D80004795559547959E016091E7028091E6023F +:101D90000E944D06B00EF1E0EF1AF108D1F61F5F78 +:101DA000A5CF87FFDFCF8A0DDDCF90E00196609150 +:101DB0001E0170E00E94122DA9CFEF92FF921F9397 +:101DC000CF93DF93EC0110E0EE24EA94F12C6091C4 +:101DD0001E01161770F00E949B0C9A818C8190FF57 +:101DE00027C08F5F8C83DF91CF911F91FF90EF9081 +:101DF000089520911C01422F410F5527551FCA01FC +:101E00009A01220F331F280F391F2F563D4F70E0C4 +:101E1000C7010E94122D962F8C814091E80260919B +:101E2000E702199F800D11240E944D061F5FCFCF3E +:101E30008150D8CF1F93CF93DF9300D00F92CDB7AF +:101E4000DEB7122F9091E50290FF16C09E012F5F22 +:101E50003F4F0E944D068B819981212F30E0F9017F +:101E6000EE0FFF1FE20FF31FEF56FD4F2A81218374 +:101E7000908382830E949B0C0F900F900F90DF91B4 +:101E8000CF911F9108959091E50290FF14C0909119 +:101E90001C0120911D0133E0939FF0011124EF56A6 +:101EA000FD4F921710F00C949B0C8183608342834A +:101EB0009F5F3396F6CF08950F931F93CF93DF93D1 +:101EC00000D00F92CDB7DEB78C01809190028111C6 +:101ED0000AC09E012F5F3F4F44EB6FEF0E944D06FB +:101EE0008A8180939002F8016481613069F0809169 +:101EF000900240E0662361F040E0623011F44091CE +:101F0000900280E060E004C06091900240E080E0D8 +:101F10000E94430FF801848190E0019663E070E035 +:101F20000E94122D84830F900F900F90DF91CF911C +:101F30001F910F910895CF93DF9300D00F92CDB7EB +:101F4000DEB79091E50290FF0AC09E012F5F3F4FE0 +:101F50000E944D064B8169818A810E94430F0F9038 +:101F60000F900F90DF91CF910895CF93DF93EC0105 +:101F7000E5EEF2E0438162818C810E949B0F8C81AF +:101F80008F5F8C83DF91CF910895CF93DF93EC0126 +:101F9000EC81F0E0E553FC4F4491E5EEF2E0628124 +:101FA00081810E949B0F8C818F5F8C83DF91CF9109 +:101FB00008951F93CF93DF93182FCAE0D0E08933A1 +:101FC00011F4C0E5D0E0812F0E94300B8FE99FE033 +:101FD0000197F1F700C000002197C1F7812FDF9131 +:101FE000CF911F910C94FE0ADF92EF92FF920F9314 +:101FF0001F93CF93DF93E82FF0E0E85EFD4FD4907E +:10200000282F26952695269530E0F901E85FFD4FAB +:102010000491877010E0082E02C0159507950A9468 +:10202000E2F701701127F901E850FE4FE490F12C1E +:10203000082E02C0F594E7940A94E2F791E0E922B1 +:10204000FF24F901E851FE4FC491D0E002C0D595BC +:10205000C7958A95E2F7C170DD270115110519F0C2 +:1020600081EE0E94300BE114F10419F086EE0E941B +:10207000300B8D2D0E94D90FEF2819F086EE0E94AB +:10208000FE0A012B19F081EE0E94FE0ACD2B51F0C1 +:102090008CE2DF91CF911F910F91FF90EF90DF9035 +:1020A0000C94D90FDF91CF911F910F91FF90EF907A +:1020B000DF900895CF93DF93C7E0D2E060E0CE01D8 +:1020C0000E94A62D2196C11584E0D807B9F7DF91AB +:1020D000CF9108956F927F928F929F92AF92BF920D +:1020E000CF92DF92EF92FF920F931F93CF93DF93E4 +:1020F0008BECC82E84E0D82E0FE510E0E801E097C5 +:1021000036011CC0F50185909490692DC7010E948D +:10211000A62D682DC70101960E94A62D82E0A80E6B +:10212000B11C82E0E80EF11CCE15DF0559F788E0FE +:10213000680E711C28960C171D0731F07E0188E08F +:10214000E81AF1085301DECF005D1F4F80E3C80E8F +:10215000D11C0F3382E0180789F6DF91CF911F91D0 +:102160000F91FF90EF90DF90CF90BF90AF909F9036 +:102170008F907F906F900895CF93C82F6FEF81114C +:1021800061E283E290E00E94A62D6FEFC11161E150 +:1021900084E290E00E94A62D6FEFC11160E385E21A +:1021A00090E0CF910C94A62D80E00E94BC1060E0DE +:1021B00086E290E00E94A62D0E946A100E945A10AA +:1021C00081E00C94BC100F931F93CF93DF9328E012 +:1021D000629FE001112450E0440F551FC40FD51F2A +:1021E00030E3839FC00DD11D1124CE0187960E943C +:1021F000922D082F10E0102F0027CE0188960E9404 +:10220000922D9801282BC901DF91CF911F910F9139 +:102210000895462F8A3038F4763028F4643018F464 +:10222000672F0C94E31090E080E00895BF92CF9266 +:10223000DF92EF92FF920F931F93CF93DF937C0176 +:1022400000919A0310919B038091490290914A0258 +:10225000082B192BCFE0D0E0CC24C394D12CBC2E7A +:10226000C6010C2E02C0880F991F0A94E2F7802342 +:102270009123892B71F4219790F7B12C8B2DDF914D +:10228000CF911F910F91FF90EF90DF90CF90BF9073 +:102290000895B7018C2F0E9409110E947E080197B2 +:1022A00051F3ECCFCF93DF93EC010E941611BE01E6 +:1022B0000E940911DF91CF910C947E08FC01868168 +:1022C0009781009779F00E947E08292F2F709295B0 +:1022D0009F7092509E30A0F4E92FF0E0EA50F24D4A +:1022E0000C94482D808191810E945211EECF803F45 +:1022F00019F020F4883E20F481E00895843FE1F352 +:1023000080E00895883EC0F3813FD1F7F5CF822F5A +:1023100086958695869508951F93CF93DF9300D079 +:1023200000D00F92CDB7DEB7FC0126813781211591 +:10233000310541F525E0DE01119601900D922A95B7 +:10234000E1F7FC01228189819A812223B9F0662379 +:10235000A9F00E941611182F682F89819A810E9476 +:10236000890A69817A81812F0F900F900F900F90C9 +:102370000F90DF91CF911F910C9409110E94620A76 +:10238000182FEFCFC9010F900F900F900F900F9063 +:10239000DF91CF911F91089583E290E00E94922DEA +:1023A000813289F484E290E00E94922D813159F4C7 +:1023B00085E290E00E94922D91E0803309F090E058 +:1023C000892F8170089580E0FCCF6091E5026695C9 +:1023D00070E04BE050E08CE091E00E94DA2D892B18 +:1023E00019F481E080938D020E9484059093870206 +:1023F000809386020895CF92DF92EF92FF926B0155 +:102400007C010E943706B701A60188E090E0FF90AA +:10241000EF90DF90CF900C94B82DAF92BF92CF92F7 +:10242000DF92EF92FF920F931F93CF93DF9300D031 +:102430000F92CDB7DEB7182FF62E042FE22E909113 +:10244000E50290FF29C0E92FE695AE2FB0E0AA562D +:10245000BE4F8C9180938C029E7F923059F59E01E5 +:102460002F5F3F4F812F0E944D064B8169818A81EA +:102470000E94430F1093E602F092E7020093E802F5 +:10248000EE2051F06091E5027091E6028091E70242 +:102490009091E8020E94FB110F900F900F90DF9136 +:1024A000CF911F910F91FF90EF90DF90CF90BF9051 +:1024B000AF900895823019F40091E802DBCF8630A6 +:1024C00019F41091E602D6CF8930D9F3893191F60B +:1024D000E9518E2F8170D82EE695F0E0E655FC4F3D +:1024E000A590B490C12CBB2460911E01C61618F0B3 +:1024F0000E949B0CBFCF2C2D30E0A29EC001A39E5A +:10250000900DB29E900D112470E00E94FE2C812F40 +:10251000D11013C0860F40911C01420F532F511D43 +:102520009A01220F331F240F351F2F563D4F402F86 +:102530006F2D0E944D06C394D7CF861BECCFE5EEDE +:10254000F2E0438128E0421B08F440E021E0628190 +:1025500081810C940D12E5EEF2E0438128E0420FF8 +:1025600008F44FEF21E0628181810C940D12E5EEB9 +:10257000F2E0628128E0621B08F460E021E0438120 +:1025800081810C940D12E5EEF2E0628128E0620F89 +:1025900008F46FEF21E0438181810C940D12E5EE88 +:1025A000F2E0818121E04381628188500C940D1218 +:1025B000E5EEF2E0818121E043816281885F0C9445 +:1025C0000D12CF93DF93D82FC92F292F30E088E049 +:1025D0002115310519F42D2F392F80E0A90174E060 +:1025E000569547957A95E1F74115510511F08C5FA5 +:1025F0009A01A9015695479556954795411551055C +:1026000011F08E5F9A0136952795232B09F08F5F85 +:10261000823001F148F4882381F08130A9F08D2FB8 +:102620009C2FDF91CF9108958330C9F08430B9F7A2 +:1026300020E044E66FEF8FE004C020E044E66FEF57 +:1026400082E30E940D12EBCF20E044E66FEF85E0BD +:102650000E940D1220E044E66FEF80E8F2CF20E008 +:1026600044E66FEF87EDEDCF0E94E11290939B035C +:1026700080939A030C94B50A80919A0390919B03DE +:102680009C01267033272630310519F488600C949C +:102690003413877FFCCF21E030E002C0220F331FCC +:1026A0008A95E2F72095309580919A0390919B034B +:1026B000822393230C9434139091450280958923AF +:1026C00080934502282F277091F4282F082E000CA4 +:1026D000330B9217130659F09091660392FD07C0D1 +:1026E0008595859585950E944B1310924502089516 +:1026F000CF93C0916603C2FB992790F9981799F080 +:1027000080FBC2F9C09366036091650384E090E0AA +:102710000E94A62D6C2F82E290E00E94A62D82E0FE +:10272000CF910C945C13CF91089521E030E002C06A +:10273000220F331F8A95E2F780919A0390919B03B1 +:10274000822B932B0C9434138091E902882319F087 +:1027500081508093E9026091E5027091E6028091D8 +:10276000E7029091E8020C94FB118091E90283301A +:1027700018F48F5F8093E9026091E5027091E602A0 +:102780008091E7029091E8020C94FB119091E50290 +:1027900090FF36C09170811129C092609093E5023C +:1027A000662351F06091E5027091E6028091E702A4 +:1027B0009091E8020E94FB116091E502669570E03D +:1027C0004BE050E08CE091E00E94DA2D892BA9F0DB +:1027D00010928D0281E08093890220E04091E8020E +:1027E0006091E7028091E6020C940D12853210F0A0 +:1027F0009864D4CF880F982BD1CF0E94E511EACFEF +:10280000089560E00C94C6138091E502869581508E +:1028100009F484E261E00C94C6138091E502869588 +:102820008F5F853208F081E061E00C94C6139091CF +:10283000E50290FF07C09695981720F0961710F4C0 +:102840000C940D1461E00C94C613E5EEF2E083E005 +:10285000808311828FEF828388E283831482608178 +:102860007181828193810C94FB1180914A01EEEC7D +:10287000F1E0882359F08091650387FF07C08EE15E +:10288000DF011D928A95E9F70C94B50A86E0F8CF2E +:102890001F93CF93DF93CDB7DEB7AA970FB6F89407 +:1028A000DEBF0FBECDBF82E993E02091F100DC01D5 +:1028B0002D93CD01B3E08A399B07B9F7809193033B +:1028C000833009F472C0B8F4813009F449C0823011 +:1028D00009F4B5C08091E80083FF8DC28091920316 +:1028E000909193039A3008F086C2E92FF0E0EC5FF4 +:1028F000F14D0C94482D8A3009F490C08B3009F4C6 +:1029000071C0893039F780919203813219F7809133 +:10291000960390919703009711F00297D9F6809152 +:10292000E800877F8093E8008091E80082FF38C04C +:102930009091F3008091F200029731F48091F100C0 +:10294000813011F0863021F48091F10080936D0385 +:102950008091E8008B778093E8000E946104BACFF1 +:1029600080919203813A09F0B5CF8091E800877F8A +:102970008093E8008091960390919703892B61F4EE +:1029800060E28EE693E070E00E9413058091E8001B +:102990008B778093E8009ECF60E090E080E0F3CFFB +:1029A000809190038111C0CF95CF80919203813A9D +:1029B00009F090CF8091960390919703892B09F0AD +:1029C00089CF8091E800877F8093E8008091E800BC +:1029D00080FFFCCF80914A018093F1008091E80054 +:1029E0008E77B9CF80919203813209F073CF8091B5 +:1029F000960390919703892B09F06CCF8091E800A2 +:102A0000877F8093E8000E94610480919403809303 +:102A10004A0110926B030E9435145CCF809192039F +:102A2000813209F057CF8091E800877F8093E800DA +:102A30000E9461048091950380936C034BCF809139 +:102A40009203813A09F046CF8091E800877F809316 +:102A5000E8008091E80080FFFCCF80916C03BCCF40 +:102A6000803899F0823809F0C6C1809196038F7042 +:102A7000873008F0C0C18093E9008091EB0085FBAE +:102A8000882780F91092E90006C080918E0390910A +:102A90008F03911182609091E800977F9093E800F6 +:102AA0008093F1001092F1008091E8008E779FC131 +:102AB000882309F48DC1823009F09DC1809194036F +:102AC000811190C1809196038F702FEF280F2630CF +:102AD00008F091C18093E9002091EB0020FF82C1B2 +:102AE000933031F48091EB0080628093EB007AC1E7 +:102AF0009091EB0090619093EB0021E030E001C0F9 +:102B0000220F8A95EAF72093EA001092EA0080915A +:102B1000EB008860EACF81116EC1109194031F779A +:102B20008091E3008078812B8093E3008091E8001E +:102B3000877F8093E8000E9461048091E80080FF15 +:102B4000FCCF8091E30080688093E30082E0111164 +:102B500083E0809390034FC18058823008F04BC1CE +:102B600020919403309195032C3DE3E03E07A1F5BD +:102B700083E08A838AE289834FB7F894DE01139653 +:102B800020E03EE051E2E32FF0E050935700E49163 +:102B900020FF03C0E295EF703F5FEF708E2F90E053 +:102BA000EA30C0F0C7968D939D932F5F243159F77B +:102BB0004FBF8091E800877F8093E8006AE270E071 +:102BC000CE0101960E9413058091E8008B778093D7 +:102BD000E80011C1C096E7CF8091960390919703CA +:102BE000432F55274330510509F44AC078F5413049 +:102BF000510509F47AC08BE590E0EBEAF6E042304B +:102C0000510509F0F8C02091E800277F2093E800E3 +:102C100020919803309199038217930708F49C013F +:102C200040E02115310509F065C0411163C0809174 +:102C3000E80082FDC9CF80919003882329F2853076 +:102C400019F28091E80083FFF2CFBECF41325105E7 +:102C500009F43CC04232510509F0CDC083309105E2 +:102C600008F0C9C0FC01EE0FFF1FE254FE4F0190B7 +:102C7000F081E02D85549E4FDC018C9190E01AC0CC +:102C8000332721303105D1F02115310561F0223093 +:102C9000310509F0B0C0E8E1F7E0E4918E2F90E053 +:102CA000E8E1F7E007C0E8E3F7E0E4918E2F90E079 +:102CB000E8E3F7E0009709F49EC0A5CFE4E2F7E06F +:102CC000E4918E2F90E0E4E2F7E0F4CF83309105B9 +:102CD00008F091C0880F991FFC01EC53FE4F019042 +:102CE000F081E02D89E090E08ECF82E190E0E6E097 +:102CF000F7E089CF80919003882309F465CF853070 +:102D000009F462CF8091E80083FD5ECF8091E800F6 +:102D100082FD8DCF8091E80080FF83CF9091F300FA +:102D20008091F2002115310519F08830910550F09D +:102D300041E0089709F040E08091E8008E778093A9 +:102D4000E8006FCF44914093F10031962150310952 +:102D50000196E8CF803809F04EC08091E800877F67 +:102D60008093E800809191038093F1009DCE8111C2 +:102D700042C0109194031230F0F58091E800877FF3 +:102D80008093E800109391030E946104112311F0D5 +:102D900084E005C08091E30087FDFACF81E0809355 +:102DA000900342E061EC81E00E94800442E261EC29 +:102DB00084E00E94800442E261EC82E00E94800490 +:102DC00042E260EC83E00E9480048091900313C093 +:102DD00080919403813079F481E0933009F080E0B0 +:102DE00080938F031092E9008091E800877F8093A1 +:102DF000E8000E9461048091E80083FF0AC080918E +:102E0000E800877F8093E8008091EB0080628093E8 +:102E1000EB00AA960FB6F894DEBF0FBECDBFDF91D0 +:102E2000CF911F91089569EE7EEF90E080E00E94BF +:102E3000C42D60E082E090E00E94A62D60E083E077 +:102E400090E00E94A62D10924A021092490260E082 +:102E500084E090E00E94A62D60E082E290E00E9473 +:102E6000A62D60E085E090E00E94A62D60E086E05F +:102E700090E00E94A62D6FEF87E090E00E94A62DC3 +:102E800040E050E0BA0188E090E00E94B82D60E098 +:102E90008DE090E00E94A62D40E050E0BA0188E16C +:102EA00090E00E94B82D60E087E190E00E94A62D9E +:102EB00040E050E0BA018CE190E00E94B82D70E053 +:102EC00060E080E290E00E94C42D40E050E0BA0152 +:102ED00088E190E00E94B82D80E00E94BC100E9422 +:102EE000D41040E050E0BA018FE090E00E94B82D8D +:102EF00040E050E0BA0183E190E00C94B82D8F924D +:102F00009F92AF92BF92CF92DF92EF92FF920F9378 +:102F10001F93CF93DF9300D000D0CDB7DEB76C0105 +:102F2000FC0183819481892B31F0808191818923F7 +:102F30008F3F09F057C60F900F900F900F90DF91C1 +:102F4000CF911F910F91FF90EF90DF90CF90BF90A6 +:102F5000AF909F908F900895980122513F45203166 +:102F6000310508F034C68FEF93E00E94922D025194 +:102F700077E0E72E72E0F72E882361F18091450219 +:102F80008770C9F2F60182818823A9F280916603D5 +:102F900082FDD1CF82E00F900F900F900F90DF91C4 +:102FA000CF911F910F91FF90EF90DF90CF90BF9046 +:102FB000AF909F908F900C945C13E114F4E0FF06A7 +:102FC000E9F2C7010E94922D811101C001502FEF3B +:102FD000E21AF20A0111F1CF1C821B82BB24B394C6 +:102FE0006AE0A62E87010F5F1F4FC7010E94922D36 +:102FF00089831A82882311F29FEF980F933008F586 +:103000008A83B98232E0E30EF11CC8010E94922D3E +:103010008B83882309F4B2CF8E010F5F1F4FF80115 +:1030200080818823F9F2813009F043C09181828147 +:10303000913049F40E5F1F4F0E94D90F0F5F1F4F51 +:10304000EECF7801E9CF923029F40E5F1F4F0E9436 +:10305000300BF4CF933029F40E5F1F4F0E94FE0A0D +:10306000EDCF943019F00F5F1F4FE8CF0E5F1F4F69 +:1030700030E020E0B8016F5F7F4FF801418180535D +:10308000990B8A30910550F021503109B8F28FE93F +:103090009FE00197F1F700C00000F6CFA29EF0017B +:1030A000A39EF00D11249C012E0F3F1F842F8B0136 +:1030B000E1CF0E94F40FC2CF81E00E9495130E94DD +:1030C0003C135CCF81E00E944B13F9CF82E0FBCF31 +:1030D000882309F41AC180915A02811106C081E047 +:1030E00080935A0282EE0E94300B0E9484059093D6 +:1030F0005902809358028BE20E94300BF6018281C4 +:10310000882369F0C801815E9C45059740F46FE112 +:10311000600F60935B028CE090E00E94A62D17FF89 +:1031200070C0F6018281882309F46BC00E94E60515 +:10313000869581708093EE010E94E60581708093F0 +:10314000ED0180915B02813039F48091EE0188239A +:1031500019F089E30E94D90F80916B038093EC01F1 +:1031600010926B0380915B02813009F4B7C1882310 +:1031700009F4B0C1823009F4C4C1843009F4D5C166 +:103180008FE39CE90197F1F700C000005801E89433 +:10319000B7F84CE0E42EF12C5AE0852E912CC501B5 +:1031A0000E2C02C0969587950A94E2F78F70909145 +:1031B0005B02923009F0C0C18A3008F0BBC190E0D8 +:1031C0000996B4010E94122D875A0E94D90F94E0EB +:1031D000E91AF108ECEFEE16EFEFFE0601F7809129 +:1031E0005B02813009F4B6C1882309F4AFC1823093 +:1031F00009F4BCC1843009F4C2C18091EC01809310 +:103200006B03F6018281882369F180916B038272DE +:103210000C3CFCE51F0709F465C208F0E5C1063C5B +:103220003CE5130709F44AC208F0BCC1033CECE5D5 +:103230001E0709F439C208F0A4C1023C2CE51207AC +:1032400009F40BC20A358DE5180709F489C208F0A4 +:1032500063C20115ECE51E0709F470C20E3D1C4562 +:1032600009F47BC2F60186819781009709F47CC23C +:103270000E947E088C01F601F280B580B2943FE096 +:10328000B322809145028770C1F0AF2CFF20B1F0CE +:10329000812F807F803421F080E2800F883068F0B9 +:1032A0008091660382FD09C082E00E945C138091D8 +:1032B00045028770AA24A3948111A12C912E929487 +:1032C0002FE09222FBE0F91508F4CDC2E92DF0E0E1 +:1032D000E25FF14D0C94482D8823A1F080915A02B1 +:1032E000811106C081E080935A0282EE0E94300B69 +:1032F0000E948405909359028093580281EE0E94A7 +:10330000300BF9CE81EE0E94FE0A8BE20E94FE0A8B +:10331000F5CE882309F4F2CE81EE0E94300B83EEC5 +:103320000E94300B8FE40E94300B8FE40E94FE0A53 +:1033300083EE0E94FE0A81EEE9CF882309F4DECEF7 +:1033400081EE0E94300B83EE0E94300B80E50E94DC +:10335000300B80E5EBCF882309F410CE1091570293 +:1033600081E01827109357020E948405909356021B +:10337000809355021123C9F028E148E76FEF8FE0F1 +:103380000E941A0F29E148E76FEF8FE00E941A0FA1 +:103390002AE148E76FEF8FE00E941A0F2BE148E720 +:1033A0006FEF8FE00E941A0FE9CD10921C018CE1A3 +:1033B00080931D0180931E0181E20E940114DECDE5 +:1033C000882309F49BCE80EE0E94300B81EE0E9490 +:1033D000300B80E10E94300B80E10E94FE0A81EEFA +:1033E0000E94FE0A80EE0E94FE0A80914E0291E049 +:1033F00022E148E76FEF892780934E02882351F03E +:103400008FE00E941A0F26E148E76FEF8FE00E94DD +:103410001A0F74CE8FEA0E941A0F26E148E76FEF69 +:103420008FEAF5CF882309F4A9CD1091540201E069 +:103430001027109354020E948405909352028093A7 +:1034400051028091530210921C01882319F18CE1E2 +:1034500080931D0180931E0181E20E94011428E0E7 +:1034600044E666EE80E00E941A0F29E044E666EE2C +:1034700080E00E941A0F2DE044E666EE80E00E9494 +:103480001A0F00935402109253021092500210929D +:103490004F0274CD8CE180931D0180931E0181E267 +:1034A0001123A9F00E94011428E044E666EE80E0B2 +:1034B0000E941A0F29E044E666EE80E00E941A0F8F +:1034C0002DE044E666EE80E00E941A0FDCCF0E94F9 +:1034D0000114D9CF82EE0E94300B52CE83E00E94BD +:1034E000E30A88E10E94300B8FE39CE90197F1F732 +:1034F00000C0000088E10E94FE0A83E00E94D80A12 +:103500003FCE8091ED01811103C083E50E94D90F68 +:1035100082EE0E94300BEFE3FCE93197F1F700C037 +:10352000000087E50E94D90F2BCE86EE0E94D90FAE +:1035300088E1F8CF865049CE96EF980F963020F06C +:10354000805D0E94F40F43CE895AFBCF82EE0E9429 +:10355000FE0A53CE8CE20E94D90F8091EE0188239F +:1035600009F44BCE89E30E94D90F47CE82EE0E9428 +:10357000FE0A8091ED01811140CE83E5F4CF88E20F +:10358000F2CF043C3CE5130709F493C04FEC52E141 +:1035900068ED72E1053C9CE5190709F053CE0E94E5 +:1035A0003106ECCC093CECE51E0709F491C070F43F +:1035B000073C2CE5120709F486C043EC52E167EBA7 +:1035C00072E1083C3CE5130751F33CCE0A3C9CE514 +:1035D000190709F482C044EA53E165EB73E10B3C3F +:1035E000ECE51E07E1F22ECE013DFCE51F0709F4D4 +:1035F00087C0B0F40E3C3CE5130709F47BC008F427 +:1036000076C00F3C9CE5190709F477C06EE089E0AD +:10361000003DECE51E0709F015CE0E941714AECC54 +:10362000043DFCE51F0709F471C068F4023D3CE568 +:10363000130709F468C0033D8CE5180709F002CEB2 +:1036400061E088E12EC0053D9CE5190709F461C0E1 +:103650000D35100709F492CCF5CD8091E50280FF7D +:103660001BC08E7F8093E5026091E5027091E602B7 +:103670008091E7029091E8020E94FB1110928D0266 +:10368000FFEF20E732E0F15020403040E1F700C08A +:1036900000000E949B0C72CC81608093E50261E087 +:1036A00086950E94C6136ACC44E054E16DE074E153 +:1036B00076CF4DE054E164E074E171CF48ED52E122 +:1036C0006FEC72E16CCF47EB52E163EC72E167CFD4 +:1036D0004FE952E16BEA72E162CF4BEA52E16FE9E6 +:1036E00072E15DCF45EB53E164EA73E158CF61E0ED +:1036F00081E0D7CF65E082E090CF68E086E08DCFB3 +:1037000064E18FE08ACF67E185E187CF62E289E1FA +:1037100084CF61E083E2C5CF0B352DE5120711F1AF +:103720000C351D4509F09ECD8091660382FB8827EC +:1037300080F991E089270E94781394CD10926B0351 +:103740000E9435148FEF94E3ECE081509040E0400C +:10375000E1F700C000000E94770C0E9413170ECC06 +:1037600081E0E9CF80E0E7CF828100811181882369 +:1037700069F0C8010E941611F82E682FC8010E9436 +:10378000890AB8018F2D0E94091172CDC8010E94CB +:10379000620AF82EF6CF212F2F70E22E107F19F03B +:1037A000E29490EFE922FF20B9F0EE2069F080E288 +:1037B000800F883010F0011109C080916B03E82A56 +:1037C000E0926B030E94130A802F4BC08091470246 +:1037D000E82AE0924702F6CF802F0E94FE0AEE20F0 +:1037E00009F441C080E2800F883010F0011104C05C +:1037F0008E2D0E940C0A06C0E09480914702E822B8 +:10380000E09247020E94130A2EC0312F3F70E32E30 +:10381000107F103219F0E29480EFE822002381F04B +:10382000013009F47EC0FF2009F488C0BB2009F4F0 +:103830007EC0F601858180FFC7CF8F70858377C0FA +:103840002091660322FF4AC0FF2009F441C0EE2008 +:1038500039F080916B03E82AE0926B030E94130A0F +:1038600080E00E94300B292D2850330B2430310585 +:1038700020F40E94E6050E94D30BAA20A9F08091B3 +:10388000450280FD11C0F6011282859585958595CA +:103890000E949513C6010E947F178091450285956D +:1038A000859585950E944B1360E0C6010F900F909F +:1038B0000F900F90DF91CF911F910F91FF90EF909C +:1038C000DF90CF90BF90AF909F908F900C948C1111 +:1038D00080E00E94FE0AEE2031F28ACFFF20A1F0A4 +:1038E000909148028E2D892BB11003C00E94F40ADA +:1038F000BACFE1E0BE12FACF22FDB5CF891709F4A5 +:10390000B2CF80934802AFCFB11006C00E94060A22 +:103910008E2D0E94ED0AA7CFF1E0BF1609F4A3CFC8 +:10392000F5CFFF2031F022E02B1508F49CCF8E2D2F +:10393000DDCF31E03B1508F496CFEACFBB2041F351 +:10394000093369F4FFEF27EE33E0F15020403040B7 +:10395000E1F700C00000802F0E94FE0A84CF8FE3B1 +:103960009CE90197F1F7F5CF812F869586958370B5 +:1039700061F0813009F077CFC8019370F11002C077 +:1039800090E080E00E94BA056ECFC8019370F110FC +:1039900002C090E080E00E94D00565CF802FFF201C +:1039A00029F00E94C8070E94E6065DCF0E940D071D +:1039B000FACF812F837009F03FC0F11054CF402F10 +:1039C000429546954770440F440F802F8F7090E0CA +:1039D000042E02C0880F991F0A94E2F730E020E01D +:1039E00004FF09C02FE030E002C0220F331F4A95C8 +:1039F000E2F720953095169516951370123099F0D0 +:103A000078F44091490250914A02113039F0822BEA +:103A1000932B842395230E94D20A25CF842B952BA8 +:103A2000822B932BF8CF822B932B2091490230913C +:103A30004A0282279327EFCF8695FF2011F0812F2E +:103A40008170882309F40FCF402F42954695477027 +:103A5000440F440F802F8F7090E0042E02C0880F17 +:103A6000991F0A94E2F730E020E004FF09C02FE03C +:103A700030E002C0220F331F4A95E2F720953095BF +:103A8000169516951370123099F078F440919A03B8 +:103A900050919B03113039F0822B932B8423952373 +:103AA0000E943413E0CE842B952B822B932BF8CFDE +:103AB000822B932B20919A0330919B03822793278B +:103AC000EFCF1F70FF2029F0812F0E949513802FC8 +:103AD0000DCF802F0E94ED0A812F0E944B13C3CE81 +:103AE000023F71F160F4003FB9F0013F81F0FF2027 +:103AF00009F459C0B11068CE812F8F7125C0033FE2 +:103B000031F1043FA1F78091660382FF2EC0812F1F +:103B10008F71FF2011F318C0FF2069F091E09B1511 +:103B200008F4A1CE1F7181E090E002C0880F991FB8 +:103B30001A95E2F7BFCFE2E0EB1508F494CEF2CF8E +:103B4000812F8F71F110C9CF0E9495138CCE90E018 +:103B500080E0FF2009F4A4CF1F7181E090E002C053 +:103B6000880F991F1A95E2F79BCFFF2089F01F71EC +:103B7000812F0E9495138091660382FD07C0F8E0B3 +:103B80001F9FC0011124836080934502812FDCCFE9 +:103B900081E00E945C1321E02B1508F064CE82E0E6 +:103BA0000E945C1360CEBB2079F0093341F43FEFF3 +:103BB00087EE93E0315080409040E1F7CACEEFE3CA +:103BC000FCE93197F1F7C5CE812F8F7186CF003197 +:103BD0003FE5130709F470CA01319FE51907A9F4FD +:103BE00082E06BCA61E0C6010E948C118C01F60173 +:103BF00082818111B1C90031FFE51F0709F462CA52 +:103C000001312FE5120709F461CAF801E058FF45B8 +:103C1000E730F10508F072CAE65EF14D0C94482DCC +:103C2000CF93DF9380910002807FA1F48091FD010A +:103C3000882381F080914402D09103026091FB01BE +:103C40007091FC01A091FE01B091FF01C62FC72326 +:103C5000D81303C0DF91CF91089590E0109711F031 +:103C6000CF3F19F401968770F3CF9C0143E0220FF8 +:103C7000331F4A95E1F7F901EC5FFD4F418147138E +:103C8000F1CF40814613EECF42814111EBCF43810A +:103C900054814A1B5B0B403A510520F7809100028A +:103CA0008F70806180930002F901E75FFD4F808192 +:103CB0008F70806180838BEF91E00E947F17DF918E +:103CC000CF910C94580AAF92BF92CF92DF92EF92AD +:103CD000FF920F931F93CF93DF93CDB7DEB7659716 +:103CE0000FB6F894DEBF0FBECDBF8C0185E0F801A2 +:103CF000DE01519601900D928A95E1F7F801E2807C +:103D00006BEFA62E61E0B62E6091FE017091FF016F +:103D10006115710509F468C19091FB014091FC01A6 +:103D2000892F84238F3F09F45FC120813181C380B3 +:103D3000D480F090FD01F601E61BF70BFF2009F49B +:103D40001DC180910002582F507FE03AF10508F024 +:103D5000D0C0511181C0FE2C43132BC0921329C037 +:103D60006091010270910202F80146815781641747 +:103D70007507F9F4E1101DC08F7080618093000217 +:103D8000C5010E947F1780910002F80185838F2D65 +:103D900065960FB6F894DEBF0FBECDBFDF91CF9111 +:103DA0001F910F91FF90EF90DF90CF90BF90AF9059 +:103DB0000895CD2829F0822F83238F3F09F02FC14A +:103DC00080E0F82FF170DF2E80FF3CC0809144022C +:103DD00040910302841315C0298B3A8B89899A89F3 +:103DE0000E945211292F22952F702230F8F0243092 +:103DF00020F59F70F9F0F8019581907FD9F4D12CCE +:103E00001FC090E0FC0153E0EE0FFF1F5A95E1F751 +:103E1000EC5FFD4F5181351306C05081251303C05F +:103E20005281E5120FC001968770D4CF9F7011F0B8 +:103E3000882329F3805E883010F3C8010E947F1721 +:103E4000FD2CA5CFEE2009F4A2CF80910002816065 +:103E500080930002F12C9BCF43131BC0921319C017 +:103E60004091010250910202F801268137814217E8 +:103E7000530779F4E1100DC08583C8010E947F17B4 +:103E800088E0F801ABEFB1E001900D928A95E1F77F +:103E90007ECFC8010E945E11882339F1EE2029F1FE +:103EA000809100028032A0F02091FB013091FC0152 +:103EB0003A8729871B86DD86CC868E878091010212 +:103EC00090910202988B8F87CE0109960E947F17EE +:103ED00088E0F801ABEFB1E001900D928A95E1F72F +:103EE0000E94101EFF24F39452CFC8010E947F1736 +:103EF000F9CF51110AC08BEF91E00E947F1788E043 +:103F0000F50111928A95E9F7A5CF431318C09213D2 +:103F100016C04091010250910202F80126813781BA +:103F20004217530761F4E1100AC08583C8010E945B +:103F30007F1788E0F50111928A95E9F728CFC8012B +:103F40000E945E11882389F2EE2079F280910002AE +:103F5000803208F4BDCF2091FB013091FC013A83FF +:103F600029831B82DD82CC828E8380910102909115 +:103F7000020298878F83CE010196A8CFE03AF1051F +:103F8000C0F6FE2CEE2009F4B0CF43131FC09213ED +:103F90001DC02091010230910202F80186819781B3 +:103FA0002817390799F49091000290FD69CF907F0E +:103FB00009F466CF809100028583903F09F45DCFBC +:103FC000982F907F905F8F70892B56CFC8010E94E9 +:103FD0005E1181117DCF809100028160809300028B +:103FE000C8010E947F17D3CEEE2009F47ECFC8010E +:103FF0000E945E11F82E882309F477CF88E0F8013B +:10400000ABEFB1E001900D928A95E1F78091FB0151 +:104010009091FC010E9452110E94101EB8CE81E0C6 +:104020008E25CFCECF93DF93CDB7DEB760970FB697 +:10403000F894DEBF0FBECDBF29873A874B875C87D8 +:104040006D877E878F87988BCE0109960E94631EAD +:10405000811112C088E0FE013996DE0111960190AF +:104060000D928A95E1F78C859D85892B29F08985AC +:104070009A8589238F3FA9F580914402909103028C +:1040800089131CC060960FB6F894DEBF0FBECDBF7B +:10409000DF91CF91089593E0AA0FBB1F9A95E1F7A6 +:1040A000AC5FBD4F98E0FE01319601900D929A955C +:1040B000E1F7809303020E94580ADECFB8E08B9F9D +:1040C000C00111248C5F9D4F0E94631E8823D1F292 +:1040D0008091440290E00196877099278093440272 +:1040E000CBCFA0910302B0E0CD0101968770992754 +:1040F000209144022817190671F610926B030E9452 +:104100003514109203021092440288E0EBEFF1E0C4 +:10411000DF011D928A95E9F7AFCF0F931F93CF93DD +:10412000DF938091ED02E091EC02CCE081111AC0A6 +:10413000DF91CF911F910F910895D1E0DE0FD093C1 +:10414000EC020E2F10E0EC9FF0011124E251FD4F24 +:1041500083819481892B29F08081918189238F3FEC +:1041600051F4ED2F8091ED02E81738F31092ED0233 +:104170001092EC02DDCFC09FD001C19FB00D112481 +:10418000A251BD4F16968D919C911797892B29F4BA +:1041900018968D919C91019651F420813181428134 +:1041A000538164817581868197810E941220C09F0E +:1041B000F001C19FF00D1124E251FD4F14821382D2 +:1041C000D0CF109259031092580310924901809158 +:1041D0005703809356030E9420060C948D202F9243 +:1041E0003F924F925F926F927F928F929F92AF9287 +:1041F000BF92CF92DF92EF92FF920F931F93CF93D4 +:10420000DF93C0915603E7E0FE2E01E010E0FCE0F2 +:104210002F2EAEEFEA2E809157038C1316C00E940A +:104220008D20DF91CF911F910F91FF90EF90DF9044 +:10423000CF90BF90AF909F908F907F906F905F9046 +:104240004F903F902F900C942006D0E0FE01EE0F8F +:10425000FF1FE25BFC4F80819181F89EF001F99E87 +:10426000F00D1124E15EFE4F2481211158C03090E1 +:10427000ED02AEEEB2E030E020E0412C5F0123150C +:1042800008F04BC01A966D907C901B97F5018080CA +:1042900091804FEF5FEF512CC52CD12CF601EE0F22 +:1042A000FF1FE80DF91D659174916616770609F4F4 +:1042B000A601672B11F05394EFCF4F3F5407B1F194 +:1042C000B80102C0660F771F4A95E2F7462AA80197 +:1042D00002C0440F551F5A94E2F741505109441649 +:1042E000150601F5229EF001239EF00D1124E251E6 +:1042F000FD4FF89ED001F99EB00D1124A15EBE4F76 +:1043000012962D913C91139737832683E082E182A8 +:104310009187808771E015967C930E94F205219623 +:10432000C37079CF14961C921E9213972F5F3F4F44 +:104330001C96A5CF2F923F924F925F926F927F92E1 +:104340008F929F92AF92BF92CF92DF92EF92FF92A5 +:104350000F931F93CF93DF93CDB7DEB769970FB657 +:10436000F894DEBF0FBECDBF498B5A8B6B8B7C8B15 +:104370008D8B6111109247021D861E861F86188A3A +:1043800085E0FE017196DE01199601900D928A95E5 +:10439000E1F78C859D85892B31F089859A85892364 +:1043A0008F3F09F0D4C129853A854B855C856D85A1 +:1043B0007E858F8598890E941220C3C028EFC2167F +:1043C0002CE5D20629F4882379F00E94E120EBCF76 +:1043D00039EFC3163CE5D30639F4882329F08091E0 +:1043E00049018111F2CFC3C10FE111E0E12CB12CE1 +:1043F000A12C88248394912C9EEF592E442443941D +:10440000F8016081718166246A94762C20E0422F45 +:1044100050E0FA01EE0FFF1FE60FF71F8591949110 +:10442000C816D90609F43A01892B11F02F5FEFCF96 +:10443000F12CFFEF6F167F0609F445C0F8014481A7 +:10444000F09049018F2D411180E0F82FF170FF2E7F +:10445000F801258086819B85992309F408C1FF20F6 +:1044600009F405C1211014C0A40101C0440F6A94CD +:10447000EAF7842B86838091EA029091EB028039DF +:10448000914030F440E951E05093EB024093EA024E +:10449000C40102C0880F991F2A95E2F70197F8011D +:1044A00026812817190679F48091580390915903B1 +:1044B000009709F45FC00E9475058139914008F4A6 +:1044C00059C0F8014482EF28FFEFAF1ABF0A095F15 +:1044D0001F4F26E0A216B10409F092CF8B858823E6 +:1044E00009F420C1EE2009F41DC10E9484059093B7 +:1044F0005903809358038091ED02883010F591E0C4 +:10450000980F9093ED0298E0FE013996DE01119626 +:1045100001900D929A95E1F73CE0839FC001112430 +:1045200082519D4F28E0FE013196DC0101900D92F1 +:104530002A95E1F72FEF3FEFFC0131872087D386E3 +:10454000C28669960FB6F894DEBF0FBECDBFDF916D +:10455000CF911F910F91FF90EF90DF90CF90BF9080 +:10456000AF909F908F907F906F905F904F903F9013 +:104570002F9008958091560360905703982FF0E094 +:10458000E0E0861114C0909356030E171F0709F43C +:104590009ACF90E0FC01EE0FFF1FE25BFC4FB1826F +:1045A000A082019683709927809357038CCF282E81 +:1045B000312CF101EE0FFF1FE25BFC4F20813181B6 +:1045C000F7E0F29FD001F39FB00D1124A15EBE4F22 +:1045D0002D913C911197398F288F712C60E070E0FC +:1045E000E72FF0E0EE0FFF1F288D398DE20FF31F4C +:1045F0002591349121153105E1F0F8010190F08108 +:10460000E02DFF8BEE8B60E005C02417350709F421 +:104610007F2C6F5FE62FF0E0EE0FFF1F4E895F8962 +:10462000E40FF51F459154914115510571F77F5FD6 +:10463000D7CF7720C9F0F801671708F0FD01448251 +:104640000E171F0721F490935603F72C3CCF9813B5 +:1046500005C0AE17BF0711F49F5F937091012F5FE4 +:104660003F4F822F83708DCFF0E0E0E0F7CF90E0F6 +:1046700021101FC0B40102C0660F771F2A95E2F710 +:104680009B01215031092817390731F4442309F4DB +:1046900047C0C5010E94F205C40101C0880F6A9499 +:1046A000EAF7982F9095F801868189238683F22C6A +:1046B0000ACF9C01062C02C0359527950A94E2F793 +:1046C000A90141705527BC016150710986239723C8 +:1046D000892B11F5452B01F1F80182819381892BFA +:1046E000C1F01B821C821D821E8259825A820E9446 +:1046F00084058160582F9D838C83F801828193818A +:104700008F83988729813A814B816D817E810E94B8 +:104710001220F8011582C0CFF22FF1702F2EBCCFDE +:104720002F2CBACF9091560380915703981731F0F0 +:104730000E94EF20EE2009F436CE03CF0E948D2098 +:1047400010925903109258030E942006F3CF61E0A3 +:10475000CE0109960E948C116C018B85F7EFCF1664 +:10476000FCE5DF0609F02ACE882309F43DCE81E07E +:104770008093490118CE9F92AF92BF92CF92DF9261 +:10478000EF92FF920F931F93CF93DF9300D000D04F +:1047900000D0CDB7DEB78E010F5F1F4F86E0F80166 +:1047A00011928A95E9F78CE7C82E81E0D82EF12C7A +:1047B000E12CAA24A394B12CF60181916F018F3FC3 +:1047C00009F443C0F894E82FE295EF70F0E021A1DE +:1047D0008F70A50102C0440F551F8A95E2F7CA01E8 +:1047E000922F982B91A392A18095892382A37894EC +:1047F00000C0E2E8F1E0912C31E021912F3F09F473 +:104800006EC0A22FA295AF70B0E090968C9190E010 +:104810002F7002C0959587952A95E2F780FD5FC0BD +:10482000832F982A330F51E0E638F50731F7F60168 +:10483000319780818F3F11F00E94240880EA8A9589 +:10484000F1F7F801EE0DFF1D9082EFEFEE1AFE0A70 +:10485000F6E0EF16F10409F0AFCF46E050E0B80102 +:104860008FE592E00E94E72DFF24F394009709F46E +:10487000F12C892BB1F186E0F801AFE5B2E00190AF +:104880000D928A95E1F781E080934D020E948405A4 +:1048900090934C0280934B0280914B0290914C027A +:1048A0000E947505059708F180915F02809373025D +:1048B00080916002809374028091610280937502FE +:1048C00080916202809376028091630280937702E6 +:1048D000809164028093780210924D0206C080E0BD +:1048E000A0CF80914D028111D7CF809149018823BB +:1048F00001F180915803909159030097D1F00E94E3 +:1049000075052091EA023091EB022817390788F4E7 +:104910009091560380915703981709F47EC00E9426 +:10492000EF201092EB021092EA02109259031092BB +:10493000580380915A02882371F080915802909117 +:1049400059020E947505893E934028F082EE0E942C +:10495000FE0A10925A0280915702882391F08091AA +:104960005502909156020E947505883E934048F08A +:104970000E948405909356028093550283E70E941B +:10498000D90F8091530290915402992309F44EC09B +:10499000811130C080915102909152020E947505A0 +:1049A00081369A4E78F080914F0290915002019694 +:1049B0009093500280934F020E948405909352027C +:1049C0008093510280914F02909150024F9708F4CA +:1049D0005CC010921C018CE180931D0180931E012C +:1049E0008FE00E94011481E08093530210925002E4 +:1049F00010924F028F2D26960FB6F894DEBF0FBE91 +:104A0000CDBFDF91CF911F910F91FF90EF90DF907D +:104A1000CF90BF90AF909F9008950E948D201092EC +:104A20005903109258030E94200683CF8111E2CFD0 +:104A300080914E02882361F022E148E76FEF8FE01A +:104A40000E941A0F26E148E76FEF8FE00E941A0FCD +:104A500080915702882371F228E148E76FEF8FE0D9 +:104A60000E941A0F29E148E76FEF8FE00E941A0FAA +:104A70002AE148E76FEF8FE00E941A0F2BE148E729 +:104A80006FEF8FE00E941A0FB5CF28E044E666EE84 +:104A900080E00E941A0F29E044E666EE80E00E9462 +:104AA0001A0F2DE044E666EE80E00E941A0FC0CF98 +:104AB00090E080E00E94A02D893E9E4F11F40C945E +:104AC000CC1180E008951F920F920FB60F9211241F +:104AD0002F933F934F935F936F937F938F939F9306 +:104AE000AF93BF93CF93DF93EF93FF93D091E90000 +:104AF000DF708091EC00C82FC17080FDC0E810927B +:104B0000E9008091F000877F8093F00078940E9404 +:104B100048141092E9008091F00088608093F000C2 +:104B2000CD2BCF70C093E900FF91EF91DF91CF9132 +:104B3000BF91AF919F918F917F916F915F914F91B5 +:104B40003F912F910F900FBE0F901F9018951F92BD +:104B50000F920FB60F9211242F933F934F935F93B1 +:104B60006F937F938F939F93AF93BF93EF93FF9335 +:104B70008091E10082FF09C08091E20082FF05C0C0 +:104B80008091E1008B7F8093E1008091DA0080FFCB +:104B900024C08091D80080FF20C08091DA008E7FF1 +:104BA0008093DA008091D90080FF9DC080E189BDAB +:104BB00082E189BD09B400FEFDCF81E080939003BE +:104BC00080916A03811109C00E94E7030E94B20428 +:104BD0008091E20084608093E2008091E10080FF98 +:104BE00017C08091E20080FF13C08091E2008E7FA9 +:104BF0008093E2008091E20080618093E2008091E6 +:104C0000D80080628093D80019BC85E0809390031F +:104C10008091E10084FF2BC08091E20084FF27C0D7 +:104C200080E189BD82E189BD89B5982F917080FFAF +:104C3000FBCF8091D8008F7D8093D8008091E100D8 +:104C40008F7E8093E1008091E2008F7E8093E2006E +:104C50008091E20081608093E2008091910388233B +:104C600009F447C084E08093900380919003809181 +:104C7000E10083FF27C08091E20083FF23C0809181 +:104C8000E100877F8093E10082E08093900310929F +:104C900091038091E1008E7F8093E1008091E2009A +:104CA0008E7F8093E2008091E20080618093E20039 +:104CB00042E060E080E00E9480048091F000886023 +:104CC0008093F000FF91EF91BF91AF919F918F91F1 +:104CD0007F916F915F914F913F912F910F900FBEF8 +:104CE0000F901F90189519BC1092900310926A03B0 +:104CF00074CF8091E30087FD93E090939003B5CF4C +:104D000078941F921FB61F9211248F939F93AF9395 +:104D1000BF938091610390916203A0916303B0916E +:104D200064030196A11DB11D8093610390936203FA +:104D3000A0936303B0936403BF91AF919F918F9150 +:104D40001F901FBE1F9018951F921FB61F9211240F +:104D50008F939F93AF93BF9380916003811113C092 +:104D60008091610390916203A0916303B091640309 +:104D70004196A11DB11D8093610390936203A0939E +:104D80006303B0936403BF91AF919F918F911F9084 +:104D90001FBE1F901895CDB7DEB7EE970FB6F894EB +:104DA000DEBF0FBECDBF84B7877F84BF0FB6F89438 +:104DB000A8958091600088618093600010926000E7 +:104DC0000FBE80E890E00FB6F89480936100909356 +:104DD00061000FBE85B7806885BF85B7806885BFD5 +:104DE00082E298E09093CB018093CA010E94E7038E +:104DF0000E94B2048091E20084608093E200789483 +:104E0000809190038823A1F01091E9001F70909188 +:104E1000EC00892F817090FD80E8182B1092E9003A +:104E20008091E80083FD0E9448141F701093E900F0 +:104E300082E084BD93E095BD9AEF97BD80936E00AC +:104E40000E94CC11811102C00E94D4100CE711E025 +:104E500022E8C22E21E0D22ED8018D918D018F3F04 +:104E600011F00E942408C016D106B1F786EF0E9407 +:104E7000240887EF0E94240883E90E94240886E919 +:104E80000E94240886E0E3E7F2E0DF01282F1D926C +:104E90002A95E9F7EFE5F2E0DF011D928A95E9F73F +:104EA0000E945825811102C00E94131782E090E0F1 +:104EB0000E94922D80936C0284E090E00E94922DDB +:104EC000182F82E290E00E94922D982F812F9093CC +:104ED0006603809365030E94BB23EFE3FCE93197EF +:104EE000F1F700C000000E94BB238091730280FF95 +:104EF00008C06FEF7FEF90E080E00E94C42D0E9419 +:104F0000770C83E090E00E94922D90E00E94D20AFC +:104F100080919A0390919B030E94E112509A589AB3 +:104F2000559A5D9A549A5C9A8CE090E00E94922D7A +:104F300090E0B0E0A0E080935B0290935C02A093CD +:104F40005D02B0935E0280916502811132C00E94C1 +:104F50005825811104C00E9413170E94251488E06F +:104F600090E00E949A2D6093E5027093E602809390 +:104F7000E7029093E8026E7F71F40E94251488E0A6 +:104F800090E00E949A2D6093E5027093E602809370 +:104F9000E7029093E8020E94370610928D028091FA +:104FA000E50280FF03C086950E94011481E0809392 +:104FB00065025198599A52985A9A89B1869581708A +:104FC0004A994DC290E0892B80936A0260916503F3 +:104FD0006068609365031091660384E090E00E942E +:104FE000A62D612F82E290E00E94A62D81E20E9410 +:104FF000011481E090E00E94341380E091E09093EE +:105000005D0380935C0308E1C02ED12C83E792E01E +:1050100096E0B92EB80E80919003853019F510E412 +:10502000912E8824839400E112E1809190038530D1 +:1050300009F417C210926B030E9435140E94E60512 +:105040000E94D30B1092670280916602882341F080 +:105050008091E50281608093E50286950E940114AB +:105060000E94E5110E94BB23882359F08FB7F89462 +:1050700040916103509162036091630370916403F6 +:105080008FBFA3E7B2E0EDE6F2E010E000E0302FE2 +:105090008D919191981709F43DC2292F282790E00E +:1050A00099249394422F492109F42FC29DAB3EAB22 +:1050B000892191E009F490E09FAB0E948405816012 +:1050C000782F99AF88AF4DA95EA96FA989AD0E94CD +:1050D0009A21F801E359FD4F8081982690828091B2 +:1050E0008D028823D1F180918C02E091E502E69552 +:1050F000E81BE0938802823009F023C2F0E0EA5511 +:10510000FD4FE4910E2F10E0B5EC8B2EBFE09B2EEF +:1051100080918902882361F0109289020E9484059F +:10512000909387028093860210928B0210928A02DB +:105130000E948405E0918602F09187028E1B9F0BEE +:105140008F3F9F4750F4E00FF11FF0938702E093E9 +:10515000860286E892E0F4010995E0916A02EE0F7A +:10516000EE0FE0936A0289B181FBEE24E0F84A99E0 +:1051700042C280E08E29E82BE0936A02EF70F0E0F3 +:10518000EA57FE4F808190916902890F80936902EE +:1051900020E0843034F1809168028F5F8093680250 +:1051A00012E018AB19AA81E08AAB0E9484058160E5 +:1051B000782F9CAB8BAB48A959A96AA98CA90E94EE +:1051C0009A211BA71CA61DA60E9484058160782F2A +:1051D0009FA78EA74BA55CA56DA58FA50E949A21C0 +:1051E00021E0809169028D3F2CF580916802815009 +:1051F000809368021EA21FA281E088A70E948405F6 +:105200008160782F9AA789A74EA15FA168A58AA57A +:105210000E949A2119A21AA21BA20E9484058160F1 +:10522000782F9DA38CA349A15AA16BA18DA10E94A7 +:105230009A2121E080916902082E000C990B64E00C +:1052400070E00E94122D80936902222359F08FB7DB +:10525000F8944091610350916203609163037091EF +:1052600064038FBF86E0E0E8F2E0DE011196019072 +:105270000D928A95E1F790908202809083021091BE +:105280008402009185021092820210928302109291 +:10529000840210928502892D882909F448C08091E2 +:1052A0007E0290917F020E9475059C0190917A0286 +:1052B000992309F490C323333105C8F19F3F19F0B6 +:1052C0009F5F90937A02992059F00E94A8079FEF60 +:1052D00019140CF491E0899F802D1124809382028F +:1052E000882059F00E94A8079FEF18140CF491E051 +:1052F000899F802D11248093830230918202332371 +:10530000B1F020918302222391F045EB3403C001D8 +:105310001124992309F472C19093820245EB24036E +:1053200090011124332309F46DC130938302812F3E +:10533000802B09F448C080917C0290917D020E94EC +:1053400075059C0190917902992309F43FC3253694 +:105350003105C8F19F3F19F09F5F909379021123A7 +:1053600059F00E9486079FEF11160CF491E0899F77 +:10537000802D112480938402002359F00E94860717 +:105380009FEF10160CF491E0899F802D11248093DB +:105390008502309184023323B1F0209185022223CB +:1053A00091F045EB3403C0011124992309F42EC177 +:1053B0009093840245EB240390011124332309F4D4 +:1053C00029C1309385028091820290918302892BBA +:1053D00090918402892B90918502892B11F00E9473 +:1053E000E60686E0FE013196A0E8B2E001900D925B +:1053F0008A95E1F70E94E60590916B02891731F0DA +:105400000E94E60580936B020E94D30B809190036B +:10541000843009F000CE83E08093E9008091E800B9 +:1054200082FFF9CD8091E80090E085FF06C00E94E0 +:105430000604882309F4F2C091E08091E8008B779C +:105440008093E800992309F4E6CDE981E150E33146 +:1054500008F066C1F0E0EF5DF14D0C94482D92E04C +:10546000B2CD80919003843009F440C080E00E9466 +:10547000D30B10928D0280916702811116C0809229 +:1054800067028091E502982F9170909366028E7F5B +:105490008093E502FFEF20E742E0F15020404040DA +:1054A000E1F700C000000E949B0C109260030FB651 +:1054B000F894A895C09260000FBE9092600083B7E8 +:1054C000817F846083BF83B7816083BF7894889530 +:1054D00083B78E7F83BF0FB6F894A8958091600044 +:1054E000886180936000109260000FBE80918F03EE +:1054F000882309F49ACD0E94BB23E3E7F2E081916F +:10550000811143C2BE12FBCF90CD9F5F990C9430A6 +:1055100009F0C8CD0F5F1F4F0630110509F0B7CD58 +:105520008FEF8AAF8BAF1CAE0E9484058160782F0D +:105530009EAF8DAF4AAD5BAD6CAD8EAD0E949A2132 +:10554000CECD863059F4F0E0ED55FD4FE4910E2FAD +:1055500010E0A5EB8A2EAFE09A2EDACD893061F407 +:10556000E695F0E0E056FD4FE4910E2F10E0FDEDE2 +:105570008F2EFEE09F2ECCCD8F3061F4E695F0E0CB +:10558000E356FD4FE4910E2F10E0E3E68E2EEEE0A1 +:105590009E2EBECD853159F4F0E0E656FD4FE491E4 +:1055A0000E2F10E070EF872E7DE0972EB1CD08E230 +:1055B00010E040E6842E4DE0942E883109F4A8CD09 +:1055C000833249F4E8E9F2E0059114916CE5862E06 +:1055D0006FE0962E9DCD04EF11E053E2852E5DE045 +:1055E000952E843209F494CD00ED17E036E3832E36 +:1055F00036E0932E8DCD82E090E0BCCD81E08093AB +:1056000082028CCE81E08093830291CE81E08093F0 +:105610008402D0CE81E080938502D5CE00E210E0F6 +:10562000CE0101964C018091E80085FD0AC0809171 +:10563000E8008B778093E8000E940604882399F3A2 +:10564000FBCE8091F100D4018D934D0101501109E1 +:1056500051F7F2CE1A8289E08B832DC08A81823085 +:1056600009F4ABC18330A9F0813009F059C02FB7DC +:10567000F89460916103709162038091630390914B +:1056800064032FBF0E944E2D6B837C838D839E838A +:1056900012C0809173028B83809174028C838091FD +:1056A00075028D83809176028E83809177028F833D +:1056B00080917802888780919003843009F0ABCC88 +:1056C0001091E9001F709091EC00892F817090FD7E +:1056D00080E8182B82E08093E9008091E80080FF49 +:1056E0000DC050E040E060E270E0CE0101960E9403 +:1056F00037048091E8008E778093E8001F70109344 +:10570000E90089CC8A81823059F46B817C818D815A +:105710009E810E944E2D86E290E00E94A62DCBCF66 +:105720008FEF8983C8CF4C816B818A810E94E310FF +:105730009827892798279E838D83BDCF8D809E8053 +:105740009824892498248A810B81B8E00B9F8001DA +:105750001124E0E38E9F000D111D11248C8190E037 +:10576000880F991F080F191F692DC80187960E947D +:10577000A62D682DC8018896D0CF0E946A109BCFB5 +:105780008A818138C1F060F4803809F094CF20E03C +:105790004B816091E7028091E6020E940D128BCF4F +:1057A000823849F1833809F086CF20E04091E80241 +:1057B0006C818B81F2CF8B810E9401149B8180913F +:1057C000E502911111C08E7F8093E50210928D0247 +:1057D000FFEF20E742E0F15020404040E1F700C0F9 +:1057E00000000E949B0C67CF81608093E502869544 +:1057F0000E94011460CF8B818093E9025CCF8A8183 +:10580000813899F030F4803809F055CF8091E80262 +:1058100023CF823891F0833809F04DCF8091E60292 +:105820008B838091E7028C8346CF8091E50280FFD5 +:1058300002C0869511CF80E00FCF8091E9020CCF96 +:105840006091E5027091E6028091E7029091E80292 +:105850000E94FB1130CF80E18A832DCF81E08A83C3 +:1058600089EFFACE0A811B81102701271027CE016C +:1058700001963C018C80DC01A80DB11D4D01C801D1 +:10588000895F9D4F8614970409F415CF093FB1E055 +:105890001B0750F40E94922DF30184830F5F1F4F6A +:1058A000BFEF6B1A7B0AEBCFD30114961C92F6CF95 +:1058B0000A811B81102701271027FE0131963F0125 +:1058C0008C80800E912E911CC801895F9D4F80169F +:1058D000910609F4F0CE093FF1E01F0728F4D30147 +:1058E00014966C910E94A62DBFEF6B1A7B0A0F5F76 +:1058F0001F4FEACF0E945A10DECE8AE0ADCF0A8158 +:105900001B81102701271027FE0131963F018C8053 +:10591000CF01880D911D4C01C8018796861497040C +:1059200009F4C9CE003EA1E01A0750F40E94922D5E +:10593000F30184830F5F1F4FBFEF6B1A7B0AECCF1D +:10594000D30114961C92F6CF0A811B8110270127E0 +:105950001027FE0131963F018C80800E912E911C04 +:10596000C80187968016910609F4A5CE003EF1E0A5 +:105970001F0728F4D30114966C910E94A62DBFEF47 +:105980006B1A7B0A0F5F1F4FEBCF09BD19BD09B41E +:1059900000FEFDCF8091D8008F7D8093D80080914C +:1059A000E00082608093E0008091E00081FDFCCF08 +:1059B00010926B030E94351438CB86E290E00E946F +:1059C000922D1B821C821D828E8375CE2D3231401A +:1059D00008F0C2CCF8CC2D32314008F071CCA7CC05 +:1059E00087FB082E062687FD819567FD61950E943D +:1059F000862D0EF4919507FC81950895AA1BBB1B7B +:105A000051E107C0AA1FBB1FA617B70710F0A61BBE +:105A1000B70B881F991F5A95A9F780959095BC01DF +:105A2000CD01089597FB072E16F4009407D077FD5B +:105A300009D00E94FE2C07FC05D03EF4909581957C +:105A40009F4F0895709561957F4F0895A1E21A2E9A +:105A5000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F12 +:105A6000A217B307E407F50720F0A21BB30BE40B62 +:105A7000F50B661F771F881F991F1A9469F76095A9 +:105A80007095809590959B01AC01BD01CF01089563 +:105A9000EE0FFF1F0590F491E02D099469279627DA +:105AA000692778278727782708950E945D2D33235B +:105AB00012F48A1B9B0B0C946E2DA29FB001B39F16 +:105AC000C001A39F700D811D1124911DB29F700D07 +:105AD000811D1124911D08950E945D2DB7FF089529 +:105AE000821B930B08950E945D2DA59F900DB49F7E +:105AF000900DA49F800D911D11240895B7FF0C9463 +:105B0000732D0E94732D821B930B0895991B79E0CE +:105B100004C0991F961708F0961B881F7A95C9F73D +:105B200080950895F999FECF92BD81BDF89A992785 +:105B300080B50895A6E1B0E044E050E00C94CC2D8F +:105B4000A8E1B0E042E050E00C94CC2D262FF9996A +:105B5000FECF92BD81BDF89A019700B4021639F0CC +:105B60001FBA20BD0FB6F894FA9AF99A0FBE08959D +:105B70000396272F0E94A72D0E94A62D252F0E9455 +:105B8000A72D242F0C94A72D0196272F0E94A72D17 +:105B90000C94A62DDC01CB01FC01F999FECF06C0C7 +:105BA000F2BDE1BDF89A319600B40D9241505040DB +:105BB000B8F70895FC014150504030F001900616AE +:105BC000D1F73197CF010895882799270895FB01D0 +:105BD000DC0104C08D910190801921F441505040A6 +:105BE000C8F7881B990B0895F894FFCF77117711A8 +:105BF000801180118211801180118011771177112D +:105C0000871180118011871130155815FB16581512 +:105C1000FB168B15AC15FB16AA16B716CB1BCB1BA8 +:105C2000051C051CB41CCE1C331C331CD91C611D67 +:105C3000701D701D68186C1989199D19AB19E01930 +:105C4000121A2A2B2E2B822B932B9E2BBD2BC02B73 +:105C5000FF2B202C902B902B2B2C2E2C322C582CC5 +:085C60007A2C7D2C7F2CA42C72 +:105C68007205370C160C120C0E0C710501191A1B53 +:105C78001C1D1E1F202122010201001C001C1CCA21 +:105C8800002A00000000C4004C00000000BE0050C4 +:105C980000000000B8005100000000B2004F0000F2 +:105CA8000000AC0052000000000101818283E20084 +:105CB800E900EA00B500B600B700CD008301CC00CA +:105CC8008A0192019401210223022402250226025C +:105CD80027022A02B300B4006F007000F034353692 +:105CE8006667F6F7939600FF0100010000FFFF00CA +:105CF80000010001FF000001020202020606060977 +:105D080009090909090F0F0F0F0F0F151515181994 +:105D180019191919191919191923244022B6A80192 +:0A5D28008601D000BD06D606F6067F :00000001FF From 7b85255d728397f7b0351abdd4f7da61ad633530 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Tue, 30 Nov 2021 21:08:25 -0500 Subject: [PATCH 094/155] OLED-free version for slise.dc --- .../keymaps/via/aleblazer_zodiark_via.hex | 1517 +++++++++++++++++ .../aleblazer/zodiark/keymaps/via/rules.mk | 1 - keyboards/aleblazer/zodiark/rules.mk | 5 +- 3 files changed, 1520 insertions(+), 3 deletions(-) create mode 100644 keyboards/aleblazer/zodiark/keymaps/via/aleblazer_zodiark_via.hex diff --git a/keyboards/aleblazer/zodiark/keymaps/via/aleblazer_zodiark_via.hex b/keyboards/aleblazer/zodiark/keymaps/via/aleblazer_zodiark_via.hex new file mode 100644 index 000000000000..3415b408cfd9 --- /dev/null +++ b/keyboards/aleblazer/zodiark/keymaps/via/aleblazer_zodiark_via.hex @@ -0,0 +1,1517 @@ +:100000000C948D030C94D4030C94D4030C94D4035B +:100010000C94242C0C94D4030C94D4030C94D4038B +:100020000C94D4030C94D4030C942B240C94E72349 +:100030000C9428250C94D4030C94D4030C94D4036E +:100040000C94D4030C94D4030C94D4030C94D403D4 +:100050000C94D4030C9404250C94D4030C94D40372 +:100060000C94D4030C94D4030C94D4030C94D403B4 +:100070000C94D4030C94D4030C94D4030C94D403A4 +:100080000C94D4030C94D4030C94D4030C94D40394 +:100090000C94D4030C94D4030C94D4030C94D40384 +:1000A0000C94D4030C94D4030C94D40305010902DA +:1000B000A10185020901A1000509190129081500FE +:1000C0002501950875018102050109300931158165 +:1000D000257F95027508810609381581257F9501D0 +:1000E00075088106050C0A38021581257F95017572 +:1000F000088106C0C005010980A101850319012AF4 +:10010000B700150126B700950175108100C0050CD8 +:100110000901A101850419012AA002150126A002E6 +:10012000950175108100C00660FF0961A101096297 +:10013000150026FF00952075088102096315002629 +:10014000FF00952075089102C005010906A101056F +:100150000719E029E7150025019508750181029529 +:1001600001750881010507190029FF150026FF0008 +:100170009506750881000508190129059505750181 +:100180009102950175039101C0000000000000007C +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000007E0F00C2 +:1001B000D4FFFFFFC700000078000000000000002F +:1001C000002A2B28000000000000000000000000B2 +:1001D0000000000029000000002C1E3420212224F1 +:1001E000342627252E362D3738271E1F202122237F +:1001F0002425263333362E37381F04050607080911 +:100200000A0B0C0D0E0F10111213141516171819D6 +:100210001A1B1C1D2F3130232D3504050607080934 +:100220000A0B0C0D0E0F10111213141516171819B6 +:100230001A1B1C1D2F3130354C00047F3F1F6432C8 +:1002400014643214783C1E1E140A050001010101D9 +:100250000101010101020202020202020202030381 +:100260000303030303030404040404040405050551 +:100270000505060606060607070707070808080813 +:10028000090909090A0A0A0B0B0B0C0C0C0D0D0DC0 +:100290000E0E0E0F0F0F1010111111121213131456 +:1002A00014151516161717181819191A1A1B1B1CCE +:1002B0001D1D1E1E1F202021222223242425262628 +:1002C000272829292A2B2C2D2D2E2F30313232335D +:1002D0003435363738393A3B3C3D3E3F4041424366 +:1002E0004445464748494A4C4D4E4F50515354554A +:1002F0005658595A5B5D5E5F616264656668696BFA +:100300006C6D6F7072737577787A7B7D7E80828377 +:100310008587888A8C8E8F91939596989A9C9EA0BB +:10032000A2A3A5A7A9ABADAFB1B3B5B7BABCBEC0C8 +:10033000C2C4C6C9CBCDCFD1D4D6D8DBDDDFE2E491 +:10034000E7E9EBEEF0F3F5F8FAFDFFFFAA7F554081 +:100350002223252628292A2C2D2F303233353638D2 +:100360003A3B3D3E4042434547494A4C4E5051532B +:100370005557595A5C5E6062646668696B6D6F714F +:10038000737577797B7D7F81838587898A8C8E9051 +:10039000929496989A9C9E9FA1A3A5A7A8AAACAE5A +:1003A000AFB1B3B4B6B8B9BBBCBEBFC1C2C3C5C69A +:1003B000C7C9CACBCCCDCED0D1D2D2D3D4D5D6D743 +:1003C000D7D8D9D9DADADBDBDBDCDCDCDCDCDDDD81 +:1003D000DDDDDCDCDCDCDCDBDBDBDADAD9D9D8D771 +:1003E000D7D6D5D4D3D2D2D1D0CECDCCCBCAC9C713 +:1003F000C6C5C3C2C1BFBEBCBBB9B8B6B4B3B1AF4A +:10040000AEACAAA8A7A5A3A19F9E9C9A98969492E9 +:10041000908E8C8A89878583817F7D7B79777573C0 +:10042000716F6D6B6968666462605E5C5A5957559E +:100430005351504E4C4A4947454342403E3D3B3A5A +:100440003836353332302F2D2C2A292826252322E1 +:1004500029001E001F002000210022002F002B0079 +:1004600014001A000800150017002D0003510400A5 +:100470001600070009000A003500E1001D001B00FE +:10048000060019000500A800E000E200E300650096 +:1004900001512C0028002A002700260025002400F6 +:1004A000230030003100130012000C0018001C0063 +:1004B0002E00340033000F000E000D000B004C0026 +:1004C000280038003700360010001100C25C4F00D1 +:1004D00052005100500002512C00280001003A0047 +:1004E0003B003C003D003E00010054005F00600006 +:1004F000610053000100010039005C005D005E00F6 +:10050000530001000100010059005A005B00010086 +:1005100001000100010062006300580001000100B9 +:100520000100440043004200410040003F00010040 +:100530004500610060005F005400010001005300AD +:100540005E005D005C0001000100010001005B0035 +:100550005A00590001000100010001005800630029 +:10056000620001000100010001003A003B003C0074 +:100570003D003E00010054005F0060006100530038 +:100580000100010039005C005D005E0053000100C5 +:100590000100010059005A005B0001000100010048 +:1005A00001006200630058000100010001004400E6 +:1005B00043004200410040003F000100450061004F +:1005C00060005F0054000100010053005E005D0008 +:1005D0005C0001000100010001005B005A005900AD +:1005E00001000100010001005800630062000100E9 +:1005F0000100010001003A003B003C003D003E00CC +:1006000001000100010001000100010001000100E2 +:1006100001000100010001000100010001000100D2 +:1006200001000100010001000100010001000100C2 +:1006300001000100010001000100440043004200EC +:10064000410040003F0001004500010001000100A1 +:10065000DE5C010001000100010001000100C25C3C +:1006600001000100C95CC75CC55CCB5CC35C0100D8 +:100670000100CA5CC85CC65CCC5CC45C01000100C3 +:1006800009025B00030100A0FA0904000001030154 +:100690000100092111010001224000070581030822 +:1006A000000A0904010002030000000921110100F1 +:1006B0000122220007058203200001070503032011 +:1006C00000010904020001030000000921110100DA +:1006D00001227B000705840320000A1201000200AA +:1006E00000000801F902F901000102000110035A9B +:1006F000006F0064006900610072006B000000146C +:100700000341006C00650062006C0061007A0065C6 +:100710000072000000040309040011241FBECFEF83 +:10072000DAE0DEBFCDBF04B603FE27C08091C70369 +:100730009091C803A091C903B091CA038730904B30 +:10074000A740B04BD1F41092C7031092C803109287 +:10075000C9031092CA0314BE84B7877F84BF0FB643 +:10076000F894A89580916000886180936000109251 +:1007700060000FBEE0E0F8E3099511E0A0E0B1E011 +:10078000E8ECFDE502C005900D92A83EB107D9F74F +:1007900023E0A8EEB1E001C01D92A73CB207E1F74B +:1007A0000E944F250C94AB2E0C940000E8EDF0E075 +:1007B00080818E7F80831092E2001092DA00109286 +:1007C000E100A0EEB0E08C9181608C9380818F7706 +:1007D000808319BCA7EDB0E08C918E7F8C938081D3 +:1007E0008F7E80831092AC0308952091E4003091B5 +:1007F000E50095E6A9012091EC00822F817020FF91 +:1008000006C08091E80080FF06C080E00895209136 +:10081000E80022FD1AC08091B903882389F0853051 +:1008200089F08091EB0085FD0FC02091E4003091AC +:10083000E50042175307F9F29150E1F684E008957C +:1008400082E0089583E0089581E00895EF92FF9299 +:100850000F931F93CF937C018B010E94F503C82F48 +:10086000811117C08091E80085FD0BC08091E800E0 +:100870008E778093E8000E94F503882399F3C82FB0 +:1008800008C0F70181917F018093F10001501109A7 +:1008900049F78C2FCF911F910F91FF90EF90089502 +:1008A0008091BB0387FF13C08091E80082FF06C0E0 +:1008B0008091E8008B778093E80004C08091B903B1 +:1008C0008111F2CF08958091B9038823D9F38091E3 +:1008D000E80080FFF8CF8091E8008E77ECCF982F6A +:1008E0009093E900242F762F50E0891731F0709112 +:1008F000EC002091ED005091F00021FD07C09F5FBA +:10090000973071F78093E90081E008953091EB0012 +:100910003E7F3093EB003091ED003D7F3093ED0052 +:100920003091EB0031603093EB007093EC0020933A +:10093000ED005093F0002091EE0027FDE0CF80E025 +:100940000895CF92DF92EF92FF920F931F93CF9370 +:10095000DF93C8EDD0E088818F7E8883E7EDF0E0FB +:1009600080818160808384E082BF81E08093AC03DA +:1009700088818E7F888302EE10E0F8011082109249 +:10098000DA0081EEC82ED12CF601108288818F7793 +:10099000888388818068888388818F7D888319BC5B +:1009A0001092B9031092BA031092B8031092B703D1 +:1009B00090EEE92EF12CF70180818B7F8083888176 +:1009C0008160888342E060E080E00E946F04F6016D +:1009D00080818E7F8083F801808181608083808127 +:1009E00088608083F70180818E7F80838881806129 +:1009F0008883DF91CF911F910F91FF90EF90DF904F +:100A0000CF900895FC018091C1039091C203861795 +:100A10009707A0F06115710529F49091E8009E7781 +:100A20009093E80090E06115710551F4911108C0B0 +:100A30008091E80082FF34C080E00895BC01F2CFCD +:100A40008091B9038823C1F18530C1F18091E8001C +:100A500083FD30C08091E80082FDEACF8091E800FC +:100A600080FFE1CF8091F3002091F200382F6115D3 +:100A7000710519F02830310558F091E02830310522 +:100A800009F090E02091E8002E772093E800CBCF8A +:100A900081918093F100615071092F5F3F4FE7CF43 +:100AA0008091B903882341F0853041F08091E800BE +:100AB00083FFBECF81E0089582E0089583E008952A +:100AC00008958091AE03089587E797E79093010812 +:100AD0008093000888E19AE00FB6F894A895809377 +:100AE00060000FBE90936000FFCF9C014FB7F89459 +:100AF0008091A5039091A603A091A703B091A803AC +:100B00004FBF821B930B08952FB7F8946091A503F4 +:100B10007091A6038091A7039091A8032FBF089519 +:100B20002FB7F8948091A5039091A603A091A703F5 +:100B3000B091A8032FBF08959C01FC0132969FEF4E +:100B400080E04191461751F09F3F19F4411101C0D7 +:100B5000982F8F5F8630A9F79F3F09F40895290FDA +:100B6000311D97FD3A95F901628308952091A20302 +:100B70003091A3032817390771F09093A303809352 +:100B8000A203E091A003F091A103309721F000842B +:100B9000F185E02D0994089520919E0330919F03E3 +:100BA0002817390771F090939F0380939E03E0917B +:100BB000A003F091A103309721F00680F781E02D8A +:100BC00009940895FC01680F791F8FEF91E321913B +:100BD000822728E030E087FF09C0880F892721504D +:100BE0003109C9F7E617F70791F70895880FF7CF8E +:100BF000FA01811101C0FB0109940895E7ECF2E0CC +:100C00001182828184608283089580919903982F54 +:100C10009E7F61F4817082608093990380919C0330 +:100C20008B3A18F08AEA80939C0308958A34B0F3D3 +:100C300081708864F1CFAF92BF92DF92EF92FF9202 +:100C40000F931F93CF93DF93082F162FE901E42F03 +:100C5000F0E0E55BFD4F611110C0E4915E2F4E2F77 +:100C60004983E8835A83DF91CF911F910F91FF90C1 +:100C7000EF90DF90BF90AF900895E62EF12C449155 +:100C8000D42EE42FF0E026E0829FC00111242FEF44 +:100C900030E0B9010E94AC2D802F90E0880F991FA1 +:100CA00055E5569FD001579FB00D11248A1B9B0B11 +:100CB000982F990F890F5901AE18BF08AE9ED00129 +:100CC000AF9EB00DBE9EB00D11245B2F189F80010A +:100CD0001124012F11275901A01AB10AAE9E8001DB +:100CE000AF9E100DBE9E100D11245901A81AB10817 +:100CF000AE9CC001AF9C900DBE9C900D1124892F1D +:100D00009927281B390B2E9FC0012F9F900D3E9FC6 +:100D1000900D1124E92F62307105A1F050F4611596 +:100D2000710509F49DCF6130710581F0EB2F512FD2 +:100D300097CF6430710569F080F06630710509F471 +:100D40008FCFF4CFE42F4B2F592F8ACFE42F412F91 +:100D500087CFEB2F542F492F83CF4B2F5D2DE12FC2 +:100D60007FCF0E9490059C019091BD028091BE02B0 +:100D7000982B21F03093BA022093B9029091BF02D0 +:100D80008091C002982B21F03093B8022093B702D3 +:100D9000E091A003F091A103309749F082E08093A5 +:100DA000BB020480F581E02D8BEB92E0099408955D +:100DB0004091BD02803F59F48091BE0287FF0DC073 +:100DC0001092BE0241110BC01092B50208C0813FC3 +:100DD00081F48091BE0218169CF3442381F0809127 +:100DE000BF029091C002892B09F05AC01092B40240 +:100DF0000895823F49F447FFF0CF1092BD028091E1 +:100E0000BE028111ECCFE0CF833F19F41416ACF38E +:100E1000E4CF9091BF02893F29F41916F4F610929D +:100E2000BF02DBCF8A3F19F497FFD7CFF8CF90915D +:100E3000C0028B3F29F497FFD0CF1092C002CDCFD4 +:100E40008C3F19F41916CCF3C8CF9CE0980F95305D +:100E500090F4845F990B21E030E0B90102C0660F85 +:100E6000771F8A95E2F7CB0180959091BC02892388 +:100E70008093BC02B2CF8D3F31F48091B6028E7F59 +:100E80008093B602AACF8E3F21F48091B6028D7F67 +:100E9000F7CF8F3F09F0A1CF8091B6028B7FF0CFC3 +:100EA00008958091B60280FD16C081FD16C082FDB6 +:100EB00016C08091B4028823A1F0883280F428E023 +:100EC000829FC001112468E270E00E94C02D862F2D +:100ED000672B39F0089582E0089584E0089588E052 +:100EE000089581E008958091B60280FD14C081FDCF +:100EF00014C082FD16C08091B502882381F0843130 +:100F000080F422E3829FC001112464E170E00E941A +:100F1000C02D862F08958CE0089589E1089585E01D +:100F2000089582E30895803F31F40E94730781950C +:100F30008093BE020895813F19F40E947307F8CF91 +:100F4000823F31F40E94730781958093BD0208951A +:100F5000833F19F40E947307F8CF893F29F40E9458 +:100F600051078093BF0208958A3F21F40E945107E0 +:100F70008195F7CF8B3F31F40E9451078195809383 +:100F8000C00208958C3F19F40E945107F8CF9CE0ED +:100F9000980F953070F4845F990B21E030E001C028 +:100FA000220F8A95EAF78091BC02822B8093BC02C3 +:100FB00008958D3F31F48091B60281608093B6022E +:100FC00008958E3F21F48091B6028260F7CF8F3F63 +:100FD000B9F78091B6028460F1CF80E008957894EB +:100FE0000895F894E82FE295EF70F0E031A1282FF2 +:100FF0002F7081E090E001C0880F2A95EAF7982FC2 +:101000009095932391A392A1892B82A30C94EF072F +:101010009091860292FF06C0282F28712830F9F49B +:10102000877F846093FF06C0282F28712831F1F450 +:10103000877E84612091870220FF06C0382F387197 +:101040003830D9F4877F816021FF06C0282F2871AE +:101050002831D1F4877E816194FD877E0895282F01 +:1010600024712430F9F68B7F8860DCCF282F24711F +:10107000243101F78B7E8861DDCF382F317131301B +:1010800019F78E7F8860E0CF282F2171213121F759 +:101090008E7E8861E1CFCF93DF93EC01823891059A +:1010A000A9F1D8F58133910509F496C048F5893244 +:1010B000910509F48AC08A9709F495C0C11521E504 +:1010C000D20708F0BCC0C11530E5D30708F014C141 +:1010D000C83ED10508F09CC0C03ED10560F5C83AB5 +:1010E000D10508F087C0C53AD10508F0FDC0C13070 +:1010F000D10509F12097F9F0C430D105E0F440C0E2 +:101100008533910509F45AC0C997C1F680918602CA +:10111000837089F0C0EED0E00EC0833E910599F156 +:1011200070F4803E910501F1823E910539F680917F +:10113000860282FD21C0CE01DF91CF910895863EC7 +:10114000910561F1873E910571F1843E910509F0A9 +:10115000B5CF8091870281FFEECF80918602C7EEE6 +:10116000D0E084FD0DC0E7CF8091860280FD12C1E2 +:101170009091870290FFDFCFC3EED0E084FFDBCFFA +:10118000D0E0C0E0D8CF8091860282FD06C1909168 +:10119000870290FDBFCF84FFCECFF2CF8091860231 +:1011A00083FDDDCFC8CF8091860283FDF9C0909189 +:1011B000870291FFF0CFC4EED0E0BDCF80918602D0 +:1011C00085FFB9CFC9E2D0E0B6CF8091860285FF16 +:1011D000B2CFC5E3D0E0AFCF8091860286FFABCF20 +:1011E000CAE2D0E0A8CF8091860286FFA4CFC1E3F7 +:1011F000D0E0A1CFCF3BD10518F6C85AD0E0CC0F34 +:10120000DD1FCE59DE4F0990D881C02DD46493CF15 +:10121000C11540E2D40758F4C11581E0D80708F0A1 +:101220008ACFC03FD10508F4ABCFD06584CFC115BC +:1012300090E4D90708F4A4CFDF70D06A7CCFC11541 +:1012400025E5D20700F5C11534E5D30708F08AC0BB +:10125000C11543E5D40708F071C0C11582E5D80770 +:1012600008F467C0CE018370992721E030E002C006 +:10127000220F331F8A95E2F7C695C69580E2C89F74 +:10128000E001112452C0C11599E5D907A8F4C11590 +:1012900028E5D20708F06BC0C11536E5D30708F082 +:1012A0006FCF8C2F0E940808C82FD0E0DC2FCC27EE +:1012B000CC27DF71D0623FCFC1154AE5D40708F4CF +:1012C0005BC0CE0190568115904208F059CF8D2F0A +:1012D0008F710E94080890E0982F882788279F71B7 +:1012E0009C012C2BE901E6CFC55AD0E0C15ADE4F54 +:1012F000C881D0E0D0641FCFCE01E4E096958795F9 +:10130000EA95E1F783702C2F26952695237040E20D +:10131000249F90011124382B8C2F8370C1E0D0E0E2 +:1013200002C0CC0FDD1F8A95E2F7C22BD32BDC68FD +:1013300002CFDC2FCC27C16FD06AFDCECE018370E7 +:10134000992721E030E002C0220F331F8A95E2F78F +:10135000C695C69590E2C99FE0011124C22BD32BFC +:10136000DA68E9CEDC2FCC27C46FD06AE4CEDC2F5C +:10137000CC27C06FD06ADFCE8C2F8F700E940808F8 +:1013800034E0D695C7953A95E1F7CF709C2FEC01E4 +:10139000D069D1CEC9E3D0E0CECEC2EED0E0CBCE84 +:1013A000C6EED0E0C8CE0C94840580914B0281112A +:1013B00010924B020895809590914A029823909341 +:1013C0004A02089580914A0290914902892B909196 +:1013D0004802892B8093EA0190914B02992391F066 +:1013E000892B8093EA0120E08CEE91E0FC013191A1 +:1013F000CF0131112F5FF1E0823F9F07B9F7211133 +:101400000E94D509E091A003F091A103309731F03B +:101410000280F381E02D8AEE91E009940895809195 +:10142000460290911502981301C008958F5F87704E +:10143000FACF27E0929F800D1124982F9770869500 +:101440008695869523E0829FF0011124EC50FE4F93 +:1014500050E040E080E0219130E0092E02C0369556 +:1014600027950A94E2F721703327042E01C0220F3A +:101470000A94EAF7822B4F5F5F4F4330510559F7CB +:10148000089527E0929F800D1124982F977041E0D6 +:1014900001C0440F9A95EAF786958695869593E064 +:1014A000899FF0011124EC50FE4F90E080E070E045 +:1014B0005191DF0111979B01082E02C036952795A7 +:1014C0000A94E2F7217021952527242325272C93C0 +:1014D00001968330910561F7089590E080E00E94C5 +:1014E000CC0590E080E00E94B6051092490210926F +:1014F00048020E94E20986E0EBEBF2E0DF011D9278 +:101500008A95E9F71092B5021092B4021092B602D1 +:101510000C94B1068093C6030C946D0A8091C603A7 +:10152000982F9670963019F488600C948A0A877FF9 +:10153000FCCF21E030E001C0220F8A95EAF7209528 +:101540008091C60382230C948A0A90914702809569 +:10155000892380934702282F277091F4282F082E83 +:10156000000C330B9217130659F09091870292FDED +:1015700007C08595859585950E94990A1092470226 +:10158000089521E030E001C0220F8A95EAF78091AA +:10159000C603822B0C948A0A80934C020C946D0A29 +:1015A000882321F00E94DB090C94E2090895882326 +:1015B00039F090914A02982B90934A020C94E209D8 +:1015C00008958823B1F19CEF980F913A70F4ECEEF6 +:1015D000F1E09191891303C0DF0111971C9291E012 +:1015E000E23FF907B1F70C94E20990E2980F9830C6 +:1015F00050F4877091E001C0990F8A95EAF7892F1E +:101600000E94DB09F0CF9BE5980F933020F490E027 +:1016100080E00C94CC0598E5980F973120F490E089 +:1016200080E00C94B605803F20F00E94D8060C9410 +:10163000B1060895CF93C82F882309F456C08CEFC4 +:101640008C0F813AF8F4ECEEF1E082EF91E0DF01EB +:101650002D91C21759F08A179B07D1F76C2F8AEE8C +:1016600091E00E949C05CF910C94E2092191C21354 +:1016700003C0DF0111971C928E179F07B9F70E94D4 +:10168000E209ECCF80E28C0F883068F4C77021E06B +:1016900030E001C0220FCA95EAF780914A02822BFE +:1016A00080934A02E0CFEBE5EC0FE33040F4F0E04A +:1016B000E15AFE4F808190E0CF910C94CC05E8E593 +:1016C000EC0FE73150F4F0E0EE0FFF1FEE59FE4F44 +:1016D00080819181CF910C94B605C03F30F08C2F62 +:1016E0000E949307CF910C94B106CF9108958093F7 +:1016F000A9037093AB036093AA038091B90384306C +:10170000F9F48093E9008FEF9091E800815095FD06 +:1017100006C095ED9A95F1F700008111F5CF809103 +:10172000E80085FF0DC050E040E063E070E089EA2A +:1017300093E00E9426048091E8008E778093E80071 +:101740000895BC0184E00C94770BBC0183E00C94F9 +:10175000770B9C0184E08093E9009FEF8091E80083 +:10176000915085FD06C085ED8A95F1F70000911135 +:10177000F5CF8091E80085FF0CC050E040E066E0C6 +:1017800070E0C9010E9426048091E8008E77809362 +:10179000E8000895CF93DF93EC0181E08093E900A6 +:1017A0008FEF9091E800815095FD06C095ED9A95D8 +:1017B000F1F700008111F5CF8091E80085FF14C09A +:1017C00050E040E068E070E0CE010E942604809185 +:1017D000E8008E778093E80088E0FE01AFEAB3E08E +:1017E00001900D928A95E1F7DF91CF910895609174 +:1017F0005A018091990380FF20C08091590143E0F4 +:10180000849FC001112483539D4F259A25B12F7DBC +:1018100035B130625FB7F894FC01649FE00DF11DB3 +:101820001124BF0168177907D1F45FBF8FE594E0F9 +:101830000197F1F700C00000089580915B0190913D +:101840005C0123E0829FF0011124E353FD4F8917CF +:10185000A0F61182108212828F5F3396F8CFFC01BE +:101860004191CF01E8E035B9000000C047FF25B93C +:10187000440F000000C000C000C025B900C0EA95B8 +:1018800091F7D0CF0F931F93CF93DF93EC0110E02C +:1018900000E090915D019017110609F06CF40E9430 +:1018A000F70B8C8190E00196817099278C83DF91F2 +:1018B000CF911F910F91089520915B01A801420FD4 +:1018C000511D9A01220F331F240F351F23533D4F03 +:1018D0004C8160919B0380919A0396959017110615 +:1018E00069F064F0442361F040919C034B3A08F0A6 +:1018F0004AEA0E941B060F5F1F4FCBCF4423A1F380 +:1019000040E0F7CF8F929F92AF92BF92CF92DF923B +:10191000EF92FF920F931F93CF93DF93EC014C81D3 +:10192000042F10E09801D8010E940B2E9B01AC01FE +:101930000E94212E4B015C01E0E2F0E0E01BF10B84 +:10194000A5E5B0E0AC019B010E94212E6B017C015A +:101950009F01DF010E94032E9B01AC010E942C2EEF +:101960009B01AC01280D391D4A1D5B1DC701B60145 +:101970000E94D42DF22E822F90E039E23F1560F1C3 +:1019800043E0249F9001112435952795122F10953F +:1019900000E085E5E82EEF1880915D01081758F109 +:1019A0000E94F70B9C8181E0992319F0903219F481 +:1019B0008FEF8093580180915801890F8C83DF91BC +:1019C000CF911F910F91FF90EF90DF90CF90BF903C +:1019D000AF909F908F90089525E530E0B901681B86 +:1019E000790B9B01220F331F260F371F37FFCCCFF8 +:1019F0002F5F3F4FC9CF8E2D01FD8F2D20915B01B1 +:101A0000622F600F7727771F9B01220F331F260F4E +:101A1000371F23533D4F412F1B3A08F04AEA60918C +:101A20009B030E941B060F5FB7CFEF92FF920F93AD +:101A30001F93CF93DF93EC018C81811109C081E06A +:101A40008C831092CB0292E09093570180935601C1 +:101A500080915B0190915C0123E0829FF001112451 +:101A6000E353FD4F891768F110E003E060915D01D9 +:101A7000161768F10E94F70B809156012091CB0256 +:101A8000280F2093CB0290915701980F9093570104 +:101A9000191654F4022E000C330B40915D01415095 +:101AA000550B2417350734F081958093560181300A +:101AB00009F41C82DF91CF911F910F91FF90EF905D +:101AC00008951182108212828F5F3396CBCFE12E60 +:101AD000F12C70E0C7010E94C02D20915B01820FA4 +:101AE000482F50E02091CB02022E000C330BE2165F +:101AF000F306D4F020915701022E000C330B2E1563 +:101B00003F0594F0809F9001112423533D4F409155 +:101B10009C034B3A08F04AEA60919B0380919A0338 +:101B20000E941B061F5FA2CFFA01EE0FFF1FE40FFA +:101B3000F51FE353FD4F118210821282F3CF8F9273 +:101B40009F92AF92BF92CF92DF92EF92FF920F934C +:101B50001F93CF93DF93EC018A81BB24BA9480FD5D +:101B600002C0BB24B394A0905D018C81811109C097 +:101B700081E0B81228C08FEF8A0D8093CA0281E0FD +:101B80008C83F12CE12C44E4842EEA14F8F00E94BA +:101B9000F70B8091CA0291E0B91262C081115BC05B +:101BA00080915D0181508093CA021C82DF91CF91A8 +:101BB0001F910F91FF90EF90DF90CF90BF90AF906B +:101BC0009F908F9008951092CA02D9CF00915B0127 +:101BD0000E0D1F2D111DC801880F991F080F191F09 +:101BE00003531D4FF80111821082128234E0C32E7C +:101BF000D12C912C8091CA02890D853444F1682D35 +:101C00000E949E2D892F082E000C990B8E159F0582 +:101C1000A9F480919C038C9DA0018D9D500D1124F1 +:101C200055954795559547954B3A08F04AEA9801DE +:101C300060919B0380919A030E941B069B0CF1E02C +:101C4000CF1AD108B9F68FEFE81AF80A9ECF87FFAE +:101C5000DACF8A0DD8CF81508093CA02BC82A6CF3A +:101C600090E0019660915D0170E00E94C02D80932C +:101C7000CA028C839BCFEF92FF921F93CF93DF9387 +:101C8000EC0110E0EE24EA94F12C60915D0116174E +:101C900070F00E94F70B9A818C8190FF2AC08F5FB1 +:101CA0008C83DF91CF911F91FF90EF900895209149 +:101CB0005B01422F410F5527551FCA019A01220F80 +:101CC000331F280F391F23533D4F40919C034B3A3C +:101CD00008F04AEA70E0C7010E94C02D962F8C815F +:101CE00060919B03199F800D11240E941B061F5FAA +:101CF000CCCF8150D5CF9091990390FF14C0909193 +:101D00005B0120915C0133E0939FF0011124E353C8 +:101D1000FD4F921710F00C94F70B81836083428380 +:101D20009F5F3396F6CF08950F931F93CF93DF9362 +:101D300000D00F92CDB7DEB78C018091CC0281111B +:101D40000AC09E012F5F3F4F4AEA6FEF0E941B06B9 +:101D50008A818093CC02F8016481613069F08091BE +:101D6000CC0240E0662361F040E0623011F4409123 +:101D7000CC0280E060E004C06091CC0240E080E0F2 +:101D80000E947B0EF801848190E0019663E070E090 +:101D90000E94C02D84830F900F900F90DF91CF9100 +:101DA0001F910F910895CF93DF9300D00F92CDB77D +:101DB000DEB79091990390FF0DC04B3A08F04AEAC4 +:101DC0009E012F5F3F4F0E941B064B8169818A81D4 +:101DD0000E947B0E0F900F900F90DF91CF9108958E +:101DE000CF93DF93EC01E9E9F3E0438162818C81D9 +:101DF0000E94D30E8C818F5F8C83DF91CF910895E9 +:101E0000CF93DF93EC01EC81F0E0E05BFC4F449179 +:101E1000E9E9F3E0628181810E94D30E8C818F5FBA +:101E20008C83DF91CF910895E9E9F3E080818E7F83 +:101E300080830E94FE05E7ECF2E08281816082836C +:101E40002FEF80E792E0215080409040E1F700C002 +:101E500000000C94F70B9F92AF92BF92CF92DF924B +:101E6000EF92FF920F931F93CF93DF937C015B015F +:101E70006A018091810201E010E08A3010F40AE0EA +:101E800010E0C1E0D0E0F894B501C701F601099572 +:101E9000982E0E94EF07911004C021960C171D0781 +:101EA0006CF4892DDF91CF911F910F91FF90EF90EE +:101EB000DF90CF90BF90AF909F900895CC9F9001FE +:101EC000CD9F300D300D112490E080E045E34A9520 +:101ED000F1F70000019682179307C1F7D4CF8091E4 +:101EE0005702811110C08091D80080618093D80082 +:101EF0008AE18A95F1F700C08091D90080FF0AC07D +:101F000081E08093570281E090915702913009F06F +:101F100080E0089582E0809357020E94D6031092D9 +:101F2000B903F1CF0E946F0F882351F0E091A00315 +:101F3000F091A103309721F00190F081E02D0994F8 +:101F400080E008950F931F930E946F0F882321F064 +:101F50001F910F910C9484050E94840500918202C8 +:101F6000109183022091840230918502600F711FCD +:101F7000821F931F1F910F9108950E946F0F81116F +:101F80000C9490050E94A20FCB0108951F93CF934C +:101F9000DF93182FD0E0C0E0893311F4C0E5D0E022 +:101FA000812F0E941A0B209731F4812FDF91CF915E +:101FB0001F910C94E10A8FE99FE00197F1F700C0AF +:101FC00000002197F0CF0F931F93CF93DF93C62F7D +:101FD000D42F022FFC0182818823A1F06093C503D6 +:101FE0000E9490059093C4038093C303C77081E05F +:101FF00001C0880FCA95EAF7DF91CF911F910F9129 +:102000000C94D70A8091C503681335C08091C3032F +:102010009091C4030E947505883C910560F510E21B +:102020001D0FCD17B9F080E28C0F883040F4C770D7 +:1020300081E001C0880FCA95EAF70E94D00A1830E3 +:1020400048F481E09D2F977001C0880F9A95EAF7B8 +:102050000E94D70A802F0E94C60F183098F4D770BC +:1020600081E001C0880FDA95EAF7DF91CF911F91E7 +:102070000F910C94D00AC77081E001C0880FCA95F7 +:10208000EAF7F3CFDF91CF911F910F910895CF938E +:10209000DF93C7E5D2E060E0CE010E94542E219686 +:1020A000C11584E0D807B9F7DF91CF9108956F92F9 +:1020B0007F928F929F92AF92BF92CF92DF92EF92D8 +:1020C000FF920F931F93CF93DF9380E5C82E84E098 +:1020D000D82E91ECE92EF12CE701CC58D10936012C +:1020E0001BC0F50185909490692DC8010E94542E63 +:1020F000682DC80101960E94542E82E0A80EB11CE2 +:102100000E5F1F4FC017D10761F78EE0680E711C7C +:102110002E96CE15DF0529F08E010E5011095301C0 +:10212000E0CF7E018CE8E80EF11C8CE8C80ED11CD3 +:1021300081EFE81682E0F80679F6DF91CF911F91E2 +:102140000F91FF90EF90DF90CF90BF90AF909F9056 +:102150008F907F906F900895CF93C82F6FEF81116C +:1021600061E283E290E00E94542E6FEFC11161E1C1 +:1021700084E290E00E94542E6FEFC11160E385E28B +:1021800090E0CF910C94542E80E00E94AC1060E05F +:1021900086E290E00E94542E0E9457100E94471041 +:1021A00081E00C94AC10CF93C0918702C2FB9927B9 +:1021B00090F9981799F080FBC2F9C093870260915B +:1021C000860284E090E00E94542E6C2F82E290E020 +:1021D0000E94542E82E0CF910C94A50ACF910895CD +:1021E0000F931F93CF93DF93C42FD0E0CC0FDD1F4D +:1021F0002EE0629FC00DD11D11243CE8839FC00DCD +:10220000D11D1124CE0187960E94402E082F10E088 +:10221000102F0027CE0188960E94402E9801282B6F +:10222000C901DF91CF911F910F910895462F8430FE +:1022300038F47A3028F4673018F4672F0C94F010D3 +:1022400090E080E00895CF92DF92FF920F931F936A +:10225000CF93DF936C010091C60380914C02082B51 +:10226000C7E0D0E010E0FC2EC8010C2E02C095950E +:1022700087950A94E2F780FD0CC02197A0F7F12C16 +:102280008F2DDF91CF911F910F91FF90DF90CF9015 +:102290000895B6018C2F0E9416110E944B080197D9 +:1022A00061F3EECFCF93DF93EC010E942311BE01C7 +:1022B0000E941611DF91CF910C944B08FC01808194 +:1022C00091810E945211292F2F7092959F709250E8 +:1022D0009E3078F4E92FF0E0E355F14D0C94F62DA3 +:1022E000803F19F020F4883E20F481E00895843F77 +:1022F000E1F380E00895883EC0F3813FD1F7F5CF48 +:10230000822F869586958695089583E290E00E94B7 +:10231000402E813289F484E290E00E94402E813187 +:1023200059F485E290E00E94402E91E0803309F05C +:1023300090E0892F8170089580E0FCCFCF9384E0F6 +:1023400090E00E94402EC82F82E290E00E94402E32 +:10235000982F8C2FCF91089560919903669570E026 +:102360004BE050E08BE491E00E94882E892B19F419 +:1023700081E08093C8020E94BD0F9093C2028093B7 +:10238000C1028091C90284608093C9020895CF92EE +:10239000DF92EF92FF926B017C010E940506B7016C +:1023A000A60188E090E0FF90EF90DF90CF900C9432 +:1023B000662EAF92BF92CF92DF92EF92FF920F9371 +:1023C0001F93CF93DF9300D00F92CDB7DEB7082FC6 +:1023D000F62E142FE22E9091990390FF3FC0E92F23 +:1023E000E695AE2FB0E0AD54BE4F8C918093C702FE +:1023F0009E7F923009F040C04B3A08F04AEA9E01B5 +:102400002F5F3F4F6F2D802F0E941B064B816981EC +:102410008A810E947B0E80919A03801308C080916C +:102420009B038F1104C080919C03811729F0809138 +:10243000C90282608093C90200939A03F0929B03C1 +:1024400010939C03EE2051F06091990370919A03D0 +:1024500080919B0390919C030E94C7110F900F9055 +:102460000F90DF91CF911F910F91FF90EF90DF9030 +:10247000CF90BF90AF900895823019F410919C03D3 +:10248000CACF863019F400919A03C5CF8930D9F3A9 +:10249000893109F6E9518E2F8170D82EE695F0E04A +:1024A000E55BFC4FA590B490C12CBB2460915D010D +:1024B000C61618F00E94F70BAECF2C2D30E0A29E6E +:1024C000C001A39E900DB29E900D112470E00E9459 +:1024D000AC2D802FD11016C0860F40915B01420FAA +:1024E000532F511D9A01220F331F240F351F2353E1 +:1024F0003D4F412F1B3A08F04AEA6F2D0E941B0600 +:10250000C394D4CF861BE9CFE9E9F3E0438128E007 +:10251000421B08F440E021E0628181810C94D911D2 +:10252000E9E9F3E0438128E0420F08F44FEF21E0AE +:10253000628181810C94D911E9E9F3E0628128E09C +:10254000621B08F460E021E0438181810C94D91181 +:10255000E9E9F3E0628128E0620F08F46FEF21E01F +:10256000438181810C94D911E9E9F3E0818121E073 +:102570004381628188500C94D911E9E9F3E08181AB +:1025800021E043816281885F0C94D91180919D0381 +:10259000882319F0815080939D0360919903709175 +:1025A0009A0380919B0390919C030C94C711809196 +:1025B0009D03833018F48F5F80939D03609199038E +:1025C00070919A0380919B0390919C030C94C71186 +:1025D0009091990390FF3BC0917081112EC0926041 +:1025E000909399038091C90281608093C902662308 +:1025F00051F06091990370919A0380919B0390919F +:102600009C030E94C71160919903669570E04BE0AE +:1026100050E08BE491E00E94882E892BA9F00E9463 +:10262000FE0581E08093C40220E040919C0360910C +:102630009B0380919A030C94D911853210F0986411 +:10264000CFCF880F982BCCCF0E94AC11EACF089542 +:10265000809199038695815009F484E261E00C949D +:10266000E8128091990386958F5F853208F081E0AA +:1026700061E00C94E8129091990390FF07C0969541 +:10268000981720F0961710F40C94311361E00C9415 +:10269000E812E9E9F3E083E0808311828FEF82831F +:1026A0008AEA83831482A7ECB2E012968C91129787 +:1026B000836012968C9360817181828193810C94E6 +:1026C000C71110924A02ECEEF1E086E0DF011D92A4 +:1026D0008A95E9F70C946D0A1F93CF93DF93CDB7DA +:1026E000DEB7AA970FB6F894DEBF0FBECDBF8BEB57 +:1026F00093E02091F100DC012D93CD01B3E0833C08 +:102700009B07B9F78091BC03833009F472C0B8F419 +:10271000813009F449C0823009F4B3C08091E800E7 +:1027200083FF8BC28091BB039091BC039A3008F069 +:1027300084C2E92FF0E0E554F14D0C94F62D8A3077 +:1027400009F48EC08B3009F471C0893039F780915B +:10275000BB03813219F78091BF039091C0030097AA +:1027600011F00297D9F68091E800877F8093E80006 +:102770008091E80082FF38C09091F3008091F200D0 +:10278000029731F48091F100813011F0863021F40C +:102790008091F1008093AE038091E8008B77809365 +:1027A000E8000E945004BACF8091BB03813A09F03F +:1027B000B5CF8091E800877F8093E8008091BF03C8 +:1027C0009091C003892B61F468E08FEA93E070E098 +:1027D0000E9402058091E8008B778093E8009ECFED +:1027E00060E090E080E0F3CF8091B9038111C0CF29 +:1027F00095CF8091BB03813A09F090CF8091BF03C0 +:102800009091C003892B09F089CF8091E800877FE0 +:102810008093E8008091E80080FFFCCF80915E010A +:102820008093F1008091E8008E77B9CF8091BB034F +:10283000813209F073CF8091BF039091C003892B3F +:1028400009F06CCF8091E800877F8093E8000E94B8 +:1028500050048091BD0380935E010E9461135ECF9E +:102860008091BB03813209F059CF8091E800877FC6 +:102870008093E8000E9450048091BE038093AD03D2 +:102880004DCF8091BB03813A09F048CF8091E80099 +:10289000877F8093E8008091E80080FFFCCF8091E3 +:1028A000AD03BECF803899F0823809F0C6C180915F +:1028B000BF038F70873008F0C0C18093E90080911A +:1028C000EB0085FB882780F91092E90006C0809113 +:1028D000B7039091B803911182609091E800977FBF +:1028E0009093E8008093F1001092F1008091E8004D +:1028F0008E779FC1882309F48DC1823009F09DC174 +:102900008091BD03811190C18091BF038F702FEF23 +:10291000280F263008F091C18093E9002091EB0048 +:1029200020FF82C1933031F48091EB00806280936C +:10293000EB007AC19091EB0090619093EB0021E065 +:1029400030E001C0220F8A95EAF72093EA00109246 +:10295000EA008091EB008860EACF81116EC110918E +:10296000BD031F778091E3008078812B8093E30083 +:102970008091E800877F8093E8000E945004809156 +:10298000E80080FFFCCF8091E30080688093E30043 +:1029900082E0111183E08093B9034FC180588230E7 +:1029A00008F04BC12091BD033091BE032C3DE3E004 +:1029B0003E07A1F583E08A838AE289834FB7F894C2 +:1029C000DE01139620E03EE051E2E32FF0E0509369 +:1029D0005700E49120FF03C0E295EF703F5FEF7076 +:1029E0008E2F90E0EA30C0F0C7968D939D932F5FB5 +:1029F000243159F74FBF8091E800877F8093E8002A +:102A00006AE270E0CE0101960E9402058091E80022 +:102A10008B778093E80011C1C096E7CF8091BF0308 +:102A20009091C003432F55274330510509F44AC004 +:102A300078F54130510509F47AC08BE590E0E0E883 +:102A4000F6E04230510509F0F8C02091E800277FF8 +:102A50002093E8002091C1033091C20382179307AD +:102A600008F49C0140E02115310509F065C04111D1 +:102A700063C08091E80082FDC9CF8091B9038823AB +:102A800029F2853019F28091E80083FFF2CFBECFA2 +:102A90004132510509F43CC04232510509F0CDC024 +:102AA0008330910508F0C9C0FC01EE0FFF1FE5520D +:102AB000FE4F0190F081E02D88529E4FDC018C91F9 +:102AC00090E01AC0332721303105D1F021153105AE +:102AD00061F02230310509F0B0C0EDEEF6E0E4918E +:102AE0008E2F90E0EDEEF6E007C0E5E1F7E0E4912F +:102AF0008E2F90E0E5E1F7E0009709F49EC0A5CFA6 +:102B0000EFEFF6E0E4918E2F90E0EFEFF6E0F4CFF8 +:102B10008330910508F091C0880F991FFC01EF5197 +:102B2000FE4F0190F081E02D89E090E08ECF82E1B0 +:102B300090E0EBEDF6E089CF8091B903882309F4AA +:102B400065CF853009F462CF8091E80083FD5ECFC8 +:102B50008091E80082FD8DCF8091E80080FF83CFD7 +:102B60009091F3008091F2002115310519F0883021 +:102B7000910550F041E0089709F040E08091E800AD +:102B80008E778093E8006FCF44914093F1003196A7 +:102B9000215031090196E8CF803809F04EC080916C +:102BA000E800877F8093E8008091BA038093F1006A +:102BB0009DCE811142C01091BD031230F0F580917D +:102BC000E800877F8093E8001093BA030E945004C6 +:102BD000112311F084E005C08091E30087FDFACF56 +:102BE00081E08093B90342E061EC81E00E946F04D0 +:102BF00042E261EC84E00E946F0442E261EC82E018 +:102C00000E946F0442E260EC83E00E946F048091B6 +:102C1000B90313C08091BD03813079F481E0933012 +:102C200009F080E08093B8031092E9008091E800F9 +:102C3000877F8093E8000E9450048091E80083FF22 +:102C40000AC08091E800877F8093E8008091EB00C4 +:102C500080628093EB00AA960FB6F894DEBF0FBE99 +:102C6000CDBFDF91CF911F91089569EE7EEF90E087 +:102C700080E00E94722E60E082E090E00E94542E7C +:102C800060E083E090E00E94542E10924C0260E0DD +:102C900084E090E00E94542E60E082E290E00E9486 +:102CA000542E60E085E090E00E94542E60E086E0C3 +:102CB00090E00E94542E6FEF87E090E00E94542E27 +:102CC00040E050E0BA0188E090E00E94662E60E0AB +:102CD0008DE090E00E94542E40E050E0BA0188E17F +:102CE00090E00E94662E60E087E190E00E94542E02 +:102CF00040E050E0BA018CE190E00E94662E70E066 +:102D000060E080E290E00E94722E40E050E0BA0164 +:102D100088E190E00E94662E80E00E94AC100E9444 +:102D2000C41040E050E0BA018FE090E00E94662EAF +:102D300040E050E0BA0183E190E00C94662E3F92AF +:102D40004F925F926F927F928F929F92AF92BF92BB +:102D5000CF92DF92EF92FF920F931F93CF93DF9367 +:102D600000D000D00F92CDB7DEB78C01FC0183817B +:102D70009481892B31F08081918189238F3F09F0E3 +:102D800070C50F900F900F900F900F90DF91CF9123 +:102D90001F910F91FF90EF90DF90CF90BF90AF9079 +:102DA0009F908F907F906F905F904F903F9008958D +:102DB0000E942311F82E682F89819A810E94410A6E +:102DC00069817A818F2D0E9416117C01F801828120 +:102DD000882309F439C5970122513F452031310537 +:102DE00008F005C58FEF93E00E94402EFEEEEF0E37 +:102DF00057E5852E52E0952E8823A1F18091470258 +:102E0000877009F4BECFF8018281882309F4B9CF15 +:102E10008091870282FDB5CF82E00F900F900F90D6 +:102E20000F900F90DF91CF911F910F91FF90EF9036 +:102E3000DF90CF90BF90AF909F908F907F906F90DA +:102E40005F904F903F900C94A50A811424E0920665 +:102E5000A9F2C4010E94402E811101C0EA943FEF03 +:102E6000831A930AE110F1CF1C821B8244244394FD +:102E70004AE0342E74018FEFE81AF80AC4010E9468 +:102E8000402E89831A82882309F4B8CF9FEF980FC8 +:102E9000933000F58A83498292E0890E911CC70124 +:102EA0000E94402E8B83882309F4A8CFFE0131961F +:102EB0007F01F70120812223E9F2213009F049C086 +:102EC00091818281913041F4F2E0EF0EF11C0E9479 +:102ED000C60F09C04701EACF923049F422E0E20E62 +:102EE000F11C0E941A0B3FEFE31AF30AE2CF933072 +:102EF00031F432E0E30EF11C0E94E10AF4CF943089 +:102F000021F08FEFE81AF80AEECF92E0E90EF11CFB +:102F100030E020E0B7016F5F7F4FF70141818053C0 +:102F2000990B8A30910550F021503109E0F28FE978 +:102F30009FE00197F1F700C00000F6CF329EF0014C +:102F4000339EF00D11249C012E0F3F1F842F7B0117 +:102F5000E1CFE22FF0E0E754FE4F5490822F8695A8 +:102F60008695869590E0FC01E755FE4F64902770AA +:102F7000712C022E02C0759467940A94E2F7E1E086 +:102F80006E227724FC01E756FE4FA490B12C022E4E +:102F900002C0B594A7940A94E2F7F1E0AF22BB24F3 +:102FA000FC01E757FE4FC490D12C02C0D594C794C2 +:102FB0002A95E2F721E0C222DD246114710419F0A0 +:102FC00081EE0E941A0BA114B10419F086EE0E9442 +:102FD0001A0B852D0E94C60FAB2819F086EE0E94B1 +:102FE000E10A672819F081EE0E94E10ACD2809F470 +:102FF0007ACF8CE26CCF81E00E94C10A0E948E0AD7 +:10300000FDCE81E00E94990AF9CF82E0F5CF95EFDD +:10301000E9169CE5F90609F46AC008F464C027E2E1 +:1030200045EE66EEF6EFEF16FCE5FF0609F408C480 +:10303000882309F427C41092C50323E0E2162DE586 +:10304000F20608F05BC03AEFE3163CE5F30630F415 +:10305000C70182509C45449708F056C00E949E11BB +:10306000909387028093860290E1E9169CE5F90629 +:1030700009F433C108F0A5C0F8E0EF16FCE5FF063F +:1030800009F41DC108F06EC034E0E3163CE5F30618 +:1030900009F407C108F050C092E0E9169CE5F90672 +:1030A00009F4F9C0809186028260E3E0EE16ECE557 +:1030B000FE0609F4F3C060918602F090870284E076 +:1030C00090E00E94542E6F2D82E290E00E94542ED8 +:1030D0000E94611393CE27E245EE65EEB1C326E26E +:1030E00041EE60EEADC327E245EE64EEA9C326E2F1 +:1030F00041EE62EEA5C328E241E0EFCF81E6E8169B +:103100008DE5F80609F4AACFF6E1EF16FCE5FF0617 +:1031100009F0D1C380914A028A7A91E009F490E0E3 +:103120009093F30169E2811165E38AEE91E00E94D8 +:103130009C050E94E20962CE809186028061F6E0E1 +:10314000EF16FCE5FF0609F4A9C0809186028860AD +:1031500027E0E2162CE5F20608F4A0C08091860272 +:1031600080629CC0809186028D7F3CE0E3163CE546 +:10317000F30609F493C078F4809186028C609AE09B +:10318000E9169CE5F90609F489C008F49CC0809111 +:1031900086028E7F83C080918602877FFEE0EF16D5 +:1031A000FCE5FF0609F47AC0809186028B7F2FE050 +:1031B000E2162CE5F20608F471C0809186028F7E3B +:1031C0006DC03CEFE3163CE5F30609F482C0A0F5C0 +:1031D00094E1E9169CE5F90609F493C098F4F2E14C +:1031E000EF16FCE5FF0609F47CC0809186028F7B18 +:1031F00023E1E2162CE5F20608F450C08091860225 +:10320000837F4CC03AEFE3163CE5F30609F44DC06A +:1032100008F051C095E1E9169CE5F90609F04BCF9D +:103220008091860282FB992790F921E0922790FBFA +:1032300082F990FB83F932C0E114EDE5FE0609F452 +:1032400056C0A0F48091870283602EEFE2162CE531 +:10325000F20671F1809187028D7F3FEFE3163CE526 +:10326000F30630F1809187028C7F22C082E0E8165D +:103270008DE5F80609F454C008F44CC0E1E6EE16FA +:10328000EDE5FE0609F017CF90918602892F8F7E1B +:1032900094FF806103C080918602816080938602E2 +:1032A0000ACF809186028460F9CF80918702816085 +:1032B0008093870200CF809187028260F9CF80914E +:1032C00086028064EBCF0E94611380918602806841 +:1032D000E5CF809187028E7FEBCF809186028F7D34 +:1032E000DDCF0E946113809186028F77D7CF8091C6 +:1032F0008702982F909591708E7F892B90FB81F992 +:10330000D7CF0E94611390918602892F97FB87F98E +:103310008058C4CF61E08EE090E00E94542ECBCE66 +:1033200060E0F9CF85E3B9C281608093990361E0E1 +:1033300086950E94E81262CD48E253E161E373E1B1 +:103340000E94F8055BCD41E353E168E273E1F8CFF9 +:103350004DEB52E164EB72E1F3CF4CE952E168EAE4 +:1033600072E1EECF44E852E160E972E1E9CF40E971 +:1033700052E164E872E1E4CF47ED52E166EC72E1BC +:10338000DFCF61E081E0D5CF65E082E00E943B13B2 +:1033900035CD68E086E0FACF64E18FE0F7CF67E1F2 +:1033A00085E1F4CF62E289E1F1CF61E083E2C1CF50 +:1033B0000E9461139FEFE4E3FCE09150E040F04095 +:1033C000E1F700C000000E94640581E09AC280E03D +:1033D00098C2C7010E94190AD82EA4C22F2D2F709F +:1033E000C22E8F2D807F19F0C29490EFC922DD206C +:1033F000B9F0CC2069F080E28E0D883010F0811099 +:1034000009C080914A02C82AC0924A020E94E20979 +:103410008E2D4DC080914902C82AC0924902F6CF34 +:103420008E2D0E94E10ACC2009F443C080E28E0D6B +:10343000883010F0811004C08C2D0E94DB0906C07A +:10344000C09480914902C822C09249020E94E209B8 +:1034500030C03F2D3F70C32E8F2D807F803219F0FA +:10346000C29480EFC822882089F081E0881609F490 +:103470007FC0DD2009F489C0BB2009F47FC0F801BA +:10348000858180FFC5CF8F70858378C020918702AA +:1034900022FF4BC0DD2009F442C0CC2039F08091DE +:1034A0004A02C82AC0924A020E94E20980E00E94B1 +:1034B0001A0B292D2850330B2430310510F40E94AB +:1034C000920FAA2009F45DCC8091470280FD59CC6F +:1034D000F80112828595859585950E94C10AC801DB +:1034E0000E949F16809147028595859585950F903E +:1034F0000F900F900F900F90DF91CF911F910F9130 +:10350000FF90EF90DF90CF90BF90AF909F908F9003 +:103510007F906F905F904F903F900C94990A80E05D +:103520000E94E10ACC2029F287CFDD20A1F0909102 +:103530004B028C2D892BB11003C00E94D70AB9CF42 +:10354000E1E0BE12FACF22FDB4CF981709F4B1CF53 +:1035500080934B02AECFB11006C00E94D5098C2DCE +:103560000E94D00AA6CFF1E0BF1609F4A2CFF5CF92 +:10357000DD2031F025E02B1508F49BCF8C2DDDCF1D +:1035800034E03B1508F495CFEACFBB2041F3F9E3D3 +:103590008F1209C02FEF37EE83E02150304080407A +:1035A000E1F700C000008E2D0E94E10A82CF8F2D2E +:1035B00086958695837061F0813009F07ACFC701D6 +:1035C0009370D11002C090E080E00E94B60571CFE8 +:1035D000C7019370D11002C090E080E00E94CC053A +:1035E00068CF8E2DDD2029F00E9493070E94B1063E +:1035F00060CF0E94D806FACF8F2D837091F5D1103D +:1036000058CF4E2D429546954770440F440F8E2D4E +:103610008F70042E01C0880F0A94EAF72E2D2071B6 +:10362000E4FE07C02FE030E001C0220F4A95EAF720 +:1036300020953F2D369536953370323069F050F431 +:1036400040914C02313029F0822B84230E94CC0A15 +:1036500030CF842B822BFACF282B80914C028227EB +:10366000F5CF8695DD2011F08F2D8170882309F428 +:1036700020CF4E2D429546954770440F440F8E2D16 +:103680008F70042E01C0880F0A94EAF72E2D207146 +:10369000E4FE07C02FE030E001C0220F4A95EAF7B0 +:1036A00020953F2D369536953370323069F050F4C1 +:1036B0004091C603313029F0822B84230E948A0A6C +:1036C000F8CE842B822BFACF282B8091C603822739 +:1036D000F5CF9F2D9F70F92EDD2029F0892F0E94B4 +:1036E000C10A8E2D2ACF8E2D0E94D00A8F2D0E94C6 +:1036F000990ADFCE8E2DE2EF8E16B1F1E81570F04B +:10370000F0EF8F16D1F021EF821691F0DD2009F451 +:103710005EC0B1107DCE8F2D8F712AC033EF83161E +:1037200051F194EF8912F2CF8091870282FF2FC06E +:103730008F2D8F71DD20D9F21BC0DD2081F0E4E0F8 +:10374000EB1508F4B6CE2F2D2F7181E090E001C06B +:10375000880F2A95EAF79091C6038927AFCFF5E045 +:10376000FB1508F4A6CEEFCF8F2D8F71D110BFCFF0 +:103770000E94C10A9ECE80E0DD2009F49FCF9F2DDC +:103780009F7181E001C0880F9A95EAF797CFDD20FD +:1037900099F02F2D2F71F22E822F0E94C10A809155 +:1037A000870282FD07C038E0F39EC00111248360C8 +:1037B000809347028F2DDCCF81E00E94A50A81E033 +:1037C0008B1508F076CE82E00E94A50A72CEBB204F +:1037D00059F0893309F0E7CE9FEFE7EEF3E091501F +:1037E000E040F040E1F7DDCE8F2D8F7180CFF0E12A +:1037F000EF16FFE5FF0609F4FECB21E1E2162FE507 +:10380000F20609F402CC93EFE9169CE5F90609F4F7 +:1038100066CC08F0FCCBF8EDEF16FCE5FF0609F4EA +:103820005ACC29EDE2162CE5F20609F464CC37ED0A +:10383000E3163CE5F30609F0FBCB26E241EE61EE30 +:10384000C8010E94E30FDACA30E1E3163FE5F30650 +:1038500009F4D7CB91E1E9169FE5F906A1F682E0DC +:10386000D1CB85E0DE01119601900D928A95E1F7AA +:10387000F801228189819A8121119ACA0E94190A2C +:10388000F82E9ECAF6E1EF16FCE5FF0609F083C0AC +:103890008091F301811146CD89E2ECEEF1E022EF57 +:1038A00031E09191891303C0DF0111971C922E170B +:1038B0003F07B9F73ECC2AE5E2162DE5F20609F4FA +:1038C00084CD68F4E1148CE5F80609F471CD9EED21 +:1038D000E9169CE5F906B9F40E9435168FCAEBE5A6 +:1038E000EE16EDE5FE0609F472CDFCE5EF16FDE5FA +:1038F000FF0649F48091870282FB882780F991E0D6 +:1039000089270E94D310F8018281E080F18088230A +:1039100009F45FCDC7010E942311D82E682FC7017B +:103920000E94410AB7018D2D0E9416110E944B087A +:103930007C01882EF801D280B580B2943FE0B3229A +:10394000809147028770C1F0AD2CDD20B1F08F2D42 +:10395000807F803421F080E28E0D883068F0809185 +:10396000870282FD09C082E00E94A50A8091470279 +:103970008770AA24A3948111A12C9F2C92942FE0EC +:103980009222FBE0F91508F494CDE92DF0E0EB5319 +:10399000F14D0C94F62D80914A0282722CECE216C5 +:1039A0002CE5F20609F4E8CC08F073C096ECE916B1 +:1039B0009CE5F90609F4CCCC08F042C0F3ECEF1614 +:1039C000FCE5FF0609F4B8CC50F532ECE3163CE513 +:1039D000F30609F098CF8091990380FFA5CC8E7FE4 +:1039E000809399036091990370919A0380919B034E +:1039F00090919C030E94C7110E94FE058091C9020C +:103A000081608093C9022FEF30E782E0215030407F +:103A10008040E1F700C000000E94F70BEFC994EC72 +:103A2000E9169CE5F90609F48ECC44EB52E16DEB06 +:103A300072E1E5ECEE16ECE5FE0609F481CC63CF0D +:103A4000F9ECEF16FCE5FF0609F48CCC88F437ECB2 +:103A5000E3163CE5F30609F480CC48EA52E16CE950 +:103A600072E198ECE9169CE5F90609F469CC4BCFB4 +:103A7000EAECEE16ECE5FE0609F479CC46EC52E1F0 +:103A800067ED72E1FBECEF16FCE5FF0609F458CC9C +:103A90003ACF21EDE2162CE5F20609F47DCCB8F41C +:103AA0008EECE8168CE5F80609F46ECC08F469CCC7 +:103AB000EFECEE16ECE5FE0609F46BCC6EE089E067 +:103AC000F0EDEF16FCE5FF0609F460CC1CCF24ED09 +:103AD000E2162CE5F20609F465CC78F482EDE816DE +:103AE0008CE5F80609F45BCC61E088E193EDE9161A +:103AF0009CE5F90609F41DCC06CFE5EDEE16ECE5E4 +:103B0000FE0609F452CCFDE5EF16FF0609F476C96E +:103B1000FACE1F93CF93DF9380911402807FA9F494 +:103B200080911102882389F080914602D09115027C +:103B300060910F0270911002A0911202B0911302D5 +:103B4000C62FC72316E0D81304C0DF91CF911F9171 +:103B5000089590E0109711F0CF3F19F40196877007 +:103B6000F2CF189F9001199F300D1124F901EA5EE0 +:103B7000FD4F41814713F2CF40814613EFCF428181 +:103B80004111ECCF438154814A1B5B0B483C5105EA +:103B900028F7809114028F70806180931402F901DC +:103BA000E55EFD4F80818F70806180838FE092E0C1 +:103BB0000E949F16DF91CF911F910C940F0AAF9234 +:103BC000BF92CF92DF92EF92FF920F931F93CF930A +:103BD000DF93CDB7DEB761970FB6F894DEBF0FBEA7 +:103BE000CDBF8C0185E0F801DE011D9601900D929C +:103BF0008A95E1F7F801E2808FE0A82E82E0B82EE6 +:103C000060911202709113026115710509F432C1BD +:103C100090910F0240911002892F84238F3F09F465 +:103C200029C120813181C380D480F0901102F60136 +:103C3000E61BF70BFF2009F4E8C080911402582F0F +:103C4000507FE83CF10508F0ABC0511177C0FE2C65 +:103C5000431321C092131FC0E1101DC08F708061FB +:103C600080931402C5010E949F1680911402F801EE +:103C700085838F2D61960FB6F894DEBF0FBECDBF42 +:103C8000DF91CF911F910F91FF90EF90DF90CF9038 +:103C9000BF90AF900895CD2829F0822F83238F3FC6 +:103CA00009F003C180E0F82FF170DF2E80FF3CC0E7 +:103CB000809146024091150256E0841315C02D876D +:103CC0003E878D859E850E945211292F22952F7047 +:103CD0002230F0F0243018F59F70F1F0F801958152 +:103CE000907FD1F4D12C1EC090E0589FF001599FD5 +:103CF000F00D1124EA5EFD4F6181361306C060812C +:103D0000261303C06281E6120FC001968770D5CFDB +:103D10009F7011F0882331F3805E883018F3C8015A +:103D20000E949F16FD2CA5CFEE2009F4A2CF809112 +:103D30001402816080931402F12C9BCF431306C0C0 +:103D4000921304C0F801EE2009F479C0C8010E9462 +:103D50005E11882309F1EE20F9F08091140280327F +:103D600070F020910F023091100238872F8319864E +:103D7000DB86CA868C87CE0107960E949F1686E056 +:103D8000F801AFE0B2E001900D928A95E1F70E9450 +:103D9000891DFF24F3946DCFC8010E949F16F9CFAF +:103DA00051110AC08FE092E00E949F1686E0F50153 +:103DB00011928A95E9F7C0CF43130FC092130DC03B +:103DC000E1100BC0F8018583C8010E949F1686E0B0 +:103DD000F50111928A95E9F74CCFC8010E945E1156 +:103DE0008823D1F2EE20C1F280911402803238F2A1 +:103DF00020910F02309110023A8329831B82DD82C9 +:103E0000CC828E83CE010196B8CFE83CF105F8F65E +:103E1000FE2CEE2009F243131FC092131DC08091A7 +:103E2000140280FD10C0982F907F69F0F8018583FF +:103E3000903F31F0982F907F905F8F70892B858312 +:103E4000C8010E949F1686E0F801AFE0B2E0019041 +:103E50000D928A95E1F70DCFC8010E945E11811184 +:103E60008ECF80911402816080931402C8010E9459 +:103E70009F16FFCEEE2009F48FCFC8010E945E117D +:103E8000F82E882309F488CF86E0F801AFE0B2E08D +:103E900001900D928A95E1F780910F0290911002A6 +:103EA0000E9452110E94891DE4CE81E08E25FBCE36 +:103EB0001F93CF93DF93CDB7DEB767970FB6F89414 +:103EC000DEBF0FBECDBF4B8B5C8B6D8B7E8B8F8B24 +:103ED0006111109249021A8A198A85E0FE017396CF +:103EE000DE011D9601900D928A95E1F786E0FE01B4 +:103EF0003D96DE01179601900D928A95E1F7CE016D +:103F000007960E94DF1D882389F016E08091460203 +:103F100090911502891349C067960FB6F894DEBFD9 +:103F20000FBECDBFDF91CF911F91089586E0FE01B6 +:103F30003796DE01119601900D928A95E1F78A85F8 +:103F40009B85892B11F38F81988589238F3FE9F217 +:103F50002091150230E0C9010196877099274091A0 +:103F600046024817190671F40E9461131092150257 +:103F70001092460286E0EFE0F2E0DF011D928A95A2 +:103F8000E9F7C3CF96E0929FD001939FB00D112423 +:103F9000AA5EBD4FFE01319601900D929A95E1F710 +:103FA000809315020E940F0AB0CF819FC001112497 +:103FB0008A5E9D4F0E94DF1D882309F4ADCF80915A +:103FC000460290E0019687709927809346029ECF23 +:103FD000CF93DF93CDB7DEB728970FB6F894DEBF47 +:103FE0000FBECDBF85E0E9E9F3E0DE011196019057 +:103FF0000D928A95E1F78091C7029091C802A09135 +:10400000C9028E839F83A887288540917D025091A5 +:104010007E0260917F02709180023FB7F894809198 +:10402000A5039091A603A091A703B091A8033FBF59 +:10403000841B950BA60BB70B84369105A105B10522 +:1040400010F4222319F1809135019091360187599E +:104050009D4F4091340150E04930510510F048E047 +:1040600050E0BE016F5F7F4F0E94A22E85E090E07E +:104070000E94EA2C892BB1F40E94840560937D0292 +:1040800070937E0280937F02909380021092C90207 +:1040900081E028960FB6F894DEBF0FBECDBFDF914A +:1040A000CF91089580E0F5CFCF93DF9300D000D07B +:1040B000CDB7DEB74091650250916602609167020C +:1040C000709168022FB7F8948091A5039091A60390 +:1040D000A091A703B091A8032FBF841B950BA60B3B +:1040E000B70B84369105A105B10568F10E94A20FB6 +:1040F0006E5F7F4F8F4F9F4F69837A838B839C8343 +:1041000080912B0190912C0187599D4F40912A015C +:1041100050E04530510510F044E050E0BE016F5FC3 +:104120007F4F0E94A22E84E090E00E94EA2C892B0F +:1041300061F40E9484056093650270936602809327 +:1041400067029093680281E001C080E00F900F90B9 +:104150000F900F90DF91CF9108956F927F928F9281 +:104160009F92AF92BF92CF92DF92EF92FF920F9306 +:104170001F93CF93DF930F92CDB7DEB7862E5A01F0 +:104180006901682E880F7708C3010E94EA2C892BE9 +:1041900009F088C08AE0869DF001879DF00D11240A +:1041A000E050FF4F458150E04115510511F041E0CD +:1041B00050E08AE0869DF001879DF00D1124E050CB +:1041C000FF4F6681778167597D4FCE0101960E942E +:1041D000A22EF50140815181628173812FB7F8943D +:1041E0008091A5039091A603A091A703B091A80385 +:1041F0002FBF841B950BA60BB70B84369105A10529 +:10420000B10540F4B701C8010E94E2059981891700 +:1042100009F44FC0082C000C9908C4010E94EA2C34 +:10422000892B91F0B12C8B2D0F90DF91CF911F91A5 +:104230000F91FF90EF90DF90CF90BF90AF909F9045 +:104240008F907F906F9008958AE0889DF001899DFE +:10425000F00D1124E050FF4F458150E0E416F506C3 +:1042600008F4A7018AE0889DF001899DF00D1124D2 +:10427000E050FF4F6681778167597D4FC6010E94EC +:10428000A22EB701C8010E94E20599818913CACF05 +:104290000E948405F5016083718382839383BB242C +:1042A000B394C1CFB12CA701B801C6010E94A22EC0 +:1042B000BACFBB24B394F7CFCF92DF92EF92FF92A5 +:1042C0000F931F93CF93DF930F92CDB7DEB7EE24FA +:1042D000E394F12C00E712E09E012F5F3F4F41E68F +:1042E00052E063E082E00E94AD20D82E882341F1A5 +:1042F00000919502802F90E09C0127563D4F790157 +:104300001981F9018081181BC12E80E00EC0CA946A +:10431000F70180818F5F80838AEA002319F00130E2 +:1043200019F48BE40E94C60F8D2D1C1484F3912F79 +:1043300017FD90E0191B11110EC081110E94D309C5 +:104340008D2D0F90DF91CF911F910F91FF90EF90E6 +:10435000DF90CF9008951F5FF701808181508083A7 +:1043600089EA002319F0013019F48EE40E94C60F87 +:104370008D2DE1CFCF92DF92EF92FF920F931F939B +:10438000CF93DF9300D000D00F92CDB7DEB76B0193 +:1043900085E0E82EF12C0AE612E09E012F5F3F4FE8 +:1043A0004DE552E061E080E00E94AD20882349F0B5 +:1043B00095E0FE013196A8E5B2E001900D929A9544 +:1043C000E1F795E0E8E5F2E0D60101900D929A95CB +:1043D000E1F70F900F900F900F900F90DF91CF911A +:1043E0001F910F91FF90EF90DF90CF9008957F92F3 +:1043F0008F929F92AF92BF92CF92DF92EF92FF92F5 +:104400000F931F93CF93DF93CDB7DEB72F970FB6E0 +:10441000F894DEBF0FBECDBF8E010F5F1F4F8AE045 +:10442000D8011D928A95E9F782E9C82E81E0D82E3D +:10443000F12CE12CAA24A394B12C23EA822E21E0B2 +:10444000922EF60181916F018F3F09F443C0F894D9 +:10445000E82FE295EF70F0E021A18F70A50102C076 +:10446000440F551F8A95E2F7CA01922F982B91A30A +:1044700092A18095892382A30E94EF0700C0ECE9F6 +:10448000F1E0712C31E021912F3F09F47AC0A22F85 +:10449000A295AF70B0E090968C9190E02F7002C022 +:1044A000959587952A95E2F780FD6BC0832F782A32 +:1044B000330F8E169F0639F7F601319780818F3FB3 +:1044C00011F00E94F10750EA5A95F1F7F801EE0D4C +:1044D000FF1D70828FEFE81AF80A95E0E916F104E3 +:1044E00009F0AFCF4AE050E0B80188E892E00E94BE +:1044F000952E7C01892B41F08AE0F801A8E8B2E012 +:1045000001900D928A95E1F710919302E114F10464 +:10451000D1F181E080934F020E94900590934E026A +:1045200080934D0280914D0290914E020E9475053C +:10453000059778F0A8E8B2E0E12FF0E0E655FD4FEE +:104540008DE892E02D9121938A179B07D9F710925D +:104550004F0281E090E0EF28D1F02F960FB6F8944B +:10456000DEBF0FBECDBFDF91CF911F910F91FF90A6 +:10457000EF90DF90CF90BF90AF909F908F907F9003 +:10458000089580E094CF80914F028111CBCF0E949B +:104590006F0FD82EE0919302DE011B967D018823D8 +:1045A00009F473C085E01D928A95E9F70E2F10E09B +:1045B00006551D4F809181028A30A0F54AEB51E2E9 +:1045C000B701C8010E942B0F8823D9F14CE551E2B5 +:1045D000B701C8010E942B0F882399F144E550E2EE +:1045E000B701C8010E942B0F882359F148EE5FE103 +:1045F000B701C8010E942B0F882319F11092810284 +:104600008091920290E045E050E0B70186559D4FC1 +:104610000E94952E21E020935602892B49F5D12C3A +:104620008D2D9BCF80915002909151020E94750573 +:10463000843F914018F680915602811112C080E0AB +:104640008CCF809181028F3F29F08F5F8093810210 +:104650008A30B0F20E9490059093510280935002EC +:10466000EACF85E0F70111928A95E9F71092560298 +:10467000A0919202B0E0A655BD4F85E0FE013B96A9 +:1046800001900D928A95E1F7CBCFF0E0E655FD4F12 +:10469000F89485E0AAE6B2E001900D928A95E1F7E0 +:1046A00065E070E08AE692E00E94E205809369028C +:1046B0000E94EF07F894E0919C02F0E0E756FD4F6E +:1046C00080818B878093700261E070E0C7010E9457 +:1046D000E20580936F020E94EF07F894C090710288 +:1046E000D0907202E0907302F090740280915202B6 +:1046F00090915302A0915402B0915502C816D90668 +:10470000EA06FB06D1F0C0925202D0925302E09228 +:104710005402F09255020E946F0F81110EC00E9448 +:104720008405C61AD70AE80AF90AC0928202D09212 +:104730008302E0928402F09285020E94EF07F894CF +:1047400080917C02882379F180FF0DC080917502F1 +:1047500080FF2CC09091990391609093990360E041 +:1047600086950E94E81280917C0281FF09C020E0BA +:104770004091780260917702809176020E94D9116F +:1047800080917C0282FF06C080917B02882389F0A1 +:104790000E94AC1180917C0283FF03C081E0809372 +:1047A000C40210927C020E94EF0749CF0E94140FAE +:1047B000DACF0E94FE05EECF90E080E00E944E2E00 +:1047C000893E9E4F11F40C94851180E008951F924C +:1047D0000F920FB60F9211242F933F934F935F9335 +:1047E0006F937F938F939F93AF93BF93CF93DF93F9 +:1047F000EF93FF93D091E900DF708091EC00C82F18 +:10480000C17080FDC0E81092E9008091F000877FC0 +:104810008093F00078940E946C131092E9008091CC +:10482000F00088608093F000CD2BCF70C093E9003A +:10483000FF91EF91DF91CF91BF91AF919F918F91B8 +:104840007F916F915F914F913F912F910F900FBE8C +:104850000F901F9018951F920F920FB60F92112470 +:104860002F933F934F935F936F937F938F939F9378 +:10487000AF93BF93EF93FF938091E10082FF09C054 +:104880008091E20082FF05C08091E1008B7F8093E0 +:10489000E1008091DA0080FF24C08091D80080FF81 +:1048A00020C08091DA008E7F8093DA008091D90059 +:1048B00080FF9DC080E189BD82E189BD09B400FE11 +:1048C000FDCF81E08093B9038091AC03811109C0D1 +:1048D0000E94D6030E94A1048091E200846080932C +:1048E000E2008091E10080FF17C08091E20080FF2C +:1048F00013C08091E2008E7F8093E2008091E200FD +:1049000080618093E2008091D80080628093D8001B +:1049100019BC85E08093B9038091E10084FF2BC02E +:104920008091E20084FF27C080E189BD82E189BDDA +:1049300089B5982F917080FFFBCF8091D8008F7D33 +:104940008093D8008091E1008F7E8093E100809178 +:10495000E2008F7E8093E2008091E200816080938C +:10496000E2008091BA03882309F447C084E0809371 +:10497000B9038091B9038091E10083FF27C0809142 +:10498000E20083FF23C08091E100877F8093E100F4 +:1049900082E08093B9031092BA038091E1008E7F88 +:1049A0008093E1008091E2008E7F8093E20080910D +:1049B000E20080618093E20042E060E080E00E94DB +:1049C0006F048091F00088608093F000FF91EF9178 +:1049D000BF91AF919F918F917F916F915F914F9117 +:1049E0003F912F910F900FBE0F901F90189519BCFB +:1049F0001092B9031092AC0374CF8091E30087FD4D +:104A000093E09093B903B5CF78941F921FB61F928D +:104A100011248F939F93AF93BF938091A50390919F +:104A2000A603A091A703B091A8030196A11DB11DF3 +:104A30008093A5039093A603A093A703B093A80324 +:104A4000BF91AF919F918F911F901FBE1F9018959E +:104A50001F921FB61F9211248F939F93AF93BF9302 +:104A60008091A403811113C08091A5039091A603A6 +:104A7000A091A703B091A8034196A11DB11D8093F9 +:104A8000A5039093A603A093A703B093A803BF9197 +:104A9000AF919F918F911F901FBE1F901895CDB71A +:104AA000DEB7AA970FB6F894DEBF0FBECDBF84B7AE +:104AB000877F84BF0FB6F894A895809160008861C5 +:104AC00080936000109260000FBE80E890E00FB607 +:104AD000F89480936100909361000FBE85B7806861 +:104AE00085BF85B7806885BF8DEE97E09093E9011B +:104AF0008093E8010E94D6030E94A1048091E20005 +:104B000084608093E20078948091B9038823A1F0B7 +:104B10001091E9001F709091EC00892F817090FD39 +:104B200080E8182B1092E9008091E80083FD0E9434 +:104B30006C131F701093E90082E084BD93E095BD73 +:104B40009AEF97BD80936E001092820210928302BA +:104B500010928402109285020E948511811102C078 +:104B60000E94C4100E946F0F80933C0180913C0111 +:104B7000882309F46DC01092590182E280935A0192 +:104B80000E946F0F81110E94DD2B80913C0180916A +:104B90003C0195E0811190E09093930285E0891BA0 +:104BA0008093920202E911E067E9E62E61E0F62EB9 +:104BB000D8018D918D018F3F11F00E94F107E01611 +:104BC000F106B1F70CE911E053EAE52E51E0F52EBC +:104BD000F80181918F018F3F11F00E94F107E016DB +:104BE000F106B1F78AE0EAEAF2E0DF01282F1D9230 +:104BF0002A95E9F7E8E8F2E0DF011D928A95E9F7E6 +:104C00000E94DC23811102C00E94351682E090E0F0 +:104C10000E94402E80939F020E949E1190938702D3 +:104C2000809386020E94F721EFE3FCE93197F1F7C8 +:104C300000C000000E94F7218091AA0280FF0CC0F2 +:104C40006FEF7FEF90E080E00E94722E0E9464057B +:104C500082E28093590192CF83E090E00E94402E3F +:104C60000E94CC0A0E946F0F811102C00E94E02BAB +:104C700080919402811138C00E94DC23811104C00C +:104C80000E9435160E94491388E090E00E94482E49 +:104C90006093990370939A0380939B0390939C0372 +:104CA0008091C90283608093C9026E7F71F40E9473 +:104CB000491388E090E00E94482E60939903709316 +:104CC0009A0380939B0390939C030E9405060E9485 +:104CD000FE058091990380FF04C060E086950E94E4 +:104CE000E81281E08093940280913C01811106C01A +:104CF00084E980934A0182E98093490120914A0125 +:104D0000A22FA295AF70B0E091963C9191972F7031 +:104D100081E090E0BC01022E01C0660F0A94EAF720 +:104D2000462F4095432391964C93919792963C91B0 +:104D30009297362B92963C93929740914901E42F9B +:104D4000E295EF70F0E031A14F70042E01C0880FA2 +:104D50000A94EAF7982F9095932391A392A1892B17 +:104D600082A390968C9190E002C0959587952A95A4 +:104D7000E2F7817020A130E002C0359527954A9571 +:104D8000E2F792E020FF90E0892B80939D029091C2 +:104D90003C0181E0982790939C02891B80939502A7 +:104DA0008DE391E09093A1038093A00328E1622E0C +:104DB000712C30E4532E44EBA42E42E0B42E8091AB +:104DC000B90300E112E1853009F448C20E94F721DD +:104DD00081110E9484059AEAC92E92E0D92EE0EA58 +:104DE000F2E0D60110E000E0802EED9081918E156A +:104DF00009F443C28E25912CFF24F394982F9F2110 +:104E000009F436C20E946F0F882399F099A28AA2F2 +:104E1000EF2081E009F480E08BA30E94900581607F +:104E2000782F9DA38CA349A15AA16BA18DA10E94AB +:104E3000581FF801E056FD4F8081F826F0828091DE +:104E4000C802882309F464C08091C702E0919903E5 +:104E5000E695E81BE093C302823009F025C2F0E03A +:104E6000E95BFD4FE4910E2F10E080E0E82E8FE02B +:104E7000F82E8091C402882361F01092C4020E942F +:104E8000BD0F9093C2028093C1021092C60210928D +:104E9000C5020E94BD0FE091C102F091C2029C01C7 +:104EA0002E1B3F0B2F3F3F4798F52091980222235E +:104EB000B1F0109298022091960230919702821BD5 +:104EC000930B8F3F9F4758F4205D3A4830939702E9 +:104ED000209396028091C90288608093C9028090D5 +:104EE000C5029090C602E00FF11FF093C202E0935A +:104EF000C10281EC92E0F70109958091C502909181 +:104F0000C602892B29F4892819F081E08093980240 +:104F100080919D02E82FEE0FEE0F90914A01A92F8C +:104F2000A295AF70B0E090962C9130E09F7002C0D7 +:104F3000359527959A95E2F721703327909149018D +:104F4000A92FA295AF70B0E090964C9150E09F7061 +:104F500002C0559547959A95E2F7CA018170992745 +:104F600040FF02C082E090E0822B8E2B80939D0256 +:104F700010919C028F70E82FF0E0ED55FE4F80817C +:104F800090919B02890F80939B0220E0833084F0F4 +:104F9000E12FF0E0E756FD4F80818F5F80838AEA42 +:104FA000112319F0113019F48BE40E94C60F21E08F +:104FB00080919B028E3F84F4E12FF0E0E756FD4F95 +:104FC00080818150808389EA112319F0113019F40E +:104FD0008EE40E94C60F21E080919B02082E000CF7 +:104FE000990B63E070E00E94C02D80939B02211119 +:104FF0000E94D30986E0EBEBF2E0DE01119601900E +:105000000D928A95E1F7F090BD02E090BE021091FA +:10501000BF020091C0021092BD021092BE02109217 +:10502000BF021092C0028F2D8E2909F448C08091D2 +:10503000B9029091BA020E9475059C019091B50247 +:10504000992309F454C323333105C8F19F3F19F064 +:105050009F5F9093B502FF2059F00E9473079FEF66 +:105060001F140CF491E0899F802D11248093BD02C0 +:10507000EE2059F00E9473079FEF1E140CF491E08C +:10508000899F802D11248093BE023091BD0233236D +:10509000B1F02091BE02222391F045EB3403C00110 +:1050A0001124992309F45AC19093BD0245EB2403BE +:1050B00090011124332309F455C13093BE02812F8E +:1050C000802B09F448C08091B7029091B8020E94E9 +:1050D00075059C019091B402992309F403C3253608 +:1050E0003105C8F19F3F19F09F5F9093B4021123DF +:1050F00059F00E9451079FEF11160CF491E0899F1F +:10510000802D11248093BF02002359F00E94510783 +:105110009FEF10160CF491E0899F802D112480934D +:10512000C0023091BF023323B1F02091C00222238C +:1051300091F045EB3403C0011124992309F416C101 +:105140009093BF0245EB240390011124332309F40B +:1051500011C13093C0028091BD029091BE02892B93 +:105160009091BF02892B9091C002892B11F00E946F +:10517000B10686E0FE013196ABEBB2E001900D92F4 +:105180008A95E1F70E94920F90919E02891721F073 +:105190000E94920F80939E028091B903843009F09F +:1051A0000ECE83E08093E9008091E80082FF07CE75 +:1051B0008091E80090E085FF0CC00E94F50330E28A +:1051C000E32EF12C8E010F5F1F4F882309F4E0C0FE +:1051D00091E08091E8008B778093E800992309F4AF +:1051E000EECDE981E150E33108F034C1F0E0EF5257 +:1051F000F14D0C94F62D8091B903843009F1109291 +:10520000A4030FB6F894A895609260000FBE509268 +:10521000600083B7817F846083BF83B7816083BF71 +:105220007894889583B78E7F83BF0FB6F894A8953E +:1052300080916000886180936000109260000FBED2 +:105240008091B803882351F00E94F721EAEAF2E046 +:105250008191811128C2AE16BF06D1F78091B903A2 +:10526000853009F4C8CF0E9461130E94920FAECD21 +:105270009394FF0C27E09212C1CD0F5F1F4F0A30AD +:10528000110509F0B1CD8FEF8EA38FA318A60E9450 +:1052900090058160782F9AA789A74EA15FA168A584 +:1052A0008AA50E94581FCBCD863059F4F0E0EC5B04 +:1052B000FD4FE4910E2F10E0B0EFEB2EBEE0FB2E81 +:1052C000D8CD893061F4E695F0E0EF5BFD4FE491D5 +:1052D0000E2F10E0ABE3EA2EAEE0FA2ECACD8F30EF +:1052E00061F4E695F0E0E25CFD4FE4910E2F10E0F2 +:1052F000FFE9EF2EFDE0FF2EBCCD853159F4F0E043 +:10530000E55CFD4FE4910E2F10E0E5E1EE2EEDE0BF +:10531000FE2EAFCD08E210E052E8E52E5CE0F52E5F +:10532000883109F4A6CD833249F4E9E3F2E005912E +:10533000149174E9E72E7EE0F72E9BCD04EF11E087 +:1053400062E4E62E6CE0F62E843209F492CD00ED94 +:1053500017E04DEFE42E45E0F42E8BCD81E08093F5 +:10536000BD02A4CE81E08093BE02A9CE81E08093ED +:10537000BF02E8CE81E08093C002EDCE8091F100C3 +:10538000D8018D938D01B1E0EB1AF10809F420CF1B +:105390008091E80085FDF2CF8091E8008B778093C3 +:1053A000E8000E94F503882399F312CF1A8289E05E +:1053B0008B8311C08A81823009F48BC1833091F1D3 +:1053C000813009F047C00E9484050E94FC2D6B8348 +:1053D0007C838D839E838091B903843009F0EFCC68 +:1053E0001091E9001F709091EC00892F817090FD61 +:1053F00080E8182B82E08093E9008091E80080FF2C +:105400000DC050E040E060E270E0CE0101960E94E5 +:1054100026048091E8008E778093E8001F70109337 +:10542000E900CDCCFE013396D6018D916D018193BB +:10543000AA16BB06C9F7CFCF8A81823059F46B8197 +:105440007C818D819E810E94FC2D86E290E00E94ED +:10545000542EC1CF8FEF8983BECF4C816B818A815F +:105460000E94F0109827892798279E838D83B3CFB9 +:10547000ED80FE80FE24EF24FE248A810B81BEE0B5 +:105480000B9F80011124ECE88E9F000D111D11244B +:105490008C8190E0880F991F080F191F6F2DC8018C +:1054A00087960E94542E6E2DC8018896D0CF0E94F8 +:1054B000571091CF8A818138C1F060F4803809F0AB +:1054C0008ACF20E04B8160919B0380919A030E94D8 +:1054D000D91181CF8238E9F0833809F07CCF20E000 +:1054E00040919C036C818B81F2CF60E08B810E94A4 +:1054F000E8128B81811103C00E94140F6CCF809140 +:10550000990381608093990360E086950E94E81278 +:1055100062CF8B8180939D035ECF8A81813899F021 +:1055200030F4803809F057CF80919C0341CF823806 +:1055300091F0833809F04FCF80919A038B8380914B +:105540009B038C8348CF8091990380FF02C086958E +:105550002FCF80E02DCF80919D032ACF60919903BA +:1055600070919A0380919B0390919C030E94C711B4 +:1055700032CF80E18A832FCF81E08A8389EA18CFF6 +:105580000A811B81102701271027CE0101966C018B +:10559000EC80DC01AE0DB11D7D01C801895A9D4F23 +:1055A000EC14FD0409F417CF093AB1E01B0750F4DD +:1055B0000E94402EF60184830F5F1F4FBFEFCB1A6E +:1055C000DB0AEBCFD60114961C92F6CF0A811B8121 +:1055D000102701271027FE0131966F01EC80E00EA5 +:1055E000F12EF11CC801895A9D4F0E151F0509F4B3 +:1055F000F2CE093AF1E01F0728F4D60114966C9117 +:105600000E94542EBFEFCB1ADB0A0F5F1F4FEACF69 +:105610000E944710E0CE84E0ADCF0A811B811027A5 +:1056200001271027FE0131966F01EC80CF018E0D0E +:10563000911D7C01C8018796EC14FD0409F4CBCEC2 +:105640000033A2E01A0750F40E94402EF601848332 +:105650000F5F1F4FBFEFCB1ADB0AECCFD6011496BA +:105660001C92F6CF0A811B81102701271027FE010B +:1056700031966F01EC80E00EF12EF11CC801879687 +:10568000E016F10609F4A7CE0033F2E01F0728F474 +:10569000D60114966C910E94542EBFEFCB1ADB0AF0 +:1056A0000F5F1F4FEBCF09BD19BD09B400FEFDCF41 +:1056B0008091D8008F7D8093D8008091E000826037 +:1056C0008093E0008091E00081FDFCCF0E94611397 +:1056D000C5CD86E290E00E94402E1B821C821D8276 +:1056E0008E8379CE2D32314008F0FECC34CD2D3270 +:1056F000314008F0ADCCE3CC8EE14B9B02C0815031 +:10570000E1F74B9BFECF08955B9880E28A95F1F715 +:105710005B9A0895FC013BE03A95F1F798E020E0B0 +:1057200080E031E040E14A95F1F7880F4B9B02C0E1 +:105730008160232742E04A95F1F7000040E14A9555 +:10574000F1F7915079F790E19A95F1F799B132E03C +:105750003A95F1F7000040E14A95F1F793FB99275C +:1057600090F992272081920F90830895EF92FF92F3 +:105770000F931F93CF93DF930F92CDB7DEB71982AC +:105780008C017C01E60EF11C0E151F0561F481E011 +:105790009981911180E00F90DF91CF911F910F912E +:1057A000FF90EF9008950E947C2BCE0101960E94FD +:1057B0008A2BF80181938F01E7CF539A5B9A089562 +:1057C00053985B9AEB9AE9E6F0E080818F738083CF +:1057D00008956150770B91E001C0990F6A95EAF73F +:1057E00020E031E0911108C0222391F05B9A80E221 +:1057F0008A95F1F75B980895492F482339F05B9A11 +:10580000232740E24A95F1F79695ECCF5B98F9CFC4 +:105810005B98EDCFFF920F931F93CF93DF93EC0133 +:105820008C01060F111DC017D10731F4DF91CF9104 +:105830001F910F91FF900895F9900E94842B68E0CA +:105840008F2D0E94E92BEFCF1F920F920FB60F9270 +:105850001124EF92FF920F931F932F933F934F9337 +:105860005F936F937F938F939F93AF93BF93EF93C8 +:10587000FF93CF93DF930F92CDB7DEB719820E94CB +:105880007C2BCE0101960E948A2BA82FA695A69567 +:10589000A695282F229525709A2F9570290F922F63 +:1058A000937026952695920F982797708981982B4B +:1058B00009F075C0A73008F072C080E18A95F1F751 +:1058C0005B9A539AB2E0BA95F1F700C05B98EA2E62 +:1058D000F12CEAE0AE9FD0011124A050BF4F1896E2 +:1058E000ED91FC9119973097B1F060919001709112 +:1058F000910116962D913C911797260F371F1396FD +:105900008D919C911497680F791F15964C9115975E +:1059100012968C9109958AE08E9DF0018F9DF00D75 +:105920001124E050FF4F6581662351F020919001D2 +:105930003091910186819781820F931F0E940A2CDA +:105940000E94842BF0E1FA95F1F75B9853985B9AEB +:1059500080E18A95F1F78AE08E9D80018F9D100D80 +:10596000112400501F4FD80112966C911297662394 +:1059700071F1209190013091910113968D919C913C +:10598000820F931F0E94B62BD801ED91FC918823C2 +:1059900011F088E001C082E080830E947C2B0F9090 +:1059A000DF91CF91FF91EF91BF91AF919F918F9137 +:1059B0007F916F915F914F913F912F911F910F9127 +:1059C000FF90EF900F900FBE0F901F901895ED91E4 +:1059D000FC91DFCF0F931F93CF93DF93EC010797D9 +:1059E0000CF0A9C08AE08C9FF0018D9FF00D11246E +:1059F000E050FF4F80819181892B09F49CC0F8947D +:105A0000539A5B9885E08A95F1F700008C2F869574 +:105A100085709C2F9570890F982F93708695869529 +:105A2000890F8E0193E0000F111F9A95E1F7082B63 +:105A30000E94842B00C068E0802F0E94E92BA0E127 +:105A4000AA95F1F753985B9A4B9B27C087E090E0AB +:105A50004B9925C08AE08C9F80018D9F100D1124E9 +:105A600000501F4FF80165816623A1F1209190013C +:105A70003091910186819781820F931F0E94B62BEE +:105A8000811128C0539A5B9AD801ED91FC9182E074 +:105A90008083789482E090E016C000C0D5CF019753 +:105AA000B9F4539A5B9A8AE08C9FF0018D9FF00DB8 +:105AB0001124E050FF4F0190F081E02D81E08083C0 +:105AC000789481E090E0DF91CF911F910F9108953C +:105AD00000C0BECF0E947C2BB0E2BA95F1F75B9874 +:105AE000539AE0E1EA95F1F78AE08C9FF0018D9FEF +:105AF000F00D1124E050FF4F6281662351F0209198 +:105B000090013091910183819481820F931F0E94B3 +:105B10000A2C0E94842B8AE08C9FF0018D9FF00D4F +:105B20001124E050FF4F0190F081E02D1082789415 +:105B300090E080E0C8CF84E090E0C5CF87FB082EDE +:105B4000062687FD819567FD61950E94342E0EF42F +:105B5000919507FC81950895AA1BBB1B51E107C0D5 +:105B6000AA1FBB1FA617B70710F0A61BB70B881FED +:105B7000991F5A95A9F780959095BC01CD0108957C +:105B800097FB072E16F4009407D077FD09D00E94EA +:105B9000AC2D07FC05D03EF4909581959F4F08955C +:105BA000709561957F4F0895A1E21A2EAA1BBB1B29 +:105BB000FD010DC0AA1FBB1FEE1FFF1FA217B307D9 +:105BC000E407F50720F0A21BB30BE40BF50B661FEF +:105BD000771F881F991F1A9469F7609570958095B3 +:105BE00090959B01AC01BD01CF010895EE0FFF1F01 +:105BF0000590F491E02D0994692796276927782765 +:105C00008727782708950E940B2E332312F48A1BCE +:105C10009B0B0C941C2EA29FB001B39FC001A39FAD +:105C2000700D811D1124911DB29F700D811D1124D5 +:105C3000911D08950E940B2EB7FF0895821B930BB0 +:105C400008950E940B2EA59F900DB49F900DA49FC8 +:105C5000800D911D11240895B7FF0C94212E0E94F0 +:105C6000212E821B930B0895991B79E004C0991F84 +:105C7000961708F0961B881F7A95C9F780950895A6 +:105C8000F999FECF92BD81BDF89A992780B5089504 +:105C9000A6E1B0E044E050E00C947A2EA8E1B0E038 +:105CA00042E050E00C947A2E262FF999FECF92BD57 +:105CB00081BDF89A019700B4021639F01FBA20BDD1 +:105CC0000FB6F894FA9AF99A0FBE08950396272F03 +:105CD0000E94552E0E94542E252F0E94552E242FAF +:105CE0000C94552E0196272F0E94552E0C94542E5D +:105CF000DC01CB01FC01F999FECF06C0F2BDE1BD8C +:105D0000F89A319600B40D9241505040B8F708957A +:105D1000FC014150504030F001900616D1F7319708 +:105D2000CF010895882799270895FB01DC0104C05D +:105D30008D910190801921F441505040C8F7881B83 +:105D4000990B0895FB01DC0102C001900D924150B6 +:105D50005040D8F70895F894FFCF70117011791161 +:105D600079117B11791179117911701170118011EC +:105D700079117911801152147A141D167A141D1696 +:105D8000AD14CE141D16CC15D915EE19EE19291A1D +:105D9000291AD71AF11A591A591AFC1A691B7A1BAF +:105DA0007A1BD629DA291C2A2D2A382A572A5A2A58 +:105DB0008D2AAE2A2A2A2A2AB92ABC2AC02AE62AE9 +:085DC000082B0B2B0D2B322BDD +:105DC800F2010000000100000000F20100000005DF +:105DD80001000000F2010000000106000000F201CD +:105DE8000000000107000000F201040800000000A4 +:105DF8000000F201080C000000000000016105CA63 +:105E08000BA90BA50BA10B6005949201191A1B1C79 +:105E18001D1E1F202122010201004400444401816B +:105E28008283E200E900EA00B500B600B700CD00C1 +:105E38008301CC008A0192019401210223022402E9 +:105E48002502260227022A02B300B4006F00700060 +:105E580069026697C634F40000000000F5F6F731D1 +:105E680033323600FF0100010000FFFF000001008F +:105E780001FF0000010202020206060609090909DB +:105E880009090F0F0F0F0F0F1515151819191919E3 +:105E9800191919191919232440227B49012701AC22 +:085EA800009206AB06CB0600D8 +:00000001FF diff --git a/keyboards/aleblazer/zodiark/keymaps/via/rules.mk b/keyboards/aleblazer/zodiark/keymaps/via/rules.mk index 76d3c49ffd61..1e5b99807cb7 100644 --- a/keyboards/aleblazer/zodiark/keymaps/via/rules.mk +++ b/keyboards/aleblazer/zodiark/keymaps/via/rules.mk @@ -1,2 +1 @@ -RGBLIGHT_ENABLE = yes VIA_ENABLE = yes diff --git a/keyboards/aleblazer/zodiark/rules.mk b/keyboards/aleblazer/zodiark/rules.mk index b91bc280ec75..d03fef8fcc96 100644 --- a/keyboards/aleblazer/zodiark/rules.mk +++ b/keyboards/aleblazer/zodiark/rules.mk @@ -17,11 +17,12 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work NKRO_ENABLE = no # USB Nkey Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output -OLED_ENABLE = yes +OLED_ENABLE = no OLED_DRIVER = SSD1306 # Enable Support for SSD1306 or SH1106 OLED Displays; Communicating over I2C ENCODER_ENABLE = yes SPLIT_KEYBOARD = yes LTO_ENABLE = yes +RGB_MATRIX_ENABLE = no RGB_MATRIX_DRIVER = WS2812 From 65569faa83f3f7477c692622dd3f84445ef58126 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Tue, 30 Nov 2021 21:13:54 -0500 Subject: [PATCH 095/155] Added OLED ifdef --- keyboards/aleblazer/zodiark/keymaps/via/keymap.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/keyboards/aleblazer/zodiark/keymaps/via/keymap.c b/keyboards/aleblazer/zodiark/keymaps/via/keymap.c index 1159afb43483..f9680ecd0273 100644 --- a/keyboards/aleblazer/zodiark/keymaps/via/keymap.c +++ b/keyboards/aleblazer/zodiark/keymaps/via/keymap.c @@ -12,7 +12,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include QMK_KEYBOARD_H -#include "oled.c" +#ifdef OLED_ENABLE + #include "oled.c" +#endif #include "encoder.c" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { From 8ea9cb8e2000d8571575a04e2d9c1f07c4ed136a Mon Sep 17 00:00:00 2001 From: Cesar Rojas Date: Thu, 2 Dec 2021 14:13:03 +0100 Subject: [PATCH 096/155] removed duplicated ifdef --- keyboards/keychron/q1/rev_0101/rev_0101.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/keyboards/keychron/q1/rev_0101/rev_0101.c b/keyboards/keychron/q1/rev_0101/rev_0101.c index 4c8f0238c34b..c712cde50141 100644 --- a/keyboards/keychron/q1/rev_0101/rev_0101.c +++ b/keyboards/keychron/q1/rev_0101/rev_0101.c @@ -16,7 +16,6 @@ #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE #ifdef RGB_MATRIX_ENABLE const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL] = { /* Refer to IS31 manual for these locations @@ -154,4 +153,4 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { } return true; } -#endif \ No newline at end of file +#endif From df4df517f092c532ce5c72ca0a02ba499a1851d4 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 4 Dec 2021 11:56:59 -0500 Subject: [PATCH 097/155] Add acknowledgements and change NO_PIN. --- keyboards/solartempest/sofle/config.h | 4 ++-- keyboards/solartempest/sofle/readme.md | 7 +++++++ .../solartempest/sofle/sofle VIA layout trackball.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index b86f2d64ab00..924144423d9e 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -36,9 +36,9 @@ #define MATRIX_ROWS 10 #define MATRIX_COLS 7 #define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 } -#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, C7 } //C7 is unused on the MCU. It is needed for the encoder key matrix in via. +#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, NO_PIN } //NO_PIN is used for the encoder key matrix in via. #define MATRIX_ROW_PINS_RIGHT { C6, D7, E6, B4, B5 } -#define MATRIX_COL_PINS_RIGHT { F6, F7, B1, B3, B2, B6, C7 } //C7 is unused on the MCU. It is needed for the encoder key matrix in via. +#define MATRIX_COL_PINS_RIGHT { F6, F7, B1, B3, B2, B6, NO_PIN } //NO_PIN is used for the encoder key matrix in via. #define DIODE_DIRECTION COL2ROW #define DEBOUNCE 6 //Default is 5 diff --git a/keyboards/solartempest/sofle/readme.md b/keyboards/solartempest/sofle/readme.md index b76181de980a..a57c29a89231 100644 --- a/keyboards/solartempest/sofle/readme.md +++ b/keyboards/solartempest/sofle/readme.md @@ -55,6 +55,13 @@ Build guide and log is available here: [SofleKeyboard build log/guide](https://j - Double tap layers to stay on a layer instead of momentary push. - Symmetric modifiers (CMD/Super, Alt/Opt, Ctrl, Shift). +### Acknowledgements +- Thanks Drashna for the OLED timeout and extensible rotary encoder code. +- Thanks Dasky for helping me resolve prior trackball code issues. +- Thanks to Hellsingcoder for creating Luna and Jackasaur for optimizing the code for less space. This was the base code I used for Snakey. +- Bongocat code by foureight84, included for those who want to try it easily. +- Stock OLED code by Keyhive and + ## Using with VIA (Important! Please Read.) - After flashing, in VIA make sure to Import Keymap, which is "sofle VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. diff --git a/keyboards/solartempest/sofle/sofle VIA layout trackball.json b/keyboards/solartempest/sofle/sofle VIA layout trackball.json index c8e387509ab5..4a7d56d8e7dc 100644 --- a/keyboards/solartempest/sofle/sofle VIA layout trackball.json +++ b/keyboards/solartempest/sofle/sofle VIA layout trackball.json @@ -77,7 +77,7 @@ ], [ "KC_PSCR", - "KC_5", + "KC_4", "KC_1", "KC_2", "KC_3", From aec6fe6ee80d290960f0dfd7c85e290ee323061f Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 11 Dec 2021 18:39:58 -0500 Subject: [PATCH 098/155] Add option for no OLED on master. --- keyboards/solartempest/sofle/config.h | 11 +++++++---- .../sofle/keymaps/via/snakey_minimal.c | 17 ++++++++++++----- .../sofle/solartempest_sofle_via.hex | 12 ++++++------ 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index 924144423d9e..36a729e4210c 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -86,12 +86,15 @@ #ifdef WPM_ENABLE #define SPLIT_WPM_ENABLE //Enable WPM across split keyboards (+106-268). #endif - //#define SPLIT_LAYER_STATE_ENABLE //Keep on master to save space (+142). - //#define SPLIT_LED_STATE_ENABLE //Keep on master to save space (+112). - //#define SPLIT_MODS_ENABLE //Keep on master to save space (+138). #define OLED_LOGO //Enable to print snakey custom logo on slave side (+108). - //#define OLED_NO_SLAVE //Disable snakey keyboard pet slave OLED rendering (-160). //#define SNEAK_DISABLE //Disable snakey keyboard pet sneak animation to save space (-132). + //#define OLED_NO_SLAVE //Disable snakey minimal keyboard pet slave OLED rendering (-160). + //#define OLED_NO_MASTER //Disable snakey minimal keyboard pet master OLED rendering and render status on the slave (+96). + #ifdef OLED_NO_MASTER + #define SPLIT_LAYER_STATE_ENABLE //Keep on master to save space (+142). + #define SPLIT_LED_STATE_ENABLE //Keep on master to save space (+112). + #endif + //#define SPLIT_MODS_ENABLE //Keep on master to save space (+138). #endif // Haptic feedback settings diff --git a/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c b/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c index 99600c046eb1..01ffe67ea29f 100644 --- a/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c +++ b/keyboards/solartempest/sofle/keymaps/via/snakey_minimal.c @@ -44,7 +44,7 @@ bool showedJump = true; bool isBarking = false; - #if defined(OLED_LOGO) && !defined(OLED_NO_SLAVE) + #if defined(OLED_LOGO) && !defined(OLED_NO_SLAVE) && !defined(OLED_NO_MASTER) static void render_logo(int LUNA_X, int LUNA_Y) { static const char PROGMEM luna_logo[] = { 0x00, 0x00, 0x04, 0xf6, 0xb8, 0xf8, 0xd8, 0xf0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, @@ -174,7 +174,7 @@ // KEYBOARD PET END - #ifndef OLED_NO_SLAVE + #if !defined(OLED_NO_SLAVE) && !defined(OLED_NO_MASTER) static void print_logo_narrow(void) { oled_set_cursor(0,4); oled_write("SOLAR", false); @@ -239,10 +239,17 @@ } else { oled_on(); } - print_status_narrow(); + #ifndef OLED_NO_MASTER + print_status_narrow(); + #endif } else { - #ifndef OLED_NO_SLAVE - print_logo_narrow(); + #ifdef OLED_NO_SLAVE //do not render slave + #else + #if !defined(OLED_NO_MASTER) //render as normal + print_logo_narrow(); + #else //render status on slave + print_status_narrow(); + #endif #endif } return false; diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index 3e4f7bc4f42c..9831184d2602 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -513,8 +513,8 @@ :10200000E81683E0F80679F6DF91CF911F910F91E2 :10201000FF90EF90DF90CF90BF90AF909F908F9008 :102020007F906F900895CF93C82F6FEF811161E279 -:1020300083E290E00E94BC346FEFC11161E184E261 -:1020400090E00E94BC346FEFC11160E385E290E044 +:1020300083E290E00E94BC346FEFC11162E184E260 +:1020400090E00E94BC346FEFC11161E185E290E045 :10205000CF910C94BC3480E00E94131060E086E2C3 :1020600090E00E94BC340E94BE0F0E94AE0F81E03F :102070000C9413100F931F93CF93DF93C42FD0E0D2 @@ -537,8 +537,8 @@ :102180000895843FE1F380E00895883EC0F3813FE5 :10219000D1F7F5CF822F869586958695089583E2AF :1021A00090E00E94A834813289F484E290E00E9499 -:1021B000A834813159F485E290E00E94A83491E07E -:1021C000803309F090E0892F8170089580E0FCCF82 +:1021B000A834823159F485E290E00E94A83491E07D +:1021C000813109F090E0892F8170089580E0FCCF83 :1021D0001F93CF93DF93CDB7DEB768970FB6F89410 :1021E000DEBF0FBECDBF40913A0350913B036091DB :1021F0003C0370913D0380913E0390913F030E9408 @@ -1743,10 +1743,10 @@ :106CDE0005010000003A0200000001060000003A23 :106CEE000200000001070000003A02040800000044 :106CFE000000003A02080C0000000000003A0201F9 -:106D0E001400000000000036323331F7F667669744 +:106D0E001400000000000036323331F7F6FF6697AC :106D1E00C634350000000000012F085E0D3D0D3910 :106D2E000D350D2E08F4F5010021007F2200030120 -:106D3E008000004A004A4A01F6F731333236674C7A +:106D3E008000004A004A4A01F6F731333236FF4CE2 :106D4E00415945520042617365200047616D6520CF :106D5E00005261697365004C6F776572004C4F434A :106D6E004B0043617073004E756D005363726C007F From 217337e1f1ed5778cac2f3a26c2a54c13dc32215 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 12 Dec 2021 00:38:44 -0500 Subject: [PATCH 099/155] Correct splid oled sync when there is only one --- keyboards/solartempest/sofle/config.h | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index 36a729e4210c..ffa812486e7d 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -93,6 +93,7 @@ #ifdef OLED_NO_MASTER #define SPLIT_LAYER_STATE_ENABLE //Keep on master to save space (+142). #define SPLIT_LED_STATE_ENABLE //Keep on master to save space (+112). + #undef SPLIT_OLED_ENABLE //Do not sync OLED state with one OLED only (+100). #endif //#define SPLIT_MODS_ENABLE //Keep on master to save space (+138). #endif From c982e62e24408414453125f6bca52a83cfe119ff Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 12 Dec 2021 23:29:26 -0500 Subject: [PATCH 100/155] Added destiny 2 skate macro and timer --- keyboards/solartempest/sofle/config.h | 2 + .../solartempest/sofle/keymaps/via/keymap.c | 49 +- .../solartempest/sofle/sofle VIA keymap.json | 5 + .../sofle/sofle VIA layout trackball.json | 2 +- .../sofle/solartempest_sofle_via.hex | 2733 +++++++++-------- 5 files changed, 1429 insertions(+), 1362 deletions(-) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index ffa812486e7d..5bc9ee2ad549 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -58,6 +58,8 @@ #define COMBO_TERM 400 //Default combo time is 200ms. This is the time delay allowed between deleting each whole word with shift-backspace. #endif +#define D2SKATE_MACRO_ENABLE //Enable Destiny 2 hunter skate macro (+224) + // Disabled to save space #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index de017b357bad..d617ad711f08 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -55,6 +55,11 @@ bool lshift_held = false; // LShift Backspace Delete whole Word Code bool rshift_held = false; // RShift Backspace Delete whole Word Code static uint16_t held_shift = 0; +#ifdef D2SKATE_MACRO_ENABLE + uint16_t D2SKATE_TIMER = 0; + bool D2SKATE_skated = false; //Has skated + bool D2SKATE_reset = true; //Has skated +#endif #ifdef VIA_ENABLE enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. @@ -64,7 +69,8 @@ static uint16_t held_shift = 0; NML, //Move window to monitor on left SBS, //Shift backspace to delete whole word (Swap KC_BPSC with this) PM_SCROLL, //Toggle trackball scrolling mode - PM_PRECISION //Toggle trackball precision mode + PM_PRECISION, //Toggle trackball precision mode + D2SKATE //Destiny 2 hunter sword skate }; #else enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. @@ -74,7 +80,8 @@ static uint16_t held_shift = 0; NML, //Move window to monitor on left SBS, //Shift backspace to delete whole word (Swap KC_BPSC with this) PM_SCROLL, //Toggle trackball scrolling mode - PM_PRECISION //Toggle trackball precision mode + PM_PRECISION, //Toggle trackball precision mode + D2SKATE //Destiny 2 hunter sword skate }; #endif @@ -195,6 +202,17 @@ void matrix_scan_user(void) { } } #endif + #ifdef D2SKATE_MACRO_ENABLE + if (D2SKATE_reset == false) { //Check if Destiny 2 skate timer is activated + if (timer_elapsed(D2SKATE_TIMER) > 4000) { + rgblight_sethsv_noeeprom(252,255,80); //Set regular game layer colour + D2SKATE_reset = true; + #ifdef HAPTIC_ENABLE + DRV_pulse(12); //trp_click + #endif + } + } + #endif #ifdef ENCODER_ENABLE encoder_action_unregister(); #endif @@ -306,6 +324,33 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } } return false; + #ifdef D2SKATE_MACRO_ENABLE + case D2SKATE: + if (record->event.pressed) { + register_code(KC_0); + wait_ms(34); + register_code(KC_SPC); + unregister_code(KC_0); + register_code(KC_X); + wait_ms(18); + unregister_code(KC_SPC); + unregister_code(KC_X); + rgblight_sethsv_noeeprom(180,255,80); + D2SKATE_skated = true; + } + return false; + case KC_1: + case KC_2: + case KC_3: + if (record->event.pressed) { + if(D2SKATE_skated){ //Start the cooldown timer + D2SKATE_TIMER = timer_read(); + D2SKATE_skated = false; + D2SKATE_reset = false; + } + } + return true; + #endif #ifdef POINTING_DEVICE_ENABLE //Allow modes when trackball is enabled. case PM_SCROLL: diff --git a/keyboards/solartempest/sofle/sofle VIA keymap.json b/keyboards/solartempest/sofle/sofle VIA keymap.json index 3620b3b1e23e..99eb5259d441 100644 --- a/keyboards/solartempest/sofle/sofle VIA keymap.json +++ b/keyboards/solartempest/sofle/sofle VIA keymap.json @@ -39,6 +39,11 @@ "name": "Trackball Precision", "title": "Pimoroni Trackball Precision Mode", "shortName": "PM_PRECISION" + }, + { + "name": "D2 Hunter Skate", + "title": "Destiny 2 Hunter Sword Skate", + "shortName": "D2SKATE" } ], "layouts": diff --git a/keyboards/solartempest/sofle/sofle VIA layout trackball.json b/keyboards/solartempest/sofle/sofle VIA layout trackball.json index 4a7d56d8e7dc..e4b03f1b599b 100644 --- a/keyboards/solartempest/sofle/sofle VIA layout trackball.json +++ b/keyboards/solartempest/sofle/sofle VIA layout trackball.json @@ -106,8 +106,8 @@ "KC_TRNS", "KC_TRNS", "KC_LALT", - "KC_B", "KC_TRNS", + "USER07", "KC_F22", "KC_SPC", "KC_NO", diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index 9831184d2602..d1460312b946 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,9 +1,9 @@ -:100000000C9418060C945F060C945F060C94CE3288 +:100000000C9418060C945F060C945F060C943E3317 :100010000C945F060C945F060C945F060C945F06CC -:100020000C945F060C945F060C9494230C9450235C -:100030000C9487280C945F060C945F060C945F0662 +:100020000C945F060C945F060C94781A0C94341AA6 +:100030000C94F9280C945F060C945F060C945F06F0 :100040000C945F060C945F060C945F060C945F069C -:100050000C945F060C946D240C945F060C945F0660 +:100050000C945F060C94511B0C945F060C945F0685 :100060000C945F060C945F060C945F060C945F067C :100070000C945F060C945F060C945F060C945F066C :100080000C945F060C945F060C945F060C945F065C @@ -194,30 +194,30 @@ :100C10000066006C006500000010034B0065007961 :100C20000068006900760065000000040309040004 :100C300011241FBECFEFDAE0DEBFCDBF04B603FE46 -:100C400027C080916D0690916E06A0916F06B091BD -:100C500070068730904BA740B04BD1F410926D06D0 -:100C600010926E0610926F061092700614BE84B732 +:100C400027C08091720690917306A0917406B091AE +:100C500075068730904BA740B04BD1F410927206C6 +:100C600010927306109274061092750614BE84B723 :100C7000877F84BF0FB6F894A89580916000886143 :100C800080936000109260000FBEE0E0F8E30995E9 -:100C900012E0A0E0B1E0EEECFCE602C005900D929F -:100CA000A033B107D9F726E0A0E3B2E001C01D925E -:100CB000AD36B207E1F70E94AE280C9421360C94B1 -:100CC0000000CF93DF9340916B0650916C064B561A +:100C900012E0A0E0B1E0EEEAFDE602C005900D92A0 +:100CA000A233B107D9F726E0A2E3B2E001C01D925A +:100CB000A237B207E1F70E9420290C9491360C94D8 +:100CC0000000CF93DF93409170065091710640571A :100CD00054409A01205A3F4F21303240C0F020E06A -:100CE00032E0241B350B6091690470916A04FC01A9 +:100CE00032E0241B350B60916E0470916F04FC019F :100CF000CA01240F351FC1E0D0E08217930750F0DE -:100D000070936A0460936904DF91CF91089520E69F -:100D100030E0E9CF4491DC01A559BB4F5C91451708 +:100D000070936F0460936E04DF91CF91089520E695 +:100D100030E0E9CF4491DC01A059BB4F5C9145170D :100D200081F04C93AC01A5E056954795AA95E1F763 :100D3000DE0102C0AA0FBB1F4A95E2F7AD016A2B84 :100D4000752B01963196D9CFE8EDF0E080818E7F4A :100D500080831092E2001092DA001092E100A0EE7F :100D6000B0E08C9181608C9380818F77808319BCF7 :100D7000A7EDB0E08C918E7F8C9380818F7E8083F5 -:100D800010926D0308952091E4003091E50095E6FE +:100D80001092720308952091E4003091E50095E6F9 :100D9000A9012091EC00822F817020FF06C0809174 :100DA000E80080FF06C080E008952091E80022FD61 -:100DB0001AC080917B03882389F0853089F0809167 +:100DB0001AC080918003882389F0853089F0809162 :100DC000EB0085FD0FC02091E4003091E500421753 :100DD0005307F9F29150E1F684E0089582E0089516 :100DE00083E0089581E00895EF92FF920F931F939F @@ -225,10 +225,10 @@ :100E00008091E80085FD0BC08091E8008E7780938B :100E1000E8000E94C306882399F3C82F08C0F70191 :100E200081917F018093F1000150110949F78C2FC6 -:100E3000CF911F910F91FF90EF90089580917D03C6 +:100E3000CF911F910F91FF90EF90089580918203C1 :100E400087FF13C08091E80082FF06C08091E80010 -:100E50008B778093E80004C080917B038111F2CFEF -:100E6000089580917B038823D9F38091E80080FF67 +:100E50008B778093E80004C0809180038111F2CFEA +:100E60000895809180038823D9F38091E80080FF62 :100E7000F8CF8091E8008E77ECCF982F9093E9001F :100E8000242F762F50E0891731F07091EC002091DB :100E9000ED005091F00021FD07C09F5F973071F782 @@ -238,38 +238,38 @@ :100ED000F0002091EE0027FDE0CF80E00895CF9252 :100EE000DF92EF92FF920F931F93CF93DF93C8EDA2 :100EF000D0E088818F7E8883E7EDF0E0808181609B -:100F0000808384E082BF81E080936D0388818E7F3F +:100F0000808384E082BF81E08093720388818E7F3A :100F1000888302EE10E0F80110821092DA0081EE70 :100F2000C82ED12CF601108288818F778883888122 -:100F30008068888388818F7D888319BC10927B03A9 -:100F400010927C0310927A031092790390EEE92EAE +:100F30008068888388818F7D888319BC10928003A4 +:100F40001092810310927F0310927E0390EEE92E9F :100F5000F12CF70180818B7F808388818160888379 :100F600042E060E080E00E943D07F60180818E7FD4 :100F70008083F801808181608083808188608083A4 :100F8000F70180818E7F8083888180618883DF91F3 :100F9000CF911F910F91FF90EF90DF90CF90089528 -:100FA000FC01809183039091840386179707A0F03A +:100FA000FC01809188039091890386179707A0F030 :100FB0006115710529F49091E8009E779093E800FF :100FC00090E06115710551F4911108C08091E8001D -:100FD00082FF34C080E00895BC01F2CF80917B0392 +:100FD00082FF34C080E00895BC01F2CF809180038D :100FE0008823C1F18530C1F18091E80083FD30C0D4 :100FF0008091E80082FDEACF8091E80080FFE1CF98 :101000008091F3002091F200382F6115710519F0DD :101010002830310558F091E02830310509F090E092 :101020002091E8002E772093E800CBCF8191809328 -:10103000F100615071092F5F3F4FE7CF80917B0333 +:10103000F100615071092F5F3F4FE7CF809180032E :10104000882341F0853041F08091E80083FFBECFD6 :1010500081E0089582E0089583E0089508958091E5 -:1010600070030895CF92DF92EF92FF922FB7F8941A -:10107000C0906603D0906703E0906803F090690326 +:1010600075030895CF92DF92EF92FF922FB7F89415 +:10107000C0906B03D0906C03E0906D03F0906E0312 :101080002FBFA7019601261B370B480B590BCA012E :10109000B901FF90EF90DF90CF9008952FB7F894AB -:1010A0006091660370916703809168039091690372 -:1010B0002FBF0895209163033091640328173907E7 -:1010C00071F09093640380936303E0916103F09166 -:1010D0006203309721F00084F185E02D0994089592 -:1010E00020915F03309160032817390771F09093C6 -:1010F000600380935F03E0916103F0916203309796 +:1010A00060916B0370916C0380916D0390916E035E +:1010B0002FBF0895209168033091690328173907DD +:1010C00071F09093690380936803E0916603F09157 +:1010D0006703309721F00084F185E02D099408958D +:1010E00020916403309165032817390771F09093BC +:1010F000650380936403E0916603F0916703309782 :1011000021F00680F781E02D09940895811520E5EE :101110009207F8F48115E0E49E0788F5893391057C :1011200070F48C32910548F48430910580F08E3152 @@ -279,22 +279,22 @@ :10116000A0F491558F3F910509F088F7E6CF8115DE :10117000EAE59E0710F390568115904240F7FB0177 :101180009581907F81E0C9F20895FB019581907F60 -:1011900081E0903291F6F8CF20914E0336E0839FA4 +:1011900081E0903291F6F8CF2091530336E0839F9F :1011A000C0011124629F800D911D1124811522E040 -:1011B000920714F090E080E085599B4F90936C0665 -:1011C00080936B060895FC01680F791F8FEF91E300 +:1011B000920714F090E080E080599B4F9093710665 +:1011C000809370060895FC01680F791F8FEF91E3FB :1011D0002191822728E030E087FF09C0880F892706 :1011E00021503109C9F7E617F70791F70895880FDD -:1011F000F7CFFA01811101C0FB01099480916404C9 -:10120000982F9E7F61F48170826080936404809146 -:101210006704813A18F080EA809367040895883162 +:1011F000F7CFFA01811101C0FB01099480916904C4 +:10120000982F9E7F61F48170826080936904809141 +:101210006C04813A18F080EA80936C040895883158 :10122000B0F381708661F1CFAF92BF92DF92EF92FF :10123000FF920F931F93CF93DF93082F162FE9018F :10124000E42FF0E0E750FB4F611110C0E4915E2FF6 :101250004E2F4983E8835A83DF91CF911F910F91DD :10126000FF90EF90DF90BF90AF900895E62EF12CA5 :101270004491D42EE42FF0E026E0829FC001112497 -:101280002FEF30E0B9010E944834802F90E0880FA2 +:101280002FEF30E0B9010E94B834802F90E0880F32 :10129000991F55E5569FD001579FB00D11248A1B09 :1012A0009B0B982F990F890F5901AE18BF08AE9E5E :1012B000D001AF9EB00DBE9EB00D11245B2F189FC4 @@ -310,10 +310,10 @@ :10135000E12F7FCF80E0089578940895F894E82FE6 :10136000E295EF70F0E031A1282F2F7081E090E03E :1013700001C0880F2A95EAF7982F9095932391A39F -:1013800092A1892B82A30C94AC099091D60292FF72 +:1013800092A1892B82A30C94AC099091DB0292FF6D :1013900006C0282F28712830F9F4877F846093FFD6 :1013A00006C0282F28712831F1F4877E84612091AE -:1013B000D70220FF06C0382F38713830D9F4877F24 +:1013B000DC0220FF06C0382F38713830D9F4877F1F :1013C000816021FF06C0282F28712831D1F4877E43 :1013D000816194FD877E0895282F24712430F9F6C9 :1013E0008B7F8860DCCF282F2471243101F78B7E1E @@ -325,21 +325,21 @@ :10144000C11530E5D30708F0F2C0CF3BD10508F055 :1014500089C0C83AD10508F0DFC0C53AD10508F007 :10146000D3C0C430D105F8F4C130D105E1F040C09B -:101470008533910509F45AC0C997E9F68091D602DF +:101470008533910509F45AC0C997E9F68091DB02DA :10148000837089F0C0EED0E00EC0833E910599F1E3 :1014900070F4803E910501F1823E910561F68091E4 -:1014A000D60282FD21C0CE01DF91CF910895863E04 +:1014A000DB0282FD21C0CE01DF91CF910895863EFF :1014B000910561F1873E910571F1843E910509F036 -:1014C000BACF8091D70281FFEECF8091D602C7EECE -:1014D000D0E084FD0DC0E7CF8091D60280FDF7C03B -:1014E0009091D70290FFDFCFC3EED0E084FFDBCF37 -:1014F000D0E0C0E0D8CF8091D60282FDEBC09091C1 -:10150000D70290FDBFCF84FFCECFF2CF8091D6021D -:1015100083FDDDCFC8CF8091D60283FDDEC09091E0 -:10152000D70291FFF0CFC4EED0E0BDCF8091D602BC -:1015300085FFB9CFC9E2D0E0B6CF8091D60285FF52 -:10154000B2CFC5E3D0E0AFCF8091D60286FFABCF5C -:10155000CAE2D0E0A8CF8091D60286FFA4CFC1E333 +:1014C000BACF8091DC0281FFEECF8091DB02C7EEC4 +:1014D000D0E084FD0DC0E7CF8091DB0280FDF7C036 +:1014E0009091DC0290FFDFCFC3EED0E084FFDBCF32 +:1014F000D0E0C0E0D8CF8091DB0282FDEBC09091BC +:10150000DC0290FDBFCF84FFCECFF2CF8091DB0213 +:1015100083FDDDCFC8CF8091DB0283FDDEC09091DB +:10152000DC0291FFF0CFC4EED0E0BDCF8091DB02B2 +:1015300085FFB9CFC9E2D0E0B6CF8091DB0285FF4D +:10154000B2CFC5E3D0E0AFCF8091DB0286FFABCF57 +:10155000CAE2D0E0A8CF8091DB0286FFA4CFC1E32E :10156000D0E0A1CFC11540E2D40760F4C11581E0FD :10157000D80708F098CFCE01815E9109079708F44B :1015800092CFB6CFC11590E4D90708F4B1CFDF7080 @@ -350,9 +350,9 @@ :1015D000D20708F48DCFDC2FCC27C06FD06A63CF41 :1015E000CE0190568115904208F082CF8D2F8F71D9 :1015F0000E94C50990E0982F882788279F719C0139 -:101600002C2BE901D0624FCFC55AD0E0CE53DE4F2C +:101600002C2BE901D0624FCFC55AD0E0CD53DE4F2D :10161000C881D0E0D06447CFC85AD0E0CC0FDD1FDE -:10162000CB53DE4F0990D881C02DD4643CCFCE017E +:10162000CA53DE4F0990D881C02DD4643CCFCE017F :1016300064E0969587956A95E1F783702C2F26953F :101640002695237040E2249F90011124382B8C2F83 :101650008370C1E0D0E002C0CC0FDD1F8A95E2F7B5 @@ -364,62 +364,62 @@ :1016B000FACE8C2F8F700E94C50934E0D695C7955D :1016C0003A95E1F7CF709C2FEC01D069ECCEC9E3DD :1016D000D0E0E9CEC2EED0E0E6CEC6EED0E0E3CE7A -:1016E0000C944E0880916E0390919402892B9091F6 -:1016F0009302892B80933202E0916103F09162039F -:10170000309731F00280F381E02D82E392E009947A -:1017100008958091920290916102981301C00895FA +:1016E0000C944E088091730390919702892B9091EE +:1016F0009602892B80933402E0916603F091670390 +:10170000309731F00280F381E02D84E392E0099478 +:1017100008958091950290916402981301C00895F4 :101720008F5F8770FACF27E0929F800D1124982F4A :10173000977086958695869523E0829FF001112407 -:10174000E05CFD4F50E040E080E0219130E0092E68 +:10174000ED5BFD4F50E040E080E0219130E0092E5C :1017500002C0369527950A94E2F721703327042EAC :1017600001C0220F0A94EAF7822B4F5F5F4F43308C :10177000510559F7089527E0929F800D1124982F65 :10178000977041E001C0440F9A95EAF786958695D7 -:10179000869593E0899FF0011124E05CFD4F90E075 +:10179000869593E0899FF0011124ED5BFD4F90E069 :1017A00080E070E05191DF0111979B01082E02C08B :1017B000369527950A94E2F7217021952527242351 :1017C00025272C9301968330910561F7089590E0C9 :1017D00080E00E94700890E080E00E945A08109219 -:1017E0009402109293020C94720B809395020C94C5 -:1017F000E70B882341F0809590916E0389238093B5 -:101800006E030C94720B0895882339F090916E0347 -:10181000982B90936E030C94720B08958823B1F16A -:101820009CEF980F913A70F4E4E3F2E09191891300 -:1018300003C0DF0111971C9242E0EA33F407B1F7CD +:1017E0009702109296020C94720B809398020C94BC +:1017F000E70B882341F080959091730389238093B0 +:1018000073030C94720B0895882339F0909173033D +:10181000982B909373030C94720B08958823B1F165 +:101820009CEF980F913A70F4E6E3F2E091918913FE +:1018300003C0DF0111971C9242E0EC33F407B1F7CB :101840000C94720B90E2980F983088F4877021E026 :1018500030E0A90102C0440F551F8A95E2F7CA0182 -:10186000809590916E03892380936E03E9CF9BE569 +:10186000809590917303892380937303E9CF9BE55F :10187000980F933020F490E080E00C947008885A20 :10188000873120F490E080E00C945A0808950F937B :101890001F93CF93C82F882309F469C08CEF8C0F56 -:1018A000813AB0F504E312E08AE392E0F801219175 -:1018B000C21701F122E0EA33F207C9F7EFEF80E047 +:1018A000813AB0F506E312E08CE392E0F801219171 +:1018B000C21701F122E0EC33F207C9F7EFEF80E045 :1018C000D8019D918D01C91781F0EF3F19F4911155 :1018D00001C0E82F8F5F863099F7EF3F31F00E2E71 -:1018E000000CFF0BEE5CFD4FC283CF911F910F9157 -:1018F0000C94720BE4E3F2E02191C21303C0DF0108 +:1018E000000CFF0BEC5CFD4FC283CF911F910F9159 +:1018F0000C94720BE6E3F2E02191C21303C0DF0106 :1019000011971C928E179F07B9F70E94720BD6CFC2 :1019100080E28C0F883068F4C77021E030E001C0AD -:10192000220FCA95EAF780916E03822B80936E0393 -:10193000DCCFEBE5EC0FE33050F4F0E0EE53FE4F7C +:10192000220FCA95EAF780917303822B8093730389 +:10193000DCCFEBE5EC0FE33050F4F0E0ED53FE4F7D :10194000808190E0CF911F910F910C947008C85A3C -:10195000C73168F4EC2FF0E0EE0FFF1FEB53FE4FA2 +:10195000C73168F4EC2FF0E0EE0FFF1FEA53FE4FA3 :1019600080819181CF911F910F910C945A08CF9152 :101970001F910F910895982F92959F7011F0892FC4 :1019800094E0282F2695269511F09E5F822F86954C :1019900009F09F5F892F0895CF93DF93CDB7DEB70E -:1019A00062970FB6F894DEBF0FBECDBF96E0EAE3B4 +:1019A00062970FB6F894DEBF0FBECDBF96E0EFE3AF :1019B000F3E0DE01179601900D929A95E1F796E01B :1019C000FE013796DE011D9601900D929A95E1F782 :1019D00098858823E9F0962B9E8786E0FE013D9648 :1019E000DE01119601900D928A95E1F786E0FE01E5 -:1019F0003196AAE3B3E001900D928A95E1F76296E1 +:1019F0003196AFE3B3E001900D928A95E1F76296DC :101A00000FB6F894DEBF0FBECDBFDF91CF91089522 -:101A100060959623E1CF80936A0370936C03609383 -:101A20006B0380917B038430F9F48093E9008FEF9E +:101A100060959623E1CF80936F0370937103609379 +:101A20007003809180038430F9F48093E9008FEF94 :101A30009091E800815095FD06C095ED9A95F1F7DB :101A400000008111F5CF8091E80085FF0DC050E0C6 -:101A500040E063E070E08AE693E00E94F406809143 +:101A500040E063E070E08FE693E00E94F40680913E :101A6000E8008E778093E8000895BC0184E00C9430 :101A70000B0DBC0183E00C940B0D9C0184E0809362 :101A8000E9009FEF8091E800915085FD06C085ED4B @@ -430,1332 +430,1347 @@ :101AD00095FD06C095ED9A95F1F700008111F5CFBF :101AE0008091E80085FF14C050E040E068E070E0BD :101AF000CE010E94F4068091E8008E778093E80082 -:101B000088E0FE01A1E7B3E001900D928A95E1F72C +:101B000088E0FE01A6E7B3E001900D928A95E1F727 :101B1000DF91CF910895CF92DF92EF920F931F93B1 :101B2000CF93DF93CDB7DEB7CE5DD1090FB6F89472 -:101B3000DEBF0FBECDBF609173018091640480FF52 +:101B3000DEBF0FBECDBF609174018091690480FF4C :101B40004CC0EEEFF5E09E012F5F3F4F8E0101523A :101B50001F4FC901A4914A2F50E0DA01AA0FBB1F01 -:101B6000A40FB51FAA57BC4FCD90DD90EC90D901C2 +:101B6000A40FB51FA557BC4FCD90DD90EC90D901C7 :101B7000CD92DD92ED929D013196A017B10751F7FC -:101B80002091720143E0249F800D911D1124539AEE +:101B80002091730143E0249F800D911D1124539AED :101B90002BB1277F3BB138605FB7F894FC01649F9D :101BA000E00DF11D1124BF018617970749F55FBFAE :101BB000EFE5F4E03197F1F700C00000C252DF4FCB :101BC0000FB6F894DEBF0FBECDBFDF91CF911F914E -:101BD0000F91EF90DF90CF900895809174019091D4 -:101BE000750123E0829FF0011124EA57FC4F891709 +:101BD0000F91EF90DF90CF900895809175019091D3 +:101BE000760123E0829FF0011124E557FC4F89170D :101BF00008F0A7CF1182108212828F5F3396F7CF41 :101C0000DC014D91CD01E8E03BB9000000C047FF89 :101C10002BB9440F000000C000C000C02BB900C0A9 :101C2000EA9591F7C1CF0F931F93CF93DF9300D025 -:101C30000F92CDB7DEB7182F062F8091640480FF76 +:101C30000F92CDB7DEB7182F062F8091690480FF71 :101C400022C09E012F5F3F4F40EA64E68BE20E9474 :101C500014091017C0F48B8199812A8133E0139FF6 -:101C6000F0011124EA57FC4F2183908382831F5F88 +:101C6000F0011124E557FC4F2183908382831F5F8D :101C700033960113F9CF0E948B0D8FE99FE00197F6 :101C8000F1F700C000000F900F900F90DF91CF91FF :101C90001F910F910895CF93DF93C82FD82FD17044 :101CA00081FF04C067E084E00E94130ED11104C0DC :101CB0006FE18CE10E94130EC2FF06C063E180E178 -:101CC000DF91CF910C94130EDF91CF910895E4E64C -:101CD000F4E080818E7F8083E9E4F3E0828181609B +:101CC000DF91CF910C94130EDF91CF910895E9E647 +:101CD000F4E080818E7F8083EEE4F3E08281816096 :101CE00082832FEF80E792E0215080409040E1F71F :101CF00000C000000C948B0D9F92AF92BF92CF92C8 :101D0000DF92EF92FF920F931F93CF93DF937C01AB -:101D10005B016A018091D10201E010E08A3010F489 +:101D10005B016A018091D60201E010E08A3010F484 :101D20000AE010E0C1E0D0E0F894B501C701F60187 :101D30000995982E0E94AC09911004C021960C17A9 :101D40001D076CF4892DDF91CF911F910F91FF90AA :101D5000EF90DF90CF90BF90AF909F900895CC9F71 :101D60009001CD9F300D300D112490E080E045E3CF :101D70004A95F1F70000019682179307C1F7D4CF77 -:101D80008091A202811110C08091D800806180935F +:101D80008091A702811110C08091D800806180935A :101D9000D8008AE18A95F1F700C08091D90080FFD0 -:101DA0000AC081E08093A20281E09091A20291306A -:101DB00009F080E0089582E08093A2020E94A406C8 -:101DC00010927B03F1CF0E94C00E882351F0E09166 -:101DD0006103F0916203309721F00190F081E02DD2 +:101DA0000AC081E08093A70281E09091A702913060 +:101DB00009F080E0089582E08093A7020E94A406C3 +:101DC00010928003F1CF0E94C00E882351F0E09161 +:101DD0006603F0916703309721F00190F081E02DC8 :101DE000099480E008951F93CF93DF93182FEB01A0 :101DF0000E94470C8FE99FE00197F1F700C00000B7 :101E00002197C1F7812FDF91CF911F910C940E0C78 :101E10000F931F93CF93DF9300D000D0CDB7DEB7E1 :101E200089836A834B831C8204E610E024E030E05F -:101E3000AE014F5F5F4F60E084E10E94A6310F90DA +:101E3000AE014F5F5F4F60E084E10E9416320F9069 :101E40000F900F900F90DF91CF911F910F910895F8 -:101E500080916F01882329F047E669E98BE20C94B1 -:101E6000080F80913B0247EC6BE18823C1F341E20C +:101E500080917001882329F047E669E98BE20C94B0 +:101E6000080F80913D0247EC6BE18823C1F341E20A :101E700065EA89EDF4CFCF92DF92EF92FF920F9354 :101E80001F93CF93DF936C017B0164E670E088E7DA -:101E90000E948E30EC0197FD12C010E000E0F601C8 -:101EA000E00FF11F849164E670E00E940831EC01BC +:101E90000E94FE30EC0197FD12C010E000E0F60158 +:101EA000E00FF11F849164E670E00E947831EC014C :101EB000892B29F40F5F1F4F0E151F0581F70E9414 -:101EC0002232CE01DF91CF911F910F91FF90EF90C1 -:101ED000DF90CF9008958091590390915A0391110A +:101EC0009232CE01DF91CF911F910F91FF90EF9051 +:101ED000DF90CF90089580915E0390915F03911100 :101EE00003C091E089270895882369F062E070E0DB -:101EF0008AE89BE00E943B0F892B19F080915903DF -:101F000008951092590380915903EBCFCF93C0915C -:101F1000590380915A038823D1F00E944E086058DB -:101F2000774C8E4F9F4F6093550370935603809369 -:101F3000570390935803C11108C062E070E088E82D -:101F40009BE00E943B0F892B29F0C09159038C2FF5 -:101F5000CF91089581E080935903F7CFCF93DF931A -:101F6000C3EED2E060E0CE010E94BC342196C115E0 +:101EF0008AE89BE00E943B0F892B19F080915E03DA +:101F0000089510925E0380915E03EBCFCF93C09152 +:101F10005E0380915F038823D1F00E944E086058D1 +:101F2000774C8E4F9F4F60935A0370935B0380935F +:101F30005C0390935D03C11108C062E070E088E823 +:101F40009BE00E943B0F892B29F0C0915E038C2FF0 +:101F5000CF91089581E080935E03F7CFCF93DF9315 +:101F6000C3EED2E060E0CE010E942C352196C1156F :101F700084E0D807B9F7DF91CF9108956F927F92EF :101F80008F929F92AF92BF92CF92DF92EF92FF9289 :101F90000F931F93CF93DF938CE8C82E8BE0D82E3E :101FA00091ECE92EF12CE701CC58D10936011BC088 -:101FB000F50185909490692DC8010E94BC34682D6C -:101FC000C80101960E94BC3482E0A80EB11C0E5FCD +:101FB000F50185909490692DC8010E942C35682DFB +:101FC000C80101960E942C3582E0A80EB11C0E5F5C :101FD0001F4FC017D10761F78EE0680E711C2E9657 :101FE000CE15DF0529F08E010E5011095301E0CF07 :101FF0007E018CE8E80EF11C8CE8C80ED11C8DE740 :10200000E81683E0F80679F6DF91CF911F910F91E2 :10201000FF90EF90DF90CF90BF90AF909F908F9008 :102020007F906F900895CF93C82F6FEF811161E279 -:1020300083E290E00E94BC346FEFC11162E184E260 -:1020400090E00E94BC346FEFC11161E185E290E045 -:10205000CF910C94BC3480E00E94131060E086E2C3 -:1020600090E00E94BC340E94BE0F0E94AE0F81E03F -:102070000C9413100F931F93CF93DF93C42FD0E0D2 -:10208000CC0FDD1F2EE0629FC00DD11D11243CE856 -:10209000839FC00DD11D1124CE0187960E94A834C4 -:1020A000082F10E0102F0027CE0188960E94A83438 -:1020B0009801282BC901DF91CF911F910F910895AD -:1020C000462F853038F47A3028F4673018F4672FBB -:1020D0000C943A1090E080E00895CF92DF92FF9246 -:1020E0000F931F93CF93DF936C0100918503809131 -:1020F0009502082BC7E0D0E010E0FC2EC8010C2EA2 -:1021000002C0959587950A94E2F780FD0CC021974F -:10211000A0F7F12C8F2DDF91CF911F910F91FF90A0 -:10212000DF90CF900895B6018C2F0E9460100E941E -:10213000080A019761F3EECFCF93DF93EC010E9481 -:102140006D10BE010E946010DF91CF910C94080ABF -:10215000FC01808191810E949C10292F2F70929503 -:102160009F7092509E3078F4E92FF0E0ED5DF94CCD -:102170000C947C34803F19F020F4883E20F481E0F8 -:102180000895843FE1F380E00895883EC0F3813FE5 -:10219000D1F7F5CF822F869586958695089583E2AF -:1021A00090E00E94A834813289F484E290E00E9499 -:1021B000A834823159F485E290E00E94A83491E07D -:1021C000813109F090E0892F8170089580E0FCCF83 -:1021D0001F93CF93DF93CDB7DEB768970FB6F89410 -:1021E000DEBF0FBECDBF40913A0350913B036091DB -:1021F0003C0370913D0380913E0390913F030E9408 -:10220000AC2420933A0330933B0360933E037093D6 -:102210003F03142F119510933C03652F6195609334 -:102220003D0386E0EAE3F3E0DE01179601900D92AC -:102230008A95E1F786E0FE013796DE01119601905E -:102240000D928A95E1F79B858C8520916F01222361 -:10225000B1F0772761950CF47095072E000C880B70 -:10226000990B0E9428352AE939E949E95EE30E9481 -:102270008C350E94F034962F812F60E010E01B8394 -:102280006C839D838E8386E0FE013196DE011D9670 -:1022900001900D928A95E1F786E0FE013D96DE0100 -:1022A000539601900D928A95E1F786E0FE017396B0 -:1022B000DE01119601900D928A95E1F786E0FE010C -:1022C0003196AAE3B3E001900D928A95E1F786E09A -:1022D000EAE3F3E0DE01179601900D928A95E1F7AB -:1022E00086E0E4E3F3E0DE01119601900D928A9519 -:1022F000E1F746E050E0BE016F5F7F4FCE010796E9 -:102300000E949234892B79F0E0916103F09162038D -:10231000309749F082E080933A030480F581E02D04 -:102320008AE393E0099510923C0310923D031092CA -:102330003E0310923F0386E0EAE3F3E0A4E3B3E058 -:1023400001900D928A95E1F768960FB6F894DEBF7A -:102350000FBECDBFDF91CF911F910895E4E3F2E06E -:1023600086E0DF011D928A95E9F70C94E70B1F9335 -:10237000CF93DF93CDB7DEB7AA970FB6F894DEBF41 -:102380000FBECDBF8DE793E02091F100DC012D93CE -:10239000CD01B3E085389B07B9F780917E03833088 -:1023A00009F472C0B8F4813009F449C0823009F4EC -:1023B000B5C08091E80083FF8DC280917D0390912C -:1023C0007E039A3008F086C2E92FF0E0EF5CF94C0A -:1023D0000C947C348A3009F490C08B3009F471C0BD -:1023E000893039F780917D03813219F7809181031B -:1023F00090918203009711F00297D9F68091E8003E -:10240000877F8093E8008091E80082FF38C0909138 -:10241000F3008091F200029731F48091F100813055 -:1024200011F0863021F48091F10080937003809147 -:10243000E8008B778093E8000E941E07BACF809156 -:102440007D03813A09F0B5CF8091E800877F8093C2 -:10245000E8008091810390918203892B61F468E008 -:1024600081E793E070E00E94D0078091E8008B77CD -:102470008093E8009ECF60E090E080E0F3CF809111 -:102480007B038111C0CF95CF80917D03813A09F004 -:1024900090CF8091810390918203892B09F089CF9D -:1024A0008091E800877F8093E8008091E80080FFBA -:1024B000FCCF809177018093F1008091E8008E77C6 -:1024C000B9CF80917D03813209F073CF8091810370 -:1024D00090918203892B09F06CCF8091E800877F6F -:1024E0008093E8000E941E0780917F03809377010C -:1024F00010926E030E94AE115CCF80917D038132F9 -:1025000009F057CF8091E800877F8093E8000E9410 -:102510001E078091800380936F034BCF80917D03D2 -:10252000813A09F046CF8091E800877F8093E800E8 -:102530008091E80080FFFCCF80916F03BCCF803892 -:1025400099F0823809F0C6C1809181038F7087307D -:1025500008F0C0C18093E9008091EB0085FB8827DB -:1025600080F91092E90006C08091790390917A0376 -:10257000911182609091E800977F9093E80080939A -:10258000F1001092F1008091E8008E779FC18823BE -:1025900009F48DC1823009F09DC180917F038111C2 -:1025A00090C1809181038F702FEF280F263008F0A3 -:1025B00091C18093E9002091EB0020FF82C193300C -:1025C00031F48091EB0080628093EB007AC19091AE -:1025D000EB0090619093EB0021E030E001C0220F0E -:1025E0008A95EAF72093EA001092EA008091EB00C6 -:1025F0008860EACF81116EC110917F031F778091AF -:10260000E3008078812B8093E3008091E800877F4E -:102610008093E8000E941E078091E80080FFFCCFB5 -:102620008091E30080688093E30082E0111183E0F1 -:1026300080937B034FC18058823008F04BC12091BA -:102640007F03309180032C3DE3E03E07A1F583E05A -:102650008A838AE289834FB7F894DE01139620E0DB -:102660003EE051E2E32FF0E050935700E49120FF69 -:1026700003C0E295EF703F5FEF708E2F90E0EA307D -:10268000C0F0C7968D939D932F5F243159F74FBFAC -:102690008091E800877F8093E8006AE270E0CE01D5 -:1026A00001960E94D0078091E8008B778093E80024 -:1026B00011C1C096E7CF8091810390918203432F8F -:1026C00055274330510509F44AC078F5413051058A -:1026D00009F47AC08BE590E0ECE8FBE0423051056C -:1026E00009F0F8C02091E800277F2093E8002091AE -:1026F0008303309184038217930708F49C0140E020 -:102700002115310509F065C0411163C08091E800D1 -:1027100082FDC9CF80917B03882329F2853019F28D -:102720008091E80083FFF2CFBECF4132510509F41A -:102730003CC04232510509F0CDC08330910508F00C -:10274000C9C0FC01EE0FFF1FEC5DFD4F0190F08151 -:10275000E02D8F5D9D4FDC018C9190E01AC03327F6 -:1027600021303105D1F02115310561F022303105DC -:1027700009F0B0C0E9EFFBE0E4918E2F90E0E9EFC3 -:10278000FBE007C0EBE2FCE0E4918E2F90E0EBE28F -:10279000FCE0009709F49EC0A5CFE9E1FCE0E491DC -:1027A0008E2F90E0E9E1FCE0F4CF8330910508F052 -:1027B00091C0880F991FFC01E65DFD4F0190F081EB -:1027C000E02D89E090E08ECF82E190E0E7EEFBE043 -:1027D00089CF80917B03882309F465CF853009F484 -:1027E00062CF8091E80083FD5ECF8091E80082FD9A -:1027F0008DCF8091E80080FF83CF9091F30080918E -:10280000F2002115310519F08830910550F041E0B2 -:10281000089709F040E08091E8008E778093E80007 -:102820006FCF44914093F1003196215031090196C8 -:10283000E8CF803809F04EC08091E800877F809310 -:10284000E80080917C038093F1009DCE811142C00D -:1028500010917F031230F0F58091E800877F80931C -:10286000E80010937C030E941E07112311F084E0FE -:1028700005C08091E30087FDFACF81E080937B0360 -:1028800042E061EC81E00E943D0742E261EC84E0BD -:102890000E943D0742E261EC82E00E943D0742E275 -:1028A00060EC83E00E943D0780917B0313C0809120 -:1028B0007F03813079F481E0933009F080E08093E8 -:1028C0007A031092E9008091E800877F8093E80006 -:1028D0000E941E078091E80083FF0AC08091E800F3 -:1028E000877F8093E8008091EB0080628093EB000B -:1028F000AA960FB6F894DEBF0FBECDBFDF91CF9181 -:102900001F9108951F93CF93DF93162FC0916B06ED -:10291000D0916C068A30D1F420914E03CE018B56B3 -:102920009440622F70E00E944834281B822F66E09A -:102930000E945C34C82FC15020F4DF91CF911F91C9 -:10294000089560E080E20E948214F5CF8D30E9F4B2 -:10295000CB56D44020914E03622F70E0CE010E94EE -:102960004834281B822F9E01280F311D211532402B -:1029700018F080E0D0E0C0E0C80FD11DC559DB4F92 -:10298000D0936C06C0936B06D8CF96E0FE01AFE4FF -:10299000B3E001900D929A95E1F7803E90F186E0C8 -:1029A000FE0111928A95E9F7C0916B06D0916C06F1 -:1029B000111133C046E050E0BE018FE493E00E9465 -:1029C00092349E012B563440892B91F52A5F3F4F5C -:1029D00040914E03642F70E0C9010E944834481BA7 -:1029E000463010F4240F311D211572E0370710F026 -:1029F00030E020E025593B4F30936C0620936B0666 -:102A00009CCFF6E08F9FB0011124685B794F46E0C0 -:102A100050E0CE010E948934C7CF9E012A5F3F4F0C -:102A2000FE012E173F0731F2808180958193F9CF07 -:102A3000C90145E0969587954A95E1F741E050E058 -:102A4000BA0102C0660F771F8A95E2F7CB01609149 -:102A5000690470916A04862B972BB9016B5F7F4FD5 -:102A6000E5E076956795EA95E1F702C0440F551FBA -:102A70006A95E2F7842B952B90936A0480936904FE -:102A8000A5CFFF920F931F93CF93DF93EC01F62E08 -:102A9000FC0101900020E9F78F0101501109C017D6 -:102AA000D10730F0DF91CF911F910F91FF900895E2 -:102AB0006F2D89910E948214F2CFECE4F3E08083C1 -:102AC000618324E630E042E050E0BF0184EB0C94E7 -:102AD0007F31CF93C82F60E08CE00E945D156C2F92 -:102AE00084E00E945D1561E08CE0CF910C945D154F -:102AF000CF92DF92EF92FF926B017C010E94FE0861 -:102B0000B701A60188E090E0FF90EF90DF90CF90B2 -:102B10000C94CE34AF92BF92CF92DF92EF92FF929D -:102B20000F931F93CF93DF9300D00F92CDB7DEB7F3 -:102B3000082FF62E142FE22E8091640480FF4FC0E0 -:102B4000E82FE695AE2FB0E0AB5EBD4F9C91909321 -:102B500049038E7F823009F056C0413A08F040EABE -:102B60009E012F5F3F4F6F2D802F0E94140980918F -:102B7000640480FF11C02B8139814A8180917401E6 -:102B80009091750153E0859FF0011124EA57FC4FA5 -:102B9000891798F10E948B0D80916504801308C0FD -:102BA000809166048F1104C080916704811729F019 -:102BB00080914B03826080934B0300936504F092F5 -:102BC000660410936704EE2051F0609164047091E4 -:102BD000650480916604909167040E9478150F90B7 -:102BE0000F900F90DF91CF911F910F91FF90EF9079 -:102BF000DF90CF90BF90AF900895418330832283C0 -:102C00008F5F3396C5CF923039F6E2508E2F8170A8 -:102C1000D82EE695F0E0E750FA4FA590B490C12C7D -:102C2000BB2460917601C61608F0B4CF2C2D30E09D -:102C3000A29EC001A39E900DB29E900D112470E043 -:102C40000E944834802FD11016C0860F4091740125 -:102C5000420F532F511D9A01220F331F240F351F8E -:102C60002A573C4F412F113A08F040EA6F2D0E943D -:102C70001409C394D6CF861BE9CFE4E6F4E0438180 -:102C800021E1421B08F440E021E0628181810C9443 -:102C90008A15E4E6F4E0438121E1420F08F44FEFA6 -:102CA00021E0628181810C948A15E4E6F4E062817E -:102CB00021E1621B08F460E021E0438181810C94F2 -:102CC0008A15E4E6F4E0628121E1620F08F46FEF17 -:102CD00021E0438181810C948A15E4E6F4E081814E -:102CE00021E04381628188500C948A15E4E6F4E087 -:102CF000818121E043816281885F0C948A15CF93A2 -:102D0000C82F0E94BB0C8230B1F138F48823C9F07F -:102D1000813039F18C2FCF9108958330A1F1843027 -:102D2000C9F720E040E56FEF8AED0E948A1587E041 -:102D30000E94691580910001882361F310926F0150 -:102D40000DC020E040E56FEF82E30E948A1580917C -:102D50000001882399F381E080936F010E94280F7E -:102D6000D9CF20E040E56FEF8CEF0E948A1585E413 -:102D70000E946915CFCF20E040E56FEF80E50E940B -:102D80008A1585E2F5CF20E040E56FEF86E70E94E7 -:102D90008A158FE1EDCF0E947F16809385030C94F6 -:102DA000E70B80918503982F9670963019F4886010 -:102DB0000C94CB16877FFCCF21E030E001C0220FBE -:102DC0008A95EAF720958091850382230C94CB168F -:102DD00021E030E001C0220F8A95EAF78091850357 -:102DE000822B0C94CB1680916804882319F08150B3 -:102DF0008093680460916404709165048091660416 -:102E0000909167040C94781580916804833018F4CD -:102E10008F5F809368046091640470916504809171 -:102E20006604909167040C9478159091640490FF67 -:102E300027C0917081111DC09260909364048091AD -:102E40004B03816080934B03662351F060916404CF -:102E50007091650480916604909167040E947815D2 -:102E600020E04091670460916604809165040C94B1 -:102E70008A158C3010F09661E0CF880F982BDDCF4B -:102E80000895809164048695815009F48BE061E097 -:102E90000C9415178091640486958F5F8C3008F030 -:102EA00081E061E00C9415178091640480FF07C0F5 -:102EB000869582588F77893010F40C944A1761E018 -:102EC00082E00C941517E4E6F4E083E0808311823D -:102ED0008FEF828380EA83831482A9E4B3E01296A1 -:102EE0008C911297836012968C936081718182819C -:102EF00093810C947815AB01BC0188E190E00C94AF -:102F0000CE34CF93C82FEDE5F3E0982F990F990FAA -:102F1000990F80818770892B8083EEE5F3E09C2FE9 -:102F20009295969597708081887F892B8083609198 -:102F30005B0370915C0380915D0390915E030E943E -:102F40007B176C2F82E0CF910C945D15EBE5F3E0DD -:102F500089E88083118282818C7F828360915B0308 -:102F600070915C0380915D0390915E030C947B17DC -:102F7000EBE5F3E080818E7F808360915B0370914D -:102F80005C0380915D0390915E030C947B17EBE5ED -:102F9000F3E080818160808360915B0370915C03CA -:102FA00080915D0390915E030C947B170E948830A2 -:102FB00040E060E080E00C94080F69EE7EEF90E066 -:102FC00080E00E94DA3460E082E090E00E94BC344D -:102FD00060E083E090E00E94BC341092950260E0D3 -:102FE00084E090E00E94BC3460E082E290E00E94C5 -:102FF000BC3460E085E090E00E94BC3460E086E094 -:1030000090E00E94BC346FEF87E090E00E94BC34F7 -:1030100040E050E0BA0188E090E00E94CE3460E0E9 -:103020008DE090E00E94BC3440E050E0BA0188E1BD -:1030300090E00E94CE3460E087E190E00E94BC34D2 -:1030400040E050E0BA018CE190E00E94CE3470E0A4 -:1030500060E080E290E00E94DA340E94A61780E0EF -:103060000E9413100E942B1040E050E0BA018FE044 -:1030700090E00E94CE3440E050E0BA0183E190E05D -:103080000C94CE345F926F927F928F929F92AF9208 -:10309000BF92CF92DF92EF92FF920F931F93CF9345 -:1030A000DF9300D000D00F92CDB7DEB77C01FC01DA -:1030B00083819481892B31F08081918189238F3F95 -:1030C00009F088C60F900F900F900F900F90DF912E -:1030D000CF911F910F91FF90EF90DF90CF90BF9015 -:1030E000AF909F908F907F906F905F9008950E9417 -:1030F0006D10182F682F89819A810E94BB0B6981FE -:103100007A81812F0E9460108C01F70182818823CF -:1031100061F0F801E65EFC45ED30F10530F4E55C68 -:10312000F94C0C947C340E94C717D0905B03D0FEFE -:103130001CC08D2D86958370F7019281992309F427 -:1031400060C1823090F4B701C8010E9486088823CC -:1031500061F0D694D694D69480915C038370829566 -:10316000880F807E8D290E946915F701828188234E -:1031700009F425C6C80182519F45409708F0E3C570 -:103180008FEF93E00E94A834025193EEA92E92E0B3 -:10319000B92E811197CF011138C11C821B82662480 -:1031A00063948AE0582E85010F5F1F4FC5010E946E -:1031B000A83489831A82882309F484CF9FEF980F5B -:1031C000933008F031C18A83698232E0A30EB11CCA -:1031D000C8010E94A8348B83882309F473CF8E0121 -:1031E0000F5F1F4FF80120812223E9F2213009F0FF -:1031F00055C191818281913009F018C10E5F1F4F36 -:103200006AE070E0893311F460E570E00E94F30E2B -:1032100013C10E94B81789CF80915B0380FF0DC056 -:103220000E94B81760915B0370915C0380915D030D -:1032300090915E030E947B1778CF0E94C717F2CF50 -:103240000E94A61772CF90915B03892F86958F5F9E -:103250008370880F997F892B80935B03982F9670DA -:10326000963001F7897F80935B03DCCF90915C03FC -:10327000892F8B7F92FF846080935C03D3CF8091F2 -:103280005B03982F96959695969580915C03837035 -:103290008295880F807E892B8C3798F48F5F282F3A -:1032A000220F220F220F90915B039770922B909325 -:1032B0005B0382958695837090915C039C7F892B3C -:1032C000DBCF81E0ECCF80915B03982F96959695AC -:1032D000969580915C0383708295880F807E892B00 -:1032E00011F08150DCCF8BE7DACF30915C03932F64 -:1032F00096959695969520915D03822F8370829581 -:10330000880F807E892B90E00196482F440F440F50 -:10331000440F3770342B30935C0335E096958795D6 -:103320003A95E1F783702C7F822B80935D037ACFEF -:1033300030915C03932F96959695969520915D0319 -:10334000822F83708295880F807E892B8150990B04 -:10335000DCCF80915D0382FF12C08B7F80935D0381 -:1033600060915B0370915C0380915D0390915E03BB -:103370000E947B1760E081E00E945D15D6CE8460DC -:1033800080935D0360915B0370915C0380915D03AA -:1033900090915E030E947B1760E08CE00E945D15B7 -:1033A00064E182E00E945D1565E081E00E945D15A8 -:1033B00061E08CE0E1CF80915D03982F9695969522 -:1033C000969580915E038295880F807E892B883741 -:1033D00020F4865F0E948117A8CE88E7FBCF8091FA -:1033E0005D03982F96959695969580915E038295AC -:1033F000880F807E892B843110F08A50EBCF84E1D6 -:10340000E9CF882309F4B1CE9ECEA114F4E0BF0623 -:1034100009F458CEC5010E94A834811101C00150A1 -:103420002FEFA21AB20AB7CE5801D9CE923039F492 -:103430000E5F1F4F0E94470C0F5F1F4FD3CE93307C -:1034400029F40E5F1F4F0E940E0CF6CF943019F036 -:103450000F5F1F4FF1CF0E5F1F4F30E020E0B8012C -:103460006F5F7F4FF80141818053990B8A3091053E -:1034700050F02150310900F38FE99FE00197F1F7F7 -:1034800000C00000F6CF529EF001539EF00D1124B3 -:103490009C012E0F3F1F842F8B01E1CFE22FF0E024 -:1034A000E754FE4F7490822F86958695869590E01E -:1034B000FC01E755FE4FE4902770F12C022E02C06C -:1034C000F594E7940A94E2F7E1E0EE22FF24FC0190 -:1034D000E756FE4FC490D12C022E02C0D594C7945B -:1034E0000A94E2F7F1E0CF22DD24FC01E757FE4F1A -:1034F0008490912C02C0959487942A95E2F721E05C -:1035000082229924E114F10419F081EE0E94470C03 -:10351000C114D10419F086EE0E94470C39E36AE029 -:1035200070E0731202C060E570E0872D0E94F30E18 -:10353000CD2819F086EE0E940E0CEF2819F081EECE -:103540000E940E0C892809F477CF6AE070E08CE2C3 -:103550005DCE81E00E94E81603C081E00E94DC1687 -:103560000F900F900F900F900F90DF91CF911F91C0 -:103570000F91FF90EF90DF90CF90BF90AF909F9012 -:103580008F907F906F905F900C94D11682E0E2CF85 -:10359000013E110509F4B8C0043E110519F0003EC2 -:1035A0001105B1F5882309F42EC181E08093ED0265 -:1035B000809185030E94BB0C813051F583E30E940A -:1035C000691526C00238FFE51F0709F46AC078F4C0 -:1035D000053F110509F413C1063F110509F411C196 -:1035E000043F1105A9F461E00E94CC0C11C004381D -:1035F0003FE5130709F48BC008F469C005385FE59F -:10360000150709F4CAC006389FE5190709F4DDC09B -:10361000F70192819111FDC180916E0382720A3C83 -:10362000FCE51F0709F4D5C108F02BC1053C3CE5BA -:10363000130709F4BAC108F00FC1033C5CE5150794 -:1036400009F494C108F0ACC1023C1C4509F43EC128 -:10365000F70100811181992309F4F5C1C8010E9485 -:103660006D10D82E682FC8010E94BB0BB8018D2D9C -:103670000E9460100E94080A182FB82EF7012281BC -:103680004581342F32953F70892F82958F70C82ED7 -:10369000D12C8C3008F00FC2F601E85BF94C0C9489 -:1036A0007C34882309F4B4CF81EE0E94470C83EE6A -:1036B0000E94470C8FE40E94470C8FE40E940E0C7E -:1036C00083EE0E940E0C81EE0E940E0CA1CF882387 -:1036D00009F49ECF81EE0E94470C83EE0E94470CB6 -:1036E00080E50E94470C80E5E9CF80933F0210936C -:1036F0003E0200933D02882321F081E08093EE0298 -:1037000087CF1092EE0284CF80933C02F0CF8823C3 -:1037100079F180913C02882349F080913D020E941A -:103720000E0C80EE0E94470C8AE20CC080913F0292 -:103730008823D1F380913D020E940E0C80EE0E94FE -:10374000470C8CE40F900F900F900F900F90DF912B -:10375000CF911F910F91FF90EF90DF90CF90BF908E -:10376000AF909F908F907F906F905F900C94470CDC -:103770008AE20E940E0C8CE40E940E0C80EE0E94E5 -:103780000E0C80913C02811105C080913F0288237C -:1037900009F498CC80913D02D5CF882309F423CF3A -:1037A00080916F01811104C080910001882339F05C -:1037B00010926F01109200010E94280F29CF81E022 -:1037C00080936F0180930001F7CF882309F40BCF1A -:1037D00080913B02882349F080EE90E09093710144 -:1037E0008093700110923B02E7CF86E690E09093C1 -:1037F00071018093700181E080933B02DDCF62E034 -:10380000F3CE64E0F1CE1092ED0202CF882331F0C6 -:1038100081E08093F00210926701FACE1092F002DC -:10382000F7CE882349F0809185030E94BB0C81303C -:1038300019F482E30E946915F7018281882309F453 -:10384000B0C2809185030E94BB0C813009F0A9C2EF -:1038500084E30E946915A5C2073C2CE5120709F410 -:10386000AEC008F4A7C0083C4CE5140709F4ACC08E -:10387000093C1C4509F0ECCE4DE356E169E476E1E4 -:1038800079C0043DECE51E07A8F40E3CFCE51F07DB -:1038900008F018CC0C3C2CE5120709F49FC043EF4C -:1038A00056E164E077E10D3C1C4508F463C061E03B -:1038B00081E046C0053D4CE5140709F403CC08F44B -:1038C00092C00D351D4509F4FDCBC2CE8091640434 -:1038D00080FF31C08E7F8093640460916404709196 -:1038E000650480916604909167040E947815809128 -:1038F0004B03816080934B039FEFE0E7F2E0915030 -:10390000E040F040E1F700C000000F900F900F90F2 -:103910000F900F90DF91CF911F910F91FF90EF903B -:10392000DF90CF90BF90AF909F908F907F906F90DF -:103930005F900C948B0D81608093640461E08695A8 -:103940000F900F900F900F900F90DF91CF911F91DC -:103950000F91FF90EF90DF90CF90BF90AF909F902E -:103960008F907F906F905F900C94151741E457E112 -:103970006AE477E10F900F900F900F900F90DF9116 -:10398000CF911F910F91FF90EF90DF90CF90BF905C -:10399000AF909F908F907F906F905F900C94F908FC -:1039A0004AE457E161E477E1E5CF4DE656E166E7A9 -:1039B00076E1E0CF46E756E16DE676E1DBCF45E51F -:1039C00056E161E676E1D6CF41E656E165E576E17E -:1039D000D1CF49E456E16DE376E1CCCF44E057E145 -:1039E00063EF76E1C7CF0F900F900F900F900F907D -:1039F000DF91CF911F910F91FF90EF90DF90CF90CB -:103A0000BF90AF909F908F907F906F905F900C943D -:103A100054170E3D1C4509F01BCE0F900F900F90D0 -:103A20000F900F90DF91CF911F910F91FF90EF902A -:103A3000DF90CF90BF90AF909F908F907F906F90CE -:103A40005F900C94DD17C8010E94930BD82E0ECE08 -:103A5000092F0F70907F11F00295007F812F222394 -:103A6000C9F0002369F090E2910F983010F0111125 -:103A70000BC080916E03082B00936E030E94720BA3 -:103A8000812F0E94470C17C080919402082B00934D -:103A90009402F4CF0E940E0C002369F00095105E92 -:103AA000183010F0B11027C080916E0308230093E6 -:103AB0006E030E94720B98E0C91AD108E4E0CE169A -:103AC000D10408F0FFCA0E94E30E0F900F900F90F0 -:103AD0000F900F90DF91CF911F910F91FF90EF907A -:103AE000DF90CF90BF90AF909F908F907F906F901E -:103AF0005F900C944B0E80919402082300939402E3 -:103B0000D8CF892F8F70907F903211F08295807F6F -:103B1000F1E0BF120CC0222329F0333060F60E947E -:103B2000040CC9CF323038F60E94F90BC4CF2223DF -:103B300041F03323A1F340FFA3CF4F70F70145833A -:103B4000EECF332389F3193309F0F5C0FFEF27EEE9 -:103B500033E0F15020403040E1F700C00000812FF9 -:103B60000E940E0CA8CF892F86958695837061F0F0 -:103B7000813009F0A0CF812F9370211102C090E015 -:103B800080E00E945A0897CF812F9370211102C0C4 -:103B900090E080E00E9470088ECF892F8370A1F59D -:103BA000211189CF812F829586958770880F880F84 -:103BB000412F4F70082E01C0440F0A94EAF7212FBD -:103BC000207114FF07C02FE030E001C0220F8A955A -:103BD000EAF72095969596959370923081F0822F12 -:103BE000842B933030F480919502913029F0242B6E -:103BF00082230E94F50B5FCF842B822BFACF242BDC -:103C0000809195028227F5CF8695222311F0892F86 -:103C10008170882309F44FCF812F82958695877014 -:103C2000880F880F412F4F70082E01C0440F0A944F -:103C3000EAF7212F207114FF07C02FE030E001C008 -:103C4000220F8A95EAF72095969596959370923073 -:103C500081F0822F842B933030F480918503913052 -:103C600029F0242B82230E94CB1625CF842B822B74 -:103C7000FACF242B809185038227F5CF092F0F706F -:103C8000222329F0802F0E94E816812F48CF812F10 -:103C90000E94F90B802F0E94DC160DCF812FE1EFDF -:103CA0001E1789F1E11750F0F0EF1F17B9F022232A -:103CB000B1F13111E5CE892F8F7129C042EF141770 -:103CC00049F153EF1513F3CF80E0222361F29F7186 -:103CD00081E001C0880F9A95EAF7C5CF222379F0D9 -:103CE000323008F0E8CE292F2F7181E090E001C03A -:103CF000880F2A95EAF7909185038927B4CF33304E -:103D000008F0D9CEF0CF892F8F71222321F20E94A3 -:103D1000E816D1CE892F8F712223C9F3BCCF33236C -:103D200079F0893341F48FEF97EEE3E081509040D2 -:103D3000E040E1F712CF8FE39CE90197F1F70DCF57 -:103D4000892F8F71A8CF0031FFE51F0709F401CC3F -:103D500001312FE5120709F419CC0E944E08609337 -:103D6000F5027093F6028093F7029093F802F70140 -:103D70008281053E110509F4B8CC08F023CC0C3241 -:103D8000110509F443CD08F003CC0A30110509F4FC -:103D900048CD0531110509F44FCD0930110509F061 -:103DA00037CCF7018281882309F432CC80918503D6 -:103DB0000E94BB0C813009F02BCC81E300CC003198 -:103DC0003FE5130709F4C9CB01314FE5140779F634 -:103DD00082E0C4CB85E0DE01119601900D928A95B8 -:103DE000E1F7F701228189819A81211180C90E941E -:103DF000930B182F84C91F93CF93DF938091600298 -:103E0000807FA9F480915D02882389F080919202DD -:103E1000D091610260915B0270915C02A0915E02A0 -:103E2000B0915F02C62FC72316E0D81304C0DF91FC -:103E3000CF911F91089590E0109711F0CF3F19F4A2 -:103E400001968770F2CF189F9001199F300D1124B1 -:103E5000F901EE59FD4F41814713F2CF40814613DE -:103E6000EFCF42814111ECCF438154814A1B5B0B60 -:103E7000403A510528F7809160028F7080618093ED -:103E80006002F901E959FD4F80818F708061808364 -:103E90008BE592E00E944218DF91CF911F910C9424 -:103EA000890BAF92BF92CF92DF92EF92FF920F9366 -:103EB0001F93CF93DF93CDB7DEB761970FB6F8941A -:103EC000DEBF0FBECDBF8C0185E0F801DE011D967F -:103ED00001900D928A95E1F7F801E2808BE5A82E1A -:103EE00082E0B82E60915E0270915F0261157105EB -:103EF00009F432C190915B0240915C02892F8423C6 -:103F00008F3F09F429C120813181C380D480F09092 -:103F10005D02F601E61BF70BFF2009F4E8C0809173 -:103F20006002582F507FE03AF10508F0ABC0511104 -:103F300077C0FE2C431321C092131FC0E1101DC097 -:103F40008F70806180936002C5010E944218809149 -:103F50006002F80185838F2D61960FB6F894DEBF5D -:103F60000FBECDBFDF91CF911F910F91FF90EF90CA -:103F7000DF90CF90BF90AF900895CD2829F0822F89 -:103F800083238F3F09F003C180E0F82FF170DF2E0B -:103F900080FF3CC0809192024091610256E0841300 -:103FA00015C02D873E878D859E850E949C10292FE8 -:103FB00022952F702230F0F0243018F59F70F1F028 -:103FC000F8019581907FD1F4D12C1EC090E0589FCC -:103FD000F001599FF00D1124EE59FD4F6181361308 -:103FE00006C06081261303C06281E6120FC00196ED -:103FF0008770D5CF9F7011F0882331F3805E8830B1 -:1040000018F3C8010E944218FD2CA5CFEE2009F438 -:10401000A2CF80916002816080936002F12C9BCFDF -:10402000431306C0921304C0F801EE2009F479C0CE -:10403000C8010E94A810882309F1EE20F9F08091B0 -:104040006002803270F020915B0230915C02388710 -:104050002F831986DB86CA868C87CE0107960E943D -:10406000421886E0F801ABE5B2E001900D928A9526 -:10407000E1F70E94FB1EFF24F3946DCFC8010E945C -:104080004218F9CF51110AC08BE592E00E94421804 -:1040900086E0F50111928A95E9F7C0CF43130FC06E -:1040A00092130DC0E1100BC0F8018583C8010E9476 -:1040B000421886E0F50111928A95E9F74CCFC801C4 -:1040C0000E94A8108823D1F2EE20C1F280916002F4 -:1040D000803238F220915B0230915C023A8329836E -:1040E0001B82DD82CC828E83CE010196B8CFE03A6E -:1040F000F105F8F6FE2CEE2009F243131FC09213CF -:104100001DC08091600280FD10C0982F907F69F0E3 -:10411000F8018583903F31F0982F907F905F8F70EA -:10412000892B8583C8010E94421886E0F801ABE51F -:10413000B2E001900D928A95E1F70DCFC8010E947F -:10414000A81081118ECF80916002816080936002FF -:10415000C8010E944218FFCEEE2009F48FCFC8019B -:104160000E94A810F82E882309F488CF86E0F80171 -:10417000ABE5B2E001900D928A95E1F780915B0288 -:1041800090915C020E949C100E94FB1EE4CE81E094 -:104190008E25FBCE1F93CF93DF93CDB7DEB7679706 -:1041A0000FB6F894DEBF0FBECDBF4B8B5C8B6D8B13 -:1041B0007E8B8F8B6111109294021A8A198A85E086 -:1041C000FE017396DE011D9601900D928A95E1F72E -:1041D00086E0FE013D96DE01179601900D928A95CC -:1041E000E1F7CE0107960E94511F882389F016E05F -:1041F000809192029091610289134BC067960FB62D -:10420000F894DEBF0FBECDBFDF91CF911F9108950F -:1042100086E0FE013796DE01119601900D928A9597 -:10422000E1F78A859B85892B11F38F8198858923F6 -:104230008F3FE9F22091610230E0C9010196877059 -:104240009927409192024817190681F410926E0343 -:104250000E94AE11109261021092920286E0EBE58C -:10426000F2E0DF011D928A95E9F7C1CF96E0929FB7 -:10427000D001939FB00D1124AE59BD4FFE01319670 -:1042800001900D929A95E1F7809361020E94890B4B -:10429000AECF819FC00111248E599D4F0E94511FA6 -:1042A000882309F4ABCF8091920290E00196877049 -:1042B0009927809392029CCF0F931F93CF93DF9304 -:1042C00000D000D0CDB7DEB76091C5027091C602B4 -:1042D0008091C7029091C8020E943208643671052D -:1042E0008105910588F10E94C00E882379F10E9412 -:1042F0004E086E5F7F4F8F4F9F4F69837A838B830A -:104300009C8380912C0190912D0180559D4F40916F -:104310002B0150E04530510510F044E050E0BE0163 -:104320006F5F7F4F0E949F3484E090E00E9494333F -:10433000892BD9F40E944E086093C5027093C6027F -:104340008093C7029093C80281E010C00E944E087B -:104350000091D2021091D3022091D4023091D50263 -:10436000600F711F821F931FC4CF80E00F900F90CA -:104370000F900F90DF91CF911F910F910895BF92F1 -:10438000CF92DF92EF92FF920F931F93CF93DF9321 -:10439000B82EEB01F42E6901688179818A819B81B5 -:1043A0000E943208643671058105910510F4FF20E2 -:1043B00019F1EB2C0B2C000CFF088B2D9AE08902D5 -:1043C000F0011124EF5FFE4F8381948180559D4F52 -:1043D000428150E00417150708F4A801B6010E94B5 -:1043E0009F34C7010E949433892B89F40E944E08A0 -:1043F000688379838A839B8381E0DF91CF911F91CA -:104400000F91FF90EF90DF90CF90BF90089580E0E4 -:10441000F4CF0F931F93CF93DF930F92CDB7DEB7F7 -:104420008091590389832091C40290E041E02817CC -:10443000190609F440E001E010E09E012F5F3F4FB4 -:104440006DEC72E086E00E94BF210F90DF91CF916A -:104450001F910F9108950F931F93CF93DF93CDB7C3 -:10446000DEB728970FB6F894DEBF0FBECDBF85E04C -:10447000E4E6F4E0DE01119601900D928A95E1F7F1 -:104480008091490390914A03A0914B038E839F83AF -:10449000A88741E08885811101C040E008E010E074 -:1044A0009E012F5F3F4F69EC72E085E00E94BF21C3 -:1044B000811110924B0328960FB6F894DEBF0FBE01 -:1044C000CDBFDF91CF911F910F9108956F927F9291 -:1044D0008F929F92AF92BF92CF92DF92EF92FF9214 -:1044E0000F931F93CF93DF930F92CDB7DEB7862E36 -:1044F0005A016901682E880F7708C3010E9494331E -:10450000892B09F07BC08AE0869DF001879DF00D24 -:104510001124EF5FFE4F458150E04115510511F028 -:1045200041E050E08AE0869DF001879DF00D112466 -:10453000EF5FFE4F6681778160557D4FCE0101961A -:104540000E949F34F50160817181828193810E9474 -:104550003208643671058105910540F4B701C80140 -:104560000E94E3089981891709F44FC0082C000CB8 -:104570009908C4010E949433892B91F0B12C8B2DA2 -:104580000F90DF91CF911F910F91FF90EF90DF90EF -:10459000CF90BF90AF909F908F907F906F90089535 -:1045A0008AE0889DF001899DF00D1124EF5FFE4F98 -:1045B000458150E0E416F50608F4A7018AE0889DDD -:1045C000F001899DF00D1124EF5FFE4F6681778128 -:1045D00060557D4FC6010E949F34B701C8010E94FB -:1045E000E30899818913CACF0E944E08F5016083C0 -:1045F000718382839383BB24B394C1CFB12CA70171 -:10460000B801C6010E949F34BACFBB24B394F7CF40 -:10461000CF92DF92EF92FF920F931F93CF93DF938E -:1046200000D000D00F92CDB7DEB76B0185E0E82E49 -:10463000F12C01EB12E09E012F5F3F4F48EA52E060 -:1046400061E080E00E946622882349F095E0FE0147 -:104650003196A3EAB2E001900D929A95E1F795E0C8 -:10466000E3EAF2E0D60101900D929A95E1F70F90FE -:104670000F900F900F900F90DF91CF911F910F919E -:10468000FF90EF90DF90CF90089590E080E00E943F -:10469000B634893E9E4F11F40C94CF1080E00895FB -:1046A0001F920F920FB60F9211242F933F934F93A7 -:1046B0005F936F937F938F939F93AF93BF93CF93AA -:1046C000DF93EF93FF93D091E900DF708091EC00CE -:1046D000C82FC17080FDC0E81092E9008091F00001 -:1046E000877F8093F00078940E94B7111092E900C0 -:1046F0008091F00088608093F000CD2BCF70C09344 -:10470000E900FF91EF91DF91CF91BF91AF919F9120 -:104710008F917F916F915F914F913F912F910F906A -:104720000FBE0F901F9018951F920F920FB60F9209 -:1047300011242F933F934F935F936F937F938F93A6 -:104740009F93AF93BF93EF93FF938091E10082FF1C -:1047500009C08091E20082FF05C08091E1008B7F5B -:104760008093E1008091DA0080FF24C08091D8001E -:1047700080FF20C08091DA008E7F8093DA008091E4 -:10478000D90080FF9DC080E189BD82E189BD09B467 -:1047900000FEFDCF81E080937B0380916D0381114A -:1047A00009C00E94A4060E946F078091E200846005 -:1047B0008093E2008091E10080FF17C08091E200C9 -:1047C00080FF13C08091E2008E7F8093E200809191 -:1047D000E20080618093E2008091D8008062809343 -:1047E000D80019BC85E080937B038091E10084FFB1 -:1047F0002BC08091E20084FF27C080E189BD82E167 -:1048000089BD89B5982F917080FFFBCF8091D8002A -:104810008F7D8093D8008091E1008F7E8093E100AE -:104820008091E2008F7E8093E2008091E2008160BF -:104830008093E20080917C03882309F447C084E0E0 -:1048400080937B0380917B038091E10083FF27C0ED -:104850008091E20083FF23C08091E100877F8093F5 -:10486000E10082E080937B0310927C038091E10061 -:104870008E7F8093E1008091E2008E7F8093E20042 -:104880008091E20080618093E20042E060E080E09D -:104890000E943D078091F00088608093F000FF91B6 -:1048A000EF91BF91AF919F918F917F916F915F91A8 -:1048B0004F913F912F910F900FBE0F901F90189521 -:1048C00019BC10927B0310926D0374CF8091E300AA -:1048D00087FD93E090937B03B5CF78941F921FB62A -:1048E0001F9211248F939F93AF93BF938091660380 -:1048F00090916703A0916803B09169030196A11D8F -:10490000B11D8093660390936703A0936803B093EF -:104910006903BF91AF919F918F911F901FBE1F9010 -:1049200018959C014FB7F8948091660390916703A6 -:10493000A0916803B09169034FBF821B930B089548 -:104940002FB7F8948091660390916703A091680354 -:10495000B09169032FBF0895AF92BF92DF92EF929B -:10496000FF920F931F93CF93DF93CDB7DEB761977D -:104970000FB6F894DEBF0FBECDBF4C87888B998BE6 -:10498000E52ED62EF72E5E0127E0A20EB11C85E0A3 -:10499000F50111928A95E9F7809148038A3008F071 -:1049A00095C080914603909147030E9491240897F7 -:1049B00008F48CC004E610E025E030E0A50164E0D6 -:1049C00084E10E94D331892B09F0DEC010924803A4 -:1049D0008B8587FDD1C0E894E0F8809144039091E5 -:1049E0004503009709F0C2C08F819885891708F0A8 -:1049F00091C0981B892F41E0209170013091710185 -:104A0000889FC001112455E0589FF001599FF00D77 -:104A10001124E29FB001E39F700DF29F700D1124ED -:104A2000660F672F661F770B7195442319F07195F8 -:104A3000619571098091420390914303680F791F3A -:104A400089859A85891708F068C0981B892F41E0ED -:104A5000889FC001112455E0589FF001599FF00D27 -:104A60001124E29FC001E39F900DF29F900D11244D -:104A7000880F892F881F990B9195442319F09195E0 -:104A8000819591092091400330914103820F931F3A -:104A9000603871050CF444C06F577109709343037B -:104AA000609342033FE7D32E803891050CF44BC04E -:104AB0008F57910990934103809340039FE7F92E0C -:104AC0000E94A0249093470380934603ED86DE86E0 -:104AD000FF8686E0FE013C96DE01119601900D9264 -:104AE0008A95E1F729813A814B815C816D817E81D4 -:104AF00080E090E061960FB6F894DEBF0FBECDBFA8 -:104B0000DF91CF911F910F91FF90EF90DF90BF90B9 -:104B1000AF900895891B40E06FCF891B40E098CF8C -:104B20006138FFEF7F074CF461587F4F7093430368 -:104B30006093420321E8D22EB7CFD62E10924303C2 -:104B400010924203B1CF81382FEF92074CF4815875 -:104B50009F4F909341038093400381E8F82EB0CF9C -:104B6000F82E1092410310924003AACF0197909320 -:104B7000450380934403A4CF6894E0F884E00E9446 -:104B8000691584E190E0F3CF809148038F5F8093B3 -:104B9000480396CF9F92AF92BF92CF92DF92EF924F -:104BA000FF920F931F93CF93DF93CDB7DEB7649738 -:104BB0000FB6F894DEBF0FBECDBF8E010F5F1F4F43 -:104BC0008AE0D8011D928A95E9F79EE4C92E91E00A -:104BD000D92EF12CE12CAA24A394B12CF6018191B9 -:104BE0006F018F3F09F444C0F894E82FE295EF700D -:104BF000F0E021A18F70A50102C0440F551F8A95D6 -:104C0000E2F7CA01922F982B91A392A18095892354 -:104C100082A30E94AC0900C0E7E4F1E0912C31E0EE -:104C200021912F3F09F478C0A22FA295AF70B0E078 -:104C300090968C9190E02F7002C0959587952A955B -:104C4000E2F780FD69C0832F982A330F51E0EE34DC -:104C5000F50731F7F601319780818F3F11F00E94FF -:104C6000AE0980EA8A95F1F7F801EE0DFF1D9082FA -:104C7000AFEFEA1AFA0AB5E0EB16F10409F0AECF8D -:104C80004AE050E0B80188ED92E00E9492347C0145 -:104C9000892B41F08AE0F801A8EDB2E001900D9275 -:104CA0008A95E1F71091E302E114F104B9F181E092 -:104CB000809398020E94A02490939702809396027A -:104CC00080919602909197020E949124069770F02D -:104CD000A8EDB2E0E12FF0E0E65DFC4F8D9181930D -:104CE00022E0AD3DB207D1F71092980281E090E04A -:104CF000EF28C1F064960FB6F894DEBF0FBECDBFAB -:104D0000DF91CF911F910F91FF90EF90DF90CF90A7 -:104D1000BF90AF909F90089580E096CF80919802C9 -:104D20008111CECF0E94C00ED82EE091E3028823DD -:104D300009F4C9C07E0140E1E40EF11C85E0D70111 -:104D40001D928A95E9F70E2F10E0065D1C4F8091A9 -:104D5000D1028A3008F080C048E053E2B701C801B0 -:104D60000E947C0E882309F49AC041E358E2B701FF -:104D7000C8010E947C0E882309F491C04CE551E2E1 -:104D8000B701C8010E947C0E882309F488C04BE259 -:104D900052E2B701C8010E947C0E882309F47FC04B -:104DA00049E052E2B701C8010E947C0E882309F451 -:104DB00076C01092D1028091E20290E045E050E08E -:104DC000B701865D9C4F0E94923421E02093A1029E -:104DD000892B09F057C0D12C8BE9E82E82E0F82E00 -:104DE00010E000E0D7018D917D018823D1F08695F8 -:104DF000F80109F465C0E950FE4F808191819C87DC -:104E00008B871D860E94A0248160782F9F878E87C4 -:104E1000F701319710824B855C856D858F850E94E7 -:104E2000CA200E5F1F4F04301105E1F66091F502B4 -:104E30007091F6028091F7029091F8020E94320878 -:104E400061367A4E8105910528F040E060E080E00F -:104E50000E94080F8D2D4ECF8091990290919A0259 -:104E60000E949124843F914008F076CF8091A10266 -:104E7000882309F4B0CF85E0F70111928A95E9F70C -:104E80001092A102A091E202B0E0A65DBC4F85E0C5 -:104E9000FE01709601900D928A95E1F79DCF809169 -:104EA000D1028F3F31F08F5F8093D1028A3008F4B6 -:104EB00082CF0E94A02490939A0280939902D6CF29 -:104EC000ED50FE4F9ACFF0E0E65DFC4FF89485E0A0 -:104ED000A1EBB2E001900D928A95E1F765E070E0F8 -:104EE00081EB92E00E94E3088093B0020E94AC093B -:104EF000F894E091EB02F0E0E851FD4F80818B8760 -:104F00008093B70261E070E0CE010B960E94E30847 -:104F10008093B6020E94AC09F894C090B802D09079 -:104F2000B902E090BA02F090BB0280919D0290918C -:104F30009E02A0919F02B091A002C816D906EA066F -:104F4000FB06D1F0C0929D02D0929E02E0929F0299 -:104F5000F092A0020E94C00E81110EC00E944E0865 -:104F6000C61AD70AE80AF90AC092D202D092D3022E -:104F7000E092D402F092D5020E94AC09F89480919C -:104F8000C3028823F1F080FF0DC08091BC0280FF36 -:104F900025C09091640491609093640460E08695CC -:104FA0000E9415178091C30281FF09C020E0409143 -:104FB000BF026091BE028091BD020E948A151092CC -:104FC000C3020E94AC09F8948091C402882349F07E -:104FD0000E94860F0E94AC0980E08CCE0E94670E72 -:104FE000E1CF0E946B0FF6CFEF92FF920F931F93CA -:104FF000CF93DF9300D000D00F92CDB7DEB7162F3E -:10500000E82EF12CC701880F991F662339F18950CA -:105010009E4FFC01808191819A83898301E00B83FB -:105020000E94A0248160782F9D838C83F701E55630 -:10503000FD4F0127110F102B108349815A816B817D -:105040008D810F900F900F900F900F90DF91CF9167 -:105050001F910F91FF90EF900C94CA208D509E4F9E -:10506000D8CFCF92DF92EF92FF920F931F93CF93FF -:10507000DF930F92CDB7DEB7EE24E394F12C07EB6C -:1050800012E09E012F5F3F4F4CEA52E063E082E066 -:105090000E946622082F882321F1C090E5028C2D02 -:1050A00090E09C0128513D4F79011981F9018081DF -:1050B000181BD12E80E00AC0DA94F70180818F5F3F -:1050C000808360E08C2D0E94F427802F1D14A4F3B0 -:1050D000912F17FD90E0191B11110EC081110E9434 -:1050E000700B802F0F90DF91CF911F910F91FF9048 -:1050F000EF90DF90CF9008951F5FF701808181507E -:10510000808361E08C2D0E94F427802FE5CF1F92D1 -:105110001FB61F9211248F939F93AF93BF938091DB -:105120006503811113C08091660390916703A0917C -:105130006803B09169034196A11DB11D8093660378 -:1051400090936703A0936803B0936903BF91AF91F5 -:105150009F918F911F901FBE1F901895CDB7DEB7FE -:10516000E0970FB6F894DEBF0FBECDBF84B7877F40 -:1051700084BF0FB6F894A8958091600088618093F1 -:105180006000109260000FBE80E890E00FB6F894C7 -:1051900080936100909361000FBE85B7806885BFE2 -:1051A00085B7806885BF8AEA99E090933102809341 -:1051B00030020E94A4060E946F078091E200846082 -:1051C0008093E200789480917B038823A1F0109172 -:1051D000E9001F709091EC00892F817090FD80E8AC -:1051E000182B1092E9008091E80083FD0E94B7110E -:1051F0001F701093E90082E084BD93E095BD9AEFA3 -:1052000097BD80936E001092D2021092D30210923A -:10521000D4021092D5020E94CF10811102C00E94C8 -:105220002B100E94C00E8093580180915801882352 -:1052300009F4C9C01092720185E2809373010E9443 -:10524000C00E81110E9487328091580181112FC0B8 -:10525000FE01359686E0DF011D928A95E9F786E624 -:10526000898387E98A8386EC8B8384E38C8385E357 -:105270008D833497AEE4B1E0CE010B9621912D934E -:105280008E179F07D9F787E0E8E7F1E0DE019196F6 -:1052900001900D928A95E1F7FE01B196A7E4B1E085 -:1052A000CE01889621912D938E179F07D9F7809173 -:1052B000580195E0811190E09093E30285E0891B0D -:1052C0008093E2020EE411E083E5E82E81E0F82EFF -:1052D000F80181918F018F3F11F00E94AE09E01615 -:1052E000F106B1F707E411E0BEE4EB2EB1E0FB2ECE -:1052F000D8018D918D018F3F11F00E94AE09E0160B -:10530000F106B1F78AE0EAE2F3E0DF01282F1D920F -:105310002A95E9F7E8EDF2E0DF011D928A95E9F7B9 -:105320000E944523811102C00E94DD1782E090E0B7 -:105330000E94A83480931F0384E090E00E94A83468 -:10534000182F82E290E00E94A834982F812F90932A -:10535000D7028093D6020E94CA25EFE7FBEB319774 -:10536000F1F700C000000E94CA2580912A0380FF47 -:105370002EC06FEF7FEF90E080E00E94DA3481E092 -:105380008093E00080E28093D8001092C9008FE102 -:105390009EE40197F1F700C0000087E090EBDC018C -:1053A00080936D0690936E06A0936F06B09370067F -:1053B00088E19CE00FB6F894A895809360000FBE3A -:1053C00090936000FFCF85E28093720136CF83E037 -:1053D00090E00E94A8340E94F50B809185030E9402 -:1053E0007F160E944523811102C00E94DD1788E1CB -:1053F00090E00E94B03460935B0370935C038093F1 -:105400005D0390935E03672B682B692B11F40E9458 -:10541000A6170E94883067E081E00E945D1565E56F -:1054200086E10E945D1563E687E10E945D1560EAF2 -:105430008AE10E945D1569E98BE10E945D1565EFC7 -:105440008CE10E945D1560EA8DE10E945D1560E3CC -:105450008EE10E945D1566E083E00E945D1561E0CB -:105460008CE00E945D1560E081E00E945D1560E0C7 -:105470008CE00E945D156FE084E00E945D1561E0A4 -:105480008CE00E945D150E94C00E811102C00E9436 -:105490008A3283E080931A0380E280934E030E9455 -:1054A00088306DE070E08CE492E00E943B0F892B25 -:1054B000E9F580911A0363E070E081FD05C289E49B -:1054C00092E00E943B0F892B89F56DE070E089E343 -:1054D00092E00E943B0F892B49F50E944E086058CC -:1054E000774C8E4F9F4F6093550370935603809374 -:1054F000570390935803EBE6F4E080E092E0DF017D -:105500009C011D9221503040E1F7F0936C06E0932E -:105510006B068FEF9FEF90936A048093690481E09C -:1055200080935A038093590310921B038091E402E5 -:10553000811136C00E944523811104C00E94DD17ED -:105540000E94631788E090E00E94B0346093640486 -:1055500070936504809366049093670480914B0375 -:10556000836080934B036E7F71F40E94631788E021 -:1055700090E00E94B034609364047093650480935B -:105580006604909367040E94FE088091640480FF83 -:1055900004C060E086950E94151781E08093E402C4 -:1055A00080915801811106C084EF8093660185EFD8 -:1055B0008093650120916601A22FA295AF70B0E0A3 -:1055C00091963C9191972F7081E090E0BC01022E62 -:1055D00001C0660F0A94EAF7462F4095432391963F -:1055E0004C93919792963C919297362B92963C933E -:1055F000929740916501E42FE295EF70F0E031A1C0 -:105600004F70042E01C0880F0A94EAF7982F9095E6 -:10561000932391A392A1892B82A390968C9190E0E1 -:1056200002C0959587952A95E2F7817020A130E018 -:1056300002C0359527954A95E2F792E020FF90E069 -:10564000892B8093EC029091580181E098279093E8 -:10565000EB02891B8093E5020E94D61760E08AE086 -:105660000E94151781E00E94CB1680EE90E0909387 -:105670007101809370010E94280F89E591E0909359 -:10568000620380936103A0E46A2E80917B03FF2470 -:10569000F39400E112E1853009F465C10E94CA2546 -:1056A000E82E81110E944E08FAE22F2EF3E03F2EE1 -:1056B000E0E2F3E0D10110E000E0B02EDD90819156 -:1056C0008D1509F474C18D25C12CFF24F394982FF6 -:1056D0009F2109F467C10E94C00E882399F0C9A2D6 -:1056E000BAA2DF2081E009F480E08BA30E94A0240D -:1056F0008160782F9DA38CA349A15AA16BA18DA194 -:105700000E94CA20F801E05EFC4F8081F826F082FA -:105710008091EC02E82FEE0FEE0F90916601A92F19 -:10572000A295AF70B0E090962C9130E09F7002C0CF -:10573000359527959A95E2F7217033279091650169 -:10574000A92FA295AF70B0E090964C9150E09F7059 -:1057500002C0559547959A95E2F7CA01817099273D -:1057600040FF02C082E090E0822B8E2B8093EC02FF -:105770001091EB028F70E82FF0E0E350FE4F808134 -:105780009091EA02890F8093EA02F12C84306CF048 -:10579000E12FF0E0E851FD4F80818F5F808360E072 -:1057A000812F0E94F427FF24F3948091EA028D3F19 -:1057B0006CF4E12FF0E0E851FD4F8081815080834F -:1057C00061E0812F0E94F427FF24F3948091EA0284 -:1057D000082E000C990B64E070E00E9468348093FE -:1057E000EA02F1100E94700B80915A03882351F154 -:1057F00080911C0390911D030E949124C29708F090 -:10580000EDC02091690430916A042115310509F039 -:10581000F0C1809159038823A9F00E944E0800919D -:105820005503109156032091570330915803601B84 -:10583000710B820B930B6F3F7F4F8F4F9F4710F47D -:105840000E946B0FE11001C0F1100E94860F0E94B0 -:10585000E8100E94E30E90911E03891731F00E9418 -:10586000E30E80931E030E944B0E80917B038430D5 -:1058700009F00BCF83E08093E9008091E80082FF7C -:1058800004CF8091E80090E085FF0CC00E94C30621 -:1058900030E2E32EF12C8E010F5F1F4F882309F4B5 -:1058A00087C291E08091E8008B778093E80099238C -:1058B00009F4EBCEE981E150E33108F0DDC2F0E01C -:1058C000EC5AF94C0C947C3486E492E0FACD809149 -:1058D0007B03843009F437C080E00E944B0E809136 -:1058E000E702811109C0F092E7028091640481709F -:1058F0008093E6020E94670E0E946B0F0E94E810E0 -:105900001092650388E190E00FB6F894A895809313 -:1059100060000FBE6092600083B7817F846083BFA8 -:1059200083B7816083BF7894889583B78E7F83BF68 -:105930000FB6F894A895809160008861809360000C -:10594000109260000FBE80917A03882361F00E945C -:10595000CA25EAE2F3E081918111B9C3A4E3B3E07F -:10596000AE17BF07C1F780917B03853009F4AFCF35 -:1059700010926E030E94AE110E94E30E0E944B0E25 -:105980001092E7028091E602882349F08091640436 -:1059900081608093640460E086950E9415170E94E0 -:1059A000280F7CCEC394FF0C27E0C21290CE0F5F6D -:1059B0001F4F0A30110509F080CE8FEF88A789A705 -:1059C0001AA60E94A0248160782F9CA78BA748A5C7 -:1059D00059A56AA58CA50E94CA209ACE0E94A0242F -:1059E00090931D0380931C0360E080E00E94CC082C -:1059F0000E94E30E8093F9020E94C00E882309F4EE -:105A0000DFC06091F5027091F6028091F7029091EB -:105A1000F8020E943208613375478105910540F014 -:105A20000E946B0F80915A03882309F4F2CEE9CECD -:105A30000E94860F61E080E00E94CC0860E08FE762 -:105A400091E00E94411562E080E00E94CC088091C4 -:105A500085030E94BB0C823009F48CC008F081C021 -:105A6000882309F487C0813009F48AC065E080E0AA -:105A70000E94CC0860E08DE991E00E94411566E04B -:105A800080E00E94CC086091F9026695617082EA1C -:105A900091E00E94411567E080E00E94CC0860918F -:105AA000F9026095617087EA91E00E94411568E013 -:105AB00080E00E94CC086091F90262FB662760F9E1 -:105AC0008BEA91E00E9441156091F1027091F2021F -:105AD0008091F3029091F4020E9432086D3271407D -:105AE0008105910508F49ECF0E944E086093F10253 -:105AF0007093F2028093F3029093F4028091F0028B -:105B0000811104C080916701811142C06DE080E085 -:105B10000E94CC0860E080EB91E00E9441156AE0B1 -:105B200080E00E94CC0881E0809367018091EF02C1 -:105B300090E00196817099278093EF0221E030E098 -:105B4000281B390B40E6429FC001439F900D112452 -:105B50002091EE02222351F187529C4F0E94610650 -:105B600061CF833089F0843009F080CF60E081E933 -:105B700091E003C060E085E891E00E94411576CF96 -:105B800060E08BE891E0F9CF60E087E991E0F5CF44 -:105B90006AE080E00E94CC0860E080EB91E00E9427 -:105BA00041156BE080E00E94CC08C0CF2091ED024F -:105BB000222319F0875E9C4FD1CF875A9D4FCECFBD -:105BC00064E080E00E94CC0860E086EB91E00E94F7 -:105BD000411565E080E00E94CC0860E08CEB91E02C -:105BE0000E94411569E080E00E94CC0889E994E0B8 -:105BF000B5CF80911B0361E070E081110ACE082FC0 -:105C000010E02B01082E02C0440C551C0A94E2F748 -:105C1000A90144215521452B09F448C090911A034C -:105C200090FD46C08295880F807680936A01980126 -:105C3000369527953695279520936D01815E809343 -:105C40006B0110926E0124E630E047E050E068E618 -:105C500071E088E70E947F31892B09F0DACDA80135 -:105C600075E0440F551F7A95E1F780911A0380FD86 -:105C70002DC045595B4F04E610E020E230E060E4BF -:105C800088E70E94A631892B09F0C3CD0E94860FB8 -:105C9000C201809590954090690450906A04482212 -:105CA000592250926A0440926904B3CD8F5FA7CF06 -:105CB000880F880F880F80936A0110926D01895FA9 -:105CC00080936B0183E080936E01BDCFEAEFF2E039 -:105CD00080E2DF011D928A95E9F7E1E1F2E0F8AB9D -:105CE000EFA70DE012E067E0A62E99249394AFA5EC -:105CF000B8A96D91B8ABAFA7F80181918F01840F5E -:105D0000952F911D9C0125593B4F3EA72DA7E62FAE -:105D1000F0E0E650FD4F30E020E07A2C721AB92C0A -:105D2000022E01C0BB0C0A94EAF7CDA4DEA490E0D9 -:105D3000D6018D916D018B21672D691B6770862EB1 -:105D4000062E000C770BB82F01C0BB0F8A94EAF720 -:105D50008B2E7195619571096770772701C08695C3 -:105D60006A95EAF7882A8081882A80829F5F983026 -:105D7000F9F62F5F3F4F31962830310571F6E5E196 -:105D8000F2E02FA538A9E217F30709F0B0CF04E637 -:105D900010E020E230E04AEF52E071CF8091F10054 -:105DA000D8018D938D01B1E0EB1AF10809F479CD9A -:105DB0008091E80085FDF2CF8091E8008B77809399 -:105DC000E8000E94C306882399F36BCD1A8289E00C -:105DD0008B8311C08A81823009F491C1833091F1A3 -:105DE000813009F049C00E944E080E9482346B83C2 -:105DF0007C838D839E8380917B03843009F045CC26 -:105E00001091E9001F709091EC00892F817090FD36 -:105E100080E8182B82E08093E9008091E80080FF01 -:105E20000DC050E040E060E270E0CE0101960E94BB -:105E3000F4068091E8008E778093E8001F7010933D -:105E4000E90023CCFE013396D1018D911D01819390 -:105E5000B4E32B16B3E03B06B9F7CDCF8A8182308D -:105E600059F46B817C818D819E810E94823486E20F -:105E700090E00E94BC34BFCF8FEF8983BCCF4C81B0 -:105E80006B818A810E943A109827892798279E83E0 -:105E90008D83B1CFED80FE80FE24EF24FE248A8125 -:105EA0000B81EEE00E9F80011124FCE88F9F000D16 -:105EB000111D11248C8190E0880F991F080F191F64 -:105EC0006F2DC80187960E94BC346E2DC80188963C -:105ED000D0CF0E94BE0F8FCF8A818138C1F060F48D -:105EE000803809F088CF20E04B8160916604809172 -:105EF00065040E948A157FCF8238E9F0833809F063 -:105F00007ACF20E0409167046C818B81F2CF60E012 -:105F10008B810E9415178B81811103C00E94670E2F -:105F20006ACF8091640481608093640460E0869508 -:105F30000E94151760CF8B81809368045CCF8A81A3 -:105F4000813899F030F4803809F055CF809167049A -:105F50003FCF823891F0833809F04DCF80916504AE -:105F60008B83809166048C8346CF8091640480FF8C -:105F700002C086952DCF80E02BCF8091680428CF7A -:105F80006091640470916504809166049091670447 -:105F90000E94781530CF80E18A832DCF81E08A83FB -:105FA0008DE116CFCA80DB80DC24CD24DC248E0179 -:105FB0000F5F1F4FEC80E00EF12EF11CC6018D51DA -:105FC0009D4F0E151F0509F416CF2DE1C21621E0D5 -:105FD000D20658F40E94A834D80114968C93FFEF8F -:105FE000CF1ADF0A0F5F1F4FE9CFF8011482F7CFF6 -:105FF0000A811B811027012710279E012F5F3F4F29 -:106000006901EC80E00EF12EF11CC8018D519D4F0D -:10601000E016F10609F4EFCE0D3131E0130728F454 -:10602000D60114966C910E94BC34BFEFCB1ADB0AE8 -:106030000F5F1F4FEACF0E94AE0FDDCE85E0ACCFE1 -:10604000CA80DB80DC24CD24DC248E010F5F1F4F4F -:10605000EC80E00EF12EF11CC6018796E016F106E9 -:1060600009F4C9CEECEBCE16E2E0DE0658F40E944D -:10607000A834D80114968C93FFEFCF1ADF0A0F5F74 -:106080001F4FEACFF8011482F7CF0A811B81102736 -:10609000012710279E012F5F3F4F6901EC80E00E22 -:1060A000F12EF11CC8018796E016F10609F4A3CE83 -:1060B0000C3B32E0130728F4D60114966C910E9431 -:1060C000BC34BFEFCB1ADB0A0F5F1F4FEBCF09BD0C -:1060D00019BD09B400FEFDCF8091D8008F7D80935B -:1060E000D8008091E00082608093E0008091E00021 -:1060F00081FDFCCF10926E030E94AE1134CC86E27B -:1061000090E00E94A8341B821C821D828E8373CE75 -:106110001092B9008CE08093B80008959F92AF92DE -:10612000BF92CF92DF92EF92FF920F931F93CF9384 -:10613000DF93B82EEB010E94A0246C01EE24E394BF -:10614000F12CC431D10560F025E0E22EF12CCF3FD7 -:10615000DC0731F0CE0164E170E00E9448347B013D -:1061600084EAA82E94E8992E1092BC00A092BC005C -:106170000E94A0248C018091BC0087FF0DC08091FB -:10618000B900887F883039F18091B900887F8031EB -:1061900011F10FEF1FEF09C00E94A024801B910B8B -:1061A0008E159F0540F30EEF1FEFCF3FDC07E1F2A6 -:1061B000C6010E9491248C179D07B0F2C801DF919F -:1061C000CF911F910F91FF90EF90DF90CF90BF90F4 -:1061D000AF909F900895B092BB009092BC000E9437 -:1061E000A0248C018091BC0087FF0AC08091B90077 -:1061F000887F883111F0803461F610E000E0DECF56 -:106200000E94A024801B910B8E159F0558F3CBCFC5 -:106210000F931F93CF93DF93EB018093BB0084E830 -:106220008093BC000E94A0248C018091BC0087FF59 -:1062300011C02091B900287F81E090E0283211F44C -:1062400090E080E0919581959109DF91CF911F9128 -:106250000F910895CF3FDC0741F30E94A024801BDB -:10626000910B8C179D0708F38EEF9FEFEECF0F93E6 -:106270001F93CF93DF93EC0184EC8093BC000E94CA -:10628000A0248C018091BC0087FF08C08091BB00D6 -:1062900090E0DF91CF911F910F910895CF3FDC07E0 -:1062A00089F30E94A024801B910B8C179D0750F34B -:1062B0008EEF9FEFEECF0F931F93CF93DF93EC0101 -:1062C00084E88093BC000E94A0248C018091BC00D3 -:1062D00087FF08C08091BB0090E0DF91CF911F91B4 -:1062E0000F910895CF3FDC0789F30E94A024801B03 -:1062F000910B8C179D0750F38EEF9FEFEECFCF924F -:10630000DF92EF92FF920F931F93CF93DF936B0176 -:106310008A017901B9010E948E30E6010C0D1D1D24 -:10632000C017D10761F424E92093BC00DF91CF911D -:106330001F910F91FF90EF90DF90CF90089597FD00 -:10634000F2CFB70189910E940831EACFCF92DF9254 -:10635000EF92FF920F931F93CF93DF93C62F6A01A3 -:106360007901B8010E948E3097FD0CC0B8018C2FC6 -:106370000E940831E601EC0CFD1CCE15DF0511F082 -:1063800097FF0CC024E92093BC00DF91CF911F91AF -:106390000F91FF90EF90DF90CF900895B801899111 -:1063A0000E940831EACFCF92DF92EF92FF920F93D3 -:1063B0001F93CF93DF93F82EE62EEA016901B8010F -:1063C0000E948E3097FD15C0B8018E2D0E940831B5 -:1063D00097FD0FC0B8018F2D81600E948E30F12C87 -:1063E000E12C21E0C21AD108EC14FD0400F597FF5E -:1063F00011C024E92093BC001816190614F490E08B -:1064000080E0DF91CF911F910F91FF90EF90DF908F -:10641000CF900895C8010E94373197FD04C0FE0156 -:10642000EE0DFF1D80832FEFE21AF20ADDCF97FDFC -:10643000E0CFC8010E945B3197FDDBCFCC0DDD1DA5 -:106440008883D7CF84E98093BC0008958EE14A9B6E -:1064500002C08150E1F74A9BFECF08955A9880E22E -:106460008A95F1F75A9A0895FC013BE03A95F1F7C5 -:1064700098E020E080E031E040E14A95F1F7880FB4 -:106480004A9B02C08160232742E04A95F1F7000051 -:1064900040E14A95F1F7915079F790E19A95F1F73B -:1064A00099B132E03A95F1F7000040E14A95F1F7F1 -:1064B00092FB992790F992272081920F908308955B -:1064C000EF92FF920F931F93CF93DF930F92CDB76D -:1064D000DEB719828C017C01E60EF11C0E151F053A -:1064E00061F481E09981911180E00F90DF91CF916B -:1064F0001F910F91FF90EF9008950E942632CE01D8 -:1065000001960E943432F80181938F01E7CF529AAD -:106510005A9A089552985A9AEA9AE9E6F0E08081E8 -:106520008F7C808308956150770B91E001C0990FB3 -:106530006A95EAF720E031E0911108C0222391F03A -:106540005A9A80E28A95F1F75A980895492F48237C -:1065500039F05A9A232740E24A95F1F79695ECCF05 -:106560005A98F9CF5A98EDCFFF920F931F93CF937C -:10657000DF93EC018C01060F111DC017D10731F418 -:10658000DF91CF911F910F91FF900895F9900E9494 -:106590002E3268E08F2D0E949332EFCF1F920F9220 -:1065A0000FB60F921124EF92FF920F931F932F9328 -:1065B0003F934F935F936F937F938F939F93AF938B -:1065C000BF93EF93FF93CF93DF930F92CDB7DEB7D7 -:1065D00019820E942632CE0101960E943432A82FE1 -:1065E000A695A695A695282F229525709A2F957089 -:1065F000290F922F937026952695920F98279770C2 -:106600008981982B09F075C0A83008F072C080E12C -:106610008A95F1F75A9A529AB2E0BA95F1F700C00A -:106620005A98EA2EF12CEAE0AE9FD0011124AF5F18 -:10663000BE4F1896ED91FC9119973097B1F060918B -:10664000FB017091FC0116962D913C911797260F36 -:10665000371F13968D919C911497680F791F15968B -:106660004C91159712968C9109958AE08E9DF001B8 -:106670008F9DF00D1124EF5FFE4F6581662351F071 -:106680002091FB013091FC0186819781820F931F3D -:106690000E94B4320E942E32F0E1FA95F1F75A9836 -:1066A00052985A9A80E18A95F1F78AE08E9D80018E -:1066B0008F9D100D11240F5F1E4FD80112966C9103 -:1066C0001297662371F12091FB013091FC01139622 -:1066D0008D919C91820F931F0E946032D801ED91A1 -:1066E000FC91882311F088E001C082E080830E9441 -:1066F00026320F90DF91CF91FF91EF91BF91AF9133 -:106700009F918F917F916F915F914F913F912F91C9 -:106710001F910F91FF90EF900F900FBE0F901F9061 -:106720001895ED91FC91DFCF0F931F93CF93DF93DB -:10673000EC0108970CF0A9C08AE08C9FF0018D9FB6 -:10674000F00D1124EF5FFE4F80819181892B09F4B8 -:106750009CC0F894529A5A9885E08A95F1F7000007 -:106760008C2F869585709C2F9570890F982F93702C -:1067700086958695890F8E0193E0000F111F9A95DB -:10678000E1F7082B0E942E3200C068E0802F0E94A3 -:106790009332A0E1AA95F1F752985A9A4A9B27C0E2 -:1067A00087E090E04A9925C08AE08C9F80018D9F08 -:1067B000100D11240F5F1E4FF80165816623A1F1B2 -:1067C0002091FB013091FC0186819781820F931FFC -:1067D0000E946032811128C0529A5A9AD801ED91D4 -:1067E000FC9182E08083789482E090E016C000C043 -:1067F000D5CF0197B9F4529A5A9A8AE08C9FF0014A -:106800008D9FF00D1124EF5FFE4F0190F081E02D80 -:1068100081E08083789481E090E0DF91CF911F91B7 -:106820000F91089500C0BECF0E942632B0E2BA9503 -:10683000F1F75A98529AE0E1EA95F1F78AE08C9FD5 -:10684000F0018D9FF00D1124EF5FFE4F62816623F2 -:1068500051F02091FB013091FC0183819481820FE2 -:10686000931F0E94B4320E942E328AE08C9FF00166 -:106870008D9FF00D1124EF5FFE4F0190F081E02D10 -:106880001082789490E080E0C8CF84E090E0C5CF9B -:10689000AA1BBB1B51E107C0AA1FBB1FA617B70746 -:1068A00010F0A61BB70B881F991F5A95A9F7809562 -:1068B0009095BC01CD010895991B79E004C0991F02 -:1068C000961708F0961B881F7A95C9F7809508954A -:1068D00097FB072E16F4009407D077FD09D00E948D -:1068E000483407FC05D03EF4909581959F4F08955C -:1068F000709561957F4F0895EE0FFF1F0590F491FD -:10690000E02D099469279627692778278727782714 -:106910000895FB01DC0102C005900D9241505040EA -:10692000D8F70895FB01DC0104C08D910190801916 -:1069300021F441505040C8F7881B990B0895FB0182 -:10694000DC0102C001900D9241505040D8F70895EB -:10695000F999FECF92BD81BDF89A992780B5089527 -:10696000A6E1B0E044E050E00C94E234A8E1B0E0ED -:1069700042E050E00C94E234262FF999FECF92BD0C -:1069800081BDF89A019700B4021639F01FBA20BDF4 -:106990000FB6F894FA9AF99A0FBE08950396272F26 -:1069A0000E94BD340E94BC34252F0E94BD34242F88 -:1069B0000C94BD340196272F0E94BD340C94BC3436 -:1069C000DC01CB01FC01F999FECF06C0F2BDE1BDAF -:1069D000F89A319600B40D9241505040B8F708959E -:1069E0000E94F7346894B1110C94863508950E9482 -:1069F0006B3588F09F5798F0B92F9927B751B0F0B1 -:106A0000E1F0660F771F881F991F1AF0BA95C9F732 -:106A100014C0B13091F00E948535B1E008950C9416 -:106A20008535672F782F8827B85F39F0B93FCCF3C9 -:106A3000869577956795B395D9F73EF490958095AF -:106A4000709561957F4F8F4F9F4F0895E89409C0CF -:106A500097FB3EF490958095709561957F4F8F4F91 -:106A60009F4F9923A9F0F92F96E9BB279395F695A7 -:106A7000879577956795B795F111F8CFFAF4BB0F25 -:106A800011F460FF1BC06F5F7F4F8F4F9F4F16C089 -:106A9000882311F096E911C0772321F09EE8872F13 -:106AA000762F05C0662371F096E8862F70E060E0CF -:106AB0002AF09A95660F771F881FDAF7880F969548 -:106AC000879597F9089557FD9058440F551F59F031 -:106AD0005F3F71F04795880F97FB991F61F09F3FCB -:106AE00079F087950895121613061406551FF2CFF4 -:106AF0004695F1DF08C0161617061806991FF1CF44 -:106B000086957105610508940895E894BB2766276A -:106B10007727CB0197F908950E949F350C94103682 -:106B20000E94023638F00E94093620F0952311F0B9 -:106B30000C94F9350C94FF3511240C9486350E9481 -:106B4000633570F3959FC1F3950F50E0551F629F19 -:106B5000F001729FBB27F00DB11D639FAA27F00DB6 -:106B6000B11DAA1F649F6627B00DA11D661F829FDD -:106B70002227B00DA11D621F739FB00DA11D621FC2 -:106B8000839FA00D611D221F749F3327A00D611DDF -:106B9000231F849F600D211D822F762F6A2F1124C1 -:106BA0009F5750409AF0F1F088234AF0EE0FFF1FF4 -:106BB000BB1F661F771F881F91505040A9F79E3F4B -:106BC000510580F00C94F9350C9486355F3FE4F361 -:106BD000983ED4F3869577956795B795F795E795A1 -:106BE0009F5FC1F7FE2B880F911D9695879597F9AA -:106BF000089597F99F6780E870E060E008959FEF3F -:106C000080EC089500240A94161617061806090643 -:106C1000089500240A941216130614060506089512 -:106C2000092E0394000C11F4882352F0BB0F40F49A -:106C3000BF2B11F460FF04C06F5F7F4F8F4F9F4FDA -:106C40000895F894FFCFBA10BA10C310C310C5103E -:106C5000C310C310C310BA10BA10CA10C310C310A7 -:106C6000CA109F12C7126A14C7126A14FA121B13B1 -:106C70006A1419142614931809190C1920192319C8 -:106C800036193F196319A919DB19EF1975199819E4 -:106C9000281D281D811D811DB31D5B1D5B1D5B1DF6 -:106CA000CD1D3E1E4E1E4E1EE62EEA2E2E2F3F2FCF -:106CB0004A2F692F6C2F9F2FC02F3C2F3C2FCB2F9B -:0E6CC000CE2FD22FF82F1B301E302030453043 -:106CCE00013A0200000001000000003A020000003C -:106CDE0005010000003A0200000001060000003A23 -:106CEE000200000001070000003A02040800000044 -:106CFE000000003A02080C0000000000003A0201F9 -:106D0E001400000000000036323331F7F6FF6697AC -:106D1E00C634350000000000012F085E0D3D0D3910 -:106D2E000D350D2E08F4F5010021007F2200030120 -:106D3E008000004A004A4A01F6F731333236FF4CE2 -:106D4E00415945520042617365200047616D6520CF -:106D5E00005261697365004C6F776572004C4F434A -:106D6E004B0043617073004E756D005363726C007F -:106D7E00202020202000534F4C415200544D5053A0 -:106D8E005400818283E200E900EA00B500B600B744 -:106D9E0000CD008301CC008A0192019401210223CF -:106DAE000224022502260227022A02B300B4006F33 -:106DBE000070000603060806010606B00200FF0179 -:106DCE0000010000FFFF0000010001FF000008109D -:106DDE00181810080000010202020202020202024A -:106DEE000240227B49012701AC009E0BB70BD70B4B +:1020300083E290E00E942C35C1110CC0CFEF6C2FD1 +:1020400084E290E00E942C356C2F85E290E0CF91E5 +:102050000C942C35C2E1F3CF80E00E94131060E0B5 +:1020600086E290E00E942C350E94BE0F0E94AE0FC7 +:1020700081E00C9413100F931F93CF93DF93C42F21 +:10208000D0E0CC0FDD1F2EE0629FC00DD11D1124CA +:102090003CE8839FC00DD11D1124CE0187960E947C +:1020A0001835082F10E0102F0027CE0188960E94C7 +:1020B00018359801282BC901DF91CF911F910F91FD +:1020C0000895462F853038F47A3028F4673018F4B4 +:1020D000672F0C943B1090E080E00895CF92DF9240 +:1020E000FF920F931F93CF93DF936C0100918A03AC +:1020F00080919802082BC7E0D0E010E0FC2EC801C8 +:102100000C2E02C0959587950A94E2F780FD0CC0CD +:102110002197A0F7F12C8F2DDF91CF911F910F9177 +:10212000FF90DF90CF900895B6018C2F0E94611030 +:102130000E94080A019761F3EECFCF93DF93EC0181 +:102140000E946E10BE010E946110DF91CF910C942D +:10215000080AFC01808191810E949D10292F2F7017 +:1021600092959F7092509E3078F4E92FF0E0ED56F2 +:10217000F94C0C94EC34803F19F020F4883E20F4A4 +:1021800081E00895843FE1F380E00895883EC0F344 +:10219000813FD1F7F5CF822F869586958695089554 +:1021A00083E290E00E941835813289F484E290E065 +:1021B0000E941835823159F485E290E00E9418356A +:1021C00091E0823109F090E0892F8170089580E0DC +:1021D000FCCF1F93CF93DF93CDB7DEB768970FB6D1 +:1021E000F894DEBF0FBECDBF40913F035091400336 +:1021F00060914103709142038091430390914403A5 +:102200000E94901B20933F0330934003609343034D +:1022100070934403142F119510934103652F61951A +:102220006093420386E0EFE3F3E0DE01179601904E +:102230000D928A95E1F786E0FE013796DE01119650 +:1022400001900D928A95E1F79B858C852091700114 +:102250002223B1F0772761950CF47095072E000CBE +:10226000880B990B0E9498352AE939E949E95EE320 +:102270000E94FC350E946035962F812F60E010E0AF +:102280001B836C839D838E8386E0FE013196DE0185 +:102290001D9601900D928A95E1F786E0FE013D962C +:1022A000DE01539601900D928A95E1F786E0FE01DA +:1022B0007396DE01119601900D928A95E1F786E002 +:1022C000FE013196AFE3B3E001900D928A95E1F7FC +:1022D00086E0EFE3F3E0DE01179601900D928A9518 +:1022E000E1F786E0E9E3F3E0DE01119601900D925B +:1022F0008A95E1F746E050E0BE016F5F7F4FCE0167 +:1023000007960E940235892B79F0E0916603F091DF +:102310006703309749F082E080933F030480F581A2 +:10232000E02D8FE393E00995109241031092420350 +:10233000109243031092440386E0EFE3F3E0A9E335 +:10234000B3E001900D928A95E1F768960FB6F89484 +:10235000DEBF0FBECDBFDF91CF911F910895E6E3A1 +:10236000F2E086E0DF011D928A95E9F70C94E70B15 +:102370001F93CF93DF93CDB7DEB7AA970FB6F8942C +:10238000DEBF0FBECDBF82E893E02091F100DC01FB +:102390002D93CD01B3E08A389B07B9F78091830371 +:1023A000833009F472C0B8F4813009F449C0823036 +:1023B00009F4B5C08091E80083FF8DC2809182034B +:1023C000909183039A3008F086C2E92FF0E0EF5530 +:1023D000F94C0C94EC348A3009F490C08B3009F439 +:1023E00071C0893039F780918203813219F7809169 +:1023F000860390918703009711F00297D9F6809198 +:10240000E800877F8093E8008091E80082FF38C071 +:102410009091F3008091F200029731F48091F100E5 +:10242000813011F0863021F48091F10080937503A2 +:102430008091E8008B778093E8000E941E07BACF56 +:1024400080918203813A09F0B5CF8091E800877FBF +:102450008093E8008091860390918703892B61F433 +:1024600068E086E793E070E00E94D0078091E80082 +:102470008B778093E8009ECF60E090E080E0F3CF20 +:10248000809180038111C0CF95CF80918203813AE2 +:1024900009F090CF8091860390918703892B09F0F2 +:1024A00089CF8091E800877F8093E8008091E800E1 +:1024B00080FFFCCF809178018093F1008091E8004B +:1024C0008E77B9CF80918203813209F073CF8091EA +:1024D000860390918703892B09F06CCF8091E800E7 +:1024E000877F8093E8000E941E0780918403809379 +:1024F0007801109273030E94AF115CCF8091820328 +:10250000813209F057CF8091E800877F8093E800FF +:102510000E941E0780918503809374034BCF8091A6 +:102520008203813A09F046CF8091E800877F80934B +:10253000E8008091E80080FFFCCF80917403BCCF5D +:10254000803899F0823809F0C6C1809186038F7077 +:10255000873008F0C0C18093E9008091EB0085FBD3 +:10256000882780F91092E90006C080917E0390913F +:102570007F03911182609091E800977F9093E8002B +:102580008093F1001092F1008091E8008E779FC156 +:10259000882309F48DC1823009F09DC180918403A4 +:1025A000811190C1809186038F702FEF280F263004 +:1025B00008F091C18093E9002091EB0020FF82C1D7 +:1025C000933031F48091EB0080628093EB007AC10C +:1025D0009091EB0090619093EB0021E030E001C01E +:1025E000220F8A95EAF72093EA001092EA00809180 +:1025F000EB008860EACF81116EC1109184031F77D0 +:102600008091E3008078812B8093E3008091E80043 +:10261000877F8093E8000E941E078091E80080FF7A +:10262000FCCF8091E30080688093E30082E0111189 +:1026300083E0809380034FC18058823008F04BC103 +:1026400020918403309185032C3DE3E03E07A1F502 +:1026500083E08A838AE289834FB7F894DE01139678 +:1026600020E03EE051E2E32FF0E050935700E49188 +:1026700020FF03C0E295EF703F5FEF708E2F90E078 +:10268000EA30C0F0C7968D939D932F5F243159F7A0 +:102690004FBF8091E800877F8093E8006AE270E096 +:1026A000CE0101960E94D0078091E8008B7780933D +:1026B000E80011C1C096E7CF80918603909187030F +:1026C000432F55274330510509F44AC078F541306E +:1026D000510509F47AC08BE590E0ECE8FBE042306C +:1026E000510509F0F8C02091E800277F2093E80009 +:1026F00020918803309189038217930708F49C0185 +:1027000040E02115310509F065C0411163C0809199 +:10271000E80082FDC9CF80918003882329F28530AB +:1027200019F28091E80083FFF2CFBECF413251050C +:1027300009F43CC04232510509F0CDC08330910507 +:1027400008F0C9C0FC01EE0FFF1FEB5DFD4F0190CB +:10275000F081E02D8E5D9D4FDC018C9190E01AC0E0 +:10276000332721303105D1F02115310561F02230B8 +:10277000310509F0B0C0E9EFFBE0E4918E2F90E065 +:10278000E9EFFBE007C0EBE2FCE0E4918E2F90E084 +:10279000EBE2FCE0009709F49EC0A5CFE9E1FCE084 +:1027A000E4918E2F90E0E9E1FCE0F4CF83309105D5 +:1027B00008F091C0880F991FFC01E55DFD4F019065 +:1027C000F081E02D89E090E08ECF82E190E0E7EEAD +:1027D000FBE089CF80918003882309F465CF8530A1 +:1027E00009F462CF8091E80083FD5ECF8091E8001C +:1027F00082FD8DCF8091E80080FF83CF9091F30020 +:102800008091F2002115310519F08830910550F0C2 +:1028100041E0089709F040E08091E8008E778093CE +:10282000E8006FCF44914093F10031962150310977 +:102830000196E8CF803809F04EC08091E800877F8C +:102840008093E800809181038093F1009DCE8111F7 +:1028500042C0109184031230F0F58091E800877F28 +:102860008093E800109381030E941E07112311F04A +:1028700084E005C08091E30087FDFACF81E080937A +:10288000800342E061EC81E00E943D0742E261EC9E +:1028900084E00E943D0742E261EC82E00E943D0735 +:1028A00042E260EC83E00E943D078091800313C008 +:1028B00080918403813079F481E0933009F080E0E5 +:1028C00080937F031092E9008091E800877F8093D6 +:1028D000E8000E941E078091E80083FF0AC08091F3 +:1028E000E800877F8093E8008091EB00806280930E +:1028F000EB00AA960FB6F894DEBF0FBECDBFDF91F6 +:10290000CF911F9108951F93CF93DF93162FC091FE +:102910007006D09171068A30D1F420915303CE0114 +:1029200080579440622F70E00E94B834281B822F99 +:1029300066E00E94CC34C82FC15020F4DF91CF91C3 +:102940001F91089560E080E20E948314F5CF8D30DE +:10295000E9F4C057D44020915303622F70E0CE01B8 +:102960000E94B834281B822F9E01280F311D21158B +:10297000324018F080E0D0E0C0E0C80FD11DC0594F +:10298000DB4FD0937106C0937006D8CF96E0FE015E +:10299000A4E5B3E001900D929A95E1F7803E90F1A5 +:1029A00086E0FE0111928A95E9F7C0917006D091F8 +:1029B0007106111133C046E050E0BE0184E593E09A +:1029C0000E9402359E0120573440892B91F52A5FE1 +:1029D0003F4F40915303642F70E0C9010E94B83407 +:1029E000481B463010F4240F311D211572E03707C3 +:1029F00010F030E020E020593B4F309371062093D7 +:102A000070069CCFF6E08F9FB0011124685B794F70 +:102A100046E050E0CE010E94F934C7CF9E012A5F04 +:102A20003F4FFE012E173F0731F280818095819341 +:102A3000F9CFC90145E0969587954A95E1F741E0C0 +:102A400050E0BA0102C0660F771F8A95E2F7CB010A +:102A500060916E0470916F04862B972BB9016B5FA8 +:102A60007F4FE5E076956795EA95E1F702C0440F60 +:102A7000551F6A95E2F7842B952B90936F048093F2 +:102A80006E04A5CFFF920F931F93CF93DF93EC01BA +:102A9000F62EFC0101900020E9F78F010150110989 +:102AA000C017D10730F0DF91CF911F910F91FF90A8 +:102AB00008956F2D89910E948314F2CFE1E5F3E030 +:102AC0008083618324E630E042E050E0BF0184EB84 +:102AD0000C94EF31CF93C82F60E08CE00E945E151C +:102AE0006C2F84E00E945E1561E08CE0CF910C9425 +:102AF0005E15CF92DF92EF92FF926B017C010E94F4 +:102B0000FE08B701A60188E090E0FF90EF90DF900B +:102B1000CF900C943E35AF92BF92CF92DF92EF925E +:102B2000FF920F931F93CF93DF9300D00F92CDB7F7 +:102B3000DEB7082FF62E142FE22E8091690480FF55 +:102B40004FC0E82FE695AE2FB0E0AA5EBD4F9C9136 +:102B500090934E038E7F823009F056C0413A08F0C0 +:102B600040EA9E012F5F3F4F6F2D802F0E94140976 +:102B70008091690480FF11C02B8139814A81809145 +:102B800075019091760153E0859FF0011124E5577E +:102B9000FC4F891798F10E948B0D80916A04801375 +:102BA00008C080916B048F1104C080916C04811760 +:102BB00029F08091500382608093500300936A044F +:102BC000F0926B0410936C04EE2051F06091690454 +:102BD00070916A0480916B0490916C040E94791545 +:102BE0000F900F900F90DF91CF911F910F91FF9059 +:102BF000EF90DF90CF90BF90AF90089541833083E6 +:102C000022838F5F3396C5CF923039F6E2508E2FF4 +:102C10008170D82EE695F0E0E750FA4FA590B49079 +:102C2000C12CBB2460917701C61608F0B4CF2C2DBF +:102C300030E0A29EC001A39E900DB29E900D112483 +:102C400070E00E94B834802FD11016C0860F4091DA +:102C50007501420F532F511D9A01220F331F240F6C +:102C6000351F25573C4F412F113A08F040EA6F2D90 +:102C70000E941409C394D6CF861BE9CF20E00C94A0 +:102C80008B15CF93C82F0E94BB0C823099F138F47A +:102C90008823C1F0813029F18C2FCF9108958330A2 +:102CA00081F18430C9F740E56FEF8AED0E943E164E +:102CB00087E00E946A1580910001882369F31092D1 +:102CC00070010CC040E56FEF82E30E943E168091D8 +:102CD00000018823A1F381E0809370010E94280FF6 +:102CE000DBCF40E56FEF8CEF0E943E1685E40E943B +:102CF0006A15D2CF40E56FEF80E50E943E1685E26F +:102D0000F6CF40E56FEF86E70E943E168FE1EFCFEA +:102D10000E94411680938A030C94E70B80918A03EA +:102D2000982F9670963019F488600C948816877FD7 +:102D3000FCCF21E030E001C0220F8A95EAF7209510 +:102D400080918A0382230C94881621E030E001C030 +:102D5000220F8A95EAF780918A03822B0C948816B9 +:102D6000E9E6F4E0438121E1421B08F440E021E080 +:102D7000628181810C948B15E9E6F4E0438121E1C5 +:102D8000420F08F44FEF21E0628181810C948B1592 +:102D9000E9E6F4E0628121E1621B08F460E021E0F1 +:102DA000438181810C948B15E9E6F4E0628121E195 +:102DB000620F08F46FEF21E0438181810C948B1541 +:102DC000E9E6F4E0818121E04381628188500C943E +:102DD0008B15E9E6F4E0818121E043816281885F1F +:102DE0000C948B1580916D04882319F08150809389 +:102DF0006D046091690470916A0480916B049091F4 +:102E00006C040C94791580916D04833018F48F5FF5 +:102E100080936D046091690470916A0480916B04E1 +:102E200090916C040C9479159091690490FF26C0E0 +:102E3000917081111CC0926090936904809150033D +:102E4000816080935003662351F060916904709112 +:102E50006A0480916B0490916C040E9479154091F2 +:102E60006C0460916B0480916A040C943E168C3063 +:102E700010F09661E1CF880F982BDECF08958091F6 +:102E800069048695815009F48BE061E00C94141775 +:102E90008091690486958F5F8C3008F081E061E055 +:102EA0000C9414178091690480FF07C0869582589E +:102EB0008F77893010F40C94481761E082E00C940D +:102EC0001417E9E6F4E083E0808311828FEF8283B8 +:102ED00080EA83831482AEE4B3E012968C91129759 +:102EE000836012968C9360817181828193810C94AE +:102EF0007915AB01BC0188E190E00C943E35CF938D +:102F0000C82FE2E6F3E0982F990F990F990F80816F +:102F10008770892B8083E3E6F3E09C2F929596954A +:102F200097708081887F892B808360916003709186 +:102F3000610380916203909163030E9479176C2F63 +:102F400082E0CF910C945E15E0E6F3E089E880839F +:102F5000118282818C7F8283609160037091610312 +:102F600080916203909163030C947917E0E6F3E09B +:102F700080818E7F80836091600370916103809176 +:102F80006203909163030C947917E0E6F3E080818B +:102F9000816080836091600370916103809162031E +:102FA000909163030C9479170E94F83040E060E040 +:102FB00080E00C94080F69EE7EEF90E080E00E94C4 +:102FC0004A3560E082E090E00E942C3560E083E0CA +:102FD00090E00E942C351092980260E084E090E02E +:102FE0000E942C3560E082E290E00E942C3560E087 +:102FF00085E090E00E942C3560E086E090E00E9441 +:103000002C356FEF87E090E00E942C3540E050E0D7 +:10301000BA0188E090E00E943E3560E08DE090E0EB +:103020000E942C3540E050E0BA0188E190E00E9417 +:103030003E3560E087E190E00E942C3540E050E0B2 +:10304000BA018CE190E00E943E3570E060E080E2E1 +:1030500090E00E944A350E94A41780E00E9413105D +:103060000E942C1040E050E0BA018FE090E00E94F6 +:103070003E3540E050E0BA0183E190E00C943E35EB +:103080000F931F93CF93DF9300D000D0CDB7DEB75F +:103090006091CA027091CB028091CC029091CD02D6 +:1030A0000E943208643671058105910588F10E94FD +:1030B000C00E882379F10E944E086E5F7F4F8F4FBC +:1030C0009F4F69837A838B839C8380912D0190919C +:1030D0002E018B549D4F40912C0150E045305105FD +:1030E00010F044E050E0BE016F5F7F4F0E940F354B +:1030F00084E090E00E940434892BD9F40E944E08A9 +:103100006093CA027093CB028093CC029093CD025D +:1031100081E010C00E944E080091D7021091D802A1 +:103120002091D9023091DA02600F711F821F931F24 +:10313000C4CF80E00F900F900F900F90DF91CF9150 +:103140001F910F910895BF92CF92DF92EF92FF925D +:103150000F931F93CF93DF93B82EEB01F42E6901E9 +:10316000688179818A819B810E9432086436710569 +:103170008105910510F4FF2019F1EB2C0B2C000CAC +:10318000FF088B2D9AE08902F0011124EE5FFE4FBB +:10319000838194818B549D4F428150E00417150721 +:1031A00008F4A801B6010E940F35C7010E9404343B +:1031B000892B89F40E944E08688379838A839B83D4 +:1031C00081E0DF91CF911F910F91FF90EF90DF9001 +:1031D000CF90BF90089580E0F4CF0F931F93CF93CB +:1031E000DF930F92CDB7DEB780915E038983209184 +:1031F000C90290E041E02817190609F440E001E017 +:1032000010E09E012F5F3F4F62ED72E086E00E946A +:10321000A3180F90DF91CF911F910F9108950F93F5 +:103220001F93CF93DF93CDB7DEB728970FB6F894EF +:10323000DEBF0FBECDBF85E0E9E6F4E0DE0111960A +:1032400001900D928A95E1F780914E0390914F0382 +:10325000A09150038E839F83A88741E088858111C8 +:1032600001C040E008E010E09E012F5F3F4F6EEC90 +:1032700072E085E00E94A3188111109250032896F5 +:103280000FB6F894DEBF0FBECDBFDF91CF911F9177 +:103290000F9108956F927F928F929F92AF92BF92FB +:1032A000CF92DF92EF92FF920F931F93CF93DF9312 +:1032B0000F92CDB7DEB7862E5A016901682E880FAE +:1032C0007708C3010E940434892B09F07BC08AE08F +:1032D000869DF001879DF00D1124EE5FFE4F458124 +:1032E00050E04115510511F041E050E08AE0869D23 +:1032F000F001879DF00D1124EE5FFE4F668177810E +:103300006B547D4FCE0101960E940F35F50160810F +:103310007181828193810E94320864367105810532 +:10332000910540F4B701C8010E94E308998189170B +:1033300009F44FC0082C000C9908C4010E94043401 +:10334000892B91F0B12C8B2D0F90DF91CF911F9194 +:103350000F91FF90EF90DF90CF90BF90AF909F9034 +:103360008F907F906F9008958AE0889DF001899DED +:10337000F00D1124EE5FFE4F458150E0E416F50696 +:1033800008F4A7018AE0889DF001899DF00D1124C1 +:10339000EE5FFE4F668177816B547D4FC6010E94C0 +:1033A0000F35B701C8010E94E30899818913CACF7C +:1033B0000E944E08F5016083718382839383BB244E +:1033C000B394C1CFB12CA701B801C6010E940F353B +:1033D000BACFBB24B394F7CFCF92DF92EF92FF9294 +:1033E0000F931F93CF93DF9300D000D00F92CDB7F0 +:1033F000DEB76B0185E0E82EF12C06EB12E09E01B2 +:103400002F5F3F4F4DEA52E061E080E00E944A1991 +:10341000882349F095E0FE013196A8EAB2E00190D8 +:103420000D929A95E1F795E0E8EAF2E0D601019075 +:103430000D929A95E1F70F900F900F900F900F90CB +:10344000DF91CF911F910F91FF90EF90DF90CF9080 +:10345000089590E080E00E942635893E9E4F11F449 +:103460000C94D01080E008951F920F920FB60F9227 +:1034700011242F933F934F935F936F937F938F9379 +:103480009F93AF93BF93CF93DF93EF93FF93D0912D +:10349000E900DF708091EC00C82FC17080FDC0E8AA +:1034A0001092E9008091F000877F8093F00078947B +:1034B0000E94B8111092E9008091F000886080931A +:1034C000F000CD2BCF70C093E900FF91EF91DF9119 +:1034D000CF91BF91AF919F918F917F916F915F91AC +:1034E0004F913F912F910F900FBE0F901F90189505 +:1034F0001F920F920FB60F9211242F933F934F9369 +:103500005F936F937F938F939F93AF93BF93EF934B +:10351000FF938091E10082FF09C08091E20082FF69 +:1035200005C08091E1008B7F8093E1008091DA00FB +:1035300080FF24C08091D80080FF20C08091DA00F5 +:103540008E7F8093DA008091D90080FF9DC080E15A +:1035500089BD82E189BD09B400FEFDCF81E0809381 +:10356000800380917203811109C00E94A4060E9409 +:103570006F078091E20084608093E2008091E10017 +:1035800080FF17C08091E20080FF13C08091E200AD +:103590008E7F8093E2008091E20080618093E20060 +:1035A0008091D80080628093D80019BC85E0809318 +:1035B00080038091E10084FF2BC08091E20084FFB2 +:1035C00027C080E189BD82E189BD89B5982F9170BE +:1035D00080FFFBCF8091D8008F7D8093D8008091B1 +:1035E000E1008F7E8093E1008091E2008F7E8093E6 +:1035F000E2008091E20081608093E200809181038B +:10360000882309F447C084E080938003809180037D +:103610008091E10083FF27C08091E20083FF23C0F7 +:103620008091E100877F8093E10082E080938003B6 +:10363000109281038091E1008E7F8093E100809160 +:10364000E2008E7F8093E2008091E20080618093AF +:10365000E20042E060E080E00E943D078091F000DF +:1036600088608093F000FF91EF91BF91AF919F919F +:103670008F917F916F915F914F913F912F910F901B +:103680000FBE0F901F90189519BC109280031092D6 +:10369000720374CF8091E30087FD93E090938003E1 +:1036A000B5CF78941F921FB61F9211248F939F93CA +:1036B000AF93BF9380916B0390916C03A0916D03C6 +:1036C000B0916E030196A11DB11D80936B03909381 +:1036D0006C03A0936D03B0936E03BF91AF919F9164 +:1036E0008F911F901FBE1F9018959C014FB7F894A3 +:1036F00080916B0390916C03A0916D03B0916E0368 +:103700004FBF821B930B08952FB7F89480916B03E2 +:1037100090916C03A0916D03B0916E032FBF08953B +:10372000AF92BF92DF92EF92FF920F931F93CF93CE +:10373000DF93CDB7DEB761970FB6F894DEBF0FBE4B +:10374000CDBF4C87888B998BE52ED62EF72E5E0148 +:1037500027E0A20EB11C85E0F50111928A95E9F7E8 +:1037600080914D038A3008F095C080914B03909171 +:103770004C030E94751B089708F48CC004E610E007 +:1037800025E030E0A50164E084E10E944332892B0A +:1037900009F0DEC010924D038B8587FDD1C0E894FF +:1037A000E0F88091490390914A03009709F0C2C064 +:1037B0008F819885891708F091C0981B892F41E067 +:1037C0002091710130917201889FC001112455E050 +:1037D000589FF001599FF00D1124E29FB001E39F23 +:1037E000700DF29F700D1124660F672F661F770B07 +:1037F0007195442319F07195619571098091470382 +:1038000090914803680F791F89859A85891708F078 +:1038100068C0981B892F41E0889FC001112455E0A2 +:10382000589FF001599FF00D1124E29FC001E39FC2 +:10383000900DF29F900D1124880F892F881F990BEE +:103840009195442319F09195819591092091450313 +:1038500030914603820F931F603871050CF444C009 +:103860006F57710970934803609347033FE7D32E66 +:10387000803891050CF44BC08F5791099093460303 +:10388000809345039FE7F92E0E94841B90934C037D +:1038900080934B03ED86DE86FF8686E0FE013C9634 +:1038A000DE01119601900D928A95E1F729813A8106 +:1038B0004B815C816D817E8180E090E061960FB6E6 +:1038C000F894DEBF0FBECDBFDF91CF911F910F9156 +:1038D000FF90EF90DF90BF90AF900895891B40E07C +:1038E0006FCF891B40E098CF6138FFEF7F074CF422 +:1038F00061587F4F709348036093470321E8D22EAD +:10390000B7CFD62E1092480310924703B1CF81381B +:103910002FEF92074CF481589F4F9093460380936A +:10392000450381E8F82EB0CFF82E1092460310928E +:103930004503AACF019790934A0380934903A4CFEC +:103940006894E0F884E00E946A1584E190E0F3CF87 +:1039500080914D038F5F80934D0396CF5F926F925E +:103960007F928F929F92AF92BF92CF92DF92EF920F +:10397000FF920F931F93CF93DF9300D000D00F924D +:10398000CDB7DEB77C01FC0183819481892B31F0B6 +:103990008081918189238F3F09F0DDC60F900F90C0 +:1039A0000F900F900F90DF91CF911F910F91FF908B +:1039B000EF90DF90CF90BF90AF909F908F907F90CF +:1039C0006F905F9008950E946E10182F682F898164 +:1039D0009A810E94BB0B69817A81812F0E946110BC +:1039E0008C01F7018281882361F0F801E65EFC45D5 +:1039F000ED30F10530F4E555F94C0C94EC340E94AF +:103A0000C517D0906003D0FE1CC08D2D86958370A5 +:103A1000F7019281992309F460C1823090F4B701D3 +:103A2000C8010E948608882361F0D694D694D69463 +:103A30008091610383708295880F807E8D290E941A +:103A40006A15F7018281882309F47AC6C801825178 +:103A50009F45409708F036C68FEF93E00E941835D7 +:103A6000025193EEA92E92E0B92E811197CF011148 +:103A700038C11C821B82662463948AE0582E85011B +:103A80000F5F1F4FC5010E94183589831A82882352 +:103A900009F484CF9FEF980F933008F031C18A83E7 +:103AA000698232E0A30EB11CC8010E9418358B83D5 +:103AB000882309F473CF8E010F5F1F4FF801208117 +:103AC0002223E9F2213009F055C1918182819130A0 +:103AD00009F018C10E5F1F4F6AE070E0893311F4DE +:103AE00060E570E00E94F30E13C10E94B61789CF03 +:103AF0008091600380FF0DC00E94B6176091600343 +:103B00007091610380916203909163030E94791721 +:103B100078CF0E94C517F2CF0E94A41772CF909160 +:103B20006003892F86958F5F8370880F997F892B1B +:103B300080936003982F9670963001F7897F809369 +:103B40006003DCCF90916103892F8B7F92FF8460AB +:103B500080936103D3CF80916003982F96959695BB +:103B600096958091610383708295880F807E892B62 +:103B70008C3798F48F5F282F220F220F220F9091FD +:103B800060039770922B9093600382958695837063 +:103B9000909161039C7F892BDBCF81E0ECCF8091FA +:103BA0006003982F96959695969580916103837002 +:103BB0008295880F807E892B11F08150DCCF8BE7B6 +:103BC000DACF30916103932F969596959695209133 +:103BD0006203822F83708295880F807E892B90E00C +:103BE0000196482F440F440F440F3770342B309305 +:103BF000610335E0969587953A95E1F783702C7FC0 +:103C0000822B809362037ACF30916103932F969534 +:103C10009695969520916203822F83708295880FE6 +:103C2000807E892B8150990BDCCF8091620382FFCB +:103C300012C08B7F80936203609160037091610377 +:103C400080916203909163030E94791760E081E0A4 +:103C50000E945E15D6CE84608093620360916003FB +:103C60007091610380916203909163030E947917C0 +:103C700060E08CE00E945E1564E182E00E945E15C7 +:103C800065E081E00E945E1561E08CE0E1CF80910B +:103C90006203982F969596959695809163038295E9 +:103CA000880F807E892B883720F4865F0E947F17DB +:103CB000A8CE88E7FBCF80916203982F96959695C2 +:103CC0009695809163038295880F807E892B84313D +:103CD00010F08A50EBCF84E1E9CF882309F4B1CE0C +:103CE0009ECEA114F4E0BF0609F458CEC5010E948F +:103CF0001835811101C001502FEFA21AB20AB7CEB8 +:103D00005801D9CE923039F40E5F1F4F0E94470CF4 +:103D10000F5F1F4FD3CE933029F40E5F1F4F0E94C9 +:103D20000E0CF6CF943019F00F5F1F4FF1CF0E5FDE +:103D30001F4F30E020E0B8016F5F7F4FF8014181F5 +:103D40008053990B8A30910550F02150310900F3CE +:103D50008FE99FE00197F1F700C00000F6CF529E77 +:103D6000F001539EF00D11249C012E0F3F1F842F54 +:103D70008B01E1CFE22FF0E0E754FE4F7490822FE9 +:103D800086958695869590E0FC01E755FE4FE49078 +:103D90002770F12C022E02C0F594E7940A94E2F702 +:103DA000E1E0EE22FF24FC01E756FE4FC490D12C47 +:103DB000022E02C0D594C7940A94E2F7F1E0CF2214 +:103DC000DD24FC01E757FE4F8490912C02C09594AE +:103DD00087942A95E2F721E082229924E114F104E4 +:103DE00019F081EE0E94470CC114D10419F086EE3F +:103DF0000E94470C39E36AE070E0731202C060E58C +:103E000070E0872D0E94F30ECD2819F086EE0E94F7 +:103E10000E0CEF2819F081EE0E940E0C892809F48F +:103E200077CF6AE070E08CE25DCE81E00E94A5165B +:103E300003C081E00E9499160F900F900F900F9091 +:103E40000F90DF91CF911F910F91FF90EF90DF9036 +:103E5000CF90BF90AF909F908F907F906F905F902A +:103E60000C948E1682E0E2CF003E110509F457C093 +:103E700008F04DC00C32110509F487C1F701928199 +:103E8000911186C28091730382720A3CFCE51F0780 +:103E900009F45EC208F0B4C1053C3CE5130709F41F +:103EA00043C208F098C1033C5CE5150709F41DC244 +:103EB00008F035C2023C1C4509F4C7C1F701008176 +:103EC0001181992309F47EC2C8010E946E10D82E78 +:103ED000682FC8010E94BB0BB8018D2D0E94611094 +:103EE0000E94080A182FB82EF70122814581342F2D +:103EF00032953F70892F82958F70C82ED12C8C30CF +:103F000008F098C2F601E854F94C0C94EC34013EE8 +:103F1000110509F4A5C0043E110509F0AFCF8823AF +:103F200009F430C181E08093F20280918A030E94FB +:103F3000BB0C813009F0A2CF83E30E946A159ECFAB +:103F40000338FFE51F0709F46EC060F5053F110552 +:103F500009F414C140F4043F110509F08FCF61E06A +:103F60000E94CC0C8BCF063F110509F409C1023821 +:103F70003FE5130709F082CF882309F47FCF81EE54 +:103F80000E94470C83EE0E94470C8FE40E94470C6E +:103F90008FE40E940E0C83EE0E940E0C81EE0E94B4 +:103FA0000E0C6CCF05384FE5140709F4B5C008F4C2 +:103FB0005AC006389FE5190709F4C6C00738EFE56F +:103FC0001E0709F05BCF882309F4E8CC87E20E9442 +:103FD000470CFFEF28EA31E0F15020403040E1F794 +:103FE00000C000008CE20E94470C87E20E940E0C89 +:103FF0008BE10E94470C4FEF50EE80E04150504063 +:104000008040E1F700C000008CE20E940E0C8BE1C2 +:104010000E940E0C40E56FEF84EB0E943E1681E09B +:1040200080933E02BBCC882309F428CF81EE0E9406 +:10403000470C83EE0E94470C80E50E94470C80E508 +:10404000A8CF80934202109341020093400288233C +:1040500021F081E08093F30211CF1092F3020ECF92 +:1040600080933F02F0CF882379F180913F0288232B +:1040700049F0809140020E940E0C80EE0E94470C95 +:104080008AE20CC0809142028823D1F380914002E1 +:104090000E940E0C80EE0E94470C8CE40F900F9053 +:1040A0000F900F900F90DF91CF911F910F91FF9084 +:1040B000EF90DF90CF90BF90AF909F908F907F90C8 +:1040C0006F905F900C94470C8AE20E940E0C8CE477 +:1040D0000E940E0C80EE0E940E0C80913F02811116 +:1040E00005C080914202882309F458CC8091400297 +:1040F000D5CF882309F4C2CE80913E02882309F4EB +:10410000BDCE0E94841B9093A1028093A0021092C6 +:104110003E0210920101B2CE882309F420CF809193 +:104120007001811104C080910001882339F0109240 +:104130007001109200010E94280FA0CE81E08093B0 +:10414000700180930001F7CF882309F408CF809194 +:104150003D02882349F080EE90E0909372018093B5 +:10416000710110923D02E7CF86E690E090937201D4 +:104170008093710181E080933D02DDCF62E0F0CE5B +:1041800064E0EECE1092F20279CE882331F081E025 +:104190008093F5021092680171CE1092F5026ECEF6 +:1041A000882349F080918A030E94BB0C813019F466 +:1041B00082E30E946A15F7018281882309F4B2C262 +:1041C00080918A030E94BB0C813009F0ABC284E36A +:1041D0000E946A15A7C2073C2CE5120709F4AEC07D +:1041E00008F4A7C0083C4CE5140709F4ACC0093C2E +:1041F0001C4509F063CE40EB56E16CEB76E179C0EB +:10420000043DECE51E07A8F40E3CFCE51F0708F092 +:10421000C5CB0C3C2CE5120709F49FC042EF56E1D8 +:1042200063E077E10D3C1C4508F463C061E081E088 +:1042300046C0053D4CE5140709F4B0CB08F492C024 +:104240000D351D4509F4AACB39CE8091690480FF54 +:1042500031C08E7F809369046091690470916A0413 +:1042600080916B0490916C040E94791580915003A9 +:104270008160809350039FEFE0E7F2E09150E040CF +:10428000F040E1F700C000000F900F900F900F90EA +:104290000F90DF91CF911F910F91FF90EF90DF90E2 +:1042A000CF90BF90AF909F908F907F906F905F90D6 +:1042B0000C948B0D81608093690461E086950F906A +:1042C0000F900F900F900F90DF91CF911F910F9152 +:1042D000FF90EF90DF90CF90BF90AF909F908F9026 +:1042E0007F906F905F900C9414174FE357E168E450 +:1042F00077E10F900F900F900F900F90DF91CF917B +:104300001F910F91FF90EF90DF90CF90BF90AF90F3 +:104310009F908F907F906F905F900C94F90848E485 +:1043200057E16FE377E1E5CF40EE56E169EE76E1E4 +:10433000E0CF49EE56E160EE76E1DBCF48EC56E1A6 +:1043400064ED76E1D6CF44ED56E168EC76E1D1CF6D +:104350004CEB56E160EB76E1CCCF43E057E162EF06 +:1043600076E1C7CF0F900F900F900F900F90DF91D5 +:10437000CF911F910F91FF90EF90DF90CF90BF9062 +:10438000AF909F908F907F906F905F900C9452179A +:104390000E3D1C4509F092CD0F900F900F900F909D +:1043A0000F90DF91CF911F910F91FF90EF90DF90D1 +:1043B000CF90BF90AF909F908F907F906F905F90C5 +:1043C0000C94DB17C8010E94930BD82E85CD092FC2 +:1043D0000F70907F11F00295007F812F2223C9F08A +:1043E000002369F090E2910F983010F011110BC08A +:1043F00080917303082B009373030E94720B812F2B +:104400000E94470C17C080919702082B00939702D7 +:10441000F4CF0E940E0C002369F00095105E183056 +:1044200010F0B11027C08091730308230093730329 +:104430000E94720B98E0C91AD108E4E0CE16D104AC +:1044400008F0ACCA0E94E30E0F900F900F900F90EF +:104450000F90DF91CF911F910F91FF90EF90DF9020 +:10446000CF90BF90AF909F908F907F906F905F9014 +:104470000C944B0E80919702082300939702D8CF9B +:10448000892F8F70907F903211F08295807FF1E0BC +:10449000BF120CC0222329F0333060F60E94040CB6 +:1044A000C9CF323038F60E94F90BC4CF222341F035 +:1044B0003323A1F340FFA3CF4F70F7014583EECF25 +:1044C000332389F3193309F0F5C0FFEF27EE33E00A +:1044D000F15020403040E1F700C00000812F0E94E1 +:1044E0000E0CA8CF892F86958695837061F0813058 +:1044F00009F0A0CF812F9370211102C090E080E0DD +:104500000E945A0897CF812F9370211102C090E02A +:1045100080E00E9470088ECF892F8370A1F5211151 +:1045200089CF812F829586958770880F880F412FBC +:104530004F70082E01C0440F0A94EAF7212F207112 +:1045400014FF07C02FE030E001C0220F8A95EAF780 +:104550002095969596959370923081F0822F842BBA +:10456000933030F480919802913029F0242B8223EB +:104570000E94F50B5FCF842B822BFACF242B8091E6 +:1045800098028227F5CF8695222311F0892F81701A +:10459000882309F44FCF812F829586958770880FE5 +:1045A000880F412F4F70082E01C0440F0A94EAF77C +:1045B000212F207114FF07C02FE030E001C0220F2F +:1045C0008A95EAF72095969596959370923081F0AA +:1045D000822F842B933030F480918A03913029F01C +:1045E000242B82230E94881625CF842B822BFACF7E +:1045F000242B80918A038227F5CF092F0F70222365 +:1046000029F0802F0E94A516812F48CF812F0E946C +:10461000F90B802F0E9499160DCF812FE1EF1E1705 +:1046200089F1E11750F0F0EF1F17B9F02223B1F133 +:104630003111E5CE892F8F7129C042EF141749F14E +:1046400053EF1513F3CF80E0222361F29F7181E0D5 +:1046500001C0880F9A95EAF7C5CF222379F032304E +:1046600008F0E8CE292F2F7181E090E001C0880F7B +:104670002A95EAF790918A038927B4CF333008F05E +:10468000D9CEF0CF892F8F71222321F20E94A51657 +:10469000D1CE892F8F712223C9F3BCCF332379F078 +:1046A000893341F48FEF97EEE3E081509040E04092 +:1046B000E1F712CF8FE39CE90197F1F70DCF892F36 +:1046C0008F71A8CF0031FFE51F0709F4AECB013190 +:1046D0002FE5120709F4C6CB0E944E086093FA0238 +:1046E0007093FB028093FC029093FD02F70182819C +:1046F000053E110509F4A5CC08F022CC01321105C4 +:1047000008F0B2CB0E31110508F0F3CC0A301105D8 +:1047100009F446CD0531110509F44DCD09301105D7 +:1047200009F0ACCBF7018281882309F4A7CB8091F3 +:104730008A030E94BB0C813009F0A0CB81E3FDCB42 +:1047400000313FE5130709F474CB01314FE514073D +:1047500069F682E06FCB85E0DE01119601900D9243 +:104760008A95E1F7F701228189819A8121112BC96C +:104770000E94930B182F2FC91F93CF93DF93809123 +:104780006302807FA9F480916002882389F0809180 +:104790009502D091640260915E0270915F02A091D7 +:1047A0006102B0916202C62FC72316E0D81304C07D +:1047B000DF91CF911F91089590E0109711F0CF3FB6 +:1047C00019F401968770F2CF189F9001199F300D50 +:1047D0001124F901EB59FD4F41814713F2CF40817C +:1047E0004613EFCF42814111ECCF438154814A1BE4 +:1047F0005B0B403A510528F7809163028F7080610E +:1048000080936302F901E659FD4F80818F708061CA +:1048100080838EE592E00E94AE1CDF91CF911F91C4 +:104820000C94890BAF92BF92CF92DF92EF92FF92DE +:104830000F931F93CF93DF93CDB7DEB761970FB67A +:10484000F894DEBF0FBECDBF8C0185E0F801DE011C +:104850001D9601900D928A95E1F7F801E2808EE5B0 +:10486000A82E82E0B82E60916102709162026115FB +:10487000710509F432C190915E0240915F02892F67 +:1048800084238F3F09F429C120813181C380D480E2 +:10489000F0906002F601E61BF70BFF2009F4E8C078 +:1048A00080916302582F507FE03AF10508F0ABC0C9 +:1048B000511177C0FE2C431321C092131FC0E11089 +:1048C0001DC08F70806180936302C5010E94AE1C81 +:1048D00080916302F80185838F2D61960FB6F8945D +:1048E000DEBF0FBECDBFDF91CF911F910F91FF9023 +:1048F000EF90DF90CF90BF90AF900895CD2829F032 +:10490000822F83238F3F09F003C180E0F82FF170DD +:10491000DF2E80FF3CC0809195024091640256E0FA +:10492000841315C02D873E878D859E850E949D101E +:10493000292F22952F702230F0F0243018F59F7027 +:10494000F1F0F8019581907FD1F4D12C1EC090E058 +:10495000589FF001599FF00D1124EB59FD4F6181D3 +:10496000361306C06081261303C06281E6120FC0B1 +:1049700001968770D5CF9F7011F0882331F3805E48 +:10498000883018F3C8010E94AE1CFD2CA5CFEE2084 +:1049900009F4A2CF80916302816080936302F12CBD +:1049A0009BCF431306C0921304C0F801EE2009F414 +:1049B00079C0C8010E94A910882309F1EE20F9F0FE +:1049C00080916302803270F020915E0230915F022C +:1049D00038872F831986DB86CA868C87CE01079697 +:1049E0000E94AE1C86E0F801AEE5B2E001900D92A7 +:1049F0008A95E1F70E94BC23FF24F3946DCFC80190 +:104A00000E94AE1CF9CF51110AC08EE592E00E94BF +:104A1000AE1C86E0F50111928A95E9F7C0CF4313E9 +:104A20000FC092130DC0E1100BC0F8018583C801BF +:104A30000E94AE1C86E0F50111928A95E9F74CCFF1 +:104A4000C8010E94A9108823D1F2EE20C1F2809102 +:104A50006302803238F220915E0230915F023A8325 +:104A600029831B82DD82CC828E83CE010196B8CF52 +:104A7000E03AF105F8F6FE2CEE2009F243131FC0D0 +:104A800092131DC08091630280FD10C0982F907F0B +:104A900069F0F8018583903F31F0982F907F905F07 +:104AA0008F70892B8583C8010E94AE1C86E0F801B7 +:104AB000AEE5B2E001900D928A95E1F70DCFC80105 +:104AC0000E94A91081118ECF809163028160809332 +:104AD0006302C8010E94AE1CFFCEEE2009F48FCF06 +:104AE000C8010E94A910F82E882309F488CF86E017 +:104AF000F801AEE5B2E001900D928A95E1F7809160 +:104B00005E0290915F020E949D100E94BC23E4CE41 +:104B100081E08E25FBCE1F93CF93DF93CDB7DEB719 +:104B200067970FB6F894DEBF0FBECDBF4B8B5C8B83 +:104B30006D8B7E8B8F8B6111109297021A8A198A66 +:104B400085E0FE017396DE011D9601900D928A9517 +:104B5000E1F786E0FE013D96DE01179601900D9289 +:104B60008A95E1F7CE0107960E941224882389F0E6 +:104B700016E0809195029091640289134BC067966C +:104B80000FB6F894DEBF0FBECDBFDF91CF911F915E +:104B9000089586E0FE013796DE01119601900D9290 +:104BA0008A95E1F78A859B85892B11F38F819885FA +:104BB00089238F3FE9F22091640230E0C901019618 +:104BC00087709927409195024817190681F4109231 +:104BD00073030E94AF11109264021092950286E056 +:104BE000EEE5F2E0DF011D928A95E9F7C1CF96E08C +:104BF000929FD001939FB00D1124AB59BD4FFE0180 +:104C0000319601900D929A95E1F7809364020E948B +:104C1000890BAECF819FC00111248B599D4F0E94FB +:104C20001224882309F4ABCF8091950290E001967D +:104C300087709927809395029CCF7F928F929F9245 +:104C4000AF92BF92CF92DF92EF92FF920F931F939A +:104C5000CF93DF93CDB7DEB764970FB6F894DEBF7E +:104C60000FBECDBF8E010F5F1F4F8AE0D8011D928E +:104C70008A95E9F79FE4C92E91E0D92EF12CE12C19 +:104C8000AA24A394B12C3FE4832E31E0932EF601A5 +:104C900081916F018F3F09F443C0F894E82FE295AA +:104CA000EF70F0E021A18F70A50102C0440F551FE5 +:104CB0008A95E2F7CA01922F982B91A392A1809531 +:104CC000892382A30E94AC0900C0E8E4F1E0712CC2 +:104CD00031E021912F3F09F479C0A22FA295AF7046 +:104CE000B0E090968C9190E02F7002C095958795DA +:104CF0002A95E2F780FD6AC0832F782A330F8E163B +:104D00009F0639F7F601319780818F3F11F00E949D +:104D1000AE0950EA5A95F1F7F801EE0DFF1D7082C9 +:104D20008FEFE81AF80AA5E0EA16F10409F0AFCF10 +:104D30004AE050E0B8018DED92E00E9402357C011E +:104D4000892B41F08AE0F801ADEDB2E001900D92BF +:104D50008A95E1F71091E802E114F104C9F181E0CC +:104D600080939B020E94841B90939A0280939902E5 +:104D70008091990290919A020E94751B069770F09B +:104D8000ADEDB2E0E12FF0E0E15DFC4F8D9181935C +:104D900022E0A23EB207D1F710929B0281E090E0A0 +:104DA000EF28D1F064960FB6F894DEBF0FBECDBFEA +:104DB000DF91CF911F910F91FF90EF90DF90CF90F7 +:104DC000BF90AF909F908F907F90089580E095CF97 +:104DD00080919B028111CCCF0E94C00ED82EE09111 +:104DE000E802882309F4E1C07E0140E1E40EF11CF1 +:104DF00085E0D7011D928A95E9F70E2F10E0015D3D +:104E00001C4F8091D6028A3008F098C04CEE59E1D0 +:104E1000B701C8010E947C0E882309F4B2C043EA9E +:104E200058E2B701C8010E947C0E882309F4A9C08A +:104E300040E458E1B701C8010E947C0E882309F4C0 +:104E4000A0C04FE059E1B701C8010E947C0E882341 +:104E500009F497C04DEE58E1B701C8010E947C0EDD +:104E6000882309F48EC01092D6028091E70290E068 +:104E700045E050E0B701815D9C4F0E94023521E082 +:104E80002093A602892B09F06FC0D12C80910101DB +:104E9000811114C08091A0029091A1020E94751B03 +:104EA000813A9F4058F040E56FEF8CEF0E943E162C +:104EB00081E0809301018CE00E946A158EE9E82E62 +:104EC00082E0F82E10E000E0D7018D917D0188236B +:104ED000D1F08695F80109F465C0E850FE4F808155 +:104EE00091819C878B871D860E94841B8160782F0F +:104EF0009F878E87F701319710824B855C856D8582 +:104F00008F850E948B250E5F1F4F04301105E1F63F +:104F10006091FA027091FB028091FC029091FD0277 +:104F20000E94320861367A4E8105910528F040E0F2 +:104F300060E080E00E94080F8D2D34CF80919C02AC +:104F400090919D020E94751B843F914008F05ECFB6 +:104F50008091A602882309F498CF85E0F701119289 +:104F60008A95E9F71092A602A091E702B0E0A15D50 +:104F7000BC4F85E0FE01709601900D928A95E1F795 +:104F800085CF8091D6028F3F31F08F5F8093D6021C +:104F90008A3008F46ACF0E94841B90939D0280930C +:104FA0009C02D6CFEC50FE4F9ACFF0E0E15DFC4F73 +:104FB000F89485E0A6EBB2E001900D928A95E1F7B6 +:104FC00065E070E086EB92E00E94E3088093B50212 +:104FD0000E94AC09F894E091F002F0E0E351FD4F3B +:104FE00080818B878093BC0261E070E0CE010B96DC +:104FF0000E94E3088093BB020E94AC09F894C09021 +:10500000BD02D090BE02E090BF02F090C00280913D +:10501000A2029091A302A091A402B091A502C81689 +:10502000D906EA06FB06D1F0C092A202D092A302F2 +:10503000E092A402F092A5020E94C00E81110EC05F +:105040000E944E08C61AD70AE80AF90AC092D70287 +:10505000D092D802E092D902F092DA020E94AC0912 +:10506000F8948091C8028823F1F080FF0DC08091F0 +:10507000C10280FF25C090916904916090936904FA +:1050800060E086950E9414178091C80281FF09C0D4 +:1050900020E04091C4026091C3028091C2020E944C +:1050A0008B151092C8020E94AC09F8948091C90235 +:1050B000882349F00E94860F0E94AC0980E072CEDE +:1050C0000E94670EE1CF0E946B0FF6CFEF92FF9226 +:1050D0000F931F93CF93DF9300D000D00F92CDB7E3 +:1050E000DEB7162FE82EF12CC701880F991F662313 +:1050F00039F188509E4FFC01808191819A83898388 +:1051000001E00B830E94841B8160782F9D838C8338 +:10511000F701E256FD4F0127110F102B1083498133 +:105120005A816B818D810F900F900F900F900F908F +:10513000DF91CF911F910F91FF90EF900C948B25F1 +:105140008C509E4FD8CFCF92DF92EF92FF920F9369 +:105150001F93CF93DF930F92CDB7DEB7EE24E39486 +:10516000F12C0CEB12E09E012F5F3F4F41EB52E020 +:1051700063E082E00E944A19082F882321F1C09041 +:10518000EA028C2D90E09C0123513D4F7901198159 +:10519000F9018081181BD12E80E00AC0DA94F70152 +:1051A00080818F5F808360E08C2D0E946628802F35 +:1051B0001D14A4F3912F17FD90E0191B11110EC0BF +:1051C00081110E94700B802F0F90DF91CF911F9162 +:1051D0000F91FF90EF90DF90CF9008951F5FF70140 +:1051E00080818150808361E08C2D0E946628802F11 +:1051F000E5CF1F921FB61F9211248F939F93AF93F9 +:10520000BF9380916A03811113C080916B039091C9 +:105210006C03A0916D03B0916E034196A11DB11D69 +:1052200080936B0390936C03A0936D03B0936E0314 +:10523000BF91AF919F918F911F901FBE1F901895A6 +:10524000CDB7DEB7E0970FB6F894DEBF0FBECDBF87 +:1052500084B7877F84BF0FB6F894A89580916000CB +:10526000886180936000109260000FBE80E890E03B +:105270000FB6F89480936100909361000FBE85B7DC +:10528000806885BF85B7806885BF8AEA99E090937A +:105290003302809332020E94A4060E946F0780911D +:1052A000E20084608093E2007894809180038823F8 +:1052B000A1F01091E9001F709091EC00892F81708E +:1052C00090FD80E8182B1092E9008091E80083FDA2 +:1052D0000E94B8111F701093E90082E084BD93E032 +:1052E00095BD9AEF97BD80936E001092D7021092F1 +:1052F000D8021092D9021092DA020E94D0108111C5 +:1053000002C00E942C100E94C00E8093590180910F +:105310005901882309F4C9C01092730185E2809372 +:1053200074010E94C00E81110E94F73280915901D0 +:1053300081112FC0FE01359686E0DF011D928A950E +:10534000E9F786E6898387E98A8386EC8B8384E3A1 +:105350008C8385E38D833497AFE4B1E0CE010B9667 +:1053600021912D938E179F07D9F787E0E9E7F1E0A8 +:10537000DE01919601900D928A95E1F7FE01B196BA +:10538000A8E4B1E0CE01889621912D938E179F0756 +:10539000D9F78091590195E0811190E09093E8024E +:1053A00085E0891B8093E7020FE411E084E5E82E95 +:1053B00081E0F82EF80181918F018F3F11F00E945A +:1053C000AE09E016F106B1F708E411E0BFE4EB2EF8 +:1053D000B1E0FB2ED8018D918D018F3F11F00E941D +:1053E000AE09E016F106B1F78AE0EFE2F3E0DF0183 +:1053F000282F1D922A95E9F7EDEDF2E0DF011D92CD +:105400008A95E9F70E94291A811102C00E94DB17D0 +:1054100082E090E00E9418358093240384E090E0BD +:105420000E941835182F82E290E00E941835982FBC +:10543000812F9093DC028093DB020E941D26EFE710 +:10544000FBEB3197F1F700C000000E941D26809110 +:105450002F0380FF2EC06FEF7FEF90E080E00E946F +:105460004A3581E08093E00080E28093D80010927A +:10547000C9008FE19EE40197F1F700C0000087E0CA +:1054800090EBDC018093720690937306A0937406F0 +:10549000B093750688E19CE00FB6F894A8958093C8 +:1054A00060000FBE90936000FFCF85E28093730190 +:1054B00036CF83E090E00E9418350E94F50B809172 +:1054C0008A030E9441160E94291A811102C00E947B +:1054D000DB1788E190E00E942035609360037093B1 +:1054E00061038093620390936303672B682B692B9E +:1054F00011F40E94A4170E94F83067E081E00E9436 +:105500005E1565E586E10E945E1563E687E10E940F +:105510005E1560EA8AE10E945E1569E98BE10E94EE +:105520005E1565EF8CE10E945E1560EA8DE10E94D8 +:105530005E1560E38EE10E945E1566E083E00E94E6 +:105540005E1561E08CE00E945E1560E081E00E94E3 +:105550005E1560E08CE00E945E156FE084E00E94C2 +:105560005E1561E08CE00E945E150E94C00E811104 +:1055700002C00E94FA3283E080931F0380E280938E +:1055800053030E94F8306DE070E08CE492E00E94DA +:105590003B0F892BE9F580911F0363E070E081FDEB +:1055A00005C289E492E00E943B0F892B89F56DE0EA +:1055B00070E089E392E00E943B0F892B49F50E943D +:1055C0004E086058774C8E4F9F4F60935A037093EC +:1055D0005B0380935C0390935D03E0E7F4E080E07D +:1055E00092E0DF019C011D9221503040E1F7F093E1 +:1055F0007106E09370068FEF9FEF90936F04809396 +:105600006E0481E080935F0380935E031092200319 +:105610008091E902811136C00E94291A811104C0CB +:105620000E94DB170E94611788E090E00E942035FD +:105630006093690470936A0480936B0490936C0484 +:10564000809150038360809350036E7F71F40E94B9 +:10565000611788E090E00E942035609369047093A0 +:105660006A0480936B0490936C040E94FE088091FE +:10567000690480FF04C060E086950E94141781E0F1 +:105680008093E90280915901811106C084EF8093D3 +:10569000670185EF8093660120916701A22FA29593 +:1056A000AF70B0E091963C9191972F7081E090E0BF +:1056B000BC01022E01C0660F0A94EAF7462F4095FE +:1056C000432391964C93919792963C919297362BC7 +:1056D00092963C93929740916601E42FE295EF7089 +:1056E000F0E031A14F70042E01C0880F0A94EAF750 +:1056F000982F9095932391A392A1892B82A39096A2 +:105700008C9190E002C0959587952A95E2F781707B +:1057100020A130E002C0359527954A95E2F792E046 +:1057200020FF90E0892B8093F1029091590181E054 +:1057300098279093F002891B8093EA020E94D41765 +:1057400060E08AE00E94141781E00E94881680EED3 +:1057500090E090937201809371010E94280F8AE576 +:1057600091E09093670380936603A0E46A2E809192 +:105770008003FF24F39400E112E1853009F465C150 +:105780000E941D26E82E81110E944E08FFE22F2E56 +:10579000F3E03F2EE5E2F3E0D10110E000E0B02EAF +:1057A000DD9081918D1509F474C18D25C12CFF24E4 +:1057B000F394982F9F2109F467C10E94C00E88239B +:1057C00099F0C9A2BAA2DF2081E009F480E08BA39E +:1057D0000E94841B8160782F9DA38CA349A15AA1AC +:1057E0006BA18DA10E948B25F801EB5DFC4F8081A0 +:1057F000F826F0828091F102E82FEE0FEE0F9091E3 +:105800006701A92FA295AF70B0E090962C9130E07F +:105810009F7002C0359527959A95E2F7217033273E +:1058200090916601A92FA295AF70B0E090964C912F +:1058300050E09F7002C0559547959A95E2F7CA01CE +:105840008170992740FF02C082E090E0822B8E2B6E +:105850008093F1021091F0028F70E82FF0E0E25097 +:10586000FE4F80819091EF02890F8093EF02F12C1F +:1058700084306CF0E12FF0E0E351FD4F80818F5FC9 +:10588000808360E0812F0E946628FF24F39480913A +:10589000EF028D3F6CF4E12FF0E0E351FD4F80818A +:1058A0008150808361E0812F0E946628FF24F39459 +:1058B0008091EF02082E000C990B64E070E00E94CA +:1058C000D8348093EF02F1100E94700B80915F0337 +:1058D000882351F180912103909122030E94751B2E +:1058E000C29708F0EDC020916E0430916F0421152D +:1058F000310509F0F0C180915E038823A9F00E9470 +:105900004E0800915A0310915B0320915C03309183 +:105910005D03601B710B820B930B6F3F7F4F8F4FAB +:105920009F4710F40E946B0FE11001C0F1100E941C +:10593000860F0E94E9100E94E30E909123038917BD +:1059400031F00E94E30E809323030E944B0E80915E +:105950008003843009F00BCF83E08093E9008091CD +:10596000E80082FF04CF8091E80090E085FF0CC042 +:105970000E94C30630E2E32EF12C8E010F5F1F4F11 +:10598000882309F487C291E08091E8008B778093A7 +:10599000E800992309F4EBCEE981E150E33108F006 +:1059A000DDC2F0E0EC53F94C0C94EC3486E492E068 +:1059B000FACD80918003843009F437C080E00E94E2 +:1059C0004B0E8091EC02811109C0F092EC028091A3 +:1059D000690481708093EB020E94670E0E946B0F36 +:1059E0000E94E91010926A0388E190E00FB6F894E3 +:1059F000A895809360000FBE6092600083B7817F9E +:105A0000846083BF83B7816083BF7894889583B7B0 +:105A10008E7F83BF0FB6F894A8958091600088614F +:105A200080936000109260000FBE80917F038823F6 +:105A300061F00E941D26EFE2F3E081918111B7C36E +:105A4000A9E3B3E0AE17BF07C1F7809180038530AB +:105A500009F4AFCF109273030E94AF110E94E30EBE +:105A60000E944B0E1092EC028091EB02882349F0C9 +:105A70008091690481608093690460E086950E944A +:105A800014170E94280F7CCEC394FF0C27E0C2128B +:105A900090CE0F5F1F4F0A30110509F080CE8FEFB7 +:105AA00088A789A71AA60E94841B8160782F9CA7CB +:105AB0008BA748A559A56AA58CA50E948B259ACECF +:105AC0000E94841B909322038093210360E080E076 +:105AD0000E94CC080E94E30E8093FE020E94C00E3A +:105AE000882309F4DFC06091FA027091FB02809173 +:105AF000FC029091FD020E943208613375478105D6 +:105B0000910540F00E946B0F80915F03882309F498 +:105B1000F2CEE9CE0E94860F61E080E00E94CC08C0 +:105B200060E080E891E00E94421562E080E00E941F +:105B3000CC0880918A030E94BB0C823009F48CC08F +:105B400008F081C0882309F487C0813009F48AC035 +:105B500065E080E00E94CC0860E08EE991E00E9460 +:105B6000421566E080E00E94CC086091FE026695D6 +:105B7000617083EA91E00E94421567E080E00E9434 +:105B8000CC086091FE026095617088EA91E00E9405 +:105B9000421568E080E00E94CC086091FE0262FB42 +:105BA000662760F98CEA91E00E9442156091F60246 +:105BB0007091F7028091F8029091F9020E943208E8 +:105BC0006D3271408105910508F49ECF0E944E0808 +:105BD0006093F6027093F7028093F8029093F902B3 +:105BE0008091F502811104C080916801811142C049 +:105BF0006DE080E00E94CC0860E081EB91E00E94C3 +:105C000042156AE080E00E94CC0881E08093680140 +:105C10008091F40290E00196817099278093F402BC +:105C200021E030E0281B390B40E6429FC001439F32 +:105C3000900D11242091F302222351F187529C4FA1 +:105C40000E94610661CF833089F0843009F080CFF3 +:105C500060E082E991E003C060E086E891E00E94A4 +:105C6000421576CF60E08CE891E0F9CF60E088E9FA +:105C700091E0F5CF6AE080E00E94CC0860E081EB23 +:105C800091E00E9442156BE080E00E94CC08C0CFFA +:105C90002091F202222319F0875E9C4FD1CF875AC0 +:105CA0009D4FCECF64E080E00E94CC0860E087EB9F +:105CB00091E00E94421565E080E00E94CC0860E01F +:105CC0008DEB91E00E94421569E080E00E94CC08D3 +:105CD00089E994E0B5CF8091200361E070E0811103 +:105CE0000ACE082F10E02B01082E02C0440C551CD0 +:105CF0000A94E2F7A90144215521452B09F448C033 +:105D000090911F0390FD46C08295880F8076809306 +:105D10006B019801369527953695279520936E014E +:105D2000815E80936C0110926F0124E630E047E0C1 +:105D300050E069E671E088E70E94EF31892B09F0B5 +:105D4000DACDA80175E0440F551F7A95E1F78091EF +:105D50001F0380FD2DC040595B4F04E610E020E298 +:105D600030E060E488E70E941632892B09F0C3CD49 +:105D70000E94860FC2018095909540906E045090CD +:105D80006F044822592250926F0440926E04B3CDA2 +:105D90008F5FA7CF880F880F880F80936B011092B9 +:105DA0006E01895F80936C0183E080936F01BDCFAA +:105DB000EFEFF2E080E2DF011D928A95E9F7E2E180 +:105DC000F2E0F8ABEFA70EE012E067E0A62E992410 +:105DD0009394AFA5B8A96D91B8ABAFA7F801819125 +:105DE0008F01840F952F911D9C0120593B4F3EA799 +:105DF0002DA7E62FF0E0E150FD4F30E020E07A2CB7 +:105E0000721AB92C022E01C0BB0C0A94EAF7CDA479 +:105E1000DEA490E0D6018D916D018B21672D691B69 +:105E20006770862E062E000C770BB82F01C0BB0FB3 +:105E30008A94EAF78B2E71956195710967707727BF +:105E400001C086956A95EAF7882A8081882A80822F +:105E50009F5F9830F9F62F5F3F4F3196283031051C +:105E600071F6E6E1F2E02FA538A9E217F30709F091 +:105E7000B0CF04E610E020E230E04FEF52E071CF07 +:105E80008091F100D8018D938D01B1E0EB1AF108FA +:105E900009F479CD8091E80085FDF2CF8091E8008A +:105EA0008B778093E8000E94C306882399F36BCD1B +:105EB0001A8289E08B8311C08A81823009F48FC1F4 +:105EC000833091F1813009F049C00E944E080E9450 +:105ED000F2346B837C838D839E8380918003843036 +:105EE00009F045CC1091E9001F709091EC00892FCA +:105EF000817090FD80E8182B82E08093E90080910A +:105F0000E80080FF0DC050E040E060E270E0CE01AC +:105F100001960E94F4068091E8008E778093E80055 +:105F20001F701093E90023CCFE013396D1018D91AF +:105F30001D018193B9E32B16B3E03B06B9F7CDCF32 +:105F40008A81823059F46B817C818D819E810E948F +:105F5000F23486E290E00E942C35BFCF8FEF898328 +:105F6000BCCF4C816B818A810E943B109827892786 +:105F700098279E838D83B1CFED80FE80FE24EF2491 +:105F8000FE248A810B81EEE00E9F80011124FCE843 +:105F90008F9F000D111D11248C8190E0880F991F97 +:105FA000080F191F6F2DC80187960E942C356E2D82 +:105FB000C8018896D0CF0E94BE0F8FCF8A818138CA +:105FC000B1F058F4803809F088CF4B8160916B04B0 +:105FD00080916A040E943E1680CF8238E1F08338B7 +:105FE00009F07BCF40916C046C818B81F3CF60E032 +:105FF0008B810E9414178B81811103C00E94670E50 +:106000006CCF8091690481608093690460E086951B +:106010000E94141762CF8B8180936D045ECF8A81BA +:10602000813899F030F4803809F057CF80916C04B2 +:1060300041CF823891F0833809F04FCF80916A04C4 +:106040008B8380916B048C8348CF8091690480FF9F +:1060500002C086952FCF80E02DCF80916D042ACF8E +:106060006091690470916A0480916B0490916C0452 +:106070000E94791532CF80E18A832FCF81E08A8315 +:106080008DE118CFCA80DB80DC24CD24DC248E0196 +:106090000F5F1F4FEC80E00EF12EF11CC6018D51F9 +:1060A0009D4F0E151F0509F418CF2DE1C21621E0F2 +:1060B000D20658F40E941835D80114968C93FFEF3D +:1060C000CF1ADF0A0F5F1F4FE9CFF8011482F7CF15 +:1060D0000A811B811027012710279E012F5F3F4F48 +:1060E0006901EC80E00EF12EF11CC8018D519D4F2D +:1060F000E016F10609F4F1CE0D3131E0130728F472 +:10610000D60114966C910E942C35BFEFCB1ADB0A96 +:106110000F5F1F4FEACF0E94AE0FDFCE85E0ACCFFE +:10612000CA80DB80DC24CD24DC248E010F5F1F4F6E +:10613000EC80E00EF12EF11CC6018796E016F10608 +:1061400009F4CBCEECEBCE16E2E0DE0658F40E946A +:106150001835D80114968C93FFEFCF1ADF0A0F5F22 +:106160001F4FEACFF8011482F7CF0A811B81102755 +:10617000012710279E012F5F3F4F6901EC80E00E41 +:10618000F12EF11CC8018796E016F10609F4A5CEA0 +:106190000C3B32E0130728F4D60114966C910E9450 +:1061A0002C35BFEFCB1ADB0A0F5F1F4FEBCF09BDBA +:1061B00019BD09B400FEFDCF8091D8008F7D80937A +:1061C000D8008091E00082608093E0008091E00040 +:1061D00081FDFCCF109273030E94AF1136CC86E292 +:1061E00090E00E9418351B821C821D828E8375CE22 +:1061F0001092B9008CE08093B80008959F92AF92FE +:10620000BF92CF92DF92EF92FF920F931F93CF93A3 +:10621000DF93B82EEB010E94841B6C01EE24E39403 +:10622000F12CC431D10560F025E0E22EF12CCF3FF6 +:10623000DC0731F0CE0164E170E00E94B8347B01EC +:1062400084EAA82E94E8992E1092BC00A092BC007B +:106250000E94841B8C018091BC0087FF0DC080913F +:10626000B900887F883039F18091B900887F80310A +:1062700011F10FEF1FEF09C00E94841B801B910BCF +:106280008E159F0540F30EEF1FEFCF3FDC07E1F2C5 +:10629000C6010E94751B8C179D07B0F2C801DF91E3 +:1062A000CF911F910F91FF90EF90DF90CF90BF9013 +:1062B000AF909F900895B092BB009092BC000E9456 +:1062C000841B8C018091BC0087FF0AC08091B900BB +:1062D000887F883111F0803461F610E000E0DECF75 +:1062E0000E94841B801B910B8E159F0558F3CBCF0A +:1062F0000F931F93CF93DF93EB018093BB0084E850 +:106300008093BC000E94841B8C018091BC0087FF9D +:1063100011C02091B900287F81E090E0283211F46B +:1063200090E080E0919581959109DF91CF911F9147 +:106330000F910895CF3FDC0741F30E94841B801B1F +:10634000910B8C179D0708F38EEF9FEFEECF0F9305 +:106350001F93CF93DF93EC0184EC8093BC000E94E9 +:10636000841B8C018091BC0087FF08C08091BB001A +:1063700090E0DF91CF911F910F910895CF3FDC07FF +:1063800089F30E94841B801B910B8C179D0750F38F +:106390008EEF9FEFEECF0F931F93CF93DF93EC0120 +:1063A00084E88093BC000E94841B8C018091BC0017 +:1063B00087FF08C08091BB0090E0DF91CF911F91D3 +:1063C0000F910895CF3FDC0789F30E94841B801B47 +:1063D000910B8C179D0750F38EEF9FEFEECFCF926E +:1063E000DF92EF92FF920F931F93CF93DF936B0196 +:1063F0008A017901B9010E94FE30E6010C0D1D1DD4 +:10640000C017D10761F424E92093BC00DF91CF913C +:106410001F910F91FF90EF90DF90CF90089597FD1F +:10642000F2CFB70189910E947831EACFCF92DF9203 +:10643000EF92FF920F931F93CF93DF93C62F6A01C2 +:106440007901B8010E94FE3097FD0CC0B8018C2F75 +:106450000E947831E601EC0CFD1CCE15DF0511F031 +:1064600097FF0CC024E92093BC00DF91CF911F91CE +:106470000F91FF90EF90DF90CF900895B801899130 +:106480000E947831EACFCF92DF92EF92FF920F9382 +:106490001F93CF93DF93F82EE62EEA016901B8012E +:1064A0000E94FE3097FD15C0B8018E2D0E947831F4 +:1064B00097FD0FC0B8018F2D81600E94FE30F12C36 +:1064C000E12C21E0C21AD108EC14FD0400F597FF7D +:1064D00011C024E92093BC001816190614F490E0AA +:1064E00080E0DF91CF911F910F91FF90EF90DF90AF +:1064F000CF900895C8010E94A73197FD04C0FE0106 +:10650000EE0DFF1D80832FEFE21AF20ADDCF97FD1B +:10651000E0CFC8010E94CB3197FDDBCFCC0DDD1D54 +:106520008883D7CF84E98093BC0008958EE14A9B8D +:1065300002C08150E1F74A9BFECF08955A9880E24D +:106540008A95F1F75A9A0895FC013BE03A95F1F7E4 +:1065500098E020E080E031E040E14A95F1F7880FD3 +:106560004A9B02C08160232742E04A95F1F7000070 +:1065700040E14A95F1F7915079F790E19A95F1F75A +:1065800099B132E03A95F1F7000040E14A95F1F710 +:1065900092FB992790F992272081920F908308957A +:1065A000EF92FF920F931F93CF93DF930F92CDB78C +:1065B000DEB719828C017C01E60EF11C0E151F0559 +:1065C00061F481E09981911180E00F90DF91CF918A +:1065D0001F910F91FF90EF9008950E949632CE0187 +:1065E00001960E94A432F80181938F01E7CF529A5D +:1065F0005A9A089552985A9AEA9AE9E6F0E0808108 +:106600008F7C808308956150770B91E001C0990FD2 +:106610006A95EAF720E031E0911108C0222391F059 +:106620005A9A80E28A95F1F75A980895492F48239B +:1066300039F05A9A232740E24A95F1F79695ECCF24 +:106640005A98F9CF5A98EDCFFF920F931F93CF939B +:10665000DF93EC018C01060F111DC017D10731F437 +:10666000DF91CF911F910F91FF900895F9900E94B3 +:106670009E3268E08F2D0E940333EFCF1F920F925E +:106680000FB60F921124EF92FF920F931F932F9347 +:106690003F934F935F936F937F938F939F93AF93AA +:1066A000BF93EF93FF93CF93DF930F92CDB7DEB7F6 +:1066B00019820E949632CE0101960E94A432A82F20 +:1066C000A695A695A695282F229525709A2F9570A8 +:1066D000290F922F937026952695920F98279770E1 +:1066E0008981982B09F075C0A83008F072C080E14C +:1066F0008A95F1F75A9A529AB2E0BA95F1F700C02A +:106700005A98EA2EF12CEAE0AE9FD0011124AE5F38 +:10671000BE4F1896ED91FC9119973097B1F06091AA +:10672000FC017091FD0116962D913C911797260F53 +:10673000371F13968D919C911497680F791F1596AA +:106740004C91159712968C9109958AE08E9DF001D7 +:106750008F9DF00D1124EE5FFE4F6581662351F091 +:106760002091FC013091FD0186819781820F931F5A +:106770000E9424330E949E32F0E1FA95F1F75A9874 +:1067800052985A9A80E18A95F1F78AE08E9D8001AD +:106790008F9D100D11240E5F1E4FD80112966C9123 +:1067A0001297662371F12091FC013091FD0113963F +:1067B0008D919C91820F931F0E94D032D801ED9150 +:1067C000FC91882311F088E001C082E080830E9460 +:1067D00096320F90DF91CF91FF91EF91BF91AF91E2 +:1067E0009F918F917F916F915F914F913F912F91E9 +:1067F0001F910F91FF90EF900F900FBE0F901F9081 +:106800001895ED91FC91DFCF0F931F93CF93DF93FA +:10681000EC0108970CF0A9C08AE08C9FF0018D9FD5 +:10682000F00D1124EE5FFE4F80819181892B09F4D8 +:106830009CC0F894529A5A9885E08A95F1F7000026 +:106840008C2F869585709C2F9570890F982F93704B +:1068500086958695890F8E0193E0000F111F9A95FA +:10686000E1F7082B0E949E3200C068E0802F0E9452 +:106870000333A0E1AA95F1F752985A9A4A9B27C090 +:1068800087E090E04A9925C08AE08C9F80018D9F27 +:10689000100D11240E5F1E4FF80165816623A1F1D2 +:1068A0002091FC013091FD0186819781820F931F19 +:1068B0000E94D032811128C0529A5A9AD801ED9183 +:1068C000FC9182E08083789482E090E016C000C062 +:1068D000D5CF0197B9F4529A5A9A8AE08C9FF00169 +:1068E0008D9FF00D1124EE5FFE4F0190F081E02DA1 +:1068F00081E08083789481E090E0DF91CF911F91D7 +:106900000F91089500C0BECF0E949632B0E2BA95B2 +:10691000F1F75A98529AE0E1EA95F1F78AE08C9FF4 +:10692000F0018D9FF00D1124EE5FFE4F6281662312 +:1069300051F02091FC013091FD0183819481820FFF +:10694000931F0E9424330E949E328AE08C9FF001A4 +:106950008D9FF00D1124EE5FFE4F0190F081E02D30 +:106960001082789490E080E0C8CF84E090E0C5CFBA +:10697000AA1BBB1B51E107C0AA1FBB1FA617B70765 +:1069800010F0A61BB70B881F991F5A95A9F7809581 +:106990009095BC01CD010895991B79E004C0991F21 +:1069A000961708F0961B881F7A95C9F78095089569 +:1069B00097FB072E16F4009407D077FD09D00E94AC +:1069C000B83407FC05D03EF4909581959F4F08950B +:1069D000709561957F4F0895EE0FFF1F0590F4911C +:1069E000E02D099469279627692778278727782734 +:1069F0000895FB01DC0102C005900D92415050400A +:106A0000D8F70895FB01DC0104C08D910190801935 +:106A100021F441505040C8F7881B990B0895FB01A1 +:106A2000DC0102C001900D9241505040D8F708950A +:106A3000F999FECF92BD81BDF89A992780B5089546 +:106A4000A6E1B0E044E050E00C945235A8E1B0E09B +:106A500042E050E00C945235262FF999FECF92BDBA +:106A600081BDF89A019700B4021639F01FBA20BD13 +:106A70000FB6F894FA9AF99A0FBE08950396272F45 +:106A80000E942D350E942C35252F0E942D35242F54 +:106A90000C942D350196272F0E942D350C942C3502 +:106AA000DC01CB01FC01F999FECF06C0F2BDE1BDCE +:106AB000F89A319600B40D9241505040B8F70895BD +:106AC0000E9467356894B1110C94F63508950E94C0 +:106AD000DB3588F09F5798F0B92F9927B751B0F060 +:106AE000E1F0660F771F881F991F1AF0BA95C9F752 +:106AF00014C0B13091F00E94F535B1E008950C94C6 +:106B0000F535672F782F8827B85F39F0B93FCCF378 +:106B1000869577956795B395D9F73EF490958095CE +:106B2000709561957F4F8F4F9F4F0895E89409C0EE +:106B300097FB3EF490958095709561957F4F8F4FB0 +:106B40009F4F9923A9F0F92F96E9BB279395F695C6 +:106B5000879577956795B795F111F8CFFAF4BB0F44 +:106B600011F460FF1BC06F5F7F4F8F4F9F4F16C0A8 +:106B7000882311F096E911C0772321F09EE8872F32 +:106B8000762F05C0662371F096E8862F70E060E0EE +:106B90002AF09A95660F771F881FDAF7880F969567 +:106BA000879597F9089557FD9058440F551F59F050 +:106BB0005F3F71F04795880F97FB991F61F09F3FEA +:106BC00079F087950895121613061406551FF2CF13 +:106BD0004695F1DF08C0161617061806991FF1CF63 +:106BE00086957105610508940895E894BB2766278A +:106BF0007727CB0197F908950E940F360C948036C1 +:106C00000E94723638F00E94793620F0952311F0F8 +:106C10000C9469360C946F3611240C94F6350E944E +:106C2000D33570F3959FC1F3950F50E0551F629FC8 +:106C3000F001729FBB27F00DB11D639FAA27F00DD5 +:106C4000B11DAA1F649F6627B00DA11D661F829FFC +:106C50002227B00DA11D621F739FB00DA11D621FE1 +:106C6000839FA00D611D221F749F3327A00D611DFE +:106C7000231F849F600D211D822F762F6A2F1124E0 +:106C80009F5750409AF0F1F088234AF0EE0FFF1F13 +:106C9000BB1F661F771F881F91505040A9F79E3F6A +:106CA000510580F00C9469360C94F6355F3FE4F39F +:106CB000983ED4F3869577956795B795F795E795C0 +:106CC0009F5FC1F7FE2B880F911D9695879597F9C9 +:106CD000089597F99F6780E870E060E008959FEF5E +:106CE00080EC089500240A94161617061806090663 +:106CF000089500240A941216130614060506089532 +:106D0000092E0394000C11F4882352F0BB0F40F4B9 +:106D1000BF2B11F460FF04C06F5F7F4F8F4F9F4FF9 +:106D20000895F894FFCFBB10BB10C410C410C61058 +:106D3000C410C410C410BB10BB10CB10C410C410BE +:106D4000CB10A012C8126B14C8126B14FB121C13C8 +:106D50006B141A142714FF1C751D781D8C1D8F1DB4 +:106D6000A21DAB1DCF1D151E471E5B1EE11D041E7F +:106D7000E721E7214022402272221A221A221A22F7 +:106D80008C22FD220D230D23582F5C2FA02FB12F15 +:106D9000BC2FDB2FDE2F0F303030AE2FAE2F3B302D +:0E6DA0003E30423068308B308E309030B5304F +:106DAE0001013C0200000001000000003C02000056 +:106DBE000005010000003C0200000001060000007A +:106DCE003C0200000001070000003C020408000025 +:106DDE00000000003C02080C0000000000003C0215 +:106DEE00011400000000000036323331F7F6FF6662 +:106DFE0097C634350000000000012F085E0D3D0DD2 +:106E0E00390D350D2E08F4F5010021007F22000307 +:106E1E00018000004A004A4A01F6F731333236FF4C +:106E2E004C415945520042617365200047616D65C2 +:106E3E0020005261697365004C6F776572004C4F8C +:106E4E00434B0043617073004E756D005363726C5B +:106E5E0000202020202000534F4C415200544D5012 +:106E6E00535400818283E200E900EA00B500B600C7 +:106E7E00B700CD008301CC008A019201940121025A +:106E8E00230224022502260227022A02B300B4009E +:106E9E006F0070000603060806010606B50200FF25 +:106EAE000100010000FFFF0000010001FF000008CB +:106EBE00101818100800000102020202020202025B +:106ECE00020240227B49012701AC009E0BB70BD773 +:026EDE000B00A7 :00000001FF From 8fd8012e8ad70c3b492b0b874d938f3ba2d8837f Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 21 Dec 2021 14:11:47 +0800 Subject: [PATCH 101/155] Update keyboards/keychron/q1/rev_0101/rules.mk Co-authored-by: Ryan --- keyboards/keychron/q1/rev_0101/rules.mk | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/keyboards/keychron/q1/rev_0101/rules.mk b/keyboards/keychron/q1/rev_0101/rules.mk index 318e1aa4c0e4..8d2be4eb5d6c 100644 --- a/keyboards/keychron/q1/rev_0101/rules.mk +++ b/keyboards/keychron/q1/rev_0101/rules.mk @@ -12,10 +12,7 @@ MOUSEKEY_ENABLE = no # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE = yes # USB Nkey Rollover +NKRO_ENABLE = yes # Enable N-Key Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output From 329963e03db205cb8a10d8b5cede8829eba4d0d6 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 21 Dec 2021 14:12:17 +0800 Subject: [PATCH 102/155] Update keyboards/keychron/q2/rev_0110/rules.mk Co-authored-by: Ryan --- keyboards/keychron/q2/rev_0110/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/keychron/q2/rev_0110/rules.mk b/keyboards/keychron/q2/rev_0110/rules.mk index a894b94e63ea..381fa299b704 100644 --- a/keyboards/keychron/q2/rev_0110/rules.mk +++ b/keyboards/keychron/q2/rev_0110/rules.mk @@ -10,7 +10,7 @@ BOARD = GENERIC_STM32_L433XC PLATFORM_NAME = platform_l432 # Build Options -# comment out to disable the options. +# change yes to no to disable # BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite MOUSEKEY_ENABLE = no # Mouse keys From 332a2e09681abc36e273fb70b63d2c5afc9904a8 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 21 Dec 2021 14:12:28 +0800 Subject: [PATCH 103/155] Update keyboards/keychron/q2/rev_0110/rules.mk Co-authored-by: Ryan --- keyboards/keychron/q2/rev_0110/rules.mk | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/keyboards/keychron/q2/rev_0110/rules.mk b/keyboards/keychron/q2/rev_0110/rules.mk index 381fa299b704..0d4e745010aa 100644 --- a/keyboards/keychron/q2/rev_0110/rules.mk +++ b/keyboards/keychron/q2/rev_0110/rules.mk @@ -17,10 +17,7 @@ MOUSEKEY_ENABLE = no # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE = yes # USB Nkey Rollover +NKRO_ENABLE = yes # Enable N-Key Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output From 4383ab0a93ca2e12f17ca18ca602f8de21790d62 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 21 Dec 2021 14:12:44 +0800 Subject: [PATCH 104/155] Update keyboards/keychron/q2/rev_0113/rules.mk Co-authored-by: Ryan --- keyboards/keychron/q2/rev_0113/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/keychron/q2/rev_0113/rules.mk b/keyboards/keychron/q2/rev_0113/rules.mk index 5e6a2fddb021..79721104e855 100644 --- a/keyboards/keychron/q2/rev_0113/rules.mk +++ b/keyboards/keychron/q2/rev_0113/rules.mk @@ -10,7 +10,7 @@ BOARD = GENERIC_STM32_L433XC PLATFORM_NAME = platform_l432 # Build Options -# comment out to disable the options. +# change yes to no to disable # BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite MOUSEKEY_ENABLE = no # Mouse keys From 036081fc2e13e3fcc4285ef473b1de1cec14fd62 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 21 Dec 2021 14:12:57 +0800 Subject: [PATCH 105/155] Update keyboards/keychron/q2/rev_0111/rules.mk Co-authored-by: Ryan --- keyboards/keychron/q2/rev_0111/rules.mk | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/keyboards/keychron/q2/rev_0111/rules.mk b/keyboards/keychron/q2/rev_0111/rules.mk index 5e6a2fddb021..746e77e14633 100644 --- a/keyboards/keychron/q2/rev_0111/rules.mk +++ b/keyboards/keychron/q2/rev_0111/rules.mk @@ -17,10 +17,7 @@ MOUSEKEY_ENABLE = no # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE = yes # USB Nkey Rollover +NKRO_ENABLE = yes # Enable N-Key Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output From 45ab64f97e7b675a268f161c7b1d59f0c4a627a5 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 21 Dec 2021 14:13:04 +0800 Subject: [PATCH 106/155] Update keyboards/keychron/q2/rev_0111/rules.mk Co-authored-by: Ryan --- keyboards/keychron/q2/rev_0111/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/keychron/q2/rev_0111/rules.mk b/keyboards/keychron/q2/rev_0111/rules.mk index 746e77e14633..52d0bce592ce 100644 --- a/keyboards/keychron/q2/rev_0111/rules.mk +++ b/keyboards/keychron/q2/rev_0111/rules.mk @@ -10,7 +10,7 @@ BOARD = GENERIC_STM32_L433XC PLATFORM_NAME = platform_l432 # Build Options -# comment out to disable the options. +# change yes to no to disable # BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite MOUSEKEY_ENABLE = no # Mouse keys From 49093942349223981f7c2b0f364c7e66091cf355 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 21 Dec 2021 14:13:17 +0800 Subject: [PATCH 107/155] Update keyboards/keychron/q2/rev_0112/rules.mk Co-authored-by: Ryan --- keyboards/keychron/q2/rev_0112/rules.mk | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/keyboards/keychron/q2/rev_0112/rules.mk b/keyboards/keychron/q2/rev_0112/rules.mk index a894b94e63ea..1912cff12ba2 100644 --- a/keyboards/keychron/q2/rev_0112/rules.mk +++ b/keyboards/keychron/q2/rev_0112/rules.mk @@ -17,10 +17,7 @@ MOUSEKEY_ENABLE = no # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE = yes # USB Nkey Rollover +NKRO_ENABLE = yes # Enable N-Key Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output From 9ae624d31a76b6860ab2d65a9ded5064cbadcc6d Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 21 Dec 2021 14:13:27 +0800 Subject: [PATCH 108/155] Update keyboards/keychron/q2/rev_0112/rules.mk Co-authored-by: Ryan --- keyboards/keychron/q2/rev_0112/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/keychron/q2/rev_0112/rules.mk b/keyboards/keychron/q2/rev_0112/rules.mk index 1912cff12ba2..0d4e745010aa 100644 --- a/keyboards/keychron/q2/rev_0112/rules.mk +++ b/keyboards/keychron/q2/rev_0112/rules.mk @@ -10,7 +10,7 @@ BOARD = GENERIC_STM32_L433XC PLATFORM_NAME = platform_l432 # Build Options -# comment out to disable the options. +# change yes to no to disable # BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite MOUSEKEY_ENABLE = no # Mouse keys From 40c9bcf89e09162f1054c441599ac8163eef5acc Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 21 Dec 2021 14:13:33 +0800 Subject: [PATCH 109/155] Update keyboards/keychron/q2/rev_0113/rules.mk Co-authored-by: Ryan --- keyboards/keychron/q2/rev_0113/rules.mk | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/keyboards/keychron/q2/rev_0113/rules.mk b/keyboards/keychron/q2/rev_0113/rules.mk index 79721104e855..52d0bce592ce 100644 --- a/keyboards/keychron/q2/rev_0113/rules.mk +++ b/keyboards/keychron/q2/rev_0113/rules.mk @@ -17,10 +17,7 @@ MOUSEKEY_ENABLE = no # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE = yes # USB Nkey Rollover +NKRO_ENABLE = yes # Enable N-Key Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output From 60cf6e2571d0a81b329f0ea1182f774138ae3674 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 2 Jan 2022 00:40:27 -0500 Subject: [PATCH 110/155] Adjust layer colours. --- .../solartempest/sofle/keymaps/via/keymap.c | 6 +- .../sofle/solartempest_sofle_via.hex | 2550 ++++++++--------- 2 files changed, 1279 insertions(+), 1277 deletions(-) diff --git a/keyboards/solartempest/sofle/keymaps/via/keymap.c b/keyboards/solartempest/sofle/keymaps/via/keymap.c index d617ad711f08..9780d2cc7eb7 100644 --- a/keyboards/solartempest/sofle/keymaps/via/keymap.c +++ b/keyboards/solartempest/sofle/keymaps/via/keymap.c @@ -441,7 +441,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { { switch (get_highest_layer(state)) { // Change all other LEDs based on layer state as well case 0: - rgblight_sethsv_noeeprom(50,255,80); + //rgblight_sethsv_noeeprom(50,255,80); //green-blue gradient + rgblight_sethsv_noeeprom(115,170,80); //pale blue gradient #ifdef POINTING_DEVICE_ENABLE if (was_scrolling==true){ //Check if was scrolling when layer was left trackball_is_scrolling=true; @@ -465,7 +466,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif break; case 3: - rgblight_sethsv_noeeprom(118,255,80); + //rgblight_sethsv_noeeprom(118,255,80); //blue-purple gradient + rgblight_sethsv_noeeprom(160,255,80); //blue-magenta gradient #ifdef HAPTIC_ENABLE DRV_pulse(31); //sh_dblclick_med #endif diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index d1460312b946..285b56d5e69d 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,9 +1,9 @@ -:100000000C9418060C945F060C945F060C943E3317 +:100000000C9418060C945F060C945F060C943D3318 :100010000C945F060C945F060C945F060C945F06CC -:100020000C945F060C945F060C94781A0C94341AA6 -:100030000C94F9280C945F060C945F060C945F06F0 +:100020000C945F060C945F060C94771A0C94331AA8 +:100030000C94F8280C945F060C945F060C945F06F1 :100040000C945F060C945F060C945F060C945F069C -:100050000C945F060C94511B0C945F060C945F0685 +:100050000C945F060C94501B0C945F060C945F0686 :100060000C945F060C945F060C945F060C945F067C :100070000C945F060C945F060C945F060C945F066C :100080000C945F060C945F060C945F060C945F065C @@ -199,9 +199,9 @@ :100C600010927306109274061092750614BE84B723 :100C7000877F84BF0FB6F894A89580916000886143 :100C800080936000109260000FBEE0E0F8E30995E9 -:100C900012E0A0E0B1E0EEEAFDE602C005900D92A0 +:100C900012E0A0E0B1E0ECEAFDE602C005900D92A2 :100CA000A233B107D9F726E0A2E3B2E001C01D925A -:100CB000A237B207E1F70E9420290C9491360C94D8 +:100CB000A237B207E1F70E941F290C9490360C94DA :100CC0000000CF93DF93409170065091710640571A :100CD00054409A01205A3F4F21303240C0F020E06A :100CE00032E0241B350B60916E0470916F04FC019F @@ -294,7 +294,7 @@ :101250004E2F4983E8835A83DF91CF911F910F91DD :10126000FF90EF90DF90BF90AF900895E62EF12CA5 :101270004491D42EE42FF0E026E0829FC001112497 -:101280002FEF30E0B9010E94B834802F90E0880F32 +:101280002FEF30E0B9010E94B734802F90E0880F33 :10129000991F55E5569FD001579FB00D11248A1B09 :1012A0009B0B982F990F890F5901AE18BF08AE9E5E :1012B000D001AF9EB00DBE9EB00D11245B2F189FC4 @@ -481,16 +481,16 @@ :101E00002197C1F7812FDF91CF911F910C940E0C78 :101E10000F931F93CF93DF9300D000D0CDB7DEB7E1 :101E200089836A834B831C8204E610E024E030E05F -:101E3000AE014F5F5F4F60E084E10E9416320F9069 +:101E3000AE014F5F5F4F60E084E10E9415320F906A :101E40000F900F900F90DF91CF911F910F910895F8 :101E500080917001882329F047E669E98BE20C94B0 :101E6000080F80913D0247EC6BE18823C1F341E20A :101E700065EA89EDF4CFCF92DF92EF92FF920F9354 :101E80001F93CF93DF936C017B0164E670E088E7DA -:101E90000E94FE30EC0197FD12C010E000E0F60158 -:101EA000E00FF11F849164E670E00E947831EC014C +:101E90000E94FD30EC0197FD12C010E000E0F60159 +:101EA000E00FF11F849164E670E00E947731EC014D :101EB000892B29F40F5F1F4F0E151F0581F70E9414 -:101EC0009232CE01DF91CF911F910F91FF90EF9051 +:101EC0009132CE01DF91CF911F910F91FF90EF9052 :101ED000DF90CF90089580915E0390915F03911100 :101EE00003C091E089270895882369F062E070E0DB :101EF0008AE89BE00E943B0F892B19F080915E03DA @@ -500,1277 +500,1277 @@ :101F30005C0390935D03C11108C062E070E088E823 :101F40009BE00E943B0F892B29F0C0915E038C2FF0 :101F5000CF91089581E080935E03F7CFCF93DF9315 -:101F6000C3EED2E060E0CE010E942C352196C1156F +:101F6000C3EED2E060E0CE010E942B352196C11570 :101F700084E0D807B9F7DF91CF9108956F927F92EF :101F80008F929F92AF92BF92CF92DF92EF92FF9289 :101F90000F931F93CF93DF938CE8C82E8BE0D82E3E :101FA00091ECE92EF12CE701CC58D10936011BC088 -:101FB000F50185909490692DC8010E942C35682DFB -:101FC000C80101960E942C3582E0A80EB11C0E5F5C +:101FB000F50185909490692DC8010E942B35682DFC +:101FC000C80101960E942B3582E0A80EB11C0E5F5D :101FD0001F4FC017D10761F78EE0680E711C2E9657 :101FE000CE15DF0529F08E010E5011095301E0CF07 :101FF0007E018CE8E80EF11C8CE8C80ED11C8DE740 :10200000E81683E0F80679F6DF91CF911F910F91E2 :10201000FF90EF90DF90CF90BF90AF909F908F9008 -:102020007F906F900895CF93C82F6FEF811161E279 -:1020300083E290E00E942C35C1110CC0CFEF6C2FD1 -:1020400084E290E00E942C356C2F85E290E0CF91E5 -:102050000C942C35C2E1F3CF80E00E94131060E0B5 -:1020600086E290E00E942C350E94BE0F0E94AE0FC7 -:1020700081E00C9413100F931F93CF93DF93C42F21 -:10208000D0E0CC0FDD1F2EE0629FC00DD11D1124CA -:102090003CE8839FC00DD11D1124CE0187960E947C -:1020A0001835082F10E0102F0027CE0188960E94C7 -:1020B00018359801282BC901DF91CF911F910F91FD -:1020C0000895462F853038F47A3028F4673018F4B4 -:1020D000672F0C943B1090E080E00895CF92DF9240 -:1020E000FF920F931F93CF93DF936C0100918A03AC -:1020F00080919802082BC7E0D0E010E0FC2EC801C8 -:102100000C2E02C0959587950A94E2F780FD0CC0CD -:102110002197A0F7F12C8F2DDF91CF911F910F9177 -:10212000FF90DF90CF900895B6018C2F0E94611030 -:102130000E94080A019761F3EECFCF93DF93EC0181 -:102140000E946E10BE010E946110DF91CF910C942D -:10215000080AFC01808191810E949D10292F2F7017 -:1021600092959F7092509E3078F4E92FF0E0ED56F2 -:10217000F94C0C94EC34803F19F020F4883E20F4A4 -:1021800081E00895843FE1F380E00895883EC0F344 -:10219000813FD1F7F5CF822F869586958695089554 -:1021A00083E290E00E941835813289F484E290E065 -:1021B0000E941835823159F485E290E00E9418356A -:1021C00091E0823109F090E0892F8170089580E0DC -:1021D000FCCF1F93CF93DF93CDB7DEB768970FB6D1 -:1021E000F894DEBF0FBECDBF40913F035091400336 -:1021F00060914103709142038091430390914403A5 -:102200000E94901B20933F0330934003609343034D -:1022100070934403142F119510934103652F61951A -:102220006093420386E0EFE3F3E0DE01179601904E -:102230000D928A95E1F786E0FE013796DE01119650 -:1022400001900D928A95E1F79B858C852091700114 -:102250002223B1F0772761950CF47095072E000CBE -:10226000880B990B0E9498352AE939E949E95EE320 -:102270000E94FC350E946035962F812F60E010E0AF -:102280001B836C839D838E8386E0FE013196DE0185 -:102290001D9601900D928A95E1F786E0FE013D962C -:1022A000DE01539601900D928A95E1F786E0FE01DA -:1022B0007396DE01119601900D928A95E1F786E002 -:1022C000FE013196AFE3B3E001900D928A95E1F7FC -:1022D00086E0EFE3F3E0DE01179601900D928A9518 -:1022E000E1F786E0E9E3F3E0DE01119601900D925B -:1022F0008A95E1F746E050E0BE016F5F7F4FCE0167 -:1023000007960E940235892B79F0E0916603F091DF -:102310006703309749F082E080933F030480F581A2 -:10232000E02D8FE393E00995109241031092420350 -:10233000109243031092440386E0EFE3F3E0A9E335 -:10234000B3E001900D928A95E1F768960FB6F89484 -:10235000DEBF0FBECDBFDF91CF911F910895E6E3A1 -:10236000F2E086E0DF011D928A95E9F70C94E70B15 -:102370001F93CF93DF93CDB7DEB7AA970FB6F8942C -:10238000DEBF0FBECDBF82E893E02091F100DC01FB -:102390002D93CD01B3E08A389B07B9F78091830371 -:1023A000833009F472C0B8F4813009F449C0823036 -:1023B00009F4B5C08091E80083FF8DC2809182034B -:1023C000909183039A3008F086C2E92FF0E0EF5530 -:1023D000F94C0C94EC348A3009F490C08B3009F439 -:1023E00071C0893039F780918203813219F7809169 -:1023F000860390918703009711F00297D9F6809198 -:10240000E800877F8093E8008091E80082FF38C071 -:102410009091F3008091F200029731F48091F100E5 -:10242000813011F0863021F48091F10080937503A2 -:102430008091E8008B778093E8000E941E07BACF56 -:1024400080918203813A09F0B5CF8091E800877FBF -:102450008093E8008091860390918703892B61F433 -:1024600068E086E793E070E00E94D0078091E80082 -:102470008B778093E8009ECF60E090E080E0F3CF20 -:10248000809180038111C0CF95CF80918203813AE2 -:1024900009F090CF8091860390918703892B09F0F2 -:1024A00089CF8091E800877F8093E8008091E800E1 -:1024B00080FFFCCF809178018093F1008091E8004B -:1024C0008E77B9CF80918203813209F073CF8091EA -:1024D000860390918703892B09F06CCF8091E800E7 -:1024E000877F8093E8000E941E0780918403809379 -:1024F0007801109273030E94AF115CCF8091820328 -:10250000813209F057CF8091E800877F8093E800FF -:102510000E941E0780918503809374034BCF8091A6 -:102520008203813A09F046CF8091E800877F80934B -:10253000E8008091E80080FFFCCF80917403BCCF5D -:10254000803899F0823809F0C6C1809186038F7077 -:10255000873008F0C0C18093E9008091EB0085FBD3 -:10256000882780F91092E90006C080917E0390913F -:102570007F03911182609091E800977F9093E8002B -:102580008093F1001092F1008091E8008E779FC156 -:10259000882309F48DC1823009F09DC180918403A4 -:1025A000811190C1809186038F702FEF280F263004 -:1025B00008F091C18093E9002091EB0020FF82C1D7 -:1025C000933031F48091EB0080628093EB007AC10C -:1025D0009091EB0090619093EB0021E030E001C01E -:1025E000220F8A95EAF72093EA001092EA00809180 -:1025F000EB008860EACF81116EC1109184031F77D0 -:102600008091E3008078812B8093E3008091E80043 -:10261000877F8093E8000E941E078091E80080FF7A -:10262000FCCF8091E30080688093E30082E0111189 -:1026300083E0809380034FC18058823008F04BC103 -:1026400020918403309185032C3DE3E03E07A1F502 -:1026500083E08A838AE289834FB7F894DE01139678 -:1026600020E03EE051E2E32FF0E050935700E49188 -:1026700020FF03C0E295EF703F5FEF708E2F90E078 -:10268000EA30C0F0C7968D939D932F5F243159F7A0 -:102690004FBF8091E800877F8093E8006AE270E096 -:1026A000CE0101960E94D0078091E8008B7780933D -:1026B000E80011C1C096E7CF80918603909187030F -:1026C000432F55274330510509F44AC078F541306E -:1026D000510509F47AC08BE590E0ECE8FBE042306C -:1026E000510509F0F8C02091E800277F2093E80009 -:1026F00020918803309189038217930708F49C0185 -:1027000040E02115310509F065C0411163C0809199 -:10271000E80082FDC9CF80918003882329F28530AB -:1027200019F28091E80083FFF2CFBECF413251050C -:1027300009F43CC04232510509F0CDC08330910507 -:1027400008F0C9C0FC01EE0FFF1FEB5DFD4F0190CB -:10275000F081E02D8E5D9D4FDC018C9190E01AC0E0 -:10276000332721303105D1F02115310561F02230B8 -:10277000310509F0B0C0E9EFFBE0E4918E2F90E065 -:10278000E9EFFBE007C0EBE2FCE0E4918E2F90E084 -:10279000EBE2FCE0009709F49EC0A5CFE9E1FCE084 -:1027A000E4918E2F90E0E9E1FCE0F4CF83309105D5 -:1027B00008F091C0880F991FFC01E55DFD4F019065 -:1027C000F081E02D89E090E08ECF82E190E0E7EEAD -:1027D000FBE089CF80918003882309F465CF8530A1 -:1027E00009F462CF8091E80083FD5ECF8091E8001C -:1027F00082FD8DCF8091E80080FF83CF9091F30020 -:102800008091F2002115310519F08830910550F0C2 -:1028100041E0089709F040E08091E8008E778093CE -:10282000E8006FCF44914093F10031962150310977 -:102830000196E8CF803809F04EC08091E800877F8C -:102840008093E800809181038093F1009DCE8111F7 -:1028500042C0109184031230F0F58091E800877F28 -:102860008093E800109381030E941E07112311F04A -:1028700084E005C08091E30087FDFACF81E080937A -:10288000800342E061EC81E00E943D0742E261EC9E -:1028900084E00E943D0742E261EC82E00E943D0735 -:1028A00042E260EC83E00E943D078091800313C008 -:1028B00080918403813079F481E0933009F080E0E5 -:1028C00080937F031092E9008091E800877F8093D6 -:1028D000E8000E941E078091E80083FF0AC08091F3 -:1028E000E800877F8093E8008091EB00806280930E -:1028F000EB00AA960FB6F894DEBF0FBECDBFDF91F6 -:10290000CF911F9108951F93CF93DF93162FC091FE -:102910007006D09171068A30D1F420915303CE0114 -:1029200080579440622F70E00E94B834281B822F99 -:1029300066E00E94CC34C82FC15020F4DF91CF91C3 -:102940001F91089560E080E20E948314F5CF8D30DE -:10295000E9F4C057D44020915303622F70E0CE01B8 -:102960000E94B834281B822F9E01280F311D21158B -:10297000324018F080E0D0E0C0E0C80FD11DC0594F -:10298000DB4FD0937106C0937006D8CF96E0FE015E -:10299000A4E5B3E001900D929A95E1F7803E90F1A5 -:1029A00086E0FE0111928A95E9F7C0917006D091F8 -:1029B0007106111133C046E050E0BE0184E593E09A -:1029C0000E9402359E0120573440892B91F52A5FE1 -:1029D0003F4F40915303642F70E0C9010E94B83407 -:1029E000481B463010F4240F311D211572E03707C3 -:1029F00010F030E020E020593B4F309371062093D7 -:102A000070069CCFF6E08F9FB0011124685B794F70 -:102A100046E050E0CE010E94F934C7CF9E012A5F04 -:102A20003F4FFE012E173F0731F280818095819341 -:102A3000F9CFC90145E0969587954A95E1F741E0C0 -:102A400050E0BA0102C0660F771F8A95E2F7CB010A -:102A500060916E0470916F04862B972BB9016B5FA8 -:102A60007F4FE5E076956795EA95E1F702C0440F60 -:102A7000551F6A95E2F7842B952B90936F048093F2 -:102A80006E04A5CFFF920F931F93CF93DF93EC01BA -:102A9000F62EFC0101900020E9F78F010150110989 -:102AA000C017D10730F0DF91CF911F910F91FF90A8 -:102AB00008956F2D89910E948314F2CFE1E5F3E030 -:102AC0008083618324E630E042E050E0BF0184EB84 -:102AD0000C94EF31CF93C82F60E08CE00E945E151C -:102AE0006C2F84E00E945E1561E08CE0CF910C9425 -:102AF0005E15CF92DF92EF92FF926B017C010E94F4 -:102B0000FE08B701A60188E090E0FF90EF90DF900B -:102B1000CF900C943E35AF92BF92CF92DF92EF925E -:102B2000FF920F931F93CF93DF9300D00F92CDB7F7 -:102B3000DEB7082FF62E142FE22E8091690480FF55 -:102B40004FC0E82FE695AE2FB0E0AA5EBD4F9C9136 -:102B500090934E038E7F823009F056C0413A08F0C0 -:102B600040EA9E012F5F3F4F6F2D802F0E94140976 -:102B70008091690480FF11C02B8139814A81809145 -:102B800075019091760153E0859FF0011124E5577E -:102B9000FC4F891798F10E948B0D80916A04801375 -:102BA00008C080916B048F1104C080916C04811760 -:102BB00029F08091500382608093500300936A044F -:102BC000F0926B0410936C04EE2051F06091690454 -:102BD00070916A0480916B0490916C040E94791545 -:102BE0000F900F900F90DF91CF911F910F91FF9059 -:102BF000EF90DF90CF90BF90AF90089541833083E6 -:102C000022838F5F3396C5CF923039F6E2508E2FF4 -:102C10008170D82EE695F0E0E750FA4FA590B49079 -:102C2000C12CBB2460917701C61608F0B4CF2C2DBF -:102C300030E0A29EC001A39E900DB29E900D112483 -:102C400070E00E94B834802FD11016C0860F4091DA -:102C50007501420F532F511D9A01220F331F240F6C -:102C6000351F25573C4F412F113A08F040EA6F2D90 -:102C70000E941409C394D6CF861BE9CF20E00C94A0 -:102C80008B15CF93C82F0E94BB0C823099F138F47A -:102C90008823C1F0813029F18C2FCF9108958330A2 -:102CA00081F18430C9F740E56FEF8AED0E943E164E -:102CB00087E00E946A1580910001882369F31092D1 -:102CC00070010CC040E56FEF82E30E943E168091D8 -:102CD00000018823A1F381E0809370010E94280FF6 -:102CE000DBCF40E56FEF8CEF0E943E1685E40E943B -:102CF0006A15D2CF40E56FEF80E50E943E1685E26F -:102D0000F6CF40E56FEF86E70E943E168FE1EFCFEA -:102D10000E94411680938A030C94E70B80918A03EA -:102D2000982F9670963019F488600C948816877FD7 -:102D3000FCCF21E030E001C0220F8A95EAF7209510 -:102D400080918A0382230C94881621E030E001C030 -:102D5000220F8A95EAF780918A03822B0C948816B9 -:102D6000E9E6F4E0438121E1421B08F440E021E080 -:102D7000628181810C948B15E9E6F4E0438121E1C5 -:102D8000420F08F44FEF21E0628181810C948B1592 -:102D9000E9E6F4E0628121E1621B08F460E021E0F1 -:102DA000438181810C948B15E9E6F4E0628121E195 -:102DB000620F08F46FEF21E0438181810C948B1541 -:102DC000E9E6F4E0818121E04381628188500C943E -:102DD0008B15E9E6F4E0818121E043816281885F1F -:102DE0000C948B1580916D04882319F08150809389 -:102DF0006D046091690470916A0480916B049091F4 -:102E00006C040C94791580916D04833018F48F5FF5 -:102E100080936D046091690470916A0480916B04E1 -:102E200090916C040C9479159091690490FF26C0E0 -:102E3000917081111CC0926090936904809150033D -:102E4000816080935003662351F060916904709112 -:102E50006A0480916B0490916C040E9479154091F2 -:102E60006C0460916B0480916A040C943E168C3063 -:102E700010F09661E1CF880F982BDECF08958091F6 -:102E800069048695815009F48BE061E00C94141775 -:102E90008091690486958F5F8C3008F081E061E055 -:102EA0000C9414178091690480FF07C0869582589E -:102EB0008F77893010F40C94481761E082E00C940D -:102EC0001417E9E6F4E083E0808311828FEF8283B8 -:102ED00080EA83831482AEE4B3E012968C91129759 -:102EE000836012968C9360817181828193810C94AE -:102EF0007915AB01BC0188E190E00C943E35CF938D -:102F0000C82FE2E6F3E0982F990F990F990F80816F -:102F10008770892B8083E3E6F3E09C2F929596954A -:102F200097708081887F892B808360916003709186 -:102F3000610380916203909163030E9479176C2F63 -:102F400082E0CF910C945E15E0E6F3E089E880839F -:102F5000118282818C7F8283609160037091610312 -:102F600080916203909163030C947917E0E6F3E09B -:102F700080818E7F80836091600370916103809176 -:102F80006203909163030C947917E0E6F3E080818B -:102F9000816080836091600370916103809162031E -:102FA000909163030C9479170E94F83040E060E040 -:102FB00080E00C94080F69EE7EEF90E080E00E94C4 -:102FC0004A3560E082E090E00E942C3560E083E0CA -:102FD00090E00E942C351092980260E084E090E02E -:102FE0000E942C3560E082E290E00E942C3560E087 -:102FF00085E090E00E942C3560E086E090E00E9441 -:103000002C356FEF87E090E00E942C3540E050E0D7 -:10301000BA0188E090E00E943E3560E08DE090E0EB -:103020000E942C3540E050E0BA0188E190E00E9417 -:103030003E3560E087E190E00E942C3540E050E0B2 -:10304000BA018CE190E00E943E3570E060E080E2E1 -:1030500090E00E944A350E94A41780E00E9413105D -:103060000E942C1040E050E0BA018FE090E00E94F6 -:103070003E3540E050E0BA0183E190E00C943E35EB -:103080000F931F93CF93DF9300D000D0CDB7DEB75F -:103090006091CA027091CB028091CC029091CD02D6 -:1030A0000E943208643671058105910588F10E94FD -:1030B000C00E882379F10E944E086E5F7F4F8F4FBC -:1030C0009F4F69837A838B839C8380912D0190919C -:1030D0002E018B549D4F40912C0150E045305105FD -:1030E00010F044E050E0BE016F5F7F4F0E940F354B -:1030F00084E090E00E940434892BD9F40E944E08A9 -:103100006093CA027093CB028093CC029093CD025D -:1031100081E010C00E944E080091D7021091D802A1 -:103120002091D9023091DA02600F711F821F931F24 -:10313000C4CF80E00F900F900F900F90DF91CF9150 -:103140001F910F910895BF92CF92DF92EF92FF925D -:103150000F931F93CF93DF93B82EEB01F42E6901E9 -:10316000688179818A819B810E9432086436710569 -:103170008105910510F4FF2019F1EB2C0B2C000CAC -:10318000FF088B2D9AE08902F0011124EE5FFE4FBB -:10319000838194818B549D4F428150E00417150721 -:1031A00008F4A801B6010E940F35C7010E9404343B -:1031B000892B89F40E944E08688379838A839B83D4 -:1031C00081E0DF91CF911F910F91FF90EF90DF9001 -:1031D000CF90BF90089580E0F4CF0F931F93CF93CB -:1031E000DF930F92CDB7DEB780915E038983209184 -:1031F000C90290E041E02817190609F440E001E017 -:1032000010E09E012F5F3F4F62ED72E086E00E946A -:10321000A3180F90DF91CF911F910F9108950F93F5 -:103220001F93CF93DF93CDB7DEB728970FB6F894EF -:10323000DEBF0FBECDBF85E0E9E6F4E0DE0111960A -:1032400001900D928A95E1F780914E0390914F0382 -:10325000A09150038E839F83A88741E088858111C8 -:1032600001C040E008E010E09E012F5F3F4F6EEC90 -:1032700072E085E00E94A3188111109250032896F5 -:103280000FB6F894DEBF0FBECDBFDF91CF911F9177 -:103290000F9108956F927F928F929F92AF92BF92FB -:1032A000CF92DF92EF92FF920F931F93CF93DF9312 -:1032B0000F92CDB7DEB7862E5A016901682E880FAE -:1032C0007708C3010E940434892B09F07BC08AE08F -:1032D000869DF001879DF00D1124EE5FFE4F458124 -:1032E00050E04115510511F041E050E08AE0869D23 -:1032F000F001879DF00D1124EE5FFE4F668177810E -:103300006B547D4FCE0101960E940F35F50160810F -:103310007181828193810E94320864367105810532 -:10332000910540F4B701C8010E94E308998189170B -:1033300009F44FC0082C000C9908C4010E94043401 -:10334000892B91F0B12C8B2D0F90DF91CF911F9194 -:103350000F91FF90EF90DF90CF90BF90AF909F9034 -:103360008F907F906F9008958AE0889DF001899DED -:10337000F00D1124EE5FFE4F458150E0E416F50696 -:1033800008F4A7018AE0889DF001899DF00D1124C1 -:10339000EE5FFE4F668177816B547D4FC6010E94C0 -:1033A0000F35B701C8010E94E30899818913CACF7C -:1033B0000E944E08F5016083718382839383BB244E -:1033C000B394C1CFB12CA701B801C6010E940F353B -:1033D000BACFBB24B394F7CFCF92DF92EF92FF9294 -:1033E0000F931F93CF93DF9300D000D00F92CDB7F0 -:1033F000DEB76B0185E0E82EF12C06EB12E09E01B2 -:103400002F5F3F4F4DEA52E061E080E00E944A1991 -:10341000882349F095E0FE013196A8EAB2E00190D8 -:103420000D929A95E1F795E0E8EAF2E0D601019075 -:103430000D929A95E1F70F900F900F900F900F90CB -:10344000DF91CF911F910F91FF90EF90DF90CF9080 -:10345000089590E080E00E942635893E9E4F11F449 -:103460000C94D01080E008951F920F920FB60F9227 -:1034700011242F933F934F935F936F937F938F9379 -:103480009F93AF93BF93CF93DF93EF93FF93D0912D -:10349000E900DF708091EC00C82FC17080FDC0E8AA -:1034A0001092E9008091F000877F8093F00078947B -:1034B0000E94B8111092E9008091F000886080931A -:1034C000F000CD2BCF70C093E900FF91EF91DF9119 -:1034D000CF91BF91AF919F918F917F916F915F91AC -:1034E0004F913F912F910F900FBE0F901F90189505 -:1034F0001F920F920FB60F9211242F933F934F9369 -:103500005F936F937F938F939F93AF93BF93EF934B -:10351000FF938091E10082FF09C08091E20082FF69 -:1035200005C08091E1008B7F8093E1008091DA00FB -:1035300080FF24C08091D80080FF20C08091DA00F5 -:103540008E7F8093DA008091D90080FF9DC080E15A -:1035500089BD82E189BD09B400FEFDCF81E0809381 -:10356000800380917203811109C00E94A4060E9409 -:103570006F078091E20084608093E2008091E10017 -:1035800080FF17C08091E20080FF13C08091E200AD -:103590008E7F8093E2008091E20080618093E20060 -:1035A0008091D80080628093D80019BC85E0809318 -:1035B00080038091E10084FF2BC08091E20084FFB2 -:1035C00027C080E189BD82E189BD89B5982F9170BE -:1035D00080FFFBCF8091D8008F7D8093D8008091B1 -:1035E000E1008F7E8093E1008091E2008F7E8093E6 -:1035F000E2008091E20081608093E200809181038B -:10360000882309F447C084E080938003809180037D -:103610008091E10083FF27C08091E20083FF23C0F7 -:103620008091E100877F8093E10082E080938003B6 -:10363000109281038091E1008E7F8093E100809160 -:10364000E2008E7F8093E2008091E20080618093AF -:10365000E20042E060E080E00E943D078091F000DF -:1036600088608093F000FF91EF91BF91AF919F919F -:103670008F917F916F915F914F913F912F910F901B -:103680000FBE0F901F90189519BC109280031092D6 -:10369000720374CF8091E30087FD93E090938003E1 -:1036A000B5CF78941F921FB61F9211248F939F93CA -:1036B000AF93BF9380916B0390916C03A0916D03C6 -:1036C000B0916E030196A11DB11D80936B03909381 -:1036D0006C03A0936D03B0936E03BF91AF919F9164 -:1036E0008F911F901FBE1F9018959C014FB7F894A3 -:1036F00080916B0390916C03A0916D03B0916E0368 -:103700004FBF821B930B08952FB7F89480916B03E2 -:1037100090916C03A0916D03B0916E032FBF08953B -:10372000AF92BF92DF92EF92FF920F931F93CF93CE -:10373000DF93CDB7DEB761970FB6F894DEBF0FBE4B -:10374000CDBF4C87888B998BE52ED62EF72E5E0148 -:1037500027E0A20EB11C85E0F50111928A95E9F7E8 -:1037600080914D038A3008F095C080914B03909171 -:103770004C030E94751B089708F48CC004E610E007 -:1037800025E030E0A50164E084E10E944332892B0A -:1037900009F0DEC010924D038B8587FDD1C0E894FF -:1037A000E0F88091490390914A03009709F0C2C064 -:1037B0008F819885891708F091C0981B892F41E067 -:1037C0002091710130917201889FC001112455E050 -:1037D000589FF001599FF00D1124E29FB001E39F23 -:1037E000700DF29F700D1124660F672F661F770B07 -:1037F0007195442319F07195619571098091470382 -:1038000090914803680F791F89859A85891708F078 -:1038100068C0981B892F41E0889FC001112455E0A2 -:10382000589FF001599FF00D1124E29FC001E39FC2 -:10383000900DF29F900D1124880F892F881F990BEE -:103840009195442319F09195819591092091450313 -:1038500030914603820F931F603871050CF444C009 -:103860006F57710970934803609347033FE7D32E66 -:10387000803891050CF44BC08F5791099093460303 -:10388000809345039FE7F92E0E94841B90934C037D -:1038900080934B03ED86DE86FF8686E0FE013C9634 -:1038A000DE01119601900D928A95E1F729813A8106 -:1038B0004B815C816D817E8180E090E061960FB6E6 -:1038C000F894DEBF0FBECDBFDF91CF911F910F9156 -:1038D000FF90EF90DF90BF90AF900895891B40E07C -:1038E0006FCF891B40E098CF6138FFEF7F074CF422 -:1038F00061587F4F709348036093470321E8D22EAD -:10390000B7CFD62E1092480310924703B1CF81381B -:103910002FEF92074CF481589F4F9093460380936A -:10392000450381E8F82EB0CFF82E1092460310928E -:103930004503AACF019790934A0380934903A4CFEC -:103940006894E0F884E00E946A1584E190E0F3CF87 -:1039500080914D038F5F80934D0396CF5F926F925E -:103960007F928F929F92AF92BF92CF92DF92EF920F -:10397000FF920F931F93CF93DF9300D000D00F924D -:10398000CDB7DEB77C01FC0183819481892B31F0B6 -:103990008081918189238F3F09F0DDC60F900F90C0 -:1039A0000F900F900F90DF91CF911F910F91FF908B -:1039B000EF90DF90CF90BF90AF909F908F907F90CF -:1039C0006F905F9008950E946E10182F682F898164 -:1039D0009A810E94BB0B69817A81812F0E946110BC -:1039E0008C01F7018281882361F0F801E65EFC45D5 -:1039F000ED30F10530F4E555F94C0C94EC340E94AF -:103A0000C517D0906003D0FE1CC08D2D86958370A5 -:103A1000F7019281992309F460C1823090F4B701D3 -:103A2000C8010E948608882361F0D694D694D69463 -:103A30008091610383708295880F807E8D290E941A -:103A40006A15F7018281882309F47AC6C801825178 -:103A50009F45409708F036C68FEF93E00E941835D7 -:103A6000025193EEA92E92E0B92E811197CF011148 -:103A700038C11C821B82662463948AE0582E85011B -:103A80000F5F1F4FC5010E94183589831A82882352 -:103A900009F484CF9FEF980F933008F031C18A83E7 -:103AA000698232E0A30EB11CC8010E9418358B83D5 -:103AB000882309F473CF8E010F5F1F4FF801208117 -:103AC0002223E9F2213009F055C1918182819130A0 -:103AD00009F018C10E5F1F4F6AE070E0893311F4DE -:103AE00060E570E00E94F30E13C10E94B61789CF03 -:103AF0008091600380FF0DC00E94B6176091600343 -:103B00007091610380916203909163030E94791721 -:103B100078CF0E94C517F2CF0E94A41772CF909160 -:103B20006003892F86958F5F8370880F997F892B1B -:103B300080936003982F9670963001F7897F809369 -:103B40006003DCCF90916103892F8B7F92FF8460AB -:103B500080936103D3CF80916003982F96959695BB -:103B600096958091610383708295880F807E892B62 -:103B70008C3798F48F5F282F220F220F220F9091FD -:103B800060039770922B9093600382958695837063 -:103B9000909161039C7F892BDBCF81E0ECCF8091FA -:103BA0006003982F96959695969580916103837002 -:103BB0008295880F807E892B11F08150DCCF8BE7B6 -:103BC000DACF30916103932F969596959695209133 -:103BD0006203822F83708295880F807E892B90E00C -:103BE0000196482F440F440F440F3770342B309305 -:103BF000610335E0969587953A95E1F783702C7FC0 -:103C0000822B809362037ACF30916103932F969534 -:103C10009695969520916203822F83708295880FE6 -:103C2000807E892B8150990BDCCF8091620382FFCB -:103C300012C08B7F80936203609160037091610377 -:103C400080916203909163030E94791760E081E0A4 -:103C50000E945E15D6CE84608093620360916003FB -:103C60007091610380916203909163030E947917C0 -:103C700060E08CE00E945E1564E182E00E945E15C7 -:103C800065E081E00E945E1561E08CE0E1CF80910B -:103C90006203982F969596959695809163038295E9 -:103CA000880F807E892B883720F4865F0E947F17DB -:103CB000A8CE88E7FBCF80916203982F96959695C2 -:103CC0009695809163038295880F807E892B84313D -:103CD00010F08A50EBCF84E1E9CF882309F4B1CE0C -:103CE0009ECEA114F4E0BF0609F458CEC5010E948F -:103CF0001835811101C001502FEFA21AB20AB7CEB8 -:103D00005801D9CE923039F40E5F1F4F0E94470CF4 -:103D10000F5F1F4FD3CE933029F40E5F1F4F0E94C9 -:103D20000E0CF6CF943019F00F5F1F4FF1CF0E5FDE -:103D30001F4F30E020E0B8016F5F7F4FF8014181F5 -:103D40008053990B8A30910550F02150310900F3CE -:103D50008FE99FE00197F1F700C00000F6CF529E77 -:103D6000F001539EF00D11249C012E0F3F1F842F54 -:103D70008B01E1CFE22FF0E0E754FE4F7490822FE9 -:103D800086958695869590E0FC01E755FE4FE49078 -:103D90002770F12C022E02C0F594E7940A94E2F702 -:103DA000E1E0EE22FF24FC01E756FE4FC490D12C47 -:103DB000022E02C0D594C7940A94E2F7F1E0CF2214 -:103DC000DD24FC01E757FE4F8490912C02C09594AE -:103DD00087942A95E2F721E082229924E114F104E4 -:103DE00019F081EE0E94470CC114D10419F086EE3F -:103DF0000E94470C39E36AE070E0731202C060E58C -:103E000070E0872D0E94F30ECD2819F086EE0E94F7 -:103E10000E0CEF2819F081EE0E940E0C892809F48F -:103E200077CF6AE070E08CE25DCE81E00E94A5165B -:103E300003C081E00E9499160F900F900F900F9091 -:103E40000F90DF91CF911F910F91FF90EF90DF9036 -:103E5000CF90BF90AF909F908F907F906F905F902A -:103E60000C948E1682E0E2CF003E110509F457C093 -:103E700008F04DC00C32110509F487C1F701928199 -:103E8000911186C28091730382720A3CFCE51F0780 -:103E900009F45EC208F0B4C1053C3CE5130709F41F -:103EA00043C208F098C1033C5CE5150709F41DC244 -:103EB00008F035C2023C1C4509F4C7C1F701008176 -:103EC0001181992309F47EC2C8010E946E10D82E78 -:103ED000682FC8010E94BB0BB8018D2D0E94611094 -:103EE0000E94080A182FB82EF70122814581342F2D -:103EF00032953F70892F82958F70C82ED12C8C30CF -:103F000008F098C2F601E854F94C0C94EC34013EE8 -:103F1000110509F4A5C0043E110509F0AFCF8823AF -:103F200009F430C181E08093F20280918A030E94FB -:103F3000BB0C813009F0A2CF83E30E946A159ECFAB -:103F40000338FFE51F0709F46EC060F5053F110552 -:103F500009F414C140F4043F110509F08FCF61E06A -:103F60000E94CC0C8BCF063F110509F409C1023821 -:103F70003FE5130709F082CF882309F47FCF81EE54 -:103F80000E94470C83EE0E94470C8FE40E94470C6E -:103F90008FE40E940E0C83EE0E940E0C81EE0E94B4 -:103FA0000E0C6CCF05384FE5140709F4B5C008F4C2 -:103FB0005AC006389FE5190709F4C6C00738EFE56F -:103FC0001E0709F05BCF882309F4E8CC87E20E9442 -:103FD000470CFFEF28EA31E0F15020403040E1F794 -:103FE00000C000008CE20E94470C87E20E940E0C89 -:103FF0008BE10E94470C4FEF50EE80E04150504063 -:104000008040E1F700C000008CE20E940E0C8BE1C2 -:104010000E940E0C40E56FEF84EB0E943E1681E09B -:1040200080933E02BBCC882309F428CF81EE0E9406 -:10403000470C83EE0E94470C80E50E94470C80E508 -:10404000A8CF80934202109341020093400288233C -:1040500021F081E08093F30211CF1092F3020ECF92 -:1040600080933F02F0CF882379F180913F0288232B -:1040700049F0809140020E940E0C80EE0E94470C95 -:104080008AE20CC0809142028823D1F380914002E1 -:104090000E940E0C80EE0E94470C8CE40F900F9053 -:1040A0000F900F900F90DF91CF911F910F91FF9084 -:1040B000EF90DF90CF90BF90AF909F908F907F90C8 -:1040C0006F905F900C94470C8AE20E940E0C8CE477 -:1040D0000E940E0C80EE0E940E0C80913F02811116 -:1040E00005C080914202882309F458CC8091400297 -:1040F000D5CF882309F4C2CE80913E02882309F4EB -:10410000BDCE0E94841B9093A1028093A0021092C6 -:104110003E0210920101B2CE882309F420CF809193 -:104120007001811104C080910001882339F0109240 -:104130007001109200010E94280FA0CE81E08093B0 -:10414000700180930001F7CF882309F408CF809194 -:104150003D02882349F080EE90E0909372018093B5 -:10416000710110923D02E7CF86E690E090937201D4 -:104170008093710181E080933D02DDCF62E0F0CE5B -:1041800064E0EECE1092F20279CE882331F081E025 -:104190008093F5021092680171CE1092F5026ECEF6 -:1041A000882349F080918A030E94BB0C813019F466 -:1041B00082E30E946A15F7018281882309F4B2C262 -:1041C00080918A030E94BB0C813009F0ABC284E36A -:1041D0000E946A15A7C2073C2CE5120709F4AEC07D -:1041E00008F4A7C0083C4CE5140709F4ACC0093C2E -:1041F0001C4509F063CE40EB56E16CEB76E179C0EB -:10420000043DECE51E07A8F40E3CFCE51F0708F092 -:10421000C5CB0C3C2CE5120709F49FC042EF56E1D8 -:1042200063E077E10D3C1C4508F463C061E081E088 -:1042300046C0053D4CE5140709F4B0CB08F492C024 -:104240000D351D4509F4AACB39CE8091690480FF54 -:1042500031C08E7F809369046091690470916A0413 -:1042600080916B0490916C040E94791580915003A9 -:104270008160809350039FEFE0E7F2E09150E040CF -:10428000F040E1F700C000000F900F900F900F90EA -:104290000F90DF91CF911F910F91FF90EF90DF90E2 -:1042A000CF90BF90AF909F908F907F906F905F90D6 -:1042B0000C948B0D81608093690461E086950F906A -:1042C0000F900F900F900F90DF91CF911F910F9152 -:1042D000FF90EF90DF90CF90BF90AF909F908F9026 -:1042E0007F906F905F900C9414174FE357E168E450 -:1042F00077E10F900F900F900F900F90DF91CF917B -:104300001F910F91FF90EF90DF90CF90BF90AF90F3 -:104310009F908F907F906F905F900C94F90848E485 -:1043200057E16FE377E1E5CF40EE56E169EE76E1E4 -:10433000E0CF49EE56E160EE76E1DBCF48EC56E1A6 -:1043400064ED76E1D6CF44ED56E168EC76E1D1CF6D -:104350004CEB56E160EB76E1CCCF43E057E162EF06 -:1043600076E1C7CF0F900F900F900F900F90DF91D5 -:10437000CF911F910F91FF90EF90DF90CF90BF9062 -:10438000AF909F908F907F906F905F900C9452179A -:104390000E3D1C4509F092CD0F900F900F900F909D -:1043A0000F90DF91CF911F910F91FF90EF90DF90D1 -:1043B000CF90BF90AF909F908F907F906F905F90C5 -:1043C0000C94DB17C8010E94930BD82E85CD092FC2 -:1043D0000F70907F11F00295007F812F2223C9F08A -:1043E000002369F090E2910F983010F011110BC08A -:1043F00080917303082B009373030E94720B812F2B -:104400000E94470C17C080919702082B00939702D7 -:10441000F4CF0E940E0C002369F00095105E183056 -:1044200010F0B11027C08091730308230093730329 -:104430000E94720B98E0C91AD108E4E0CE16D104AC -:1044400008F0ACCA0E94E30E0F900F900F900F90EF -:104450000F90DF91CF911F910F91FF90EF90DF9020 -:10446000CF90BF90AF909F908F907F906F905F9014 -:104470000C944B0E80919702082300939702D8CF9B -:10448000892F8F70907F903211F08295807FF1E0BC -:10449000BF120CC0222329F0333060F60E94040CB6 -:1044A000C9CF323038F60E94F90BC4CF222341F035 -:1044B0003323A1F340FFA3CF4F70F7014583EECF25 -:1044C000332389F3193309F0F5C0FFEF27EE33E00A -:1044D000F15020403040E1F700C00000812F0E94E1 -:1044E0000E0CA8CF892F86958695837061F0813058 -:1044F00009F0A0CF812F9370211102C090E080E0DD -:104500000E945A0897CF812F9370211102C090E02A -:1045100080E00E9470088ECF892F8370A1F5211151 -:1045200089CF812F829586958770880F880F412FBC -:104530004F70082E01C0440F0A94EAF7212F207112 -:1045400014FF07C02FE030E001C0220F8A95EAF780 -:104550002095969596959370923081F0822F842BBA -:10456000933030F480919802913029F0242B8223EB -:104570000E94F50B5FCF842B822BFACF242B8091E6 -:1045800098028227F5CF8695222311F0892F81701A -:10459000882309F44FCF812F829586958770880FE5 -:1045A000880F412F4F70082E01C0440F0A94EAF77C -:1045B000212F207114FF07C02FE030E001C0220F2F -:1045C0008A95EAF72095969596959370923081F0AA -:1045D000822F842B933030F480918A03913029F01C -:1045E000242B82230E94881625CF842B822BFACF7E -:1045F000242B80918A038227F5CF092F0F70222365 -:1046000029F0802F0E94A516812F48CF812F0E946C -:10461000F90B802F0E9499160DCF812FE1EF1E1705 -:1046200089F1E11750F0F0EF1F17B9F02223B1F133 -:104630003111E5CE892F8F7129C042EF141749F14E -:1046400053EF1513F3CF80E0222361F29F7181E0D5 -:1046500001C0880F9A95EAF7C5CF222379F032304E -:1046600008F0E8CE292F2F7181E090E001C0880F7B -:104670002A95EAF790918A038927B4CF333008F05E -:10468000D9CEF0CF892F8F71222321F20E94A51657 -:10469000D1CE892F8F712223C9F3BCCF332379F078 -:1046A000893341F48FEF97EEE3E081509040E04092 -:1046B000E1F712CF8FE39CE90197F1F70DCF892F36 -:1046C0008F71A8CF0031FFE51F0709F4AECB013190 -:1046D0002FE5120709F4C6CB0E944E086093FA0238 -:1046E0007093FB028093FC029093FD02F70182819C -:1046F000053E110509F4A5CC08F022CC01321105C4 -:1047000008F0B2CB0E31110508F0F3CC0A301105D8 -:1047100009F446CD0531110509F44DCD09301105D7 -:1047200009F0ACCBF7018281882309F4A7CB8091F3 -:104730008A030E94BB0C813009F0A0CB81E3FDCB42 -:1047400000313FE5130709F474CB01314FE514073D -:1047500069F682E06FCB85E0DE01119601900D9243 -:104760008A95E1F7F701228189819A8121112BC96C -:104770000E94930B182F2FC91F93CF93DF93809123 -:104780006302807FA9F480916002882389F0809180 -:104790009502D091640260915E0270915F02A091D7 -:1047A0006102B0916202C62FC72316E0D81304C07D -:1047B000DF91CF911F91089590E0109711F0CF3FB6 -:1047C00019F401968770F2CF189F9001199F300D50 -:1047D0001124F901EB59FD4F41814713F2CF40817C -:1047E0004613EFCF42814111ECCF438154814A1BE4 -:1047F0005B0B403A510528F7809163028F7080610E -:1048000080936302F901E659FD4F80818F708061CA -:1048100080838EE592E00E94AE1CDF91CF911F91C4 -:104820000C94890BAF92BF92CF92DF92EF92FF92DE -:104830000F931F93CF93DF93CDB7DEB761970FB67A -:10484000F894DEBF0FBECDBF8C0185E0F801DE011C -:104850001D9601900D928A95E1F7F801E2808EE5B0 -:10486000A82E82E0B82E60916102709162026115FB -:10487000710509F432C190915E0240915F02892F67 -:1048800084238F3F09F429C120813181C380D480E2 -:10489000F0906002F601E61BF70BFF2009F4E8C078 -:1048A00080916302582F507FE03AF10508F0ABC0C9 -:1048B000511177C0FE2C431321C092131FC0E11089 -:1048C0001DC08F70806180936302C5010E94AE1C81 -:1048D00080916302F80185838F2D61960FB6F8945D -:1048E000DEBF0FBECDBFDF91CF911F910F91FF9023 -:1048F000EF90DF90CF90BF90AF900895CD2829F032 -:10490000822F83238F3F09F003C180E0F82FF170DD -:10491000DF2E80FF3CC0809195024091640256E0FA -:10492000841315C02D873E878D859E850E949D101E -:10493000292F22952F702230F0F0243018F59F7027 -:10494000F1F0F8019581907FD1F4D12C1EC090E058 -:10495000589FF001599FF00D1124EB59FD4F6181D3 -:10496000361306C06081261303C06281E6120FC0B1 -:1049700001968770D5CF9F7011F0882331F3805E48 -:10498000883018F3C8010E94AE1CFD2CA5CFEE2084 -:1049900009F4A2CF80916302816080936302F12CBD -:1049A0009BCF431306C0921304C0F801EE2009F414 -:1049B00079C0C8010E94A910882309F1EE20F9F0FE -:1049C00080916302803270F020915E0230915F022C -:1049D00038872F831986DB86CA868C87CE01079697 -:1049E0000E94AE1C86E0F801AEE5B2E001900D92A7 -:1049F0008A95E1F70E94BC23FF24F3946DCFC80190 -:104A00000E94AE1CF9CF51110AC08EE592E00E94BF -:104A1000AE1C86E0F50111928A95E9F7C0CF4313E9 -:104A20000FC092130DC0E1100BC0F8018583C801BF -:104A30000E94AE1C86E0F50111928A95E9F74CCFF1 -:104A4000C8010E94A9108823D1F2EE20C1F2809102 -:104A50006302803238F220915E0230915F023A8325 -:104A600029831B82DD82CC828E83CE010196B8CF52 -:104A7000E03AF105F8F6FE2CEE2009F243131FC0D0 -:104A800092131DC08091630280FD10C0982F907F0B -:104A900069F0F8018583903F31F0982F907F905F07 -:104AA0008F70892B8583C8010E94AE1C86E0F801B7 -:104AB000AEE5B2E001900D928A95E1F70DCFC80105 -:104AC0000E94A91081118ECF809163028160809332 -:104AD0006302C8010E94AE1CFFCEEE2009F48FCF06 -:104AE000C8010E94A910F82E882309F488CF86E017 -:104AF000F801AEE5B2E001900D928A95E1F7809160 -:104B00005E0290915F020E949D100E94BC23E4CE41 -:104B100081E08E25FBCE1F93CF93DF93CDB7DEB719 -:104B200067970FB6F894DEBF0FBECDBF4B8B5C8B83 -:104B30006D8B7E8B8F8B6111109297021A8A198A66 -:104B400085E0FE017396DE011D9601900D928A9517 -:104B5000E1F786E0FE013D96DE01179601900D9289 -:104B60008A95E1F7CE0107960E941224882389F0E6 -:104B700016E0809195029091640289134BC067966C -:104B80000FB6F894DEBF0FBECDBFDF91CF911F915E -:104B9000089586E0FE013796DE01119601900D9290 -:104BA0008A95E1F78A859B85892B11F38F819885FA -:104BB00089238F3FE9F22091640230E0C901019618 -:104BC00087709927409195024817190681F4109231 -:104BD00073030E94AF11109264021092950286E056 -:104BE000EEE5F2E0DF011D928A95E9F7C1CF96E08C -:104BF000929FD001939FB00D1124AB59BD4FFE0180 -:104C0000319601900D929A95E1F7809364020E948B -:104C1000890BAECF819FC00111248B599D4F0E94FB -:104C20001224882309F4ABCF8091950290E001967D -:104C300087709927809395029CCF7F928F929F9245 -:104C4000AF92BF92CF92DF92EF92FF920F931F939A -:104C5000CF93DF93CDB7DEB764970FB6F894DEBF7E -:104C60000FBECDBF8E010F5F1F4F8AE0D8011D928E -:104C70008A95E9F79FE4C92E91E0D92EF12CE12C19 -:104C8000AA24A394B12C3FE4832E31E0932EF601A5 -:104C900081916F018F3F09F443C0F894E82FE295AA -:104CA000EF70F0E021A18F70A50102C0440F551FE5 -:104CB0008A95E2F7CA01922F982B91A392A1809531 -:104CC000892382A30E94AC0900C0E8E4F1E0712CC2 -:104CD00031E021912F3F09F479C0A22FA295AF7046 -:104CE000B0E090968C9190E02F7002C095958795DA -:104CF0002A95E2F780FD6AC0832F782A330F8E163B -:104D00009F0639F7F601319780818F3F11F00E949D -:104D1000AE0950EA5A95F1F7F801EE0DFF1D7082C9 -:104D20008FEFE81AF80AA5E0EA16F10409F0AFCF10 -:104D30004AE050E0B8018DED92E00E9402357C011E -:104D4000892B41F08AE0F801ADEDB2E001900D92BF -:104D50008A95E1F71091E802E114F104C9F181E0CC -:104D600080939B020E94841B90939A0280939902E5 -:104D70008091990290919A020E94751B069770F09B -:104D8000ADEDB2E0E12FF0E0E15DFC4F8D9181935C -:104D900022E0A23EB207D1F710929B0281E090E0A0 -:104DA000EF28D1F064960FB6F894DEBF0FBECDBFEA -:104DB000DF91CF911F910F91FF90EF90DF90CF90F7 -:104DC000BF90AF909F908F907F90089580E095CF97 -:104DD00080919B028111CCCF0E94C00ED82EE09111 -:104DE000E802882309F4E1C07E0140E1E40EF11CF1 -:104DF00085E0D7011D928A95E9F70E2F10E0015D3D -:104E00001C4F8091D6028A3008F098C04CEE59E1D0 -:104E1000B701C8010E947C0E882309F4B2C043EA9E -:104E200058E2B701C8010E947C0E882309F4A9C08A -:104E300040E458E1B701C8010E947C0E882309F4C0 -:104E4000A0C04FE059E1B701C8010E947C0E882341 -:104E500009F497C04DEE58E1B701C8010E947C0EDD -:104E6000882309F48EC01092D6028091E70290E068 -:104E700045E050E0B701815D9C4F0E94023521E082 -:104E80002093A602892B09F06FC0D12C80910101DB -:104E9000811114C08091A0029091A1020E94751B03 -:104EA000813A9F4058F040E56FEF8CEF0E943E162C -:104EB00081E0809301018CE00E946A158EE9E82E62 -:104EC00082E0F82E10E000E0D7018D917D0188236B -:104ED000D1F08695F80109F465C0E850FE4F808155 -:104EE00091819C878B871D860E94841B8160782F0F -:104EF0009F878E87F701319710824B855C856D8582 -:104F00008F850E948B250E5F1F4F04301105E1F63F -:104F10006091FA027091FB028091FC029091FD0277 -:104F20000E94320861367A4E8105910528F040E0F2 -:104F300060E080E00E94080F8D2D34CF80919C02AC -:104F400090919D020E94751B843F914008F05ECFB6 -:104F50008091A602882309F498CF85E0F701119289 -:104F60008A95E9F71092A602A091E702B0E0A15D50 -:104F7000BC4F85E0FE01709601900D928A95E1F795 -:104F800085CF8091D6028F3F31F08F5F8093D6021C -:104F90008A3008F46ACF0E94841B90939D0280930C -:104FA0009C02D6CFEC50FE4F9ACFF0E0E15DFC4F73 -:104FB000F89485E0A6EBB2E001900D928A95E1F7B6 -:104FC00065E070E086EB92E00E94E3088093B50212 -:104FD0000E94AC09F894E091F002F0E0E351FD4F3B -:104FE00080818B878093BC0261E070E0CE010B96DC -:104FF0000E94E3088093BB020E94AC09F894C09021 -:10500000BD02D090BE02E090BF02F090C00280913D -:10501000A2029091A302A091A402B091A502C81689 -:10502000D906EA06FB06D1F0C092A202D092A302F2 -:10503000E092A402F092A5020E94C00E81110EC05F -:105040000E944E08C61AD70AE80AF90AC092D70287 -:10505000D092D802E092D902F092DA020E94AC0912 -:10506000F8948091C8028823F1F080FF0DC08091F0 -:10507000C10280FF25C090916904916090936904FA -:1050800060E086950E9414178091C80281FF09C0D4 -:1050900020E04091C4026091C3028091C2020E944C -:1050A0008B151092C8020E94AC09F8948091C90235 -:1050B000882349F00E94860F0E94AC0980E072CEDE -:1050C0000E94670EE1CF0E946B0FF6CFEF92FF9226 -:1050D0000F931F93CF93DF9300D000D00F92CDB7E3 -:1050E000DEB7162FE82EF12CC701880F991F662313 -:1050F00039F188509E4FFC01808191819A83898388 -:1051000001E00B830E94841B8160782F9D838C8338 -:10511000F701E256FD4F0127110F102B1083498133 -:105120005A816B818D810F900F900F900F900F908F -:10513000DF91CF911F910F91FF90EF900C948B25F1 -:105140008C509E4FD8CFCF92DF92EF92FF920F9369 -:105150001F93CF93DF930F92CDB7DEB7EE24E39486 -:10516000F12C0CEB12E09E012F5F3F4F41EB52E020 -:1051700063E082E00E944A19082F882321F1C09041 -:10518000EA028C2D90E09C0123513D4F7901198159 -:10519000F9018081181BD12E80E00AC0DA94F70152 -:1051A00080818F5F808360E08C2D0E946628802F35 -:1051B0001D14A4F3912F17FD90E0191B11110EC0BF -:1051C00081110E94700B802F0F90DF91CF911F9162 -:1051D0000F91FF90EF90DF90CF9008951F5FF70140 -:1051E00080818150808361E08C2D0E946628802F11 -:1051F000E5CF1F921FB61F9211248F939F93AF93F9 -:10520000BF9380916A03811113C080916B039091C9 -:105210006C03A0916D03B0916E034196A11DB11D69 -:1052200080936B0390936C03A0936D03B0936E0314 -:10523000BF91AF919F918F911F901FBE1F901895A6 -:10524000CDB7DEB7E0970FB6F894DEBF0FBECDBF87 -:1052500084B7877F84BF0FB6F894A89580916000CB -:10526000886180936000109260000FBE80E890E03B -:105270000FB6F89480936100909361000FBE85B7DC -:10528000806885BF85B7806885BF8AEA99E090937A -:105290003302809332020E94A4060E946F0780911D -:1052A000E20084608093E2007894809180038823F8 -:1052B000A1F01091E9001F709091EC00892F81708E -:1052C00090FD80E8182B1092E9008091E80083FDA2 -:1052D0000E94B8111F701093E90082E084BD93E032 -:1052E00095BD9AEF97BD80936E001092D7021092F1 -:1052F000D8021092D9021092DA020E94D0108111C5 -:1053000002C00E942C100E94C00E8093590180910F -:105310005901882309F4C9C01092730185E2809372 -:1053200074010E94C00E81110E94F73280915901D0 -:1053300081112FC0FE01359686E0DF011D928A950E -:10534000E9F786E6898387E98A8386EC8B8384E3A1 -:105350008C8385E38D833497AFE4B1E0CE010B9667 -:1053600021912D938E179F07D9F787E0E9E7F1E0A8 -:10537000DE01919601900D928A95E1F7FE01B196BA -:10538000A8E4B1E0CE01889621912D938E179F0756 -:10539000D9F78091590195E0811190E09093E8024E -:1053A00085E0891B8093E7020FE411E084E5E82E95 -:1053B00081E0F82EF80181918F018F3F11F00E945A -:1053C000AE09E016F106B1F708E411E0BFE4EB2EF8 -:1053D000B1E0FB2ED8018D918D018F3F11F00E941D -:1053E000AE09E016F106B1F78AE0EFE2F3E0DF0183 -:1053F000282F1D922A95E9F7EDEDF2E0DF011D92CD -:105400008A95E9F70E94291A811102C00E94DB17D0 -:1054100082E090E00E9418358093240384E090E0BD -:105420000E941835182F82E290E00E941835982FBC -:10543000812F9093DC028093DB020E941D26EFE710 -:10544000FBEB3197F1F700C000000E941D26809110 -:105450002F0380FF2EC06FEF7FEF90E080E00E946F -:105460004A3581E08093E00080E28093D80010927A -:10547000C9008FE19EE40197F1F700C0000087E0CA -:1054800090EBDC018093720690937306A0937406F0 -:10549000B093750688E19CE00FB6F894A8958093C8 -:1054A00060000FBE90936000FFCF85E28093730190 -:1054B00036CF83E090E00E9418350E94F50B809172 -:1054C0008A030E9441160E94291A811102C00E947B -:1054D000DB1788E190E00E942035609360037093B1 -:1054E00061038093620390936303672B682B692B9E -:1054F00011F40E94A4170E94F83067E081E00E9436 -:105500005E1565E586E10E945E1563E687E10E940F -:105510005E1560EA8AE10E945E1569E98BE10E94EE -:105520005E1565EF8CE10E945E1560EA8DE10E94D8 -:105530005E1560E38EE10E945E1566E083E00E94E6 -:105540005E1561E08CE00E945E1560E081E00E94E3 -:105550005E1560E08CE00E945E156FE084E00E94C2 -:105560005E1561E08CE00E945E150E94C00E811104 -:1055700002C00E94FA3283E080931F0380E280938E -:1055800053030E94F8306DE070E08CE492E00E94DA -:105590003B0F892BE9F580911F0363E070E081FDEB -:1055A00005C289E492E00E943B0F892B89F56DE0EA -:1055B00070E089E392E00E943B0F892B49F50E943D -:1055C0004E086058774C8E4F9F4F60935A037093EC -:1055D0005B0380935C0390935D03E0E7F4E080E07D -:1055E00092E0DF019C011D9221503040E1F7F093E1 -:1055F0007106E09370068FEF9FEF90936F04809396 -:105600006E0481E080935F0380935E031092200319 -:105610008091E902811136C00E94291A811104C0CB -:105620000E94DB170E94611788E090E00E942035FD -:105630006093690470936A0480936B0490936C0484 -:10564000809150038360809350036E7F71F40E94B9 -:10565000611788E090E00E942035609369047093A0 -:105660006A0480936B0490936C040E94FE088091FE -:10567000690480FF04C060E086950E94141781E0F1 -:105680008093E90280915901811106C084EF8093D3 -:10569000670185EF8093660120916701A22FA29593 -:1056A000AF70B0E091963C9191972F7081E090E0BF -:1056B000BC01022E01C0660F0A94EAF7462F4095FE -:1056C000432391964C93919792963C919297362BC7 -:1056D00092963C93929740916601E42FE295EF7089 -:1056E000F0E031A14F70042E01C0880F0A94EAF750 -:1056F000982F9095932391A392A1892B82A39096A2 -:105700008C9190E002C0959587952A95E2F781707B -:1057100020A130E002C0359527954A95E2F792E046 -:1057200020FF90E0892B8093F1029091590181E054 -:1057300098279093F002891B8093EA020E94D41765 -:1057400060E08AE00E94141781E00E94881680EED3 -:1057500090E090937201809371010E94280F8AE576 -:1057600091E09093670380936603A0E46A2E809192 -:105770008003FF24F39400E112E1853009F465C150 -:105780000E941D26E82E81110E944E08FFE22F2E56 -:10579000F3E03F2EE5E2F3E0D10110E000E0B02EAF -:1057A000DD9081918D1509F474C18D25C12CFF24E4 -:1057B000F394982F9F2109F467C10E94C00E88239B -:1057C00099F0C9A2BAA2DF2081E009F480E08BA39E -:1057D0000E94841B8160782F9DA38CA349A15AA1AC -:1057E0006BA18DA10E948B25F801EB5DFC4F8081A0 -:1057F000F826F0828091F102E82FEE0FEE0F9091E3 -:105800006701A92FA295AF70B0E090962C9130E07F -:105810009F7002C0359527959A95E2F7217033273E -:1058200090916601A92FA295AF70B0E090964C912F -:1058300050E09F7002C0559547959A95E2F7CA01CE -:105840008170992740FF02C082E090E0822B8E2B6E -:105850008093F1021091F0028F70E82FF0E0E25097 -:10586000FE4F80819091EF02890F8093EF02F12C1F -:1058700084306CF0E12FF0E0E351FD4F80818F5FC9 -:10588000808360E0812F0E946628FF24F39480913A -:10589000EF028D3F6CF4E12FF0E0E351FD4F80818A -:1058A0008150808361E0812F0E946628FF24F39459 -:1058B0008091EF02082E000C990B64E070E00E94CA -:1058C000D8348093EF02F1100E94700B80915F0337 -:1058D000882351F180912103909122030E94751B2E -:1058E000C29708F0EDC020916E0430916F0421152D -:1058F000310509F0F0C180915E038823A9F00E9470 -:105900004E0800915A0310915B0320915C03309183 -:105910005D03601B710B820B930B6F3F7F4F8F4FAB -:105920009F4710F40E946B0FE11001C0F1100E941C -:10593000860F0E94E9100E94E30E909123038917BD -:1059400031F00E94E30E809323030E944B0E80915E -:105950008003843009F00BCF83E08093E9008091CD -:10596000E80082FF04CF8091E80090E085FF0CC042 -:105970000E94C30630E2E32EF12C8E010F5F1F4F11 -:10598000882309F487C291E08091E8008B778093A7 -:10599000E800992309F4EBCEE981E150E33108F006 -:1059A000DDC2F0E0EC53F94C0C94EC3486E492E068 -:1059B000FACD80918003843009F437C080E00E94E2 -:1059C0004B0E8091EC02811109C0F092EC028091A3 -:1059D000690481708093EB020E94670E0E946B0F36 -:1059E0000E94E91010926A0388E190E00FB6F894E3 -:1059F000A895809360000FBE6092600083B7817F9E -:105A0000846083BF83B7816083BF7894889583B7B0 -:105A10008E7F83BF0FB6F894A8958091600088614F -:105A200080936000109260000FBE80917F038823F6 -:105A300061F00E941D26EFE2F3E081918111B7C36E -:105A4000A9E3B3E0AE17BF07C1F7809180038530AB -:105A500009F4AFCF109273030E94AF110E94E30EBE -:105A60000E944B0E1092EC028091EB02882349F0C9 -:105A70008091690481608093690460E086950E944A -:105A800014170E94280F7CCEC394FF0C27E0C2128B -:105A900090CE0F5F1F4F0A30110509F080CE8FEFB7 -:105AA00088A789A71AA60E94841B8160782F9CA7CB -:105AB0008BA748A559A56AA58CA50E948B259ACECF -:105AC0000E94841B909322038093210360E080E076 -:105AD0000E94CC080E94E30E8093FE020E94C00E3A -:105AE000882309F4DFC06091FA027091FB02809173 -:105AF000FC029091FD020E943208613375478105D6 -:105B0000910540F00E946B0F80915F03882309F498 -:105B1000F2CEE9CE0E94860F61E080E00E94CC08C0 -:105B200060E080E891E00E94421562E080E00E941F -:105B3000CC0880918A030E94BB0C823009F48CC08F -:105B400008F081C0882309F487C0813009F48AC035 -:105B500065E080E00E94CC0860E08EE991E00E9460 -:105B6000421566E080E00E94CC086091FE026695D6 -:105B7000617083EA91E00E94421567E080E00E9434 -:105B8000CC086091FE026095617088EA91E00E9405 -:105B9000421568E080E00E94CC086091FE0262FB42 -:105BA000662760F98CEA91E00E9442156091F60246 -:105BB0007091F7028091F8029091F9020E943208E8 -:105BC0006D3271408105910508F49ECF0E944E0808 -:105BD0006093F6027093F7028093F8029093F902B3 -:105BE0008091F502811104C080916801811142C049 -:105BF0006DE080E00E94CC0860E081EB91E00E94C3 -:105C000042156AE080E00E94CC0881E08093680140 -:105C10008091F40290E00196817099278093F402BC -:105C200021E030E0281B390B40E6429FC001439F32 -:105C3000900D11242091F302222351F187529C4FA1 -:105C40000E94610661CF833089F0843009F080CFF3 -:105C500060E082E991E003C060E086E891E00E94A4 -:105C6000421576CF60E08CE891E0F9CF60E088E9FA -:105C700091E0F5CF6AE080E00E94CC0860E081EB23 -:105C800091E00E9442156BE080E00E94CC08C0CFFA -:105C90002091F202222319F0875E9C4FD1CF875AC0 -:105CA0009D4FCECF64E080E00E94CC0860E087EB9F -:105CB00091E00E94421565E080E00E94CC0860E01F -:105CC0008DEB91E00E94421569E080E00E94CC08D3 -:105CD00089E994E0B5CF8091200361E070E0811103 -:105CE0000ACE082F10E02B01082E02C0440C551CD0 -:105CF0000A94E2F7A90144215521452B09F448C033 -:105D000090911F0390FD46C08295880F8076809306 -:105D10006B019801369527953695279520936E014E -:105D2000815E80936C0110926F0124E630E047E0C1 -:105D300050E069E671E088E70E94EF31892B09F0B5 -:105D4000DACDA80175E0440F551F7A95E1F78091EF -:105D50001F0380FD2DC040595B4F04E610E020E298 -:105D600030E060E488E70E941632892B09F0C3CD49 -:105D70000E94860FC2018095909540906E045090CD -:105D80006F044822592250926F0440926E04B3CDA2 -:105D90008F5FA7CF880F880F880F80936B011092B9 -:105DA0006E01895F80936C0183E080936F01BDCFAA -:105DB000EFEFF2E080E2DF011D928A95E9F7E2E180 -:105DC000F2E0F8ABEFA70EE012E067E0A62E992410 -:105DD0009394AFA5B8A96D91B8ABAFA7F801819125 -:105DE0008F01840F952F911D9C0120593B4F3EA799 -:105DF0002DA7E62FF0E0E150FD4F30E020E07A2CB7 -:105E0000721AB92C022E01C0BB0C0A94EAF7CDA479 -:105E1000DEA490E0D6018D916D018B21672D691B69 -:105E20006770862E062E000C770BB82F01C0BB0FB3 -:105E30008A94EAF78B2E71956195710967707727BF -:105E400001C086956A95EAF7882A8081882A80822F -:105E50009F5F9830F9F62F5F3F4F3196283031051C -:105E600071F6E6E1F2E02FA538A9E217F30709F091 -:105E7000B0CF04E610E020E230E04FEF52E071CF07 -:105E80008091F100D8018D938D01B1E0EB1AF108FA -:105E900009F479CD8091E80085FDF2CF8091E8008A -:105EA0008B778093E8000E94C306882399F36BCD1B -:105EB0001A8289E08B8311C08A81823009F48FC1F4 -:105EC000833091F1813009F049C00E944E080E9450 -:105ED000F2346B837C838D839E8380918003843036 -:105EE00009F045CC1091E9001F709091EC00892FCA -:105EF000817090FD80E8182B82E08093E90080910A -:105F0000E80080FF0DC050E040E060E270E0CE01AC -:105F100001960E94F4068091E8008E778093E80055 -:105F20001F701093E90023CCFE013396D1018D91AF -:105F30001D018193B9E32B16B3E03B06B9F7CDCF32 -:105F40008A81823059F46B817C818D819E810E948F -:105F5000F23486E290E00E942C35BFCF8FEF898328 -:105F6000BCCF4C816B818A810E943B109827892786 -:105F700098279E838D83B1CFED80FE80FE24EF2491 -:105F8000FE248A810B81EEE00E9F80011124FCE843 -:105F90008F9F000D111D11248C8190E0880F991F97 -:105FA000080F191F6F2DC80187960E942C356E2D82 -:105FB000C8018896D0CF0E94BE0F8FCF8A818138CA -:105FC000B1F058F4803809F088CF4B8160916B04B0 -:105FD00080916A040E943E1680CF8238E1F08338B7 -:105FE00009F07BCF40916C046C818B81F3CF60E032 -:105FF0008B810E9414178B81811103C00E94670E50 -:106000006CCF8091690481608093690460E086951B -:106010000E94141762CF8B8180936D045ECF8A81BA -:10602000813899F030F4803809F057CF80916C04B2 -:1060300041CF823891F0833809F04FCF80916A04C4 -:106040008B8380916B048C8348CF8091690480FF9F -:1060500002C086952FCF80E02DCF80916D042ACF8E -:106060006091690470916A0480916B0490916C0452 -:106070000E94791532CF80E18A832FCF81E08A8315 -:106080008DE118CFCA80DB80DC24CD24DC248E0196 -:106090000F5F1F4FEC80E00EF12EF11CC6018D51F9 -:1060A0009D4F0E151F0509F418CF2DE1C21621E0F2 -:1060B000D20658F40E941835D80114968C93FFEF3D -:1060C000CF1ADF0A0F5F1F4FE9CFF8011482F7CF15 -:1060D0000A811B811027012710279E012F5F3F4F48 -:1060E0006901EC80E00EF12EF11CC8018D519D4F2D -:1060F000E016F10609F4F1CE0D3131E0130728F472 -:10610000D60114966C910E942C35BFEFCB1ADB0A96 -:106110000F5F1F4FEACF0E94AE0FDFCE85E0ACCFFE -:10612000CA80DB80DC24CD24DC248E010F5F1F4F6E -:10613000EC80E00EF12EF11CC6018796E016F10608 -:1061400009F4CBCEECEBCE16E2E0DE0658F40E946A -:106150001835D80114968C93FFEFCF1ADF0A0F5F22 -:106160001F4FEACFF8011482F7CF0A811B81102755 -:10617000012710279E012F5F3F4F6901EC80E00E41 -:10618000F12EF11CC8018796E016F10609F4A5CEA0 -:106190000C3B32E0130728F4D60114966C910E9450 -:1061A0002C35BFEFCB1ADB0A0F5F1F4FEBCF09BDBA -:1061B00019BD09B400FEFDCF8091D8008F7D80937A -:1061C000D8008091E00082608093E0008091E00040 -:1061D00081FDFCCF109273030E94AF1136CC86E292 -:1061E00090E00E9418351B821C821D828E8375CE22 -:1061F0001092B9008CE08093B80008959F92AF92FE -:10620000BF92CF92DF92EF92FF920F931F93CF93A3 -:10621000DF93B82EEB010E94841B6C01EE24E39403 -:10622000F12CC431D10560F025E0E22EF12CCF3FF6 -:10623000DC0731F0CE0164E170E00E94B8347B01EC -:1062400084EAA82E94E8992E1092BC00A092BC007B -:106250000E94841B8C018091BC0087FF0DC080913F -:10626000B900887F883039F18091B900887F80310A -:1062700011F10FEF1FEF09C00E94841B801B910BCF -:106280008E159F0540F30EEF1FEFCF3FDC07E1F2C5 -:10629000C6010E94751B8C179D07B0F2C801DF91E3 -:1062A000CF911F910F91FF90EF90DF90CF90BF9013 -:1062B000AF909F900895B092BB009092BC000E9456 -:1062C000841B8C018091BC0087FF0AC08091B900BB -:1062D000887F883111F0803461F610E000E0DECF75 -:1062E0000E94841B801B910B8E159F0558F3CBCF0A -:1062F0000F931F93CF93DF93EB018093BB0084E850 -:106300008093BC000E94841B8C018091BC0087FF9D -:1063100011C02091B900287F81E090E0283211F46B -:1063200090E080E0919581959109DF91CF911F9147 -:106330000F910895CF3FDC0741F30E94841B801B1F -:10634000910B8C179D0708F38EEF9FEFEECF0F9305 -:106350001F93CF93DF93EC0184EC8093BC000E94E9 -:10636000841B8C018091BC0087FF08C08091BB001A -:1063700090E0DF91CF911F910F910895CF3FDC07FF -:1063800089F30E94841B801B910B8C179D0750F38F -:106390008EEF9FEFEECF0F931F93CF93DF93EC0120 -:1063A00084E88093BC000E94841B8C018091BC0017 -:1063B00087FF08C08091BB0090E0DF91CF911F91D3 -:1063C0000F910895CF3FDC0789F30E94841B801B47 -:1063D000910B8C179D0750F38EEF9FEFEECFCF926E -:1063E000DF92EF92FF920F931F93CF93DF936B0196 -:1063F0008A017901B9010E94FE30E6010C0D1D1DD4 -:10640000C017D10761F424E92093BC00DF91CF913C -:106410001F910F91FF90EF90DF90CF90089597FD1F -:10642000F2CFB70189910E947831EACFCF92DF9203 -:10643000EF92FF920F931F93CF93DF93C62F6A01C2 -:106440007901B8010E94FE3097FD0CC0B8018C2F75 -:106450000E947831E601EC0CFD1CCE15DF0511F031 -:1064600097FF0CC024E92093BC00DF91CF911F91CE -:106470000F91FF90EF90DF90CF900895B801899130 -:106480000E947831EACFCF92DF92EF92FF920F9382 -:106490001F93CF93DF93F82EE62EEA016901B8012E -:1064A0000E94FE3097FD15C0B8018E2D0E947831F4 -:1064B00097FD0FC0B8018F2D81600E94FE30F12C36 -:1064C000E12C21E0C21AD108EC14FD0400F597FF7D -:1064D00011C024E92093BC001816190614F490E0AA -:1064E00080E0DF91CF911F910F91FF90EF90DF90AF -:1064F000CF900895C8010E94A73197FD04C0FE0106 -:10650000EE0DFF1D80832FEFE21AF20ADDCF97FD1B -:10651000E0CFC8010E94CB3197FDDBCFCC0DDD1D54 -:106520008883D7CF84E98093BC0008958EE14A9B8D -:1065300002C08150E1F74A9BFECF08955A9880E24D -:106540008A95F1F75A9A0895FC013BE03A95F1F7E4 -:1065500098E020E080E031E040E14A95F1F7880FD3 -:106560004A9B02C08160232742E04A95F1F7000070 -:1065700040E14A95F1F7915079F790E19A95F1F75A -:1065800099B132E03A95F1F7000040E14A95F1F710 -:1065900092FB992790F992272081920F908308957A -:1065A000EF92FF920F931F93CF93DF930F92CDB78C -:1065B000DEB719828C017C01E60EF11C0E151F0559 -:1065C00061F481E09981911180E00F90DF91CF918A -:1065D0001F910F91FF90EF9008950E949632CE0187 -:1065E00001960E94A432F80181938F01E7CF529A5D -:1065F0005A9A089552985A9AEA9AE9E6F0E0808108 -:106600008F7C808308956150770B91E001C0990FD2 -:106610006A95EAF720E031E0911108C0222391F059 -:106620005A9A80E28A95F1F75A980895492F48239B -:1066300039F05A9A232740E24A95F1F79695ECCF24 -:106640005A98F9CF5A98EDCFFF920F931F93CF939B -:10665000DF93EC018C01060F111DC017D10731F437 -:10666000DF91CF911F910F91FF900895F9900E94B3 -:106670009E3268E08F2D0E940333EFCF1F920F925E -:106680000FB60F921124EF92FF920F931F932F9347 -:106690003F934F935F936F937F938F939F93AF93AA -:1066A000BF93EF93FF93CF93DF930F92CDB7DEB7F6 -:1066B00019820E949632CE0101960E94A432A82F20 -:1066C000A695A695A695282F229525709A2F9570A8 -:1066D000290F922F937026952695920F98279770E1 -:1066E0008981982B09F075C0A83008F072C080E14C -:1066F0008A95F1F75A9A529AB2E0BA95F1F700C02A -:106700005A98EA2EF12CEAE0AE9FD0011124AE5F38 -:10671000BE4F1896ED91FC9119973097B1F06091AA -:10672000FC017091FD0116962D913C911797260F53 -:10673000371F13968D919C911497680F791F1596AA -:106740004C91159712968C9109958AE08E9DF001D7 -:106750008F9DF00D1124EE5FFE4F6581662351F091 -:106760002091FC013091FD0186819781820F931F5A -:106770000E9424330E949E32F0E1FA95F1F75A9874 -:1067800052985A9A80E18A95F1F78AE08E9D8001AD -:106790008F9D100D11240E5F1E4FD80112966C9123 -:1067A0001297662371F12091FC013091FD0113963F -:1067B0008D919C91820F931F0E94D032D801ED9150 -:1067C000FC91882311F088E001C082E080830E9460 -:1067D00096320F90DF91CF91FF91EF91BF91AF91E2 -:1067E0009F918F917F916F915F914F913F912F91E9 -:1067F0001F910F91FF90EF900F900FBE0F901F9081 -:106800001895ED91FC91DFCF0F931F93CF93DF93FA -:10681000EC0108970CF0A9C08AE08C9FF0018D9FD5 -:10682000F00D1124EE5FFE4F80819181892B09F4D8 -:106830009CC0F894529A5A9885E08A95F1F7000026 -:106840008C2F869585709C2F9570890F982F93704B -:1068500086958695890F8E0193E0000F111F9A95FA -:10686000E1F7082B0E949E3200C068E0802F0E9452 -:106870000333A0E1AA95F1F752985A9A4A9B27C090 -:1068800087E090E04A9925C08AE08C9F80018D9F27 -:10689000100D11240E5F1E4FF80165816623A1F1D2 -:1068A0002091FC013091FD0186819781820F931F19 -:1068B0000E94D032811128C0529A5A9AD801ED9183 -:1068C000FC9182E08083789482E090E016C000C062 -:1068D000D5CF0197B9F4529A5A9A8AE08C9FF00169 -:1068E0008D9FF00D1124EE5FFE4F0190F081E02DA1 -:1068F00081E08083789481E090E0DF91CF911F91D7 -:106900000F91089500C0BECF0E949632B0E2BA95B2 -:10691000F1F75A98529AE0E1EA95F1F78AE08C9FF4 -:10692000F0018D9FF00D1124EE5FFE4F6281662312 -:1069300051F02091FC013091FD0183819481820FFF -:10694000931F0E9424330E949E328AE08C9FF001A4 -:106950008D9FF00D1124EE5FFE4F0190F081E02D30 -:106960001082789490E080E0C8CF84E090E0C5CFBA -:10697000AA1BBB1B51E107C0AA1FBB1FA617B70765 -:1069800010F0A61BB70B881F991F5A95A9F7809581 -:106990009095BC01CD010895991B79E004C0991F21 -:1069A000961708F0961B881F7A95C9F78095089569 -:1069B00097FB072E16F4009407D077FD09D00E94AC -:1069C000B83407FC05D03EF4909581959F4F08950B -:1069D000709561957F4F0895EE0FFF1F0590F4911C -:1069E000E02D099469279627692778278727782734 -:1069F0000895FB01DC0102C005900D92415050400A -:106A0000D8F70895FB01DC0104C08D910190801935 -:106A100021F441505040C8F7881B990B0895FB01A1 -:106A2000DC0102C001900D9241505040D8F708950A -:106A3000F999FECF92BD81BDF89A992780B5089546 -:106A4000A6E1B0E044E050E00C945235A8E1B0E09B -:106A500042E050E00C945235262FF999FECF92BDBA -:106A600081BDF89A019700B4021639F01FBA20BD13 -:106A70000FB6F894FA9AF99A0FBE08950396272F45 -:106A80000E942D350E942C35252F0E942D35242F54 -:106A90000C942D350196272F0E942D350C942C3502 -:106AA000DC01CB01FC01F999FECF06C0F2BDE1BDCE -:106AB000F89A319600B40D9241505040B8F70895BD -:106AC0000E9467356894B1110C94F63508950E94C0 -:106AD000DB3588F09F5798F0B92F9927B751B0F060 -:106AE000E1F0660F771F881F991F1AF0BA95C9F752 -:106AF00014C0B13091F00E94F535B1E008950C94C6 -:106B0000F535672F782F8827B85F39F0B93FCCF378 -:106B1000869577956795B395D9F73EF490958095CE -:106B2000709561957F4F8F4F9F4F0895E89409C0EE -:106B300097FB3EF490958095709561957F4F8F4FB0 -:106B40009F4F9923A9F0F92F96E9BB279395F695C6 -:106B5000879577956795B795F111F8CFFAF4BB0F44 -:106B600011F460FF1BC06F5F7F4F8F4F9F4F16C0A8 -:106B7000882311F096E911C0772321F09EE8872F32 -:106B8000762F05C0662371F096E8862F70E060E0EE -:106B90002AF09A95660F771F881FDAF7880F969567 -:106BA000879597F9089557FD9058440F551F59F050 -:106BB0005F3F71F04795880F97FB991F61F09F3FEA -:106BC00079F087950895121613061406551FF2CF13 -:106BD0004695F1DF08C0161617061806991FF1CF63 -:106BE00086957105610508940895E894BB2766278A -:106BF0007727CB0197F908950E940F360C948036C1 -:106C00000E94723638F00E94793620F0952311F0F8 -:106C10000C9469360C946F3611240C94F6350E944E -:106C2000D33570F3959FC1F3950F50E0551F629FC8 -:106C3000F001729FBB27F00DB11D639FAA27F00DD5 -:106C4000B11DAA1F649F6627B00DA11D661F829FFC -:106C50002227B00DA11D621F739FB00DA11D621FE1 -:106C6000839FA00D611D221F749F3327A00D611DFE -:106C7000231F849F600D211D822F762F6A2F1124E0 -:106C80009F5750409AF0F1F088234AF0EE0FFF1F13 -:106C9000BB1F661F771F881F91505040A9F79E3F6A -:106CA000510580F00C9469360C94F6355F3FE4F39F -:106CB000983ED4F3869577956795B795F795E795C0 -:106CC0009F5FC1F7FE2B880F911D9695879597F9C9 -:106CD000089597F99F6780E870E060E008959FEF5E -:106CE00080EC089500240A94161617061806090663 -:106CF000089500240A941216130614060506089532 -:106D0000092E0394000C11F4882352F0BB0F40F4B9 -:106D1000BF2B11F460FF04C06F5F7F4F8F4F9F4FF9 -:106D20000895F894FFCFBB10BB10C410C410C61058 -:106D3000C410C410C410BB10BB10CB10C410C410BE -:106D4000CB10A012C8126B14C8126B14FB121C13C8 -:106D50006B141A142714FF1C751D781D8C1D8F1DB4 -:106D6000A21DAB1DCF1D151E471E5B1EE11D041E7F -:106D7000E721E7214022402272221A221A221A22F7 -:106D80008C22FD220D230D23582F5C2FA02FB12F15 -:106D9000BC2FDB2FDE2F0F303030AE2FAE2F3B302D -:0E6DA0003E30423068308B308E309030B5304F -:106DAE0001013C0200000001000000003C02000056 -:106DBE000005010000003C0200000001060000007A -:106DCE003C0200000001070000003C020408000025 -:106DDE00000000003C02080C0000000000003C0215 -:106DEE00011400000000000036323331F7F6FF6662 -:106DFE0097C634350000000000012F085E0D3D0DD2 -:106E0E00390D350D2E08F4F5010021007F22000307 -:106E1E00018000004A004A4A01F6F731333236FF4C -:106E2E004C415945520042617365200047616D65C2 -:106E3E0020005261697365004C6F776572004C4F8C -:106E4E00434B0043617073004E756D005363726C5B -:106E5E0000202020202000534F4C415200544D5012 -:106E6E00535400818283E200E900EA00B500B600C7 -:106E7E00B700CD008301CC008A019201940121025A -:106E8E00230224022502260227022A02B300B4009E -:106E9E006F0070000603060806010606B50200FF25 -:106EAE000100010000FFFF0000010001FF000008CB -:106EBE00101818100800000102020202020202025B -:106ECE00020240227B49012701AC009E0BB70BD773 -:026EDE000B00A7 +:102020007F906F900895CF93C82F6FEF811162E278 +:1020300083E290E00E942B356FEFC11161E084E2F2 +:1020400090E00E942B356FEFC11162E085E290E0D5 +:10205000CF910C942B3580E00E94131060E086E253 +:1020600090E00E942B350E94BE0F0E94AE0F81E0CF +:102070000C9413100F931F93CF93DF93C42FD0E0D2 +:10208000CC0FDD1F2EE0629FC00DD11D11243CE856 +:10209000839FC00DD11D1124CE0187960E94173554 +:1020A000082F10E0102F0027CE0188960E941735C8 +:1020B0009801282BC901DF91CF911F910F910895AD +:1020C000462F853038F47A3028F4673018F4672FBB +:1020D0000C943A1090E080E00895CF92DF92FF9246 +:1020E0000F931F93CF93DF936C0100918A0380912C +:1020F0009802082BC7E0D0E010E0FC2EC8010C2E9F +:1021000002C0959587950A94E2F780FD0CC021974F +:10211000A0F7F12C8F2DDF91CF911F910F91FF90A0 +:10212000DF90CF900895B6018C2F0E9460100E941E +:10213000080A019761F3EECFCF93DF93EC010E9481 +:102140006D10BE010E946010DF91CF910C94080ABF +:10215000FC01808191810E949C10292F2F70929503 +:102160009F7092509E3078F4E92FF0E0EE56F94CD3 +:102170000C94EB34803F19F020F4883E20F481E089 +:102180000895843FE1F380E00895883EC0F3813FE5 +:10219000D1F7F5CF822F869586958695089583E2AF +:1021A00090E00E941735823289F484E290E00E9428 +:1021B0001735813059F485E290E00E94173591E09F +:1021C000823009F090E0892F8170089580E0FCCF83 +:1021D0001F93CF93DF93CDB7DEB768970FB6F89410 +:1021E000DEBF0FBECDBF40913F03509140036091D1 +:1021F00041037091420380914303909144030E94F4 +:102200008F1B20933F0330934003609343037093ED +:102210004403142F119510934103652F619560932A +:10222000420386E0EFE3F3E0DE01179601900D92A2 +:102230008A95E1F786E0FE013796DE01119601905E +:102240000D928A95E1F79B858C8520917001222360 +:10225000B1F0772761950CF47095072E000C880B70 +:10226000990B0E9497352AE939E949E95EE30E9412 +:10227000FB350E945F35962F812F60E010E01B83B5 +:102280006C839D838E8386E0FE013196DE011D9670 +:1022900001900D928A95E1F786E0FE013D96DE0100 +:1022A000539601900D928A95E1F786E0FE017396B0 +:1022B000DE01119601900D928A95E1F786E0FE010C +:1022C0003196AFE3B3E001900D928A95E1F786E095 +:1022D000EFE3F3E0DE01179601900D928A95E1F7A6 +:1022E00086E0E9E3F3E0DE01119601900D928A9514 +:1022F000E1F746E050E0BE016F5F7F4FCE010796E9 +:102300000E940135892B79F0E0916603F091670313 +:10231000309749F082E080933F030480F581E02DFF +:102320008FE393E0099510924103109242031092BB +:1023300043031092440386E0EFE3F3E0A9E3B3E044 +:1023400001900D928A95E1F768960FB6F894DEBF7A +:102350000FBECDBFDF91CF911F910895E6E3F2E06C +:1023600086E0DF011D928A95E9F70C94E70B1F9335 +:10237000CF93DF93CDB7DEB7AA970FB6F894DEBF41 +:102380000FBECDBF82E893E02091F100DC012D93D8 +:10239000CD01B3E08A389B07B9F78091830383307E +:1023A00009F472C0B8F4813009F449C0823009F4EC +:1023B000B5C08091E80083FF8DC280918203909127 +:1023C00083039A3008F086C2E92FF0E0E056F94C1A +:1023D0000C94EB348A3009F490C08B3009F471C04E +:1023E000893039F780918203813219F78091860311 +:1023F00090918703009711F00297D9F68091E80039 +:10240000877F8093E8008091E80082FF38C0909138 +:10241000F3008091F200029731F48091F100813055 +:1024200011F0863021F48091F10080937503809142 +:10243000E8008B778093E8000E941E07BACF809156 +:102440008203813A09F0B5CF8091E800877F8093BD +:10245000E8008091860390918703892B61F468E0FE +:1024600086E793E070E00E94D0078091E8008B77C8 +:102470008093E8009ECF60E090E080E0F3CF809111 +:1024800080038111C0CF95CF80918203813A09F0FA +:1024900090CF8091860390918703892B09F089CF93 +:1024A0008091E800877F8093E8008091E80080FFBA +:1024B000FCCF809178018093F1008091E8008E77C5 +:1024C000B9CF80918203813209F073CF8091860366 +:1024D00090918703892B09F06CCF8091E800877F6A +:1024E0008093E8000E941E07809184038093780106 +:1024F000109273030E94AE115CCF809182038132EF +:1025000009F057CF8091E800877F8093E8000E9410 +:102510001E0780918503809374034BCF80918203C3 +:10252000813A09F046CF8091E800877F8093E800E8 +:102530008091E80080FFFCCF80917403BCCF80388D +:1025400099F0823809F0C6C1809186038F70873078 +:1025500008F0C0C18093E9008091EB0085FB8827DB +:1025600080F91092E90006C080917E0390917F036C +:10257000911182609091E800977F9093E80080939A +:10258000F1001092F1008091E8008E779FC18823BE +:1025900009F48DC1823009F09DC1809184038111BD +:1025A00090C1809186038F702FEF280F263008F09E +:1025B00091C18093E9002091EB0020FF82C193300C +:1025C00031F48091EB0080628093EB007AC19091AE +:1025D000EB0090619093EB0021E030E001C0220F0E +:1025E0008A95EAF72093EA001092EA008091EB00C6 +:1025F0008860EACF81116EC1109184031F778091AA +:10260000E3008078812B8093E3008091E800877F4E +:102610008093E8000E941E078091E80080FFFCCFB5 +:102620008091E30080688093E30082E0111183E0F1 +:10263000809380034FC18058823008F04BC12091B5 +:102640008403309185032C3DE3E03E07A1F583E050 +:102650008A838AE289834FB7F894DE01139620E0DB +:102660003EE051E2E32FF0E050935700E49120FF69 +:1026700003C0E295EF703F5FEF708E2F90E0EA307D +:10268000C0F0C7968D939D932F5F243159F74FBFAC +:102690008091E800877F8093E8006AE270E0CE01D5 +:1026A00001960E94D0078091E8008B778093E80024 +:1026B00011C1C096E7CF8091860390918703432F85 +:1026C00055274330510509F44AC078F5413051058A +:1026D00009F47AC08BE590E0ECE8FBE0423051056C +:1026E00009F0F8C02091E800277F2093E8002091AE +:1026F0008803309189038217930708F49C0140E016 +:102700002115310509F065C0411163C08091E800D1 +:1027100082FDC9CF80918003882329F2853019F288 +:102720008091E80083FFF2CFBECF4132510509F41A +:102730003CC04232510509F0CDC08330910508F00C +:10274000C9C0FC01EE0FFF1FEB5DFD4F0190F08152 +:10275000E02D8E5D9D4FDC018C9190E01AC03327F7 +:1027600021303105D1F02115310561F022303105DC +:1027700009F0B0C0E9EFFBE0E4918E2F90E0E9EFC3 +:10278000FBE007C0EBE2FCE0E4918E2F90E0EBE28F +:10279000FCE0009709F49EC0A5CFE9E1FCE0E491DC +:1027A0008E2F90E0E9E1FCE0F4CF8330910508F052 +:1027B00091C0880F991FFC01E55DFD4F0190F081EC +:1027C000E02D89E090E08ECF82E190E0E7EEFBE043 +:1027D00089CF80918003882309F465CF853009F47F +:1027E00062CF8091E80083FD5ECF8091E80082FD9A +:1027F0008DCF8091E80080FF83CF9091F30080918E +:10280000F2002115310519F08830910550F041E0B2 +:10281000089709F040E08091E8008E778093E80007 +:102820006FCF44914093F1003196215031090196C8 +:10283000E8CF803809F04EC08091E800877F809310 +:10284000E800809181038093F1009DCE811142C008 +:10285000109184031230F0F58091E800877F809317 +:10286000E800109381030E941E07112311F084E0F9 +:1028700005C08091E30087FDFACF81E0809380035B +:1028800042E061EC81E00E943D0742E261EC84E0BD +:102890000E943D0742E261EC82E00E943D0742E275 +:1028A00060EC83E00E943D078091800313C080911B +:1028B0008403813079F481E0933009F080E08093E3 +:1028C0007F031092E9008091E800877F8093E80001 +:1028D0000E941E078091E80083FF0AC08091E800F3 +:1028E000877F8093E8008091EB0080628093EB000B +:1028F000AA960FB6F894DEBF0FBECDBFDF91CF9181 +:102900001F9108951F93CF93DF93162FC0917006E8 +:10291000D09171068A30D1F420915303CE018057B3 +:102920009440622F70E00E94B734281B822F66E02B +:102930000E94CB34C82FC15020F4DF91CF911F915A +:10294000089560E080E20E948214F5CF8D30E9F4B2 +:10295000C057D44020915303622F70E0CE010E94F3 +:10296000B734281B822F9E01280F311D21153240BC +:1029700018F080E0D0E0C0E0C80FD11DC059DB4F97 +:10298000D0937106C0937006D8CF96E0FE01A4E5FF +:10299000B3E001900D929A95E1F7803E90F186E0C8 +:1029A000FE0111928A95E9F7C0917006D0917106E7 +:1029B000111133C046E050E0BE0184E593E00E946F +:1029C00001359E0120573440892B91F52A5F3F4FF6 +:1029D00040915303642F70E0C9010E94B734481B33 +:1029E000463010F4240F311D211572E0370710F026 +:1029F00030E020E020593B4F309371062093700661 +:102A00009CCFF6E08F9FB0011124685B794F46E0C0 +:102A100050E0CE010E94F834C7CF9E012A5F3F4F9D +:102A2000FE012E173F0731F2808180958193F9CF07 +:102A3000C90145E0969587954A95E1F741E050E058 +:102A4000BA0102C0660F771F8A95E2F7CB01609149 +:102A50006E0470916F04862B972BB9016B5F7F4FCB +:102A6000E5E076956795EA95E1F702C0440F551FBA +:102A70006A95E2F7842B952B90936F0480936E04F4 +:102A8000A5CFFF920F931F93CF93DF93EC01F62E08 +:102A9000FC0101900020E9F78F0101501109C017D6 +:102AA000D10730F0DF91CF911F910F91FF900895E2 +:102AB0006F2D89910E948214F2CFE1E5F3E08083CB +:102AC000618324E630E042E050E0BF0184EB0C94E7 +:102AD000EE31CF93C82F60E08CE00E945D156C2F23 +:102AE00084E00E945D1561E08CE0CF910C945D154F +:102AF000CF92DF92EF92FF926B017C010E94FE0861 +:102B0000B701A60188E090E0FF90EF90DF90CF90B2 +:102B10000C943D35AF92BF92CF92DF92EF92FF922D +:102B20000F931F93CF93DF9300D00F92CDB7DEB7F3 +:102B3000082FF62E142FE22E8091690480FF4FC0DB +:102B4000E82FE695AE2FB0E0AA5EBD4F9C91909322 +:102B50004E038E7F823009F056C0413A08F040EAB9 +:102B60009E012F5F3F4F6F2D802F0E94140980918F +:102B7000690480FF11C02B8139814A8180917501E0 +:102B80009091760153E0859FF0011124E557FC4FA9 +:102B9000891798F10E948B0D80916A04801308C0F8 +:102BA00080916B048F1104C080916C04811729F00F +:102BB0008091500382608093500300936A04F092E6 +:102BC0006B0410936C04EE2051F0609169047091D5 +:102BD0006A0480916B0490916C040E9478150F90A8 +:102BE0000F900F90DF91CF911F910F91FF90EF9079 +:102BF000DF90CF90BF90AF900895418330832283C0 +:102C00008F5F3396C5CF923039F6E2508E2F8170A8 +:102C1000D82EE695F0E0E750FA4FA590B490C12C7D +:102C2000BB2460917701C61608F0B4CF2C2D30E09C +:102C3000A29EC001A39E900DB29E900D112470E043 +:102C40000E94B734802FD11016C0860F40917501B5 +:102C5000420F532F511D9A01220F331F240F351F8E +:102C600025573C4F412F113A08F040EA6F2D0E9442 +:102C70001409C394D6CF861BE9CF20E00C948A15A3 +:102C8000CF93C82F0E94BB0C823099F138F488236F +:102C9000C1F0813029F18C2FCF910895833081F1DB +:102CA0008430C9F740E56FEF8AED0E943D1687E05A +:102CB0000E94691580910001882369F310927001C8 +:102CC0000CC040E56AEA83E70E943D16809100014E +:102CD0008823A1F381E0809370010E94280FDBCF4D +:102CE00040E56FEF8CEF0E943D1685E40E94691568 +:102CF000D2CF40E56FEF80E50E943D1685E2F6CF2A +:102D000040E56FEF80EA0E943D168FE1EFCF0E9411 +:102D1000401680938A030C94E70B80918A03982FC6 +:102D20009670963019F488600C948716877FFCCFD4 +:102D300021E030E001C0220F8A95EAF720958091CA +:102D40008A0382230C94871621E030E001C0220F11 +:102D50008A95EAF780918A03822B0C948716E9E61C +:102D6000F4E0438121E1421B08F440E021E062816C +:102D700081810C948A15E9E6F4E0438121E1420F58 +:102D800008F44FEF21E0628181810C948A15E9E615 +:102D9000F4E0628121E1621B08F460E021E04381FC +:102DA00081810C948A15E9E6F4E0628121E1620FE9 +:102DB00008F46FEF21E0438181810C948A15E9E6E4 +:102DC000F4E0818121E04381628188500C948A156E +:102DD000E9E6F4E0818121E043816281885F0C941F +:102DE0008A1580916D04882319F0815080936D04B9 +:102DF0006091690470916A0480916B0490916C04F5 +:102E00000C94781580916D04833018F48F5F809353 +:102E10006D046091690470916A0480916B049091D3 +:102E20006C040C9478159091690490FF26C0917001 +:102E300081111CC09260909369048091500381605D +:102E400080935003662351F06091690470916A0485 +:102E500080916B0490916C040E94781540916C04F1 +:102E600060916B0480916A040C943D168C3010F0D4 +:102E70009661E1CF880F982BDECF08958091690489 +:102E80008695815009F48BE061E00C9413178091D2 +:102E9000690486958F5F8C3008F081E061E00C94C6 +:102EA00013178091690480FF07C0869582588F7739 +:102EB000893010F40C94471761E082E00C941317EA +:102EC000E9E6F4E083E0808311828FEF828380EA79 +:102ED00083831482AEE4B3E012968C9112978360E0 +:102EE00012968C9360817181828193810C94781504 +:102EF000AB01BC0188E190E00C943D35CF93C82F25 +:102F0000E2E6F3E0982F990F990F990F808187706F +:102F1000892B8083E3E6F3E09C2F9295969597703A +:102F20008081887F892B8083609160037091610329 +:102F300080916203909163030E9478176C2F82E066 +:102F4000CF910C945D15E0E6F3E089E8808311826F +:102F500082818C7F82836091600370916103809194 +:102F60006203909163030C947817E0E6F3E08081AC +:102F70008E7F808360916003709161038091620312 +:102F8000909163030C947817E0E6F3E08081816010 +:102F900080836091600370916103809162039091DE +:102FA00063030C9478170E94F73040E060E080E003 +:102FB0000C94080F69EE7EEF90E080E00E944935A6 +:102FC00060E082E090E00E942B3560E083E090E0DA +:102FD0000E942B351092980260E084E090E00E94FD +:102FE0002B3560E082E290E00E942B3560E085E0C6 +:102FF00090E00E942B3560E086E090E00E942B3547 +:103000006FEF87E090E00E942B3540E050E0BA017E +:1030100088E090E00E943D3560E08DE090E00E9405 +:103020002B3540E050E0BA0188E190E00E943D3548 +:1030300060E087E190E00E942B3540E050E0BA016B +:103040008CE190E00E943D3570E060E080E290E02D +:103050000E9449350E94A31780E00E9413100E942D +:103060002B1040E050E0BA018FE090E00E943D3527 +:1030700040E050E0BA0183E190E00C943D350F93BD +:103080001F93CF93DF9300D000D0CDB7DEB7609110 +:10309000CA027091CB028091CC029091CD020E9425 +:1030A0003208643671058105910588F10E94C00ED1 +:1030B000882379F10E944E086E5F7F4F8F4F9F4F9C +:1030C00069837A838B839C8380912D0190912E015B +:1030D0008B549D4F40912C0150E04530510510F02C +:1030E00044E050E0BE016F5F7F4F0E940E3584E0E8 +:1030F00090E00E940334892BD9F40E944E0860931B +:10310000CA027093CB028093CC029093CD0281E0EF +:1031100010C00E944E080091D7021091D802209151 +:10312000D9023091DA02600F711F821F931FC4CF42 +:1031300080E00F900F900F900F90DF91CF911F9133 +:103140000F910895BF92CF92DF92EF92FF920F936B +:103150001F93CF93DF93B82EEB01F42E69016881A2 +:1031600079818A819B810E943208643671058105CC +:10317000910510F4FF2019F1EB2C0B2C000CFF082B +:103180008B2D9AE08902F0011124EE5FFE4F8381BE +:1031900094818B549D4F428150E00417150708F429 +:1031A000A801B6010E940E35C7010E940334892B85 +:1031B00089F40E944E08688379838A839B8381E027 +:1031C000DF91CF911F910F91FF90EF90DF90CF9003 +:1031D000BF90089580E0F4CF0F931F93CF93DF93B8 +:1031E0000F92CDB7DEB780915E0389832091C9022B +:1031F00090E041E02817190609F440E001E010E0F2 +:103200009E012F5F3F4F62ED72E086E00E94A218A0 +:103210000F90DF91CF911F910F9108950F931F93FE +:10322000CF93DF93CDB7DEB728970FB6F894DEBF04 +:103230000FBECDBF85E0E9E6F4E0DE011196019016 +:103240000D928A95E1F780914E0390914F03A091E2 +:1032500050038E839F83A88741E08885811101C038 +:1032600040E008E010E09E012F5F3F4F6EEC72E0FF +:1032700085E00E94A21881111092500328960FB683 +:10328000F894DEBF0FBECDBFDF91CF911F910F919C +:1032900008956F927F928F929F92AF92BF92CF923A +:1032A000DF92EF92FF920F931F93CF93DF930F92D2 +:1032B000CDB7DEB7862E5A016901682E880F7708D0 +:1032C000C3010E940334892B09F07BC08AE0869DEC +:1032D000F001879DF00D1124EE5FFE4F458150E017 +:1032E0004115510511F041E050E08AE0869DF00162 +:1032F000879DF00D1124EE5FFE4F668177816B5440 +:103300007D4FCE0101960E940E35F50160817181DD +:10331000828193810E94320864367105810591058E +:1033200040F4B701C8010E94E3089981891709F4A4 +:103330004FC0082C000C9908C4010E940334892B4B +:1033400091F0B12C8B2D0F90DF91CF911F910F91A8 +:10335000FF90EF90DF90CF90BF90AF909F908F90B5 +:103360007F906F9008958AE0889DF001899DF00D0F +:103370001124EE5FFE4F458150E0E416F50608F497 +:10338000A7018AE0889DF001899DF00D1124EE5F70 +:10339000FE4F668177816B547D4FC6010E940E35CA +:1033A000B701C8010E94E30899818913CACF0E941E +:1033B0004E08F5016083718382839383BB24B394A9 +:1033C000C1CFB12CA701B801C6010E940E35BACFFA +:1033D000BB24B394F7CFCF92DF92EF92FF920F937B +:1033E0001F93CF93DF9300D000D00F92CDB7DEB7FD +:1033F0006B0185E0E82EF12C06EB12E09E012F5FB9 +:103400003F4F4DEA52E061E080E00E944919882375 +:1034100049F095E0FE013196A8EAB2E001900D92E4 +:103420009A95E1F795E0E8EAF2E0D60101900D9275 +:103430009A95E1F70F900F900F900F900F90DF91FA +:10344000CF911F910F91FF90EF90DF90CF90089553 +:1034500090E080E00E942535893E9E4F11F40C9447 +:10346000CF1080E008951F920F920FB60F92112493 +:103470002F933F934F935F936F937F938F939F937C +:10348000AF93BF93CF93DF93EF93FF93D091E90076 +:10349000DF708091EC00C82FC17080FDC0E81092F1 +:1034A000E9008091F000877F8093F00078940E947B +:1034B000B7111092E9008091F00088608093F000CD +:1034C000CD2BCF70C093E900FF91EF91DF91CF91A9 +:1034D000BF91AF919F918F917F916F915F914F912C +:1034E0003F912F910F900FBE0F901F9018951F9234 +:1034F0000F920FB60F9211242F933F934F935F9328 +:103500006F937F938F939F93AF93BF93EF93FF93AB +:103510008091E10082FF09C08091E20082FF05C036 +:103520008091E1008B7F8093E1008091DA0080FF41 +:1035300024C08091D80080FF20C08091DA008E7F67 +:103540008093DA008091D90080FF9DC080E189BD21 +:1035500082E189BD09B400FEFDCF81E08093800344 +:1035600080917203811109C00E94A4060E946F0716 +:103570008091E20084608093E2008091E10080FF0E +:1035800017C08091E20080FF13C08091E2008E7F1F +:103590008093E2008091E20080618093E20080915C +:1035A000D80080628093D80019BC85E080938003A6 +:1035B0008091E10084FF2BC08091E20084FF27C04E +:1035C00080E189BD82E189BD89B5982F917080FF26 +:1035D000FBCF8091D8008F7D8093D8008091E1004F +:1035E0008F7E8093E1008091E2008F7E8093E200E5 +:1035F0008091E20081608093E200809181038823C2 +:1036000009F447C084E08093800380918003809117 +:10361000E10083FF27C08091E20083FF23C08091F7 +:10362000E100877F8093E10082E080938003109225 +:1036300081038091E1008E7F8093E1008091E20020 +:103640008E7F8093E2008091E20080618093E200AF +:1036500042E060E080E00E943D078091F0008860D9 +:103660008093F000FF91EF91BF91AF919F918F9167 +:103670007F916F915F914F913F912F910F900FBE6E +:103680000F901F90189519BC10928003109272032E +:1036900074CF8091E30087FD93E090938003B5CFD2 +:1036A00078941F921FB61F9211248F939F93AF930C +:1036B000BF9380916B0390916C03A0916D03B091C7 +:1036C0006E030196A11DB11D80936B0390936C0353 +:1036D000A0936D03B0936E03BF91AF919F918F91B3 +:1036E0001F901FBE1F9018959C014FB7F8948091B2 +:1036F0006B0390916C03A0916D03B0916E034FBF6B +:10370000821B930B08952FB7F89480916B039091CF +:103710006C03A0916D03B0916E032FBF0895AF921B +:10372000BF92DF92EF92FF920F931F93CF93DF939D +:10373000CDB7DEB761970FB6F894DEBF0FBECDBF31 +:103740004C87888B998BE52ED62EF72E5E0127E0CD +:10375000A20EB11C85E0F50111928A95E9F78091DE +:103760004D038A3008F095C080914B0390914C0333 +:103770000E94741B089708F48CC004E610E025E052 +:1037800030E0A50164E084E10E944232892B09F017 +:10379000DEC010924D038B8587FDD1C0E894E0F820 +:1037A0008091490390914A03009709F0C2C08F812C +:1037B0009885891708F091C0981B892F41E02091C6 +:1037C000710130917201889FC001112455E0589F0A +:1037D000F001599FF00D1124E29FB001E39F700D9D +:1037E000F29F700D1124660F672F661F770B71957E +:1037F000442319F071956195710980914703909167 +:103800004803680F791F89859A85891708F068C071 +:10381000981B892F41E0889FC001112455E0589FD3 +:10382000F001599FF00D1124E29FC001E39F900D1C +:10383000F29F900D1124880F892F881F990B919565 +:10384000442319F091958195910920914503309178 +:103850004603820F931F603871050CF444C06F5704 +:10386000710970934803609347033FE7D32E803874 +:1038700091050CF44BC08F579109909346038093A8 +:1038800045039FE7F92E0E94831B90934C0380937E +:103890004B03ED86DE86FF8686E0FE013C96DE0168 +:1038A000119601900D928A95E1F729813A814B8119 +:1038B0005C816D817E8180E090E061960FB6F89426 +:1038C000DEBF0FBECDBFDF91CF911F910F91FF9053 +:1038D000EF90DF90BF90AF900895891B40E06FCFCD +:1038E000891B40E098CF6138FFEF7F074CF46158A7 +:1038F0007F4F709348036093470321E8D22EB7CFE0 +:10390000D62E1092480310924703B1CF81382FEF83 +:1039100092074CF481589F4F909346038093450340 +:1039200081E8F82EB0CFF82E10924603109245038E +:10393000AACF019790934A0380934903A4CF689438 +:10394000E0F884E00E94691584E190E0F3CF809173 +:103950004D038F5F80934D0396CF5F926F927F925E +:103960008F929F92AF92BF92CF92DF92EF92FF928F +:103970000F931F93CF93DF9300D000D00F92CDB75A +:10398000DEB77C01FC0183819481892B31F0808139 +:10399000918189238F3F09F0DDC60F900F900F9022 +:1039A0000F900F90DF91CF911F910F91FF90EF90AB +:1039B000DF90CF90BF90AF909F908F907F906F904F +:1039C0005F9008950E946D10182F682F89819A8149 +:1039D0000E94BB0B69817A81812F0E9460108C014B +:1039E000F7018281882361F0F801E65EFC45ED3045 +:1039F000F10530F4E655F94C0C94EB340E94C417F1 +:103A0000D0906003D0FE1CC08D2D86958370F70189 +:103A10009281992309F460C1823090F4B701C80102 +:103A20000E948608882361F0D694D694D69480911B +:103A3000610383708295880F807E8D290E946915AD +:103A4000F7018281882309F47AC6C80182519F4513 +:103A5000409708F036C68FEF93E00E941735025169 +:103A600093EEA92E92E0B92E811197CF011138C1A2 +:103A70001C821B82662463948AE0582E85010F5FA6 +:103A80001F4FC5010E94173589831A82882309F4C4 +:103A900084CF9FEF980F933008F031C18A836982F9 +:103AA00032E0A30EB11CC8010E9417358B83882316 +:103AB00009F473CF8E010F5F1F4FF801208122237D +:103AC000E9F2213009F055C191818281913009F0EC +:103AD00018C10E5F1F4F6AE070E0893311F460E592 +:103AE00070E00E94F30E13C10E94B51789CF809138 +:103AF000600380FF0DC00E94B51760916003709154 +:103B0000610380916203909163030E94781778CFDC +:103B10000E94C417F2CF0E94A31772CF9091600346 +:103B2000892F86958F5F8370880F997F892B80936B +:103B30006003982F9670963001F7897F8093600319 +:103B4000DCCF90916103892F8B7F92FF84608093FB +:103B50006103D3CF80916003982F969596959695A3 +:103B60008091610383708295880F807E892B8C37CA +:103B700098F48F5F282F220F220F220F909160035D +:103B80009770922B909360038295869583709091A5 +:103B900061039C7F892BDBCF81E0ECCF80916003B8 +:103BA000982F96959695969580916103837082954E +:103BB000880F807E892B11F08150DCCF8BE7DACF24 +:103BC00030916103932F9695969596952091620377 +:103BD000822F83708295880F807E892B90E00196DA +:103BE000482F440F440F440F3770342B3093610338 +:103BF00035E0969587953A95E1F783702C7F822B77 +:103C0000809362037ACF30916103932F96959695B6 +:103C1000969520916203822F83708295880F807E13 +:103C2000892B8150990BDCCF8091620382FF12C0F7 +:103C30008B7F809362036091600370916103809138 +:103C40006203909163030E94781760E081E00E9414 +:103C50005D15D6CE8460809362036091600370919D +:103C6000610380916203909163030E94781760E082 +:103C70008CE00E945D1564E182E00E945D1565E0C4 +:103C800081E00E945D1561E08CE0E1CF80916203EC +:103C9000982F969596959695809163038295880FB7 +:103CA000807E892B883720F4865F0E947E17A8CEFD +:103CB00088E7FBCF80916203982F9695969596950D +:103CC000809163038295880F807E892B843110F068 +:103CD0008A50EBCF84E1E9CF882309F4B1CE9ECEA0 +:103CE000A114F4E0BF0609F458CEC5010E941735AF +:103CF000811101C001502FEFA21AB20AB7CE5801AC +:103D0000D9CE923039F40E5F1F4F0E94470C0F5FDF +:103D10001F4FD3CE933029F40E5F1F4F0E940E0C1D +:103D2000F6CF943019F00F5F1F4FF1CF0E5F1F4F8A +:103D300030E020E0B8016F5F7F4FF8014181805390 +:103D4000990B8A30910550F02150310900F38FE929 +:103D50009FE00197F1F700C00000F6CF529EF001FE +:103D6000539EF00D11249C012E0F3F1F842F8B01B9 +:103D7000E1CFE22FF0E0E754FE4F7490822F86955A +:103D80008695869590E0FC01E755FE4FE4902770FC +:103D9000F12C022E02C0F594E7940A94E2F7E1E0D8 +:103DA000EE22FF24FC01E756FE4FC490D12C022ED8 +:103DB00002C0D594C7940A94E2F7F1E0CF22DD2443 +:103DC000FC01E757FE4F8490912C02C09594879494 +:103DD0002A95E2F721E082229924E114F10419F0F6 +:103DE00081EE0E94470CC114D10419F086EE0E94A6 +:103DF000470C39E36AE070E0731202C060E570E0DE +:103E0000872D0E94F30ECD2819F086EE0E940E0C2D +:103E1000EF2819F081EE0E940E0C892809F477CF63 +:103E20006AE070E08CE25DCE81E00E94A41603C0DF +:103E300081E00E9498160F900F900F900F900F90B6 +:103E4000DF91CF911F910F91FF90EF90DF90CF9076 +:103E5000BF90AF909F908F907F906F905F900C94E9 +:103E60008D1682E0E2CF003E110509F457C008F03C +:103E70004DC00C32110509F487C1F70192819111EF +:103E800086C28091730382720A3CFCE51F0709F425 +:103E90005EC208F0B4C1053C3CE5130709F443C217 +:103EA00008F098C1033C5CE5150709F41DC208F051 +:103EB00035C2023C1C4509F4C7C1F70100811181DC +:103EC000992309F47EC2C8010E946D10D82E682F74 +:103ED000C8010E94BB0BB8018D2D0E9460100E948A +:103EE000080A182FB82EF70122814581342F329508 +:103EF0003F70892F82958F70C82ED12C8C3008F09E +:103F000098C2F601E954F94C0C94EB34013E1105CA +:103F100009F4A5C0043E110509F0AFCF882309F4C8 +:103F200030C181E08093F20280918A030E94BB0C31 +:103F3000813009F0A2CF83E30E9469159ECF033838 +:103F4000FFE51F0709F46EC060F5053F110509F490 +:103F500014C140F4043F110509F08FCF61E00E94C5 +:103F6000CC0C8BCF063F110509F409C102383FE59F +:103F7000130709F082CF882309F47FCF81EE0E94D6 +:103F8000470C83EE0E94470C8FE40E94470C8FE49D +:103F90000E940E0C83EE0E940E0C81EE0E940E0C0D +:103FA0006CCF05384FE5140709F4B5C008F45AC0C2 +:103FB00006389FE5190709F4C6C00738EFE51E0764 +:103FC00009F05BCF882309F4E8CC87E20E94470C14 +:103FD000FFEF28EA31E0F15020403040E1F700C027 +:103FE00000008CE20E94470C87E20E940E0C8BE1DD +:103FF0000E94470C4FEF50EE80E04150504080400F +:10400000E1F700C000008CE20E940E0C8BE10E94E0 +:104010000E0C40E56FEF84EB0E943D1681E080932B +:104020003E02BBCC882309F428CF81EE0E94470CC6 +:1040300083EE0E94470C80E50E94470C80E5A8CFE4 +:10404000809342021093410200934002882321F0A2 +:1040500081E08093F30211CF1092F3020ECF809390 +:104060003F02F0CF882379F180913F02882349F005 +:10407000809140020E940E0C80EE0E94470C8AE262 +:104080000CC0809142028823D1F3809140020E94AB +:104090000E0C80EE0E94470C8CE40F900F900F9056 +:1040A0000F900F90DF91CF911F910F91FF90EF90A4 +:1040B000DF90CF90BF90AF909F908F907F906F9048 +:1040C0005F900C94470C8AE20E940E0C8CE40E94D4 +:1040D0000E0C80EE0E940E0C80913F02811105C0F3 +:1040E00080914202882309F458CC80914002D5CFB8 +:1040F000882309F4C2CE80913E02882309F4BDCE04 +:104100000E94831B9093A1028093A00210923E0212 +:1041100010920101B2CE882309F420CF8091700162 +:10412000811104C080910001882339F01092700140 +:10413000109200010E94280FA0CE81E080937001B0 +:1041400080930001F7CF882309F408CF80913D02C6 +:10415000882349F080EE90E0909372018093710182 +:1041600010923D02E7CF86E690E090937201809333 +:10417000710181E080933D02DDCF62E0F0CE64E02A +:10418000EECE1092F20279CE882331F081E0809356 +:10419000F5021092680171CE1092F5026ECE88235E +:1041A00049F080918A030E94BB0C813019F482E3AC +:1041B0000E946915F7018281882309F4B2C28091B7 +:1041C0008A030E94BB0C813009F0ABC284E30E94D9 +:1041D0006915A7C2073C2CE5120709F4AEC008F424 +:1041E000A7C0083C4CE5140709F4ACC0093C1C45C9 +:1041F00009F063CE4FEA56E16BEB76E179C0043DFE +:10420000ECE51E07A8F40E3CFCE51F0708F0C5CB43 +:104210000C3C2CE5120709F49FC041EF56E162E027 +:1042200077E10D3C1C4508F463C061E081E046C0C5 +:10423000053D4CE5140709F4B0CB08F492C00D35E8 +:104240001D4509F4AACB39CE8091690480FF31C0A5 +:104250008E7F809369046091690470916A048091F3 +:104260006B0490916C040E947815809150038160DA +:10427000809350039FEFE0E7F2E09150E040F04080 +:10428000E1F700C000000F900F900F900F900F907B +:10429000DF91CF911F910F91FF90EF90DF90CF9022 +:1042A000BF90AF909F908F907F906F905F900C9495 +:1042B0008B0D81608093690461E086950F900F906B +:1042C0000F900F900F90DF91CF911F910F91FF9062 +:1042D000EF90DF90CF90BF90AF909F908F907F90A6 +:1042E0006F905F900C9413174EE357E167E477E10A +:1042F0000F900F900F900F900F90DF91CF911F9123 +:104300000F91FF90EF90DF90CF90BF90AF909F9074 +:104310008F907F906F905F900C94F90847E457E17D +:104320006EE377E1E5CF4FED56E168EE76E1E0CF61 +:1043300048EE56E16FED76E1DBCF47EC56E163EDF9 +:1043400076E1D6CF43ED56E167EC76E1D1CF4BEB8A +:1043500056E16FEA76E1CCCF42E057E161EF76E1DA +:10436000C7CF0F900F900F900F900F90DF91CF91CC +:104370001F910F91FF90EF90DF90CF90BF90AF9083 +:104380009F908F907F906F905F900C9451170E3D8F +:104390001C4509F092CD0F900F900F900F900F9049 +:1043A000DF91CF911F910F91FF90EF90DF90CF9011 +:1043B000BF90AF909F908F907F906F905F900C9484 +:1043C000DA17C8010E94930BD82E85CD092F0F70E4 +:1043D000907F11F00295007F812F2223C9F00023E6 +:1043E00069F090E2910F983010F011110BC080919C +:1043F0007303082B009373030E94720B812F0E949A +:10440000470C17C080919702082B00939702F4CFB6 +:104410000E940E0C002369F00095105E183010F019 +:10442000B11027C0809173030823009373030E9487 +:10443000720B98E0C91AD108E4E0CE16D10408F056 +:10444000ACCA0E94E30E0F900F900F900F900F9048 +:10445000DF91CF911F910F91FF90EF90DF90CF9060 +:10446000BF90AF909F908F907F906F905F900C94D3 +:104470004B0E80919702082300939702D8CF892F83 +:104480008F70907F903211F08295807FF1E0BF12A3 +:104490000CC0222329F0333060F60E94040CC9CFEF +:1044A000323038F60E94F90BC4CF222341F0332377 +:1044B000A1F340FFA3CF4F70F7014583EECF332325 +:1044C00089F3193309F0F5C0FFEF27EE33E0F1501F +:1044D00020403040E1F700C00000812F0E940E0C08 +:1044E000A8CF892F86958695837061F0813009F079 +:1044F000A0CF812F9370211102C090E080E00E9434 +:104500005A0897CF812F9370211102C090E080E06C +:104510000E9470088ECF892F8370A1F5211189CF59 +:10452000812F829586958770880F880F412F4F7055 +:10453000082E01C0440F0A94EAF7212F207114FFBE +:1045400007C02FE030E001C0220F8A95EAF72095DE +:10455000969596959370923081F0822F842B9330AC +:1045600030F480919802913029F0242B82230E940C +:10457000F50B5FCF842B822BFACF242B80919802EE +:104580008227F5CF8695222311F0892F8170882309 +:1045900009F44FCF812F829586958770880F880FF9 +:1045A000412F4F70082E01C0440F0A94EAF7212FC3 +:1045B000207114FF07C02FE030E001C0220F8A9560 +:1045C000EAF72095969596959370923081F0822F18 +:1045D000842B933030F480918A03913029F0242B7E +:1045E00082230E94871625CF842B822BFACF242B7F +:1045F00080918A038227F5CF092F0F70222329F09B +:10460000802F0E94A416812F48CF812F0E94F90B82 +:10461000802F0E9498160DCF812FE1EF1E1789F190 +:10462000E11750F0F0EF1F17B9F02223B1F131116B +:10463000E5CE892F8F7129C042EF141749F153EF4E +:104640001513F3CF80E0222361F29F7181E001C056 +:10465000880F9A95EAF7C5CF222379F0323008F017 +:10466000E8CE292F2F7181E090E001C0880F2A95B4 +:10467000EAF790918A038927B4CF333008F0D9CE76 +:10468000F0CF892F8F71222321F20E94A416D1CE60 +:10469000892F8F712223C9F3BCCF332379F089335B +:1046A00041F48FEF97EEE3E081509040E040E1F776 +:1046B00012CF8FE39CE90197F1F70DCF892F8F710E +:1046C000A8CF0031FFE51F0709F4AECB01312FE57C +:1046D000120709F4C6CB0E944E086093FA02709349 +:1046E000FB028093FC029093FD02F7018281053E5C +:1046F000110509F4A5CC08F022CC0132110508F00F +:10470000B2CB0E31110508F0F3CC0A30110509F4D3 +:1047100046CD0531110509F44DCD0930110509F0DB +:10472000ACCBF7018281882309F4A7CB80918A035F +:104730000E94BB0C813009F0A0CB81E3FDCB00319E +:104740003FE5130709F474CB01314FE5140769F60F +:1047500082E06FCB85E0DE01119601900D928A9583 +:10476000E1F7F701228189819A8121112BC90E94E9 +:10477000930B182F2FC91F93CF93DF938091630260 +:10478000807FA9F480916002882389F0809195024E +:10479000D091640260915E0270915F02A09161020B +:1047A000B0916202C62FC72316E0D81304C0DF9170 +:1047B000CF911F91089590E0109711F0CF3F19F419 +:1047C00001968770F2CF189F9001199F300D112428 +:1047D000F901EB59FD4F41814713F2CF4081461358 +:1047E000EFCF42814111ECCF438154814A1B5B0BD7 +:1047F000403A510528F7809163028F708061809361 +:104800006302F901E659FD4F80818F7080618083DA +:104810008EE592E00E94AD1CDF91CF911F910C9428 +:10482000890BAF92BF92CF92DF92EF92FF920F93DC +:104830001F93CF93DF93CDB7DEB761970FB6F89490 +:10484000DEBF0FBECDBF8C0185E0F801DE011D96F5 +:1048500001900D928A95E1F7F801E2808EE5A82E8D +:1048600082E0B82E6091610270916202611571055B +:1048700009F432C190915E0240915F02892F842336 +:104880008F3F09F429C120813181C380D480F09009 +:104890006002F601E61BF70BFF2009F4E8C08091E7 +:1048A0006302582F507FE03AF10508F0ABC0511178 +:1048B00077C0FE2C431321C092131FC0E1101DC00E +:1048C0008F70806180936302C5010E94AD1C80914E +:1048D0006302F80185838F2D61960FB6F894DEBFD1 +:1048E0000FBECDBFDF91CF911F910F91FF90EF9041 +:1048F000DF90CF90BF90AF900895CD2829F0822F00 +:1049000083238F3F09F003C180E0F82FF170DF2E81 +:1049100080FF3CC0809195024091640256E0841370 +:1049200015C02D873E878D859E850E949C10292F5E +:1049300022952F702230F0F0243018F59F70F1F09E +:10494000F8019581907FD1F4D12C1EC090E0589F42 +:10495000F001599FF00D1124EB59FD4F6181361381 +:1049600006C06081261303C06281E6120FC0019663 +:104970008770D5CF9F7011F0882331F3805E883027 +:1049800018F3C8010E94AD1CFD2CA5CFEE2009F440 +:10499000A2CF80916302816080936302F12C9BCF50 +:1049A000431306C0921304C0F801EE2009F479C045 +:1049B000C8010E94A810882309F1EE20F9F0809127 +:1049C0006302803270F020915E0230915F0238877E +:1049D0002F831986DB86CA868C87CE0107960E94B4 +:1049E000AD1C86E0F801AEE5B2E001900D928A952B +:1049F000E1F70E94BB23FF24F3946DCFC8010E940E +:104A0000AD1CF9CF51110AC08EE592E00E94AD1C99 +:104A100086E0F50111928A95E9F7C0CF43130FC0E4 +:104A200092130DC0E1100BC0F8018583C8010E94EC +:104A3000AD1C86E0F50111928A95E9F74CCFC801CB +:104A40000E94A8108823D1F2EE20C1F28091630267 +:104A5000803238F220915E0230915F023A832983DE +:104A60001B82DD82CC828E83CE010196B8CFE03AE4 +:104A7000F105F8F6FE2CEE2009F243131FC0921345 +:104A80001DC08091630280FD10C0982F907F69F057 +:104A9000F8018583903F31F0982F907F905F8F7061 +:104AA000892B8583C8010E94AD1C86E0F801AEE524 +:104AB000B2E001900D928A95E1F70DCFC8010E94F6 +:104AC000A81081118ECF8091630281608093630270 +:104AD000C8010E94AD1CFFCEEE2009F48FCFC801A3 +:104AE0000E94A810F82E882309F488CF86E0F801E8 +:104AF000AEE5B2E001900D928A95E1F780915E02F9 +:104B000090915F020E949C100E94BB23E4CE81E042 +:104B10008E25FBCE1F93CF93DF93CDB7DEB767977C +:104B20000FB6F894DEBF0FBECDBF4B8B5C8B6D8B89 +:104B30007E8B8F8B6111109297021A8A198A85E0F9 +:104B4000FE017396DE011D9601900D928A95E1F7A4 +:104B500086E0FE013D96DE01179601900D928A9542 +:104B6000E1F7CE0107960E941124882389F016E010 +:104B7000809195029091640289134BC067960FB69D +:104B8000F894DEBF0FBECDBFDF91CF911F91089586 +:104B900086E0FE013796DE01119601900D928A950E +:104BA000E1F78A859B85892B11F38F81988589236D +:104BB0008F3FE9F22091640230E0C90101968770CD +:104BC0009927409195024817190681F410927303B2 +:104BD0000E94AE11109264021092950286E0EEE5FA +:104BE000F2E0DF011D928A95E9F7C1CF96E0929F2E +:104BF000D001939FB00D1124AB59BD4FFE013196EA +:104C000001900D929A95E1F7809364020E94890BBE +:104C1000AECF819FC00111248B599D4F0E9411245A +:104C2000882309F4ABCF8091950290E001968770BC +:104C30009927809395029CCF7F928F929F92AF92FB +:104C4000BF92CF92DF92EF92FF920F931F93CF9379 +:104C5000DF93CDB7DEB764970FB6F894DEBF0FBE13 +:104C6000CDBF8E010F5F1F4F8AE0D8011D928A953C +:104C7000E9F79FE4C92E91E0D92EF12CE12CAA246A +:104C8000A394B12C3FE4832E31E0932EF601819161 +:104C90006F018F3F09F443C0F894E82FE295EF705D +:104CA000F0E021A18F70A50102C0440F551F8A9525 +:104CB000E2F7CA01922F982B91A392A180958923A4 +:104CC00082A30E94AC0900C0E8E4F1E0712C31E05D +:104CD00021912F3F09F479C0A22FA295AF70B0E0C7 +:104CE00090968C9190E02F7002C0959587952A95AB +:104CF000E2F780FD6AC0832F782A330F8E169F0655 +:104D000039F7F601319780818F3F11F00E94AE098B +:104D100050EA5A95F1F7F801EE0DFF1D70828FEF02 +:104D2000E81AF80AA5E0EA16F10409F0AFCF4AE064 +:104D300050E0B8018DED92E00E9401357C01892B95 +:104D400041F08AE0F801ADEDB2E001900D928A9554 +:104D5000E1F71091E802E114F104C9F181E08093D8 +:104D60009B020E94831B90939A02809399028091E8 +:104D7000990290919A020E94741B069770F0ADED13 +:104D8000B2E0E12FF0E0E15DFC4F8D91819322E0F4 +:104D9000A23EB207D1F710929B0281E090E0EF288B +:104DA000D1F064960FB6F894DEBF0FBECDBFDF9191 +:104DB000CF911F910F91FF90EF90DF90CF90BF9018 +:104DC000AF909F908F907F90089580E095CF8091D5 +:104DD0009B028111CCCF0E94C00ED82EE091E80238 +:104DE000882309F4E1C07E0140E1E40EF11C85E076 +:104DF000D7011D928A95E9F70E2F10E0015D1C4F37 +:104E00008091D6028A3008F098C04BEE59E1B70184 +:104E1000C8010E947C0E882309F4B2C042EA58E21D +:104E2000B701C8010E947C0E882309F4A9C04FE392 +:104E300058E1B701C8010E947C0E882309F4A0C084 +:104E40004EE059E1B701C8010E947C0E882309F4A5 +:104E500097C04CEE58E1B701C8010E947C0E882330 +:104E600009F48EC01092D6028091E70290E045E0EE +:104E700050E0B701815D9C4F0E94013521E02093F5 +:104E8000A602892B09F06FC0D12C809101018111FC +:104E900014C08091A0029091A1020E94741B813ADB +:104EA0009F4058F040E56FEF8CEF0E943D1681E087 +:104EB000809301018CE00E9469158EE9E82E82E062 +:104EC000F82E10E000E0D7018D917D018823D1F00C +:104ED0008695F80109F465C0E850FE4F8081918104 +:104EE0009C878B871D860E94831B8160782F9F87FC +:104EF0008E87F701319710824B855C856D858F8594 +:104F00000E948A250E5F1F4F04301105E1F6609163 +:104F1000FA027091FB028091FC029091FD020E94C6 +:104F2000320861367A4E8105910528F040E060E054 +:104F300080E00E94080F8D2D34CF80919C029091CB +:104F40009D020E94741B843F914008F05ECF8091C7 +:104F5000A602882309F498CF85E0F70111928A957B +:104F6000E9F71092A602A091E702B0E0A15DBC4F64 +:104F700085E0FE01709601900D928A95E1F785CF4C +:104F80008091D6028F3F31F08F5F8093D6028A30B6 +:104F900008F46ACF0E94831B90939D0280939C0229 +:104FA000D6CFEC50FE4F9ACFF0E0E15DFC4FF89485 +:104FB00085E0A6EBB2E001900D928A95E1F765E0FD +:104FC00070E086EB92E00E94E3088093B5020E94B5 +:104FD000AC09F894E091F002F0E0E351FD4F8081DC +:104FE0008B878093BC0261E070E0CE010B960E943B +:104FF000E3088093BB020E94AC09F894C090BD0204 +:10500000D090BE02E090BF02F090C0028091A20258 +:105010009091A302A091A402B091A502C816D9064E +:10502000EA06FB06D1F0C092A202D092A302E0925F +:10503000A402F092A5020E94C00E81110EC00E942F +:105040004E08C61AD70AE80AF90AC092D702D092C7 +:10505000D802E092D902F092DA020E94AC09F894E8 +:105060008091C8028823F1F080FF0DC08091C102B9 +:1050700080FF25C09091690491609093690460E07D +:1050800086950E9413178091C80281FF09C020E015 +:105090004091C4026091C3028091C2020E948A15AD +:1050A0001092C8020E94AC09F8948091C90288232A +:1050B00049F00E94860F0E94AC0980E072CE0E94E7 +:1050C000670EE1CF0E946B0FF6CFEF92FF920F9326 +:1050D0001F93CF93DF9300D000D00F92CDB7DEB7F0 +:1050E000162FE82EF12CC701880F991F662339F17E +:1050F00088509E4FFC01808191819A83898301E0D1 +:105100000B830E94831B8160782F9D838C83F70122 +:10511000E256FD4F0127110F102B108349815A8150 +:105120006B818D810F900F900F900F900F90DF91FA +:10513000CF911F910F91FF90EF900C948A258C5086 +:105140009E4FD8CFCF92DF92EF92FF920F931F9393 +:10515000CF93DF930F92CDB7DEB7EE24E394F12C1B +:105160000CEB12E09E012F5F3F4F41EB52E063E0FA +:1051700082E00E944919082F882321F1C090EA0299 +:105180008C2D90E09C0123513D4F79011981F9014B +:105190008081181BD12E80E00AC0DA94F70180814B +:1051A0008F5F808360E08C2D0E946528802F1D1406 +:1051B000A4F3912F17FD90E0191B11110EC081115E +:1051C0000E94700B802F0F90DF91CF911F910F9154 +:1051D000FF90EF90DF90CF9008951F5FF7018081DF +:1051E0008150808361E08C2D0E946528802FE5CF5F +:1051F0001F921FB61F9211248F939F93AF93BF935B +:1052000080916A03811113C080916B0390916C03AC +:10521000A0916D03B0916E034196A11DB11D8093C5 +:105220006B0390936C03A0936D03B0936E03BF91D7 +:10523000AF919F918F911F901FBE1F901895CDB772 +:10524000DEB7E0970FB6F894DEBF0FBECDBF84B7D0 +:10525000877F84BF0FB6F894A8958091600088611D +:1052600080936000109260000FBE80E890E00FB65F +:10527000F89480936100909361000FBE85B78068B9 +:1052800085BF85B7806885BF8AEA99E0909333022D +:10529000809332020E94A4060E946F078091E20070 +:1052A00084608093E2007894809180038823A1F049 +:1052B0001091E9001F709091EC00892F817090FD92 +:1052C00080E8182B1092E9008091E80083FD0E948D +:1052D000B7111F701093E90082E084BD93E095BD83 +:1052E0009AEF97BD80936E001092D7021092D80269 +:1052F0001092D9021092DA020E94CF10811102C0DE +:105300000E942B100E94C00E809359018091590178 +:10531000882309F4C9C01092730185E28093740157 +:105320000E94C00E81110E94F632809159018111B4 +:105330002FC0FE01359686E0DF011D928A95E9F7C0 +:1053400086E6898387E98A8386EC8B8384E38C8372 +:1053500085E38D833497AFE4B1E0CE010B962191C4 +:105360002D938E179F07D9F787E0E9E7F1E0DE017B +:10537000919601900D928A95E1F7FE01B196A8E40D +:10538000B1E0CE01889621912D938E179F07D9F712 +:105390008091590195E0811190E09093E80285E0B9 +:1053A000891B8093E7020FE411E084E5E82E81E099 +:1053B000F82EF80181918F018F3F11F00E94AE0904 +:1053C000E016F106B1F708E411E0BFE4EB2EB1E01E +:1053D000FB2ED8018D918D018F3F11F00E94AE09F7 +:1053E000E016F106B1F78AE0EFE2F3E0DF01282FE3 +:1053F0001D922A95E9F7EDEDF2E0DF011D928A9505 +:10540000E9F70E94281A811102C00E94DA1782E08F +:1054100090E00E9417358093240384E090E00E947E +:105420001735182F82E290E00E941735982F812FB0 +:105430009093DC028093DB020E941C26EFE7FBEBDB +:105440003197F1F700C000000E941C2680912F03C5 +:1054500080FF2EC06FEF7FEF90E080E00E94493523 +:1054600081E08093E00080E28093D8001092C90030 +:105470008FE19EE40197F1F700C0000087E090EB18 +:10548000DC018093720690937306A0937406B09328 +:10549000750688E19CE00FB6F894A89580936000AB +:1054A0000FBE90936000FFCF85E28093730136CFEB +:1054B00083E090E00E9417350E94F50B80918A03EB +:1054C0000E9440160E94281A811102C00E94DA1719 +:1054D00088E190E00E941F35609360037093610340 +:1054E0008093620390936303672B682B692B11F4FD +:1054F0000E94A3170E94F73067E081E00E945D15CB +:1055000065E586E10E945D1563E687E10E945D1511 +:1055100060EA8AE10E945D1569E98BE10E945D15F0 +:1055200065EF8CE10E945D1560EA8DE10E945D15DA +:1055300060E38EE10E945D1566E083E00E945D15E8 +:1055400061E08CE00E945D1560E081E00E945D15E5 +:1055500060E08CE00E945D156FE084E00E945D15C4 +:1055600061E08CE00E945D150E94C00E811102C0B6 +:105570000E94F93283E080931F0380E280935303FB +:105580000E94F7306DE070E08CE492E00E943B0FE7 +:10559000892BE9F580911F0363E070E081FD05C26E +:1055A00089E492E00E943B0F892B89F56DE070E061 +:1055B00089E392E00E943B0F892B49F50E944E0837 +:1055C0006058774C8E4F9F4F60935A0370935B03E4 +:1055D00080935C0390935D03E0E7F4E080E092E069 +:1055E000DF019C011D9221503040E1F7F0937106DC +:1055F000E09370068FEF9FEF90936F0480936E049B +:1056000081E080935F0380935E031092200380917A +:10561000E902811136C00E94281A811104C00E943B +:10562000DA170E94601788E090E00E941F356093AF +:10563000690470936A0480936B0490936C04809166 +:1056400050038360809350036E7F71F40E94601753 +:1056500088E090E00E941F356093690470936A04AB +:1056600080936B0490936C040E94FE0880916904FF +:1056700080FF04C060E086950E94131781E080934C +:10568000E90280915901811106C084EF809367017E +:1056900085EF8093660120916701A22FA295AF70DC +:1056A000B0E091963C9191972F7081E090E0BC0121 +:1056B000022E01C0660F0A94EAF7462F4095432355 +:1056C00091964C93919792963C919297362B929605 +:1056D0003C93929740916601E42FE295EF70F0E0E1 +:1056E00031A14F70042E01C0880F0A94EAF7982F59 +:1056F0009095932391A392A1892B82A390968C914C +:1057000090E002C0959587952A95E2F7817020A1D7 +:1057100030E002C0359527954A95E2F792E020FFE8 +:1057200090E0892B8093F1029091590181E09827B4 +:105730009093F002891B8093EA020E94D31760E0E5 +:105740008AE00E94131781E00E94871680EE90E0A5 +:1057500090937201809371010E94280F8AE591E075 +:105760009093670380936603A0E46A2E8091800380 +:10577000FF24F39400E112E1853009F465C10E9431 +:105780001C26E82E81110E944E08FFE22F2EF3E026 +:105790003F2EE5E2F3E0D10110E000E0B02EDD9015 +:1057A00081918D1509F474C18D25C12CFF24F394CA +:1057B000982F9F2109F467C10E94C00E882399F099 +:1057C000C9A2BAA2DF2081E009F480E08BA30E9485 +:1057D000831B8160782F9DA38CA349A15AA16BA143 +:1057E0008DA10E948A25F801EB5DFC4F8081F8268F +:1057F000F0828091F102E82FEE0FEE0F9091670199 +:10580000A92FA295AF70B0E090962C9130E09F70D8 +:1058100002C0359527959A95E2F72170332790912C +:105820006601A92FA295AF70B0E090964C9150E020 +:105830009F7002C0559547959A95E2F7CA0181700D +:10584000992740FF02C082E090E0822B8E2B80934C +:10585000F1021091F0028F70E82FF0E0E250FE4F5D +:1058600080819091EF02890F8093EF02F12C8430B8 +:105870006CF0E12FF0E0E351FD4F80818F5F80837A +:1058800060E0812F0E946528FF24F3948091EF024D +:105890008D3F6CF4E12FF0E0E351FD4F80818150AA +:1058A000808361E0812F0E946528FF24F39480911A +:1058B000EF02082E000C990B64E070E00E94D734D0 +:1058C0008093EF02F1100E94700B80915F03882398 +:1058D00051F180912103909122030E94741BC29781 +:1058E00008F0EDC020916E0430916F042115310550 +:1058F00009F0F0C180915E038823A9F00E944E0850 +:1059000000915A0310915B0320915C0330915D0379 +:10591000601B710B820B930B6F3F7F4F8F4F9F4725 +:1059200010F40E946B0FE11001C0F1100E94860F6D +:105930000E94E8100E94E30E90912303891731F032 +:105940000E94E30E809323030E944B0E80918003FC +:10595000843009F00BCF83E08093E9008091E80068 +:1059600082FF04CF8091E80090E085FF0CC00E9488 +:10597000C30630E2E32EF12C8E010F5F1F4F882308 +:1059800009F487C291E08091E8008B778093E8006A +:10599000992309F4EBCEE981E150E33108F0DDC24F +:1059A000F0E0ED53F94C0C94EB3486E492E0FACD40 +:1059B00080918003843009F437C080E00E944B0E50 +:1059C0008091EC02811109C0F092EC02809169048F +:1059D00081708093EB020E94670E0E946B0F0E9401 +:1059E000E81010926A0388E190E00FB6F894A89549 +:1059F000809360000FBE6092600083B7817F8460F7 +:105A000083BF83B7816083BF7894889583B78E7F87 +:105A100083BF0FB6F894A895809160008861809349 +:105A20006000109260000FBE80917F03882361F0B8 +:105A30000E941C26EFE2F3E081918111B7C3A9E334 +:105A4000B3E0AE17BF07C1F780918003853009F43A +:105A5000AFCF109273030E94AE110E94E30E0E941A +:105A60004B0E1092EC028091EB02882349F080915A +:105A7000690481608093690460E086950E94131731 +:105A80000E94280F7CCEC394FF0C27E0C21290CE58 +:105A90000F5F1F4F0A30110509F080CE8FEF88A7E6 +:105AA00089A71AA60E94831B8160782F9CA78BA7C9 +:105AB00048A559A56AA58CA50E948A259ACE0E9460 +:105AC000831B909322038093210360E080E00E9477 +:105AD000CC080E94E30E8093FE020E94C00E882331 +:105AE00009F4DFC06091FA027091FB028091FC0220 +:105AF0009091FD020E94320861337547810591053E +:105B000040F00E946B0F80915F03882309F4F2CE6E +:105B1000E9CE0E94860F61E080E00E94CC0860E040 +:105B200080E891E00E94411562E080E00E94CC088C +:105B300080918A030E94BB0C823009F48CC008F06B +:105B400081C0882309F487C0813009F48AC065E0E8 +:105B500080E00E94CC0860E08EE991E00E9441154F +:105B600066E080E00E94CC086091FE02669561705C +:105B700083EA91E00E94411567E080E00E94CC0832 +:105B80006091FE026095617088EA91E00E94411583 +:105B900068E080E00E94CC086091FE0262FB66270C +:105BA00060F98CEA91E00E9441156091F6027091D3 +:105BB000F7028091F8029091F9020E9432086D324A +:105BC00071408105910508F49ECF0E944E086093B4 +:105BD000F6027093F7028093F8029093F902809195 +:105BE000F502811104C080916801811142C06DE00D +:105BF00080E00E94CC0860E081EB91E00E944115BA +:105C00006AE080E00E94CC0881E080936801809186 +:105C1000F40290E00196817099278093F40221E0CC +:105C200030E0281B390B40E6429FC001439F900D96 +:105C300011242091F302222351F187529C4F0E949C +:105C4000610661CF833089F0843009F080CF60E055 +:105C500082E991E003C060E086E891E00E9441158E +:105C600076CF60E08CE891E0F9CF60E088E991E0E0 +:105C7000F5CF6AE080E00E94CC0860E081EB91E023 +:105C80000E9441156BE080E00E94CC08C0CF2091BB +:105C9000F202222319F0875E9C4FD1CF875A9D4F85 +:105CA000CECF64E080E00E94CC0860E087EB91E01A +:105CB0000E94411565E080E00E94CC0860E08DEB19 +:105CC00091E00E94411569E080E00E94CC0889E9DA +:105CD00094E0B5CF8091200361E070E081110ACE9D +:105CE000082F10E02B01082E02C0440C551C0A940A +:105CF000E2F7A90144215521452B09F448C09091B0 +:105D00001F0390FD46C08295880F807680936B01BB +:105D10009801369527953695279520936E01815EDB +:105D200080936C0110926F0124E630E047E050E070 +:105D300069E671E088E70E94EE31892B09F0DACD3F +:105D4000A80175E0440F551F7A95E1F780911F0374 +:105D500080FD2DC040595B4F04E610E020E230E0AA +:105D600060E488E70E941532892B09F0C3CD0E94B8 +:105D7000860FC2018095909540906E0450906F04FC +:105D80004822592250926F0440926E04B3CD8F5F27 +:105D9000A7CF880F880F880F80936B0110926E0138 +:105DA000895F80936C0183E080936F01BDCFEFEF3B +:105DB000F2E080E2DF011D928A95E9F7E2E1F2E08C +:105DC000F8ABEFA70EE012E067E0A62E99249394BB +:105DD000AFA5B8A96D91B8ABAFA7F80181918F01BC +:105DE000840F952F911D9C0120593B4F3EA72DA755 +:105DF000E62FF0E0E150FD4F30E020E07A2C721AFF +:105E0000B92C022E01C0BB0C0A94EAF7CDA4DEA483 +:105E100090E0D6018D916D018B21672D691B677014 +:105E2000862E062E000C770BB82F01C0BB0F8A946C +:105E3000EAF78B2E7195619571096770772701C01C +:105E400086956A95EAF7882A8081882A80829F5FF2 +:105E50009830F9F62F5F3F4F31962830310571F6B3 +:105E6000E6E1F2E02FA538A9E217F30709F0B0CF79 +:105E700004E610E020E230E04FEF52E071CF809175 +:105E8000F100D8018D938D01B1E0EB1AF10809F40E +:105E900079CD8091E80085FDF2CF8091E8008B7785 +:105EA0008093E8000E94C306882399F36BCD1A8281 +:105EB00089E08B8311C08A81823009F48FC18330DD +:105EC00091F1813009F049C00E944E080E94F134DE +:105ED0006B837C838D839E8380918003843009F063 +:105EE00045CC1091E9001F709091EC00892F8170D2 +:105EF00090FD80E8182B82E08093E9008091E80013 +:105F000080FF0DC050E040E060E270E0CE010196FD +:105F10000E94F4068091E8008E778093E8001F705D +:105F20001093E90023CCFE013396D1018D911D0120 +:105F30008193B9E32B16B3E03B06B9F7CDCF8A8145 +:105F4000823059F46B817C818D819E810E94F13475 +:105F500086E290E00E942B35BFCF8FEF8983BCCFC4 +:105F60004C816B818A810E943A1098278927982753 +:105F70009E838D83B1CFED80FE80FE24EF24FE242E +:105F80008A810B81EEE00E9F80011124FCE88F9F37 +:105F9000000D111D11248C8190E0880F991F080FAE +:105FA000191F6F2DC80187960E942B356E2DC801D1 +:105FB0008896D0CF0E94BE0F8FCF8A818138B1F0F2 +:105FC00058F4803809F088CF4B8160916B04809140 +:105FD0006A040E943D1680CF8238E1F0833809F0D0 +:105FE0007BCF40916C046C818B81F3CF60E08B811F +:105FF0000E9413178B81811103C00E94670E6CCF22 +:106000008091690481608093690460E086950E94B4 +:10601000131762CF8B8180936D045ECF8A818138A4 +:1060200099F030F4803809F057CF80916C0441CF5B +:10603000823891F0833809F04FCF80916A048B83C6 +:1060400080916B048C8348CF8091690480FF02C0EB +:1060500086952FCF80E02DCF80916D042ACF60915F +:10606000690470916A0480916B0490916C040E94A1 +:10607000781532CF80E18A832FCF81E08A838DE14A +:1060800018CFCA80DB80DC24CD24DC248E010F5F96 +:106090001F4FEC80E00EF12EF11CC6018D519D4F7B +:1060A0000E151F0509F418CF2DE1C21621E0D20606 +:1060B00058F40E941735D80114968C93FFEFCF1A2D +:1060C000DF0A0F5F1F4FE9CFF8011482F7CF0A8173 +:1060D0001B811027012710279E012F5F3F4F690169 +:1060E000EC80E00EF12EF11CC8018D519D4FE016A1 +:1060F000F10609F4F1CE0D3131E0130728F4D60191 +:1061000014966C910E942B35BFEFCB1ADB0A0F5F00 +:106110001F4FEACF0E94AE0FDFCE85E0ACCFCA8022 +:10612000DB80DC24CD24DC248E010F5F1F4FEC804C +:10613000E00EF12EF11CC6018796E016F10609F477 +:10614000CBCEECEBCE16E2E0DE0658F40E9417351B +:10615000D80114968C93FFEFCF1ADF0A0F5F1F4F01 +:10616000EACFF8011482F7CF0A811B81102701279B +:1061700010279E012F5F3F4F6901EC80E00EF12E4A +:10618000F11CC8018796E016F10609F4A5CE0C3B78 +:1061900032E0130728F4D60114966C910E942B3537 +:1061A000BFEFCB1ADB0A0F5F1F4FEBCF09BD19BD45 +:1061B00009B400FEFDCF8091D8008F7D8093D80078 +:1061C0008091E00082608093E0008091E00081FD9A +:1061D000FCCF109273030E94AE1136CC86E290E0A1 +:1061E0000E9417351B821C821D828E8375CE1092F1 +:1061F000B9008CE08093B80008959F92AF92BF924F +:10620000CF92DF92EF92FF920F931F93CF93DF9382 +:10621000B82EEB010E94831B6C01EE24E394F12C59 +:10622000C431D10560F025E0E22EF12CCF3FDC0730 +:1062300031F0CE0164E170E00E94B7347B0184EA62 +:10624000A82E94E8992E1092BC00A092BC000E9447 +:10625000831B8C018091BC0087FF0DC08091B90029 +:10626000887F883039F18091B900887F803111F1C1 +:106270000FEF1FEF09C00E94831B801B910B8E152F +:106280009F0540F30EEF1FEFCF3FDC07E1F2C601A1 +:106290000E94741B8C179D07B0F2C801DF91CF914B +:1062A0001F910F91FF90EF90DF90CF90BF90AF9034 +:1062B0009F900895B092BB009092BC000E94831BF7 +:1062C0008C018091BC0087FF0AC08091B900887F53 +:1062D000883111F0803461F610E000E0DECF0E94DA +:1062E000831B801B910B8E159F0558F3CBCF0F930B +:1062F0001F93CF93DF93EB018093BB0084E88093DF +:10630000BC000E94831B8C018091BC0087FF11C0E0 +:106310002091B900287F81E090E0283211F490E0CC +:1063200080E0919581959109DF91CF911F910F9117 +:106330000895CF3FDC0741F30E94831B801B910B24 +:106340008C179D0708F38EEF9FEFEECF0F931F93EF +:10635000CF93DF93EC0184EC8093BC000E94831BFD +:106360008C018091BC0087FF08C08091BB0090E049 +:10637000DF91CF911F910F910895CF3FDC0789F3F3 +:106380000E94831B801B910B8C179D0750F38EEF8F +:106390009FEFEECF0F931F93CF93DF93EC0184E831 +:1063A0008093BC000E94831B8C018091BC0087FFFE +:1063B00008C08091BB0090E0DF91CF911F910F91B9 +:1063C0000895CF3FDC0789F30E94831B801B910B4C +:1063D0008C179D0750F38EEF9FEFEECFCF92DF9299 +:1063E000EF92FF920F931F93CF93DF936B018A017C +:1063F0007901B9010E94FD30E6010C0D1D1DC01789 +:10640000D10761F424E92093BC00DF91CF911F9163 +:106410000F91FF90EF90DF90CF90089597FDF2CF0E +:10642000B70189910E947731EACFCF92DF92EF9244 +:10643000FF920F931F93CF93DF93C62F6A017901C9 +:10644000B8010E94FD3097FD0CC0B8018C2F0E944E +:106450007731E601EC0CFD1CCE15DF0511F097FF3E +:106460000CC024E92093BC00DF91CF911F910F91C4 +:10647000FF90EF90DF90CF900895B80189910E942E +:106480007731EACFCF92DF92EF92FF920F931F9373 +:10649000CF93DF93F82EE62EEA016901B8010E943E +:1064A000FD3097FD15C0B8018E2D0E94773197FD04 +:1064B0000FC0B8018F2D81600E94FD30F12CE12CBE +:1064C00021E0C21AD108EC14FD0400F597FF11C0B9 +:1064D00024E92093BC001816190614F490E080E01B +:1064E000DF91CF911F910F91FF90EF90DF90CF90B0 +:1064F0000895C8010E94A63197FD04C0FE01EE0D6B +:10650000FF1D80832FEFE21AF20ADDCF97FDE0CF67 +:10651000C8010E94CA3197FDDBCFCC0DDD1D8883F9 +:10652000D7CF84E98093BC0008958EE14A9B02C0D6 +:106530008150E1F74A9BFECF08955A9880E28A95F0 +:10654000F1F75A9A0895FC013BE03A95F1F798E08B +:1065500020E080E031E040E14A95F1F7880F4A9B66 +:1065600002C08160232742E04A95F1F7000040E134 +:106570004A95F1F7915079F790E19A95F1F799B131 +:1065800032E03A95F1F7000040E14A95F1F792FBCD +:10659000992790F992272081920F90830895EF9286 +:1065A000FF920F931F93CF93DF930F92CDB7DEB778 +:1065B00019828C017C01E60EF11C0E151F0561F499 +:1065C00081E09981911180E00F90DF91CF911F912F +:1065D0000F91FF90EF9008950E949532CE010196A1 +:1065E0000E94A332F80181938F01E7CF529A5A9A01 +:1065F000089552985A9AEA9AE9E6F0E080818F7CF1 +:10660000808308956150770B91E001C0990F6A95DE +:10661000EAF720E031E0911108C0222391F05A9A64 +:1066200080E28A95F1F75A980895492F482339F066 +:106630005A9A232740E24A95F1F79695ECCF5A985B +:10664000F9CF5A98EDCFFF920F931F93CF93DF931B +:10665000EC018C01060F111DC017D10731F4DF9139 +:10666000CF911F910F91FF900895F9900E949D3254 +:1066700068E08F2D0E940233EFCF1F920F920FB66A +:106680000F921124EF92FF920F931F932F933F933A +:106690004F935F936F937F938F939F93AF93BF932A +:1066A000EF93FF93CF93DF930F92CDB7DEB71982AD +:1066B0000E949532CE0101960E94A332A82FA69582 +:1066C000A695A695282F229525709A2F9570290FAB +:1066D000922F937026952695920F9827977089810F +:1066E000982B09F075C0A83008F072C080E18A9537 +:1066F000F1F75A9A529AB2E0BA95F1F700C05A9857 +:10670000EA2EF12CEAE0AE9FD0011124AE5FBE4F1D +:106710001896ED91FC9119973097B1F06091FC01BA +:106720007091FD0116962D913C911797260F371FFA +:1067300013968D919C911497680F791F15964C9123 +:10674000159712968C9109958AE08E9DF0018F9D88 +:10675000F00D1124EE5FFE4F6581662351F020910C +:10676000FC013091FD0186819781820F931F0E9469 +:1067700023330E949D32F0E1FA95F1F75A9852982E +:106780005A9A80E18A95F1F78AE08E9D80018F9D6B +:10679000100D11240E5F1E4FD80112966C911297A6 +:1067A000662371F12091FC013091FD0113968D91CA +:1067B0009C91820F931F0E94CF32D801ED91FC91E2 +:1067C000882311F088E001C082E080830E94953226 +:1067D0000F90DF91CF91FF91EF91BF91AF919F917A +:1067E0008F917F916F915F914F913F912F911F9169 +:1067F0000F91FF90EF900F900FBE0F901F90189584 +:10680000ED91FC91DFCF0F931F93CF93DF93EC01BA +:1068100008970CF0A9C08AE08C9FF0018D9FF00DC5 +:106820001124EE5FFE4F80819181892B09F49CC079 +:10683000F894529A5A9885E08A95F1F700008C2FC7 +:10684000869585709C2F9570890F982F93708695EB +:106850008695890F8E0193E0000F111F9A95E1F73D +:10686000082B0E949D3200C068E0802F0E940233F6 +:10687000A0E1AA95F1F752985A9A4A9B27C087E05F +:1068800090E04A9925C08AE08C9F80018D9F100D71 +:1068900011240E5F1E4FF80165816623A1F120913E +:1068A000FC013091FD0186819781820F931F0E9428 +:1068B000CF32811128C0529A5A9AD801ED91FC9199 +:1068C00082E08083789482E090E016C000C0D5CF4B +:1068D0000197B9F4529A5A9A8AE08C9FF0018D9FE1 +:1068E000F00D1124EE5FFE4F0190F081E02D81E06C +:1068F0008083789481E090E0DF91CF911F910F9198 +:10690000089500C0BECF0E949532B0E2BA95F1F76B +:106910005A98529AE0E1EA95F1F78AE08C9FF001EB +:106920008D9FF00D1124EE5FFE4F6281662351F0C2 +:106930002091FC013091FD0183819481820F931F8E +:106940000E9423330E949D328AE08C9FF0018D9F2C +:10695000F00D1124EE5FFE4F0190F081E02D1082CA +:10696000789490E080E0C8CF84E090E0C5CFAA1B87 +:10697000BB1B51E107C0AA1FBB1FA617B70710F02A +:10698000A61BB70B881F991F5A95A9F7809590955C +:10699000BC01CD010895991B79E004C0991F961799 +:1069A00008F0961B881F7A95C9F78095089597FB84 +:1069B000072E16F4009407D077FD09D00E94B73453 +:1069C00007FC05D03EF4909581959F4F08957095F2 +:1069D00061957F4F0895EE0FFF1F0590F491E02D14 +:1069E00009946927962769277827872778270895A4 +:1069F000FB01DC0102C005900D9241505040D8F7D8 +:106A00000895FB01DC0104C08D910190801921F4EF +:106A100041505040C8F7881B990B0895FB01DC01D9 +:106A200002C001900D9241505040D8F70895F99955 +:106A3000FECF92BD81BDF89A992780B50895A6E151 +:106A4000B0E044E050E00C945135A8E1B0E042E001 +:106A500050E00C945135262FF999FECF92BD81BD9F +:106A6000F89A019700B4021639F01FBA20BD0FB68C +:106A7000F894FA9AF99A0FBE08950396272F0E9468 +:106A80002C350E942B35252F0E942C35242F0C9459 +:106A90002C350196272F0E942C350C942B35DC01C8 +:106AA000CB01FC01F999FECF06C0F2BDE1BDF89A19 +:106AB000319600B40D9241505040B8F708950E94AD +:106AC00066356894B1110C94F53508950E94DA3555 +:106AD00088F09F5798F0B92F9927B751B0F0E1F09F +:106AE000660F771F881F991F1AF0BA95C9F714C04F +:106AF000B13091F00E94F435B1E008950C94F43572 +:106B0000672F782F8827B85F39F0B93FCCF3869587 +:106B100077956795B395D9F73EF4909580957095E4 +:106B200061957F4F8F4F9F4F0895E89409C097FB61 +:106B30003EF490958095709561957F4F8F4F9F4F54 +:106B40009923A9F0F92F96E9BB279395F695879598 +:106B500077956795B795F111F8CFFAF4BB0F11F45B +:106B600060FF1BC06F5F7F4F8F4F9F4F16C0882302 +:106B700011F096E911C0772321F09EE8872F762F38 +:106B800005C0662371F096E8862F70E060E02AF079 +:106B90009A95660F771F881FDAF7880F9695879565 +:106BA00097F9089557FD9058440F551F59F05F3FCE +:106BB00071F04795880F97FB991F61F09F3F79F01F +:106BC00087950895121613061406551FF2CF4695A1 +:106BD000F1DF08C0161617061806991FF1CF869523 +:106BE0007105610508940895E894BB276627772707 +:106BF000CB0197F908950E940E360C947F360E94BF +:106C0000713638F00E94783620F0952311F00C94FC +:106C100068360C946E3611240C94F5350E94D235EA +:106C200070F3959FC1F3950F50E0551F629FF001DF +:106C3000729FBB27F00DB11D639FAA27F00DB11DF8 +:106C4000AA1F649F6627B00DA11D661F829F222781 +:106C5000B00DA11D621F739FB00DA11D621F839F08 +:106C6000A00D611D221F749F3327A00D611D231FDE +:106C7000849F600D211D822F762F6A2F11249F572C +:106C800050409AF0F1F088234AF0EE0FFF1FBB1F2F +:106C9000661F771F881F91505040A9F79E3F5105EE +:106CA00080F00C9468360C94F5355F3FE4F3983E21 +:106CB000D4F3869577956795B795F795E7959F5F98 +:106CC000C1F7FE2B880F911D9695879597F908952A +:106CD00097F99F6780E870E060E008959FEF80EC8F +:106CE000089500240A941616170618060906089532 +:106CF00000240A9412161306140605060895092E98 +:106D00000394000C11F4882352F0BB0F40F4BF2B06 +:106D100011F460FF04C06F5F7F4F8F4F9F4F089546 +:106D2000F894FFCFBA10BA10C310C310C510C31027 +:106D3000C310C310BA10BA10CA10C310C310CA10BF +:106D40009F12C7126A14C7126A14FA121B136A142C +:106D500019142614FE1C741D771D8B1D8E1DA11D7C +:106D6000AA1DCE1D141E461E5A1EE01D031EE6213E +:106D7000E6213F223F2271221922192219228B2259 +:106D8000FC220C230C23572F5B2F9F2FB02FBB2FE0 +:106D9000DA2FDD2F0E302F30AD2FAD2F3A303D30B2 +:0C6DA000413067308A308D308F30B430C5 +:106DAC0001013C0200000001000000003C02000058 +:106DBC000005010000003C0200000001060000007C +:106DCC003C0200000001070000003C020408000027 +:106DDC00000000003C02080C0000000000003C0217 +:106DEC00011400000000000036323331F7F6FF6664 +:106DFC0097C634350000000000012F085E0D3D0DD4 +:106E0C00390D350D2E08F4F5010021007F22000309 +:106E1C00018000004A004A4A01F6F731333236FF4E +:106E2C004C415945520042617365200047616D65C4 +:106E3C0020005261697365004C6F776572004C4F8E +:106E4C00434B0043617073004E756D005363726C5D +:106E5C0000202020202000534F4C415200544D5014 +:106E6C00535400818283E200E900EA00B500B600C9 +:106E7C00B700CD008301CC008A019201940121025C +:106E8C00230224022502260227022A02B300B400A0 +:106E9C006F0070000603060806010606B50200FF27 +:106EAC000100010000FFFF0000010001FF000008CD +:106EBC00101818100800000102020202020202025D +:106ECC00020240227B49012701AC009E0BB70BD775 +:026EDC000B00A9 :00000001FF From 9fd923d81c3f6542c523da8d12211e15533dc4f3 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 2 Jan 2022 00:55:18 -0500 Subject: [PATCH 111/155] Adjust layer colours --- .../solartempest/ps17/keymaps/via/keymap.c | 12 ++++++++---- .../ps17/solartempest_ps17_via.hex | 18 +++++++++--------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/keyboards/solartempest/ps17/keymaps/via/keymap.c b/keyboards/solartempest/ps17/keymaps/via/keymap.c index d85616310b29..e24a32135e78 100644 --- a/keyboards/solartempest/ps17/keymaps/via/keymap.c +++ b/keyboards/solartempest/ps17/keymaps/via/keymap.c @@ -325,8 +325,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { rgblight_sethsv_at(15,255,120,22); } else { - rgblight_sethsv_at(175,255,120,18); //Set LEDs back to violet, assuming on that coloured layer - rgblight_sethsv_at(175,255,120,22); + //rgblight_sethsv_at(175,255,120,18); //Set LEDs back to violet, assuming on that coloured layer + //rgblight_sethsv_at(175,255,120,22); + rgblight_sethsv_at(207,255,120,18); //Set LEDs back to magenta, assuming on that coloured layer + rgblight_sethsv_at(207,255,120,22); } #endif } @@ -408,13 +410,15 @@ layer_state_t layer_state_set_user(layer_state_t state) { switch (get_highest_layer(state)) { // Change all other LEDs based on layer state as well case 0: - rgblight_sethsv_noeeprom(50,255,100); + //rgblight_sethsv_noeeprom(50,255,100); //blue-green gradient + rgblight_sethsv_noeeprom(115,200,100); //pale-blue gradient //You can selectively decrease certain LEDs if you are have a clear acrylic case and the shine-through is bothersome. Rgblight_sethsv_at() can be used here for those LEDs (0, 2, 4, 14, and 23). Otherwise some black tape on the acrylic plate or foam underneath the FR4 plate will do the trick. break; case 1: rgblight_sethsv_noeeprom(5,255,100); case 2: - rgblight_sethsv_noeeprom(128,255,100); + //rgblight_sethsv_noeeprom(128,255,100);//blue-purple gradient + rgblight_sethsv_noeeprom(160,255,100); //blue-magenta gradient break; case 3: rgblight_sethsv_noeeprom(215,255,100); diff --git a/keyboards/solartempest/ps17/solartempest_ps17_via.hex b/keyboards/solartempest/ps17/solartempest_ps17_via.hex index 9d9c27806520..42b66569857c 100644 --- a/keyboards/solartempest/ps17/solartempest_ps17_via.hex +++ b/keyboards/solartempest/ps17/solartempest_ps17_via.hex @@ -534,8 +534,8 @@ :10215000D11C0F3382E0180789F6DF91CF911F91D0 :102160000F91FF90EF90DF90CF90BF90AF909F9036 :102170008F907F906F900895CF93C82F6FEF81114C -:1021800061E283E290E00E94A62D6FEFC11161E150 -:1021900084E290E00E94A62D6FEFC11160E385E21A +:1021800062E283E290E00E94A62D6FEFC11161E050 +:1021900084E290E00E94A62D6FEFC11162E085E21B :1021A00090E0CF910C94A62D80E00E94BC1060E0DE :1021B00086E290E00E94A62D0E946A100E945A10AA :1021C00081E00C94BC100F931F93CF93DF9328E012 @@ -568,8 +568,8 @@ :102370000F90DF91CF911F910C9409110E94620A76 :10238000182FEFCFC9010F900F900F900F900F9063 :10239000DF91CF911F91089583E290E00E94922DEA -:1023A000813289F484E290E00E94922D813159F4C7 -:1023B00085E290E00E94922D91E0803309F090E058 +:1023A000823289F484E290E00E94922D813059F4C7 +:1023B00085E290E00E94922D91E0823009F090E059 :1023C000892F8170089580E0FCCF6091E5026695C9 :1023D00070E04BE050E08CE091E00E94DA2D892B18 :1023E00019F481E080938D020E9484059093870206 @@ -609,9 +609,9 @@ :1026000011F08E5F9A0136952795232B09F08F5F85 :10261000823001F148F4882381F08130A9F08D2FB8 :102620009C2FDF91CF9108958330C9F08430B9F7A2 -:1026300020E044E66FEF8FE004C020E044E66FEF57 -:1026400082E30E940D12EBCF20E044E66FEF85E0BD -:102650000E940D1220E044E66FEF80E8F2CF20E008 +:1026300020E044E66FEF8FE004C020E044E668EC61 +:1026400083E70E940D12EBCF20E044E66FEF85E0B8 +:102650000E940D1220E044E66FEF80EAF2CF20E006 :1026600044E66FEF87EDEDCF0E94E11290939B035C :1026700080939A030C94B50A80919A0390919B03DE :102680009C01267033272630310519F488600C949C @@ -831,8 +831,8 @@ :1033E0000E94FE0A80EE0E94FE0A80914E0291E049 :1033F00022E148E76FEF892780934E02882351F03E :103400008FE00E941A0F26E148E76FEF8FE00E94DD -:103410001A0F74CE8FEA0E941A0F26E148E76FEF69 -:103420008FEAF5CF882309F4A9CD1091540201E069 +:103410001A0F74CE8FEC0E941A0F26E148E76FEF67 +:103420008FECF5CF882309F4A9CD1091540201E067 :103430001027109354020E948405909352028093A7 :1034400051028091530210921C01882319F18CE1E2 :1034500080931D0180931E0181E20E94011428E0E7 From 02f2134489a2a6e3bb2ef6217a13a3f52d442a15 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sun, 2 Jan 2022 01:16:31 -0500 Subject: [PATCH 112/155] Update layer colours --- keyboards/solartempest/9e/keymaps/via/keymap.c | 12 ++++++++---- .../solartempest/9e/solartempest_9e_via.hex | 18 +++++++++--------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/keyboards/solartempest/9e/keymaps/via/keymap.c b/keyboards/solartempest/9e/keymaps/via/keymap.c index 44fddc3bf9ce..a5ffab6ecef9 100644 --- a/keyboards/solartempest/9e/keymaps/via/keymap.c +++ b/keyboards/solartempest/9e/keymaps/via/keymap.c @@ -394,9 +394,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { // RGB Layer Light Settings - Note that this will fix the key switches with same LED colour and brightness -const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 95,255,90}); //Spring green +//const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 95,255,90}); //Spring green +const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 128,255,100}); //Cyan const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 30,255,120}); //Yellow-orange -const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 128,255,100}); //Cyan +//const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 128,255,100}); //Cyan +const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 95,255,90}); //Spring green const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 18, 215,255,120}); //Magenta const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({4, 2, 43,100,160}); //White-left caps lock indication (No dedicated LED) const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS({8, 2, 43,100,150}); //White-right num lock indication (No dedicated LED) @@ -430,13 +432,15 @@ layer_state_t layer_state_set_user(layer_state_t state) switch(biton32(state)){ // Change all other LEDs based on layer state as well case 0: - rgblight_sethsv_noeeprom(50,255,30); + //rgblight_sethsv_noeeprom(50,255,30); //blue-green gradient + rgblight_sethsv_noeeprom(106,200,30); //blue gradient break; case 1: rgblight_sethsv_noeeprom(30,255,30); break; case 2: - rgblight_sethsv_noeeprom(106,255,30); + //rgblight_sethsv_noeeprom(106,255,30); //blue gradient + rgblight_sethsv_noeeprom(50,255,30); //blue-green gradient break; case 3: rgblight_sethsv_noeeprom(215,255,30); diff --git a/keyboards/solartempest/9e/solartempest_9e_via.hex b/keyboards/solartempest/9e/solartempest_9e_via.hex index de104edae5a8..4279fca60a35 100644 --- a/keyboards/solartempest/9e/solartempest_9e_via.hex +++ b/keyboards/solartempest/9e/solartempest_9e_via.hex @@ -10,8 +10,8 @@ :100090000C94EA040C94EA0406022B64A0FF00000E :1000A000000008022B6496FF0000000004022B648D :1000B000A0FF000000000412D7FF78FF000000003E -:1000C000041280FF64FF0000000004121EFF78FF8E -:1000D0000000000004125FFF5AFF0000000005014D +:1000C00004125FFF5AFF0000000004121EFF78FFB9 +:1000D00000000000041280FF64FF00000000050122 :1000E0000902A10185020901A100050919012908D8 :1000F00015002501950875018102050109300931B6 :100100001581257F95027508810609381581257F9F @@ -464,8 +464,8 @@ :101CF000D11C8FE5E81684E0F80679F6DF91CF91E4 :101D00001F910F91FF90EF90DF90CF90BF90AF9019 :101D10009F908F907F906F900895CF93C82F6FEF13 -:101D2000811161E283E290E00E94EB2D6FEFC1111F -:101D300061E184E290E00E94EB2D6FEFC11168E257 +:101D2000811162E283E290E00E94EB2D6FEFC1111E +:101D300061E084E290E00E94EB2D6FEFC11162E060 :101D400085E290E0CF910C94EB2D80E00E948D0E07 :101D500060E086E290E00E94EB2D0E94380E0E9427 :101D6000280E81E00C948D0ECF93C92F682F84E04C @@ -490,9 +490,9 @@ :101E9000E92FF0E0EB59F14D0C948C2D803F19F0B7 :101EA00020F4883E20F481E00895843FE1F380E04F :101EB0000895883EC0F3813FD1F7F5CF822F8695F4 -:101EC00086958695089583E290E00E94D72D813211 -:101ED00089F484E290E00E94D72D813159F485E2A3 -:101EE00090E00E94D72D91E0883209F090E0892F90 +:101EC00086958695089583E290E00E94D72D823210 +:101ED00089F484E290E00E94D72D813059F485E2A4 +:101EE00090E00E94D72D91E0823009F090E0892F98 :101EF0008170089580E0FCCFCF9384E090E00E9451 :101F0000D72DC82F82E290E00E94D72D982F8C2FDA :101F1000CF91089560918B03669570E04BE050E09F @@ -674,9 +674,9 @@ :102A1000A8017695679557954795452B462B472BEB :102A200009F08F5F8130C9F0882359F08230D1F0EE :102A30008330E9F020E04EE16FEF80E406C080E0F3 -:102A4000C6CF20E04EE16FEF82E30E943A13CE0141 +:102A4000C6CF20E04EE168EC8AE60E943A13CE0140 :102A5000DF91CF911F910F91089520E04EE16FEF2C -:102A60008EE1F3CF20E04EE16FEF8AE6EECF20E07B +:102A60008EE1F3CF20E04EE16FEF82E3EECF20E086 :102A70004EE16FEF87EDE9CF0E94A91490930C030C :102A800080930B030C94B10B80910B0390910C037A :102A90009C01267033272630310519F488600C9488 From 9d5daa3e6d5cc2f95ca6eb43d2cb4e7df8b02ecd Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 4 Jan 2022 17:43:37 +0800 Subject: [PATCH 113/155] Update rev_0101.c --- keyboards/keychron/q1/rev_0101/rev_0101.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/keychron/q1/rev_0101/rev_0101.c b/keyboards/keychron/q1/rev_0101/rev_0101.c index c712cde50141..dd7f69529ea6 100644 --- a/keyboards/keychron/q1/rev_0101/rev_0101.c +++ b/keyboards/keychron/q1/rev_0101/rev_0101.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL] = { +const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = { /* Refer to IS31 manual for these locations * driver * | R location @@ -146,9 +146,9 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } if (index == 0) { if (clockwise) { - tap_code_delay(KC_VOLU, 10); + tap_code(KC_VOLU); } else { - tap_code_delay(KC_VOLD, 10); + tap_code(KC_VOLD); } } return true; From 1d5ebc62e0345afa695e6a4cdddd9a1cffff8e7e Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Wed, 5 Jan 2022 10:05:56 +0800 Subject: [PATCH 114/155] Update rev_0101. --- keyboards/keychron/q1/rev_0101/config.h | 2 +- .../keychron/q1/rev_0101/keymaps/via/keymap.c | 24 +++---------------- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/keyboards/keychron/q1/rev_0101/config.h b/keyboards/keychron/q1/rev_0101/config.h index 57618f7a5824..c127a3630ab3 100644 --- a/keyboards/keychron/q1/rev_0101/config.h +++ b/keyboards/keychron/q1/rev_0101/config.h @@ -34,4 +34,4 @@ #define ENCODERS_PAD_B { B7 } /* Specifies the number of pulses the encoder registers between each detent */ -#define ENCODER_RESOLUTION 2 \ No newline at end of file +#define ENCODER_RESOLUTION 4 diff --git a/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c index db16e8baae1a..1103f74427c6 100644 --- a/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c +++ b/keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c @@ -25,13 +25,13 @@ enum layers{ enum custom_keycodes { KC_MISSION_CONTROL = USER00, - KC_LAUNCHPAD, - KC_TASK, - KC_FLXP + KC_LAUNCHPAD }; #define KC_MCTL KC_MISSION_CONTROL #define KC_LPAD KC_LAUNCHPAD +#define KC_TASK G(KC_TAB) +#define KC_FLXP G(KC_E) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [MAC_BASE] = LAYOUT_all( @@ -125,24 +125,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { host_consumer_send(0); } return false; // Skip all further processing of this key - case KC_TASK: - if (record->event.pressed) { - register_code(KC_LWIN); - register_code(KC_TAB); - } else { - unregister_code(KC_LWIN); - unregister_code(KC_TAB); - } - return false; // Skip all further processing of this key - case KC_FLXP: - if (record->event.pressed) { - register_code(KC_LWIN); - register_code(KC_E); - } else { - unregister_code(KC_LWIN); - unregister_code(KC_E); - } - return false; // Skip all further processing of this key default: return true; // Process all other keycodes normally } From 58327d7676b745b00a160c5d501f0816281915d4 Mon Sep 17 00:00:00 2001 From: Adam Karim Date: Tue, 28 Dec 2021 02:50:17 -0800 Subject: [PATCH 115/155] Enable support for edit RGB lighting in VIA. The updated design file at https://git.io/JyE0K includes only the enabled RGB_MATRIX modes. --- keyboards/keychron/q1/config.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/keyboards/keychron/q1/config.h b/keyboards/keychron/q1/config.h index 15d9dd467395..def14d7a03f8 100644 --- a/keyboards/keychron/q1/config.h +++ b/keyboards/keychron/q1/config.h @@ -48,6 +48,11 @@ /* Disable RGB lighting when PC is in suspend */ #define RGB_DISABLE_WHEN_USB_SUSPENDED +/* Allow VIA to edit lighting */ +#ifdef VIA_ENABLE +#define VIA_QMK_RGBLIGHT_ENABLE +#endif + // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects From 3fb43b6e877ae43f1f2e3969e61fdda5d9d1df26 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Sat, 8 Jan 2022 00:03:21 -0500 Subject: [PATCH 116/155] Increase compatibility with stock OLED code --- keyboards/solartempest/sofle/keymaps/via/oled.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/keyboards/solartempest/sofle/keymaps/via/oled.c b/keyboards/solartempest/sofle/keymaps/via/oled.c index 2cd5456d78d4..b7b55ad0712a 100644 --- a/keyboards/solartempest/sofle/keymaps/via/oled.c +++ b/keyboards/solartempest/sofle/keymaps/via/oled.c @@ -18,6 +18,7 @@ //Sets up what the OLED screens display. #ifdef OLED_ENABLE + uint32_t oled_timer = 0; //OLED timeout static void render_logo(void) { static const char PROGMEM qmk_logo[] = { 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, @@ -71,6 +72,12 @@ } return rotation; } + /* oled_rotation_t oled_init_user(oled_rotation_t rotation) { //128x64 OLED test + if (is_keyboard_master()) { + return OLED_ROTATION_270; + } + return OLED_ROTATION_90; + }*/ bool oled_task_user(void) { if (is_keyboard_master()) { From ee6f48c6edf4b181e0f5e2f4d75a46b20f7addae Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Mon, 10 Jan 2022 22:10:47 -0500 Subject: [PATCH 117/155] General updates. --- .../zodiark/keymaps/solartempest/config.h | 24 ++++++ .../zodiark/keymaps/solartempest/encoder.c | 36 +++++++++ .../zodiark/keymaps/solartempest/keymap.c | 54 +++++++++++++ .../zodiark/keymaps/solartempest/oled.c | 79 +++++++++++++++++++ .../zodiark/keymaps/solartempest/rules.mk | 1 + keyboards/aleblazer/zodiark/rules.mk | 2 +- 6 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 keyboards/aleblazer/zodiark/keymaps/solartempest/config.h create mode 100644 keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c create mode 100644 keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c create mode 100644 keyboards/aleblazer/zodiark/keymaps/solartempest/oled.c create mode 100644 keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h new file mode 100644 index 000000000000..8714be8d4d86 --- /dev/null +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h @@ -0,0 +1,24 @@ +/* +Copyright 2021 Spencer Deven + +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 3 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 . +*/ +#pragma once + +#define MASTER_LEFT + +#ifdef OLED_ENABLE + #define OLED_DISPLAY_128X64 + #define OLED_TIMEOUT 400000 +#endif diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c new file mode 100644 index 000000000000..c08cfed5c173 --- /dev/null +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c @@ -0,0 +1,36 @@ +/* +Copyright 2021 Spencer Deven +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 3 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 . +*/ + +//Setting up what encoder rotation does. If your encoder can be pressed as a button, that function can be set in Via. + +#ifdef ENCODER_ENABLE + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } else if (index == 1) { + if (clockwise) { + tap_code(KC_PGDOWN); + } else { + tap_code(KC_PGUP); + } + } + return true; +} + +#endif diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c new file mode 100644 index 000000000000..f9680ecd0273 --- /dev/null +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c @@ -0,0 +1,54 @@ +/* +Copyright 2021 Spencer Deven +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 3 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 . +*/ +#include QMK_KEYBOARD_H +#ifdef OLED_ENABLE + #include "oled.c" +#endif +#include "encoder.c" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_MINS, KC_EQL, 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_GRV, KC_MUTE, RGB_TOG, KC_DEL,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , + KC_LCTL, KC_LALT, KC_LGUI, KC_APP, MO(1), KC_SPC, KC_ENT, KC_ENT, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT + ), + + [1] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_PSLS, KC_P7, KC_P8, KC_P9, KC_NLCK, _______, _______, _______, _______, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_F12, + KC_CAPS, KC_P4, KC_P5, KC_P6, KC_NLCK, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_NLCK, + _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, + _______, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______ + ), + + [2] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_PSLS, KC_P7, KC_P8, KC_P9, KC_NLCK, _______, _______, _______, _______, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_F12, + KC_CAPS, KC_P4, KC_P5, KC_P6, KC_NLCK, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_NLCK, + _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, + _______, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______ + ), + + [3] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, _______, _______, _______, KC_F12, + _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_SPI, RGB_HUI, RGB_SAI, RGB_VAI, + _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_RMOD, RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD + ) + +}; diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/oled.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/oled.c new file mode 100644 index 000000000000..8642bacb0548 --- /dev/null +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/oled.c @@ -0,0 +1,79 @@ +/* +Copyright 2021 Spencer Deven +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 3 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 . +*/ + +#ifdef OLED_ENABLE + +static void render_logo(void) { + static const char PROGMEM qmk_logo[] = { + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, + 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, + 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0 + }; + + oled_write_P(qmk_logo, false); +} + +static void print_status_narrow(void) { + // Print current mode + oled_write_P(PSTR("\n\n"), false); + + switch (get_highest_layer(layer_state)) { + case 0: + oled_write_ln_P(PSTR("Qwrt"), false); + break; + default: + oled_write_P(PSTR("Mod\n"), false); + break; + } + oled_write_P(PSTR("\n\n"), false); + // Print current layer + oled_write_ln_P(PSTR("LAYER"), false); + switch (get_highest_layer(layer_state)) { + case 0: + oled_write_P(PSTR("Base\n"), false); + break; + case 1: + oled_write_P(PSTR("Raise"), false); + break; + case 2: + oled_write_P(PSTR("Lower"), false); + break; + case 3: + oled_write_P(PSTR("Adjust"), false); + break; + default: + oled_write_ln_P(PSTR("Undef"), false); + } + oled_write_P(PSTR("\n\n"), false); + led_t led_usb_state = host_keyboard_led_state(); + oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock); +} + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + if (is_keyboard_master()) { + return OLED_ROTATION_90; + } + return rotation; +} + +bool oled_task_user(void) { + if (is_keyboard_master()) { + print_status_narrow(); + } else { + render_logo(); + } + return false; +} + +#endif diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk b/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/aleblazer/zodiark/rules.mk b/keyboards/aleblazer/zodiark/rules.mk index 4b163940c9a6..118c42bbeb19 100644 --- a/keyboards/aleblazer/zodiark/rules.mk +++ b/keyboards/aleblazer/zodiark/rules.mk @@ -16,7 +16,7 @@ NKRO_ENABLE = no # Enable N-Key Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output -OLED_ENABLE = no +OLED_ENABLE = yes OLED_DRIVER = SSD1306 # Enable Support for SSD1306 or SH1106 OLED Displays; Communicating over I2C ENCODER_ENABLE = yes SPLIT_KEYBOARD = yes From 0da76d0e3cedf2b3123e3c12c9dad3f256764770 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Wed, 12 Jan 2022 18:21:47 +0800 Subject: [PATCH 118/155] Update q1. --- keyboards/keychron/q1/config.h | 5 + keyboards/keychron/q1/q1.h | 3 +- .../q1/rev_0101/keymaps/via/info.json | 168 +++++++++--------- keyboards/keychron/q1/rev_0102/rev_0102.c | 3 +- 4 files changed, 92 insertions(+), 87 deletions(-) diff --git a/keyboards/keychron/q1/config.h b/keyboards/keychron/q1/config.h index 15d9dd467395..b02cdb340ef6 100644 --- a/keyboards/keychron/q1/config.h +++ b/keyboards/keychron/q1/config.h @@ -96,3 +96,8 @@ #define ENABLE_RGB_MATRIX_MULTISPLASH #define ENABLE_RGB_MATRIX_SOLID_SPLASH #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH + +/* Allow VIA to edit lighting */ +#ifdef VIA_ENABLE +#define VIA_QMK_RGBLIGHT_ENABLE +#endif diff --git a/keyboards/keychron/q1/q1.h b/keyboards/keychron/q1/q1.h index 5e93377e0698..cf6d19621357 100644 --- a/keyboards/keychron/q1/q1.h +++ b/keyboards/keychron/q1/q1.h @@ -18,11 +18,10 @@ #include "quantum.h" - #if defined(KEYBOARD_keychron_q1_rev_0100) # include "rev_0100.h" #elif defined(KEYBOARD_keychron_q1_rev_0101) # include "rev_0101.h" #elif defined(KEYBOARD_keychron_q1_rev_0102) # include "rev_0102.h" -#endif \ No newline at end of file +#endif diff --git a/keyboards/keychron/q1/rev_0101/keymaps/via/info.json b/keyboards/keychron/q1/rev_0101/keymaps/via/info.json index a994185c2273..a921ee3e4c79 100644 --- a/keyboards/keychron/q1/rev_0101/keymaps/via/info.json +++ b/keyboards/keychron/q1/rev_0101/keymaps/via/info.json @@ -5,96 +5,96 @@ "layouts": { "LAYOUT_all": { "layout": [ - {"label":"Esc", "x":0, "y":0}, - {"label":"F1", "x":1.25, "y":0}, - {"label":"F2", "x":2.25, "y":0}, - {"label":"F3", "x":3.25, "y":0}, - {"label":"F4", "x":4.25, "y":0}, - {"label":"F5", "x":5.5, "y":0}, - {"label":"F6", "x":6.5, "y":0}, - {"label":"F7", "x":7.5, "y":0}, - {"label":"F8", "x":8.5, "y":0}, - {"label":"F9", "x":9.75, "y":0}, - {"label":"F10", "x":10.75, "y":0}, - {"label":"F11", "x":11.75, "y":0}, - {"label":"F12", "x":12.75, "y":0}, - {"label":"Delete", "x":14, "y":0}, + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":1.25, "y":0}, + {"label":"F2", "x":2.25, "y":0}, + {"label":"F3", "x":3.25, "y":0}, + {"label":"F4", "x":4.25, "y":0}, + {"label":"F5", "x":5.5, "y":0}, + {"label":"F6", "x":6.5, "y":0}, + {"label":"F7", "x":7.5, "y":0}, + {"label":"F8", "x":8.5, "y":0}, + {"label":"F9", "x":9.75, "y":0}, + {"label":"F10", "x":10.75, "y":0}, + {"label":"F11", "x":11.75, "y":0}, + {"label":"F12", "x":12.75, "y":0}, + {"label":"Delete", "x":14, "y":0}, - {"label":"Mute", "x":15.25, "y":0, "w":0.75}, - {"label":"Vol-", "x":16, "y":0, "w":0.75, "h":0.5}, - {"label":"Vol+", "x":16, "y":0.5, "w":0.75, "h":0.5}, + {"label":"Mute", "x":15.25, "y":0, "w":0.75}, + {"label":"Vol-", "x":16, "y":0, "w":0.75, "h":0.5}, + {"label":"Vol+", "x":16, "y":0.5, "w":0.75, "h":0.5}, - {"label":"~", "x":0, "y":1.25}, - {"label":"!", "x":1, "y":1.25}, - {"label":"@", "x":2, "y":1.25}, - {"label":"#", "x":3, "y":1.25}, - {"label":"$", "x":4, "y":1.25}, - {"label":"%", "x":5, "y":1.25}, - {"label":"^", "x":6, "y":1.25}, - {"label":"&", "x":7, "y":1.25}, - {"label":"*", "x":8, "y":1.25}, - {"label":"(", "x":9, "y":1.25}, - {"label":")", "x":10, "y":1.25}, - {"label":"_", "x":11, "y":1}, - {"label":"+", "x":12, "y":1.25}, - {"label":"Backspace", "x":13, "y":1.25, "w":2}, - {"label":"Page Up", "x":15.25, "y":1.25}, + {"label":"~", "x":0, "y":1.25}, + {"label":"!", "x":1, "y":1.25}, + {"label":"@", "x":2, "y":1.25}, + {"label":"#", "x":3, "y":1.25}, + {"label":"$", "x":4, "y":1.25}, + {"label":"%", "x":5, "y":1.25}, + {"label":"^", "x":6, "y":1.25}, + {"label":"&", "x":7, "y":1.25}, + {"label":"*", "x":8, "y":1.25}, + {"label":"(", "x":9, "y":1.25}, + {"label":")", "x":10, "y":1.25}, + {"label":"_", "x":11, "y":1}, + {"label":"+", "x":12, "y":1.25}, + {"label":"Backspace", "x":13, "y":1.25, "w":2}, + {"label":"Page Up", "x":15.25, "y":1.25}, - {"label":"Tab", "x":0, "y":2.25, "w":1.5}, - {"label":"Q", "x":1.5, "y":2.25}, - {"label":"W", "x":2.5, "y":2.25}, - {"label":"E", "x":3.5, "y":2.25}, - {"label":"R", "x":4.5, "y":2.25}, - {"label":"T", "x":5.5, "y":2.25}, - {"label":"Y", "x":6.5, "y":2.25}, - {"label":"U", "x":7.5, "y":2.25}, - {"label":"I", "x":8.5, "y":2.25}, - {"label":"O", "x":9.5, "y":2.25}, - {"label":"P", "x":10.5, "y":2.25}, - {"label":"{", "x":11.5, "y":2.25}, - {"label":"}", "x":12.5, "y":2.25}, - {"label":"|", "x":13.5, "y":2.25, "w":1.5}, - {"label":"Page Down", "x":15.25, "y":2.25}, + {"label":"Tab", "x":0, "y":2.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.25}, + {"label":"W", "x":2.5, "y":2.25}, + {"label":"E", "x":3.5, "y":2.25}, + {"label":"R", "x":4.5, "y":2.25}, + {"label":"T", "x":5.5, "y":2.25}, + {"label":"Y", "x":6.5, "y":2.25}, + {"label":"U", "x":7.5, "y":2.25}, + {"label":"I", "x":8.5, "y":2.25}, + {"label":"O", "x":9.5, "y":2.25}, + {"label":"P", "x":10.5, "y":2.25}, + {"label":"{", "x":11.5, "y":2.25}, + {"label":"}", "x":12.5, "y":2.25}, + {"label":"|", "x":13.5, "y":2.25, "w":1.5}, + {"label":"Page Down", "x":15.25, "y":2.25}, - {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, - {"label":"A", "x":1.75, "y":3.25}, - {"label":"S", "x":2.75, "y":3.25}, - {"label":"D", "x":3.75, "y":3.25}, - {"label":"F", "x":4.75, "y":3.25}, - {"label":"G", "x":5.75, "y":3.25}, - {"label":"H", "x":6.75, "y":3.25}, - {"label":"J", "x":7.75, "y":3.25}, - {"label":"K", "x":8.75, "y":3.25}, - {"label":"L", "x":9.75, "y":3.25}, - {"label":":", "x":10.75, "y":3.25}, - {"label":"\"", "x":11.75, "y":3.25}, - {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, - {"label":"Home", "x":15.25, "y":3.25}, + {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, + {"label":"A", "x":1.75, "y":3.25}, + {"label":"S", "x":2.75, "y":3.25}, + {"label":"D", "x":3.75, "y":3.25}, + {"label":"F", "x":4.75, "y":3.25}, + {"label":"G", "x":5.75, "y":3.25}, + {"label":"H", "x":6.75, "y":3.25}, + {"label":"J", "x":7.75, "y":3.25}, + {"label":"K", "x":8.75, "y":3.25}, + {"label":"L", "x":9.75, "y":3.25}, + {"label":":", "x":10.75, "y":3.25}, + {"label":"\"", "x":11.75, "y":3.25}, + {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, + {"label":"Home", "x":15.25, "y":3.25}, - {"label":"Shift", "x":0, "y":4.25, "w":2.25}, - {"label":"Z", "x":2.25, "y":4.25}, - {"label":"X", "x":3.25, "y":4.25}, - {"label":"C", "x":4.25, "y":4.25}, - {"label":"V", "x":5.25, "y":4.25}, - {"label":"B", "x":6.25, "y":4.25}, - {"label":"N", "x":7.25, "y":4.25}, - {"label":"M", "x":8.25, "y":4.25}, - {"label":"<", "x":9.25, "y":4.25}, - {"label":">", "x":10.25, "y":4.25}, - {"label":"?", "x":11.25, "y":4.25}, - {"label":"Shift", "x":12.25, "y":4.25, "w":1.75}, - {"label":"Up", "x":14.25, "y":4.5}, + {"label":"Shift", "x":0, "y":4.25, "w":2.25}, + {"label":"Z", "x":2.25, "y":4.25}, + {"label":"X", "x":3.25, "y":4.25}, + {"label":"C", "x":4.25, "y":4.25}, + {"label":"V", "x":5.25, "y":4.25}, + {"label":"B", "x":6.25, "y":4.25}, + {"label":"N", "x":7.25, "y":4.25}, + {"label":"M", "x":8.25, "y":4.25}, + {"label":"<", "x":9.25, "y":4.25}, + {"label":">", "x":10.25, "y":4.25}, + {"label":"?", "x":11.25, "y":4.25}, + {"label":"Shift", "x":12.25, "y":4.25, "w":1.75}, + {"label":"Up", "x":14.25, "y":4.5}, - {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, - {"label":"Win", "x":1.25, "y":5.25, "w":1.25}, - {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, - {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, - {"label":"Alt", "x":10, "y":5.25}, - {"label":"Fn", "x":11, "y":5.25}, - {"label":"Ctrl", "x":12, "y":5.25}, - {"label":"Left", "x":13.25, "y":5.5}, - {"label":"Down", "x":14.25, "y":5.5}, - {"label":"Right", "x":15.25, "y":5.5} ] + {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, + {"label":"Win", "x":1.25, "y":5.25, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, + {"label":"Alt", "x":10, "y":5.25}, + {"label":"Fn", "x":11, "y":5.25}, + {"label":"Ctrl", "x":12, "y":5.25}, + {"label":"Left", "x":13.25, "y":5.5}, + {"label":"Down", "x":14.25, "y":5.5}, + {"label":"Right", "x":15.25, "y":5.5} ] } } } diff --git a/keyboards/keychron/q1/rev_0102/rev_0102.c b/keyboards/keychron/q1/rev_0102/rev_0102.c index e8a2c85ae366..f1468d109451 100644 --- a/keyboards/keychron/q1/rev_0102/rev_0102.c +++ b/keyboards/keychron/q1/rev_0102/rev_0102.c @@ -16,7 +16,7 @@ #include "quantum.h" - +#ifdef RGB_MATRIX_ENABLE const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = { /* Refer to IS31 manual for these locations * driver @@ -141,3 +141,4 @@ led_config_t g_led_config = { } }; +#endif From 4f3811ffa4cbe9e06ea147beca83f1c265c82fbe Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <2831039915@qq.com> Date: Thu, 20 Jan 2022 15:30:13 +0800 Subject: [PATCH 119/155] Add rgb matrix support for q2 of keychron. --- keyboards/keychron/q2/chconf.h | 4 +- keyboards/keychron/q2/config.h | 65 +++++++++++++ keyboards/keychron/q2/halconf.h | 4 +- keyboards/keychron/q2/mcuconf.h | 4 +- keyboards/keychron/q2/rev_0110/config.h | 5 + keyboards/keychron/q2/rev_0110/rev_0110.c | 106 +++++++++++++++++++++ keyboards/keychron/q2/rev_0110/rules.mk | 7 +- keyboards/keychron/q2/rev_0111/config.h | 7 +- keyboards/keychron/q2/rev_0111/rev_0111.c | 106 +++++++++++++++++++++ keyboards/keychron/q2/rev_0111/rules.mk | 7 +- keyboards/keychron/q2/rev_0112/config.h | 5 + keyboards/keychron/q2/rev_0112/rev_0112.c | 107 ++++++++++++++++++++++ keyboards/keychron/q2/rev_0112/rules.mk | 7 +- keyboards/keychron/q2/rev_0113/config.h | 5 + keyboards/keychron/q2/rev_0113/rev_0113.c | 107 ++++++++++++++++++++++ keyboards/keychron/q2/rev_0113/rules.mk | 7 +- 16 files changed, 526 insertions(+), 27 deletions(-) diff --git a/keyboards/keychron/q2/chconf.h b/keyboards/keychron/q2/chconf.h index a331fdef3751..1f0ace835cad 100644 --- a/keyboards/keychron/q2/chconf.h +++ b/keyboards/keychron/q2/chconf.h @@ -16,7 +16,7 @@ /* * This file was auto-generated by: - * `qmk chibios-confmigrate -i keyboards/acheron/arctic/chconf.h -r platforms/chibios/common/configs/chconf.h` + * `qmk chibios-confmigrate -i keyboards/keychron/q2/chconf.h -r platforms/chibios/boards/common/configs/chconf.h` */ #pragma once @@ -27,4 +27,4 @@ #define CH_CFG_USE_CONDVARS_TIMEOUT FALSE -#include_next \ No newline at end of file +#include_next diff --git a/keyboards/keychron/q2/config.h b/keyboards/keychron/q2/config.h index 263be4684fad..8252b83df8b6 100644 --- a/keyboards/keychron/q2/config.h +++ b/keyboards/keychron/q2/config.h @@ -38,6 +38,14 @@ /* Set 0 if debouncing isn't needed */ #define DEBOUNCE 5 +/* RGB Matrix Driver Configuration */ +#define DRIVER_COUNT 2 +#define DRIVER_ADDR_1 0b1110111 +#define DRIVER_ADDR_2 0b1110100 + +/* Scan phase of led driver set as MSKPHASE_9CHANNEL(defined as 0x03 in CKLED2001.h) */ +#define PHASE_CHANNEL MSKPHASE_9CHANNEL + /* Disable DIP switch in matrix data */ #define MATRIX_MASKED @@ -50,5 +58,62 @@ /* Use 5 dynamic keymap layers */ #define DYNAMIC_KEYMAP_LAYER_COUNT 5 +/* We have 2KB EEPROM size on STM32L432 */ +#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047 + /* EEPROM Driver Configuration */ #define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10100010 + +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +// #define ENABLE_RGB_MATRIX_ALPHAS_MODS +// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_BREATHING +// #define ENABLE_RGB_MATRIX_BAND_SAT +// #define ENABLE_RGB_MATRIX_BAND_VAL +// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +#define ENABLE_RGB_MATRIX_CYCLE_ALL +#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +#define ENABLE_RGB_MATRIX_DUAL_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_BEACON +// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +#define ENABLE_RGB_MATRIX_RAINDROPS +// #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +// #define ENABLE_RGB_MATRIX_HUE_BREATHING +// #define ENABLE_RGB_MATRIX_HUE_PENDULUM +// #define ENABLE_RGB_MATRIX_HUE_WAVE +// #define ENABLE_RGB_MATRIX_PIXEL_RAIN +// #define ENABLE_RGB_MATRIX_PIXEL_FLOW +// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP +#define ENABLE_RGB_MATRIX_DIGITAL_RAIN +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +#define ENABLE_RGB_MATRIX_SPLASH +#define ENABLE_RGB_MATRIX_MULTISPLASH +#define ENABLE_RGB_MATRIX_SOLID_SPLASH +#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH + +/* Allow VIA to edit lighting */ +#ifdef VIA_ENABLE +# define VIA_QMK_RGBLIGHT_ENABLE +#endif diff --git a/keyboards/keychron/q2/halconf.h b/keyboards/keychron/q2/halconf.h index a9304b85927c..1035730e6e3e 100644 --- a/keyboards/keychron/q2/halconf.h +++ b/keyboards/keychron/q2/halconf.h @@ -16,11 +16,11 @@ /* * This file was auto-generated by: - * `qmk chibios-confmigrate -i keyboards/nk65/halconf.h -r platforms/chibios/QMK_PROTON_C/configs/halconf.h` + * `qmk chibios-confmigrate -i keyboards/keychron/q2/halconf.h -r platforms/chibios/boards/QMK_PROTON_C/configs/halconf.h` */ #pragma once #define HAL_USE_I2C TRUE -#include_next \ No newline at end of file +#include_next diff --git a/keyboards/keychron/q2/mcuconf.h b/keyboards/keychron/q2/mcuconf.h index 6ab916aea1c3..3d646509bcc1 100644 --- a/keyboards/keychron/q2/mcuconf.h +++ b/keyboards/keychron/q2/mcuconf.h @@ -16,7 +16,7 @@ /* * This file was auto-generated by: - * `qmk chibios-confmigrate -i keyboards/acheron/arctic/mcuconf.h -r platforms/chibios/GENERIC_STM32_F072XB/configs/mcuconf.h` + * `qmk chibios-confmigrate -i keyboards/keychron/q2/mcuconf.h -r platforms/chibios/boards/QMK_PROTON_C/configs/mcuconf.h` */ #pragma once @@ -24,4 +24,4 @@ #include_next #undef STM32_I2C_USE_I2C1 -#define STM32_I2C_USE_I2C1 TRUE \ No newline at end of file +#define STM32_I2C_USE_I2C1 TRUE diff --git a/keyboards/keychron/q2/rev_0110/config.h b/keyboards/keychron/q2/rev_0110/config.h index d9fc5c17446c..e41857d9b2a9 100644 --- a/keyboards/keychron/q2/rev_0110/config.h +++ b/keyboards/keychron/q2/rev_0110/config.h @@ -19,3 +19,8 @@ /* USB Device descriptor parameter */ #define PRODUCT_ID 0x0110 #define DEVICE_VER 0x0100 + +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 34 +#define DRIVER_2_LED_TOTAL 33 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) diff --git a/keyboards/keychron/q2/rev_0110/rev_0110.c b/keyboards/keychron/q2/rev_0110/rev_0110.c index d91a41fca181..fe524901770a 100644 --- a/keyboards/keychron/q2/rev_0110/rev_0110.c +++ b/keyboards/keychron/q2/rev_0110/rev_0110.c @@ -15,3 +15,109 @@ */ #include "quantum.h" + +#ifdef RGB_MATRIX_ENABLE +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to CKLED manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_16, A_16, B_16}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_14, D_14, E_14}, + {0, F_16, D_16, E_16}, + + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {1, I_5, G_5, H_5}, + {1, I_6, G_6, H_6}, + {1, I_7, G_7, H_7}, + {1, I_8, G_8, H_8}, + {1, I_9, G_9, H_9}, + {1, I_10, G_10, H_10}, + {1, I_11, G_11, H_11}, + {1, I_12, G_12, H_12}, + {1, I_14, G_14, H_14}, + {1, I_16, G_16, H_16}, + + {1, C_1, A_1, B_1}, + {1, C_3, A_3, B_3}, + {1, C_4, A_4, B_4}, + {1, C_5, A_5, B_5}, + {1, C_6, A_6, B_6}, + {1, C_7, A_7, B_7}, + {1, C_8, A_8, B_8}, + {1, C_9, A_9, B_9}, + {1, C_10, A_10, B_10}, + {1, C_11, A_11, B_11}, + {1, C_12, A_12, B_12}, + {1, C_14, A_14, B_14}, + {1, C_15, A_15, B_15}, + + {1, F_1, D_1, E_1}, + {1, F_2, D_2, E_2}, + {1, F_3, D_3, E_3}, + {1, F_7, D_7, E_7}, + {1, F_11, D_11, E_11}, + {1, F_12, D_12, E_12}, + {1, F_13, D_13, E_13}, + {1, F_14, D_14, E_14}, + {1, F_15, D_15, E_15}, + {1, F_16, D_16, E_16}, +}; + +led_config_t g_led_config = { + { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, + { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, + { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 65, 42, 43 }, + { 44, NO_LED, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, NO_LED, 55, 56 }, + { 57, 58, 59, NO_LED, NO_LED, NO_LED, 60, NO_LED, NO_LED, NO_LED, 61, 62, 63, 64, 66 }, + }, + { + {0, 0}, {15, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {224, 0}, + {0,16}, {15,16}, {30,16}, {45,16}, {60,16}, {75,16}, {90,16}, {105,16}, {120,16}, {135,16}, {150,16}, {165,16}, {180,16}, {195,16}, {224,16}, + {0,32}, {15,32}, {30,32}, {45,32}, {60,32}, {75,32}, {90,32}, {105,32}, {120,32}, {135,32}, {150,32}, {165,32}, {195,32}, {224,32}, + {0,48}, {30,48}, {45,48}, {60,48}, {75,48}, {90,48}, {105,48}, {120,48}, {135,48}, {150,48}, {165,48}, {180,48}, {210,48}, + {0,64}, {15,64}, {30,64}, {90,64}, {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64}, + }, + { + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + } +}; +#endif diff --git a/keyboards/keychron/q2/rev_0110/rules.mk b/keyboards/keychron/q2/rev_0110/rules.mk index 0d4e745010aa..90fb639b3419 100644 --- a/keyboards/keychron/q2/rev_0110/rules.mk +++ b/keyboards/keychron/q2/rev_0110/rules.mk @@ -23,12 +23,9 @@ RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output ENCODER_ENABLE = no # Enable Encoder DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 EEPROM_DRIVER = i2c # Enter lower-power sleep mode when on the ChibiOS idle thread OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE - -# custom matrix setup -CUSTOM_MATRIX = lite - -SRC += matrix.c diff --git a/keyboards/keychron/q2/rev_0111/config.h b/keyboards/keychron/q2/rev_0111/config.h index cc50d0688a1c..76cd5d0e782f 100644 --- a/keyboards/keychron/q2/rev_0111/config.h +++ b/keyboards/keychron/q2/rev_0111/config.h @@ -20,9 +20,14 @@ #define PRODUCT_ID 0x0111 #define DEVICE_VER 0x0100 +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 34 +#define DRIVER_2_LED_TOTAL 33 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + /* Encoder used pins */ #define ENCODERS_PAD_A { A10 } #define ENCODERS_PAD_B { B5 } /* Specifies the number of pulses the encoder registers between each detent */ -#define ENCODER_RESOLUTION 2 +#define ENCODER_RESOLUTION 4 diff --git a/keyboards/keychron/q2/rev_0111/rev_0111.c b/keyboards/keychron/q2/rev_0111/rev_0111.c index c9413d023d0a..cbadafc458ee 100644 --- a/keyboards/keychron/q2/rev_0111/rev_0111.c +++ b/keyboards/keychron/q2/rev_0111/rev_0111.c @@ -16,6 +16,112 @@ #include "quantum.h" +#ifdef RGB_MATRIX_ENABLE +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to CKLED manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_16, A_16, B_16}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_14, D_14, E_14}, + {0, F_16, D_16, E_16}, + + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {1, I_5, G_5, H_5}, + {1, I_6, G_6, H_6}, + {1, I_7, G_7, H_7}, + {1, I_8, G_8, H_8}, + {1, I_9, G_9, H_9}, + {1, I_10, G_10, H_10}, + {1, I_11, G_11, H_11}, + {1, I_12, G_12, H_12}, + {1, I_14, G_14, H_14}, + {1, I_16, G_16, H_16}, + + {1, C_1, A_1, B_1}, + {1, C_3, A_3, B_3}, + {1, C_4, A_4, B_4}, + {1, C_5, A_5, B_5}, + {1, C_6, A_6, B_6}, + {1, C_7, A_7, B_7}, + {1, C_8, A_8, B_8}, + {1, C_9, A_9, B_9}, + {1, C_10, A_10, B_10}, + {1, C_11, A_11, B_11}, + {1, C_12, A_12, B_12}, + {1, C_14, A_14, B_14}, + {1, C_15, A_15, B_15}, + + {1, F_1, D_1, E_1}, + {1, F_2, D_2, E_2}, + {1, F_3, D_3, E_3}, + {1, F_7, D_7, E_7}, + {1, F_11, D_11, E_11}, + {1, F_12, D_12, E_12}, + {1, F_13, D_13, E_13}, + {1, F_14, D_14, E_14}, + {1, F_15, D_15, E_15}, + {1, F_16, D_16, E_16}, +}; + +led_config_t g_led_config = { + { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, + { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, + { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 65, 42, 43 }, + { 44, NO_LED, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, NO_LED, 55, 56 }, + { 57, 58, 59, NO_LED, NO_LED, NO_LED, 60, NO_LED, NO_LED, NO_LED, 61, 62, 63, 64, 66 }, + }, + { + {0, 0}, {15, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {224, 0}, + {0,16}, {15,16}, {30,16}, {45,16}, {60,16}, {75,16}, {90,16}, {105,16}, {120,16}, {135,16}, {150,16}, {165,16}, {180,16}, {195,16}, {224,16}, + {0,32}, {15,32}, {30,32}, {45,32}, {60,32}, {75,32}, {90,32}, {105,32}, {120,32}, {135,32}, {150,32}, {165,32}, {195,32}, {224,32}, + {0,48}, {30,48}, {45,48}, {60,48}, {75,48}, {90,48}, {105,48}, {120,48}, {135,48}, {150,48}, {165,48}, {180,48}, {210,48}, + {0,64}, {15,64}, {30,64}, {90,64}, {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64}, + }, + { + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + } +}; +#endif + #ifdef ENCODER_ENABLE bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } diff --git a/keyboards/keychron/q2/rev_0111/rules.mk b/keyboards/keychron/q2/rev_0111/rules.mk index 52d0bce592ce..f56484265aec 100644 --- a/keyboards/keychron/q2/rev_0111/rules.mk +++ b/keyboards/keychron/q2/rev_0111/rules.mk @@ -23,12 +23,9 @@ RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output ENCODER_ENABLE = yes # Enable Encoder DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 EEPROM_DRIVER = i2c # Enter lower-power sleep mode when on the ChibiOS idle thread OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE - -# custom matrix setup -CUSTOM_MATRIX = lite - -SRC += matrix.c diff --git a/keyboards/keychron/q2/rev_0112/config.h b/keyboards/keychron/q2/rev_0112/config.h index b76640d65095..70a60fd0269c 100644 --- a/keyboards/keychron/q2/rev_0112/config.h +++ b/keyboards/keychron/q2/rev_0112/config.h @@ -19,3 +19,8 @@ /* USB Device descriptor parameter */ #define PRODUCT_ID 0x0112 #define DEVICE_VER 0x0100 + +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 34 +#define DRIVER_2_LED_TOTAL 34 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) diff --git a/keyboards/keychron/q2/rev_0112/rev_0112.c b/keyboards/keychron/q2/rev_0112/rev_0112.c index d91a41fca181..b994679725cb 100644 --- a/keyboards/keychron/q2/rev_0112/rev_0112.c +++ b/keyboards/keychron/q2/rev_0112/rev_0112.c @@ -15,3 +15,110 @@ */ #include "quantum.h" + +#ifdef RGB_MATRIX_ENABLE +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_16, A_16, B_16}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_16, D_16, E_16}, + + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {1, I_5, G_5, H_5}, + {1, I_6, G_6, H_6}, + {1, I_7, G_7, H_7}, + {1, I_8, G_8, H_8}, + {1, I_9, G_9, H_9}, + {1, I_10, G_10, H_10}, + {1, I_11, G_11, H_11}, + {1, I_12, G_12, H_12}, + {1, I_14, G_14, H_14}, + {0, F_14, D_14, E_14}, + {1, I_16, G_16, H_16}, + + {1, C_1, A_1, B_1}, + {1, C_2, A_2, B_2}, + {1, C_3, A_3, B_3}, + {1, C_4, A_4, B_4}, + {1, C_5, A_5, B_5}, + {1, C_6, A_6, B_6}, + {1, C_7, A_7, B_7}, + {1, C_8, A_8, B_8}, + {1, C_9, A_9, B_9}, + {1, C_10, A_10, B_10}, + {1, C_11, A_11, B_11}, + {1, C_12, A_12, B_12}, + {1, C_14, A_14, B_14}, + {1, C_15, A_15, B_15}, + + {1, F_1, D_1, E_1}, + {1, F_2, D_2, E_2}, + {1, F_3, D_3, E_3}, + {1, F_7, D_7, E_7}, + {1, F_11, D_11, E_11}, + {1, F_12, D_12, E_12}, + {1, F_13, D_13, E_13}, + {1, F_14, D_14, E_14}, + {1, F_15, D_15, E_15}, + {1, F_16, D_16, E_16} +}; + +led_config_t g_led_config = { + { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, + { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 42, 28 }, + { 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 66, 41, 43 }, + { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, 56, 57 }, + { 58, 59, 60, NO_LED, NO_LED, NO_LED, 61, NO_LED, NO_LED, NO_LED, 62, 63, 64, 65, 67 } + }, + { + {0, 0}, {15, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {224, 0}, + {0,16}, {15,16}, {30,16}, {45,16}, {60,16}, {75,16}, {90,16}, {105,16}, {120,16}, {135,16}, {150,16}, {165,16}, {180,16}, {224,16}, + {0,32}, {15,32}, {30,32}, {45,32}, {60,32}, {75,32}, {90,32}, {105,32}, {120,32}, {135,32}, {150,32}, {165,32}, {180,32}, {195,16}, {224,32}, + {0,48}, {15,48}, {30,48}, {45,48}, {60,48}, {75,48}, {90,48}, {105,48}, {120,48}, {135,48}, {150,48}, {165,48}, {180,48}, {210,48}, + {0,64}, {15,64}, {30,64}, {90,64}, {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64} + }, + { + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 + } +}; +#endif diff --git a/keyboards/keychron/q2/rev_0112/rules.mk b/keyboards/keychron/q2/rev_0112/rules.mk index 0d4e745010aa..90fb639b3419 100644 --- a/keyboards/keychron/q2/rev_0112/rules.mk +++ b/keyboards/keychron/q2/rev_0112/rules.mk @@ -23,12 +23,9 @@ RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output ENCODER_ENABLE = no # Enable Encoder DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 EEPROM_DRIVER = i2c # Enter lower-power sleep mode when on the ChibiOS idle thread OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE - -# custom matrix setup -CUSTOM_MATRIX = lite - -SRC += matrix.c diff --git a/keyboards/keychron/q2/rev_0113/config.h b/keyboards/keychron/q2/rev_0113/config.h index 21ada693c006..92b9c2e36411 100644 --- a/keyboards/keychron/q2/rev_0113/config.h +++ b/keyboards/keychron/q2/rev_0113/config.h @@ -20,6 +20,11 @@ #define PRODUCT_ID 0x0113 #define DEVICE_VER 0x0100 +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 34 +#define DRIVER_2_LED_TOTAL 34 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + /* Encoder used pins */ #define ENCODERS_PAD_A { A10 } #define ENCODERS_PAD_B { B5 } diff --git a/keyboards/keychron/q2/rev_0113/rev_0113.c b/keyboards/keychron/q2/rev_0113/rev_0113.c index c9413d023d0a..e1d66976dd5c 100644 --- a/keyboards/keychron/q2/rev_0113/rev_0113.c +++ b/keyboards/keychron/q2/rev_0113/rev_0113.c @@ -16,6 +16,113 @@ #include "quantum.h" +#ifdef RGB_MATRIX_ENABLE +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_16, A_16, B_16}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_16, D_16, E_16}, + + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {1, I_5, G_5, H_5}, + {1, I_6, G_6, H_6}, + {1, I_7, G_7, H_7}, + {1, I_8, G_8, H_8}, + {1, I_9, G_9, H_9}, + {1, I_10, G_10, H_10}, + {1, I_11, G_11, H_11}, + {1, I_12, G_12, H_12}, + {1, I_14, G_14, H_14}, + {0, F_14, D_14, E_14}, + {1, I_16, G_16, H_16}, + + {1, C_1, A_1, B_1}, + {1, C_2, A_2, B_2}, + {1, C_3, A_3, B_3}, + {1, C_4, A_4, B_4}, + {1, C_5, A_5, B_5}, + {1, C_6, A_6, B_6}, + {1, C_7, A_7, B_7}, + {1, C_8, A_8, B_8}, + {1, C_9, A_9, B_9}, + {1, C_10, A_10, B_10}, + {1, C_11, A_11, B_11}, + {1, C_12, A_12, B_12}, + {1, C_14, A_14, B_14}, + {1, C_15, A_15, B_15}, + + {1, F_1, D_1, E_1}, + {1, F_2, D_2, E_2}, + {1, F_3, D_3, E_3}, + {1, F_7, D_7, E_7}, + {1, F_11, D_11, E_11}, + {1, F_12, D_12, E_12}, + {1, F_13, D_13, E_13}, + {1, F_14, D_14, E_14}, + {1, F_15, D_15, E_15}, + {1, F_16, D_16, E_16} +}; + +led_config_t g_led_config = { + { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, + { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 42, 28 }, + { 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 66, 41, 43 }, + { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, 56, 57 }, + { 58, 59, 60, NO_LED, NO_LED, NO_LED, 61, NO_LED, NO_LED, NO_LED, 62, 63, 64, 65, 67 } + }, + { + {0, 0}, {15, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {224, 0}, + {0,16}, {15,16}, {30,16}, {45,16}, {60,16}, {75,16}, {90,16}, {105,16}, {120,16}, {135,16}, {150,16}, {165,16}, {180,16}, {224,16}, + {0,32}, {15,32}, {30,32}, {45,32}, {60,32}, {75,32}, {90,32}, {105,32}, {120,32}, {135,32}, {150,32}, {165,32}, {180,32}, {195,16}, {224,32}, + {0,48}, {15,48}, {30,48}, {45,48}, {60,48}, {75,48}, {90,48}, {105,48}, {120,48}, {135,48}, {150,48}, {165,48}, {180,48}, {210,48}, + {0,64}, {15,64}, {30,64}, {90,64}, {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64} + }, + { + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 + } +}; +#endif + #ifdef ENCODER_ENABLE bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } diff --git a/keyboards/keychron/q2/rev_0113/rules.mk b/keyboards/keychron/q2/rev_0113/rules.mk index 52d0bce592ce..f56484265aec 100644 --- a/keyboards/keychron/q2/rev_0113/rules.mk +++ b/keyboards/keychron/q2/rev_0113/rules.mk @@ -23,12 +23,9 @@ RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output ENCODER_ENABLE = yes # Enable Encoder DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 EEPROM_DRIVER = i2c # Enter lower-power sleep mode when on the ChibiOS idle thread OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE - -# custom matrix setup -CUSTOM_MATRIX = lite - -SRC += matrix.c From b0c1e8397d11fd520c986a99498ad4b92d6bcb2d Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <2831039915@qq.com> Date: Thu, 20 Jan 2022 16:10:56 +0800 Subject: [PATCH 120/155] Update rule.mk. --- keyboards/keychron/q2/rev_0110/rules.mk | 10 +--------- keyboards/keychron/q2/rev_0111/rules.mk | 10 +--------- keyboards/keychron/q2/rev_0112/rules.mk | 10 +--------- keyboards/keychron/q2/rev_0113/rules.mk | 10 +--------- 4 files changed, 4 insertions(+), 36 deletions(-) diff --git a/keyboards/keychron/q2/rev_0110/rules.mk b/keyboards/keychron/q2/rev_0110/rules.mk index 90fb639b3419..957680ab110d 100644 --- a/keyboards/keychron/q2/rev_0110/rules.mk +++ b/keyboards/keychron/q2/rev_0110/rules.mk @@ -1,13 +1,5 @@ # MCU name -# MCU = STM32L432 -MCU = cortex-m4 -ARMV = 7 -MCU_FAMILY = STM32 -MCU_SERIES = STM32L4xx -MCU_LDSCRIPT = STM32L432xB -MCU_STARTUP = stm32l4xx -BOARD = GENERIC_STM32_L433XC -PLATFORM_NAME = platform_l432 +MCU = STM32L433 # Build Options # change yes to no to disable diff --git a/keyboards/keychron/q2/rev_0111/rules.mk b/keyboards/keychron/q2/rev_0111/rules.mk index f56484265aec..3b931ef9fe21 100644 --- a/keyboards/keychron/q2/rev_0111/rules.mk +++ b/keyboards/keychron/q2/rev_0111/rules.mk @@ -1,13 +1,5 @@ # MCU name -# MCU = STM32L432 -MCU = cortex-m4 -ARMV = 7 -MCU_FAMILY = STM32 -MCU_SERIES = STM32L4xx -MCU_LDSCRIPT = STM32L432xB -MCU_STARTUP = stm32l4xx -BOARD = GENERIC_STM32_L433XC -PLATFORM_NAME = platform_l432 +MCU = STM32L433 # Build Options # change yes to no to disable diff --git a/keyboards/keychron/q2/rev_0112/rules.mk b/keyboards/keychron/q2/rev_0112/rules.mk index 90fb639b3419..957680ab110d 100644 --- a/keyboards/keychron/q2/rev_0112/rules.mk +++ b/keyboards/keychron/q2/rev_0112/rules.mk @@ -1,13 +1,5 @@ # MCU name -# MCU = STM32L432 -MCU = cortex-m4 -ARMV = 7 -MCU_FAMILY = STM32 -MCU_SERIES = STM32L4xx -MCU_LDSCRIPT = STM32L432xB -MCU_STARTUP = stm32l4xx -BOARD = GENERIC_STM32_L433XC -PLATFORM_NAME = platform_l432 +MCU = STM32L433 # Build Options # change yes to no to disable diff --git a/keyboards/keychron/q2/rev_0113/rules.mk b/keyboards/keychron/q2/rev_0113/rules.mk index f56484265aec..3b931ef9fe21 100644 --- a/keyboards/keychron/q2/rev_0113/rules.mk +++ b/keyboards/keychron/q2/rev_0113/rules.mk @@ -1,13 +1,5 @@ # MCU name -# MCU = STM32L432 -MCU = cortex-m4 -ARMV = 7 -MCU_FAMILY = STM32 -MCU_SERIES = STM32L4xx -MCU_LDSCRIPT = STM32L432xB -MCU_STARTUP = stm32l4xx -BOARD = GENERIC_STM32_L433XC -PLATFORM_NAME = platform_l432 +MCU = STM32L433 # Build Options # change yes to no to disable From d797b088f8882131107b7b84f38c329444279bc4 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <2831039915@qq.com> Date: Fri, 21 Jan 2022 10:26:54 +0800 Subject: [PATCH 121/155] Delete comment block which is unwanted. --- keyboards/keychron/q2/chconf.h | 5 ----- keyboards/keychron/q2/halconf.h | 5 ----- keyboards/keychron/q2/mcuconf.h | 5 ----- 3 files changed, 15 deletions(-) diff --git a/keyboards/keychron/q2/chconf.h b/keyboards/keychron/q2/chconf.h index 1f0ace835cad..cbbae31079fb 100644 --- a/keyboards/keychron/q2/chconf.h +++ b/keyboards/keychron/q2/chconf.h @@ -14,11 +14,6 @@ * along with this program. If not, see . */ -/* - * This file was auto-generated by: - * `qmk chibios-confmigrate -i keyboards/keychron/q2/chconf.h -r platforms/chibios/boards/common/configs/chconf.h` - */ - #pragma once #define CH_CFG_ST_FREQUENCY 10000 diff --git a/keyboards/keychron/q2/halconf.h b/keyboards/keychron/q2/halconf.h index 1035730e6e3e..41bddcb2799b 100644 --- a/keyboards/keychron/q2/halconf.h +++ b/keyboards/keychron/q2/halconf.h @@ -14,11 +14,6 @@ * along with this program. If not, see . */ -/* - * This file was auto-generated by: - * `qmk chibios-confmigrate -i keyboards/keychron/q2/halconf.h -r platforms/chibios/boards/QMK_PROTON_C/configs/halconf.h` - */ - #pragma once #define HAL_USE_I2C TRUE diff --git a/keyboards/keychron/q2/mcuconf.h b/keyboards/keychron/q2/mcuconf.h index 3d646509bcc1..0ca8c64850f4 100644 --- a/keyboards/keychron/q2/mcuconf.h +++ b/keyboards/keychron/q2/mcuconf.h @@ -14,11 +14,6 @@ * along with this program. If not, see . */ -/* - * This file was auto-generated by: - * `qmk chibios-confmigrate -i keyboards/keychron/q2/mcuconf.h -r platforms/chibios/boards/QMK_PROTON_C/configs/mcuconf.h` - */ - #pragma once #include_next From 572e5270932266a18238b44aeec6a299d8673789 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <2831039915@qq.com> Date: Mon, 24 Jan 2022 12:16:48 +0800 Subject: [PATCH 122/155] Update .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 768f40b1918c..f16bbd20304d 100644 --- a/.gitignore +++ b/.gitignore @@ -91,3 +91,5 @@ user_song_list.h compile_commands.json .clangd/ .cache/ + +si \ No newline at end of file From 3703fdf20d2676f428e20565591c8b229366c257 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <2831039915@qq.com> Date: Tue, 25 Jan 2022 10:49:44 +0800 Subject: [PATCH 123/155] Update .gitignore --- .gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitignore b/.gitignore index f16bbd20304d..768f40b1918c 100644 --- a/.gitignore +++ b/.gitignore @@ -91,5 +91,3 @@ user_song_list.h compile_commands.json .clangd/ .cache/ - -si \ No newline at end of file From e33c0982563cc804b70ef57054355b5b58546307 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Wed, 26 Jan 2022 10:39:22 -0500 Subject: [PATCH 124/155] Updated build options --- .../zodiark/keymaps/solartempest/config.h | 33 +- .../zodiark/keymaps/solartempest/encoder.c | 4 +- .../zodiark/keymaps/solartempest/rules.mk | 4 + .../aleblazer/zodiark/zodiark VIA layout.json | 367 ++++++++++++++++++ 4 files changed, 404 insertions(+), 4 deletions(-) create mode 100644 keyboards/aleblazer/zodiark/zodiark VIA layout.json diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h index 8714be8d4d86..bb4d128a97f1 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h @@ -18,7 +18,36 @@ along with this program. If not, see . #define MASTER_LEFT +#undef DEBOUNCE +#define DEBOUNCE 6 //Default is 5 + +// Tapping settings +#define TAP_CODE_DELAY 10 +#define TAPPING_TOGGLE 2 //Tap TT twice to toggle layer +#define TAPPING_TERM 160 //Tapping duration in ms + +// Disabled to save space +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION +#define NO_ACTION_ONESHOT //Save 244 bytes (-244). +#define NO_RESET //Save 40 bytes (-40). +#define LAYER_STATE_8BIT //For less than 8 bits worth of layers. +#undef LOCKING_SUPPORT_ENABLE //For MX lock keys only. +#undef LOCKING_RESYNC_ENABLE //For MX lock keys only. + + #ifdef OLED_ENABLE - #define OLED_DISPLAY_128X64 - #define OLED_TIMEOUT 400000 + #define OLED_DISPLAY_128X64 + #define OLED_TIMEOUT 80000 //80000 = 80secs, 120000 = 2mins in ms. + #define SPLIT_OLED_ENABLE //Synx on/off OLED state between halves (+100). +#endif + +#ifdef RGBLIGHT_ENABLE + #undef RGBLIGHT_ANIMATIONS // Very memory intensive (+2604) + #define RGBLIGHT_EFFECT_STATIC_GRADIENT //Preferred RGB effect (+262) + #define RGBLIGHT_SLEEP //Turn off LEDs when computer sleeping (+72) +#endif + +#ifdef VIA_ENABLE + #define DYNAMIC_KEYMAP_LAYER_COUNT 5 #endif diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c index c08cfed5c173..990f357edf66 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c @@ -25,9 +25,9 @@ bool encoder_update_user(uint8_t index, bool clockwise) { } } else if (index == 1) { if (clockwise) { - tap_code(KC_PGDOWN); - } else { tap_code(KC_PGUP); + } else { + tap_code(KC_PGDOWN); } } return true; diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk b/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk index 1e5b99807cb7..31b6fc2af3dd 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk @@ -1 +1,5 @@ VIA_ENABLE = yes +BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite +GRAVE_ESC_ENABLE = no # Save space by not using KC_GESC (+127) +SPACE_CADET_ENABLE = no # Save space by not using space cadet left/right shift (+350) +#MOUSEKEY_ENABLE = no # Mouse keys \ No newline at end of file diff --git a/keyboards/aleblazer/zodiark/zodiark VIA layout.json b/keyboards/aleblazer/zodiark/zodiark VIA layout.json new file mode 100644 index 000000000000..6c6ec1511ed3 --- /dev/null +++ b/keyboards/aleblazer/zodiark/zodiark VIA layout.json @@ -0,0 +1,367 @@ +{ + "name": "Zodiark", + "vendorProductId": 4177656066, + "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + "layers": [ + [ + "KC_GRV", + "KC_1", + "KC_2", + "KC_3", + "KC_4", + "KC_5", + "S(LWIN(SWIN(KC_LEFT)))", + "KC_ESC", + "KC_Q", + "KC_W", + "KC_E", + "KC_R", + "KC_T", + "KC_F13", + "KC_TAB", + "KC_A", + "KC_S", + "KC_D", + "KC_F", + "KC_G", + "KC_LBRC", + "KC_LSFT", + "KC_Z", + "KC_X", + "KC_C", + "KC_V", + "KC_B", + "KC_MUTE", + "KC_UP", + "KC_DOWN", + "KC_LGUI", + "KC_LALT", + "KC_LCTL", + "KC_ENT", + "TT(3)", + "KC_MINS", + "KC_0", + "KC_9", + "KC_8", + "KC_7", + "KC_6", + "S(LWIN(SWIN(KC_RGHT)))", + "KC_BSPC", + "KC_P", + "KC_O", + "KC_I", + "KC_U", + "KC_Y", + "KC_F14", + "KC_QUOT", + "KC_SCLN", + "KC_L", + "KC_K", + "KC_J", + "KC_H", + "KC_RBRC", + "KC_RSFT", + "KC_SLSH", + "KC_DOT", + "KC_COMM", + "KC_M", + "KC_N", + "C(KC_W)", + "KC_RGHT", + "KC_LEFT", + "TO(1)", + "KC_RALT", + "KC_RCTL", + "KC_SPC", + "TT(4)" + ], + [ + "KC_PSCR", + "KC_4", + "KC_1", + "KC_2", + "KC_3", + "KC_G", + "KC_T", + "KC_F12", + "KC_ESC", + "KC_Q", + "KC_W", + "KC_E", + "KC_R", + "KC_G", + "KC_TAB", + "KC_TAB", + "KC_A", + "KC_S", + "KC_D", + "KC_F", + "KC_B", + "KC_LSFT", + "KC_LSFT", + "KC_Z", + "KC_X", + "KC_C", + "KC_V", + "KC_TRNS", + "KC_LCTL", + "KC_LCTL", + "KC_TRNS", + "KC_LALT", + "KC_LCTL", + "KC_SPC", + "KC_F22", + "KC_F4", + "KC_F11", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "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", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_RALT", + "KC_TRNS", + "TO(0)", + "KC_RALT", + "MO(4)", + "KC_LCTL", + "MO(2)" + ], + [ + "KC_GRV", + "KC_1", + "KC_2", + "KC_3", + "KC_4", + "KC_5", + "KC_BSLS", + "KC_ESC", + "KC_Q", + "KC_W", + "KC_E", + "KC_R", + "KC_T", + "KC_BSPC", + "KC_TAB", + "KC_A", + "KC_S", + "KC_D", + "KC_F", + "KC_G", + "KC_LBRC", + "KC_LSFT", + "KC_Z", + "KC_X", + "KC_C", + "KC_V", + "KC_B", + "KC_TRNS", + "KC_LEFT", + "KC_DOWN", + "KC_LGUI", + "KC_LALT", + "KC_LCTL", + "KC_SPC", + "TT(2)", + "KC_MINS", + "KC_0", + "KC_9", + "KC_8", + "KC_7", + "KC_6", + "KC_DEL", + "KC_BSPC", + "KC_P", + "KC_O", + "KC_I", + "KC_U", + "KC_Y", + "KC_BSLS", + "KC_QUOT", + "KC_SCLN", + "KC_L", + "KC_K", + "KC_J", + "KC_H", + "KC_RBRC", + "KC_RSFT", + "KC_SLSH", + "KC_DOT", + "KC_COMM", + "KC_M", + "KC_N", + "KC_TRNS", + "KC_DOWN", + "KC_UP", + "TO(1)", + "KC_RALT", + "KC_RCTL", + "KC_ENT", + "TT(3)" + ], + [ + "KC_GRV", + "KC_F1", + "KC_F2", + "KC_F3", + "KC_F4", + "KC_F5", + "KC_TRNS", + "KC_ESC", + "KC_1", + "KC_2", + "KC_3", + "KC_4", + "KC_5", + "KC_TRNS", + "KC_TRNS", + "KC_EXLM", + "KC_AT", + "KC_HASH", + "KC_DLR", + "KC_PERC", + "KC_TRNS", + "KC_TRNS", + "KC_EQL", + "KC_MINS", + "KC_PLUS", + "KC_LCBR", + "KC_RCBR", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_F11", + "KC_F10", + "KC_F9", + "KC_F8", + "KC_F7", + "KC_F6", + "KC_TRNS", + "KC_F12", + "KC_0", + "KC_9", + "KC_8", + "KC_7", + "KC_6", + "KC_TRNS", + "KC_PIPE", + "KC_RPRN", + "KC_LPRN", + "KC_ASTR", + "KC_AMPR", + "KC_CIRC", + "KC_TRNS", + "KC_TRNS", + "KC_BSLS", + "KC_COLN", + "KC_DOT", + "KC_RBRC", + "KC_LBRC", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_BSPC" + ], + [ + "KC_TRNS", + "C(KC_MINS)", + "C(KC_PPLS)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "C(KC_U)", + "C(KC_DOWN)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "C(KC_LEFT)", + "C(KC_RGHT)", + "KC_TRNS", + "KC_TRNS", + "C(KC_Z)", + "C(KC_X)", + "C(KC_C)", + "C(KC_V)", + "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_F14", + "KC_F13", + "KC_TRNS", + "KC_DEL", + "KC_INS", + "KC_END", + "KC_UP", + "KC_HOME", + "KC_TRNS", + "KC_TRNS", + "KC_BSPC", + "KC_NLCK", + "KC_RGHT", + "KC_DOWN", + "KC_LEFT", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_CAPS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_SLCK", + "KC_TRNS", + "KC_WWW_REFRESH", + "KC_TRNS", + "KC_TRNS" + ] + ] +} \ No newline at end of file From 2c9408457b31fc45ecaa5e36d55e1527254b26b3 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Thu, 27 Jan 2022 01:20:15 -0500 Subject: [PATCH 125/155] Added pimoroni trackball support --- .../zodiark/keymaps/solartempest/config.h | 11 +- .../zodiark/keymaps/solartempest/encoder.c | 4 +- .../zodiark/keymaps/solartempest/keymap.c | 398 +++++++++++++++++- .../zodiark/keymaps/solartempest/rules.mk | 5 +- .../keymaps/solartempest/snakey_minimal.c | 295 +++++++++++++ 5 files changed, 706 insertions(+), 7 deletions(-) create mode 100644 keyboards/aleblazer/zodiark/keymaps/solartempest/snakey_minimal.c diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h index bb4d128a97f1..c53fc902cbc1 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h @@ -35,19 +35,28 @@ along with this program. If not, see . #undef LOCKING_SUPPORT_ENABLE //For MX lock keys only. #undef LOCKING_RESYNC_ENABLE //For MX lock keys only. - #ifdef OLED_ENABLE #define OLED_DISPLAY_128X64 #define OLED_TIMEOUT 80000 //80000 = 80secs, 120000 = 2mins in ms. #define SPLIT_OLED_ENABLE //Synx on/off OLED state between halves (+100). + #define OLED_LOGO //Enable to print snakey custom logo on slave side (+108). #endif #ifdef RGBLIGHT_ENABLE #undef RGBLIGHT_ANIMATIONS // Very memory intensive (+2604) #define RGBLIGHT_EFFECT_STATIC_GRADIENT //Preferred RGB effect (+262) + //#define RGBLIGHT_EFFECT_SNAKE //For testing LED order #define RGBLIGHT_SLEEP //Turn off LEDs when computer sleeping (+72) #endif +// Pimoroni trackball settings +#ifdef POINTING_DEVICE_ENABLE + //#define PIMORONI_TRACKBALL_INTERVAL_MS 6 //Default is 8ms + #define POINTING_DEVICE_ROTATION_90 + #define PIMORONI_TRACKBALL_INVERT_Y + #define PIMORONI_TRACKBALL_INVERT_X +#endif + #ifdef VIA_ENABLE #define DYNAMIC_KEYMAP_LAYER_COUNT 5 #endif diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c index 990f357edf66..da7667dd3b58 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c @@ -19,9 +19,9 @@ along with this program. If not, see . bool encoder_update_user(uint8_t index, bool clockwise) { if (index == 0) { if (clockwise) { - tap_code(KC_VOLU); - } else { tap_code(KC_VOLD); + } else { + tap_code(KC_VOLU); } } else if (index == 1) { if (clockwise) { diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c index f9680ecd0273..6b52540f005c 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c @@ -13,12 +13,43 @@ along with this program. If not, see . */ #include QMK_KEYBOARD_H #ifdef OLED_ENABLE - #include "oled.c" + //#include "oled.c" + #include "snakey_minimal.c" #endif #include "encoder.c" -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +#ifdef POINTING_DEVICE_ENABLE + bool trackball_is_scrolling = true; //Default mode is scrolling + bool trackball_is_precision = false; //Default mode is less precise + bool was_scrolling = true; //Remember preferred state of trackball scrolling +#endif + +#ifdef VIA_ENABLE + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = USER00, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + SBS, //Shift backspace to delete whole word (Swap KC_BPSC with this) + PM_SCROLL, //Toggle trackball scrolling mode + PM_PRECISION, //Toggle trackball precision mode + D2SKATE //Destiny 2 hunter sword skate + }; +#else + enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. + ATABF = SAFE_RANGE, //Alt tab forwards + ATABR, //Alt tab reverse + NMR, //Move window to monitor on right + NML, //Move window to monitor on left + SBS, //Shift backspace to delete whole word (Swap KC_BPSC with this) + PM_SCROLL, //Toggle trackball scrolling mode + PM_PRECISION, //Toggle trackball precision mode + D2SKATE //Destiny 2 hunter sword skate + }; +#endif +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* [0] = LAYOUT( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, @@ -50,5 +81,366 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_SPI, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_RMOD, RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD ) - +*/ }; + +#ifdef POINTING_DEVICE_ENABLE + void run_trackball_cleanup(void) { //Set colour of trackball LED. Does not require RGBLIGHT_ENABLE if colour shorthands are not used. + #ifdef POINTING_DEVICE_ENABLE + if (trackball_is_scrolling) { + pimoroni_trackball_set_rgbw(43, 153, 103, 0x00); + } else if (!trackball_is_precision) { + pimoroni_trackball_set_rgbw(0, 27, 199, 0x00); + } else { + pimoroni_trackball_set_rgbw(217, 165, 33, 0x00); //RGB_GOLDENROD in number form. + } + #endif + } + + uint8_t pointing_device_handle_buttons(uint8_t buttons, bool pressed, pointing_device_buttons_t button) { + if (pressed) { + buttons |= 1 << (button); + #ifdef HAPTIC_ENABLE //Haptic feedback when trackball button is pressed + DRV_pulse(4); //sharp_click + #endif + } else { + buttons &= ~(1 << (button)); + } + return buttons; + } + + report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) { + if (trackball_is_scrolling) { + mouse_report.h = mouse_report.x; + #ifndef PIMORONI_TRACKBALL_INVERT_X + mouse_report.v = 0.3*mouse_report.y; //Multiplier to lower scrolling sensitivity + #else + mouse_report.v = 0.3*-mouse_report.y; //invert vertical scroll direction + #endif + mouse_report.x = mouse_report.y = 0; + } + return mouse_report; + } + + #if !defined(MOUSEKEY_ENABLE) //Allows for button clicks on keymap even though mousekeys is not defined. + static bool mouse_button_one, trackball_button_one; + #endif + + void trackball_register_button(bool pressed, enum mouse_buttons button) { + report_mouse_t currentReport = pointing_device_get_report(); + if (pressed) { + currentReport.buttons |= button; + } else { + currentReport.buttons &= ~button; + } + pointing_device_set_report(currentReport); + } +#endif + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + #if defined(KEYBOARD_PET) || defined(OLED_LOGO) + if (record->event.pressed) { //OLED timeout code + oled_timer = timer_read32(); + } + #endif + + switch (keycode) { //For keycode overrides + #ifdef SUPER_ALT_TAB_ENABLE + case ATABF: //Alt tab forwards + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + return true; + case ATABR: //Alt tab reverse + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_LSHIFT); + register_code(KC_TAB); + } else { + unregister_code(KC_LSHIFT); + unregister_code(KC_TAB); + } + return true; + #endif + +/* case NMR: //Move window to next monitor on right + if (record->event.pressed) { + register_code(KC_LSFT); + register_code(KC_LWIN); + register_code(KC_RIGHT); + unregister_code(KC_RIGHT); + unregister_code(KC_LWIN); + unregister_code(KC_LSFT); + } + return true; + case NML: //Move window to next monitor on left + if (record->event.pressed) { + register_code(KC_LSFT); + register_code(KC_LWIN); + register_code(KC_LEFT); + unregister_code(KC_LEFT); + unregister_code(KC_LWIN); + unregister_code(KC_LSFT); + } + return true; + + case KC_RSFT: //Shift Backspace to Delete Whole Word. Inspired by Hellsingcoder. + rshift_held = record->event.pressed; + held_shift = keycode; + #ifdef KEYBOARD_PET // KEYBOARD PET STATUS + if (record->event.pressed) { + isBarking = true; + } else { + isBarking = false; + } + #endif + return true; + case KC_LSFT: + lshift_held = record->event.pressed; + held_shift = keycode; + #ifdef KEYBOARD_PET // KEYBOARD PET STATUS + if (record->event.pressed) { + isBarking = true; + } else { + isBarking = false; + } + #endif + return true; + case SBS: + if (record->event.pressed) { //When left shift is held and backspace pressed, one whole word will be deleted (left). + if (lshift_held) { + unregister_code(held_shift); + register_code(KC_LCTL); + register_code(KC_BSPC); + } else if (rshift_held) { //When left shift is held and backspace pressed, one whole word will be deleted (right). + unregister_code(held_shift); + register_code(KC_LCTL); + register_code(KC_DEL); + } else { + register_code(KC_BSPC); + } + } else { + unregister_code(KC_BSPC); + unregister_code(KC_DEL); + unregister_code(KC_LCTL); + if (lshift_held || rshift_held) { + register_code(held_shift); + } + } + return false; + #ifdef D2SKATE_MACRO_ENABLE + case D2SKATE: + if (record->event.pressed) { + register_code(KC_0); + wait_ms(34); + register_code(KC_SPC); + unregister_code(KC_0); + register_code(KC_X); + wait_ms(18); + unregister_code(KC_SPC); + unregister_code(KC_X); + rgblight_sethsv_noeeprom(180,255,80); + D2SKATE_skated = true; + } + return false; + case KC_1: + case KC_2: + case KC_3: + if (record->event.pressed) { + if(D2SKATE_skated){ //Start the cooldown timer + D2SKATE_TIMER = timer_read(); + D2SKATE_skated = false; + D2SKATE_reset = false; + } + } + return true; + #endif +*/ + #ifdef POINTING_DEVICE_ENABLE //Allow modes when trackball is enabled. + case PM_SCROLL: + if (record->event.pressed) { + if (trackball_is_scrolling || was_scrolling){ //Enable toggling for trackball scrolling + trackball_is_scrolling=false; + was_scrolling=false; //Tracks status of scrolling setting. Works with holding of layer key for mouse mode. + } else{ + trackball_is_scrolling=true; + was_scrolling=true; + } + run_trackball_cleanup(); + break; + } + case PM_PRECISION: + if (record->event.pressed) { + if (trackball_is_precision){ //Enable toggling for trackball precision + pimoroni_trackball_set_precision(1.75); + trackball_is_precision=false; + } else{ + pimoroni_trackball_set_precision(0.8); + trackball_is_precision=true; + } + run_trackball_cleanup(); + break; + } + #ifndef MOUSEKEY_ENABLE //Allow for using mouse buttons in the keymap when mouse keys is not enabled. + case KC_MS_BTN1: + mouse_button_one = record->event.pressed; + trackball_register_button(mouse_button_one | trackball_button_one, MOUSE_BTN1); + break; + case KC_MS_BTN2: + trackball_register_button(record->event.pressed, MOUSE_BTN2); + break; + case KC_MS_BTN3: + trackball_register_button(record->event.pressed, MOUSE_BTN3); + break; + #endif + #endif + + #ifdef KEYBOARD_PET // KEYBOARD PET STATUS + case KC_LCTL: + case KC_RCTL: + #ifndef SNEAK_DISABLE + if (record->event.pressed) { //Pet sneaks when control held. + isSneaking = true; + } else { + isSneaking = false; + } + #endif + #ifdef HAPTIC_ENABLE //Set different patterns for keys on certain layers. In this case it is for gaming feedback. + if (record->event.pressed && (get_highest_layer(layer_state)==1)) { + DRV_pulse(51); //buzz_20 + } + #endif + return true; + case KC_SPC: + if (record->event.pressed) { //Pet jumps when enter is pressed. + isJumping = true; + showedJump = false; + } else { + isJumping = false; + } + return true; + #endif + + #ifdef HAPTIC_ENABLE //Set different patterns for keys on certain layers. In this case it is for gaming feedback. + case KC_G: + if (record->event.pressed && (get_highest_layer(layer_state)==1)) { + DRV_pulse(50); //buzz_40 + } + case KC_R: + if (record->event.pressed && (get_highest_layer(layer_state)==1)) { + DRV_pulse(52); //pulsing_strong + } + case KC_F: + if (record->event.pressed && (get_highest_layer(layer_state)==1)) { + DRV_pulse(49); //buzz_60 + } + #endif + } + return true; +} + + +#ifdef RGBLIGHT_ENABLE + layer_state_t layer_state_set_user(layer_state_t state) //Use for layer lighting. This method uses less space than RGBLIGHT_LAYER_SEGMENTS. + { + switch (get_highest_layer(state)) { // Change all other LEDs based on layer state as well + case 0: + //rgblight_sethsv_noeeprom(50,255,80); //green-blue gradient + //rgblight_sethsv_noeeprom(115,170,80); //pale blue gradient + rgblight_sethsv_noeeprom(0,220,60); //yellow gradient + #ifdef POINTING_DEVICE_ENABLE + if (was_scrolling==true){ //Check if was scrolling when layer was left + trackball_is_scrolling=true; + run_trackball_cleanup(); + } else{ + trackball_is_scrolling=false; + run_trackball_cleanup(); + } + #endif + break; + case 1: + rgblight_sethsv_noeeprom(252,255,80); + #ifdef HAPTIC_ENABLE //Set different patterns for haptic feedback layer indication + DRV_pulse(69); //transition_hum_10 + #endif + break; + case 2: + rgblight_sethsv_noeeprom(80,255,80); + #ifdef HAPTIC_ENABLE + DRV_pulse(37); //lg_dblclick_str + #endif + break; + case 3: + //rgblight_sethsv_noeeprom(118,255,80); //blue-purple gradient + rgblight_sethsv_noeeprom(160,255,80); //blue-magenta gradient + #ifdef HAPTIC_ENABLE + DRV_pulse(31); //sh_dblclick_med + #endif + break; + case 4: + rgblight_sethsv_noeeprom(218,255,80); + #ifdef HAPTIC_ENABLE + DRV_pulse(7); //soft_bump + #endif + #ifdef POINTING_DEVICE_ENABLE //Set trackball mouse mode when layer 4 is activated + if (was_scrolling==true){ //Check if in scrolling mode when layer was activated + trackball_is_scrolling=false; + run_trackball_cleanup(); + } + #endif + } + return state; + } + + bool led_update_user(led_t led_state) //Lock key status indicators + { + if(led_state.caps_lock){ + rgblight_sethsv_range(43,100,170, 4,8); //White-left caps lock indication + } + if(!(led_state.num_lock)){ + rgblight_sethsv_range(43,100,170, 0,2); //White-right num lock indication. Since this indicator is inverted, it must be on the master side of the keyboard to shut off properly when the computer is sleeping. + rgblight_sethsv_range(43,100,170, 10,12); + } + if(led_state.scroll_lock){ + rgblight_sethsv_range(43,100,170, 2,4); //White-middle scroll lock indication + rgblight_sethsv_range(43,100,170, 8,10); + } + return true; + } +#endif + + +void keyboard_post_init_user(void) +{ + #ifdef RGBLIGHT_ENABLE + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 + #endif + layer_move(0); //Start on layer0 by default to set LED colours. Can remove to save a very small amount of space. + #ifdef POINTING_DEVICE_ENABLE + pimoroni_trackball_set_precision(1.75); //Start trackball with lower precision mode + run_trackball_cleanup(); + #endif +} + +#ifdef POINTING_DEVICE_ENABLE + void suspend_power_down_user(void) { //Code does not work, need to confirm why + pimoroni_trackball_set_rgbw(0,0,0, 0x00); //Turn off Pimoroni trackball LED when computer is sleeping + } +#endif + +#ifdef POINTING_DEVICE_ENABLE + void suspend_wakeup_init_user(void) { //turn on Pimoroni LED when awoken + run_trackball_cleanup(); + } +#endif diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk b/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk index 31b6fc2af3dd..f7bdbb17cb52 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk @@ -2,4 +2,7 @@ VIA_ENABLE = yes BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite GRAVE_ESC_ENABLE = no # Save space by not using KC_GESC (+127) SPACE_CADET_ENABLE = no # Save space by not using space cadet left/right shift (+350) -#MOUSEKEY_ENABLE = no # Mouse keys \ No newline at end of file +#MOUSEKEY_ENABLE = no # Mouse keys (+1482). Not required for trackball usage. + +POINTING_DEVICE_ENABLE = yes # Enable Pimoroni Trackball on master (+2304) +POINTING_DEVICE_DRIVER = pimoroni_trackball \ No newline at end of file diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/snakey_minimal.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/snakey_minimal.c new file mode 100644 index 000000000000..abdf1609bbc9 --- /dev/null +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/snakey_minimal.c @@ -0,0 +1,295 @@ +/* Copyright + * 2021 solartempest + * 2021 Luna code adapted from HellSingCoder and Jackasaur + * 2021 QMK + * + * 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 o + * 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 . + */ + +//SSD1306 OLED update loop +#ifdef OLED_ENABLE + uint32_t oled_timer = 0; //OLED timeout + led_t led_usb_state; + + #define KEYBOARD_PET + // KEYBOARD PET START + + // advanced settings + #define ANIM_FRAME_DURATION 300 // how long each frame lasts in ms. Default is 200. + #define ANIM_SIZE 96 // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024 + + // timers + uint32_t anim_timer = 0; + uint32_t text_timer = 0; + + // current frame + uint8_t current_frame = 0; + + // status variables + #ifndef SNEAK_DISABLE + bool isSneaking = false; + #endif + bool isJumping = false; + bool showedJump = true; + bool isBarking = false; + + #if defined(OLED_LOGO) && !defined(OLED_NO_SLAVE) && !defined(OLED_NO_MASTER) + static void render_logo(int LUNA_X, int LUNA_Y) { + /*static const char PROGMEM luna_logo[] = { + 0x00, 0x00, 0x04, 0xf6, 0xb8, 0xf8, 0xd8, 0xf0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, + 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xc0, 0xe1, 0xf3, 0xfb, 0x7f, 0x1f, 0x0f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x3f, 0x03, + 0x01, 0x00, 0x00, 0x00, 0x80, 0xc1, 0xf3, 0xff, 0x7f, 0x1f, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x30, + 0x1e, 0x3f, 0x3f, 0x7f, 0xf9, 0xf0, 0xf0, 0x70, 0x78, 0x3c, 0x3f, 0x1f, 0x0f, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0x3f, 0x7f, 0x7f, 0xfb, 0xf1, 0xf0, 0x78, 0x3c, 0x1e, 0x0f, 0x03, 0x00, 0x00, + };*/ + static const char PROGMEM luna_logo[] = { // 'snakey-logo-64x44', 64x44px + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x0c, 0xcf, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x60, 0x60, + 0xe0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x7f, 0x7f, 0xf3, 0xf3, 0xff, 0xff, 0xfe, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x38, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xf8, 0xfe, 0xfe, 0xff, + 0xff, 0x7f, 0x3f, 0x3f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x3f, 0x7f, 0x7f, 0xff, 0xff, 0xfe, + 0xf8, 0xf8, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc1, 0xc1, 0xe1, 0xf7, 0xff, + 0xff, 0x7f, 0x3f, 0x07, 0x03, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf1, 0xff, + 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf0, 0xc0, + 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xfc, 0xfc, 0xfe, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x07, 0x03, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0x3f, + 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf8, 0xfc, 0x3e, 0x0f, 0x07, 0x01, + 0x00, 0x00, 0x0f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf0, 0xe0, 0xc0, 0xc0, 0xe0, 0xe0, + 0xf0, 0xf0, 0xf8, 0xf8, 0xfe, 0xff, 0xff, 0x7f, 0x3f, 0x0f, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf0, 0xe0, + 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xfc, 0x7e, 0x3f, 0x0f, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, + 0x07, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, + 0x0f, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + oled_set_cursor(LUNA_X,LUNA_Y); + oled_write_raw_P(luna_logo, sizeof(luna_logo)); + } + #endif + + // logic + static void render_luna(int LUNA_X, int LUNA_Y) { + + // Sit + static const char PROGMEM sit[2][ANIM_SIZE] = { + // 'sit1', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xcc, + 0xcc, 0xf8, 0xf8, 0xf0, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3f, 0x7f, 0xfc, 0xf9, 0xf1, + 0xe1, 0xc1, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x38, 0x70, 0x60, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf9, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + // 'sit2', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xcc, + 0xcc, 0xf8, 0xf8, 0xf0, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3f, 0x7f, 0xfc, 0xf9, 0xf1, + 0xe1, 0xc1, 0x81, 0x00, 0x00, 0x01, 0x01, 0x02, 0x06, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x7c, 0x60, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf9, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + //Walk and run animations have been removed to save space. + + // Bark + static const char PROGMEM bark[2][ANIM_SIZE] = { + // 'bark1', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0x30, 0x70, 0xe0, 0xe0, 0xc0, 0xc0, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0xff, 0xff, 0xe7, 0xe7, 0xef, 0xef, 0xcf, 0xcb, 0x83, 0x83, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x1c, 0x38, 0x78, 0xf1, 0xe3, 0xe3, 0xe7, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + // 'bark2', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0x60, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0x9f, + 0x0f, 0x0e, 0x1f, 0x1f, 0x3f, 0x3f, 0x7e, 0xe6, 0x83, 0x03, 0x0f, 0x43, 0x43, 0x90, 0x88, 0x08, + 0x00, 0x00, 0x03, 0x1e, 0x3c, 0x78, 0xf0, 0xe0, 0xe0, 0xf0, 0xf0, 0xfb, 0xff, 0xff, 0xff, 0x7f, + 0x7f, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + // Sneak + #ifndef SNEAK_DISABLE + static const char PROGMEM sneak[2][ANIM_SIZE] = { + // 'sneak1', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xcc, 0xf8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, + 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x7f, 0xf1, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, + 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x01, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, + }, + // 'sneak2', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xe0, 0xf8, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, + 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x7f, 0xf0, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, + 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + #endif + + // animation + void animate_luna(void) { + // jump + if (isJumping || !showedJump) { + // clear + oled_set_cursor(LUNA_X,LUNA_Y +2); + oled_write(" ", false); + oled_set_cursor(LUNA_X,LUNA_Y -1); + showedJump = true; + } else { + // clear + oled_set_cursor(LUNA_X,LUNA_Y -1); + oled_write(" ", false); + oled_set_cursor(LUNA_X,LUNA_Y); + } + + // switch frame + current_frame = (current_frame + 1) % 2; + + // current status + if(isBarking) { + oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); + #ifndef SNEAK_DISABLE + } else if(isSneaking) { + oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + #endif + } else { + oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); + } + } + + // animation timer + if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animate_luna(); + } + } + // KEYBOARD PET END + + + #if !defined(OLED_NO_SLAVE) && !defined(OLED_NO_MASTER) + static void print_logo_narrow(void) { + //oled_set_cursor(0,1); + //oled_write("----------", false); + + oled_set_cursor(0,3); + oled_write(" SOLAR", false); + oled_set_cursor(0,4); + oled_write(" TEMPEST", false); + + //oled_set_cursor(0,15); //Last line on the display + //oled_write("----------", false); + + #ifdef OLED_LOGO + render_logo(0,7); //Not defining this in config.h will save space (+112). + #endif + } + #endif + + static void print_status_narrow(void) { + // Print current layer + oled_set_cursor(0,1); + oled_write("---LAYER--", false); + + oled_set_cursor(0,2); + switch (get_highest_layer(layer_state)) { + case 0: + case 2: + oled_write("Base ", false); + break; + case 1: + oled_write("Game ", false); + break; + case 4: + oled_write("Raise", false); + break; + case 3: + oled_write("Lower", false); + break; + } + + // lock status + oled_set_cursor(0,5); + oled_write("---LOCK---", false); + oled_set_cursor(0,6); + oled_write("Caps", led_usb_state.caps_lock); + oled_set_cursor(0,7); + oled_write("Num", !(led_usb_state.num_lock)); + oled_set_cursor(0,8); + oled_write("Scrl", led_usb_state.scroll_lock); + + /* KEYBOARD PET RENDER START */ + render_luna(0,11); + /* KEYBOARD PET RENDER END */ + } + + oled_rotation_t oled_init_user(oled_rotation_t rotation) { + if (is_keyboard_master()) { + return OLED_ROTATION_90; + } + else{ + return OLED_ROTATION_270; + } + } + + bool oled_task_user(void) { + led_usb_state = host_keyboard_led_state(); + + + if (is_keyboard_master()) { + if (timer_elapsed32(oled_timer) > 30000) {//OLED timeout 30000ms = 30s + oled_off(); + return false; + } else { + oled_on(); + } + #ifndef OLED_NO_MASTER + print_status_narrow(); + #endif + } else { + #ifdef OLED_NO_SLAVE //do not render slave + #else + #if !defined(OLED_NO_MASTER) //render as normal + print_logo_narrow(); + #else //render status on slave + print_status_narrow(); + #endif + #endif + } + return false; + } +#endif From 429f8782575d7393cbc538dbb1a3a4c57e22b784 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Fri, 28 Jan 2022 00:35:06 -0500 Subject: [PATCH 126/155] Added VIA remapping of rotary encoders and custom functions. --- .../aleblazer_zodiark_solartempest.hex | 1690 +++++++++++++++++ .../zodiark/keymaps/solartempest/config.h | 11 + .../zodiark/keymaps/solartempest/encoder.c | 72 +- .../zodiark/keymaps/solartempest/keymap.c | 111 +- .../zodiark/keymaps/solartempest/rules.mk | 2 +- .../keymaps/solartempest/snake_photo.c | 325 ++++ .../solartempest/zodiark VIA keymap.json | 82 + .../solartempest}/zodiark VIA layout.json | 112 +- 8 files changed, 2311 insertions(+), 94 deletions(-) create mode 100644 keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex create mode 100644 keyboards/aleblazer/zodiark/keymaps/solartempest/snake_photo.c create mode 100644 keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA keymap.json rename keyboards/aleblazer/zodiark/{ => keymaps/solartempest}/zodiark VIA layout.json (83%) diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex b/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex new file mode 100644 index 000000000000..cae6fe51aab8 --- /dev/null +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex @@ -0,0 +1,1690 @@ +:100000000C941E060C9465060C9465060C9465060B +:100010000C9498300C9465060C9465060C94650657 +:100020000C9465060C9465060C9469220C942522A8 +:100030000C9444270C9465060C9465060C94650694 +:100040000C9465060C9465060C9465060C94650684 +:100050000C9465060C9442230C9465060C9465067A +:100060000C9465060C9465060C9465060C94650664 +:100070000C9465060C9465060C9465060C94650654 +:100080000C9465060C9465060C9465060C94650644 +:100090000C9465060C9465060C9465060C94650634 +:1000A0000C9465060C9465060C946506050109021E +:1000B000A10185020901A1000509190129081500FE +:1000C0002501950875018102050109300931158165 +:1000D000257F95027508810609381581257F9501D0 +:1000E00075088106050C0A38021581257F95017572 +:1000F000088106C0C005010980A101850319012AF4 +:10010000B700150126B700950175108100C0050CD8 +:100110000901A101850419012AA002150126A002E6 +:10012000950175108100C00660FF0961A101096297 +:10013000150026FF00952075088102096315002629 +:10014000FF00952075089102C005010906A101056F +:100150000719E029E7150025019508750181029529 +:1001600001750881010507190029FF150026FF0008 +:100170009506750881000508190129059505750181 +:100180009102950175039101C0000000000000007C +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000007E0F00C2 +:1001B000D4FFFFFFC700000078000000000000002F +:1001C000002A2B28000000000000000000000000B2 +:1001D0000000000029000000002C1E3420212224F1 +:1001E000342627252E362D3738271E1F202122237F +:1001F0002425263333362E37381F04050607080911 +:100200000A0B0C0D0E0F10111213141516171819D6 +:100210001A1B1C1D2F3130232D3504050607080934 +:100220000A0B0C0D0E0F10111213141516171819B6 +:100230001A1B1C1D2F3130354C00DA1281FFD9F109 +:10024000DB20A4A62EAF00A0C000A1C800AED580C0 +:10025000A83FD300408D14200000000000000000E3 +:10026000000000000000000000000000000000008E +:10027000000000000080C0606060606060606060DE +:10028000C0C080000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A00000000000F8FC060652DACA5206EC1810EC +:1002B000101010909E436020231210121013312052 +:1002C00060C39F1E101C121212121C10F0E080005E +:1002D000000000000000000000000000000000001E +:1002E00000000000FFFF0000000000F0F707E0C082 +:1002F00000F8CF0100000000000000010303060E1B +:10030000080001C6FC00387000000000FFFFFF007D +:1003100000000000000000000000000000000000DD +:1003200000000000FFFF000000000001FDFC0001D4 +:100330001831630F1C38307366646460606070301D +:10034000381C0F0701000000A0E04000FFFFFF0085 +:10035000000000000000000000000000000000009D +:100360000000000001070C0C1C1C1C1C1D1D1C1C8B +:100370001C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CBD +:100380001C1C1C1C1C1C1C1C1C1C1C1C0F0F0300FC +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000008080D +:1003E0000CCFF0F0F0F0F06060E0C0C080000000E2 +:1003F000000000000000000000808080C0C0C0C07D +:10040000C0C0C0C08080800000000000000000006C +:1004100000000000000000000000000000000000DC +:100420000E7F7FF3F3FFFFFEFEFFFFFFFFFE3800AE +:10043000000080E0F8F8FEFEFFFF7F3F3F1F1F1F18 +:100440001F1F1F3F7F7FFFFFFEF8F8E080000000C6 +:10045000000000000000000000000000000000009C +:1004600000000080C1C1E1F7FFFF7F3F07030000EC +:1004700000C0FFFFFFFFFFFF0301000000000000BE +:10048000000000000000E0F1FFFFFFFF3F00000060 +:1004900000000000000080F0C0000000C0F0F8FC88 +:1004A000FCFE7F3F1F0F070703010000000080C014 +:1004B000F8FFFFFFFFFF0300000000000000000046 +:1004C000C0E0F0F8FEFFFFFF3F0703000000000060 +:1004D00000C0E0F8FC3E0F070100000F3F7FFFFF68 +:1004E000FFFFFCF0E0C0C0E0E0F0F0F8F8FEFFFF36 +:1004F0007F3F0F0F01000000000000000000000718 +:100500001F7FFFFFFFFFFDF0E0E0F0F0F8F8FC7E5A +:100510003F0F070300000000000000000000000182 +:100520000303070F0F0F0F0F0F0703030301000053 +:1005300000000000000000000000000000000000BB +:100540000000000103030707070F07030301000072 +:100550000000000000000000000001010101010195 +:10056000010101020202020202020202030303036A +:10057000030303030404040404040405050505053A +:1005800006060606060707070707080808080909F8 +:1005900009090A0A0A0B0B0B0C0C0C0D0D0D0E0EA3 +:1005A0000E0F0F0F10101111111212131314141536 +:1005B0001516161717181819191A1A1B1B1C1D1DAA +:1005C0001E1E1F2020212222232424252626272800 +:1005D00029292A2B2C2D2D2E2F3031323233343530 +:1005E000363738393A3B3C3D3E3F40414243444533 +:1005F000464748494A4C4D4E4F5051535455565812 +:10060000595A5B5D5E5F616264656668696B6C6DBB +:100610006F7072737577787A7B7D7E808283858731 +:10062000888A8C8E8F91939596989A9C9EA0A2A36F +:10063000A5A7A9ABADAFB1B3B5B7BABCBEC0C2C474 +:10064000C6C9CBCDCFD1D4D6D8DBDDDFE2E4E7E934 +:10065000EBEEF0F3F5F8FAFDFFFFAA7F554007082F +:100660007F0807003E5B4F5B3E003E6B4F6B3E00DA +:100670001C3E7C3E1C00183C7E3C18001C577D57DD +:100680001C001C5E7F5E1C0000183C180000FFE789 +:10069000C3E7FF00001824180000FFE7DBE7FF00B6 +:1006A00030483A060E00262979292600407F0505A4 +:1006B0000700407F05253F005A3CE73C5A007F3E3B +:1006C0001C1C0800081C1C3E7F0014227F22140002 +:1006D0005F5F005F5F0006097F017F00006689950C +:1006E0006A0060606060600094A2FFA29400080449 +:1006F0007E04080010207E20100008082A1C080034 +:10070000081C2A0808001E10101010000C1E0C1ED9 +:100710000C0030383E383000060E3E0E0600000059 +:100720000000000000005F0000000007000700005C +:10073000147F147F1400242A7F2A120023130864D4 +:100740006200364956205000000807030000001CD4 +:10075000224100000041221C00002A1C7F1C2A00AC +:1007600008083E08080000807030000008080808EB +:1007700008000000606000002010080402003E51E4 +:1007800049453E0000427F40000072494949460009 +:100790002141494D33001814127F1000274545456B +:1007A00039003C4A494931004121110907003649C5 +:1007B00049493600464949291E000000140000003E +:1007C00000403400000000081422410014141414E6 +:1007D00014000041221408000201590906003E419C +:1007E0005D594E007C1211127C007F494949360048 +:1007F0003E41414122007F4141413E007F494949FC +:1008000041007F09090901003E41415173007F0801 +:1008100008087F0000417F4100002040413F010067 +:100820007F08142241007F40404040007F021C02AC +:100830007F007F0408107F003E4141413E007F0958 +:10084000090906003E4151215E007F091929460031 +:1008500026494949320003017F0103003F404040DF +:100860003F001F2040201F003F4038403F006314DE +:10087000081463000304780403006159494D4300E0 +:10088000007F414141000204081020000041414125 +:100890007F00040201020400404040404000000389 +:1008A000070800002054547840007F284444380052 +:1008B000384444442800384444287F003854545471 +:1008C000180000087E09020018A4A49C78007F0884 +:1008D0000404780000447D4000002040403D0000BA +:1008E0007F102844000000417F4000007C04780411 +:1008F00078007C0804047800384444443800FC182C +:100900002424180018242418FC007C08040408007F +:1009100048545454240004043F4424003C404020E4 +:100920007C001C2040201C003C4030403C004428FF +:10093000102844004C9090907C004464544C440037 +:100940000008364100000000770000000041360832 +:1009500000000201020402003C2623263C000000A5 +:1009600000000000404040F0F8F8FF38FFF8F83F82 +:10097000F8F8FF38FFF8F8F04040400000000000B1 +:100980000080C0C0C0800000C0C08000000080C0E7 +:10099000C000C0C0000080C0C00000000000C0C097 +:1009A000C0C0C000C0C00000000000000000000087 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D00000000000000000000000000000C0F0F86F +:1009E000FC3E1E06010000007F4141417F007F4127 +:1009F00041417F000080C0E07E5B4F5BFEC0000095 +:100A0000C000DCD7DEDEDED7DC00C0000000000066 +:100A100000000000000000000000000000000000D6 +:100A200000000000494949FFFFFFFFE0DFBFBF00B2 +:100A3000BFBFDFE0FFFFFFFF4949490000000000A2 +:100A40001F3F6060E0BF1F007F7F071E381E077FCB +:100A50007F007F7F0E1F3B716000000000007F7FE2 +:100A60000C0C0C007E7E007F7E0303007F7E030360 +:100A70007E7E03037F7E000F3E703C063C703E0F7F +:100A800000327B49493F7E007F7E0303001E3F69A1 +:100A9000696F2600000000000000000000030F1F27 +:100AA0003F3C7870600000007F4141417F007F4102 +:100AB00041417F00307B7F7830202030787F3B00C1 +:100AC00003000F7F0F0F0F7F0F00030000000000D7 +:100AD0000000000000000000000000000000000016 +:100AE00000000000010101070F0F7F0F7F0F0F7E35 +:100AF0000F0F7F0F7F0F0F070101010000000000A3 +:100B000000000000000101000000000000000000E3 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B9000000000000000000000000000000000AFA6 +:100BA00000AE09025B00030100A0FA090400000185 +:100BB0000301010009211101000122400007058104 +:100BC0000308000A090401000203000000092111C2 +:100BD000010001222200070582032000010705030E +:100BE0000320000109040200010300000009211193 +:100BF000010001227B000705840320000A12010086 +:100C0000020000000801F902F901000102000110D0 +:100C1000035A006F0064006900610072006B0000FD +:100C200000140341006C00650062006C0061007AF2 +:100C300000650072000000040309040011241FBEB7 +:100C4000CFEFDAE0DEBFCDBF04B603FE27C0809150 +:100C50007C0890917D08A0917E08B0917F08873034 +:100C6000904BA740B04BD1F410927C0810927D08B5 +:100C700010927E0810927F0814BE84B7877F84BFCD +:100C80000FB6F894A8958091600088618093600009 +:100C9000109260000FBEE0E0F8E3099512E0A0E0DA +:100CA000B1E0E8E4F8E602C005900D92AC33B1077C +:100CB000D9F728E0ACE3B2E001C01D92AC37B2072F +:100CC000E1F70E946B270C94EB330C940000CF9358 +:100CD000DF9340917A0850917B084A5754409A011B +:100CE00020583E4F21303440C0F020E034E0241B37 +:100CF000350B6091780470917904FC01CA01240FCE +:100D0000351FC1E0D0E08217930750F0709379044B +:100D100060937804DF91CF91089520E831E0E9CF26 +:100D20004491DC01A658BB4F5C91451781F04C9370 +:100D3000AC01A6E056954795AA95E1F7DE0102C001 +:100D4000AA0FBB1F4A95E2F7AD016A2B752B0196DE +:100D50003196D9CFE8EDF0E080818E7F80831092CC +:100D6000E2001092DA001092E100A0EEB0E08C9167 +:100D700081608C9380818F77808319BCA7EDB0E070 +:100D80008C918E7F8C9380818F7E808310928F03D5 +:100D900008952091E4003091E50095E6A9012091A5 +:100DA000EC00822F817020FF06C08091E80080FF58 +:100DB00006C080E008952091E80022FD1AC08091CD +:100DC0009C03882389F0853089F08091EB0085FDB4 +:100DD0000FC02091E4003091E50042175307F9F26B +:100DE0009150E1F684E0089582E0089583E008954B +:100DF00081E00895EF92FF920F931F93CF937C01B0 +:100E00008B010E94C906C82F811117C08091E8008C +:100E100085FD0BC08091E8008E778093E8000E94EA +:100E2000C906882399F3C82F08C0F70181917F0173 +:100E30008093F1000150110949F78C2FCF911F9138 +:100E40000F91FF90EF90089580919E0387FF13C04C +:100E50008091E80082FF06C08091E8008B77809344 +:100E6000E80004C080919C038111F2CF0895809125 +:100E70009C038823D9F38091E80080FFF8CF80910C +:100E8000E8008E77ECCF982F9093E900242F762FEF +:100E900050E0891731F07091EC002091ED005091F5 +:100EA000F00021FD07C09F5F973071F78093E90044 +:100EB00081E008953091EB003E7F3093EB0030915C +:100EC000ED003D7F3093ED003091EB0031603093C9 +:100ED000EB007093EC002093ED005093F000209114 +:100EE000EE0027FDE0CF80E00895CF92DF92EF92F1 +:100EF000FF920F931F93CF93DF93C8EDD0E08881CB +:100F00008F7E8883E7EDF0E080818160808384E0DC +:100F100082BF81E080938F0388818E7F888302EE79 +:100F200010E0F80110821092DA0081EEC82ED12C68 +:100F3000F601108288818F77888388818068888312 +:100F400088818F7D888319BC10929C0310929D0329 +:100F500010929B0310929A0390EEE92EF12CF70168 +:100F600080818B7F808388818160888342E060E01C +:100F700080E00E944307F60180818E7F8083F80124 +:100F8000808181608083808188608083F701808197 +:100F90008E7F8083888180618883DF91CF911F91CC +:100FA0000F91FF90EF90DF90CF900895FC0180911A +:100FB000A4039091A50386179707A0F0611571050A +:100FC00029F49091E8009E779093E80090E06115F5 +:100FD000710551F4911108C08091E80082FF34C07E +:100FE00080E00895BC01F2CF80919C038823C1F179 +:100FF0008530C1F18091E80083FD30C08091E80028 +:1010000082FDEACF8091E80080FFE1CF8091F3007C +:101010002091F200382F6115710519F02830310543 +:1010200058F091E02830310509F090E02091E80077 +:101030002E772093E800CBCF81918093F10061500F +:1010400071092F5F3F4FE7CF80919C03882341F0C8 +:10105000853041F08091E80083FFBECF81E00895A4 +:1010600082E0089583E008950895809191030895A2 +:101070002FB7F894609188037091890380918A0357 +:1010800090918B032FBF08952091850330918603A3 +:101090002817390771F09093860380938503E091B8 +:1010A0008303F0918403309721F00084F185E02DD3 +:1010B00009940895209181033091820328173907FC +:1010C00071F09093820380938103E0918303F09108 +:1010D0008403309721F00680F781E02D099408956C +:1010E0002091740336E0839FC0011124629F800D1C +:1010F000911D1124811524E0920714F090E080E006 +:1011000086589B4F90937B0880937A080895FC0142 +:10111000680F791F8FEF91E32191822728E030E05B +:1011200087FF09C0880F892721503109C9F7E617C1 +:10113000F70791F70895880FF7CFFA01811101C0E1 +:10114000FB01099480917304982F9E7F61F4817054 +:10115000826080937304809176048B3A18F08AEA57 +:101160008093760408958831B0F381708661F1CF61 +:10117000AF92BF92DF92EF92FF920F931F93CF93A4 +:10118000DF93082F162FE901E42FF0E0E75AFA4F1A +:10119000611110C0E4915E2F4E2F4983E8835A837A +:1011A000DF91CF911F910F91FF90EF90DF90BF9053 +:1011B000AF900895E62EF12C4491D42EE42FF0E068 +:1011C00026E0829FC00111242FEF30E0B9010E9478 +:1011D0001232802F90E0880F991F55E5569FD0015D +:1011E000579FB00D11248A1B9B0B982F990F890FC5 +:1011F0005901AE18BF08AE9ED001AF9EB00DBE9E85 +:10120000B00D11245B2F189F80011124012F11278D +:101210005901A01AB10AAE9E8001AF9E100DBE9E6C +:10122000100D11245901A81AB108AE9CC001AF9C41 +:10123000900DBE9C900D1124892F9927281B390BE6 +:101240002E9FC0012F9F900D3E9F900D1124E92FDE +:1012500062307105A1F050F46115710509F49DCF5C +:101260006130710581F0EB2F512F97CF64307105FC +:1012700069F080F06630710509F48FCFF4CFE42F68 +:101280004B2F592F8ACFE42F412F87CFEB2F542F8D +:10129000492F83CF4B2F5D2DE12F7FCF80E0089525 +:1012A00078940895F894E82FE295EF70F0E031A17A +:1012B000282F2F7081E090E001C0880F2A95EAF76F +:1012C000982F9095932391A392A1892B82A30C949C +:1012D00050099091E60292FF06C0282F287128300D +:1012E000F9F4877F846093FF06C0282F2871283186 +:1012F000F1F4877E84612091E70220FF06C0382F39 +:1013000038713830D9F4877F816021FF06C0282FDB +:1013100028712831D1F4877E816194FD877E0895FC +:10132000282F24712430F9F68B7F8860DCCF282F9A +:101330002471243101F78B7E8861DDCF382F317124 +:10134000313019F78E7F8860E0CF282F217121314D +:1013500021F78E7E8861E1CFCF93DF93EC01823855 +:10136000910581F1B0F58133910509F491C020F523 +:101370008932910509F485C08A9709F490C0C11596 +:1013800021E5D20708F0AAC0C11530E5D30708F05F +:10139000F2C0CF3BD10508F089C0C83AD10508F0AA +:1013A000DFC0C53AD10508F0D3C0C430D105F8F488 +:1013B000C130D105E1F040C08533910509F45AC030 +:1013C000C997E9F68091E602837089F0C0EED0E01B +:1013D0000EC0833E910599F170F4803E910501F1B4 +:1013E000823E910561F68091E60282FD21C0CE0128 +:1013F000DF91CF910895863E910561F1873E910579 +:1014000071F1843E910509F0BACF8091E70281FF26 +:10141000EECF8091E602C7EED0E084FD0DC0E7CFAD +:101420008091E60280FDF7C09091E70290FFDFCF48 +:10143000C3EED0E084FFDBCFD0E0C0E0D8CF809116 +:10144000E60282FDEBC09091E70290FDBFCF84FFE2 +:10145000CECFF2CF8091E60283FDDDCFC8CF809161 +:10146000E60283FDDEC09091E70291FFF0CFC4EE6B +:10147000D0E0BDCF8091E60285FFB9CFC9E2D0E0D0 +:10148000B6CF8091E60285FFB2CFC5E3D0E0AFCF03 +:101490008091E60286FFABCFCAE2D0E0A8CF809170 +:1014A000E60286FFA4CFC1E3D0E0A1CFC11540E2A0 +:1014B000D40760F4C11581E0D80708F098CFCE01B9 +:1014C000815E9109079708F492CFB6CFC11590E4D9 +:1014D000D90708F4B1CFDF70D06A89CFC11524E5F0 +:1014E000D20778F4C11533E5D30708F072C0C115EF +:1014F00042E5D40708F05CC0DC2FCC27C16FD06A6E +:1015000076CFC1158AE5D80778F4C11599E5D907D2 +:1015100008F073C0C11528E5D20708F48DCFDC2F81 +:10152000CC27C06FD06A63CFCE0190568115904210 +:1015300008F082CF8D2F8F710E94690990E0982F5B +:10154000882788279F719C012C2BE901D0624FCFFF +:10155000C55AD0E0CD54DE4FC881D0E0D06447CF2B +:10156000C85AD0E0CC0FDD1FCA54DE4F0990D88195 +:10157000C02DD4643CCFCE0164E0969587956A95E2 +:10158000E1F783702C2F26952695237040E2249F47 +:1015900090011124382B8C2F8370C1E0D0E002C061 +:1015A000CC0FDD1F8A95E2F7C22BD32BDC681FCF4F +:1015B000CE018370992721E030E002C0220F331F53 +:1015C0008A95E2F7C695C69580E2C89FE00111248E +:1015D000EBCFCE018370992721E030E002C0220FCB +:1015E000331F8A95E2F7C695C69590E2C99FE00140 +:1015F0001124C22BD32BDA68FACE8C2F8F700E9465 +:10160000690934E0D695C7953A95E1F7CF709C2FDC +:10161000EC01D069ECCEC9E3D0E0E9CEC2EED0E077 +:10162000E6CEC6EED0E0E3CE0C9438088091A4025A +:101630009091A302892B9091A202892B80933E0264 +:10164000E0918303F0918403309731F00280F381BD +:10165000E02D8EE392E0099408958091A10290918B +:101660007002981301C008958F5F8770FACF990FA9 +:10167000990F990F890F982F977086958695869563 +:1016800023E0829FF0011124E45BFD4F50E040E035 +:1016900080E0219130E0092E02C0369527950A940A +:1016A000E2F721703327042E01C0220F0A94EAF7D3 +:1016B000822B4F5F5F4F4330510559F70895990FC3 +:1016C000990F990F890F982F977041E001C0440F2F +:1016D0009A95EAF786958695869593E0899FF0011D +:1016E0001124E45BFD4F30E020E070E05191DF0118 +:1016F0001197CB01022E02C0969587950A94E2F7C6 +:10170000817081958527842385278C932F5F3F4F98 +:101710002330310559F7089590E080E00E945A087F +:1017200090E080E00E9444081092A3021092A2026E +:101730000C94160B8093A5020C948C0B882341F01B +:1017400080959091A40289238093A4020C94160B97 +:101750000895882339F09091A402982B9093A402C5 +:101760000C94160B08958823B1F19CEF980F913AD1 +:1017700070F4E0E4F2E09191891303C0DF01119766 +:101780001C9242E0E634F407B1F70C94160B90E299 +:10179000980F983088F4877021E030E0A90102C0EA +:1017A000440F551F8A95E2F7CA0180959091A402D3 +:1017B00089238093A402E9CF9BE5980F933020F40E +:1017C00090E080E00C945A08885A873120F490E029 +:1017D00080E00C94440808950F931F93CF93C82F73 +:1017E000882309F469C08CEF8C0F813AB0F500E4CE +:1017F00012E086E492E0F8012191C21701F122E0A3 +:10180000E634F207C9F7EFEF80E0D8019D918D0132 +:10181000C91781F0EF3F19F4911101C0E82F8F5FD4 +:10182000863099F7EF3F31F00E2E000CFF0BE25C93 +:10183000FD4FC283CF911F910F910C94160BE0E4E2 +:10184000F2E02191C21303C0DF0111971C928E17A1 +:101850009F07B9F70E94160BD6CF80E28C0F883015 +:1018600068F4C77021E030E001C0220FCA95EAF7A2 +:101870008091A402822B8093A402DCCFEBE5EC0FD5 +:10188000E33050F4F0E0ED54FE4F808190E0CF91D2 +:101890001F910F910C945A08C85AC73168F4EC2F65 +:1018A000F0E0EE0FFF1FEA54FE4F80819181CF914F +:1018B0001F910F910C944408CF911F910F9108959F +:1018C000982F92959F7011F0892F94E0282F2695DC +:1018D000269511F09E5F822F869509F09F5F892FD4 +:1018E0000895CF93DF93CDB7DEB762970FB6F89424 +:1018F000DEBF0FBECDBF96E0E2E6F3E0DE01179655 +:1019000001900D929A95E1F796E0FE013796DE017F +:101910001D9601900D929A95E1F798858823E9F03C +:10192000962B9E8786E0FE013D96DE011196019082 +:101930000D928A95E1F786E0FE013196A2E6B3E0CA +:1019400001900D928A95E1F762960FB6F894DEBF8A +:101950000FBECDBFDF91CF91089560959623E1CF63 +:10196000CF92DF92EF92FF920F931F93CF93DF936B +:101970006C017B0164E670E088E70E94582EEC0160 +:1019800097FD12C010E000E0F601E00FF11F849116 +:1019900064E670E00E94D22EEC01892B29F40F5FDF +:1019A0001F4F0E151F0581F70E94EC2FCE01DF910E +:1019B000CF911F910F91FF90EF90DF90CF900895FE +:1019C00080917F0390918003911103C091E089275A +:1019D0000895882369F062E070E080EA9BE00E944D +:1019E000B00C892B19F080917F03089510927F032A +:1019F00080917F03EBCFCF93C0917F0380918003D1 +:101A00008823D1F00E9438086058774C8E4F9F4F42 +:101A100060937B0370937C0380937D0390937E039C +:101A2000C11108C062E070E08EE99BE00E94B00C3A +:101A3000892B29F0C0917F038C2FCF91089581E0ED +:101A400080937F03F7CF80938C0370938E03609312 +:101A50008D0380919C038430F9F48093E9008FEF2B +:101A60009091E800815095FD06C095ED9A95F1F7AB +:101A700000008111F5CF8091E80085FF0DC050E096 +:101A800040E063E070E08CE893E00E94FA06809109 +:101A9000E8008E778093E8000895BC0184E00C9400 +:101AA000230DBC0183E00C94230D9C0184E0809302 +:101AB000E9009FEF8091E800915085FD06C085ED1B +:101AC0008A95F1F700009111F5CF8091E80085FF2C +:101AD0000CC050E040E066E070E0C9010E94FA06E8 +:101AE0008091E8008E778093E8000895CF93DF938C +:101AF000EC0181E08093E9008FEF9091E800815044 +:101B000095FD06C095ED9A95F1F700008111F5CF8E +:101B10008091E80085FF14C050E040E068E070E08C +:101B2000CE010E94FA068091E8008E778093E8004B +:101B300088E0FE01A2E9B3E001900D928A95E1F7F9 +:101B4000DF91CF910895609161018091730480FFCE +:101B500020C08091600143E0849FC0011124895519 +:101B60009C4F259A25B12F7D35B130625FB7F8942F +:101B7000FC01649FE00DF11D1124BF016817790776 +:101B8000D1F45FBF8FE594E00197F1F700C000004A +:101B90000895809162019091630123E0829FF0019A +:101BA0001124E955FC4F8917A0F611821082128288 +:101BB0008F5F3396F8CFFC014191CF01E8E035B952 +:101BC000000000C047FF25B9440F000000C000C05E +:101BD00000C025B900C0EA9591F7D0CF0F931F93AD +:101BE000CF93DF9300D00F92CDB7DEB7182F062F1B +:101BF0008091730480FF22C09E012F5F3F4F4AEA0D +:101C000064E68BE20E94B8081017C0F48B819981BA +:101C10002A8133E0139FF0011124E955FC4F218301 +:101C2000908382831F5F33960113F9CF0E94A30D27 +:101C30008FE99FE00197F1F700C000000F900F902F +:101C40000F90DF91CF911F910F910895CF93DF9364 +:101C5000C82FD82FD17081FF04C068E084E00E94B3 +:101C6000EE0DD11108C062E080E00E94EE0D6CE044 +:101C70008AE00E94EE0DC2FF0AC064E082E00E948A +:101C8000EE0D6AE088E0DF91CF910C94EE0DDF91CC +:101C9000CF910895E3E7F4E080818E7F8083E1E7D0 +:101CA000F3E08281816082832FEF80E792E0215010 +:101CB00080409040E1F700C000000C94A30D9F927B +:101CC000AF92BF92CF92DF92EF92FF920F931F934A +:101CD000CF93DF937C015B016A018091E10201E017 +:101CE00010E08A3010F40AE010E0C1E0D0E0F8948F +:101CF000B501C701F6010995982E0E94500991106F +:101D000004C021960C171D076CF4892DDF91CF912B +:101D10001F910F91FF90EF90DF90CF90BF90AF9009 +:101D20009F900895CC9F9001CD9F300D300D1124D0 +:101D300090E080E045E34A95F1F7000001968217B4 +:101D40009307C1F7D4CF8091B202811110C0809166 +:101D5000D80080618093D8008AE18A95F1F700C0AD +:101D60008091D90080FF0AC081E08093B20281E0B7 +:101D70009091B202913009F080E0089582E0809362 +:101D8000B2020E94AA0610929C03F1CF0E94A30EF9 +:101D9000882351F0E0918303F0918403309721F080 +:101DA0000190F081E02D099480E008951F93CF9376 +:101DB000DF93182FEB010E94EC0B8FE99FE0019756 +:101DC000F1F700C000002197C1F7812FDF91CF917B +:101DD0001F910C94B30B0F931F93CF93DF9300D0FD +:101DE00000D0CDB7DEB789836A834B831C8204E6BB +:101DF00010E024E030E0AE014F5F5F4F60E084E12F +:101E00000E94702F0F900F900F900F90DF91CF9145 +:101E10001F910F91089580915D01882329F041E27F +:101E200065EA89ED0C94EB0E8091470247EC6BE17B +:101E30008823C1F347E669E98BE2F4CFCF93DF93C0 +:101E4000C7E4D3E060E0CE010E9486322196C1153E +:101E500084E0D807B9F7DF91CF9108956F927F9210 +:101E60008F929F92AF92BF92CF92DF92EF92FF92AA +:101E70000F931F93CF93DF9382EAC82E8BE0D82E67 +:101E800007ED10E0E801C05AD10936011CC0F50188 +:101E900085909490692DC7010E948632682DC701F4 +:101EA00001960E94863282E0A80EB11C82E0E80E04 +:101EB000F11CCE15DF0559F780E1680E711C6096A4 +:101EC0000C171D0731F07E0180E1E81AF10853017B +:101ED000DECF00561F4F80EAC80ED11C073F83E0BB +:101EE000180781F6DF91CF911F910F91FF90EF902E +:101EF000DF90CF90BF90AF909F908F907F906F902A +:101F00000895CF93C82F6FEF811162E283E290E0D2 +:101F10000E9486326FEFC11161E084E290E00E947E +:101F200086326FEFC11168E285E290E0CF910C94A8 +:101F3000863280E00E94810F60E086E290E00E949D +:101F400086320E942E0F0E941E0F81E00C94810F9A +:101F50000F931F93CF93DF9320E1629FE001112441 +:101F600050E0440F551FC40FD51F30EA839FC00DAA +:101F7000D11D1124CE0187960E947232082F10E0E5 +:101F8000102F0027CE0188960E9472329801282BCC +:101F9000C901DF91CF911F910F910895462F853090 +:101FA00038F47A3028F4683018F4672F0C94A80FAE +:101FB00090E080E00895CF92DF92FF920F931F93FD +:101FC000CF93DF936C010091A6038091A502082BAB +:101FD000C7E0D0E010E0FC2EC8010C2E02C09595A1 +:101FE00087950A94E2F780FD0CC02197A0F7F12CA9 +:101FF0008F2DDF91CF911F910F91FF90DF90CF90A8 +:102000000895B6018C2F0E94CE0F0E94AC09019753 +:1020100061F3EECFCF93DF93EC010E94DB0FBE01A3 +:102020000E94CE0FDF91CF910C94AC09FC0180810E +:1020300091810E940A10292F2F7092959F709250C3 +:102040009E3078F4E92FF0E0E351FC4C0C944632DA +:10205000803F19F020F4883E20F481E00895843F09 +:10206000E1F380E00895883EC0F3813FD1F7F5CFDA +:10207000822F869586958695089583E290E00E944A +:102080007232823289F484E290E00E9472328130AE +:1020900059F485E290E00E94723291E0883209F0B2 +:1020A00090E0892F8170089580E0FCCFCF9384E089 +:1020B00090E00E947232C82F82E290E00E94723259 +:1020C000982F8C2FCF9108951F93CF93DF93CDB787 +:1020D000DEB768970FB6F894DEBF0FBECDBF409154 +:1020E0006203509163036091640370916503809172 +:1020F0006603909167030E948123209362033093CB +:1021000063036093660370936703642F152F119523 +:10211000109364034093650386E0E2E6F3E0DE019A +:10212000179601900D928A95E1F786E0FE013796A9 +:10213000DE01119601900D928A95E1F79B858C85C1 +:1021400020915D012223B1F0772761950CF4709501 +:10215000072E000C880B990B0E94F2322AE939E90C +:1021600049E95EE30E9456330E94BA32962F812FCE +:1021700060E010E01B836C839D838E8386E0FE010C +:102180003196DE011D9601900D928A95E1F786E069 +:10219000FE013D96DE01539601900D928A95E1F77E +:1021A00086E0FE017396DE01119601900D928A95EC +:1021B000E1F786E0FE013196A2E6B3E001900D92D0 +:1021C0008A95E1F786E0E2E6F3E0DE0117960190FA +:1021D0000D928A95E1F786E0ECE5F3E0DE011196D9 +:1021E00001900D928A95E1F746E050E0BE016F5FE5 +:1021F0007F4FCE0107960E945C32892B79F0E091E7 +:102200008303F0918403309749F082E08093620366 +:102210000480F581E02D82E693E009951092640335 +:1022200010926503109266031092670386E0E2E65F +:10223000F3E0ACE5B3E001900D928A95E1F7689682 +:102240000FB6F894DEBF0FBECDBFDF91CF911F91C7 +:1022500008951092A402E0E4F2E086E0DF011D920E +:102260008A95E9F70C948C0B1F93CF93DF93CDB72E +:10227000DEB7AA970FB6F894DEBF0FBECDBF8EE9CA +:1022800093E02091F100DC012D93CD01B3E0863A7B +:102290009B07B9F780919F03833009F472C0B8F4AB +:1022A000813009F449C0823009F4B3C08091E8005C +:1022B00083FF8BC280919E0390919F039A3008F018 +:1022C00084C2E92FF0E0E550FC4C0C9446328A3091 +:1022D00009F48EC08B3009F471C0893039F78091D0 +:1022E0009E03813219F78091A2039091A303009776 +:1022F00011F00297D9F68091E800877F8093E8007B +:102300008091E80082FF38C09091F3008091F20044 +:10231000029731F48091F100813011F0863021F480 +:102320008091F100809391038091E8008B778093F6 +:10233000E8000E942407BACF80919E03813A09F0F9 +:10234000B5CF8091E800877F8093E8008091A20359 +:102350009091A303892B61F468E082E993E070E037 +:102360000E94D6078091E8008B778093E8009ECF8B +:1023700060E090E080E0F3CF80919C038111C0CFBA +:1023800095CF80919E03813A09F090CF8091A2036E +:102390009091A303892B09F089CF8091E800877F72 +:1023A0008093E8008091E80080FFFCCF8091650178 +:1023B0008093F1008091E8008E77B9CF80919E03E1 +:1023C000813209F073CF8091A2039091A303892BEE +:1023D00009F06CCF8091E800877F8093E8000E942D +:1023E00024078091A003809365010E9429115ECF8C +:1023F00080919E03813209F059CF8091E800877F58 +:102400008093E8000E9424078091A10380939003A9 +:102410004DCF80919E03813A09F048CF8091E8002A +:10242000877F8093E8008091E80080FFFCCF809157 +:102430009003BECF803899F0823809F0C6C18091F0 +:10244000A2038F70873008F0C0C18093E9008091AB +:10245000EB0085FB882780F91092E90006C0809187 +:102460009A0390919B03911182609091E800977F6D +:102470009093E8008093F1001092F1008091E800C1 +:102480008E779FC1882309F48DC1823009F09DC1E8 +:102490008091A003811190C18091A2038F702FEFD2 +:1024A000280F263008F091C18093E9002091EB00BD +:1024B00020FF82C1933031F48091EB0080628093E1 +:1024C000EB007AC19091EB0090619093EB0021E0DA +:1024D00030E001C0220F8A95EAF72093EA001092BB +:1024E000EA008091EB008860EACF81116EC1109103 +:1024F000A0031F778091E3008078812B8093E30015 +:102500008091E800877F8093E8000E9424078091F3 +:10251000E80080FFFCCF8091E30080688093E300B7 +:1025200082E0111183E080939C034FC18058823078 +:1025300008F04BC12091A0033091A1032C3DE3E0B2 +:102540003E07A1F583E08A838AE289834FB7F89436 +:10255000DE01139620E03EE051E2E32FF0E05093DD +:102560005700E49120FF03C0E295EF703F5FEF70EA +:102570008E2F90E0EA30C0F0C7968D939D932F5F29 +:10258000243159F74FBF8091E800877F8093E8009E +:102590006AE270E0CE0101960E94D6078091E800C1 +:1025A0008B778093E80011C1C096E7CF8091A2039A +:1025B0009091A303432F55274330510509F44AC096 +:1025C00078F54130510509F47AC08BE590E0E2EAF4 +:1025D000FBE04230510509F0F8C02091E800277F68 +:1025E0002093E8002091A4033091A503821793075C +:1025F00008F49C0140E02115310509F065C0411146 +:1026000063C08091E80082FDC9CF80919C0388233C +:1026100029F2853019F28091E80083FFF2CFBECF16 +:102620004132510509F43CC04232510509F0CDC098 +:102630008330910508F0C9C0FC01EE0FFF1FE15D7A +:10264000FD4F0190F081E02D845D9D4FDC018C9168 +:1026500090E01AC0332721303105D1F02115310522 +:1026600061F02230310509F0B0C0EFE0FCE0E49108 +:102670008E2F90E0EFE0FCE007C0E7E3FCE0E491A0 +:102680008E2F90E0E7E3FCE0009709F49EC0A5CF11 +:10269000E1E2FCE0E4918E2F90E0E1E2FCE0F4CF97 +:1026A0008330910508F091C0880F991FFC01EB5C05 +:1026B000FD4F0190F081E02D89E090E08ECF82E126 +:1026C00090E0EDEFFBE089CF80919C03882309F433 +:1026D00065CF853009F462CF8091E80083FD5ECF3D +:1026E0008091E80082FD8DCF8091E80080FF83CF4C +:1026F0009091F3008091F2002115310519F0883096 +:10270000910550F041E0089709F040E08091E80021 +:102710008E778093E8006FCF44914093F10031961B +:10272000215031090196E8CF803809F04EC08091E0 +:10273000E800877F8093E80080919D038093F100FB +:102740009DCE811142C01091A0031230F0F580910E +:10275000E800877F8093E80010939D030E94240780 +:10276000112311F084E005C08091E30087FDFACFCA +:1027700081E080939C0342E061EC81E00E9443078A +:1027800042E261EC84E00E94430742E261EC82E0B5 +:102790000E94430742E260EC83E00E94430780917D +:1027A0009C0313C08091A003813079F481E09330C1 +:1027B00009F080E080939B031092E9008091E8008B +:1027C000877F8093E8000E9424078091E80083FFC0 +:1027D0000AC08091E800877F8093E8008091EB0039 +:1027E00080628093EB00AA960FB6F894DEBF0FBE0E +:1027F000CDBFDF91CF911F9108951F93CF93DF93AA +:10280000162FC0917A08D0917B088A30D1F420919C +:102810007403CE018A579440622F70E00E941232F6 +:10282000281B822F66E00E942632C82FC15020F458 +:10283000DF91CF911F91089560E080E20E94FD1327 +:10284000F5CF8D30E9F4CA57D44020917403622F3C +:1028500070E0CE010E941232281B822F9E01280FA9 +:10286000311D2115344018F080E0D0E0C0E0C80FE1 +:10287000D11DC658DB4FD0937B08C0937A08D8CFC0 +:1028800096E0FE01A5E7B3E001900D929A95E1F77D +:10289000803E90F186E0FE0111928A95E9F7C091A1 +:1028A0007A08D0917B08111133C046E050E0BE0198 +:1028B00085E793E00E945C329E012A573440892BC1 +:1028C00091F52A5F3F4F40917403642F70E0C90176 +:1028D0000E941232481B463010F4240F311D21157E +:1028E00074E0370710F030E020E026583B4F30937B +:1028F0007B0820937A089CCFF6E08F9FB0011124CB +:10290000625A794F46E050E0CE010E945332C7CF61 +:102910009E012A5F3F4FFE012E173F0731F2808153 +:1029200080958193F9CFC90146E0969587954A95A0 +:10293000E1F741E050E0BA0102C0660F771F8A95C7 +:10294000E2F7CB016091780470917904862B972B84 +:10295000B9016B5F7F4FE6E076956795EA95E1F701 +:1029600002C0440F551F6A95E2F7842B952B909374 +:10297000790480937804A5CFFF920F931F93CF9390 +:10298000DF93EC01F62EFC0101900020E9F78F01A6 +:1029900001501109C017D10730F0DF91CF911F917D +:1029A0000F91FF9008956F2D89910E94FD13F2CF32 +:1029B000CF92DF92EF92FF926B017C010E94A208FE +:1029C000B701A60188E090E0FF90EF90DF90CF90F4 +:1029D0000C949832AF92BF92CF92DF92EF92FF9217 +:1029E0000F931F93CF93DF9300D00F92CDB7DEB735 +:1029F000082FF62E142FE22E8091730480FF4FC013 +:102A0000E82FE695AE2FB0E0A05EBD4F9C9190936D +:102A100071038E7F823009F056C04B3A08F04AEAC3 +:102A20009E012F5F3F4F6F2D802F0E94B80880912D +:102A3000730480FF11C02B8139814A81809162012A +:102A40009091630153E0859FF0011124E955FC4FFB +:102A5000891798F10E94A30D80917404801308C017 +:102A6000809175048F1104C080917604811729F03C +:102A70008091730382608093730300937404F092D7 +:102A8000750410937604EE2051F0609173047091F8 +:102A9000740480917504909176040E94D8140F906C +:102AA0000F900F90DF91CF911F910F91FF90EF90BA +:102AB000DF90CF90BF90AF90089541833083228301 +:102AC0008F5F3396C5CF923039F6E2508E2F8170EA +:102AD000D82EE695F0E0E75AF94FA590B490C12CB6 +:102AE000BB2460916401C61608F0B4CF2C2D30E0F1 +:102AF000A29EC001A39E900DB29E900D112470E085 +:102B00000E941232802FD11016C0860F40916201B0 +:102B1000420F532F511D9A01220F331F240F351FCF +:102B200029553C4F412F1B3A08F04AEA6F2D0E946D +:102B3000B808C394D6CF861BE9CFE3E7F4E043811E +:102B400028E0421B08F440E021E0628181810C947E +:102B5000EA14E3E7F4E0438128E0420F08F44FEF82 +:102B600021E0628181810C94EA14E3E7F4E0628160 +:102B700028E0621B08F460E021E0438181810C942D +:102B8000EA14E3E7F4E0628128E0620F08F46FEFF3 +:102B900021E0438181810C94EA14E3E7F4E0818130 +:102BA00021E04381628188500C94EA14E3E7F4E069 +:102BB000818121E043816281885F0C94EA14CF9384 +:102BC000C82F0E94600C823081F138F48823B1F064 +:102BD000813021F18C2FCF910895833059F18430C9 +:102BE000C9F720E040E56FEF8AED0E94EA1480917A +:102BF0000001882379F310925D010DC020E04CE3C1 +:102C00006CED80E00E94EA1480910001882399F322 +:102C100081E080935D010E940B0FDCCF20E040E556 +:102C20006FEF8CEF0E94EA14D5CF20E040E56FEF04 +:102C300080E5F8CF20E040E56FEF80EAF3CF0E9417 +:102C4000DF158093A6030C948C0B8091A603982F1C +:102C50009670963019F488600C941F16877FFCCF0D +:102C600021E030E001C0220F8A95EAF7209580919B +:102C7000A60382230C941F1621E030E001C0220F2E +:102C80008A95EAF78091A603822B0C941F168091F7 +:102C90007704882319F0815080937704609173043E +:102CA0007091740480917504909176040C94D814FA +:102CB00080917704833018F48F5F8093770460915C +:102CC00073047091740480917504909176040C944F +:102CD000D8149091730490FF27C0917081111DC08A +:102CE0009260909373048091730381608093730367 +:102CF000662351F06091730470917404809175049F +:102D0000909176040E94D81420E04091760460915E +:102D10007504809174040C94EA148C3010F0966160 +:102D2000E0CF880F982BDDCF0895809173048695AE +:102D3000815009F48BE061E00C9469168091730472 +:102D400086958F5F8C3008F081E061E00C94691605 +:102D50008091730480FF07C0869582588F778930F1 +:102D600010F40C949E1661E082E00C946916E3E77F +:102D7000F4E083E0808311828FEF82838AEA838389 +:102D80001482A1E7B3E012968C9112978360129699 +:102D90008C9360817181828193810C94D8140E94FC +:102DA000522E40E060E080E00C94EB0E69EE7EEF86 +:102DB00090E080E00E94A43260E082E090E00E9417 +:102DC000863260E083E090E00E9486321092A50295 +:102DD00060E084E090E00E94863260E082E290E071 +:102DE0000E94863260E085E090E00E94863260E0DA +:102DF00086E090E00E9486326FEF87E090E00E94CC +:102E0000863240E050E0BA0188E090E00E949832BB +:102E100060E08DE090E00E94863240E050E0BA0130 +:102E200088E190E00E94983260E087E190E00E94A3 +:102E3000863240E050E0BA018CE190E00E94983286 +:102E400070E060E080E290E00E94A43240E050E058 +:102E5000BA0188E190E00E94983280E00E94810FE0 +:102E60000E94990F40E050E0BA018FE090E00E948C +:102E7000983240E050E0BA0183E190E00C9498323F +:102E80005F926F927F928F929F92AF92BF92CF92FA +:102E9000DF92EF92FF920F931F93CF93DF9300D0B7 +:102EA00000D00F92CDB7DEB76C01FC018381948115 +:102EB000892B31F08081918189238F3F09F037C6BA +:102EC0000F900F900F900F900F90DF91CF911F9167 +:102ED0000F91FF90EF90DF90CF90BF90AF909F90B9 +:102EE0008F907F906F905F9008950E94DB0F182F56 +:102EF000682F89819A810E945F0B69817A81812F75 +:102F00000E94CE0F8C01F6018281882309F403C64A +:102F1000C80182519F45409708F078C58FEF93E034 +:102F20000E947232025197E4A92E93E0B92E8111CA +:102F3000C7CF01113AC01C821B82662463948AE0C9 +:102F4000582E85010F5F1F4FC5010E947232898381 +:102F50001A82882309F4B4CF9FEF980F9330A0F51D +:102F60008A83698232E0A30EB11CC8010E947232CA +:102F70008B83882309F4A4CF8E010F5F1F4FF801C4 +:102F800020812223F1F2213009F058C09181828101 +:102F90009130E1F40E5F1F4F6AE070E0893311F465 +:102FA00060E570E00E94D60E17C0A114F4E0BF06E1 +:102FB00009F486CFC5010E947232811101C001500F +:102FC0002FEFA21AB20AB5CF5801D6CF923039F4FA +:102FD0000E5F1F4F0E94EC0B0F5F1F4FD0CF93303F +:102FE00029F40E5F1F4F0E94B30BF6CF943019F0F7 +:102FF0000F5F1F4FF1CF0E5F1F4F30E020E0B80191 +:103000006F5F7F4FF80141818053990B8A309105A2 +:1030100050F02150310900F38FE99FE00197F1F75B +:1030200000C00000F6CF529EF001539EF00D112417 +:103030009C012E0F3F1F842F8B01E1CFE22FF0E088 +:10304000E754FE4F7490822F86958695869590E082 +:10305000FC01E755FE4FE4902770F12C022E02C0D0 +:10306000F594E7940A94E2F7E1E0EE22FF24FC01F4 +:10307000E756FE4FC490D12C022E02C0D594C794BF +:103080000A94E2F7F1E0CF22DD24FC01E757FE4F7E +:103090008490912C02C0959487942A95E2F721E0C0 +:1030A00082229924E114F10419F081EE0E94EC0BC4 +:1030B000C114D10419F086EE0E94EC0B39E36AE0EA +:1030C00070E0731202C060E570E0872D0E94D60E9A +:1030D000CD2819F086EE0E94B30BEF2819F081EE8F +:1030E0000E94B30B892809F477CF6AE070E08CE284 +:1030F00059CF81E00E943C1603C081E00E94301647 +:103100000F900F900F900F900F90DF91CF911F9124 +:103110000F91FF90EF90DF90CF90BF90AF909F9076 +:103120008F907F906F905F900C94251682E0E2CF95 +:10313000043F110509F4C7C062E0053F110509F01D +:103140008BC40E94710C88C40438FFE51F0709F482 +:1031500053C0B8F402383FE5130771F103384FE567 +:10316000140709F079C4882309F476C481EE0E941B +:10317000EC0B83EE0E94EC0B80E50E94EC0B80E5EB +:1031800028C005385FE5150709F47CC006389FE5BF +:10319000190709F061C4882309F495C0809147029A +:1031A000882309F486C080EE90E090935F018093BD +:1031B0005E011092470274C0882309F44DC481EE69 +:1031C0000E94EC0B83EE0E94EC0B8FE40E94EC0B50 +:1031D0008FE40E94B30B83EE0E94B30B81EE0E943A +:1031E000B30B3AC480934B0210934A0200934902F6 +:1031F00033C480934802F8CF882379F18091480244 +:10320000882349F0809149020E94B30B80EE0E940E +:10321000EC0B8AE20CC080914B028823D1F38091A1 +:1032200049020E94B30B80EE0E94EC0B8CE40F90DD +:103230000F900F900F900F90DF91CF911F910F91F2 +:10324000FF90EF90DF90CF90BF90AF909F908F90C6 +:103250007F906F905F900C94EC0B8AE20E94B30B0E +:103260008CE40E94B30B80EE0E94B30B8091480265 +:10327000811105C080914B02882309F421CE8091F1 +:103280004902D5CF8823F9F080915D01811104C0F6 +:1032900080910001882339F010925D0110920001A5 +:1032A0000E940B0FD9C381E080935D0180930001E0 +:1032B000F7CF86E690E090935F0180935E0181E016 +:1032C00080934702EDCF61E03CCF64E03ACF013616 +:1032D0003DE5130709F4D5C30E3D1C4509F012C1A5 +:1032E0000F900F900F900F900F90DF91CF911F9143 +:1032F0000F91FF90EF90DF90CF90BF90AF909F9095 +:103300008F907F906F905F900C94D6168091E6021C +:10331000806106304CE5140709F491C08091E60203 +:10332000886007301C4508F48AC08091E6028062FC +:1033300086C00C308CE5180709F49CC070F48091AD +:10334000E6028C600A30ECE51E0709F478C008F448 +:103350008BC08091E6028E7F72C08091E602877FEB +:103360000E302CE5120709F46AC08091E6028B7FCB +:103370000F301C4508F463C08091E6028F7E5FC069 +:103380000C3F4CE5140709F479C068F504318CE56D +:10339000180709F48BC080F40231ECE51E0709F42C +:1033A00075C08091E6028F7B03311C4508F447C04D +:1033B0008091E602837F43C00A3F2CE5120709F49F +:1033C00045C008F049C005311C4509F081C3809112 +:1033D000E60282FB992790F921E0922790FB82F97F +:1033E00090FB83F92CC001155DE5150709F454C065 +:1033F00088F48091E70283600E3F9CE5190749F14C +:103400008091E7028D7F0F3F1C4518F18091E70204 +:103410008C7F1FC00230FDE51F0709F456C008F479 +:103420004EC001361D4509F053C39091E602892F25 +:103430008F7E94FF806103C08091E602816080935B +:10344000E60246C38091E6028460F9CF8091E702EC +:1034500081608093E7023CC38091E7028260F9CFEC +:103460008091E6028064EBCF0E9429118091E602F0 +:103470008068E5CF8091E6028D7FE1CF8091E70201 +:103480008E7FE7CF8091E6028F7DD9CF0E942911F0 +:103490008091E6028F77D3CF8091E702982F9095A5 +:1034A00091708E7F892B90FB81F9D3CF0E942911D7 +:1034B0009091E602892F97FB87F98058C0CF61E091 +:1034C0008EE090E00E94863203C360E0F9CF8091E5 +:1034D000A40282720A3C4CE5140709F4F7C008F014 +:1034E00063C0053CECE51E0709F4DCC0A0F5033C15 +:1034F0002CE5120709F4CCC008F0CFC0023C1C45F3 +:1035000009F476C0F60100811181992309F4FEC007 +:10351000C8010E94DB0FF82E682FC8010E945F0BC4 +:10352000B8018F2D0E94CE0F0E94AC09182FB82E23 +:10353000F60122814581342F32953F70892F829583 +:103540008F70E82EF12C8C3008F018C1F701EB5F7A +:10355000FB4C0C944632073C5CE5150709F4ACC003 +:1035600008F4A5C0083CFCE51F0709F4AAC04DE912 +:1035700055E169EA75E1093C1C4521F60F900F9071 +:103580000F900F900F90DF91CF911F910F91FF90AF +:10359000EF90DF90CF90BF90AF909F908F907F90F3 +:1035A0006F905F900C949D08043D3CE51307A0F4D8 +:1035B0000E3C4CE5140708F083CC0C3C5CE5150789 +:1035C00009F489C047E456E168E576E10D3C1C4505 +:1035D000A8F261E081E046C0053DECE51E0709F474 +:1035E0006FCC08F47DC00D351D4509F469CC8ACF38 +:1035F0008091730480FF31C08E7F8093730460914B +:1036000073047091740480917504909176040E9403 +:10361000D814809173038160809373033FEF40E778 +:1036200052E0315040405040E1F700C000000F90A0 +:103630000F900F900F900F90DF91CF911F910F91EE +:10364000FF90EF90DF90CF90BF90AF909F908F90C2 +:103650007F906F905F900C94A30D816080937304B2 +:1036600061E086950F900F900F900F900F90DF9173 +:10367000CF911F910F91FF90EF90DF90CF90BF906F +:10368000AF909F908F907F906F905F900C94691691 +:1036900045E956E16EE976E171CF4EE956E165E91B +:1036A00076E16CCF4DEC55E166ED75E167CF46ED07 +:1036B00055E16DEC75E162CF45EB55E161EC75E1EB +:1036C0005DCF41EC55E165EB75E158CF49EA55E135 +:1036D0006DE975E153CF48E556E167E476E14ECFF9 +:1036E0000F900F900F900F900F90DF91CF911F913F +:1036F0000F91FF90EF90DF90CF90BF90AF909F9091 +:103700008F907F906F905F900C94A816C8010E94D4 +:10371000370BF82E05CF092F0F70907F11F002950F +:10372000007F812F2223C9F0002369F090E2910FDE +:10373000983010F011110BC08091A402082B009357 +:10374000A4020E94160B812F0E94EC0B17C08091DF +:10375000A302082B0093A302F4CF0E94B30B002313 +:1037600069F00095105E183010F0B11027C08091FC +:10377000A40208230093A4020E94160B98E0E91A01 +:10378000F108E4E0EE16F10408F09ACB0E94C60EB0 +:103790000F900F900F900F900F90DF91CF911F918E +:1037A0000F91FF90EF90DF90CF90BF90AF909F90E0 +:1037B0008F907F906F905F900C94260E8091A30263 +:1037C00008230093A302D8CF892F8F70907F903267 +:1037D00011F08295807FF1E0BF120CC0222329F006 +:1037E000333060F60E94A90BC9CF323038F60E9400 +:1037F0009E0BC4CF222341F03323A1F340FFA3CF7C +:103800004F70F6014583EECF332389F3193309F066 +:10381000F5C0FFEF27EE33E0F15020403040E1F7F4 +:1038200000C00000812F0E94B30BA8CF892F86957E +:103830008695837061F0813009F0A0CF812F93705D +:10384000211102C090E080E00E94440897CF812FB0 +:103850009370211102C090E080E00E945A088ECF40 +:10386000892F8370A1F5211189CF812F82958695AB +:103870008770880F880F412F4F70082E01C0440FAA +:103880000A94EAF7212F207114FF07C02FE030E0DF +:1038900001C0220F8A95EAF7209596959695937028 +:1038A000923081F0822F842B933030F48091A502E6 +:1038B000913029F0242B82230E949A0B5FCF842B16 +:1038C000822BFACF242B8091A5028227F5CF8695F3 +:1038D000222311F0892F8170882309F44FCF812F83 +:1038E000829586958770880F880F412F4F70082E1C +:1038F00001C0440F0A94EAF7212F207114FF07C07A +:103900002FE030E001C0220F8A95EAF720959695C6 +:1039100096959370923081F0822F842B933030F4FF +:103920008091A603913029F0242B82230E941F1638 +:1039300025CF842B822BFACF242B8091A6038227BC +:10394000F5CF092F0F70222329F0802F0E943C16FB +:10395000812F48CF812F0E949E0B802F0E9430160E +:103960000DCF812FE1EF1E1789F1E11750F0F0EF35 +:103970001F17B9F02223B1F13111E5CE892F8F71D4 +:1039800029C042EF141749F153EF1513F3CF80E02C +:10399000222361F29F7181E001C0880F9A95EAF7B6 +:1039A000C5CF222379F0323008F0E8CE292F2F71CD +:1039B00081E090E001C0880F2A95EAF79091A60374 +:1039C0008927B4CF333008F0D9CEF0CF892F8F714B +:1039D000222321F20E943C16D1CE892F8F712223FF +:1039E000C9F3BCCF332379F0893341F48FEF97EEDD +:1039F000E3E081509040E040E1F712CF8FE39CE993 +:103A00000197F1F70DCF892F8F71A8CF0031FFE516 +:103A10001F0709F46ECB01312FE5120709F486CB9D +:103A20000E9438086093FD027093FE028093FF02AB +:103A300090930003F6018281063F110509F445CCFD +:103A400008F082CB053E110509F4CCCB08F070CB11 +:103A5000013E110509F4CDCBF6019281992309F4B9 +:103A600036CD0330FDE51F0708F031CC0A3F2CE5C9 +:103A7000120738F4980122503C452431310508F0F2 +:103A80002BCC0E9456109093E7028093E6020031FF +:103A90004CE5140709F4F6CC08F072CC08308CE53C +:103AA000180709F4DDCC08F044CC0430ECE51E071F +:103AB00009F4C8CC08F02ACC02302CE5120709F42E +:103AC000BBCC8091E602826003301C4509F4B7CC80 +:103AD0006091E6021091E70284E090E00E94863255 +:103AE000612F82E290E00E9486320F900F900F903B +:103AF0000F900F90DF91CF911F910F91FF90EF905A +:103B0000DF90CF90BF90AF909F908F907F906F90FD +:103B10005F900C94291100313FE5130709F4EDCAB9 +:103B200001314FE5140709F085CF82E0E7CA85E04F +:103B3000DE01119601900D928A95E1F7F60122813E +:103B400089819A812111D1C90E94370B182FD5C9BB +:103B50001F93CF93DF9380916F02807FA9F48091B0 +:103B60006C02882389F08091A102D091700260914B +:103B70006A0270916B02A0916D02B0916E02C62F25 +:103B8000C72316E0D81304C0DF91CF911F91089589 +:103B900090E0109711F0CF3F19F401968770F2CFA3 +:103BA000189F9001199F300D1124F901EF58FD4F16 +:103BB00041814713F2CF40814613EFCF428141113B +:103BC000ECCF438154814A1B5B0B403A510528F7E7 +:103BD00080916F028F70806180936F02F901EA58C3 +:103BE000FD4F80818F70806180838AE692E00E9421 +:103BF0004017DF91CF911F910C942D0BAF92BF9284 +:103C0000CF92DF92EF92FF920F931F93CF93DF93A8 +:103C1000CDB7DEB761970FB6F894DEBF0FBECDBF4C +:103C20008C0185E0F801DE011D9601900D928A95C8 +:103C3000E1F7F801E2808AE6A82E82E0B82E6091D2 +:103C40006D0270916E026115710509F432C1909197 +:103C50006A0240916B02892F84238F3F09F429C1A6 +:103C600020813181C380D480F0906C02F601E61B84 +:103C7000F70BFF2009F4E8C080916F02582F507FA6 +:103C8000E03AF10508F0ABC0511177C0FE2C4313A8 +:103C900021C092131FC0E1101DC08F7080618093FE +:103CA0006F02C5010E94401780916F02F801858361 +:103CB0008F2D61960FB6F894DEBF0FBECDBFDF919A +:103CC000CF911F910F91FF90EF90DF90CF90BF9019 +:103CD000AF900895CD2829F0822F83238F3F09F0DC +:103CE00003C180E0F82FF170DF2E80FF3CC080918F +:103CF000A1024091700256E0841315C02D873E87C3 +:103D00008D859E850E940A10292F22952F702230C2 +:103D1000F0F0243018F59F70F1F0F8019581907F54 +:103D2000D1F4D12C1EC090E0589FF001599FF00DA6 +:103D30001124EF58FD4F6181361306C060812613B0 +:103D400003C06281E6120FC001968770D5CF9F70C5 +:103D500011F0882331F3805E883018F3C8010E9487 +:103D60004017FD2CA5CFEE2009F4A2CF80916F0261 +:103D7000816080936F02F12C9BCF431306C0921396 +:103D800004C0F801EE2009F479C0C8010E941610A1 +:103D9000882309F1EE20F9F080916F02803270F0F3 +:103DA00020916A0230916B0238872F831986DB8657 +:103DB000CA868C87CE0107960E94401786E0F801DC +:103DC000AAE6B2E001900D928A95E1F70E94A81D43 +:103DD000FF24F3946DCFC8010E944017F9CF511111 +:103DE0000AC08AE692E00E94401786E0F50111922F +:103DF0008A95E9F7C0CF43130FC092130DC0E110AD +:103E00000BC0F8018583C8010E94401786E0F501C8 +:103E100011928A95E9F74CCFC8010E9416108823A9 +:103E2000D1F2EE20C1F280916F02803238F22091FF +:103E30006A0230916B023A8329831B82DD82CC8235 +:103E40008E83CE010196B8CFE03AF105F8F6FE2C4C +:103E5000EE2009F243131FC092131DC080916F0220 +:103E600080FD10C0982F907F69F0F8018583903F06 +:103E700031F0982F907F905F8F70892B8583C801D8 +:103E80000E94401786E0F801AAE6B2E001900D9288 +:103E90008A95E1F70DCFC8010E94161081118ECFCF +:103EA00080916F02816080936F02C8010E94401769 +:103EB000FFCEEE2009F48FCFC8010E941610F82E15 +:103EC000882309F488CF86E0F801AAE6B2E00190E1 +:103ED0000D928A95E1F780916A0290916B020E949F +:103EE0000A100E94A81DE4CE81E08E25FBCE1F9310 +:103EF000CF93DF93CDB7DEB767970FB6F894DEBFE9 +:103F00000FBECDBF4B8B5C8B6D8B7E8B8F8B61110E +:103F10001092A3021A8A198A85E0FE017396DE01C7 +:103F20001D9601900D928A95E1F786E0FE013D967F +:103F3000DE01179601900D928A95E1F7CE01079662 +:103F40000E94FE1D882389F016E08091A1029091C5 +:103F50007002891349C067960FB6F894DEBF0FBE92 +:103F6000CDBFDF91CF911F91089586E0FE01379676 +:103F7000DE01119601900D928A95E1F78A859B8565 +:103F8000892B11F38F81988589238F3FE9F2209146 +:103F9000700230E0C9010196877099274091A10213 +:103FA0004817190671F40E9429111092700210929C +:103FB000A10286E0EAE6F2E0DF011D928A95E9F7C8 +:103FC000C3CF96E0929FD001939FB00D1124AF58BC +:103FD000BD4FFE01319601900D929A95E1F78093C5 +:103FE00070020E942D0BB0CF819FC00111248F5809 +:103FF0009D4F0E94FE1D882309F4ADCF8091A10240 +:1040000090E00196877099278093A1029ECF0F932D +:104010001F93CF93DF9300D000D0CDB7DEB7409190 +:10402000D5025091D6026091D7027091D8022FB775 +:10403000F8948091880390918903A0918A03B091AC +:104040008B032FBF841B950BA60BB70B84369105F2 +:10405000A105B10588F10E94A30E882379F10E9481 +:1040600038086E5F7F4F8F4F9F4F69837A838B83B2 +:104070009C8380912C0190912D0180549D4F409103 +:104080002B0150E04530510510F044E050E0BE01F6 +:104090006F5F7F4F0E94693284E090E00E945E3142 +:1040A000892BD9F40E9438086093D5027093D60208 +:1040B0008093D7029093D80281E010C00E94380804 +:1040C0000091E2021091E3022091E4023091E502B6 +:1040D000600F711F821F931FC4CF80E00F900F905D +:1040E0000F900F90DF91CF911F910F9108958F92B4 +:1040F0009F92AF92BF92CF92DF92EF92FF920F9377 +:104100001F93CF93DF93EB0188809980AA80BB80B7 +:104110009FB7F894C0908803D0908903E0908A03F9 +:10412000F0908B039FBFC818D908EA08FB0894E6F3 +:10413000C916D104E104F10410F4442311F1E82E6E +:10414000082E000CFF089AE08902F0011124EF5FAD +:10415000FE4F8381948180549D4F428150E004172B +:10416000150708F4A801B9010E946932C7010E942D +:104170005E31892BA1F40E943808688379838A8391 +:104180009B8381E0DF91CF911F910F91FF90EF9082 +:10419000DF90CF90BF90AF909F908F90089580E078 +:1041A000F1CF0F931F93CF93DF930F92CDB7DEB76D +:1041B00080917F0389832091D40290E041E0281709 +:1041C000190609F440E001E010E09E012F5F3F4F27 +:1041D0006DED72E086E00E9477200F90DF91CF9125 +:1041E0001F910F9108950F931F93CF93DF93CDB736 +:1041F000DEB728970FB6F894DEBF0FBECDBF85E0BF +:10420000E3E7F4E0DE01119601900D928A95E1F763 +:104210008091710390917203A09173038E839F83A9 +:10422000A88741E08885811101C040E008E010E0E6 +:104230009E012F5F3F4F69ED72E085E00E9477207D +:1042400081111092730328960FB6F894DEBF0FBE4B +:10425000CDBFDF91CF911F910F9108956F927F9203 +:104260008F929F92AF92BF92CF92DF92EF92FF9286 +:104270000F931F93CF93DF930F92CDB7DEB7862EA8 +:104280005A016901682E880F7708C3010E945E31C8 +:10429000892B09F088C08AE0869DF001879DF00D8A +:1042A0001124EF5FFE4F458150E04115510511F09B +:1042B00041E050E08AE0869DF001879DF00D1124D9 +:1042C000EF5FFE4F6681778160547D4FCE0101968E +:1042D0000E946932F50140815181628173812FB75B +:1042E000F8948091880390918903A0918A03B091FA +:1042F0008B032FBF841B950BA60BB70B8436910540 +:10430000A105B10540F4B701C8010E948708998151 +:10431000891709F44FC0082C000C9908C4010E94A9 +:104320005E31892B91F0B12C8B2D0F90DF91CF91C5 +:104330001F910F91FF90EF90DF90CF90BF90AF90C3 +:104340009F908F907F906F9008958AE0889DF001F4 +:10435000899DF00D1124EF5FFE4F458150E0E4167A +:10436000F50608F4A7018AE0889DF001899DF00D0B +:104370001124EF5FFE4F6681778160547D4FC60147 +:104380000E946932B701C8010E9487089981891388 +:10439000CACF0E943808F5016083718382839383BA +:1043A000BB24B394C1CFB12CA701B801C6010E94B0 +:1043B0006932BACFBB24B394F7CFCF92DF92EF929A +:1043C000FF920F931F93CF93DF9300D000D00F92F3 +:1043D000CDB7DEB76B0185E0E82EF12C01EC12E0E1 +:1043E0009E012F5F3F4F48EB52E061E080E00E946A +:1043F0002E21882349F095E0FE013196A3EBB2E02F +:1044000001900D929A95E1F795E0E3EBF2E0D60189 +:1044100001900D929A95E1F70F900F900F900F90E9 +:104420000F90DF91CF911F910F91FF90EF90DF9050 +:10443000CF90089590E080E00E948032893E9E4FA8 +:1044400011F40C943D1080E008951F920F920FB666 +:104450000F9211242F933F934F935F936F937F930A +:104460008F939F93AF93BF93CF93DF93EF93FF937C +:10447000D091E900DF708091EC00C82FC17080FD01 +:10448000C0E81092E9008091F000877F8093F000EF +:1044900078940E9434111092E9008091F0008860B5 +:1044A0008093F000CD2BCF70C093E900FF91EF9186 +:1044B000DF91CF91BF91AF919F918F917F916F913C +:1044C0005F914F913F912F910F900FBE0F901F90D2 +:1044D00018951F920F920FB60F9211242F933F93AE +:1044E0004F935F936F937F938F939F93AF93BF93FC +:1044F000EF93FF938091E10082FF09C08091E20079 +:1045000082FF05C08091E1008B7F8093E100809164 +:10451000DA0080FF24C08091D80080FF20C0809105 +:10452000DA008E7F8093DA008091D90080FF9DC0F1 +:1045300080E189BD82E189BD09B400FEFDCF81E043 +:1045400080939C0380918F03811109C00E94AA0669 +:104550000E9475078091E20084608093E200809160 +:10456000E10080FF17C08091E20080FF13C08091BE +:10457000E2008E7F8093E2008091E2008061809370 +:10458000E2008091D80080628093D80019BC85E059 +:1045900080939C038091E10084FF2BC08091E20016 +:1045A00084FF27C080E189BD82E189BD89B5982F4C +:1045B000917080FFFBCF8091D8008F7D8093D800D1 +:1045C0008091E1008F7E8093E1008091E2008F7EF8 +:1045D0008093E2008091E20081608093E20080910C +:1045E0009D03882309F447C084E080939C03809155 +:1045F0009C038091E10083FF27C08091E20083FF4C +:1046000023C08091E100877F8093E10082E0809366 +:104610009C0310929D038091E1008E7F8093E100C6 +:104620008091E2008E7F8093E2008091E2008061C1 +:104630008093E20042E060E080E00E9443078091C6 +:10464000F00088608093F000FF91EF91BF91AF91EF +:104650009F918F917F916F915F914F913F912F919A +:104660000F900FBE0F901F90189519BC10929C03CD +:1046700010928F0374CF8091E30087FD93E09093B5 +:104680009C03B5CF78941F921FB61F9211248F936D +:104690009F93AF93BF938091880390918903A091DA +:1046A0008A03B0918B030196A11DB11D80938803ED +:1046B00090938903A0938A03B0938B03BF91AF912A +:1046C0009F918F911F901FBE1F9018959C014FB70F +:1046D000F8948091880390918903A0918A03B09106 +:1046E0008B034FBF821B930B08952FB7F8948091D3 +:1046F000880390918903A0918A03B0918B032FBF07 +:104700000895AF92BF92DF92EF92FF920F931F93A3 +:10471000CF93DF93CDB7DEB761970FB6F894DEBFC6 +:104720000FBECDBF4C87888B998BE52ED62EF72EEA +:104730005E0127E0A20EB11C85E0F50111928A9579 +:10474000E9F7809170038A3008F095C080916E037C +:1047500090916F030E946623089708F48CC004E6CA +:1047600010E025E030E0A50164E084E10E949D2F87 +:10477000892B09F0DBC0109270038B8587FDD1C0B7 +:10478000E894E0F880916C0390916D03009709F034 +:10479000C2C08F819885891708F091C0981B892F16 +:1047A00041E020915E0130915F01889FC00111249A +:1047B00055E0589FF001599FF00D1124E29FB00180 +:1047C000E39F700DF29F700D1124660F672F661F17 +:1047D000770B7195442319F071956195710980915A +:1047E0006A0390916B03680F791F89859A858917F1 +:1047F00008F068C0981B892F41E0889FC0011124F0 +:1048000055E0589FF001599FF00D1124E29FC0011F +:10481000E39F900DF29F900D1124880F892F881F20 +:10482000990B9195442319F09195819591092091C7 +:10483000680330916903820F931F603871050CF48F +:1048400044C06F57710970936B0360936A033FE72D +:10485000D32E803891050CF44BC08F57910990935B +:104860006903809368039FE7F92E0E947523909354 +:104870006F0380936E03ED86DE86FF8686E0FE0181 +:104880003C96DE01119601900D928A95E1F72981FF +:104890003A814B815C816D817E8180E090E0619600 +:1048A0000FB6F894DEBF0FBECDBFDF91CF911F9141 +:1048B0000F91FF90EF90DF90BF90AF900895891B0C +:1048C00040E06FCF891B40E098CF6138FFEF7F0752 +:1048D0004CF461587F4F70936B0360936A0321E837 +:1048E000D22EB7CFD62E10926B0310926A03B1CF9F +:1048F00081382FEF92074CF481589F4F90936903B2 +:104900008093680381E8F82EB0CFF82E10926903E7 +:1049100010926803AACF019790936D0380936C0364 +:10492000A4CF6894E0F884E190E0F6CF8091700322 +:104930008F5F8093700399CF9F92AF92BF92CF9277 +:10494000DF92EF92FF920F931F93CF93DF93CDB738 +:10495000DEB764970FB6F894DEBF0FBECDBF8E01F1 +:104960000F5F1F4F8AE0D8011D928A95E9F79EEEEE +:10497000C92E91E0D92EF12CE12CAA24A394B12CBC +:10498000F60181916F018F3F09F444C0F894E82F3C +:10499000E295EF70F0E021A18F70A50102C0440FF5 +:1049A000551F8A95E2F7CA01922F982B91A392A1E5 +:1049B0008095892382A30E94500900C0E8EFF1E0AE +:1049C000912C31E021912F3F09F478C0A22FA295BC +:1049D000AF70B0E090968C9190E02F7002C09595EA +:1049E00087952A95E2F780FD69C0832F982A330FB7 +:1049F00052E0E030F50731F7F601319780818F3FC3 +:104A000011F00E94520980EA8A95F1F7F801EE0D43 +:104A1000FF1D9082AFEFEA1AFA0AB5E0EB16F10437 +:104A200009F0AECF4AE050E0B80188EE92E00E9473 +:104A30005C327C01892B41F08AE0F801A8EEB2E0FB +:104A400001900D928A95E1F71091F302E114F104BF +:104A5000B9F181E08093A8020E9475239093A70288 +:104A60008093A6028091A6029091A7020E946623DD +:104A7000069770F0A8EEB2E0E12FF0E0EE5AFC4F9E +:104A80008D91819322E0AD3EB207D1F71092A8023A +:104A900081E090E0EF28C1F064960FB6F894DEBF95 +:104AA0000FBECDBFDF91CF911F910F91FF90EF907F +:104AB000DF90CF90BF90AF909F90089580E096CF09 +:104AC0008091A8028111CECF0E94A30ED82EE09132 +:104AD000F302882309F4B4C07E0140E1E40EF11C26 +:104AE00085E0D7011D928A95E9F70E2F10E00E5A46 +:104AF0001C4F8091E1028A3008F06CC04DED51E20C +:104B0000B701C8010E945F0E882309F485C04EEEEC +:104B100056E2B701C8010E945F0E882309F47CC0E9 +:104B200047E050E2B701C8010E945F0E882309F4F4 +:104B300073C043EF50E2B701C8010E945F0E8823A3 +:104B400009F46AC041ED50E2B701C8010E945F0E4E +:104B5000882309F461C01092E1028091F20290E092 +:104B600045E050E0B7018E5A9C4F0E945C3221E034 +:104B70002093B102892B09F042C0D12C8BEAE82E98 +:104B800082E0F82E10E000E0D7018D917D018823AE +:104B9000D1F08695F80109F450C0E851FE4F8081AC +:104BA00091819C878B871D860E9475238160782F59 +:104BB0009F878E87F701319710824B855C856D85C5 +:104BC0008F850E94771F0E5F1F4F04301105E1F69D +:104BD0008D2D62CF8091A9029091AA020E94662336 +:104BE000843F914008F08ACF8091B102882329F256 +:104BF00085E0F70111928A95E9F71092B102A09130 +:104C0000F202B0E0AE5ABC4F85E0FE017096019012 +:104C10000D928A95E1F7B2CF8091E1028F3F31F09A +:104C20008F5F8093E1028A3008F497CF0E9475234A +:104C30009093AA028093A902D7CFEC51FE4FAFCF39 +:104C4000F0E0EE5AFC4FF89485E0A1ECB2E0019060 +:104C50000D928A95E1F765E070E081EC92E00E94A8 +:104C600087088093C0020E945009F894E091FB02EB +:104C7000F0E0E850FD4F80818B878093C70261E0B0 +:104C800070E0CE010B960E9487088093C6020E94B6 +:104C90005009F894C090C802D090C902E090CA02AE +:104CA000F090CB028091AD029091AE02A091AF0244 +:104CB000B091B002C816D906EA06FB06D1F0C09240 +:104CC000AD02D092AE02E092AF02F092B0020E942A +:104CD000A30E81110EC00E943808C61AD70AE80A2E +:104CE000F90AC092E202D092E302E092E402F0926A +:104CF000E5020E945009F8948091D3028823F1F0D4 +:104D000080FF0DC08091CC0280FF25C0909173047C +:104D100091609093730460E086950E94691680917B +:104D2000D30281FF09C020E04091CF026091CE0202 +:104D30008091CD020E94EA141092D3020E94500981 +:104D4000F8948091D402882349F00E94FB0C0E94C1 +:104D5000500980E0A1CE0E944A0EE1CF0E94E00CF3 +:104D6000F6CFEF92FF920F931F93CF93DF9300D074 +:104D700000D00F92CDB7DEB7162FE82EF12CC70169 +:104D8000880F991F662339F188519E4FFC0180815D +:104D900091819A83898301E00B830E94752381604E +:104DA000782F9D838C83F701E555FD4F0127110F67 +:104DB000102B108349815A816B818D810F900F9048 +:104DC0000F900F900F90DF91CF911F910F91FF9057 +:104DD000EF900C94771F8C519E4FD8CFCF92DF92DB +:104DE000EF92FF920F931F93CF93DF930F92CDB764 +:104DF000DEB7EE24E394F12C07EC12E09E012F5F66 +:104E00003F4F4CEB52E063E082E00E942E21082FDE +:104E1000882321F1C090F5028C2D90E09C01285050 +:104E20003D4F79011981F9018081181BD12E80E055 +:104E30000AC0DA94F70180818F5F808360E08C2D57 +:104E40000E94B126802F1D14A4F3912F17FD90E02E +:104E5000191B11110EC081110E94140B802F0F908D +:104E6000DF91CF911F910F91FF90EF90DF90CF9046 +:104E700008951F5FF70180818150808361E08C2D50 +:104E80000E94B126802FE5CF1F921FB61F921124DA +:104E90008F939F93AF93BF9380918703811113C02A +:104EA0008091880390918903A0918A03B0918B032C +:104EB0004196A11DB11D8093880390938903A0930F +:104EC0008A03B0938B03BF91AF919F918F911F90F5 +:104ED0001FBE1F901895CDB7DEB7AE970FB6F894EA +:104EE000DEBF0FBECDBF84B7877F84BF0FB6F894F7 +:104EF000A8958091600088618093600010926000A6 +:104F00000FBE80E890E00FB6F89480936100909314 +:104F100061000FBE85B7806885BF85B7806885BF93 +:104F20008EE499E090933D0280933C020E94AA0691 +:104F30000E9475078091E20084608093E20078947B +:104F400080919C038823A1F01091E9001F7090913B +:104F5000EC00892F817090FD80E8182B1092E900F9 +:104F60008091E80083FD0E9434111F701093E900C6 +:104F700082E084BD93E095BD9AEF97BD80936E006B +:104F80001092E2021092E3021092E4021092E50203 +:104F90000E943D10811102C00E94990F0E94A30E31 +:104FA0008093470180914701882309F47CC01092C7 +:104FB000600182E2809361010E94A30E81110E9430 +:104FC0005130809147018091470195E0811190E037 +:104FD0009093F30285E0891B8093F2020EEE11E0BC +:104FE00093EFE92E91E0F92ED8018D918D018F3F3D +:104FF00011F00E945209E016F106B1F708EF11E036 +:1050000080E0E82E82E0F82EF80181918F018F3F39 +:1050100011F00E945209E016F106B1F78AE0E2E5CC +:10502000F3E0DF01282F1D922A95E9F7E8EEF2E080 +:10503000DF011D928A95E9F70E941A22811102C0B0 +:105040000E94D61682E090E00E947232809347035D +:105050000E9456109093E7028093E6020E949C24DF +:10506000EFE7FBEB3197F1F700C000000E949C24B2 +:105070008091520380FF1BC06FEF7FEF90E080E0D4 +:105080000E94A43287E797E7909301088093000875 +:1050900088E19AE00FB6F894A895809360000FBE5F +:1050A00090936000FFCF82E28093600183CF83E022 +:1050B00090E00E9472320E949A0B8091A6030E9497 +:1050C000DF150E94A30E811102C00E9454300E947D +:1050D000A30E81111EC283E08093420380E480937B +:1050E00074030E94522E6DE070E08CE492E00E9406 +:1050F000B00C892BE9F58091420363E070E081FDFB +:105100000AC289E492E00E94B00C892B89F56DE017 +:1051100070E089E392E00E94B00C892B49F50E946F +:1051200038086058774C8E4F9F4F60937B03709385 +:105130007C0380937D0390937E03EAE7F4E080E0B4 +:1051400094E0DF019C011D9221503040E1F7F09383 +:105150007B08E0937A088FEF9FEF90937904809318 +:10516000780481E08093800380937F03109243034F +:105170008091F402811136C00E941A22811104C06C +:105180000E94D6160E94B71688E090E00E947A32FC +:105190006093730470937404809375049093760401 +:1051A000809173038360809373036E7F71F40E9418 +:1051B000B71688E090E00E947A326093730470938F +:1051C000740480937504909376040E94A2088091E1 +:1051D000730480FF04C060E086950E94691681E038 +:1051E0008093F40280914701811106C084E9809385 +:1051F000550182E98093540120915501A22FA29577 +:10520000AF70B0E091963C9191972F7081E090E063 +:10521000BC01022E01C0660F0A94EAF7462F4095A2 +:10522000432391964C93919792963C919297362B6B +:1052300092963C93929740915401E42FE295EF703F +:10524000F0E031A14F70042E01C0880F0A94EAF7F4 +:10525000982F9095932391A392A1892B82A3909646 +:105260008C9190E002C0959587952A95E2F7817020 +:1052700020A130E002C0359527954A95E2F792E0EB +:1052800020FF90E0892B8093FC029091470181E000 +:1052900098279093FB02891B8093F5020E94CF16FA +:1052A00060E08AE00E94691681E00E941F1680EE8D +:1052B00090E090935F0180935E010E940B0F88E461 +:1052C00091E09093840380938303A8E18A2E912C2C +:1052D000B0E4EB2E80919C03FF24F39400E112E1F3 +:1052E000853009F465C10E949C24D82E81110E944A +:1052F0003808F2E52F2EF3E03F2EE8E4F3E0D10189 +:1053000010E000E0A02ECD9081918C1509F472C1BF +:105310008C25B12CFF24F3949F2D982309F465C1AB +:105320000E94A30E882399F0B9A2AAA2CF2081E0FF +:1053300009F480E08BA30E9475238160782F9DA3E0 +:105340008CA349A15AA16BA18DA10E94771FF801DE +:10535000E85BFC4F8081F826F0828091FC02E82F08 +:10536000EE0FEE0F90915501A92FA295AF70B0E00E +:1053700090962C9130E09F7002C0359527959A95B4 +:10538000E2F72170332790915401A92FA295AF70B5 +:10539000B0E090964C9150E09F7002C055954795B3 +:1053A0009A95E2F7CA018170992740FF02C082E016 +:1053B00090E0822B8E2B8093FC021091FB028F7069 +:1053C000E82FF0E0E050FE4F80819091FA02890FC3 +:1053D0008093FA02F12C84306CF0E12FF0E0E85079 +:1053E000FD4F80818F5F808360E0812F0E94B12616 +:1053F000FF24F3948091FA028D3F6CF4E12FF0E0EA +:10540000E850FD4F80818150808361E0812F0E94B0 +:10541000B126FF24F3948091FA02082E000C990B18 +:1054200064E070E00E9432328093FA02F1100E9430 +:10543000140B80918003882351F180914403909153 +:1054400045030E946623C29708F0EBC020917804C0 +:10545000309179042115310509F09DC180917F03B8 +:105460008823A9F00E94380800917B0310917C03E7 +:1054700020917D0330917E03601B710B820B930B97 +:105480006F3F7F4F8F4F9F4710F40E94E00CD11069 +:1054900001C0F1100E94FB0C0E9464100E94C60E15 +:1054A00090914603891731F00E94C60E80934603FF +:1054B0000E94260E80919C03843009F00BCF83E07C +:1054C0008093E9008091E80082FF04CF8091E8009A +:1054D00090E085FF0CC00E94C90630E2C32ED12C9B +:1054E0008E010F5F1F4F882309F431C291E0809134 +:1054F000E8008B778093E800992309F4EBCEE981EB +:10550000E150E33108F087C2F0E0EF5EFB4C0C9411 +:10551000463281E0E1CD86E492E0F5CD80919C03B6 +:10552000843009F435C080E00E94260E8091F70295 +:10553000811109C0F092F702809173048170809309 +:10554000F6020E944A0E0E94E00C0E946410109223 +:1055500087030FB6F894A895809260000FBEE09282 +:10556000600083B7817F846083BF83B7816083BF1E +:105570007894889583B78E7F83BF0FB6F894A895EB +:1055800080916000886180936000109260000FBE7F +:1055900080919B03882361F00E949C24E2E5F3E064 +:1055A0008191811160C38CE593E08E179F07C1F74D +:1055B00080919C03853009F4B1CF0E9429110E948B +:1055C000C60E0E94260E1092F7028091F6028823E2 +:1055D00049F08091730481608093730460E0869544 +:1055E0000E9469160E940B0F7ECEB394FF0C98E0C8 +:1055F000B91292CE0F5F1F4F0A30110509F082CE0B +:105600008FEF8EA38FA318A60E9475238160782F39 +:105610009AA789A74EA15FA168A58AA50E94771FB6 +:105620009CCE0E947523909345038093440360E0D1 +:1056300080E00E9470080E94C60E809301030E94C1 +:10564000A30E882309F48EC04091FD025091FE0202 +:105650006091FF02709100032FB7F8948091880346 +:1056600090918903A0918A03B0918B032FBF841B73 +:10567000950BA60BB70B81339547A105B10540F0FB +:105680000E94E00C80918003882309F4E7CEDECEEF +:105690000E94FB0C61E080E00E94700860E086E6FA +:1056A00091E00E94BC1462E080E00E94700880914A +:1056B000A6030E94600C823009F446C0E8F58823F6 +:1056C00009F442C0813009F445C065E080E00E94E1 +:1056D000700860E089E891E00E94BC1466E080E018 +:1056E0000E947008609101036695617084E991E001 +:1056F0000E94BC1467E080E00E9470086091010382 +:105700006095617089E991E00E94BC1468E080E0D6 +:105710000E9470086091010362FB662760F98DE9C1 +:1057200091E00E94BC146BE080E00E94700889E563 +:1057300092E00E946706A6CF833081F0843029F67C +:1057400060E08DE791E003C060E081E791E00E94B6 +:10575000BC14BBCF60E087E791E0F9CF60E083E85D +:1057600091E0F5CF63E080E00E94700860E082EA9B +:1057700091E00E94BC1464E080E00E94700860E048 +:105780008AEA91E00E94BC1467E080E00E94700801 +:1057900089ED93E0CECF8091430361E070E0811109 +:1057A0005DCE082F10E02B01082E02C0440C551CC2 +:1057B0000A94E2F7A90144215521452B09F447C079 +:1057C0009091420390FD45C08295880F880F8074A8 +:1057D0008093580198013695279520935B01815C51 +:1057E0008093590110925C0124E630E047E050E0DC +:1057F00066E571E088E70E94492F892B09F02ECEDB +:10580000A80176E0440F551F7A95E1F78091420395 +:1058100080FD2DC046585B4F04E610E020E430E0E8 +:1058200060E488E70E94702F892B09F017CE0E9450 +:10583000FB0CC201809590954090780450907904BB +:1058400048225922509279044092780407CE8F5F03 +:10585000A8CF880F880F880F8093580110925B01A2 +:10586000895F8093590187E080935C01BDCFE2E0BE +:10587000F3E0DF012E2D1D922A95E9F788E192E0F1 +:105880009EA78DA700E112E0ADA5BEA56D91BEA7B4 +:10589000ADA7F80181918F01840F952F911D9C0177 +:1058A00026583B4F3CA72BA7E62FF0E0EE5FFC4FBE +:1058B00030E020E067E0662E621ACC24C394022E0A +:1058C00001C0CC0C0A94EAF7ABA4BCA490E0D501CB +:1058D0008D915D018C21662D691B6770762E062ED9 +:1058E000000C770BB82F01C0BB0F7A94EAF77B2E20 +:1058F0007195619571096770772701C086956A95E2 +:10590000EAF7782A8081782A70829F5F9830F9F6CA +:105910002F5F3F4F31962830310561F6E0E2F2E02B +:105920002DA53EA5E217F30709F0AECF04E610E07F +:1059300020E430E042E053E073CF8091F100D801E1 +:105940008D938D01B1E0CB1AD10809F4CFCD8091B0 +:10595000E80085FDF2CF8091E8008B778093E80026 +:105960000E94C906882399F3C1CD1A8289E08B83EE +:1059700011C08A81823009F48CC1833091F1813069 +:1059800009F049C00E9438080E944C326B837C8326 +:105990008D839E8380919C03843009F09BCC109171 +:1059A000E9001F709091EC00892F817090FD80E8D4 +:1059B000182B82E08093E9008091E80080FF0DC001 +:1059C00050E040E060E270E0CE0101960E94FA06ED +:1059D0008091E8008E778093E8001F701093E900B3 +:1059E00079CCFE013396D1018D911D018193BCE5E7 +:1059F0002B16B3E03B06B9F7CDCF8A81823059F43C +:105A00006B817C818D819E810E944C3286E290E088 +:105A10000E948632BFCF8FEF8983BCCF4C816B81D0 +:105A20008A810E94A80F9827892798279E838D83B3 +:105A3000B1CFCD80DE80DC24CD24DC248A810B81B3 +:105A4000E0E10E9F80011124F0EA8F9F000D111DEF +:105A500011248C8190E0880F991F080F191F6D2D5C +:105A6000C80187960E9486326C2DC8018896D0CFD7 +:105A70000E942E0F8FCF8A818138C1F060F4803868 +:105A800009F088CF20E04B81609175048091740407 +:105A90000E94EA147FCF8238E9F0833809F07ACF88 +:105AA00020E0409176046C818B81F2CF60E08B81A5 +:105AB0000E9469168B81811103C00E944A0E6ACF31 +:105AC0008091730481608093730460E086950E94E6 +:105AD000691660CF8B81809377045CCF8A8181388F +:105AE00099F030F4803809F055CF809176043FCF9B +:105AF000823891F0833809F04DCF809174048B8304 +:105B0000809175048C8346CF8091730480FF02C01E +:105B100086952DCF80E02BCF8091770428CF6091A0 +:105B200073047091740480917504909176040E94BE +:105B3000D81430CF80E18A832DCF1A8289EB17CF1A +:105B4000AA80BB80BA24AB24BA248E010F5F1F4FFA +:105B5000CC80C00ED12ED11CC501895B9C4F0C1589 +:105B60001D0509F417CF29EBA216B10458F40E94C1 +:105B70007232D80114968C93FFEFAF1ABF0A0F5FF1 +:105B80001F4FEACFF8011482F7CF0A811B8110273B +:105B9000012710279E012F5F3F4F5901CC80C00E77 +:105BA000D12ED11CC801895B9C4FC016D10609F4C7 +:105BB000F1CE093B110528F4D50114966C910E9491 +:105BC0008632BFEFAB1ABB0A0F5F1F4FEBCF0E94AD +:105BD0001E0FE0CE85E0AFCFAA80BB80BA24AB24F5 +:105BE000BA248E010F5F1F4FCC80C00ED12ED11C66 +:105BF000C5018796C016D10609F4CCCEE0E2AE16F8 +:105C0000E3E0BE0658F40E947232D80114968C93D9 +:105C1000FFEFAF1ABF0A0F5F1F4FEACFF8011482E0 +:105C2000F7CF0A811B811027012710279E012F5FC4 +:105C30003F4F5901CC80C00ED12ED11CC801879690 +:105C4000C016D10609F4A6CE003233E0130728F4BB +:105C5000D50114966C910E948632BFEFAB1ABB0A35 +:105C60000F5F1F4FEBCF09BD19BD09B400FEFDCF7B +:105C70008091D8008F7D8093D8008091E000826071 +:105C80008093E0008091E00081FDFCCF0E9429110B +:105C90008FCC86E290E00E9472321B821C821D82B1 +:105CA0008E8378CE1092B9008CE08093B80008956E +:105CB0009F92AF92BF92CF92DF92EF92FF920F939B +:105CC0001F93CF93DF93B82EEB010E9475236C01D5 +:105CD000EE24E394F12CC431D10560F025E0E22EEE +:105CE000F12CCF3FDC0731F0CE0164E170E00E947F +:105CF00012327B0184EAA82E94E8992E1092BC00FF +:105D0000A092BC000E9475238C018091BC0087FF8B +:105D10000DC08091B900887F883039F18091B90039 +:105D2000887F803111F10FEF1FEF09C00E947523AA +:105D3000801B910B8E159F0540F30EEF1FEFCF3F99 +:105D4000DC07E1F2C6010E9466238C179D07B0F2C2 +:105D5000C801DF91CF911F910F91FF90EF90DF90DD +:105D6000CF90BF90AF909F900895B092BB0090925B +:105D7000BC000E9475238C018091BC0087FF0AC083 +:105D80008091B900887F883111F0803461F610E08D +:105D900000E0DECF0E947523801B910B8E159F05BE +:105DA00058F3CBCF0F931F93CF93DF93EB018093E7 +:105DB000BB0084E88093BC000E9475238C01809115 +:105DC000BC0087FF11C02091B900287F81E090E0DE +:105DD000283211F490E080E0919581959109DF914E +:105DE000CF911F910F910895CF3FDC0741F30E949F +:105DF0007523801B910B8C179D0708F38EEF9FEF87 +:105E0000EECF0F931F93CF93DF93EC0184EC80933D +:105E1000BC000E9475238C018091BC0087FF08C0E4 +:105E20008091BB0090E0DF91CF911F910F91089579 +:105E3000CF3FDC0789F30E947523801B910B8C17E1 +:105E40009D0750F38EEF9FEFEECF0F931F93CF93ED +:105E5000DF93EC0184E88093BC000E9475238C01E1 +:105E60008091BC0087FF08C08091BB0090E0DF916B +:105E7000CF911F910F910895CF3FDC0789F30E94C6 +:105E80007523801B910B8C179D0750F38EEF9FEFAE +:105E9000EECFCF92DF92EF92FF920F931F93CF93AB +:105EA000DF936B018A017901B9010E94582EE60146 +:105EB0000C0D1D1DC017D10761F424E92093BC000F +:105EC000DF91CF911F910F91FF90EF90DF90CF90D6 +:105ED000089597FDF2CFB70189910E94D22EEACFA3 +:105EE000CF92DF92EF92FF920F931F93CF93DF93A6 +:105EF000C62F6A017901B8010E94582E97FD0CC087 +:105F0000B8018C2F0E94D22EE601EC0CFD1CCE15A0 +:105F1000DF0511F097FF0CC024E92093BC00DF914E +:105F2000CF911F910F91FF90EF90DF90CF90089548 +:105F3000B80189910E94D22EEACFCF92DF92EF92E0 +:105F4000FF920F931F93CF93DF93F82EE62EEA0173 +:105F50006901B8010E94582E97FD15C0B8018E2D19 +:105F60000E94D22E97FD0FC0B8018F2D81600E9434 +:105F7000582EF12CE12C21E0C21AD108EC14FD04BA +:105F800000F597FF11C024E92093BC0018161906EC +:105F900014F490E080E0DF91CF911F910F91FF907A +:105FA000EF90DF90CF900895C8010E94012F97FDD8 +:105FB00004C0FE01EE0DFF1D80832FEFE21AF20AEE +:105FC000DDCF97FDE0CFC8010E94252F97FDDBCFE5 +:105FD000CC0DDD1D8883D7CF84E98093BC00089564 +:105FE0008EE14B9B02C08150E1F74B9BFECF0895A1 +:105FF0005B9880E28A95F1F75B9A0895FC013BE09B +:106000003A95F1F798E020E080E031E040E14A95F0 +:10601000F1F7880F4B9B02C08160232742E04A952D +:10602000F1F7000040E14A95F1F7915079F790E1DE +:106030009A95F1F799B132E03A95F1F7000040E115 +:106040004A95F1F793FB992790F992272081920FB7 +:1060500090830895EF92FF920F931F93CF93DF9356 +:106060000F92CDB7DEB719828C017C01E60EF11CD0 +:106070000E151F0561F481E09981911180E00F9068 +:10608000DF91CF911F910F91FF90EF9008950E94A3 +:10609000F02FCE0101960E94FE2FF80181938F010F +:1060A000E7CF539A5B9A089553985B9AEB9AE9E687 +:1060B000F0E080818F73808308956150770B91E0C9 +:1060C00001C0990F6A95EAF720E031E0911108C00C +:1060D000222391F05B9A80E28A95F1F75B9808950C +:1060E000492F482339F05B9A232740E24A95F1F77C +:1060F0009695ECCF5B98F9CF5B98EDCFFF920F931D +:106100001F93CF93DF93EC018C01060F111DC01775 +:10611000D10731F4DF91CF911F910F91FF90089536 +:10612000F9900E94F82F68E08F2D0E945D30EFCF2C +:106130001F920F920FB60F921124EF92FF920F93BE +:106140001F932F933F934F935F936F937F938F93FF +:106150009F93AF93BF93EF93FF93CF93DF930F92F0 +:10616000CDB7DEB719820E94F02FCE0101960E94B2 +:10617000FE2FA82FA695A695A695282F22952570C7 +:106180009A2F9570290F922F937026952695920F2E +:10619000982797708981982B09F075C0A83008F06E +:1061A00072C080E18A95F1F75B9A539AB2E0BA9592 +:1061B000F1F700C05B98EA2EF12CEAE0AE9FD00127 +:1061C0001124AF5FBE4F1896ED91FC91199730974F +:1061D000B1F06091EC017091ED0116962D913C911A +:1061E0001797260F371F13968D919C911497680F60 +:1061F000791F15964C91159712968C9109958AE006 +:106200008E9DF0018F9DF00D1124EF5FFE4F658193 +:10621000662351F02091EC013091ED018681978148 +:10622000820F931F0E947E300E94F82FF0E1FA95B2 +:10623000F1F75B9853985B9A80E18A95F1F78AE0D1 +:106240008E9D80018F9D100D11240F5F1E4FD80170 +:1062500012966C911297662371F12091EC013091A6 +:10626000ED0113968D919C91820F931F0E942A300D +:10627000D801ED91FC91882311F088E001C082E003 +:1062800080830E94F02F0F90DF91CF91FF91EF91CB +:10629000BF91AF919F918F917F916F915F914F913E +:1062A0003F912F911F910F91FF90EF900F900FBE94 +:1062B0000F901F901895ED91FC91DFCF0F931F93D6 +:1062C000CF93DF93EC0108970CF0A9C08AE08C9F74 +:1062D000F0018D9FF00D1124EF5FFE4F80819181C1 +:1062E000892B09F49CC0F894539A5B9885E08A95B1 +:1062F000F1F700008C2F869585709C2F9570890F83 +:10630000982F937086958695890F8E0193E0000FE4 +:10631000111F9A95E1F7082B0E94F82F00C068E042 +:10632000802F0E945D30A0E1AA95F1F753985B9A07 +:106330004B9B27C087E090E04B9925C08AE08C9F5B +:1063400080018D9F100D11240F5F1E4FF801658194 +:106350006623A1F12091EC013091ED0186819781B6 +:10636000820F931F0E942A30811128C0539A5B9A92 +:10637000D801ED91FC9182E08083789482E090E0F6 +:1063800016C000C0D5CF0197B9F4539A5B9A8AE042 +:106390008C9FF0018D9FF00D1124EF5FFE4F019057 +:1063A000F081E02D81E08083789481E090E0DF91BE +:1063B000CF911F910F91089500C0BECF0E94F02F82 +:1063C000B0E2BA95F1F75B98539AE0E1EA95F1F7FC +:1063D0008AE08C9FF0018D9FF00D1124EF5FFE4F3E +:1063E0006281662351F02091EC013091ED018381AF +:1063F0009481820F931F0E947E300E94F82F8AE0C2 +:106400008C9FF0018D9FF00D1124EF5FFE4F0190E6 +:10641000F081E02D1082789490E080E0C8CF84E095 +:1064200090E0C5CFAA1BBB1B51E107C0AA1FBB1F31 +:10643000A617B70710F0A61BB70B881F991F5A9510 +:10644000A9F780959095BC01CD010895991B79E03D +:1064500004C0991F961708F0961B881F7A95C9F7F4 +:106460008095089597FB072E16F4009407D077FDCA +:1064700009D00E94123207FC05D03EF49095819518 +:106480009F4F0895709561957F4F0895EE0FFF1F00 +:106490000590F491E02D09946927962769277827BC +:1064A000872778270895FB01DC0102C005900D9233 +:1064B00041505040D8F70895FB01DC0104C08D9194 +:1064C0000190801921F441505040C8F7881B990B66 +:1064D0000895FB01DC0102C001900D924150504033 +:1064E000D8F70895F999FECF92BD81BDF89A992702 +:1064F00080B50895A6E1B0E044E050E00C94AC32E1 +:10650000A8E1B0E042E050E00C94AC32262FF999BB +:10651000FECF92BD81BDF89A019700B4021639F002 +:106520001FBA20BD0FB6F894FA9AF99A0FBE0895D3 +:106530000396272F0E9487320E948632252F0E94C1 +:106540008732242F0C9487320196272F0E9487329E +:106550000C948632DC01CB01FC01F999FECF06C018 +:10656000F2BDE1BDF89A319600B40D924150504011 +:10657000B8F708950E94C1326894B1110C94503359 +:1065800008950E94353388F09F5798F0B92F9927C6 +:10659000B751B0F0E1F0660F771F881F991F1AF00E +:1065A000BA95C9F714C0B13091F00E944F33B1E0F1 +:1065B00008950C944F33672F782F8827B85F39F0F0 +:1065C000B93FCCF3869577956795B395D9F73EF4A7 +:1065D00090958095709561957F4F8F4F9F4F08954F +:1065E000E89409C097FB3EF490958095709561956D +:1065F0007F4F8F4F9F4F9923A9F0F92F96E9BB2723 +:106600009395F695879577956795B795F111F8CF9E +:10661000FAF4BB0F11F460FF1BC06F5F7F4F8F4F09 +:106620009F4F16C0882311F096E911C0772321F0FF +:106630009EE8872F762F05C0662371F096E8862F97 +:1066400070E060E02AF09A95660F771F881FDAF7EE +:10665000880F9695879597F9089557FD9058440FA0 +:10666000551F59F05F3F71F04795880F97FB991FB1 +:1066700061F09F3F79F0879508951216130614066E +:10668000551FF2CF4695F1DF08C0161617061806FB +:10669000991FF1CF86957105610508940895E894D6 +:1066A000BB2766277727CB0197F908950E946933A6 +:1066B0000C94DA330E94CC3338F00E94D33320F0AC +:1066C000952311F00C94C3330C94C93311240C940A +:1066D00050330E942D3370F3959FC1F3950F50E016 +:1066E000551F629FF001729FBB27F00DB11D639F84 +:1066F000AA27F00DB11DAA1F649F6627B00DA11D2A +:10670000661F829F2227B00DA11D621F739FB00DCF +:10671000A11D621F839FA00D611D221F749F33273F +:10672000A00D611D231F849F600D211D822F762FD8 +:106730006A2F11249F5750409AF0F1F088234AF0B5 +:10674000EE0FFF1FBB1F661F771F881F9150504021 +:10675000A9F79E3F510580F00C94C3330C9450333D +:106760005F3FE4F3983ED4F3869577956795B795A8 +:10677000F795E7959F5FC1F7FE2B880F911D9695C2 +:10678000879597F9089597F99F6780E870E060E032 +:1067900008959FEF80EC089500240A9416161706BA +:1067A00018060906089500240A9412161306140602 +:1067B00005060895092E0394000C11F4882352F065 +:1067C000BB0F40F4BF2B11F460FF04C06F5F7F4F1D +:1067D0008F4F9F4F0895F894FFCF28102810311045 +:1067E00031103310311031103110281028103810AA +:1067F0003110311038101A124212E5134212E5130B +:1068000075129612E5139413A1138B1B8B1BE41BBB +:10681000E41B161CBE1BBE1BBE1B301CA11CB11CE6 +:10682000B11CB52CB92CFD2C0E2D192D382D3B2D5E +:106830006E2D8F2D0B2D0B2D9A2D9D2DA02DC52D41 +:08684000E72DEA2DEC2D112ECD +:1068480001460200000001000000004602000000AE +:106858000501000000460200000001060000004695 +:1068680002000000010700000046020408000000C2 +:106878000000004602080C0000000000004602016B +:1068880014000000000000013508760D550D510D6B +:106898004D0D340894920021007F220007018000EA +:1068A8000044004444012D2D2D4C415945522D2DB5 +:1068B8000042617365200047616D6520005261697F +:1068C8007365004C6F776572002D2D2D4C4F434B2F +:1068D8002D2D2D0043617073004E756D005363724A +:1068E8006C002020534F4C4152002054454D5045D8 +:1068F800535400818283E200E900EA00B500B60043 +:10690800B700CD008301CC008A01920194012102D5 +:10691800230224022502260227022A02B300B40019 +:106928006F0070000704070907030708C00266978D +:10693800C634F40000000000F5F6F731333236FFB4 +:1069480000FF0100010000FFFF0000010001FF003F +:10695800000810182028303838302820181008006F +:1069680000010202020202020202020240227B49E4 +:0C697800012701AC00B40BCD0BED0B00AF +:00000001FF diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h index c53fc902cbc1..1e78d55dd000 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h @@ -18,6 +18,17 @@ along with this program. If not, see . #define MASTER_LEFT +#undef MATRIX_ROWS +#undef MATRIX_COLS +#undef MATRIX_ROW_PINS +#undef MATRIX_COL_PINS +#undef ENCODER_RESOLUTION +#define MATRIX_ROWS 10 +#define MATRIX_COLS 8 //Added extra column for rotary encoder VIA mapping. +#define MATRIX_ROW_PINS { C6, D7, E6, B4, F4 } +#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6, NO_PIN } //A virtual pin is needed for the encoder key matrix in via. +#define ENCODER_RESOLUTION 4 //Reduce encoder double-input issue. + #undef DEBOUNCE #define DEBOUNCE 6 //Default is 5 diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c index da7667dd3b58..f890fdb3857b 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c @@ -1,36 +1,48 @@ -/* -Copyright 2021 Spencer Deven -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 3 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 . -*/ +/* Copyright + * 2021 solartempest + * 2021 QMK + * + * 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 . + */ -//Setting up what encoder rotation does. If your encoder can be pressed as a button, that function can be set in Via. #ifdef ENCODER_ENABLE + static uint8_t encoder_state[2] = {0}; + static keypos_t encoder_ccw[2] = {{7, 4}, {7, 9}}; //Use these keymap positions to specify the encoder functions on rotate. + static keypos_t encoder_cw[2] = {{7, 3}, {7, 8}}; -bool encoder_update_user(uint8_t index, bool clockwise) { - if (index == 0) { - if (clockwise) { - tap_code(KC_VOLD); - } else { - tap_code(KC_VOLU); - } - } else if (index == 1) { - if (clockwise) { - tap_code(KC_PGUP); - } else { - tap_code(KC_PGDOWN); - } - } - return true; -} + void encoder_action_unregister(void) { + for (int index = 0; index < 2; ++index) { + if (encoder_state[index]) { + keyevent_t encoder_event = (keyevent_t){.key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], .pressed = false, .time = (timer_read() | 1)}; + encoder_state[index] = 0; + action_exec(encoder_event); + } + } + } + void encoder_action_register(uint8_t index, bool clockwise) { + keyevent_t encoder_event = (keyevent_t){.key = clockwise ? encoder_cw[index] : encoder_ccw[index], .pressed = true, .time = (timer_read() | 1)}; + encoder_state[index] = (clockwise ^ 1) | (clockwise << 1); + action_exec(encoder_event); + } + + void matrix_scan_user(void) { encoder_action_unregister(); } + + bool encoder_update_user(uint8_t index, bool clockwise) { + encoder_action_register(index, clockwise); + return false; + }; #endif + diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c index 6b52540f005c..a5e43dcae8a1 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c @@ -13,8 +13,7 @@ along with this program. If not, see . */ #include QMK_KEYBOARD_H #ifdef OLED_ENABLE - //#include "oled.c" - #include "snakey_minimal.c" + #include "snake_photo.c" #endif #include "encoder.c" @@ -24,6 +23,29 @@ along with this program. If not, see . bool was_scrolling = true; //Remember preferred state of trackball scrolling #endif +#ifdef HAPTIC_ENABLE + #include "drivers/haptic/DRV2605L.h" +#endif + +#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS) + extern rgblight_config_t rgblight_config; // To pull layer status for RGBLIGHT +#endif + +//Variables for custom keycodes +#ifdef SUPER_ALT_TAB_ENABLE + bool is_alt_tab_active = false; // Super Alt Tab Code + uint16_t alt_tab_timer = 0; +#endif +bool lshift_held = false; // LShift Backspace Delete whole Word Code +bool rshift_held = false; // RShift Backspace Delete whole Word Code +static uint16_t held_shift = 0; + +#ifdef D2SKATE_MACRO_ENABLE + uint16_t D2SKATE_TIMER = 0; + bool D2SKATE_skated = false; //Has skated + bool D2SKATE_reset = true; //Has skated +#endif + #ifdef VIA_ENABLE enum custom_keycodes { //Use USER 00 instead of SAFE_RANGE for Via. VIA json must include the custom keycode. ATABF = USER00, //Alt tab forwards @@ -48,51 +70,76 @@ along with this program. If not, see . }; #endif +#ifdef VIA_ENABLE + // Extra keys are added for rotary encoder support in VIA + #define LAYOUT_via( \ + L00, L01, L02, L03, L04, L05, R05, R04, R03, R02, R01, R00, \ + L10, L11, L12, L13, L14, L15, L06, R06, R15, R14, R13, R12, R11, R10, \ + L20, L21, L22, L23, L24, L25, L16, R16, R25, R24, R23, R22, R21, R20, \ + L30, L31, L32, L33, L34, L35, L26, L36, L37, R37, R36, R26, R35, R34, R33, R32, R31, R30, \ + L40, L41, L42, L43, L44, L45, L46, L47, R47, R46, R45, R44, R43, R42, R41, R40 \ + ) \ + { \ + { L00, L01, L02, L03, L04, L05, L06, KC_NO }, \ + { L10, L11, L12, L13, L14, L15, L16, KC_NO }, \ + { L20, L21, L22, L23, L24, L25, L26, KC_NO }, \ + { L30, L31, L32, L33, L34, L35, L36, L37 }, \ + { L40, L41, L42, L43, L44, L45, L46, L47 }, \ + { R00, R01, R02, R03, R04, R05, R06, KC_NO }, \ + { R10, R11, R12, R13, R14, R15, R16, KC_NO }, \ + { R20, R21, R22, R23, R24, R25, R26, KC_NO }, \ + { R30, R31, R32, R33, R34, R35, R36, R37 }, \ + { R40, R41, R42, R43, R44, R45, R46, R47 } \ + } +#endif + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* +#ifndef VIA_ENABLE //This will bypass the layout when VIA is enabled to save space. Requires loading layout in VIA otherwise random keys may be occur. [0] = LAYOUT( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_MINS, KC_EQL, 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_GRV, KC_MUTE, RGB_TOG, KC_DEL,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , - KC_LCTL, KC_LALT, KC_LGUI, KC_APP, MO(1), KC_SPC, KC_ENT, KC_ENT, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT - ), + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_MINS, KC_EQL, 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_GRV, KC_MUTE, _______, _______, RGB_TOG, KC_DEL, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, + KC_LCTL, KC_LALT, KC_LGUI, KC_APP, MO(1), KC_SPC, KC_ENT, _______, _______, KC_ENT, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT + ), [1] = LAYOUT( - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_PSLS, KC_P7, KC_P8, KC_P9, KC_NLCK, _______, _______, _______, _______, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_F12, - KC_CAPS, KC_P4, KC_P5, KC_P6, KC_NLCK, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_NLCK, - _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, - _______, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______ - ), + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_PSLS, KC_P7, KC_P8, KC_P9, KC_NLCK, _______, _______, _______, _______, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_F12, + KC_CAPS, KC_P4, KC_P5, KC_P6, KC_NLCK, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_NLCK, + _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, + _______, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______ + ), [2] = LAYOUT( - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_PSLS, KC_P7, KC_P8, KC_P9, KC_NLCK, _______, _______, _______, _______, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_F12, - KC_CAPS, KC_P4, KC_P5, KC_P6, KC_NLCK, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_NLCK, - _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, - _______, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______ - ), + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_PSLS, KC_P7, KC_P8, KC_P9, KC_NLCK, _______, _______, _______, _______, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_F12, + KC_CAPS, KC_P4, KC_P5, KC_P6, KC_NLCK, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_NLCK, + _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, + _______, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______ + ), [3] = LAYOUT( - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, _______, _______, _______, KC_F12, - _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_SPI, RGB_HUI, RGB_SAI, RGB_VAI, - _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_RMOD, RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD - ) -*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) +#endif }; #ifdef POINTING_DEVICE_ENABLE void run_trackball_cleanup(void) { //Set colour of trackball LED. Does not require RGBLIGHT_ENABLE if colour shorthands are not used. #ifdef POINTING_DEVICE_ENABLE if (trackball_is_scrolling) { - pimoroni_trackball_set_rgbw(43, 153, 103, 0x00); + pimoroni_trackball_set_rgbw(217, 165, 33, 0x00); //RGB_GOLDENROD in number form. + //pimoroni_trackball_set_rgbw(43, 153, 103, 0x00); } else if (!trackball_is_precision) { pimoroni_trackball_set_rgbw(0, 27, 199, 0x00); } else { - pimoroni_trackball_set_rgbw(217, 165, 33, 0x00); //RGB_GOLDENROD in number form. + //pimoroni_trackball_set_rgbw(217, 165, 33, 0x00); //RGB_GOLDENROD in number form. + pimoroni_trackball_set_rgbw(43, 153, 103, 0x00); } #endif } @@ -174,7 +221,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; #endif -/* case NMR: //Move window to next monitor on right + case NMR: //Move window to next monitor on right if (record->event.pressed) { register_code(KC_LSFT); register_code(KC_LWIN); @@ -266,7 +313,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return true; #endif -*/ + #ifdef POINTING_DEVICE_ENABLE //Allow modes when trackball is enabled. case PM_SCROLL: if (record->event.pressed) { diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk b/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk index f7bdbb17cb52..2d23c52fce08 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/rules.mk @@ -2,7 +2,7 @@ VIA_ENABLE = yes BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite GRAVE_ESC_ENABLE = no # Save space by not using KC_GESC (+127) SPACE_CADET_ENABLE = no # Save space by not using space cadet left/right shift (+350) -#MOUSEKEY_ENABLE = no # Mouse keys (+1482). Not required for trackball usage. +MOUSEKEY_ENABLE = no # Mouse keys (+1482). Not required for trackball usage. POINTING_DEVICE_ENABLE = yes # Enable Pimoroni Trackball on master (+2304) POINTING_DEVICE_DRIVER = pimoroni_trackball \ No newline at end of file diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/snake_photo.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/snake_photo.c new file mode 100644 index 000000000000..61685f8a8db9 --- /dev/null +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/snake_photo.c @@ -0,0 +1,325 @@ +/* Copyright + * 2021 solartempest + * 2021 Luna code adapted from HellSingCoder and Jackasaur + * 2021 QMK + * + * 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 o + * 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 . + */ + +//SSD1306 OLED update loop +#ifdef OLED_ENABLE + uint32_t oled_timer = 0; //OLED timeout + led_t led_usb_state; + + #define KEYBOARD_PET + // KEYBOARD PET START + + // advanced settings + #define ANIM_FRAME_DURATION 300 // how long each frame lasts in ms. Default is 200. + #define ANIM_SIZE 96 // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024 + + // timers + uint32_t anim_timer = 0; + uint32_t text_timer = 0; + + // current frame + uint8_t current_frame = 0; + + // status variables + #ifndef SNEAK_DISABLE + bool isSneaking = false; + #endif + bool isJumping = false; + bool showedJump = true; + bool isBarking = false; + + #if defined(OLED_LOGO) && !defined(OLED_NO_SLAVE) && !defined(OLED_NO_MASTER) + static void render_logo_slave(int LUNA_X, int LUNA_Y) { + static const char PROGMEM luna_logo[] = { // 'snake-logo', 64x44px + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x0c, 0xcf, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x60, 0x60, + 0xe0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x7f, 0x7f, 0xf3, 0xf3, 0xff, 0xff, 0xfe, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x38, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xf8, 0xfe, 0xfe, 0xff, + 0xff, 0x7f, 0x3f, 0x3f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x3f, 0x7f, 0x7f, 0xff, 0xff, 0xfe, + 0xf8, 0xf8, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc1, 0xc1, 0xe1, 0xf7, 0xff, + 0xff, 0x7f, 0x3f, 0x07, 0x03, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf1, 0xff, + 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf0, 0xc0, + 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xfc, 0xfc, 0xfe, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x07, 0x03, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0x3f, + 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf8, 0xfc, 0x3e, 0x0f, 0x07, 0x01, + 0x00, 0x00, 0x0f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf0, 0xe0, 0xc0, 0xc0, 0xe0, 0xe0, + 0xf0, 0xf0, 0xf8, 0xf8, 0xfe, 0xff, 0xff, 0x7f, 0x3f, 0x0f, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf0, 0xe0, + 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xfc, 0x7e, 0x3f, 0x0f, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, + 0x07, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, + 0x0f, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + oled_set_cursor(LUNA_X,LUNA_Y); + oled_write_raw_P(luna_logo, sizeof(luna_logo)); + } + #endif + + #if defined(OLED_LOGO) && !defined(OLED_NO_SLAVE) && !defined(OLED_NO_MASTER) + static void render_logo_master(int LUNA_X, int LUNA_Y) { + static const char PROGMEM luna_logo[] = { // 'photo-logo', 64x44px + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x60, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0x06, 0x06, 0x52, + 0xda, 0xca, 0x52, 0x06, 0xec, 0x18, 0x10, 0x10, 0x10, 0x10, 0x90, 0x9e, 0x43, 0x60, 0x20, 0x23, + 0x12, 0x10, 0x12, 0x10, 0x13, 0x31, 0x20, 0x60, 0xc3, 0x9f, 0x1e, 0x10, 0x1c, 0x12, 0x12, 0x12, + 0x12, 0x1c, 0x10, 0xf0, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xf0, 0xf7, 0x07, 0xe0, 0xc0, 0x00, 0xf8, 0xcf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x03, 0x06, 0x0e, 0x08, 0x00, 0x01, 0xc6, 0xfc, 0x00, 0x38, 0x70, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xfd, 0xfc, 0x00, 0x01, 0x18, 0x31, 0x63, 0x0f, 0x1c, 0x38, 0x30, 0x73, 0x66, + 0x64, 0x64, 0x60, 0x60, 0x60, 0x70, 0x30, 0x38, 0x1c, 0x0f, 0x07, 0x01, 0x00, 0x00, 0x00, 0xa0, + 0xe0, 0x40, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0c, 0x0c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1d, 0x1d, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x0f, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + oled_set_cursor(LUNA_X,LUNA_Y); + oled_write_raw_P(luna_logo, sizeof(luna_logo)); + } + #endif + + /*// logic + static void render_luna(int LUNA_X, int LUNA_Y) { + + // Sit + static const char PROGMEM sit[2][ANIM_SIZE] = { + // 'sit1', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xcc, + 0xcc, 0xf8, 0xf8, 0xf0, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3f, 0x7f, 0xfc, 0xf9, 0xf1, + 0xe1, 0xc1, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x38, 0x70, 0x60, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf9, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + // 'sit2', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xcc, + 0xcc, 0xf8, 0xf8, 0xf0, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3f, 0x7f, 0xfc, 0xf9, 0xf1, + 0xe1, 0xc1, 0x81, 0x00, 0x00, 0x01, 0x01, 0x02, 0x06, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x7c, 0x60, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf9, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + //Walk and run animations have been removed to save space. + + // Bark + static const char PROGMEM bark[2][ANIM_SIZE] = { + // 'bark1', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0x30, 0x70, 0xe0, 0xe0, 0xc0, 0xc0, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0xff, 0xff, 0xe7, 0xe7, 0xef, 0xef, 0xcf, 0xcb, 0x83, 0x83, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x1c, 0x38, 0x78, 0xf1, 0xe3, 0xe3, 0xe7, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + + // 'bark2', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0x60, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0x9f, + 0x0f, 0x0e, 0x1f, 0x1f, 0x3f, 0x3f, 0x7e, 0xe6, 0x83, 0x03, 0x0f, 0x43, 0x43, 0x90, 0x88, 0x08, + 0x00, 0x00, 0x03, 0x1e, 0x3c, 0x78, 0xf0, 0xe0, 0xe0, 0xf0, 0xf0, 0xfb, 0xff, 0xff, 0xff, 0x7f, + 0x7f, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + + // Sneak + #ifndef SNEAK_DISABLE + static const char PROGMEM sneak[2][ANIM_SIZE] = { + // 'sneak1', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xcc, 0xf8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, + 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x7f, 0xf1, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, + 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x01, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, + }, + // 'sneak2', 32x22px + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xe0, 0xf8, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, + 0x7c, 0xfc, 0xee, 0xe6, 0xfc, 0xfc, 0x78, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x7f, 0xf0, 0xf8, 0xf8, 0x7c, 0x7c, 0xf8, 0xf0, 0xf0, 0xf1, 0xe7, 0xef, 0xef, + 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + }; + #endif + + // animation + void animate_luna(void) { + // jump + if (isJumping || !showedJump) { + // clear + oled_set_cursor(LUNA_X,LUNA_Y +2); + oled_write(" ", false); + oled_set_cursor(LUNA_X,LUNA_Y -1); + showedJump = true; + } else { + // clear + oled_set_cursor(LUNA_X,LUNA_Y -1); + oled_write(" ", false); + oled_set_cursor(LUNA_X,LUNA_Y); + } + + // switch frame + current_frame = (current_frame + 1) % 2; + + // current status + if(isBarking) { + oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); + #ifndef SNEAK_DISABLE + } else if(isSneaking) { + oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + #endif + } else { + oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); + } + } + + // animation timer + if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animate_luna(); + } + } + // KEYBOARD PET END + */ + + + #if !defined(OLED_NO_SLAVE) && !defined(OLED_NO_MASTER) + static void print_logo_narrow(void) { + //oled_set_cursor(0,1); + //oled_write("----------", false); + + oled_set_cursor(0,3); + oled_write(" SOLAR", false); + oled_set_cursor(0,4); + oled_write(" TEMPEST", false); + + //oled_set_cursor(0,15); //Last line on the display + //oled_write("----------", false); + + #ifdef OLED_LOGO + render_logo_slave(0,7); //Not defining this in config.h will save space (+112). + #endif + } + #endif + + static void print_status_narrow(void) { + // Print current layer + oled_set_cursor(0,1); + oled_write("---LAYER--", false); + + oled_set_cursor(0,2); + switch (get_highest_layer(layer_state)) { + case 0: + case 2: + oled_write("Base ", false); + break; + case 1: + oled_write("Game ", false); + break; + case 4: + oled_write("Raise", false); + break; + case 3: + oled_write("Lower", false); + break; + } + + // lock status + oled_set_cursor(0,5); + oled_write("---LOCK---", false); + oled_set_cursor(0,6); + oled_write("Caps", led_usb_state.caps_lock); + oled_set_cursor(0,7); + oled_write("Num", !(led_usb_state.num_lock)); + oled_set_cursor(0,8); + oled_write("Scrl", led_usb_state.scroll_lock); + + /* KEYBOARD PET RENDER START */ + //render_luna(0,11); + /* KEYBOARD PET RENDER END */ + #ifdef OLED_LOGO + render_logo_master(0,11-0); //Not defining this in config.h will save space (+112). + #endif + } + + oled_rotation_t oled_init_user(oled_rotation_t rotation) { + if (is_keyboard_master()) { + return OLED_ROTATION_90; + } + else{ + return OLED_ROTATION_270; + } + } + + bool oled_task_user(void) { + led_usb_state = host_keyboard_led_state(); + + + if (is_keyboard_master()) { + if (timer_elapsed32(oled_timer) > 30000) {//OLED timeout 30000ms = 30s + oled_off(); + return false; + } else { + oled_on(); + } + #ifndef OLED_NO_MASTER + print_status_narrow(); + #endif + } else { + #ifdef OLED_NO_SLAVE //do not render slave + #else + #if !defined(OLED_NO_MASTER) //render as normal + print_logo_narrow(); + #else //render status on slave + print_status_narrow(); + #endif + #endif + } + return false; + } +#endif diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA keymap.json b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA keymap.json new file mode 100644 index 000000000000..87a57dfe59bf --- /dev/null +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA keymap.json @@ -0,0 +1,82 @@ +{ + "name":"Zodiark", + "vendorId":"0xF901", + "productId":"0xF902", + "lighting": "qmk_rgblight", + "matrix": { "rows": 10, "cols": 8 }, + "customKeycodes": [ + { + "name": "Super Alt Tab FWD", + "title": "Alt Tab Forwards in Windows", + "shortName": "ATABF" + }, + { + "name": "Super Alt Tab REV", + "title": "Alt Tab Reverse in Windows", + "shortName": "ATABR" + }, + { + "name": "Move Window Right", + "title": "Move Window Right in Windows", + "shortName": "MWR" + }, + { + "name": "Move Window Left", + "title": "Move Window Left in Windows", + "shortName": "MWL" + }, + { + "name": "Shift-BSPC", + "title": "Shift-Backspace to Delete Whole Words", + "shortName": "SBS" + }, + { + "name": "Trackball Scroll", + "title": "Pimoroni Trackball Scroll Mode", + "shortName": "PM_SCROLL" + }, + { + "name": "Trackball Precision", + "title": "Pimoroni Trackball Precision Mode", + "shortName": "PM_PRECISION" + }, + { + "name": "D2 Hunter Skate", + "title": "Destiny 2 Hunter Sword Skate", + "shortName": "D2SKATE" + } + ], + "layouts": + { + "keymap": + [ + [{"y":1,"x":3},"0,3",{"x":11},"5,3"], + [{"y":-0.87,"x":2},"0,2",{"x":1},"0,4",{"x":9},"5,4",{"x":1},"5,2"], + [{"y":-0.88,"x":5},"0,5",{"x":7},"5,5"], + [{"y":-0.72},"0,0","0,1",{"x":15},"5,1","5,0"], + [{"y":-0.53,"x":3},"1,3",{"x":11},"6,3"], + [{"y":-0.87,"x":2},"1,2",{"x":1},"1,4",{"x":9},"6,4",{"x":1},"6,2"], + [{"y":-0.88,"x":5},"1,5",{"x":7},"6,5"], + [{"y":-0.72},"1,0","1,1",{"x":15},"6,1","6,0"], + [{"y":-0.83,"x":6},"0,6",{"x":5},"5,6"], + [{"y":-0.7,"x":3},"2,3",{"x":11},"7,3"], + [{"y":-0.87,"x":2},"2,2",{"x":1},"2,4",{"x":9},"7,4",{"x":1},"7,2"], + [{"y":-0.88,"x":5},"2,5",{"x":7},"7,5"], + [{"y":-0.72},"2,0","2,1",{"x":15},"7,1","7,0"], + [{"y":-0.83,"x":6},"1,6",{"x":5},"6,6"], + [{"y":-0.7,"x":3},"3,3",{"x":11},"8,3"], + [{"y":-0.87,"x":2},"3,2",{"x":1},"3,4",{"x":9},"8,4",{"x":1},"8,2"], + [{"y":-0.88,"x":5},"3,5",{"x":7},"8,5"], + [{"y":-0.72},"3,0","3,1",{"x":15},"8,1","8,0"], + [{"y":-0.53,"x":3},"4,3",{"x":11},"9,3"], + [{"y":-0.87,"x":2},"4,2",{"x":1},"4,4",{"x":9},"9,4",{"x":1},"9,2"], + [{"y":-0.6},"4,0","4,1",{"x":15},"9,1","9,0"], + [{"r":30,"rx":6.5,"ry":4.25,"y":-0.6,"x":0.8,"c":"#aaaaaa"},"3,7","4,7"], + [{"r":30,"rx":6.5,"ry":4.25,"y":0.6,"x":0.17,"c":"#777777"},"2,6","3,6"], + [{"x":-0.33,"w":1.5},"4,5","4,6"], + [{"r":-30,"rx":13,"y":-0.8,"x":-3.2,"c":"#aaaaaa"},"8,7","9,7"], + [{"r":-30,"rx":13,"y":0.35,"x":-2.6,"c":"#777777"},"8,6","7,6"], + [{"x":-2.6},"9,6",{"w":1.5},"9,5"] + ] + } +} diff --git a/keyboards/aleblazer/zodiark/zodiark VIA layout.json b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json similarity index 83% rename from keyboards/aleblazer/zodiark/zodiark VIA layout.json rename to keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json index 6c6ec1511ed3..363ef12f6230 100644 --- a/keyboards/aleblazer/zodiark/zodiark VIA layout.json +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json @@ -10,21 +10,24 @@ "KC_3", "KC_4", "KC_5", - "S(LWIN(SWIN(KC_LEFT)))", + "KC_MS_BTN2", + "KC_ESC", "KC_ESC", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", - "KC_F13", + "KC_MS_BTN1", + "KC_A", "KC_TAB", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", - "KC_LBRC", + "USER05", + "KC_VOLD", "KC_LSFT", "KC_Z", "KC_X", @@ -32,6 +35,7 @@ "KC_V", "KC_B", "KC_MUTE", + "KC_VOLD", "KC_UP", "KC_DOWN", "KC_LGUI", @@ -39,27 +43,31 @@ "KC_LCTL", "KC_ENT", "TT(3)", + "KC_VOLU", "KC_MINS", "KC_0", "KC_9", "KC_8", "KC_7", "KC_6", - "S(LWIN(SWIN(KC_RGHT)))", - "KC_BSPC", + "USER02", + "KC_Y", + "USER04", "KC_P", "KC_O", "KC_I", "KC_U", "KC_Y", - "KC_F14", + "USER03", + "KC_RBRC", "KC_QUOT", "KC_SCLN", "KC_L", "KC_K", "KC_J", "KC_H", - "KC_RBRC", + "USER06", + "KC_MSTP", "KC_RSFT", "KC_SLSH", "KC_DOT", @@ -67,13 +75,15 @@ "KC_M", "KC_N", "C(KC_W)", + "KC_LEFT", "KC_RGHT", "KC_LEFT", "TO(1)", "KC_RALT", "KC_RCTL", "KC_SPC", - "TT(4)" + "TT(4)", + "KC_RGHT" ], [ "KC_PSCR", @@ -83,6 +93,7 @@ "KC_3", "KC_G", "KC_T", + "KC_S", "KC_F12", "KC_ESC", "KC_Q", @@ -90,6 +101,7 @@ "KC_E", "KC_R", "KC_G", + "KC_C", "KC_TAB", "KC_TAB", "KC_A", @@ -97,6 +109,7 @@ "KC_D", "KC_F", "KC_B", + "KC_SPC", "KC_LSFT", "KC_LSFT", "KC_Z", @@ -104,13 +117,15 @@ "KC_C", "KC_V", "KC_TRNS", + "KC_TRNS", "KC_LCTL", "KC_LCTL", "KC_TRNS", "KC_LALT", - "KC_LCTL", + "USER07", "KC_SPC", "KC_F22", + "KC_TRNS", "KC_F4", "KC_F11", "KC_TRNS", @@ -118,6 +133,7 @@ "KC_TRNS", "KC_TRNS", "KC_TRNS", + "KC_TRNS", "KC_F12", "KC_TRNS", "KC_TRNS", @@ -125,6 +141,7 @@ "KC_TRNS", "KC_TRNS", "KC_TRNS", + "TO(0)", "KC_TRNS", "KC_TRNS", "KC_TRNS", @@ -132,6 +149,8 @@ "KC_TRNS", "KC_TRNS", "KC_TRNS", + "KC_3", + "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", @@ -141,11 +160,12 @@ "KC_TRNS", "KC_RALT", "KC_TRNS", - "TO(0)", + "TO(1)", "KC_RALT", "MO(4)", - "KC_LCTL", - "MO(2)" + "KC_ENT", + "MO(2)", + "KC_TRNS" ], [ "KC_GRV", @@ -155,6 +175,7 @@ "KC_4", "KC_5", "KC_BSLS", + "KC_TRNS", "KC_ESC", "KC_Q", "KC_W", @@ -162,6 +183,7 @@ "KC_R", "KC_T", "KC_BSPC", + "KC_MINS", "KC_TAB", "KC_A", "KC_S", @@ -169,6 +191,7 @@ "KC_F", "KC_G", "KC_LBRC", + "KC_P", "KC_LSFT", "KC_Z", "KC_X", @@ -176,13 +199,15 @@ "KC_V", "KC_B", "KC_TRNS", - "KC_LEFT", + "KC_TRNS", + "KC_UP", "KC_DOWN", "KC_LGUI", "KC_LALT", "KC_LCTL", "KC_SPC", "TT(2)", + "KC_TRNS", "KC_MINS", "KC_0", "KC_9", @@ -190,6 +215,7 @@ "KC_7", "KC_6", "KC_DEL", + "KC_RCTL", "KC_BSPC", "KC_P", "KC_O", @@ -197,6 +223,7 @@ "KC_U", "KC_Y", "KC_BSLS", + "KC_F5", "KC_QUOT", "KC_SCLN", "KC_L", @@ -204,6 +231,7 @@ "KC_J", "KC_H", "KC_RBRC", + "KC_TRNS", "KC_RSFT", "KC_SLSH", "KC_DOT", @@ -211,13 +239,15 @@ "KC_M", "KC_N", "KC_TRNS", - "KC_DOWN", - "KC_UP", + "KC_TRNS", + "KC_RGHT", + "KC_LEFT", "TO(1)", "KC_RALT", "KC_RCTL", "KC_ENT", - "TT(3)" + "TT(3)", + "KC_TRNS" ], [ "KC_GRV", @@ -226,21 +256,24 @@ "KC_F3", "KC_F4", "KC_F5", - "KC_TRNS", + "KC_F14", + "KC_F9", "KC_ESC", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", - "KC_TRNS", + "KC_F13", + "KC_8", "KC_TRNS", "KC_EXLM", "KC_AT", "KC_HASH", "KC_DLR", "KC_PERC", - "KC_TRNS", + "KC_ASTR", + "KC_AMPR", "KC_TRNS", "KC_EQL", "KC_MINS", @@ -248,6 +281,7 @@ "KC_LCBR", "KC_RCBR", "KC_TRNS", + "C(S(KC_TAB))", "KC_TRNS", "KC_TRNS", "KC_TRNS", @@ -255,12 +289,14 @@ "KC_TRNS", "KC_TRNS", "KC_TRNS", + "C(KC_TAB)", "KC_F11", "KC_F10", "KC_F9", "KC_F8", "KC_F7", "KC_F6", + "USER02", "KC_TRNS", "KC_F12", "KC_0", @@ -268,43 +304,49 @@ "KC_8", "KC_7", "KC_6", + "USER03", "KC_TRNS", - "KC_PIPE", + "KC_UNDS", "KC_RPRN", "KC_LPRN", "KC_ASTR", "KC_AMPR", "KC_CIRC", "KC_TRNS", + "C(KC_X)", "KC_TRNS", "KC_BSLS", - "KC_COLN", + "KC_SCLN", "KC_DOT", "KC_RBRC", "KC_LBRC", "KC_TRNS", + "C(KC_MINS)", + "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", - "KC_BSPC" + "C(KC_PPLS)" ], [ "KC_TRNS", - "C(KC_MINS)", - "C(KC_PPLS)", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", + "C(KC_PPLS)", + "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", - "C(KC_U)", + "KC_TRNS", + "C(KC_UP)", "C(KC_DOWN)", + "C(KC_MINS)", "KC_TRNS", "KC_TRNS", "KC_TRNS", @@ -312,6 +354,7 @@ "KC_TRNS", "C(KC_LEFT)", "C(KC_RGHT)", + "KC_PSCR", "KC_TRNS", "KC_TRNS", "C(KC_Z)", @@ -331,25 +374,33 @@ "KC_TRNS", "KC_TRNS", "KC_TRNS", - "KC_F14", - "KC_F13", "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_CAPS", + "KC_NO", "KC_DEL", "KC_INS", + "KC_TRNS", "KC_END", "KC_UP", "KC_HOME", + "KC_NLCK", + "KC_NO", + "KC_BSPC", "KC_TRNS", "KC_TRNS", - "KC_BSPC", - "KC_NLCK", "KC_RGHT", "KC_DOWN", "KC_LEFT", + "KC_SLCK", + "KC_NO", + "KC_TRNS", + "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", - "KC_CAPS", "KC_TRNS", "KC_TRNS", "KC_TRNS", @@ -357,7 +408,6 @@ "KC_TRNS", "KC_TRNS", "KC_TRNS", - "KC_SLCK", "KC_TRNS", "KC_WWW_REFRESH", "KC_TRNS", From c05afb42709f9733a1a0c356a2fdfd199addb69e Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Fri, 28 Jan 2022 00:50:46 -0500 Subject: [PATCH 127/155] Added readme and updated VIA layout. --- .../zodiark/keymaps/solartempest/readme.md | 89 +++++++++++++++++++ .../solartempest/zodiark VIA layout.json | 2 +- 2 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 keyboards/aleblazer/zodiark/keymaps/solartempest/readme.md diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/readme.md b/keyboards/aleblazer/zodiark/keymaps/solartempest/readme.md new file mode 100644 index 000000000000..abd0e91ca5c6 --- /dev/null +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/readme.md @@ -0,0 +1,89 @@ +### --- Note: When flashing this firmware, be sure to load the VIA keymap and layout files otherwise your keys won't work! Please refer to the VIA section below. --- + +# Zodiark Keyboard + +![Zodiark](https://i.imgur.com/B7bDYeE.jpg) + +Zodiark is a 68-key column-staggered split keyboard with per key RGB, rotary encoders, and 2x I2C headers per side. Created by Aleblazer. + +For details about the keyboard design, refer to Josef's blog: [Sofle Keyboard - a split keyboard based on Lily58 and Crkbd](https://www.splitlogic.xyz) + +Build guide is available here: [Zodiark build log/guide](https://www.splitlogic.xyz/buildguides/zodiark-build-guide) + +* Keyboard Maintainer: [Solartempest] +* Hardware Supported: Zodiark, ProMicro / Elite-C, 1.3" 128x64 SSD1306 OLEDs, Pimoroni Trackball, Pimoroni Haptic Buzz! +* Hardware Availability: [Split Logic Group Buy - Discord Link](https://discord.gg/BCSbXwskVt) + +# Custom Features: +### OLED Features: +- OLED displays current layer, lock key status, WPM, custom pixel art, and custom name. +- OLED shuts off on idle and when computer is sleeping. + +### Trackball Features: +- Supports Pimoroni Trackball installed on master side. +- Default action is scrolling. Hold Raise layer for mouse mode. +- Mouse mode and precision mode are toggleable with trackball LED indication. +- Trackball LED shuts off when computer is sleeping (currently bugged). +- Clicking and dragging is enabled using mouse keys on keymap. + +### RGB Features: +- Adds custom layer lighting with custom gradients for each layer. +- Adds white caps lock, scroll lock, and num lock key indicators using the top row LEDs. + +### Rotary Encoder and VIA Features: +- Fully emappable left encoder controls volume up/down/mute. Right encoder left/right arrow keys. +- Allows for live remapping of per-layer rotary encoder functions in VIA. +- VIA support included by default. +- Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders. +- Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders. + +### Haptic Feedback Features: +- Supports Pimoroni Haptic Bzzz installed on master side. +- Different vibrations when layers are activated. +- Provides tactile feedback when trackball is clicked or mouse keys are used. +- Tactile feedback for specific keys on gaming layer. + +### Tap and Other Features: +- Push left-shift + backspace to delete whole words. Right-shift + backspace to delete whole words in the opposite direction. +- Double tap layers to stay on a layer instead of momentary push. + +### Acknowledgements +- Thanks Drashna for the OLED timeout and extensible rotary encoder code. +- Thanks Dasky for helping me resolve prior trackball code issues. +- Thanks to Hellsingcoder for creating Luna and Jackasaur for optimizing the code for less space. This was the base code I used for my pixel art. + +## Using with VIA (Important! Please Read.) + +- After flashing, in VIA make sure to Import Keymap, which is "zodiark VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will auto-recognize the default keyboard but that does not match this firmware because of the necessary customization. +- Go to Save+Load to Load Saved Layout. You can import my own layout "zodiark VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. +- It is a good idea to Save Current Layout after you decide on your mapping. + + +# Compiling + +Compile with the command below: + +```sh +# for Elite C with Left Side Master builds +qmk compile -kb aleblazer/zodiark -km solartempest +``` + +## Flashing + +Flash using the correct command below or use QMK Toolbox. Specifying side during compile is unnecessary as Master Left is defined by default: + +```sh +# for pro micro-based builds +qmk flash -kb aleblazer/zodiark -km solartempest + +# for Elite C or dfu bootloader builds +qmk flash -kb aleblazer/zodiark -km solartempest +``` + +These commands can be mixed if, for example, you have an Elite C on the left and a pro micro on the right. +Press reset button on he keyboard when asked. + +Disconnect the first half, connect the second one and repeat the process. + + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json index 363ef12f6230..a84c34ef429f 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json @@ -160,7 +160,7 @@ "KC_TRNS", "KC_RALT", "KC_TRNS", - "TO(1)", + "TO(0)", "KC_RALT", "MO(4)", "KC_ENT", From bf5d9dee522ce2bf8b85621a9f6962e722f5d02b Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Fri, 28 Jan 2022 01:01:11 -0500 Subject: [PATCH 128/155] Update readme --- keyboards/aleblazer/zodiark/keymaps/solartempest/readme.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/readme.md b/keyboards/aleblazer/zodiark/keymaps/solartempest/readme.md index abd0e91ca5c6..0aab60f510bd 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/readme.md +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/readme.md @@ -6,8 +6,6 @@ Zodiark is a 68-key column-staggered split keyboard with per key RGB, rotary encoders, and 2x I2C headers per side. Created by Aleblazer. -For details about the keyboard design, refer to Josef's blog: [Sofle Keyboard - a split keyboard based on Lily58 and Crkbd](https://www.splitlogic.xyz) - Build guide is available here: [Zodiark build log/guide](https://www.splitlogic.xyz/buildguides/zodiark-build-guide) * Keyboard Maintainer: [Solartempest] From 3e62b49e95a48b0428606a2be591243ae6c55074 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Fri, 28 Jan 2022 01:06:58 -0500 Subject: [PATCH 129/155] Update readme --- keyboards/aleblazer/zodiark/keymaps/solartempest/config.h | 1 + keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c | 1 + keyboards/aleblazer/zodiark/keymaps/solartempest/readme.md | 1 + 3 files changed, 3 insertions(+) diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h index 1e78d55dd000..dd424a9cd91e 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h @@ -1,5 +1,6 @@ /* Copyright 2021 Spencer Deven +Copyright 2021 solartempest 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 diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c index a5e43dcae8a1..9c05c6e85122 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c @@ -1,5 +1,6 @@ /* Copyright 2021 Spencer Deven +Copyright 2021 solartempest 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 3 of the License, or diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/readme.md b/keyboards/aleblazer/zodiark/keymaps/solartempest/readme.md index 0aab60f510bd..6678f496448b 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/readme.md +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/readme.md @@ -46,6 +46,7 @@ Build guide is available here: [Zodiark build log/guide](https://www.splitlogic. - Double tap layers to stay on a layer instead of momentary push. ### Acknowledgements +- Thanks Aleblazer for creating this great keyboard! Also thanks for sharing the VIA json which made addition of the rotary encoders in VIA much faster. - Thanks Drashna for the OLED timeout and extensible rotary encoder code. - Thanks Dasky for helping me resolve prior trackball code issues. - Thanks to Hellsingcoder for creating Luna and Jackasaur for optimizing the code for less space. This was the base code I used for my pixel art. From 83a19dc80abe251cd90756541dc2f20e0232d9dd Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Fri, 28 Jan 2022 11:21:41 -0500 Subject: [PATCH 130/155] Changed product ID as VIA has issue loading layouts with the original one --- keyboards/aleblazer/zodiark/config.h | 2 +- .../aleblazer_zodiark_solartempest.hex | 2 +- .../zodiark/keymaps/solartempest/config.h | 3 + .../solartempest/zodiark VIA keymap.json | 2 +- .../solartempest/zodiark VIA layout TEST.json | 417 ++++++++++++++++++ .../solartempest/zodiark VIA layout.json | 6 +- 6 files changed, 426 insertions(+), 6 deletions(-) create mode 100644 keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout TEST.json diff --git a/keyboards/aleblazer/zodiark/config.h b/keyboards/aleblazer/zodiark/config.h index 84795f024b67..8bcf2fa53607 100644 --- a/keyboards/aleblazer/zodiark/config.h +++ b/keyboards/aleblazer/zodiark/config.h @@ -20,7 +20,7 @@ along with this program. If not, see . /* USB Device descriptor parameter */ #define VENDOR_ID 0xF901 -#define PRODUCT_ID 0xF902 +//#define PRODUCT_ID 0xF902 #define DEVICE_VER 0x0001 #define MANUFACTURER Aleblazer #define PRODUCT Zodiark diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex b/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex index cae6fe51aab8..eff92d92ad0b 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex @@ -190,7 +190,7 @@ :100BD000010001222200070582032000010705030E :100BE0000320000109040200010300000009211193 :100BF000010001227B000705840320000A12010086 -:100C0000020000000801F902F901000102000110D0 +:100C0000020000000801F902FF01000102000110CA :100C1000035A006F0064006900610072006B0000FD :100C200000140341006C00650062006C0061007AF2 :100C300000650072000000040309040011241FBEB7 diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h index dd424a9cd91e..2cc9de5b2b6c 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h @@ -19,6 +19,9 @@ along with this program. If not, see . #define MASTER_LEFT +#undef PRODUCT_ID +#define PRODUCT_ID 0xFF02 //Original was 0xF902. If the same ID is used, VIA will fail to reload saved layouts. + #undef MATRIX_ROWS #undef MATRIX_COLS #undef MATRIX_ROW_PINS diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA keymap.json b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA keymap.json index 87a57dfe59bf..aacda97a9951 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA keymap.json +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA keymap.json @@ -1,7 +1,7 @@ { "name":"Zodiark", "vendorId":"0xF901", - "productId":"0xF902", + "productId":"0xFF02", "lighting": "qmk_rgblight", "matrix": { "rows": 10, "cols": 8 }, "customKeycodes": [ diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout TEST.json b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout TEST.json new file mode 100644 index 000000000000..933628d0fdd2 --- /dev/null +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout TEST.json @@ -0,0 +1,417 @@ +{ + "name": "Zodiark", + "vendorProductId": 4177657602, + "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + "layers": [ + [ + "KC_GRV", + "KC_1", + "KC_2", + "KC_3", + "KC_4", + "KC_5", + "KC_MS_BTN2", + "KC_ESC", + "KC_ESC", + "KC_Q", + "KC_W", + "KC_E", + "KC_R", + "KC_T", + "KC_MS_BTN1", + "KC_A", + "KC_TAB", + "KC_A", + "KC_S", + "KC_D", + "KC_F", + "KC_G", + "USER05", + "KC_VOLD", + "KC_LSFT", + "KC_Z", + "KC_X", + "KC_C", + "KC_V", + "KC_B", + "KC_MUTE", + "KC_VOLD", + "KC_UP", + "KC_DOWN", + "KC_LGUI", + "KC_LALT", + "KC_LCTL", + "KC_ENT", + "TT(3)", + "KC_VOLU", + "KC_MINS", + "KC_0", + "KC_9", + "KC_8", + "KC_7", + "KC_6", + "USER02", + "KC_Y", + "USER04", + "KC_P", + "KC_O", + "KC_I", + "KC_U", + "KC_Y", + "USER03", + "KC_RBRC", + "KC_QUOT", + "KC_SCLN", + "KC_L", + "KC_K", + "KC_J", + "KC_H", + "USER06", + "KC_MSTP", + "KC_RSFT", + "KC_SLSH", + "KC_DOT", + "KC_COMM", + "KC_M", + "KC_N", + "C(KC_W)", + "KC_LEFT", + "KC_RGHT", + "KC_LEFT", + "TO(1)", + "KC_RALT", + "KC_RCTL", + "KC_SPC", + "TT(4)", + "KC_RGHT" + ], + [ + "KC_PSCR", + "KC_4", + "KC_1", + "KC_2", + "KC_3", + "KC_G", + "KC_T", + "KC_S", + "KC_F12", + "KC_ESC", + "KC_Q", + "KC_W", + "KC_E", + "KC_R", + "KC_G", + "KC_C", + "KC_TAB", + "KC_TAB", + "KC_A", + "KC_S", + "KC_D", + "KC_F", + "KC_B", + "KC_SPC", + "KC_LSFT", + "KC_LSFT", + "KC_Z", + "KC_X", + "KC_C", + "KC_V", + "KC_TRNS", + "KC_TRNS", + "KC_LCTL", + "KC_LCTL", + "KC_TRNS", + "KC_LALT", + "USER07", + "KC_SPC", + "KC_F22", + "KC_TRNS", + "KC_F4", + "KC_F11", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_F12", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "TO(0)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_3", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_RALT", + "KC_TRNS", + "TO(0)", + "KC_RALT", + "MO(4)", + "KC_ENT", + "MO(2)", + "KC_TRNS" + ], + [ + "KC_GRV", + "KC_1", + "KC_2", + "KC_3", + "KC_4", + "KC_5", + "KC_MS_BTN2", + "KC_TRNS", + "KC_ESC", + "KC_Q", + "KC_W", + "KC_E", + "KC_R", + "KC_T", + "KC_MS_BTN1", + "KC_MINS", + "KC_TAB", + "KC_A", + "KC_S", + "KC_D", + "KC_F", + "KC_G", + "USER05", + "KC_P", + "KC_LSFT", + "KC_Z", + "KC_X", + "KC_C", + "KC_V", + "KC_B", + "KC_TRNS", + "KC_VOLD", + "KC_UP", + "KC_DOWN", + "KC_LGUI", + "KC_LALT", + "KC_LCTL", + "KC_SPC", + "TT(2)", + "KC_VOLU", + "KC_MINS", + "KC_0", + "KC_9", + "KC_8", + "KC_7", + "KC_6", + "USER02", + "KC_RCTL", + "KC_BSPC", + "KC_P", + "KC_O", + "KC_I", + "KC_U", + "KC_Y", + "USER03", + "KC_F5", + "KC_QUOT", + "KC_SCLN", + "KC_L", + "KC_K", + "KC_J", + "KC_H", + "USER06", + "KC_TRNS", + "KC_RSFT", + "KC_SLSH", + "KC_DOT", + "KC_COMM", + "KC_M", + "KC_N", + "KC_TRNS", + "KC_LEFT", + "KC_RGHT", + "KC_LEFT", + "TO(1)", + "KC_RALT", + "KC_RCTL", + "KC_ENT", + "TT(3)", + "KC_RGHT" + ], + [ + "KC_GRV", + "KC_F1", + "KC_F2", + "KC_F3", + "KC_F4", + "KC_F5", + "KC_F14", + "KC_F9", + "KC_ESC", + "KC_1", + "KC_2", + "KC_3", + "KC_4", + "KC_5", + "KC_F13", + "KC_8", + "KC_TRNS", + "KC_EXLM", + "KC_AT", + "KC_HASH", + "KC_DLR", + "KC_PERC", + "KC_TRNS", + "KC_AMPR", + "KC_TRNS", + "KC_EQL", + "KC_MINS", + "KC_PLUS", + "KC_LCBR", + "KC_RCBR", + "KC_TRNS", + "C(S(KC_TAB))", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "C(KC_TAB)", + "KC_F11", + "KC_F10", + "KC_F9", + "KC_F8", + "KC_F7", + "KC_F6", + "KC_TRNS", + "KC_TRNS", + "KC_F12", + "KC_0", + "KC_9", + "KC_8", + "KC_7", + "KC_6", + "KC_TRNS", + "KC_TRNS", + "KC_PIPE", + "KC_RPRN", + "KC_LPRN", + "KC_ASTR", + "KC_AMPR", + "KC_CIRC", + "KC_TRNS", + "C(KC_X)", + "KC_TRNS", + "KC_BSLS", + "KC_COLN", + "KC_GT", + "KC_RBRC", + "KC_LBRC", + "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", + "C(KC_UP)", + "C(KC_DOWN)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "C(KC_LEFT)", + "C(KC_NO)", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "C(KC_Z)", + "C(KC_X)", + "C(KC_C)", + "C(KC_V)", + "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_CAPS", + "KC_NO", + "KC_DEL", + "KC_INS", + "KC_TRNS", + "KC_END", + "KC_UP", + "KC_HOME", + "KC_NLCK", + "KC_NO", + "KC_BSPC", + "KC_TRNS", + "KC_TRNS", + "KC_RGHT", + "KC_DOWN", + "KC_LEFT", + "KC_SLCK", + "KC_NO", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_PGDN", + "KC_PGUP", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_TRNS", + "KC_WWW_REFRESH", + "KC_TRNS", + "KC_TRNS" + ] + ] +} \ No newline at end of file diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json index a84c34ef429f..d9f5fd84ceb5 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json @@ -1,6 +1,6 @@ { "name": "Zodiark", - "vendorProductId": 4177656066, + "vendorProductId": 4177657602, "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], "layers": [ [ @@ -400,8 +400,8 @@ "KC_TRNS", "KC_TRNS", "KC_TRNS", - "KC_TRNS", - "KC_TRNS", + "KC_PGDN", + "KC_PGUP", "KC_TRNS", "KC_TRNS", "KC_TRNS", From 17c4cc8f24a88c7afb05f7cb9945a07c9463080b Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Wed, 9 Feb 2022 21:53:56 -0500 Subject: [PATCH 131/155] Fix skate macro. Update VIA game layout. --- .../aleblazer_zodiark_solartempest.hex | 2421 +++++++++-------- .../zodiark/keymaps/solartempest/config.h | 2 + .../zodiark/keymaps/solartempest/encoder.c | 2 +- .../zodiark/keymaps/solartempest/keymap.c | 39 +- .../solartempest/zodiark VIA layout TEST.json | 417 --- .../solartempest/zodiark VIA layout.json | 18 +- 6 files changed, 1269 insertions(+), 1630 deletions(-) delete mode 100644 keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout TEST.json diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex b/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex index eff92d92ad0b..400e04fe82d7 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex @@ -1,9 +1,9 @@ :100000000C941E060C9465060C9465060C9465060B -:100010000C9498300C9465060C9465060C94650657 -:100020000C9465060C9465060C9469220C942522A8 -:100030000C9444270C9465060C9465060C94650694 +:100010000C942D310C9465060C9465060C946506C1 +:100020000C9465060C9465060C949F190C945B194E +:100030000C94DB270C9465060C9465060C946506FD :100040000C9465060C9465060C9465060C94650684 -:100050000C9465060C9442230C9465060C9465067A +:100050000C9465060C94781A0C9465060C9465064D :100060000C9465060C9465060C9465060C94650664 :100070000C9465060C9465060C9465060C94650654 :100080000C9465060C9465060C9465060C94650644 @@ -195,30 +195,30 @@ :100C200000140341006C00650062006C0061007AF2 :100C300000650072000000040309040011241FBEB7 :100C4000CFEFDAE0DEBFCDBF04B603FE27C0809150 -:100C50007C0890917D08A0917E08B0917F08873034 -:100C6000904BA740B04BD1F410927C0810927D08B5 -:100C700010927E0810927F0814BE84B7877F84BFCD +:100C50007F0890918008A0918108B0918208873028 +:100C6000904BA740B04BD1F410927F0810928008AF +:100C7000109281081092820814BE84B7877F84BFC7 :100C80000FB6F894A8958091600088618093600009 :100C9000109260000FBEE0E0F8E3099512E0A0E0DA -:100CA000B1E0E8E4F8E602C005900D92AC33B1077C -:100CB000D9F728E0ACE3B2E001C01D92AC37B2072F -:100CC000E1F70E946B270C94EB330C940000CF9358 -:100CD000DF9340917A0850917B084A5754409A011B +:100CA000B1E0E2E7F9E602C005900D92AC33B1077E +:100CB000D9F728E0ACE3B2E001C01D92AF37B2072C +:100CC000E1F70E9402280C9480340C940000CF932A +:100CD000DF9340917D0850917E084D5754409A0112 :100CE00020583E4F21303440C0F020E034E0241B37 -:100CF000350B6091780470917904FC01CA01240FCE -:100D0000351FC1E0D0E08217930750F0709379044B -:100D100060937804DF91CF91089520E831E0E9CF26 -:100D20004491DC01A658BB4F5C91451781F04C9370 +:100CF000350B60917B0470917C04FC01CA01240FC8 +:100D0000351FC1E0D0E08217930750F070937C0448 +:100D100060937B04DF91CF91089520E831E0E9CF23 +:100D20004491DC01A358BB4F5C91451781F04C9373 :100D3000AC01A6E056954795AA95E1F7DE0102C001 :100D4000AA0FBB1F4A95E2F7AD016A2B752B0196DE :100D50003196D9CFE8EDF0E080818E7F80831092CC :100D6000E2001092DA001092E100A0EEB0E08C9167 :100D700081608C9380818F77808319BCA7EDB0E070 -:100D80008C918E7F8C9380818F7E808310928F03D5 +:100D80008C918E7F8C9380818F7E808310929203D2 :100D900008952091E4003091E50095E6A9012091A5 :100DA000EC00822F817020FF06C08091E80080FF58 :100DB00006C080E008952091E80022FD1AC08091CD -:100DC0009C03882389F0853089F08091EB0085FDB4 +:100DC0009F03882389F0853089F08091EB0085FDB1 :100DD0000FC02091E4003091E50042175307F9F26B :100DE0009150E1F684E0089582E0089583E008954B :100DF00081E00895EF92FF920F931F93CF937C01B0 @@ -226,10 +226,10 @@ :100E100085FD0BC08091E8008E778093E8000E94EA :100E2000C906882399F3C82F08C0F70181917F0173 :100E30008093F1000150110949F78C2FCF911F9138 -:100E40000F91FF90EF90089580919E0387FF13C04C +:100E40000F91FF90EF9008958091A10387FF13C049 :100E50008091E80082FF06C08091E8008B77809344 -:100E6000E80004C080919C038111F2CF0895809125 -:100E70009C038823D9F38091E80080FFF8CF80910C +:100E6000E80004C080919F038111F2CF0895809122 +:100E70009F038823D9F38091E80080FFF8CF809109 :100E8000E8008E77ECCF982F9093E900242F762FEF :100E900050E0891731F07091EC002091ED005091F5 :100EA000F00021FD07C09F5F973071F78093E90044 @@ -239,51 +239,51 @@ :100EE000EE0027FDE0CF80E00895CF92DF92EF92F1 :100EF000FF920F931F93CF93DF93C8EDD0E08881CB :100F00008F7E8883E7EDF0E080818160808384E0DC -:100F100082BF81E080938F0388818E7F888302EE79 +:100F100082BF81E08093920388818E7F888302EE76 :100F200010E0F80110821092DA0081EEC82ED12C68 :100F3000F601108288818F77888388818068888312 -:100F400088818F7D888319BC10929C0310929D0329 -:100F500010929B0310929A0390EEE92EF12CF70168 +:100F400088818F7D888319BC10929F031092A00323 +:100F500010929E0310929D0390EEE92EF12CF70162 :100F600080818B7F808388818160888342E060E01C :100F700080E00E944307F60180818E7F8083F80124 :100F8000808181608083808188608083F701808197 :100F90008E7F8083888180618883DF91CF911F91CC :100FA0000F91FF90EF90DF90CF900895FC0180911A -:100FB000A4039091A50386179707A0F0611571050A +:100FB000A7039091A80386179707A0F06115710504 :100FC00029F49091E8009E779093E80090E06115F5 :100FD000710551F4911108C08091E80082FF34C07E -:100FE00080E00895BC01F2CF80919C038823C1F179 +:100FE00080E00895BC01F2CF80919F038823C1F176 :100FF0008530C1F18091E80083FD30C08091E80028 :1010000082FDEACF8091E80080FFE1CF8091F3007C :101010002091F200382F6115710519F02830310543 :1010200058F091E02830310509F090E02091E80077 :101030002E772093E800CBCF81918093F10061500F -:1010400071092F5F3F4FE7CF80919C03882341F0C8 +:1010400071092F5F3F4FE7CF80919F03882341F0C5 :10105000853041F08091E80083FFBECF81E00895A4 -:1010600082E0089583E008950895809191030895A2 -:101070002FB7F894609188037091890380918A0357 -:1010800090918B032FBF08952091850330918603A3 -:101090002817390771F09093860380938503E091B8 -:1010A0008303F0918403309721F00084F185E02DD3 -:1010B00009940895209181033091820328173907FC -:1010C00071F09093820380938103E0918303F09108 -:1010D0008403309721F00680F781E02D099408956C -:1010E0002091740336E0839FC0011124629F800D1C +:1010600082E0089583E0089508958091940308959F +:101070002FB7F89460918B0370918C0380918D034E +:1010800090918E032FBF089520918803309189039A +:101090002817390771F09093890380938803E091B2 +:1010A0008603F0918703309721F00084F185E02DCD +:1010B00009940895209184033091850328173907F6 +:1010C00071F09093850380938403E0918603F091FF +:1010D0008703309721F00680F781E02D0994089569 +:1010E0002091770336E0839FC0011124629F800D19 :1010F000911D1124811524E0920714F090E080E006 -:1011000086589B4F90937B0880937A080895FC0142 +:1011000083589B4F90937E0880937D080895FC013F :10111000680F791F8FEF91E32191822728E030E05B :1011200087FF09C0880F892721503109C9F7E617C1 :10113000F70791F70895880FF7CFFA01811101C0E1 -:10114000FB01099480917304982F9E7F61F4817054 -:10115000826080937304809176048B3A18F08AEA57 -:101160008093760408958831B0F381708661F1CF61 +:10114000FB01099480917604982F9E7F61F4817051 +:10115000826080937604809179048B3A18F08AEA51 +:101160008093790408958831B0F381708661F1CF5E :10117000AF92BF92DF92EF92FF920F931F93CF93A4 :10118000DF93082F162FE901E42FF0E0E75AFA4F1A :10119000611110C0E4915E2F4E2F4983E8835A837A :1011A000DF91CF911F910F91FF90EF90DF90BF9053 :1011B000AF900895E62EF12C4491D42EE42FF0E068 :1011C00026E0829FC00111242FEF30E0B9010E9478 -:1011D0001232802F90E0880F991F55E5569FD0015D +:1011D000A732802F90E0880F991F55E5569FD001C8 :1011E000579FB00D11248A1B9B0B982F990F890FC5 :1011F0005901AE18BF08AE9ED001AF9EB00DBE9E85 :10120000B00D11245B2F189F80011124012F11278D @@ -299,9 +299,9 @@ :1012A00078940895F894E82FE295EF70F0E031A17A :1012B000282F2F7081E090E001C0880F2A95EAF76F :1012C000982F9095932391A392A1892B82A30C949C -:1012D00050099091E60292FF06C0282F287128300D +:1012D00050099091E90292FF06C0282F287128300A :1012E000F9F4877F846093FF06C0282F2871283186 -:1012F000F1F4877E84612091E70220FF06C0382F39 +:1012F000F1F4877E84612091EA0220FF06C0382F36 :1013000038713830D9F4877F816021FF06C0282FDB :1013100028712831D1F4877E816194FD877E0895FC :10132000282F24712430F9F68B7F8860DCCF282F9A @@ -314,21 +314,21 @@ :10139000F2C0CF3BD10508F089C0C83AD10508F0AA :1013A000DFC0C53AD10508F0D3C0C430D105F8F488 :1013B000C130D105E1F040C08533910509F45AC030 -:1013C000C997E9F68091E602837089F0C0EED0E01B +:1013C000C997E9F68091E902837089F0C0EED0E018 :1013D0000EC0833E910599F170F4803E910501F1B4 -:1013E000823E910561F68091E60282FD21C0CE0128 +:1013E000823E910561F68091E90282FD21C0CE0125 :1013F000DF91CF910895863E910561F1873E910579 -:1014000071F1843E910509F0BACF8091E70281FF26 -:10141000EECF8091E602C7EED0E084FD0DC0E7CFAD -:101420008091E60280FDF7C09091E70290FFDFCF48 +:1014000071F1843E910509F0BACF8091EA0281FF23 +:10141000EECF8091E902C7EED0E084FD0DC0E7CFAA +:101420008091E90280FDF7C09091EA0290FFDFCF42 :10143000C3EED0E084FFDBCFD0E0C0E0D8CF809116 -:10144000E60282FDEBC09091E70290FDBFCF84FFE2 -:10145000CECFF2CF8091E60283FDDDCFC8CF809161 -:10146000E60283FDDEC09091E70291FFF0CFC4EE6B -:10147000D0E0BDCF8091E60285FFB9CFC9E2D0E0D0 -:10148000B6CF8091E60285FFB2CFC5E3D0E0AFCF03 -:101490008091E60286FFABCFCAE2D0E0A8CF809170 -:1014A000E60286FFA4CFC1E3D0E0A1CFC11540E2A0 +:10144000E90282FDEBC09091EA0290FDBFCF84FFDC +:10145000CECFF2CF8091E90283FDDDCFC8CF80915E +:10146000E90283FDDEC09091EA0291FFF0CFC4EE65 +:10147000D0E0BDCF8091E90285FFB9CFC9E2D0E0CD +:10148000B6CF8091E90285FFB2CFC5E3D0E0AFCF00 +:101490008091E90286FFABCFCAE2D0E0A8CF80916D +:1014A000E90286FFA4CFC1E3D0E0A1CFC11540E29D :1014B000D40760F4C11581E0D80708F098CFCE01B9 :1014C000815E9109079708F492CFB6CFC11590E4D9 :1014D000D90708F4B1CFDF70D06A89CFC11524E5F0 @@ -339,8 +339,8 @@ :10152000CC27C06FD06A63CFCE0190568115904210 :1015300008F082CF8D2F8F710E94690990E0982F5B :10154000882788279F719C012C2BE901D0624FCFFF -:10155000C55AD0E0CD54DE4FC881D0E0D06447CF2B -:10156000C85AD0E0CC0FDD1FCA54DE4F0990D88195 +:10155000C55AD0E0C454DE4FC881D0E0D06447CF34 +:10156000C85AD0E0CC0FDD1FC154DE4F0990D8819E :10157000C02DD4643CCFCE0164E0969587956A95E2 :10158000E1F783702C2F26952695237040E2249F47 :1015900090011124382B8C2F8370C1E0D0E002C061 @@ -352,32 +352,32 @@ :1015F0001124C22BD32BDA68FACE8C2F8F700E9465 :10160000690934E0D695C7953A95E1F7CF709C2FDC :10161000EC01D069ECCEC9E3D0E0E9CEC2EED0E077 -:10162000E6CEC6EED0E0E3CE0C9438088091A4025A -:101630009091A302892B9091A202892B80933E0264 -:10164000E0918303F0918403309731F00280F381BD -:10165000E02D8EE392E0099408958091A10290918B -:101660007002981301C008958F5F8770FACF990FA9 +:10162000E6CEC6EED0E0E3CE0C9438088091A70257 +:101630009091A602892B9091A502892B80933E025E +:10164000E0918603F0918703309731F00280F381B7 +:10165000E02D8EE392E0099408958091A402909188 +:101660007302981301C008958F5F8770FACF990FA6 :10167000990F990F890F982F977086958695869563 -:1016800023E0829FF0011124E45BFD4F50E040E035 +:1016800023E0829FF0011124E15BFD4F50E040E038 :1016900080E0219130E0092E02C0369527950A940A :1016A000E2F721703327042E01C0220F0A94EAF7D3 :1016B000822B4F5F5F4F4330510559F70895990FC3 :1016C000990F990F890F982F977041E001C0440F2F :1016D0009A95EAF786958695869593E0899FF0011D -:1016E0001124E45BFD4F30E020E070E05191DF0118 +:1016E0001124E15BFD4F30E020E070E05191DF011B :1016F0001197CB01022E02C0969587950A94E2F7C6 :10170000817081958527842385278C932F5F3F4F98 :101710002330310559F7089590E080E00E945A087F -:1017200090E080E00E9444081092A3021092A2026E -:101730000C94160B8093A5020C948C0B882341F01B -:1017400080959091A40289238093A4020C94160B97 -:101750000895882339F09091A402982B9093A402C5 +:1017200090E080E00E9444081092A6021092A50268 +:101730000C94160B8093A8020C948C0B882341F018 +:1017400080959091A70289238093A7020C94160B91 +:101750000895882339F09091A702982B9093A702BF :101760000C94160B08958823B1F19CEF980F913AD1 :1017700070F4E0E4F2E09191891303C0DF01119766 :101780001C9242E0E634F407B1F70C94160B90E299 :10179000980F983088F4877021E030E0A90102C0EA -:1017A000440F551F8A95E2F7CA0180959091A402D3 -:1017B00089238093A402E9CF9BE5980F933020F40E +:1017A000440F551F8A95E2F7CA0180959091A702D0 +:1017B00089238093A702E9CF9BE5980F933020F40B :1017C00090E080E00C945A08885A873120F490E029 :1017D00080E00C94440808950F931F93CF93C82F73 :1017E000882309F469C08CEF8C0F813AB0F500E4CE @@ -389,40 +389,40 @@ :10184000F2E02191C21303C0DF0111971C928E17A1 :101850009F07B9F70E94160BD6CF80E28C0F883015 :1018600068F4C77021E030E001C0220FCA95EAF7A2 -:101870008091A402822B8093A402DCCFEBE5EC0FD5 -:10188000E33050F4F0E0ED54FE4F808190E0CF91D2 +:101870008091A702822B8093A702DCCFEBE5EC0FCF +:10188000E33050F4F0E0E454FE4F808190E0CF91DB :101890001F910F910C945A08C85AC73168F4EC2F65 -:1018A000F0E0EE0FFF1FEA54FE4F80819181CF914F +:1018A000F0E0EE0FFF1FE154FE4F80819181CF9158 :1018B0001F910F910C944408CF911F910F9108959F :1018C000982F92959F7011F0892F94E0282F2695DC :1018D000269511F09E5F822F869509F09F5F892FD4 :1018E0000895CF93DF93CDB7DEB762970FB6F89424 -:1018F000DEBF0FBECDBF96E0E2E6F3E0DE01179655 +:1018F000DEBF0FBECDBF96E0E5E6F3E0DE01179652 :1019000001900D929A95E1F796E0FE013796DE017F :101910001D9601900D929A95E1F798858823E9F03C :10192000962B9E8786E0FE013D96DE011196019082 -:101930000D928A95E1F786E0FE013196A2E6B3E0CA +:101930000D928A95E1F786E0FE013196A5E6B3E0C7 :1019400001900D928A95E1F762960FB6F894DEBF8A :101950000FBECDBFDF91CF91089560959623E1CF63 :10196000CF92DF92EF92FF920F931F93CF93DF936B -:101970006C017B0164E670E088E70E94582EEC0160 +:101970006C017B0164E670E088E70E94ED2EEC01CB :1019800097FD12C010E000E0F601E00FF11F849116 -:1019900064E670E00E94D22EEC01892B29F40F5FDF -:1019A0001F4F0E151F0581F70E94EC2FCE01DF910E +:1019900064E670E00E94672FEC01892B29F40F5F49 +:1019A0001F4F0E151F0581F70E948130CE01DF9178 :1019B000CF911F910F91FF90EF90DF90CF900895FE -:1019C00080917F0390918003911103C091E089275A +:1019C0008091820390918303911103C091E0892754 :1019D0000895882369F062E070E080EA9BE00E944D -:1019E000B00C892B19F080917F03089510927F032A -:1019F00080917F03EBCFCF93C0917F0380918003D1 +:1019E000B00C892B19F08091820308951092820324 +:1019F00080918203EBCFCF93C091820380918303C8 :101A00008823D1F00E9438086058774C8E4F9F4F42 -:101A100060937B0370937C0380937D0390937E039C +:101A100060937E0370937F03809380039093810390 :101A2000C11108C062E070E08EE99BE00E94B00C3A -:101A3000892B29F0C0917F038C2FCF91089581E0ED -:101A400080937F03F7CF80938C0370938E03609312 -:101A50008D0380919C038430F9F48093E9008FEF2B +:101A3000892B29F0C09182038C2FCF91089581E0EA +:101A400080938203F7CF80938F0370939103609309 +:101A5000900380919F038430F9F48093E9008FEF25 :101A60009091E800815095FD06C095ED9A95F1F7AB :101A700000008111F5CF8091E80085FF0DC050E096 -:101A800040E063E070E08CE893E00E94FA06809109 +:101A800040E063E070E08FE893E00E94FA06809106 :101A9000E8008E778093E8000895BC0184E00C9400 :101AA000230DBC0183E00C94230D9C0184E0809302 :101AB000E9009FEF8091E800915085FD06C085ED1B @@ -433,21 +433,21 @@ :101B000095FD06C095ED9A95F1F700008111F5CF8E :101B10008091E80085FF14C050E040E068E070E08C :101B2000CE010E94FA068091E8008E778093E8004B -:101B300088E0FE01A2E9B3E001900D928A95E1F7F9 -:101B4000DF91CF910895609161018091730480FFCE -:101B500020C08091600143E0849FC0011124895519 +:101B300088E0FE01A5E9B3E001900D928A95E1F7F6 +:101B4000DF91CF910895609162018091760480FFCA +:101B500020C08091610143E0849FC001112486551B :101B60009C4F259A25B12F7D35B130625FB7F8942F :101B7000FC01649FE00DF11D1124BF016817790776 :101B8000D1F45FBF8FE594E00197F1F700C000004A -:101B90000895809162019091630123E0829FF0019A -:101BA0001124E955FC4F8917A0F611821082128288 +:101B90000895809163019091640123E0829FF00198 +:101BA0001124E655FC4F8917A0F61182108212828B :101BB0008F5F3396F8CFFC014191CF01E8E035B952 :101BC000000000C047FF25B9440F000000C000C05E :101BD00000C025B900C0EA9591F7D0CF0F931F93AD :101BE000CF93DF9300D00F92CDB7DEB7182F062F1B -:101BF0008091730480FF22C09E012F5F3F4F4AEA0D +:101BF0008091760480FF22C09E012F5F3F4F4AEA0A :101C000064E68BE20E94B8081017C0F48B819981BA -:101C10002A8133E0139FF0011124E955FC4F218301 +:101C10002A8133E0139FF0011124E655FC4F218304 :101C2000908382831F5F33960113F9CF0E94A30D27 :101C30008FE99FE00197F1F700C000000F900F902F :101C40000F90DF91CF911F910F910895CF93DF9364 @@ -455,58 +455,58 @@ :101C6000EE0DD11108C062E080E00E94EE0D6CE044 :101C70008AE00E94EE0DC2FF0AC064E082E00E948A :101C8000EE0D6AE088E0DF91CF910C94EE0DDF91CC -:101C9000CF910895E3E7F4E080818E7F8083E1E7D0 +:101C9000CF910895E6E7F4E080818E7F8083E4E7CA :101CA000F3E08281816082832FEF80E792E0215010 :101CB00080409040E1F700C000000C94A30D9F927B :101CC000AF92BF92CF92DF92EF92FF920F931F934A -:101CD000CF93DF937C015B016A018091E10201E017 +:101CD000CF93DF937C015B016A018091E40201E014 :101CE00010E08A3010F40AE010E0C1E0D0E0F8948F :101CF000B501C701F6010995982E0E94500991106F :101D000004C021960C171D076CF4892DDF91CF912B :101D10001F910F91FF90EF90DF90CF90BF90AF9009 :101D20009F900895CC9F9001CD9F300D300D1124D0 :101D300090E080E045E34A95F1F7000001968217B4 -:101D40009307C1F7D4CF8091B202811110C0809166 +:101D40009307C1F7D4CF8091B502811110C0809163 :101D5000D80080618093D8008AE18A95F1F700C0AD -:101D60008091D90080FF0AC081E08093B20281E0B7 -:101D70009091B202913009F080E0089582E0809362 -:101D8000B2020E94AA0610929C03F1CF0E94A30EF9 -:101D9000882351F0E0918303F0918403309721F080 +:101D60008091D90080FF0AC081E08093B50281E0B4 +:101D70009091B502913009F080E0089582E080935F +:101D8000B5020E94AA0610929F03F1CF0E94A30EF3 +:101D9000882351F0E0918603F0918703309721F07A :101DA0000190F081E02D099480E008951F93CF9376 :101DB000DF93182FEB010E94EC0B8FE99FE0019756 :101DC000F1F700C000002197C1F7812FDF91CF917B :101DD0001F910C94B30B0F931F93CF93DF9300D0FD :101DE00000D0CDB7DEB789836A834B831C8204E6BB :101DF00010E024E030E0AE014F5F5F4F60E084E12F -:101E00000E94702F0F900F900F900F90DF91CF9145 -:101E10001F910F91089580915D01882329F041E27F -:101E200065EA89ED0C94EB0E8091470247EC6BE17B +:101E00000E9405300F900F900F900F90DF91CF91AF +:101E10001F910F91089580915E01882329F041E27E +:101E200065EA89ED0C94EB0E8091490247EC6BE179 :101E30008823C1F347E669E98BE2F4CFCF93DF93C0 -:101E4000C7E4D3E060E0CE010E9486322196C1153E +:101E4000C7E4D3E060E0CE010E941B332196C115A8 :101E500084E0D807B9F7DF91CF9108956F927F9210 :101E60008F929F92AF92BF92CF92DF92EF92FF92AA :101E70000F931F93CF93DF9382EAC82E8BE0D82E67 :101E800007ED10E0E801C05AD10936011CC0F50188 -:101E900085909490692DC7010E948632682DC701F4 -:101EA00001960E94863282E0A80EB11C82E0E80E04 +:101E900085909490692DC7010E941B33682DC7015E +:101EA00001960E941B3382E0A80EB11C82E0E80E6E :101EB000F11CCE15DF0559F780E1680E711C6096A4 :101EC0000C171D0731F07E0180E1E81AF10853017B :101ED000DECF00561F4F80EAC80ED11C073F83E0BB :101EE000180781F6DF91CF911F910F91FF90EF902E :101EF000DF90CF90BF90AF909F908F907F906F902A :101F00000895CF93C82F6FEF811162E283E290E0D2 -:101F10000E9486326FEFC11161E084E290E00E947E -:101F200086326FEFC11168E285E290E0CF910C94A8 -:101F3000863280E00E94810F60E086E290E00E949D -:101F400086320E942E0F0E941E0F81E00C94810F9A +:101F10000E941B336FEFC11162E084E290E00E94E7 +:101F20001B336FEFC11169E085E290E0CF910C9413 +:101F30001B3380E00E94810F60E086E290E00E9407 +:101F40001B330E942E0F0E941E0F81E00C94810F04 :101F50000F931F93CF93DF9320E1629FE001112441 :101F600050E0440F551FC40FD51F30EA839FC00DAA -:101F7000D11D1124CE0187960E947232082F10E0E5 -:101F8000102F0027CE0188960E9472329801282BCC +:101F7000D11D1124CE0187960E940733082F10E04F +:101F8000102F0027CE0188960E9407339801282B36 :101F9000C901DF91CF911F910F910895462F853090 :101FA00038F47A3028F4683018F4672F0C94A80FAE :101FB00090E080E00895CF92DF92FF920F931F93FD -:101FC000CF93DF936C010091A6038091A502082BAB +:101FC000CF93DF936C010091A9038091A802082BA5 :101FD000C7E0D0E010E0FC2EC8010C2E02C09595A1 :101FE00087950A94E2F780FD0CC02197A0F7F12CA9 :101FF0008F2DDF91CF911F910F91FF90DF90CF90A8 @@ -514,1177 +514,1196 @@ :1020100061F3EECFCF93DF93EC010E94DB0FBE01A3 :102020000E94CE0FDF91CF910C94AC09FC0180810E :1020300091810E940A10292F2F7092959F709250C3 -:102040009E3078F4E92FF0E0E351FC4C0C944632DA +:102040009E3078F4E92FF0E0EE57FB4C0C94DB3235 :10205000803F19F020F4883E20F481E00895843F09 :10206000E1F380E00895883EC0F3813FD1F7F5CFDA :10207000822F869586958695089583E290E00E944A -:102080007232823289F484E290E00E9472328130AE -:1020900059F485E290E00E94723291E0883209F0B2 +:102080000733823289F484E290E00E940733823081 +:1020900059F485E290E00E94073391E0893009F01D :1020A00090E0892F8170089580E0FCCFCF9384E089 -:1020B00090E00E947232C82F82E290E00E94723259 +:1020B00090E00E940733C82F82E290E00E9407332D :1020C000982F8C2FCF9108951F93CF93DF93CDB787 :1020D000DEB768970FB6F894DEBF0FBECDBF409154 -:1020E0006203509163036091640370916503809172 -:1020F0006603909167030E948123209362033093CB -:1021000063036093660370936703642F152F119523 -:10211000109364034093650386E0E2E6F3E0DE019A +:1020E0006503509166036091670370916803809166 +:1020F000690390916A030E94B71A20936503309395 +:1021000066036093690370936A03642F152F11951A +:10211000109367034093680386E0E5E6F3E0DE0191 :10212000179601900D928A95E1F786E0FE013796A9 :10213000DE01119601900D928A95E1F79B858C85C1 -:1021400020915D012223B1F0772761950CF4709501 -:10215000072E000C880B990B0E94F2322AE939E90C -:1021600049E95EE30E9456330E94BA32962F812FCE +:1021400020915E012223B1F0772761950CF4709500 +:10215000072E000C880B990B0E9487332DEC3CEC6A +:102160004CE45EE30E94EB330E944F33962F812FA5 :1021700060E010E01B836C839D838E8386E0FE010C :102180003196DE011D9601900D928A95E1F786E069 :10219000FE013D96DE01539601900D928A95E1F77E :1021A00086E0FE017396DE01119601900D928A95EC -:1021B000E1F786E0FE013196A2E6B3E001900D92D0 -:1021C0008A95E1F786E0E2E6F3E0DE0117960190FA -:1021D0000D928A95E1F786E0ECE5F3E0DE011196D9 +:1021B000E1F786E0FE013196A5E6B3E001900D92CD +:1021C0008A95E1F786E0E5E6F3E0DE0117960190F7 +:1021D0000D928A95E1F786E0EFE5F3E0DE011196D6 :1021E00001900D928A95E1F746E050E0BE016F5FE5 -:1021F0007F4FCE0107960E945C32892B79F0E091E7 -:102200008303F0918403309749F082E08093620366 -:102210000480F581E02D82E693E009951092640335 -:1022200010926503109266031092670386E0E2E65F -:10223000F3E0ACE5B3E001900D928A95E1F7689682 +:1021F0007F4FCE0107960E94F132892B79F0E09152 +:102200008603F0918703309749F082E0809365035D +:102210000480F581E02D85E693E00995109267032F +:10222000109268031092690310926A0386E0E5E653 +:10223000F3E0AFE5B3E001900D928A95E1F768967F :102240000FB6F894DEBF0FBECDBFDF91CF911F91C7 -:1022500008951092A402E0E4F2E086E0DF011D920E +:1022500008951092A702E0E4F2E086E0DF011D920B :102260008A95E9F70C948C0B1F93CF93DF93CDB72E -:10227000DEB7AA970FB6F894DEBF0FBECDBF8EE9CA -:1022800093E02091F100DC012D93CD01B3E0863A7B -:102290009B07B9F780919F03833009F472C0B8F4AB +:10227000DEB7AA970FB6F894DEBF0FBECDBF81EAD6 +:1022800093E02091F100DC012D93CD01B3E0893A78 +:102290009B07B9F78091A203833009F472C0B8F4A8 :1022A000813009F449C0823009F4B3C08091E8005C -:1022B00083FF8BC280919E0390919F039A3008F018 -:1022C00084C2E92FF0E0E550FC4C0C9446328A3091 +:1022B00083FF8BC28091A1039091A2039A3008F012 +:1022C00084C2E92FF0E0E057FB4C0C94DB328A30FB :1022D00009F48EC08B3009F471C0893039F78091D0 -:1022E0009E03813219F78091A2039091A303009776 +:1022E000A103813219F78091A5039091A60300976D :1022F00011F00297D9F68091E800877F8093E8007B :102300008091E80082FF38C09091F3008091F20044 :10231000029731F48091F100813011F0863021F480 -:102320008091F100809391038091E8008B778093F6 -:10233000E8000E942407BACF80919E03813A09F0F9 -:10234000B5CF8091E800877F8093E8008091A20359 -:102350009091A303892B61F468E082E993E070E037 +:102320008091F100809394038091E8008B778093F3 +:10233000E8000E942407BACF8091A103813A09F0F6 +:10234000B5CF8091E800877F8093E8008091A50356 +:102350009091A603892B61F468E085E993E070E031 :102360000E94D6078091E8008B778093E8009ECF8B -:1023700060E090E080E0F3CF80919C038111C0CFBA -:1023800095CF80919E03813A09F090CF8091A2036E -:102390009091A303892B09F089CF8091E800877F72 -:1023A0008093E8008091E80080FFFCCF8091650178 -:1023B0008093F1008091E8008E77B9CF80919E03E1 -:1023C000813209F073CF8091A2039091A303892BEE +:1023700060E090E080E0F3CF80919F038111C0CFB7 +:1023800095CF8091A103813A09F090CF8091A50368 +:102390009091A603892B09F089CF8091E800877F6F +:1023A0008093E8008091E80080FFFCCF8091660177 +:1023B0008093F1008091E8008E77B9CF8091A103DE +:1023C000813209F073CF8091A5039091A603892BE8 :1023D00009F06CCF8091E800877F8093E8000E942D -:1023E00024078091A003809365010E9429115ECF8C -:1023F00080919E03813209F059CF8091E800877F58 -:102400008093E8000E9424078091A10380939003A9 -:102410004DCF80919E03813A09F048CF8091E8002A +:1023E00024078091A303809366010E9429115ECF88 +:1023F0008091A103813209F059CF8091E800877F55 +:102400008093E8000E9424078091A40380939303A3 +:102410004DCF8091A103813A09F048CF8091E80027 :10242000877F8093E8008091E80080FFFCCF809157 -:102430009003BECF803899F0823809F0C6C18091F0 -:10244000A2038F70873008F0C0C18093E9008091AB +:102430009303BECF803899F0823809F0C6C18091ED +:10244000A5038F70873008F0C0C18093E9008091A8 :10245000EB0085FB882780F91092E90006C0809187 -:102460009A0390919B03911182609091E800977F6D +:102460009D0390919E03911182609091E800977F67 :102470009093E8008093F1001092F1008091E800C1 :102480008E779FC1882309F48DC1823009F09DC1E8 -:102490008091A003811190C18091A2038F702FEFD2 +:102490008091A303811190C18091A5038F702FEFCC :1024A000280F263008F091C18093E9002091EB00BD :1024B00020FF82C1933031F48091EB0080628093E1 :1024C000EB007AC19091EB0090619093EB0021E0DA :1024D00030E001C0220F8A95EAF72093EA001092BB :1024E000EA008091EB008860EACF81116EC1109103 -:1024F000A0031F778091E3008078812B8093E30015 +:1024F000A3031F778091E3008078812B8093E30012 :102500008091E800877F8093E8000E9424078091F3 :10251000E80080FFFCCF8091E30080688093E300B7 -:1025200082E0111183E080939C034FC18058823078 -:1025300008F04BC12091A0033091A1032C3DE3E0B2 +:1025200082E0111183E080939F034FC18058823075 +:1025300008F04BC12091A3033091A4032C3DE3E0AC :102540003E07A1F583E08A838AE289834FB7F89436 :10255000DE01139620E03EE051E2E32FF0E05093DD :102560005700E49120FF03C0E295EF703F5FEF70EA :102570008E2F90E0EA30C0F0C7968D939D932F5F29 :10258000243159F74FBF8091E800877F8093E8009E :102590006AE270E0CE0101960E94D6078091E800C1 -:1025A0008B778093E80011C1C096E7CF8091A2039A -:1025B0009091A303432F55274330510509F44AC096 +:1025A0008B778093E80011C1C096E7CF8091A50397 +:1025B0009091A603432F55274330510509F44AC093 :1025C00078F54130510509F47AC08BE590E0E2EAF4 :1025D000FBE04230510509F0F8C02091E800277F68 -:1025E0002093E8002091A4033091A503821793075C +:1025E0002093E8002091A7033091A8038217930756 :1025F00008F49C0140E02115310509F065C0411146 -:1026000063C08091E80082FDC9CF80919C0388233C +:1026000063C08091E80082FDC9CF80919F03882339 :1026100029F2853019F28091E80083FFF2CFBECF16 :102620004132510509F43CC04232510509F0CDC098 -:102630008330910508F0C9C0FC01EE0FFF1FE15D7A -:10264000FD4F0190F081E02D845D9D4FDC018C9168 +:102630008330910508F0C9C0FC01EE0FFF1FE05D7B +:10264000FD4F0190F081E02D835D9D4FDC018C9169 :1026500090E01AC0332721303105D1F02115310522 :1026600061F02230310509F0B0C0EFE0FCE0E49108 :102670008E2F90E0EFE0FCE007C0E7E3FCE0E491A0 :102680008E2F90E0E7E3FCE0009709F49EC0A5CF11 :10269000E1E2FCE0E4918E2F90E0E1E2FCE0F4CF97 -:1026A0008330910508F091C0880F991FFC01EB5C05 +:1026A0008330910508F091C0880F991FFC01EA5C06 :1026B000FD4F0190F081E02D89E090E08ECF82E126 -:1026C00090E0EDEFFBE089CF80919C03882309F433 +:1026C00090E0EDEFFBE089CF80919F03882309F430 :1026D00065CF853009F462CF8091E80083FD5ECF3D :1026E0008091E80082FD8DCF8091E80080FF83CF4C :1026F0009091F3008091F2002115310519F0883096 :10270000910550F041E0089709F040E08091E80021 :102710008E778093E8006FCF44914093F10031961B :10272000215031090196E8CF803809F04EC08091E0 -:10273000E800877F8093E80080919D038093F100FB -:102740009DCE811142C01091A0031230F0F580910E -:10275000E800877F8093E80010939D030E94240780 +:10273000E800877F8093E8008091A0038093F100F8 +:102740009DCE811142C01091A3031230F0F580910B +:10275000E800877F8093E8001093A0030E9424077D :10276000112311F084E005C08091E30087FDFACFCA -:1027700081E080939C0342E061EC81E00E9443078A +:1027700081E080939F0342E061EC81E00E94430787 :1027800042E261EC84E00E94430742E261EC82E0B5 :102790000E94430742E260EC83E00E94430780917D -:1027A0009C0313C08091A003813079F481E09330C1 -:1027B00009F080E080939B031092E9008091E8008B +:1027A0009F0313C08091A303813079F481E09330BB +:1027B00009F080E080939E031092E9008091E80088 :1027C000877F8093E8000E9424078091E80083FFC0 :1027D0000AC08091E800877F8093E8008091EB0039 :1027E00080628093EB00AA960FB6F894DEBF0FBE0E :1027F000CDBFDF91CF911F9108951F93CF93DF93AA -:10280000162FC0917A08D0917B088A30D1F420919C -:102810007403CE018A579440622F70E00E941232F6 -:10282000281B822F66E00E942632C82FC15020F458 +:10280000162FC0917D08D0917E088A30D1F4209196 +:102810007703CE018D579440622F70E00E94A7325B +:10282000281B822F66E00E94BB32C82FC15020F4C3 :10283000DF91CF911F91089560E080E20E94FD1327 -:10284000F5CF8D30E9F4CA57D44020917403622F3C -:1028500070E0CE010E941232281B822F9E01280FA9 +:10284000F5CF8D30E9F4CD57D44020917703622F36 +:1028500070E0CE010E94A732281B822F9E01280F14 :10286000311D2115344018F080E0D0E0C0E0C80FE1 -:10287000D11DC658DB4FD0937B08C0937A08D8CFC0 -:1028800096E0FE01A5E7B3E001900D929A95E1F77D +:10287000D11DC358DB4FD0937E08C0937D08D8CFBD +:1028800096E0FE01A8E7B3E001900D929A95E1F77A :10289000803E90F186E0FE0111928A95E9F7C091A1 -:1028A0007A08D0917B08111133C046E050E0BE0198 -:1028B00085E793E00E945C329E012A573440892BC1 -:1028C00091F52A5F3F4F40917403642F70E0C90176 -:1028D0000E941232481B463010F4240F311D21157E -:1028E00074E0370710F030E020E026583B4F30937B -:1028F0007B0820937A089CCFF6E08F9FB0011124CB -:10290000625A794F46E050E0CE010E945332C7CF61 +:1028A0007D08D0917E08111133C046E050E0BE0192 +:1028B00088E793E00E94F1329E012D573440892B26 +:1028C00091F52A5F3F4F40917703642F70E0C90173 +:1028D0000E94A732481B463010F4240F311D2115E9 +:1028E00074E0370710F030E020E023583B4F30937E +:1028F0007E0820937D089CCFF6E08F9FB0011124C5 +:10290000625A794F46E050E0CE010E94E832C7CFCC :102910009E012A5F3F4FFE012E173F0731F2808153 :1029200080958193F9CFC90146E0969587954A95A0 :10293000E1F741E050E0BA0102C0660F771F8A95C7 -:10294000E2F7CB016091780470917904862B972B84 +:10294000E2F7CB0160917B0470917C04862B972B7E :10295000B9016B5F7F4FE6E076956795EA95E1F701 :1029600002C0440F551F6A95E2F7842B952B909374 -:10297000790480937804A5CFFF920F931F93CF9390 +:102970007C0480937B04A5CFFF920F931F93CF938A :10298000DF93EC01F62EFC0101900020E9F78F01A6 :1029900001501109C017D10730F0DF91CF911F917D :1029A0000F91FF9008956F2D89910E94FD13F2CF32 :1029B000CF92DF92EF92FF926B017C010E94A208FE :1029C000B701A60188E090E0FF90EF90DF90CF90F4 -:1029D0000C949832AF92BF92CF92DF92EF92FF9217 +:1029D0000C942D33AF92BF92CF92DF92EF92FF9281 :1029E0000F931F93CF93DF9300D00F92CDB7DEB735 -:1029F000082FF62E142FE22E8091730480FF4FC013 -:102A0000E82FE695AE2FB0E0A05EBD4F9C9190936D -:102A100071038E7F823009F056C04B3A08F04AEAC3 +:1029F000082FF62E142FE22E8091760480FF4FC010 +:102A0000E82FE695AE2FB0E0AF5DBD4F9C9190935F +:102A100074038E7F823009F056C04B3A08F04AEAC0 :102A20009E012F5F3F4F6F2D802F0E94B80880912D -:102A3000730480FF11C02B8139814A81809162012A -:102A40009091630153E0859FF0011124E955FC4FFB -:102A5000891798F10E94A30D80917404801308C017 -:102A6000809175048F1104C080917604811729F03C -:102A70008091730382608093730300937404F092D7 -:102A8000750410937604EE2051F0609173047091F8 -:102A9000740480917504909176040E94D8140F906C +:102A3000760480FF11C02B8139814A818091630126 +:102A40009091640153E0859FF0011124E655FC4FFD +:102A5000891798F10E94A30D80917704801308C014 +:102A6000809178048F1104C080917904811729F036 +:102A70008091760382608093760300937704F092CE +:102A8000780410937904EE2051F0609176047091EF +:102A9000770480917804909179040E94D8140F9063 :102AA0000F900F90DF91CF911F910F91FF90EF90BA :102AB000DF90CF90BF90AF90089541833083228301 :102AC0008F5F3396C5CF923039F6E2508E2F8170EA :102AD000D82EE695F0E0E75AF94FA590B490C12CB6 -:102AE000BB2460916401C61608F0B4CF2C2D30E0F1 +:102AE000BB2460916501C61608F0B4CF2C2D30E0F0 :102AF000A29EC001A39E900DB29E900D112470E085 -:102B00000E941232802FD11016C0860F40916201B0 +:102B00000E94A732802FD11016C0860F409163011A :102B1000420F532F511D9A01220F331F240F351FCF -:102B200029553C4F412F1B3A08F04AEA6F2D0E946D -:102B3000B808C394D6CF861BE9CFE3E7F4E043811E -:102B400028E0421B08F440E021E0628181810C947E -:102B5000EA14E3E7F4E0438128E0420F08F44FEF82 -:102B600021E0628181810C94EA14E3E7F4E0628160 -:102B700028E0621B08F460E021E0438181810C942D -:102B8000EA14E3E7F4E0628128E0620F08F46FEFF3 -:102B900021E0438181810C94EA14E3E7F4E0818130 -:102BA00021E04381628188500C94EA14E3E7F4E069 -:102BB000818121E043816281885F0C94EA14CF9384 -:102BC000C82F0E94600C823081F138F48823B1F064 -:102BD000813021F18C2FCF910895833059F18430C9 -:102BE000C9F720E040E56FEF8AED0E94EA1480917A -:102BF0000001882379F310925D010DC020E04CE3C1 -:102C00006CED80E00E94EA1480910001882399F322 -:102C100081E080935D010E940B0FDCCF20E040E556 -:102C20006FEF8CEF0E94EA14D5CF20E040E56FEF04 -:102C300080E5F8CF20E040E56FEF80EAF3CF0E9417 -:102C4000DF158093A6030C948C0B8091A603982F1C -:102C50009670963019F488600C941F16877FFCCF0D -:102C600021E030E001C0220F8A95EAF7209580919B -:102C7000A60382230C941F1621E030E001C0220F2E -:102C80008A95EAF78091A603822B0C941F168091F7 -:102C90007704882319F0815080937704609173043E -:102CA0007091740480917504909176040C94D814FA -:102CB00080917704833018F48F5F8093770460915C -:102CC00073047091740480917504909176040C944F -:102CD000D8149091730490FF27C0917081111DC08A -:102CE0009260909373048091730381608093730367 -:102CF000662351F06091730470917404809175049F -:102D0000909176040E94D81420E04091760460915E -:102D10007504809174040C94EA148C3010F0966160 -:102D2000E0CF880F982BDDCF0895809173048695AE -:102D3000815009F48BE061E00C9469168091730472 -:102D400086958F5F8C3008F081E061E00C94691605 -:102D50008091730480FF07C0869582588F778930F1 -:102D600010F40C949E1661E082E00C946916E3E77F -:102D7000F4E083E0808311828FEF82838AEA838389 -:102D80001482A1E7B3E012968C9112978360129699 -:102D90008C9360817181828193810C94D8140E94FC -:102DA000522E40E060E080E00C94EB0E69EE7EEF86 -:102DB00090E080E00E94A43260E082E090E00E9417 -:102DC000863260E083E090E00E9486321092A50295 -:102DD00060E084E090E00E94863260E082E290E071 -:102DE0000E94863260E085E090E00E94863260E0DA -:102DF00086E090E00E9486326FEF87E090E00E94CC -:102E0000863240E050E0BA0188E090E00E949832BB -:102E100060E08DE090E00E94863240E050E0BA0130 -:102E200088E190E00E94983260E087E190E00E94A3 -:102E3000863240E050E0BA018CE190E00E94983286 -:102E400070E060E080E290E00E94A43240E050E058 -:102E5000BA0188E190E00E94983280E00E94810FE0 -:102E60000E94990F40E050E0BA018FE090E00E948C -:102E7000983240E050E0BA0183E190E00C9498323F -:102E80005F926F927F928F929F92AF92BF92CF92FA -:102E9000DF92EF92FF920F931F93CF93DF9300D0B7 -:102EA00000D00F92CDB7DEB76C01FC018381948115 -:102EB000892B31F08081918189238F3F09F037C6BA -:102EC0000F900F900F900F900F90DF91CF911F9167 -:102ED0000F91FF90EF90DF90CF90BF90AF909F90B9 -:102EE0008F907F906F905F9008950E94DB0F182F56 -:102EF000682F89819A810E945F0B69817A81812F75 -:102F00000E94CE0F8C01F6018281882309F403C64A -:102F1000C80182519F45409708F078C58FEF93E034 -:102F20000E947232025197E4A92E93E0B92E8111CA -:102F3000C7CF01113AC01C821B82662463948AE0C9 -:102F4000582E85010F5F1F4FC5010E947232898381 -:102F50001A82882309F4B4CF9FEF980F9330A0F51D -:102F60008A83698232E0A30EB11CC8010E947232CA -:102F70008B83882309F4A4CF8E010F5F1F4FF801C4 -:102F800020812223F1F2213009F058C09181828101 -:102F90009130E1F40E5F1F4F6AE070E0893311F465 -:102FA00060E570E00E94D60E17C0A114F4E0BF06E1 -:102FB00009F486CFC5010E947232811101C001500F -:102FC0002FEFA21AB20AB5CF5801D6CF923039F4FA -:102FD0000E5F1F4F0E94EC0B0F5F1F4FD0CF93303F -:102FE00029F40E5F1F4F0E94B30BF6CF943019F0F7 -:102FF0000F5F1F4FF1CF0E5F1F4F30E020E0B80191 -:103000006F5F7F4FF80141818053990B8A309105A2 -:1030100050F02150310900F38FE99FE00197F1F75B -:1030200000C00000F6CF529EF001539EF00D112417 -:103030009C012E0F3F1F842F8B01E1CFE22FF0E088 -:10304000E754FE4F7490822F86958695869590E082 -:10305000FC01E755FE4FE4902770F12C022E02C0D0 -:10306000F594E7940A94E2F7E1E0EE22FF24FC01F4 -:10307000E756FE4FC490D12C022E02C0D594C794BF -:103080000A94E2F7F1E0CF22DD24FC01E757FE4F7E -:103090008490912C02C0959487942A95E2F721E0C0 -:1030A00082229924E114F10419F081EE0E94EC0BC4 -:1030B000C114D10419F086EE0E94EC0B39E36AE0EA -:1030C00070E0731202C060E570E0872D0E94D60E9A -:1030D000CD2819F086EE0E94B30BEF2819F081EE8F -:1030E0000E94B30B892809F477CF6AE070E08CE284 -:1030F00059CF81E00E943C1603C081E00E94301647 -:103100000F900F900F900F900F90DF91CF911F9124 -:103110000F91FF90EF90DF90CF90BF90AF909F9076 -:103120008F907F906F905F900C94251682E0E2CF95 -:10313000043F110509F4C7C062E0053F110509F01D -:103140008BC40E94710C88C40438FFE51F0709F482 -:1031500053C0B8F402383FE5130771F103384FE567 -:10316000140709F079C4882309F476C481EE0E941B -:10317000EC0B83EE0E94EC0B80E50E94EC0B80E5EB -:1031800028C005385FE5150709F47CC006389FE5BF -:10319000190709F061C4882309F495C0809147029A -:1031A000882309F486C080EE90E090935F018093BD -:1031B0005E011092470274C0882309F44DC481EE69 -:1031C0000E94EC0B83EE0E94EC0B8FE40E94EC0B50 -:1031D0008FE40E94B30B83EE0E94B30B81EE0E943A -:1031E000B30B3AC480934B0210934A0200934902F6 -:1031F00033C480934802F8CF882379F18091480244 -:10320000882349F0809149020E94B30B80EE0E940E -:10321000EC0B8AE20CC080914B028823D1F38091A1 -:1032200049020E94B30B80EE0E94EC0B8CE40F90DD -:103230000F900F900F900F90DF91CF911F910F91F2 -:10324000FF90EF90DF90CF90BF90AF909F908F90C6 -:103250007F906F905F900C94EC0B8AE20E94B30B0E -:103260008CE40E94B30B80EE0E94B30B8091480265 -:10327000811105C080914B02882309F421CE8091F1 -:103280004902D5CF8823F9F080915D01811104C0F6 -:1032900080910001882339F010925D0110920001A5 -:1032A0000E940B0FD9C381E080935D0180930001E0 -:1032B000F7CF86E690E090935F0180935E0181E016 -:1032C00080934702EDCF61E03CCF64E03ACF013616 -:1032D0003DE5130709F4D5C30E3D1C4509F012C1A5 -:1032E0000F900F900F900F900F90DF91CF911F9143 -:1032F0000F91FF90EF90DF90CF90BF90AF909F9095 -:103300008F907F906F905F900C94D6168091E6021C -:10331000806106304CE5140709F491C08091E60203 -:10332000886007301C4508F48AC08091E6028062FC -:1033300086C00C308CE5180709F49CC070F48091AD -:10334000E6028C600A30ECE51E0709F478C008F448 -:103350008BC08091E6028E7F72C08091E602877FEB -:103360000E302CE5120709F46AC08091E6028B7FCB -:103370000F301C4508F463C08091E6028F7E5FC069 -:103380000C3F4CE5140709F479C068F504318CE56D -:10339000180709F48BC080F40231ECE51E0709F42C -:1033A00075C08091E6028F7B03311C4508F447C04D -:1033B0008091E602837F43C00A3F2CE5120709F49F -:1033C00045C008F049C005311C4509F081C3809112 -:1033D000E60282FB992790F921E0922790FB82F97F -:1033E00090FB83F92CC001155DE5150709F454C065 -:1033F00088F48091E70283600E3F9CE5190749F14C -:103400008091E7028D7F0F3F1C4518F18091E70204 -:103410008C7F1FC00230FDE51F0709F456C008F479 -:103420004EC001361D4509F053C39091E602892F25 -:103430008F7E94FF806103C08091E602816080935B -:10344000E60246C38091E6028460F9CF8091E702EC -:1034500081608093E7023CC38091E7028260F9CFEC -:103460008091E6028064EBCF0E9429118091E602F0 -:103470008068E5CF8091E6028D7FE1CF8091E70201 -:103480008E7FE7CF8091E6028F7DD9CF0E942911F0 -:103490008091E6028F77D3CF8091E702982F9095A5 -:1034A00091708E7F892B90FB81F9D3CF0E942911D7 -:1034B0009091E602892F97FB87F98058C0CF61E091 -:1034C0008EE090E00E94863203C360E0F9CF8091E5 -:1034D000A40282720A3C4CE5140709F4F7C008F014 -:1034E00063C0053CECE51E0709F4DCC0A0F5033C15 -:1034F0002CE5120709F4CCC008F0CFC0023C1C45F3 -:1035000009F476C0F60100811181992309F4FEC007 -:10351000C8010E94DB0FF82E682FC8010E945F0BC4 -:10352000B8018F2D0E94CE0F0E94AC09182FB82E23 -:10353000F60122814581342F32953F70892F829583 -:103540008F70E82EF12C8C3008F018C1F701EB5F7A -:10355000FB4C0C944632073C5CE5150709F4ACC003 -:1035600008F4A5C0083CFCE51F0709F4AAC04DE912 -:1035700055E169EA75E1093C1C4521F60F900F9071 -:103580000F900F900F90DF91CF911F910F91FF90AF -:10359000EF90DF90CF90BF90AF909F908F907F90F3 -:1035A0006F905F900C949D08043D3CE51307A0F4D8 -:1035B0000E3C4CE5140708F083CC0C3C5CE5150789 -:1035C00009F489C047E456E168E576E10D3C1C4505 -:1035D000A8F261E081E046C0053DECE51E0709F474 -:1035E0006FCC08F47DC00D351D4509F469CC8ACF38 -:1035F0008091730480FF31C08E7F8093730460914B -:1036000073047091740480917504909176040E9403 -:10361000D814809173038160809373033FEF40E778 -:1036200052E0315040405040E1F700C000000F90A0 -:103630000F900F900F900F90DF91CF911F910F91EE -:10364000FF90EF90DF90CF90BF90AF909F908F90C2 -:103650007F906F905F900C94A30D816080937304B2 -:1036600061E086950F900F900F900F900F90DF9173 -:10367000CF911F910F91FF90EF90DF90CF90BF906F -:10368000AF909F908F907F906F905F900C94691691 -:1036900045E956E16EE976E171CF4EE956E165E91B -:1036A00076E16CCF4DEC55E166ED75E167CF46ED07 -:1036B00055E16DEC75E162CF45EB55E161EC75E1EB -:1036C0005DCF41EC55E165EB75E158CF49EA55E135 -:1036D0006DE975E153CF48E556E167E476E14ECFF9 -:1036E0000F900F900F900F900F90DF91CF911F913F -:1036F0000F91FF90EF90DF90CF90BF90AF909F9091 -:103700008F907F906F905F900C94A816C8010E94D4 -:10371000370BF82E05CF092F0F70907F11F002950F -:10372000007F812F2223C9F0002369F090E2910FDE -:10373000983010F011110BC08091A402082B009357 -:10374000A4020E94160B812F0E94EC0B17C08091DF -:10375000A302082B0093A302F4CF0E94B30B002313 -:1037600069F00095105E183010F0B11027C08091FC -:10377000A40208230093A4020E94160B98E0E91A01 -:10378000F108E4E0EE16F10408F09ACB0E94C60EB0 -:103790000F900F900F900F900F90DF91CF911F918E -:1037A0000F91FF90EF90DF90CF90BF90AF909F90E0 -:1037B0008F907F906F905F900C94260E8091A30263 -:1037C00008230093A302D8CF892F8F70907F903267 -:1037D00011F08295807FF1E0BF120CC0222329F006 -:1037E000333060F60E94A90BC9CF323038F60E9400 -:1037F0009E0BC4CF222341F03323A1F340FFA3CF7C -:103800004F70F6014583EECF332389F3193309F066 -:10381000F5C0FFEF27EE33E0F15020403040E1F7F4 -:1038200000C00000812F0E94B30BA8CF892F86957E -:103830008695837061F0813009F0A0CF812F93705D -:10384000211102C090E080E00E94440897CF812FB0 -:103850009370211102C090E080E00E945A088ECF40 -:10386000892F8370A1F5211189CF812F82958695AB -:103870008770880F880F412F4F70082E01C0440FAA -:103880000A94EAF7212F207114FF07C02FE030E0DF -:1038900001C0220F8A95EAF7209596959695937028 -:1038A000923081F0822F842B933030F48091A502E6 -:1038B000913029F0242B82230E949A0B5FCF842B16 -:1038C000822BFACF242B8091A5028227F5CF8695F3 -:1038D000222311F0892F8170882309F44FCF812F83 -:1038E000829586958770880F880F412F4F70082E1C -:1038F00001C0440F0A94EAF7212F207114FF07C07A -:103900002FE030E001C0220F8A95EAF720959695C6 -:1039100096959370923081F0822F842B933030F4FF -:103920008091A603913029F0242B82230E941F1638 -:1039300025CF842B822BFACF242B8091A6038227BC -:10394000F5CF092F0F70222329F0802F0E943C16FB -:10395000812F48CF812F0E949E0B802F0E9430160E -:103960000DCF812FE1EF1E1789F1E11750F0F0EF35 -:103970001F17B9F02223B1F13111E5CE892F8F71D4 -:1039800029C042EF141749F153EF1513F3CF80E02C -:10399000222361F29F7181E001C0880F9A95EAF7B6 -:1039A000C5CF222379F0323008F0E8CE292F2F71CD -:1039B00081E090E001C0880F2A95EAF79091A60374 -:1039C0008927B4CF333008F0D9CEF0CF892F8F714B -:1039D000222321F20E943C16D1CE892F8F712223FF -:1039E000C9F3BCCF332379F0893341F48FEF97EEDD -:1039F000E3E081509040E040E1F712CF8FE39CE993 -:103A00000197F1F70DCF892F8F71A8CF0031FFE516 -:103A10001F0709F46ECB01312FE5120709F486CB9D -:103A20000E9438086093FD027093FE028093FF02AB -:103A300090930003F6018281063F110509F445CCFD -:103A400008F082CB053E110509F4CCCB08F070CB11 -:103A5000013E110509F4CDCBF6019281992309F4B9 -:103A600036CD0330FDE51F0708F031CC0A3F2CE5C9 -:103A7000120738F4980122503C452431310508F0F2 -:103A80002BCC0E9456109093E7028093E6020031FF -:103A90004CE5140709F4F6CC08F072CC08308CE53C -:103AA000180709F4DDCC08F044CC0430ECE51E071F -:103AB00009F4C8CC08F02ACC02302CE5120709F42E -:103AC000BBCC8091E602826003301C4509F4B7CC80 -:103AD0006091E6021091E70284E090E00E94863255 -:103AE000612F82E290E00E9486320F900F900F903B -:103AF0000F900F90DF91CF911F910F91FF90EF905A -:103B0000DF90CF90BF90AF909F908F907F906F90FD -:103B10005F900C94291100313FE5130709F4EDCAB9 -:103B200001314FE5140709F085CF82E0E7CA85E04F -:103B3000DE01119601900D928A95E1F7F60122813E -:103B400089819A812111D1C90E94370B182FD5C9BB -:103B50001F93CF93DF9380916F02807FA9F48091B0 -:103B60006C02882389F08091A102D091700260914B -:103B70006A0270916B02A0916D02B0916E02C62F25 -:103B8000C72316E0D81304C0DF91CF911F91089589 -:103B900090E0109711F0CF3F19F401968770F2CFA3 -:103BA000189F9001199F300D1124F901EF58FD4F16 -:103BB00041814713F2CF40814613EFCF428141113B -:103BC000ECCF438154814A1B5B0B403A510528F7E7 -:103BD00080916F028F70806180936F02F901EA58C3 -:103BE000FD4F80818F70806180838AE692E00E9421 -:103BF0004017DF91CF911F910C942D0BAF92BF9284 -:103C0000CF92DF92EF92FF920F931F93CF93DF93A8 -:103C1000CDB7DEB761970FB6F894DEBF0FBECDBF4C -:103C20008C0185E0F801DE011D9601900D928A95C8 -:103C3000E1F7F801E2808AE6A82E82E0B82E6091D2 -:103C40006D0270916E026115710509F432C1909197 -:103C50006A0240916B02892F84238F3F09F429C1A6 -:103C600020813181C380D480F0906C02F601E61B84 -:103C7000F70BFF2009F4E8C080916F02582F507FA6 -:103C8000E03AF10508F0ABC0511177C0FE2C4313A8 -:103C900021C092131FC0E1101DC08F7080618093FE -:103CA0006F02C5010E94401780916F02F801858361 -:103CB0008F2D61960FB6F894DEBF0FBECDBFDF919A -:103CC000CF911F910F91FF90EF90DF90CF90BF9019 -:103CD000AF900895CD2829F0822F83238F3F09F0DC -:103CE00003C180E0F82FF170DF2E80FF3CC080918F -:103CF000A1024091700256E0841315C02D873E87C3 -:103D00008D859E850E940A10292F22952F702230C2 -:103D1000F0F0243018F59F70F1F0F8019581907F54 -:103D2000D1F4D12C1EC090E0589FF001599FF00DA6 -:103D30001124EF58FD4F6181361306C060812613B0 -:103D400003C06281E6120FC001968770D5CF9F70C5 -:103D500011F0882331F3805E883018F3C8010E9487 -:103D60004017FD2CA5CFEE2009F4A2CF80916F0261 -:103D7000816080936F02F12C9BCF431306C0921396 -:103D800004C0F801EE2009F479C0C8010E941610A1 -:103D9000882309F1EE20F9F080916F02803270F0F3 -:103DA00020916A0230916B0238872F831986DB8657 -:103DB000CA868C87CE0107960E94401786E0F801DC -:103DC000AAE6B2E001900D928A95E1F70E94A81D43 -:103DD000FF24F3946DCFC8010E944017F9CF511111 -:103DE0000AC08AE692E00E94401786E0F50111922F -:103DF0008A95E9F7C0CF43130FC092130DC0E110AD -:103E00000BC0F8018583C8010E94401786E0F501C8 -:103E100011928A95E9F74CCFC8010E9416108823A9 -:103E2000D1F2EE20C1F280916F02803238F22091FF -:103E30006A0230916B023A8329831B82DD82CC8235 -:103E40008E83CE010196B8CFE03AF105F8F6FE2C4C -:103E5000EE2009F243131FC092131DC080916F0220 -:103E600080FD10C0982F907F69F0F8018583903F06 -:103E700031F0982F907F905F8F70892B8583C801D8 -:103E80000E94401786E0F801AAE6B2E001900D9288 -:103E90008A95E1F70DCFC8010E94161081118ECFCF -:103EA00080916F02816080936F02C8010E94401769 -:103EB000FFCEEE2009F48FCFC8010E941610F82E15 -:103EC000882309F488CF86E0F801AAE6B2E00190E1 -:103ED0000D928A95E1F780916A0290916B020E949F -:103EE0000A100E94A81DE4CE81E08E25FBCE1F9310 -:103EF000CF93DF93CDB7DEB767970FB6F894DEBFE9 -:103F00000FBECDBF4B8B5C8B6D8B7E8B8F8B61110E -:103F10001092A3021A8A198A85E0FE017396DE01C7 -:103F20001D9601900D928A95E1F786E0FE013D967F -:103F3000DE01179601900D928A95E1F7CE01079662 -:103F40000E94FE1D882389F016E08091A1029091C5 -:103F50007002891349C067960FB6F894DEBF0FBE92 -:103F6000CDBFDF91CF911F91089586E0FE01379676 -:103F7000DE01119601900D928A95E1F78A859B8565 -:103F8000892B11F38F81988589238F3FE9F2209146 -:103F9000700230E0C9010196877099274091A10213 -:103FA0004817190671F40E9429111092700210929C -:103FB000A10286E0EAE6F2E0DF011D928A95E9F7C8 -:103FC000C3CF96E0929FD001939FB00D1124AF58BC -:103FD000BD4FFE01319601900D929A95E1F78093C5 -:103FE00070020E942D0BB0CF819FC00111248F5809 -:103FF0009D4F0E94FE1D882309F4ADCF8091A10240 -:1040000090E00196877099278093A1029ECF0F932D -:104010001F93CF93DF9300D000D0CDB7DEB7409190 -:10402000D5025091D6026091D7027091D8022FB775 -:10403000F8948091880390918903A0918A03B091AC -:104040008B032FBF841B950BA60BB70B84369105F2 -:10405000A105B10588F10E94A30E882379F10E9481 -:1040600038086E5F7F4F8F4F9F4F69837A838B83B2 -:104070009C8380912C0190912D0180549D4F409103 -:104080002B0150E04530510510F044E050E0BE01F6 -:104090006F5F7F4F0E94693284E090E00E945E3142 -:1040A000892BD9F40E9438086093D5027093D60208 -:1040B0008093D7029093D80281E010C00E94380804 -:1040C0000091E2021091E3022091E4023091E502B6 -:1040D000600F711F821F931FC4CF80E00F900F905D -:1040E0000F900F90DF91CF911F910F9108958F92B4 -:1040F0009F92AF92BF92CF92DF92EF92FF920F9377 -:104100001F93CF93DF93EB0188809980AA80BB80B7 -:104110009FB7F894C0908803D0908903E0908A03F9 -:10412000F0908B039FBFC818D908EA08FB0894E6F3 -:10413000C916D104E104F10410F4442311F1E82E6E -:10414000082E000CFF089AE08902F0011124EF5FAD -:10415000FE4F8381948180549D4F428150E004172B -:10416000150708F4A801B9010E946932C7010E942D -:104170005E31892BA1F40E943808688379838A8391 -:104180009B8381E0DF91CF911F910F91FF90EF9082 -:10419000DF90CF90BF90AF909F908F90089580E078 -:1041A000F1CF0F931F93CF93DF930F92CDB7DEB76D -:1041B00080917F0389832091D40290E041E0281709 -:1041C000190609F440E001E010E09E012F5F3F4F27 -:1041D0006DED72E086E00E9477200F90DF91CF9125 -:1041E0001F910F9108950F931F93CF93DF93CDB736 -:1041F000DEB728970FB6F894DEBF0FBECDBF85E0BF -:10420000E3E7F4E0DE01119601900D928A95E1F763 -:104210008091710390917203A09173038E839F83A9 -:10422000A88741E08885811101C040E008E010E0E6 -:104230009E012F5F3F4F69ED72E085E00E9477207D -:1042400081111092730328960FB6F894DEBF0FBE4B -:10425000CDBFDF91CF911F910F9108956F927F9203 -:104260008F929F92AF92BF92CF92DF92EF92FF9286 -:104270000F931F93CF93DF930F92CDB7DEB7862EA8 -:104280005A016901682E880F7708C3010E945E31C8 -:10429000892B09F088C08AE0869DF001879DF00D8A -:1042A0001124EF5FFE4F458150E04115510511F09B -:1042B00041E050E08AE0869DF001879DF00D1124D9 -:1042C000EF5FFE4F6681778160547D4FCE0101968E -:1042D0000E946932F50140815181628173812FB75B -:1042E000F8948091880390918903A0918A03B091FA -:1042F0008B032FBF841B950BA60BB70B8436910540 -:10430000A105B10540F4B701C8010E948708998151 -:10431000891709F44FC0082C000C9908C4010E94A9 -:104320005E31892B91F0B12C8B2D0F90DF91CF91C5 -:104330001F910F91FF90EF90DF90CF90BF90AF90C3 -:104340009F908F907F906F9008958AE0889DF001F4 -:10435000899DF00D1124EF5FFE4F458150E0E4167A -:10436000F50608F4A7018AE0889DF001899DF00D0B -:104370001124EF5FFE4F6681778160547D4FC60147 -:104380000E946932B701C8010E9487089981891388 -:10439000CACF0E943808F5016083718382839383BA -:1043A000BB24B394C1CFB12CA701B801C6010E94B0 -:1043B0006932BACFBB24B394F7CFCF92DF92EF929A -:1043C000FF920F931F93CF93DF9300D000D00F92F3 -:1043D000CDB7DEB76B0185E0E82EF12C01EC12E0E1 -:1043E0009E012F5F3F4F48EB52E061E080E00E946A -:1043F0002E21882349F095E0FE013196A3EBB2E02F -:1044000001900D929A95E1F795E0E3EBF2E0D60189 -:1044100001900D929A95E1F70F900F900F900F90E9 -:104420000F90DF91CF911F910F91FF90EF90DF9050 -:10443000CF90089590E080E00E948032893E9E4FA8 -:1044400011F40C943D1080E008951F920F920FB666 -:104450000F9211242F933F934F935F936F937F930A -:104460008F939F93AF93BF93CF93DF93EF93FF937C -:10447000D091E900DF708091EC00C82FC17080FD01 -:10448000C0E81092E9008091F000877F8093F000EF -:1044900078940E9434111092E9008091F0008860B5 -:1044A0008093F000CD2BCF70C093E900FF91EF9186 -:1044B000DF91CF91BF91AF919F918F917F916F913C -:1044C0005F914F913F912F910F900FBE0F901F90D2 -:1044D00018951F920F920FB60F9211242F933F93AE -:1044E0004F935F936F937F938F939F93AF93BF93FC -:1044F000EF93FF938091E10082FF09C08091E20079 -:1045000082FF05C08091E1008B7F8093E100809164 -:10451000DA0080FF24C08091D80080FF20C0809105 -:10452000DA008E7F8093DA008091D90080FF9DC0F1 -:1045300080E189BD82E189BD09B400FEFDCF81E043 -:1045400080939C0380918F03811109C00E94AA0669 -:104550000E9475078091E20084608093E200809160 -:10456000E10080FF17C08091E20080FF13C08091BE -:10457000E2008E7F8093E2008091E2008061809370 -:10458000E2008091D80080628093D80019BC85E059 -:1045900080939C038091E10084FF2BC08091E20016 -:1045A00084FF27C080E189BD82E189BD89B5982F4C -:1045B000917080FFFBCF8091D8008F7D8093D800D1 -:1045C0008091E1008F7E8093E1008091E2008F7EF8 -:1045D0008093E2008091E20081608093E20080910C -:1045E0009D03882309F447C084E080939C03809155 -:1045F0009C038091E10083FF27C08091E20083FF4C -:1046000023C08091E100877F8093E10082E0809366 -:104610009C0310929D038091E1008E7F8093E100C6 -:104620008091E2008E7F8093E2008091E2008061C1 -:104630008093E20042E060E080E00E9443078091C6 -:10464000F00088608093F000FF91EF91BF91AF91EF -:104650009F918F917F916F915F914F913F912F919A -:104660000F900FBE0F901F90189519BC10929C03CD -:1046700010928F0374CF8091E30087FD93E09093B5 -:104680009C03B5CF78941F921FB61F9211248F936D -:104690009F93AF93BF938091880390918903A091DA -:1046A0008A03B0918B030196A11DB11D80938803ED -:1046B00090938903A0938A03B0938B03BF91AF912A -:1046C0009F918F911F901FBE1F9018959C014FB70F -:1046D000F8948091880390918903A0918A03B09106 -:1046E0008B034FBF821B930B08952FB7F8948091D3 -:1046F000880390918903A0918A03B0918B032FBF07 -:104700000895AF92BF92DF92EF92FF920F931F93A3 -:10471000CF93DF93CDB7DEB761970FB6F894DEBFC6 -:104720000FBECDBF4C87888B998BE52ED62EF72EEA -:104730005E0127E0A20EB11C85E0F50111928A9579 -:10474000E9F7809170038A3008F095C080916E037C -:1047500090916F030E946623089708F48CC004E6CA -:1047600010E025E030E0A50164E084E10E949D2F87 -:10477000892B09F0DBC0109270038B8587FDD1C0B7 -:10478000E894E0F880916C0390916D03009709F034 -:10479000C2C08F819885891708F091C0981B892F16 -:1047A00041E020915E0130915F01889FC00111249A -:1047B00055E0589FF001599FF00D1124E29FB00180 -:1047C000E39F700DF29F700D1124660F672F661F17 -:1047D000770B7195442319F071956195710980915A -:1047E0006A0390916B03680F791F89859A858917F1 -:1047F00008F068C0981B892F41E0889FC0011124F0 -:1048000055E0589FF001599FF00D1124E29FC0011F -:10481000E39F900DF29F900D1124880F892F881F20 -:10482000990B9195442319F09195819591092091C7 -:10483000680330916903820F931F603871050CF48F -:1048400044C06F57710970936B0360936A033FE72D -:10485000D32E803891050CF44BC08F57910990935B -:104860006903809368039FE7F92E0E947523909354 -:104870006F0380936E03ED86DE86FF8686E0FE0181 -:104880003C96DE01119601900D928A95E1F72981FF -:104890003A814B815C816D817E8180E090E0619600 -:1048A0000FB6F894DEBF0FBECDBFDF91CF911F9141 -:1048B0000F91FF90EF90DF90BF90AF900895891B0C -:1048C00040E06FCF891B40E098CF6138FFEF7F0752 -:1048D0004CF461587F4F70936B0360936A0321E837 -:1048E000D22EB7CFD62E10926B0310926A03B1CF9F -:1048F00081382FEF92074CF481589F4F90936903B2 -:104900008093680381E8F82EB0CFF82E10926903E7 -:1049100010926803AACF019790936D0380936C0364 -:10492000A4CF6894E0F884E190E0F6CF8091700322 -:104930008F5F8093700399CF9F92AF92BF92CF9277 -:10494000DF92EF92FF920F931F93CF93DF93CDB738 -:10495000DEB764970FB6F894DEBF0FBECDBF8E01F1 -:104960000F5F1F4F8AE0D8011D928A95E9F79EEEEE -:10497000C92E91E0D92EF12CE12CAA24A394B12CBC -:10498000F60181916F018F3F09F444C0F894E82F3C -:10499000E295EF70F0E021A18F70A50102C0440FF5 -:1049A000551F8A95E2F7CA01922F982B91A392A1E5 -:1049B0008095892382A30E94500900C0E8EFF1E0AE -:1049C000912C31E021912F3F09F478C0A22FA295BC -:1049D000AF70B0E090968C9190E02F7002C09595EA -:1049E00087952A95E2F780FD69C0832F982A330FB7 -:1049F00052E0E030F50731F7F601319780818F3FC3 -:104A000011F00E94520980EA8A95F1F7F801EE0D43 -:104A1000FF1D9082AFEFEA1AFA0AB5E0EB16F10437 -:104A200009F0AECF4AE050E0B80188EE92E00E9473 -:104A30005C327C01892B41F08AE0F801A8EEB2E0FB -:104A400001900D928A95E1F71091F302E114F104BF -:104A5000B9F181E08093A8020E9475239093A70288 -:104A60008093A6028091A6029091A7020E946623DD -:104A7000069770F0A8EEB2E0E12FF0E0EE5AFC4F9E -:104A80008D91819322E0AD3EB207D1F71092A8023A -:104A900081E090E0EF28C1F064960FB6F894DEBF95 -:104AA0000FBECDBFDF91CF911F910F91FF90EF907F -:104AB000DF90CF90BF90AF909F90089580E096CF09 -:104AC0008091A8028111CECF0E94A30ED82EE09132 -:104AD000F302882309F4B4C07E0140E1E40EF11C26 -:104AE00085E0D7011D928A95E9F70E2F10E00E5A46 -:104AF0001C4F8091E1028A3008F06CC04DED51E20C -:104B0000B701C8010E945F0E882309F485C04EEEEC -:104B100056E2B701C8010E945F0E882309F47CC0E9 -:104B200047E050E2B701C8010E945F0E882309F4F4 -:104B300073C043EF50E2B701C8010E945F0E8823A3 -:104B400009F46AC041ED50E2B701C8010E945F0E4E -:104B5000882309F461C01092E1028091F20290E092 -:104B600045E050E0B7018E5A9C4F0E945C3221E034 -:104B70002093B102892B09F042C0D12C8BEAE82E98 -:104B800082E0F82E10E000E0D7018D917D018823AE -:104B9000D1F08695F80109F450C0E851FE4F8081AC -:104BA00091819C878B871D860E9475238160782F59 -:104BB0009F878E87F701319710824B855C856D85C5 -:104BC0008F850E94771F0E5F1F4F04301105E1F69D -:104BD0008D2D62CF8091A9029091AA020E94662336 -:104BE000843F914008F08ACF8091B102882329F256 -:104BF00085E0F70111928A95E9F71092B102A09130 -:104C0000F202B0E0AE5ABC4F85E0FE017096019012 -:104C10000D928A95E1F7B2CF8091E1028F3F31F09A -:104C20008F5F8093E1028A3008F497CF0E9475234A -:104C30009093AA028093A902D7CFEC51FE4FAFCF39 -:104C4000F0E0EE5AFC4FF89485E0A1ECB2E0019060 -:104C50000D928A95E1F765E070E081EC92E00E94A8 -:104C600087088093C0020E945009F894E091FB02EB -:104C7000F0E0E850FD4F80818B878093C70261E0B0 -:104C800070E0CE010B960E9487088093C6020E94B6 -:104C90005009F894C090C802D090C902E090CA02AE -:104CA000F090CB028091AD029091AE02A091AF0244 -:104CB000B091B002C816D906EA06FB06D1F0C09240 -:104CC000AD02D092AE02E092AF02F092B0020E942A -:104CD000A30E81110EC00E943808C61AD70AE80A2E -:104CE000F90AC092E202D092E302E092E402F0926A -:104CF000E5020E945009F8948091D3028823F1F0D4 -:104D000080FF0DC08091CC0280FF25C0909173047C -:104D100091609093730460E086950E94691680917B -:104D2000D30281FF09C020E04091CF026091CE0202 -:104D30008091CD020E94EA141092D3020E94500981 -:104D4000F8948091D402882349F00E94FB0C0E94C1 -:104D5000500980E0A1CE0E944A0EE1CF0E94E00CF3 -:104D6000F6CFEF92FF920F931F93CF93DF9300D074 -:104D700000D00F92CDB7DEB7162FE82EF12CC70169 -:104D8000880F991F662339F188519E4FFC0180815D -:104D900091819A83898301E00B830E94752381604E -:104DA000782F9D838C83F701E555FD4F0127110F67 -:104DB000102B108349815A816B818D810F900F9048 -:104DC0000F900F900F90DF91CF911F910F91FF9057 -:104DD000EF900C94771F8C519E4FD8CFCF92DF92DB -:104DE000EF92FF920F931F93CF93DF930F92CDB764 -:104DF000DEB7EE24E394F12C07EC12E09E012F5F66 -:104E00003F4F4CEB52E063E082E00E942E21082FDE -:104E1000882321F1C090F5028C2D90E09C01285050 -:104E20003D4F79011981F9018081181BD12E80E055 -:104E30000AC0DA94F70180818F5F808360E08C2D57 -:104E40000E94B126802F1D14A4F3912F17FD90E02E -:104E5000191B11110EC081110E94140B802F0F908D -:104E6000DF91CF911F910F91FF90EF90DF90CF9046 -:104E700008951F5FF70180818150808361E08C2D50 -:104E80000E94B126802FE5CF1F921FB61F921124DA -:104E90008F939F93AF93BF9380918703811113C02A -:104EA0008091880390918903A0918A03B0918B032C -:104EB0004196A11DB11D8093880390938903A0930F -:104EC0008A03B0938B03BF91AF919F918F911F90F5 -:104ED0001FBE1F901895CDB7DEB7AE970FB6F894EA -:104EE000DEBF0FBECDBF84B7877F84BF0FB6F894F7 -:104EF000A8958091600088618093600010926000A6 -:104F00000FBE80E890E00FB6F89480936100909314 -:104F100061000FBE85B7806885BF85B7806885BF93 -:104F20008EE499E090933D0280933C020E94AA0691 -:104F30000E9475078091E20084608093E20078947B -:104F400080919C038823A1F01091E9001F7090913B -:104F5000EC00892F817090FD80E8182B1092E900F9 -:104F60008091E80083FD0E9434111F701093E900C6 -:104F700082E084BD93E095BD9AEF97BD80936E006B -:104F80001092E2021092E3021092E4021092E50203 -:104F90000E943D10811102C00E94990F0E94A30E31 -:104FA0008093470180914701882309F47CC01092C7 -:104FB000600182E2809361010E94A30E81110E9430 -:104FC0005130809147018091470195E0811190E037 -:104FD0009093F30285E0891B8093F2020EEE11E0BC -:104FE00093EFE92E91E0F92ED8018D918D018F3F3D -:104FF00011F00E945209E016F106B1F708EF11E036 -:1050000080E0E82E82E0F82EF80181918F018F3F39 -:1050100011F00E945209E016F106B1F78AE0E2E5CC -:10502000F3E0DF01282F1D922A95E9F7E8EEF2E080 -:10503000DF011D928A95E9F70E941A22811102C0B0 -:105040000E94D61682E090E00E947232809347035D -:105050000E9456109093E7028093E6020E949C24DF -:10506000EFE7FBEB3197F1F700C000000E949C24B2 -:105070008091520380FF1BC06FEF7FEF90E080E0D4 -:105080000E94A43287E797E7909301088093000875 -:1050900088E19AE00FB6F894A895809360000FBE5F -:1050A00090936000FFCF82E28093600183CF83E022 -:1050B00090E00E9472320E949A0B8091A6030E9497 -:1050C000DF150E94A30E811102C00E9454300E947D -:1050D000A30E81111EC283E08093420380E480937B -:1050E00074030E94522E6DE070E08CE492E00E9406 -:1050F000B00C892BE9F58091420363E070E081FDFB -:105100000AC289E492E00E94B00C892B89F56DE017 -:1051100070E089E392E00E94B00C892B49F50E946F -:1051200038086058774C8E4F9F4F60937B03709385 -:105130007C0380937D0390937E03EAE7F4E080E0B4 -:1051400094E0DF019C011D9221503040E1F7F09383 -:105150007B08E0937A088FEF9FEF90937904809318 -:10516000780481E08093800380937F03109243034F -:105170008091F402811136C00E941A22811104C06C -:105180000E94D6160E94B71688E090E00E947A32FC -:105190006093730470937404809375049093760401 -:1051A000809173038360809373036E7F71F40E9418 -:1051B000B71688E090E00E947A326093730470938F -:1051C000740480937504909376040E94A2088091E1 -:1051D000730480FF04C060E086950E94691681E038 -:1051E0008093F40280914701811106C084E9809385 -:1051F000550182E98093540120915501A22FA29577 -:10520000AF70B0E091963C9191972F7081E090E063 -:10521000BC01022E01C0660F0A94EAF7462F4095A2 -:10522000432391964C93919792963C919297362B6B -:1052300092963C93929740915401E42FE295EF703F -:10524000F0E031A14F70042E01C0880F0A94EAF7F4 -:10525000982F9095932391A392A1892B82A3909646 -:105260008C9190E002C0959587952A95E2F7817020 -:1052700020A130E002C0359527954A95E2F792E0EB -:1052800020FF90E0892B8093FC029091470181E000 -:1052900098279093FB02891B8093F5020E94CF16FA -:1052A00060E08AE00E94691681E00E941F1680EE8D -:1052B00090E090935F0180935E010E940B0F88E461 -:1052C00091E09093840380938303A8E18A2E912C2C -:1052D000B0E4EB2E80919C03FF24F39400E112E1F3 -:1052E000853009F465C10E949C24D82E81110E944A -:1052F0003808F2E52F2EF3E03F2EE8E4F3E0D10189 -:1053000010E000E0A02ECD9081918C1509F472C1BF -:105310008C25B12CFF24F3949F2D982309F465C1AB -:105320000E94A30E882399F0B9A2AAA2CF2081E0FF -:1053300009F480E08BA30E9475238160782F9DA3E0 -:105340008CA349A15AA16BA18DA10E94771FF801DE -:10535000E85BFC4F8081F826F0828091FC02E82F08 -:10536000EE0FEE0F90915501A92FA295AF70B0E00E -:1053700090962C9130E09F7002C0359527959A95B4 -:10538000E2F72170332790915401A92FA295AF70B5 -:10539000B0E090964C9150E09F7002C055954795B3 -:1053A0009A95E2F7CA018170992740FF02C082E016 -:1053B00090E0822B8E2B8093FC021091FB028F7069 -:1053C000E82FF0E0E050FE4F80819091FA02890FC3 -:1053D0008093FA02F12C84306CF0E12FF0E0E85079 -:1053E000FD4F80818F5F808360E0812F0E94B12616 -:1053F000FF24F3948091FA028D3F6CF4E12FF0E0EA -:10540000E850FD4F80818150808361E0812F0E94B0 -:10541000B126FF24F3948091FA02082E000C990B18 -:1054200064E070E00E9432328093FA02F1100E9430 -:10543000140B80918003882351F180914403909153 -:1054400045030E946623C29708F0EBC020917804C0 -:10545000309179042115310509F09DC180917F03B8 -:105460008823A9F00E94380800917B0310917C03E7 -:1054700020917D0330917E03601B710B820B930B97 -:105480006F3F7F4F8F4F9F4710F40E94E00CD11069 -:1054900001C0F1100E94FB0C0E9464100E94C60E15 -:1054A00090914603891731F00E94C60E80934603FF -:1054B0000E94260E80919C03843009F00BCF83E07C -:1054C0008093E9008091E80082FF04CF8091E8009A -:1054D00090E085FF0CC00E94C90630E2C32ED12C9B -:1054E0008E010F5F1F4F882309F431C291E0809134 -:1054F000E8008B778093E800992309F4EBCEE981EB -:10550000E150E33108F087C2F0E0EF5EFB4C0C9411 -:10551000463281E0E1CD86E492E0F5CD80919C03B6 -:10552000843009F435C080E00E94260E8091F70295 -:10553000811109C0F092F702809173048170809309 -:10554000F6020E944A0E0E94E00C0E946410109223 -:1055500087030FB6F894A895809260000FBEE09282 -:10556000600083B7817F846083BF83B7816083BF1E -:105570007894889583B78E7F83BF0FB6F894A895EB -:1055800080916000886180936000109260000FBE7F -:1055900080919B03882361F00E949C24E2E5F3E064 -:1055A0008191811160C38CE593E08E179F07C1F74D -:1055B00080919C03853009F4B1CF0E9429110E948B -:1055C000C60E0E94260E1092F7028091F6028823E2 -:1055D00049F08091730481608093730460E0869544 -:1055E0000E9469160E940B0F7ECEB394FF0C98E0C8 -:1055F000B91292CE0F5F1F4F0A30110509F082CE0B -:105600008FEF8EA38FA318A60E9475238160782F39 -:105610009AA789A74EA15FA168A58AA50E94771FB6 -:105620009CCE0E947523909345038093440360E0D1 -:1056300080E00E9470080E94C60E809301030E94C1 -:10564000A30E882309F48EC04091FD025091FE0202 -:105650006091FF02709100032FB7F8948091880346 -:1056600090918903A0918A03B0918B032FBF841B73 -:10567000950BA60BB70B81339547A105B10540F0FB -:105680000E94E00C80918003882309F4E7CEDECEEF -:105690000E94FB0C61E080E00E94700860E086E6FA -:1056A00091E00E94BC1462E080E00E94700880914A -:1056B000A6030E94600C823009F446C0E8F58823F6 -:1056C00009F442C0813009F445C065E080E00E94E1 -:1056D000700860E089E891E00E94BC1466E080E018 -:1056E0000E947008609101036695617084E991E001 -:1056F0000E94BC1467E080E00E9470086091010382 -:105700006095617089E991E00E94BC1468E080E0D6 -:105710000E9470086091010362FB662760F98DE9C1 -:1057200091E00E94BC146BE080E00E94700889E563 -:1057300092E00E946706A6CF833081F0843029F67C -:1057400060E08DE791E003C060E081E791E00E94B6 -:10575000BC14BBCF60E087E791E0F9CF60E083E85D -:1057600091E0F5CF63E080E00E94700860E082EA9B -:1057700091E00E94BC1464E080E00E94700860E048 -:105780008AEA91E00E94BC1467E080E00E94700801 -:1057900089ED93E0CECF8091430361E070E0811109 -:1057A0005DCE082F10E02B01082E02C0440C551CC2 -:1057B0000A94E2F7A90144215521452B09F447C079 -:1057C0009091420390FD45C08295880F880F8074A8 -:1057D0008093580198013695279520935B01815C51 -:1057E0008093590110925C0124E630E047E050E0DC -:1057F00066E571E088E70E94492F892B09F02ECEDB -:10580000A80176E0440F551F7A95E1F78091420395 -:1058100080FD2DC046585B4F04E610E020E430E0E8 -:1058200060E488E70E94702F892B09F017CE0E9450 -:10583000FB0CC201809590954090780450907904BB -:1058400048225922509279044092780407CE8F5F03 -:10585000A8CF880F880F880F8093580110925B01A2 -:10586000895F8093590187E080935C01BDCFE2E0BE -:10587000F3E0DF012E2D1D922A95E9F788E192E0F1 -:105880009EA78DA700E112E0ADA5BEA56D91BEA7B4 -:10589000ADA7F80181918F01840F952F911D9C0177 -:1058A00026583B4F3CA72BA7E62FF0E0EE5FFC4FBE -:1058B00030E020E067E0662E621ACC24C394022E0A -:1058C00001C0CC0C0A94EAF7ABA4BCA490E0D501CB -:1058D0008D915D018C21662D691B6770762E062ED9 -:1058E000000C770BB82F01C0BB0F7A94EAF77B2E20 -:1058F0007195619571096770772701C086956A95E2 -:10590000EAF7782A8081782A70829F5F9830F9F6CA -:105910002F5F3F4F31962830310561F6E0E2F2E02B -:105920002DA53EA5E217F30709F0AECF04E610E07F -:1059300020E430E042E053E073CF8091F100D801E1 -:105940008D938D01B1E0CB1AD10809F4CFCD8091B0 -:10595000E80085FDF2CF8091E8008B778093E80026 -:105960000E94C906882399F3C1CD1A8289E08B83EE -:1059700011C08A81823009F48CC1833091F1813069 -:1059800009F049C00E9438080E944C326B837C8326 -:105990008D839E8380919C03843009F09BCC109171 -:1059A000E9001F709091EC00892F817090FD80E8D4 -:1059B000182B82E08093E9008091E80080FF0DC001 -:1059C00050E040E060E270E0CE0101960E94FA06ED -:1059D0008091E8008E778093E8001F701093E900B3 -:1059E00079CCFE013396D1018D911D018193BCE5E7 -:1059F0002B16B3E03B06B9F7CDCF8A81823059F43C -:105A00006B817C818D819E810E944C3286E290E088 -:105A10000E948632BFCF8FEF8983BCCF4C816B81D0 -:105A20008A810E94A80F9827892798279E838D83B3 -:105A3000B1CFCD80DE80DC24CD24DC248A810B81B3 -:105A4000E0E10E9F80011124F0EA8F9F000D111DEF -:105A500011248C8190E0880F991F080F191F6D2D5C -:105A6000C80187960E9486326C2DC8018896D0CFD7 -:105A70000E942E0F8FCF8A818138C1F060F4803868 -:105A800009F088CF20E04B81609175048091740407 -:105A90000E94EA147FCF8238E9F0833809F07ACF88 -:105AA00020E0409176046C818B81F2CF60E08B81A5 -:105AB0000E9469168B81811103C00E944A0E6ACF31 -:105AC0008091730481608093730460E086950E94E6 -:105AD000691660CF8B81809377045CCF8A8181388F -:105AE00099F030F4803809F055CF809176043FCF9B -:105AF000823891F0833809F04DCF809174048B8304 -:105B0000809175048C8346CF8091730480FF02C01E -:105B100086952DCF80E02BCF8091770428CF6091A0 -:105B200073047091740480917504909176040E94BE -:105B3000D81430CF80E18A832DCF1A8289EB17CF1A -:105B4000AA80BB80BA24AB24BA248E010F5F1F4FFA -:105B5000CC80C00ED12ED11CC501895B9C4F0C1589 -:105B60001D0509F417CF29EBA216B10458F40E94C1 -:105B70007232D80114968C93FFEFAF1ABF0A0F5FF1 -:105B80001F4FEACFF8011482F7CF0A811B8110273B -:105B9000012710279E012F5F3F4F5901CC80C00E77 -:105BA000D12ED11CC801895B9C4FC016D10609F4C7 -:105BB000F1CE093B110528F4D50114966C910E9491 -:105BC0008632BFEFAB1ABB0A0F5F1F4FEBCF0E94AD -:105BD0001E0FE0CE85E0AFCFAA80BB80BA24AB24F5 -:105BE000BA248E010F5F1F4FCC80C00ED12ED11C66 -:105BF000C5018796C016D10609F4CCCEE0E2AE16F8 -:105C0000E3E0BE0658F40E947232D80114968C93D9 -:105C1000FFEFAF1ABF0A0F5F1F4FEACFF8011482E0 -:105C2000F7CF0A811B811027012710279E012F5FC4 -:105C30003F4F5901CC80C00ED12ED11CC801879690 -:105C4000C016D10609F4A6CE003233E0130728F4BB -:105C5000D50114966C910E948632BFEFAB1ABB0A35 -:105C60000F5F1F4FEBCF09BD19BD09B400FEFDCF7B -:105C70008091D8008F7D8093D8008091E000826071 -:105C80008093E0008091E00081FDFCCF0E9429110B -:105C90008FCC86E290E00E9472321B821C821D82B1 -:105CA0008E8378CE1092B9008CE08093B80008956E -:105CB0009F92AF92BF92CF92DF92EF92FF920F939B -:105CC0001F93CF93DF93B82EEB010E9475236C01D5 -:105CD000EE24E394F12CC431D10560F025E0E22EEE -:105CE000F12CCF3FDC0731F0CE0164E170E00E947F -:105CF00012327B0184EAA82E94E8992E1092BC00FF -:105D0000A092BC000E9475238C018091BC0087FF8B -:105D10000DC08091B900887F883039F18091B90039 -:105D2000887F803111F10FEF1FEF09C00E947523AA -:105D3000801B910B8E159F0540F30EEF1FEFCF3F99 -:105D4000DC07E1F2C6010E9466238C179D07B0F2C2 -:105D5000C801DF91CF911F910F91FF90EF90DF90DD -:105D6000CF90BF90AF909F900895B092BB0090925B -:105D7000BC000E9475238C018091BC0087FF0AC083 -:105D80008091B900887F883111F0803461F610E08D -:105D900000E0DECF0E947523801B910B8E159F05BE -:105DA00058F3CBCF0F931F93CF93DF93EB018093E7 -:105DB000BB0084E88093BC000E9475238C01809115 -:105DC000BC0087FF11C02091B900287F81E090E0DE -:105DD000283211F490E080E0919581959109DF914E -:105DE000CF911F910F910895CF3FDC0741F30E949F -:105DF0007523801B910B8C179D0708F38EEF9FEF87 -:105E0000EECF0F931F93CF93DF93EC0184EC80933D -:105E1000BC000E9475238C018091BC0087FF08C0E4 -:105E20008091BB0090E0DF91CF911F910F91089579 -:105E3000CF3FDC0789F30E947523801B910B8C17E1 -:105E40009D0750F38EEF9FEFEECF0F931F93CF93ED -:105E5000DF93EC0184E88093BC000E9475238C01E1 -:105E60008091BC0087FF08C08091BB0090E0DF916B -:105E7000CF911F910F910895CF3FDC0789F30E94C6 -:105E80007523801B910B8C179D0750F38EEF9FEFAE -:105E9000EECFCF92DF92EF92FF920F931F93CF93AB -:105EA000DF936B018A017901B9010E94582EE60146 -:105EB0000C0D1D1DC017D10761F424E92093BC000F -:105EC000DF91CF911F910F91FF90EF90DF90CF90D6 -:105ED000089597FDF2CFB70189910E94D22EEACFA3 -:105EE000CF92DF92EF92FF920F931F93CF93DF93A6 -:105EF000C62F6A017901B8010E94582E97FD0CC087 -:105F0000B8018C2F0E94D22EE601EC0CFD1CCE15A0 -:105F1000DF0511F097FF0CC024E92093BC00DF914E -:105F2000CF911F910F91FF90EF90DF90CF90089548 -:105F3000B80189910E94D22EEACFCF92DF92EF92E0 -:105F4000FF920F931F93CF93DF93F82EE62EEA0173 -:105F50006901B8010E94582E97FD15C0B8018E2D19 -:105F60000E94D22E97FD0FC0B8018F2D81600E9434 -:105F7000582EF12CE12C21E0C21AD108EC14FD04BA -:105F800000F597FF11C024E92093BC0018161906EC -:105F900014F490E080E0DF91CF911F910F91FF907A -:105FA000EF90DF90CF900895C8010E94012F97FDD8 -:105FB00004C0FE01EE0DFF1D80832FEFE21AF20AEE -:105FC000DDCF97FDE0CFC8010E94252F97FDDBCFE5 -:105FD000CC0DDD1D8883D7CF84E98093BC00089564 -:105FE0008EE14B9B02C08150E1F74B9BFECF0895A1 -:105FF0005B9880E28A95F1F75B9A0895FC013BE09B -:106000003A95F1F798E020E080E031E040E14A95F0 -:10601000F1F7880F4B9B02C08160232742E04A952D -:10602000F1F7000040E14A95F1F7915079F790E1DE -:106030009A95F1F799B132E03A95F1F7000040E115 -:106040004A95F1F793FB992790F992272081920FB7 -:1060500090830895EF92FF920F931F93CF93DF9356 -:106060000F92CDB7DEB719828C017C01E60EF11CD0 -:106070000E151F0561F481E09981911180E00F9068 -:10608000DF91CF911F910F91FF90EF9008950E94A3 -:10609000F02FCE0101960E94FE2FF80181938F010F -:1060A000E7CF539A5B9A089553985B9AEB9AE9E687 -:1060B000F0E080818F73808308956150770B91E0C9 -:1060C00001C0990F6A95EAF720E031E0911108C00C -:1060D000222391F05B9A80E28A95F1F75B9808950C -:1060E000492F482339F05B9A232740E24A95F1F77C -:1060F0009695ECCF5B98F9CF5B98EDCFFF920F931D -:106100001F93CF93DF93EC018C01060F111DC01775 -:10611000D10731F4DF91CF911F910F91FF90089536 -:10612000F9900E94F82F68E08F2D0E945D30EFCF2C -:106130001F920F920FB60F921124EF92FF920F93BE -:106140001F932F933F934F935F936F937F938F93FF -:106150009F93AF93BF93EF93FF93CF93DF930F92F0 -:10616000CDB7DEB719820E94F02FCE0101960E94B2 -:10617000FE2FA82FA695A695A695282F22952570C7 -:106180009A2F9570290F922F937026952695920F2E -:10619000982797708981982B09F075C0A83008F06E -:1061A00072C080E18A95F1F75B9A539AB2E0BA9592 -:1061B000F1F700C05B98EA2EF12CEAE0AE9FD00127 -:1061C0001124AF5FBE4F1896ED91FC91199730974F -:1061D000B1F06091EC017091ED0116962D913C911A -:1061E0001797260F371F13968D919C911497680F60 -:1061F000791F15964C91159712968C9109958AE006 -:106200008E9DF0018F9DF00D1124EF5FFE4F658193 -:10621000662351F02091EC013091ED018681978148 -:10622000820F931F0E947E300E94F82FF0E1FA95B2 -:10623000F1F75B9853985B9A80E18A95F1F78AE0D1 -:106240008E9D80018F9D100D11240F5F1E4FD80170 -:1062500012966C911297662371F12091EC013091A6 -:10626000ED0113968D919C91820F931F0E942A300D -:10627000D801ED91FC91882311F088E001C082E003 -:1062800080830E94F02F0F90DF91CF91FF91EF91CB -:10629000BF91AF919F918F917F916F915F914F913E -:1062A0003F912F911F910F91FF90EF900F900FBE94 -:1062B0000F901F901895ED91FC91DFCF0F931F93D6 -:1062C000CF93DF93EC0108970CF0A9C08AE08C9F74 -:1062D000F0018D9FF00D1124EF5FFE4F80819181C1 -:1062E000892B09F49CC0F894539A5B9885E08A95B1 -:1062F000F1F700008C2F869585709C2F9570890F83 -:10630000982F937086958695890F8E0193E0000FE4 -:10631000111F9A95E1F7082B0E94F82F00C068E042 -:10632000802F0E945D30A0E1AA95F1F753985B9A07 -:106330004B9B27C087E090E04B9925C08AE08C9F5B -:1063400080018D9F100D11240F5F1E4FF801658194 -:106350006623A1F12091EC013091ED0186819781B6 -:10636000820F931F0E942A30811128C0539A5B9A92 -:10637000D801ED91FC9182E08083789482E090E0F6 -:1063800016C000C0D5CF0197B9F4539A5B9A8AE042 -:106390008C9FF0018D9FF00D1124EF5FFE4F019057 -:1063A000F081E02D81E08083789481E090E0DF91BE -:1063B000CF911F910F91089500C0BECF0E94F02F82 -:1063C000B0E2BA95F1F75B98539AE0E1EA95F1F7FC -:1063D0008AE08C9FF0018D9FF00D1124EF5FFE4F3E -:1063E0006281662351F02091EC013091ED018381AF -:1063F0009481820F931F0E947E300E94F82F8AE0C2 -:106400008C9FF0018D9FF00D1124EF5FFE4F0190E6 -:10641000F081E02D1082789490E080E0C8CF84E095 -:1064200090E0C5CFAA1BBB1B51E107C0AA1FBB1F31 -:10643000A617B70710F0A61BB70B881F991F5A9510 -:10644000A9F780959095BC01CD010895991B79E03D -:1064500004C0991F961708F0961B881F7A95C9F7F4 -:106460008095089597FB072E16F4009407D077FDCA -:1064700009D00E94123207FC05D03EF49095819518 -:106480009F4F0895709561957F4F0895EE0FFF1F00 -:106490000590F491E02D09946927962769277827BC -:1064A000872778270895FB01DC0102C005900D9233 -:1064B00041505040D8F70895FB01DC0104C08D9194 -:1064C0000190801921F441505040C8F7881B990B66 -:1064D0000895FB01DC0102C001900D924150504033 -:1064E000D8F70895F999FECF92BD81BDF89A992702 -:1064F00080B50895A6E1B0E044E050E00C94AC32E1 -:10650000A8E1B0E042E050E00C94AC32262FF999BB -:10651000FECF92BD81BDF89A019700B4021639F002 -:106520001FBA20BD0FB6F894FA9AF99A0FBE0895D3 -:106530000396272F0E9487320E948632252F0E94C1 -:106540008732242F0C9487320196272F0E9487329E -:106550000C948632DC01CB01FC01F999FECF06C018 -:10656000F2BDE1BDF89A319600B40D924150504011 -:10657000B8F708950E94C1326894B1110C94503359 -:1065800008950E94353388F09F5798F0B92F9927C6 -:10659000B751B0F0E1F0660F771F881F991F1AF00E -:1065A000BA95C9F714C0B13091F00E944F33B1E0F1 -:1065B00008950C944F33672F782F8827B85F39F0F0 -:1065C000B93FCCF3869577956795B395D9F73EF4A7 -:1065D00090958095709561957F4F8F4F9F4F08954F -:1065E000E89409C097FB3EF490958095709561956D -:1065F0007F4F8F4F9F4F9923A9F0F92F96E9BB2723 -:106600009395F695879577956795B795F111F8CF9E -:10661000FAF4BB0F11F460FF1BC06F5F7F4F8F4F09 -:106620009F4F16C0882311F096E911C0772321F0FF -:106630009EE8872F762F05C0662371F096E8862F97 -:1066400070E060E02AF09A95660F771F881FDAF7EE -:10665000880F9695879597F9089557FD9058440FA0 -:10666000551F59F05F3F71F04795880F97FB991FB1 -:1066700061F09F3F79F0879508951216130614066E -:10668000551FF2CF4695F1DF08C0161617061806FB -:10669000991FF1CF86957105610508940895E894D6 -:1066A000BB2766277727CB0197F908950E946933A6 -:1066B0000C94DA330E94CC3338F00E94D33320F0AC -:1066C000952311F00C94C3330C94C93311240C940A -:1066D00050330E942D3370F3959FC1F3950F50E016 -:1066E000551F629FF001729FBB27F00DB11D639F84 -:1066F000AA27F00DB11DAA1F649F6627B00DA11D2A -:10670000661F829F2227B00DA11D621F739FB00DCF -:10671000A11D621F839FA00D611D221F749F33273F -:10672000A00D611D231F849F600D211D822F762FD8 -:106730006A2F11249F5750409AF0F1F088234AF0B5 -:10674000EE0FFF1FBB1F661F771F881F9150504021 -:10675000A9F79E3F510580F00C94C3330C9450333D -:106760005F3FE4F3983ED4F3869577956795B795A8 -:10677000F795E7959F5FC1F7FE2B880F911D9695C2 -:10678000879597F9089597F99F6780E870E060E032 -:1067900008959FEF80EC089500240A9416161706BA -:1067A00018060906089500240A9412161306140602 -:1067B00005060895092E0394000C11F4882352F065 -:1067C000BB0F40F4BF2B11F460FF04C06F5F7F4F1D -:1067D0008F4F9F4F0895F894FFCF28102810311045 -:1067E00031103310311031103110281028103810AA -:1067F0003110311038101A124212E5134212E5130B -:1068000075129612E5139413A1138B1B8B1BE41BBB -:10681000E41B161CBE1BBE1BBE1B301CA11CB11CE6 -:10682000B11CB52CB92CFD2C0E2D192D382D3B2D5E -:106830006E2D8F2D0B2D0B2D9A2D9D2DA02DC52D41 -:08684000E72DEA2DEC2D112ECD -:1068480001460200000001000000004602000000AE -:106858000501000000460200000001060000004695 -:1068680002000000010700000046020408000000C2 -:106878000000004602080C0000000000004602016B -:1068880014000000000000013508760D550D510D6B -:106898004D0D340894920021007F220007018000EA -:1068A8000044004444012D2D2D4C415945522D2DB5 -:1068B8000042617365200047616D6520005261697F -:1068C8007365004C6F776572002D2D2D4C4F434B2F -:1068D8002D2D2D0043617073004E756D005363724A -:1068E8006C002020534F4C4152002054454D5045D8 -:1068F800535400818283E200E900EA00B500B60043 -:10690800B700CD008301CC008A01920194012102D5 -:10691800230224022502260227022A02B300B40019 -:106928006F0070000704070907030708C00266978D -:10693800C634F40000000000F5F6F731333236FFB4 -:1069480000FF0100010000FFFF0000010001FF003F -:10695800000810182028303838302820181008006F -:1069680000010202020202020202020240227B49E4 -:0C697800012701AC00B40BCD0BED0B00AF +:102B200026553C4F412F1B3A08F04AEA6F2D0E9470 +:102B3000B808C394D6CF861BE9CF20E00C94EA14E2 +:102B4000CF93C82F0E94600C823069F138F488233B +:102B5000A9F0813011F18C2FCF910895833039F194 +:102B60008430C9F740E56FEF8AED0E949D15809192 +:102B70000001882381F310925E010CC04CE36CEDE0 +:102B800080E00E949D15809100018823A1F381E0DF +:102B900080935E010E940B0FDECF40E56FEF8CEF5C +:102BA0000E949D15D8CF40E56FEF80E5F9CF40E555 +:102BB0006FEF80EAF5CF0E94A0158093A9030C94D3 +:102BC0008C0B8091A903982F9670963019F4886029 +:102BD0000C94DB15877FFCCF21E030E001C0220F91 +:102BE0008A95EAF720958091A90382230C94DB153E +:102BF00021E030E001C0220F8A95EAF78091A90315 +:102C0000822B0C94DB15E6E7F4E0438128E0421BBD +:102C100008F440E021E0628181810C94EA14E6E747 +:102C2000F4E0438128E0420F08F44FEF21E0628195 +:102C300081810C94EA14E6E7F4E0628128E0621BEB +:102C400008F460E021E0438181810C94EA14E6E716 +:102C5000F4E0628128E0620F08F46FEF21E0438125 +:102C600081810C94EA14E6E7F4E0818121E043815C +:102C7000628188500C94EA14E6E7F4E0818121E057 +:102C800043816281885F0C94EA1480917A048823DE +:102C900019F0815080937A046091760470917704E2 +:102CA00080917804909179040C94D81480917A04DE +:102CB000833018F48F5F80937A046091760470916A +:102CC000770480917804909179040C94D8149091B1 +:102CD000760490FF26C0917081111CC09260909381 +:102CE000760480917603816080937603662351F0A9 +:102CF00060917604709177048091780490917904C2 +:102D00000E94D814409179046091780480917704EE +:102D10000C949D158C3010F09661E1CF880F982BA4 +:102D2000DECF0895809176048695815009F48BE07A +:102D300061E00C9467168091760486958F5F8C30E5 +:102D400008F081E061E00C9467168091760480FFC2 +:102D500007C0869582588F77893010F40C949B16A3 +:102D600061E082E00C946716E6E7F4E083E080839C +:102D700011828FEF82838AEA83831482A4E7B3E00F +:102D800012968C911297836012968C936081718158 +:102D9000828193810C94D8140E94E72E40E060E079 +:102DA00080E00C94EB0E69EE7EEF90E080E00E94F4 +:102DB000393360E082E090E00E941B3360E083E002 +:102DC00090E00E941B331092A80260E084E090E043 +:102DD0000E941B3360E082E290E00E941B3360E0BF +:102DE00085E090E00E941B3360E086E090E00E9466 +:102DF0001B336FEF87E090E00E941B3340E050E010 +:102E0000BA0188E090E00E942D3360E08DE090E010 +:102E10000E941B3340E050E0BA0188E190E00E943C +:102E20002D3360E087E190E00E941B3340E050E0EA +:102E3000BA018CE190E00E942D3370E060E080E206 +:102E400090E00E94393340E050E0BA0188E190E020 +:102E50000E942D3380E00E94810F0E94990F40E074 +:102E600050E0BA018FE090E00E942D3340E050E046 +:102E7000BA0183E190E00C942D330F931F93CF930D +:102E8000DF9300D000D0CDB7DEB74091D80250918B +:102E9000D9026091DA027091DB022FB7F894809129 +:102EA0008B0390918C03A0918D03B0918E032FBF63 +:102EB000841B950BA60BB70B84369105A105B105B4 +:102EC00088F10E94A30E882379F10E9438086E5F72 +:102ED0007F4F8F4F9F4F69837A838B839C83809131 +:102EE0002D0190912E018D539D4F40912C0150E06A +:102EF0004530510510F044E050E0BE016F5F7F4F58 +:102F00000E94FE3284E090E00E94F331892BD9F4D4 +:102F10000E9438086093D8027093D9028093DA0235 +:102F20009093DB0281E010C00E9438080091E50216 +:102F30001091E6022091E7023091E802600F711FC4 +:102F4000821F931FC4CF80E00F900F900F900F90BF +:102F5000DF91CF911F910F9108958F929F92AF9221 +:102F6000BF92CF92DF92EF92FF920F931F93CF9376 +:102F7000DF93EB0188809980AA80BB809FB7F8948B +:102F8000C0908B03D0908C03E0908D03F0908E0363 +:102F90009FBFC818D908EA08FB0894E6C916D104EF +:102FA000E104F10410F4442311F1E82E082E000C82 +:102FB000FF089AE08902F0011124EE5FFE4F838141 +:102FC00094818D539D4F428150E00417150708F4FA +:102FD000A801B9010E94FE32C7010E94F331892B7A +:102FE000A1F40E943808688379838A839B8381E0F7 +:102FF000DF91CF911F910F91FF90EF90DF90CF90D5 +:10300000BF90AF909F908F90089580E0F1CF0F9385 +:103010001F93CF93DF930F92CDB7DEB780918203DA +:1030200089832091D70290E041E02817190609F41E +:1030300040E001E010E09E012F5F3F4F60EE72E044 +:1030400086E00E94AD170F90DF91CF911F910F91F5 +:1030500008950F931F93CF93DF93CDB7DEB72897D3 +:103060000FB6F894DEBF0FBECDBF85E0E6E7F4E013 +:10307000DE01119601900D928A95E1F7809174031B +:1030800090917503A09176038E839F83A88741E07A +:103090008885811101C040E008E010E09E012F5FAB +:1030A0003F4F6CED72E085E00E94AD1781111092E8 +:1030B000760328960FB6F894DEBF0FBECDBFDF9122 +:1030C000CF911F910F9108956F927F928F929F924F +:1030D000AF92BF92CF92DF92EF92FF920F931F9326 +:1030E000CF93DF930F92CDB7DEB7862E5A016901D9 +:1030F000682E880F7708C3010E94F331892B09F0ED +:1031000088C08AE0869DF001879DF00D1124EE5F56 +:10311000FE4F458150E04115510511F041E050E06E +:103120008AE0869DF001879DF00D1124EE5FFE4F31 +:10313000668177816D537D4FCE0101960E94FE32EC +:10314000F50140815181628173812FB7F89480919C +:103150008B0390918C03A0918D03B0918E032FBFB0 +:10316000841B950BA60BB70B84369105A105B10501 +:1031700040F4B701C8010E9487089981891709F4B2 +:103180004FC0082C000C9908C4010E94F331892B10 +:1031900091F0B12C8B2D0F90DF91CF911F910F915A +:1031A000FF90EF90DF90CF90BF90AF909F908F9067 +:1031B0007F906F9008958AE0889DF001899DF00DC1 +:1031C0001124EE5FFE4F458150E0E416F50608F449 +:1031D000A7018AE0889DF001899DF00D1124EE5F22 +:1031E000FE4F668177816D537D4FC6010E94FE328E +:1031F000B701C8010E94870899818913CACF0E942C +:103200003808F5016083718382839383BB24B39470 +:10321000C1CFB12CA701B801C6010E94FE32BACFBE +:10322000BB24B394F7CFCF92DF92EF92FF920F932C +:103230001F93CF93DF9300D000D00F92CDB7DEB7AE +:103240006B0185E0E82EF12C04EC12E09E012F5F6B +:103250003F4F4BEB52E061E080E00E94641888230E +:1032600049F095E0FE013196A6EBB2E001900D9297 +:103270009A95E1F795E0E6EBF2E0D60101900D9228 +:103280009A95E1F70F900F900F900F900F90DF91AC +:10329000CF911F910F91FF90EF90DF90CF90089505 +:1032A00090E080E00E941533893E9E4F11F40C940B +:1032B0003D1080E008951F920F920FB60F921124D7 +:1032C0002F933F934F935F936F937F938F939F932E +:1032D000AF93BF93CF93DF93EF93FF93D091E90028 +:1032E000DF708091EC00C82FC17080FDC0E81092A3 +:1032F000E9008091F000877F8093F00078940E942D +:1033000034111092E9008091F00088608093F00001 +:10331000CD2BCF70C093E900FF91EF91DF91CF915A +:10332000BF91AF919F918F917F916F915F914F91DD +:103330003F912F910F900FBE0F901F9018951F92E5 +:103340000F920FB60F9211242F933F934F935F93D9 +:103350006F937F938F939F93AF93BF93EF93FF935D +:103360008091E10082FF09C08091E20082FF05C0E8 +:103370008091E1008B7F8093E1008091DA0080FFF3 +:1033800024C08091D80080FF20C08091DA008E7F19 +:103390008093DA008091D90080FF9DC080E189BDD3 +:1033A00082E189BD09B400FEFDCF81E080939F03D7 +:1033B00080919203811109C00E94AA060E9475079C +:1033C0008091E20084608093E2008091E10080FFC0 +:1033D00017C08091E20080FF13C08091E2008E7FD1 +:1033E0008093E2008091E20080618093E20080910E +:1033F000D80080628093D80019BC85E080939F0339 +:103400008091E10084FF2BC08091E20084FF27C0FF +:1034100080E189BD82E189BD89B5982F917080FFD7 +:10342000FBCF8091D8008F7D8093D8008091E10000 +:103430008F7E8093E1008091E2008F7E8093E20096 +:103440008091E20081608093E2008091A003882354 +:1034500009F447C084E080939F0380919F0380918B +:10346000E10083FF27C08091E20083FF23C08091A9 +:10347000E100877F8093E10082E080939F031092B8 +:10348000A0038091E1008E7F8093E1008091E200B3 +:103490008E7F8093E2008091E20080618093E20061 +:1034A00042E060E080E00E9443078091F000886085 +:1034B0008093F000FF91EF91BF91AF919F918F9119 +:1034C0007F916F915F914F913F912F910F900FBE20 +:1034D0000F901F90189519BC10929F0310929203A1 +:1034E00074CF8091E30087FD93E090939F03B5CF65 +:1034F00078941F921FB61F9211248F939F93AF93BE +:10350000BF9380918B0390918C03A0918D03B09118 +:103510008E030196A11DB11D80938B0390938C03A4 +:10352000A0938D03B0938E03BF91AF919F918F9124 +:103530001F901FBE1F9018959C014FB7F894809163 +:103540008B0390918C03A0918D03B0918E034FBF9C +:10355000821B930B08952FB7F89480918B03909161 +:103560008C03A0918D03B0918E032FBF0895AF926D +:10357000BF92DF92EF92FF920F931F93CF93DF934F +:10358000CDB7DEB761970FB6F894DEBF0FBECDBFE3 +:103590004C87888B998BE52ED62EF72E5E0127E07F +:1035A000A20EB11C85E0F50111928A95E9F7809190 +:1035B00073038A3008F095C0809171039091720373 +:1035C0000E949C1A089708F48CC004E610E025E0DD +:1035D00030E0A50164E084E10E943230892B09F0DB +:1035E000DBC0109273038B8587FDD1C0E894E0F8AF +:1035F00080916F0390917003009709F0C2C08F8192 +:103600009885891708F091C0981B892F41E0209177 +:103610005F0130916001889FC001112455E0589FDF +:10362000F001599FF00D1124E29FB001E39F700D4E +:10363000F29F700D1124660F672F661F770B71952F +:10364000442319F071956195710980916D039091F2 +:103650006E03680F791F89859A85891708F068C0FD +:10366000981B892F41E0889FC001112455E0589F85 +:10367000F001599FF00D1124E29FC001E39F900DCE +:10368000F29F900D1124880F892F881F990B919517 +:10369000442319F091958195910920916B03309104 +:1036A0006C03820F931F603871050CF444C06F5790 +:1036B000710970936E0360936D033FE7D32E8038DA +:1036C00091050CF44BC08F57910990936C03809334 +:1036D0006B039FE7F92E0E94AB1A909372038093BD +:1036E0007103ED86DE86FF8686E0FE013C96DE01F4 +:1036F000119601900D928A95E1F729813A814B81CB +:103700005C816D817E8180E090E061960FB6F894D7 +:10371000DEBF0FBECDBFDF91CF911F910F91FF9004 +:10372000EF90DF90BF90AF900895891B40E06FCF7E +:10373000891B40E098CF6138FFEF7F074CF4615858 +:103740007F4F70936E0360936D0321E8D22EB7CF45 +:10375000D62E10926E0310926D03B1CF81382FEFE9 +:1037600092074CF481589F4F90936C0380936B03A6 +:1037700081E8F82EB0CFF82E10926C0310926B03F4 +:10378000AACF01979093700380936F03A4CF68949E +:10379000E0F884E190E0F6CF809173038F5F80932F +:1037A000730399CF5F926F927F928F929F92AF92A5 +:1037B000BF92CF92DF92EF92FF920F931F93CF931E +:1037C000DF9300D000D00F92CDB7DEB76C01FC01C3 +:1037D00083819481892B31F08081918189238F3F6E +:1037E00009F080C60F900F900F900F900F90DF910F +:1037F000CF911F910F91FF90EF90DF90CF90BF90EE +:10380000AF909F908F907F906F905F9008950E94EF +:10381000DB0F182F682F89819A810E945F0B6981C5 +:103820007A81812F0E94CE0F8C01F601828188233C +:1038300009F44CC6C80182519F45409708F0BEC5A7 +:103840008FEF93E00E940733025197E4A92E93E093 +:10385000B92E8111C7CF01113AC01C821B82662488 +:1038600063948AE0582E85010F5F1F4FC5010E94A7 +:10387000073389831A82882309F4B4CF9FEF980F06 +:103880009330A0F58A83698232E0A30EB11CC8018F +:103890000E9407338B83882309F4A4CF8E010F5F26 +:1038A0001F4FF80120812223F1F2213009F058C086 +:1038B000918182819130E1F40E5F1F4F6AE070E0E8 +:1038C000893311F460E570E00E94D60E17C0A11490 +:1038D000F4E0BF0609F486CFC5010E9407338111C9 +:1038E00001C001502FEFA21AB20AB5CF5801D6CFAE +:1038F000923039F40E5F1F4F0E94EC0B0F5F1F4F89 +:10390000D0CF933029F40E5F1F4F0E94B30BF6CF38 +:10391000943019F00F5F1F4FF1CF0E5F1F4F30E053 +:1039200020E0B8016F5F7F4FF80141818053990B10 +:103930008A30910550F02150310900F38FE99FE062 +:103940000197F1F700C00000F6CF529EF001539EA0 +:10395000F00D11249C012E0F3F1F842F8B01E1CF0E +:10396000E22FF0E0E754FE4F7490822F8695869503 +:10397000869590E0FC01E755FE4FE4902770F12C0E +:10398000022E02C0F594E7940A94E2F7E1E0EE22F9 +:10399000FF24FC01E756FE4FC490D12C022E02C03A +:1039A000D594C7940A94E2F7F1E0CF22DD24FC011C +:1039B000E757FE4F8490912C02C0959487942A95E6 +:1039C000E2F721E082229924E114F10419F081EE5A +:1039D0000E94EC0BC114D10419F086EE0E94EC0B8E +:1039E00039E36AE070E0731202C060E570E0872D91 +:1039F0000E94D60ECD2819F086EE0E94B30BEF2858 +:103A000019F081EE0E94B30B892809F477CF6AE0A0 +:103A100070E08CE259CF81E00E94F81503C081E08C +:103A20000E94EC150F900F900F900F900F90DF9168 +:103A3000CF911F910F91FF90EF90DF90CF90BF90AB +:103A4000AF909F908F907F906F905F900C94E11556 +:103A500082E0E2CF043F110509F409C108F00BC16F +:103A6000053E110509F0D3C480934E0210934D0218 +:103A700000934C02CCC40438FFE51F0709F46EC064 +:103A8000C0F402383FE5130709F44FC003384FE58F +:103A9000140709F0BCC4882309F4B9C481EE0E945C +:103AA000EC0B83EE0E94EC0B80E50E94EC0B80E5B2 +:103AB00049C006385FE5150709F4C0C008F4A7C07F +:103AC0000738EFE51E0709F0A2C4882309F48ACE5F +:103AD00087E20E94EC0BFFEF28EA31E0F150204032 +:103AE0003040E1F700C000008CE20E94EC0B87E25E +:103AF0000E94B30B8BE10E94EC0B4FEF50EE80E085 +:103B0000415050408040E1F700C000008CE20E942C +:103B1000B30B8BE10E94B30B40E56FEF84EB0E9487 +:103B20009D1581E080934A025DCE882309F46FC41D +:103B300081EE0E94EC0B83EE0E94EC0B8FE40E945E +:103B4000EC0B8FE40E94B30B83EE0E94B30B81EE6B +:103B50000E94B30B5CC480934B0288CF882379F119 +:103B600080914B02882349F080914C020E94B30B54 +:103B700080EE0E94EC0B8AE20CC080914E028823FA +:103B8000D1F380914C020E94B30B80EE0E94EC0BAB +:103B90008CE40F900F900F900F900F90DF91CF91CA +:103BA0001F910F91FF90EF90DF90CF90BF90AF905B +:103BB0009F908F907F906F905F900C94EC0B8AE2B7 +:103BC0000E94B30B8CE40E94B30B80EE0E94B30BF7 +:103BD00080914B02811105C080914E02882309F427 +:103BE00001CE80914C02D5CF882309F410C4809176 +:103BF0004A02882309F40BC40E94AB1A9093AF02C7 +:103C00008093AE0210924A021092010100C48823F0 +:103C100071F180915E01811104C0809100018823BF +:103C200039F010925E01109200010E940B0FEFC359 +:103C300081E080935E0180930001F7CF8823B9F083 +:103C400080914902882349F080EE90E090936001D2 +:103C500080935F0110924902E8CF86E690E090934E +:103C6000600180935F0181E080934902DECF61E0D3 +:103C70000E94710CCCC362E0FBCF64E0F9CF013647 +:103C80003DE5130709F4D8C30E3D1C4509F012C1E8 +:103C90000F900F900F900F900F90DF91CF911F9189 +:103CA0000F91FF90EF90DF90CF90BF90AF909F90DB +:103CB0008F907F906F905F900C94D3168091E90263 +:103CC000806106304CE5140709F491C08091E90247 +:103CD000886007301C4508F48AC08091E902806240 +:103CE00086C00C308CE5180709F49CC070F48091F4 +:103CF000E9028C600A30ECE51E0709F478C008F48C +:103D00008BC08091E9028E7F72C08091E902877F2B +:103D10000E302CE5120709F46AC08091E9028B7F0E +:103D20000F301C4508F463C08091E9028F7E5FC0AC +:103D30000C3F4CE5140709F479C068F504318CE5B3 +:103D4000180709F48BC080F40231ECE51E0709F472 +:103D500075C08091E9028F7B03311C4508F447C090 +:103D60008091E902837F43C00A3F2CE5120709F4E2 +:103D700045C008F049C005311C4509F084C3809155 +:103D8000E90282FB992790F921E0922790FB82F9C2 +:103D900090FB83F92CC001155DE5150709F454C0AB +:103DA00088F48091EA0283600E3F9CE5190749F18F +:103DB0008091EA028D7F0F3F1C4518F18091EA0245 +:103DC0008C7F1FC00230FDE51F0709F456C008F4C0 +:103DD0004EC001361D4509F056C39091E902892F66 +:103DE0008F7E94FF806103C08091E902816080939F +:103DF000E90249C38091E9028460F9CF8091EA0227 +:103E000081608093EA023FC38091EA028260F9CF29 +:103E10008091E9028064EBCF0E9429118091E90230 +:103E20008068E5CF8091E9028D7FE1CF8091EA0241 +:103E30008E7FE7CF8091E9028F7DD9CF0E94291133 +:103E40008091E9028F77D3CF8091EA02982F9095E5 +:103E500091708E7F892B90FB81F9D3CF0E9429111D +:103E60009091E902892F97FB87F98058C0CF61E0D4 +:103E70008EE090E00E941B3306C360E0F9CF809192 +:103E8000A70282720A3C4CE5140709F4F7C008F057 +:103E900063C0053CECE51E0709F4DCC0A0F5033C5B +:103EA0002CE5120709F4CCC008F0CFC0023C1C4539 +:103EB00009F476C0F60100811181992309F4FEC04E +:103EC000C8010E94DB0FF82E682FC8010E945F0B0B +:103ED000B8018F2D0E94CE0F0E94AC09182FB82E6A +:103EE000F60122814581342F32953F70892F8295CA +:103EF0008F70E82EF12C8C3008F018C1F701E656CF +:103F0000FB4C0C94DB32073C5CE5150709F4ACC0B4 +:103F100008F4A5C0083CFCE51F0709F4AAC043E06B +:103F200056E16FE076E1093C1C4521F60F900F90B9 +:103F30000F900F900F90DF91CF911F910F91FF90F5 +:103F4000EF90DF90CF90BF90AF909F908F907F9039 +:103F50006F905F900C949D08043D3CE51307A0F41E +:103F60000E3C4CE5140708F03DCC0C3C5CE5150715 +:103F700009F489C045E456E166E576E10D3C1C454F +:103F8000A8F261E081E046C0053DECE51E0709F4BA +:103F900029CC08F47DC00D351D4509F423CC8ACF0A +:103FA0008091760480FF31C08E7F8093760460918B +:103FB00076047091770480917804909179040E943E +:103FC000D814809176038160809376033FEF40E7B9 +:103FD00052E0315040405040E1F700C000000F90E7 +:103FE0000F900F900F900F90DF91CF911F910F9135 +:103FF000FF90EF90DF90CF90BF90AF909F908F9009 +:104000007F906F905F900C94A30D816080937604F5 +:1040100061E086950F900F900F900F900F90DF91B9 +:10402000CF911F910F91FF90EF90DF90CF90BF90B5 +:10403000AF909F908F907F906F905F900C946716D9 +:1040400042E956E16BE976E171CF4BE956E162E96D +:1040500076E16CCF43E356E16CE376E167CF4CE366 +:1040600056E163E376E162CF4BE156E167E276E148 +:104070005DCF47E256E16BE176E158CF4FE056E184 +:1040800063E076E153CF46E556E165E476E14ECF55 +:104090000F900F900F900F900F90DF91CF911F9185 +:1040A0000F91FF90EF90DF90CF90BF90AF909F90D7 +:1040B0008F907F906F905F900C94A516C8010E941E +:1040C000370BF82E05CF092F0F70907F11F0029556 +:1040D000007F812F2223C9F0002369F090E2910F25 +:1040E000983010F011110BC08091A702082B00939B +:1040F000A7020E94160B812F0E94EC0B17C0809123 +:10410000A602082B0093A602F4CF0E94B30B002353 +:1041100069F00095105E183010F0B11027C0809142 +:10412000A70208230093A7020E94160B98E0E91A41 +:10413000F108E4E0EE16F10408F054CB0E94C60E3C +:104140000F900F900F900F900F90DF91CF911F91D4 +:104150000F91FF90EF90DF90CF90BF90AF909F9026 +:104160008F907F906F905F900C94260E8091A602A6 +:1041700008230093A602D8CF892F8F70907F9032AA +:1041800011F08295807FF1E0BF120CC0222329F04C +:10419000333060F60E94A90BC9CF323038F60E9446 +:1041A0009E0BC4CF222341F03323A1F340FFA3CFC2 +:1041B0004F70F6014583EECF332389F3193309F0AD +:1041C000F5C0FFEF27EE33E0F15020403040E1F73B +:1041D00000C00000812F0E94B30BA8CF892F8695C5 +:1041E0008695837061F0813009F0A0CF812F9370A4 +:1041F000211102C090E080E00E94440897CF812FF7 +:104200009370211102C090E080E00E945A088ECF86 +:10421000892F8370A1F5211189CF812F82958695F1 +:104220008770880F880F412F4F70082E01C0440FF0 +:104230000A94EAF7212F207114FF07C02FE030E025 +:1042400001C0220F8A95EAF720959695969593706E +:10425000923081F0822F842B933030F48091A80229 +:10426000913029F0242B82230E949A0B5FCF842B5C +:10427000822BFACF242B8091A8028227F5CF869536 +:10428000222311F0892F8170882309F44FCF812FC9 +:10429000829586958770880F880F412F4F70082E62 +:1042A00001C0440F0A94EAF7212F207114FF07C0C0 +:1042B0002FE030E001C0220F8A95EAF7209596950D +:1042C00096959370923081F0822F842B933030F446 +:1042D0008091A903913029F0242B82230E94DB15C1 +:1042E00025CF842B822BFACF242B8091A903822700 +:1042F000F5CF092F0F70222329F0802F0E94F81587 +:10430000812F48CF812F0E949E0B802F0E94EC1599 +:104310000DCF812FE1EF1E1789F1E11750F0F0EF7B +:104320001F17B9F02223B1F13111E5CE892F8F711A +:1043300029C042EF141749F153EF1513F3CF80E072 +:10434000222361F29F7181E001C0880F9A95EAF7FC +:10435000C5CF222379F0323008F0E8CE292F2F7113 +:1043600081E090E001C0880F2A95EAF79091A903B7 +:104370008927B4CF333008F0D9CEF0CF892F8F7191 +:10438000222321F20E94F815D1CE892F8F7122238A +:10439000C9F3BCCF332379F0893341F48FEF97EE23 +:1043A000E3E081509040E040E1F712CF8FE39CE9D9 +:1043B0000197F1F70DCF892F8F71A8CF0031FFE55D +:1043C0001F0709F428CB01312FE5120709F440CB70 +:1043D0000E943808609300037093010380930203E6 +:1043E00090930303F6018281063F110509F445CC41 +:1043F00008F041CB013E110509F4ADCB08F02ACB02 +:1044000098012E5131092330310508F4EDCBF60126 +:104410009281992309F433CD0330FDE51F0708F09D +:104420002ECC0A3F2CE5120738F4980122503C4567 +:104430002431310508F028CC0E9456109093EA02EE +:104440008093E90200314CE5140709F4F3CC08F03D +:104450006FCC08308CE5180709F4DACC08F041CCB1 +:104460000430ECE51E0709F4C5CC08F027CC023077 +:104470002CE5120709F4B8CC8091E9028260033080 +:104480001C4509F4B4CC6091E9021091EA0284E081 +:1044900090E00E941B33612F82E290E00E941B3368 +:1044A0000F900F900F900F900F90DF91CF911F9171 +:1044B0000F91FF90EF90DF90CF90BF90AF909F90C3 +:1044C0008F907F906F905F900C94291100313FE5A1 +:1044D000130709F4A4CA01314FE5140709F082CF8C +:1044E00082E09ECA85E0DE01119601900D928A95C8 +:1044F000E1F7F601228189819A81211188C90E9400 +:10450000370B182F8CC91F93CF93DF9380917202C2 +:10451000807FA9F480916F02882389F08091A402A2 +:10452000D091730260916D0270916E02A091700241 +:10453000B0917102C62FC72316E0D81304C0DF91D3 +:10454000CF911F91089590E0109711F0CF3F19F48B +:1045500001968770F2CF189F9001199F300D11249A +:10456000F901EC58FD4F41814713F2CF40814613CA +:10457000EFCF42814111ECCF438154814A1B5B0B49 +:10458000403A510528F7809172028F7080618093C4 +:104590007202F901E758FD4F80818F70806180833E +:1045A0008DE692E00E94D21BDF91CF911F910C9477 +:1045B0002D0BAF92BF92CF92DF92EF92FF920F93AB +:1045C0001F93CF93DF93CDB7DEB761970FB6F89403 +:1045D000DEBF0FBECDBF8C0185E0F801DE011D9668 +:1045E00001900D928A95E1F7F801E2808DE6A82E00 +:1045F00082E0B82E609170027091710261157105B0 +:1046000009F432C190916D0240916E02892F84238A +:104610008F3F09F429C120813181C380D480F0907B +:104620006F02F601E61BF70BFF2009F4E8C080914A +:104630007202582F507FE03AF10508F0ABC05111DB +:1046400077C0FE2C431321C092131FC0E1101DC080 +:104650008F70806180937202C5010E94D21B80918D +:104660007202F80185838F2D61960FB6F894DEBF34 +:104670000FBECDBFDF91CF911F910F91FF90EF90B3 +:10468000DF90CF90BF90AF900895CD2829F0822F72 +:1046900083238F3F09F003C180E0F82FF170DF2EF4 +:1046A00080FF3CC08091A4024091730256E08413C5 +:1046B00015C02D873E878D859E850E940A10292F63 +:1046C00022952F702230F0F0243018F59F70F1F011 +:1046D000F8019581907FD1F4D12C1EC090E0589FB5 +:1046E000F001599FF00D1124EC58FD4F61813613F4 +:1046F00006C06081261303C06281E6120FC00196D6 +:104700008770D5CF9F7011F0882331F3805E883099 +:1047100018F3C8010E94D21BFD2CA5CFEE2009F48E +:10472000A2CF80917202816080937202F12C9BCFA4 +:10473000431306C0921304C0F801EE2009F479C0B7 +:10474000C8010E941610882309F1EE20F9F080912B +:104750007202803270F020916D0230916E023887C3 +:104760002F831986DB86CA868C87CE0107960E9426 +:10477000D21B86E0F801ADE6B2E001900D928A9579 +:10478000E1F70E948322FF24F3946DCFC8010E94B9 +:10479000D21BF9CF51110AC08DE692E00E94D21BC4 +:1047A00086E0F50111928A95E9F7C0CF43130FC057 +:1047B00092130DC0E1100BC0F8018583C8010E945F +:1047C000D21B86E0F50111928A95E9F74CCFC8011A +:1047D0000E9416108823D1F2EE20C1F2809172025D +:1047E000803238F220916D0230916E023A83298333 +:1047F0001B82DD82CC828E83CE010196B8CFE03A57 +:10480000F105F8F6FE2CEE2009F243131FC09213B7 +:104810001DC08091720280FD10C0982F907F69F0BA +:10482000F8018583903F31F0982F907F905F8F70D3 +:10483000892B8583C8010E94D21B86E0F801ADE672 +:10484000B2E001900D928A95E1F70DCFC8010E9468 +:10485000161081118ECF8091720281608093720256 +:10486000C8010E94D21BFFCEEE2009F48FCFC801F1 +:104870000E941610F82E882309F488CF86E0F801EC +:10488000ADE6B2E001900D928A95E1F780916D025C +:1048900090916E020E940A100E948322E4CE81E071 +:1048A0008E25FBCE1F93CF93DF93CDB7DEB76797EF +:1048B0000FB6F894DEBF0FBECDBF4B8B5C8B6D8BFC +:1048C0007E8B8F8B61111092A6021A8A198A85E05D +:1048D000FE017396DE011D9601900D928A95E1F717 +:1048E00086E0FE013D96DE01179601900D928A95B5 +:1048F000E1F7CE0107960E94D922882389F016E0BD +:104900008091A40290917302891349C067960FB6F3 +:10491000F894DEBF0FBECDBFDF91CF911F910895F8 +:1049200086E0FE013796DE01119601900D928A9580 +:10493000E1F78A859B85892B11F38F8198858923DF +:104940008F3FE9F22091730230E0C9010196877030 +:1049500099274091A4024817190671F40E94291161 +:10496000109273021092A40286E0EDE6F2E0DF01FD +:104970001D928A95E9F7C3CF96E0929FD001939F4D +:10498000B00D1124AC58BD4FFE01319601900D922F +:104990009A95E1F7809373020E942D0BB0CF819F0F +:1049A000C00111248C589D4F0E94D922882309F4FC +:1049B000ADCF8091A40290E00196877099278093F3 +:1049C000A4029ECFEF92FF920F931F93CF93DF939A +:1049D00000D000D00F92CDB7DEB7162FE82EF12C05 +:1049E000C701880F991F662339F188549E4FFC0137 +:1049F000808191819A83898301E00B830E94AB1AA5 +:104A00008160782F9D838C83F701E95BFD4F01273F +:104A1000110F102B108349815A816B818D810F906A +:104A20000F900F900F900F90DF91CF911F910F91EA +:104A3000FF90EF900C9452248C549E4FD8CFCF927D +:104A4000DF92EF92FF920F931F93CF93DF930F921A +:104A5000CDB7DEB7EE24E394F12C0AEC12E09E0110 +:104A60002F5F3F4F4FEB52E063E082E00E946418FB +:104A7000082F882321F1C090F8028C2D90E09C0132 +:104A800025503D4F79011981F9018081181BD12EE4 +:104A900080E00AC0DA94F70180818F5F808360E054 +:104AA0008C2D0E94E224802F1D14A4F3912F17FD5A +:104AB00090E0191B11110EC081110E94140B802F60 +:104AC0000F90DF91CF911F910F91FF90EF90DF90AA +:104AD000CF9008951F5FF70180818150808361E04E +:104AE0008C2D0E94E224802FE5CFEF92FF920F934E +:104AF0001F93CF93DF9300D000D00F92CDB7DEB7D6 +:104B000087E4E82E82E0F82E10E000E0F7018191C2 +:104B10007F018823C9F08695F80139F1E854FE4FEA +:104B2000808191819A8389831B820E94AB1A816064 +:104B3000782F9D838C83F7013197108249815A81A8 +:104B40006B818D810E9452240E5F1F4F043011052E +:104B5000E9F60F900F900F900F900F90DF91CF918B +:104B60001F910F91FF90EF900895EC54FE4FD8CF16 +:104B70009F92AF92BF92CF92DF92EF92FF920F93EC +:104B80001F93CF93DF93CDB7DEB72F970FB6F8946F +:104B9000DEBF0FBECDBF8E010F5F1F4F8AE0D80171 +:104BA0001D928A95E9F78FEEC82E81E0D82EF12C60 +:104BB000E12CAA24A394B12CF60181916F018F3FBF +:104BC00009F444C0F894E82FE295EF70F0E021A1D9 +:104BD0008F70A50102C0440F551F8A95E2F7CA01E4 +:104BE000922F982B91A392A18095892382A30E9452 +:104BF000500900C0E9EFF1E0912C31E021912F3F05 +:104C000009F479C0A22FA295AF70B0E090968C9174 +:104C100090E02F7002C0959587952A95E2F780FD68 +:104C20006AC0832F982A330F52E0E130F50731F73D +:104C3000F601319780818F3F11F00E94520980EA7E +:104C40008A95F1F7F801EE0DFF1D90829FEFE91AAA +:104C5000F90AA5E0EA16F10409F0AECF4AE050E007 +:104C6000B8018BEE92E00E94F1327C01892B41F079 +:104C70008AE0F801ABEEB2E001900D928A95E1F77F +:104C80001091F602E114F104C1F181E08093AB02CE +:104C90000E94AB1A9093AA028093A9028091A90264 +:104CA0009091AA020E949C1A069778F0ABEEB2E0AF +:104CB000E12FF0E0EB5AFC4F80EF92E02D91219331 +:104CC0008A179B07D9F71092AB0281E090E0EF289A +:104CD000C1F02F960FB6F894DEBF0FBECDBFDF91A7 +:104CE000CF911F910F91FF90EF90DF90CF90BF90E9 +:104CF000AF909F90089580E095CF8091AB02811195 +:104D0000CDCF0E94A30ED82EE091F602AE01455FF2 +:104D10005F4F7A01882309F4BEC085E0DA011D9255 +:104D20008A95E9F70E2F10E00B5A1C4F8091E40290 +:104D30008A3008F07CC043E159E1B701C8010E9404 +:104D40005F0E882309F496C04FE155E2B701C80110 +:104D50000E945F0E882309F48DC04DE357E1B7012F +:104D6000C8010E945F0E882309F484C049E258E11B +:104D7000B701C8010E945F0E882309F47BC047E099 +:104D800058E1B701C8010E945F0E882309F472C080 +:104D90001092E4028091F50290E045E050E0B70106 +:104DA0008B5A9C4F0E94F13221E02093B402892B50 +:104DB00009F053C0D12C0E94752580910101811109 +:104DC00011C08091AE029091AF020E949C1A813A6C +:104DD0009F4040F040E56FEF8CEF0E949D1581E011 +:104DE000809301010E9475254091000350910103B9 +:104DF00060910203709103032FB7F89480918B03A5 +:104E000090918C03A0918D03B0918E032FBF841BD2 +:104E1000950BA60BB70B81369A4EA105B10528F06C +:104E200040E060E080E00E94EB0E8D2D52CF80913B +:104E3000AC029091AD020E949C1A843F914008F010 +:104E40007ACF8091B402882309F4B4CF85E0F701CA +:104E500011928A95E9F71092B402A091F502B0E0A0 +:104E6000AB5ABC4F85E0FE013B9601900D928A95AE +:104E7000E1F7A1CF8091E4028F3F31F08F5F809303 +:104E8000E4028A3008F486CF0E94AB1A9093AD02F8 +:104E90008093AC02D6CFF0E0EB5AFC4FF89485E05B +:104EA000A4ECB2E001900D928A95E1F765E070E024 +:104EB00084EC92E00E9487088093C3020E9450090C +:104EC000F894E091FE02F0E0E550FD4F80818B8781 +:104ED0008093CA0261E070E0C7010E948708809356 +:104EE000C9020E945009F894C090CB02D090CC0225 +:104EF000E090CD02F090CE028091B0029091B1028C +:104F0000A091B202B091B302C816D906EA06FB0618 +:104F1000D1F0C092B002D092B102E092B202F0920F +:104F2000B3020E94A30E81110EC00E943808C61A57 +:104F3000D70AE80AF90AC092E502D092E602E092A6 +:104F4000E702F092E8020E945009F8948091D6029C +:104F50008823F1F080FF0DC08091CF0280FF25C033 +:104F60009091760491609093760460E086950E941B +:104F700067168091D60281FF09C020E04091D202DD +:104F80006091D1028091D0020E94EA141092D60260 +:104F90000E945009F8948091D702882349F00E941A +:104FA000FB0C0E94500980E094CE0E944A0EE1CF93 +:104FB0000E94E00CF6CF1F921FB61F9211248F9310 +:104FC0009F93AF93BF9380918A03811113C0809107 +:104FD0008B0390918C03A0918D03B0918E03419629 +:104FE000A11DB11D80938B0390938C03A0938D031F +:104FF000B0938E03BF91AF919F918F911F901FBE71 +:105000001F901895CDB7DEB7AE970FB6F894DEBFF8 +:105010000FBECDBF84B7877F84BF0FB6F894A89525 +:1050200080916000886180936000109260000FBEE4 +:1050300080E890E00FB6F89480936100909361004F +:105040000FBE85B7806885BF85B7806885BF8EE451 +:1050500099E090933D0280933C020E94AA060E9430 +:1050600075078091E20084608093E20078948091DB +:105070009F038823A1F01091E9001F709091EC002C +:10508000892F817090FD80E8182B1092E9008091A3 +:10509000E80083FD0E9434111F701093E90082E044 +:1050A00084BD93E095BD9AEF97BD80936E001092FA +:1050B000E5021092E6021092E7021092E8020E94C6 +:1050C0003D10811102C00E94990F0E94A30E80938F +:1050D000480180914801882309F47CC01092610145 +:1050E00082E2809362010E94A30E81110E94E63049 +:1050F000809148018091480195E0811190E0909362 +:10510000F60285E0891B8093F5020FEE11E094EF23 +:10511000E92E91E0F92ED8018D918D018F3F11F08C +:105120000E945209E016F106B1F709EF11E081E0A3 +:10513000E82E82E0F82EF80181918F018F3F11F067 +:105140000E945209E016F106B1F78AE0E5E5F3E0C6 +:10515000DF01282F1D922A95E9F7EBEEF2E0DF013F +:105160001D928A95E9F70E945019811102C00E9490 +:10517000D31682E090E00E94073380934A030E9496 +:1051800056109093EA028093E9020E94B825EFE757 +:10519000FBEB3197F1F700C000000E94B825809129 +:1051A000550380FF1BC06FEF7FEF90E080E00E940F +:1051B000393387E797E7909301088093000888E1E7 +:1051C0009AE00FB6F894A895809360000FBE909374 +:1051D0006000FFCF82E28093610183CF83E090E0A3 +:1051E0000E9407330E949A0B8091A9030E94A01588 +:1051F0000E94A30E811102C00E94E9300E94A30EFA +:1052000081111EC283E08093450380E4809377037D +:105210000E94E72E6DE070E08CE492E00E94B00CFA +:10522000892BE9F58091450363E070E081FD0AC2B6 +:1052300089E492E00E94B00C892B89F56DE070E062 +:1052400089E392E00E94B00C892B49F50E9438084E +:105250006058774C8E4F9F4F60937E0370937F030F +:105260008093800390938103EDE7F4E080E094E085 +:10527000DF019C011D9221503040E1F7F0937E0840 +:10528000E0937D088FEF9FEF90937C0480937B04E5 +:1052900081E0809383038093820310924603809180 +:1052A000F702811136C00E945019811104C00E947A +:1052B000D3160E94B41688E090E00E940F336093EA +:1052C00076047093770480937804909379048091A6 +:1052D00076038360809376036E7F71F40E94B41628 +:1052E00088E090E00E940F33609376047093770417 +:1052F00080937804909379040E94A20880917604A8 +:1053000080FF04C060E086950E94671681E080936C +:10531000F70280914801811106C084E9809356010B +:1053200082E98093550120915601A22FA295AF707A +:10533000B0E091963C9191972F7081E090E0BC0194 +:10534000022E01C0660F0A94EAF7462F40954323C8 +:1053500091964C93919792963C919297362B929678 +:105360003C93929740915501E42FE295EF70F0E065 +:1053700031A14F70042E01C0880F0A94EAF7982FCC +:105380009095932391A392A1892B82A390968C91BF +:1053900090E002C0959587952A95E2F7817020A14B +:1053A00030E002C0359527954A95E2F792E020FF5C +:1053B00090E0892B8093FF029091480181E098272B +:1053C0009093FE02891B8093F8020E94CC1660E045 +:1053D0008AE00E94671681E00E94DB1580EE90E073 +:1053E0009093600180935F010E940B0F89E491E02C +:1053F0009093870380938603A8E18A2E912CB0E4D2 +:10540000EB2E80919F03FF24F39400E112E185309D +:1054100009F465C10E94B825D82E81110E94380870 +:10542000F5E52F2EF3E03F2EEBE4F3E0D10110E0A1 +:1054300000E0A02ECD9081918C1509F472C18C25CD +:10544000B12CFF24F3949F2D982309F465C10E9489 +:10545000A30E882399F0B9A2AAA2CF2081E009F473 +:1054600080E08BA30E94AB1A8160782F9DA38CA350 +:1054700049A15AA16BA18DA10E945224F801E55BBC +:10548000FC4F8081F826F0828091FF02E82FEE0F1A +:10549000EE0F90915601A92FA295AF70B0E09096B3 +:1054A0002C9130E09F7002C0359527959A95E2F7D0 +:1054B0002170332790915501A92FA295AF70B0E0CC +:1054C00090964C9150E09F7002C0559547959A95E3 +:1054D000E2F7CA018170992740FF02C082E090E0A4 +:1054E000822B8E2B8093FF021091FE028F70E82F8B +:1054F000F0E0EF5FFD4F80819091FD02890F809376 +:10550000FD02F12C84306CF0E12FF0E0E550FD4F0E +:1055100080818F5F808360E0812F0E94E224FF24DE +:10552000F3948091FD028D3F6CF4E12FF0E0E550A3 +:10553000FD4F80818150808361E0812F0E94E224B1 +:10554000FF24F3948091FD02082E000C990B64E077 +:1055500070E00E94C7328093FD02F1100E94140B8C +:1055600080918303882351F18091470390914803F0 +:105570000E949C1AC29708F0EBC020917B043091E6 +:105580007C042115310509F09DC180918203882397 +:10559000A9F00E94380800917E0310917F032091AA +:1055A000800330918103601B710B820B930B6F3F63 +:1055B0007F4F8F4F9F4710F40E94E00CD11001C025 +:1055C000F1100E94FB0C0E9464100E94C60E909184 +:1055D0004903891731F00E94C60E809349030E9447 +:1055E000260E80919F03843009F00BCF83E08093D7 +:1055F000E9008091E80082FF04CF8091E80090E00C +:1056000085FF0CC00E94C90630E2C32ED12C8E014A +:105610000F5F1F4F882309F431C291E08091E800A9 +:105620008B778093E800992309F4EBCEE981E15070 +:10563000E33108F087C2F0E0EA55FB4C0C94DB3212 +:1056400081E0E1CD86E492E0F5CD80919F03843046 +:1056500009F435C080E00E94260E8091FA02811183 +:1056600009C0F092FA028091760481708093F90269 +:105670000E944A0E0E94E00C0E94641010928A035D +:105680000FB6F894A895809260000FBEE09260007B +:1056900083B7817F846083BF83B7816083BF789441 +:1056A000889583B78E7F83BF0FB6F894A8958091B5 +:1056B0006000886180936000109260000FBE80914E +:1056C0009E03882361F00E94B825E5E5F3E081910F +:1056D00081115EC38FE593E08E179F07C1F780911C +:1056E0009F03853009F4B1CF0E9429110E94C60E94 +:1056F0000E94260E1092FA028091F902882349F046 +:105700008091760481608093760460E086950E94A3 +:1057100067160E940B0F7ECEB394FF0C98E0B9126F +:1057200092CE0F5F1F4F0A30110509F082CE8FEF26 +:105730008EA38FA318A60E94AB1A8160782F9AA718 +:1057400089A74EA15FA168A58AA50E9452249CCE7C +:105750000E94AB1A909348038093470360E080E077 +:105760000E9470080E94C60E809304030E94A30E3C +:10577000882309F48EC04091000350910103609189 +:105780000203709103032FB7F89480918B039091DB +:105790008C03A0918D03B0918E032FBF841B950BBA +:1057A000A60BB70B81339547A105B10540F00E94C8 +:1057B000E00C80918303882309F4E7CEDECE0E94BB +:1057C000FB0C61E080E00E94700860E087E691E0F9 +:1057D0000E94BC1462E080E00E9470088091A903DE +:1057E0000E94600C823009F446C0E8F5882309F471 +:1057F00042C0813009F445C065E080E00E94700835 +:1058000060E08AE891E00E94BC1466E080E00E94BB +:105810007008609104036695617085E991E00E94CB +:10582000BC1467E080E00E947008609104036095FA +:1058300061708AE991E00E94BC1468E080E00E94F7 +:1058400070086091040362FB662760F98EE991E0BD +:105850000E94BC146BE080E00E94700889E592E031 +:105860000E946706A6CF833081F0843029F660E07D +:105870008EE791E003C060E082E791E00E94BC14F3 +:10588000BBCF60E088E791E0F9CF60E084E891E089 +:10589000F5CF63E080E00E94700860E083EA91E069 +:1058A0000E94BC1464E080E00E94700860E08BEA13 +:1058B00091E00E94BC1467E080E00E94700889EDCE +:1058C00093E0CECF8091460361E070E081115DCE20 +:1058D000082F10E02B01082E02C0440C551C0A941E +:1058E000E2F7A90144215521452B09F447C09091C5 +:1058F000450390FD45C08295880F880F8074809382 +:10590000590198013695279520935C01815C80931D +:105910005A0110925D0124E630E047E050E067E56F +:1059200071E088E70E94DE2F892B09F02ECEA801B6 +:1059300076E0440F551F7A95E1F78091450380FD8D +:105940002DC043585B4F04E610E020E430E060E4F3 +:1059500088E70E940530892B09F017CE0E94FB0CC6 +:10596000C2018095909540907B0450907C04482221 +:10597000592250927C0440927B0407CE8F5FA8CFBF +:10598000880F880F880F8093590110925C01895FFE +:1059900080935A0187E080935D01BDCFE5E0F3E09D +:1059A000DF012E2D1D922A95E9F789E192E09EA74D +:1059B0008DA701E112E0ADA5BEA56D91BEA7ADA773 +:1059C000F80181918F01840F952F911D9C0123581F +:1059D0003B4F3CA72BA7E62FF0E0EB5FFC4F30E0FE +:1059E00020E067E0662E621ACC24C394022E01C028 +:1059F000CC0C0A94EAF7ABA4BCA490E0D5018D913D +:105A00005D018C21662D691B6770762E062E000CB9 +:105A1000770BB82F01C0BB0F7A94EAF77B2E7195F4 +:105A2000619571096770772701C086956A95EAF7D5 +:105A3000782A8081782A70829F5F9830F9F62F5FEC +:105A40003F4F31962830310561F6E1E2F2E02DA5B5 +:105A50003EA5E217F30709F0AECF04E610E020E41C +:105A600030E045E053E073CF8091F100D8018D9391 +:105A70008D01B1E0CB1AD10809F4CFCD8091E800B7 +:105A800085FDF2CF8091E8008B778093E8000E943B +:105A9000C906882399F3C1CD1A8289E08B8311C08E +:105AA0008A81823009F48AC1833091F1813009F012 +:105AB00049C00E9438080E94E1326B837C838D8349 +:105AC0009E8380919F03843009F09BCC1091E90064 +:105AD0001F709091EC00892F817090FD80E8182B49 +:105AE00082E08093E9008091E80080FF0DC050E0E3 +:105AF00040E060E270E0CE0101960E94FA068091DB +:105B0000E8008E778093E8001F701093E90079CC4D +:105B1000FE013396D1018D911D018193BFE52B16B6 +:105B2000B3E03B06B9F7CDCF8A81823059F46B815F +:105B30007C818D819E810E94E13286E290E00E940C +:105B40001B33BFCF8FEF8983BCCF4C816B818A81A0 +:105B50000E94A80F9827892798279E838D83B1CF0D +:105B6000CD80DE80DC24CD24DC248A810B81E0E141 +:105B70000E9F80011124F0EA8F9F000D111D11244A +:105B80008C8190E0880F991F080F191F6D2DC80197 +:105B900087960E941B336C2DC8018896D0CF0E9437 +:105BA0002E0F8FCF8A818138B1F058F4803809F0F8 +:105BB00088CF4B8160917804809177040E949D1575 +:105BC00080CF8238E1F0833809F07BCF40917904AF +:105BD0006C818B81F3CF60E08B810E9467168B8193 +:105BE000811103C00E944A0E6CCF809176048160BF +:105BF0008093760460E086950E94671662CF8B8161 +:105C000080937A045ECF8A81813899F030F48038AD +:105C100009F057CF8091790441CF823891F08338D1 +:105C200009F04FCF809177048B83809178048C8327 +:105C300048CF8091760480FF02C086952FCF80E008 +:105C40002DCF80917A042ACF6091760470917704E9 +:105C500080917804909179040E94D81432CF80E129 +:105C60008A832FCF1A8289EB19CFAA80BB80BA24EE +:105C7000AB24BA248E010F5F1F4FCC80C00ED12EF3 +:105C8000D11CC501895B9C4F0C151D0509F419CF6A +:105C900029EBA216B10458F40E940733D8011496D8 +:105CA0008C93FFEFAF1ABF0A0F5F1F4FEACFF801C7 +:105CB0001482F7CF0A811B811027012710279E012C +:105CC0002F5F3F4F5901CC80C00ED12ED11CC8018F +:105CD000895B9C4FC016D10609F4F3CE093B110530 +:105CE00028F4D50114966C910E941B33BFEFAB1AB8 +:105CF000BB0A0F5F1F4FEBCF0E941E0FE2CE85E065 +:105D0000AFCFAA80BB80BA24AB24BA248E010F5F28 +:105D10001F4FCC80C00ED12ED11CC5018796C01656 +:105D2000D10609F4CECEE0E2AE16E3E0BE0658F4AA +:105D30000E940733D80114968C93FFEFAF1ABF0A65 +:105D40000F5F1F4FEACFF8011482F7CF0A811B8142 +:105D50001027012710279E012F5F3F4F5901CC804C +:105D6000C00ED12ED11CC8018796C016D10609F4E9 +:105D7000A8CE003233E0130728F4D50114966C91B5 +:105D80000E941B33BFEFAB1ABB0A0F5F1F4FEBCF55 +:105D900009BD19BD09B400FEFDCF8091D8008F7DEB +:105DA0008093D8008091E00082608093E000809131 +:105DB000E00081FDFCCF0E94291191CC86E290E0A9 +:105DC0000E9407331B821C821D828E837ACE109222 +:105DD000B9008CE08093B80008959F92AF92BF9273 +:105DE000CF92DF92EF92FF920F931F93CF93DF93A7 +:105DF000B82EEB010E94AB1A6C01EE24E394F12C57 +:105E0000C431D10560F025E0E22EF12CCF3FDC0754 +:105E100031F0CE0164E170E00E94A7327B0184EA98 +:105E2000A82E94E8992E1092BC00A092BC000E946B +:105E3000AB1A8C018091BC0087FF0DC08091B90026 +:105E4000887F883039F18091B900887F803111F1E5 +:105E50000FEF1FEF09C00E94AB1A801B910B8E152C +:105E60009F0540F30EEF1FEFCF3FDC07E1F2C601C5 +:105E70000E949C1A8C179D07B0F2C801DF91CF9148 +:105E80001F910F91FF90EF90DF90CF90BF90AF9058 +:105E90009F900895B092BB009092BC000E94AB1AF4 +:105EA0008C018091BC0087FF0AC08091B900887F77 +:105EB000883111F0803461F610E000E0DECF0E94FE +:105EC000AB1A801B910B8E159F0558F3CBCF0F9308 +:105ED0001F93CF93DF93EB018093BB0084E8809303 +:105EE000BC000E94AB1A8C018091BC0087FF11C0DE +:105EF0002091B900287F81E090E0283211F490E0F1 +:105F000080E0919581959109DF91CF911F910F913B +:105F10000895CF3FDC0741F30E94AB1A801B910B21 +:105F20008C179D0708F38EEF9FEFEECF0F931F9313 +:105F3000CF93DF93EC0184EC8093BC000E94AB1AFA +:105F40008C018091BC0087FF08C08091BB0090E06D +:105F5000DF91CF911F910F910895CF3FDC0789F317 +:105F60000E94AB1A801B910B8C179D0750F38EEF8C +:105F70009FEFEECF0F931F93CF93DF93EC0184E855 +:105F80008093BC000E94AB1A8C018091BC0087FFFB +:105F900008C08091BB0090E0DF91CF911F910F91DD +:105FA0000895CF3FDC0789F30E94AB1A801B910B49 +:105FB0008C179D0750F38EEF9FEFEECFCF92DF92BD +:105FC000EF92FF920F931F93CF93DF936B018A01A0 +:105FD0007901B9010E94ED2EE6010C0D1D1DC017BF +:105FE000D10761F424E92093BC00DF91CF911F9188 +:105FF0000F91FF90EF90DF90CF90089597FDF2CF33 +:10600000B70189910E94672FEACFCF92DF92EF927A +:10601000FF920F931F93CF93DF93C62F6A017901ED +:10602000B8010E94ED2E97FD0CC0B8018C2F0E9484 +:10603000672FE601EC0CFD1CCE15DF0511F097FF74 +:106040000CC024E92093BC00DF91CF911F910F91E8 +:10605000FF90EF90DF90CF900895B80189910E9452 +:10606000672FEACFCF92DF92EF92FF920F931F93A9 +:10607000CF93DF93F82EE62EEA016901B8010E9462 +:10608000ED2E97FD15C0B8018E2D0E94672F97FD4C +:106090000FC0B8018F2D81600E94ED2EF12CE12CF4 +:1060A00021E0C21AD108EC14FD0400F597FF11C0DD +:1060B00024E92093BC001816190614F490E080E03F +:1060C000DF91CF911F910F91FF90EF90DF90CF90D4 +:1060D0000895C8010E94962F97FD04C0FE01EE0DA1 +:1060E000FF1D80832FEFE21AF20ADDCF97FDE0CF8C +:1060F000C8010E94BA2F97FDDBCFCC0DDD1D888330 +:10610000D7CF84E98093BC0008958EE14B9B02C0F9 +:106110008150E1F74B9BFECF08955B9880E28A9512 +:10612000F1F75B9A0895FC013BE03A95F1F798E0AE +:1061300020E080E031E040E14A95F1F7880F4B9B89 +:1061400002C08160232742E04A95F1F7000040E158 +:106150004A95F1F7915079F790E19A95F1F799B155 +:1061600032E03A95F1F7000040E14A95F1F793FBF0 +:10617000992790F992272081920F90830895EF92AA +:10618000FF920F931F93CF93DF930F92CDB7DEB79C +:1061900019828C017C01E60EF11C0E151F0561F4BD +:1061A00081E09981911180E00F90DF91CF911F9153 +:1061B0000F91FF90EF9008950E948530CE010196D7 +:1061C0000E949330F80181938F01E7CF539A5B9A35 +:1061D000089553985B9AEB9AE9E6F0E080818F731B +:1061E000808308956150770B91E001C0990F6A9503 +:1061F000EAF720E031E0911108C0222391F05B9A88 +:1062000080E28A95F1F75B980895492F482339F089 +:106210005B9A232740E24A95F1F79695ECCF5B987D +:10622000F9CF5B98EDCFFF920F931F93CF93DF933E +:10623000EC018C01060F111DC017D10731F4DF915D +:10624000CF911F910F91FF900895F9900E948D308A +:1062500068E08F2D0E94F230EFCF1F920F920FB6A1 +:106260000F921124EF92FF920F931F932F933F935E +:106270004F935F936F937F938F939F93AF93BF934E +:10628000EF93FF93CF93DF930F92CDB7DEB71982D1 +:106290000E948530CE0101960E949330A82FA695CA +:1062A000A695A695282F229525709A2F9570290FCF +:1062B000922F937026952695920F98279770898133 +:1062C000982B09F075C0A83008F072C080E18A955B +:1062D000F1F75B9A539AB2E0BA95F1F700C05B9878 +:1062E000EA2EF12CEAE0AE9FD0011124AE5FBE4F42 +:1062F0001896ED91FC9119973097B1F06091ED01EE +:106300007091EE0116962D913C911797260F371F2D +:1063100013968D919C911497680F791F15964C9147 +:10632000159712968C9109958AE08E9DF0018F9DAC +:10633000F00D1124EE5FFE4F6581662351F0209130 +:10634000ED013091EE0186819781820F931F0E94AB +:1063500013310E948D30F0E1FA95F1F75B98539874 +:106360005B9A80E18A95F1F78AE08E9D80018F9D8E +:10637000100D11240E5F1E4FD80112966C911297CA +:10638000662371F12091ED013091EE0113968D910C +:106390009C91820F931F0E94BF30D801ED91FC9118 +:1063A000882311F088E001C082E080830E9485305C +:1063B0000F90DF91CF91FF91EF91BF91AF919F919E +:1063C0008F917F916F915F914F913F912F911F918D +:1063D0000F91FF90EF900F900FBE0F901F901895A8 +:1063E000ED91FC91DFCF0F931F93CF93DF93EC01DF +:1063F00008970CF0A9C08AE08C9FF0018D9FF00DEA +:106400001124EE5FFE4F80819181892B09F49CC09D +:10641000F894539A5B9885E08A95F1F700008C2FE9 +:10642000869585709C2F9570890F982F937086950F +:106430008695890F8E0193E0000F111F9A95E1F761 +:10644000082B0E948D3000C068E0802F0E94F2303F +:10645000A0E1AA95F1F753985B9A4B9B27C087E080 +:1064600090E04B9925C08AE08C9F80018D9F100D94 +:1064700011240E5F1E4FF80165816623A1F1209162 +:10648000ED013091EE0186819781820F931F0E946A +:10649000BF30811128C0539A5B9AD801ED91FC91CD +:1064A00082E08083789482E090E016C000C0D5CF6F +:1064B0000197B9F4539A5B9A8AE08C9FF0018D9F03 +:1064C000F00D1124EE5FFE4F0190F081E02D81E090 +:1064D0008083789481E090E0DF91CF911F910F91BC +:1064E000089500C0BECF0E948530B0E2BA95F1F7A2 +:1064F0005B98539AE0E1EA95F1F78AE08C9FF0010E +:106500008D9FF00D1124EE5FFE4F6281662351F0E6 +:106510002091ED013091EE0183819481820F931FD0 +:106520000E9413310E948D308AE08C9FF0018D9F74 +:10653000F00D1124EE5FFE4F0190F081E02D1082EE +:10654000789490E080E0C8CF84E090E0C5CFAA1BAB +:10655000BB1B51E107C0AA1FBB1FA617B70710F04E +:10656000A61BB70B881F991F5A95A9F78095909580 +:10657000BC01CD010895991B79E004C0991F9617BD +:1065800008F0961B881F7A95C9F78095089597FBA8 +:10659000072E16F4009407D077FD09D00E94A73289 +:1065A00007FC05D03EF4909581959F4F0895709516 +:1065B00061957F4F0895EE0FFF1F0590F491E02D38 +:1065C00009946927962769277827872778270895C8 +:1065D000FB01DC0102C005900D9241505040D8F7FC +:1065E0000895FB01DC0104C08D910190801921F414 +:1065F00041505040C8F7881B990B0895FB01DC01FE +:1066000002C001900D9241505040D8F70895F99979 +:10661000FECF92BD81BDF89A992780B50895A6E175 +:10662000B0E044E050E00C944133A8E1B0E042E037 +:1066300050E00C944133262FF999FECF92BD81BDD5 +:10664000F89A019700B4021639F01FBA20BD0FB6B0 +:10665000F894FA9AF99A0FBE08950396272F0E948C +:106660001C330E941B33252F0E941C33242F0C94B3 +:106670001C330196272F0E941C330C941B33DC0122 +:10668000CB01FC01F999FECF06C0F2BDE1BDF89A3D +:10669000319600B40D9241505040B8F708950E94D1 +:1066A00056336894B1110C94E53308950E94CA33AF +:1066B00088F09F5798F0B92F9927B751B0F0E1F0C3 +:1066C000660F771F881F991F1AF0BA95C9F714C073 +:1066D000B13091F00E94E433B1E008950C94E433BA +:1066E000672F782F8827B85F39F0B93FCCF38695AC +:1066F00077956795B395D9F73EF490958095709509 +:1067000061957F4F8F4F9F4F0895E89409C097FB85 +:106710003EF490958095709561957F4F8F4F9F4F78 +:106720009923A9F0F92F96E9BB279395F6958795BC +:1067300077956795B795F111F8CFFAF4BB0F11F47F +:1067400060FF1BC06F5F7F4F8F4F9F4F16C0882326 +:1067500011F096E911C0772321F09EE8872F762F5C +:1067600005C0662371F096E8862F70E060E02AF09D +:106770009A95660F771F881FDAF7880F9695879589 +:1067800097F9089557FD9058440F551F59F05F3FF2 +:1067900071F04795880F97FB991F61F09F3F79F043 +:1067A00087950895121613061406551FF2CF4695C5 +:1067B000F1DF08C0161617061806991FF1CF869547 +:1067C0007105610508940895E894BB27662777272B +:1067D000CB0197F908950E94FE330C946F340E9408 +:1067E000613438F00E94683420F0952311F00C9445 +:1067F00058340C945E3411240C94E5330E94C23357 +:1068000070F3959FC1F3950F50E0551F629FF00103 +:10681000729FBB27F00DB11D639FAA27F00DB11D1C +:10682000AA1F649F6627B00DA11D661F829F2227A5 +:10683000B00DA11D621F739FB00DA11D621F839F2C +:10684000A00D611D221F749F3327A00D611D231F02 +:10685000849F600D211D822F762F6A2F11249F5750 +:1068600050409AF0F1F088234AF0EE0FFF1FBB1F53 +:10687000661F771F881F91505040A9F79E3F510512 +:1068800080F00C9458340C94E5335F3FE4F3983E69 +:10689000D4F3869577956795B795F795E7959F5FBC +:1068A000C1F7FE2B880F911D9695879597F908954E +:1068B00097F99F6780E870E060E008959FEF80ECB3 +:1068C000089500240A941616170618060906089556 +:1068D00000240A9412161306140605060895092EBC +:1068E0000394000C11F4882352F0BB0F40F4BF2B2B +:1068F00011F460FF04C06F5F7F4F8F4F9F4F08956B +:10690000F894FFCF281028103110311033103110B7 +:106910003110311028102810381031103110381073 +:106920001A124212E5134212E51375129612E5137C +:106930009413A11363206320BC20BC20EE2096207A +:106940009620962008217921892189214C2D502DCE +:10695000942DA52DB02DCF2DD22D032E242EA22D7A +:10696000A22D2F2E322E352E5A2E7C2E7F2E812EAA +:02697000A62E51 +:106972000101460200000001000000004602000082 +:1069820000050100000046020000000106000000B0 +:106992004602000000010700000046020408000051 +:1069A200000000004602080C000000000000460241 +:1069B2000114000000000000013508760D550D514C +:1069C2000D4D0D340894920021007F2200070180B2 +:1069D200000044004444012D2D2D4C415945522DB7 +:1069E2002D0042617365200047616D652000526190 +:1069F200697365004C6F776572002D2D2D4C4F43E6 +:106A02004B2D2D2D0043617073004E756D00536345 +:106A1200726C002020534F4C4152002054454D507F +:106A2200455354000704070907030708818283E2DC +:106A320000E900EA00B500B600B700CD008301CC42 +:106A4200008A0192019401210223022402250226D6 +:106A52000227022A02B300B4006F007000C302666C +:106A620097C634F40000000000F5F6F731333236F1 +:106A7200FF00FF0100010000FFFF0000010001FF15 +:106A82000000081018202830383830282018100844 +:106A92000000010202020202020202020240227B02 +:0C6AA20049012701AC00B40BCD0BED0B3B :00000001FF diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h index 2cc9de5b2b6c..015d6810e380 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h @@ -75,3 +75,5 @@ along with this program. If not, see . #ifdef VIA_ENABLE #define DYNAMIC_KEYMAP_LAYER_COUNT 5 #endif + +#define D2SKATE_MACRO_ENABLE //Enable Destiny 2 hunter skate macro (+224) diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c index f890fdb3857b..908437d6181a 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/encoder.c @@ -38,7 +38,7 @@ action_exec(encoder_event); } - void matrix_scan_user(void) { encoder_action_unregister(); } + //void matrix_scan_user(void) { encoder_action_unregister(); } //Included in keymap.c instead bool encoder_update_user(uint8_t index, bool clockwise) { encoder_action_register(index, clockwise); diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c index 9c05c6e85122..10e5b3431bd0 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c @@ -161,9 +161,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { if (trackball_is_scrolling) { mouse_report.h = mouse_report.x; #ifndef PIMORONI_TRACKBALL_INVERT_X - mouse_report.v = 0.3*mouse_report.y; //Multiplier to lower scrolling sensitivity + mouse_report.v = 0.2*mouse_report.y; //Multiplier to lower scrolling sensitivity #else - mouse_report.v = 0.3*-mouse_report.y; //invert vertical scroll direction + mouse_report.v = 0.2*-mouse_report.y; //invert vertical scroll direction #endif mouse_report.x = mouse_report.y = 0; } @@ -185,6 +185,41 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { } #endif + + +void matrix_scan_user(void) { + #ifdef ENCODER_ENABLE + encoder_action_unregister(); + #endif + + #ifdef SUPER_ALT_TAB_ENABLE + if (is_alt_tab_active) { //Allows for use of super alt tab. + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } + #endif + #ifdef D2SKATE_MACRO_ENABLE + if (D2SKATE_reset == false) { //Check if Destiny 2 skate timer is activated + if (timer_elapsed(D2SKATE_TIMER) > 4000) { + rgblight_sethsv_noeeprom(252,255,80); //Set regular game layer colour + D2SKATE_reset = true; + #ifdef HAPTIC_ENABLE + DRV_pulse(12); //trp_click + #endif + } + } + #endif + #ifdef ENCODER_ENABLE + encoder_action_unregister(); + #endif + if (timer_elapsed32(oled_timer) > 60000) { //60000ms = 60s + pimoroni_trackball_set_rgbw(0,0,0, 0x00); //Turn off Pimoroni trackball LED when computer is idle for 1 minute. Would use suspend_power_down_user but the code is not working. + } +} + + bool process_record_user(uint16_t keycode, keyrecord_t *record) { #if defined(KEYBOARD_PET) || defined(OLED_LOGO) if (record->event.pressed) { //OLED timeout code diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout TEST.json b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout TEST.json deleted file mode 100644 index 933628d0fdd2..000000000000 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout TEST.json +++ /dev/null @@ -1,417 +0,0 @@ -{ - "name": "Zodiark", - "vendorProductId": 4177657602, - "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], - "layers": [ - [ - "KC_GRV", - "KC_1", - "KC_2", - "KC_3", - "KC_4", - "KC_5", - "KC_MS_BTN2", - "KC_ESC", - "KC_ESC", - "KC_Q", - "KC_W", - "KC_E", - "KC_R", - "KC_T", - "KC_MS_BTN1", - "KC_A", - "KC_TAB", - "KC_A", - "KC_S", - "KC_D", - "KC_F", - "KC_G", - "USER05", - "KC_VOLD", - "KC_LSFT", - "KC_Z", - "KC_X", - "KC_C", - "KC_V", - "KC_B", - "KC_MUTE", - "KC_VOLD", - "KC_UP", - "KC_DOWN", - "KC_LGUI", - "KC_LALT", - "KC_LCTL", - "KC_ENT", - "TT(3)", - "KC_VOLU", - "KC_MINS", - "KC_0", - "KC_9", - "KC_8", - "KC_7", - "KC_6", - "USER02", - "KC_Y", - "USER04", - "KC_P", - "KC_O", - "KC_I", - "KC_U", - "KC_Y", - "USER03", - "KC_RBRC", - "KC_QUOT", - "KC_SCLN", - "KC_L", - "KC_K", - "KC_J", - "KC_H", - "USER06", - "KC_MSTP", - "KC_RSFT", - "KC_SLSH", - "KC_DOT", - "KC_COMM", - "KC_M", - "KC_N", - "C(KC_W)", - "KC_LEFT", - "KC_RGHT", - "KC_LEFT", - "TO(1)", - "KC_RALT", - "KC_RCTL", - "KC_SPC", - "TT(4)", - "KC_RGHT" - ], - [ - "KC_PSCR", - "KC_4", - "KC_1", - "KC_2", - "KC_3", - "KC_G", - "KC_T", - "KC_S", - "KC_F12", - "KC_ESC", - "KC_Q", - "KC_W", - "KC_E", - "KC_R", - "KC_G", - "KC_C", - "KC_TAB", - "KC_TAB", - "KC_A", - "KC_S", - "KC_D", - "KC_F", - "KC_B", - "KC_SPC", - "KC_LSFT", - "KC_LSFT", - "KC_Z", - "KC_X", - "KC_C", - "KC_V", - "KC_TRNS", - "KC_TRNS", - "KC_LCTL", - "KC_LCTL", - "KC_TRNS", - "KC_LALT", - "USER07", - "KC_SPC", - "KC_F22", - "KC_TRNS", - "KC_F4", - "KC_F11", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_F12", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "TO(0)", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_3", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_RALT", - "KC_TRNS", - "TO(0)", - "KC_RALT", - "MO(4)", - "KC_ENT", - "MO(2)", - "KC_TRNS" - ], - [ - "KC_GRV", - "KC_1", - "KC_2", - "KC_3", - "KC_4", - "KC_5", - "KC_MS_BTN2", - "KC_TRNS", - "KC_ESC", - "KC_Q", - "KC_W", - "KC_E", - "KC_R", - "KC_T", - "KC_MS_BTN1", - "KC_MINS", - "KC_TAB", - "KC_A", - "KC_S", - "KC_D", - "KC_F", - "KC_G", - "USER05", - "KC_P", - "KC_LSFT", - "KC_Z", - "KC_X", - "KC_C", - "KC_V", - "KC_B", - "KC_TRNS", - "KC_VOLD", - "KC_UP", - "KC_DOWN", - "KC_LGUI", - "KC_LALT", - "KC_LCTL", - "KC_SPC", - "TT(2)", - "KC_VOLU", - "KC_MINS", - "KC_0", - "KC_9", - "KC_8", - "KC_7", - "KC_6", - "USER02", - "KC_RCTL", - "KC_BSPC", - "KC_P", - "KC_O", - "KC_I", - "KC_U", - "KC_Y", - "USER03", - "KC_F5", - "KC_QUOT", - "KC_SCLN", - "KC_L", - "KC_K", - "KC_J", - "KC_H", - "USER06", - "KC_TRNS", - "KC_RSFT", - "KC_SLSH", - "KC_DOT", - "KC_COMM", - "KC_M", - "KC_N", - "KC_TRNS", - "KC_LEFT", - "KC_RGHT", - "KC_LEFT", - "TO(1)", - "KC_RALT", - "KC_RCTL", - "KC_ENT", - "TT(3)", - "KC_RGHT" - ], - [ - "KC_GRV", - "KC_F1", - "KC_F2", - "KC_F3", - "KC_F4", - "KC_F5", - "KC_F14", - "KC_F9", - "KC_ESC", - "KC_1", - "KC_2", - "KC_3", - "KC_4", - "KC_5", - "KC_F13", - "KC_8", - "KC_TRNS", - "KC_EXLM", - "KC_AT", - "KC_HASH", - "KC_DLR", - "KC_PERC", - "KC_TRNS", - "KC_AMPR", - "KC_TRNS", - "KC_EQL", - "KC_MINS", - "KC_PLUS", - "KC_LCBR", - "KC_RCBR", - "KC_TRNS", - "C(S(KC_TAB))", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "C(KC_TAB)", - "KC_F11", - "KC_F10", - "KC_F9", - "KC_F8", - "KC_F7", - "KC_F6", - "KC_TRNS", - "KC_TRNS", - "KC_F12", - "KC_0", - "KC_9", - "KC_8", - "KC_7", - "KC_6", - "KC_TRNS", - "KC_TRNS", - "KC_PIPE", - "KC_RPRN", - "KC_LPRN", - "KC_ASTR", - "KC_AMPR", - "KC_CIRC", - "KC_TRNS", - "C(KC_X)", - "KC_TRNS", - "KC_BSLS", - "KC_COLN", - "KC_GT", - "KC_RBRC", - "KC_LBRC", - "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", - "C(KC_UP)", - "C(KC_DOWN)", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "C(KC_LEFT)", - "C(KC_NO)", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "C(KC_Z)", - "C(KC_X)", - "C(KC_C)", - "C(KC_V)", - "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_CAPS", - "KC_NO", - "KC_DEL", - "KC_INS", - "KC_TRNS", - "KC_END", - "KC_UP", - "KC_HOME", - "KC_NLCK", - "KC_NO", - "KC_BSPC", - "KC_TRNS", - "KC_TRNS", - "KC_RGHT", - "KC_DOWN", - "KC_LEFT", - "KC_SLCK", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_PGDN", - "KC_PGUP", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_WWW_REFRESH", - "KC_TRNS", - "KC_TRNS" - ] - ] -} \ No newline at end of file diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json index d9f5fd84ceb5..f21cb514c9eb 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json @@ -10,7 +10,7 @@ "KC_3", "KC_4", "KC_5", - "KC_MS_BTN2", + "KC_MS_BTN1", "KC_ESC", "KC_ESC", "KC_Q", @@ -18,7 +18,7 @@ "KC_E", "KC_R", "KC_T", - "KC_MS_BTN1", + "KC_MS_BTN2", "KC_A", "KC_TAB", "KC_A", @@ -132,7 +132,7 @@ "KC_TRNS", "KC_TRNS", "KC_TRNS", - "KC_TRNS", + "KC_NO", "KC_TRNS", "KC_F12", "KC_TRNS", @@ -140,7 +140,7 @@ "KC_TRNS", "KC_TRNS", "KC_TRNS", - "KC_TRNS", + "KC_NO", "TO(0)", "KC_TRNS", "KC_TRNS", @@ -272,7 +272,7 @@ "KC_HASH", "KC_DLR", "KC_PERC", - "KC_ASTR", + "KC_DEL", "KC_AMPR", "KC_TRNS", "KC_EQL", @@ -378,23 +378,23 @@ "KC_TRNS", "KC_TRNS", "KC_TRNS", - "KC_CAPS", + "KC_SLCK", "KC_NO", "KC_DEL", "KC_INS", - "KC_TRNS", "KC_END", "KC_UP", "KC_HOME", + "KC_TRNS", "KC_NLCK", "KC_NO", "KC_BSPC", "KC_TRNS", - "KC_TRNS", "KC_RGHT", "KC_DOWN", "KC_LEFT", - "KC_SLCK", + "KC_TRNS", + "KC_CAPS", "KC_NO", "KC_TRNS", "KC_TRNS", From efd1780d64f03ae89b9f93257577aaf73c708124 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Wed, 16 Feb 2022 14:38:52 +0800 Subject: [PATCH 132/155] Add keyboard rev_0106 and rev_0107 for keychron q1 --- keyboards/keychron/q1/chconf.h | 25 +++ keyboards/keychron/q1/config.h | 17 -- keyboards/keychron/q1/halconf.h | 21 ++ keyboards/keychron/q1/mcuconf.h | 22 ++ keyboards/keychron/q1/q1.c | 10 - keyboards/keychron/q1/q1.h | 4 + keyboards/keychron/q1/rev_0100/config.h | 15 +- keyboards/keychron/q1/rev_0100/rev_0100.c | 67 +++--- keyboards/keychron/q1/rev_0101/config.h | 12 ++ keyboards/keychron/q1/rev_0101/rev_0101.c | 54 +++-- keyboards/keychron/q1/rev_0102/config.h | 14 +- keyboards/keychron/q1/rev_0102/rev_0102.c | 69 ++++--- keyboards/keychron/q1/rev_0106/config.h | 57 ++++++ keyboards/keychron/q1/rev_0106/info.json | 98 +++++++++ .../q1/rev_0106/keymaps/default/keymap.c | 135 +++++++++++++ .../keychron/q1/rev_0106/keymaps/via/keymap.c | 135 +++++++++++++ .../keychron/q1/rev_0106/keymaps/via/rules.mk | 2 + keyboards/keychron/q1/rev_0106/readme.md | 3 + keyboards/keychron/q1/rev_0106/rev_0106.c | 158 +++++++++++++++ keyboards/keychron/q1/rev_0106/rev_0106.h | 37 ++++ keyboards/keychron/q1/rev_0106/rules.mk | 28 +++ keyboards/keychron/q1/rev_0107/config.h | 67 ++++++ keyboards/keychron/q1/rev_0107/info.json | 191 ++++++++++++++++++ .../q1/rev_0107/keymaps/default/keymap.c | 135 +++++++++++++ .../keychron/q1/rev_0107/keymaps/via/keymap.c | 177 ++++++++++++++++ .../keychron/q1/rev_0107/keymaps/via/rules.mk | 2 + keyboards/keychron/q1/rev_0107/readme.md | 5 + keyboards/keychron/q1/rev_0107/rev_0107.c | 174 ++++++++++++++++ keyboards/keychron/q1/rev_0107/rev_0107.h | 52 +++++ keyboards/keychron/q1/rev_0107/rules.mk | 28 +++ 30 files changed, 1713 insertions(+), 101 deletions(-) create mode 100644 keyboards/keychron/q1/chconf.h create mode 100644 keyboards/keychron/q1/halconf.h create mode 100644 keyboards/keychron/q1/mcuconf.h create mode 100644 keyboards/keychron/q1/rev_0106/config.h create mode 100644 keyboards/keychron/q1/rev_0106/info.json create mode 100644 keyboards/keychron/q1/rev_0106/keymaps/default/keymap.c create mode 100644 keyboards/keychron/q1/rev_0106/keymaps/via/keymap.c create mode 100644 keyboards/keychron/q1/rev_0106/keymaps/via/rules.mk create mode 100644 keyboards/keychron/q1/rev_0106/readme.md create mode 100644 keyboards/keychron/q1/rev_0106/rev_0106.c create mode 100644 keyboards/keychron/q1/rev_0106/rev_0106.h create mode 100644 keyboards/keychron/q1/rev_0106/rules.mk create mode 100644 keyboards/keychron/q1/rev_0107/config.h create mode 100644 keyboards/keychron/q1/rev_0107/info.json create mode 100644 keyboards/keychron/q1/rev_0107/keymaps/default/keymap.c create mode 100644 keyboards/keychron/q1/rev_0107/keymaps/via/keymap.c create mode 100644 keyboards/keychron/q1/rev_0107/keymaps/via/rules.mk create mode 100644 keyboards/keychron/q1/rev_0107/readme.md create mode 100644 keyboards/keychron/q1/rev_0107/rev_0107.c create mode 100644 keyboards/keychron/q1/rev_0107/rev_0107.h create mode 100644 keyboards/keychron/q1/rev_0107/rules.mk diff --git a/keyboards/keychron/q1/chconf.h b/keyboards/keychron/q1/chconf.h new file mode 100644 index 000000000000..cbbae31079fb --- /dev/null +++ b/keyboards/keychron/q1/chconf.h @@ -0,0 +1,25 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +#pragma once + +#define CH_CFG_ST_FREQUENCY 10000 + +#define CH_CFG_OPTIMIZE_SPEED FALSE + +#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE + +#include_next diff --git a/keyboards/keychron/q1/config.h b/keyboards/keychron/q1/config.h index de69b9e929c7..0daaf908d894 100644 --- a/keyboards/keychron/q1/config.h +++ b/keyboards/keychron/q1/config.h @@ -21,24 +21,12 @@ #define MANUFACTURER Keychron #define PRODUCT Keychron Q1 -/* key matrix size */ -#define MATRIX_ROWS 6 -#define MATRIX_COLS 15 - /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION ROW2COL /* Set 0 if debouncing isn't needed */ #define DEBOUNCE 5 -/* RGB Matrix Driver Configuration */ -#define DRIVER_COUNT 2 -#define DRIVER_ADDR_1 0b1010000 -#define DRIVER_ADDR_2 0b1011111 - -/* DIP switch */ -#define DIP_SWITCH_MATRIX_GRID { {0,1} } - /* Disable DIP switch in matrix data */ #define MATRIX_MASKED @@ -101,8 +89,3 @@ #define ENABLE_RGB_MATRIX_MULTISPLASH #define ENABLE_RGB_MATRIX_SOLID_SPLASH #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH - -/* Allow VIA to edit lighting */ -#ifdef VIA_ENABLE -#define VIA_QMK_RGBLIGHT_ENABLE -#endif diff --git a/keyboards/keychron/q1/halconf.h b/keyboards/keychron/q1/halconf.h new file mode 100644 index 000000000000..41bddcb2799b --- /dev/null +++ b/keyboards/keychron/q1/halconf.h @@ -0,0 +1,21 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +#pragma once + +#define HAL_USE_I2C TRUE + +#include_next diff --git a/keyboards/keychron/q1/mcuconf.h b/keyboards/keychron/q1/mcuconf.h new file mode 100644 index 000000000000..0ca8c64850f4 --- /dev/null +++ b/keyboards/keychron/q1/mcuconf.h @@ -0,0 +1,22 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +#pragma once + +#include_next + +#undef STM32_I2C_USE_I2C1 +#define STM32_I2C_USE_I2C1 TRUE diff --git a/keyboards/keychron/q1/q1.c b/keyboards/keychron/q1/q1.c index a316c1fdcfa1..2767fa4f3a1c 100644 --- a/keyboards/keychron/q1/q1.c +++ b/keyboards/keychron/q1/q1.c @@ -16,16 +16,6 @@ #include "q1.h" - -const matrix_row_t matrix_mask[] = { - 0b0111111111111101, - 0b0111111111111111, - 0b0111111111111111, - 0b0111111111111111, - 0b0111111111111111, - 0b0111111111111111, -}; - bool dip_switch_update_kb(uint8_t index, bool active) { if (!dip_switch_update_user(index, active)) { return false;} if (index == 0) { diff --git a/keyboards/keychron/q1/q1.h b/keyboards/keychron/q1/q1.h index cf6d19621357..4551570e12b0 100644 --- a/keyboards/keychron/q1/q1.h +++ b/keyboards/keychron/q1/q1.h @@ -24,4 +24,8 @@ # include "rev_0101.h" #elif defined(KEYBOARD_keychron_q1_rev_0102) # include "rev_0102.h" +#elif defined(KEYBOARD_keychron_q1_rev_0106) +# include "rev_0106.h" +#elif defined(KEYBOARD_keychron_q1_rev_0107) +# include "rev_0107.h" #endif diff --git a/keyboards/keychron/q1/rev_0100/config.h b/keyboards/keychron/q1/rev_0100/config.h index 435f386a596b..391e07735801 100644 --- a/keyboards/keychron/q1/rev_0100/config.h +++ b/keyboards/keychron/q1/rev_0100/config.h @@ -16,16 +16,27 @@ #pragma once - /* USB Device descriptor parameter */ #define PRODUCT_ID 0x0100 #define DEVICE_VER 0x0100 +/* key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 15 + /* key matrix pins */ #define MATRIX_ROW_PINS { D3, D2, B3, B2, B1, B0 } #define MATRIX_COL_PINS { D5, D4, D6, D7, B4, B5, B6, C6, C7, F7, F6, F5, F4, F1, F0 } +/* DIP switch */ +#define DIP_SWITCH_MATRIX_GRID { {0,1} } + +/* RGB Matrix Driver Configuration */ +#define DRIVER_COUNT 2 +#define DRIVER_ADDR_1 0b1010000 +#define DRIVER_ADDR_2 0b1011111 + /* RGB Matrix Configuration */ #define DRIVER_1_LED_TOTAL 59 #define DRIVER_2_LED_TOTAL 23 -#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) \ No newline at end of file +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) diff --git a/keyboards/keychron/q1/rev_0100/rev_0100.c b/keyboards/keychron/q1/rev_0100/rev_0100.c index f42466952796..50a6b17d8bfb 100644 --- a/keyboards/keychron/q1/rev_0100/rev_0100.c +++ b/keyboards/keychron/q1/rev_0100/rev_0100.c @@ -16,6 +16,16 @@ #include "quantum.h" +const matrix_row_t matrix_mask[] = { + 0b0111111111111101, + 0b0111111111111111, + 0b0111111111111111, + 0b0111111111111111, + 0b0111111111111111, + 0b0111111111111111, +}; + +#ifdef RGB_MATRIX_ENABLE const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = { /* Refer to IS31 manual for these locations @@ -111,33 +121,38 @@ const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = { {1, F_14, D_14, E_14}, {1, F_15, D_15, E_15}, {1, F_16, D_16, E_16} - }; -led_config_t g_led_config = { - { - { 0, NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44 }, - { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 71, 57, 58 }, - { 59, NO_LED, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 80, 70, 13 }, - { 72, 73, 74, NO_LED, NO_LED, NO_LED, 75, NO_LED, NO_LED, NO_LED, 76, 77, 78, 79, 81 } - }, - { - {0,0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {210, 0}, {224, 0}, - {0,13}, {15,13}, {30,13}, {45,13}, {60,13}, {75,13}, {90,13}, {105,13}, {120,13}, {135,13}, {150,13}, {165,13}, {180,13}, {195,13}, {224,13}, - {0,26}, {15,26}, {30,26}, {45,26}, {60,26}, {75,26}, {90,26}, {105,26}, {120,26}, {135,26}, {150,26}, {165,26}, {180,26}, {195,26}, {224,26}, - {0,39}, {15,39}, {30,39}, {45,39}, {60,39}, {75,39}, {90,39}, {105,39}, {120,39}, {135,39}, {150,39}, {165,39}, {195,39}, {224,39}, - {0,52}, {30,52}, {45,52}, {60,52}, {75,52}, {90,52}, {105,52}, {120,52}, {135,52}, {150,52}, {165,52}, {195,52}, {210,52}, - {0,64}, {15,64}, {30,64}, {90,64}, {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64}, - }, - { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 +#define __ NO_LED - } +led_config_t g_led_config = { + { + // Key Matrix to LED Index + { 0, __, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14 }, + { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, + { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44 }, + { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 71, 57, 58 }, + { 59, __, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 80, 70, 13 }, + { 72, 73, 74, __, __, __, 75, __, __, __, 76, 77, 78, 79, 81 }, + }, + { + // LED Index to Physical Position + {0,0}, {18,0}, {33,0}, {48,0}, {62,0}, {81,0}, {95,0}, {110,0}, {125,0}, {143,0}, {158,0}, {172,0}, {187,0}, {205,0}, {224,0}, + {0,15}, {15,15}, {29,15}, {44,15}, {59,15}, {73,15}, {88,15}, {103,15}, {117,15}, {132,15}, {146,15}, {161,15}, {176,15}, {198,15}, {224,15}, + {4,26}, {22,26}, {37,26}, {51,26}, {66,26}, {81,26}, {95,26}, {110,26}, {125,26}, {139,26}, {154,26}, {168,26}, {183,26}, {201,26}, {224,26}, + {6,38}, {26,38}, {40,38}, {55,38}, {70,38}, {84,38}, {99,38}, {114,38}, {128,38}, {143,38}, {158,38}, {172,38}, {196,38}, {224,38}, + {9,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {150,49}, {165,49}, {185,49}, {209,52}, + {2,61}, {20,61}, {38,61}, {94,61}, {147,61}, {161,61}, {176,61}, {195,64}, {209,64}, {224,64}, + }, + { + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, + } }; + +#endif diff --git a/keyboards/keychron/q1/rev_0101/config.h b/keyboards/keychron/q1/rev_0101/config.h index c127a3630ab3..0323b449babe 100644 --- a/keyboards/keychron/q1/rev_0101/config.h +++ b/keyboards/keychron/q1/rev_0101/config.h @@ -20,10 +20,22 @@ #define PRODUCT_ID 0x0101 #define DEVICE_VER 0x0100 +/* key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 15 + /* key matrix pins */ #define MATRIX_ROW_PINS { D3, D2, B3, B2, B1, B0 } #define MATRIX_COL_PINS { D5, D4, D6, D7, B4, B5, B6, C6, C7, F7, F6, F5, F4, F1, F0 } +/* DIP switch */ +#define DIP_SWITCH_MATRIX_GRID { {0,1} } + +/* RGB Matrix Driver Configuration */ +#define DRIVER_COUNT 2 +#define DRIVER_ADDR_1 0b1010000 +#define DRIVER_ADDR_2 0b1011111 + /* RGB Matrix Configuration */ #define DRIVER_1_LED_TOTAL 59 #define DRIVER_2_LED_TOTAL 23 diff --git a/keyboards/keychron/q1/rev_0101/rev_0101.c b/keyboards/keychron/q1/rev_0101/rev_0101.c index dd7f69529ea6..936bac220411 100644 --- a/keyboards/keychron/q1/rev_0101/rev_0101.c +++ b/keyboards/keychron/q1/rev_0101/rev_0101.c @@ -16,7 +16,17 @@ #include "quantum.h" +const matrix_row_t matrix_mask[] = { + 0b0111111111111101, + 0b0111111111111111, + 0b0111111111111111, + 0b0111111111111111, + 0b0111111111111111, + 0b0111111111111111, +}; + #ifdef RGB_MATRIX_ENABLE + const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = { /* Refer to IS31 manual for these locations * driver @@ -113,35 +123,42 @@ const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = { {1, F_16, D_16, E_16} }; +#define __ NO_LED + led_config_t g_led_config = { { - { 0, NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44 }, - { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 71, 57, 58 }, - { 59, NO_LED, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 80, 70, 13 }, - { 72, 73, 74, NO_LED, NO_LED, NO_LED, 75, NO_LED, NO_LED, NO_LED, 76, 77, 78, 79, 81 } + // Key Matrix to LED Index + { 0, __, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14 }, + { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, + { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44 }, + { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 71, 57, 58 }, + { 59, __, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 80, 70, 13 }, + { 72, 73, 74, __, __, __, 75, __, __, __, 76, 77, 78, 79, 81 }, }, { - {0, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {210, 0}, {224, 0}, - {0,13}, {15,13}, {30,13}, {45,13}, {60,13}, {75,13}, {90,13}, {105,13}, {120,13}, {135,13}, {150,13}, {165,13}, {180,13}, {195,13}, {224,13}, - {0,26}, {15,26}, {30,26}, {45,26}, {60,26}, {75,26}, {90,26}, {105,26}, {120,26}, {135,26}, {150,26}, {165,26}, {180,26}, {195,26}, {224,26}, - {0,39}, {15,39}, {30,39}, {45,39}, {60,39}, {75,39}, {90,39}, {105,39}, {120,39}, {135,39}, {150,39}, {165,39}, {195,39}, {224,39}, - {0,52}, {30,52}, {45,52}, {60,52}, {75,52}, {90,52}, {105,52}, {120,52}, {135,52}, {150,52}, {165,52}, {195,52}, {210,52}, - {0,64}, {15,64}, {30,64}, {90,64}, {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64} + // LED Index to Physical Position + {0,0}, {18,0}, {33,0}, {48,0}, {62,0}, {81,0}, {95,0}, {110,0}, {125,0}, {143,0}, {158,0}, {172,0}, {187,0}, {205,0}, {224,0}, + {0,15}, {15,15}, {29,15}, {44,15}, {59,15}, {73,15}, {88,15}, {103,15}, {117,15}, {132,15}, {146,15}, {161,15}, {176,15}, {198,15}, {224,15}, + {4,26}, {22,26}, {37,26}, {51,26}, {66,26}, {81,26}, {95,26}, {110,26}, {125,26}, {139,26}, {154,26}, {168,26}, {183,26}, {201,26}, {224,26}, + {6,38}, {26,38}, {40,38}, {55,38}, {70,38}, {84,38}, {99,38}, {114,38}, {128,38}, {143,38}, {158,38}, {172,38}, {196,38}, {224,38}, + {9,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {150,49}, {165,49}, {185,49}, {209,52}, + {2,61}, {20,61}, {38,61}, {94,61}, {147,61}, {161,61}, {176,61}, {195,64}, {209,64}, {224,64}, }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, } }; + #endif #ifdef ENCODER_ENABLE + bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } if (index == 0) { @@ -153,4 +170,5 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { } return true; } + #endif diff --git a/keyboards/keychron/q1/rev_0102/config.h b/keyboards/keychron/q1/rev_0102/config.h index a537ab4e0d56..19fa50c396b4 100644 --- a/keyboards/keychron/q1/rev_0102/config.h +++ b/keyboards/keychron/q1/rev_0102/config.h @@ -21,11 +21,23 @@ #define PRODUCT_ID 0x0102 #define DEVICE_VER 0x0100 +/* key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 15 + /* key matrix pins */ #define MATRIX_ROW_PINS { D3, D2, B3, B2, B1, B0 } #define MATRIX_COL_PINS { D5, D4, D6, D7, B4, B5, B6, C6, C7, F7, F6, F5, F4, F1, F0 } +/* DIP switch */ +#define DIP_SWITCH_MATRIX_GRID { {0,1} } + +/* RGB Matrix Driver Configuration */ +#define DRIVER_COUNT 2 +#define DRIVER_ADDR_1 0b1010000 +#define DRIVER_ADDR_2 0b1011111 + /* RGB Matrix Configuration */ #define DRIVER_1_LED_TOTAL 59 #define DRIVER_2_LED_TOTAL 24 -#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) \ No newline at end of file +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) diff --git a/keyboards/keychron/q1/rev_0102/rev_0102.c b/keyboards/keychron/q1/rev_0102/rev_0102.c index f1468d109451..43364312bd05 100644 --- a/keyboards/keychron/q1/rev_0102/rev_0102.c +++ b/keyboards/keychron/q1/rev_0102/rev_0102.c @@ -16,7 +16,17 @@ #include "quantum.h" +const matrix_row_t matrix_mask[] = { + 0b0111111111111101, + 0b0111111111111111, + 0b0111111111111111, + 0b0111111111111111, + 0b0111111111111111, + 0b0111111111111111, +}; + #ifdef RGB_MATRIX_ENABLE + const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = { /* Refer to IS31 manual for these locations * driver @@ -83,8 +93,8 @@ const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = { {0, L_10, J_10, K_10}, {0, L_11, J_11, K_11}, {0, L_12, J_12, K_12}, - {0, L_14, J_14, K_14}, - {0, I_14, G_14, H_14}, + {0, L_14, J_14, K_14}, + {0, I_14, G_14, H_14}, {0, L_16, J_16, K_16}, {1, C_1, A_1, B_1}, @@ -114,31 +124,36 @@ const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = { {1, F_16, D_16, E_16} }; -led_config_t g_led_config = { - { - { 0, NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 57, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 72, 56, 58 }, - { 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 81, 71, 13 }, - { 73, 74, 75, NO_LED, NO_LED, NO_LED, 76, NO_LED, NO_LED, NO_LED, 77, 78, 79, 80, 82 } - }, - { - {0,0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {210, 0}, {224, 0}, - {0,13}, {15,13}, {30,13}, {45,13}, {60,13}, {75,13}, {90,13}, {105,13}, {120,13}, {135,13}, {150,13}, {165,13}, {180,13}, {195,13}, {224,13}, - {0,26}, {15,26}, {30,26}, {45,26}, {60,26}, {75,26}, {90,26}, {105,26}, {120,26}, {135,26}, {150,26}, {165,26}, {180,26}, {224,26}, - {0,39}, {15,39}, {30,39}, {45,39}, {60,39}, {75,39}, {90,39}, {105,39}, {120,39}, {135,39}, {150,39}, {165,39}, {180,39}, {195,26}, {224,39}, - {0,52}, {15,52}, {30,52}, {45,52}, {60,52}, {75,52}, {90,52}, {105,52}, {120,52}, {135,52}, {150,52}, {165,52}, {180,52}, {210,52}, - {0,64}, {15,64}, {30,64}, {90,64}, {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64}, - }, - { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 +#define __ NO_LED - } +led_config_t g_led_config = { + { + // Key Matrix to LED Index + { 0, __, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14 }, + { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, + { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 57, 43 }, + { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 72, 56, 58 }, + { 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 81, 71, 13 }, + { 73, 74, 75, __, __, __, 76, __, __, __, 77, 78, 79, 80, 82 }, + }, + { + // LED Index to Physical Position + {0,0}, {18,0}, {33,0 }, {48,0}, {62,0}, {81,0}, {95,0}, {110,0}, {125,0}, {143,0}, {158,0}, {172,0}, {187,0}, {205,0}, {224,0}, + {0,15}, {15,15}, {29,15}, {44,15}, {59,15}, {73,15}, {88,15}, {103,15}, {117,15}, {132,15}, {146,15}, {161,15}, {176,15}, {198,15}, {224,15}, + {4,26}, {22,26}, {37,26}, {51,26}, {66,26}, {81,26}, {95,26}, {110,26}, {125,26}, {139,26}, {154,26}, {168,26}, {183,26}, {224,26}, + {6,38}, {26,38}, {40,38}, {55,38}, {70,38}, {84,38}, {99,38}, {114,38}, {128,38}, {143,38}, {158,38}, {172,38}, {187,38}, {205,33}, {224,38}, + {2,49}, {18,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {150,49}, {165,49}, {185,49}, {209,52}, + {2,61}, {20,61}, {38,61}, {94,61}, {147,61}, {161,61}, {176,61}, {195,64}, {209,64}, {224,64}, + }, + { + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, + 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, + } }; + #endif diff --git a/keyboards/keychron/q1/rev_0106/config.h b/keyboards/keychron/q1/rev_0106/config.h new file mode 100644 index 000000000000..68590be8c02d --- /dev/null +++ b/keyboards/keychron/q1/rev_0106/config.h @@ -0,0 +1,57 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x0106 +#define DEVICE_VER 0x0200 + +/* key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 16 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } +#define MATRIX_COL_PINS { C14, C15, A0, A1, A2, A3, A4, A5, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN } + +/* DIP switch */ +#define DIP_SWITCH_MATRIX_GRID { {5,4} } + +/* RGB Matrix Driver Configuration */ +#define DRIVER_COUNT 2 +#define DRIVER_ADDR_1 0b1110111 +#define DRIVER_ADDR_2 0b1110100 + +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 45 +#define DRIVER_2_LED_TOTAL 37 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + +/* Scan phase of led driver set as MSKPHASE_9CHANNEL(defined as 0x03 in CKLED2001.h) */ +#define PHASE_CHANNEL MSKPHASE_9CHANNEL + +/* Set the maxium brightness as 192 in order to limit the current to 450mA */ +#define RGB_MATRIX_MAXIMUM_BRIGHTNESS (24 * 8) // 8 = RGB_MATRIX_VAL_STEP + +/* We have 2KB EEPROM size on STM32L432 */ +#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047 + +/* Enable caps-lock LED */ +#define CAPS_LOCK_LED_INDEX 45 + +/* Total size of the EEPROM storage in bytes */ +#define TRANSIENT_EEPROM_SIZE 1024 diff --git a/keyboards/keychron/q1/rev_0106/info.json b/keyboards/keychron/q1/rev_0106/info.json new file mode 100644 index 000000000000..05f26eb3870f --- /dev/null +++ b/keyboards/keychron/q1/rev_0106/info.json @@ -0,0 +1,98 @@ +{ + "keyboard_name": "Keychron Q1", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_ansi_82": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":1.25, "y":0}, + {"label":"F2", "x":2.25, "y":0}, + {"label":"F3", "x":3.25, "y":0}, + {"label":"F4", "x":4.25, "y":0}, + {"label":"F5", "x":5.5, "y":0}, + {"label":"F6", "x":6.5, "y":0}, + {"label":"F7", "x":7.5, "y":0}, + {"label":"F8", "x":8.5, "y":0}, + {"label":"F9", "x":9.75, "y":0}, + {"label":"F10", "x":10.75, "y":0}, + {"label":"F11", "x":11.75, "y":0}, + {"label":"F12", "x":12.75, "y":0}, + {"label":"Delete", "x":14, "y":0}, + {"label":"Insert", "x":15.25, "y":0}, + + {"label":"`~", "x":0, "y":1}, + {"label":"1!", "x":1, "y":1}, + {"label":"2@", "x":2, "y":1}, + {"label":"3#", "x":3, "y":1}, + {"label":"4$", "x":4, "y":1}, + {"label":"5%", "x":5, "y":1}, + {"label":"6^", "x":6, "y":1}, + {"label":"7&", "x":7, "y":1}, + {"label":"8*", "x":8, "y":1}, + {"label":"9(", "x":9, "y":1}, + {"label":"0)", "x":10, "y":1}, + {"label":"-_", "x":11, "y":1}, + {"label":"=+", "x":12, "y":1}, + {"label":"Backspace", "x":13, "y":1, "w":2}, + {"label":"Page Up", "x":15.25, "y":1}, + + {"label":"Tab", "x":0, "y":2, "w":1.5}, + {"label":"Q", "x":1.5, "y":2}, + {"label":"W", "x":2.5, "y":2}, + {"label":"E", "x":3.5, "y":2}, + {"label":"R", "x":4.5, "y":2}, + {"label":"T", "x":5.5, "y":2}, + {"label":"Y", "x":6.5, "y":2}, + {"label":"U", "x":7.5, "y":2}, + {"label":"I", "x":8.5, "y":2}, + {"label":"O", "x":9.5, "y":2}, + {"label":"P", "x":10.5, "y":2}, + {"label":"[{", "x":11.5, "y":2}, + {"label":"]}", "x":12.5, "y":2}, + {"label":"\\|", "x":13.5, "y":2, "w":1.5}, + {"label":"Page Down", "x":15.25, "y":2}, + + {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, + {"label":"A", "x":1.75, "y":3}, + {"label":"S", "x":2.75, "y":3}, + {"label":"D", "x":3.75, "y":3}, + {"label":"F", "x":4.75, "y":3}, + {"label":"G", "x":5.75, "y":3}, + {"label":"H", "x":6.75, "y":3}, + {"label":"J", "x":7.75, "y":3}, + {"label":"K", "x":8.75, "y":3}, + {"label":"L", "x":9.75, "y":3}, + {"label":";:", "x":10.75, "y":3}, + {"label":"'\"", "x":11.75, "y":3}, + {"label":"Enter", "x":12.75, "y":3, "w":2.25}, + {"label":"Home", "x":15.25, "y":3}, + + {"label":"Shift", "x":0, "y":4, "w":2.25}, + {"label":"Z", "x":2.25, "y":4}, + {"label":"X", "x":3.25, "y":4}, + {"label":"C", "x":4.25, "y":4}, + {"label":"V", "x":5.25, "y":4}, + {"label":"B", "x":6.25, "y":4}, + {"label":"N", "x":7.25, "y":4}, + {"label":"M", "x":8.25, "y":4}, + {"label":",<", "x":9.25, "y":4}, + {"label":".>", "x":10.25, "y":4}, + {"label":"/?", "x":11.25, "y":4}, + {"label":"Shift", "x":12.25, "y":4, "w":1.75}, + {"label":"Up", "x":14.25, "y":4.25}, + + {"label":"Ctrl", "x":0, "y":5, "w":1.25}, + {"label":"Win", "x":1.25, "y":5, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5, "w":1.25}, + {"label":"Space","x":3.75, "y":5, "w":6.25}, + {"label":"Alt", "x":10, "y":5}, + {"label":"Fn", "x":11, "y":5}, + {"label":"Ctrl", "x":12, "y":5}, + {"label":"Left", "x":13.25, "y":5.25}, + {"label":"Down", "x":14.25, "y":5.25}, + {"label":"Right", "x":15.25, "y":5.25} + ] + } + } +} diff --git a/keyboards/keychron/q1/rev_0106/keymaps/default/keymap.c b/keyboards/keychron/q1/rev_0106/keymaps/default/keymap.c new file mode 100644 index 000000000000..45625b6eeeeb --- /dev/null +++ b/keyboards/keychron/q1/rev_0106/keymaps/default/keymap.c @@ -0,0 +1,135 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +#ifdef VIA_ENABLE + #define USER_START USER00 +#else + #define USER_START SAFE_RANGE +#endif + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = USER_START, + KC_LAUNCHPAD, + KC_LOPTN, + KC_ROPTN, + KC_LCMMD, + KC_RCMMD, + KC_TASK_VIEW, + KC_FILE_EXPLORER +}; + +typedef struct PACKED { + uint8_t len; + uint8_t keycode[2]; +} key_combination_t; + +key_combination_t key_comb_list[2] = { + {2, {KC_LWIN, KC_TAB}}, + {2, {KC_LWIN, KC_E}} +}; + +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define KC_TASK KC_TASK_VIEW +#define KC_FLXP KC_FILE_EXPLORER + +static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_82( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_ansi_82( + KC_TRNS, 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_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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_ansi_82( + KC_ESC, 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_DEL, KC_INS, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_ansi_82( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LOPTN: + case KC_ROPTN: + case KC_LCMMD: + case KC_RCMMD: + if (record->event.pressed) { + register_code(mac_keycode[keycode - KC_LOPTN]); + } else { + unregister_code(mac_keycode[keycode - KC_LOPTN]); + } + return false; // Skip all further processing of this key + case KC_TASK: + case KC_FLXP: + if (record->event.pressed) { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + register_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } else { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q1/rev_0106/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0106/keymaps/via/keymap.c new file mode 100644 index 000000000000..45625b6eeeeb --- /dev/null +++ b/keyboards/keychron/q1/rev_0106/keymaps/via/keymap.c @@ -0,0 +1,135 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +#ifdef VIA_ENABLE + #define USER_START USER00 +#else + #define USER_START SAFE_RANGE +#endif + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = USER_START, + KC_LAUNCHPAD, + KC_LOPTN, + KC_ROPTN, + KC_LCMMD, + KC_RCMMD, + KC_TASK_VIEW, + KC_FILE_EXPLORER +}; + +typedef struct PACKED { + uint8_t len; + uint8_t keycode[2]; +} key_combination_t; + +key_combination_t key_comb_list[2] = { + {2, {KC_LWIN, KC_TAB}}, + {2, {KC_LWIN, KC_E}} +}; + +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define KC_TASK KC_TASK_VIEW +#define KC_FLXP KC_FILE_EXPLORER + +static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_82( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_INS, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_ansi_82( + KC_TRNS, 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_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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_ansi_82( + KC_ESC, 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_DEL, KC_INS, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_ansi_82( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LOPTN: + case KC_ROPTN: + case KC_LCMMD: + case KC_RCMMD: + if (record->event.pressed) { + register_code(mac_keycode[keycode - KC_LOPTN]); + } else { + unregister_code(mac_keycode[keycode - KC_LOPTN]); + } + return false; // Skip all further processing of this key + case KC_TASK: + case KC_FLXP: + if (record->event.pressed) { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + register_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } else { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q1/rev_0106/keymaps/via/rules.mk b/keyboards/keychron/q1/rev_0106/keymaps/via/rules.mk new file mode 100644 index 000000000000..eb5b445ddf1a --- /dev/null +++ b/keyboards/keychron/q1/rev_0106/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +MOUSEKEY_ENABLE = yes diff --git a/keyboards/keychron/q1/rev_0106/readme.md b/keyboards/keychron/q1/rev_0106/readme.md new file mode 100644 index 000000000000..99a9193d2bf8 --- /dev/null +++ b/keyboards/keychron/q1/rev_0106/readme.md @@ -0,0 +1,3 @@ +# The ANSI variant of the Keychron Q1 + +- Which was based on stm32l432 and compile with stm32l433 temporarily. diff --git a/keyboards/keychron/q1/rev_0106/rev_0106.c b/keyboards/keychron/q1/rev_0106/rev_0106.c new file mode 100644 index 000000000000..a38b76ce893f --- /dev/null +++ b/keyboards/keychron/q1/rev_0106/rev_0106.c @@ -0,0 +1,158 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include "quantum.h" + +const matrix_row_t matrix_mask[] = { + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111101111, +}; + +#ifdef RGB_MATRIX_ENABLE + +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_16, A_16, B_16}, + + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {0, I_5, G_5, H_5}, + {0, I_6, G_6, H_6}, + {0, I_7, G_7, H_7}, + {0, I_8, G_8, H_8}, + {0, I_9, G_9, H_9}, + {0, I_10, G_10, H_10}, + {0, I_11, G_11, H_11}, + {0, I_12, G_12, H_12}, + {0, I_13, G_13, H_13}, + {0, I_14, G_14, H_14}, + {0, I_16, G_16, H_16}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_14, D_14, E_14}, + {0, F_16, D_16, E_16}, + + {1, I_1, G_1, H_1}, + {1, I_2, G_2, H_2}, + {1, I_3, G_3, H_3}, + {1, I_4, G_4, H_4}, + {1, I_5, G_5, H_5}, + {1, I_6, G_6, H_6}, + {1, I_7, G_7, H_7}, + {1, I_8, G_8, H_8}, + {1, I_9, G_9, H_9}, + {1, I_10, G_10, H_10}, + {1, I_11, G_11, H_11}, + {1, I_12, G_12, H_12}, + {1, I_14, G_14, H_14}, + {1, I_16, G_16, H_16}, + + {1, F_1, D_1, E_1}, + {1, F_3, D_3, E_3}, + {1, F_4, D_4, E_4}, + {1, F_5, D_5, E_5}, + {1, F_6, D_6, E_6}, + {1, F_7, D_7, E_7}, + {1, F_8, D_8, E_8}, + {1, F_9, D_9, E_9}, + {1, F_10, D_10, E_10}, + {1, F_11, D_11, E_11}, + {1, F_12, D_12, E_12}, + {1, F_14, D_14, E_14}, + {1, F_15, D_15, E_15}, + + {1, C_1, A_1, B_1}, + {1, C_2, A_2, B_2}, + {1, C_3, A_3, B_3}, + {1, C_7, A_7, B_7}, + {1, C_11, A_11, B_11}, + {1, C_12, A_12, B_12}, + {1, C_13, A_13, B_13}, + {1, C_14, A_14, B_14}, + {1, C_15, A_15, B_15}, + {1, C_16, A_16, B_16}, +}; + +#define __ NO_LED + +led_config_t g_led_config = { + { + // Key Matrix to LED Index + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, __, 14 }, + { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, __, 29 }, + { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, __, 44 }, + { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, __, 57, __, 58 }, + { 59, __, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, __, 70, 71, __ }, + { 72, 73, 74, __, __, __, 75, __, __, __, 76, 77, 78, 79, 80, 81 } + }, + { + // LED Index to Physical Position + {0,0}, {18,0}, {33,0}, {48,0}, {62,0}, {81,0}, {95,0}, {110,0}, {125,0}, {143,0}, {158,0}, {173,0}, {187,0}, {206,0}, {224,0}, + {0,15}, {15,15}, {29,15}, {44,15}, {59,15}, {73,15}, {88,15}, {103,15}, {118,15}, {132,15}, {147,15}, {162,15}, {176,15}, {198,15}, {224,15}, + {4,26}, {22,26}, {37,26}, {51,26}, {66,26}, {81,26}, {95,26}, {110,26}, {125,26}, {140,26}, {154,26}, {169,26}, {184,26}, {202,26}, {224,26}, + {6,38}, {26,38}, {40,38}, {55,38}, {70,38}, {84,38}, {99,38}, {114,38}, {129,38}, {143,38}, {158,38}, {173,38}, {196,38}, {224,38}, + {9,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {151,49}, {165,49}, {185,49}, {209,52}, + {2,61}, {20,61}, {39,61}, {94,61}, {147,61}, {162,61}, {176,61}, {195,64}, {209,64}, {224,64} + }, + { + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, + 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 + } +}; + +#endif diff --git a/keyboards/keychron/q1/rev_0106/rev_0106.h b/keyboards/keychron/q1/rev_0106/rev_0106.h new file mode 100644 index 000000000000..6a1787f8bca7 --- /dev/null +++ b/keyboards/keychron/q1/rev_0106/rev_0106.h @@ -0,0 +1,37 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#define XXX KC_NO + +#define LAYOUT_ansi_82( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0F, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3F, \ + K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4E, \ + K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, XXX, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, XXX, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, XXX, K2F }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, XXX, K3F }, \ + { K40, XXX, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, XXX }, \ + { K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ +} diff --git a/keyboards/keychron/q1/rev_0106/rules.mk b/keyboards/keychron/q1/rev_0106/rules.mk new file mode 100644 index 000000000000..01c7636f5ab6 --- /dev/null +++ b/keyboards/keychron/q1/rev_0106/rules.mk @@ -0,0 +1,28 @@ +# MCU name +MCU = STM32L433 + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # USB N-key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = no # Enable Encoder +DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 +EEPROM_DRIVER = transient + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +# custom matrix setup +CUSTOM_MATRIX = lite + +SRC += matrix.c diff --git a/keyboards/keychron/q1/rev_0107/config.h b/keyboards/keychron/q1/rev_0107/config.h new file mode 100644 index 000000000000..126a7283ec5b --- /dev/null +++ b/keyboards/keychron/q1/rev_0107/config.h @@ -0,0 +1,67 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x0107 +#define DEVICE_VER 0x0200 + +/* key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 16 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } +#define MATRIX_COL_PINS { C14, C15, A0, A1, A2, A3, A4, A5, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN } + +/* DIP switch */ +#define DIP_SWITCH_MATRIX_GRID { {5,4} } + +/* RGB Matrix Driver Configuration */ +#define DRIVER_COUNT 2 +#define DRIVER_ADDR_1 0b1110111 +#define DRIVER_ADDR_2 0b1110100 + +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 45 +#define DRIVER_2_LED_TOTAL 37 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + +/* Scan phase of led driver set as MSKPHASE_9CHANNEL(defined as 0x03 in CKLED2001.h) */ +#define PHASE_CHANNEL MSKPHASE_9CHANNEL + +/* Set the maxium brightness as 192 in order to limit the current to 450mA */ +#define RGB_MATRIX_MAXIMUM_BRIGHTNESS (24 * 8) // 8 = RGB_MATRIX_VAL_STEP + +/* Set USB polling rate as 1 milliseconds */ +#define USB_POLLING_INTERVAL_MS 1 + +/* We have 2KB EEPROM size on STM32L432 */ +#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047 + +/* Encoder used pins */ +#define ENCODERS_PAD_A { A10 } +#define ENCODERS_PAD_B { A8 } + +/* Specifies the number of pulses the encoder registers between each detent */ +#define ENCODER_RESOLUTION 4 + +/* Enable caps-lock LED */ +#define CAPS_LOCK_LED_INDEX 45 + +/* Total size of the EEPROM storage in bytes */ +#define TRANSIENT_EEPROM_SIZE 1024 diff --git a/keyboards/keychron/q1/rev_0107/info.json b/keyboards/keychron/q1/rev_0107/info.json new file mode 100644 index 000000000000..75fb2d04e8f7 --- /dev/null +++ b/keyboards/keychron/q1/rev_0107/info.json @@ -0,0 +1,191 @@ +{ + "keyboard_name": "Keychron Q1", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_ansi_82": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":1.25, "y":0}, + {"label":"F2", "x":2.25, "y":0}, + {"label":"F3", "x":3.25, "y":0}, + {"label":"F4", "x":4.25, "y":0}, + {"label":"F5", "x":5.5, "y":0}, + {"label":"F6", "x":6.5, "y":0}, + {"label":"F7", "x":7.5, "y":0}, + {"label":"F8", "x":8.5, "y":0}, + {"label":"F9", "x":9.75, "y":0}, + {"label":"F10", "x":10.75, "y":0}, + {"label":"F11", "x":11.75, "y":0}, + {"label":"F12", "x":12.75, "y":0}, + {"label":"Delete", "x":14, "y":0}, + {"label":"Mute", "x":15.25, "y":0}, + + {"label":"`~", "x":0, "y":1.25}, + {"label":"1!", "x":1, "y":1.25}, + {"label":"2@", "x":2, "y":1.25}, + {"label":"3#", "x":3, "y":1.25}, + {"label":"4$", "x":4, "y":1.25}, + {"label":"5%", "x":5, "y":1.25}, + {"label":"6^", "x":6, "y":1.25}, + {"label":"7&", "x":7, "y":1.25}, + {"label":"8*", "x":8, "y":1.25}, + {"label":"9(", "x":9, "y":1.25}, + {"label":"0)", "x":10, "y":1.25}, + {"label":"-_", "x":11, "y":1.25}, + {"label":"=+", "x":12, "y":1.25}, + {"label":"Backspace", "x":13, "y":1.25, "w":2}, + {"label":"Page Up", "x":15.25, "y":1.25}, + + {"label":"Tab", "x":0, "y":2.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.25}, + {"label":"W", "x":2.5, "y":2.25}, + {"label":"E", "x":3.5, "y":2.25}, + {"label":"R", "x":4.5, "y":2.25}, + {"label":"T", "x":5.5, "y":2.25}, + {"label":"Y", "x":6.5, "y":2.25}, + {"label":"U", "x":7.5, "y":2.25}, + {"label":"I", "x":8.5, "y":2.25}, + {"label":"O", "x":9.5, "y":2.25}, + {"label":"P", "x":10.5, "y":2.25}, + {"label":"[{", "x":11.5, "y":2.25}, + {"label":"]}", "x":12.5, "y":2.25}, + {"label":"\\|", "x":13.5, "y":2.25, "w":1.5}, + {"label":"Page Down", "x":15.25, "y":2.25}, + + {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, + {"label":"A", "x":1.75, "y":3.25}, + {"label":"S", "x":2.75, "y":3.25}, + {"label":"D", "x":3.75, "y":3.25}, + {"label":"F", "x":4.75, "y":3.25}, + {"label":"G", "x":5.75, "y":3.25}, + {"label":"H", "x":6.75, "y":3.25}, + {"label":"J", "x":7.75, "y":3.25}, + {"label":"K", "x":8.75, "y":3.25}, + {"label":"L", "x":9.75, "y":3.25}, + {"label":";:", "x":10.75, "y":3.25}, + {"label":"'\"", "x":11.75, "y":3.25}, + {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, + {"label":"Home", "x":15.25, "y":3.25}, + + {"label":"Shift", "x":0, "y":4.25, "w":2.25}, + {"label":"Z", "x":2.25, "y":4.25}, + {"label":"X", "x":3.25, "y":4.25}, + {"label":"C", "x":4.25, "y":4.25}, + {"label":"V", "x":5.25, "y":4.25}, + {"label":"B", "x":6.25, "y":4.25}, + {"label":"N", "x":7.25, "y":4.25}, + {"label":"M", "x":8.25, "y":4.25}, + {"label":",<", "x":9.25, "y":4.25}, + {"label":".>", "x":10.25, "y":4.25}, + {"label":"/?", "x":11.25, "y":4.25}, + {"label":"Shift", "x":12.25, "y":4.25, "w":1.75}, + {"label":"Up", "x":14.25, "y":4.5}, + + {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, + {"label":"Win", "x":1.25, "y":5.25, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, + {"label":"Alt", "x":10, "y":5.25}, + {"label":"Fn", "x":11, "y":5.25}, + {"label":"Ctrl", "x":12, "y":5.25}, + {"label":"Left", "x":13.25, "y":5.5}, + {"label":"Down", "x":14.25, "y":5.5}, + {"label":"Right", "x":15.25, "y":5.5} + ] + }, + "LAYOUT_all": { + "layout": [ + {"label":"Esc", "x":0, "y":0.5}, + {"label":"F1", "x":1.25, "y":0.5}, + {"label":"F2", "x":2.25, "y":0.5}, + {"label":"F3", "x":3.25, "y":0.5}, + {"label":"F4", "x":4.25, "y":0.5}, + {"label":"F5", "x":5.5, "y":0.5}, + {"label":"F6", "x":6.5, "y":0.5}, + {"label":"F7", "x":7.5, "y":0.5}, + {"label":"F8", "x":8.5, "y":0.5}, + {"label":"F9", "x":9.75, "y":0.5}, + {"label":"F10", "x":10.75, "y":0.5}, + {"label":"F11", "x":11.75, "y":0.5}, + {"label":"F12", "x":12.75, "y":0.5}, + {"label":"Delete", "x":14, "y":0.5}, + {"label":"CCW", "x":15.15, "y":0, "w":0.6, "h":0.5}, + {"label":"Mute", "x":15.25, "y":0.5}, + {"label":"CW", "x":15.75, "y":0, "w":0.6, "h":0.5}, + + {"label":"`~", "x":0, "y":1.75}, + {"label":"1!", "x":1, "y":1.75}, + {"label":"2@", "x":2, "y":1.75}, + {"label":"3#", "x":3, "y":1.75}, + {"label":"4$", "x":4, "y":1.75}, + {"label":"5%", "x":5, "y":1.75}, + {"label":"6^", "x":6, "y":1.75}, + {"label":"7&", "x":7, "y":1.75}, + {"label":"8*", "x":8, "y":1.75}, + {"label":"9(", "x":9, "y":1.75}, + {"label":"0)", "x":10, "y":1.75}, + {"label":"-_", "x":11, "y":1.75}, + {"label":"=+", "x":12, "y":1.75}, + {"label":"Backspace", "x":13, "y":1.75, "w":2}, + {"label":"Page Up", "x":15.25, "y":1.75}, + + {"label":"Tab", "x":0, "y":2.75, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.75}, + {"label":"W", "x":2.5, "y":2.75}, + {"label":"E", "x":3.5, "y":2.75}, + {"label":"R", "x":4.5, "y":2.75}, + {"label":"T", "x":5.5, "y":2.75}, + {"label":"Y", "x":6.5, "y":2.75}, + {"label":"U", "x":7.5, "y":2.75}, + {"label":"I", "x":8.5, "y":2.75}, + {"label":"O", "x":9.5, "y":2.75}, + {"label":"P", "x":10.5, "y":2.75}, + {"label":"[{", "x":11.5, "y":2.75}, + {"label":"]}", "x":12.5, "y":2.75}, + {"label":"\\|", "x":13.5, "y":2.75, "w":1.5}, + {"label":"Page Down", "x":15.25, "y":2.75}, + + {"label":"Caps Lock", "x":0, "y":3.75, "w":1.75}, + {"label":"A", "x":1.75, "y":3.75}, + {"label":"S", "x":2.75, "y":3.75}, + {"label":"D", "x":3.75, "y":3.75}, + {"label":"F", "x":4.75, "y":3.75}, + {"label":"G", "x":5.75, "y":3.75}, + {"label":"H", "x":6.75, "y":3.75}, + {"label":"J", "x":7.75, "y":3.75}, + {"label":"K", "x":8.75, "y":3.75}, + {"label":"L", "x":9.75, "y":3.75}, + {"label":";:", "x":10.75, "y":3.75}, + {"label":"'\"", "x":11.75, "y":3.75}, + {"label":"Enter", "x":12.75, "y":3.75, "w":2.25}, + {"label":"Home", "x":15.25, "y":3.75}, + + {"label":"Shift", "x":0, "y":4.75, "w":2.25}, + {"label":"Z", "x":2.25, "y":4.75}, + {"label":"X", "x":3.25, "y":4.75}, + {"label":"C", "x":4.25, "y":4.75}, + {"label":"V", "x":5.25, "y":4.75}, + {"label":"B", "x":6.25, "y":4.75}, + {"label":"N", "x":7.25, "y":4.75}, + {"label":"M", "x":8.25, "y":4.75}, + {"label":",<", "x":9.25, "y":4.75}, + {"label":".>", "x":10.25, "y":4.75}, + {"label":"/?", "x":11.25, "y":4.75}, + {"label":"Shift", "x":12.25, "y":4.75, "w":1.75}, + {"label":"Up", "x":14.25, "y":5}, + + {"label":"Ctrl", "x":0, "y":5.75, "w":1.25}, + {"label":"Win", "x":1.25, "y":5.75, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5.75, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.75, "w":6.25}, + {"label":"Alt", "x":10, "y":5.75}, + {"label":"Fn", "x":11, "y":5.75}, + {"label":"Ctrl", "x":12, "y":5.75}, + {"label":"Left", "x":13.25, "y":6}, + {"label":"Down", "x":14.25, "y":6}, + {"label":"Right", "x":15.25, "y":6} + ] + } + } +} diff --git a/keyboards/keychron/q1/rev_0107/keymaps/default/keymap.c b/keyboards/keychron/q1/rev_0107/keymaps/default/keymap.c new file mode 100644 index 000000000000..64cacebc9ffe --- /dev/null +++ b/keyboards/keychron/q1/rev_0107/keymaps/default/keymap.c @@ -0,0 +1,135 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +#ifdef VIA_ENABLE + #define USER_START USER00 +#else + #define USER_START SAFE_RANGE +#endif + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = USER_START, + KC_LAUNCHPAD, + KC_LOPTN, + KC_ROPTN, + KC_LCMMD, + KC_RCMMD, + KC_TASK_VIEW, + KC_FILE_EXPLORER +}; + +typedef struct PACKED { + uint8_t len; + uint8_t keycode[2]; +} key_combination_t; + +key_combination_t key_comb_list[2] = { + {2, {KC_LWIN, KC_TAB}}, + {2, {KC_LWIN, KC_E}} +}; + +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define KC_TASK KC_TASK_VIEW +#define KC_FLXP KC_FILE_EXPLORER + +static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_82( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_MUTE, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_ansi_82( + KC_TRNS, 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_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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_ansi_82( + KC_ESC, 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_DEL, KC_MUTE, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_ansi_82( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LOPTN: + case KC_ROPTN: + case KC_LCMMD: + case KC_RCMMD: + if (record->event.pressed) { + register_code(mac_keycode[keycode - KC_LOPTN]); + } else { + unregister_code(mac_keycode[keycode - KC_LOPTN]); + } + return false; // Skip all further processing of this key + case KC_TASK: + case KC_FLXP: + if (record->event.pressed) { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + register_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } else { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q1/rev_0107/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0107/keymaps/via/keymap.c new file mode 100644 index 000000000000..4200c9a620dc --- /dev/null +++ b/keyboards/keychron/q1/rev_0107/keymaps/via/keymap.c @@ -0,0 +1,177 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +#ifdef VIA_ENABLE + #define USER_START USER00 +#else + #define USER_START SAFE_RANGE +#endif + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = USER_START, + KC_LAUNCHPAD, + KC_LOPTN, + KC_ROPTN, + KC_LCMMD, + KC_RCMMD, + KC_TASK_VIEW, + KC_FILE_EXPLORER +}; + +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define KC_TASK KC_TASK_VIEW +#define KC_FLXP KC_FILE_EXPLORER + +typedef struct PACKED { + uint8_t len; + uint8_t keycode[2]; +} key_combination_t; + +key_combination_t key_comb_list[2] = { + {2, {KC_LWIN, KC_TAB}}, + {2, {KC_LWIN, KC_E}} +}; + +static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_all( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_VOLD, KC_MUTE, KC_VOLU, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_all( + KC_TRNS, 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_TRNS, RGB_VAD, RGB_TOG, RGB_VAI, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_all( + KC_ESC, 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_DEL, KC_VOLD, KC_MUTE, KC_VOLU, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_all( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, RGB_VAD, RGB_TOG, RGB_VAI, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), +}; + +#if defined(VIA_ENABLE) && defined(ENCODER_ENABLE) + +#define ENCODERS 1 +static uint8_t encoder_state[ENCODERS] = {0}; +static keypos_t encoder_cw[ENCODERS] = {{ 8, 5 }}; +static keypos_t encoder_ccw[ENCODERS] = {{ 7, 5 }}; + +void encoder_action_unregister(void) { + for (int index = 0; index < ENCODERS; ++index) { + if (encoder_state[index]) { + keyevent_t encoder_event = (keyevent_t) { + .key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], + .pressed = false, + .time = (timer_read() | 1) + }; + encoder_state[index] = 0; + action_exec(encoder_event); + } + } +} + +void encoder_action_register(uint8_t index, bool clockwise) { + keyevent_t encoder_event = (keyevent_t) { + .key = clockwise ? encoder_cw[index] : encoder_ccw[index], + .pressed = true, + .time = (timer_read() | 1) + }; + encoder_state[index] = (clockwise ^ 1) | (clockwise << 1); + action_exec(encoder_event); +} + +void matrix_scan_user(void) { + encoder_action_unregister(); +} + +bool encoder_update_user(uint8_t index, bool clockwise) { + encoder_action_register(index, clockwise); + return false; +}; + +#endif + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LOPTN: + case KC_ROPTN: + case KC_LCMMD: + case KC_RCMMD: + if (record->event.pressed) { + register_code(mac_keycode[keycode - KC_LOPTN]); + } else { + unregister_code(mac_keycode[keycode - KC_LOPTN]); + } + return false; // Skip all further processing of this key + case KC_TASK: + case KC_FLXP: + if (record->event.pressed) { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + register_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } else { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q1/rev_0107/keymaps/via/rules.mk b/keyboards/keychron/q1/rev_0107/keymaps/via/rules.mk new file mode 100644 index 000000000000..ea7d10f812b3 --- /dev/null +++ b/keyboards/keychron/q1/rev_0107/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +MOUSEKEY_ENABLE = yes \ No newline at end of file diff --git a/keyboards/keychron/q1/rev_0107/readme.md b/keyboards/keychron/q1/rev_0107/readme.md new file mode 100644 index 000000000000..d4114fa800f1 --- /dev/null +++ b/keyboards/keychron/q1/rev_0107/readme.md @@ -0,0 +1,5 @@ +# The ANSI variant of the Keychron Q1 + +- Enable EC11 rotary encoder. +- Turn colckwise to increase volume and turn anti-colckwise to decrease volume. +- Press top right key pushbutton to mute. diff --git a/keyboards/keychron/q1/rev_0107/rev_0107.c b/keyboards/keychron/q1/rev_0107/rev_0107.c new file mode 100644 index 000000000000..44feddc9ad7b --- /dev/null +++ b/keyboards/keychron/q1/rev_0107/rev_0107.c @@ -0,0 +1,174 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include "quantum.h" + +const matrix_row_t matrix_mask[] = { + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111101111, +}; + +#ifdef RGB_MATRIX_ENABLE + +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_16, A_16, B_16}, + + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {0, I_5, G_5, H_5}, + {0, I_6, G_6, H_6}, + {0, I_7, G_7, H_7}, + {0, I_8, G_8, H_8}, + {0, I_9, G_9, H_9}, + {0, I_10, G_10, H_10}, + {0, I_11, G_11, H_11}, + {0, I_12, G_12, H_12}, + {0, I_13, G_13, H_13}, + {0, I_14, G_14, H_14}, + {0, I_16, G_16, H_16}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_14, D_14, E_14}, + {0, F_16, D_16, E_16}, + + {1, I_1, G_1, H_1}, + {1, I_2, G_2, H_2}, + {1, I_3, G_3, H_3}, + {1, I_4, G_4, H_4}, + {1, I_5, G_5, H_5}, + {1, I_6, G_6, H_6}, + {1, I_7, G_7, H_7}, + {1, I_8, G_8, H_8}, + {1, I_9, G_9, H_9}, + {1, I_10, G_10, H_10}, + {1, I_11, G_11, H_11}, + {1, I_12, G_12, H_12}, + {1, I_14, G_14, H_14}, + {1, I_16, G_16, H_16}, + + {1, F_1, D_1, E_1}, + {1, F_3, D_3, E_3}, + {1, F_4, D_4, E_4}, + {1, F_5, D_5, E_5}, + {1, F_6, D_6, E_6}, + {1, F_7, D_7, E_7}, + {1, F_8, D_8, E_8}, + {1, F_9, D_9, E_9}, + {1, F_10, D_10, E_10}, + {1, F_11, D_11, E_11}, + {1, F_12, D_12, E_12}, + {1, F_14, D_14, E_14}, + {1, F_15, D_15, E_15}, + + {1, C_1, A_1, B_1}, + {1, C_2, A_2, B_2}, + {1, C_3, A_3, B_3}, + {1, C_7, A_7, B_7}, + {1, C_11, A_11, B_11}, + {1, C_12, A_12, B_12}, + {1, C_13, A_13, B_13}, + {1, C_14, A_14, B_14}, + {1, C_15, A_15, B_15}, + {1, C_16, A_16, B_16}, +}; + +#define __ NO_LED + +led_config_t g_led_config = { + { + // Key Matrix to LED Index + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, __, 14 }, + { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, __, 29 }, + { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, __, 44 }, + { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, __, 57, __, 58 }, + { 59, __, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, __, 70, 71, __ }, + { 72, 73, 74, __, __, __, 75, __, __, __, 76, 77, 78, 79, 80, 81 } + }, + { + // LED Index to Physical Position + {0,0}, {18,0}, {33,0}, {48,0}, {62,0}, {81,0}, {95,0}, {110,0}, {125,0}, {143,0}, {158,0}, {173,0}, {187,0}, {206,0}, {224,0}, + {0,15}, {15,15}, {29,15}, {44,15}, {59,15}, {73,15}, {88,15}, {103,15}, {118,15}, {132,15}, {147,15}, {162,15}, {176,15}, {198,15}, {224,15}, + {4,26}, {22,26}, {37,26}, {51,26}, {66,26}, {81,26}, {95,26}, {110,26}, {125,26}, {140,26}, {154,26}, {169,26}, {184,26}, {202,26}, {224,26}, + {6,38}, {26,38}, {40,38}, {55,38}, {70,38}, {84,38}, {99,38}, {114,38}, {129,38}, {143,38}, {158,38}, {173,38}, {196,38}, {224,38}, + {9,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {151,49}, {165,49}, {185,49}, {209,52}, + {2,61}, {20,61}, {39,61}, {94,61}, {147,61}, {162,61}, {176,61}, {195,64}, {209,64}, {224,64} + }, + { + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, + 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 + } +}; + +#endif + +#ifdef ENCODER_ENABLE + +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { return false; } + if (index == 0) { + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + } + return true; +} + +#endif diff --git a/keyboards/keychron/q1/rev_0107/rev_0107.h b/keyboards/keychron/q1/rev_0107/rev_0107.h new file mode 100644 index 000000000000..19c4e7dff612 --- /dev/null +++ b/keyboards/keychron/q1/rev_0107/rev_0107.h @@ -0,0 +1,52 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#define XXX KC_NO + +#define LAYOUT_all( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K57, K0F, K58, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3F, \ + K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4E, \ + K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, XXX, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, XXX, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, XXX, K2F }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, XXX, K3F }, \ + { K40, XXX, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, XXX }, \ + { K50, K51, K52, XXX, XXX, XXX, K56, K57, K58, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ +} +#define LAYOUT_ansi_82( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0F, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3F, \ + K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4E, \ + K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, XXX, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, XXX, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, XXX, K2F }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, XXX, K3F }, \ + { K40, XXX, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, XXX }, \ + { K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ +} diff --git a/keyboards/keychron/q1/rev_0107/rules.mk b/keyboards/keychron/q1/rev_0107/rules.mk new file mode 100644 index 000000000000..93b4aba39074 --- /dev/null +++ b/keyboards/keychron/q1/rev_0107/rules.mk @@ -0,0 +1,28 @@ +# MCU name +MCU = STM32L433 + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # USB N-key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = yes # Enable Encoder +DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 +EEPROM_DRIVER = transient + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +# custom matrix setup +CUSTOM_MATRIX = lite + +SRC += matrix.c From 7e8499fbedb1acca35daf36294a0c04e9643175c Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Mon, 21 Feb 2022 15:38:52 +0800 Subject: [PATCH 133/155] Update keyboards/keychron/q1/rev_0107/config.h Co-authored-by: Drashna Jaelre --- keyboards/keychron/q1/rev_0107/config.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/keyboards/keychron/q1/rev_0107/config.h b/keyboards/keychron/q1/rev_0107/config.h index 126a7283ec5b..11b9b47d0da2 100644 --- a/keyboards/keychron/q1/rev_0107/config.h +++ b/keyboards/keychron/q1/rev_0107/config.h @@ -47,9 +47,6 @@ /* Set the maxium brightness as 192 in order to limit the current to 450mA */ #define RGB_MATRIX_MAXIMUM_BRIGHTNESS (24 * 8) // 8 = RGB_MATRIX_VAL_STEP -/* Set USB polling rate as 1 milliseconds */ -#define USB_POLLING_INTERVAL_MS 1 - /* We have 2KB EEPROM size on STM32L432 */ #define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047 From 4f22b9e2b6c1c5a56fb04d290c45e95e1b76e329 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Mon, 21 Feb 2022 15:49:26 +0800 Subject: [PATCH 134/155] Slight modification --- keyboards/keychron/q1/rev_0106/keymaps/default/keymap.c | 8 +------- keyboards/keychron/q1/rev_0106/keymaps/via/keymap.c | 8 +------- keyboards/keychron/q1/rev_0107/config.h | 3 --- keyboards/keychron/q1/rev_0107/keymaps/default/keymap.c | 8 +------- keyboards/keychron/q1/rev_0107/keymaps/via/keymap.c | 8 +------- 5 files changed, 4 insertions(+), 31 deletions(-) diff --git a/keyboards/keychron/q1/rev_0106/keymaps/default/keymap.c b/keyboards/keychron/q1/rev_0106/keymaps/default/keymap.c index 45625b6eeeeb..da98a2d76cf2 100644 --- a/keyboards/keychron/q1/rev_0106/keymaps/default/keymap.c +++ b/keyboards/keychron/q1/rev_0106/keymaps/default/keymap.c @@ -16,12 +16,6 @@ #include QMK_KEYBOARD_H -#ifdef VIA_ENABLE - #define USER_START USER00 -#else - #define USER_START SAFE_RANGE -#endif - enum layers{ MAC_BASE, MAC_FN, @@ -30,7 +24,7 @@ enum layers{ }; enum custom_keycodes { - KC_MISSION_CONTROL = USER_START, + KC_MISSION_CONTROL = SAFE_RANGE, KC_LAUNCHPAD, KC_LOPTN, KC_ROPTN, diff --git a/keyboards/keychron/q1/rev_0106/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0106/keymaps/via/keymap.c index 45625b6eeeeb..a94680dc6188 100644 --- a/keyboards/keychron/q1/rev_0106/keymaps/via/keymap.c +++ b/keyboards/keychron/q1/rev_0106/keymaps/via/keymap.c @@ -16,12 +16,6 @@ #include QMK_KEYBOARD_H -#ifdef VIA_ENABLE - #define USER_START USER00 -#else - #define USER_START SAFE_RANGE -#endif - enum layers{ MAC_BASE, MAC_FN, @@ -30,7 +24,7 @@ enum layers{ }; enum custom_keycodes { - KC_MISSION_CONTROL = USER_START, + KC_MISSION_CONTROL = USER00, KC_LAUNCHPAD, KC_LOPTN, KC_ROPTN, diff --git a/keyboards/keychron/q1/rev_0107/config.h b/keyboards/keychron/q1/rev_0107/config.h index 126a7283ec5b..11b9b47d0da2 100644 --- a/keyboards/keychron/q1/rev_0107/config.h +++ b/keyboards/keychron/q1/rev_0107/config.h @@ -47,9 +47,6 @@ /* Set the maxium brightness as 192 in order to limit the current to 450mA */ #define RGB_MATRIX_MAXIMUM_BRIGHTNESS (24 * 8) // 8 = RGB_MATRIX_VAL_STEP -/* Set USB polling rate as 1 milliseconds */ -#define USB_POLLING_INTERVAL_MS 1 - /* We have 2KB EEPROM size on STM32L432 */ #define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047 diff --git a/keyboards/keychron/q1/rev_0107/keymaps/default/keymap.c b/keyboards/keychron/q1/rev_0107/keymaps/default/keymap.c index 64cacebc9ffe..321edc4d368c 100644 --- a/keyboards/keychron/q1/rev_0107/keymaps/default/keymap.c +++ b/keyboards/keychron/q1/rev_0107/keymaps/default/keymap.c @@ -16,12 +16,6 @@ #include QMK_KEYBOARD_H -#ifdef VIA_ENABLE - #define USER_START USER00 -#else - #define USER_START SAFE_RANGE -#endif - enum layers{ MAC_BASE, MAC_FN, @@ -30,7 +24,7 @@ enum layers{ }; enum custom_keycodes { - KC_MISSION_CONTROL = USER_START, + KC_MISSION_CONTROL = SAFE_RANGE, KC_LAUNCHPAD, KC_LOPTN, KC_ROPTN, diff --git a/keyboards/keychron/q1/rev_0107/keymaps/via/keymap.c b/keyboards/keychron/q1/rev_0107/keymaps/via/keymap.c index 4200c9a620dc..3bcadadd20f1 100644 --- a/keyboards/keychron/q1/rev_0107/keymaps/via/keymap.c +++ b/keyboards/keychron/q1/rev_0107/keymaps/via/keymap.c @@ -16,12 +16,6 @@ #include QMK_KEYBOARD_H -#ifdef VIA_ENABLE - #define USER_START USER00 -#else - #define USER_START SAFE_RANGE -#endif - enum layers{ MAC_BASE, MAC_FN, @@ -30,7 +24,7 @@ enum layers{ }; enum custom_keycodes { - KC_MISSION_CONTROL = USER_START, + KC_MISSION_CONTROL = USER00, KC_LAUNCHPAD, KC_LOPTN, KC_ROPTN, From 989cec6054f54e17e8a6ac4a78c748a00fe4815b Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 22 Feb 2022 09:32:32 +0800 Subject: [PATCH 135/155] Update keyboards/keychron/q1/rev_0107/rules.mk Co-authored-by: Ryan --- keyboards/keychron/q1/rev_0107/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/keychron/q1/rev_0107/rules.mk b/keyboards/keychron/q1/rev_0107/rules.mk index 93b4aba39074..a1c3f32e0dce 100644 --- a/keyboards/keychron/q1/rev_0107/rules.mk +++ b/keyboards/keychron/q1/rev_0107/rules.mk @@ -9,7 +9,7 @@ MOUSEKEY_ENABLE = yes # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = yes # USB N-key Rollover +NKRO_ENABLE = yes # Enable N-key Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output From c6d51d5ff41d032ef2c109dc251231aa6d7796db Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 22 Feb 2022 09:32:50 +0800 Subject: [PATCH 136/155] Update keyboards/keychron/q1/rev_0107/rules.mk Co-authored-by: Ryan --- keyboards/keychron/q1/rev_0107/rules.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/keyboards/keychron/q1/rev_0107/rules.mk b/keyboards/keychron/q1/rev_0107/rules.mk index a1c3f32e0dce..5a6d5c921455 100644 --- a/keyboards/keychron/q1/rev_0107/rules.mk +++ b/keyboards/keychron/q1/rev_0107/rules.mk @@ -1,6 +1,9 @@ # MCU name MCU = STM32L433 +# Bootloader selection +BOOTLOADER = stm32-dfu + # Build Options # change yes to no to disable # From 3391861ee6060c53745328e51d67f929e68bb988 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 22 Feb 2022 09:35:30 +0800 Subject: [PATCH 137/155] Update keyboards/keychron/q1/rev_0106/rules.mk Co-authored-by: Ryan --- keyboards/keychron/q1/rev_0106/rules.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/keyboards/keychron/q1/rev_0106/rules.mk b/keyboards/keychron/q1/rev_0106/rules.mk index 01c7636f5ab6..e3dc79687c1f 100644 --- a/keyboards/keychron/q1/rev_0106/rules.mk +++ b/keyboards/keychron/q1/rev_0106/rules.mk @@ -1,6 +1,9 @@ # MCU name MCU = STM32L433 +# Bootloader selection +BOOTLOADER = stm32-dfu + # Build Options # change yes to no to disable # From f9c5669179e20fd44e3e1cc7d462121a83a20012 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 22 Feb 2022 09:35:39 +0800 Subject: [PATCH 138/155] Update keyboards/keychron/q1/rev_0106/rules.mk Co-authored-by: Ryan --- keyboards/keychron/q1/rev_0106/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/keychron/q1/rev_0106/rules.mk b/keyboards/keychron/q1/rev_0106/rules.mk index e3dc79687c1f..ab4ab62dc878 100644 --- a/keyboards/keychron/q1/rev_0106/rules.mk +++ b/keyboards/keychron/q1/rev_0106/rules.mk @@ -12,7 +12,7 @@ MOUSEKEY_ENABLE = yes # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = yes # USB N-key Rollover +NKRO_ENABLE = yes # Enable N-key Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output From 0186837e5d0ed89a8320c9ee21b33a4d7c1126f7 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Mon, 28 Feb 2022 09:45:04 +0800 Subject: [PATCH 139/155] Create matrix.c --- keyboards/keychron/q1/matrix.c | 172 +++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 keyboards/keychron/q1/matrix.c diff --git a/keyboards/keychron/q1/matrix.c b/keyboards/keychron/q1/matrix.c new file mode 100644 index 000000000000..1bcd4b5d0c94 --- /dev/null +++ b/keyboards/keychron/q1/matrix.c @@ -0,0 +1,172 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include +#include +#include +#include "util.h" +#include "matrix.h" +#include "debounce.h" +#include "quantum.h" + +#define DS A7 +#define STCP B0 +#define SHCP B1 + +#ifdef MATRIX_ROW_PINS +static pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; +#endif // MATRIX_ROW_PINS +#ifdef MATRIX_COL_PINS +static pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; +#endif // MATRIX_COL_PINS + +/* matrix state(1:on, 0:off) */ +extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values +extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values + +static inline void setPinOutput_writeLow(pin_t pin) { + ATOMIC_BLOCK_FORCEON { + setPinOutput(pin); + writePinLow(pin); + } +} + +static inline void setPinOutput_writeHigh(pin_t pin) { + ATOMIC_BLOCK_FORCEON { + setPinOutput(pin); + writePinHigh(pin); + } +} + +static inline void setPinInputHigh_atomic(pin_t pin) { + ATOMIC_BLOCK_FORCEON { setPinInputHigh(pin); } +} + +static inline uint8_t readMatrixPin(pin_t pin) { + if (pin != NO_PIN) { + return readPin(pin); + } else { + return 1; + } +} + +static void delay_nTime(uint8_t time) { + while(time--); +} + +static void SendTo595(uint8_t byteData) { + uint8_t i = 0; + + for (; i < 8; i++) { + if (byteData & 0x1) { + setPinOutput_writeHigh(DS); + } else { + setPinOutput_writeLow(DS); + } + byteData = byteData>>1; + + setPinOutput_writeHigh(SHCP); + delay_nTime(10); + setPinOutput_writeLow(SHCP); + } + setPinOutput_writeHigh(STCP); + delay_nTime(10); + setPinOutput_writeLow(STCP); +} + +static bool select_col(uint8_t col) { + pin_t pin = col_pins[col]; + + if (pin != NO_PIN) { + setPinOutput_writeLow(pin); + return true; + } else { + SendTo595(~(0x1<<(MATRIX_COLS - col -1))); + return true; + } + return false; +} + +static void unselect_col(uint8_t col) { + pin_t pin = col_pins[col]; + + if (pin != NO_PIN) { + setPinInputHigh_atomic(pin); + } else { + SendTo595(0xFF); + } +} + +static void unselect_cols(void) { + for (uint8_t x = 0; x < MATRIX_COLS; x++) { + unselect_col(x); + } +} + +static void matrix_init_pins(void) { + unselect_cols(); + for (uint8_t x = 0; x < MATRIX_ROWS; x++) { + if (row_pins[x] != NO_PIN) { + setPinInputHigh_atomic(row_pins[x]); + } + } +} + +void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) { + bool key_pressed = false; + + // Select col + if (!select_col(current_col)) { + return; // skip NO_PIN col + } + matrix_output_select_delay(); + + // For each row... + for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) { + // Check row pin state + if (readMatrixPin(row_pins[row_index]) == 0) { + // Pin LO, set col bit + current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col); + key_pressed = true; + } else { + // Pin HI, clear col bit + current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col); + } + } + + // Unselect col + unselect_col(current_col); + matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH +} + +void matrix_init_custom(void) { + // initialize key pins + matrix_init_pins(); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + matrix_row_t curr_matrix[MATRIX_ROWS] = {0}; + + // Set col, read rows + for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { + matrix_read_rows_on_col(curr_matrix, current_col); + } + + bool changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0; + if (changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix)); + + return changed; +} From 9480aa8dae08a0c1ef7de6f2125299fa93f600fd Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Wed, 6 Apr 2022 10:51:46 +0800 Subject: [PATCH 140/155] Add q3 --- keyboards/keychron/q3/chconf.h | 25 ++ keyboards/keychron/q3/config.h | 116 ++++++++ keyboards/keychron/q3/halconf.h | 22 ++ keyboards/keychron/q3/matrix.c | 172 +++++++++++ keyboards/keychron/q3/mcuconf.h | 22 ++ keyboards/keychron/q3/q3.c | 74 +++++ keyboards/keychron/q3/q3.h | 29 ++ .../keychron/q3/q3_ansi_stm32l432/config.h | 37 +++ .../keychron/q3/q3_ansi_stm32l432/info.json | 103 +++++++ .../keymaps/default/keymap.c | 168 +++++++++++ .../q3/q3_ansi_stm32l432/keymaps/via/keymap.c | 168 +++++++++++ .../q3/q3_ansi_stm32l432/keymaps/via/rules.mk | 1 + .../q3/q3_ansi_stm32l432/q3_ansi_stm32l432.c | 154 ++++++++++ .../q3/q3_ansi_stm32l432/q3_ansi_stm32l432.h | 37 +++ .../keychron/q3/q3_ansi_stm32l432/readme.md | 1 + .../keychron/q3/q3_ansi_stm32l432/rules.mk | 28 ++ .../q3/q3_ansi_stm32l432_ec11/config.h | 39 +++ .../q3/q3_ansi_stm32l432_ec11/info.json | 203 +++++++++++++ .../keymaps/default/keymap.c | 168 +++++++++++ .../keymaps/via/keymap.c | 209 +++++++++++++ .../keymaps/via/rules.mk | 1 + .../q3_ansi_stm32l432_ec11.c | 185 ++++++++++++ .../q3_ansi_stm32l432_ec11.h | 52 ++++ .../q3/q3_ansi_stm32l432_ec11/readme.md | 5 + .../q3/q3_ansi_stm32l432_ec11/rules.mk | 30 ++ .../keychron/q3/q3_iso_stm32l432/config.h | 33 +++ .../keychron/q3/q3_iso_stm32l432/info.json | 104 +++++++ .../q3_iso_stm32l432/keymaps/default/keymap.c | 168 +++++++++++ .../q3/q3_iso_stm32l432/keymaps/via/keymap.c | 168 +++++++++++ .../q3/q3_iso_stm32l432/keymaps/via/rules.mk | 1 + .../q3/q3_iso_stm32l432/q3_iso_stm32l432.c | 155 ++++++++++ .../q3/q3_iso_stm32l432/q3_iso_stm32l432.h | 37 +++ .../keychron/q3/q3_iso_stm32l432/readme.md | 1 + .../keychron/q3/q3_iso_stm32l432/rules.mk | 28 ++ .../q3/q3_iso_stm32l432_ec11/config.h | 39 +++ .../q3/q3_iso_stm32l432_ec11/info.json | 205 +++++++++++++ .../keymaps/default/keymap.c | 168 +++++++++++ .../keymaps/via/keymap.c | 209 +++++++++++++ .../keymaps/via/rules.mk | 1 + .../q3_iso_stm32l432_ec11.c | 186 ++++++++++++ .../q3_iso_stm32l432_ec11.h | 52 ++++ .../q3/q3_iso_stm32l432_ec11/readme.md | 5 + .../q3/q3_iso_stm32l432_ec11/rules.mk | 31 ++ keyboards/keychron/q3/readme.md | 20 ++ keyboards/keychron/q3/test.c | 279 ++++++++++++++++++ keyboards/keychron/q3/test.h | 25 ++ 46 files changed, 3964 insertions(+) create mode 100644 keyboards/keychron/q3/chconf.h create mode 100644 keyboards/keychron/q3/config.h create mode 100644 keyboards/keychron/q3/halconf.h create mode 100644 keyboards/keychron/q3/matrix.c create mode 100644 keyboards/keychron/q3/mcuconf.h create mode 100644 keyboards/keychron/q3/q3.c create mode 100644 keyboards/keychron/q3/q3.h create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432/config.h create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432/info.json create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/default/keymap.c create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/keymap.c create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/rules.mk create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432/q3_ansi_stm32l432.c create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432/q3_ansi_stm32l432.h create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432/readme.md create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432/rules.mk create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432_ec11/config.h create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432_ec11/info.json create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/default/keymap.c create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/keymap.c create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/rules.mk create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.c create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.h create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432_ec11/readme.md create mode 100644 keyboards/keychron/q3/q3_ansi_stm32l432_ec11/rules.mk create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432/config.h create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432/info.json create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432/keymaps/default/keymap.c create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/keymap.c create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/rules.mk create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432/q3_iso_stm32l432.c create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432/q3_iso_stm32l432.h create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432/readme.md create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432/rules.mk create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432_ec11/config.h create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432_ec11/info.json create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/default/keymap.c create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/keymap.c create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/rules.mk create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.c create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.h create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432_ec11/readme.md create mode 100644 keyboards/keychron/q3/q3_iso_stm32l432_ec11/rules.mk create mode 100644 keyboards/keychron/q3/readme.md create mode 100644 keyboards/keychron/q3/test.c create mode 100644 keyboards/keychron/q3/test.h diff --git a/keyboards/keychron/q3/chconf.h b/keyboards/keychron/q3/chconf.h new file mode 100644 index 000000000000..cbbae31079fb --- /dev/null +++ b/keyboards/keychron/q3/chconf.h @@ -0,0 +1,25 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +#pragma once + +#define CH_CFG_ST_FREQUENCY 10000 + +#define CH_CFG_OPTIMIZE_SPEED FALSE + +#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE + +#include_next diff --git a/keyboards/keychron/q3/config.h b/keyboards/keychron/q3/config.h new file mode 100644 index 000000000000..e034e212a1fc --- /dev/null +++ b/keyboards/keychron/q3/config.h @@ -0,0 +1,116 @@ +/* Copyright 2021 @ Keychron(https://www.keychron.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 . + */ + +#pragma once + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x3434 +#define MANUFACTURER Keychron +#define PRODUCT Keychron Q3 + +/* key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 16 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION ROW2COL + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* RGB Matrix Driver Configuration */ +#define DRIVER_COUNT 2 +#define DRIVER_ADDR_1 0b1110111 +#define DRIVER_ADDR_2 0b1110100 + +/* Scan phase of led driver set as MSKPHASE_9CHANNEL(defined as 0x03 in CKLED2001.h) */ +#define PHASE_CHANNEL MSKPHASE_9CHANNEL + +/* DIP switch */ +#define DIP_SWITCH_MATRIX_GRID { {5, 4} } + +/* Disable DIP switch in matrix data */ +#define MATRIX_MASKED + +/* NKRO */ +#define FORCE_NKRO + +/* turn off effects when suspended */ +#define RGB_DISABLE_WHEN_USB_SUSPENDED + +/* Set USB polling rate as 1 milliseconds */ +#define USB_POLLING_INTERVAL_MS 1 + +/* We have 2KB EEPROM size on STM32L432 */ +#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047 + +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +// #define ENABLE_RGB_MATRIX_ALPHAS_MODS +// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_BREATHING +// #define ENABLE_RGB_MATRIX_BAND_SAT +// #define ENABLE_RGB_MATRIX_BAND_VAL +// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +#define ENABLE_RGB_MATRIX_CYCLE_ALL +#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +#define ENABLE_RGB_MATRIX_DUAL_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_BEACON +// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +#define ENABLE_RGB_MATRIX_RAINDROPS +// #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +// #define ENABLE_RGB_MATRIX_HUE_BREATHING +// #define ENABLE_RGB_MATRIX_HUE_PENDULUM +// #define ENABLE_RGB_MATRIX_HUE_WAVE +// #define ENABLE_RGB_MATRIX_PIXEL_RAIN +// #define ENABLE_RGB_MATRIX_PIXEL_FLOW +// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP +#define ENABLE_RGB_MATRIX_DIGITAL_RAIN +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +#define ENABLE_RGB_MATRIX_SPLASH +#define ENABLE_RGB_MATRIX_MULTISPLASH +#define ENABLE_RGB_MATRIX_SOLID_SPLASH +#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH +// #define RGB_MATRIX_KEYPRESSES + +/* Allow VIA to edit lighting */ +#ifdef VIA_ENABLE +# define VIA_QMK_RGBLIGHT_ENABLE +#endif + +/* Enable receive custom command from host */ +#define RAW_HID_CMD 0xAB diff --git a/keyboards/keychron/q3/halconf.h b/keyboards/keychron/q3/halconf.h new file mode 100644 index 000000000000..e490b49e005a --- /dev/null +++ b/keyboards/keychron/q3/halconf.h @@ -0,0 +1,22 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +#pragma once + +#define HAL_USE_I2C TRUE +#define PAL_USE_CALLBACKS TRUE + +#include_next diff --git a/keyboards/keychron/q3/matrix.c b/keyboards/keychron/q3/matrix.c new file mode 100644 index 000000000000..1bcd4b5d0c94 --- /dev/null +++ b/keyboards/keychron/q3/matrix.c @@ -0,0 +1,172 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include +#include +#include +#include "util.h" +#include "matrix.h" +#include "debounce.h" +#include "quantum.h" + +#define DS A7 +#define STCP B0 +#define SHCP B1 + +#ifdef MATRIX_ROW_PINS +static pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; +#endif // MATRIX_ROW_PINS +#ifdef MATRIX_COL_PINS +static pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; +#endif // MATRIX_COL_PINS + +/* matrix state(1:on, 0:off) */ +extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values +extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values + +static inline void setPinOutput_writeLow(pin_t pin) { + ATOMIC_BLOCK_FORCEON { + setPinOutput(pin); + writePinLow(pin); + } +} + +static inline void setPinOutput_writeHigh(pin_t pin) { + ATOMIC_BLOCK_FORCEON { + setPinOutput(pin); + writePinHigh(pin); + } +} + +static inline void setPinInputHigh_atomic(pin_t pin) { + ATOMIC_BLOCK_FORCEON { setPinInputHigh(pin); } +} + +static inline uint8_t readMatrixPin(pin_t pin) { + if (pin != NO_PIN) { + return readPin(pin); + } else { + return 1; + } +} + +static void delay_nTime(uint8_t time) { + while(time--); +} + +static void SendTo595(uint8_t byteData) { + uint8_t i = 0; + + for (; i < 8; i++) { + if (byteData & 0x1) { + setPinOutput_writeHigh(DS); + } else { + setPinOutput_writeLow(DS); + } + byteData = byteData>>1; + + setPinOutput_writeHigh(SHCP); + delay_nTime(10); + setPinOutput_writeLow(SHCP); + } + setPinOutput_writeHigh(STCP); + delay_nTime(10); + setPinOutput_writeLow(STCP); +} + +static bool select_col(uint8_t col) { + pin_t pin = col_pins[col]; + + if (pin != NO_PIN) { + setPinOutput_writeLow(pin); + return true; + } else { + SendTo595(~(0x1<<(MATRIX_COLS - col -1))); + return true; + } + return false; +} + +static void unselect_col(uint8_t col) { + pin_t pin = col_pins[col]; + + if (pin != NO_PIN) { + setPinInputHigh_atomic(pin); + } else { + SendTo595(0xFF); + } +} + +static void unselect_cols(void) { + for (uint8_t x = 0; x < MATRIX_COLS; x++) { + unselect_col(x); + } +} + +static void matrix_init_pins(void) { + unselect_cols(); + for (uint8_t x = 0; x < MATRIX_ROWS; x++) { + if (row_pins[x] != NO_PIN) { + setPinInputHigh_atomic(row_pins[x]); + } + } +} + +void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) { + bool key_pressed = false; + + // Select col + if (!select_col(current_col)) { + return; // skip NO_PIN col + } + matrix_output_select_delay(); + + // For each row... + for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) { + // Check row pin state + if (readMatrixPin(row_pins[row_index]) == 0) { + // Pin LO, set col bit + current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col); + key_pressed = true; + } else { + // Pin HI, clear col bit + current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col); + } + } + + // Unselect col + unselect_col(current_col); + matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH +} + +void matrix_init_custom(void) { + // initialize key pins + matrix_init_pins(); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + matrix_row_t curr_matrix[MATRIX_ROWS] = {0}; + + // Set col, read rows + for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { + matrix_read_rows_on_col(curr_matrix, current_col); + } + + bool changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0; + if (changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix)); + + return changed; +} diff --git a/keyboards/keychron/q3/mcuconf.h b/keyboards/keychron/q3/mcuconf.h new file mode 100644 index 000000000000..0ca8c64850f4 --- /dev/null +++ b/keyboards/keychron/q3/mcuconf.h @@ -0,0 +1,22 @@ +/* Copyright 2020 QMK + * + * 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 . + */ + +#pragma once + +#include_next + +#undef STM32_I2C_USE_I2C1 +#define STM32_I2C_USE_I2C1 TRUE diff --git a/keyboards/keychron/q3/q3.c b/keyboards/keychron/q3/q3.c new file mode 100644 index 000000000000..1f79ecede361 --- /dev/null +++ b/keyboards/keychron/q3/q3.c @@ -0,0 +1,74 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include "q3.h" + +// clang-format off + +const matrix_row_t matrix_mask[] = { + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111111111, + 0b1111111111101111, +}; + +// clang-format on + +#ifdef DIP_SWITCH_ENABLE + +bool dip_switch_update_kb(uint8_t index, bool active) { + if (!dip_switch_update_user(index, active)) { + return false; + } + if (index == 0) { + default_layer_set(1UL << (active ? 2 : 0)); + } + return true; +} + +#endif + +#if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) + +# define CAPS_LOCK_MAX_BRIGHTNESS 0xFF +# ifdef RGB_MATRIX_MAXIMUM_BRIGHTNESS +# undef CAPS_LOCK_MAX_BRIGHTNESS +# define CAPS_LOCK_MAX_BRIGHTNESS RGB_MATRIX_MAXIMUM_BRIGHTNESS +# endif + +# define CAPS_LOCK_VAL_STEP 8 +# ifdef RGB_MATRIX_VAL_STEP +# undef CAPS_LOCK_VAL_STEP +# define CAPS_LOCK_VAL_STEP RGB_MATRIX_VAL_STEP +# endif + +void rgb_matrix_indicators_kb(void) { + if (host_keyboard_led_state().caps_lock) { + uint8_t b = rgb_matrix_get_val(); + if (b < CAPS_LOCK_VAL_STEP) { + b = CAPS_LOCK_VAL_STEP; + } else if (b < (CAPS_LOCK_MAX_BRIGHTNESS - CAPS_LOCK_VAL_STEP)) { + b += CAPS_LOCK_VAL_STEP; // one step more than current brightness + } else { + b = CAPS_LOCK_MAX_BRIGHTNESS; + } + rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, b, b, b); // white, with the adjusted brightness + } +} + +#endif diff --git a/keyboards/keychron/q3/q3.h b/keyboards/keychron/q3/q3.h new file mode 100644 index 000000000000..c0cc04c74126 --- /dev/null +++ b/keyboards/keychron/q3/q3.h @@ -0,0 +1,29 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#if defined(KEYBOARD_keychron_q3_q3_ansi_stm32l432) +# include "q3_ansi_stm32l432.h" +#elif defined(KEYBOARD_keychron_q3_q3_ansi_stm32l432_ec11) +# include "q3_ansi_stm32l432_ec11.h" +#elif defined(KEYBOARD_keychron_q3_q3_iso_stm32l432) +# include "q3_iso_stm32l432.h" +#elif defined(KEYBOARD_keychron_q3_q3_iso_stm32l432_ec11) +# include "q3_iso_stm32l432_ec11.h" +#endif diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/config.h b/keyboards/keychron/q3/q3_ansi_stm32l432/config.h new file mode 100644 index 000000000000..aaaac5792c37 --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432/config.h @@ -0,0 +1,37 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x0120 +#define DEVICE_VER 0x0103 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } +#define MATRIX_COL_PINS { C14, C15, A0, A1, A2, A3, A4, A5, A6, A7, B0, B1, A8, A9, A10, H3 } + +/* We uses a pin with a stronger pull resistor than the internal MCU pins */ +// #define MATRIX_UNSELECT_DRIVE_HIGH + +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 48 +#define DRIVER_2_LED_TOTAL 39 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + +/* Enable CapsLcok LED */ +#define CAPS_LOCK_LED_INDEX 50 + diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/info.json b/keyboards/keychron/q3/q3_ansi_stm32l432/info.json new file mode 100644 index 000000000000..f540d9e637c1 --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432/info.json @@ -0,0 +1,103 @@ +{ + "keyboard_name": "Keychron Q3", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_ansi_87": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":2, "y":0}, + {"label":"F2", "x":3, "y":0}, + {"label":"F3", "x":4, "y":0}, + {"label":"F4", "x":5, "y":0}, + {"label":"F5", "x":6.5, "y":0}, + {"label":"F5", "x":7.5, "y":0}, + {"label":"F7", "x":8.5, "y":0}, + {"label":"F8", "x":9.5, "y":0}, + {"label":"F9", "x":11, "y":0}, + {"label":"F10", "x":12, "y":0}, + {"label":"F11", "x":13, "y":0}, + {"label":"F12", "x":14, "y":0}, + {"label":"Print", "x":15.25, "y":0}, + {"label":"Cortana", "x":16.25, "y":0}, + {"label":"Light", "x":17.25, "y":0}, + + {"label":"`~", "x":0, "y":1.25}, + {"label":"1!", "x":1, "y":1.25}, + {"label":"2@", "x":2, "y":1.25}, + {"label":"3#", "x":3, "y":1.25}, + {"label":"4$", "x":4, "y":1.25}, + {"label":"5%", "x":5, "y":1.25}, + {"label":"6^", "x":6, "y":1.25}, + {"label":"7&", "x":7, "y":1.25}, + {"label":"8*", "x":8, "y":1.25}, + {"label":"9(", "x":9, "y":1.25}, + {"label":"0)", "x":10, "y":1.25}, + {"label":"-_", "x":11, "y":1.25}, + {"label":"=+", "x":12, "y":1.25}, + {"label":"Backspace", "x":13, "y":1.25, "w":2}, + {"label":"Insert", "x":15.25, "y":1.25}, + {"label":"Home", "x":16.25, "y":1.25}, + {"label":"Page Up", "x":17.25, "y":1.25}, + + {"label":"Tab", "x":0, "y":2.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.25}, + {"label":"W", "x":2.5, "y":2.25}, + {"label":"E", "x":3.5, "y":2.25}, + {"label":"R", "x":4.5, "y":2.25}, + {"label":"T", "x":5.5, "y":2.25}, + {"label":"Y", "x":6.5, "y":2.25}, + {"label":"U", "x":7.5, "y":2.25}, + {"label":"I", "x":8.5, "y":2.25}, + {"label":"O", "x":9.5, "y":2.25}, + {"label":"P", "x":10.5, "y":2.25}, + {"label":"[{", "x":11.5, "y":2.25}, + {"label":"]}", "x":12.5, "y":2.25}, + {"label":"\\|", "x":13.5, "y":2.25, "w":1.5}, + {"label":"Delete", "x":15.25, "y":2.25}, + {"label":"End", "x":16.25, "y":2.25}, + {"label":"Page Down", "x":17.25, "y":2.25}, + + {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, + {"label":"A", "x":1.75, "y":3.25}, + {"label":"S", "x":2.75, "y":3.25}, + {"label":"D", "x":3.75, "y":3.25}, + {"label":"F", "x":4.75, "y":3.25}, + {"label":"G", "x":5.75, "y":3.25}, + {"label":"H", "x":6.75, "y":3.25}, + {"label":"J", "x":7.75, "y":3.25}, + {"label":"K", "x":8.75, "y":3.25}, + {"label":"L", "x":9.75, "y":3.25}, + {"label":";:", "x":10.75, "y":3.25}, + {"label":"'\"", "x":11.75, "y":3.25}, + {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, + + {"label":"Left Shift", "x":0, "y":4.25, "w":2.25}, + {"label":"Z", "x":2.25, "y":4.25}, + {"label":"X", "x":3.25, "y":4.25}, + {"label":"C", "x":4.25, "y":4.25}, + {"label":"V", "x":5.25, "y":4.25}, + {"label":"B", "x":6.25, "y":4.25}, + {"label":"N", "x":7.25, "y":4.25}, + {"label":"M", "x":8.25, "y":4.25}, + {"label":",<", "x":9.25, "y":4.25}, + {"label":".>", "x":10.25, "y":4.25}, + {"label":"/?", "x":11.25, "y":4.25}, + {"label":"Right Shift", "x":12.25, "y":4.25, "w":2.75}, + {"label":"Up", "x":16.25, "y":4.25}, + + {"label":"Left Ctrl", "x":0, "y":5.25, "w":1.25} + {"label":"Left Win", "x":1.25, "y":5.25, "w":1.25}, + {"label":"Left Alt", "x":2.5, "y":5.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, + {"label":"Right Alt", "x":10, "y":5.25, "w":1.25}, + {"label":"Right Win", "x":11.25, "y":5.25, "w":1.25}, + {"label":"Fn", "x":12.5, "y":5.25, "w":1.25}, + {"label":"Right Ctrl", "x":13.75, "y":5.25, "w":1.25}, + {"label":"Left", "x":15.25, "y":5.25}, + {"label":"Down", "x":16.25, "y":5.25}, + {"label":"Right", "x":17.25, "y":5.25} + ] + } + } +} diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/default/keymap.c b/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/default/keymap.c new file mode 100644 index 000000000000..6a7912eff44e --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/default/keymap.c @@ -0,0 +1,168 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H +#include "test.h" + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_LAUNCHPAD, + KC_LOPTN, + KC_ROPTN, + KC_LCMMD, + KC_RCMMD, + KC_SIRI, + KC_TASK_VIEW, + KC_FILE_EXPLORER, + KC_SCREEN_SHOT, + KC_CORTANA +}; + +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define KC_TASK KC_TASK_VIEW +#define KC_FLXP KC_FILE_EXPLORER +#define KC_SNAP KC_SCREEN_SHOT +#define KC_CRTA KC_CORTANA + +typedef struct PACKED { + uint8_t len; + uint8_t keycode[3]; +} key_combination_t; + +key_combination_t key_comb_list[4] = { + {2, {KC_LWIN, KC_TAB}}, + {2, {KC_LWIN, KC_E}}, + {3, {KC_LSFT, KC_LCMD, KC_4}}, + {2, {KC_LWIN, KC_C}} +}; + +static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_87( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_END, KC_PGDN, + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_ansi_87( + KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_ansi_87( + KC_ESC, 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_PSCR, KC_CRTA, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_END, KC_PGDN, + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_ansi_87( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), +}; + +uint16_t prev; +bool siri; + +void matrix_scan_user(void) { + if (siri) { + if (timer_elapsed(prev) >= 500) { + siri = false; + unregister_code(KC_LCMD); + unregister_code(KC_SPACE); + } + } +} + +bool dip_switch_update_user(uint8_t index, bool active) { + /* Send default layer state to host */ + system_switch_state_report(index, active); + return true; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LOPTN: + case KC_ROPTN: + case KC_LCMMD: + case KC_RCMMD: + if (record->event.pressed) { + register_code(mac_keycode[keycode - KC_LOPTN]); + } else { + unregister_code(mac_keycode[keycode - KC_LOPTN]); + } + return false; // Skip all further processing of this key + case KC_SIRI: + if (record->event.pressed) { + register_code(KC_LCMD); + register_code(KC_SPACE); + prev = timer_read() | 1; + siri = true; + } else { + // Do something else when release + } + return false; // Skip all further processing of this key + case KC_TASK: + case KC_FLXP: + case KC_SNAP: + case KC_CRTA: + if (record->event.pressed) { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + register_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } else { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/keymap.c b/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/keymap.c new file mode 100644 index 000000000000..5c1a5f6e5797 --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/keymap.c @@ -0,0 +1,168 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H +#include "test.h" + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = USER00, + KC_LAUNCHPAD, + KC_LOPTN, + KC_ROPTN, + KC_LCMMD, + KC_RCMMD, + KC_SIRI, + KC_TASK_VIEW, + KC_FILE_EXPLORER, + KC_SCREEN_SHOT, + KC_CORTANA +}; + +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define KC_TASK KC_TASK_VIEW +#define KC_FLXP KC_FILE_EXPLORER +#define KC_SNAP KC_SCREEN_SHOT +#define KC_CRTA KC_CORTANA + +typedef struct PACKED { + uint8_t len; + uint8_t keycode[3]; +} key_combination_t; + +key_combination_t key_comb_list[4] = { + {2, {KC_LWIN, KC_TAB}}, + {2, {KC_LWIN, KC_E}}, + {3, {KC_LSFT, KC_LCMD, KC_4}}, + {2, {KC_LWIN, KC_C}} +}; + +static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_87( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_END, KC_PGDN, + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_ansi_87( + KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_ansi_87( + KC_ESC, 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_PSCR, KC_CRTA, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_END, KC_PGDN, + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_ansi_87( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), +}; + +uint16_t prev; +bool siri; + +void matrix_scan_user(void) { + if (siri) { + if (timer_elapsed(prev) >= 500) { + siri = false; + unregister_code(KC_LCMD); + unregister_code(KC_SPACE); + } + } +} + +bool dip_switch_update_user(uint8_t index, bool active) { + /* Send default layer state to host */ + system_switch_state_report(index, active); + return true; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LOPTN: + case KC_ROPTN: + case KC_LCMMD: + case KC_RCMMD: + if (record->event.pressed) { + register_code(mac_keycode[keycode - KC_LOPTN]); + } else { + unregister_code(mac_keycode[keycode - KC_LOPTN]); + } + return false; // Skip all further processing of this key + case KC_SIRI: + if (record->event.pressed) { + register_code(KC_LCMD); + register_code(KC_SPACE); + prev = timer_read() | 1; + siri = true; + } else { + // Do something else when release + } + return false; // Skip all further processing of this key + case KC_TASK: + case KC_FLXP: + case KC_SNAP: + case KC_CRTA: + if (record->event.pressed) { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + register_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } else { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/rules.mk b/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/q3_ansi_stm32l432.c b/keyboards/keychron/q3/q3_ansi_stm32l432/q3_ansi_stm32l432.c new file mode 100644 index 000000000000..3958f5466d8f --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432/q3_ansi_stm32l432.c @@ -0,0 +1,154 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include "quantum.h" + +#ifdef RGB_MATRIX_ENABLE + +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {0, I_5, G_5, H_5}, + {0, I_6, G_6, H_6}, + {0, I_7, G_7, H_7}, + {0, I_8, G_8, H_8}, + {0, I_9, G_9, H_9}, + {0, I_10, G_10, H_10}, + {0, I_11, G_11, H_11}, + {0, I_12, G_12, H_12}, + {0, I_13, G_13, H_13}, + {0, I_15, G_15, H_15}, + {0, I_16, G_16, H_16}, + {1, I_15, G_15, H_15}, + + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_15, A_15, B_15}, + {0, C_16, A_16, B_16}, + {1, I_16, G_16, H_16}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_14, D_14, E_14}, + {0, F_15, D_15, E_15}, + {0, F_16, D_16, E_16}, + {1, I_13, G_13, H_13}, + + {1, I_1, G_1, H_1}, + {1, I_2, G_2, H_2}, + {1, I_3, G_3, H_3}, + {1, I_4, G_4, H_4}, + {1, I_5, G_5, H_5}, + {1, I_6, G_6, H_6}, + {1, I_7, G_7, H_7}, + {1, I_8, G_8, H_8}, + {1, I_9, G_9, H_9}, + {1, I_10, G_10, H_10}, + {1, I_11, G_11, H_11}, + {1, I_12, G_12, H_12}, + {1, I_14, G_14, H_14}, + + {1, C_1, A_1, B_1}, + {1, C_3, A_3, B_3}, + {1, C_4, A_4, B_4}, + {1, C_5, A_5, B_5}, + {1, C_6, A_6, B_6}, + {1, C_7, A_7, B_7}, + {1, C_8, A_8, B_8}, + {1, C_9, A_9, B_9}, + {1, C_10, A_10, B_10}, + {1, C_11, A_11, B_11}, + {1, C_12, A_12, B_12}, + {1, C_14, A_14, B_14}, + {1, C_16, A_16, B_16}, + + {1, F_1, D_1, E_1}, + {1, F_2, D_2, E_2}, + {1, F_3, D_3, E_3}, + {1, F_7, D_7, E_7}, + {1, F_11, D_11, E_11}, + {1, F_12, D_12, E_12}, + {1, F_13, D_13, E_13}, + {1, F_14, D_14, E_14}, + {1, F_15, D_15, E_15}, + {1, F_16, D_16, E_16}, + {1, C_15, A_15, B_15}, +}; + +#define __ NO_LED + +led_config_t g_led_config = { + { + // Key Matrix to LED Index + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14 }, + { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, + { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48 }, + { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 49, 62, 15, 32 }, + { 63, __, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, __, 74, 86, 75 }, + { 76, 77, 78, __, __, __, 79, __, __, __, 80, 81, 82, 83, 84, 85 }, + }, + { + // LED Index to Physical Position + {0,0}, {26,0}, {39,0}, {52,0}, {65,0}, {85,0}, {98,0}, {111,0}, {124,0}, {143,0}, {156,0}, {169,0}, {182,0}, {198,0}, {211,0}, {224,0}, + {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {176,15}, {198,15}, {211,15}, {224,15}, + {3,28}, {20,28}, {33,28}, {46,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {179,28}, {198,28}, {211,28}, {224,28}, + {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {174,40}, + {8,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {171,52}, {211,52}, + {2,64}, {18,64}, {34,64}, {83,64}, {131,64}, {148,64}, {164,64}, {180,64}, {198,64}, {211,64}, {224,64}, + }, + { + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, + 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + } +}; + +#endif diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/q3_ansi_stm32l432.h b/keyboards/keychron/q3/q3_ansi_stm32l432/q3_ansi_stm32l432.h new file mode 100644 index 000000000000..24ac8936f991 --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432/q3_ansi_stm32l432.h @@ -0,0 +1,37 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#define XXX KC_NO + +#define LAYOUT_ansi_87( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0F, K3E, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3F, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K3C, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ + K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ + K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K4E \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, XXX, K0E, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ + { K40, XXX, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \ + { K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ +} diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/readme.md b/keyboards/keychron/q3/q3_ansi_stm32l432/readme.md new file mode 100644 index 000000000000..1e7ea53e233e --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432/readme.md @@ -0,0 +1 @@ +# The ANSI variant of the Keychron Q3 diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/rules.mk b/keyboards/keychron/q3/q3_ansi_stm32l432/rules.mk new file mode 100644 index 000000000000..c4c1cdf20724 --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432/rules.mk @@ -0,0 +1,28 @@ +# MCU name +MCU = STM32L433 + +# Bootloader selection +BOOTLOADER = stm32-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Enable USB N-key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = no # Enable Encoder +DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 +RAW_ENABLE = yes + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +SRC += test.c diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/config.h b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/config.h new file mode 100644 index 000000000000..efb8ed52392b --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/config.h @@ -0,0 +1,39 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x0121 +#define DEVICE_VER 0x0103 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } +#define MATRIX_COL_PINS { C14, C15, A0, A1, A2, A3, A4, A5, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN } + +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 48 +#define DRIVER_2_LED_TOTAL 39 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + +/* Encoder Configuration */ +#define ENCODERS_PAD_A { A10 } +#define ENCODERS_PAD_B { A8 } +#define ENCODER_RESOLUTION 4 +#define ENCODER_DEFAULT_POS 0x3 + +/* Enable CapsLcok LED */ +#define CAPS_LOCK_LED_INDEX 50 diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/info.json b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/info.json new file mode 100644 index 000000000000..300f6275acce --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/info.json @@ -0,0 +1,203 @@ +{ + "keyboard_name": "Keychron Q3", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_ansi_87": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":1.25, "y":0}, + {"label":"F2", "x":2.25, "y":0}, + {"label":"F3", "x":3.25, "y":0}, + {"label":"F4", "x":4.25, "y":0}, + {"label":"F5", "x":5.5, "y":0}, + {"label":"F5", "x":6.5, "y":0}, + {"label":"F7", "x":7.5, "y":0}, + {"label":"F8", "x":8.5, "y":0}, + {"label":"F9", "x":9.75, "y":0}, + {"label":"F10", "x":10.75, "y":0}, + {"label":"F11", "x":11.75, "y":0}, + {"label":"F12", "x":12.75, "y":0}, + {"label":"Mute", "x":14, "y":0}, + {"label":"Print", "x":15.75, "y":0}, + {"label":"Cortana", "x":16.75, "y":0}, + {"label":"Light", "x":17.75, "y":0}, + + {"label":"`~", "x":0, "y":1.25}, + {"label":"1!", "x":1, "y":1.25}, + {"label":"2@", "x":2, "y":1.25}, + {"label":"3#", "x":3, "y":1.25}, + {"label":"4$", "x":4, "y":1.25}, + {"label":"5%", "x":5, "y":1.25}, + {"label":"6^", "x":6, "y":1.25}, + {"label":"7&", "x":7, "y":1.25}, + {"label":"8*", "x":8, "y":1.25}, + {"label":"9(", "x":9, "y":1.25}, + {"label":"0)", "x":10, "y":1.25}, + {"label":"-_", "x":11, "y":1.25}, + {"label":"=+", "x":12, "y":1.25}, + {"label":"Backspace", "x":13, "y":1.25, "w":2}, + {"label":"Insert", "x":15.75, "y":1.25}, + {"label":"Home", "x":16.75, "y":1.25}, + {"label":"Page Up", "x":17.75, "y":1.25}, + + {"label":"Tab", "x":0, "y":2.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.25}, + {"label":"W", "x":2.5, "y":2.25}, + {"label":"E", "x":3.5, "y":2.25}, + {"label":"R", "x":4.5, "y":2.25}, + {"label":"T", "x":5.5, "y":2.25}, + {"label":"Y", "x":6.5, "y":2.25}, + {"label":"U", "x":7.5, "y":2.25}, + {"label":"I", "x":8.5, "y":2.25}, + {"label":"O", "x":9.5, "y":2.25}, + {"label":"P", "x":10.5, "y":2.25}, + {"label":"[{", "x":11.5, "y":2.25}, + {"label":"]}", "x":12.5, "y":2.25}, + {"label":"\\|", "x":13.5, "y":2.25, "w":1.5}, + {"label":"Delete", "x":15.75, "y":2.25}, + {"label":"End", "x":16.75, "y":2.25}, + {"label":"Page Down", "x":17.75, "y":2.25}, + + {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, + {"label":"A", "x":1.75, "y":3.25}, + {"label":"S", "x":2.75, "y":3.25}, + {"label":"D", "x":3.75, "y":3.25}, + {"label":"F", "x":4.75, "y":3.25}, + {"label":"G", "x":5.75, "y":3.25}, + {"label":"H", "x":6.75, "y":3.25}, + {"label":"J", "x":7.75, "y":3.25}, + {"label":"K", "x":8.75, "y":3.25}, + {"label":"L", "x":9.75, "y":3.25}, + {"label":";:", "x":10.75, "y":3.25}, + {"label":"'\"", "x":11.75, "y":3.25}, + {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, + + {"label":"Left Shift", "x":0, "y":4.25, "w":2.25}, + {"label":"Z", "x":2.25, "y":4.25}, + {"label":"X", "x":3.25, "y":4.25}, + {"label":"C", "x":4.25, "y":4.25}, + {"label":"V", "x":5.25, "y":4.25}, + {"label":"B", "x":6.25, "y":4.25}, + {"label":"N", "x":7.25, "y":4.25}, + {"label":"M", "x":8.25, "y":4.25}, + {"label":",<", "x":9.25, "y":4.25}, + {"label":".>", "x":10.25, "y":4.25}, + {"label":"/?", "x":11.25, "y":4.25}, + {"label":"Right Shift", "x":12.25, "y":4.25, "w":2.75}, + {"label":"Up", "x":16.75, "y":4.25}, + + {"label":"Left Ctrl", "x":0, "y":5.25, "w":1.25}, + {"label":"Left Win", "x":1.25, "y":5.25, "w":1.25}, + {"label":"Left Alt", "x":2.5, "y":5.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, + {"label":"Right Alt", "x":10, "y":5.25, "w":1.25}, + {"label":"Right Win", "x":11.25, "y":5.25, "w":1.25}, + {"label":"Fn", "x":12.5, "y":5.25, "w":1.25}, + {"label":"Right Ctrl", "x":13.75, "y":5.25, "w":1.25}, + {"label":"Left", "x":15.75, "y":5.25}, + {"label":"Down", "x":16.75, "y":5.25}, + {"label":"Right", "x":17.75, "y":5.25} + ] + }, + "LAYOUT_all": { + "layout": [ + {"label":"Esc", "x":0, "y":0.5}, + {"label":"F1", "x":1.25, "y":0.5}, + {"label":"F2", "x":2.25, "y":0.5}, + {"label":"F3", "x":3.25, "y":0.5}, + {"label":"F4", "x":4.25, "y":0.5}, + {"label":"F5", "x":5.5, "y":0.5}, + {"label":"F5", "x":6.5, "y":0.5}, + {"label":"F7", "x":7.5, "y":0.5}, + {"label":"F8", "x":8.5, "y":0.5}, + {"label":"F9", "x":9.75, "y":0.5}, + {"label":"F10", "x":10.75, "y":0.5}, + {"label":"F11", "x":11.75, "y":0.5}, + {"label":"F12", "x":12.75, "y":0.5}, + {"label":"CCW", "x":13.9, "y":0, "w":0.6, "h":0.5}, + {"label":"Mute", "x":14, "y":0.5}, + {"label":"CW", "x":14.5, "y":0, "w":0.6, "h":0.5}, + {"label":"Print", "x":15.75, "y":0.5}, + {"label":"Cortana", "x":16.75, "y":0.5}, + {"label":"Light", "x":17.75, "y":0.5}, + + {"label":"`~", "x":0, "y":1.75}, + {"label":"1!", "x":1, "y":1.75}, + {"label":"2@", "x":2, "y":1.75}, + {"label":"3#", "x":3, "y":1.75}, + {"label":"4$", "x":4, "y":1.75}, + {"label":"5%", "x":5, "y":1.75}, + {"label":"6^", "x":6, "y":1.75}, + {"label":"7&", "x":7, "y":1.75}, + {"label":"8*", "x":8, "y":1.75}, + {"label":"9(", "x":9, "y":1.75}, + {"label":"0)", "x":10, "y":1.75}, + {"label":"-_", "x":11, "y":1.75}, + {"label":"=+", "x":12, "y":1.75}, + {"label":"Backspace", "x":13, "y":1.75, "w":2}, + {"label":"Insert", "x":15.75, "y":1.75}, + {"label":"Home", "x":16.75, "y":1.75}, + {"label":"Page Up", "x":17.75, "y":1.75}, + + {"label":"Tab", "x":0, "y":2.75, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.75}, + {"label":"W", "x":2.5, "y":2.75}, + {"label":"E", "x":3.5, "y":2.75}, + {"label":"R", "x":4.5, "y":2.75}, + {"label":"T", "x":5.5, "y":2.75}, + {"label":"Y", "x":6.5, "y":2.75}, + {"label":"U", "x":7.5, "y":2.75}, + {"label":"I", "x":8.5, "y":2.75}, + {"label":"O", "x":9.5, "y":2.75}, + {"label":"P", "x":10.5, "y":2.75}, + {"label":"[{", "x":11.5, "y":2.75}, + {"label":"]}", "x":12.5, "y":2.75}, + {"label":"\\|", "x":13.5, "y":2.75, "w":1.5}, + {"label":"Delete", "x":15.75, "y":2.75}, + {"label":"End", "x":16.75, "y":2.75}, + {"label":"Page Down", "x":17.75, "y":2.75}, + + {"label":"Caps Lock", "x":0, "y":3.75, "w":1.75}, + {"label":"A", "x":1.75, "y":3.75}, + {"label":"S", "x":2.75, "y":3.75}, + {"label":"D", "x":3.75, "y":3.75}, + {"label":"F", "x":4.75, "y":3.75}, + {"label":"G", "x":5.75, "y":3.75}, + {"label":"H", "x":6.75, "y":3.75}, + {"label":"J", "x":7.75, "y":3.75}, + {"label":"K", "x":8.75, "y":3.75}, + {"label":"L", "x":9.75, "y":3.75}, + {"label":";:", "x":10.75, "y":3.75}, + {"label":"'\"", "x":11.75, "y":3.75}, + {"label":"Enter", "x":12.75, "y":3.75, "w":2.25}, + + {"label":"Left Shift", "x":0, "y":4.75, "w":2.25}, + {"label":"Z", "x":2.25, "y":4.75}, + {"label":"X", "x":3.25, "y":4.75}, + {"label":"C", "x":4.25, "y":4.75}, + {"label":"V", "x":5.25, "y":4.75}, + {"label":"B", "x":6.25, "y":4.75}, + {"label":"N", "x":7.25, "y":4.75}, + {"label":"M", "x":8.25, "y":4.75}, + {"label":",<", "x":9.25, "y":4.75}, + {"label":".>", "x":10.25, "y":4.75}, + {"label":"/?", "x":11.25, "y":4.75}, + {"label":"Right Shift", "x":12.25, "y":4.75, "w":2.75}, + {"label":"Up", "x":16.75, "y":4.75}, + + {"label":"Left Ctrl", "x":0, "y":5.75, "w":1.25}, + {"label":"Left Win", "x":1.25, "y":5.75, "w":1.25}, + {"label":"Left Alt", "x":2.5, "y":5.75, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.75, "w":6.25}, + {"label":"Right Alt", "x":10, "y":5.75, "w":1.25}, + {"label":"Right Win", "x":11.25, "y":5.75, "w":1.25}, + {"label":"Fn", "x":12.5, "y":5.75, "w":1.25}, + {"label":"Right Ctrl", "x":13.75, "y":5.75, "w":1.25}, + {"label":"Left", "x":15.75, "y":5.75}, + {"label":"Down", "x":16.75, "y":5.75}, + {"label":"Right", "x":17.75, "y":5.75} + ] + } + } +} diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/default/keymap.c b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/default/keymap.c new file mode 100644 index 000000000000..a2e3964fd705 --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/default/keymap.c @@ -0,0 +1,168 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H +#include "test.h" + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_LAUNCHPAD, + KC_LOPTN, + KC_ROPTN, + KC_LCMMD, + KC_RCMMD, + KC_SIRI, + KC_TASK_VIEW, + KC_FILE_EXPLORER, + KC_SCREEN_SHOT, + KC_CORTANA +}; + +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define KC_TASK KC_TASK_VIEW +#define KC_FLXP KC_FILE_EXPLORER +#define KC_SNAP KC_SCREEN_SHOT +#define KC_CRTA KC_CORTANA + +typedef struct PACKED { + uint8_t len; + uint8_t keycode[3]; +} key_combination_t; + +key_combination_t key_comb_list[4] = { + {2, {KC_LWIN, KC_TAB}}, + {2, {KC_LWIN, KC_E}}, + {3, {KC_LSFT, KC_LCMD, KC_4}}, + {2, {KC_LWIN, KC_C}} +}; + +static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_87( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_SNAP, KC_SIRI, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_END, KC_PGDN, + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_ansi_87( + KC_TRNS, 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_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_ansi_87( + KC_ESC, 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_MUTE, KC_PSCR, KC_CRTA, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_END, KC_PGDN, + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_ansi_87( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), +}; + +uint16_t prev; +bool siri; + +void matrix_scan_user(void) { + if (siri) { + if (timer_elapsed(prev) >= 500) { + siri = false; + unregister_code(KC_LCMD); + unregister_code(KC_SPACE); + } + } +} + +bool dip_switch_update_user(uint8_t index, bool active) { + /* Send default layer state to host */ + system_switch_state_report(index, active); + return true; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LOPTN: + case KC_ROPTN: + case KC_LCMMD: + case KC_RCMMD: + if (record->event.pressed) { + register_code(mac_keycode[keycode - KC_LOPTN]); + } else { + unregister_code(mac_keycode[keycode - KC_LOPTN]); + } + return false; // Skip all further processing of this key + case KC_SIRI: + if (record->event.pressed) { + register_code(KC_LCMD); + register_code(KC_SPACE); + prev = timer_read() | 1; + siri = true; + } else { + // Do something else when release + } + return false; // Skip all further processing of this key + case KC_TASK: + case KC_FLXP: + case KC_SNAP: + case KC_CRTA: + if (record->event.pressed) { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + register_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } else { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/keymap.c b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/keymap.c new file mode 100644 index 000000000000..ee41e5da6786 --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/keymap.c @@ -0,0 +1,209 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H +#include "test.h" + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = USER00, + KC_LAUNCHPAD, + KC_LOPTN, + KC_ROPTN, + KC_LCMMD, + KC_RCMMD, + KC_SIRI, + KC_TASK_VIEW, + KC_FILE_EXPLORER, + KC_SCREEN_SHOT, + KC_CORTANA +}; + +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define KC_TASK KC_TASK_VIEW +#define KC_FLXP KC_FILE_EXPLORER +#define KC_SNAP KC_SCREEN_SHOT +#define KC_CRTA KC_CORTANA + +typedef struct PACKED { + uint8_t len; + uint8_t keycode[3]; +} key_combination_t; + +key_combination_t key_comb_list[4] = { + {2, {KC_LWIN, KC_TAB}}, + {2, {KC_LWIN, KC_E}}, + {3, {KC_LSFT, KC_LCMD, KC_4}}, + {2, {KC_LWIN, KC_C}} +}; + +static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_all( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_VOLD, KC_MUTE, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_END, KC_PGDN, + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_all( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_VAD, RGB_TOG, RGB_VAI, KC_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_all( + KC_ESC, 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_VOLD, KC_MUTE, KC_VOLU, KC_PSCR, KC_CRTA, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_END, KC_PGDN, + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_all( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_VAD, RGB_TOG, RGB_VAI, KC_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), +}; + +#if defined(VIA_ENABLE) && defined(ENCODER_ENABLE) + +#define ENCODERS 1 +static uint8_t encoder_state[ENCODERS] = {0}; +static keypos_t encoder_cw[ENCODERS] = {{ 8, 5 }}; +static keypos_t encoder_ccw[ENCODERS] = {{ 7, 5 }}; + +void encoder_action_unregister(void) { + for (int index = 0; index < ENCODERS; ++index) { + if (encoder_state[index]) { + keyevent_t encoder_event = (keyevent_t) { + .key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], + .pressed = false, + .time = (timer_read() | 1) + }; + encoder_state[index] = 0; + action_exec(encoder_event); + } + } +} + +void encoder_action_register(uint8_t index, bool clockwise) { + keyevent_t encoder_event = (keyevent_t) { + .key = clockwise ? encoder_cw[index] : encoder_ccw[index], + .pressed = true, + .time = (timer_read() | 1) + }; + encoder_state[index] = (clockwise ^ 1) | (clockwise << 1); + action_exec(encoder_event); +} + +bool encoder_update_user(uint8_t index, bool clockwise) { + encoder_action_register(index, clockwise); + return false; +}; + +#endif + +uint16_t prev; +bool siri; + +void matrix_scan_user(void) { + if (siri) { + if (timer_elapsed(prev) >= 500) { + siri = false; + unregister_code(KC_LCMD); + unregister_code(KC_SPACE); + } + } +#if defined(VIA_ENABLE) && defined(ENCODER_ENABLE) + encoder_action_unregister(); +#endif +} + +bool dip_switch_update_user(uint8_t index, bool active) { + /* Send default layer state to host */ + system_switch_state_report(index, active); + return true; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LOPTN: + case KC_ROPTN: + case KC_LCMMD: + case KC_RCMMD: + if (record->event.pressed) { + register_code(mac_keycode[keycode - KC_LOPTN]); + } else { + unregister_code(mac_keycode[keycode - KC_LOPTN]); + } + return false; // Skip all further processing of this key + case KC_SIRI: + if (record->event.pressed) { + register_code(KC_LCMD); + register_code(KC_SPACE); + prev = timer_read() | 1; + siri = true; + } else { + // Do something else when release + } + return false; // Skip all further processing of this key + case KC_TASK: + case KC_FLXP: + case KC_SNAP: + case KC_CRTA: + if (record->event.pressed) { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + register_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } else { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/rules.mk b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.c b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.c new file mode 100644 index 000000000000..28903c013179 --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.c @@ -0,0 +1,185 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include "quantum.h" + +#ifdef RGB_MATRIX_ENABLE + +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {0, I_5, G_5, H_5}, + {0, I_6, G_6, H_6}, + {0, I_7, G_7, H_7}, + {0, I_8, G_8, H_8}, + {0, I_9, G_9, H_9}, + {0, I_10, G_10, H_10}, + {0, I_11, G_11, H_11}, + {0, I_12, G_12, H_12}, + {0, I_13, G_13, H_13}, + {0, I_15, G_15, H_15}, + {0, I_16, G_16, H_16}, + {1, I_15, G_15, H_15}, + + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_15, A_15, B_15}, + {0, C_16, A_16, B_16}, + {1, I_16, G_16, H_16}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_14, D_14, E_14}, + {0, F_15, D_15, E_15}, + {0, F_16, D_16, E_16}, + {1, I_13, G_13, H_13}, + + {1, I_1, G_1, H_1}, + {1, I_2, G_2, H_2}, + {1, I_3, G_3, H_3}, + {1, I_4, G_4, H_4}, + {1, I_5, G_5, H_5}, + {1, I_6, G_6, H_6}, + {1, I_7, G_7, H_7}, + {1, I_8, G_8, H_8}, + {1, I_9, G_9, H_9}, + {1, I_10, G_10, H_10}, + {1, I_11, G_11, H_11}, + {1, I_12, G_12, H_12}, + {1, I_14, G_14, H_14}, + + {1, C_1, A_1, B_1}, + {1, C_3, A_3, B_3}, + {1, C_4, A_4, B_4}, + {1, C_5, A_5, B_5}, + {1, C_6, A_6, B_6}, + {1, C_7, A_7, B_7}, + {1, C_8, A_8, B_8}, + {1, C_9, A_9, B_9}, + {1, C_10, A_10, B_10}, + {1, C_11, A_11, B_11}, + {1, C_12, A_12, B_12}, + {1, C_14, A_14, B_14}, + {1, C_16, A_16, B_16}, + + {1, F_1, D_1, E_1}, + {1, F_2, D_2, E_2}, + {1, F_3, D_3, E_3}, + {1, F_7, D_7, E_7}, + {1, F_11, D_11, E_11}, + {1, F_12, D_12, E_12}, + {1, F_13, D_13, E_13}, + {1, F_14, D_14, E_14}, + {1, F_15, D_15, E_15}, + {1, F_16, D_16, E_16}, + {1, C_15, A_15, B_15}, +}; + +#define __ NO_LED + +led_config_t g_led_config = { + { + // Key Matrix to LED Index + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14 }, + { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, + { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48 }, + { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 49, 62, 15, 32 }, + { 63, __, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, __, 74, 86, 75 }, + { 76, 77, 78, __, __, __, 79, __, __, __, 80, 81, 82, 83, 84, 85 }, + }, + { + // LED Index to Physical Position + {0,0}, {16,0}, {29,0}, {42,0}, {55,0}, {71,0}, {84,0}, {97,0}, {110,0}, {126,0}, {139,0}, {152,0}, {165,0}, {198,0}, {211,0}, {224,0}, + {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {176,15}, {198,15}, {211,15}, {224,15}, + {3,28}, {19,28}, {32,28}, {45,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {179,28}, {198,28}, {211,28}, {224,28}, + {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {174,40}, + {8,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {171,52}, {211,52}, + {2,64}, {18,64}, {34,64}, {83,64}, {131,64}, {148,64}, {164,64}, {180,64}, {198,64}, {211,64}, {224,64}, + }, + { + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, + 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + } +}; + +#endif + +#ifdef ENCODER_ENABLE + +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { return false; } + if (index == 0) { + if (clockwise) { + tap_code_delay(KC_VOLU, TAP_CODE_DELAY); + } else { + tap_code_delay(KC_VOLD, TAP_CODE_DELAY); + } + } + return true; +} + +void encoder0_pad_cb(void *param) { + (void)param; + + insert_encoder_state(0); +} + +void keyboard_post_init_kb(void) { + pin_t encoders_pad_a[] = ENCODERS_PAD_A; + pin_t encoders_pad_b[] = ENCODERS_PAD_B; + palEnableLineEvent(encoders_pad_a[0], PAL_EVENT_MODE_BOTH_EDGES); + palEnableLineEvent(encoders_pad_b[0], PAL_EVENT_MODE_BOTH_EDGES); + palSetLineCallback(encoders_pad_a[0], encoder0_pad_cb, NULL); + palSetLineCallback(encoders_pad_b[0], encoder0_pad_cb, NULL); +} + +#endif diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.h b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.h new file mode 100644 index 000000000000..0de224424b2d --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.h @@ -0,0 +1,52 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#define XXX KC_NO + +#define LAYOUT_all( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K57, K0D, K58, K0E, K0F, K3E, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3F, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K3C, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ + K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ + K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K4E \ + ) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ + { K40, XXX, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \ + { K50, K51, K52, XXX, XXX, XXX, K56, K57, K58, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ + } +#define LAYOUT_ansi_87( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K3E, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3F, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K3C, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ + K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ + K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K4E \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ + { K40, XXX, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \ + { K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ +} diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/readme.md b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/readme.md new file mode 100644 index 000000000000..9dbbbd6b1073 --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/readme.md @@ -0,0 +1,5 @@ +# The ANSI variant of the Keychron Q3 + +- Enable rotary encoder support. +- Turn colckwise to increase volume and turn anti-colckwise to decrease volume. +- Press top right key pushbutton to mute. diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/rules.mk b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/rules.mk new file mode 100644 index 000000000000..0d6c7cc1f9da --- /dev/null +++ b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/rules.mk @@ -0,0 +1,30 @@ +# MCU name +MCU = STM32L433 + +# Bootloader selection +BOOTLOADER = stm32-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Enable USB N-key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = yes # Enable Encoder +DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +# custom matrix setup +CUSTOM_MATRIX = lite + +SRC += matrix.c test.c diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/config.h b/keyboards/keychron/q3/q3_iso_stm32l432/config.h new file mode 100644 index 000000000000..cbc4381f79e2 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432/config.h @@ -0,0 +1,33 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x0122 +#define DEVICE_VER 0x0101 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } +#define MATRIX_COL_PINS { C14, C15, A0, A1, A2, A3, A4, A5, A6, A7, B0, B1, A8, A9, A10, H3 } + +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 48 +#define DRIVER_2_LED_TOTAL 40 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + +/* Enable caps-lock LED */ +#define CAPS_LOCK_LED_INDEX 49 diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/info.json b/keyboards/keychron/q3/q3_iso_stm32l432/info.json new file mode 100644 index 000000000000..368c96ef1495 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432/info.json @@ -0,0 +1,104 @@ +{ + "keyboard_name": "Keychron Q3", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_iso_88": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":2, "y":0}, + {"label":"F2", "x":3, "y":0}, + {"label":"F3", "x":4, "y":0}, + {"label":"F4", "x":5, "y":0}, + {"label":"F5", "x":6.5, "y":0}, + {"label":"F5", "x":7.5, "y":0}, + {"label":"F7", "x":8.5, "y":0}, + {"label":"F8", "x":9.5, "y":0}, + {"label":"F9", "x":11, "y":0}, + {"label":"F10", "x":12, "y":0}, + {"label":"F11", "x":13, "y":0}, + {"label":"F12", "x":14, "y":0}, + {"label":"Print", "x":15.25, "y":0}, + {"label":"Cortana", "x":16.25, "y":0}, + {"label":"Light", "x":17.25, "y":0}, + + {"label":"`~", "x":0, "y":1.25}, + {"label":"1!", "x":1, "y":1.25}, + {"label":"2@", "x":2, "y":1.25}, + {"label":"3#", "x":3, "y":1.25}, + {"label":"4$", "x":4, "y":1.25}, + {"label":"5%", "x":5, "y":1.25}, + {"label":"6^", "x":6, "y":1.25}, + {"label":"7&", "x":7, "y":1.25}, + {"label":"8*", "x":8, "y":1.25}, + {"label":"9(", "x":9, "y":1.25}, + {"label":"0)", "x":10, "y":1.25}, + {"label":"-_", "x":11, "y":1.25}, + {"label":"=+", "x":12, "y":1.25}, + {"label":"Backspace", "x":13, "y":1.25, "w":2}, + {"label":"Insert", "x":15.25, "y":1.25}, + {"label":"Home", "x":16.25, "y":1.25}, + {"label":"Page Up", "x":17.25, "y":1.25}, + + {"label":"Tab", "x":0, "y":2.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.25}, + {"label":"W", "x":2.5, "y":2.25}, + {"label":"E", "x":3.5, "y":2.25}, + {"label":"R", "x":4.5, "y":2.25}, + {"label":"T", "x":5.5, "y":2.25}, + {"label":"Y", "x":6.5, "y":2.25}, + {"label":"U", "x":7.5, "y":2.25}, + {"label":"I", "x":8.5, "y":2.25}, + {"label":"O", "x":9.5, "y":2.25}, + {"label":"P", "x":10.5, "y":2.25}, + {"label":"[{", "x":11.5, "y":2.25}, + {"label":"]}", "x":12.5, "y":2.25}, + {"label":"Delete", "x":15.25, "y":2.25}, + {"label":"End", "x":16.25, "y":2.25}, + {"label":"Page Down", "x":17.25, "y":2.25}, + + {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, + {"label":"A", "x":1.75, "y":3.25}, + {"label":"S", "x":2.75, "y":3.25}, + {"label":"D", "x":3.75, "y":3.25}, + {"label":"F", "x":4.75, "y":3.25}, + {"label":"G", "x":5.75, "y":3.25}, + {"label":"H", "x":6.75, "y":3.25}, + {"label":"J", "x":7.75, "y":3.25}, + {"label":"K", "x":8.75, "y":3.25}, + {"label":"L", "x":9.75, "y":3.25}, + {"label":";:", "x":10.75, "y":3.25}, + {"label":"'\"", "x":11.75, "y":3.25}, + {"label":"#~", "x":12.75, "y":3.25}, + {"label":"Enter", "x":13.75, "y":2.25, "w":1.25, "h":2}, + + {"label":"Left Shift", "x":0, "y":4.25, "w":1.25}, + {"label":"\\|", "x":1.25, "y":4.25}, + {"label":"Z", "x":2.25, "y":4.25}, + {"label":"X", "x":3.25, "y":4.25}, + {"label":"C", "x":4.25, "y":4.25}, + {"label":"V", "x":5.25, "y":4.25}, + {"label":"B", "x":6.25, "y":4.25}, + {"label":"N", "x":7.25, "y":4.25}, + {"label":"M", "x":8.25, "y":4.25}, + {"label":",<", "x":9.25, "y":4.25}, + {"label":".>", "x":10.25, "y":4.25}, + {"label":"/?", "x":11.25, "y":4.25}, + {"label":"Right Shift", "x":12.25, "y":4.25, "w":2.75}, + {"label":"Up", "x":16.25, "y":4.25}, + + {"label":"Left Ctrl", "x":0, "y":5.25, "w":1.25}, + {"label":"Left Win", "x":1.25, "y":5.25, "w":1.25}, + {"label":"Left Alt", "x":2.5, "y":5.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, + {"label":"Right Alt", "x":10, "y":5.25, "w":1.25}, + {"label":"Right Win", "x":11.25, "y":5.25, "w":1.25}, + {"label":"Fn", "x":12.5, "y":5.25, "w":1.25}, + {"label":"Right Ctrl", "x":13.75, "y":5.25, "w":1.25}, + {"label":"Left", "x":15.25, "y":5.25}, + {"label":"Down", "x":16.25, "y":5.25}, + {"label":"Right", "x":17.25, "y":5.25} + ] + } + } +} diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/default/keymap.c b/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/default/keymap.c new file mode 100644 index 000000000000..cc0ccc165308 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/default/keymap.c @@ -0,0 +1,168 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H +#include "test.h" + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_LAUNCHPAD, + KC_LOPTN, + KC_ROPTN, + KC_LCMMD, + KC_RCMMD, + KC_SIRI, + KC_TASK_VIEW, + KC_FILE_EXPLORER, + KC_SCREEN_SHOT, + KC_CORTANA +}; + +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define KC_TASK KC_TASK_VIEW +#define KC_FLXP KC_FILE_EXPLORER +#define KC_SNAP KC_SCREEN_SHOT +#define KC_CRTA KC_CORTANA + +typedef struct PACKED { + uint8_t len; + uint8_t keycode[3]; +} key_combination_t; + +key_combination_t key_comb_list[4] = { + {2, {KC_LWIN, KC_TAB}}, + {2, {KC_LWIN, KC_E}}, + {3, {KC_LSFT, KC_LCMD, KC_4}}, + {2, {KC_LWIN, KC_C}} +}; + +static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_iso_88( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_DEL, KC_END, KC_PGDN, + 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_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_iso_88( + KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_iso_88( + KC_ESC, 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_PSCR, KC_CRTA, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_DEL, KC_END, KC_PGDN, + 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_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_iso_88( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), +}; + +uint16_t prev; +bool siri; + +void matrix_scan_user(void) { + if (siri) { + if (timer_elapsed(prev) >= 500) { + siri = false; + unregister_code(KC_LCMD); + unregister_code(KC_SPACE); + } + } +} + +bool dip_switch_update_user(uint8_t index, bool active) { + /* Send default layer state to host */ + system_switch_state_report(index, active); + return true; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LOPTN: + case KC_ROPTN: + case KC_LCMMD: + case KC_RCMMD: + if (record->event.pressed) { + register_code(mac_keycode[keycode - KC_LOPTN]); + } else { + unregister_code(mac_keycode[keycode - KC_LOPTN]); + } + return false; // Skip all further processing of this key + case KC_SIRI: + if (record->event.pressed) { + register_code(KC_LCMD); + register_code(KC_SPACE); + prev = timer_read() | 1; + siri = true; + } else { + // Do something else when release + } + return false; // Skip all further processing of this key + case KC_TASK: + case KC_FLXP: + case KC_SNAP: + case KC_CRTA: + if (record->event.pressed) { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + register_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } else { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/keymap.c b/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/keymap.c new file mode 100644 index 000000000000..cdfb3c1fdbd7 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/keymap.c @@ -0,0 +1,168 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H +#include "test.h" + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = USER00, + KC_LAUNCHPAD, + KC_LOPTN, + KC_ROPTN, + KC_LCMMD, + KC_RCMMD, + KC_SIRI, + KC_TASK_VIEW, + KC_FILE_EXPLORER, + KC_SCREEN_SHOT, + KC_CORTANA +}; + +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define KC_TASK KC_TASK_VIEW +#define KC_FLXP KC_FILE_EXPLORER +#define KC_SNAP KC_SCREEN_SHOT +#define KC_CRTA KC_CORTANA + +typedef struct PACKED { + uint8_t len; + uint8_t keycode[3]; +} key_combination_t; + +key_combination_t key_comb_list[4] = { + {2, {KC_LWIN, KC_TAB}}, + {2, {KC_LWIN, KC_E}}, + {3, {KC_LSFT, KC_LCMD, KC_4}}, + {2, {KC_LWIN, KC_C}} +}; + +static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_iso_88( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_DEL, KC_END, KC_PGDN, + 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_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_iso_88( + KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_iso_88( + KC_ESC, 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_PSCR, KC_CRTA, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_DEL, KC_END, KC_PGDN, + 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_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_iso_88( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), +}; + +uint16_t prev; +bool siri; + +void matrix_scan_user(void) { + if (siri) { + if (timer_elapsed(prev) >= 500) { + siri = false; + unregister_code(KC_LCMD); + unregister_code(KC_SPACE); + } + } +} + +bool dip_switch_update_user(uint8_t index, bool active) { + /* Send default layer state to host */ + system_switch_state_report(index, active); + return true; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LOPTN: + case KC_ROPTN: + case KC_LCMMD: + case KC_RCMMD: + if (record->event.pressed) { + register_code(mac_keycode[keycode - KC_LOPTN]); + } else { + unregister_code(mac_keycode[keycode - KC_LOPTN]); + } + return false; // Skip all further processing of this key + case KC_SIRI: + if (record->event.pressed) { + register_code(KC_LCMD); + register_code(KC_SPACE); + prev = timer_read() | 1; + siri = true; + } else { + // Do something else when release + } + return false; // Skip all further processing of this key + case KC_TASK: + case KC_FLXP: + case KC_SNAP: + case KC_CRTA: + if (record->event.pressed) { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + register_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } else { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/rules.mk b/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/q3_iso_stm32l432.c b/keyboards/keychron/q3/q3_iso_stm32l432/q3_iso_stm32l432.c new file mode 100644 index 000000000000..b509c627627f --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432/q3_iso_stm32l432.c @@ -0,0 +1,155 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include "quantum.h" + +#ifdef RGB_MATRIX_ENABLE + +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {0, I_5, G_5, H_5}, + {0, I_6, G_6, H_6}, + {0, I_7, G_7, H_7}, + {0, I_8, G_8, H_8}, + {0, I_9, G_9, H_9}, + {0, I_10, G_10, H_10}, + {0, I_11, G_11, H_11}, + {0, I_12, G_12, H_12}, + {0, I_13, G_13, H_13}, + {0, I_15, G_15, H_15}, + {0, I_16, G_16, H_16}, + {1, I_15, G_15, H_15}, + + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_15, A_15, B_15}, + {0, C_16, A_16, B_16}, + {1, I_16, G_16, H_16}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_15, D_15, E_15}, + {0, F_16, D_16, E_16}, + {1, I_13, G_13, H_13}, + + {1, I_1, G_1, H_1}, + {1, I_2, G_2, H_2}, + {1, I_3, G_3, H_3}, + {1, I_4, G_4, H_4}, + {1, I_5, G_5, H_5}, + {1, I_6, G_6, H_6}, + {1, I_7, G_7, H_7}, + {1, I_8, G_8, H_8}, + {1, I_9, G_9, H_9}, + {1, I_10, G_10, H_10}, + {1, I_11, G_11, H_11}, + {1, I_12, G_12, H_12}, + {1, I_14, G_14, H_14}, + {0, F_14, D_14, E_14}, + + {1, C_1, A_1, B_1}, + {1, C_2, A_2, B_2}, + {1, C_3, A_3, B_3}, + {1, C_4, A_4, B_4}, + {1, C_5, A_5, B_5}, + {1, C_6, A_6, B_6}, + {1, C_7, A_7, B_7}, + {1, C_8, A_8, B_8}, + {1, C_9, A_9, B_9}, + {1, C_10, A_10, B_10}, + {1, C_11, A_11, B_11}, + {1, C_12, A_12, B_12}, + {1, C_14, A_14, B_14}, + {1, C_16, A_16, B_16}, + + {1, F_1, D_1, E_1}, + {1, F_2, D_2, E_2}, + {1, F_3, D_3, E_3}, + {1, F_7, D_7, E_7}, + {1, F_11, D_11, E_11}, + {1, F_12, D_12, E_12}, + {1, F_13, D_13, E_13}, + {1, F_14, D_14, E_14}, + {1, F_15, D_15, E_15}, + {1, F_16, D_16, E_16}, + {1, C_15, A_15, B_15}, +}; + +#define __ NO_LED + +led_config_t g_led_config = { + { + // Key Matrix to LED Index + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14 }, + { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, + { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 62, 46, 47 }, + { 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 48, 61, 15, 32 }, + { 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, __, 75, 87, 76 }, + { 77, 78, 79, __, __, __, 80, __, __, __, 81, 82, 83, 84, 85, 86 }, + }, + { + // LED Index to Physical Position + {0,0}, {26,0}, {39,0}, {52,0}, {65,0}, {84,0}, {97,0}, {111,0}, {124,0}, {143,0}, {156,0}, {169,0}, {182,0}, {198,0}, {211,0}, {224,0}, + {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {176,15}, {198,15}, {211,15}, {224,15}, + {3,28}, {19,28}, {32,28}, {45,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {198,28}, {211,28}, {224,28}, + {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {166,40}, {183,36}, + {2,52}, {16,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {171,52}, {211,52}, + {2,64}, {18,64}, {34,64}, {83,64}, {131,64}, {148,64}, {164,64}, {180,64}, {198,64}, {211,64}, {224,64}, + }, + { + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, + 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + } +}; + +#endif diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/q3_iso_stm32l432.h b/keyboards/keychron/q3/q3_iso_stm32l432/q3_iso_stm32l432.h new file mode 100644 index 000000000000..440764a8e302 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432/q3_iso_stm32l432.h @@ -0,0 +1,37 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#define XXX KC_NO + +#define LAYOUT_iso_88( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0F, K3E, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3F, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, K2F, K3C, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K2D, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ + K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K4E \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, XXX, K0E, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ + { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \ + { K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ +} diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/readme.md b/keyboards/keychron/q3/q3_iso_stm32l432/readme.md new file mode 100644 index 000000000000..69db8ff53268 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432/readme.md @@ -0,0 +1 @@ +# The ISO variant of the Keychron Q3 diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/rules.mk b/keyboards/keychron/q3/q3_iso_stm32l432/rules.mk new file mode 100644 index 000000000000..c4c1cdf20724 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432/rules.mk @@ -0,0 +1,28 @@ +# MCU name +MCU = STM32L433 + +# Bootloader selection +BOOTLOADER = stm32-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Enable USB N-key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = no # Enable Encoder +DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 +RAW_ENABLE = yes + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +SRC += test.c diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/config.h b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/config.h new file mode 100644 index 000000000000..2e454fb6a622 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/config.h @@ -0,0 +1,39 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x0123 +#define DEVICE_VER 0x0101 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } +#define MATRIX_COL_PINS { C14, C15, A0, A1, A2, A3, A4, A5, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN } + +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 48 +#define DRIVER_2_LED_TOTAL 40 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + +/* Encoder Configuration */ +#define ENCODERS_PAD_A { A10 } +#define ENCODERS_PAD_B { A8 } +#define ENCODER_RESOLUTION 4 +#define ENCODER_DEFAULT_POS 0x3 + +/* Enable caps-lock LED */ +#define CAPS_LOCK_LED_INDEX 49 diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/info.json b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/info.json new file mode 100644 index 000000000000..f3a379591295 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/info.json @@ -0,0 +1,205 @@ +{ + "keyboard_name": "Keychron Q3", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_iso_88": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":1.25, "y":0}, + {"label":"F2", "x":2.25, "y":0}, + {"label":"F3", "x":3.25, "y":0}, + {"label":"F4", "x":4.25, "y":0}, + {"label":"F5", "x":5.5, "y":0}, + {"label":"F5", "x":6.5, "y":0}, + {"label":"F7", "x":7.5, "y":0}, + {"label":"F8", "x":8.5, "y":0}, + {"label":"F9", "x":9.75, "y":0}, + {"label":"F10", "x":10.75, "y":0}, + {"label":"F11", "x":11.75, "y":0}, + {"label":"F12", "x":12.75, "y":0}, + {"label":"Mute", "x":14, "y":0}, + {"label":"Print", "x":15.75, "y":0}, + {"label":"Cortana", "x":16.75, "y":0}, + {"label":"Light", "x":17.75, "y":0}, + + {"label":"`~", "x":0, "y":1.25}, + {"label":"1!", "x":1, "y":1.25}, + {"label":"2@", "x":2, "y":1.25}, + {"label":"3#", "x":3, "y":1.25}, + {"label":"4$", "x":4, "y":1.25}, + {"label":"5%", "x":5, "y":1.25}, + {"label":"6^", "x":6, "y":1.25}, + {"label":"7&", "x":7, "y":1.25}, + {"label":"8*", "x":8, "y":1.25}, + {"label":"9(", "x":9, "y":1.25}, + {"label":"0)", "x":10, "y":1.25}, + {"label":"-_", "x":11, "y":1.25}, + {"label":"=+", "x":12, "y":1.25}, + {"label":"Backspace", "x":13, "y":1.25, "w":2}, + {"label":"Insert", "x":15.25, "y":1.25}, + {"label":"Home", "x":16.25, "y":1.25}, + {"label":"Page Up", "x":17.25, "y":1.25}, + + {"label":"Tab", "x":0, "y":2.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.25}, + {"label":"W", "x":2.5, "y":2.25}, + {"label":"E", "x":3.5, "y":2.25}, + {"label":"R", "x":4.5, "y":2.25}, + {"label":"T", "x":5.5, "y":2.25}, + {"label":"Y", "x":6.5, "y":2.25}, + {"label":"U", "x":7.5, "y":2.25}, + {"label":"I", "x":8.5, "y":2.25}, + {"label":"O", "x":9.5, "y":2.25}, + {"label":"P", "x":10.5, "y":2.25}, + {"label":"[{", "x":11.5, "y":2.25}, + {"label":"]}", "x":12.5, "y":2.25}, + {"label":"Delete", "x":15.25, "y":2.25}, + {"label":"End", "x":16.25, "y":2.25}, + {"label":"Page Down", "x":17.25, "y":2.25}, + + {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, + {"label":"A", "x":1.75, "y":3.25}, + {"label":"S", "x":2.75, "y":3.25}, + {"label":"D", "x":3.75, "y":3.25}, + {"label":"F", "x":4.75, "y":3.25}, + {"label":"G", "x":5.75, "y":3.25}, + {"label":"H", "x":6.75, "y":3.25}, + {"label":"J", "x":7.75, "y":3.25}, + {"label":"K", "x":8.75, "y":3.25}, + {"label":"L", "x":9.75, "y":3.25}, + {"label":";:", "x":10.75, "y":3.25}, + {"label":"'\"", "x":11.75, "y":3.25}, + {"label":"#~", "x":12.75, "y":3.25}, + {"label":"Enter", "x":13.75, "y":2.25, "w":1.25, "h":2}, + + {"label":"Left Shift", "x":0, "y":4.25, "w":1.25}, + {"label":"\\|", "x":1.25, "y":4.25}, + {"label":"Z", "x":2.25, "y":4.25}, + {"label":"X", "x":3.25, "y":4.25}, + {"label":"C", "x":4.25, "y":4.25}, + {"label":"V", "x":5.25, "y":4.25}, + {"label":"B", "x":6.25, "y":4.25}, + {"label":"N", "x":7.25, "y":4.25}, + {"label":"M", "x":8.25, "y":4.25}, + {"label":",<", "x":9.25, "y":4.25}, + {"label":".>", "x":10.25, "y":4.25}, + {"label":"/?", "x":11.25, "y":4.25}, + {"label":"Right Shift", "x":12.25, "y":4.25, "w":2.75}, + {"label":"Up", "x":16.25, "y":4.25}, + + {"label":"Left Ctrl", "x":0, "y":5.25, "w":1.25}, + {"label":"Left Win", "x":1.25, "y":5.25, "w":1.25}, + {"label":"Left Alt", "x":2.5, "y":5.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, + {"label":"Right Alt", "x":10, "y":5.25, "w":1.25}, + {"label":"Right Win", "x":11.25, "y":5.25, "w":1.25}, + {"label":"Fn", "x":12.5, "y":5.25, "w":1.25}, + {"label":"Right Ctrl", "x":13.75, "y":5.25, "w":1.25}, + {"label":"Left", "x":15.25, "y":5.25}, + {"label":"Down", "x":16.25, "y":5.25}, + {"label":"Right", "x":17.25, "y":5.25} + ] + }, + "LAYOUT_all": { + "layout": [ + {"label":"Esc", "x":0, "y":0.5}, + {"label":"F1", "x":1.25, "y":0.5}, + {"label":"F2", "x":2.25, "y":0.5}, + {"label":"F3", "x":3.25, "y":0.5}, + {"label":"F4", "x":4.25, "y":0.5}, + {"label":"F5", "x":5.5, "y":0.5}, + {"label":"F5", "x":6.5, "y":0.5}, + {"label":"F7", "x":7.5, "y":0.5}, + {"label":"F8", "x":8.5, "y":0.5}, + {"label":"F9", "x":9.75, "y":0.5}, + {"label":"F10", "x":10.75, "y":0.5}, + {"label":"F11", "x":11.75, "y":0.5}, + {"label":"F12", "x":12.75, "y":0.5}, + {"label":"CCW", "x":13.9, "y":0, "w":0.6, "h":0.5}, + {"label":"Mute", "x":14, "y":0.5}, + {"label":"CW", "x":14.5, "y":0, "w":0.6, "h":0.5}, + {"label":"Print", "x":15.75, "y":0.5}, + {"label":"Cortana", "x":16.75, "y":0.5}, + {"label":"Light", "x":17.75, "y":0.5}, + + {"label":"`~", "x":0, "y":1.75}, + {"label":"1!", "x":1, "y":1.75}, + {"label":"2@", "x":2, "y":1.75}, + {"label":"3#", "x":3, "y":1.75}, + {"label":"4$", "x":4, "y":1.75}, + {"label":"5%", "x":5, "y":1.75}, + {"label":"6^", "x":6, "y":1.75}, + {"label":"7&", "x":7, "y":1.75}, + {"label":"8*", "x":8, "y":1.75}, + {"label":"9(", "x":9, "y":1.75}, + {"label":"0)", "x":10, "y":1.75}, + {"label":"-_", "x":11, "y":1.75}, + {"label":"=+", "x":12, "y":1.75}, + {"label":"Backspace", "x":13, "y":1.75, "w":2}, + {"label":"Insert", "x":15.75, "y":1.75}, + {"label":"Home", "x":16.75, "y":1.75}, + {"label":"Page Up", "x":17.75, "y":1.75}, + + {"label":"Tab", "x":0, "y":2.75, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.75}, + {"label":"W", "x":2.5, "y":2.75}, + {"label":"E", "x":3.5, "y":2.75}, + {"label":"R", "x":4.5, "y":2.75}, + {"label":"T", "x":5.5, "y":2.75}, + {"label":"Y", "x":6.5, "y":2.75}, + {"label":"U", "x":7.5, "y":2.75}, + {"label":"I", "x":8.5, "y":2.75}, + {"label":"O", "x":9.5, "y":2.75}, + {"label":"P", "x":10.5, "y":2.75}, + {"label":"[{", "x":11.5, "y":2.75}, + {"label":"]}", "x":12.5, "y":2.75}, + {"label":"Delete", "x":15.75, "y":2.75}, + {"label":"End", "x":16.75, "y":2.75}, + {"label":"Page Down", "x":17.75, "y":2.75}, + + {"label":"Caps Lock", "x":0, "y":3.75, "w":1.75}, + {"label":"A", "x":1.75, "y":3.75}, + {"label":"S", "x":2.75, "y":3.75}, + {"label":"D", "x":3.75, "y":3.75}, + {"label":"F", "x":4.75, "y":3.75}, + {"label":"G", "x":5.75, "y":3.75}, + {"label":"H", "x":6.75, "y":3.75}, + {"label":"J", "x":7.75, "y":3.75}, + {"label":"K", "x":8.75, "y":3.75}, + {"label":"L", "x":9.75, "y":3.75}, + {"label":";:", "x":10.75, "y":3.75}, + {"label":"'\"", "x":11.75, "y":3.75}, + {"label":"#~", "x":12.75, "y":3.75}, + {"label":"Enter", "x":13.75, "y":2.75, "w":1.25, "h":2}, + + {"label":"Left Shift", "x":0, "y":4.25, "w":1.25}, + {"label":"\\|", "x":1.25, "y":4.25}, + {"label":"Z", "x":2.25, "y":4.25}, + {"label":"X", "x":3.25, "y":4.25}, + {"label":"C", "x":4.25, "y":4.25}, + {"label":"V", "x":5.25, "y":4.25}, + {"label":"B", "x":6.25, "y":4.25}, + {"label":"N", "x":7.25, "y":4.25}, + {"label":"M", "x":8.25, "y":4.25}, + {"label":",<", "x":9.25, "y":4.25}, + {"label":".>", "x":10.25, "y":4.25}, + {"label":"/?", "x":11.25, "y":4.25}, + {"label":"Right Shift", "x":12.25, "y":4.25, "w":2.75}, + {"label":"Up", "x":16.25, "y":4.25}, + + {"label":"Left Ctrl", "x":0, "y":5.75, "w":1.25}, + {"label":"Left Win", "x":1.25, "y":5.75, "w":1.25}, + {"label":"Left Alt", "x":2.5, "y":5.75, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.75, "w":6.25}, + {"label":"Right Alt", "x":10, "y":5.75, "w":1.25}, + {"label":"Right Win", "x":11.25, "y":5.75, "w":1.25}, + {"label":"Fn", "x":12.5, "y":5.75, "w":1.25}, + {"label":"Right Ctrl", "x":13.75, "y":5.75, "w":1.25}, + {"label":"Left", "x":15.75, "y":5.75}, + {"label":"Down", "x":16.75, "y":5.75}, + {"label":"Right", "x":17.75, "y":5.75} + ] + } + } +} diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/default/keymap.c b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/default/keymap.c new file mode 100644 index 000000000000..9f77288df7b9 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/default/keymap.c @@ -0,0 +1,168 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H +#include "test.h" + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_LAUNCHPAD, + KC_LOPTN, + KC_ROPTN, + KC_LCMMD, + KC_RCMMD, + KC_SIRI, + KC_TASK_VIEW, + KC_FILE_EXPLORER, + KC_SCREEN_SHOT, + KC_CORTANA +}; + +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define KC_TASK KC_TASK_VIEW +#define KC_FLXP KC_FILE_EXPLORER +#define KC_SNAP KC_SCREEN_SHOT +#define KC_CRTA KC_CORTANA + +typedef struct PACKED { + uint8_t len; + uint8_t keycode[3]; +} key_combination_t; + +key_combination_t key_comb_list[4] = { + {2, {KC_LWIN, KC_TAB}}, + {2, {KC_LWIN, KC_E}}, + {3, {KC_LSFT, KC_LCMD, KC_4}}, + {2, {KC_LWIN, KC_C}} +}; + +static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_iso_88( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_SNAP, KC_SIRI, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_DEL, KC_END, KC_PGDN, + 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_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_iso_88( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, KC_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_iso_88( + KC_ESC, 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_MUTE, KC_PSCR, KC_CRTA, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_DEL, KC_END, KC_PGDN, + 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_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_iso_88( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_TOG, KC_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), +}; + +uint16_t prev; +bool siri; + +void matrix_scan_user(void) { + if (siri) { + if (timer_elapsed(prev) >= 500) { + siri = false; + unregister_code(KC_LCMD); + unregister_code(KC_SPACE); + } + } +} + +bool dip_switch_update_user(uint8_t index, bool active) { + /* Send default layer state to host */ + system_switch_state_report(index, active); + return true; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LOPTN: + case KC_ROPTN: + case KC_LCMMD: + case KC_RCMMD: + if (record->event.pressed) { + register_code(mac_keycode[keycode - KC_LOPTN]); + } else { + unregister_code(mac_keycode[keycode - KC_LOPTN]); + } + return false; // Skip all further processing of this key + case KC_SIRI: + if (record->event.pressed) { + register_code(KC_LCMD); + register_code(KC_SPACE); + prev = timer_read() | 1;; + siri = true; + } else { + // Do something else when release + } + return false; // Skip all further processing of this key + case KC_TASK: + case KC_FLXP: + case KC_SNAP: + case KC_CRTA: + if (record->event.pressed) { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + register_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } else { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/keymap.c b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/keymap.c new file mode 100644 index 000000000000..a115cd3f5c14 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/keymap.c @@ -0,0 +1,209 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H +#include "test.h" + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = USER00, + KC_LAUNCHPAD, + KC_LOPTN, + KC_ROPTN, + KC_LCMMD, + KC_RCMMD, + KC_SIRI, + KC_TASK_VIEW, + KC_FILE_EXPLORER, + KC_SCREEN_SHOT, + KC_CORTANA +}; + +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define KC_TASK KC_TASK_VIEW +#define KC_FLXP KC_FILE_EXPLORER +#define KC_SNAP KC_SCREEN_SHOT +#define KC_CRTA KC_CORTANA + +typedef struct PACKED { + uint8_t len; + uint8_t keycode[3]; +} key_combination_t; + +key_combination_t key_comb_list[4] = { + {2, {KC_LWIN, KC_TAB}}, + {2, {KC_LWIN, KC_E}}, + {3, {KC_LSFT, KC_LCMD, KC_4}}, + {2, {KC_LWIN, KC_C}} +}; + +static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_all( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_VOLD, KC_MUTE, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_DEL, KC_END, KC_PGDN, + 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_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_all( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_VAD, RGB_TOG, RGB_VAI, KC_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_all( + KC_ESC, 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_VOLD, KC_MUTE, KC_VOLU, KC_PSCR, KC_CRTA, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_DEL, KC_END, KC_PGDN, + 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_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_all( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_VAD, RGB_TOG, RGB_VAI, KC_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), +}; + +uint16_t prev; +bool siri; + +#if defined(VIA_ENABLE) && defined(ENCODER_ENABLE) + +#define ENCODERS 1 +static uint8_t encoder_state[ENCODERS] = {0}; +static keypos_t encoder_cw[ENCODERS] = {{ 8, 5 }}; +static keypos_t encoder_ccw[ENCODERS] = {{ 7, 5 }}; + +void encoder_action_unregister(void) { + for (int index = 0; index < ENCODERS; ++index) { + if (encoder_state[index]) { + keyevent_t encoder_event = (keyevent_t) { + .key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], + .pressed = false, + .time = (timer_read() | 1) + }; + encoder_state[index] = 0; + action_exec(encoder_event); + } + } +} + +void encoder_action_register(uint8_t index, bool clockwise) { + keyevent_t encoder_event = (keyevent_t) { + .key = clockwise ? encoder_cw[index] : encoder_ccw[index], + .pressed = true, + .time = (timer_read() | 1) + }; + encoder_state[index] = (clockwise ^ 1) | (clockwise << 1); + action_exec(encoder_event); +} + +bool encoder_update_user(uint8_t index, bool clockwise) { + encoder_action_register(index, clockwise); + return false; +}; + +#endif + +void matrix_scan_user(void) { + if (siri) { + if (timer_elapsed(prev) >= 500) { + siri = false; + unregister_code(KC_LCMD); + unregister_code(KC_SPACE); + } + } +#if defined(VIA_ENABLE) && defined(ENCODER_ENABLE) + encoder_action_unregister(); +#endif +} + +bool dip_switch_update_user(uint8_t index, bool active) { + /* Send default layer state to host */ + system_switch_state_report(index, active); + return true; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LOPTN: + case KC_ROPTN: + case KC_LCMMD: + case KC_RCMMD: + if (record->event.pressed) { + register_code(mac_keycode[keycode - KC_LOPTN]); + } else { + unregister_code(mac_keycode[keycode - KC_LOPTN]); + } + return false; // Skip all further processing of this key + case KC_SIRI: + if (record->event.pressed) { + register_code(KC_LCMD); + register_code(KC_SPACE); + prev = timer_read() | 1; + siri = true; + } else { + // Do something else when release + } + return false; // Skip all further processing of this key + case KC_TASK: + case KC_FLXP: + case KC_SNAP: + case KC_CRTA: + if (record->event.pressed) { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + register_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } else { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/rules.mk b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.c b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.c new file mode 100644 index 000000000000..bd59e8158b22 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.c @@ -0,0 +1,186 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include "quantum.h" + +#ifdef RGB_MATRIX_ENABLE + +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {0, I_5, G_5, H_5}, + {0, I_6, G_6, H_6}, + {0, I_7, G_7, H_7}, + {0, I_8, G_8, H_8}, + {0, I_9, G_9, H_9}, + {0, I_10, G_10, H_10}, + {0, I_11, G_11, H_11}, + {0, I_12, G_12, H_12}, + {0, I_13, G_13, H_13}, + {0, I_15, G_15, H_15}, + {0, I_16, G_16, H_16}, + {1, I_15, G_15, H_15}, + + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_15, A_15, B_15}, + {0, C_16, A_16, B_16}, + {1, I_16, G_16, H_16}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_15, D_15, E_15}, + {0, F_16, D_16, E_16}, + {1, I_13, G_13, H_13}, + + {1, I_1, G_1, H_1}, + {1, I_2, G_2, H_2}, + {1, I_3, G_3, H_3}, + {1, I_4, G_4, H_4}, + {1, I_5, G_5, H_5}, + {1, I_6, G_6, H_6}, + {1, I_7, G_7, H_7}, + {1, I_8, G_8, H_8}, + {1, I_9, G_9, H_9}, + {1, I_10, G_10, H_10}, + {1, I_11, G_11, H_11}, + {1, I_12, G_12, H_12}, + {1, I_14, G_14, H_14}, + {0, F_14, D_14, E_14}, + + {1, C_1, A_1, B_1}, + {1, C_2, A_2, B_2}, + {1, C_3, A_3, B_3}, + {1, C_4, A_4, B_4}, + {1, C_5, A_5, B_5}, + {1, C_6, A_6, B_6}, + {1, C_7, A_7, B_7}, + {1, C_8, A_8, B_8}, + {1, C_9, A_9, B_9}, + {1, C_10, A_10, B_10}, + {1, C_11, A_11, B_11}, + {1, C_12, A_12, B_12}, + {1, C_14, A_14, B_14}, + {1, C_16, A_16, B_16}, + + {1, F_1, D_1, E_1}, + {1, F_2, D_2, E_2}, + {1, F_3, D_3, E_3}, + {1, F_7, D_7, E_7}, + {1, F_11, D_11, E_11}, + {1, F_12, D_12, E_12}, + {1, F_13, D_13, E_13}, + {1, F_14, D_14, E_14}, + {1, F_15, D_15, E_15}, + {1, F_16, D_16, E_16}, + {1, C_15, A_15, B_15}, +}; + +#define __ NO_LED + +led_config_t g_led_config = { + { + // Key Matrix to LED Index + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14 }, + { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, + { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 62, 46, 47 }, + { 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 48, 61, 15, 32 }, + { 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, __, 75, 87, 76 }, + { 77, 78, 79, __, __, __, 80, __, __, __, 81, 82, 83, 84, 85, 86 }, + }, + { + // LED Index to Physical Position + {0,0}, {16,0}, {29,0}, {42,0}, {55,0}, {71,0}, {84,0}, {97,0}, {110,0}, {126,0}, {139,0}, {152,0}, {165,0}, {198,0}, {211,0}, {224,0}, + {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {176,15}, {198,15}, {211,15}, {224,15}, + {3,28}, {19,28}, {32,28}, {45,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {198,28}, {211,28}, {224,28}, + {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {166,40}, {183,36}, + {2,52}, {16,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {171,52}, {211,52}, + {2,64}, {18,64}, {34,64}, {83,64}, {131,64}, {148,64}, {164,64}, {180,64}, {198,64}, {211,64}, {224,64}, + }, + { + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, + 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + } +}; + +#endif + +#ifdef ENCODER_ENABLE + +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { return false; } + if (index == 0) { + if (clockwise) { + tap_code_delay(KC_VOLU, TAP_CODE_DELAY); + } else { + tap_code_delay(KC_VOLD, TAP_CODE_DELAY); + } + } + return true; +} + +void encoder0_pad_cb(void *param) { + (void)param; + + insert_encoder_state(0); +} + +void keyboard_post_init_kb(void) { + pin_t encoders_pad_a[] = ENCODERS_PAD_A; + pin_t encoders_pad_b[] = ENCODERS_PAD_B; + palEnableLineEvent(encoders_pad_a[0], PAL_EVENT_MODE_BOTH_EDGES); + palEnableLineEvent(encoders_pad_b[0], PAL_EVENT_MODE_BOTH_EDGES); + palSetLineCallback(encoders_pad_a[0], encoder0_pad_cb, NULL); + palSetLineCallback(encoders_pad_b[0], encoder0_pad_cb, NULL); +} + +#endif diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.h b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.h new file mode 100644 index 000000000000..54f6aa2188a0 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.h @@ -0,0 +1,52 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#define XXX KC_NO + +#define LAYOUT_iso_88( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K3E, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3F, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, K2F, K3C, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K2D, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ + K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K4E \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ + { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \ + { K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ +} +#define LAYOUT_all( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K57, K0D, K58, K0E, K0F, K3E, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3F, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, K2F, K3C, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K2D, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ + K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K4E \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ + { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \ + { K50, K51, K52, XXX, XXX, XXX, K56, K57, K58, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ +} diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/readme.md b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/readme.md new file mode 100644 index 000000000000..fe903e689da8 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/readme.md @@ -0,0 +1,5 @@ +# The ISO variant of the Keychron Q3 + +- Enable EC11 rotary encoder. +- Turn colckwise to increase volume and turn anti-colckwise to decrease volume. +- Press top right key pushbutton to mute. diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/rules.mk b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/rules.mk new file mode 100644 index 000000000000..16f2d3240e72 --- /dev/null +++ b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/rules.mk @@ -0,0 +1,31 @@ +# MCU name +MCU = STM32L433 + +# Bootloader selection +BOOTLOADER = stm32-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Enable USB N-key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = yes # Enable Encoder +DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 +RAW_ENABLE = yes + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +# custom matrix setup +CUSTOM_MATRIX = lite + +SRC += matrix.c test.c diff --git a/keyboards/keychron/q3/readme.md b/keyboards/keychron/q3/readme.md new file mode 100644 index 000000000000..e1515d57094a --- /dev/null +++ b/keyboards/keychron/q3/readme.md @@ -0,0 +1,20 @@ +# Keychron Q3 + +A customizable 87 keys keyboard. + +* Keyboard Maintainer: [Keychron](https://github.com/keychron) +* Hardware Supported: Keychron Q3 +* Hardware Availability: [Keychron](https://www.keychron.com) + +Make example for this keyboard (after setting up your build environment): + + make keychron/q3/q3_ansi_stm32l432:default + +Flashing example for this keyboard: + + make keychron/q3/q3_ansi_stm32l432:default:flash + +**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard. + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + diff --git a/keyboards/keychron/q3/test.c b/keyboards/keychron/q3/test.c new file mode 100644 index 000000000000..05bbd968fc7a --- /dev/null +++ b/keyboards/keychron/q3/test.c @@ -0,0 +1,279 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#include "test.h" + +#define MAC_FN 1 +#define WIN_FN 3 + +static void timer_3s_task(void); +static void timer_300ms_task(void); + +#define KEY_PRESS_FN (0x1<<0) +#define KEY_PRESS_J (0x1<<1) +#define KEY_PRESS_Z (0x1<<2) +#define KEY_PRESS_RIGHT (0x1<<3) +#define KEY_PRESS_HOME (0x1<<4) +#define KEY_PRESS_FACTORY_RESET (KEY_PRESS_FN | KEY_PRESS_J | KEY_PRESS_Z) +#define KEY_PRESS_LED_TEST (KEY_PRESS_FN | KEY_PRESS_RIGHT | KEY_PRESS_HOME) + +enum { + LED_TEST_MODE_OFF, + LED_TEST_MODE_WHITE, + LED_TEST_MODE_RED, + LED_TEST_MODE_GREEN, + LED_TEST_MODE_BLUE, + LED_TEST_MODE_MAX +}led_test_mode; + +enum { + FACTORY_TEST_CMD_BACKLIGHT = 0x01, + FACTORY_TEST_CMD_OS_SWITCH, + FACTORY_TEST_CMD_JUMP_TO_BL, +}; + +enum { + OS_SWITCH = 0x01, +}; + +uint16_t key_press_status = 0; +uint32_t timer_3s_buffer = 0; +uint32_t timer_300ms_buffer = 0; +uint8_t factory_reset_count = 0; +bool report_os_sw_state = false; + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case MO(MAC_FN): + case MO(WIN_FN): + if (record->event.pressed) { + key_press_status |= KEY_PRESS_FN; + } else { + key_press_status &= ~KEY_PRESS_FN; + timer_3s_buffer = 0; + } + return true; + case KC_J: + if (record->event.pressed) { + key_press_status |= KEY_PRESS_J; + if (key_press_status == KEY_PRESS_FACTORY_RESET) { + timer_3s_buffer = sync_timer_read32() | 1; + } + } else { + key_press_status &= ~KEY_PRESS_J; + timer_3s_buffer = 0; + } + return true; + case KC_Z: + if (record->event.pressed) { + key_press_status |= KEY_PRESS_Z; + if (key_press_status == KEY_PRESS_FACTORY_RESET) { + timer_3s_buffer = sync_timer_read32() | 1; + } + } else { + key_press_status &= ~KEY_PRESS_Z; + timer_3s_buffer = 0; + } + return true; + case KC_RGHT: + if (record->event.pressed) { + key_press_status |= KEY_PRESS_RIGHT; + if (led_test_mode) { + if (++led_test_mode >= LED_TEST_MODE_MAX) { + led_test_mode = LED_TEST_MODE_WHITE; + } + } else if (key_press_status == KEY_PRESS_LED_TEST) { + timer_3s_buffer = sync_timer_read32() | 1; + } + } else { + key_press_status &= ~KEY_PRESS_RIGHT; + timer_3s_buffer = 0; + } + return true; + case KC_HOME: + if (record->event.pressed) { + key_press_status |= KEY_PRESS_HOME; + if (led_test_mode) { + led_test_mode = LED_TEST_MODE_OFF; + } else if (key_press_status == KEY_PRESS_LED_TEST) { + timer_3s_buffer = sync_timer_read32() | 1; + } + } else { + key_press_status &= ~KEY_PRESS_HOME; + timer_3s_buffer = 0; + } + return true; + default: + return process_record_user(keycode, record); + } +} + +void matrix_scan_kb(void) { + if (timer_3s_buffer) { + timer_3s_task(); + } + if (timer_300ms_buffer) { + timer_300ms_task(); + } + + matrix_scan_user(); +} + +static void timer_3s_task(void) { + if (sync_timer_elapsed32(timer_3s_buffer) > 3000) { + timer_3s_buffer = 0; + if (key_press_status == KEY_PRESS_FACTORY_RESET) { + timer_300ms_buffer = sync_timer_read32() | 1; + factory_reset_count++; + layer_state_t default_layer_tmp = default_layer_state; + eeconfig_init(); + default_layer_set(default_layer_tmp); + led_test_mode = LED_TEST_MODE_OFF; +#ifdef LED_MATRIX_ENABLE + if (!led_matrix_is_enabled()) led_matrix_enable(); + led_matrix_init(); +#endif +#ifdef RGB_MATRIX_ENABLE + if (!rgb_matrix_is_enabled()) { + rgb_matrix_enable(); + } + rgb_matrix_init(); +#endif + } else if (key_press_status == KEY_PRESS_LED_TEST) { + led_test_mode = LED_TEST_MODE_WHITE; +#ifdef RGB_MATRIX_ENABLE + if (!rgb_matrix_is_enabled()) { + rgb_matrix_enable(); + } +#endif + } + key_press_status = 0; + } +} + +static void timer_300ms_task(void) { + if (timer_300ms_buffer && sync_timer_elapsed32(timer_300ms_buffer) > 300) { + if (factory_reset_count++ > 6) { + timer_300ms_buffer = 0; + factory_reset_count = 0; + } else { + timer_300ms_buffer = sync_timer_read32() | 1; + } + } +} + +#if LED_MATRIX_ENABLE + +void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (factory_reset_count) { + for (uint8_t i = led_min; i <= led_max; i++) { + led_matrix_set_value(i, factory_reset_count % 2 ? 0 : UINT8_MAX); + } + } +} + +#endif + +#if RGB_MATRIX_ENABLE + +void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (factory_reset_count) { + for (uint8_t i = led_min; i <= led_max; i++) { + rgb_matrix_set_color(i, factory_reset_count % 2 ? 0 : RGB_RED); + } + } else if (led_test_mode) { + switch (led_test_mode) { + case LED_TEST_MODE_WHITE: + for (uint8_t i = led_min; i <= led_max; i++) { + rgb_matrix_set_color(i, RGB_WHITE); + } + break; + case LED_TEST_MODE_RED: + for (uint8_t i = led_min; i <= led_max; i++) { + rgb_matrix_set_color(i, RGB_RED); + } + break; + case LED_TEST_MODE_GREEN: + for (uint8_t i = led_min; i <= led_max; i++) { + rgb_matrix_set_color(i, RGB_GREEN); + } + break; + case LED_TEST_MODE_BLUE: + for (uint8_t i = led_min; i <= led_max; i++) { + rgb_matrix_set_color(i, RGB_BLUE); + } + break; + default: + break; + } + } +} + +#endif + +void raw_hid_receive_kb(uint8_t *data, uint8_t length) { + if ( data[0] == 0xAB ) { + uint16_t checksum = 0; + for (uint8_t i = 1; i < RAW_EPSIZE-3; i++) { + checksum += data[i]; + } + /* Verify checksum */ + if ((checksum & 0xFF) != data[RAW_EPSIZE-2] || checksum >> 8 != data[RAW_EPSIZE-1]) { + return; + } + switch (data[1]) { + case FACTORY_TEST_CMD_BACKLIGHT: + led_test_mode = data[2]; + timer_3s_buffer = 0; + break; + case FACTORY_TEST_CMD_OS_SWITCH: + report_os_sw_state = data[2]; + // if (report_os_sw_state) { + // dip_switch_read(true); + // } + break; + case FACTORY_TEST_CMD_JUMP_TO_BL: + if (memcmp(&data[2], "JumpToBootloader", strlen("JumpToBootloader")) == 0) + bootloader_jump(); + break; + } + } +} + +void system_switch_state_report(uint8_t index, bool active) { + uint16_t checksum = 0; + uint8_t data[RAW_EPSIZE] = {0}; + uint8_t payload[3] = { 0 }; + + if (report_os_sw_state) { + payload[0] = FACTORY_TEST_CMD_OS_SWITCH; + payload[1] = OS_SWITCH; + payload[2] = active; + data[0] = 0xAB; + memcpy(&data[1], payload, 3); + for (uint8_t i=1; i> 8) & 0xFF; + raw_hid_send(data, RAW_EPSIZE); + } +} + +/* To solve the problem that keyboard can not wakeup the host */ +void restart_usb_driver(USBDriver *usbp) { + // Do nothing here. +} diff --git a/keyboards/keychron/q3/test.h b/keyboards/keychron/q3/test.h new file mode 100644 index 000000000000..f0bcbf39da2d --- /dev/null +++ b/keyboards/keychron/q3/test.h @@ -0,0 +1,25 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#ifndef _TEST_H_ +#define _TEST_H_ + +#include "quantum.h" +#include "raw_hid.h" + +void system_switch_state_report(uint8_t index, bool active); + +#endif /* _TEST_H_ */ From a63caee277e7f1a18dcc23d564bffea165d4ca20 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Wed, 6 Apr 2022 12:57:57 +0800 Subject: [PATCH 141/155] Update q3 --- keyboards/keychron/q3/config.h | 11 +- keyboards/keychron/q3/halconf.h | 2 +- .../keychron/q3/q3_ansi_stm32l432/config.h | 2 +- .../keymaps/default/keymap.c | 7 - .../q3/q3_ansi_stm32l432/keymaps/via/keymap.c | 7 - .../keychron/q3/q3_ansi_stm32l432/rules.mk | 4 +- .../q3/q3_ansi_stm32l432_ec11/config.h | 2 +- .../keymaps/default/keymap.c | 7 - .../keymaps/via/keymap.c | 7 - .../q3_ansi_stm32l432_ec11.c | 15 - .../q3/q3_ansi_stm32l432_ec11/rules.mk | 3 +- .../keychron/q3/q3_iso_stm32l432/config.h | 2 +- .../q3_iso_stm32l432/keymaps/default/keymap.c | 7 - .../q3/q3_iso_stm32l432/keymaps/via/keymap.c | 7 - .../keychron/q3/q3_iso_stm32l432/rules.mk | 4 +- .../q3/q3_iso_stm32l432_ec11/config.h | 2 +- .../keymaps/default/keymap.c | 7 - .../keymaps/via/keymap.c | 7 - .../q3_iso_stm32l432_ec11.c | 15 - .../q3/q3_iso_stm32l432_ec11/rules.mk | 4 +- keyboards/keychron/q3/test.c | 279 ------------------ keyboards/keychron/q3/test.h | 25 -- 22 files changed, 15 insertions(+), 411 deletions(-) delete mode 100644 keyboards/keychron/q3/test.c delete mode 100644 keyboards/keychron/q3/test.h diff --git a/keyboards/keychron/q3/config.h b/keyboards/keychron/q3/config.h index e034e212a1fc..0b8a90f74e25 100644 --- a/keyboards/keychron/q3/config.h +++ b/keyboards/keychron/q3/config.h @@ -51,11 +51,11 @@ /* turn off effects when suspended */ #define RGB_DISABLE_WHEN_USB_SUSPENDED -/* Set USB polling rate as 1 milliseconds */ -#define USB_POLLING_INTERVAL_MS 1 - /* We have 2KB EEPROM size on STM32L432 */ -#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047 +// #define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047 + +/* Total size of the EEPROM storage in bytes */ +#define TRANSIENT_EEPROM_SIZE 4096 // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: @@ -111,6 +111,3 @@ #ifdef VIA_ENABLE # define VIA_QMK_RGBLIGHT_ENABLE #endif - -/* Enable receive custom command from host */ -#define RAW_HID_CMD 0xAB diff --git a/keyboards/keychron/q3/halconf.h b/keyboards/keychron/q3/halconf.h index e490b49e005a..74821ffac718 100644 --- a/keyboards/keychron/q3/halconf.h +++ b/keyboards/keychron/q3/halconf.h @@ -17,6 +17,6 @@ #pragma once #define HAL_USE_I2C TRUE -#define PAL_USE_CALLBACKS TRUE +#define PAL_USE_CALLBACKS FALSE #include_next diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/config.h b/keyboards/keychron/q3/q3_ansi_stm32l432/config.h index aaaac5792c37..3dfee8b0376c 100644 --- a/keyboards/keychron/q3/q3_ansi_stm32l432/config.h +++ b/keyboards/keychron/q3/q3_ansi_stm32l432/config.h @@ -18,7 +18,7 @@ /* USB Device descriptor parameter */ #define PRODUCT_ID 0x0120 -#define DEVICE_VER 0x0103 +#define DEVICE_VER 0x0100 /* key matrix pins */ #define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/default/keymap.c b/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/default/keymap.c index 6a7912eff44e..281f4d5f7d3f 100644 --- a/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/default/keymap.c +++ b/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/default/keymap.c @@ -15,7 +15,6 @@ */ #include QMK_KEYBOARD_H -#include "test.h" enum layers{ MAC_BASE, @@ -106,12 +105,6 @@ void matrix_scan_user(void) { } } -bool dip_switch_update_user(uint8_t index, bool active) { - /* Send default layer state to host */ - system_switch_state_report(index, active); - return true; -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case KC_MISSION_CONTROL: diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/keymap.c b/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/keymap.c index 5c1a5f6e5797..9bff56eaf065 100644 --- a/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/keymap.c +++ b/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/keymap.c @@ -15,7 +15,6 @@ */ #include QMK_KEYBOARD_H -#include "test.h" enum layers{ MAC_BASE, @@ -106,12 +105,6 @@ void matrix_scan_user(void) { } } -bool dip_switch_update_user(uint8_t index, bool active) { - /* Send default layer state to host */ - system_switch_state_report(index, active); - return true; -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case KC_MISSION_CONTROL: diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/rules.mk b/keyboards/keychron/q3/q3_ansi_stm32l432/rules.mk index c4c1cdf20724..26d88a0545bb 100644 --- a/keyboards/keychron/q3/q3_ansi_stm32l432/rules.mk +++ b/keyboards/keychron/q3/q3_ansi_stm32l432/rules.mk @@ -20,9 +20,7 @@ ENCODER_ENABLE = no # Enable Encoder DIP_SWITCH_ENABLE = yes RGB_MATRIX_ENABLE = yes RGB_MATRIX_DRIVER = CKLED2001 -RAW_ENABLE = yes +EEPROM_DRIVER = transient # Enter lower-power sleep mode when on the ChibiOS idle thread OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE - -SRC += test.c diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/config.h b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/config.h index efb8ed52392b..796b3850ecad 100644 --- a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/config.h +++ b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/config.h @@ -18,7 +18,7 @@ /* USB Device descriptor parameter */ #define PRODUCT_ID 0x0121 -#define DEVICE_VER 0x0103 +#define DEVICE_VER 0x0100 /* key matrix pins */ #define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/default/keymap.c b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/default/keymap.c index a2e3964fd705..699aa41cc64e 100644 --- a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/default/keymap.c +++ b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/default/keymap.c @@ -15,7 +15,6 @@ */ #include QMK_KEYBOARD_H -#include "test.h" enum layers{ MAC_BASE, @@ -106,12 +105,6 @@ void matrix_scan_user(void) { } } -bool dip_switch_update_user(uint8_t index, bool active) { - /* Send default layer state to host */ - system_switch_state_report(index, active); - return true; -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case KC_MISSION_CONTROL: diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/keymap.c b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/keymap.c index ee41e5da6786..40fff018570f 100644 --- a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/keymap.c +++ b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/keymap.c @@ -15,7 +15,6 @@ */ #include QMK_KEYBOARD_H -#include "test.h" enum layers{ MAC_BASE, @@ -147,12 +146,6 @@ void matrix_scan_user(void) { #endif } -bool dip_switch_update_user(uint8_t index, bool active) { - /* Send default layer state to host */ - system_switch_state_report(index, active); - return true; -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case KC_MISSION_CONTROL: diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.c b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.c index 28903c013179..40f3a8494107 100644 --- a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.c +++ b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.c @@ -167,19 +167,4 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { return true; } -void encoder0_pad_cb(void *param) { - (void)param; - - insert_encoder_state(0); -} - -void keyboard_post_init_kb(void) { - pin_t encoders_pad_a[] = ENCODERS_PAD_A; - pin_t encoders_pad_b[] = ENCODERS_PAD_B; - palEnableLineEvent(encoders_pad_a[0], PAL_EVENT_MODE_BOTH_EDGES); - palEnableLineEvent(encoders_pad_b[0], PAL_EVENT_MODE_BOTH_EDGES); - palSetLineCallback(encoders_pad_a[0], encoder0_pad_cb, NULL); - palSetLineCallback(encoders_pad_b[0], encoder0_pad_cb, NULL); -} - #endif diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/rules.mk b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/rules.mk index 0d6c7cc1f9da..2c3e6b177e4c 100644 --- a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/rules.mk +++ b/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/rules.mk @@ -20,6 +20,7 @@ ENCODER_ENABLE = yes # Enable Encoder DIP_SWITCH_ENABLE = yes RGB_MATRIX_ENABLE = yes RGB_MATRIX_DRIVER = CKLED2001 +EEPROM_DRIVER = transient # Enter lower-power sleep mode when on the ChibiOS idle thread OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE @@ -27,4 +28,4 @@ OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE # custom matrix setup CUSTOM_MATRIX = lite -SRC += matrix.c test.c +SRC += matrix.c diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/config.h b/keyboards/keychron/q3/q3_iso_stm32l432/config.h index cbc4381f79e2..045dd05f2aec 100644 --- a/keyboards/keychron/q3/q3_iso_stm32l432/config.h +++ b/keyboards/keychron/q3/q3_iso_stm32l432/config.h @@ -18,7 +18,7 @@ /* USB Device descriptor parameter */ #define PRODUCT_ID 0x0122 -#define DEVICE_VER 0x0101 +#define DEVICE_VER 0x0100 /* key matrix pins */ #define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/default/keymap.c b/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/default/keymap.c index cc0ccc165308..deb5713c47d8 100644 --- a/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/default/keymap.c +++ b/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/default/keymap.c @@ -15,7 +15,6 @@ */ #include QMK_KEYBOARD_H -#include "test.h" enum layers{ MAC_BASE, @@ -106,12 +105,6 @@ void matrix_scan_user(void) { } } -bool dip_switch_update_user(uint8_t index, bool active) { - /* Send default layer state to host */ - system_switch_state_report(index, active); - return true; -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case KC_MISSION_CONTROL: diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/keymap.c b/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/keymap.c index cdfb3c1fdbd7..430c189c54df 100644 --- a/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/keymap.c +++ b/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/keymap.c @@ -15,7 +15,6 @@ */ #include QMK_KEYBOARD_H -#include "test.h" enum layers{ MAC_BASE, @@ -106,12 +105,6 @@ void matrix_scan_user(void) { } } -bool dip_switch_update_user(uint8_t index, bool active) { - /* Send default layer state to host */ - system_switch_state_report(index, active); - return true; -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case KC_MISSION_CONTROL: diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/rules.mk b/keyboards/keychron/q3/q3_iso_stm32l432/rules.mk index c4c1cdf20724..26d88a0545bb 100644 --- a/keyboards/keychron/q3/q3_iso_stm32l432/rules.mk +++ b/keyboards/keychron/q3/q3_iso_stm32l432/rules.mk @@ -20,9 +20,7 @@ ENCODER_ENABLE = no # Enable Encoder DIP_SWITCH_ENABLE = yes RGB_MATRIX_ENABLE = yes RGB_MATRIX_DRIVER = CKLED2001 -RAW_ENABLE = yes +EEPROM_DRIVER = transient # Enter lower-power sleep mode when on the ChibiOS idle thread OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE - -SRC += test.c diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/config.h b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/config.h index 2e454fb6a622..3bd04d05b804 100644 --- a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/config.h +++ b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/config.h @@ -18,7 +18,7 @@ /* USB Device descriptor parameter */ #define PRODUCT_ID 0x0123 -#define DEVICE_VER 0x0101 +#define DEVICE_VER 0x0100 /* key matrix pins */ #define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/default/keymap.c b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/default/keymap.c index 9f77288df7b9..e51a4df56360 100644 --- a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/default/keymap.c +++ b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/default/keymap.c @@ -15,7 +15,6 @@ */ #include QMK_KEYBOARD_H -#include "test.h" enum layers{ MAC_BASE, @@ -106,12 +105,6 @@ void matrix_scan_user(void) { } } -bool dip_switch_update_user(uint8_t index, bool active) { - /* Send default layer state to host */ - system_switch_state_report(index, active); - return true; -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case KC_MISSION_CONTROL: diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/keymap.c b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/keymap.c index a115cd3f5c14..8653d0e98e47 100644 --- a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/keymap.c +++ b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/keymap.c @@ -15,7 +15,6 @@ */ #include QMK_KEYBOARD_H -#include "test.h" enum layers{ MAC_BASE, @@ -147,12 +146,6 @@ void matrix_scan_user(void) { #endif } -bool dip_switch_update_user(uint8_t index, bool active) { - /* Send default layer state to host */ - system_switch_state_report(index, active); - return true; -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case KC_MISSION_CONTROL: diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.c b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.c index bd59e8158b22..b1094d4006cb 100644 --- a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.c +++ b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.c @@ -168,19 +168,4 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { return true; } -void encoder0_pad_cb(void *param) { - (void)param; - - insert_encoder_state(0); -} - -void keyboard_post_init_kb(void) { - pin_t encoders_pad_a[] = ENCODERS_PAD_A; - pin_t encoders_pad_b[] = ENCODERS_PAD_B; - palEnableLineEvent(encoders_pad_a[0], PAL_EVENT_MODE_BOTH_EDGES); - palEnableLineEvent(encoders_pad_b[0], PAL_EVENT_MODE_BOTH_EDGES); - palSetLineCallback(encoders_pad_a[0], encoder0_pad_cb, NULL); - palSetLineCallback(encoders_pad_b[0], encoder0_pad_cb, NULL); -} - #endif diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/rules.mk b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/rules.mk index 16f2d3240e72..2c3e6b177e4c 100644 --- a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/rules.mk +++ b/keyboards/keychron/q3/q3_iso_stm32l432_ec11/rules.mk @@ -20,7 +20,7 @@ ENCODER_ENABLE = yes # Enable Encoder DIP_SWITCH_ENABLE = yes RGB_MATRIX_ENABLE = yes RGB_MATRIX_DRIVER = CKLED2001 -RAW_ENABLE = yes +EEPROM_DRIVER = transient # Enter lower-power sleep mode when on the ChibiOS idle thread OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE @@ -28,4 +28,4 @@ OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE # custom matrix setup CUSTOM_MATRIX = lite -SRC += matrix.c test.c +SRC += matrix.c diff --git a/keyboards/keychron/q3/test.c b/keyboards/keychron/q3/test.c deleted file mode 100644 index 05bbd968fc7a..000000000000 --- a/keyboards/keychron/q3/test.c +++ /dev/null @@ -1,279 +0,0 @@ -/* Copyright 2022 @ Keychron (https://www.keychron.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 . - */ - -#include "test.h" - -#define MAC_FN 1 -#define WIN_FN 3 - -static void timer_3s_task(void); -static void timer_300ms_task(void); - -#define KEY_PRESS_FN (0x1<<0) -#define KEY_PRESS_J (0x1<<1) -#define KEY_PRESS_Z (0x1<<2) -#define KEY_PRESS_RIGHT (0x1<<3) -#define KEY_PRESS_HOME (0x1<<4) -#define KEY_PRESS_FACTORY_RESET (KEY_PRESS_FN | KEY_PRESS_J | KEY_PRESS_Z) -#define KEY_PRESS_LED_TEST (KEY_PRESS_FN | KEY_PRESS_RIGHT | KEY_PRESS_HOME) - -enum { - LED_TEST_MODE_OFF, - LED_TEST_MODE_WHITE, - LED_TEST_MODE_RED, - LED_TEST_MODE_GREEN, - LED_TEST_MODE_BLUE, - LED_TEST_MODE_MAX -}led_test_mode; - -enum { - FACTORY_TEST_CMD_BACKLIGHT = 0x01, - FACTORY_TEST_CMD_OS_SWITCH, - FACTORY_TEST_CMD_JUMP_TO_BL, -}; - -enum { - OS_SWITCH = 0x01, -}; - -uint16_t key_press_status = 0; -uint32_t timer_3s_buffer = 0; -uint32_t timer_300ms_buffer = 0; -uint8_t factory_reset_count = 0; -bool report_os_sw_state = false; - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case MO(MAC_FN): - case MO(WIN_FN): - if (record->event.pressed) { - key_press_status |= KEY_PRESS_FN; - } else { - key_press_status &= ~KEY_PRESS_FN; - timer_3s_buffer = 0; - } - return true; - case KC_J: - if (record->event.pressed) { - key_press_status |= KEY_PRESS_J; - if (key_press_status == KEY_PRESS_FACTORY_RESET) { - timer_3s_buffer = sync_timer_read32() | 1; - } - } else { - key_press_status &= ~KEY_PRESS_J; - timer_3s_buffer = 0; - } - return true; - case KC_Z: - if (record->event.pressed) { - key_press_status |= KEY_PRESS_Z; - if (key_press_status == KEY_PRESS_FACTORY_RESET) { - timer_3s_buffer = sync_timer_read32() | 1; - } - } else { - key_press_status &= ~KEY_PRESS_Z; - timer_3s_buffer = 0; - } - return true; - case KC_RGHT: - if (record->event.pressed) { - key_press_status |= KEY_PRESS_RIGHT; - if (led_test_mode) { - if (++led_test_mode >= LED_TEST_MODE_MAX) { - led_test_mode = LED_TEST_MODE_WHITE; - } - } else if (key_press_status == KEY_PRESS_LED_TEST) { - timer_3s_buffer = sync_timer_read32() | 1; - } - } else { - key_press_status &= ~KEY_PRESS_RIGHT; - timer_3s_buffer = 0; - } - return true; - case KC_HOME: - if (record->event.pressed) { - key_press_status |= KEY_PRESS_HOME; - if (led_test_mode) { - led_test_mode = LED_TEST_MODE_OFF; - } else if (key_press_status == KEY_PRESS_LED_TEST) { - timer_3s_buffer = sync_timer_read32() | 1; - } - } else { - key_press_status &= ~KEY_PRESS_HOME; - timer_3s_buffer = 0; - } - return true; - default: - return process_record_user(keycode, record); - } -} - -void matrix_scan_kb(void) { - if (timer_3s_buffer) { - timer_3s_task(); - } - if (timer_300ms_buffer) { - timer_300ms_task(); - } - - matrix_scan_user(); -} - -static void timer_3s_task(void) { - if (sync_timer_elapsed32(timer_3s_buffer) > 3000) { - timer_3s_buffer = 0; - if (key_press_status == KEY_PRESS_FACTORY_RESET) { - timer_300ms_buffer = sync_timer_read32() | 1; - factory_reset_count++; - layer_state_t default_layer_tmp = default_layer_state; - eeconfig_init(); - default_layer_set(default_layer_tmp); - led_test_mode = LED_TEST_MODE_OFF; -#ifdef LED_MATRIX_ENABLE - if (!led_matrix_is_enabled()) led_matrix_enable(); - led_matrix_init(); -#endif -#ifdef RGB_MATRIX_ENABLE - if (!rgb_matrix_is_enabled()) { - rgb_matrix_enable(); - } - rgb_matrix_init(); -#endif - } else if (key_press_status == KEY_PRESS_LED_TEST) { - led_test_mode = LED_TEST_MODE_WHITE; -#ifdef RGB_MATRIX_ENABLE - if (!rgb_matrix_is_enabled()) { - rgb_matrix_enable(); - } -#endif - } - key_press_status = 0; - } -} - -static void timer_300ms_task(void) { - if (timer_300ms_buffer && sync_timer_elapsed32(timer_300ms_buffer) > 300) { - if (factory_reset_count++ > 6) { - timer_300ms_buffer = 0; - factory_reset_count = 0; - } else { - timer_300ms_buffer = sync_timer_read32() | 1; - } - } -} - -#if LED_MATRIX_ENABLE - -void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { - if (factory_reset_count) { - for (uint8_t i = led_min; i <= led_max; i++) { - led_matrix_set_value(i, factory_reset_count % 2 ? 0 : UINT8_MAX); - } - } -} - -#endif - -#if RGB_MATRIX_ENABLE - -void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { - if (factory_reset_count) { - for (uint8_t i = led_min; i <= led_max; i++) { - rgb_matrix_set_color(i, factory_reset_count % 2 ? 0 : RGB_RED); - } - } else if (led_test_mode) { - switch (led_test_mode) { - case LED_TEST_MODE_WHITE: - for (uint8_t i = led_min; i <= led_max; i++) { - rgb_matrix_set_color(i, RGB_WHITE); - } - break; - case LED_TEST_MODE_RED: - for (uint8_t i = led_min; i <= led_max; i++) { - rgb_matrix_set_color(i, RGB_RED); - } - break; - case LED_TEST_MODE_GREEN: - for (uint8_t i = led_min; i <= led_max; i++) { - rgb_matrix_set_color(i, RGB_GREEN); - } - break; - case LED_TEST_MODE_BLUE: - for (uint8_t i = led_min; i <= led_max; i++) { - rgb_matrix_set_color(i, RGB_BLUE); - } - break; - default: - break; - } - } -} - -#endif - -void raw_hid_receive_kb(uint8_t *data, uint8_t length) { - if ( data[0] == 0xAB ) { - uint16_t checksum = 0; - for (uint8_t i = 1; i < RAW_EPSIZE-3; i++) { - checksum += data[i]; - } - /* Verify checksum */ - if ((checksum & 0xFF) != data[RAW_EPSIZE-2] || checksum >> 8 != data[RAW_EPSIZE-1]) { - return; - } - switch (data[1]) { - case FACTORY_TEST_CMD_BACKLIGHT: - led_test_mode = data[2]; - timer_3s_buffer = 0; - break; - case FACTORY_TEST_CMD_OS_SWITCH: - report_os_sw_state = data[2]; - // if (report_os_sw_state) { - // dip_switch_read(true); - // } - break; - case FACTORY_TEST_CMD_JUMP_TO_BL: - if (memcmp(&data[2], "JumpToBootloader", strlen("JumpToBootloader")) == 0) - bootloader_jump(); - break; - } - } -} - -void system_switch_state_report(uint8_t index, bool active) { - uint16_t checksum = 0; - uint8_t data[RAW_EPSIZE] = {0}; - uint8_t payload[3] = { 0 }; - - if (report_os_sw_state) { - payload[0] = FACTORY_TEST_CMD_OS_SWITCH; - payload[1] = OS_SWITCH; - payload[2] = active; - data[0] = 0xAB; - memcpy(&data[1], payload, 3); - for (uint8_t i=1; i> 8) & 0xFF; - raw_hid_send(data, RAW_EPSIZE); - } -} - -/* To solve the problem that keyboard can not wakeup the host */ -void restart_usb_driver(USBDriver *usbp) { - // Do nothing here. -} diff --git a/keyboards/keychron/q3/test.h b/keyboards/keychron/q3/test.h deleted file mode 100644 index f0bcbf39da2d..000000000000 --- a/keyboards/keychron/q3/test.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright 2022 @ Keychron (https://www.keychron.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 . - */ - -#ifndef _TEST_H_ -#define _TEST_H_ - -#include "quantum.h" -#include "raw_hid.h" - -void system_switch_state_report(uint8_t index, bool active); - -#endif /* _TEST_H_ */ From d7237cde05ffbbe16163e457cb44adbb1d597dd8 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Wed, 6 Apr 2022 15:56:08 +0800 Subject: [PATCH 142/155] Update q3 --- keyboards/keychron/q3/q3.h | 16 ++++++++-------- keyboards/keychron/q3/readme.md | 4 ++-- .../q3/{q3_ansi_stm32l432 => rev_0120}/config.h | 0 .../q3/{q3_ansi_stm32l432 => rev_0120}/info.json | 0 .../keymaps/default/keymap.c | 0 .../keymaps/via/keymap.c | 0 .../keymaps/via/rules.mk | 0 .../q3/{q3_ansi_stm32l432 => rev_0120}/readme.md | 0 .../q3_ansi_stm32l432.c => rev_0120/rev_0120.c} | 0 .../q3_ansi_stm32l432.h => rev_0120/rev_0120.h} | 0 .../q3/{q3_ansi_stm32l432 => rev_0120}/rules.mk | 0 .../config.h | 0 .../info.json | 0 .../keymaps/default/keymap.c | 0 .../keymaps/via/keymap.c | 0 .../keymaps/via/rules.mk | 0 .../readme.md | 0 .../rev_0121.c} | 0 .../rev_0121.h} | 0 .../rules.mk | 0 .../q3/{q3_iso_stm32l432 => rev_0122}/config.h | 0 .../q3/{q3_iso_stm32l432 => rev_0122}/info.json | 0 .../keymaps/default/keymap.c | 0 .../keymaps/via/keymap.c | 0 .../keymaps/via/rules.mk | 0 .../q3/{q3_iso_stm32l432 => rev_0122}/readme.md | 0 .../q3_iso_stm32l432.c => rev_0122/rev_0122.c} | 0 .../q3_iso_stm32l432.h => rev_0122/rev_0122.h} | 0 .../q3/{q3_iso_stm32l432 => rev_0122}/rules.mk | 0 .../{q3_iso_stm32l432_ec11 => rev_0123}/config.h | 0 .../info.json | 0 .../keymaps/default/keymap.c | 0 .../keymaps/via/keymap.c | 0 .../keymaps/via/rules.mk | 0 .../readme.md | 0 .../rev_0123.c} | 0 .../rev_0123.h} | 0 .../{q3_iso_stm32l432_ec11 => rev_0123}/rules.mk | 0 38 files changed, 10 insertions(+), 10 deletions(-) rename keyboards/keychron/q3/{q3_ansi_stm32l432 => rev_0120}/config.h (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432 => rev_0120}/info.json (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432 => rev_0120}/keymaps/default/keymap.c (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432 => rev_0120}/keymaps/via/keymap.c (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432 => rev_0120}/keymaps/via/rules.mk (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432 => rev_0120}/readme.md (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432/q3_ansi_stm32l432.c => rev_0120/rev_0120.c} (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432/q3_ansi_stm32l432.h => rev_0120/rev_0120.h} (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432 => rev_0120}/rules.mk (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432_ec11 => rev_0121}/config.h (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432_ec11 => rev_0121}/info.json (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432_ec11 => rev_0121}/keymaps/default/keymap.c (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432_ec11 => rev_0121}/keymaps/via/keymap.c (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432_ec11 => rev_0121}/keymaps/via/rules.mk (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432_ec11 => rev_0121}/readme.md (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.c => rev_0121/rev_0121.c} (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.h => rev_0121/rev_0121.h} (100%) rename keyboards/keychron/q3/{q3_ansi_stm32l432_ec11 => rev_0121}/rules.mk (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432 => rev_0122}/config.h (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432 => rev_0122}/info.json (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432 => rev_0122}/keymaps/default/keymap.c (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432 => rev_0122}/keymaps/via/keymap.c (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432 => rev_0122}/keymaps/via/rules.mk (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432 => rev_0122}/readme.md (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432/q3_iso_stm32l432.c => rev_0122/rev_0122.c} (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432/q3_iso_stm32l432.h => rev_0122/rev_0122.h} (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432 => rev_0122}/rules.mk (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432_ec11 => rev_0123}/config.h (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432_ec11 => rev_0123}/info.json (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432_ec11 => rev_0123}/keymaps/default/keymap.c (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432_ec11 => rev_0123}/keymaps/via/keymap.c (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432_ec11 => rev_0123}/keymaps/via/rules.mk (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432_ec11 => rev_0123}/readme.md (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.c => rev_0123/rev_0123.c} (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.h => rev_0123/rev_0123.h} (100%) rename keyboards/keychron/q3/{q3_iso_stm32l432_ec11 => rev_0123}/rules.mk (100%) diff --git a/keyboards/keychron/q3/q3.h b/keyboards/keychron/q3/q3.h index c0cc04c74126..905b6b8680a0 100644 --- a/keyboards/keychron/q3/q3.h +++ b/keyboards/keychron/q3/q3.h @@ -18,12 +18,12 @@ #include "quantum.h" -#if defined(KEYBOARD_keychron_q3_q3_ansi_stm32l432) -# include "q3_ansi_stm32l432.h" -#elif defined(KEYBOARD_keychron_q3_q3_ansi_stm32l432_ec11) -# include "q3_ansi_stm32l432_ec11.h" -#elif defined(KEYBOARD_keychron_q3_q3_iso_stm32l432) -# include "q3_iso_stm32l432.h" -#elif defined(KEYBOARD_keychron_q3_q3_iso_stm32l432_ec11) -# include "q3_iso_stm32l432_ec11.h" +#if defined(KEYBOARD_keychron_q3_rev_0120) +# include "rev_0120.h" +#elif defined(KEYBOARD_keychron_q3_rev_0121) +# include "rev_0121.h" +#elif defined(KEYBOARD_keychron_q3_rev_0122) +# include "rev_0122.h" +#elif defined(KEYBOARD_keychron_q3_rev_0123) +# include "rev_0123.h" #endif diff --git a/keyboards/keychron/q3/readme.md b/keyboards/keychron/q3/readme.md index e1515d57094a..6807867e966f 100644 --- a/keyboards/keychron/q3/readme.md +++ b/keyboards/keychron/q3/readme.md @@ -8,11 +8,11 @@ A customizable 87 keys keyboard. Make example for this keyboard (after setting up your build environment): - make keychron/q3/q3_ansi_stm32l432:default + make keychron/q3/rev_0120:default Flashing example for this keyboard: - make keychron/q3/q3_ansi_stm32l432:default:flash + make keychron/q3/rev_0120:default:flash **Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard. diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/config.h b/keyboards/keychron/q3/rev_0120/config.h similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432/config.h rename to keyboards/keychron/q3/rev_0120/config.h diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/info.json b/keyboards/keychron/q3/rev_0120/info.json similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432/info.json rename to keyboards/keychron/q3/rev_0120/info.json diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/default/keymap.c b/keyboards/keychron/q3/rev_0120/keymaps/default/keymap.c similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/default/keymap.c rename to keyboards/keychron/q3/rev_0120/keymaps/default/keymap.c diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/keymap.c b/keyboards/keychron/q3/rev_0120/keymaps/via/keymap.c similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/keymap.c rename to keyboards/keychron/q3/rev_0120/keymaps/via/keymap.c diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/rules.mk b/keyboards/keychron/q3/rev_0120/keymaps/via/rules.mk similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432/keymaps/via/rules.mk rename to keyboards/keychron/q3/rev_0120/keymaps/via/rules.mk diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/readme.md b/keyboards/keychron/q3/rev_0120/readme.md similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432/readme.md rename to keyboards/keychron/q3/rev_0120/readme.md diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/q3_ansi_stm32l432.c b/keyboards/keychron/q3/rev_0120/rev_0120.c similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432/q3_ansi_stm32l432.c rename to keyboards/keychron/q3/rev_0120/rev_0120.c diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/q3_ansi_stm32l432.h b/keyboards/keychron/q3/rev_0120/rev_0120.h similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432/q3_ansi_stm32l432.h rename to keyboards/keychron/q3/rev_0120/rev_0120.h diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432/rules.mk b/keyboards/keychron/q3/rev_0120/rules.mk similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432/rules.mk rename to keyboards/keychron/q3/rev_0120/rules.mk diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/config.h b/keyboards/keychron/q3/rev_0121/config.h similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432_ec11/config.h rename to keyboards/keychron/q3/rev_0121/config.h diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/info.json b/keyboards/keychron/q3/rev_0121/info.json similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432_ec11/info.json rename to keyboards/keychron/q3/rev_0121/info.json diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/default/keymap.c b/keyboards/keychron/q3/rev_0121/keymaps/default/keymap.c similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/default/keymap.c rename to keyboards/keychron/q3/rev_0121/keymaps/default/keymap.c diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/keymap.c b/keyboards/keychron/q3/rev_0121/keymaps/via/keymap.c similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/keymap.c rename to keyboards/keychron/q3/rev_0121/keymaps/via/keymap.c diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/rules.mk b/keyboards/keychron/q3/rev_0121/keymaps/via/rules.mk similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432_ec11/keymaps/via/rules.mk rename to keyboards/keychron/q3/rev_0121/keymaps/via/rules.mk diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/readme.md b/keyboards/keychron/q3/rev_0121/readme.md similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432_ec11/readme.md rename to keyboards/keychron/q3/rev_0121/readme.md diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.c b/keyboards/keychron/q3/rev_0121/rev_0121.c similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.c rename to keyboards/keychron/q3/rev_0121/rev_0121.c diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.h b/keyboards/keychron/q3/rev_0121/rev_0121.h similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432_ec11/q3_ansi_stm32l432_ec11.h rename to keyboards/keychron/q3/rev_0121/rev_0121.h diff --git a/keyboards/keychron/q3/q3_ansi_stm32l432_ec11/rules.mk b/keyboards/keychron/q3/rev_0121/rules.mk similarity index 100% rename from keyboards/keychron/q3/q3_ansi_stm32l432_ec11/rules.mk rename to keyboards/keychron/q3/rev_0121/rules.mk diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/config.h b/keyboards/keychron/q3/rev_0122/config.h similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432/config.h rename to keyboards/keychron/q3/rev_0122/config.h diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/info.json b/keyboards/keychron/q3/rev_0122/info.json similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432/info.json rename to keyboards/keychron/q3/rev_0122/info.json diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/default/keymap.c b/keyboards/keychron/q3/rev_0122/keymaps/default/keymap.c similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432/keymaps/default/keymap.c rename to keyboards/keychron/q3/rev_0122/keymaps/default/keymap.c diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/keymap.c b/keyboards/keychron/q3/rev_0122/keymaps/via/keymap.c similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/keymap.c rename to keyboards/keychron/q3/rev_0122/keymaps/via/keymap.c diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/rules.mk b/keyboards/keychron/q3/rev_0122/keymaps/via/rules.mk similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432/keymaps/via/rules.mk rename to keyboards/keychron/q3/rev_0122/keymaps/via/rules.mk diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/readme.md b/keyboards/keychron/q3/rev_0122/readme.md similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432/readme.md rename to keyboards/keychron/q3/rev_0122/readme.md diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/q3_iso_stm32l432.c b/keyboards/keychron/q3/rev_0122/rev_0122.c similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432/q3_iso_stm32l432.c rename to keyboards/keychron/q3/rev_0122/rev_0122.c diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/q3_iso_stm32l432.h b/keyboards/keychron/q3/rev_0122/rev_0122.h similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432/q3_iso_stm32l432.h rename to keyboards/keychron/q3/rev_0122/rev_0122.h diff --git a/keyboards/keychron/q3/q3_iso_stm32l432/rules.mk b/keyboards/keychron/q3/rev_0122/rules.mk similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432/rules.mk rename to keyboards/keychron/q3/rev_0122/rules.mk diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/config.h b/keyboards/keychron/q3/rev_0123/config.h similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432_ec11/config.h rename to keyboards/keychron/q3/rev_0123/config.h diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/info.json b/keyboards/keychron/q3/rev_0123/info.json similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432_ec11/info.json rename to keyboards/keychron/q3/rev_0123/info.json diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/default/keymap.c b/keyboards/keychron/q3/rev_0123/keymaps/default/keymap.c similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/default/keymap.c rename to keyboards/keychron/q3/rev_0123/keymaps/default/keymap.c diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/keymap.c b/keyboards/keychron/q3/rev_0123/keymaps/via/keymap.c similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/keymap.c rename to keyboards/keychron/q3/rev_0123/keymaps/via/keymap.c diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/rules.mk b/keyboards/keychron/q3/rev_0123/keymaps/via/rules.mk similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432_ec11/keymaps/via/rules.mk rename to keyboards/keychron/q3/rev_0123/keymaps/via/rules.mk diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/readme.md b/keyboards/keychron/q3/rev_0123/readme.md similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432_ec11/readme.md rename to keyboards/keychron/q3/rev_0123/readme.md diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.c b/keyboards/keychron/q3/rev_0123/rev_0123.c similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.c rename to keyboards/keychron/q3/rev_0123/rev_0123.c diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.h b/keyboards/keychron/q3/rev_0123/rev_0123.h similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432_ec11/q3_iso_stm32l432_ec11.h rename to keyboards/keychron/q3/rev_0123/rev_0123.h diff --git a/keyboards/keychron/q3/q3_iso_stm32l432_ec11/rules.mk b/keyboards/keychron/q3/rev_0123/rules.mk similarity index 100% rename from keyboards/keychron/q3/q3_iso_stm32l432_ec11/rules.mk rename to keyboards/keychron/q3/rev_0123/rules.mk From e664c23098239c8ca72c9eab828da967abffcf2c Mon Sep 17 00:00:00 2001 From: bootstrapper Date: Sat, 9 Apr 2022 02:54:33 -0500 Subject: [PATCH 143/155] added q3 rev 0120 left-hand gamer layer --- keyboards/keychron/q3/q3.c | 1 + keyboards/keychron/q3/q3.h | 2 + keyboards/keychron/q3/rev_0120_lhg/config.h | 47 ++++ keyboards/keychron/q3/rev_0120_lhg/info.json | 103 ++++++++ .../q3/rev_0120_lhg/keymaps/default/keymap.c | 161 ++++++++++++ .../q3/rev_0120_lhg/keymaps/via/keymap.c | 237 ++++++++++++++++++ .../q3/rev_0120_lhg/keymaps/via/rules.mk | 2 + keyboards/keychron/q3/rev_0120_lhg/readme.md | 1 + .../keychron/q3/rev_0120_lhg/rev_0120_lhg.c | 154 ++++++++++++ .../keychron/q3/rev_0120_lhg/rev_0120_lhg.h | 37 +++ keyboards/keychron/q3/rev_0120_lhg/rules.mk | 26 ++ 11 files changed, 771 insertions(+) create mode 100644 keyboards/keychron/q3/rev_0120_lhg/config.h create mode 100644 keyboards/keychron/q3/rev_0120_lhg/info.json create mode 100644 keyboards/keychron/q3/rev_0120_lhg/keymaps/default/keymap.c create mode 100644 keyboards/keychron/q3/rev_0120_lhg/keymaps/via/keymap.c create mode 100644 keyboards/keychron/q3/rev_0120_lhg/keymaps/via/rules.mk create mode 100644 keyboards/keychron/q3/rev_0120_lhg/readme.md create mode 100644 keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.c create mode 100644 keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.h create mode 100644 keyboards/keychron/q3/rev_0120_lhg/rules.mk diff --git a/keyboards/keychron/q3/q3.c b/keyboards/keychron/q3/q3.c index 1f79ecede361..fcf3e906f06c 100644 --- a/keyboards/keychron/q3/q3.c +++ b/keyboards/keychron/q3/q3.c @@ -36,6 +36,7 @@ bool dip_switch_update_kb(uint8_t index, bool active) { return false; } if (index == 0) { + layer_state_set(1UL << (active ? 2 : 0)); default_layer_set(1UL << (active ? 2 : 0)); } return true; diff --git a/keyboards/keychron/q3/q3.h b/keyboards/keychron/q3/q3.h index 905b6b8680a0..f42890c5f0a2 100644 --- a/keyboards/keychron/q3/q3.h +++ b/keyboards/keychron/q3/q3.h @@ -26,4 +26,6 @@ # include "rev_0122.h" #elif defined(KEYBOARD_keychron_q3_rev_0123) # include "rev_0123.h" +#elif defined(KEYBOARD_keychron_q3_rev_0120_lhg) +# include "rev_0120_lhg.h" #endif diff --git a/keyboards/keychron/q3/rev_0120_lhg/config.h b/keyboards/keychron/q3/rev_0120_lhg/config.h new file mode 100644 index 000000000000..47bd5979ed71 --- /dev/null +++ b/keyboards/keychron/q3/rev_0120_lhg/config.h @@ -0,0 +1,47 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* USB Device descriptor parameter */ +#define PRODUCT_ID 0x0120 +#define DEVICE_VER 0x0100 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } +#define MATRIX_COL_PINS { C14, C15, A0, A1, A2, A3, A4, A5, A6, A7, B0, B1, A8, A9, A10, H3 } + +/* We uses a pin with a stronger pull resistor than the internal MCU pins */ +// #define MATRIX_UNSELECT_DRIVE_HIGH + +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 48 +#define DRIVER_2_LED_TOTAL 39 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + +/* Enable CapsLcok LED */ +#define CAPS_LOCK_LED_INDEX 50 + +// setup 5 layers +// 0: Mac +// 1: Mac function +// 2: Windows +// 3: Left Handed Gaming +// 4: Windows Function +#define DYNAMIC_KEYMAP_LAYER_COUNT 5 + +#define RGB_MATRIX_KEYPRESSES +#define RGB_MATRIX_KEYRELEASES diff --git a/keyboards/keychron/q3/rev_0120_lhg/info.json b/keyboards/keychron/q3/rev_0120_lhg/info.json new file mode 100644 index 000000000000..f540d9e637c1 --- /dev/null +++ b/keyboards/keychron/q3/rev_0120_lhg/info.json @@ -0,0 +1,103 @@ +{ + "keyboard_name": "Keychron Q3", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "layouts": { + "LAYOUT_ansi_87": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":2, "y":0}, + {"label":"F2", "x":3, "y":0}, + {"label":"F3", "x":4, "y":0}, + {"label":"F4", "x":5, "y":0}, + {"label":"F5", "x":6.5, "y":0}, + {"label":"F5", "x":7.5, "y":0}, + {"label":"F7", "x":8.5, "y":0}, + {"label":"F8", "x":9.5, "y":0}, + {"label":"F9", "x":11, "y":0}, + {"label":"F10", "x":12, "y":0}, + {"label":"F11", "x":13, "y":0}, + {"label":"F12", "x":14, "y":0}, + {"label":"Print", "x":15.25, "y":0}, + {"label":"Cortana", "x":16.25, "y":0}, + {"label":"Light", "x":17.25, "y":0}, + + {"label":"`~", "x":0, "y":1.25}, + {"label":"1!", "x":1, "y":1.25}, + {"label":"2@", "x":2, "y":1.25}, + {"label":"3#", "x":3, "y":1.25}, + {"label":"4$", "x":4, "y":1.25}, + {"label":"5%", "x":5, "y":1.25}, + {"label":"6^", "x":6, "y":1.25}, + {"label":"7&", "x":7, "y":1.25}, + {"label":"8*", "x":8, "y":1.25}, + {"label":"9(", "x":9, "y":1.25}, + {"label":"0)", "x":10, "y":1.25}, + {"label":"-_", "x":11, "y":1.25}, + {"label":"=+", "x":12, "y":1.25}, + {"label":"Backspace", "x":13, "y":1.25, "w":2}, + {"label":"Insert", "x":15.25, "y":1.25}, + {"label":"Home", "x":16.25, "y":1.25}, + {"label":"Page Up", "x":17.25, "y":1.25}, + + {"label":"Tab", "x":0, "y":2.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.25}, + {"label":"W", "x":2.5, "y":2.25}, + {"label":"E", "x":3.5, "y":2.25}, + {"label":"R", "x":4.5, "y":2.25}, + {"label":"T", "x":5.5, "y":2.25}, + {"label":"Y", "x":6.5, "y":2.25}, + {"label":"U", "x":7.5, "y":2.25}, + {"label":"I", "x":8.5, "y":2.25}, + {"label":"O", "x":9.5, "y":2.25}, + {"label":"P", "x":10.5, "y":2.25}, + {"label":"[{", "x":11.5, "y":2.25}, + {"label":"]}", "x":12.5, "y":2.25}, + {"label":"\\|", "x":13.5, "y":2.25, "w":1.5}, + {"label":"Delete", "x":15.25, "y":2.25}, + {"label":"End", "x":16.25, "y":2.25}, + {"label":"Page Down", "x":17.25, "y":2.25}, + + {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, + {"label":"A", "x":1.75, "y":3.25}, + {"label":"S", "x":2.75, "y":3.25}, + {"label":"D", "x":3.75, "y":3.25}, + {"label":"F", "x":4.75, "y":3.25}, + {"label":"G", "x":5.75, "y":3.25}, + {"label":"H", "x":6.75, "y":3.25}, + {"label":"J", "x":7.75, "y":3.25}, + {"label":"K", "x":8.75, "y":3.25}, + {"label":"L", "x":9.75, "y":3.25}, + {"label":";:", "x":10.75, "y":3.25}, + {"label":"'\"", "x":11.75, "y":3.25}, + {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, + + {"label":"Left Shift", "x":0, "y":4.25, "w":2.25}, + {"label":"Z", "x":2.25, "y":4.25}, + {"label":"X", "x":3.25, "y":4.25}, + {"label":"C", "x":4.25, "y":4.25}, + {"label":"V", "x":5.25, "y":4.25}, + {"label":"B", "x":6.25, "y":4.25}, + {"label":"N", "x":7.25, "y":4.25}, + {"label":"M", "x":8.25, "y":4.25}, + {"label":",<", "x":9.25, "y":4.25}, + {"label":".>", "x":10.25, "y":4.25}, + {"label":"/?", "x":11.25, "y":4.25}, + {"label":"Right Shift", "x":12.25, "y":4.25, "w":2.75}, + {"label":"Up", "x":16.25, "y":4.25}, + + {"label":"Left Ctrl", "x":0, "y":5.25, "w":1.25} + {"label":"Left Win", "x":1.25, "y":5.25, "w":1.25}, + {"label":"Left Alt", "x":2.5, "y":5.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, + {"label":"Right Alt", "x":10, "y":5.25, "w":1.25}, + {"label":"Right Win", "x":11.25, "y":5.25, "w":1.25}, + {"label":"Fn", "x":12.5, "y":5.25, "w":1.25}, + {"label":"Right Ctrl", "x":13.75, "y":5.25, "w":1.25}, + {"label":"Left", "x":15.25, "y":5.25}, + {"label":"Down", "x":16.25, "y":5.25}, + {"label":"Right", "x":17.25, "y":5.25} + ] + } + } +} diff --git a/keyboards/keychron/q3/rev_0120_lhg/keymaps/default/keymap.c b/keyboards/keychron/q3/rev_0120_lhg/keymaps/default/keymap.c new file mode 100644 index 000000000000..281f4d5f7d3f --- /dev/null +++ b/keyboards/keychron/q3/rev_0120_lhg/keymaps/default/keymap.c @@ -0,0 +1,161 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_LAUNCHPAD, + KC_LOPTN, + KC_ROPTN, + KC_LCMMD, + KC_RCMMD, + KC_SIRI, + KC_TASK_VIEW, + KC_FILE_EXPLORER, + KC_SCREEN_SHOT, + KC_CORTANA +}; + +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define KC_TASK KC_TASK_VIEW +#define KC_FLXP KC_FILE_EXPLORER +#define KC_SNAP KC_SCREEN_SHOT +#define KC_CRTA KC_CORTANA + +typedef struct PACKED { + uint8_t len; + uint8_t keycode[3]; +} key_combination_t; + +key_combination_t key_comb_list[4] = { + {2, {KC_LWIN, KC_TAB}}, + {2, {KC_LWIN, KC_E}}, + {3, {KC_LSFT, KC_LCMD, KC_4}}, + {2, {KC_LWIN, KC_C}} +}; + +static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_87( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_END, KC_PGDN, + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_ansi_87( + KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_ansi_87( + KC_ESC, 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_PSCR, KC_CRTA, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_END, KC_PGDN, + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_ansi_87( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG, + 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), +}; + +uint16_t prev; +bool siri; + +void matrix_scan_user(void) { + if (siri) { + if (timer_elapsed(prev) >= 500) { + siri = false; + unregister_code(KC_LCMD); + unregister_code(KC_SPACE); + } + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LOPTN: + case KC_ROPTN: + case KC_LCMMD: + case KC_RCMMD: + if (record->event.pressed) { + register_code(mac_keycode[keycode - KC_LOPTN]); + } else { + unregister_code(mac_keycode[keycode - KC_LOPTN]); + } + return false; // Skip all further processing of this key + case KC_SIRI: + if (record->event.pressed) { + register_code(KC_LCMD); + register_code(KC_SPACE); + prev = timer_read() | 1; + siri = true; + } else { + // Do something else when release + } + return false; // Skip all further processing of this key + case KC_TASK: + case KC_FLXP: + case KC_SNAP: + case KC_CRTA: + if (record->event.pressed) { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + register_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } else { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q3/rev_0120_lhg/keymaps/via/keymap.c b/keyboards/keychron/q3/rev_0120_lhg/keymaps/via/keymap.c new file mode 100644 index 000000000000..fa7af4d6116d --- /dev/null +++ b/keyboards/keychron/q3/rev_0120_lhg/keymaps/via/keymap.c @@ -0,0 +1,237 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + LEFT_HANDED_GAMING, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = USER00, + KC_LAUNCHPAD, + KC_LOPTN, + KC_ROPTN, + KC_LCMMD, + KC_RCMMD, + KC_SIRI, + KC_TASK_VIEW, + KC_FILE_EXPLORER, + KC_SCREEN_SHOT, + KC_CORTANA +}; + +#define KC_MCTL KC_MISSION_CONTROL +#define KC_LPAD KC_LAUNCHPAD +#define KC_TASK KC_TASK_VIEW +#define KC_FLXP KC_FILE_EXPLORER +#define KC_SNAP KC_SCREEN_SHOT +#define KC_CRTA KC_CORTANA + +typedef struct PACKED { + uint8_t len; + uint8_t keycode[3]; +} key_combination_t; + +key_combination_t key_comb_list[4] = { + {2, {KC_LWIN, KC_TAB}}, + {2, {KC_LWIN, KC_E}}, + {3, {KC_LSFT, KC_LCMD, KC_4}}, + {2, {KC_LWIN, KC_C}} +}; + +static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_87( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_END, KC_PGDN, + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_ansi_87( + KC_NO , 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_NO , KC_NO , RGB_TOG, + KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , + KC_NO , RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , + KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , + KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ), + + [WIN_BASE] = LAYOUT_ansi_87( + KC_ESC, 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_PSCR, KC_CRTA, RGB_MOD, + KC_GRV, 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_INS, KC_HOME, KC_PGUP, + 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_END, KC_PGDN, + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [LEFT_HANDED_GAMING] = LAYOUT_ansi_87( + KC_ESC, 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_PSCR, KC_CRTA, RGB_MOD, + KC_BSPC, KC_EQL, KC_MINS, KC_0, KC_9, KC_8, KC_7, KC_6, KC_5, KC_4, KC_3, KC_2, KC_1, KC_GRV, KC_INS, KC_HOME, KC_PGUP, + KC_RBRC, KC_LBRC, KC_UP, KC_O, KC_I, KC_U, KC_Y, KC_T, KC_R, KC_E, KC_W, KC_Q, KC_TAB, KC_TAB, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_K, KC_J, KC_H, KC_G, KC_F, KC_A, KC_S, KC_D, KC_ENT, + KC_RSFT, KC_SLSH, KC_DOT, KC_COMM, KC_M, KC_N, KC_B, KC_V, KC_C, KC_X, KC_Z, KC_LSFT, KC_UP, + KC_RCTL, KC_LCMD, KC_RALT, KC_SPC, KC_LALT, KC_RWIN, MO(WIN_FN), KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_ansi_87( + KC_NO , KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO , KC_NO , RGB_TOG, + KC_NO , TO(WIN_BASE) , TO(LEFT_HANDED_GAMING) , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , + RGB_TOG, RGB_MOD , RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , + KC_NO , RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , + KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , + KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ), + +}; + +#define WHITE {0,0,255} +#define ORANGE {23,255,255} +#define BLUE {170,255,255} +#define NO_COLOR {0,0,0} + +const uint8_t PROGMEM rgb_matrix_led_map[][DRIVER_LED_TOTAL][5] = { + { // MAC_BASE + NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , + NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, + NO_COLOR, NO_COLOR, NO_COLOR, WHITE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR + }, { // MAC_FN + NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , + NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, + NO_COLOR, NO_COLOR, NO_COLOR, WHITE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR + }, { // WIN_BASE + NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , + NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, + NO_COLOR, NO_COLOR, NO_COLOR, ORANGE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR + }, { // LEFT_HANDED_GAMING + NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, NO_COLOR , BLUE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, BLUE , BLUE , BLUE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, BLUE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, BLUE , BLUE , BLUE , NO_COLOR , + NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , BLUE , + NO_COLOR, NO_COLOR, NO_COLOR, BLUE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , BLUE , BLUE , BLUE + }, { // WIN_FN + NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, + NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , + NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, + NO_COLOR, NO_COLOR, NO_COLOR, ORANGE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR + } +}; + +void set_layer_color(int layer) { + + for (int i = 0; i < DRIVER_LED_TOTAL; i++) { + HSV hsv = { + .h = pgm_read_byte(&rgb_matrix_led_map[layer][i][0]), + .s = pgm_read_byte(&rgb_matrix_led_map[layer][i][1]), + .v = pgm_read_byte(&rgb_matrix_led_map[layer][i][2]), + }; + if (!hsv.h && !hsv.s && !hsv.v) { + //rgb_matrix_set_color( i, 0, 0, 0 ); + } else { + RGB rgb = hsv_to_rgb( hsv ); + float f = (float)rgb_matrix_config.hsv.v / UINT8_MAX; + rgb_matrix_set_color( i, f * rgb.r, f * rgb.g, f * rgb.b ); + } + } +} + +uint16_t prev; +bool siri; + +void matrix_scan_user(void) { + if (siri) { + if (timer_elapsed(prev) >= 500) { + siri = false; + unregister_code(KC_LCMD); + unregister_code(KC_SPACE); + } + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LAUNCHPAD: + if (record->event.pressed) { + host_consumer_send(0x2A0); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_LOPTN: + case KC_ROPTN: + case KC_LCMMD: + case KC_RCMMD: + if (record->event.pressed) { + register_code(mac_keycode[keycode - KC_LOPTN]); + } else { + unregister_code(mac_keycode[keycode - KC_LOPTN]); + } + return false; // Skip all further processing of this key + case KC_SIRI: + if (record->event.pressed) { + register_code(KC_LCMD); + register_code(KC_SPACE); + prev = timer_read() | 1; + siri = true; + } else { + // Do something else when release + } + return false; // Skip all further processing of this key + case KC_TASK: + case KC_FLXP: + case KC_SNAP: + case KC_CRTA: + if (record->event.pressed) { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + register_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } else { + for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { + unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} + +void rgb_matrix_indicators_user(void) { + set_layer_color(biton32(layer_state)); +} diff --git a/keyboards/keychron/q3/rev_0120_lhg/keymaps/via/rules.mk b/keyboards/keychron/q3/rev_0120_lhg/keymaps/via/rules.mk new file mode 100644 index 000000000000..1f4364003cbf --- /dev/null +++ b/keyboards/keychron/q3/rev_0120_lhg/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +RGB_MATRIX_ENABLE = yes diff --git a/keyboards/keychron/q3/rev_0120_lhg/readme.md b/keyboards/keychron/q3/rev_0120_lhg/readme.md new file mode 100644 index 000000000000..1e7ea53e233e --- /dev/null +++ b/keyboards/keychron/q3/rev_0120_lhg/readme.md @@ -0,0 +1 @@ +# The ANSI variant of the Keychron Q3 diff --git a/keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.c b/keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.c new file mode 100644 index 000000000000..3958f5466d8f --- /dev/null +++ b/keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.c @@ -0,0 +1,154 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include "quantum.h" + +#ifdef RGB_MATRIX_ENABLE + +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, I_1, G_1, H_1}, + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {0, I_5, G_5, H_5}, + {0, I_6, G_6, H_6}, + {0, I_7, G_7, H_7}, + {0, I_8, G_8, H_8}, + {0, I_9, G_9, H_9}, + {0, I_10, G_10, H_10}, + {0, I_11, G_11, H_11}, + {0, I_12, G_12, H_12}, + {0, I_13, G_13, H_13}, + {0, I_15, G_15, H_15}, + {0, I_16, G_16, H_16}, + {1, I_15, G_15, H_15}, + + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + {0, C_11, A_11, B_11}, + {0, C_12, A_12, B_12}, + {0, C_13, A_13, B_13}, + {0, C_14, A_14, B_14}, + {0, C_15, A_15, B_15}, + {0, C_16, A_16, B_16}, + {1, I_16, G_16, H_16}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_8, D_8, E_8}, + {0, F_9, D_9, E_9}, + {0, F_10, D_10, E_10}, + {0, F_11, D_11, E_11}, + {0, F_12, D_12, E_12}, + {0, F_13, D_13, E_13}, + {0, F_14, D_14, E_14}, + {0, F_15, D_15, E_15}, + {0, F_16, D_16, E_16}, + {1, I_13, G_13, H_13}, + + {1, I_1, G_1, H_1}, + {1, I_2, G_2, H_2}, + {1, I_3, G_3, H_3}, + {1, I_4, G_4, H_4}, + {1, I_5, G_5, H_5}, + {1, I_6, G_6, H_6}, + {1, I_7, G_7, H_7}, + {1, I_8, G_8, H_8}, + {1, I_9, G_9, H_9}, + {1, I_10, G_10, H_10}, + {1, I_11, G_11, H_11}, + {1, I_12, G_12, H_12}, + {1, I_14, G_14, H_14}, + + {1, C_1, A_1, B_1}, + {1, C_3, A_3, B_3}, + {1, C_4, A_4, B_4}, + {1, C_5, A_5, B_5}, + {1, C_6, A_6, B_6}, + {1, C_7, A_7, B_7}, + {1, C_8, A_8, B_8}, + {1, C_9, A_9, B_9}, + {1, C_10, A_10, B_10}, + {1, C_11, A_11, B_11}, + {1, C_12, A_12, B_12}, + {1, C_14, A_14, B_14}, + {1, C_16, A_16, B_16}, + + {1, F_1, D_1, E_1}, + {1, F_2, D_2, E_2}, + {1, F_3, D_3, E_3}, + {1, F_7, D_7, E_7}, + {1, F_11, D_11, E_11}, + {1, F_12, D_12, E_12}, + {1, F_13, D_13, E_13}, + {1, F_14, D_14, E_14}, + {1, F_15, D_15, E_15}, + {1, F_16, D_16, E_16}, + {1, C_15, A_15, B_15}, +}; + +#define __ NO_LED + +led_config_t g_led_config = { + { + // Key Matrix to LED Index + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14 }, + { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, + { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48 }, + { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 49, 62, 15, 32 }, + { 63, __, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, __, 74, 86, 75 }, + { 76, 77, 78, __, __, __, 79, __, __, __, 80, 81, 82, 83, 84, 85 }, + }, + { + // LED Index to Physical Position + {0,0}, {26,0}, {39,0}, {52,0}, {65,0}, {85,0}, {98,0}, {111,0}, {124,0}, {143,0}, {156,0}, {169,0}, {182,0}, {198,0}, {211,0}, {224,0}, + {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {176,15}, {198,15}, {211,15}, {224,15}, + {3,28}, {20,28}, {33,28}, {46,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {179,28}, {198,28}, {211,28}, {224,28}, + {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {174,40}, + {8,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {171,52}, {211,52}, + {2,64}, {18,64}, {34,64}, {83,64}, {131,64}, {148,64}, {164,64}, {180,64}, {198,64}, {211,64}, {224,64}, + }, + { + // RGB LED Index to Flag + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, + 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + } +}; + +#endif diff --git a/keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.h b/keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.h new file mode 100644 index 000000000000..24ac8936f991 --- /dev/null +++ b/keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.h @@ -0,0 +1,37 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +#include "quantum.h" + +#define XXX KC_NO + +#define LAYOUT_ansi_87( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0F, K3E, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3F, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K3C, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ + K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ + K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K4E \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, XXX, K0E, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ + { K40, XXX, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \ + { K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ +} diff --git a/keyboards/keychron/q3/rev_0120_lhg/rules.mk b/keyboards/keychron/q3/rev_0120_lhg/rules.mk new file mode 100644 index 000000000000..26d88a0545bb --- /dev/null +++ b/keyboards/keychron/q3/rev_0120_lhg/rules.mk @@ -0,0 +1,26 @@ +# MCU name +MCU = STM32L433 + +# Bootloader selection +BOOTLOADER = stm32-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Enable USB N-key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +ENCODER_ENABLE = no # Enable Encoder +DIP_SWITCH_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = CKLED2001 +EEPROM_DRIVER = transient + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE From 083b21ad10915d799f7e189d1aa3019252371084 Mon Sep 17 00:00:00 2001 From: Adam Karim Date: Sat, 9 Apr 2022 01:06:16 -0700 Subject: [PATCH 144/155] Add keycodes which more closely match Apple's new layout --- .../q1/rev_0100/keymaps/archite/keymap.c | 116 +++++++++++++++++ .../q2/rev_0111/keymaps/archite/keymap.c | 121 ++++++++++++++++++ 2 files changed, 237 insertions(+) create mode 100644 keyboards/keychron/q1/rev_0100/keymaps/archite/keymap.c create mode 100644 keyboards/keychron/q2/rev_0111/keymaps/archite/keymap.c diff --git a/keyboards/keychron/q1/rev_0100/keymaps/archite/keymap.c b/keyboards/keychron/q1/rev_0100/keymaps/archite/keymap.c new file mode 100644 index 000000000000..f38f544b1d20 --- /dev/null +++ b/keyboards/keychron/q1/rev_0100/keymaps/archite/keymap.c @@ -0,0 +1,116 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + MAC_FN, + WIN_BASE, + WIN_FN +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_SPOTLIGHT, + KC_DICTATION, + KC_DO_NOT_DISTURB, + KC_LOCK_SCREEN +}; + +#define KC_TASK LGUI(KC_TAB) +#define KC_FLXP LGUI(KC_E) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_SPLT KC_SPOTLIGHT +#define KC_SIRI KC_DICTATION +#define KC_FDND KC_DO_NOT_DISTURB +#define KC_LCKS KC_LOCK_SCREEN + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_82( + KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_SPLT, KC_SIRI, KC_FDND, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_LCKS, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [MAC_FN] = LAYOUT_ansi_82( + KC_TRNS, 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_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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [WIN_BASE] = LAYOUT_ansi_82( + KC_ESC, 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_DEL, KC_INS, + KC_GRV, 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_PGUP, + 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_PGDN, + 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_HOME, + 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_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_FN] = LAYOUT_ansi_82( + KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_SPOTLIGHT: + if (record->event.pressed) { + host_consumer_send(0x221); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_DICTATION: + if (record->event.pressed) { + host_consumer_send(0xCF); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_DO_NOT_DISTURB: + if (record->event.pressed) { + host_system_send(0x9B); + } else { + host_system_send(0); + } + return false; // Skip all further processing of this key + case KC_LOCK_SCREEN: + if (record->event.pressed) { + host_consumer_send(0x19E); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} diff --git a/keyboards/keychron/q2/rev_0111/keymaps/archite/keymap.c b/keyboards/keychron/q2/rev_0111/keymaps/archite/keymap.c new file mode 100644 index 000000000000..1744b1299fcc --- /dev/null +++ b/keyboards/keychron/q2/rev_0111/keymaps/archite/keymap.c @@ -0,0 +1,121 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + WIN_BASE, + _FN1, + _FN2, + _FN3 +}; + +enum custom_keycodes { + KC_MISSION_CONTROL = SAFE_RANGE, + KC_SPOTLIGHT, + KC_DICTATION, + KC_DO_NOT_DISTURB, + KC_LOCK_SCREEN +}; + +#define KC_WAVE S(KC_GRV) +#define KC_TASK LGUI(KC_TAB) +#define KC_FLXP LGUI(KC_E) +#define KC_MCTL KC_MISSION_CONTROL +#define KC_SPLT KC_SPOTLIGHT +#define KC_SIRI KC_DICTATION +#define KC_FDND KC_DO_NOT_DISTURB +#define KC_LCKS KC_LOCK_SCREEN + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [MAC_BASE] = LAYOUT_ansi_67( + 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_MUTE, + 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_LCKS, + 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_HOME, + 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_UP, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [WIN_BASE] = LAYOUT_ansi_67( + 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_MUTE, + 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_HOME, + 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_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), + + [_FN1] = LAYOUT_ansi_67( + KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_SPLT, KC_SIRI, KC_FDND, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN2] = LAYOUT_ansi_67( + KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), + + [_FN3] = LAYOUT_ansi_67( + KC_WAVE, 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_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_MISSION_CONTROL: + if (record->event.pressed) { + host_consumer_send(0x29F); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_SPOTLIGHT: + if (record->event.pressed) { + host_consumer_send(0x221); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_DICTATION: + if (record->event.pressed) { + host_consumer_send(0xCF); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + case KC_DO_NOT_DISTURB: + if (record->event.pressed) { + host_system_send(0x9B); + } else { + host_system_send(0); + } + return false; // Skip all further processing of this key + case KC_LOCK_SCREEN: + if (record->event.pressed) { + host_consumer_send(0x19E); + } else { + host_consumer_send(0); + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } +} From 493eeb7f6021ac9901304624abb64d8287470e7e Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 12 Apr 2022 10:01:44 +0800 Subject: [PATCH 145/155] Revert "added q3 rev 0120 left-hand gamer layer" --- keyboards/keychron/q3/q3.c | 1 - keyboards/keychron/q3/q3.h | 2 - keyboards/keychron/q3/rev_0120_lhg/config.h | 47 ---- keyboards/keychron/q3/rev_0120_lhg/info.json | 103 -------- .../q3/rev_0120_lhg/keymaps/default/keymap.c | 161 ------------ .../q3/rev_0120_lhg/keymaps/via/keymap.c | 237 ------------------ .../q3/rev_0120_lhg/keymaps/via/rules.mk | 2 - keyboards/keychron/q3/rev_0120_lhg/readme.md | 1 - .../keychron/q3/rev_0120_lhg/rev_0120_lhg.c | 154 ------------ .../keychron/q3/rev_0120_lhg/rev_0120_lhg.h | 37 --- keyboards/keychron/q3/rev_0120_lhg/rules.mk | 26 -- 11 files changed, 771 deletions(-) delete mode 100644 keyboards/keychron/q3/rev_0120_lhg/config.h delete mode 100644 keyboards/keychron/q3/rev_0120_lhg/info.json delete mode 100644 keyboards/keychron/q3/rev_0120_lhg/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q3/rev_0120_lhg/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q3/rev_0120_lhg/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q3/rev_0120_lhg/readme.md delete mode 100644 keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.c delete mode 100644 keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.h delete mode 100644 keyboards/keychron/q3/rev_0120_lhg/rules.mk diff --git a/keyboards/keychron/q3/q3.c b/keyboards/keychron/q3/q3.c index fcf3e906f06c..1f79ecede361 100644 --- a/keyboards/keychron/q3/q3.c +++ b/keyboards/keychron/q3/q3.c @@ -36,7 +36,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { return false; } if (index == 0) { - layer_state_set(1UL << (active ? 2 : 0)); default_layer_set(1UL << (active ? 2 : 0)); } return true; diff --git a/keyboards/keychron/q3/q3.h b/keyboards/keychron/q3/q3.h index f42890c5f0a2..905b6b8680a0 100644 --- a/keyboards/keychron/q3/q3.h +++ b/keyboards/keychron/q3/q3.h @@ -26,6 +26,4 @@ # include "rev_0122.h" #elif defined(KEYBOARD_keychron_q3_rev_0123) # include "rev_0123.h" -#elif defined(KEYBOARD_keychron_q3_rev_0120_lhg) -# include "rev_0120_lhg.h" #endif diff --git a/keyboards/keychron/q3/rev_0120_lhg/config.h b/keyboards/keychron/q3/rev_0120_lhg/config.h deleted file mode 100644 index 47bd5979ed71..000000000000 --- a/keyboards/keychron/q3/rev_0120_lhg/config.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#pragma once - -/* USB Device descriptor parameter */ -#define PRODUCT_ID 0x0120 -#define DEVICE_VER 0x0100 - -/* key matrix pins */ -#define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } -#define MATRIX_COL_PINS { C14, C15, A0, A1, A2, A3, A4, A5, A6, A7, B0, B1, A8, A9, A10, H3 } - -/* We uses a pin with a stronger pull resistor than the internal MCU pins */ -// #define MATRIX_UNSELECT_DRIVE_HIGH - -/* RGB Matrix Configuration */ -#define DRIVER_1_LED_TOTAL 48 -#define DRIVER_2_LED_TOTAL 39 -#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) - -/* Enable CapsLcok LED */ -#define CAPS_LOCK_LED_INDEX 50 - -// setup 5 layers -// 0: Mac -// 1: Mac function -// 2: Windows -// 3: Left Handed Gaming -// 4: Windows Function -#define DYNAMIC_KEYMAP_LAYER_COUNT 5 - -#define RGB_MATRIX_KEYPRESSES -#define RGB_MATRIX_KEYRELEASES diff --git a/keyboards/keychron/q3/rev_0120_lhg/info.json b/keyboards/keychron/q3/rev_0120_lhg/info.json deleted file mode 100644 index f540d9e637c1..000000000000 --- a/keyboards/keychron/q3/rev_0120_lhg/info.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "keyboard_name": "Keychron Q3", - "url": "https://github.com/Keychron", - "maintainer": "lalalademaxiya1", - "layouts": { - "LAYOUT_ansi_87": { - "layout": [ - {"label":"Esc", "x":0, "y":0}, - {"label":"F1", "x":2, "y":0}, - {"label":"F2", "x":3, "y":0}, - {"label":"F3", "x":4, "y":0}, - {"label":"F4", "x":5, "y":0}, - {"label":"F5", "x":6.5, "y":0}, - {"label":"F5", "x":7.5, "y":0}, - {"label":"F7", "x":8.5, "y":0}, - {"label":"F8", "x":9.5, "y":0}, - {"label":"F9", "x":11, "y":0}, - {"label":"F10", "x":12, "y":0}, - {"label":"F11", "x":13, "y":0}, - {"label":"F12", "x":14, "y":0}, - {"label":"Print", "x":15.25, "y":0}, - {"label":"Cortana", "x":16.25, "y":0}, - {"label":"Light", "x":17.25, "y":0}, - - {"label":"`~", "x":0, "y":1.25}, - {"label":"1!", "x":1, "y":1.25}, - {"label":"2@", "x":2, "y":1.25}, - {"label":"3#", "x":3, "y":1.25}, - {"label":"4$", "x":4, "y":1.25}, - {"label":"5%", "x":5, "y":1.25}, - {"label":"6^", "x":6, "y":1.25}, - {"label":"7&", "x":7, "y":1.25}, - {"label":"8*", "x":8, "y":1.25}, - {"label":"9(", "x":9, "y":1.25}, - {"label":"0)", "x":10, "y":1.25}, - {"label":"-_", "x":11, "y":1.25}, - {"label":"=+", "x":12, "y":1.25}, - {"label":"Backspace", "x":13, "y":1.25, "w":2}, - {"label":"Insert", "x":15.25, "y":1.25}, - {"label":"Home", "x":16.25, "y":1.25}, - {"label":"Page Up", "x":17.25, "y":1.25}, - - {"label":"Tab", "x":0, "y":2.25, "w":1.5}, - {"label":"Q", "x":1.5, "y":2.25}, - {"label":"W", "x":2.5, "y":2.25}, - {"label":"E", "x":3.5, "y":2.25}, - {"label":"R", "x":4.5, "y":2.25}, - {"label":"T", "x":5.5, "y":2.25}, - {"label":"Y", "x":6.5, "y":2.25}, - {"label":"U", "x":7.5, "y":2.25}, - {"label":"I", "x":8.5, "y":2.25}, - {"label":"O", "x":9.5, "y":2.25}, - {"label":"P", "x":10.5, "y":2.25}, - {"label":"[{", "x":11.5, "y":2.25}, - {"label":"]}", "x":12.5, "y":2.25}, - {"label":"\\|", "x":13.5, "y":2.25, "w":1.5}, - {"label":"Delete", "x":15.25, "y":2.25}, - {"label":"End", "x":16.25, "y":2.25}, - {"label":"Page Down", "x":17.25, "y":2.25}, - - {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, - {"label":"A", "x":1.75, "y":3.25}, - {"label":"S", "x":2.75, "y":3.25}, - {"label":"D", "x":3.75, "y":3.25}, - {"label":"F", "x":4.75, "y":3.25}, - {"label":"G", "x":5.75, "y":3.25}, - {"label":"H", "x":6.75, "y":3.25}, - {"label":"J", "x":7.75, "y":3.25}, - {"label":"K", "x":8.75, "y":3.25}, - {"label":"L", "x":9.75, "y":3.25}, - {"label":";:", "x":10.75, "y":3.25}, - {"label":"'\"", "x":11.75, "y":3.25}, - {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, - - {"label":"Left Shift", "x":0, "y":4.25, "w":2.25}, - {"label":"Z", "x":2.25, "y":4.25}, - {"label":"X", "x":3.25, "y":4.25}, - {"label":"C", "x":4.25, "y":4.25}, - {"label":"V", "x":5.25, "y":4.25}, - {"label":"B", "x":6.25, "y":4.25}, - {"label":"N", "x":7.25, "y":4.25}, - {"label":"M", "x":8.25, "y":4.25}, - {"label":",<", "x":9.25, "y":4.25}, - {"label":".>", "x":10.25, "y":4.25}, - {"label":"/?", "x":11.25, "y":4.25}, - {"label":"Right Shift", "x":12.25, "y":4.25, "w":2.75}, - {"label":"Up", "x":16.25, "y":4.25}, - - {"label":"Left Ctrl", "x":0, "y":5.25, "w":1.25} - {"label":"Left Win", "x":1.25, "y":5.25, "w":1.25}, - {"label":"Left Alt", "x":2.5, "y":5.25, "w":1.25}, - {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, - {"label":"Right Alt", "x":10, "y":5.25, "w":1.25}, - {"label":"Right Win", "x":11.25, "y":5.25, "w":1.25}, - {"label":"Fn", "x":12.5, "y":5.25, "w":1.25}, - {"label":"Right Ctrl", "x":13.75, "y":5.25, "w":1.25}, - {"label":"Left", "x":15.25, "y":5.25}, - {"label":"Down", "x":16.25, "y":5.25}, - {"label":"Right", "x":17.25, "y":5.25} - ] - } - } -} diff --git a/keyboards/keychron/q3/rev_0120_lhg/keymaps/default/keymap.c b/keyboards/keychron/q3/rev_0120_lhg/keymaps/default/keymap.c deleted file mode 100644 index 281f4d5f7d3f..000000000000 --- a/keyboards/keychron/q3/rev_0120_lhg/keymaps/default/keymap.c +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include QMK_KEYBOARD_H - -enum layers{ - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN -}; - -enum custom_keycodes { - KC_MISSION_CONTROL = SAFE_RANGE, - KC_LAUNCHPAD, - KC_LOPTN, - KC_ROPTN, - KC_LCMMD, - KC_RCMMD, - KC_SIRI, - KC_TASK_VIEW, - KC_FILE_EXPLORER, - KC_SCREEN_SHOT, - KC_CORTANA -}; - -#define KC_MCTL KC_MISSION_CONTROL -#define KC_LPAD KC_LAUNCHPAD -#define KC_TASK KC_TASK_VIEW -#define KC_FLXP KC_FILE_EXPLORER -#define KC_SNAP KC_SCREEN_SHOT -#define KC_CRTA KC_CORTANA - -typedef struct PACKED { - uint8_t len; - uint8_t keycode[3]; -} key_combination_t; - -key_combination_t key_comb_list[4] = { - {2, {KC_LWIN, KC_TAB}}, - {2, {KC_LWIN, KC_E}}, - {3, {KC_LSFT, KC_LCMD, KC_4}}, - {2, {KC_LWIN, KC_C}} -}; - -static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_ansi_87( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_END, KC_PGDN, - 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [MAC_FN] = LAYOUT_ansi_87( - KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), - - [WIN_BASE] = LAYOUT_ansi_87( - KC_ESC, 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_PSCR, KC_CRTA, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_END, KC_PGDN, - 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [WIN_FN] = LAYOUT_ansi_87( - KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), -}; - -uint16_t prev; -bool siri; - -void matrix_scan_user(void) { - if (siri) { - if (timer_elapsed(prev) >= 500) { - siri = false; - unregister_code(KC_LCMD); - unregister_code(KC_SPACE); - } - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_MISSION_CONTROL: - if (record->event.pressed) { - host_consumer_send(0x29F); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LAUNCHPAD: - if (record->event.pressed) { - host_consumer_send(0x2A0); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LOPTN: - case KC_ROPTN: - case KC_LCMMD: - case KC_RCMMD: - if (record->event.pressed) { - register_code(mac_keycode[keycode - KC_LOPTN]); - } else { - unregister_code(mac_keycode[keycode - KC_LOPTN]); - } - return false; // Skip all further processing of this key - case KC_SIRI: - if (record->event.pressed) { - register_code(KC_LCMD); - register_code(KC_SPACE); - prev = timer_read() | 1; - siri = true; - } else { - // Do something else when release - } - return false; // Skip all further processing of this key - case KC_TASK: - case KC_FLXP: - case KC_SNAP: - case KC_CRTA: - if (record->event.pressed) { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - register_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } else { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } - return false; // Skip all further processing of this key - default: - return true; // Process all other keycodes normally - } -} diff --git a/keyboards/keychron/q3/rev_0120_lhg/keymaps/via/keymap.c b/keyboards/keychron/q3/rev_0120_lhg/keymaps/via/keymap.c deleted file mode 100644 index fa7af4d6116d..000000000000 --- a/keyboards/keychron/q3/rev_0120_lhg/keymaps/via/keymap.c +++ /dev/null @@ -1,237 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include QMK_KEYBOARD_H - -enum layers{ - MAC_BASE, - MAC_FN, - WIN_BASE, - LEFT_HANDED_GAMING, - WIN_FN -}; - -enum custom_keycodes { - KC_MISSION_CONTROL = USER00, - KC_LAUNCHPAD, - KC_LOPTN, - KC_ROPTN, - KC_LCMMD, - KC_RCMMD, - KC_SIRI, - KC_TASK_VIEW, - KC_FILE_EXPLORER, - KC_SCREEN_SHOT, - KC_CORTANA -}; - -#define KC_MCTL KC_MISSION_CONTROL -#define KC_LPAD KC_LAUNCHPAD -#define KC_TASK KC_TASK_VIEW -#define KC_FLXP KC_FILE_EXPLORER -#define KC_SNAP KC_SCREEN_SHOT -#define KC_CRTA KC_CORTANA - -typedef struct PACKED { - uint8_t len; - uint8_t keycode[3]; -} key_combination_t; - -key_combination_t key_comb_list[4] = { - {2, {KC_LWIN, KC_TAB}}, - {2, {KC_LWIN, KC_E}}, - {3, {KC_LSFT, KC_LCMD, KC_4}}, - {2, {KC_LWIN, KC_C}} -}; - -static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_ansi_87( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_END, KC_PGDN, - 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [MAC_FN] = LAYOUT_ansi_87( - KC_NO , 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_NO , KC_NO , RGB_TOG, - KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , - KC_NO , RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , - KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , - KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ), - - [WIN_BASE] = LAYOUT_ansi_87( - KC_ESC, 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_PSCR, KC_CRTA, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_END, KC_PGDN, - 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [LEFT_HANDED_GAMING] = LAYOUT_ansi_87( - KC_ESC, 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_PSCR, KC_CRTA, RGB_MOD, - KC_BSPC, KC_EQL, KC_MINS, KC_0, KC_9, KC_8, KC_7, KC_6, KC_5, KC_4, KC_3, KC_2, KC_1, KC_GRV, KC_INS, KC_HOME, KC_PGUP, - KC_RBRC, KC_LBRC, KC_UP, KC_O, KC_I, KC_U, KC_Y, KC_T, KC_R, KC_E, KC_W, KC_Q, KC_TAB, KC_TAB, KC_DEL, KC_END, KC_PGDN, - KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_K, KC_J, KC_H, KC_G, KC_F, KC_A, KC_S, KC_D, KC_ENT, - KC_RSFT, KC_SLSH, KC_DOT, KC_COMM, KC_M, KC_N, KC_B, KC_V, KC_C, KC_X, KC_Z, KC_LSFT, KC_UP, - KC_RCTL, KC_LCMD, KC_RALT, KC_SPC, KC_LALT, KC_RWIN, MO(WIN_FN), KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [WIN_FN] = LAYOUT_ansi_87( - KC_NO , KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO , KC_NO , RGB_TOG, - KC_NO , TO(WIN_BASE) , TO(LEFT_HANDED_GAMING) , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , - RGB_TOG, RGB_MOD , RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , - KC_NO , RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , - KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , - KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ), - -}; - -#define WHITE {0,0,255} -#define ORANGE {23,255,255} -#define BLUE {170,255,255} -#define NO_COLOR {0,0,0} - -const uint8_t PROGMEM rgb_matrix_led_map[][DRIVER_LED_TOTAL][5] = { - { // MAC_BASE - NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , - NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, - NO_COLOR, NO_COLOR, NO_COLOR, WHITE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR - }, { // MAC_FN - NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , - NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, - NO_COLOR, NO_COLOR, NO_COLOR, WHITE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR - }, { // WIN_BASE - NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , - NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, - NO_COLOR, NO_COLOR, NO_COLOR, ORANGE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR - }, { // LEFT_HANDED_GAMING - NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, NO_COLOR , BLUE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, BLUE , BLUE , BLUE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, BLUE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, BLUE , BLUE , BLUE , NO_COLOR , - NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , BLUE , - NO_COLOR, NO_COLOR, NO_COLOR, BLUE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , BLUE , BLUE , BLUE - }, { // WIN_FN - NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, - NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , - NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, - NO_COLOR, NO_COLOR, NO_COLOR, ORANGE , NO_COLOR, NO_COLOR, NO_COLOR, NO_COLOR , NO_COLOR, NO_COLOR, NO_COLOR - } -}; - -void set_layer_color(int layer) { - - for (int i = 0; i < DRIVER_LED_TOTAL; i++) { - HSV hsv = { - .h = pgm_read_byte(&rgb_matrix_led_map[layer][i][0]), - .s = pgm_read_byte(&rgb_matrix_led_map[layer][i][1]), - .v = pgm_read_byte(&rgb_matrix_led_map[layer][i][2]), - }; - if (!hsv.h && !hsv.s && !hsv.v) { - //rgb_matrix_set_color( i, 0, 0, 0 ); - } else { - RGB rgb = hsv_to_rgb( hsv ); - float f = (float)rgb_matrix_config.hsv.v / UINT8_MAX; - rgb_matrix_set_color( i, f * rgb.r, f * rgb.g, f * rgb.b ); - } - } -} - -uint16_t prev; -bool siri; - -void matrix_scan_user(void) { - if (siri) { - if (timer_elapsed(prev) >= 500) { - siri = false; - unregister_code(KC_LCMD); - unregister_code(KC_SPACE); - } - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_MISSION_CONTROL: - if (record->event.pressed) { - host_consumer_send(0x29F); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LAUNCHPAD: - if (record->event.pressed) { - host_consumer_send(0x2A0); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LOPTN: - case KC_ROPTN: - case KC_LCMMD: - case KC_RCMMD: - if (record->event.pressed) { - register_code(mac_keycode[keycode - KC_LOPTN]); - } else { - unregister_code(mac_keycode[keycode - KC_LOPTN]); - } - return false; // Skip all further processing of this key - case KC_SIRI: - if (record->event.pressed) { - register_code(KC_LCMD); - register_code(KC_SPACE); - prev = timer_read() | 1; - siri = true; - } else { - // Do something else when release - } - return false; // Skip all further processing of this key - case KC_TASK: - case KC_FLXP: - case KC_SNAP: - case KC_CRTA: - if (record->event.pressed) { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - register_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } else { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } - return false; // Skip all further processing of this key - default: - return true; // Process all other keycodes normally - } -} - -void rgb_matrix_indicators_user(void) { - set_layer_color(biton32(layer_state)); -} diff --git a/keyboards/keychron/q3/rev_0120_lhg/keymaps/via/rules.mk b/keyboards/keychron/q3/rev_0120_lhg/keymaps/via/rules.mk deleted file mode 100644 index 1f4364003cbf..000000000000 --- a/keyboards/keychron/q3/rev_0120_lhg/keymaps/via/rules.mk +++ /dev/null @@ -1,2 +0,0 @@ -VIA_ENABLE = yes -RGB_MATRIX_ENABLE = yes diff --git a/keyboards/keychron/q3/rev_0120_lhg/readme.md b/keyboards/keychron/q3/rev_0120_lhg/readme.md deleted file mode 100644 index 1e7ea53e233e..000000000000 --- a/keyboards/keychron/q3/rev_0120_lhg/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The ANSI variant of the Keychron Q3 diff --git a/keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.c b/keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.c deleted file mode 100644 index 3958f5466d8f..000000000000 --- a/keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.c +++ /dev/null @@ -1,154 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include "quantum.h" - -#ifdef RGB_MATRIX_ENABLE - -const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { -/* Refer to IS31 manual for these locations - * driver - * | R location - * | | G location - * | | | B location - * | | | | */ - {0, I_1, G_1, H_1}, - {0, I_2, G_2, H_2}, - {0, I_3, G_3, H_3}, - {0, I_4, G_4, H_4}, - {0, I_5, G_5, H_5}, - {0, I_6, G_6, H_6}, - {0, I_7, G_7, H_7}, - {0, I_8, G_8, H_8}, - {0, I_9, G_9, H_9}, - {0, I_10, G_10, H_10}, - {0, I_11, G_11, H_11}, - {0, I_12, G_12, H_12}, - {0, I_13, G_13, H_13}, - {0, I_15, G_15, H_15}, - {0, I_16, G_16, H_16}, - {1, I_15, G_15, H_15}, - - {0, C_1, A_1, B_1}, - {0, C_2, A_2, B_2}, - {0, C_3, A_3, B_3}, - {0, C_4, A_4, B_4}, - {0, C_5, A_5, B_5}, - {0, C_6, A_6, B_6}, - {0, C_7, A_7, B_7}, - {0, C_8, A_8, B_8}, - {0, C_9, A_9, B_9}, - {0, C_10, A_10, B_10}, - {0, C_11, A_11, B_11}, - {0, C_12, A_12, B_12}, - {0, C_13, A_13, B_13}, - {0, C_14, A_14, B_14}, - {0, C_15, A_15, B_15}, - {0, C_16, A_16, B_16}, - {1, I_16, G_16, H_16}, - - {0, F_1, D_1, E_1}, - {0, F_2, D_2, E_2}, - {0, F_3, D_3, E_3}, - {0, F_4, D_4, E_4}, - {0, F_5, D_5, E_5}, - {0, F_6, D_6, E_6}, - {0, F_7, D_7, E_7}, - {0, F_8, D_8, E_8}, - {0, F_9, D_9, E_9}, - {0, F_10, D_10, E_10}, - {0, F_11, D_11, E_11}, - {0, F_12, D_12, E_12}, - {0, F_13, D_13, E_13}, - {0, F_14, D_14, E_14}, - {0, F_15, D_15, E_15}, - {0, F_16, D_16, E_16}, - {1, I_13, G_13, H_13}, - - {1, I_1, G_1, H_1}, - {1, I_2, G_2, H_2}, - {1, I_3, G_3, H_3}, - {1, I_4, G_4, H_4}, - {1, I_5, G_5, H_5}, - {1, I_6, G_6, H_6}, - {1, I_7, G_7, H_7}, - {1, I_8, G_8, H_8}, - {1, I_9, G_9, H_9}, - {1, I_10, G_10, H_10}, - {1, I_11, G_11, H_11}, - {1, I_12, G_12, H_12}, - {1, I_14, G_14, H_14}, - - {1, C_1, A_1, B_1}, - {1, C_3, A_3, B_3}, - {1, C_4, A_4, B_4}, - {1, C_5, A_5, B_5}, - {1, C_6, A_6, B_6}, - {1, C_7, A_7, B_7}, - {1, C_8, A_8, B_8}, - {1, C_9, A_9, B_9}, - {1, C_10, A_10, B_10}, - {1, C_11, A_11, B_11}, - {1, C_12, A_12, B_12}, - {1, C_14, A_14, B_14}, - {1, C_16, A_16, B_16}, - - {1, F_1, D_1, E_1}, - {1, F_2, D_2, E_2}, - {1, F_3, D_3, E_3}, - {1, F_7, D_7, E_7}, - {1, F_11, D_11, E_11}, - {1, F_12, D_12, E_12}, - {1, F_13, D_13, E_13}, - {1, F_14, D_14, E_14}, - {1, F_15, D_15, E_15}, - {1, F_16, D_16, E_16}, - {1, C_15, A_15, B_15}, -}; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, - { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48 }, - { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 49, 62, 15, 32 }, - { 63, __, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, __, 74, 86, 75 }, - { 76, 77, 78, __, __, __, 79, __, __, __, 80, 81, 82, 83, 84, 85 }, - }, - { - // LED Index to Physical Position - {0,0}, {26,0}, {39,0}, {52,0}, {65,0}, {85,0}, {98,0}, {111,0}, {124,0}, {143,0}, {156,0}, {169,0}, {182,0}, {198,0}, {211,0}, {224,0}, - {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {176,15}, {198,15}, {211,15}, {224,15}, - {3,28}, {20,28}, {33,28}, {46,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {179,28}, {198,28}, {211,28}, {224,28}, - {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {174,40}, - {8,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {171,52}, {211,52}, - {2,64}, {18,64}, {34,64}, {83,64}, {131,64}, {148,64}, {164,64}, {180,64}, {198,64}, {211,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - } -}; - -#endif diff --git a/keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.h b/keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.h deleted file mode 100644 index 24ac8936f991..000000000000 --- a/keyboards/keychron/q3/rev_0120_lhg/rev_0120_lhg.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#pragma once - -#include "quantum.h" - -#define XXX KC_NO - -#define LAYOUT_ansi_87( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0F, K3E, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3F, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K3C, \ - K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ - K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ - K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K4E \ -) { \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, XXX, K0E, K0F }, \ - { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ - { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ - { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ - { K40, XXX, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \ - { K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ -} diff --git a/keyboards/keychron/q3/rev_0120_lhg/rules.mk b/keyboards/keychron/q3/rev_0120_lhg/rules.mk deleted file mode 100644 index 26d88a0545bb..000000000000 --- a/keyboards/keychron/q3/rev_0120_lhg/rules.mk +++ /dev/null @@ -1,26 +0,0 @@ -# MCU name -MCU = STM32L433 - -# Bootloader selection -BOOTLOADER = stm32-dfu - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -CONSOLE_ENABLE = no # Console for debug -COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = yes # Enable USB N-key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output -ENCODER_ENABLE = no # Enable Encoder -DIP_SWITCH_ENABLE = yes -RGB_MATRIX_ENABLE = yes -RGB_MATRIX_DRIVER = CKLED2001 -EEPROM_DRIVER = transient - -# Enter lower-power sleep mode when on the ChibiOS idle thread -OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE From 5c81c65b381000e19eb04a4b469338d69802bd9f Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 12 Apr 2022 10:06:35 +0800 Subject: [PATCH 146/155] Revert "Add keycodes which more closely match Apple's new layout" --- .../q1/rev_0100/keymaps/archite/keymap.c | 116 ----------------- .../q2/rev_0111/keymaps/archite/keymap.c | 121 ------------------ 2 files changed, 237 deletions(-) delete mode 100644 keyboards/keychron/q1/rev_0100/keymaps/archite/keymap.c delete mode 100644 keyboards/keychron/q2/rev_0111/keymaps/archite/keymap.c diff --git a/keyboards/keychron/q1/rev_0100/keymaps/archite/keymap.c b/keyboards/keychron/q1/rev_0100/keymaps/archite/keymap.c deleted file mode 100644 index f38f544b1d20..000000000000 --- a/keyboards/keychron/q1/rev_0100/keymaps/archite/keymap.c +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include QMK_KEYBOARD_H - -enum layers{ - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN -}; - -enum custom_keycodes { - KC_MISSION_CONTROL = SAFE_RANGE, - KC_SPOTLIGHT, - KC_DICTATION, - KC_DO_NOT_DISTURB, - KC_LOCK_SCREEN -}; - -#define KC_TASK LGUI(KC_TAB) -#define KC_FLXP LGUI(KC_E) -#define KC_MCTL KC_MISSION_CONTROL -#define KC_SPLT KC_SPOTLIGHT -#define KC_SIRI KC_DICTATION -#define KC_FDND KC_DO_NOT_DISTURB -#define KC_LCKS KC_LOCK_SCREEN - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_ansi_82( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_SPLT, KC_SIRI, KC_FDND, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_LCKS, - KC_GRV, 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_PGUP, - 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_PGDN, - 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_HOME, - 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_UP, - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [MAC_FN] = LAYOUT_ansi_82( - KC_TRNS, 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_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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), - - [WIN_BASE] = LAYOUT_ansi_82( - KC_ESC, 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_DEL, KC_INS, - KC_GRV, 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_PGUP, - 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_PGDN, - 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_HOME, - 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_UP, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [WIN_FN] = LAYOUT_ansi_82( - KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_MISSION_CONTROL: - if (record->event.pressed) { - host_consumer_send(0x29F); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_SPOTLIGHT: - if (record->event.pressed) { - host_consumer_send(0x221); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_DICTATION: - if (record->event.pressed) { - host_consumer_send(0xCF); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_DO_NOT_DISTURB: - if (record->event.pressed) { - host_system_send(0x9B); - } else { - host_system_send(0); - } - return false; // Skip all further processing of this key - case KC_LOCK_SCREEN: - if (record->event.pressed) { - host_consumer_send(0x19E); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - default: - return true; // Process all other keycodes normally - } -} diff --git a/keyboards/keychron/q2/rev_0111/keymaps/archite/keymap.c b/keyboards/keychron/q2/rev_0111/keymaps/archite/keymap.c deleted file mode 100644 index 1744b1299fcc..000000000000 --- a/keyboards/keychron/q2/rev_0111/keymaps/archite/keymap.c +++ /dev/null @@ -1,121 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include QMK_KEYBOARD_H - -enum layers{ - MAC_BASE, - WIN_BASE, - _FN1, - _FN2, - _FN3 -}; - -enum custom_keycodes { - KC_MISSION_CONTROL = SAFE_RANGE, - KC_SPOTLIGHT, - KC_DICTATION, - KC_DO_NOT_DISTURB, - KC_LOCK_SCREEN -}; - -#define KC_WAVE S(KC_GRV) -#define KC_TASK LGUI(KC_TAB) -#define KC_FLXP LGUI(KC_E) -#define KC_MCTL KC_MISSION_CONTROL -#define KC_SPLT KC_SPOTLIGHT -#define KC_SIRI KC_DICTATION -#define KC_FDND KC_DO_NOT_DISTURB -#define KC_LCKS KC_LOCK_SCREEN - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_ansi_67( - 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_MUTE, - 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_LCKS, - 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_HOME, - 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_UP, - KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), - - [WIN_BASE] = LAYOUT_ansi_67( - 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_MUTE, - 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_HOME, - 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_UP, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT), - - [_FN1] = LAYOUT_ansi_67( - KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_SPLT, KC_SIRI, KC_FDND, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), - - [_FN2] = LAYOUT_ansi_67( - KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), - - [_FN3] = LAYOUT_ansi_67( - KC_WAVE, 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_TRNS, KC_TRNS, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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) -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_MISSION_CONTROL: - if (record->event.pressed) { - host_consumer_send(0x29F); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_SPOTLIGHT: - if (record->event.pressed) { - host_consumer_send(0x221); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_DICTATION: - if (record->event.pressed) { - host_consumer_send(0xCF); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_DO_NOT_DISTURB: - if (record->event.pressed) { - host_system_send(0x9B); - } else { - host_system_send(0); - } - return false; // Skip all further processing of this key - case KC_LOCK_SCREEN: - if (record->event.pressed) { - host_consumer_send(0x19E); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - default: - return true; // Process all other keycodes normally - } -} From 279e1864794f1e31918217098860acaa1b571e1d Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Tue, 12 Apr 2022 10:18:36 +0800 Subject: [PATCH 147/155] Revert "Add new keyboard q3 for keychron" --- keyboards/keychron/q3/chconf.h | 25 --- keyboards/keychron/q3/config.h | 113 ---------- keyboards/keychron/q3/halconf.h | 22 -- keyboards/keychron/q3/matrix.c | 172 --------------- keyboards/keychron/q3/mcuconf.h | 22 -- keyboards/keychron/q3/q3.c | 74 ------- keyboards/keychron/q3/q3.h | 29 --- keyboards/keychron/q3/readme.md | 20 -- keyboards/keychron/q3/rev_0120/config.h | 37 ---- keyboards/keychron/q3/rev_0120/info.json | 103 --------- .../q3/rev_0120/keymaps/default/keymap.c | 161 -------------- .../keychron/q3/rev_0120/keymaps/via/keymap.c | 161 -------------- .../keychron/q3/rev_0120/keymaps/via/rules.mk | 1 - keyboards/keychron/q3/rev_0120/readme.md | 1 - keyboards/keychron/q3/rev_0120/rev_0120.c | 154 ------------- keyboards/keychron/q3/rev_0120/rev_0120.h | 37 ---- keyboards/keychron/q3/rev_0120/rules.mk | 26 --- keyboards/keychron/q3/rev_0121/config.h | 39 ---- keyboards/keychron/q3/rev_0121/info.json | 203 ----------------- .../q3/rev_0121/keymaps/default/keymap.c | 161 -------------- .../keychron/q3/rev_0121/keymaps/via/keymap.c | 202 ----------------- .../keychron/q3/rev_0121/keymaps/via/rules.mk | 1 - keyboards/keychron/q3/rev_0121/readme.md | 5 - keyboards/keychron/q3/rev_0121/rev_0121.c | 170 --------------- keyboards/keychron/q3/rev_0121/rev_0121.h | 52 ----- keyboards/keychron/q3/rev_0121/rules.mk | 31 --- keyboards/keychron/q3/rev_0122/config.h | 33 --- keyboards/keychron/q3/rev_0122/info.json | 104 --------- .../q3/rev_0122/keymaps/default/keymap.c | 161 -------------- .../keychron/q3/rev_0122/keymaps/via/keymap.c | 161 -------------- .../keychron/q3/rev_0122/keymaps/via/rules.mk | 1 - keyboards/keychron/q3/rev_0122/readme.md | 1 - keyboards/keychron/q3/rev_0122/rev_0122.c | 155 ------------- keyboards/keychron/q3/rev_0122/rev_0122.h | 37 ---- keyboards/keychron/q3/rev_0122/rules.mk | 26 --- keyboards/keychron/q3/rev_0123/config.h | 39 ---- keyboards/keychron/q3/rev_0123/info.json | 205 ------------------ .../q3/rev_0123/keymaps/default/keymap.c | 161 -------------- .../keychron/q3/rev_0123/keymaps/via/keymap.c | 202 ----------------- .../keychron/q3/rev_0123/keymaps/via/rules.mk | 1 - keyboards/keychron/q3/rev_0123/readme.md | 5 - keyboards/keychron/q3/rev_0123/rev_0123.c | 171 --------------- keyboards/keychron/q3/rev_0123/rev_0123.h | 52 ----- keyboards/keychron/q3/rev_0123/rules.mk | 31 --- 44 files changed, 3568 deletions(-) delete mode 100644 keyboards/keychron/q3/chconf.h delete mode 100644 keyboards/keychron/q3/config.h delete mode 100644 keyboards/keychron/q3/halconf.h delete mode 100644 keyboards/keychron/q3/matrix.c delete mode 100644 keyboards/keychron/q3/mcuconf.h delete mode 100644 keyboards/keychron/q3/q3.c delete mode 100644 keyboards/keychron/q3/q3.h delete mode 100644 keyboards/keychron/q3/readme.md delete mode 100644 keyboards/keychron/q3/rev_0120/config.h delete mode 100644 keyboards/keychron/q3/rev_0120/info.json delete mode 100644 keyboards/keychron/q3/rev_0120/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q3/rev_0120/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q3/rev_0120/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q3/rev_0120/readme.md delete mode 100644 keyboards/keychron/q3/rev_0120/rev_0120.c delete mode 100644 keyboards/keychron/q3/rev_0120/rev_0120.h delete mode 100644 keyboards/keychron/q3/rev_0120/rules.mk delete mode 100644 keyboards/keychron/q3/rev_0121/config.h delete mode 100644 keyboards/keychron/q3/rev_0121/info.json delete mode 100644 keyboards/keychron/q3/rev_0121/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q3/rev_0121/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q3/rev_0121/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q3/rev_0121/readme.md delete mode 100644 keyboards/keychron/q3/rev_0121/rev_0121.c delete mode 100644 keyboards/keychron/q3/rev_0121/rev_0121.h delete mode 100644 keyboards/keychron/q3/rev_0121/rules.mk delete mode 100644 keyboards/keychron/q3/rev_0122/config.h delete mode 100644 keyboards/keychron/q3/rev_0122/info.json delete mode 100644 keyboards/keychron/q3/rev_0122/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q3/rev_0122/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q3/rev_0122/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q3/rev_0122/readme.md delete mode 100644 keyboards/keychron/q3/rev_0122/rev_0122.c delete mode 100644 keyboards/keychron/q3/rev_0122/rev_0122.h delete mode 100644 keyboards/keychron/q3/rev_0122/rules.mk delete mode 100644 keyboards/keychron/q3/rev_0123/config.h delete mode 100644 keyboards/keychron/q3/rev_0123/info.json delete mode 100644 keyboards/keychron/q3/rev_0123/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q3/rev_0123/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q3/rev_0123/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q3/rev_0123/readme.md delete mode 100644 keyboards/keychron/q3/rev_0123/rev_0123.c delete mode 100644 keyboards/keychron/q3/rev_0123/rev_0123.h delete mode 100644 keyboards/keychron/q3/rev_0123/rules.mk diff --git a/keyboards/keychron/q3/chconf.h b/keyboards/keychron/q3/chconf.h deleted file mode 100644 index cbbae31079fb..000000000000 --- a/keyboards/keychron/q3/chconf.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright 2020 QMK - * - * 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 . - */ - -#pragma once - -#define CH_CFG_ST_FREQUENCY 10000 - -#define CH_CFG_OPTIMIZE_SPEED FALSE - -#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE - -#include_next diff --git a/keyboards/keychron/q3/config.h b/keyboards/keychron/q3/config.h deleted file mode 100644 index 0b8a90f74e25..000000000000 --- a/keyboards/keychron/q3/config.h +++ /dev/null @@ -1,113 +0,0 @@ -/* Copyright 2021 @ Keychron(https://www.keychron.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 . - */ - -#pragma once - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0x3434 -#define MANUFACTURER Keychron -#define PRODUCT Keychron Q3 - -/* key matrix size */ -#define MATRIX_ROWS 6 -#define MATRIX_COLS 16 - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION ROW2COL - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 - -/* RGB Matrix Driver Configuration */ -#define DRIVER_COUNT 2 -#define DRIVER_ADDR_1 0b1110111 -#define DRIVER_ADDR_2 0b1110100 - -/* Scan phase of led driver set as MSKPHASE_9CHANNEL(defined as 0x03 in CKLED2001.h) */ -#define PHASE_CHANNEL MSKPHASE_9CHANNEL - -/* DIP switch */ -#define DIP_SWITCH_MATRIX_GRID { {5, 4} } - -/* Disable DIP switch in matrix data */ -#define MATRIX_MASKED - -/* NKRO */ -#define FORCE_NKRO - -/* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED - -/* We have 2KB EEPROM size on STM32L432 */ -// #define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047 - -/* Total size of the EEPROM storage in bytes */ -#define TRANSIENT_EEPROM_SIZE 4096 - -// RGB Matrix Animation modes. Explicitly enabled -// For full list of effects, see: -// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects -// #define ENABLE_RGB_MATRIX_ALPHAS_MODS -// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN -// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT -#define ENABLE_RGB_MATRIX_BREATHING -// #define ENABLE_RGB_MATRIX_BAND_SAT -// #define ENABLE_RGB_MATRIX_BAND_VAL -// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT -// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL -// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT -// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL -#define ENABLE_RGB_MATRIX_CYCLE_ALL -#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT -#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN -#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON -#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN -#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL -#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL -#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL -#define ENABLE_RGB_MATRIX_DUAL_BEACON -#define ENABLE_RGB_MATRIX_RAINBOW_BEACON -// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS -#define ENABLE_RGB_MATRIX_RAINDROPS -// #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS -// #define ENABLE_RGB_MATRIX_HUE_BREATHING -// #define ENABLE_RGB_MATRIX_HUE_PENDULUM -// #define ENABLE_RGB_MATRIX_HUE_WAVE -// #define ENABLE_RGB_MATRIX_PIXEL_RAIN -// #define ENABLE_RGB_MATRIX_PIXEL_FLOW -// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL -// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined -#define ENABLE_RGB_MATRIX_TYPING_HEATMAP -#define ENABLE_RGB_MATRIX_DIGITAL_RAIN -// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS -#define ENABLE_RGB_MATRIX_SPLASH -#define ENABLE_RGB_MATRIX_MULTISPLASH -#define ENABLE_RGB_MATRIX_SOLID_SPLASH -#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH -// #define RGB_MATRIX_KEYPRESSES - -/* Allow VIA to edit lighting */ -#ifdef VIA_ENABLE -# define VIA_QMK_RGBLIGHT_ENABLE -#endif diff --git a/keyboards/keychron/q3/halconf.h b/keyboards/keychron/q3/halconf.h deleted file mode 100644 index 74821ffac718..000000000000 --- a/keyboards/keychron/q3/halconf.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2020 QMK - * - * 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 . - */ - -#pragma once - -#define HAL_USE_I2C TRUE -#define PAL_USE_CALLBACKS FALSE - -#include_next diff --git a/keyboards/keychron/q3/matrix.c b/keyboards/keychron/q3/matrix.c deleted file mode 100644 index 1bcd4b5d0c94..000000000000 --- a/keyboards/keychron/q3/matrix.c +++ /dev/null @@ -1,172 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include -#include -#include -#include "util.h" -#include "matrix.h" -#include "debounce.h" -#include "quantum.h" - -#define DS A7 -#define STCP B0 -#define SHCP B1 - -#ifdef MATRIX_ROW_PINS -static pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; -#endif // MATRIX_ROW_PINS -#ifdef MATRIX_COL_PINS -static pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; -#endif // MATRIX_COL_PINS - -/* matrix state(1:on, 0:off) */ -extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values -extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values - -static inline void setPinOutput_writeLow(pin_t pin) { - ATOMIC_BLOCK_FORCEON { - setPinOutput(pin); - writePinLow(pin); - } -} - -static inline void setPinOutput_writeHigh(pin_t pin) { - ATOMIC_BLOCK_FORCEON { - setPinOutput(pin); - writePinHigh(pin); - } -} - -static inline void setPinInputHigh_atomic(pin_t pin) { - ATOMIC_BLOCK_FORCEON { setPinInputHigh(pin); } -} - -static inline uint8_t readMatrixPin(pin_t pin) { - if (pin != NO_PIN) { - return readPin(pin); - } else { - return 1; - } -} - -static void delay_nTime(uint8_t time) { - while(time--); -} - -static void SendTo595(uint8_t byteData) { - uint8_t i = 0; - - for (; i < 8; i++) { - if (byteData & 0x1) { - setPinOutput_writeHigh(DS); - } else { - setPinOutput_writeLow(DS); - } - byteData = byteData>>1; - - setPinOutput_writeHigh(SHCP); - delay_nTime(10); - setPinOutput_writeLow(SHCP); - } - setPinOutput_writeHigh(STCP); - delay_nTime(10); - setPinOutput_writeLow(STCP); -} - -static bool select_col(uint8_t col) { - pin_t pin = col_pins[col]; - - if (pin != NO_PIN) { - setPinOutput_writeLow(pin); - return true; - } else { - SendTo595(~(0x1<<(MATRIX_COLS - col -1))); - return true; - } - return false; -} - -static void unselect_col(uint8_t col) { - pin_t pin = col_pins[col]; - - if (pin != NO_PIN) { - setPinInputHigh_atomic(pin); - } else { - SendTo595(0xFF); - } -} - -static void unselect_cols(void) { - for (uint8_t x = 0; x < MATRIX_COLS; x++) { - unselect_col(x); - } -} - -static void matrix_init_pins(void) { - unselect_cols(); - for (uint8_t x = 0; x < MATRIX_ROWS; x++) { - if (row_pins[x] != NO_PIN) { - setPinInputHigh_atomic(row_pins[x]); - } - } -} - -void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) { - bool key_pressed = false; - - // Select col - if (!select_col(current_col)) { - return; // skip NO_PIN col - } - matrix_output_select_delay(); - - // For each row... - for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) { - // Check row pin state - if (readMatrixPin(row_pins[row_index]) == 0) { - // Pin LO, set col bit - current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col); - key_pressed = true; - } else { - // Pin HI, clear col bit - current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col); - } - } - - // Unselect col - unselect_col(current_col); - matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH -} - -void matrix_init_custom(void) { - // initialize key pins - matrix_init_pins(); -} - -bool matrix_scan_custom(matrix_row_t current_matrix[]) { - matrix_row_t curr_matrix[MATRIX_ROWS] = {0}; - - // Set col, read rows - for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { - matrix_read_rows_on_col(curr_matrix, current_col); - } - - bool changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0; - if (changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix)); - - return changed; -} diff --git a/keyboards/keychron/q3/mcuconf.h b/keyboards/keychron/q3/mcuconf.h deleted file mode 100644 index 0ca8c64850f4..000000000000 --- a/keyboards/keychron/q3/mcuconf.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2020 QMK - * - * 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 . - */ - -#pragma once - -#include_next - -#undef STM32_I2C_USE_I2C1 -#define STM32_I2C_USE_I2C1 TRUE diff --git a/keyboards/keychron/q3/q3.c b/keyboards/keychron/q3/q3.c deleted file mode 100644 index 1f79ecede361..000000000000 --- a/keyboards/keychron/q3/q3.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include "q3.h" - -// clang-format off - -const matrix_row_t matrix_mask[] = { - 0b1111111111111111, - 0b1111111111111111, - 0b1111111111111111, - 0b1111111111111111, - 0b1111111111111111, - 0b1111111111101111, -}; - -// clang-format on - -#ifdef DIP_SWITCH_ENABLE - -bool dip_switch_update_kb(uint8_t index, bool active) { - if (!dip_switch_update_user(index, active)) { - return false; - } - if (index == 0) { - default_layer_set(1UL << (active ? 2 : 0)); - } - return true; -} - -#endif - -#if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) - -# define CAPS_LOCK_MAX_BRIGHTNESS 0xFF -# ifdef RGB_MATRIX_MAXIMUM_BRIGHTNESS -# undef CAPS_LOCK_MAX_BRIGHTNESS -# define CAPS_LOCK_MAX_BRIGHTNESS RGB_MATRIX_MAXIMUM_BRIGHTNESS -# endif - -# define CAPS_LOCK_VAL_STEP 8 -# ifdef RGB_MATRIX_VAL_STEP -# undef CAPS_LOCK_VAL_STEP -# define CAPS_LOCK_VAL_STEP RGB_MATRIX_VAL_STEP -# endif - -void rgb_matrix_indicators_kb(void) { - if (host_keyboard_led_state().caps_lock) { - uint8_t b = rgb_matrix_get_val(); - if (b < CAPS_LOCK_VAL_STEP) { - b = CAPS_LOCK_VAL_STEP; - } else if (b < (CAPS_LOCK_MAX_BRIGHTNESS - CAPS_LOCK_VAL_STEP)) { - b += CAPS_LOCK_VAL_STEP; // one step more than current brightness - } else { - b = CAPS_LOCK_MAX_BRIGHTNESS; - } - rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, b, b, b); // white, with the adjusted brightness - } -} - -#endif diff --git a/keyboards/keychron/q3/q3.h b/keyboards/keychron/q3/q3.h deleted file mode 100644 index 905b6b8680a0..000000000000 --- a/keyboards/keychron/q3/q3.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#pragma once - -#include "quantum.h" - -#if defined(KEYBOARD_keychron_q3_rev_0120) -# include "rev_0120.h" -#elif defined(KEYBOARD_keychron_q3_rev_0121) -# include "rev_0121.h" -#elif defined(KEYBOARD_keychron_q3_rev_0122) -# include "rev_0122.h" -#elif defined(KEYBOARD_keychron_q3_rev_0123) -# include "rev_0123.h" -#endif diff --git a/keyboards/keychron/q3/readme.md b/keyboards/keychron/q3/readme.md deleted file mode 100644 index 6807867e966f..000000000000 --- a/keyboards/keychron/q3/readme.md +++ /dev/null @@ -1,20 +0,0 @@ -# Keychron Q3 - -A customizable 87 keys keyboard. - -* Keyboard Maintainer: [Keychron](https://github.com/keychron) -* Hardware Supported: Keychron Q3 -* Hardware Availability: [Keychron](https://www.keychron.com) - -Make example for this keyboard (after setting up your build environment): - - make keychron/q3/rev_0120:default - -Flashing example for this keyboard: - - make keychron/q3/rev_0120:default:flash - -**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard. - -See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). - diff --git a/keyboards/keychron/q3/rev_0120/config.h b/keyboards/keychron/q3/rev_0120/config.h deleted file mode 100644 index 3dfee8b0376c..000000000000 --- a/keyboards/keychron/q3/rev_0120/config.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#pragma once - -/* USB Device descriptor parameter */ -#define PRODUCT_ID 0x0120 -#define DEVICE_VER 0x0100 - -/* key matrix pins */ -#define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } -#define MATRIX_COL_PINS { C14, C15, A0, A1, A2, A3, A4, A5, A6, A7, B0, B1, A8, A9, A10, H3 } - -/* We uses a pin with a stronger pull resistor than the internal MCU pins */ -// #define MATRIX_UNSELECT_DRIVE_HIGH - -/* RGB Matrix Configuration */ -#define DRIVER_1_LED_TOTAL 48 -#define DRIVER_2_LED_TOTAL 39 -#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) - -/* Enable CapsLcok LED */ -#define CAPS_LOCK_LED_INDEX 50 - diff --git a/keyboards/keychron/q3/rev_0120/info.json b/keyboards/keychron/q3/rev_0120/info.json deleted file mode 100644 index f540d9e637c1..000000000000 --- a/keyboards/keychron/q3/rev_0120/info.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "keyboard_name": "Keychron Q3", - "url": "https://github.com/Keychron", - "maintainer": "lalalademaxiya1", - "layouts": { - "LAYOUT_ansi_87": { - "layout": [ - {"label":"Esc", "x":0, "y":0}, - {"label":"F1", "x":2, "y":0}, - {"label":"F2", "x":3, "y":0}, - {"label":"F3", "x":4, "y":0}, - {"label":"F4", "x":5, "y":0}, - {"label":"F5", "x":6.5, "y":0}, - {"label":"F5", "x":7.5, "y":0}, - {"label":"F7", "x":8.5, "y":0}, - {"label":"F8", "x":9.5, "y":0}, - {"label":"F9", "x":11, "y":0}, - {"label":"F10", "x":12, "y":0}, - {"label":"F11", "x":13, "y":0}, - {"label":"F12", "x":14, "y":0}, - {"label":"Print", "x":15.25, "y":0}, - {"label":"Cortana", "x":16.25, "y":0}, - {"label":"Light", "x":17.25, "y":0}, - - {"label":"`~", "x":0, "y":1.25}, - {"label":"1!", "x":1, "y":1.25}, - {"label":"2@", "x":2, "y":1.25}, - {"label":"3#", "x":3, "y":1.25}, - {"label":"4$", "x":4, "y":1.25}, - {"label":"5%", "x":5, "y":1.25}, - {"label":"6^", "x":6, "y":1.25}, - {"label":"7&", "x":7, "y":1.25}, - {"label":"8*", "x":8, "y":1.25}, - {"label":"9(", "x":9, "y":1.25}, - {"label":"0)", "x":10, "y":1.25}, - {"label":"-_", "x":11, "y":1.25}, - {"label":"=+", "x":12, "y":1.25}, - {"label":"Backspace", "x":13, "y":1.25, "w":2}, - {"label":"Insert", "x":15.25, "y":1.25}, - {"label":"Home", "x":16.25, "y":1.25}, - {"label":"Page Up", "x":17.25, "y":1.25}, - - {"label":"Tab", "x":0, "y":2.25, "w":1.5}, - {"label":"Q", "x":1.5, "y":2.25}, - {"label":"W", "x":2.5, "y":2.25}, - {"label":"E", "x":3.5, "y":2.25}, - {"label":"R", "x":4.5, "y":2.25}, - {"label":"T", "x":5.5, "y":2.25}, - {"label":"Y", "x":6.5, "y":2.25}, - {"label":"U", "x":7.5, "y":2.25}, - {"label":"I", "x":8.5, "y":2.25}, - {"label":"O", "x":9.5, "y":2.25}, - {"label":"P", "x":10.5, "y":2.25}, - {"label":"[{", "x":11.5, "y":2.25}, - {"label":"]}", "x":12.5, "y":2.25}, - {"label":"\\|", "x":13.5, "y":2.25, "w":1.5}, - {"label":"Delete", "x":15.25, "y":2.25}, - {"label":"End", "x":16.25, "y":2.25}, - {"label":"Page Down", "x":17.25, "y":2.25}, - - {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, - {"label":"A", "x":1.75, "y":3.25}, - {"label":"S", "x":2.75, "y":3.25}, - {"label":"D", "x":3.75, "y":3.25}, - {"label":"F", "x":4.75, "y":3.25}, - {"label":"G", "x":5.75, "y":3.25}, - {"label":"H", "x":6.75, "y":3.25}, - {"label":"J", "x":7.75, "y":3.25}, - {"label":"K", "x":8.75, "y":3.25}, - {"label":"L", "x":9.75, "y":3.25}, - {"label":";:", "x":10.75, "y":3.25}, - {"label":"'\"", "x":11.75, "y":3.25}, - {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, - - {"label":"Left Shift", "x":0, "y":4.25, "w":2.25}, - {"label":"Z", "x":2.25, "y":4.25}, - {"label":"X", "x":3.25, "y":4.25}, - {"label":"C", "x":4.25, "y":4.25}, - {"label":"V", "x":5.25, "y":4.25}, - {"label":"B", "x":6.25, "y":4.25}, - {"label":"N", "x":7.25, "y":4.25}, - {"label":"M", "x":8.25, "y":4.25}, - {"label":",<", "x":9.25, "y":4.25}, - {"label":".>", "x":10.25, "y":4.25}, - {"label":"/?", "x":11.25, "y":4.25}, - {"label":"Right Shift", "x":12.25, "y":4.25, "w":2.75}, - {"label":"Up", "x":16.25, "y":4.25}, - - {"label":"Left Ctrl", "x":0, "y":5.25, "w":1.25} - {"label":"Left Win", "x":1.25, "y":5.25, "w":1.25}, - {"label":"Left Alt", "x":2.5, "y":5.25, "w":1.25}, - {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, - {"label":"Right Alt", "x":10, "y":5.25, "w":1.25}, - {"label":"Right Win", "x":11.25, "y":5.25, "w":1.25}, - {"label":"Fn", "x":12.5, "y":5.25, "w":1.25}, - {"label":"Right Ctrl", "x":13.75, "y":5.25, "w":1.25}, - {"label":"Left", "x":15.25, "y":5.25}, - {"label":"Down", "x":16.25, "y":5.25}, - {"label":"Right", "x":17.25, "y":5.25} - ] - } - } -} diff --git a/keyboards/keychron/q3/rev_0120/keymaps/default/keymap.c b/keyboards/keychron/q3/rev_0120/keymaps/default/keymap.c deleted file mode 100644 index 281f4d5f7d3f..000000000000 --- a/keyboards/keychron/q3/rev_0120/keymaps/default/keymap.c +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include QMK_KEYBOARD_H - -enum layers{ - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN -}; - -enum custom_keycodes { - KC_MISSION_CONTROL = SAFE_RANGE, - KC_LAUNCHPAD, - KC_LOPTN, - KC_ROPTN, - KC_LCMMD, - KC_RCMMD, - KC_SIRI, - KC_TASK_VIEW, - KC_FILE_EXPLORER, - KC_SCREEN_SHOT, - KC_CORTANA -}; - -#define KC_MCTL KC_MISSION_CONTROL -#define KC_LPAD KC_LAUNCHPAD -#define KC_TASK KC_TASK_VIEW -#define KC_FLXP KC_FILE_EXPLORER -#define KC_SNAP KC_SCREEN_SHOT -#define KC_CRTA KC_CORTANA - -typedef struct PACKED { - uint8_t len; - uint8_t keycode[3]; -} key_combination_t; - -key_combination_t key_comb_list[4] = { - {2, {KC_LWIN, KC_TAB}}, - {2, {KC_LWIN, KC_E}}, - {3, {KC_LSFT, KC_LCMD, KC_4}}, - {2, {KC_LWIN, KC_C}} -}; - -static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_ansi_87( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_END, KC_PGDN, - 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [MAC_FN] = LAYOUT_ansi_87( - KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), - - [WIN_BASE] = LAYOUT_ansi_87( - KC_ESC, 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_PSCR, KC_CRTA, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_END, KC_PGDN, - 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [WIN_FN] = LAYOUT_ansi_87( - KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), -}; - -uint16_t prev; -bool siri; - -void matrix_scan_user(void) { - if (siri) { - if (timer_elapsed(prev) >= 500) { - siri = false; - unregister_code(KC_LCMD); - unregister_code(KC_SPACE); - } - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_MISSION_CONTROL: - if (record->event.pressed) { - host_consumer_send(0x29F); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LAUNCHPAD: - if (record->event.pressed) { - host_consumer_send(0x2A0); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LOPTN: - case KC_ROPTN: - case KC_LCMMD: - case KC_RCMMD: - if (record->event.pressed) { - register_code(mac_keycode[keycode - KC_LOPTN]); - } else { - unregister_code(mac_keycode[keycode - KC_LOPTN]); - } - return false; // Skip all further processing of this key - case KC_SIRI: - if (record->event.pressed) { - register_code(KC_LCMD); - register_code(KC_SPACE); - prev = timer_read() | 1; - siri = true; - } else { - // Do something else when release - } - return false; // Skip all further processing of this key - case KC_TASK: - case KC_FLXP: - case KC_SNAP: - case KC_CRTA: - if (record->event.pressed) { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - register_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } else { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } - return false; // Skip all further processing of this key - default: - return true; // Process all other keycodes normally - } -} diff --git a/keyboards/keychron/q3/rev_0120/keymaps/via/keymap.c b/keyboards/keychron/q3/rev_0120/keymaps/via/keymap.c deleted file mode 100644 index 9bff56eaf065..000000000000 --- a/keyboards/keychron/q3/rev_0120/keymaps/via/keymap.c +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include QMK_KEYBOARD_H - -enum layers{ - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN -}; - -enum custom_keycodes { - KC_MISSION_CONTROL = USER00, - KC_LAUNCHPAD, - KC_LOPTN, - KC_ROPTN, - KC_LCMMD, - KC_RCMMD, - KC_SIRI, - KC_TASK_VIEW, - KC_FILE_EXPLORER, - KC_SCREEN_SHOT, - KC_CORTANA -}; - -#define KC_MCTL KC_MISSION_CONTROL -#define KC_LPAD KC_LAUNCHPAD -#define KC_TASK KC_TASK_VIEW -#define KC_FLXP KC_FILE_EXPLORER -#define KC_SNAP KC_SCREEN_SHOT -#define KC_CRTA KC_CORTANA - -typedef struct PACKED { - uint8_t len; - uint8_t keycode[3]; -} key_combination_t; - -key_combination_t key_comb_list[4] = { - {2, {KC_LWIN, KC_TAB}}, - {2, {KC_LWIN, KC_E}}, - {3, {KC_LSFT, KC_LCMD, KC_4}}, - {2, {KC_LWIN, KC_C}} -}; - -static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_ansi_87( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_END, KC_PGDN, - 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [MAC_FN] = LAYOUT_ansi_87( - KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), - - [WIN_BASE] = LAYOUT_ansi_87( - KC_ESC, 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_PSCR, KC_CRTA, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_END, KC_PGDN, - 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [WIN_FN] = LAYOUT_ansi_87( - KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), -}; - -uint16_t prev; -bool siri; - -void matrix_scan_user(void) { - if (siri) { - if (timer_elapsed(prev) >= 500) { - siri = false; - unregister_code(KC_LCMD); - unregister_code(KC_SPACE); - } - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_MISSION_CONTROL: - if (record->event.pressed) { - host_consumer_send(0x29F); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LAUNCHPAD: - if (record->event.pressed) { - host_consumer_send(0x2A0); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LOPTN: - case KC_ROPTN: - case KC_LCMMD: - case KC_RCMMD: - if (record->event.pressed) { - register_code(mac_keycode[keycode - KC_LOPTN]); - } else { - unregister_code(mac_keycode[keycode - KC_LOPTN]); - } - return false; // Skip all further processing of this key - case KC_SIRI: - if (record->event.pressed) { - register_code(KC_LCMD); - register_code(KC_SPACE); - prev = timer_read() | 1; - siri = true; - } else { - // Do something else when release - } - return false; // Skip all further processing of this key - case KC_TASK: - case KC_FLXP: - case KC_SNAP: - case KC_CRTA: - if (record->event.pressed) { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - register_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } else { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } - return false; // Skip all further processing of this key - default: - return true; // Process all other keycodes normally - } -} diff --git a/keyboards/keychron/q3/rev_0120/keymaps/via/rules.mk b/keyboards/keychron/q3/rev_0120/keymaps/via/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/keychron/q3/rev_0120/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/keychron/q3/rev_0120/readme.md b/keyboards/keychron/q3/rev_0120/readme.md deleted file mode 100644 index 1e7ea53e233e..000000000000 --- a/keyboards/keychron/q3/rev_0120/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The ANSI variant of the Keychron Q3 diff --git a/keyboards/keychron/q3/rev_0120/rev_0120.c b/keyboards/keychron/q3/rev_0120/rev_0120.c deleted file mode 100644 index 3958f5466d8f..000000000000 --- a/keyboards/keychron/q3/rev_0120/rev_0120.c +++ /dev/null @@ -1,154 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include "quantum.h" - -#ifdef RGB_MATRIX_ENABLE - -const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { -/* Refer to IS31 manual for these locations - * driver - * | R location - * | | G location - * | | | B location - * | | | | */ - {0, I_1, G_1, H_1}, - {0, I_2, G_2, H_2}, - {0, I_3, G_3, H_3}, - {0, I_4, G_4, H_4}, - {0, I_5, G_5, H_5}, - {0, I_6, G_6, H_6}, - {0, I_7, G_7, H_7}, - {0, I_8, G_8, H_8}, - {0, I_9, G_9, H_9}, - {0, I_10, G_10, H_10}, - {0, I_11, G_11, H_11}, - {0, I_12, G_12, H_12}, - {0, I_13, G_13, H_13}, - {0, I_15, G_15, H_15}, - {0, I_16, G_16, H_16}, - {1, I_15, G_15, H_15}, - - {0, C_1, A_1, B_1}, - {0, C_2, A_2, B_2}, - {0, C_3, A_3, B_3}, - {0, C_4, A_4, B_4}, - {0, C_5, A_5, B_5}, - {0, C_6, A_6, B_6}, - {0, C_7, A_7, B_7}, - {0, C_8, A_8, B_8}, - {0, C_9, A_9, B_9}, - {0, C_10, A_10, B_10}, - {0, C_11, A_11, B_11}, - {0, C_12, A_12, B_12}, - {0, C_13, A_13, B_13}, - {0, C_14, A_14, B_14}, - {0, C_15, A_15, B_15}, - {0, C_16, A_16, B_16}, - {1, I_16, G_16, H_16}, - - {0, F_1, D_1, E_1}, - {0, F_2, D_2, E_2}, - {0, F_3, D_3, E_3}, - {0, F_4, D_4, E_4}, - {0, F_5, D_5, E_5}, - {0, F_6, D_6, E_6}, - {0, F_7, D_7, E_7}, - {0, F_8, D_8, E_8}, - {0, F_9, D_9, E_9}, - {0, F_10, D_10, E_10}, - {0, F_11, D_11, E_11}, - {0, F_12, D_12, E_12}, - {0, F_13, D_13, E_13}, - {0, F_14, D_14, E_14}, - {0, F_15, D_15, E_15}, - {0, F_16, D_16, E_16}, - {1, I_13, G_13, H_13}, - - {1, I_1, G_1, H_1}, - {1, I_2, G_2, H_2}, - {1, I_3, G_3, H_3}, - {1, I_4, G_4, H_4}, - {1, I_5, G_5, H_5}, - {1, I_6, G_6, H_6}, - {1, I_7, G_7, H_7}, - {1, I_8, G_8, H_8}, - {1, I_9, G_9, H_9}, - {1, I_10, G_10, H_10}, - {1, I_11, G_11, H_11}, - {1, I_12, G_12, H_12}, - {1, I_14, G_14, H_14}, - - {1, C_1, A_1, B_1}, - {1, C_3, A_3, B_3}, - {1, C_4, A_4, B_4}, - {1, C_5, A_5, B_5}, - {1, C_6, A_6, B_6}, - {1, C_7, A_7, B_7}, - {1, C_8, A_8, B_8}, - {1, C_9, A_9, B_9}, - {1, C_10, A_10, B_10}, - {1, C_11, A_11, B_11}, - {1, C_12, A_12, B_12}, - {1, C_14, A_14, B_14}, - {1, C_16, A_16, B_16}, - - {1, F_1, D_1, E_1}, - {1, F_2, D_2, E_2}, - {1, F_3, D_3, E_3}, - {1, F_7, D_7, E_7}, - {1, F_11, D_11, E_11}, - {1, F_12, D_12, E_12}, - {1, F_13, D_13, E_13}, - {1, F_14, D_14, E_14}, - {1, F_15, D_15, E_15}, - {1, F_16, D_16, E_16}, - {1, C_15, A_15, B_15}, -}; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, - { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48 }, - { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 49, 62, 15, 32 }, - { 63, __, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, __, 74, 86, 75 }, - { 76, 77, 78, __, __, __, 79, __, __, __, 80, 81, 82, 83, 84, 85 }, - }, - { - // LED Index to Physical Position - {0,0}, {26,0}, {39,0}, {52,0}, {65,0}, {85,0}, {98,0}, {111,0}, {124,0}, {143,0}, {156,0}, {169,0}, {182,0}, {198,0}, {211,0}, {224,0}, - {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {176,15}, {198,15}, {211,15}, {224,15}, - {3,28}, {20,28}, {33,28}, {46,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {179,28}, {198,28}, {211,28}, {224,28}, - {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {174,40}, - {8,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {171,52}, {211,52}, - {2,64}, {18,64}, {34,64}, {83,64}, {131,64}, {148,64}, {164,64}, {180,64}, {198,64}, {211,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - } -}; - -#endif diff --git a/keyboards/keychron/q3/rev_0120/rev_0120.h b/keyboards/keychron/q3/rev_0120/rev_0120.h deleted file mode 100644 index 24ac8936f991..000000000000 --- a/keyboards/keychron/q3/rev_0120/rev_0120.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#pragma once - -#include "quantum.h" - -#define XXX KC_NO - -#define LAYOUT_ansi_87( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0F, K3E, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3F, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K3C, \ - K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ - K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ - K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K4E \ -) { \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, XXX, K0E, K0F }, \ - { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ - { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ - { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ - { K40, XXX, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \ - { K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ -} diff --git a/keyboards/keychron/q3/rev_0120/rules.mk b/keyboards/keychron/q3/rev_0120/rules.mk deleted file mode 100644 index 26d88a0545bb..000000000000 --- a/keyboards/keychron/q3/rev_0120/rules.mk +++ /dev/null @@ -1,26 +0,0 @@ -# MCU name -MCU = STM32L433 - -# Bootloader selection -BOOTLOADER = stm32-dfu - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -CONSOLE_ENABLE = no # Console for debug -COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = yes # Enable USB N-key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output -ENCODER_ENABLE = no # Enable Encoder -DIP_SWITCH_ENABLE = yes -RGB_MATRIX_ENABLE = yes -RGB_MATRIX_DRIVER = CKLED2001 -EEPROM_DRIVER = transient - -# Enter lower-power sleep mode when on the ChibiOS idle thread -OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/keyboards/keychron/q3/rev_0121/config.h b/keyboards/keychron/q3/rev_0121/config.h deleted file mode 100644 index 796b3850ecad..000000000000 --- a/keyboards/keychron/q3/rev_0121/config.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#pragma once - -/* USB Device descriptor parameter */ -#define PRODUCT_ID 0x0121 -#define DEVICE_VER 0x0100 - -/* key matrix pins */ -#define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } -#define MATRIX_COL_PINS { C14, C15, A0, A1, A2, A3, A4, A5, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN } - -/* RGB Matrix Configuration */ -#define DRIVER_1_LED_TOTAL 48 -#define DRIVER_2_LED_TOTAL 39 -#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) - -/* Encoder Configuration */ -#define ENCODERS_PAD_A { A10 } -#define ENCODERS_PAD_B { A8 } -#define ENCODER_RESOLUTION 4 -#define ENCODER_DEFAULT_POS 0x3 - -/* Enable CapsLcok LED */ -#define CAPS_LOCK_LED_INDEX 50 diff --git a/keyboards/keychron/q3/rev_0121/info.json b/keyboards/keychron/q3/rev_0121/info.json deleted file mode 100644 index 300f6275acce..000000000000 --- a/keyboards/keychron/q3/rev_0121/info.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "keyboard_name": "Keychron Q3", - "url": "https://github.com/Keychron", - "maintainer": "lalalademaxiya1", - "layouts": { - "LAYOUT_ansi_87": { - "layout": [ - {"label":"Esc", "x":0, "y":0}, - {"label":"F1", "x":1.25, "y":0}, - {"label":"F2", "x":2.25, "y":0}, - {"label":"F3", "x":3.25, "y":0}, - {"label":"F4", "x":4.25, "y":0}, - {"label":"F5", "x":5.5, "y":0}, - {"label":"F5", "x":6.5, "y":0}, - {"label":"F7", "x":7.5, "y":0}, - {"label":"F8", "x":8.5, "y":0}, - {"label":"F9", "x":9.75, "y":0}, - {"label":"F10", "x":10.75, "y":0}, - {"label":"F11", "x":11.75, "y":0}, - {"label":"F12", "x":12.75, "y":0}, - {"label":"Mute", "x":14, "y":0}, - {"label":"Print", "x":15.75, "y":0}, - {"label":"Cortana", "x":16.75, "y":0}, - {"label":"Light", "x":17.75, "y":0}, - - {"label":"`~", "x":0, "y":1.25}, - {"label":"1!", "x":1, "y":1.25}, - {"label":"2@", "x":2, "y":1.25}, - {"label":"3#", "x":3, "y":1.25}, - {"label":"4$", "x":4, "y":1.25}, - {"label":"5%", "x":5, "y":1.25}, - {"label":"6^", "x":6, "y":1.25}, - {"label":"7&", "x":7, "y":1.25}, - {"label":"8*", "x":8, "y":1.25}, - {"label":"9(", "x":9, "y":1.25}, - {"label":"0)", "x":10, "y":1.25}, - {"label":"-_", "x":11, "y":1.25}, - {"label":"=+", "x":12, "y":1.25}, - {"label":"Backspace", "x":13, "y":1.25, "w":2}, - {"label":"Insert", "x":15.75, "y":1.25}, - {"label":"Home", "x":16.75, "y":1.25}, - {"label":"Page Up", "x":17.75, "y":1.25}, - - {"label":"Tab", "x":0, "y":2.25, "w":1.5}, - {"label":"Q", "x":1.5, "y":2.25}, - {"label":"W", "x":2.5, "y":2.25}, - {"label":"E", "x":3.5, "y":2.25}, - {"label":"R", "x":4.5, "y":2.25}, - {"label":"T", "x":5.5, "y":2.25}, - {"label":"Y", "x":6.5, "y":2.25}, - {"label":"U", "x":7.5, "y":2.25}, - {"label":"I", "x":8.5, "y":2.25}, - {"label":"O", "x":9.5, "y":2.25}, - {"label":"P", "x":10.5, "y":2.25}, - {"label":"[{", "x":11.5, "y":2.25}, - {"label":"]}", "x":12.5, "y":2.25}, - {"label":"\\|", "x":13.5, "y":2.25, "w":1.5}, - {"label":"Delete", "x":15.75, "y":2.25}, - {"label":"End", "x":16.75, "y":2.25}, - {"label":"Page Down", "x":17.75, "y":2.25}, - - {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, - {"label":"A", "x":1.75, "y":3.25}, - {"label":"S", "x":2.75, "y":3.25}, - {"label":"D", "x":3.75, "y":3.25}, - {"label":"F", "x":4.75, "y":3.25}, - {"label":"G", "x":5.75, "y":3.25}, - {"label":"H", "x":6.75, "y":3.25}, - {"label":"J", "x":7.75, "y":3.25}, - {"label":"K", "x":8.75, "y":3.25}, - {"label":"L", "x":9.75, "y":3.25}, - {"label":";:", "x":10.75, "y":3.25}, - {"label":"'\"", "x":11.75, "y":3.25}, - {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, - - {"label":"Left Shift", "x":0, "y":4.25, "w":2.25}, - {"label":"Z", "x":2.25, "y":4.25}, - {"label":"X", "x":3.25, "y":4.25}, - {"label":"C", "x":4.25, "y":4.25}, - {"label":"V", "x":5.25, "y":4.25}, - {"label":"B", "x":6.25, "y":4.25}, - {"label":"N", "x":7.25, "y":4.25}, - {"label":"M", "x":8.25, "y":4.25}, - {"label":",<", "x":9.25, "y":4.25}, - {"label":".>", "x":10.25, "y":4.25}, - {"label":"/?", "x":11.25, "y":4.25}, - {"label":"Right Shift", "x":12.25, "y":4.25, "w":2.75}, - {"label":"Up", "x":16.75, "y":4.25}, - - {"label":"Left Ctrl", "x":0, "y":5.25, "w":1.25}, - {"label":"Left Win", "x":1.25, "y":5.25, "w":1.25}, - {"label":"Left Alt", "x":2.5, "y":5.25, "w":1.25}, - {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, - {"label":"Right Alt", "x":10, "y":5.25, "w":1.25}, - {"label":"Right Win", "x":11.25, "y":5.25, "w":1.25}, - {"label":"Fn", "x":12.5, "y":5.25, "w":1.25}, - {"label":"Right Ctrl", "x":13.75, "y":5.25, "w":1.25}, - {"label":"Left", "x":15.75, "y":5.25}, - {"label":"Down", "x":16.75, "y":5.25}, - {"label":"Right", "x":17.75, "y":5.25} - ] - }, - "LAYOUT_all": { - "layout": [ - {"label":"Esc", "x":0, "y":0.5}, - {"label":"F1", "x":1.25, "y":0.5}, - {"label":"F2", "x":2.25, "y":0.5}, - {"label":"F3", "x":3.25, "y":0.5}, - {"label":"F4", "x":4.25, "y":0.5}, - {"label":"F5", "x":5.5, "y":0.5}, - {"label":"F5", "x":6.5, "y":0.5}, - {"label":"F7", "x":7.5, "y":0.5}, - {"label":"F8", "x":8.5, "y":0.5}, - {"label":"F9", "x":9.75, "y":0.5}, - {"label":"F10", "x":10.75, "y":0.5}, - {"label":"F11", "x":11.75, "y":0.5}, - {"label":"F12", "x":12.75, "y":0.5}, - {"label":"CCW", "x":13.9, "y":0, "w":0.6, "h":0.5}, - {"label":"Mute", "x":14, "y":0.5}, - {"label":"CW", "x":14.5, "y":0, "w":0.6, "h":0.5}, - {"label":"Print", "x":15.75, "y":0.5}, - {"label":"Cortana", "x":16.75, "y":0.5}, - {"label":"Light", "x":17.75, "y":0.5}, - - {"label":"`~", "x":0, "y":1.75}, - {"label":"1!", "x":1, "y":1.75}, - {"label":"2@", "x":2, "y":1.75}, - {"label":"3#", "x":3, "y":1.75}, - {"label":"4$", "x":4, "y":1.75}, - {"label":"5%", "x":5, "y":1.75}, - {"label":"6^", "x":6, "y":1.75}, - {"label":"7&", "x":7, "y":1.75}, - {"label":"8*", "x":8, "y":1.75}, - {"label":"9(", "x":9, "y":1.75}, - {"label":"0)", "x":10, "y":1.75}, - {"label":"-_", "x":11, "y":1.75}, - {"label":"=+", "x":12, "y":1.75}, - {"label":"Backspace", "x":13, "y":1.75, "w":2}, - {"label":"Insert", "x":15.75, "y":1.75}, - {"label":"Home", "x":16.75, "y":1.75}, - {"label":"Page Up", "x":17.75, "y":1.75}, - - {"label":"Tab", "x":0, "y":2.75, "w":1.5}, - {"label":"Q", "x":1.5, "y":2.75}, - {"label":"W", "x":2.5, "y":2.75}, - {"label":"E", "x":3.5, "y":2.75}, - {"label":"R", "x":4.5, "y":2.75}, - {"label":"T", "x":5.5, "y":2.75}, - {"label":"Y", "x":6.5, "y":2.75}, - {"label":"U", "x":7.5, "y":2.75}, - {"label":"I", "x":8.5, "y":2.75}, - {"label":"O", "x":9.5, "y":2.75}, - {"label":"P", "x":10.5, "y":2.75}, - {"label":"[{", "x":11.5, "y":2.75}, - {"label":"]}", "x":12.5, "y":2.75}, - {"label":"\\|", "x":13.5, "y":2.75, "w":1.5}, - {"label":"Delete", "x":15.75, "y":2.75}, - {"label":"End", "x":16.75, "y":2.75}, - {"label":"Page Down", "x":17.75, "y":2.75}, - - {"label":"Caps Lock", "x":0, "y":3.75, "w":1.75}, - {"label":"A", "x":1.75, "y":3.75}, - {"label":"S", "x":2.75, "y":3.75}, - {"label":"D", "x":3.75, "y":3.75}, - {"label":"F", "x":4.75, "y":3.75}, - {"label":"G", "x":5.75, "y":3.75}, - {"label":"H", "x":6.75, "y":3.75}, - {"label":"J", "x":7.75, "y":3.75}, - {"label":"K", "x":8.75, "y":3.75}, - {"label":"L", "x":9.75, "y":3.75}, - {"label":";:", "x":10.75, "y":3.75}, - {"label":"'\"", "x":11.75, "y":3.75}, - {"label":"Enter", "x":12.75, "y":3.75, "w":2.25}, - - {"label":"Left Shift", "x":0, "y":4.75, "w":2.25}, - {"label":"Z", "x":2.25, "y":4.75}, - {"label":"X", "x":3.25, "y":4.75}, - {"label":"C", "x":4.25, "y":4.75}, - {"label":"V", "x":5.25, "y":4.75}, - {"label":"B", "x":6.25, "y":4.75}, - {"label":"N", "x":7.25, "y":4.75}, - {"label":"M", "x":8.25, "y":4.75}, - {"label":",<", "x":9.25, "y":4.75}, - {"label":".>", "x":10.25, "y":4.75}, - {"label":"/?", "x":11.25, "y":4.75}, - {"label":"Right Shift", "x":12.25, "y":4.75, "w":2.75}, - {"label":"Up", "x":16.75, "y":4.75}, - - {"label":"Left Ctrl", "x":0, "y":5.75, "w":1.25}, - {"label":"Left Win", "x":1.25, "y":5.75, "w":1.25}, - {"label":"Left Alt", "x":2.5, "y":5.75, "w":1.25}, - {"label":"Space", "x":3.75, "y":5.75, "w":6.25}, - {"label":"Right Alt", "x":10, "y":5.75, "w":1.25}, - {"label":"Right Win", "x":11.25, "y":5.75, "w":1.25}, - {"label":"Fn", "x":12.5, "y":5.75, "w":1.25}, - {"label":"Right Ctrl", "x":13.75, "y":5.75, "w":1.25}, - {"label":"Left", "x":15.75, "y":5.75}, - {"label":"Down", "x":16.75, "y":5.75}, - {"label":"Right", "x":17.75, "y":5.75} - ] - } - } -} diff --git a/keyboards/keychron/q3/rev_0121/keymaps/default/keymap.c b/keyboards/keychron/q3/rev_0121/keymaps/default/keymap.c deleted file mode 100644 index 699aa41cc64e..000000000000 --- a/keyboards/keychron/q3/rev_0121/keymaps/default/keymap.c +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include QMK_KEYBOARD_H - -enum layers{ - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN -}; - -enum custom_keycodes { - KC_MISSION_CONTROL = SAFE_RANGE, - KC_LAUNCHPAD, - KC_LOPTN, - KC_ROPTN, - KC_LCMMD, - KC_RCMMD, - KC_SIRI, - KC_TASK_VIEW, - KC_FILE_EXPLORER, - KC_SCREEN_SHOT, - KC_CORTANA -}; - -#define KC_MCTL KC_MISSION_CONTROL -#define KC_LPAD KC_LAUNCHPAD -#define KC_TASK KC_TASK_VIEW -#define KC_FLXP KC_FILE_EXPLORER -#define KC_SNAP KC_SCREEN_SHOT -#define KC_CRTA KC_CORTANA - -typedef struct PACKED { - uint8_t len; - uint8_t keycode[3]; -} key_combination_t; - -key_combination_t key_comb_list[4] = { - {2, {KC_LWIN, KC_TAB}}, - {2, {KC_LWIN, KC_E}}, - {3, {KC_LSFT, KC_LCMD, KC_4}}, - {2, {KC_LWIN, KC_C}} -}; - -static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_ansi_87( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_SNAP, KC_SIRI, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_END, KC_PGDN, - 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [MAC_FN] = LAYOUT_ansi_87( - KC_TRNS, 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_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), - - [WIN_BASE] = LAYOUT_ansi_87( - KC_ESC, 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_MUTE, KC_PSCR, KC_CRTA, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_END, KC_PGDN, - 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [WIN_FN] = LAYOUT_ansi_87( - KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), -}; - -uint16_t prev; -bool siri; - -void matrix_scan_user(void) { - if (siri) { - if (timer_elapsed(prev) >= 500) { - siri = false; - unregister_code(KC_LCMD); - unregister_code(KC_SPACE); - } - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_MISSION_CONTROL: - if (record->event.pressed) { - host_consumer_send(0x29F); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LAUNCHPAD: - if (record->event.pressed) { - host_consumer_send(0x2A0); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LOPTN: - case KC_ROPTN: - case KC_LCMMD: - case KC_RCMMD: - if (record->event.pressed) { - register_code(mac_keycode[keycode - KC_LOPTN]); - } else { - unregister_code(mac_keycode[keycode - KC_LOPTN]); - } - return false; // Skip all further processing of this key - case KC_SIRI: - if (record->event.pressed) { - register_code(KC_LCMD); - register_code(KC_SPACE); - prev = timer_read() | 1; - siri = true; - } else { - // Do something else when release - } - return false; // Skip all further processing of this key - case KC_TASK: - case KC_FLXP: - case KC_SNAP: - case KC_CRTA: - if (record->event.pressed) { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - register_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } else { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } - return false; // Skip all further processing of this key - default: - return true; // Process all other keycodes normally - } -} diff --git a/keyboards/keychron/q3/rev_0121/keymaps/via/keymap.c b/keyboards/keychron/q3/rev_0121/keymaps/via/keymap.c deleted file mode 100644 index 40fff018570f..000000000000 --- a/keyboards/keychron/q3/rev_0121/keymaps/via/keymap.c +++ /dev/null @@ -1,202 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include QMK_KEYBOARD_H - -enum layers{ - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN -}; - -enum custom_keycodes { - KC_MISSION_CONTROL = USER00, - KC_LAUNCHPAD, - KC_LOPTN, - KC_ROPTN, - KC_LCMMD, - KC_RCMMD, - KC_SIRI, - KC_TASK_VIEW, - KC_FILE_EXPLORER, - KC_SCREEN_SHOT, - KC_CORTANA -}; - -#define KC_MCTL KC_MISSION_CONTROL -#define KC_LPAD KC_LAUNCHPAD -#define KC_TASK KC_TASK_VIEW -#define KC_FLXP KC_FILE_EXPLORER -#define KC_SNAP KC_SCREEN_SHOT -#define KC_CRTA KC_CORTANA - -typedef struct PACKED { - uint8_t len; - uint8_t keycode[3]; -} key_combination_t; - -key_combination_t key_comb_list[4] = { - {2, {KC_LWIN, KC_TAB}}, - {2, {KC_LWIN, KC_E}}, - {3, {KC_LSFT, KC_LCMD, KC_4}}, - {2, {KC_LWIN, KC_C}} -}; - -static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_all( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_VOLD, KC_MUTE, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_END, KC_PGDN, - 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [MAC_FN] = LAYOUT_all( - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_VAD, RGB_TOG, RGB_VAI, KC_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), - - [WIN_BASE] = LAYOUT_all( - KC_ESC, 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_VOLD, KC_MUTE, KC_VOLU, KC_PSCR, KC_CRTA, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_END, KC_PGDN, - 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [WIN_FN] = LAYOUT_all( - KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_VAD, RGB_TOG, RGB_VAI, KC_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), -}; - -#if defined(VIA_ENABLE) && defined(ENCODER_ENABLE) - -#define ENCODERS 1 -static uint8_t encoder_state[ENCODERS] = {0}; -static keypos_t encoder_cw[ENCODERS] = {{ 8, 5 }}; -static keypos_t encoder_ccw[ENCODERS] = {{ 7, 5 }}; - -void encoder_action_unregister(void) { - for (int index = 0; index < ENCODERS; ++index) { - if (encoder_state[index]) { - keyevent_t encoder_event = (keyevent_t) { - .key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], - .pressed = false, - .time = (timer_read() | 1) - }; - encoder_state[index] = 0; - action_exec(encoder_event); - } - } -} - -void encoder_action_register(uint8_t index, bool clockwise) { - keyevent_t encoder_event = (keyevent_t) { - .key = clockwise ? encoder_cw[index] : encoder_ccw[index], - .pressed = true, - .time = (timer_read() | 1) - }; - encoder_state[index] = (clockwise ^ 1) | (clockwise << 1); - action_exec(encoder_event); -} - -bool encoder_update_user(uint8_t index, bool clockwise) { - encoder_action_register(index, clockwise); - return false; -}; - -#endif - -uint16_t prev; -bool siri; - -void matrix_scan_user(void) { - if (siri) { - if (timer_elapsed(prev) >= 500) { - siri = false; - unregister_code(KC_LCMD); - unregister_code(KC_SPACE); - } - } -#if defined(VIA_ENABLE) && defined(ENCODER_ENABLE) - encoder_action_unregister(); -#endif -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_MISSION_CONTROL: - if (record->event.pressed) { - host_consumer_send(0x29F); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LAUNCHPAD: - if (record->event.pressed) { - host_consumer_send(0x2A0); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LOPTN: - case KC_ROPTN: - case KC_LCMMD: - case KC_RCMMD: - if (record->event.pressed) { - register_code(mac_keycode[keycode - KC_LOPTN]); - } else { - unregister_code(mac_keycode[keycode - KC_LOPTN]); - } - return false; // Skip all further processing of this key - case KC_SIRI: - if (record->event.pressed) { - register_code(KC_LCMD); - register_code(KC_SPACE); - prev = timer_read() | 1; - siri = true; - } else { - // Do something else when release - } - return false; // Skip all further processing of this key - case KC_TASK: - case KC_FLXP: - case KC_SNAP: - case KC_CRTA: - if (record->event.pressed) { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - register_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } else { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } - return false; // Skip all further processing of this key - default: - return true; // Process all other keycodes normally - } -} diff --git a/keyboards/keychron/q3/rev_0121/keymaps/via/rules.mk b/keyboards/keychron/q3/rev_0121/keymaps/via/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/keychron/q3/rev_0121/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/keychron/q3/rev_0121/readme.md b/keyboards/keychron/q3/rev_0121/readme.md deleted file mode 100644 index 9dbbbd6b1073..000000000000 --- a/keyboards/keychron/q3/rev_0121/readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# The ANSI variant of the Keychron Q3 - -- Enable rotary encoder support. -- Turn colckwise to increase volume and turn anti-colckwise to decrease volume. -- Press top right key pushbutton to mute. diff --git a/keyboards/keychron/q3/rev_0121/rev_0121.c b/keyboards/keychron/q3/rev_0121/rev_0121.c deleted file mode 100644 index 40f3a8494107..000000000000 --- a/keyboards/keychron/q3/rev_0121/rev_0121.c +++ /dev/null @@ -1,170 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include "quantum.h" - -#ifdef RGB_MATRIX_ENABLE - -const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { -/* Refer to IS31 manual for these locations - * driver - * | R location - * | | G location - * | | | B location - * | | | | */ - {0, I_1, G_1, H_1}, - {0, I_2, G_2, H_2}, - {0, I_3, G_3, H_3}, - {0, I_4, G_4, H_4}, - {0, I_5, G_5, H_5}, - {0, I_6, G_6, H_6}, - {0, I_7, G_7, H_7}, - {0, I_8, G_8, H_8}, - {0, I_9, G_9, H_9}, - {0, I_10, G_10, H_10}, - {0, I_11, G_11, H_11}, - {0, I_12, G_12, H_12}, - {0, I_13, G_13, H_13}, - {0, I_15, G_15, H_15}, - {0, I_16, G_16, H_16}, - {1, I_15, G_15, H_15}, - - {0, C_1, A_1, B_1}, - {0, C_2, A_2, B_2}, - {0, C_3, A_3, B_3}, - {0, C_4, A_4, B_4}, - {0, C_5, A_5, B_5}, - {0, C_6, A_6, B_6}, - {0, C_7, A_7, B_7}, - {0, C_8, A_8, B_8}, - {0, C_9, A_9, B_9}, - {0, C_10, A_10, B_10}, - {0, C_11, A_11, B_11}, - {0, C_12, A_12, B_12}, - {0, C_13, A_13, B_13}, - {0, C_14, A_14, B_14}, - {0, C_15, A_15, B_15}, - {0, C_16, A_16, B_16}, - {1, I_16, G_16, H_16}, - - {0, F_1, D_1, E_1}, - {0, F_2, D_2, E_2}, - {0, F_3, D_3, E_3}, - {0, F_4, D_4, E_4}, - {0, F_5, D_5, E_5}, - {0, F_6, D_6, E_6}, - {0, F_7, D_7, E_7}, - {0, F_8, D_8, E_8}, - {0, F_9, D_9, E_9}, - {0, F_10, D_10, E_10}, - {0, F_11, D_11, E_11}, - {0, F_12, D_12, E_12}, - {0, F_13, D_13, E_13}, - {0, F_14, D_14, E_14}, - {0, F_15, D_15, E_15}, - {0, F_16, D_16, E_16}, - {1, I_13, G_13, H_13}, - - {1, I_1, G_1, H_1}, - {1, I_2, G_2, H_2}, - {1, I_3, G_3, H_3}, - {1, I_4, G_4, H_4}, - {1, I_5, G_5, H_5}, - {1, I_6, G_6, H_6}, - {1, I_7, G_7, H_7}, - {1, I_8, G_8, H_8}, - {1, I_9, G_9, H_9}, - {1, I_10, G_10, H_10}, - {1, I_11, G_11, H_11}, - {1, I_12, G_12, H_12}, - {1, I_14, G_14, H_14}, - - {1, C_1, A_1, B_1}, - {1, C_3, A_3, B_3}, - {1, C_4, A_4, B_4}, - {1, C_5, A_5, B_5}, - {1, C_6, A_6, B_6}, - {1, C_7, A_7, B_7}, - {1, C_8, A_8, B_8}, - {1, C_9, A_9, B_9}, - {1, C_10, A_10, B_10}, - {1, C_11, A_11, B_11}, - {1, C_12, A_12, B_12}, - {1, C_14, A_14, B_14}, - {1, C_16, A_16, B_16}, - - {1, F_1, D_1, E_1}, - {1, F_2, D_2, E_2}, - {1, F_3, D_3, E_3}, - {1, F_7, D_7, E_7}, - {1, F_11, D_11, E_11}, - {1, F_12, D_12, E_12}, - {1, F_13, D_13, E_13}, - {1, F_14, D_14, E_14}, - {1, F_15, D_15, E_15}, - {1, F_16, D_16, E_16}, - {1, C_15, A_15, B_15}, -}; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, - { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48 }, - { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 49, 62, 15, 32 }, - { 63, __, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, __, 74, 86, 75 }, - { 76, 77, 78, __, __, __, 79, __, __, __, 80, 81, 82, 83, 84, 85 }, - }, - { - // LED Index to Physical Position - {0,0}, {16,0}, {29,0}, {42,0}, {55,0}, {71,0}, {84,0}, {97,0}, {110,0}, {126,0}, {139,0}, {152,0}, {165,0}, {198,0}, {211,0}, {224,0}, - {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {176,15}, {198,15}, {211,15}, {224,15}, - {3,28}, {19,28}, {32,28}, {45,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {179,28}, {198,28}, {211,28}, {224,28}, - {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {174,40}, - {8,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {171,52}, {211,52}, - {2,64}, {18,64}, {34,64}, {83,64}, {131,64}, {148,64}, {164,64}, {180,64}, {198,64}, {211,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - } -}; - -#endif - -#ifdef ENCODER_ENABLE - -bool encoder_update_kb(uint8_t index, bool clockwise) { - if (!encoder_update_user(index, clockwise)) { return false; } - if (index == 0) { - if (clockwise) { - tap_code_delay(KC_VOLU, TAP_CODE_DELAY); - } else { - tap_code_delay(KC_VOLD, TAP_CODE_DELAY); - } - } - return true; -} - -#endif diff --git a/keyboards/keychron/q3/rev_0121/rev_0121.h b/keyboards/keychron/q3/rev_0121/rev_0121.h deleted file mode 100644 index 0de224424b2d..000000000000 --- a/keyboards/keychron/q3/rev_0121/rev_0121.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#pragma once - -#include "quantum.h" - -#define XXX KC_NO - -#define LAYOUT_all( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K57, K0D, K58, K0E, K0F, K3E, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3F, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K3C, \ - K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ - K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ - K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K4E \ - ) { \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ - { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ - { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ - { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ - { K40, XXX, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \ - { K50, K51, K52, XXX, XXX, XXX, K56, K57, K58, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ - } -#define LAYOUT_ansi_87( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K3E, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3F, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K3C, \ - K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ - K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ - K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K4E \ -) { \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ - { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ - { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ - { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ - { K40, XXX, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \ - { K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ -} diff --git a/keyboards/keychron/q3/rev_0121/rules.mk b/keyboards/keychron/q3/rev_0121/rules.mk deleted file mode 100644 index 2c3e6b177e4c..000000000000 --- a/keyboards/keychron/q3/rev_0121/rules.mk +++ /dev/null @@ -1,31 +0,0 @@ -# MCU name -MCU = STM32L433 - -# Bootloader selection -BOOTLOADER = stm32-dfu - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -CONSOLE_ENABLE = no # Console for debug -COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = yes # Enable USB N-key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output -ENCODER_ENABLE = yes # Enable Encoder -DIP_SWITCH_ENABLE = yes -RGB_MATRIX_ENABLE = yes -RGB_MATRIX_DRIVER = CKLED2001 -EEPROM_DRIVER = transient - -# Enter lower-power sleep mode when on the ChibiOS idle thread -OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE - -# custom matrix setup -CUSTOM_MATRIX = lite - -SRC += matrix.c diff --git a/keyboards/keychron/q3/rev_0122/config.h b/keyboards/keychron/q3/rev_0122/config.h deleted file mode 100644 index 045dd05f2aec..000000000000 --- a/keyboards/keychron/q3/rev_0122/config.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#pragma once - -/* USB Device descriptor parameter */ -#define PRODUCT_ID 0x0122 -#define DEVICE_VER 0x0100 - -/* key matrix pins */ -#define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } -#define MATRIX_COL_PINS { C14, C15, A0, A1, A2, A3, A4, A5, A6, A7, B0, B1, A8, A9, A10, H3 } - -/* RGB Matrix Configuration */ -#define DRIVER_1_LED_TOTAL 48 -#define DRIVER_2_LED_TOTAL 40 -#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) - -/* Enable caps-lock LED */ -#define CAPS_LOCK_LED_INDEX 49 diff --git a/keyboards/keychron/q3/rev_0122/info.json b/keyboards/keychron/q3/rev_0122/info.json deleted file mode 100644 index 368c96ef1495..000000000000 --- a/keyboards/keychron/q3/rev_0122/info.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "keyboard_name": "Keychron Q3", - "url": "https://github.com/Keychron", - "maintainer": "lalalademaxiya1", - "layouts": { - "LAYOUT_iso_88": { - "layout": [ - {"label":"Esc", "x":0, "y":0}, - {"label":"F1", "x":2, "y":0}, - {"label":"F2", "x":3, "y":0}, - {"label":"F3", "x":4, "y":0}, - {"label":"F4", "x":5, "y":0}, - {"label":"F5", "x":6.5, "y":0}, - {"label":"F5", "x":7.5, "y":0}, - {"label":"F7", "x":8.5, "y":0}, - {"label":"F8", "x":9.5, "y":0}, - {"label":"F9", "x":11, "y":0}, - {"label":"F10", "x":12, "y":0}, - {"label":"F11", "x":13, "y":0}, - {"label":"F12", "x":14, "y":0}, - {"label":"Print", "x":15.25, "y":0}, - {"label":"Cortana", "x":16.25, "y":0}, - {"label":"Light", "x":17.25, "y":0}, - - {"label":"`~", "x":0, "y":1.25}, - {"label":"1!", "x":1, "y":1.25}, - {"label":"2@", "x":2, "y":1.25}, - {"label":"3#", "x":3, "y":1.25}, - {"label":"4$", "x":4, "y":1.25}, - {"label":"5%", "x":5, "y":1.25}, - {"label":"6^", "x":6, "y":1.25}, - {"label":"7&", "x":7, "y":1.25}, - {"label":"8*", "x":8, "y":1.25}, - {"label":"9(", "x":9, "y":1.25}, - {"label":"0)", "x":10, "y":1.25}, - {"label":"-_", "x":11, "y":1.25}, - {"label":"=+", "x":12, "y":1.25}, - {"label":"Backspace", "x":13, "y":1.25, "w":2}, - {"label":"Insert", "x":15.25, "y":1.25}, - {"label":"Home", "x":16.25, "y":1.25}, - {"label":"Page Up", "x":17.25, "y":1.25}, - - {"label":"Tab", "x":0, "y":2.25, "w":1.5}, - {"label":"Q", "x":1.5, "y":2.25}, - {"label":"W", "x":2.5, "y":2.25}, - {"label":"E", "x":3.5, "y":2.25}, - {"label":"R", "x":4.5, "y":2.25}, - {"label":"T", "x":5.5, "y":2.25}, - {"label":"Y", "x":6.5, "y":2.25}, - {"label":"U", "x":7.5, "y":2.25}, - {"label":"I", "x":8.5, "y":2.25}, - {"label":"O", "x":9.5, "y":2.25}, - {"label":"P", "x":10.5, "y":2.25}, - {"label":"[{", "x":11.5, "y":2.25}, - {"label":"]}", "x":12.5, "y":2.25}, - {"label":"Delete", "x":15.25, "y":2.25}, - {"label":"End", "x":16.25, "y":2.25}, - {"label":"Page Down", "x":17.25, "y":2.25}, - - {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, - {"label":"A", "x":1.75, "y":3.25}, - {"label":"S", "x":2.75, "y":3.25}, - {"label":"D", "x":3.75, "y":3.25}, - {"label":"F", "x":4.75, "y":3.25}, - {"label":"G", "x":5.75, "y":3.25}, - {"label":"H", "x":6.75, "y":3.25}, - {"label":"J", "x":7.75, "y":3.25}, - {"label":"K", "x":8.75, "y":3.25}, - {"label":"L", "x":9.75, "y":3.25}, - {"label":";:", "x":10.75, "y":3.25}, - {"label":"'\"", "x":11.75, "y":3.25}, - {"label":"#~", "x":12.75, "y":3.25}, - {"label":"Enter", "x":13.75, "y":2.25, "w":1.25, "h":2}, - - {"label":"Left Shift", "x":0, "y":4.25, "w":1.25}, - {"label":"\\|", "x":1.25, "y":4.25}, - {"label":"Z", "x":2.25, "y":4.25}, - {"label":"X", "x":3.25, "y":4.25}, - {"label":"C", "x":4.25, "y":4.25}, - {"label":"V", "x":5.25, "y":4.25}, - {"label":"B", "x":6.25, "y":4.25}, - {"label":"N", "x":7.25, "y":4.25}, - {"label":"M", "x":8.25, "y":4.25}, - {"label":",<", "x":9.25, "y":4.25}, - {"label":".>", "x":10.25, "y":4.25}, - {"label":"/?", "x":11.25, "y":4.25}, - {"label":"Right Shift", "x":12.25, "y":4.25, "w":2.75}, - {"label":"Up", "x":16.25, "y":4.25}, - - {"label":"Left Ctrl", "x":0, "y":5.25, "w":1.25}, - {"label":"Left Win", "x":1.25, "y":5.25, "w":1.25}, - {"label":"Left Alt", "x":2.5, "y":5.25, "w":1.25}, - {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, - {"label":"Right Alt", "x":10, "y":5.25, "w":1.25}, - {"label":"Right Win", "x":11.25, "y":5.25, "w":1.25}, - {"label":"Fn", "x":12.5, "y":5.25, "w":1.25}, - {"label":"Right Ctrl", "x":13.75, "y":5.25, "w":1.25}, - {"label":"Left", "x":15.25, "y":5.25}, - {"label":"Down", "x":16.25, "y":5.25}, - {"label":"Right", "x":17.25, "y":5.25} - ] - } - } -} diff --git a/keyboards/keychron/q3/rev_0122/keymaps/default/keymap.c b/keyboards/keychron/q3/rev_0122/keymaps/default/keymap.c deleted file mode 100644 index deb5713c47d8..000000000000 --- a/keyboards/keychron/q3/rev_0122/keymaps/default/keymap.c +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include QMK_KEYBOARD_H - -enum layers{ - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN -}; - -enum custom_keycodes { - KC_MISSION_CONTROL = SAFE_RANGE, - KC_LAUNCHPAD, - KC_LOPTN, - KC_ROPTN, - KC_LCMMD, - KC_RCMMD, - KC_SIRI, - KC_TASK_VIEW, - KC_FILE_EXPLORER, - KC_SCREEN_SHOT, - KC_CORTANA -}; - -#define KC_MCTL KC_MISSION_CONTROL -#define KC_LPAD KC_LAUNCHPAD -#define KC_TASK KC_TASK_VIEW -#define KC_FLXP KC_FILE_EXPLORER -#define KC_SNAP KC_SCREEN_SHOT -#define KC_CRTA KC_CORTANA - -typedef struct PACKED { - uint8_t len; - uint8_t keycode[3]; -} key_combination_t; - -key_combination_t key_comb_list[4] = { - {2, {KC_LWIN, KC_TAB}}, - {2, {KC_LWIN, KC_E}}, - {3, {KC_LSFT, KC_LCMD, KC_4}}, - {2, {KC_LWIN, KC_C}} -}; - -static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_iso_88( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_DEL, KC_END, KC_PGDN, - 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_NUHS, KC_ENT, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [MAC_FN] = LAYOUT_iso_88( - KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), - - [WIN_BASE] = LAYOUT_iso_88( - KC_ESC, 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_PSCR, KC_CRTA, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_DEL, KC_END, KC_PGDN, - 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_NUHS, KC_ENT, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [WIN_FN] = LAYOUT_iso_88( - KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), -}; - -uint16_t prev; -bool siri; - -void matrix_scan_user(void) { - if (siri) { - if (timer_elapsed(prev) >= 500) { - siri = false; - unregister_code(KC_LCMD); - unregister_code(KC_SPACE); - } - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_MISSION_CONTROL: - if (record->event.pressed) { - host_consumer_send(0x29F); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LAUNCHPAD: - if (record->event.pressed) { - host_consumer_send(0x2A0); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LOPTN: - case KC_ROPTN: - case KC_LCMMD: - case KC_RCMMD: - if (record->event.pressed) { - register_code(mac_keycode[keycode - KC_LOPTN]); - } else { - unregister_code(mac_keycode[keycode - KC_LOPTN]); - } - return false; // Skip all further processing of this key - case KC_SIRI: - if (record->event.pressed) { - register_code(KC_LCMD); - register_code(KC_SPACE); - prev = timer_read() | 1; - siri = true; - } else { - // Do something else when release - } - return false; // Skip all further processing of this key - case KC_TASK: - case KC_FLXP: - case KC_SNAP: - case KC_CRTA: - if (record->event.pressed) { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - register_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } else { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } - return false; // Skip all further processing of this key - default: - return true; // Process all other keycodes normally - } -} diff --git a/keyboards/keychron/q3/rev_0122/keymaps/via/keymap.c b/keyboards/keychron/q3/rev_0122/keymaps/via/keymap.c deleted file mode 100644 index 430c189c54df..000000000000 --- a/keyboards/keychron/q3/rev_0122/keymaps/via/keymap.c +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include QMK_KEYBOARD_H - -enum layers{ - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN -}; - -enum custom_keycodes { - KC_MISSION_CONTROL = USER00, - KC_LAUNCHPAD, - KC_LOPTN, - KC_ROPTN, - KC_LCMMD, - KC_RCMMD, - KC_SIRI, - KC_TASK_VIEW, - KC_FILE_EXPLORER, - KC_SCREEN_SHOT, - KC_CORTANA -}; - -#define KC_MCTL KC_MISSION_CONTROL -#define KC_LPAD KC_LAUNCHPAD -#define KC_TASK KC_TASK_VIEW -#define KC_FLXP KC_FILE_EXPLORER -#define KC_SNAP KC_SCREEN_SHOT -#define KC_CRTA KC_CORTANA - -typedef struct PACKED { - uint8_t len; - uint8_t keycode[3]; -} key_combination_t; - -key_combination_t key_comb_list[4] = { - {2, {KC_LWIN, KC_TAB}}, - {2, {KC_LWIN, KC_E}}, - {3, {KC_LSFT, KC_LCMD, KC_4}}, - {2, {KC_LWIN, KC_C}} -}; - -static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_iso_88( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_DEL, KC_END, KC_PGDN, - 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_NUHS, KC_ENT, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [MAC_FN] = LAYOUT_iso_88( - KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), - - [WIN_BASE] = LAYOUT_iso_88( - KC_ESC, 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_PSCR, KC_CRTA, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_DEL, KC_END, KC_PGDN, - 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_NUHS, KC_ENT, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [WIN_FN] = LAYOUT_iso_88( - KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), -}; - -uint16_t prev; -bool siri; - -void matrix_scan_user(void) { - if (siri) { - if (timer_elapsed(prev) >= 500) { - siri = false; - unregister_code(KC_LCMD); - unregister_code(KC_SPACE); - } - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_MISSION_CONTROL: - if (record->event.pressed) { - host_consumer_send(0x29F); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LAUNCHPAD: - if (record->event.pressed) { - host_consumer_send(0x2A0); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LOPTN: - case KC_ROPTN: - case KC_LCMMD: - case KC_RCMMD: - if (record->event.pressed) { - register_code(mac_keycode[keycode - KC_LOPTN]); - } else { - unregister_code(mac_keycode[keycode - KC_LOPTN]); - } - return false; // Skip all further processing of this key - case KC_SIRI: - if (record->event.pressed) { - register_code(KC_LCMD); - register_code(KC_SPACE); - prev = timer_read() | 1; - siri = true; - } else { - // Do something else when release - } - return false; // Skip all further processing of this key - case KC_TASK: - case KC_FLXP: - case KC_SNAP: - case KC_CRTA: - if (record->event.pressed) { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - register_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } else { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } - return false; // Skip all further processing of this key - default: - return true; // Process all other keycodes normally - } -} diff --git a/keyboards/keychron/q3/rev_0122/keymaps/via/rules.mk b/keyboards/keychron/q3/rev_0122/keymaps/via/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/keychron/q3/rev_0122/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/keychron/q3/rev_0122/readme.md b/keyboards/keychron/q3/rev_0122/readme.md deleted file mode 100644 index 69db8ff53268..000000000000 --- a/keyboards/keychron/q3/rev_0122/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The ISO variant of the Keychron Q3 diff --git a/keyboards/keychron/q3/rev_0122/rev_0122.c b/keyboards/keychron/q3/rev_0122/rev_0122.c deleted file mode 100644 index b509c627627f..000000000000 --- a/keyboards/keychron/q3/rev_0122/rev_0122.c +++ /dev/null @@ -1,155 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include "quantum.h" - -#ifdef RGB_MATRIX_ENABLE - -const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { -/* Refer to IS31 manual for these locations - * driver - * | R location - * | | G location - * | | | B location - * | | | | */ - {0, I_1, G_1, H_1}, - {0, I_2, G_2, H_2}, - {0, I_3, G_3, H_3}, - {0, I_4, G_4, H_4}, - {0, I_5, G_5, H_5}, - {0, I_6, G_6, H_6}, - {0, I_7, G_7, H_7}, - {0, I_8, G_8, H_8}, - {0, I_9, G_9, H_9}, - {0, I_10, G_10, H_10}, - {0, I_11, G_11, H_11}, - {0, I_12, G_12, H_12}, - {0, I_13, G_13, H_13}, - {0, I_15, G_15, H_15}, - {0, I_16, G_16, H_16}, - {1, I_15, G_15, H_15}, - - {0, C_1, A_1, B_1}, - {0, C_2, A_2, B_2}, - {0, C_3, A_3, B_3}, - {0, C_4, A_4, B_4}, - {0, C_5, A_5, B_5}, - {0, C_6, A_6, B_6}, - {0, C_7, A_7, B_7}, - {0, C_8, A_8, B_8}, - {0, C_9, A_9, B_9}, - {0, C_10, A_10, B_10}, - {0, C_11, A_11, B_11}, - {0, C_12, A_12, B_12}, - {0, C_13, A_13, B_13}, - {0, C_14, A_14, B_14}, - {0, C_15, A_15, B_15}, - {0, C_16, A_16, B_16}, - {1, I_16, G_16, H_16}, - - {0, F_1, D_1, E_1}, - {0, F_2, D_2, E_2}, - {0, F_3, D_3, E_3}, - {0, F_4, D_4, E_4}, - {0, F_5, D_5, E_5}, - {0, F_6, D_6, E_6}, - {0, F_7, D_7, E_7}, - {0, F_8, D_8, E_8}, - {0, F_9, D_9, E_9}, - {0, F_10, D_10, E_10}, - {0, F_11, D_11, E_11}, - {0, F_12, D_12, E_12}, - {0, F_13, D_13, E_13}, - {0, F_15, D_15, E_15}, - {0, F_16, D_16, E_16}, - {1, I_13, G_13, H_13}, - - {1, I_1, G_1, H_1}, - {1, I_2, G_2, H_2}, - {1, I_3, G_3, H_3}, - {1, I_4, G_4, H_4}, - {1, I_5, G_5, H_5}, - {1, I_6, G_6, H_6}, - {1, I_7, G_7, H_7}, - {1, I_8, G_8, H_8}, - {1, I_9, G_9, H_9}, - {1, I_10, G_10, H_10}, - {1, I_11, G_11, H_11}, - {1, I_12, G_12, H_12}, - {1, I_14, G_14, H_14}, - {0, F_14, D_14, E_14}, - - {1, C_1, A_1, B_1}, - {1, C_2, A_2, B_2}, - {1, C_3, A_3, B_3}, - {1, C_4, A_4, B_4}, - {1, C_5, A_5, B_5}, - {1, C_6, A_6, B_6}, - {1, C_7, A_7, B_7}, - {1, C_8, A_8, B_8}, - {1, C_9, A_9, B_9}, - {1, C_10, A_10, B_10}, - {1, C_11, A_11, B_11}, - {1, C_12, A_12, B_12}, - {1, C_14, A_14, B_14}, - {1, C_16, A_16, B_16}, - - {1, F_1, D_1, E_1}, - {1, F_2, D_2, E_2}, - {1, F_3, D_3, E_3}, - {1, F_7, D_7, E_7}, - {1, F_11, D_11, E_11}, - {1, F_12, D_12, E_12}, - {1, F_13, D_13, E_13}, - {1, F_14, D_14, E_14}, - {1, F_15, D_15, E_15}, - {1, F_16, D_16, E_16}, - {1, C_15, A_15, B_15}, -}; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, - { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 62, 46, 47 }, - { 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 48, 61, 15, 32 }, - { 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, __, 75, 87, 76 }, - { 77, 78, 79, __, __, __, 80, __, __, __, 81, 82, 83, 84, 85, 86 }, - }, - { - // LED Index to Physical Position - {0,0}, {26,0}, {39,0}, {52,0}, {65,0}, {84,0}, {97,0}, {111,0}, {124,0}, {143,0}, {156,0}, {169,0}, {182,0}, {198,0}, {211,0}, {224,0}, - {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {176,15}, {198,15}, {211,15}, {224,15}, - {3,28}, {19,28}, {32,28}, {45,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {198,28}, {211,28}, {224,28}, - {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {166,40}, {183,36}, - {2,52}, {16,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {171,52}, {211,52}, - {2,64}, {18,64}, {34,64}, {83,64}, {131,64}, {148,64}, {164,64}, {180,64}, {198,64}, {211,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - } -}; - -#endif diff --git a/keyboards/keychron/q3/rev_0122/rev_0122.h b/keyboards/keychron/q3/rev_0122/rev_0122.h deleted file mode 100644 index 440764a8e302..000000000000 --- a/keyboards/keychron/q3/rev_0122/rev_0122.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#pragma once - -#include "quantum.h" - -#define XXX KC_NO - -#define LAYOUT_iso_88( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0F, K3E, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3F, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, K2F, K3C, \ - K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K2D, \ - K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ - K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K4E \ -) { \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, XXX, K0E, K0F }, \ - { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ - { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ - { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ - { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \ - { K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ -} diff --git a/keyboards/keychron/q3/rev_0122/rules.mk b/keyboards/keychron/q3/rev_0122/rules.mk deleted file mode 100644 index 26d88a0545bb..000000000000 --- a/keyboards/keychron/q3/rev_0122/rules.mk +++ /dev/null @@ -1,26 +0,0 @@ -# MCU name -MCU = STM32L433 - -# Bootloader selection -BOOTLOADER = stm32-dfu - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -CONSOLE_ENABLE = no # Console for debug -COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = yes # Enable USB N-key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output -ENCODER_ENABLE = no # Enable Encoder -DIP_SWITCH_ENABLE = yes -RGB_MATRIX_ENABLE = yes -RGB_MATRIX_DRIVER = CKLED2001 -EEPROM_DRIVER = transient - -# Enter lower-power sleep mode when on the ChibiOS idle thread -OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/keyboards/keychron/q3/rev_0123/config.h b/keyboards/keychron/q3/rev_0123/config.h deleted file mode 100644 index 3bd04d05b804..000000000000 --- a/keyboards/keychron/q3/rev_0123/config.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#pragma once - -/* USB Device descriptor parameter */ -#define PRODUCT_ID 0x0123 -#define DEVICE_VER 0x0100 - -/* key matrix pins */ -#define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } -#define MATRIX_COL_PINS { C14, C15, A0, A1, A2, A3, A4, A5, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN } - -/* RGB Matrix Configuration */ -#define DRIVER_1_LED_TOTAL 48 -#define DRIVER_2_LED_TOTAL 40 -#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) - -/* Encoder Configuration */ -#define ENCODERS_PAD_A { A10 } -#define ENCODERS_PAD_B { A8 } -#define ENCODER_RESOLUTION 4 -#define ENCODER_DEFAULT_POS 0x3 - -/* Enable caps-lock LED */ -#define CAPS_LOCK_LED_INDEX 49 diff --git a/keyboards/keychron/q3/rev_0123/info.json b/keyboards/keychron/q3/rev_0123/info.json deleted file mode 100644 index f3a379591295..000000000000 --- a/keyboards/keychron/q3/rev_0123/info.json +++ /dev/null @@ -1,205 +0,0 @@ -{ - "keyboard_name": "Keychron Q3", - "url": "https://github.com/Keychron", - "maintainer": "lalalademaxiya1", - "layouts": { - "LAYOUT_iso_88": { - "layout": [ - {"label":"Esc", "x":0, "y":0}, - {"label":"F1", "x":1.25, "y":0}, - {"label":"F2", "x":2.25, "y":0}, - {"label":"F3", "x":3.25, "y":0}, - {"label":"F4", "x":4.25, "y":0}, - {"label":"F5", "x":5.5, "y":0}, - {"label":"F5", "x":6.5, "y":0}, - {"label":"F7", "x":7.5, "y":0}, - {"label":"F8", "x":8.5, "y":0}, - {"label":"F9", "x":9.75, "y":0}, - {"label":"F10", "x":10.75, "y":0}, - {"label":"F11", "x":11.75, "y":0}, - {"label":"F12", "x":12.75, "y":0}, - {"label":"Mute", "x":14, "y":0}, - {"label":"Print", "x":15.75, "y":0}, - {"label":"Cortana", "x":16.75, "y":0}, - {"label":"Light", "x":17.75, "y":0}, - - {"label":"`~", "x":0, "y":1.25}, - {"label":"1!", "x":1, "y":1.25}, - {"label":"2@", "x":2, "y":1.25}, - {"label":"3#", "x":3, "y":1.25}, - {"label":"4$", "x":4, "y":1.25}, - {"label":"5%", "x":5, "y":1.25}, - {"label":"6^", "x":6, "y":1.25}, - {"label":"7&", "x":7, "y":1.25}, - {"label":"8*", "x":8, "y":1.25}, - {"label":"9(", "x":9, "y":1.25}, - {"label":"0)", "x":10, "y":1.25}, - {"label":"-_", "x":11, "y":1.25}, - {"label":"=+", "x":12, "y":1.25}, - {"label":"Backspace", "x":13, "y":1.25, "w":2}, - {"label":"Insert", "x":15.25, "y":1.25}, - {"label":"Home", "x":16.25, "y":1.25}, - {"label":"Page Up", "x":17.25, "y":1.25}, - - {"label":"Tab", "x":0, "y":2.25, "w":1.5}, - {"label":"Q", "x":1.5, "y":2.25}, - {"label":"W", "x":2.5, "y":2.25}, - {"label":"E", "x":3.5, "y":2.25}, - {"label":"R", "x":4.5, "y":2.25}, - {"label":"T", "x":5.5, "y":2.25}, - {"label":"Y", "x":6.5, "y":2.25}, - {"label":"U", "x":7.5, "y":2.25}, - {"label":"I", "x":8.5, "y":2.25}, - {"label":"O", "x":9.5, "y":2.25}, - {"label":"P", "x":10.5, "y":2.25}, - {"label":"[{", "x":11.5, "y":2.25}, - {"label":"]}", "x":12.5, "y":2.25}, - {"label":"Delete", "x":15.25, "y":2.25}, - {"label":"End", "x":16.25, "y":2.25}, - {"label":"Page Down", "x":17.25, "y":2.25}, - - {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, - {"label":"A", "x":1.75, "y":3.25}, - {"label":"S", "x":2.75, "y":3.25}, - {"label":"D", "x":3.75, "y":3.25}, - {"label":"F", "x":4.75, "y":3.25}, - {"label":"G", "x":5.75, "y":3.25}, - {"label":"H", "x":6.75, "y":3.25}, - {"label":"J", "x":7.75, "y":3.25}, - {"label":"K", "x":8.75, "y":3.25}, - {"label":"L", "x":9.75, "y":3.25}, - {"label":";:", "x":10.75, "y":3.25}, - {"label":"'\"", "x":11.75, "y":3.25}, - {"label":"#~", "x":12.75, "y":3.25}, - {"label":"Enter", "x":13.75, "y":2.25, "w":1.25, "h":2}, - - {"label":"Left Shift", "x":0, "y":4.25, "w":1.25}, - {"label":"\\|", "x":1.25, "y":4.25}, - {"label":"Z", "x":2.25, "y":4.25}, - {"label":"X", "x":3.25, "y":4.25}, - {"label":"C", "x":4.25, "y":4.25}, - {"label":"V", "x":5.25, "y":4.25}, - {"label":"B", "x":6.25, "y":4.25}, - {"label":"N", "x":7.25, "y":4.25}, - {"label":"M", "x":8.25, "y":4.25}, - {"label":",<", "x":9.25, "y":4.25}, - {"label":".>", "x":10.25, "y":4.25}, - {"label":"/?", "x":11.25, "y":4.25}, - {"label":"Right Shift", "x":12.25, "y":4.25, "w":2.75}, - {"label":"Up", "x":16.25, "y":4.25}, - - {"label":"Left Ctrl", "x":0, "y":5.25, "w":1.25}, - {"label":"Left Win", "x":1.25, "y":5.25, "w":1.25}, - {"label":"Left Alt", "x":2.5, "y":5.25, "w":1.25}, - {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, - {"label":"Right Alt", "x":10, "y":5.25, "w":1.25}, - {"label":"Right Win", "x":11.25, "y":5.25, "w":1.25}, - {"label":"Fn", "x":12.5, "y":5.25, "w":1.25}, - {"label":"Right Ctrl", "x":13.75, "y":5.25, "w":1.25}, - {"label":"Left", "x":15.25, "y":5.25}, - {"label":"Down", "x":16.25, "y":5.25}, - {"label":"Right", "x":17.25, "y":5.25} - ] - }, - "LAYOUT_all": { - "layout": [ - {"label":"Esc", "x":0, "y":0.5}, - {"label":"F1", "x":1.25, "y":0.5}, - {"label":"F2", "x":2.25, "y":0.5}, - {"label":"F3", "x":3.25, "y":0.5}, - {"label":"F4", "x":4.25, "y":0.5}, - {"label":"F5", "x":5.5, "y":0.5}, - {"label":"F5", "x":6.5, "y":0.5}, - {"label":"F7", "x":7.5, "y":0.5}, - {"label":"F8", "x":8.5, "y":0.5}, - {"label":"F9", "x":9.75, "y":0.5}, - {"label":"F10", "x":10.75, "y":0.5}, - {"label":"F11", "x":11.75, "y":0.5}, - {"label":"F12", "x":12.75, "y":0.5}, - {"label":"CCW", "x":13.9, "y":0, "w":0.6, "h":0.5}, - {"label":"Mute", "x":14, "y":0.5}, - {"label":"CW", "x":14.5, "y":0, "w":0.6, "h":0.5}, - {"label":"Print", "x":15.75, "y":0.5}, - {"label":"Cortana", "x":16.75, "y":0.5}, - {"label":"Light", "x":17.75, "y":0.5}, - - {"label":"`~", "x":0, "y":1.75}, - {"label":"1!", "x":1, "y":1.75}, - {"label":"2@", "x":2, "y":1.75}, - {"label":"3#", "x":3, "y":1.75}, - {"label":"4$", "x":4, "y":1.75}, - {"label":"5%", "x":5, "y":1.75}, - {"label":"6^", "x":6, "y":1.75}, - {"label":"7&", "x":7, "y":1.75}, - {"label":"8*", "x":8, "y":1.75}, - {"label":"9(", "x":9, "y":1.75}, - {"label":"0)", "x":10, "y":1.75}, - {"label":"-_", "x":11, "y":1.75}, - {"label":"=+", "x":12, "y":1.75}, - {"label":"Backspace", "x":13, "y":1.75, "w":2}, - {"label":"Insert", "x":15.75, "y":1.75}, - {"label":"Home", "x":16.75, "y":1.75}, - {"label":"Page Up", "x":17.75, "y":1.75}, - - {"label":"Tab", "x":0, "y":2.75, "w":1.5}, - {"label":"Q", "x":1.5, "y":2.75}, - {"label":"W", "x":2.5, "y":2.75}, - {"label":"E", "x":3.5, "y":2.75}, - {"label":"R", "x":4.5, "y":2.75}, - {"label":"T", "x":5.5, "y":2.75}, - {"label":"Y", "x":6.5, "y":2.75}, - {"label":"U", "x":7.5, "y":2.75}, - {"label":"I", "x":8.5, "y":2.75}, - {"label":"O", "x":9.5, "y":2.75}, - {"label":"P", "x":10.5, "y":2.75}, - {"label":"[{", "x":11.5, "y":2.75}, - {"label":"]}", "x":12.5, "y":2.75}, - {"label":"Delete", "x":15.75, "y":2.75}, - {"label":"End", "x":16.75, "y":2.75}, - {"label":"Page Down", "x":17.75, "y":2.75}, - - {"label":"Caps Lock", "x":0, "y":3.75, "w":1.75}, - {"label":"A", "x":1.75, "y":3.75}, - {"label":"S", "x":2.75, "y":3.75}, - {"label":"D", "x":3.75, "y":3.75}, - {"label":"F", "x":4.75, "y":3.75}, - {"label":"G", "x":5.75, "y":3.75}, - {"label":"H", "x":6.75, "y":3.75}, - {"label":"J", "x":7.75, "y":3.75}, - {"label":"K", "x":8.75, "y":3.75}, - {"label":"L", "x":9.75, "y":3.75}, - {"label":";:", "x":10.75, "y":3.75}, - {"label":"'\"", "x":11.75, "y":3.75}, - {"label":"#~", "x":12.75, "y":3.75}, - {"label":"Enter", "x":13.75, "y":2.75, "w":1.25, "h":2}, - - {"label":"Left Shift", "x":0, "y":4.25, "w":1.25}, - {"label":"\\|", "x":1.25, "y":4.25}, - {"label":"Z", "x":2.25, "y":4.25}, - {"label":"X", "x":3.25, "y":4.25}, - {"label":"C", "x":4.25, "y":4.25}, - {"label":"V", "x":5.25, "y":4.25}, - {"label":"B", "x":6.25, "y":4.25}, - {"label":"N", "x":7.25, "y":4.25}, - {"label":"M", "x":8.25, "y":4.25}, - {"label":",<", "x":9.25, "y":4.25}, - {"label":".>", "x":10.25, "y":4.25}, - {"label":"/?", "x":11.25, "y":4.25}, - {"label":"Right Shift", "x":12.25, "y":4.25, "w":2.75}, - {"label":"Up", "x":16.25, "y":4.25}, - - {"label":"Left Ctrl", "x":0, "y":5.75, "w":1.25}, - {"label":"Left Win", "x":1.25, "y":5.75, "w":1.25}, - {"label":"Left Alt", "x":2.5, "y":5.75, "w":1.25}, - {"label":"Space", "x":3.75, "y":5.75, "w":6.25}, - {"label":"Right Alt", "x":10, "y":5.75, "w":1.25}, - {"label":"Right Win", "x":11.25, "y":5.75, "w":1.25}, - {"label":"Fn", "x":12.5, "y":5.75, "w":1.25}, - {"label":"Right Ctrl", "x":13.75, "y":5.75, "w":1.25}, - {"label":"Left", "x":15.75, "y":5.75}, - {"label":"Down", "x":16.75, "y":5.75}, - {"label":"Right", "x":17.75, "y":5.75} - ] - } - } -} diff --git a/keyboards/keychron/q3/rev_0123/keymaps/default/keymap.c b/keyboards/keychron/q3/rev_0123/keymaps/default/keymap.c deleted file mode 100644 index e51a4df56360..000000000000 --- a/keyboards/keychron/q3/rev_0123/keymaps/default/keymap.c +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include QMK_KEYBOARD_H - -enum layers{ - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN -}; - -enum custom_keycodes { - KC_MISSION_CONTROL = SAFE_RANGE, - KC_LAUNCHPAD, - KC_LOPTN, - KC_ROPTN, - KC_LCMMD, - KC_RCMMD, - KC_SIRI, - KC_TASK_VIEW, - KC_FILE_EXPLORER, - KC_SCREEN_SHOT, - KC_CORTANA -}; - -#define KC_MCTL KC_MISSION_CONTROL -#define KC_LPAD KC_LAUNCHPAD -#define KC_TASK KC_TASK_VIEW -#define KC_FLXP KC_FILE_EXPLORER -#define KC_SNAP KC_SCREEN_SHOT -#define KC_CRTA KC_CORTANA - -typedef struct PACKED { - uint8_t len; - uint8_t keycode[3]; -} key_combination_t; - -key_combination_t key_comb_list[4] = { - {2, {KC_LWIN, KC_TAB}}, - {2, {KC_LWIN, KC_E}}, - {3, {KC_LSFT, KC_LCMD, KC_4}}, - {2, {KC_LWIN, KC_C}} -}; - -static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_iso_88( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_SNAP, KC_SIRI, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_DEL, KC_END, KC_PGDN, - 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_NUHS, KC_ENT, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [MAC_FN] = LAYOUT_iso_88( - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, KC_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), - - [WIN_BASE] = LAYOUT_iso_88( - KC_ESC, 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_MUTE, KC_PSCR, KC_CRTA, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_DEL, KC_END, KC_PGDN, - 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_NUHS, KC_ENT, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [WIN_FN] = LAYOUT_iso_88( - KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_TOG, KC_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), -}; - -uint16_t prev; -bool siri; - -void matrix_scan_user(void) { - if (siri) { - if (timer_elapsed(prev) >= 500) { - siri = false; - unregister_code(KC_LCMD); - unregister_code(KC_SPACE); - } - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_MISSION_CONTROL: - if (record->event.pressed) { - host_consumer_send(0x29F); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LAUNCHPAD: - if (record->event.pressed) { - host_consumer_send(0x2A0); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LOPTN: - case KC_ROPTN: - case KC_LCMMD: - case KC_RCMMD: - if (record->event.pressed) { - register_code(mac_keycode[keycode - KC_LOPTN]); - } else { - unregister_code(mac_keycode[keycode - KC_LOPTN]); - } - return false; // Skip all further processing of this key - case KC_SIRI: - if (record->event.pressed) { - register_code(KC_LCMD); - register_code(KC_SPACE); - prev = timer_read() | 1;; - siri = true; - } else { - // Do something else when release - } - return false; // Skip all further processing of this key - case KC_TASK: - case KC_FLXP: - case KC_SNAP: - case KC_CRTA: - if (record->event.pressed) { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - register_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } else { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } - return false; // Skip all further processing of this key - default: - return true; // Process all other keycodes normally - } -} diff --git a/keyboards/keychron/q3/rev_0123/keymaps/via/keymap.c b/keyboards/keychron/q3/rev_0123/keymaps/via/keymap.c deleted file mode 100644 index 8653d0e98e47..000000000000 --- a/keyboards/keychron/q3/rev_0123/keymaps/via/keymap.c +++ /dev/null @@ -1,202 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include QMK_KEYBOARD_H - -enum layers{ - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN -}; - -enum custom_keycodes { - KC_MISSION_CONTROL = USER00, - KC_LAUNCHPAD, - KC_LOPTN, - KC_ROPTN, - KC_LCMMD, - KC_RCMMD, - KC_SIRI, - KC_TASK_VIEW, - KC_FILE_EXPLORER, - KC_SCREEN_SHOT, - KC_CORTANA -}; - -#define KC_MCTL KC_MISSION_CONTROL -#define KC_LPAD KC_LAUNCHPAD -#define KC_TASK KC_TASK_VIEW -#define KC_FLXP KC_FILE_EXPLORER -#define KC_SNAP KC_SCREEN_SHOT -#define KC_CRTA KC_CORTANA - -typedef struct PACKED { - uint8_t len; - uint8_t keycode[3]; -} key_combination_t; - -key_combination_t key_comb_list[4] = { - {2, {KC_LWIN, KC_TAB}}, - {2, {KC_LWIN, KC_E}}, - {3, {KC_LSFT, KC_LCMD, KC_4}}, - {2, {KC_LWIN, KC_C}} -}; - -static uint8_t mac_keycode[4] = { KC_LOPT, KC_ROPT, KC_LCMD, KC_RCMD }; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_all( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_VOLD, KC_MUTE, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_DEL, KC_END, KC_PGDN, - 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_NUHS, KC_ENT, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN,MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [MAC_FN] = LAYOUT_all( - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_VAD, RGB_TOG, RGB_VAI, KC_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), - - [WIN_BASE] = LAYOUT_all( - KC_ESC, 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_VOLD, KC_MUTE, KC_VOLU, KC_PSCR, KC_CRTA, RGB_MOD, - KC_GRV, 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_INS, KC_HOME, KC_PGUP, - 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_DEL, KC_END, KC_PGDN, - 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_NUHS, KC_ENT, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - [WIN_FN] = LAYOUT_all( - KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_VAD, RGB_TOG, RGB_VAI, KC_TRNS, KC_TRNS, RGB_TOG, - 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, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, 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), -}; - -uint16_t prev; -bool siri; - -#if defined(VIA_ENABLE) && defined(ENCODER_ENABLE) - -#define ENCODERS 1 -static uint8_t encoder_state[ENCODERS] = {0}; -static keypos_t encoder_cw[ENCODERS] = {{ 8, 5 }}; -static keypos_t encoder_ccw[ENCODERS] = {{ 7, 5 }}; - -void encoder_action_unregister(void) { - for (int index = 0; index < ENCODERS; ++index) { - if (encoder_state[index]) { - keyevent_t encoder_event = (keyevent_t) { - .key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], - .pressed = false, - .time = (timer_read() | 1) - }; - encoder_state[index] = 0; - action_exec(encoder_event); - } - } -} - -void encoder_action_register(uint8_t index, bool clockwise) { - keyevent_t encoder_event = (keyevent_t) { - .key = clockwise ? encoder_cw[index] : encoder_ccw[index], - .pressed = true, - .time = (timer_read() | 1) - }; - encoder_state[index] = (clockwise ^ 1) | (clockwise << 1); - action_exec(encoder_event); -} - -bool encoder_update_user(uint8_t index, bool clockwise) { - encoder_action_register(index, clockwise); - return false; -}; - -#endif - -void matrix_scan_user(void) { - if (siri) { - if (timer_elapsed(prev) >= 500) { - siri = false; - unregister_code(KC_LCMD); - unregister_code(KC_SPACE); - } - } -#if defined(VIA_ENABLE) && defined(ENCODER_ENABLE) - encoder_action_unregister(); -#endif -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_MISSION_CONTROL: - if (record->event.pressed) { - host_consumer_send(0x29F); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LAUNCHPAD: - if (record->event.pressed) { - host_consumer_send(0x2A0); - } else { - host_consumer_send(0); - } - return false; // Skip all further processing of this key - case KC_LOPTN: - case KC_ROPTN: - case KC_LCMMD: - case KC_RCMMD: - if (record->event.pressed) { - register_code(mac_keycode[keycode - KC_LOPTN]); - } else { - unregister_code(mac_keycode[keycode - KC_LOPTN]); - } - return false; // Skip all further processing of this key - case KC_SIRI: - if (record->event.pressed) { - register_code(KC_LCMD); - register_code(KC_SPACE); - prev = timer_read() | 1; - siri = true; - } else { - // Do something else when release - } - return false; // Skip all further processing of this key - case KC_TASK: - case KC_FLXP: - case KC_SNAP: - case KC_CRTA: - if (record->event.pressed) { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - register_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } else { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } - return false; // Skip all further processing of this key - default: - return true; // Process all other keycodes normally - } -} diff --git a/keyboards/keychron/q3/rev_0123/keymaps/via/rules.mk b/keyboards/keychron/q3/rev_0123/keymaps/via/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/keychron/q3/rev_0123/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/keychron/q3/rev_0123/readme.md b/keyboards/keychron/q3/rev_0123/readme.md deleted file mode 100644 index fe903e689da8..000000000000 --- a/keyboards/keychron/q3/rev_0123/readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# The ISO variant of the Keychron Q3 - -- Enable EC11 rotary encoder. -- Turn colckwise to increase volume and turn anti-colckwise to decrease volume. -- Press top right key pushbutton to mute. diff --git a/keyboards/keychron/q3/rev_0123/rev_0123.c b/keyboards/keychron/q3/rev_0123/rev_0123.c deleted file mode 100644 index b1094d4006cb..000000000000 --- a/keyboards/keychron/q3/rev_0123/rev_0123.c +++ /dev/null @@ -1,171 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#include "quantum.h" - -#ifdef RGB_MATRIX_ENABLE - -const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { -/* Refer to IS31 manual for these locations - * driver - * | R location - * | | G location - * | | | B location - * | | | | */ - {0, I_1, G_1, H_1}, - {0, I_2, G_2, H_2}, - {0, I_3, G_3, H_3}, - {0, I_4, G_4, H_4}, - {0, I_5, G_5, H_5}, - {0, I_6, G_6, H_6}, - {0, I_7, G_7, H_7}, - {0, I_8, G_8, H_8}, - {0, I_9, G_9, H_9}, - {0, I_10, G_10, H_10}, - {0, I_11, G_11, H_11}, - {0, I_12, G_12, H_12}, - {0, I_13, G_13, H_13}, - {0, I_15, G_15, H_15}, - {0, I_16, G_16, H_16}, - {1, I_15, G_15, H_15}, - - {0, C_1, A_1, B_1}, - {0, C_2, A_2, B_2}, - {0, C_3, A_3, B_3}, - {0, C_4, A_4, B_4}, - {0, C_5, A_5, B_5}, - {0, C_6, A_6, B_6}, - {0, C_7, A_7, B_7}, - {0, C_8, A_8, B_8}, - {0, C_9, A_9, B_9}, - {0, C_10, A_10, B_10}, - {0, C_11, A_11, B_11}, - {0, C_12, A_12, B_12}, - {0, C_13, A_13, B_13}, - {0, C_14, A_14, B_14}, - {0, C_15, A_15, B_15}, - {0, C_16, A_16, B_16}, - {1, I_16, G_16, H_16}, - - {0, F_1, D_1, E_1}, - {0, F_2, D_2, E_2}, - {0, F_3, D_3, E_3}, - {0, F_4, D_4, E_4}, - {0, F_5, D_5, E_5}, - {0, F_6, D_6, E_6}, - {0, F_7, D_7, E_7}, - {0, F_8, D_8, E_8}, - {0, F_9, D_9, E_9}, - {0, F_10, D_10, E_10}, - {0, F_11, D_11, E_11}, - {0, F_12, D_12, E_12}, - {0, F_13, D_13, E_13}, - {0, F_15, D_15, E_15}, - {0, F_16, D_16, E_16}, - {1, I_13, G_13, H_13}, - - {1, I_1, G_1, H_1}, - {1, I_2, G_2, H_2}, - {1, I_3, G_3, H_3}, - {1, I_4, G_4, H_4}, - {1, I_5, G_5, H_5}, - {1, I_6, G_6, H_6}, - {1, I_7, G_7, H_7}, - {1, I_8, G_8, H_8}, - {1, I_9, G_9, H_9}, - {1, I_10, G_10, H_10}, - {1, I_11, G_11, H_11}, - {1, I_12, G_12, H_12}, - {1, I_14, G_14, H_14}, - {0, F_14, D_14, E_14}, - - {1, C_1, A_1, B_1}, - {1, C_2, A_2, B_2}, - {1, C_3, A_3, B_3}, - {1, C_4, A_4, B_4}, - {1, C_5, A_5, B_5}, - {1, C_6, A_6, B_6}, - {1, C_7, A_7, B_7}, - {1, C_8, A_8, B_8}, - {1, C_9, A_9, B_9}, - {1, C_10, A_10, B_10}, - {1, C_11, A_11, B_11}, - {1, C_12, A_12, B_12}, - {1, C_14, A_14, B_14}, - {1, C_16, A_16, B_16}, - - {1, F_1, D_1, E_1}, - {1, F_2, D_2, E_2}, - {1, F_3, D_3, E_3}, - {1, F_7, D_7, E_7}, - {1, F_11, D_11, E_11}, - {1, F_12, D_12, E_12}, - {1, F_13, D_13, E_13}, - {1, F_14, D_14, E_14}, - {1, F_15, D_15, E_15}, - {1, F_16, D_16, E_16}, - {1, C_15, A_15, B_15}, -}; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, - { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 62, 46, 47 }, - { 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 48, 61, 15, 32 }, - { 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, __, 75, 87, 76 }, - { 77, 78, 79, __, __, __, 80, __, __, __, 81, 82, 83, 84, 85, 86 }, - }, - { - // LED Index to Physical Position - {0,0}, {16,0}, {29,0}, {42,0}, {55,0}, {71,0}, {84,0}, {97,0}, {110,0}, {126,0}, {139,0}, {152,0}, {165,0}, {198,0}, {211,0}, {224,0}, - {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {176,15}, {198,15}, {211,15}, {224,15}, - {3,28}, {19,28}, {32,28}, {45,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {198,28}, {211,28}, {224,28}, - {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {166,40}, {183,36}, - {2,52}, {16,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {171,52}, {211,52}, - {2,64}, {18,64}, {34,64}, {83,64}, {131,64}, {148,64}, {164,64}, {180,64}, {198,64}, {211,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - } -}; - -#endif - -#ifdef ENCODER_ENABLE - -bool encoder_update_kb(uint8_t index, bool clockwise) { - if (!encoder_update_user(index, clockwise)) { return false; } - if (index == 0) { - if (clockwise) { - tap_code_delay(KC_VOLU, TAP_CODE_DELAY); - } else { - tap_code_delay(KC_VOLD, TAP_CODE_DELAY); - } - } - return true; -} - -#endif diff --git a/keyboards/keychron/q3/rev_0123/rev_0123.h b/keyboards/keychron/q3/rev_0123/rev_0123.h deleted file mode 100644 index 54f6aa2188a0..000000000000 --- a/keyboards/keychron/q3/rev_0123/rev_0123.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.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 . - */ - -#pragma once - -#include "quantum.h" - -#define XXX KC_NO - -#define LAYOUT_iso_88( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K3E, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3F, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, K2F, K3C, \ - K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K2D, \ - K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ - K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K4E \ -) { \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ - { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ - { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ - { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ - { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \ - { K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ -} -#define LAYOUT_all( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K57, K0D, K58, K0E, K0F, K3E, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K3F, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, K2F, K3C, \ - K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K2D, \ - K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ - K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K4E \ -) { \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ - { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ - { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ - { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ - { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \ - { K50, K51, K52, XXX, XXX, XXX, K56, K57, K58, XXX, K5A, K5B, K5C, K5D, K5E, K5F } \ -} diff --git a/keyboards/keychron/q3/rev_0123/rules.mk b/keyboards/keychron/q3/rev_0123/rules.mk deleted file mode 100644 index 2c3e6b177e4c..000000000000 --- a/keyboards/keychron/q3/rev_0123/rules.mk +++ /dev/null @@ -1,31 +0,0 @@ -# MCU name -MCU = STM32L433 - -# Bootloader selection -BOOTLOADER = stm32-dfu - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -CONSOLE_ENABLE = no # Console for debug -COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = yes # Enable USB N-key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output -ENCODER_ENABLE = yes # Enable Encoder -DIP_SWITCH_ENABLE = yes -RGB_MATRIX_ENABLE = yes -RGB_MATRIX_DRIVER = CKLED2001 -EEPROM_DRIVER = transient - -# Enter lower-power sleep mode when on the ChibiOS idle thread -OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE - -# custom matrix setup -CUSTOM_MATRIX = lite - -SRC += matrix.c From 992face782c32a816c74e045c5ef6a38441d47c8 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Wed, 13 Apr 2022 12:50:17 -0400 Subject: [PATCH 148/155] Updated firmware file and various files. --- .../solartempest/aleblazer_zodiark_solartempest.hex | 4 ++-- .../aleblazer/zodiark/keymaps/solartempest/config.h | 1 + .../aleblazer/zodiark/keymaps/solartempest/keymap.c | 12 +++++++----- .../aleblazer/zodiark/keymaps/solartempest/oled.c | 12 ++++++++---- .../keymaps/solartempest/zodiark VIA layout.json | 4 ++-- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex b/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex index 400e04fe82d7..9d2471689c5c 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/aleblazer_zodiark_solartempest.hex @@ -496,7 +496,7 @@ :101EF000DF90CF90BF90AF909F908F907F906F902A :101F00000895CF93C82F6FEF811162E283E290E0D2 :101F10000E941B336FEFC11162E084E290E00E94E7 -:101F20001B336FEFC11169E085E290E0CF910C9413 +:101F20001B336FEFC11169E185E290E0CF910C9412 :101F30001B3380E00E94810F60E086E290E00E9407 :101F40001B330E942E0F0E941E0F81E00C94810F04 :101F50000F931F93CF93DF9320E1629FE001112441 @@ -519,7 +519,7 @@ :10206000E1F380E00895883EC0F3813FD1F7F5CFDA :10207000822F869586958695089583E290E00E944A :102080000733823289F484E290E00E940733823081 -:1020900059F485E290E00E94073391E0893009F01D +:1020900059F485E290E00E94073391E0893109F01C :1020A00090E0892F8170089580E0FCCFCF9384E089 :1020B00090E00E940733C82F82E290E00E9407332D :1020C000982F8C2FCF9108951F93CF93DF93CDB787 diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h index 015d6810e380..5c897d91d659 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/config.h @@ -60,6 +60,7 @@ along with this program. If not, see . #ifdef RGBLIGHT_ENABLE #undef RGBLIGHT_ANIMATIONS // Very memory intensive (+2604) #define RGBLIGHT_EFFECT_STATIC_GRADIENT //Preferred RGB effect (+262) + //#define RGBLIGHT_EFFECT_BREATHING //Testing //#define RGBLIGHT_EFFECT_SNAKE //For testing LED order #define RGBLIGHT_SLEEP //Turn off LEDs when computer sleeping (+72) #endif diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c index 10e5b3431bd0..e2c4c94cbf8c 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/keymap.c @@ -132,7 +132,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef POINTING_DEVICE_ENABLE void run_trackball_cleanup(void) { //Set colour of trackball LED. Does not require RGBLIGHT_ENABLE if colour shorthands are not used. - #ifdef POINTING_DEVICE_ENABLE if (trackball_is_scrolling) { pimoroni_trackball_set_rgbw(217, 165, 33, 0x00); //RGB_GOLDENROD in number form. //pimoroni_trackball_set_rgbw(43, 153, 103, 0x00); @@ -142,7 +141,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //pimoroni_trackball_set_rgbw(217, 165, 33, 0x00); //RGB_GOLDENROD in number form. pimoroni_trackball_set_rgbw(43, 153, 103, 0x00); } - #endif } uint8_t pointing_device_handle_buttons(uint8_t buttons, bool pressed, pointing_device_buttons_t button) { @@ -214,9 +212,12 @@ void matrix_scan_user(void) { #ifdef ENCODER_ENABLE encoder_action_unregister(); #endif - if (timer_elapsed32(oled_timer) > 60000) { //60000ms = 60s - pimoroni_trackball_set_rgbw(0,0,0, 0x00); //Turn off Pimoroni trackball LED when computer is idle for 1 minute. Would use suspend_power_down_user but the code is not working. - } + + #ifdef POINTING_DEVICE_ENABLE + if (timer_elapsed32(oled_timer) > 60000) { //60000ms = 60s + pimoroni_trackball_set_rgbw(0,0,0, 0x00); //Turn off Pimoroni trackball LED when computer is idle for 1 minute. Would use suspend_power_down_user but the code is not working. + } + #endif } @@ -508,6 +509,7 @@ void keyboard_post_init_user(void) { #ifdef RGBLIGHT_ENABLE rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT+8); //Set to static gradient 9 + //rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING); //Test #endif layer_move(0); //Start on layer0 by default to set LED colours. Can remove to save a very small amount of space. #ifdef POINTING_DEVICE_ENABLE diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/oled.c b/keyboards/aleblazer/zodiark/keymaps/solartempest/oled.c index 8642bacb0548..20ed75e40580 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/oled.c +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/oled.c @@ -13,6 +13,8 @@ along with this program. If not, see . */ #ifdef OLED_ENABLE +uint32_t oled_timer = 0; //OLED timeout +led_t led_usb_state; static void render_logo(void) { static const char PROGMEM qmk_logo[] = { @@ -61,10 +63,12 @@ static void print_status_narrow(void) { } oled_rotation_t oled_init_user(oled_rotation_t rotation) { - if (is_keyboard_master()) { - return OLED_ROTATION_90; - } - return rotation; + if (is_keyboard_master()) { + return OLED_ROTATION_90; + } + else{ + return OLED_ROTATION_270; + } } bool oled_task_user(void) { diff --git a/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json index f21cb514c9eb..cc01d354cdb2 100644 --- a/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json +++ b/keyboards/aleblazer/zodiark/keymaps/solartempest/zodiark VIA layout.json @@ -92,7 +92,7 @@ "KC_2", "KC_3", "KC_G", - "KC_T", + "KC_MS_BTN1", "KC_S", "KC_F12", "KC_ESC", @@ -100,7 +100,7 @@ "KC_W", "KC_E", "KC_R", - "KC_G", + "KC_MS_BTN2", "KC_C", "KC_TAB", "KC_TAB", From 30e36883bc05f63867c8a20e69c1f2e2e219bc41 Mon Sep 17 00:00:00 2001 From: solartempest <82990256+solartempest@users.noreply.github.com> Date: Wed, 13 Apr 2022 12:57:36 -0400 Subject: [PATCH 149/155] Removed haptic feedback by default. Functionality still can be enabled. --- keyboards/solartempest/sofle/config.h | 2 +- keyboards/solartempest/sofle/rules.mk | 2 +- .../sofle/solartempest_sofle_via.hex | 2985 ++++++++--------- 3 files changed, 1453 insertions(+), 1536 deletions(-) diff --git a/keyboards/solartempest/sofle/config.h b/keyboards/solartempest/sofle/config.h index 5bc9ee2ad549..c9b3d0025bbb 100644 --- a/keyboards/solartempest/sofle/config.h +++ b/keyboards/solartempest/sofle/config.h @@ -123,7 +123,7 @@ // Pimoroni trackball settings #ifdef POINTING_DEVICE_ENABLE //#define PIMORONI_TRACKBALL_INTERVAL_MS 6 //Default is 8ms - //#define PIMORONI_TRACKBALL_ROTATE //Change according to your particular installed trackball orientation. + #define PIMORONI_TRACKBALL_ROTATE //Change according to your particular installed trackball orientation. #define PIMORONI_TRACKBALL_INVERT_Y #define PIMORONI_TRACKBALL_INVERT_X #endif diff --git a/keyboards/solartempest/sofle/rules.mk b/keyboards/solartempest/sofle/rules.mk index 9d29739aae44..e315f80465f5 100644 --- a/keyboards/solartempest/sofle/rules.mk +++ b/keyboards/solartempest/sofle/rules.mk @@ -27,5 +27,5 @@ WPM_ENABLE = no # WPM counter for typing-speed-reactive keyboard pets (+782) POINTING_DEVICE_ENABLE = yes # Enable Pimoroni Trackball on master (+2304) POINTING_DEVICE_DRIVER = pimoroni_trackball -HAPTIC_ENABLE = yes # Enable Pimoroni Haptic Bzzz LRA (+1192) +HAPTIC_ENABLE = no # Enable Pimoroni Haptic Bzzz LRA (+1192) HAPTIC_DRIVER += DRV2605L diff --git a/keyboards/solartempest/sofle/solartempest_sofle_via.hex b/keyboards/solartempest/sofle/solartempest_sofle_via.hex index 285b56d5e69d..c751a30efc73 100644 --- a/keyboards/solartempest/sofle/solartempest_sofle_via.hex +++ b/keyboards/solartempest/sofle/solartempest_sofle_via.hex @@ -1,9 +1,9 @@ -:100000000C9418060C945F060C945F060C943D3318 +:100000000C9418060C945F060C945F060C94AE30AA :100010000C945F060C945F060C945F060C945F06CC -:100020000C945F060C945F060C94771A0C94331AA8 -:100030000C94F8280C945F060C945F060C945F06F1 +:100020000C945F060C945F060C94B3190C946F1932 +:100030000C94BB260C945F060C945F060C945F0630 :100040000C945F060C945F060C945F060C945F069C -:100050000C945F060C94501B0C945F060C945F0686 +:100050000C945F060C948C1A0C945F060C945F064B :100060000C945F060C945F060C945F060C945F067C :100070000C945F060C945F060C945F060C945F066C :100080000C945F060C945F060C945F060C945F065C @@ -194,30 +194,30 @@ :100C10000066006C006500000010034B0065007961 :100C20000068006900760065000000040309040004 :100C300011241FBECFEFDAE0DEBFCDBF04B603FE46 -:100C400027C08091720690917306A0917406B091AE -:100C500075068730904BA740B04BD1F410927206C6 -:100C600010927306109274061092750614BE84B723 +:100C400027C080916C0690916D06A0916E06B091C0 +:100C50006F068730904BA740B04BD1F410926C06D2 +:100C600010926D0610926E0610926F0614BE84B735 :100C7000877F84BF0FB6F894A89580916000886143 :100C800080936000109260000FBEE0E0F8E30995E9 -:100C900012E0A0E0B1E0ECEAFDE602C005900D92A2 +:100C900012E0A0E0B1E0E4E7F8E602C005900D92B2 :100CA000A233B107D9F726E0A2E3B2E001C01D925A -:100CB000A237B207E1F70E941F290C9490360C94DA -:100CC0000000CF93DF93409170065091710640571A +:100CB000AC36B207E1F70E94E2260C9401340C94A2 +:100CC0000000CF93DF9340916A0650916B064A561D :100CD00054409A01205A3F4F21303240C0F020E06A -:100CE00032E0241B350B60916E0470916F04FC019F +:100CE00032E0241B350B6091680470916904FC01AB :100CF000CA01240F351FC1E0D0E08217930750F0DE -:100D000070936F0460936E04DF91CF91089520E695 -:100D100030E0E9CF4491DC01A059BB4F5C9145170D +:100D00007093690460936804DF91CF91089520E6A1 +:100D100030E0E9CF4491DC01A659BB4F5C91451707 :100D200081F04C93AC01A5E056954795AA95E1F763 :100D3000DE0102C0AA0FBB1F4A95E2F7AD016A2B84 :100D4000752B01963196D9CFE8EDF0E080818E7F4A :100D500080831092E2001092DA001092E100A0EE7F :100D6000B0E08C9181608C9380818F77808319BCF7 :100D7000A7EDB0E08C918E7F8C9380818F7E8083F5 -:100D80001092720308952091E4003091E50095E6F9 +:100D800010926C0308952091E4003091E50095E6FF :100D9000A9012091EC00822F817020FF06C0809174 :100DA000E80080FF06C080E008952091E80022FD61 -:100DB0001AC080918003882389F0853089F0809162 +:100DB0001AC080917A03882389F0853089F0809168 :100DC000EB0085FD0FC02091E4003091E500421753 :100DD0005307F9F29150E1F684E0089582E0089516 :100DE00083E0089581E00895EF92FF920F931F939F @@ -225,10 +225,10 @@ :100E00008091E80085FD0BC08091E8008E7780938B :100E1000E8000E94C306882399F3C82F08C0F70191 :100E200081917F018093F1000150110949F78C2FC6 -:100E3000CF911F910F91FF90EF90089580918203C1 +:100E3000CF911F910F91FF90EF90089580917C03C7 :100E400087FF13C08091E80082FF06C08091E80010 -:100E50008B778093E80004C0809180038111F2CFEA -:100E60000895809180038823D9F38091E80080FF62 +:100E50008B778093E80004C080917A038111F2CFF0 +:100E6000089580917A038823D9F38091E80080FF68 :100E7000F8CF8091E8008E77ECCF982F9093E9001F :100E8000242F762F50E0891731F07091EC002091DB :100E9000ED005091F00021FD07C09F5F973071F782 @@ -238,1539 +238,1456 @@ :100ED000F0002091EE0027FDE0CF80E00895CF9252 :100EE000DF92EF92FF920F931F93CF93DF93C8EDA2 :100EF000D0E088818F7E8883E7EDF0E0808181609B -:100F0000808384E082BF81E08093720388818E7F3A +:100F0000808384E082BF81E080936C0388818E7F40 :100F1000888302EE10E0F80110821092DA0081EE70 :100F2000C82ED12CF601108288818F778883888122 -:100F30008068888388818F7D888319BC10928003A4 -:100F40001092810310927F0310927E0390EEE92E9F +:100F30008068888388818F7D888319BC10927A03AA +:100F400010927B03109279031092780390EEE92EB1 :100F5000F12CF70180818B7F808388818160888379 :100F600042E060E080E00E943D07F60180818E7FD4 :100F70008083F801808181608083808188608083A4 :100F8000F70180818E7F8083888180618883DF91F3 :100F9000CF911F910F91FF90EF90DF90CF90089528 -:100FA000FC01809188039091890386179707A0F030 +:100FA000FC01809182039091830386179707A0F03C :100FB0006115710529F49091E8009E779093E800FF :100FC00090E06115710551F4911108C08091E8001D -:100FD00082FF34C080E00895BC01F2CF809180038D +:100FD00082FF34C080E00895BC01F2CF80917A0393 :100FE0008823C1F18530C1F18091E80083FD30C0D4 :100FF0008091E80082FDEACF8091E80080FFE1CF98 :101000008091F3002091F200382F6115710519F0DD :101010002830310558F091E02830310509F090E092 :101020002091E8002E772093E800CBCF8191809328 -:10103000F100615071092F5F3F4FE7CF809180032E +:10103000F100615071092F5F3F4FE7CF80917A0334 :10104000882341F0853041F08091E80083FFBECFD6 :1010500081E0089582E0089583E0089508958091E5 -:1010600075030895CF92DF92EF92FF922FB7F89415 -:10107000C0906B03D0906C03E0906D03F0906E0312 +:101060006F030895CF92DF92EF92FF922FB7F8941B +:10107000C0906503D0906603E0906703F09068032A :101080002FBFA7019601261B370B480B590BCA012E :10109000B901FF90EF90DF90CF9008952FB7F894AB -:1010A00060916B0370916C0380916D0390916E035E -:1010B0002FBF0895209168033091690328173907DD -:1010C00071F09093690380936803E0916603F09157 -:1010D0006703309721F00084F185E02D099408958D -:1010E00020916403309165032817390771F09093BC -:1010F000650380936403E0916603F0916703309782 -:1011000021F00680F781E02D09940895811520E5EE -:101110009207F8F48115E0E49E0788F5893391057C -:1011200070F48C32910548F48430910580F08E3152 -:10113000910518F08897039750F480E0089584365D -:101140009105D9F320F0805E91090897B0F381E012 -:101150001BC08115F9E59F0750F4811528E592071A -:10116000A0F491558F3F910509F088F7E6CF8115DE -:10117000EAE59E0710F390568115904240F7FB0177 -:101180009581907F81E0C9F20895FB019581907F60 -:1011900081E0903291F6F8CF2091530336E0839F9F -:1011A000C0011124629F800D911D1124811522E040 -:1011B000920714F090E080E080599B4F9093710665 -:1011C000809370060895FC01680F791F8FEF91E3FB -:1011D0002191822728E030E087FF09C0880F892706 -:1011E00021503109C9F7E617F70791F70895880FDD -:1011F000F7CFFA01811101C0FB01099480916904C4 -:10120000982F9E7F61F48170826080936904809141 -:101210006C04813A18F080EA80936C040895883158 -:10122000B0F381708661F1CFAF92BF92DF92EF92FF -:10123000FF920F931F93CF93DF93082F162FE9018F -:10124000E42FF0E0E750FB4F611110C0E4915E2FF6 -:101250004E2F4983E8835A83DF91CF911F910F91DD -:10126000FF90EF90DF90BF90AF900895E62EF12CA5 -:101270004491D42EE42FF0E026E0829FC001112497 -:101280002FEF30E0B9010E94B734802F90E0880F33 -:10129000991F55E5569FD001579FB00D11248A1B09 -:1012A0009B0B982F990F890F5901AE18BF08AE9E5E -:1012B000D001AF9EB00DBE9EB00D11245B2F189FC4 -:1012C00080011124012F11275901A01AB10AAE9EE5 -:1012D0008001AF9E100DBE9E100D11245901A81A59 -:1012E000B108AE9CC001AF9C900DBE9C900D112426 -:1012F000892F9927281B390B2E9FC0012F9F900DF6 -:101300003E9F900D1124E92F62307105A1F050F439 -:101310006115710509F49DCF6130710581F0EB2FE6 -:10132000512F97CF6430710569F080F066307105F8 -:1013300009F48FCFF4CFE42F4B2F592F8ACFE42F0E -:10134000412F87CFEB2F542F492F83CF4B2F5D2D6C -:10135000E12F7FCF80E0089578940895F894E82FE6 -:10136000E295EF70F0E031A1282F2F7081E090E03E -:1013700001C0880F2A95EAF7982F9095932391A39F -:1013800092A1892B82A30C94AC099091DB0292FF6D -:1013900006C0282F28712830F9F4877F846093FFD6 -:1013A00006C0282F28712831F1F4877E84612091AE -:1013B000DC0220FF06C0382F38713830D9F4877F1F -:1013C000816021FF06C0282F28712831D1F4877E43 -:1013D000816194FD877E0895282F24712430F9F6C9 -:1013E0008B7F8860DCCF282F2471243101F78B7E1E -:1013F0008861DDCF382F3171313019F78E7F8860E9 -:10140000E0CF282F2171213121F78E7E8861E1CF35 -:10141000CF93DF93EC018238910581F1B0F58133F0 -:10142000910509F491C020F58932910509F485C030 -:101430008A9709F490C0C11521E5D20708F0AAC027 -:10144000C11530E5D30708F0F2C0CF3BD10508F055 -:1014500089C0C83AD10508F0DFC0C53AD10508F007 -:10146000D3C0C430D105F8F4C130D105E1F040C09B -:101470008533910509F45AC0C997E9F68091DB02DA -:10148000837089F0C0EED0E00EC0833E910599F1E3 -:1014900070F4803E910501F1823E910561F68091E4 -:1014A000DB0282FD21C0CE01DF91CF910895863EFF -:1014B000910561F1873E910571F1843E910509F036 -:1014C000BACF8091DC0281FFEECF8091DB02C7EEC4 -:1014D000D0E084FD0DC0E7CF8091DB0280FDF7C036 -:1014E0009091DC0290FFDFCFC3EED0E084FFDBCF32 -:1014F000D0E0C0E0D8CF8091DB0282FDEBC09091BC -:10150000DC0290FDBFCF84FFCECFF2CF8091DB0213 -:1015100083FDDDCFC8CF8091DB0283FDDEC09091DB -:10152000DC0291FFF0CFC4EED0E0BDCF8091DB02B2 -:1015300085FFB9CFC9E2D0E0B6CF8091DB0285FF4D -:10154000B2CFC5E3D0E0AFCF8091DB0286FFABCF57 -:10155000CAE2D0E0A8CF8091DB0286FFA4CFC1E32E -:10156000D0E0A1CFC11540E2D40760F4C11581E0FD -:10157000D80708F098CFCE01815E9109079708F44B -:1015800092CFB6CFC11590E4D90708F4B1CFDF7080 -:10159000D06A89CFC11524E5D20778F4C11533E5A7 -:1015A000D30708F072C0C11542E5D40708F05CC04B -:1015B000DC2FCC27C16FD06A76CFC1158AE5D8075A -:1015C00078F4C11599E5D90708F073C0C11528E56D -:1015D000D20708F48DCFDC2FCC27C06FD06A63CF41 -:1015E000CE0190568115904208F082CF8D2F8F71D9 -:1015F0000E94C50990E0982F882788279F719C0139 -:101600002C2BE901D0624FCFC55AD0E0CD53DE4F2D -:10161000C881D0E0D06447CFC85AD0E0CC0FDD1FDE -:10162000CA53DE4F0990D881C02DD4643CCFCE017F -:1016300064E0969587956A95E1F783702C2F26953F -:101640002695237040E2249F90011124382B8C2F83 -:101650008370C1E0D0E002C0CC0FDD1F8A95E2F7B5 -:10166000C22BD32BDC681FCFCE018370992721E0DA -:1016700030E002C0220F331F8A95E2F7C695C69567 -:1016800080E2C89FE0011124EBCFCE01837099273F -:1016900021E030E002C0220F331F8A95E2F7C695A1 -:1016A000C69590E2C99FE0011124C22BD32BDA68C2 -:1016B000FACE8C2F8F700E94C50934E0D695C7955D -:1016C0003A95E1F7CF709C2FEC01D069ECCEC9E3DD -:1016D000D0E0E9CEC2EED0E0E6CEC6EED0E0E3CE7A -:1016E0000C944E088091730390919702892B9091EE -:1016F0009602892B80933402E0916603F091670390 -:10170000309731F00280F381E02D84E392E0099478 -:1017100008958091950290916402981301C00895F4 -:101720008F5F8770FACF27E0929F800D1124982F4A -:10173000977086958695869523E0829FF001112407 -:10174000ED5BFD4F50E040E080E0219130E0092E5C -:1017500002C0369527950A94E2F721703327042EAC -:1017600001C0220F0A94EAF7822B4F5F5F4F43308C -:10177000510559F7089527E0929F800D1124982F65 -:10178000977041E001C0440F9A95EAF786958695D7 -:10179000869593E0899FF0011124ED5BFD4F90E069 -:1017A00080E070E05191DF0111979B01082E02C08B -:1017B000369527950A94E2F7217021952527242351 -:1017C00025272C9301968330910561F7089590E0C9 -:1017D00080E00E94700890E080E00E945A08109219 -:1017E0009702109296020C94720B809398020C94BC -:1017F000E70B882341F080959091730389238093B0 -:1018000073030C94720B0895882339F0909173033D -:10181000982B909373030C94720B08958823B1F165 -:101820009CEF980F913A70F4E6E3F2E091918913FE -:1018300003C0DF0111971C9242E0EC33F407B1F7CB -:101840000C94720B90E2980F983088F4877021E026 -:1018500030E0A90102C0440F551F8A95E2F7CA0182 -:10186000809590917303892380937303E9CF9BE55F -:10187000980F933020F490E080E00C947008885A20 -:10188000873120F490E080E00C945A0808950F937B -:101890001F93CF93C82F882309F469C08CEF8C0F56 -:1018A000813AB0F506E312E08CE392E0F801219171 -:1018B000C21701F122E0EC33F207C9F7EFEF80E045 -:1018C000D8019D918D01C91781F0EF3F19F4911155 -:1018D00001C0E82F8F5F863099F7EF3F31F00E2E71 -:1018E000000CFF0BEC5CFD4FC283CF911F910F9159 -:1018F0000C94720BE6E3F2E02191C21303C0DF0106 -:1019000011971C928E179F07B9F70E94720BD6CFC2 -:1019100080E28C0F883068F4C77021E030E001C0AD -:10192000220FCA95EAF780917303822B8093730389 -:10193000DCCFEBE5EC0FE33050F4F0E0ED53FE4F7D -:10194000808190E0CF911F910F910C947008C85A3C -:10195000C73168F4EC2FF0E0EE0FFF1FEA53FE4FA3 -:1019600080819181CF911F910F910C945A08CF9152 -:101970001F910F910895982F92959F7011F0892FC4 -:1019800094E0282F2695269511F09E5F822F86954C -:1019900009F09F5F892F0895CF93DF93CDB7DEB70E -:1019A00062970FB6F894DEBF0FBECDBF96E0EFE3AF -:1019B000F3E0DE01179601900D929A95E1F796E01B -:1019C000FE013796DE011D9601900D929A95E1F782 -:1019D00098858823E9F0962B9E8786E0FE013D9648 -:1019E000DE01119601900D928A95E1F786E0FE01E5 -:1019F0003196AFE3B3E001900D928A95E1F76296DC -:101A00000FB6F894DEBF0FBECDBFDF91CF91089522 -:101A100060959623E1CF80936F0370937103609379 -:101A20007003809180038430F9F48093E9008FEF94 -:101A30009091E800815095FD06C095ED9A95F1F7DB -:101A400000008111F5CF8091E80085FF0DC050E0C6 -:101A500040E063E070E08FE693E00E94F40680913E -:101A6000E8008E778093E8000895BC0184E00C9430 -:101A70000B0DBC0183E00C940B0D9C0184E0809362 -:101A8000E9009FEF8091E800915085FD06C085ED4B -:101A90008A95F1F700009111F5CF8091E80085FF5C -:101AA0000CC050E040E066E070E0C9010E94F4061E -:101AB0008091E8008E778093E8000895CF93DF93BC -:101AC000EC0181E08093E9008FEF9091E800815074 -:101AD00095FD06C095ED9A95F1F700008111F5CFBF -:101AE0008091E80085FF14C050E040E068E070E0BD -:101AF000CE010E94F4068091E8008E778093E80082 -:101B000088E0FE01A6E7B3E001900D928A95E1F727 -:101B1000DF91CF910895CF92DF92EF920F931F93B1 -:101B2000CF93DF93CDB7DEB7CE5DD1090FB6F89472 -:101B3000DEBF0FBECDBF609174018091690480FF4C -:101B40004CC0EEEFF5E09E012F5F3F4F8E0101523A -:101B50001F4FC901A4914A2F50E0DA01AA0FBB1F01 -:101B6000A40FB51FA557BC4FCD90DD90EC90D901C7 -:101B7000CD92DD92ED929D013196A017B10751F7FC -:101B80002091730143E0249F800D911D1124539AED -:101B90002BB1277F3BB138605FB7F894FC01649F9D -:101BA000E00DF11D1124BF018617970749F55FBFAE -:101BB000EFE5F4E03197F1F700C00000C252DF4FCB -:101BC0000FB6F894DEBF0FBECDBFDF91CF911F914E -:101BD0000F91EF90DF90CF900895809175019091D3 -:101BE000760123E0829FF0011124E557FC4F89170D -:101BF00008F0A7CF1182108212828F5F3396F7CF41 -:101C0000DC014D91CD01E8E03BB9000000C047FF89 -:101C10002BB9440F000000C000C000C02BB900C0A9 -:101C2000EA9591F7C1CF0F931F93CF93DF9300D025 -:101C30000F92CDB7DEB7182F062F8091690480FF71 -:101C400022C09E012F5F3F4F40EA64E68BE20E9474 -:101C500014091017C0F48B8199812A8133E0139FF6 -:101C6000F0011124E557FC4F2183908382831F5F8D -:101C700033960113F9CF0E948B0D8FE99FE00197F6 -:101C8000F1F700C000000F900F900F90DF91CF91FF -:101C90001F910F910895CF93DF93C82FD82FD17044 -:101CA00081FF04C067E084E00E94130ED11104C0DC -:101CB0006FE18CE10E94130EC2FF06C063E180E178 -:101CC000DF91CF910C94130EDF91CF910895E9E647 -:101CD000F4E080818E7F8083EEE4F3E08281816096 -:101CE00082832FEF80E792E0215080409040E1F71F -:101CF00000C000000C948B0D9F92AF92BF92CF92C8 -:101D0000DF92EF92FF920F931F93CF93DF937C01AB -:101D10005B016A018091D60201E010E08A3010F484 -:101D20000AE010E0C1E0D0E0F894B501C701F60187 -:101D30000995982E0E94AC09911004C021960C17A9 -:101D40001D076CF4892DDF91CF911F910F91FF90AA -:101D5000EF90DF90CF90BF90AF909F900895CC9F71 -:101D60009001CD9F300D300D112490E080E045E3CF -:101D70004A95F1F70000019682179307C1F7D4CF77 -:101D80008091A702811110C08091D800806180935A -:101D9000D8008AE18A95F1F700C08091D90080FFD0 -:101DA0000AC081E08093A70281E09091A702913060 -:101DB00009F080E0089582E08093A7020E94A406C3 -:101DC00010928003F1CF0E94C00E882351F0E09161 -:101DD0006603F0916703309721F00190F081E02DC8 -:101DE000099480E008951F93CF93DF93182FEB01A0 -:101DF0000E94470C8FE99FE00197F1F700C00000B7 -:101E00002197C1F7812FDF91CF911F910C940E0C78 -:101E10000F931F93CF93DF9300D000D0CDB7DEB7E1 -:101E200089836A834B831C8204E610E024E030E05F -:101E3000AE014F5F5F4F60E084E10E9415320F906A -:101E40000F900F900F90DF91CF911F910F910895F8 -:101E500080917001882329F047E669E98BE20C94B0 -:101E6000080F80913D0247EC6BE18823C1F341E20A -:101E700065EA89EDF4CFCF92DF92EF92FF920F9354 -:101E80001F93CF93DF936C017B0164E670E088E7DA -:101E90000E94FD30EC0197FD12C010E000E0F60159 -:101EA000E00FF11F849164E670E00E947731EC014D -:101EB000892B29F40F5F1F4F0E151F0581F70E9414 -:101EC0009132CE01DF91CF911F910F91FF90EF9052 -:101ED000DF90CF90089580915E0390915F03911100 -:101EE00003C091E089270895882369F062E070E0DB -:101EF0008AE89BE00E943B0F892B19F080915E03DA -:101F0000089510925E0380915E03EBCFCF93C09152 -:101F10005E0380915F038823D1F00E944E086058D1 -:101F2000774C8E4F9F4F60935A0370935B0380935F -:101F30005C0390935D03C11108C062E070E088E823 -:101F40009BE00E943B0F892B29F0C0915E038C2FF0 -:101F5000CF91089581E080935E03F7CFCF93DF9315 -:101F6000C3EED2E060E0CE010E942B352196C11570 -:101F700084E0D807B9F7DF91CF9108956F927F92EF -:101F80008F929F92AF92BF92CF92DF92EF92FF9289 -:101F90000F931F93CF93DF938CE8C82E8BE0D82E3E -:101FA00091ECE92EF12CE701CC58D10936011BC088 -:101FB000F50185909490692DC8010E942B35682DFC -:101FC000C80101960E942B3582E0A80EB11C0E5F5D -:101FD0001F4FC017D10761F78EE0680E711C2E9657 -:101FE000CE15DF0529F08E010E5011095301E0CF07 -:101FF0007E018CE8E80EF11C8CE8C80ED11C8DE740 -:10200000E81683E0F80679F6DF91CF911F910F91E2 -:10201000FF90EF90DF90CF90BF90AF909F908F9008 -:102020007F906F900895CF93C82F6FEF811162E278 -:1020300083E290E00E942B356FEFC11161E084E2F2 -:1020400090E00E942B356FEFC11162E085E290E0D5 -:10205000CF910C942B3580E00E94131060E086E253 -:1020600090E00E942B350E94BE0F0E94AE0F81E0CF -:102070000C9413100F931F93CF93DF93C42FD0E0D2 -:10208000CC0FDD1F2EE0629FC00DD11D11243CE856 -:10209000839FC00DD11D1124CE0187960E94173554 -:1020A000082F10E0102F0027CE0188960E941735C8 -:1020B0009801282BC901DF91CF911F910F910895AD -:1020C000462F853038F47A3028F4673018F4672FBB -:1020D0000C943A1090E080E00895CF92DF92FF9246 -:1020E0000F931F93CF93DF936C0100918A0380912C -:1020F0009802082BC7E0D0E010E0FC2EC8010C2E9F -:1021000002C0959587950A94E2F780FD0CC021974F -:10211000A0F7F12C8F2DDF91CF911F910F91FF90A0 -:10212000DF90CF900895B6018C2F0E9460100E941E -:10213000080A019761F3EECFCF93DF93EC010E9481 -:102140006D10BE010E946010DF91CF910C94080ABF -:10215000FC01808191810E949C10292F2F70929503 -:102160009F7092509E3078F4E92FF0E0EE56F94CD3 -:102170000C94EB34803F19F020F4883E20F481E089 -:102180000895843FE1F380E00895883EC0F3813FE5 -:10219000D1F7F5CF822F869586958695089583E2AF -:1021A00090E00E941735823289F484E290E00E9428 -:1021B0001735813059F485E290E00E94173591E09F -:1021C000823009F090E0892F8170089580E0FCCF83 -:1021D0001F93CF93DF93CDB7DEB768970FB6F89410 -:1021E000DEBF0FBECDBF40913F03509140036091D1 -:1021F00041037091420380914303909144030E94F4 -:102200008F1B20933F0330934003609343037093ED -:102210004403142F119510934103652F619560932A -:10222000420386E0EFE3F3E0DE01179601900D92A2 -:102230008A95E1F786E0FE013796DE01119601905E -:102240000D928A95E1F79B858C8520917001222360 -:10225000B1F0772761950CF47095072E000C880B70 -:10226000990B0E9497352AE939E949E95EE30E9412 -:10227000FB350E945F35962F812F60E010E01B83B5 -:102280006C839D838E8386E0FE013196DE011D9670 -:1022900001900D928A95E1F786E0FE013D96DE0100 -:1022A000539601900D928A95E1F786E0FE017396B0 -:1022B000DE01119601900D928A95E1F786E0FE010C -:1022C0003196AFE3B3E001900D928A95E1F786E095 -:1022D000EFE3F3E0DE01179601900D928A95E1F7A6 -:1022E00086E0E9E3F3E0DE01119601900D928A9514 -:1022F000E1F746E050E0BE016F5F7F4FCE010796E9 -:102300000E940135892B79F0E0916603F091670313 -:10231000309749F082E080933F030480F581E02DFF -:102320008FE393E0099510924103109242031092BB -:1023300043031092440386E0EFE3F3E0A9E3B3E044 -:1023400001900D928A95E1F768960FB6F894DEBF7A -:102350000FBECDBFDF91CF911F910895E6E3F2E06C -:1023600086E0DF011D928A95E9F70C94E70B1F9335 -:10237000CF93DF93CDB7DEB7AA970FB6F894DEBF41 -:102380000FBECDBF82E893E02091F100DC012D93D8 -:10239000CD01B3E08A389B07B9F78091830383307E -:1023A00009F472C0B8F4813009F449C0823009F4EC -:1023B000B5C08091E80083FF8DC280918203909127 -:1023C00083039A3008F086C2E92FF0E0E056F94C1A -:1023D0000C94EB348A3009F490C08B3009F471C04E -:1023E000893039F780918203813219F78091860311 -:1023F00090918703009711F00297D9F68091E80039 -:10240000877F8093E8008091E80082FF38C0909138 -:10241000F3008091F200029731F48091F100813055 -:1024200011F0863021F48091F10080937503809142 -:10243000E8008B778093E8000E941E07BACF809156 -:102440008203813A09F0B5CF8091E800877F8093BD -:10245000E8008091860390918703892B61F468E0FE -:1024600086E793E070E00E94D0078091E8008B77C8 -:102470008093E8009ECF60E090E080E0F3CF809111 -:1024800080038111C0CF95CF80918203813A09F0FA -:1024900090CF8091860390918703892B09F089CF93 -:1024A0008091E800877F8093E8008091E80080FFBA -:1024B000FCCF809178018093F1008091E8008E77C5 -:1024C000B9CF80918203813209F073CF8091860366 -:1024D00090918703892B09F06CCF8091E800877F6A -:1024E0008093E8000E941E07809184038093780106 -:1024F000109273030E94AE115CCF809182038132EF -:1025000009F057CF8091E800877F8093E8000E9410 -:102510001E0780918503809374034BCF80918203C3 -:10252000813A09F046CF8091E800877F8093E800E8 -:102530008091E80080FFFCCF80917403BCCF80388D -:1025400099F0823809F0C6C1809186038F70873078 -:1025500008F0C0C18093E9008091EB0085FB8827DB -:1025600080F91092E90006C080917E0390917F036C -:10257000911182609091E800977F9093E80080939A -:10258000F1001092F1008091E8008E779FC18823BE -:1025900009F48DC1823009F09DC1809184038111BD -:1025A00090C1809186038F702FEF280F263008F09E -:1025B00091C18093E9002091EB0020FF82C193300C -:1025C00031F48091EB0080628093EB007AC19091AE -:1025D000EB0090619093EB0021E030E001C0220F0E -:1025E0008A95EAF72093EA001092EA008091EB00C6 -:1025F0008860EACF81116EC1109184031F778091AA -:10260000E3008078812B8093E3008091E800877F4E -:102610008093E8000E941E078091E80080FFFCCFB5 -:102620008091E30080688093E30082E0111183E0F1 -:10263000809380034FC18058823008F04BC12091B5 -:102640008403309185032C3DE3E03E07A1F583E050 -:102650008A838AE289834FB7F894DE01139620E0DB -:102660003EE051E2E32FF0E050935700E49120FF69 -:1026700003C0E295EF703F5FEF708E2F90E0EA307D -:10268000C0F0C7968D939D932F5F243159F74FBFAC -:102690008091E800877F8093E8006AE270E0CE01D5 -:1026A00001960E94D0078091E8008B778093E80024 -:1026B00011C1C096E7CF8091860390918703432F85 -:1026C00055274330510509F44AC078F5413051058A -:1026D00009F47AC08BE590E0ECE8FBE0423051056C -:1026E00009F0F8C02091E800277F2093E8002091AE -:1026F0008803309189038217930708F49C0140E016 -:102700002115310509F065C0411163C08091E800D1 -:1027100082FDC9CF80918003882329F2853019F288 -:102720008091E80083FFF2CFBECF4132510509F41A -:102730003CC04232510509F0CDC08330910508F00C -:10274000C9C0FC01EE0FFF1FEB5DFD4F0190F08152 -:10275000E02D8E5D9D4FDC018C9190E01AC03327F7 -:1027600021303105D1F02115310561F022303105DC -:1027700009F0B0C0E9EFFBE0E4918E2F90E0E9EFC3 -:10278000FBE007C0EBE2FCE0E4918E2F90E0EBE28F -:10279000FCE0009709F49EC0A5CFE9E1FCE0E491DC -:1027A0008E2F90E0E9E1FCE0F4CF8330910508F052 -:1027B00091C0880F991FFC01E55DFD4F0190F081EC -:1027C000E02D89E090E08ECF82E190E0E7EEFBE043 -:1027D00089CF80918003882309F465CF853009F47F -:1027E00062CF8091E80083FD5ECF8091E80082FD9A -:1027F0008DCF8091E80080FF83CF9091F30080918E -:10280000F2002115310519F08830910550F041E0B2 -:10281000089709F040E08091E8008E778093E80007 -:102820006FCF44914093F1003196215031090196C8 -:10283000E8CF803809F04EC08091E800877F809310 -:10284000E800809181038093F1009DCE811142C008 -:10285000109184031230F0F58091E800877F809317 -:10286000E800109381030E941E07112311F084E0F9 -:1028700005C08091E30087FDFACF81E0809380035B -:1028800042E061EC81E00E943D0742E261EC84E0BD -:102890000E943D0742E261EC82E00E943D0742E275 -:1028A00060EC83E00E943D078091800313C080911B -:1028B0008403813079F481E0933009F080E08093E3 -:1028C0007F031092E9008091E800877F8093E80001 -:1028D0000E941E078091E80083FF0AC08091E800F3 -:1028E000877F8093E8008091EB0080628093EB000B -:1028F000AA960FB6F894DEBF0FBECDBFDF91CF9181 -:102900001F9108951F93CF93DF93162FC0917006E8 -:10291000D09171068A30D1F420915303CE018057B3 -:102920009440622F70E00E94B734281B822F66E02B -:102930000E94CB34C82FC15020F4DF91CF911F915A -:10294000089560E080E20E948214F5CF8D30E9F4B2 -:10295000C057D44020915303622F70E0CE010E94F3 -:10296000B734281B822F9E01280F311D21153240BC -:1029700018F080E0D0E0C0E0C80FD11DC059DB4F97 -:10298000D0937106C0937006D8CF96E0FE01A4E5FF -:10299000B3E001900D929A95E1F7803E90F186E0C8 -:1029A000FE0111928A95E9F7C0917006D0917106E7 -:1029B000111133C046E050E0BE0184E593E00E946F -:1029C00001359E0120573440892B91F52A5F3F4FF6 -:1029D00040915303642F70E0C9010E94B734481B33 -:1029E000463010F4240F311D211572E0370710F026 -:1029F00030E020E020593B4F309371062093700661 -:102A00009CCFF6E08F9FB0011124685B794F46E0C0 -:102A100050E0CE010E94F834C7CF9E012A5F3F4F9D -:102A2000FE012E173F0731F2808180958193F9CF07 -:102A3000C90145E0969587954A95E1F741E050E058 -:102A4000BA0102C0660F771F8A95E2F7CB01609149 -:102A50006E0470916F04862B972BB9016B5F7F4FCB -:102A6000E5E076956795EA95E1F702C0440F551FBA -:102A70006A95E2F7842B952B90936F0480936E04F4 -:102A8000A5CFFF920F931F93CF93DF93EC01F62E08 -:102A9000FC0101900020E9F78F0101501109C017D6 -:102AA000D10730F0DF91CF911F910F91FF900895E2 -:102AB0006F2D89910E948214F2CFE1E5F3E08083CB -:102AC000618324E630E042E050E0BF0184EB0C94E7 -:102AD000EE31CF93C82F60E08CE00E945D156C2F23 -:102AE00084E00E945D1561E08CE0CF910C945D154F -:102AF000CF92DF92EF92FF926B017C010E94FE0861 -:102B0000B701A60188E090E0FF90EF90DF90CF90B2 -:102B10000C943D35AF92BF92CF92DF92EF92FF922D -:102B20000F931F93CF93DF9300D00F92CDB7DEB7F3 -:102B3000082FF62E142FE22E8091690480FF4FC0DB -:102B4000E82FE695AE2FB0E0AA5EBD4F9C91909322 -:102B50004E038E7F823009F056C0413A08F040EAB9 -:102B60009E012F5F3F4F6F2D802F0E94140980918F -:102B7000690480FF11C02B8139814A8180917501E0 -:102B80009091760153E0859FF0011124E557FC4FA9 -:102B9000891798F10E948B0D80916A04801308C0F8 -:102BA00080916B048F1104C080916C04811729F00F -:102BB0008091500382608093500300936A04F092E6 -:102BC0006B0410936C04EE2051F0609169047091D5 -:102BD0006A0480916B0490916C040E9478150F90A8 -:102BE0000F900F90DF91CF911F910F91FF90EF9079 -:102BF000DF90CF90BF90AF900895418330832283C0 -:102C00008F5F3396C5CF923039F6E2508E2F8170A8 -:102C1000D82EE695F0E0E750FA4FA590B490C12C7D -:102C2000BB2460917701C61608F0B4CF2C2D30E09C -:102C3000A29EC001A39E900DB29E900D112470E043 -:102C40000E94B734802FD11016C0860F40917501B5 -:102C5000420F532F511D9A01220F331F240F351F8E -:102C600025573C4F412F113A08F040EA6F2D0E9442 -:102C70001409C394D6CF861BE9CF20E00C948A15A3 -:102C8000CF93C82F0E94BB0C823099F138F488236F -:102C9000C1F0813029F18C2FCF910895833081F1DB -:102CA0008430C9F740E56FEF8AED0E943D1687E05A -:102CB0000E94691580910001882369F310927001C8 -:102CC0000CC040E56AEA83E70E943D16809100014E -:102CD0008823A1F381E0809370010E94280FDBCF4D -:102CE00040E56FEF8CEF0E943D1685E40E94691568 -:102CF000D2CF40E56FEF80E50E943D1685E2F6CF2A -:102D000040E56FEF80EA0E943D168FE1EFCF0E9411 -:102D1000401680938A030C94E70B80918A03982FC6 -:102D20009670963019F488600C948716877FFCCFD4 -:102D300021E030E001C0220F8A95EAF720958091CA -:102D40008A0382230C94871621E030E001C0220F11 -:102D50008A95EAF780918A03822B0C948716E9E61C -:102D6000F4E0438121E1421B08F440E021E062816C -:102D700081810C948A15E9E6F4E0438121E1420F58 -:102D800008F44FEF21E0628181810C948A15E9E615 -:102D9000F4E0628121E1621B08F460E021E04381FC -:102DA00081810C948A15E9E6F4E0628121E1620FE9 -:102DB00008F46FEF21E0438181810C948A15E9E6E4 -:102DC000F4E0818121E04381628188500C948A156E -:102DD000E9E6F4E0818121E043816281885F0C941F -:102DE0008A1580916D04882319F0815080936D04B9 -:102DF0006091690470916A0480916B0490916C04F5 -:102E00000C94781580916D04833018F48F5F809353 -:102E10006D046091690470916A0480916B049091D3 -:102E20006C040C9478159091690490FF26C0917001 -:102E300081111CC09260909369048091500381605D -:102E400080935003662351F06091690470916A0485 -:102E500080916B0490916C040E94781540916C04F1 -:102E600060916B0480916A040C943D168C3010F0D4 -:102E70009661E1CF880F982BDECF08958091690489 -:102E80008695815009F48BE061E00C9413178091D2 -:102E9000690486958F5F8C3008F081E061E00C94C6 -:102EA00013178091690480FF07C0869582588F7739 -:102EB000893010F40C94471761E082E00C941317EA -:102EC000E9E6F4E083E0808311828FEF828380EA79 -:102ED00083831482AEE4B3E012968C9112978360E0 -:102EE00012968C9360817181828193810C94781504 -:102EF000AB01BC0188E190E00C943D35CF93C82F25 -:102F0000E2E6F3E0982F990F990F990F808187706F -:102F1000892B8083E3E6F3E09C2F9295969597703A -:102F20008081887F892B8083609160037091610329 -:102F300080916203909163030E9478176C2F82E066 -:102F4000CF910C945D15E0E6F3E089E8808311826F -:102F500082818C7F82836091600370916103809194 -:102F60006203909163030C947817E0E6F3E08081AC -:102F70008E7F808360916003709161038091620312 -:102F8000909163030C947817E0E6F3E08081816010 -:102F900080836091600370916103809162039091DE -:102FA00063030C9478170E94F73040E060E080E003 -:102FB0000C94080F69EE7EEF90E080E00E944935A6 -:102FC00060E082E090E00E942B3560E083E090E0DA -:102FD0000E942B351092980260E084E090E00E94FD -:102FE0002B3560E082E290E00E942B3560E085E0C6 -:102FF00090E00E942B3560E086E090E00E942B3547 -:103000006FEF87E090E00E942B3540E050E0BA017E -:1030100088E090E00E943D3560E08DE090E00E9405 -:103020002B3540E050E0BA0188E190E00E943D3548 -:1030300060E087E190E00E942B3540E050E0BA016B -:103040008CE190E00E943D3570E060E080E290E02D -:103050000E9449350E94A31780E00E9413100E942D -:103060002B1040E050E0BA018FE090E00E943D3527 -:1030700040E050E0BA0183E190E00C943D350F93BD -:103080001F93CF93DF9300D000D0CDB7DEB7609110 -:10309000CA027091CB028091CC029091CD020E9425 -:1030A0003208643671058105910588F10E94C00ED1 -:1030B000882379F10E944E086E5F7F4F8F4F9F4F9C -:1030C00069837A838B839C8380912D0190912E015B -:1030D0008B549D4F40912C0150E04530510510F02C -:1030E00044E050E0BE016F5F7F4F0E940E3584E0E8 -:1030F00090E00E940334892BD9F40E944E0860931B -:10310000CA027093CB028093CC029093CD0281E0EF -:1031100010C00E944E080091D7021091D802209151 -:10312000D9023091DA02600F711F821F931FC4CF42 -:1031300080E00F900F900F900F90DF91CF911F9133 -:103140000F910895BF92CF92DF92EF92FF920F936B -:103150001F93CF93DF93B82EEB01F42E69016881A2 -:1031600079818A819B810E943208643671058105CC -:10317000910510F4FF2019F1EB2C0B2C000CFF082B -:103180008B2D9AE08902F0011124EE5FFE4F8381BE -:1031900094818B549D4F428150E00417150708F429 -:1031A000A801B6010E940E35C7010E940334892B85 -:1031B00089F40E944E08688379838A839B8381E027 +:1010A0006091650370916603809167039091680376 +:1010B0002FBF0895209162033091630328173907E9 +:1010C00071F09093630380936203E0916003F09169 +:1010D0006103309721F00084F185E02D0994089593 +:1010E00020915E0330915F032817390771F09093C8 +:1010F0005F0380935E03E0916003F091610330979A +:1011000021F00680F781E02D099408952091510384 +:1011100036E0839FC0011124629F800D911D112430 +:10112000811522E0920714F090E080E086599B4FF1 +:1011300090936B0680936A060895FC01680F791FEF +:101140008FEF91E32191822728E030E087FF09C0EB +:10115000880F892721503109C9F7E617F70791F75A +:101160000895880FF7CFFA01811101C0FB0109949E +:1011700080916304982F9E7F61F4817082608093D8 +:10118000630480916604813A18F080EA80936604D3 +:1011900008958831B0F381708661F1CFAF92BF922C +:1011A000DF92EF92FF920F931F93CF93DF93082F5D +:1011B000162FE901E42FF0E0E750FB4F611110C05A +:1011C000E4915E2F4E2F4983E8835A83DF91CF91BC +:1011D0001F910F91FF90EF90DF90BF90AF90089517 +:1011E000E62EF12C4491D42EE42FF0E026E0829FED +:1011F000C00111242FEF30E0B9010E942832802F66 +:1012000090E0880F991F55E5569FD001579FB00D6C +:1012100011248A1B9B0B982F990F890F5901AE1827 +:10122000BF08AE9ED001AF9EB00DBE9EB00D112482 +:101230005B2F189F80011124012F11275901A01A3B +:10124000B10AAE9E8001AF9E100DBE9E100D1124FE +:101250005901A81AB108AE9CC001AF9C900DBE9C6C +:10126000900D1124892F9927281B390B2E9FC0011F +:101270002F9F900D3E9F900D1124E92F6230710534 +:10128000A1F050F46115710509F49DCF613071052D +:1012900081F0EB2F512F97CF6430710569F080F00A +:1012A0006630710509F48FCFF4CFE42F4B2F592FFF +:1012B0008ACFE42F412F87CFEB2F542F492F83CF95 +:1012C0004B2F5D2DE12F7FCF80E008957894089516 +:1012D000F894E82FE295EF70F0E031A1282F2F70FD +:1012E00081E090E001C0880F2A95EAF7982F909549 +:1012F000932391A392A1892B82A30C9466099091C8 +:10130000DB0292FF06C0282F28712830F9F4877F6E +:10131000846093FF06C0282F28712831F1F4877E5E +:1013200084612091DC0220FF06C0382F38713830EC +:10133000D9F4877F816021FF06C0282F28712831CA +:10134000D1F4877E816194FD877E0895282F2471D2 +:101350002430F9F68B7F8860DCCF282F247124316C +:1013600001F78B7E8861DDCF382F3171313019F76D +:101370008E7F8860E0CF282F2171213121F78E7E6A +:101380008861E1CFCF93DF93EC018238910581F141 +:10139000B0F58133910509F491C020F589329105AA +:1013A00009F485C08A9709F490C0C11521E5D207D8 +:1013B00008F0AAC0C11530E5D30708F0F2C0CF3B52 +:1013C000D10508F089C0C83AD10508F0DFC0C53A98 +:1013D000D10508F0D3C0C430D105F8F4C130D1052F +:1013E000E1F040C08533910509F45AC0C997E9F688 +:1013F0008091DB02837089F0C0EED0E00EC0833EA6 +:10140000910599F170F4803E910501F1823E9105BC +:1014100061F68091DB0282FD21C0CE01DF91CF9188 +:101420000895863E910561F1873E910571F1843EF4 +:10143000910509F0BACF8091DC0281FFEECF809157 +:10144000DB02C7EED0E084FD0DC0E7CF8091DB0268 +:1014500080FDF7C09091DC0290FFDFCFC3EED0E0BB +:1014600084FFDBCFD0E0C0E0D8CF8091DB0282FDEB +:10147000EBC09091DC0290FDBFCF84FFCECFF2CFC6 +:101480008091DB0283FDDDCFC8CF8091DB0283FD3D +:10149000DEC09091DC0291FFF0CFC4EED0E0BDCF72 +:1014A0008091DB0285FFB9CFC9E2D0E0B6CF809151 +:1014B000DB0285FFB2CFC5E3D0E0AFCF8091DB0286 +:1014C00086FFABCFCAE2D0E0A8CF8091DB0286FFD7 +:1014D000A4CFC1E3D0E0A1CFC11540E2D40760F4AE +:1014E000C11581E0D80708F098CFCE01815E91093F +:1014F000079708F492CFB6CFC11590E4D90708F446 +:10150000B1CFDF70D06A89CFC11524E5D20778F456 +:10151000C11533E5D30708F072C0C11542E5D40701 +:1015200008F05CC0DC2FCC27C16FD06A76CFC11524 +:101530008AE5D80778F4C11599E5D90708F073C092 +:10154000C11528E5D20708F48DCFDC2FCC27C06F5A +:10155000D06A63CFCE0190568115904208F082CFB9 +:101560008D2F8F710E947F0990E0982F8827882700 +:101570009F719C012C2BE901D0624FCFC55AD0E05E +:10158000CD53DE4FC881D0E0D06447CFC85AD0E0F9 +:10159000CC0FDD1FCA53DE4F0990D881C02DD46413 +:1015A0003CCFCE0164E0969587956A95E1F783700C +:1015B0002C2F26952695237040E2249F900111241C +:1015C000382B8C2F8370C1E0D0E002C0CC0FDD1F20 +:1015D0008A95E2F7C22BD32BDC681FCFCE01837034 +:1015E000992721E030E002C0220F331F8A95E2F7ED +:1015F000C695C69580E2C89FE0011124EBCFCE01CD +:101600008370992721E030E002C0220F331F8A95B2 +:10161000E2F7C695C69590E2C99FE0011124C22B5E +:10162000D32BDA68FACE8C2F8F700E947F0934E0BA +:10163000D695C7953A95E1F7CF709C2FEC01D0690C +:10164000ECCEC9E3D0E0E9CEC2EED0E0E6CEC6EE05 +:10165000D0E0E3CE0C944E0880916D0390919702F8 +:10166000892B90919602892B80933402E09160033C +:10167000F0916103309731F00280F381E02D84E333 +:1016800092E00994089580919502909164029813D4 +:1016900001C008958F5F8770FACF27E0929F800D79 +:1016A0001124982F977086958695869523E0829FC2 +:1016B000F0011124ED5BFD4F50E040E080E021910E +:1016C00030E0092E02C0369527950A94E2F7217082 +:1016D0003327042E01C0220F0A94EAF7822B4F5FB2 +:1016E0005F4F4330510559F7089527E0929F800DD1 +:1016F0001124982F977041E001C0440F9A95EAF7A2 +:1017000086958695869593E0899FF0011124ED5B7F +:10171000FD4F90E080E070E05191DF0111979B0157 +:10172000082E02C0369527950A94E2F7217021957C +:101730002527242325272C9301968330910561F7D3 +:10174000089590E080E00E94700890E080E00E94A0 +:101750005A0810929702109296020C942C0B8093C8 +:1017600098020C94A10B882341F0809590916D0311 +:10177000892380936D030C942C0B0895882339F0F2 +:1017800090916D03982B90936D030C942C0B0895FE +:101790008823B1F19CEF980F913A70F4E6E3F2E000 +:1017A0009191891303C0DF0111971C9242E0EC3341 +:1017B000F407B1F70C942C0B90E2980F983088F452 +:1017C000877021E030E0A90102C0440F551F8A95BF +:1017D000E2F7CA01809590916D03892380936D0390 +:1017E000E9CF9BE5980F933020F490E080E00C94D3 +:1017F0007008885A873120F490E080E00C945A08F1 +:1018000008950F931F93CF93C82F882309F469C0BD +:101810008CEF8C0F813AB0F506E312E08CE392E096 +:10182000F8012191C21701F122E0EC33F207C9F768 +:10183000EFEF80E0D8019D918D01C91781F0EF3F56 +:1018400019F4911101C0E82F8F5F863099F7EF3FAF +:1018500031F00E2E000CFF0BEC5CFD4FC283CF91DC +:101860001F910F910C942C0BE6E3F2E02191C2132F +:1018700003C0DF0111971C928E179F07B9F70E94D2 +:101880002C0BD6CF80E28C0F883068F4C77021E033 +:1018900030E001C0220FCA95EAF780916D03822BD8 +:1018A00080936D03DCCFEBE5EC0FE33050F4F0E018 +:1018B000ED53FE4F808190E0CF911F910F910C94DA +:1018C0007008C85AC73168F4EC2FF0E0EE0FFF1F24 +:1018D000EA53FE4F80819181CF911F910F910C941B +:1018E0005A08CF911F910F910895982F92959F704C +:1018F00011F0892F94E0282F2695269511F09E5FF0 +:10190000822F869509F09F5F892F0895CF93DF93EB +:10191000CDB7DEB762970FB6F894DEBF0FBECDBF6E +:1019200096E0EFE3F3E0DE01179601900D929A95B1 +:10193000E1F796E0FE013796DE011D9601900D92CB +:101940009A95E1F798858823E9F0962B9E8786E0A3 +:10195000FE013D96DE01119601900D928A95E1F708 +:1019600086E0FE013196AFE3B3E001900D928A95D7 +:10197000E1F762960FB6F894DEBF0FBECDBFDF91E0 +:10198000CF91089560959623E1CF8093690370937A +:101990006B0360936A0380917A038430F9F4809337 +:1019A000E9008FEF9091E800815095FD06C095ED1C +:1019B0009A95F1F700008111F5CF8091E80085FF3D +:1019C0000DC050E040E063E070E089E693E00E94E3 +:1019D000F4068091E8008E778093E8000895BC01BA +:1019E00084E00C94C50CBC0183E00C94C50C9C01F4 +:1019F00084E08093E9009FEF8091E800915085FD9D +:101A000006C085ED8A95F1F700009111F5CF809120 +:101A1000E80085FF0CC050E040E066E070E0C901DE +:101A20000E94F4068091E8008E778093E800089584 +:101A3000CF93DF93EC0181E08093E9008FEF9091E9 +:101A4000E800815095FD06C095ED9A95F1F70000EC +:101A50008111F5CF8091E80085FF14C050E040E08F +:101A600068E070E0CE010E94F4068091E8008E7775 +:101A70008093E80088E0FE01A0E7B3E001900D92BA +:101A80008A95E1F7DF91CF910895CF92DF92EF929F +:101A90000F931F93CF93DF93CDB7DEB7CE5DD10900 +:101AA0000FB6F894DEBF0FBECDBF60917401809178 +:101AB000630480FF4CC0EEEFF5E09E012F5F3F4FC7 +:101AC0008E0101521F4FC901A4914A2F50E0DA0143 +:101AD000AA0FBB1FA40FB51FAB57BC4FCD90DD9015 +:101AE000EC90D901CD92DD92ED929D013196A01737 +:101AF000B10751F72091730143E0249F800D911DA0 +:101B00001124539A2BB1277F3BB138605FB7F8940B +:101B1000FC01649FE00DF11D1124BF01861797079A +:101B200049F55FBFEFE5F4E03197F1F700C0000041 +:101B3000C252DF4F0FB6F894DEBF0FBECDBFDF91AC +:101B4000CF911F910F91EF90DF90CF9008958091EA +:101B500075019091760123E0829FF0011124EB57EB +:101B6000FC4F891708F0A7CF1182108212828F5F75 +:101B70003396F7CFDC014D91CD01E8E03BB9000091 +:101B800000C047FF2BB9440F000000C000C000C0D8 +:101B90002BB900C0EA9591F7C1CF0F931F93CF9354 +:101BA000DF9300D00F92CDB7DEB7182F062F8091AC +:101BB000630480FF22C09E012F5F3F4F40EA64E62E +:101BC0008BE20E94CE081017C0F48B8199812A8184 +:101BD00033E0139FF0011124EB57FC4F21839083D6 +:101BE00082831F5F33960113F9CF0E94450D8FE961 +:101BF0009FE00197F1F700C000000F900F900F9049 +:101C0000DF91CF911F910F910895CF93DF93C82F4C +:101C1000D82FD17081FF04C067E084E00E94CD0D11 +:101C2000D11104C06FE18CE10E94CD0DC2FF06C04E +:101C300063E180E1DF91CF910C94CD0DDF91CF91E5 +:101C40000895E3E6F4E080818E7F8083EEE4F3E0A4 +:101C50008281816082832FEF80E792E02150804073 +:101C60009040E1F700C000000C94450D9F92AF92A8 +:101C7000BF92CF92DF92EF92FF920F931F93CF9379 +:101C8000DF937C015B016A018091D60201E010E0E4 +:101C90008A3010F40AE010E0C1E0D0E0F894B50119 +:101CA000C701F6010995982E0E946609911004C09B +:101CB00021960C171D076CF4892DDF91CF911F9190 +:101CC0000F91FF90EF90DF90CF90BF90AF909F90DB +:101CD0000895CC9F9001CD9F300D300D112490E0E0 +:101CE00080E045E34A95F1F70000019682179307DB +:101CF000C1F7D4CF8091A702811110C08091D80084 +:101D000080618093D8008AE18A95F1F700C08091C4 +:101D1000D90080FF0AC081E08093A70281E0909102 +:101D2000A702913009F080E0089582E08093A70235 +:101D30000E94A40610927A03F1CF0E947A0E8823A3 +:101D400051F0E0916003F0916103309721F0019030 +:101D5000F081E02D099480E008951F93CF93DF93E5 +:101D6000182FEB010E94010C8FE99FE00197F1F71A +:101D700000C000002197C1F7812FDF91CF911F9103 +:101D80000C94C80B0F931F93CF93DF9300D000D018 +:101D9000CDB7DEB789836A834B831C8204E610E0EB +:101DA00024E030E0AE014F5F5F4F60E084E10E94CD +:101DB000862F0F900F900F900F90DF91CF911F9172 +:101DC0000F91089580917001882329F047E669E911 +:101DD0008BE20C94C20E80913D0247EC6BE18823AC +:101DE000C1F341E265EA89EDF4CFCF92DF92EF9241 +:101DF000FF920F931F93CF93DF936C017B0164E6F7 +:101E000070E088E70E946E2EEC0197FD12C010E092 +:101E100000E0F601E00FF11F849164E670E00E949B +:101E2000E82EEC01892B29F40F5F1F4F0E151F05BB +:101E300081F70E940230CE01DF91CF911F910F9167 +:101E4000FF90EF90DF90CF90089580915C03909188 +:101E50005D03911103C091E089270895882369F0FB +:101E600062E070E08AE89BE00E94F50E892B19F091 +:101E700080915C03089510925C0380915C03EBCF2A +:101E8000CF93C0915C0380915D038823D1F00E94C1 +:101E90004E086058774C8E4F9F4F60935803709355 +:101EA000590380935A0390935B03C11108C062E009 +:101EB00070E088E89BE00E94F50E892B29F0C09124 +:101EC0005C038C2FCF91089581E080935C03F7CF62 +:101ED000CF93DF93C3EED2E060E0CE010E949C324C +:101EE0002196C11584E0D807B9F7DF91CF91089505 +:101EF0006F927F928F929F92AF92BF92CF92DF921A +:101F0000EF92FF920F931F93CF93DF938CE8C82E2D +:101F10008BE0D82E91ECE92EF12CE701CC58D109B9 +:101F200036011BC0F50185909490692DC8010E946F +:101F30009C32682DC80101960E949C3282E0A80E56 +:101F4000B11C0E5F1F4FC017D10761F78EE0680EFE +:101F5000711C2E96CE15DF0529F08E010E50110949 +:101F60005301E0CF7E018CE8E80EF11C8CE8C80E2E +:101F7000D11C8DE7E81683E0F80679F6DF91CF9162 +:101F80001F910F91FF90EF90DF90CF90BF90AF9097 +:101F90009F908F907F906F900895CF93C82F6FEF91 +:101FA000811162E283E290E00E949C326FEFC111E6 +:101FB00064E084E290E00E949C326FEFC11163E123 +:101FC00085E290E0CF910C949C3280E00E94CD0F8E +:101FD00060E086E290E00E949C320E94780F0E94AE +:101FE000680F81E00C94CD0F0F931F93CF93DF9375 +:101FF000C42FD0E0CC0FDD1F2EE0629FC00DD11D9D +:1020000011243CE8839FC00DD11D1124CE01879679 +:102010000E948832082F10E0102F0027CE018896EA +:102020000E9488329801282BC901DF91CF911F911E +:102030000F910895462F853038F47A3028F46730B0 +:1020400018F4672F0C94F40F90E080E00895CF927D +:10205000DF92FF920F931F93CF93DF936C01009158 +:10206000840380919802082BC7E0D0E010E0FC2E9A +:10207000C8010C2E02C0959587950A94E2F780FD61 +:102080000CC02197A0F7F12C8F2DDF91CF911F91DC +:102090000F91FF90DF90CF900895B6018C2F0E9492 +:1020A0001A100E94C209019761F3EECFCF93DF931C +:1020B000EC010E942710BE010E941A10DF91CF91FF +:1020C0000C94C209FC01808191810E945610292F35 +:1020D0002F7092959F7092509E3078F4E92FF0E027 +:1020E000ED5FFB4C0C945C32803F19F020F4883E8D +:1020F00020F481E00895843FE1F380E00895883E74 +:10210000C0F3813FD1F7F5CF822F869586958695CE +:10211000089583E290E00E948832823289F484E25A +:1021200090E00E948832843059F485E290E00E9469 +:10213000883291E0833109F090E0892F8170089511 +:1021400080E0FCCF1F93CF93DF93CDB7DEB76897C6 +:102150000FB6F894DEBF0FBECDBF40913F03509144 +:102160004003609141037091420380914303909139 +:1021700044030E94CB1A20933F03309340036093A3 +:10218000430370934403642F152F1195109341035B +:102190004093420386E0EFE3F3E0DE0117960190FF +:1021A0000D928A95E1F786E0FE013796DE011196E1 +:1021B00001900D928A95E1F79B858C8520917001A5 +:1021C0002223B1F0772761950CF47095072E000C4F +:1021D000880B990B0E9408332AE939E949E95EE343 +:1021E0000E946C330E94D032962F812F60E010E065 +:1021F0001B836C839D838E8386E0FE013196DE0116 +:102200001D9601900D928A95E1F786E0FE013D96BC +:10221000DE01539601900D928A95E1F786E0FE016A +:102220007396DE01119601900D928A95E1F786E092 +:10223000FE013196AFE3B3E001900D928A95E1F78C +:1022400086E0EFE3F3E0DE01179601900D928A95A8 +:10225000E1F786E0E9E3F3E0DE01119601900D92EB +:102260008A95E1F746E050E0BE016F5F7F4FCE01F7 +:1022700007960E947232892B79F0E0916003F09109 +:102280006103309749F082E080933F030480F58139 +:10229000E02D8FE393E009951092410310924203E1 +:1022A000109243031092440386E0EFE3F3E0A9E3C6 +:1022B000B3E001900D928A95E1F768960FB6F89415 +:1022C000DEBF0FBECDBFDF91CF911F910895E6E332 +:1022D000F2E086E0DF011D928A95E9F70C94A10BEC +:1022E0001F93CF93DF93CDB7DEB7AA970FB6F894BD +:1022F000DEBF0FBECDBF8CE793E02091F100DC0183 +:102300002D93CD01B3E084389B07B9F780917D030D +:10231000833009F472C0B8F4813009F449C08230C6 +:1023200009F4B5C08091E80083FF8DC280917C03E1 +:1023300090917D039A3008F086C2E92FF0E0EF5EBD +:10234000FB4C0C945C328A3009F490C08B3009F459 +:1023500071C0893039F780917C03813219F78091FF +:10236000800390918103009711F00297D9F6809134 +:10237000E800877F8093E8008091E80082FF38C002 +:102380009091F3008091F200029731F48091F10076 +:10239000813011F0863021F48091F10080936F0339 +:1023A0008091E8008B778093E8000E941E07BACFE7 +:1023B00080917C03813A09F0B5CF8091E800877F56 +:1023C0008093E8008091800390918103892B61F4D0 +:1023D00068E080E793E070E00E94D0078091E80019 +:1023E0008B778093E8009ECF60E090E080E0F3CFB1 +:1023F00080917A038111C0CF95CF80917C03813A7F +:1024000009F090CF8091800390918103892B09F08E +:1024100089CF8091E800877F8093E8008091E80071 +:1024200080FFFCCF809178018093F1008091E800DB +:102430008E77B9CF80917C03813209F073CF809180 +:10244000800390918103892B09F06CCF8091E80083 +:10245000877F8093E8000E941E0780917E0380930F +:10246000780110926D030E9467115CCF80917C030C +:10247000813209F057CF8091E800877F8093E80090 +:102480000E941E0780917F0380936E034BCF809143 +:102490007C03813A09F046CF8091E800877F8093E2 +:1024A000E8008091E80080FFFCCF80916E03BCCFF4 +:1024B000803899F0823809F0C6C1809180038F700E +:1024C000873008F0C0C18093E9008091EB0085FB64 +:1024D000882780F91092E90006C0809178039091D6 +:1024E0007903911182609091E800977F9093E800C2 +:1024F0008093F1001092F1008091E8008E779FC1E7 +:10250000882309F48DC1823009F09DC180917E033A +:10251000811190C1809180038F702FEF280F26309A +:1025200008F091C18093E9002091EB0020FF82C167 +:10253000933031F48091EB0080628093EB007AC19C +:102540009091EB0090619093EB0021E030E001C0AE +:10255000220F8A95EAF72093EA001092EA00809110 +:10256000EB008860EACF81116EC110917E031F7766 +:102570008091E3008078812B8093E3008091E800D4 +:10258000877F8093E8000E941E078091E80080FF0B +:10259000FCCF8091E30080688093E30082E011111A +:1025A00083E080937A034FC18058823008F04BC19A +:1025B00020917E0330917F032C3DE3E03E07A1F59F +:1025C00083E08A838AE289834FB7F894DE01139609 +:1025D00020E03EE051E2E32FF0E050935700E49119 +:1025E00020FF03C0E295EF703F5FEF708E2F90E009 +:1025F000EA30C0F0C7968D939D932F5F243159F731 +:102600004FBF8091E800877F8093E8006AE270E026 +:10261000CE0101960E94D0078091E8008B778093CD +:10262000E80011C1C096E7CF8091800390918103AB +:10263000432F55274330510509F44AC078F54130FE +:10264000510509F47AC08BE590E0ECE8FBE04230FC +:10265000510509F0F8C02091E800277F2093E80099 +:1026600020918203309183038217930708F49C0121 +:1026700040E02115310509F065C0411163C080912A +:10268000E80082FDC9CF80917A03882329F2853042 +:1026900019F28091E80083FFF2CFBECF413251059D +:1026A00009F43CC04232510509F0CDC08330910598 +:1026B00008F0C9C0FC01EE0FFF1FEB5DFD4F01905C +:1026C000F081E02D8E5D9D4FDC018C9190E01AC071 +:1026D000332721303105D1F02115310561F0223049 +:1026E000310509F0B0C0E9EFFBE0E4918E2F90E0F6 +:1026F000E9EFFBE007C0EBE2FCE0E4918E2F90E015 +:10270000EBE2FCE0009709F49EC0A5CFE9E1FCE014 +:10271000E4918E2F90E0E9E1FCE0F4CF8330910565 +:1027200008F091C0880F991FFC01E55DFD4F0190F5 +:10273000F081E02D89E090E08ECF82E190E0E7EE3D +:10274000FBE089CF80917A03882309F465CF853037 +:1027500009F462CF8091E80083FD5ECF8091E800AC +:1027600082FD8DCF8091E80080FF83CF9091F300B0 +:102770008091F2002115310519F08830910550F053 +:1027800041E0089709F040E08091E8008E7780935F +:10279000E8006FCF44914093F10031962150310908 +:1027A0000196E8CF803809F04EC08091E800877F1D +:1027B0008093E80080917B038093F1009DCE81118E +:1027C00042C010917E031230F0F58091E800877FBF +:1027D0008093E80010937B030E941E07112311F0E1 +:1027E00084E005C08091E30087FDFACF81E080930B +:1027F0007A0342E061EC81E00E943D0742E261EC35 +:1028000084E00E943D0742E261EC82E00E943D07C5 +:1028100042E260EC83E00E943D0780917A0313C09E +:1028200080917E03813079F481E0933009F080E07B +:10283000809379031092E9008091E800877F80936C +:10284000E8000E941E078091E80083FF0AC0809183 +:10285000E800877F8093E8008091EB00806280939E +:10286000EB00AA960FB6F894DEBF0FBECDBFDF9186 +:10287000CF911F9108951F93CF93DF93162FC0918F +:102880006A06D0916B068A30D1F420915103CE01B3 +:102890008A569440622F70E00E942832281B822FB3 +:1028A00066E00E943C32C82FC15020F4DF91CF91E6 +:1028B0001F91089560E080E20E943B14F5CF8D30B7 +:1028C000E9F4CA56D44020915103622F70E0CE0142 +:1028D0000E942832281B822F9E01280F311D2115AE +:1028E000324018F080E0D0E0C0E0C80FD11DC659DA +:1028F000DB4FD0936B06C0936A06D8CF96E0FE01FB +:10290000A2E5B3E001900D929A95E1F7803E90F137 +:1029100086E0FE0111928A95E9F7C0916A06D0918E +:102920006B06111133C046E050E0BE0182E593E032 +:102930000E9472329E012A563440892B91F52A5FFB +:102940003F4F40915103642F70E0C9010E9428322B +:10295000481B463010F4240F311D211572E0370753 +:1029600010F030E020E026593B4F30936B06209367 +:102970006A069CCFF6E08F9FB0011124685B794F07 +:1029800046E050E0CE010E946932C7CF9E012A5F27 +:102990003F4FFE012E173F0731F2808180958193D2 +:1029A000F9CFC90145E0969587954A95E1F741E051 +:1029B00050E0BA0102C0660F771F8A95E2F7CB019B +:1029C0006091680470916904862B972BB9016B5F45 +:1029D0007F4FE5E076956795EA95E1F702C0440FF1 +:1029E000551F6A95E2F7842B952B90936904809389 +:1029F0006804A5CFFF920F931F93CF93DF93EC0151 +:102A0000F62EFC0101900020E9F78F010150110919 +:102A1000C017D10730F0DF91CF911F910F91FF9038 +:102A200008956F2D89910E943B14F2CFCF92DF92CF +:102A3000EF92FF926B017C010E94B808B701A601DA +:102A400088E090E0FF90EF90DF90CF900C94AE3252 +:102A5000AF92BF92CF92DF92EF92FF920F931F93AC +:102A6000CF93DF9300D00F92CDB7DEB7082FF62EAD +:102A7000142FE22E8091630480FF4FC0E82FE6956B +:102A8000AE2FB0E0AA5EBD4F9C9190934E038E7F17 +:102A9000823009F056C0413A08F040EA9E012F5FAB +:102AA0003F4F6F2D802F0E94CE088091630480FFDE +:102AB00011C02B8139814A818091750190917601F5 +:102AC00053E0859FF0011124EB57FC4F891798F1D3 +:102AD0000E94450D80916404801308C080916504B4 +:102AE0008F1104C080916604811729F080915003F2 +:102AF00082608093500300936404F0926504109305 +:102B00006604EE2051F0609163047091640480913A +:102B10006504909166040E9416150F900F900F9017 +:102B2000DF91CF911F910F91FF90EF90DF90CF90A9 +:102B3000BF90AF9008954183308322838F5F339697 +:102B4000C5CF923039F6E2508E2F8170D82EE6959F +:102B5000F0E0E750FA4FA590B490C12CBB246091EF +:102B60007701C61608F0B4CF2C2D30E0A29EC0012C +:102B7000A39E900DB29E900D112470E00E94283209 +:102B8000802FD11016C0860F40917501420F532F30 +:102B9000511D9A01220F331F240F351F2B573C4F15 +:102BA000412F113A08F040EA6F2D0E94CE08C394DD +:102BB000D6CF861BE9CF20E00C942815CF93C82FE1 +:102BC0000E94750C823069F138F48823A9F08130B5 +:102BD00011F18C2FCF910895833039F18430C9F7EA +:102BE00040E56FEF8AED0E94DB158091000188239C +:102BF00081F3109270010CC040E56AEA83E70E94FD +:102C0000DB15809100018823A1F381E0809370019E +:102C10000E94E20EDECF40E56FEF8CEF0E94DB15E5 +:102C2000D8CF40E56FEF80E5F9CF40E56FEF80EA60 +:102C3000F5CF0E94DE15809384030C94A10B809144 +:102C40008403982F9670963019F488600C941916A6 +:102C5000877FFCCF21E030E001C0220F8A95EAF7A0 +:102C600020958091840382230C94191621E030E092 +:102C700001C0220F8A95EAF780918403822B0C947D +:102C80001916E3E6F4E0438121E1421B08F440E039 +:102C900021E0628181810C942815E3E6F4E0438110 +:102CA00021E1420F08F44FEF21E0628181810C9411 +:102CB0002815E3E6F4E0628121E1621B08F460E09C +:102CC00021E0438181810C942815E3E6F4E06281E0 +:102CD00021E1620F08F46FEF21E0438181810C94C0 +:102CE0002815E3E6F4E0818121E043816281885088 +:102CF0000C942815E3E6F4E0818121E043816281B0 +:102D0000885F0C94281580916704882319F08150FE +:102D100080936704609163047091640480916504FA +:102D2000909166040C94161580916704833018F412 +:102D30008F5F809367046091630470916404809155 +:102D40006504909166040C9416159091630490FFAD +:102D500026C0917081111CC0926090936304809191 +:102D60005003816080935003662351F060916304A7 +:102D70007091640480916504909166040E94161518 +:102D80004091660460916504809164040C94DB15A5 +:102D90008C3010F09661E1CF880F982BDECF08952C +:102DA000809163048695815009F48BE061E00C9476 +:102DB000A5168091630486958F5F8C3008F081E0C2 +:102DC00061E00C94A5168091630480FF07C086958E +:102DD00082588F77893010F40C94D91661E082E024 +:102DE0000C94A516E3E6F4E083E0808311828FEF74 +:102DF000828380EA83831482AEE4B3E012968C91DE +:102E00001297836012968C93608171818281938185 +:102E10000C9416150E94682E40E060E080E00C944F +:102E2000C20E69EE7EEF90E080E00E94BA3260E070 +:102E300082E090E00E949C3260E083E090E00E949B +:102E40009C321092980260E084E090E00E949C32F4 +:102E500060E082E290E00E949C3260E085E090E0D9 +:102E60000E949C3260E086E090E00E949C326FEF0E +:102E700087E090E00E949C3240E050E0BA0188E098 +:102E800090E00E94AE3260E08DE090E00E949C32C3 +:102E900040E050E0BA0188E190E00E94AE3260E08C +:102EA00087E190E00E949C3240E050E0BA018CE162 +:102EB00090E00E94AE3270E060E080E290E00E941C +:102EC000BA3240E050E0BA0188E190E00E94AE32B0 +:102ED00080E00E94CD0F0E94E50F40E050E0BA0173 +:102EE0008FE090E00E94AE3240E050E0BA0183E112 +:102EF00090E00C94AE320F931F93CF93DF9300D0EA +:102F000000D0CDB7DEB76091CA027091CB0280913C +:102F1000CC029091CD020E94320864367105810581 +:102F2000910588F10E947A0E882379F10E944E085B +:102F30006E5F7F4F8F4F9F4F69837A838B839C8314 +:102F400080912D0190912E018B549D4F40912C0129 +:102F500050E04530510510F044E050E0BE016F5F95 +:102F60007F4F0E947F3284E090E00E947431892B71 +:102F7000D9F40E944E086093CA027093CB028093EA +:102F8000CC029093CD0281E010C00E944E080091C7 +:102F9000D7021091D8022091D9023091DA02600F45 +:102FA000711F821F931FC4CF80E00F900F900F906E +:102FB0000F90DF91CF911F910F910895BF92CF9203 +:102FC000DF92EF92FF920F931F93CF93DF93B82E70 +:102FD000EB01F42E6901688179818A819B810E94CD +:102FE0003208643671058105910510F4FF2019F14E +:102FF000EB2C0B2C000CFF088B2D9AE08902F001C2 +:103000001124EE5FFE4F838194818B549D4F42814A +:1030100050E00417150708F4A801B6010E947F329A +:10302000C7010E947431892B89F40E944E0868837D +:1030300079838A839B8381E0DF91CF911F910F91E8 +:10304000FF90EF90DF90CF90BF90089580E0F4CF95 +:103050000F931F93CF93DF930F92CDB7DEB780917D +:103060005C0389832091C90290E041E0281719068A +:1030700009F440E001E010E09E012F5F3F4F62ED58 +:1030800072E086E00E94DE170F90DF91CF911F91D2 +:103090000F9108950F931F93CF93DF93CDB7DEB7B2 +:1030A00028970FB6F894DEBF0FBECDBF85E0E3E6EC +:1030B000F4E0DE01119601900D928A95E1F780917E +:1030C0004E0390914F03A09150038E839F83A88756 +:1030D00041E08885811101C040E008E010E09E01D8 +:1030E0002F5F3F4F6EEC72E085E00E94DE1781118A +:1030F0001092500328960FB6F894DEBF0FBECDBFD6 +:10310000DF91CF911F910F9108956F927F928F92CF +:103110009F92AF92BF92CF92DF92EF92FF920F9366 +:103120001F93CF93DF930F92CDB7DEB7862E5A0150 +:103130006901682E880F7708C3010E947431892BBA +:1031400009F07BC08AE0869DF001879DF00D112477 +:10315000EE5FFE4F458150E04115510511F041E011 +:1031600050E08AE0869DF001879DF00D1124EE5F0E +:10317000FE4F668177816B547D4FCE0101960E9490 +:103180007F32F50160817181828193810E943208D2 +:10319000643671058105910540F4B701C8010E94AC +:1031A0009D089981891709F44FC0082C000C9908D3 +:1031B000C4010E947431892B91F0B12C8B2D0F909A :1031C000DF91CF911F910F91FF90EF90DF90CF9003 -:1031D000BF90089580E0F4CF0F931F93CF93DF93B8 -:1031E0000F92CDB7DEB780915E0389832091C9022B -:1031F00090E041E02817190609F440E001E010E0F2 -:103200009E012F5F3F4F62ED72E086E00E94A218A0 -:103210000F90DF91CF911F910F9108950F931F93FE -:10322000CF93DF93CDB7DEB728970FB6F894DEBF04 -:103230000FBECDBF85E0E9E6F4E0DE011196019016 -:103240000D928A95E1F780914E0390914F03A091E2 -:1032500050038E839F83A88741E08885811101C038 -:1032600040E008E010E09E012F5F3F4F6EEC72E0FF -:1032700085E00E94A21881111092500328960FB683 -:10328000F894DEBF0FBECDBFDF91CF911F910F919C -:1032900008956F927F928F929F92AF92BF92CF923A -:1032A000DF92EF92FF920F931F93CF93DF930F92D2 -:1032B000CDB7DEB7862E5A016901682E880F7708D0 -:1032C000C3010E940334892B09F07BC08AE0869DEC -:1032D000F001879DF00D1124EE5FFE4F458150E017 -:1032E0004115510511F041E050E08AE0869DF00162 -:1032F000879DF00D1124EE5FFE4F668177816B5440 -:103300007D4FCE0101960E940E35F50160817181DD -:10331000828193810E94320864367105810591058E -:1033200040F4B701C8010E94E3089981891709F4A4 -:103330004FC0082C000C9908C4010E940334892B4B -:1033400091F0B12C8B2D0F90DF91CF911F910F91A8 -:10335000FF90EF90DF90CF90BF90AF909F908F90B5 -:103360007F906F9008958AE0889DF001899DF00D0F -:103370001124EE5FFE4F458150E0E416F50608F497 -:10338000A7018AE0889DF001899DF00D1124EE5F70 -:10339000FE4F668177816B547D4FC6010E940E35CA -:1033A000B701C8010E94E30899818913CACF0E941E -:1033B0004E08F5016083718382839383BB24B394A9 -:1033C000C1CFB12CA701B801C6010E940E35BACFFA -:1033D000BB24B394F7CFCF92DF92EF92FF920F937B -:1033E0001F93CF93DF9300D000D00F92CDB7DEB7FD -:1033F0006B0185E0E82EF12C06EB12E09E012F5FB9 -:103400003F4F4DEA52E061E080E00E944919882375 -:1034100049F095E0FE013196A8EAB2E001900D92E4 -:103420009A95E1F795E0E8EAF2E0D60101900D9275 -:103430009A95E1F70F900F900F900F900F90DF91FA -:10344000CF911F910F91FF90EF90DF90CF90089553 -:1034500090E080E00E942535893E9E4F11F40C9447 -:10346000CF1080E008951F920F920FB60F92112493 -:103470002F933F934F935F936F937F938F939F937C -:10348000AF93BF93CF93DF93EF93FF93D091E90076 -:10349000DF708091EC00C82FC17080FDC0E81092F1 -:1034A000E9008091F000877F8093F00078940E947B -:1034B000B7111092E9008091F00088608093F000CD -:1034C000CD2BCF70C093E900FF91EF91DF91CF91A9 -:1034D000BF91AF919F918F917F916F915F914F912C -:1034E0003F912F910F900FBE0F901F9018951F9234 -:1034F0000F920FB60F9211242F933F934F935F9328 -:103500006F937F938F939F93AF93BF93EF93FF93AB -:103510008091E10082FF09C08091E20082FF05C036 -:103520008091E1008B7F8093E1008091DA0080FF41 -:1035300024C08091D80080FF20C08091DA008E7F67 -:103540008093DA008091D90080FF9DC080E189BD21 -:1035500082E189BD09B400FEFDCF81E08093800344 -:1035600080917203811109C00E94A4060E946F0716 -:103570008091E20084608093E2008091E10080FF0E -:1035800017C08091E20080FF13C08091E2008E7F1F -:103590008093E2008091E20080618093E20080915C -:1035A000D80080628093D80019BC85E080938003A6 -:1035B0008091E10084FF2BC08091E20084FF27C04E -:1035C00080E189BD82E189BD89B5982F917080FF26 -:1035D000FBCF8091D8008F7D8093D8008091E1004F -:1035E0008F7E8093E1008091E2008F7E8093E200E5 -:1035F0008091E20081608093E200809181038823C2 -:1036000009F447C084E08093800380918003809117 -:10361000E10083FF27C08091E20083FF23C08091F7 -:10362000E100877F8093E10082E080938003109225 -:1036300081038091E1008E7F8093E1008091E20020 -:103640008E7F8093E2008091E20080618093E200AF -:1036500042E060E080E00E943D078091F0008860D9 -:103660008093F000FF91EF91BF91AF919F918F9167 -:103670007F916F915F914F913F912F910F900FBE6E -:103680000F901F90189519BC10928003109272032E -:1036900074CF8091E30087FD93E090938003B5CFD2 -:1036A00078941F921FB61F9211248F939F93AF930C -:1036B000BF9380916B0390916C03A0916D03B091C7 -:1036C0006E030196A11DB11D80936B0390936C0353 -:1036D000A0936D03B0936E03BF91AF919F918F91B3 -:1036E0001F901FBE1F9018959C014FB7F8948091B2 -:1036F0006B0390916C03A0916D03B0916E034FBF6B -:10370000821B930B08952FB7F89480916B039091CF -:103710006C03A0916D03B0916E032FBF0895AF921B -:10372000BF92DF92EF92FF920F931F93CF93DF939D -:10373000CDB7DEB761970FB6F894DEBF0FBECDBF31 -:103740004C87888B998BE52ED62EF72E5E0127E0CD -:10375000A20EB11C85E0F50111928A95E9F78091DE -:103760004D038A3008F095C080914B0390914C0333 -:103770000E94741B089708F48CC004E610E025E052 -:1037800030E0A50164E084E10E944232892B09F017 -:10379000DEC010924D038B8587FDD1C0E894E0F820 -:1037A0008091490390914A03009709F0C2C08F812C -:1037B0009885891708F091C0981B892F41E02091C6 -:1037C000710130917201889FC001112455E0589F0A -:1037D000F001599FF00D1124E29FB001E39F700D9D -:1037E000F29F700D1124660F672F661F770B71957E -:1037F000442319F071956195710980914703909167 -:103800004803680F791F89859A85891708F068C071 -:10381000981B892F41E0889FC001112455E0589FD3 -:10382000F001599FF00D1124E29FC001E39F900D1C -:10383000F29F900D1124880F892F881F990B919565 -:10384000442319F091958195910920914503309178 -:103850004603820F931F603871050CF444C06F5704 -:10386000710970934803609347033FE7D32E803874 -:1038700091050CF44BC08F579109909346038093A8 -:1038800045039FE7F92E0E94831B90934C0380937E -:103890004B03ED86DE86FF8686E0FE013C96DE0168 -:1038A000119601900D928A95E1F729813A814B8119 -:1038B0005C816D817E8180E090E061960FB6F89426 -:1038C000DEBF0FBECDBFDF91CF911F910F91FF9053 -:1038D000EF90DF90BF90AF900895891B40E06FCFCD -:1038E000891B40E098CF6138FFEF7F074CF46158A7 -:1038F0007F4F709348036093470321E8D22EB7CFE0 -:10390000D62E1092480310924703B1CF81382FEF83 -:1039100092074CF481589F4F909346038093450340 -:1039200081E8F82EB0CFF82E10924603109245038E -:10393000AACF019790934A0380934903A4CF689438 -:10394000E0F884E00E94691584E190E0F3CF809173 -:103950004D038F5F80934D0396CF5F926F927F925E -:103960008F929F92AF92BF92CF92DF92EF92FF928F -:103970000F931F93CF93DF9300D000D00F92CDB75A -:10398000DEB77C01FC0183819481892B31F0808139 -:10399000918189238F3F09F0DDC60F900F900F9022 -:1039A0000F900F90DF91CF911F910F91FF90EF90AB -:1039B000DF90CF90BF90AF909F908F907F906F904F -:1039C0005F9008950E946D10182F682F89819A8149 -:1039D0000E94BB0B69817A81812F0E9460108C014B -:1039E000F7018281882361F0F801E65EFC45ED3045 -:1039F000F10530F4E655F94C0C94EB340E94C417F1 -:103A0000D0906003D0FE1CC08D2D86958370F70189 -:103A10009281992309F460C1823090F4B701C80102 -:103A20000E948608882361F0D694D694D69480911B -:103A3000610383708295880F807E8D290E946915AD -:103A4000F7018281882309F47AC6C80182519F4513 -:103A5000409708F036C68FEF93E00E941735025169 -:103A600093EEA92E92E0B92E811197CF011138C1A2 -:103A70001C821B82662463948AE0582E85010F5FA6 -:103A80001F4FC5010E94173589831A82882309F4C4 -:103A900084CF9FEF980F933008F031C18A836982F9 -:103AA00032E0A30EB11CC8010E9417358B83882316 -:103AB00009F473CF8E010F5F1F4FF801208122237D -:103AC000E9F2213009F055C191818281913009F0EC -:103AD00018C10E5F1F4F6AE070E0893311F460E592 -:103AE00070E00E94F30E13C10E94B51789CF809138 -:103AF000600380FF0DC00E94B51760916003709154 -:103B0000610380916203909163030E94781778CFDC -:103B10000E94C417F2CF0E94A31772CF9091600346 -:103B2000892F86958F5F8370880F997F892B80936B -:103B30006003982F9670963001F7897F8093600319 -:103B4000DCCF90916103892F8B7F92FF84608093FB -:103B50006103D3CF80916003982F969596959695A3 -:103B60008091610383708295880F807E892B8C37CA -:103B700098F48F5F282F220F220F220F909160035D -:103B80009770922B909360038295869583709091A5 -:103B900061039C7F892BDBCF81E0ECCF80916003B8 -:103BA000982F96959695969580916103837082954E -:103BB000880F807E892B11F08150DCCF8BE7DACF24 -:103BC00030916103932F9695969596952091620377 -:103BD000822F83708295880F807E892B90E00196DA -:103BE000482F440F440F440F3770342B3093610338 -:103BF00035E0969587953A95E1F783702C7F822B77 -:103C0000809362037ACF30916103932F96959695B6 -:103C1000969520916203822F83708295880F807E13 -:103C2000892B8150990BDCCF8091620382FF12C0F7 -:103C30008B7F809362036091600370916103809138 -:103C40006203909163030E94781760E081E00E9414 -:103C50005D15D6CE8460809362036091600370919D -:103C6000610380916203909163030E94781760E082 -:103C70008CE00E945D1564E182E00E945D1565E0C4 -:103C800081E00E945D1561E08CE0E1CF80916203EC -:103C9000982F969596959695809163038295880FB7 -:103CA000807E892B883720F4865F0E947E17A8CEFD -:103CB00088E7FBCF80916203982F9695969596950D -:103CC000809163038295880F807E892B843110F068 -:103CD0008A50EBCF84E1E9CF882309F4B1CE9ECEA0 -:103CE000A114F4E0BF0609F458CEC5010E941735AF -:103CF000811101C001502FEFA21AB20AB7CE5801AC -:103D0000D9CE923039F40E5F1F4F0E94470C0F5FDF -:103D10001F4FD3CE933029F40E5F1F4F0E940E0C1D -:103D2000F6CF943019F00F5F1F4FF1CF0E5F1F4F8A -:103D300030E020E0B8016F5F7F4FF8014181805390 -:103D4000990B8A30910550F02150310900F38FE929 -:103D50009FE00197F1F700C00000F6CF529EF001FE -:103D6000539EF00D11249C012E0F3F1F842F8B01B9 -:103D7000E1CFE22FF0E0E754FE4F7490822F86955A -:103D80008695869590E0FC01E755FE4FE4902770FC -:103D9000F12C022E02C0F594E7940A94E2F7E1E0D8 -:103DA000EE22FF24FC01E756FE4FC490D12C022ED8 -:103DB00002C0D594C7940A94E2F7F1E0CF22DD2443 -:103DC000FC01E757FE4F8490912C02C09594879494 -:103DD0002A95E2F721E082229924E114F10419F0F6 -:103DE00081EE0E94470CC114D10419F086EE0E94A6 -:103DF000470C39E36AE070E0731202C060E570E0DE -:103E0000872D0E94F30ECD2819F086EE0E940E0C2D -:103E1000EF2819F081EE0E940E0C892809F477CF63 -:103E20006AE070E08CE25DCE81E00E94A41603C0DF -:103E300081E00E9498160F900F900F900F900F90B6 -:103E4000DF91CF911F910F91FF90EF90DF90CF9076 -:103E5000BF90AF909F908F907F906F905F900C94E9 -:103E60008D1682E0E2CF003E110509F457C008F03C -:103E70004DC00C32110509F487C1F70192819111EF -:103E800086C28091730382720A3CFCE51F0709F425 -:103E90005EC208F0B4C1053C3CE5130709F443C217 -:103EA00008F098C1033C5CE5150709F41DC208F051 -:103EB00035C2023C1C4509F4C7C1F70100811181DC -:103EC000992309F47EC2C8010E946D10D82E682F74 -:103ED000C8010E94BB0BB8018D2D0E9460100E948A -:103EE000080A182FB82EF70122814581342F329508 -:103EF0003F70892F82958F70C82ED12C8C3008F09E -:103F000098C2F601E954F94C0C94EB34013E1105CA -:103F100009F4A5C0043E110509F0AFCF882309F4C8 -:103F200030C181E08093F20280918A030E94BB0C31 -:103F3000813009F0A2CF83E30E9469159ECF033838 -:103F4000FFE51F0709F46EC060F5053F110509F490 -:103F500014C140F4043F110509F08FCF61E00E94C5 -:103F6000CC0C8BCF063F110509F409C102383FE59F -:103F7000130709F082CF882309F47FCF81EE0E94D6 -:103F8000470C83EE0E94470C8FE40E94470C8FE49D -:103F90000E940E0C83EE0E940E0C81EE0E940E0C0D -:103FA0006CCF05384FE5140709F4B5C008F45AC0C2 -:103FB00006389FE5190709F4C6C00738EFE51E0764 -:103FC00009F05BCF882309F4E8CC87E20E94470C14 -:103FD000FFEF28EA31E0F15020403040E1F700C027 -:103FE00000008CE20E94470C87E20E940E0C8BE1DD -:103FF0000E94470C4FEF50EE80E04150504080400F -:10400000E1F700C000008CE20E940E0C8BE10E94E0 -:104010000E0C40E56FEF84EB0E943D1681E080932B -:104020003E02BBCC882309F428CF81EE0E94470CC6 -:1040300083EE0E94470C80E50E94470C80E5A8CFE4 -:10404000809342021093410200934002882321F0A2 -:1040500081E08093F30211CF1092F3020ECF809390 -:104060003F02F0CF882379F180913F02882349F005 -:10407000809140020E940E0C80EE0E94470C8AE262 -:104080000CC0809142028823D1F3809140020E94AB -:104090000E0C80EE0E94470C8CE40F900F900F9056 -:1040A0000F900F90DF91CF911F910F91FF90EF90A4 -:1040B000DF90CF90BF90AF909F908F907F906F9048 -:1040C0005F900C94470C8AE20E940E0C8CE40E94D4 -:1040D0000E0C80EE0E940E0C80913F02811105C0F3 -:1040E00080914202882309F458CC80914002D5CFB8 -:1040F000882309F4C2CE80913E02882309F4BDCE04 -:104100000E94831B9093A1028093A00210923E0212 -:1041100010920101B2CE882309F420CF8091700162 -:10412000811104C080910001882339F01092700140 -:10413000109200010E94280FA0CE81E080937001B0 -:1041400080930001F7CF882309F408CF80913D02C6 -:10415000882349F080EE90E0909372018093710182 -:1041600010923D02E7CF86E690E090937201809333 -:10417000710181E080933D02DDCF62E0F0CE64E02A -:10418000EECE1092F20279CE882331F081E0809356 -:10419000F5021092680171CE1092F5026ECE88235E -:1041A00049F080918A030E94BB0C813019F482E3AC -:1041B0000E946915F7018281882309F4B2C28091B7 -:1041C0008A030E94BB0C813009F0ABC284E30E94D9 -:1041D0006915A7C2073C2CE5120709F4AEC008F424 -:1041E000A7C0083C4CE5140709F4ACC0093C1C45C9 -:1041F00009F063CE4FEA56E16BEB76E179C0043DFE -:10420000ECE51E07A8F40E3CFCE51F0708F0C5CB43 -:104210000C3C2CE5120709F49FC041EF56E162E027 -:1042200077E10D3C1C4508F463C061E081E046C0C5 -:10423000053D4CE5140709F4B0CB08F492C00D35E8 -:104240001D4509F4AACB39CE8091690480FF31C0A5 -:104250008E7F809369046091690470916A048091F3 -:104260006B0490916C040E947815809150038160DA -:10427000809350039FEFE0E7F2E09150E040F04080 -:10428000E1F700C000000F900F900F900F900F907B -:10429000DF91CF911F910F91FF90EF90DF90CF9022 -:1042A000BF90AF909F908F907F906F905F900C9495 -:1042B0008B0D81608093690461E086950F900F906B -:1042C0000F900F900F90DF91CF911F910F91FF9062 -:1042D000EF90DF90CF90BF90AF909F908F907F90A6 -:1042E0006F905F900C9413174EE357E167E477E10A -:1042F0000F900F900F900F900F90DF91CF911F9123 -:104300000F91FF90EF90DF90CF90BF90AF909F9074 -:104310008F907F906F905F900C94F90847E457E17D -:104320006EE377E1E5CF4FED56E168EE76E1E0CF61 -:1043300048EE56E16FED76E1DBCF47EC56E163EDF9 -:1043400076E1D6CF43ED56E167EC76E1D1CF4BEB8A -:1043500056E16FEA76E1CCCF42E057E161EF76E1DA -:10436000C7CF0F900F900F900F900F90DF91CF91CC -:104370001F910F91FF90EF90DF90CF90BF90AF9083 -:104380009F908F907F906F905F900C9451170E3D8F -:104390001C4509F092CD0F900F900F900F900F9049 -:1043A000DF91CF911F910F91FF90EF90DF90CF9011 -:1043B000BF90AF909F908F907F906F905F900C9484 -:1043C000DA17C8010E94930BD82E85CD092F0F70E4 -:1043D000907F11F00295007F812F2223C9F00023E6 -:1043E00069F090E2910F983010F011110BC080919C -:1043F0007303082B009373030E94720B812F0E949A -:10440000470C17C080919702082B00939702F4CFB6 -:104410000E940E0C002369F00095105E183010F019 -:10442000B11027C0809173030823009373030E9487 -:10443000720B98E0C91AD108E4E0CE16D10408F056 -:10444000ACCA0E94E30E0F900F900F900F900F9048 -:10445000DF91CF911F910F91FF90EF90DF90CF9060 -:10446000BF90AF909F908F907F906F905F900C94D3 -:104470004B0E80919702082300939702D8CF892F83 -:104480008F70907F903211F08295807FF1E0BF12A3 -:104490000CC0222329F0333060F60E94040CC9CFEF -:1044A000323038F60E94F90BC4CF222341F0332377 -:1044B000A1F340FFA3CF4F70F7014583EECF332325 -:1044C00089F3193309F0F5C0FFEF27EE33E0F1501F -:1044D00020403040E1F700C00000812F0E940E0C08 -:1044E000A8CF892F86958695837061F0813009F079 -:1044F000A0CF812F9370211102C090E080E00E9434 -:104500005A0897CF812F9370211102C090E080E06C -:104510000E9470088ECF892F8370A1F5211189CF59 -:10452000812F829586958770880F880F412F4F7055 -:10453000082E01C0440F0A94EAF7212F207114FFBE -:1045400007C02FE030E001C0220F8A95EAF72095DE -:10455000969596959370923081F0822F842B9330AC -:1045600030F480919802913029F0242B82230E940C -:10457000F50B5FCF842B822BFACF242B80919802EE -:104580008227F5CF8695222311F0892F8170882309 -:1045900009F44FCF812F829586958770880F880FF9 -:1045A000412F4F70082E01C0440F0A94EAF7212FC3 -:1045B000207114FF07C02FE030E001C0220F8A9560 -:1045C000EAF72095969596959370923081F0822F18 -:1045D000842B933030F480918A03913029F0242B7E -:1045E00082230E94871625CF842B822BFACF242B7F -:1045F00080918A038227F5CF092F0F70222329F09B -:10460000802F0E94A416812F48CF812F0E94F90B82 -:10461000802F0E9498160DCF812FE1EF1E1789F190 -:10462000E11750F0F0EF1F17B9F02223B1F131116B -:10463000E5CE892F8F7129C042EF141749F153EF4E -:104640001513F3CF80E0222361F29F7181E001C056 -:10465000880F9A95EAF7C5CF222379F0323008F017 -:10466000E8CE292F2F7181E090E001C0880F2A95B4 -:10467000EAF790918A038927B4CF333008F0D9CE76 -:10468000F0CF892F8F71222321F20E94A416D1CE60 -:10469000892F8F712223C9F3BCCF332379F089335B -:1046A00041F48FEF97EEE3E081509040E040E1F776 -:1046B00012CF8FE39CE90197F1F70DCF892F8F710E -:1046C000A8CF0031FFE51F0709F4AECB01312FE57C -:1046D000120709F4C6CB0E944E086093FA02709349 -:1046E000FB028093FC029093FD02F7018281053E5C -:1046F000110509F4A5CC08F022CC0132110508F00F -:10470000B2CB0E31110508F0F3CC0A30110509F4D3 -:1047100046CD0531110509F44DCD0930110509F0DB -:10472000ACCBF7018281882309F4A7CB80918A035F -:104730000E94BB0C813009F0A0CB81E3FDCB00319E -:104740003FE5130709F474CB01314FE5140769F60F -:1047500082E06FCB85E0DE01119601900D928A9583 -:10476000E1F7F701228189819A8121112BC90E94E9 -:10477000930B182F2FC91F93CF93DF938091630260 -:10478000807FA9F480916002882389F0809195024E -:10479000D091640260915E0270915F02A09161020B -:1047A000B0916202C62FC72316E0D81304C0DF9170 -:1047B000CF911F91089590E0109711F0CF3F19F419 -:1047C00001968770F2CF189F9001199F300D112428 -:1047D000F901EB59FD4F41814713F2CF4081461358 -:1047E000EFCF42814111ECCF438154814A1B5B0BD7 -:1047F000403A510528F7809163028F708061809361 -:104800006302F901E659FD4F80818F7080618083DA -:104810008EE592E00E94AD1CDF91CF911F910C9428 -:10482000890BAF92BF92CF92DF92EF92FF920F93DC -:104830001F93CF93DF93CDB7DEB761970FB6F89490 -:10484000DEBF0FBECDBF8C0185E0F801DE011D96F5 -:1048500001900D928A95E1F7F801E2808EE5A82E8D -:1048600082E0B82E6091610270916202611571055B -:1048700009F432C190915E0240915F02892F842336 -:104880008F3F09F429C120813181C380D480F09009 -:104890006002F601E61BF70BFF2009F4E8C08091E7 -:1048A0006302582F507FE03AF10508F0ABC0511178 -:1048B00077C0FE2C431321C092131FC0E1101DC00E -:1048C0008F70806180936302C5010E94AD1C80914E -:1048D0006302F80185838F2D61960FB6F894DEBFD1 -:1048E0000FBECDBFDF91CF911F910F91FF90EF9041 -:1048F000DF90CF90BF90AF900895CD2829F0822F00 -:1049000083238F3F09F003C180E0F82FF170DF2E81 -:1049100080FF3CC0809195024091640256E0841370 -:1049200015C02D873E878D859E850E949C10292F5E -:1049300022952F702230F0F0243018F59F70F1F09E -:10494000F8019581907FD1F4D12C1EC090E0589F42 -:10495000F001599FF00D1124EB59FD4F6181361381 -:1049600006C06081261303C06281E6120FC0019663 -:104970008770D5CF9F7011F0882331F3805E883027 -:1049800018F3C8010E94AD1CFD2CA5CFEE2009F440 -:10499000A2CF80916302816080936302F12C9BCF50 -:1049A000431306C0921304C0F801EE2009F479C045 -:1049B000C8010E94A810882309F1EE20F9F0809127 -:1049C0006302803270F020915E0230915F0238877E -:1049D0002F831986DB86CA868C87CE0107960E94B4 -:1049E000AD1C86E0F801AEE5B2E001900D928A952B -:1049F000E1F70E94BB23FF24F3946DCFC8010E940E -:104A0000AD1CF9CF51110AC08EE592E00E94AD1C99 -:104A100086E0F50111928A95E9F7C0CF43130FC0E4 -:104A200092130DC0E1100BC0F8018583C8010E94EC -:104A3000AD1C86E0F50111928A95E9F74CCFC801CB -:104A40000E94A8108823D1F2EE20C1F28091630267 -:104A5000803238F220915E0230915F023A832983DE -:104A60001B82DD82CC828E83CE010196B8CFE03AE4 -:104A7000F105F8F6FE2CEE2009F243131FC0921345 -:104A80001DC08091630280FD10C0982F907F69F057 -:104A9000F8018583903F31F0982F907F905F8F7061 -:104AA000892B8583C8010E94AD1C86E0F801AEE524 -:104AB000B2E001900D928A95E1F70DCFC8010E94F6 -:104AC000A81081118ECF8091630281608093630270 -:104AD000C8010E94AD1CFFCEEE2009F48FCFC801A3 -:104AE0000E94A810F82E882309F488CF86E0F801E8 -:104AF000AEE5B2E001900D928A95E1F780915E02F9 -:104B000090915F020E949C100E94BB23E4CE81E042 -:104B10008E25FBCE1F93CF93DF93CDB7DEB767977C -:104B20000FB6F894DEBF0FBECDBF4B8B5C8B6D8B89 -:104B30007E8B8F8B6111109297021A8A198A85E0F9 -:104B4000FE017396DE011D9601900D928A95E1F7A4 -:104B500086E0FE013D96DE01179601900D928A9542 -:104B6000E1F7CE0107960E941124882389F016E010 -:104B7000809195029091640289134BC067960FB69D -:104B8000F894DEBF0FBECDBFDF91CF911F91089586 -:104B900086E0FE013796DE01119601900D928A950E -:104BA000E1F78A859B85892B11F38F81988589236D -:104BB0008F3FE9F22091640230E0C90101968770CD -:104BC0009927409195024817190681F410927303B2 -:104BD0000E94AE11109264021092950286E0EEE5FA -:104BE000F2E0DF011D928A95E9F7C1CF96E0929F2E -:104BF000D001939FB00D1124AB59BD4FFE013196EA -:104C000001900D929A95E1F7809364020E94890BBE -:104C1000AECF819FC00111248B599D4F0E9411245A -:104C2000882309F4ABCF8091950290E001968770BC -:104C30009927809395029CCF7F928F929F92AF92FB -:104C4000BF92CF92DF92EF92FF920F931F93CF9379 -:104C5000DF93CDB7DEB764970FB6F894DEBF0FBE13 -:104C6000CDBF8E010F5F1F4F8AE0D8011D928A953C -:104C7000E9F79FE4C92E91E0D92EF12CE12CAA246A -:104C8000A394B12C3FE4832E31E0932EF601819161 -:104C90006F018F3F09F443C0F894E82FE295EF705D -:104CA000F0E021A18F70A50102C0440F551F8A9525 -:104CB000E2F7CA01922F982B91A392A180958923A4 -:104CC00082A30E94AC0900C0E8E4F1E0712C31E05D -:104CD00021912F3F09F479C0A22FA295AF70B0E0C7 -:104CE00090968C9190E02F7002C0959587952A95AB -:104CF000E2F780FD6AC0832F782A330F8E169F0655 -:104D000039F7F601319780818F3F11F00E94AE098B -:104D100050EA5A95F1F7F801EE0DFF1D70828FEF02 -:104D2000E81AF80AA5E0EA16F10409F0AFCF4AE064 -:104D300050E0B8018DED92E00E9401357C01892B95 -:104D400041F08AE0F801ADEDB2E001900D928A9554 -:104D5000E1F71091E802E114F104C9F181E08093D8 -:104D60009B020E94831B90939A02809399028091E8 -:104D7000990290919A020E94741B069770F0ADED13 -:104D8000B2E0E12FF0E0E15DFC4F8D91819322E0F4 -:104D9000A23EB207D1F710929B0281E090E0EF288B -:104DA000D1F064960FB6F894DEBF0FBECDBFDF9191 -:104DB000CF911F910F91FF90EF90DF90CF90BF9018 -:104DC000AF909F908F907F90089580E095CF8091D5 -:104DD0009B028111CCCF0E94C00ED82EE091E80238 -:104DE000882309F4E1C07E0140E1E40EF11C85E076 -:104DF000D7011D928A95E9F70E2F10E0015D1C4F37 -:104E00008091D6028A3008F098C04BEE59E1B70184 -:104E1000C8010E947C0E882309F4B2C042EA58E21D -:104E2000B701C8010E947C0E882309F4A9C04FE392 -:104E300058E1B701C8010E947C0E882309F4A0C084 -:104E40004EE059E1B701C8010E947C0E882309F4A5 -:104E500097C04CEE58E1B701C8010E947C0E882330 -:104E600009F48EC01092D6028091E70290E045E0EE -:104E700050E0B701815D9C4F0E94013521E02093F5 -:104E8000A602892B09F06FC0D12C809101018111FC -:104E900014C08091A0029091A1020E94741B813ADB -:104EA0009F4058F040E56FEF8CEF0E943D1681E087 -:104EB000809301018CE00E9469158EE9E82E82E062 -:104EC000F82E10E000E0D7018D917D018823D1F00C -:104ED0008695F80109F465C0E850FE4F8081918104 -:104EE0009C878B871D860E94831B8160782F9F87FC -:104EF0008E87F701319710824B855C856D858F8594 -:104F00000E948A250E5F1F4F04301105E1F6609163 -:104F1000FA027091FB028091FC029091FD020E94C6 -:104F2000320861367A4E8105910528F040E060E054 -:104F300080E00E94080F8D2D34CF80919C029091CB -:104F40009D020E94741B843F914008F05ECF8091C7 -:104F5000A602882309F498CF85E0F70111928A957B -:104F6000E9F71092A602A091E702B0E0A15DBC4F64 -:104F700085E0FE01709601900D928A95E1F785CF4C -:104F80008091D6028F3F31F08F5F8093D6028A30B6 -:104F900008F46ACF0E94831B90939D0280939C0229 -:104FA000D6CFEC50FE4F9ACFF0E0E15DFC4FF89485 -:104FB00085E0A6EBB2E001900D928A95E1F765E0FD -:104FC00070E086EB92E00E94E3088093B5020E94B5 -:104FD000AC09F894E091F002F0E0E351FD4F8081DC -:104FE0008B878093BC0261E070E0CE010B960E943B -:104FF000E3088093BB020E94AC09F894C090BD0204 -:10500000D090BE02E090BF02F090C0028091A20258 -:105010009091A302A091A402B091A502C816D9064E -:10502000EA06FB06D1F0C092A202D092A302E0925F -:10503000A402F092A5020E94C00E81110EC00E942F -:105040004E08C61AD70AE80AF90AC092D702D092C7 -:10505000D802E092D902F092DA020E94AC09F894E8 -:105060008091C8028823F1F080FF0DC08091C102B9 -:1050700080FF25C09091690491609093690460E07D -:1050800086950E9413178091C80281FF09C020E015 -:105090004091C4026091C3028091C2020E948A15AD -:1050A0001092C8020E94AC09F8948091C90288232A -:1050B00049F00E94860F0E94AC0980E072CE0E94E7 -:1050C000670EE1CF0E946B0FF6CFEF92FF920F9326 -:1050D0001F93CF93DF9300D000D00F92CDB7DEB7F0 -:1050E000162FE82EF12CC701880F991F662339F17E -:1050F00088509E4FFC01808191819A83898301E0D1 -:105100000B830E94831B8160782F9D838C83F70122 -:10511000E256FD4F0127110F102B108349815A8150 -:105120006B818D810F900F900F900F900F90DF91FA -:10513000CF911F910F91FF90EF900C948A258C5086 -:105140009E4FD8CFCF92DF92EF92FF920F931F9393 -:10515000CF93DF930F92CDB7DEB7EE24E394F12C1B -:105160000CEB12E09E012F5F3F4F41EB52E063E0FA -:1051700082E00E944919082F882321F1C090EA0299 -:105180008C2D90E09C0123513D4F79011981F9014B -:105190008081181BD12E80E00AC0DA94F70180814B -:1051A0008F5F808360E08C2D0E946528802F1D1406 -:1051B000A4F3912F17FD90E0191B11110EC081115E -:1051C0000E94700B802F0F90DF91CF911F910F9154 -:1051D000FF90EF90DF90CF9008951F5FF7018081DF -:1051E0008150808361E08C2D0E946528802FE5CF5F -:1051F0001F921FB61F9211248F939F93AF93BF935B -:1052000080916A03811113C080916B0390916C03AC -:10521000A0916D03B0916E034196A11DB11D8093C5 -:105220006B0390936C03A0936D03B0936E03BF91D7 -:10523000AF919F918F911F901FBE1F901895CDB772 -:10524000DEB7E0970FB6F894DEBF0FBECDBF84B7D0 -:10525000877F84BF0FB6F894A8958091600088611D -:1052600080936000109260000FBE80E890E00FB65F -:10527000F89480936100909361000FBE85B78068B9 -:1052800085BF85B7806885BF8AEA99E0909333022D -:10529000809332020E94A4060E946F078091E20070 -:1052A00084608093E2007894809180038823A1F049 -:1052B0001091E9001F709091EC00892F817090FD92 -:1052C00080E8182B1092E9008091E80083FD0E948D -:1052D000B7111F701093E90082E084BD93E095BD83 -:1052E0009AEF97BD80936E001092D7021092D80269 -:1052F0001092D9021092DA020E94CF10811102C0DE -:105300000E942B100E94C00E809359018091590178 -:10531000882309F4C9C01092730185E28093740157 -:105320000E94C00E81110E94F632809159018111B4 -:105330002FC0FE01359686E0DF011D928A95E9F7C0 -:1053400086E6898387E98A8386EC8B8384E38C8372 -:1053500085E38D833497AFE4B1E0CE010B962191C4 -:105360002D938E179F07D9F787E0E9E7F1E0DE017B -:10537000919601900D928A95E1F7FE01B196A8E40D -:10538000B1E0CE01889621912D938E179F07D9F712 -:105390008091590195E0811190E09093E80285E0B9 -:1053A000891B8093E7020FE411E084E5E82E81E099 -:1053B000F82EF80181918F018F3F11F00E94AE0904 -:1053C000E016F106B1F708E411E0BFE4EB2EB1E01E -:1053D000FB2ED8018D918D018F3F11F00E94AE09F7 -:1053E000E016F106B1F78AE0EFE2F3E0DF01282FE3 -:1053F0001D922A95E9F7EDEDF2E0DF011D928A9505 -:10540000E9F70E94281A811102C00E94DA1782E08F -:1054100090E00E9417358093240384E090E00E947E -:105420001735182F82E290E00E941735982F812FB0 -:105430009093DC028093DB020E941C26EFE7FBEBDB -:105440003197F1F700C000000E941C2680912F03C5 -:1054500080FF2EC06FEF7FEF90E080E00E94493523 -:1054600081E08093E00080E28093D8001092C90030 -:105470008FE19EE40197F1F700C0000087E090EB18 -:10548000DC018093720690937306A0937406B09328 -:10549000750688E19CE00FB6F894A89580936000AB -:1054A0000FBE90936000FFCF85E28093730136CFEB -:1054B00083E090E00E9417350E94F50B80918A03EB -:1054C0000E9440160E94281A811102C00E94DA1719 -:1054D00088E190E00E941F35609360037093610340 -:1054E0008093620390936303672B682B692B11F4FD -:1054F0000E94A3170E94F73067E081E00E945D15CB -:1055000065E586E10E945D1563E687E10E945D1511 -:1055100060EA8AE10E945D1569E98BE10E945D15F0 -:1055200065EF8CE10E945D1560EA8DE10E945D15DA -:1055300060E38EE10E945D1566E083E00E945D15E8 -:1055400061E08CE00E945D1560E081E00E945D15E5 -:1055500060E08CE00E945D156FE084E00E945D15C4 -:1055600061E08CE00E945D150E94C00E811102C0B6 -:105570000E94F93283E080931F0380E280935303FB -:105580000E94F7306DE070E08CE492E00E943B0FE7 -:10559000892BE9F580911F0363E070E081FD05C26E -:1055A00089E492E00E943B0F892B89F56DE070E061 -:1055B00089E392E00E943B0F892B49F50E944E0837 -:1055C0006058774C8E4F9F4F60935A0370935B03E4 -:1055D00080935C0390935D03E0E7F4E080E092E069 -:1055E000DF019C011D9221503040E1F7F0937106DC -:1055F000E09370068FEF9FEF90936F0480936E049B -:1056000081E080935F0380935E031092200380917A -:10561000E902811136C00E94281A811104C00E943B -:10562000DA170E94601788E090E00E941F356093AF -:10563000690470936A0480936B0490936C04809166 -:1056400050038360809350036E7F71F40E94601753 -:1056500088E090E00E941F356093690470936A04AB -:1056600080936B0490936C040E94FE0880916904FF -:1056700080FF04C060E086950E94131781E080934C -:10568000E90280915901811106C084EF809367017E -:1056900085EF8093660120916701A22FA295AF70DC -:1056A000B0E091963C9191972F7081E090E0BC0121 -:1056B000022E01C0660F0A94EAF7462F4095432355 -:1056C00091964C93919792963C919297362B929605 -:1056D0003C93929740916601E42FE295EF70F0E0E1 -:1056E00031A14F70042E01C0880F0A94EAF7982F59 -:1056F0009095932391A392A1892B82A390968C914C -:1057000090E002C0959587952A95E2F7817020A1D7 -:1057100030E002C0359527954A95E2F792E020FFE8 -:1057200090E0892B8093F1029091590181E09827B4 -:105730009093F002891B8093EA020E94D31760E0E5 -:105740008AE00E94131781E00E94871680EE90E0A5 -:1057500090937201809371010E94280F8AE591E075 -:105760009093670380936603A0E46A2E8091800380 -:10577000FF24F39400E112E1853009F465C10E9431 -:105780001C26E82E81110E944E08FFE22F2EF3E026 -:105790003F2EE5E2F3E0D10110E000E0B02EDD9015 -:1057A00081918D1509F474C18D25C12CFF24F394CA -:1057B000982F9F2109F467C10E94C00E882399F099 -:1057C000C9A2BAA2DF2081E009F480E08BA30E9485 -:1057D000831B8160782F9DA38CA349A15AA16BA143 -:1057E0008DA10E948A25F801EB5DFC4F8081F8268F -:1057F000F0828091F102E82FEE0FEE0F9091670199 -:10580000A92FA295AF70B0E090962C9130E09F70D8 -:1058100002C0359527959A95E2F72170332790912C -:105820006601A92FA295AF70B0E090964C9150E020 -:105830009F7002C0559547959A95E2F7CA0181700D -:10584000992740FF02C082E090E0822B8E2B80934C -:10585000F1021091F0028F70E82FF0E0E250FE4F5D -:1058600080819091EF02890F8093EF02F12C8430B8 -:105870006CF0E12FF0E0E351FD4F80818F5F80837A -:1058800060E0812F0E946528FF24F3948091EF024D -:105890008D3F6CF4E12FF0E0E351FD4F80818150AA -:1058A000808361E0812F0E946528FF24F39480911A -:1058B000EF02082E000C990B64E070E00E94D734D0 -:1058C0008093EF02F1100E94700B80915F03882398 -:1058D00051F180912103909122030E94741BC29781 -:1058E00008F0EDC020916E0430916F042115310550 -:1058F00009F0F0C180915E038823A9F00E944E0850 -:1059000000915A0310915B0320915C0330915D0379 -:10591000601B710B820B930B6F3F7F4F8F4F9F4725 -:1059200010F40E946B0FE11001C0F1100E94860F6D -:105930000E94E8100E94E30E90912303891731F032 -:105940000E94E30E809323030E944B0E80918003FC -:10595000843009F00BCF83E08093E9008091E80068 -:1059600082FF04CF8091E80090E085FF0CC00E9488 -:10597000C30630E2E32EF12C8E010F5F1F4F882308 -:1059800009F487C291E08091E8008B778093E8006A -:10599000992309F4EBCEE981E150E33108F0DDC24F -:1059A000F0E0ED53F94C0C94EB3486E492E0FACD40 -:1059B00080918003843009F437C080E00E944B0E50 -:1059C0008091EC02811109C0F092EC02809169048F -:1059D00081708093EB020E94670E0E946B0F0E9401 -:1059E000E81010926A0388E190E00FB6F894A89549 -:1059F000809360000FBE6092600083B7817F8460F7 -:105A000083BF83B7816083BF7894889583B78E7F87 -:105A100083BF0FB6F894A895809160008861809349 -:105A20006000109260000FBE80917F03882361F0B8 -:105A30000E941C26EFE2F3E081918111B7C3A9E334 -:105A4000B3E0AE17BF07C1F780918003853009F43A -:105A5000AFCF109273030E94AE110E94E30E0E941A -:105A60004B0E1092EC028091EB02882349F080915A -:105A7000690481608093690460E086950E94131731 -:105A80000E94280F7CCEC394FF0C27E0C21290CE58 -:105A90000F5F1F4F0A30110509F080CE8FEF88A7E6 -:105AA00089A71AA60E94831B8160782F9CA78BA7C9 -:105AB00048A559A56AA58CA50E948A259ACE0E9460 -:105AC000831B909322038093210360E080E00E9477 -:105AD000CC080E94E30E8093FE020E94C00E882331 -:105AE00009F4DFC06091FA027091FB028091FC0220 -:105AF0009091FD020E94320861337547810591053E -:105B000040F00E946B0F80915F03882309F4F2CE6E -:105B1000E9CE0E94860F61E080E00E94CC0860E040 -:105B200080E891E00E94411562E080E00E94CC088C -:105B300080918A030E94BB0C823009F48CC008F06B -:105B400081C0882309F487C0813009F48AC065E0E8 -:105B500080E00E94CC0860E08EE991E00E9441154F -:105B600066E080E00E94CC086091FE02669561705C -:105B700083EA91E00E94411567E080E00E94CC0832 -:105B80006091FE026095617088EA91E00E94411583 -:105B900068E080E00E94CC086091FE0262FB66270C -:105BA00060F98CEA91E00E9441156091F6027091D3 -:105BB000F7028091F8029091F9020E9432086D324A -:105BC00071408105910508F49ECF0E944E086093B4 -:105BD000F6027093F7028093F8029093F902809195 -:105BE000F502811104C080916801811142C06DE00D -:105BF00080E00E94CC0860E081EB91E00E944115BA -:105C00006AE080E00E94CC0881E080936801809186 -:105C1000F40290E00196817099278093F40221E0CC -:105C200030E0281B390B40E6429FC001439F900D96 -:105C300011242091F302222351F187529C4F0E949C -:105C4000610661CF833089F0843009F080CF60E055 -:105C500082E991E003C060E086E891E00E9441158E -:105C600076CF60E08CE891E0F9CF60E088E991E0E0 -:105C7000F5CF6AE080E00E94CC0860E081EB91E023 -:105C80000E9441156BE080E00E94CC08C0CF2091BB -:105C9000F202222319F0875E9C4FD1CF875A9D4F85 -:105CA000CECF64E080E00E94CC0860E087EB91E01A -:105CB0000E94411565E080E00E94CC0860E08DEB19 -:105CC00091E00E94411569E080E00E94CC0889E9DA -:105CD00094E0B5CF8091200361E070E081110ACE9D -:105CE000082F10E02B01082E02C0440C551C0A940A -:105CF000E2F7A90144215521452B09F448C09091B0 -:105D00001F0390FD46C08295880F807680936B01BB -:105D10009801369527953695279520936E01815EDB -:105D200080936C0110926F0124E630E047E050E070 -:105D300069E671E088E70E94EE31892B09F0DACD3F -:105D4000A80175E0440F551F7A95E1F780911F0374 -:105D500080FD2DC040595B4F04E610E020E230E0AA -:105D600060E488E70E941532892B09F0C3CD0E94B8 -:105D7000860FC2018095909540906E0450906F04FC -:105D80004822592250926F0440926E04B3CD8F5F27 -:105D9000A7CF880F880F880F80936B0110926E0138 -:105DA000895F80936C0183E080936F01BDCFEFEF3B -:105DB000F2E080E2DF011D928A95E9F7E2E1F2E08C -:105DC000F8ABEFA70EE012E067E0A62E99249394BB -:105DD000AFA5B8A96D91B8ABAFA7F80181918F01BC -:105DE000840F952F911D9C0120593B4F3EA72DA755 -:105DF000E62FF0E0E150FD4F30E020E07A2C721AFF -:105E0000B92C022E01C0BB0C0A94EAF7CDA4DEA483 -:105E100090E0D6018D916D018B21672D691B677014 -:105E2000862E062E000C770BB82F01C0BB0F8A946C -:105E3000EAF78B2E7195619571096770772701C01C -:105E400086956A95EAF7882A8081882A80829F5FF2 -:105E50009830F9F62F5F3F4F31962830310571F6B3 -:105E6000E6E1F2E02FA538A9E217F30709F0B0CF79 -:105E700004E610E020E230E04FEF52E071CF809175 -:105E8000F100D8018D938D01B1E0EB1AF10809F40E -:105E900079CD8091E80085FDF2CF8091E8008B7785 -:105EA0008093E8000E94C306882399F36BCD1A8281 -:105EB00089E08B8311C08A81823009F48FC18330DD -:105EC00091F1813009F049C00E944E080E94F134DE -:105ED0006B837C838D839E8380918003843009F063 -:105EE00045CC1091E9001F709091EC00892F8170D2 -:105EF00090FD80E8182B82E08093E9008091E80013 -:105F000080FF0DC050E040E060E270E0CE010196FD -:105F10000E94F4068091E8008E778093E8001F705D -:105F20001093E90023CCFE013396D1018D911D0120 -:105F30008193B9E32B16B3E03B06B9F7CDCF8A8145 -:105F4000823059F46B817C818D819E810E94F13475 -:105F500086E290E00E942B35BFCF8FEF8983BCCFC4 -:105F60004C816B818A810E943A1098278927982753 -:105F70009E838D83B1CFED80FE80FE24EF24FE242E -:105F80008A810B81EEE00E9F80011124FCE88F9F37 -:105F9000000D111D11248C8190E0880F991F080FAE -:105FA000191F6F2DC80187960E942B356E2DC801D1 -:105FB0008896D0CF0E94BE0F8FCF8A818138B1F0F2 -:105FC00058F4803809F088CF4B8160916B04809140 -:105FD0006A040E943D1680CF8238E1F0833809F0D0 -:105FE0007BCF40916C046C818B81F3CF60E08B811F -:105FF0000E9413178B81811103C00E94670E6CCF22 -:106000008091690481608093690460E086950E94B4 -:10601000131762CF8B8180936D045ECF8A818138A4 -:1060200099F030F4803809F057CF80916C0441CF5B -:10603000823891F0833809F04FCF80916A048B83C6 -:1060400080916B048C8348CF8091690480FF02C0EB -:1060500086952FCF80E02DCF80916D042ACF60915F -:10606000690470916A0480916B0490916C040E94A1 -:10607000781532CF80E18A832FCF81E08A838DE14A -:1060800018CFCA80DB80DC24CD24DC248E010F5F96 -:106090001F4FEC80E00EF12EF11CC6018D519D4F7B -:1060A0000E151F0509F418CF2DE1C21621E0D20606 -:1060B00058F40E941735D80114968C93FFEFCF1A2D -:1060C000DF0A0F5F1F4FE9CFF8011482F7CF0A8173 -:1060D0001B811027012710279E012F5F3F4F690169 -:1060E000EC80E00EF12EF11CC8018D519D4FE016A1 -:1060F000F10609F4F1CE0D3131E0130728F4D60191 -:1061000014966C910E942B35BFEFCB1ADB0A0F5F00 -:106110001F4FEACF0E94AE0FDFCE85E0ACCFCA8022 -:10612000DB80DC24CD24DC248E010F5F1F4FEC804C -:10613000E00EF12EF11CC6018796E016F10609F477 -:10614000CBCEECEBCE16E2E0DE0658F40E9417351B -:10615000D80114968C93FFEFCF1ADF0A0F5F1F4F01 -:10616000EACFF8011482F7CF0A811B81102701279B -:1061700010279E012F5F3F4F6901EC80E00EF12E4A -:10618000F11CC8018796E016F10609F4A5CE0C3B78 -:1061900032E0130728F4D60114966C910E942B3537 -:1061A000BFEFCB1ADB0A0F5F1F4FEBCF09BD19BD45 -:1061B00009B400FEFDCF8091D8008F7D8093D80078 -:1061C0008091E00082608093E0008091E00081FD9A -:1061D000FCCF109273030E94AE1136CC86E290E0A1 -:1061E0000E9417351B821C821D828E8375CE1092F1 -:1061F000B9008CE08093B80008959F92AF92BF924F -:10620000CF92DF92EF92FF920F931F93CF93DF9382 -:10621000B82EEB010E94831B6C01EE24E394F12C59 -:10622000C431D10560F025E0E22EF12CCF3FDC0730 -:1062300031F0CE0164E170E00E94B7347B0184EA62 -:10624000A82E94E8992E1092BC00A092BC000E9447 -:10625000831B8C018091BC0087FF0DC08091B90029 -:10626000887F883039F18091B900887F803111F1C1 -:106270000FEF1FEF09C00E94831B801B910B8E152F -:106280009F0540F30EEF1FEFCF3FDC07E1F2C601A1 -:106290000E94741B8C179D07B0F2C801DF91CF914B -:1062A0001F910F91FF90EF90DF90CF90BF90AF9034 -:1062B0009F900895B092BB009092BC000E94831BF7 -:1062C0008C018091BC0087FF0AC08091B900887F53 -:1062D000883111F0803461F610E000E0DECF0E94DA -:1062E000831B801B910B8E159F0558F3CBCF0F930B -:1062F0001F93CF93DF93EB018093BB0084E88093DF -:10630000BC000E94831B8C018091BC0087FF11C0E0 -:106310002091B900287F81E090E0283211F490E0CC -:1063200080E0919581959109DF91CF911F910F9117 -:106330000895CF3FDC0741F30E94831B801B910B24 -:106340008C179D0708F38EEF9FEFEECF0F931F93EF -:10635000CF93DF93EC0184EC8093BC000E94831BFD -:106360008C018091BC0087FF08C08091BB0090E049 -:10637000DF91CF911F910F910895CF3FDC0789F3F3 -:106380000E94831B801B910B8C179D0750F38EEF8F -:106390009FEFEECF0F931F93CF93DF93EC0184E831 -:1063A0008093BC000E94831B8C018091BC0087FFFE -:1063B00008C08091BB0090E0DF91CF911F910F91B9 -:1063C0000895CF3FDC0789F30E94831B801B910B4C -:1063D0008C179D0750F38EEF9FEFEECFCF92DF9299 -:1063E000EF92FF920F931F93CF93DF936B018A017C -:1063F0007901B9010E94FD30E6010C0D1D1DC01789 -:10640000D10761F424E92093BC00DF91CF911F9163 -:106410000F91FF90EF90DF90CF90089597FDF2CF0E -:10642000B70189910E947731EACFCF92DF92EF9244 -:10643000FF920F931F93CF93DF93C62F6A017901C9 -:10644000B8010E94FD3097FD0CC0B8018C2F0E944E -:106450007731E601EC0CFD1CCE15DF0511F097FF3E -:106460000CC024E92093BC00DF91CF911F910F91C4 -:10647000FF90EF90DF90CF900895B80189910E942E -:106480007731EACFCF92DF92EF92FF920F931F9373 -:10649000CF93DF93F82EE62EEA016901B8010E943E -:1064A000FD3097FD15C0B8018E2D0E94773197FD04 -:1064B0000FC0B8018F2D81600E94FD30F12CE12CBE -:1064C00021E0C21AD108EC14FD0400F597FF11C0B9 -:1064D00024E92093BC001816190614F490E080E01B -:1064E000DF91CF911F910F91FF90EF90DF90CF90B0 -:1064F0000895C8010E94A63197FD04C0FE01EE0D6B -:10650000FF1D80832FEFE21AF20ADDCF97FDE0CF67 -:10651000C8010E94CA3197FDDBCFCC0DDD1D8883F9 -:10652000D7CF84E98093BC0008958EE14A9B02C0D6 -:106530008150E1F74A9BFECF08955A9880E28A95F0 -:10654000F1F75A9A0895FC013BE03A95F1F798E08B -:1065500020E080E031E040E14A95F1F7880F4A9B66 -:1065600002C08160232742E04A95F1F7000040E134 -:106570004A95F1F7915079F790E19A95F1F799B131 -:1065800032E03A95F1F7000040E14A95F1F792FBCD -:10659000992790F992272081920F90830895EF9286 -:1065A000FF920F931F93CF93DF930F92CDB7DEB778 -:1065B00019828C017C01E60EF11C0E151F0561F499 -:1065C00081E09981911180E00F90DF91CF911F912F -:1065D0000F91FF90EF9008950E949532CE010196A1 -:1065E0000E94A332F80181938F01E7CF529A5A9A01 -:1065F000089552985A9AEA9AE9E6F0E080818F7CF1 -:10660000808308956150770B91E001C0990F6A95DE -:10661000EAF720E031E0911108C0222391F05A9A64 -:1066200080E28A95F1F75A980895492F482339F066 -:106630005A9A232740E24A95F1F79695ECCF5A985B -:10664000F9CF5A98EDCFFF920F931F93CF93DF931B -:10665000EC018C01060F111DC017D10731F4DF9139 -:10666000CF911F910F91FF900895F9900E949D3254 -:1066700068E08F2D0E940233EFCF1F920F920FB66A -:106680000F921124EF92FF920F931F932F933F933A -:106690004F935F936F937F938F939F93AF93BF932A -:1066A000EF93FF93CF93DF930F92CDB7DEB71982AD -:1066B0000E949532CE0101960E94A332A82FA69582 -:1066C000A695A695282F229525709A2F9570290FAB -:1066D000922F937026952695920F9827977089810F -:1066E000982B09F075C0A83008F072C080E18A9537 -:1066F000F1F75A9A529AB2E0BA95F1F700C05A9857 -:10670000EA2EF12CEAE0AE9FD0011124AE5FBE4F1D -:106710001896ED91FC9119973097B1F06091FC01BA -:106720007091FD0116962D913C911797260F371FFA -:1067300013968D919C911497680F791F15964C9123 -:10674000159712968C9109958AE08E9DF0018F9D88 -:10675000F00D1124EE5FFE4F6581662351F020910C -:10676000FC013091FD0186819781820F931F0E9469 -:1067700023330E949D32F0E1FA95F1F75A9852982E -:106780005A9A80E18A95F1F78AE08E9D80018F9D6B -:10679000100D11240E5F1E4FD80112966C911297A6 -:1067A000662371F12091FC013091FD0113968D91CA -:1067B0009C91820F931F0E94CF32D801ED91FC91E2 -:1067C000882311F088E001C082E080830E94953226 -:1067D0000F90DF91CF91FF91EF91BF91AF919F917A -:1067E0008F917F916F915F914F913F912F911F9169 -:1067F0000F91FF90EF900F900FBE0F901F90189584 -:10680000ED91FC91DFCF0F931F93CF93DF93EC01BA -:1068100008970CF0A9C08AE08C9FF0018D9FF00DC5 -:106820001124EE5FFE4F80819181892B09F49CC079 -:10683000F894529A5A9885E08A95F1F700008C2FC7 -:10684000869585709C2F9570890F982F93708695EB -:106850008695890F8E0193E0000F111F9A95E1F73D -:10686000082B0E949D3200C068E0802F0E940233F6 -:10687000A0E1AA95F1F752985A9A4A9B27C087E05F -:1068800090E04A9925C08AE08C9F80018D9F100D71 -:1068900011240E5F1E4FF80165816623A1F120913E -:1068A000FC013091FD0186819781820F931F0E9428 -:1068B000CF32811128C0529A5A9AD801ED91FC9199 -:1068C00082E08083789482E090E016C000C0D5CF4B -:1068D0000197B9F4529A5A9A8AE08C9FF0018D9FE1 -:1068E000F00D1124EE5FFE4F0190F081E02D81E06C -:1068F0008083789481E090E0DF91CF911F910F9198 -:10690000089500C0BECF0E949532B0E2BA95F1F76B -:106910005A98529AE0E1EA95F1F78AE08C9FF001EB -:106920008D9FF00D1124EE5FFE4F6281662351F0C2 -:106930002091FC013091FD0183819481820F931F8E -:106940000E9423330E949D328AE08C9FF0018D9F2C -:10695000F00D1124EE5FFE4F0190F081E02D1082CA -:10696000789490E080E0C8CF84E090E0C5CFAA1B87 -:10697000BB1B51E107C0AA1FBB1FA617B70710F02A -:10698000A61BB70B881F991F5A95A9F7809590955C -:10699000BC01CD010895991B79E004C0991F961799 -:1069A00008F0961B881F7A95C9F78095089597FB84 -:1069B000072E16F4009407D077FD09D00E94B73453 -:1069C00007FC05D03EF4909581959F4F08957095F2 -:1069D00061957F4F0895EE0FFF1F0590F491E02D14 -:1069E00009946927962769277827872778270895A4 -:1069F000FB01DC0102C005900D9241505040D8F7D8 -:106A00000895FB01DC0104C08D910190801921F4EF -:106A100041505040C8F7881B990B0895FB01DC01D9 -:106A200002C001900D9241505040D8F70895F99955 -:106A3000FECF92BD81BDF89A992780B50895A6E151 -:106A4000B0E044E050E00C945135A8E1B0E042E001 -:106A500050E00C945135262FF999FECF92BD81BD9F -:106A6000F89A019700B4021639F01FBA20BD0FB68C -:106A7000F894FA9AF99A0FBE08950396272F0E9468 -:106A80002C350E942B35252F0E942C35242F0C9459 -:106A90002C350196272F0E942C350C942B35DC01C8 -:106AA000CB01FC01F999FECF06C0F2BDE1BDF89A19 -:106AB000319600B40D9241505040B8F708950E94AD -:106AC00066356894B1110C94F53508950E94DA3555 -:106AD00088F09F5798F0B92F9927B751B0F0E1F09F -:106AE000660F771F881F991F1AF0BA95C9F714C04F -:106AF000B13091F00E94F435B1E008950C94F43572 -:106B0000672F782F8827B85F39F0B93FCCF3869587 -:106B100077956795B395D9F73EF4909580957095E4 -:106B200061957F4F8F4F9F4F0895E89409C097FB61 -:106B30003EF490958095709561957F4F8F4F9F4F54 -:106B40009923A9F0F92F96E9BB279395F695879598 -:106B500077956795B795F111F8CFFAF4BB0F11F45B -:106B600060FF1BC06F5F7F4F8F4F9F4F16C0882302 -:106B700011F096E911C0772321F09EE8872F762F38 -:106B800005C0662371F096E8862F70E060E02AF079 -:106B90009A95660F771F881FDAF7880F9695879565 -:106BA00097F9089557FD9058440F551F59F05F3FCE -:106BB00071F04795880F97FB991F61F09F3F79F01F -:106BC00087950895121613061406551FF2CF4695A1 -:106BD000F1DF08C0161617061806991FF1CF869523 -:106BE0007105610508940895E894BB276627772707 -:106BF000CB0197F908950E940E360C947F360E94BF -:106C0000713638F00E94783620F0952311F00C94FC -:106C100068360C946E3611240C94F5350E94D235EA -:106C200070F3959FC1F3950F50E0551F629FF001DF -:106C3000729FBB27F00DB11D639FAA27F00DB11DF8 -:106C4000AA1F649F6627B00DA11D661F829F222781 -:106C5000B00DA11D621F739FB00DA11D621F839F08 -:106C6000A00D611D221F749F3327A00D611D231FDE -:106C7000849F600D211D822F762F6A2F11249F572C -:106C800050409AF0F1F088234AF0EE0FFF1FBB1F2F -:106C9000661F771F881F91505040A9F79E3F5105EE -:106CA00080F00C9468360C94F5355F3FE4F3983E21 -:106CB000D4F3869577956795B795F795E7959F5F98 -:106CC000C1F7FE2B880F911D9695879597F908952A -:106CD00097F99F6780E870E060E008959FEF80EC8F -:106CE000089500240A941616170618060906089532 -:106CF00000240A9412161306140605060895092E98 -:106D00000394000C11F4882352F0BB0F40F4BF2B06 -:106D100011F460FF04C06F5F7F4F8F4F9F4F089546 -:106D2000F894FFCFBA10BA10C310C310C510C31027 -:106D3000C310C310BA10BA10CA10C310C310CA10BF -:106D40009F12C7126A14C7126A14FA121B136A142C -:106D500019142614FE1C741D771D8B1D8E1DA11D7C -:106D6000AA1DCE1D141E461E5A1EE01D031EE6213E -:106D7000E6213F223F2271221922192219228B2259 -:106D8000FC220C230C23572F5B2F9F2FB02FBB2FE0 -:106D9000DA2FDD2F0E302F30AD2FAD2F3A303D30B2 -:0C6DA000413067308A308D308F30B430C5 -:106DAC0001013C0200000001000000003C02000058 -:106DBC000005010000003C0200000001060000007C -:106DCC003C0200000001070000003C020408000027 -:106DDC00000000003C02080C0000000000003C0217 -:106DEC00011400000000000036323331F7F6FF6664 -:106DFC0097C634350000000000012F085E0D3D0DD4 -:106E0C00390D350D2E08F4F5010021007F22000309 -:106E1C00018000004A004A4A01F6F731333236FF4E -:106E2C004C415945520042617365200047616D65C4 -:106E3C0020005261697365004C6F776572004C4F8E -:106E4C00434B0043617073004E756D005363726C5D -:106E5C0000202020202000534F4C415200544D5014 -:106E6C00535400818283E200E900EA00B500B600C9 -:106E7C00B700CD008301CC008A019201940121025C -:106E8C00230224022502260227022A02B300B400A0 -:106E9C006F0070000603060806010606B50200FF27 -:106EAC000100010000FFFF0000010001FF000008CD -:106EBC00101818100800000102020202020202025D -:106ECC00020240227B49012701AC009E0BB70BD775 -:026EDC000B00A9 +:1031D000BF90AF909F908F907F906F9008958AE0FE +:1031E000889DF001899DF00D1124EE5FFE4F458111 +:1031F00050E0E416F50608F4A7018AE0889DF00186 +:10320000899DF00D1124EE5FFE4F668177816B542E +:103210007D4FC6010E947F32B701C8010E949D0800 +:1032200099818913CACF0E944E08F501608371838A +:1032300082839383BB24B394C1CFB12CA701B8017F +:10324000C6010E947F32BACFBB24B394F7CFCF928E +:10325000DF92EF92FF920F931F93CF93DF9300D0F3 +:1032600000D00F92CDB7DEB76B0185E0E82EF12CD0 +:1032700006EB12E09E012F5F3F4F4DEA52E061E006 +:1032800080E00E948518882349F095E0FE01319680 +:10329000A8EAB2E001900D929A95E1F795E0E8EA8C +:1032A000F2E0D60101900D929A95E1F70F900F9000 +:1032B0000F900F900F90DF91CF911F910F91FF9082 +:1032C000EF90DF90CF90089590E080E00E949632DA +:1032D000893E9E4F11F40C94891080E008951F924E +:1032E0000F920FB60F9211242F933F934F935F933A +:1032F0006F937F938F939F93AF93BF93CF93DF93FE +:10330000EF93FF93D091E900DF708091EC00C82F1C +:10331000C17080FDC0E81092E9008091F000877FC5 +:103320008093F00078940E9470111092E9008091CF +:10333000F00088608093F000CD2BCF70C093E9003F +:10334000FF91EF91DF91CF91BF91AF919F918F91BD +:103350007F916F915F914F913F912F910F900FBE91 +:103360000F901F9018951F920F920FB60F92112475 +:103370002F933F934F935F936F937F938F939F937D +:10338000AF93BF93EF93FF938091E10082FF09C059 +:103390008091E20082FF05C08091E1008B7F8093E5 +:1033A000E1008091DA0080FF24C08091D80080FF86 +:1033B00020C08091DA008E7F8093DA008091D9005E +:1033C00080FF9DC080E189BD82E189BD09B400FE16 +:1033D000FDCF81E080937A0380916C03811109C055 +:1033E0000E94A4060E946F078091E200846080938F +:1033F000E2008091E10080FF17C08091E20080FF31 +:1034000013C08091E2008E7F8093E2008091E20001 +:1034100080618093E2008091D80080628093D80020 +:1034200019BC85E080937A038091E10084FF2BC072 +:103430008091E20084FF27C080E189BD82E189BDDF +:1034400089B5982F917080FFFBCF8091D8008F7D38 +:103450008093D8008091E1008F7E8093E10080917D +:10346000E2008F7E8093E2008091E2008160809391 +:10347000E20080917B03882309F447C084E08093B5 +:103480007A0380917A038091E10083FF27C08091C5 +:10349000E20083FF23C08091E100877F8093E100F9 +:1034A00082E080937A0310927B038091E1008E7F0B +:1034B0008093E1008091E2008E7F8093E200809112 +:1034C000E20080618093E20042E060E080E00E94E0 +:1034D0003D078091F00088608093F000FF91EF91AC +:1034E000BF91AF919F918F917F916F915F914F911C +:1034F0003F912F910F900FBE0F901F90189519BC00 +:1035000010927A0310926C0374CF8091E30087FDD0 +:1035100093E090937A03B5CF78941F921FB61F92D1 +:1035200011248F939F93AF93BF93809165039091E4 +:103530006603A0916703B09168030196A11DB11DB8 +:103540008093650390936603A0936703B093680329 +:10355000BF91AF919F918F911F901FBE1F901895A3 +:103560009C014FB7F8948091650390916603A091F8 +:103570006703B09168034FBF821B930B08952FB769 +:10358000F8948091650390916603A0916703B091D0 +:1035900068032FBF0895AF92BF92DF92EF92FF9220 +:1035A0000F931F93CF93DF93CDB7DEB761970FB61D +:1035B000F894DEBF0FBECDBF4C87888B998BE52E6C +:1035C000D62EF72E5E0127E0A20EB11C85E0F50194 +:1035D00011928A95E9F780914D038A3008F095C0E1 +:1035E00080914B0390914C030E94B01A089708F405 +:1035F0008CC004E610E025E030E0A50164E084E141 +:103600000E94B32F892B09F0DBC010924D038B85EC +:1036100087FDD1C0E894E0F88091490390914A0376 +:10362000009709F0C2C08F819885891708F091C072 +:10363000981B892F41E02091710130917201889F80 +:10364000C001112455E0589FF001599FF00D11243D +:10365000E29FB001E39F700DF29F700D1124660F81 +:10366000672F661F770B7195442319F0719561954B +:1036700071098091470390914803680F791F8985EC +:103680009A85891708F068C0981B892F41E0889FA8 +:10369000C001112455E0589FF001599FF00D1124ED +:1036A000E29FC001E39F900DF29F900D1124880FBF +:1036B000892F881F990B9195442319F09195819535 +:1036C00091092091450330914603820F931F603882 +:1036D00071050CF444C06F577109709348036093EF +:1036E00047033FE7D32E803891050CF44BC08F572A +:1036F000910990934603809345039FE7F92E0E941A +:10370000BF1A90934C0380934B03ED86DE86FF86B1 +:1037100086E0FE013C96DE01119601900D928A959D +:10372000E1F729813A814B815C816D817E8180E066 +:1037300090E061960FB6F894DEBF0FBECDBFDF916B +:10374000CF911F910F91FF90EF90DF90BF90AF90BE +:103750000895891B40E06FCF891B40E098CF613806 +:10376000FFEF7F074CF461587F4F709348036093DD +:10377000470321E8D22EB7CFD62E109248031092DD +:103780004703B1CF81382FEF92074CF481589F4FF8 +:10379000909346038093450381E8F82EB0CFF82E2E +:1037A0001092460310924503AACF019790934A03C3 +:1037B00080934903A4CF6894E0F884E190E0F6CFC9 +:1037C00080914D038F5F80934D0399CF5F926F92ED +:1037D0007F928F929F92AF92BF92CF92DF92EF92A1 +:1037E000FF920F931F93CF93DF9300D000D00F92DF +:1037F000CDB7DEB77C01FC0183819481892B31F048 +:103800008081918189238F3F09F06AC50F900F90C5 +:103810000F900F900F90DF91CF911F910F91FF901C +:10382000EF90DF90CF90BF90AF909F908F907F9060 +:103830006F905F9008950E942710182F682F89813C +:103840009A810E94750B69817A81812F0E941A10DA +:103850008C01F7018281882309F436C5C8018251A1 +:103860009F45409708F0BAC48FEF93E00E948832DA +:10387000025193EEA92E92E0B92E8111C7CF01110A +:103880003AC01C821B82662463948AE0582E85010C +:103890000F5F1F4FC5010E94883289831A828823D7 +:1038A00009F4B4CF9FEF980F9330A0F58A83698213 +:1038B00032E0A30EB11CC8010E9488328B8388239A +:1038C00009F4A4CF8E010F5F1F4FF801208122233E +:1038D000F1F2213009F058C0918182819130E1F4F8 +:1038E0000E5F1F4F6AE070E0893311F460E570E00D +:1038F0000E94AD0E17C0A114F4E0BF0609F486CFF4 +:10390000C5010E948832811101C001502FEFA21A17 +:10391000B20AB5CF5801D6CF923039F40E5F1F4F9F +:103920000E94010C0F5F1F4FD0CF933029F40E5F20 +:103930001F4F0E94C80BF6CF943019F00F5F1F4F36 +:10394000F1CF0E5F1F4F30E020E0B8016F5F7F4F77 +:10395000F80141818053990B8A30910550F0215034 +:10396000310900F38FE99FE00197F1F700C00000F3 +:10397000F6CF529EF001539EF00D11249C012E0FA4 +:103980003F1F842F8B01E1CFE22FF0E0E754FE4F81 +:103990007490822F86958695869590E0FC01E75578 +:1039A000FE4FE4902770F12C022E02C0F594E794AC +:1039B0000A94E2F7E1E0EE22FF24FC01E756FE4F15 +:1039C000C490D12C022E02C0D594C7940A94E2F779 +:1039D000F1E0CF22DD24FC01E757FE4F8490912CCB +:1039E00002C0959487942A95E2F721E082229924D7 +:1039F000E114F10419F081EE0E94010CC114D1040C +:103A000019F086EE0E94010C39E36AE070E073124F +:103A100002C060E570E0872D0E94AD0ECD2819F040 +:103A200086EE0E94C80BEF2819F081EE0E94C80BA9 +:103A3000892809F477CF6AE070E08CE259CF81E001 +:103A40000E94361603C081E00E942A160F900F9044 +:103A50000F900F900F90DF91CF911F910F91FF90DA +:103A6000EF90DF90CF90BF90AF909F908F907F901E +:103A70006F905F900C941F1682E0E2CF043E110518 +:103A800009F421C1053E110509F47DC0013E11056F +:103A900009F0D1C380933F0278C00338FFE51F07C8 +:103AA00009F463C008F5063F110509F40AC108F4DA +:103AB00006C102383FE5130709F0BDC3882309F4A6 +:103AC000BAC381EE0E94010C83EE0E94010C8FE4C8 +:103AD0000E94010C8FE40E94C80B83EE0E94C80B69 +:103AE00081EE0E94C80BA7C305384FE5140709F4FF +:103AF000B2C008F457C006389FE5190709F4C2C0E0 +:103B00000738EFE51E0709F096C3882309F47ECE37 +:103B100087E20E94010CFFEF28EA31E0F1502040DB +:103B20003040E1F700C000008CE20E94010C87E207 +:103B30000E94C80B8BE10E94010C4FEF50EE80E019 +:103B4000415050408040E1F700C000008CE20E94EC +:103B5000C80B8BE10E94C80B40E56FEF84EB0E941D +:103B6000DB1581E080933E0251CE882309F463C3C4 +:103B700081EE0E94010C83EE0E94010C80E50E9400 +:103B8000010C80E5A8CF809342021093410200937C +:103B90004002882321F081E08093F3024CC310920D +:103BA000F30249C3882379F180913F02882349F0C9 +:103BB000809140020E94C80B80EE0E94010C8AE2B4 +:103BC0000CC0809142028823D1F3809140020E9470 +:103BD000C80B80EE0E94010C8CE40F900F900F90A8 +:103BE0000F900F90DF91CF911F910F91FF90EF9069 +:103BF000DF90CF90BF90AF909F908F907F906F900D +:103C00005F900C94010C8AE20E94C80B8CE40E9425 +:103C1000C80B80EE0E94C80B80913F02811105C045 +:103C200080914202882309F4F1CD80914002D5CFE2 +:103C3000882309F400C380913E02882309F4FBC263 +:103C40000E94BF1A9093A1028093A00210923E029C +:103C500010920101F0C2882371F1809170018111ED +:103C600004C080910001882339F0109270011092F5 +:103C700000010E94E20EDFC281E080937001809318 +:103C80000001F7CF8823B9F080913D02882349F0E5 +:103C900080EE90E0909372018093710110923D024A +:103CA000E8CF86E690E0909372018093710181E005 +:103CB00080933D02DECF61E00E94860CBCC262E0D0 +:103CC000FBCF64E0F9CF882321F081E08093F202FA +:103CD000B2C21092F202AFC2882331F081E0809329 +:103CE000F50210926801A7C21092F502A4C2073C27 +:103CF0002CE5120709F4AEC008F4A7C0083C4CE557 +:103D0000140709F4ACC0093C1C4509F0B4C241E4F5 +:103D100056E16DE476E179C0043DECE51E07A8F4B8 +:103D20000E3CFCE51F0708F071CD0C3C2CE512079A +:103D300009F49FC043E856E164E976E10D3C1C4577 +:103D400008F463C061E081E046C0053D4CE514071E +:103D500009F45CCD08F492C00D351D4509F456CD2B +:103D60008AC28091630480FF31C08E7F8093630498 +:103D7000609163047091640480916504909166047D +:103D80000E941615809150038160809350039FEF2D +:103D9000E0E7F2E09150E040F040E1F700C00000C1 +:103DA0000F900F900F900F900F90DF91CF911F9178 +:103DB0000F91FF90EF90DF90CF90BF90AF909F90CA +:103DC0008F907F906F905F900C94450D81608093F1 +:103DD000630461E086950F900F900F900F900F9005 +:103DE000DF91CF911F910F91FF90EF90DF90CF90D7 +:103DF000BF90AF909F908F907F906F905F900C944A +:103E0000A51640ED56E169ED76E10F900F900F9009 +:103E10000F900F90DF91CF911F910F91FF90EF9036 +:103E2000DF90CF90BF90AF909F908F907F906F90DA +:103E30005F900C94B30849ED56E160ED76E1E5CF73 +:103E400041E756E16AE776E1E0CF4AE756E161E70C +:103E500076E1DBCF49E556E165E676E1D6CF45E68A +:103E600056E169E576E1D1CF4DE456E161E476E1D2 +:103E7000CCCF44E956E163E876E1C7CF0F900F90CD +:103E80000F900F900F90DF91CF911F910F91FF90A6 +:103E9000EF90DF90CF90BF90AF909F908F907F90EA +:103EA0006F905F900C94E3160E3D1C4509F0E3C142 +:103EB0000F900F900F900F900F90DF91CF911F9167 +:103EC0000F91FF90EF90DF90CF90BF90AF909F90B9 +:103ED0008F907F906F905F900C941117C8010E9493 +:103EE0004D0BD82ED6C1092F0F70907F11F002957F +:103EF000007F812F2223C9F0002369F090E2910F07 +:103F0000983010F011110BC080916D03082B0093B5 +:103F10006D030E942C0B812F0E94010C17C0809111 +:103F20009702082B00939702F4CF0E94C80B00233E +:103F300069F00095105E183010F0B11027C0809124 +:103F40006D03082300936D030E942C0B98E0C91A9F +:103F5000D108E4E0CE16D10408F058CC0E949D0EA2 +:103F60000F900F900F900F900F90DF91CF911F91B6 +:103F70000F91FF90EF90DF90CF90BF90AF909F9008 +:103F80008F907F906F905F900C94050E80919702B8 +:103F9000082300939702D8CF892F8F70907F90329B +:103FA00011F08295807FF1E0BF120CC0222329F02E +:103FB000333060F60E94BE0BC9CF323038F60E9413 +:103FC000B30BC4CF222341F03323A1F340FFA3CF8F +:103FD0004F70F7014583EECF332389F3193309F08E +:103FE000F5C0FFEF27EE33E0F15020403040E1F71D +:103FF00000C00000812F0E94C80BA8CF892F869592 +:104000008695837061F0813009F0A0CF812F937085 +:10401000211102C090E080E00E945A0897CF812FC2 +:104020009370211102C090E080E00E9470088ECF52 +:10403000892F8370A1F5211189CF812F82958695D3 +:104040008770880F880F412F4F70082E01C0440FD2 +:104050000A94EAF7212F207114FF07C02FE030E007 +:1040600001C0220F8A95EAF7209596959695937050 +:10407000923081F0822F842B933030F4809198021B +:10408000913029F0242B82230E94AF0B5FCF842B29 +:10409000822BFACF242B809198028227F5CF869528 +:1040A000222311F0892F8170882309F44FCF812FAB +:1040B000829586958770880F880F412F4F70082E44 +:1040C00001C0440F0A94EAF7212F207114FF07C0A2 +:1040D0002FE030E001C0220F8A95EAF720959695EF +:1040E00096959370923081F0822F842B933030F428 +:1040F00080918403913029F0242B82230E94191689 +:1041000025CF842B822BFACF242B80918403822706 +:10411000F5CF092F0F70222329F0802F0E94361629 +:10412000812F48CF812F0E94B30B802F0E942A1627 +:104130000DCF812FE1EF1E1789F1E11750F0F0EF5D +:104140001F17B9F02223B1F13111E5CE892F8F71FC +:1041500029C042EF141749F153EF1513F3CF80E054 +:10416000222361F29F7181E001C0880F9A95EAF7DE +:10417000C5CF222379F0323008F0E8CE292F2F71F5 +:1041800081E090E001C0880F2A95EAF790918403BE +:104190008927B4CF333008F0D9CEF0CF892F8F7173 +:1041A000222321F20E943616D1CE892F8F7122232D +:1041B000C9F3BCCF332379F0893341F48FEF97EE05 +:1041C000E3E081509040E040E1F712CF8FE39CE9BB +:1041D0000197F1F70DCF892F8F71A8CF0031FFE53F +:1041E0001F0709F42CCC01312FE5120709F444CC48 +:1041F0000E944E086093FA027093FB028093FC02C7 +:104200009093FD02F7018281043F110509F453CD1B +:1042100008F043CC003E110509F455CD08F02ECC32 +:104220000E31110540F00132110508F401CD0C32B8 +:10423000110509F451CDF7019281911135CE80918C +:104240006D0382720A3CFCE51F0709F40DCE08F0ED +:1042500063CD053C3CE5130709F4F2CD08F047CDEA +:10426000033C5CE5150709F4CCCD08F0E4CD023C35 +:104270001C4509F476CDF70100811181992309F4D9 +:104280002DCEC8010E942710D82E682FC8010E9489 +:10429000750BB8018D2D0E941A100E94C209182FAB +:1042A000B82EF70122814581342F32953F70892F36 +:1042B00082958F70C82ED12C8C3008F047CEF60135 +:1042C000E55EFB4C0C945C3200313FE5130709F4CA +:1042D000BACB01314FE5140709F094CF82E0B4CB9B +:1042E00085E0DE01119601900D928A95E1F7F701C4 +:1042F000228189819A8121119ECA0E944D0B182F1B +:10430000A2CA1F93CF93DF9380916302807FA9F4A9 +:1043100080916002882389F080919502D091640297 +:1043200060915E0270915F02A0916102B0916202A1 +:10433000C62FC72316E0D81304C0DF91CF911F9179 +:10434000089590E0109711F0CF3F19F4019687700F +:10435000F2CF189F9001199F300D1124F901EB59EC +:10436000FD4F41814713F2CF40814613EFCF428189 +:104370004111ECCF438154814A1B5B0B403A5105FC +:1043800028F7809163028F70806180936302F90146 +:10439000E659FD4F80818F70806180838EE592E0C9 +:1043A0000E94E61BDF91CF911F910C94430BAF92BB +:1043B000BF92CF92DF92EF92FF920F931F93CF9312 +:1043C000DF93CDB7DEB761970FB6F894DEBF0FBEAF +:1043D000CDBF8C0185E0F801DE011D9601900D92A4 +:1043E0008A95E1F7F801E2808EE5A82E82E0B82EEA +:1043F00060916102709162026115710509F432C128 +:1044000090915E0240915F02892F84238F3F09F4CF +:1044100029C120813181C380D480F0906002F601EF +:10442000E61BF70BFF2009F4E8C080916302582FC8 +:10443000507FE03AF10508F0ABC0511177C0FE2C77 +:10444000431321C092131FC0E1101DC08F70806103 +:1044500080936302C5010E94E61B80916302F8010C +:1044600085838F2D61960FB6F894DEBF0FBECDBF4A +:10447000DF91CF911F910F91FF90EF90DF90CF9040 +:10448000BF90AF900895CD2829F0822F83238F3FCE +:1044900009F003C180E0F82FF170DF2E80FF3CC0EF +:1044A000809195024091640256E0841315C02D87D7 +:1044B0003E878D859E850E945610292F22952F704C +:1044C0002230F0F0243018F59F70F1F0F80195815A +:1044D000907FD1F4D12C1EC090E0589FF001599FDD +:1044E000F00D1124EB59FD4F6181361306C0608138 +:1044F000261303C06281E6120FC001968770D5CFE4 +:104500009F7011F0882331F3805E883018F3C80162 +:104510000E94E61BFD2CA5CFEE2009F4A2CF8091CE +:104520006302816080936302F12C9BCF431306C02A +:10453000921304C0F801EE2009F479C0C8010E946A +:104540006210882309F1EE20F9F080916302803235 +:1045500070F020915E0230915F0238872F831986B8 +:10456000DB86CA868C87CE0107960E94E61B86E012 +:10457000F801AEE5B2E001900D928A95E1F70E9454 +:104580008121FF24F3946DCFC8010E94E61BF9CF6F +:1045900051110AC08EE592E00E94E61B86E0F5010B +:1045A00011928A95E9F7C0CF43130FC092130DC043 +:1045B000E1100BC0F8018583C8010E94E61B86E06C +:1045C000F50111928A95E9F74CCFC8010E9462105B +:1045D0008823D1F2EE20C1F280916302803238F25A +:1045E00020915E0230915F023A8329831B82DD8233 +:1045F000CC828E83CE010196B8CFE03AF105F8F671 +:10460000FE2CEE2009F243131FC092131DC08091AF +:10461000630280FD10C0982F907F69F0F8018583B8 +:10462000903F31F0982F907F905F8F70892B85831A +:10463000C8010E94E61B86E0F801AEE5B2E00190F9 +:104640000D928A95E1F70DCFC8010E946210811189 +:104650008ECF80916302816080936302C8010E94C3 +:10466000E61BFFCEEE2009F48FCFC8010E94621036 +:10467000F82E882309F488CF86E0F801AEE5B2E091 +:1046800001900D928A95E1F780915E0290915F0210 +:104690000E9456100E948121E4CE81E08E25FBCE3F +:1046A0001F93CF93DF93CDB7DEB767970FB6F8941C +:1046B000DEBF0FBECDBF4B8B5C8B6D8B7E8B8F8B2C +:1046C0006111109297021A8A198A85E0FE01739689 +:1046D000DE011D9601900D928A95E1F786E0FE01BC +:1046E0003D96DE01179601900D928A95E1F7CE0175 +:1046F00007960E94D721882389F016E080919502C1 +:104700009091640289134BC067960FB6F894DEBF90 +:104710000FBECDBFDF91CF911F91089586E0FE01BE +:104720003796DE01119601900D928A95E1F78A8500 +:104730009B85892B11F38F81988589238F3FE9F21F +:104740002091640230E0C901019687709927409159 +:1047500095024817190681F410926D030E946711A3 +:10476000109264021092950286E0EEE5F2E0DF011D +:104770001D928A95E9F7C1CF96E0929FD001939F51 +:10478000B00D1124AB59BD4FFE01319601900D9231 +:104790009A95E1F7809364020E94430BAECF819F0C +:1047A000C00111248B599D4F0E94D721882309F401 +:1047B000ABCF8091950290E0019687709927809306 +:1047C00095029CCF7F928F929F92AF92BF92CF9291 +:1047D000DF92EF92FF920F931F93CF93DF93CDB7AA +:1047E000DEB764970FB6F894DEBF0FBECDBF8E0163 +:1047F0000F5F1F4F8AE0D8011D928A95E9F79FE469 +:10480000C92E91E0D92EF12CE12CAA24A394B12C2D +:104810003FE4832E31E0932EF60181916F018F3FAB +:1048200009F443C0F894E82FE295EF70F0E021A17D +:104830008F70A50102C0440F551F8A95E2F7CA0187 +:10484000922F982B91A392A18095892382A30E94F5 +:10485000660900C0E8E4F1E0712C31E021912F3FBE +:1048600009F479C0A22FA295AF70B0E090968C9118 +:1048700090E02F7002C0959587952A95E2F780FD0C +:104880006AC0832F782A330F8E169F0639F7F601F8 +:10489000319780818F3F11F00E94680950EA5A9544 +:1048A000F1F7F801EE0DFF1D70828FEFE81AF80A9C +:1048B000A5E0EA16F10409F0AFCF4AE050E0B801F4 +:1048C0008DED92E00E9472327C01892B41F08AE0EA +:1048D000F801ADEDB2E001900D928A95E1F71091EB +:1048E000E802E114F104C9F181E080939B020E9487 +:1048F000BF1A90939A0280939902809199029091A5 +:104900009A020E94B01A069770F0ADEDB2E0E12F66 +:10491000F0E0E15DFC4F8D91819322E0A23EB20771 +:10492000D1F710929B0281E090E0EF28D1F06496DD +:104930000FB6F894DEBF0FBECDBFDF91CF911F91B0 +:104940000F91FF90EF90DF90CF90BF90AF909F902E +:104950008F907F90089580E095CF80919B02811188 +:10496000CCCF0E947A0ED82EE091E802882309F479 +:10497000DEC07E0140E1E40EF11C85E0D7011D920E +:104980008A95E9F70E2F10E0015D1C4F8091D60249 +:104990008A3008F095C047E259E1B701C8010E948A +:1049A000360E882309F4AFC045E656E2B701C801C8 +:1049B0000E94360E882309F4A6C04BE757E1B701E1 +:1049C000C8010E94360E882309F49DC04AE458E1CC +:1049D000B701C8010E94360E882309F494C048E24A +:1049E00058E1B701C8010E94360E882309F48BC034 +:1049F0001092D6028091E70290E045E050E0B701C6 +:104A0000815D9C4F0E94723221E02093A602892B87 +:104A100009F06CC0D12C80910101811111C08091ED +:104A2000A0029091A1020E94B01A813A9F4040F0EA +:104A300040E56FEF8CEF0E94DB1581E08093010170 +:104A40008EE9E82E82E0F82E10E000E0D7018D918B +:104A50007D018823D1F08695F80109F465C0E850FE +:104A6000FE4F808191819C878B871D860E94BF1A93 +:104A70008160782F9F878E87F701319710824B8551 +:104A80005C856D858F850E9450230E5F1F4F04301B +:104A90001105E1F66091FA027091FB028091FC022F +:104AA0009091FD020E94320861367A4E810591058F +:104AB00028F040E060E080E00E94C20E8D2D37CFEC +:104AC00080919C0290919D020E94B01A843F914077 +:104AD00008F061CF8091A602882309F49BCF85E07E +:104AE000F70111928A95E9F71092A602A091E702C8 +:104AF000B0E0A15DBC4F85E0FE01709601900D9283 +:104B00008A95E1F788CF8091D6028F3F31F08F5F91 +:104B10008093D6028A3008F46DCF0E94BF1A90931A +:104B20009D0280939C02D6CFEC50FE4F9ACFF0E0CE +:104B3000E15DFC4FF89485E0A6EBB2E001900D92A8 +:104B40008A95E1F765E070E086EB92E00E949D08AF +:104B50008093B5020E946609F894E091F002F0E0BB +:104B6000E351FD4F80818B878093BC0261E070E050 +:104B7000CE010B960E949D088093BB020E9466099D +:104B8000F894C090BD02D090BE02E090BF02F090B9 +:104B9000C0028091A2029091A302A091A402B091C0 +:104BA000A502C816D906EA06FB06D1F0C092A202F9 +:104BB000D092A302E092A402F092A5020E947A0E83 +:104BC00081110EC00E944E08C61AD70AE80AF90AD7 +:104BD000C092D702D092D802E092D902F092DA02C3 +:104BE0000E946609F8948091C8028823F1F080FF42 +:104BF0000DC08091C10280FF25C090916304916037 +:104C00009093630460E086950E94A5168091C80287 +:104C100081FF09C020E04091C4026091C3028091ED +:104C2000C2020E9428151092C8020E946609F894D8 +:104C30008091C902882349F00E94400F0E946609B2 +:104C400080E075CE0E94210EE1CF0E94250FF6CFA5 +:104C5000EF92FF920F931F93CF93DF9300D000D07A +:104C60000F92CDB7DEB7162FE82EF12CC701880FB3 +:104C7000991F662339F188509E4FFC0180819181F4 +:104C80009A83898301E00B830E94BF1A8160782F89 +:104C90009D838C83F701E256FD4F0127110F102BE6 +:104CA000108349815A816B818D810F900F900F90F5 +:104CB0000F900F90DF91CF911F910F91FF90EF9088 +:104CC0000C9450238C509E4FD8CFCF92DF92EF920E +:104CD000FF920F931F93CF93DF930F92CDB7DEB761 +:104CE000EE24E394F12C0CEB12E09E012F5F3F4F7A +:104CF00041EB52E063E082E00E948518082F882390 +:104D000021F1C090EA028C2D90E09C0123513D4F8F +:104D100079011981F9018081181BD12E80E00AC028 +:104D2000DA94F70180818F5F808360E08C2D0E9490 +:104D30002826802F1D14A4F3912F17FD90E0191B36 +:104D400011110EC081110E942A0B802F0F90DF914C +:104D5000CF911F910F91FF90EF90DF90CF9008952A +:104D60001F5FF70180818150808361E08C2D0E945C +:104D70002826802FE5CF1F921FB61F9211248F93F4 +:104D80009F93AF93BF9380916403811113C080916F +:104D9000650390916603A0916703B0916803419603 +:104DA000A11DB11D8093650390936603A0936703D3 +:104DB000B0936803BF91AF919F918F911F901FBED9 +:104DC0001F901895CDB7DEB7E0970FB6F894DEBF09 +:104DD0000FBECDBF84B7877F84BF0FB6F894A89568 +:104DE00080916000886180936000109260000FBE27 +:104DF00080E890E00FB6F894809361009093610092 +:104E00000FBE85B7806885BF85B7806885BF84E69B +:104E100099E090933302809332020E94A4060E948C +:104E20006F078091E20084608093E2007894809123 +:104E30007A038823A1F01091E9001F709091EC0093 +:104E4000892F817090FD80E8182B1092E9008091E5 +:104E5000E80083FD0E9470111F701093E90082E04A +:104E600084BD93E095BD9AEF97BD80936E0010923C +:104E7000D7021092D8021092D9021092DA020E9440 +:104E80008910811102C00E94E50F0E947A0E809362 +:104E9000590180915901882309F4C9C01092730106 +:104EA00085E2809374010E947A0E81110E9467301E +:104EB0008091590181112FC0FE01359686E0DF01F6 +:104EC0001D928A95E9F786E6898387E98A8386ECCD +:104ED0008B8384E38C8385E38D833497AFE4B1E0E7 +:104EE000CE010B9621912D938E179F07D9F787E05E +:104EF000E9E7F1E0DE01919601900D928A95E1F7E4 +:104F0000FE01B196A8E4B1E0CE01889621912D93DF +:104F10008E179F07D9F78091590195E0811190E094 +:104F20009093E80285E0891B8093E7020FE411E08B +:104F300084E5E82E81E0F82EF80181918F018F3F02 +:104F400011F00E946809E016F106B1F708E411E0DB +:104F5000BFE4EB2EB1E0FB2ED8018D918D018F3F88 +:104F600011F00E946809E016F106B1F78AE0EFE25D +:104F7000F3E0DF01282F1D922A95E9F7EDEDF2E02D +:104F8000DF011D928A95E9F70E946419811102C020 +:104F90000E94111782E090E00E94883280932403DF +:104FA00084E090E00E948832182F82E290E00E9414 +:104FB0008832982F812F9093DC028093DB020E942D +:104FC000E223EFE7FBEB3197F1F700C000000E940E +:104FD000E22380912F0380FF2EC06FEF7FEF90E0E0 +:104FE00080E00E94BA3281E08093E00080E280930A +:104FF000D8001092C9008FE19EE40197F1F700C03C +:10500000000087E090EBDC0180936C0690936D06C6 +:10501000A0936E06B0936F0688E19CE00FB6F894FB +:10502000A895809360000FBE90936000FFCF85E24B +:105030008093730136CF83E090E00E9488320E9413 +:10504000AF0B809184030E94DE150E947A0E8111BD +:1050500002C00E946A3083E080931F0380E2809345 +:1050600051030E94682E6DE070E08CE492E00E9493 +:10507000F50E892BE9F580911F0363E070E081FD57 +:1050800005C289E492E00E94F50E892B89F56DE056 +:1050900070E089E392E00E94F50E892B49F50E94A9 +:1050A0004E086058774C8E4F9F4F60935803709313 +:1050B000590380935A0390935B03EAE6F4E080E09F +:1050C00092E0DF019C011D9221503040E1F7F09306 +:1050D0006B06E0936A068FEF9FEF909369048093CD +:1050E000680481E080935D0380935C031092200349 +:1050F0008091E902811136C00E946419811104C0B7 +:105100000E9411170E94F21688E090E00E949032EF +:1051100060936304709364048093650490936604C1 +:10512000809150038360809350036E7F71F40E94DE +:10513000F21688E090E00E949032609363047093CE +:10514000640480936504909366040E94B80880917B +:10515000630480FF04C060E086950E94A51681E08C +:105160008093E90280915901811106C084EF8093F8 +:10517000670185EF8093660120916701A22FA295B8 +:10518000AF70B0E091963C9191972F7081E090E0E4 +:10519000BC01022E01C0660F0A94EAF7462F409523 +:1051A000432391964C93919792963C919297362BEC +:1051B00092963C93929740916601E42FE295EF70AE +:1051C000F0E031A14F70042E01C0880F0A94EAF775 +:1051D000982F9095932391A392A1892B82A39096C7 +:1051E0008C9190E002C0959587952A95E2F78170A1 +:1051F00020A130E002C0359527954A95E2F792E06C +:1052000020FF90E0892B8093F1029091590181E079 +:1052100098279093F002891B8093EA020E940A1754 +:1052200060E08AE00E94A51681E00E94191680EED7 +:1052300090E090937201809371010E94E20E8AE5E2 +:1052400091E09093610380936003A0E46A2E8091C3 +:105250007A03FF24F39400E112E1853009F465C17B +:105260000E94E223E82E81110E944E08FFE22F2EB9 +:10527000F3E03F2EE5E2F3E0D10110E000E0B02ED4 +:10528000DD9081918D1509F474C18D25C12CFF2409 +:10529000F3949F2D982309F467C10E947A0E882306 +:1052A00099F0C9A2BAA2DF2081E009F480E08BA3C3 +:1052B0000E94BF1A8160782F9DA38CA349A15AA197 +:1052C0006BA18DA10E945023F801EB5DFC4F808102 +:1052D000F826F0828091F102E82FEE0FEE0F909108 +:1052E0006701A92FA295AF70B0E090962C9130E0A5 +:1052F0009F7002C0359527959A95E2F72170332764 +:1053000090916601A92FA295AF70B0E090964C9154 +:1053100050E09F7002C0559547959A95E2F7CA01F3 +:105320008170992740FF02C082E090E0822B8E2B93 +:105330008093F1021091F0028F70E82FF0E0E250BC +:10534000FE4F80819091EF02890F8093EF02F12C44 +:1053500084306CF0E12FF0E0E351FD4F80818F5FEE +:10536000808360E0812F0E942826FF24F39480919F +:10537000EF028D3F6CF4E12FF0E0E351FD4F8081AF +:105380008150808361E0812F0E942826FF24F394BE +:105390008091EF02082E000C990B64E070E00E94EF +:1053A00048328093EF02F1100E942A0B80915D0336 +:1053B000882351F180912103909122030E94B01A19 +:1053C000C29708F0EDC0209168043091690421155E +:1053D000310509F0F0C180915C038823A9F00E9497 +:1053E0004E08009158031091590320915A033091AF +:1053F0005B03601B710B820B930B6F3F7F4F8F4FD3 +:105400009F4710F40E94250FE11001C0F1100E9487 +:10541000400F0E94A2100E949D0E909123038917B5 +:1054200031F00E949D0E809323030E94050E80910F +:105430007A03843009F00BCF83E08093E9008091F8 +:10544000E80082FF04CF8091E80090E085FF0CC067 +:105450000E94C30630E2E32EF12C8E010F5F1F4F36 +:10546000882309F487C291E08091E8008B778093CC +:10547000E800992309F4EBCEE981E150E33108F02B +:10548000DDC2F0E0E95DFB4C0C945C3286E492E016 +:10549000FACD80917A03843009F437C080E00E940D +:1054A000050E8091EC02811109C0F092EC0280910E +:1054B000630481708093EB020E94210E0E94250FED +:1054C0000E94A2101092640388E190E00FB6F89455 +:1054D000A895809360000FBE6092600083B7817FC3 +:1054E000846083BF83B7816083BF7894889583B7D6 +:1054F0008E7F83BF0FB6F894A89580916000886175 +:1055000080936000109260000FBE80917903882321 +:1055100061F00E94E223EFE2F3E081918111B7C3D1 +:10552000A9E3B3E0AE17BF07C1F780917A038530D6 +:1055300009F4AFCF10926D030E9467110E949D0E77 +:105540000E94050E1092EC028091EB02882349F034 +:105550008091630481608093630460E086950E947B +:10556000A5160E94E20E7CCEC394FF0C27E0C21267 +:1055700090CE0F5F1F4F0A30110509F080CE8FEFDC +:1055800088A789A71AA60E94BF1A8160782F9CA7B6 +:105590008BA748A559A56AA58CA50E9450239ACE31 +:1055A0000E94BF1A909322038093210360E080E061 +:1055B0000E9486080E949D0E8093FE020E947A0E31 +:1055C000882309F4DFC06091FA027091FB02809198 +:1055D000FC029091FD020E943208613375478105FB +:1055E000910540F00E94250F80915D03882309F406 +:1055F000F2CEE9CE0E94400F61E080E00E94860872 +:1056000060E080E891E00E94FA1462E080E00E948D +:105610008608809184030E94750C823009F48CC046 +:1056200008F081C0882309F487C0813009F48AC05A +:1056300065E080E00E94860860E08EE991E00E94CB +:10564000FA1466E080E00E9486086091FE0266958A +:10565000617083EA91E00E94FA1467E080E00E94A2 +:1056600086086091FE026095617088EA91E00E9470 +:10567000FA1468E080E00E9486086091FE0262FBF6 +:10568000662760F98CEA91E00E94FA146091F602B4 +:105690007091F7028091F8029091F9020E9432080D +:1056A0006D3271408105910508F49ECF0E944E082D +:1056B0006093F6027093F7028093F8029093F902D8 +:1056C0008091F502811104C080916801811142C06E +:1056D0006DE080E00E94860860E081EB91E00E942E +:1056E000FA146AE080E00E94860881E080936801F5 +:1056F0008091F40290E00196817099278093F402E2 +:1057000021E030E0281B390B40E6429FC001439F57 +:10571000900D11242091F302222351F187529C4FC6 +:105720000E94610661CF833089F0843009F080CF18 +:1057300060E082E991E003C060E086E891E00E94C9 +:10574000FA1476CF60E08CE891E0F9CF60E088E968 +:1057500091E0F5CF6AE080E00E94860860E081EB8E +:1057600091E00E94FA146BE080E00E948608C0CFAE +:105770002091F202222319F0875E9C4FD1CF875AE5 +:105780009D4FCECF64E080E00E94860860E087EB0A +:1057900091E00E94FA1465E080E00E94860860E0D3 +:1057A0008DEB91E00E94FA1469E080E00E94860887 +:1057B00089E994E0B5CF8091200361E070E0811128 +:1057C0000ACE082F10E02B01082E02C0440C551CF5 +:1057D0000A94E2F7A90144215521452B09F448C058 +:1057E00090911F0390FD46C08295880F807680932C +:1057F0006B019801369527953695279520936E0174 +:10580000815E80936C0110926F0124E630E047E0E6 +:1058100050E069E671E088E70E945F2F892B09F06C +:10582000DACDA80175E0440F551F7A95E1F7809114 +:105830001F0380FD2DC046595B4F04E610E020E2B7 +:1058400030E060E488E70E94862F892B09F0C3CD01 +:105850000E94400FC201809590954090680450903E +:105860006904482259225092690440926804B3CDD9 +:105870008F5FA7CF880F880F880F80936B011092DE +:105880006E01895F80936C0183E080936F01BDCFCF +:10589000EFEFF2E080E2DF011D928A95E9F7E2E1A5 +:1058A000F2E0F8ABEFA70EE012E067E0A62E992435 +:1058B0009394AFA5B8A96D91B8ABAFA7F80181914A +:1058C0008F01840F952F911D9C0126593B4F3EA7B8 +:1058D0002DA7E62FF0E0E150FD4F30E020E07A2CDC +:1058E000721AB92C022E01C0BB0C0A94EAF7CDA49F +:1058F000DEA490E0D6018D916D018B21672D691B8F +:105900006770862E062E000C770BB82F01C0BB0FD8 +:105910008A94EAF78B2E71956195710967707727E4 +:1059200001C086956A95EAF7882A8081882A808254 +:105930009F5F9830F9F62F5F3F4F31962830310541 +:1059400071F6E6E1F2E02FA538A9E217F30709F0B6 +:10595000B0CF04E610E020E230E04FEF52E071CF2C +:105960008091F100D8018D938D01B1E0EB1AF1081F +:1059700009F479CD8091E80085FDF2CF8091E800AF +:105980008B778093E8000E94C306882399F36BCD40 +:105990001A8289E08B8311C08A81823009F48FC119 +:1059A000833091F1813009F049C00E944E080E9475 +:1059B00062326B837C838D839E8380917A038430F3 +:1059C00009F045CC1091E9001F709091EC00892FEF +:1059D000817090FD80E8182B82E08093E90080912F +:1059E000E80080FF0DC050E040E060E270E0CE01D2 +:1059F00001960E94F4068091E8008E778093E8007B +:105A00001F701093E90023CCFE013396D1018D91D4 +:105A10001D018193B9E32B16B3E03B06B9F7CDCF57 +:105A20008A81823059F46B817C818D819E810E94B4 +:105A3000623286E290E00E949C32BFCF8FEF898372 +:105A4000BCCF4C816B818A810E94F40F98278927F3 +:105A500098279E838D83B1CFED80FE80FE24EF24B6 +:105A6000FE248A810B81EEE00E9F80011124FCE868 +:105A70008F9F000D111D11248C8190E0880F991FBC +:105A8000080F191F6F2DC80187960E949C326E2D3A +:105A9000C8018896D0CF0E94780F8FCF8A81813835 +:105AA000B1F058F4803809F088CF4B8160916504DB +:105AB000809164040E94DB1580CF8238E1F0833846 +:105AC00009F07BCF409166046C818B81F3CF60E05D +:105AD0008B810E94A5168B81811103C00E94210E2B +:105AE0006CCF8091630481608093630460E086954D +:105AF0000E94A51662CF8B81809367045ECF8A8156 +:105B0000813899F030F4803809F057CF80916604DD +:105B100041CF823891F0833809F04FCF80916404EF +:105B20008B83809165048C8348CF8091630480FFD0 +:105B300002C086952FCF80E02DCF809167042ACFB9 +:105B4000609163047091640480916504909166048F +:105B50000E94161532CF80E18A832FCF81E08A839D +:105B60008DE118CFCA80DB80DC24CD24DC248E01BB +:105B70000F5F1F4FEC80E00EF12EF11CC6018D511E +:105B80009D4F0E151F0509F418CF2DE1C21621E017 +:105B9000D20658F40E948832D80114968C93FFEFF5 +:105BA000CF1ADF0A0F5F1F4FE9CFF8011482F7CF3A +:105BB0000A811B811027012710279E012F5F3F4F6D +:105BC0006901EC80E00EF12EF11CC8018D519D4F52 +:105BD000E016F10609F4F1CE0D3131E0130728F497 +:105BE000D60114966C910E949C32BFEFCB1ADB0A4F +:105BF0000F5F1F4FEACF0E94680FDFCE85E0ACCF6A +:105C0000CA80DB80DC24CD24DC248E010F5F1F4F93 +:105C1000EC80E00EF12EF11CC6018796E016F1062D +:105C200009F4CBCEECEBCE16E2E0DE0658F40E948F +:105C30008832D80114968C93FFEFCF1ADF0A0F5FDA +:105C40001F4FEACFF8011482F7CF0A811B8110277A +:105C5000012710279E012F5F3F4F6901EC80E00E66 +:105C6000F12EF11CC8018796E016F10609F4A5CEC5 +:105C70000C3B32E0130728F4D60114966C910E9475 +:105C80009C32BFEFCB1ADB0A0F5F1F4FEBCF09BD72 +:105C900019BD09B400FEFDCF8091D8008F7D80939F +:105CA000D8008091E00082608093E0008091E00065 +:105CB00081FDFCCF10926D030E94671136CC86E205 +:105CC00090E00E9488321B821C821D828E8375CEDA +:105CD0001092B9008CE08093B80008959F92AF9223 +:105CE000BF92CF92DF92EF92FF920F931F93CF93C9 +:105CF000DF93B82EEB010E94BF1A6C01EE24E394EF +:105D0000F12CC431D10560F025E0E22EF12CCF3F1B +:105D1000DC0731F0CE0164E170E00E9428327B01A3 +:105D200084EAA82E94E8992E1092BC00A092BC00A0 +:105D30000E94BF1A8C018091BC0087FF0DC080912A +:105D4000B900887F883039F18091B900887F80312F +:105D500011F10FEF1FEF09C00E94BF1A801B910BBA +:105D60008E159F0540F30EEF1FEFCF3FDC07E1F2EA +:105D7000C6010E94B01A8C179D07B0F2C801DF91CE +:105D8000CF911F910F91FF90EF90DF90CF90BF9038 +:105D9000AF909F900895B092BB009092BC000E947B +:105DA000BF1A8C018091BC0087FF0AC08091B900A6 +:105DB000887F883111F0803461F610E000E0DECF9A +:105DC0000E94BF1A801B910B8E159F0558F3CBCFF5 +:105DD0000F931F93CF93DF93EB018093BB0084E875 +:105DE0008093BC000E94BF1A8C018091BC0087FF89 +:105DF00011C02091B900287F81E090E0283211F491 +:105E000090E080E0919581959109DF91CF911F916C +:105E10000F910895CF3FDC0741F30E94BF1A801B0A +:105E2000910B8C179D0708F38EEF9FEFEECF0F932A +:105E30001F93CF93DF93EC0184EC8093BC000E940E +:105E4000BF1A8C018091BC0087FF08C08091BB0005 +:105E500090E0DF91CF911F910F910895CF3FDC0724 +:105E600089F30E94BF1A801B910B8C179D0750F37A +:105E70008EEF9FEFEECF0F931F93CF93DF93EC0145 +:105E800084E88093BC000E94BF1A8C018091BC0002 +:105E900087FF08C08091BB0090E0DF91CF911F91F8 +:105EA0000F910895CF3FDC0789F30E94BF1A801B32 +:105EB000910B8C179D0750F38EEF9FEFEECFCF9293 +:105EC000DF92EF92FF920F931F93CF93DF936B01BB +:105ED0008A017901B9010E946E2EE6010C0D1D1D8B +:105EE000C017D10761F424E92093BC00DF91CF9162 +:105EF0001F910F91FF90EF90DF90CF90089597FD45 +:105F0000F2CFB70189910E94E82EEACFCF92DF92BB +:105F1000EF92FF920F931F93CF93DF93C62F6A01E7 +:105F20007901B8010E946E2E97FD0CC0B8018C2F2C +:105F30000E94E82EE601EC0CFD1CCE15DF0511F0E9 +:105F400097FF0CC024E92093BC00DF91CF911F91F3 +:105F50000F91FF90EF90DF90CF900895B801899155 +:105F60000E94E82EEACFCF92DF92EF92FF920F933A +:105F70001F93CF93DF93F82EE62EEA016901B80153 +:105F80000E946E2E97FD15C0B8018E2D0E94E82E3E +:105F900097FD0FC0B8018F2D81600E946E2EF12CED +:105FA000E12C21E0C21AD108EC14FD0400F597FFA2 +:105FB00011C024E92093BC001816190614F490E0CF +:105FC00080E0DF91CF911F910F91FF90EF90DF90D4 +:105FD000CF900895C8010E94172F97FD04C0FE01BD +:105FE000EE0DFF1D80832FEFE21AF20ADDCF97FD41 +:105FF000E0CFC8010E943B2F97FDDBCFCC0DDD1D0C +:106000008883D7CF84E98093BC0008958EE14A9BB2 +:1060100002C08150E1F74A9BFECF08955A9880E272 +:106020008A95F1F75A9A0895FC013BE03A95F1F709 +:1060300098E020E080E031E040E14A95F1F7880FF8 +:106040004A9B02C08160232742E04A95F1F7000095 +:1060500040E14A95F1F7915079F790E19A95F1F77F +:1060600099B132E03A95F1F7000040E14A95F1F735 +:1060700092FB992790F992272081920F908308959F +:10608000EF92FF920F931F93CF93DF930F92CDB7B1 +:10609000DEB719828C017C01E60EF11C0E151F057E +:1060A00061F481E09981911180E00F90DF91CF91AF +:1060B0001F910F91FF90EF9008950E940630CE013E +:1060C00001960E941430F80181938F01E7CF529A14 +:1060D0005A9A089552985A9AEA9AE9E6F0E080812D +:1060E0008F7C808308956150770B91E001C0990FF8 +:1060F0006A95EAF720E031E0911108C0222391F07F +:106100005A9A80E28A95F1F75A980895492F4823C0 +:1061100039F05A9A232740E24A95F1F79695ECCF49 +:106120005A98F9CF5A98EDCFFF920F931F93CF93C0 +:10613000DF93EC018C01060F111DC017D10731F45C +:10614000DF91CF911F910F91FF900895F9900E94D8 +:106150000E3068E08F2D0E947330EFCF1F920F92A8 +:106160000FB60F921124EF92FF920F931F932F936C +:106170003F934F935F936F937F938F939F93AF93CF +:10618000BF93EF93FF93CF93DF930F92CDB7DEB71B +:1061900019820E940630CE0101960E941430A82F69 +:1061A000A695A695A695282F229525709A2F9570CD +:1061B000290F922F937026952695920F9827977006 +:1061C0008981982B09F075C0A83008F072C080E171 +:1061D0008A95F1F75A9A529AB2E0BA95F1F700C04F +:1061E0005A98EA2EF12CEAE0AE9FD0011124AE5F5E +:1061F000BE4F1896ED91FC9119973097B1F06091D0 +:10620000FC017091FD0116962D913C911797260F78 +:10621000371F13968D919C911497680F791F1596CF +:106220004C91159712968C9109958AE08E9DF001FC +:106230008F9DF00D1124EE5FFE4F6581662351F0B6 +:106240002091FC013091FD0186819781820F931F7F +:106250000E9494300E940E30F0E1FA95F1F75A98BE +:1062600052985A9A80E18A95F1F78AE08E9D8001D2 +:106270008F9D100D11240E5F1E4FD80112966C9148 +:106280001297662371F12091FC013091FD01139664 +:106290008D919C91820F931F0E944030D801ED9107 +:1062A000FC91882311F088E001C082E080830E9485 +:1062B00006300F90DF91CF91FF91EF91BF91AF9199 +:1062C0009F918F917F916F915F914F913F912F910E +:1062D0001F910F91FF90EF900F900FBE0F901F90A6 +:1062E0001895ED91FC91DFCF0F931F93CF93DF9320 +:1062F000EC0108970CF0A9C08AE08C9FF0018D9FFB +:10630000F00D1124EE5FFE4F80819181892B09F4FD +:106310009CC0F894529A5A9885E08A95F1F700004B +:106320008C2F869585709C2F9570890F982F937070 +:1063300086958695890F8E0193E0000F111F9A951F +:10634000E1F7082B0E940E3000C068E0802F0E9409 +:106350007330A0E1AA95F1F752985A9A4A9B27C048 +:1063600087E090E04A9925C08AE08C9F80018D9F4C +:10637000100D11240E5F1E4FF80165816623A1F1F7 +:106380002091FC013091FD0186819781820F931F3E +:106390000E944030811128C0529A5A9AD801ED913A +:1063A000FC9182E08083789482E090E016C000C087 +:1063B000D5CF0197B9F4529A5A9A8AE08C9FF0018E +:1063C0008D9FF00D1124EE5FFE4F0190F081E02DC6 +:1063D00081E08083789481E090E0DF91CF911F91FC +:1063E0000F91089500C0BECF0E940630B0E2BA956A +:1063F000F1F75A98529AE0E1EA95F1F78AE08C9F1A +:10640000F0018D9FF00D1124EE5FFE4F6281662337 +:1064100051F02091FC013091FD0183819481820F24 +:10642000931F0E9494300E940E308AE08C9FF001EE +:106430008D9FF00D1124EE5FFE4F0190F081E02D55 +:106440001082789490E080E0C8CF84E090E0C5CFDF +:10645000AA1BBB1B51E107C0AA1FBB1FA617B7078A +:1064600010F0A61BB70B881F991F5A95A9F78095A6 +:106470009095BC01CD010895991B79E004C0991F46 +:10648000961708F0961B881F7A95C9F7809508958E +:1064900097FB072E16F4009407D077FD09D00E94D1 +:1064A000283207FC05D03EF4909581959F4F0895C2 +:1064B000709561957F4F0895EE0FFF1F0590F49141 +:1064C000E02D099469279627692778278727782759 +:1064D0000895FB01DC0102C005900D92415050402F +:1064E000D8F70895FB01DC0104C08D91019080195B +:1064F00021F441505040C8F7881B990B0895FB01C7 +:10650000DC0102C001900D9241505040D8F708952F +:10651000F999FECF92BD81BDF89A992780B508956B +:10652000A6E1B0E044E050E00C94C232A8E1B0E053 +:1065300042E050E00C94C232262FF999FECF92BD72 +:1065400081BDF89A019700B4021639F01FBA20BD38 +:106550000FB6F894FA9AF99A0FBE08950396272F6A +:106560000E949D320E949C32252F0E949D32242F32 +:106570000C949D320196272F0E949D320C949C32E0 +:10658000DC01CB01FC01F999FECF06C0F2BDE1BDF3 +:10659000F89A319600B40D9241505040B8F70895E2 +:1065A0000E94D7326894B1110C94663308950E940A +:1065B0004B3388F09F5798F0B92F9927B751B0F017 +:1065C000E1F0660F771F881F991F1AF0BA95C9F777 +:1065D00014C0B13091F00E946533B1E008950C947D +:1065E0006533672F782F8827B85F39F0B93FCCF330 +:1065F000869577956795B395D9F73EF490958095F4 +:10660000709561957F4F8F4F9F4F0895E89409C013 +:1066100097FB3EF490958095709561957F4F8F4FD5 +:106620009F4F9923A9F0F92F96E9BB279395F695EB +:10663000879577956795B795F111F8CFFAF4BB0F69 +:1066400011F460FF1BC06F5F7F4F8F4F9F4F16C0CD +:10665000882311F096E911C0772321F09EE8872F57 +:10666000762F05C0662371F096E8862F70E060E013 +:106670002AF09A95660F771F881FDAF7880F96958C +:10668000879597F9089557FD9058440F551F59F075 +:106690005F3F71F04795880F97FB991F61F09F3F0F +:1066A00079F087950895121613061406551FF2CF38 +:1066B0004695F1DF08C0161617061806991FF1CF88 +:1066C00086957105610508940895E894BB276627AF +:1066D0007727CB0197F908950E947F330C94F0330C +:1066E0000E94E23338F00E94E93320F0952311F044 +:1066F0000C94D9330C94DF3311240C9466330E942C +:10670000433370F3959FC1F3950F50E0551F629F7F +:10671000F001729FBB27F00DB11D639FAA27F00DFA +:10672000B11DAA1F649F6627B00DA11D661F829F21 +:106730002227B00DA11D621F739FB00DA11D621F06 +:10674000839FA00D611D221F749F3327A00D611D23 +:10675000231F849F600D211D822F762F6A2F112405 +:106760009F5750409AF0F1F088234AF0EE0FFF1F38 +:10677000BB1F661F771F881F91505040A9F79E3F8F +:10678000510580F00C94D9330C9466335F3FE4F3E9 +:10679000983ED4F3869577956795B795F795E795E5 +:1067A0009F5FC1F7FE2B880F911D9695879597F9EE +:1067B000089597F99F6780E870E060E008959FEF83 +:1067C00080EC089500240A94161617061806090688 +:1067D000089500240A941216130614060506089557 +:1067E000092E0394000C11F4882352F0BB0F40F4DF +:1067F000BF2B11F460FF04C06F5F7F4F8F4F9F4F1F +:106800000895F894FFCF741074107D107D107F10E0 +:106810007D107D107D107410741084107D107D101B +:10682000841058128012231480122314B312D4122D +:106830002314D213DF13731F731FCC1FCC1FFE1F33 +:10684000A61FA61FA61F1820892099209920C82CB2 +:10685000CC2C102D212D2C2D4B2D4E2D7F2DA02DF0 +:106860001E2D1E2DAB2DAE2DB22DD82DFB2DFE2DA8 +:04687000002E252EA3 +:1068740001013C0200000001000000003C02000095 +:106884000005010000003C020000000106000000B9 +:106894003C0200000001070000003C020408000064 +:1068A400000000003C02080C0000000000003C0254 +:1068B400011400000000000036323331F7F6FF66A1 +:1068C40097C634350000000000012F08180DF70C9E +:1068D400F30CEF0C2E08F4F5010021007F220003D5 +:1068E400018000004A004A4A01F6F731333236FF8C +:1068F4004C415945520042617365200047616D6502 +:1069040020005261697365004C6F776572004C4FCB +:10691400434B0043617073004E756D005363726C9A +:1069240000202020202000534F4C415200544D5051 +:10693400535400818283E200E900EA00B500B60006 +:10694400B700CD008301CC008A0192019401210299 +:10695400230224022502260227022A02B300B400DD +:106964006F0070000603060806010606B50200FF64 +:106974000100010000FFFF0000010001FF0000080A +:10698400101818100800000102020202020202029A +:10699400020240227B49012701AC009E0BB70BD7B2 +:0269A4000B00E6 :00000001FF From c8f9c24ed8931f9b7c43488cddbd68b10c5fdd2a Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Thu, 28 Apr 2022 12:23:31 +0800 Subject: [PATCH 150/155] Update q2 fix encoder and update version rev_0111 of q2. --- keyboards/keychron/q2/config.h | 8 +-- keyboards/keychron/q2/halconf.h | 3 + keyboards/keychron/q2/rev_0111/config.h | 5 +- .../keychron/q2/rev_0111/keymaps/via/config.h | 20 +++++++ keyboards/keychron/q2/rev_0111/rev_0111.c | 56 +++++++++++++------ keyboards/keychron/q2/rev_0111/rev_0111.h | 20 +++---- keyboards/keychron/q2/rev_0111/rules.mk | 3 +- quantum/encoder.c | 6 ++ quantum/encoder.h | 1 + 9 files changed, 86 insertions(+), 36 deletions(-) create mode 100644 keyboards/keychron/q2/rev_0111/keymaps/via/config.h diff --git a/keyboards/keychron/q2/config.h b/keyboards/keychron/q2/config.h index d019bcee1563..bdf350ff0b79 100644 --- a/keyboards/keychron/q2/config.h +++ b/keyboards/keychron/q2/config.h @@ -57,14 +57,14 @@ /* turn off effects when suspended */ #define RGB_DISABLE_WHEN_USB_SUSPENDED -/* Use 5 dynamic keymap layers */ -#define DYNAMIC_KEYMAP_LAYER_COUNT 5 - /* We have 2KB EEPROM size on STM32L432 */ #define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047 +/* Total size of the EEPROM storage in bytes */ +#define TRANSIENT_EEPROM_SIZE 4096 + /* EEPROM Driver Configuration */ -#define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10100010 +// #define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10100010 // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/keychron/q2/halconf.h b/keyboards/keychron/q2/halconf.h index 41bddcb2799b..b6b05c07e347 100644 --- a/keyboards/keychron/q2/halconf.h +++ b/keyboards/keychron/q2/halconf.h @@ -17,5 +17,8 @@ #pragma once #define HAL_USE_I2C TRUE +#ifdef ENCODER_ENABLE +#define PAL_USE_CALLBACKS TRUE +#endif #include_next diff --git a/keyboards/keychron/q2/rev_0111/config.h b/keyboards/keychron/q2/rev_0111/config.h index 76cd5d0e782f..e44cc78818a3 100644 --- a/keyboards/keychron/q2/rev_0111/config.h +++ b/keyboards/keychron/q2/rev_0111/config.h @@ -25,9 +25,8 @@ #define DRIVER_2_LED_TOTAL 33 #define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) -/* Encoder used pins */ +/* Encoder Configuration */ #define ENCODERS_PAD_A { A10 } #define ENCODERS_PAD_B { B5 } - -/* Specifies the number of pulses the encoder registers between each detent */ #define ENCODER_RESOLUTION 4 +#define ENCODER_DEFAULT_POS 0x3 diff --git a/keyboards/keychron/q2/rev_0111/keymaps/via/config.h b/keyboards/keychron/q2/rev_0111/keymaps/via/config.h new file mode 100644 index 000000000000..84d17b3721aa --- /dev/null +++ b/keyboards/keychron/q2/rev_0111/keymaps/via/config.h @@ -0,0 +1,20 @@ +/* Copyright 2022 @ Keychron (https://www.keychron.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 . + */ + +#pragma once + +/* Set dynamic keymap layer counts to 5 */ +#define DYNAMIC_KEYMAP_LAYER_COUNT 5 diff --git a/keyboards/keychron/q2/rev_0111/rev_0111.c b/keyboards/keychron/q2/rev_0111/rev_0111.c index cbadafc458ee..325203d7018b 100644 --- a/keyboards/keychron/q2/rev_0111/rev_0111.c +++ b/keyboards/keychron/q2/rev_0111/rev_0111.c @@ -97,27 +97,32 @@ const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { {1, F_16, D_16, E_16}, }; +#define __ NO_LED + led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 65, 42, 43 }, - { 44, NO_LED, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, NO_LED, 55, 56 }, - { 57, 58, 59, NO_LED, NO_LED, NO_LED, 60, NO_LED, NO_LED, NO_LED, 61, 62, 63, 64, 66 }, + { + // Key Matrix to LED Index + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, + { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, + { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 65, 42, 43 }, + { 44, __, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, __, 55, 56 }, + { 57, 58, 59, __, __, __, 60, __, __, __, 61, 62, 63, 64, 66 } }, { - {0, 0}, {15, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {224, 0}, - {0,16}, {15,16}, {30,16}, {45,16}, {60,16}, {75,16}, {90,16}, {105,16}, {120,16}, {135,16}, {150,16}, {165,16}, {180,16}, {195,16}, {224,16}, - {0,32}, {15,32}, {30,32}, {45,32}, {60,32}, {75,32}, {90,32}, {105,32}, {120,32}, {135,32}, {150,32}, {165,32}, {195,32}, {224,32}, - {0,48}, {30,48}, {45,48}, {60,48}, {75,48}, {90,48}, {105,48}, {120,48}, {135,48}, {150,48}, {165,48}, {180,48}, {210,48}, - {0,64}, {15,64}, {30,64}, {90,64}, {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64}, + // LED Index to Physical Position + {0,0}, {15,0}, {29,0}, {44,0}, {59,0}, {73,0}, {88,0}, {103,0}, {118,0}, {132,0}, {147,0}, {162,0}, {176,0}, {198,0}, {224,0}, // {244,-4} + {4,15}, {22,15}, {37,15}, {51,15}, {66,15}, {81,15}, {95,15}, {110,15}, {125,15}, {140,15}, {154,15}, {169,15}, {184,15}, {202,15}, {224,15}, + {6,30}, {26,30}, {40,30}, {55,30}, {70,30}, {84,30}, {99,30}, {114,30}, {129,30}, {143,30}, {158,30}, {173,30}, {196,30}, {224,30}, + {9,45}, {33,45}, {48,45}, {62,45}, {77,45}, {92,45}, {106,45}, {121,45}, {136,45}, {151,45}, {165,45}, {185,45}, {209,49}, + {2,60}, {20,60}, {39,60}, {94,60}, {147,60}, {162,60}, {176,60}, {195,64}, {209,64}, {224,64} }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + // RGB LED Index to Flag + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, + 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, + 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 } }; #endif @@ -127,11 +132,26 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } if (index == 0) { if (clockwise) { - tap_code_delay(KC_VOLU, 10); + tap_code_delay(KC_VOLU, TAP_CODE_DELAY); } else { - tap_code_delay(KC_VOLD, 10); + tap_code_delay(KC_VOLD, TAP_CODE_DELAY); } } return true; } + +void encoder0_pad_cb(void *param) { + (void)param; + + encoder_insert_state(0); +} + +void keyboard_post_init_kb(void) { + pin_t encoders_pad_a[] = ENCODERS_PAD_A; + pin_t encoders_pad_b[] = ENCODERS_PAD_B; + palEnableLineEvent(encoders_pad_a[0], PAL_EVENT_MODE_BOTH_EDGES); + palEnableLineEvent(encoders_pad_b[0], PAL_EVENT_MODE_BOTH_EDGES); + palSetLineCallback(encoders_pad_a[0], encoder0_pad_cb, NULL); + palSetLineCallback(encoders_pad_b[0], encoder0_pad_cb, NULL); +} #endif diff --git a/keyboards/keychron/q2/rev_0111/rev_0111.h b/keyboards/keychron/q2/rev_0111/rev_0111.h index 5033db61fc4e..9ae527a98a4e 100644 --- a/keyboards/keychron/q2/rev_0111/rev_0111.h +++ b/keyboards/keychron/q2/rev_0111/rev_0111.h @@ -27,11 +27,11 @@ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \ K40, K41, K42, K46, K4A, K4B, K4C, K4D, K2C, K4E \ ) { \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, }, \ - { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, }, \ - { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, }, \ - { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, }, \ - { K40, K41, K42, XXX, XXX, XXX, K46, K47, K48, XXX, K4A, K4B, K4C, K4D, K4E, } \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, }, \ + { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, }, \ + { K40, K41, K42, XXX, XXX, XXX, K46, K47, K48, XXX, K4A, K4B, K4C, K4D, K4E, } \ } #define LAYOUT_ansi_67( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E,\ @@ -40,9 +40,9 @@ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \ K40, K41, K42, K46, K4A, K4B, K4C, K4D, K2C, K4E \ ) { \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, }, \ - { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, }, \ - { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, }, \ - { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, }, \ - { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D, K4E, } \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, }, \ + { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, }, \ + { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D, K4E, } \ } diff --git a/keyboards/keychron/q2/rev_0111/rules.mk b/keyboards/keychron/q2/rev_0111/rules.mk index a295f48e1055..56a22430c661 100644 --- a/keyboards/keychron/q2/rev_0111/rules.mk +++ b/keyboards/keychron/q2/rev_0111/rules.mk @@ -20,7 +20,8 @@ ENCODER_ENABLE = yes # Enable Encoder DIP_SWITCH_ENABLE = yes RGB_MATRIX_ENABLE = yes RGB_MATRIX_DRIVER = CKLED2001 -EEPROM_DRIVER = i2c +# EEPROM_DRIVER = i2c +EEPROM_DRIVER = transient # Enter lower-power sleep mode when on the ChibiOS idle thread OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/quantum/encoder.c b/quantum/encoder.c index 438c7d8564e1..d1b7544dad19 100644 --- a/quantum/encoder.c +++ b/quantum/encoder.c @@ -177,3 +177,9 @@ void encoder_update_raw(uint8_t* slave_state) { if (changed) last_encoder_activity_trigger(); } #endif + +void encoder_insert_state(uint8_t index) { + encoder_state[index] <<= 2; + encoder_state[index] |= (readPin(encoders_pad_a[index]) << 0) | (readPin(encoders_pad_b[index]) << 1); + encoder_pulses[index] += encoder_LUT[encoder_state[index] & 0xF]; +} \ No newline at end of file diff --git a/quantum/encoder.h b/quantum/encoder.h index 25dc77721da9..a81b7c84f8f2 100644 --- a/quantum/encoder.h +++ b/quantum/encoder.h @@ -24,6 +24,7 @@ bool encoder_read(void); bool encoder_update_kb(uint8_t index, bool clockwise); bool encoder_update_user(uint8_t index, bool clockwise); +void encoder_insert_state(uint8_t index); #ifdef SPLIT_KEYBOARD void encoder_state_raw(uint8_t* slave_state); From 186fc8a0cca596cb19d97f605f92c3ceccf850c1 Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Thu, 28 Apr 2022 18:20:51 +0800 Subject: [PATCH 151/155] Resume q2 in master --- keyboards/keychron/q2/config.h | 8 ++-- keyboards/keychron/q2/halconf.h | 3 -- keyboards/keychron/q2/rev_0111/config.h | 5 +- keyboards/keychron/q2/rev_0111/rev_0111.c | 56 ++++++++--------------- keyboards/keychron/q2/rev_0111/rev_0111.h | 20 ++++---- keyboards/keychron/q2/rev_0111/rules.mk | 3 +- quantum/encoder.c | 6 --- 7 files changed, 36 insertions(+), 65 deletions(-) diff --git a/keyboards/keychron/q2/config.h b/keyboards/keychron/q2/config.h index bdf350ff0b79..d019bcee1563 100644 --- a/keyboards/keychron/q2/config.h +++ b/keyboards/keychron/q2/config.h @@ -57,14 +57,14 @@ /* turn off effects when suspended */ #define RGB_DISABLE_WHEN_USB_SUSPENDED +/* Use 5 dynamic keymap layers */ +#define DYNAMIC_KEYMAP_LAYER_COUNT 5 + /* We have 2KB EEPROM size on STM32L432 */ #define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047 -/* Total size of the EEPROM storage in bytes */ -#define TRANSIENT_EEPROM_SIZE 4096 - /* EEPROM Driver Configuration */ -// #define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10100010 +#define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10100010 // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/keychron/q2/halconf.h b/keyboards/keychron/q2/halconf.h index b6b05c07e347..41bddcb2799b 100644 --- a/keyboards/keychron/q2/halconf.h +++ b/keyboards/keychron/q2/halconf.h @@ -17,8 +17,5 @@ #pragma once #define HAL_USE_I2C TRUE -#ifdef ENCODER_ENABLE -#define PAL_USE_CALLBACKS TRUE -#endif #include_next diff --git a/keyboards/keychron/q2/rev_0111/config.h b/keyboards/keychron/q2/rev_0111/config.h index e44cc78818a3..76cd5d0e782f 100644 --- a/keyboards/keychron/q2/rev_0111/config.h +++ b/keyboards/keychron/q2/rev_0111/config.h @@ -25,8 +25,9 @@ #define DRIVER_2_LED_TOTAL 33 #define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) -/* Encoder Configuration */ +/* Encoder used pins */ #define ENCODERS_PAD_A { A10 } #define ENCODERS_PAD_B { B5 } + +/* Specifies the number of pulses the encoder registers between each detent */ #define ENCODER_RESOLUTION 4 -#define ENCODER_DEFAULT_POS 0x3 diff --git a/keyboards/keychron/q2/rev_0111/rev_0111.c b/keyboards/keychron/q2/rev_0111/rev_0111.c index 325203d7018b..cbadafc458ee 100644 --- a/keyboards/keychron/q2/rev_0111/rev_0111.c +++ b/keyboards/keychron/q2/rev_0111/rev_0111.c @@ -97,32 +97,27 @@ const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { {1, F_16, D_16, E_16}, }; -#define __ NO_LED - led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 65, 42, 43 }, - { 44, __, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, __, 55, 56 }, - { 57, 58, 59, __, __, __, 60, __, __, __, 61, 62, 63, 64, 66 } + { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, + { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, + { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 65, 42, 43 }, + { 44, NO_LED, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, NO_LED, 55, 56 }, + { 57, 58, 59, NO_LED, NO_LED, NO_LED, 60, NO_LED, NO_LED, NO_LED, 61, 62, 63, 64, 66 }, }, { - // LED Index to Physical Position - {0,0}, {15,0}, {29,0}, {44,0}, {59,0}, {73,0}, {88,0}, {103,0}, {118,0}, {132,0}, {147,0}, {162,0}, {176,0}, {198,0}, {224,0}, // {244,-4} - {4,15}, {22,15}, {37,15}, {51,15}, {66,15}, {81,15}, {95,15}, {110,15}, {125,15}, {140,15}, {154,15}, {169,15}, {184,15}, {202,15}, {224,15}, - {6,30}, {26,30}, {40,30}, {55,30}, {70,30}, {84,30}, {99,30}, {114,30}, {129,30}, {143,30}, {158,30}, {173,30}, {196,30}, {224,30}, - {9,45}, {33,45}, {48,45}, {62,45}, {77,45}, {92,45}, {106,45}, {121,45}, {136,45}, {151,45}, {165,45}, {185,45}, {209,49}, - {2,60}, {20,60}, {39,60}, {94,60}, {147,60}, {162,60}, {176,60}, {195,64}, {209,64}, {224,64} + {0, 0}, {15, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {224, 0}, + {0,16}, {15,16}, {30,16}, {45,16}, {60,16}, {75,16}, {90,16}, {105,16}, {120,16}, {135,16}, {150,16}, {165,16}, {180,16}, {195,16}, {224,16}, + {0,32}, {15,32}, {30,32}, {45,32}, {60,32}, {75,32}, {90,32}, {105,32}, {120,32}, {135,32}, {150,32}, {165,32}, {195,32}, {224,32}, + {0,48}, {30,48}, {45,48}, {60,48}, {75,48}, {90,48}, {105,48}, {120,48}, {135,48}, {150,48}, {165,48}, {180,48}, {210,48}, + {0,64}, {15,64}, {30,64}, {90,64}, {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64}, }, { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, } }; #endif @@ -132,26 +127,11 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } if (index == 0) { if (clockwise) { - tap_code_delay(KC_VOLU, TAP_CODE_DELAY); + tap_code_delay(KC_VOLU, 10); } else { - tap_code_delay(KC_VOLD, TAP_CODE_DELAY); + tap_code_delay(KC_VOLD, 10); } } return true; } - -void encoder0_pad_cb(void *param) { - (void)param; - - encoder_insert_state(0); -} - -void keyboard_post_init_kb(void) { - pin_t encoders_pad_a[] = ENCODERS_PAD_A; - pin_t encoders_pad_b[] = ENCODERS_PAD_B; - palEnableLineEvent(encoders_pad_a[0], PAL_EVENT_MODE_BOTH_EDGES); - palEnableLineEvent(encoders_pad_b[0], PAL_EVENT_MODE_BOTH_EDGES); - palSetLineCallback(encoders_pad_a[0], encoder0_pad_cb, NULL); - palSetLineCallback(encoders_pad_b[0], encoder0_pad_cb, NULL); -} #endif diff --git a/keyboards/keychron/q2/rev_0111/rev_0111.h b/keyboards/keychron/q2/rev_0111/rev_0111.h index 9ae527a98a4e..5033db61fc4e 100644 --- a/keyboards/keychron/q2/rev_0111/rev_0111.h +++ b/keyboards/keychron/q2/rev_0111/rev_0111.h @@ -27,11 +27,11 @@ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \ K40, K41, K42, K46, K4A, K4B, K4C, K4D, K2C, K4E \ ) { \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, }, \ - { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, }, \ - { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, }, \ - { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, }, \ - { K40, K41, K42, XXX, XXX, XXX, K46, K47, K48, XXX, K4A, K4B, K4C, K4D, K4E, } \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, }, \ + { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, }, \ + { K40, K41, K42, XXX, XXX, XXX, K46, K47, K48, XXX, K4A, K4B, K4C, K4D, K4E, } \ } #define LAYOUT_ansi_67( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E,\ @@ -40,9 +40,9 @@ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \ K40, K41, K42, K46, K4A, K4B, K4C, K4D, K2C, K4E \ ) { \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, }, \ - { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, }, \ - { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, }, \ - { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, }, \ - { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D, K4E, } \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, }, \ + { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, }, \ + { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D, K4E, } \ } diff --git a/keyboards/keychron/q2/rev_0111/rules.mk b/keyboards/keychron/q2/rev_0111/rules.mk index 56a22430c661..a295f48e1055 100644 --- a/keyboards/keychron/q2/rev_0111/rules.mk +++ b/keyboards/keychron/q2/rev_0111/rules.mk @@ -20,8 +20,7 @@ ENCODER_ENABLE = yes # Enable Encoder DIP_SWITCH_ENABLE = yes RGB_MATRIX_ENABLE = yes RGB_MATRIX_DRIVER = CKLED2001 -# EEPROM_DRIVER = i2c -EEPROM_DRIVER = transient +EEPROM_DRIVER = i2c # Enter lower-power sleep mode when on the ChibiOS idle thread OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE diff --git a/quantum/encoder.c b/quantum/encoder.c index d1b7544dad19..438c7d8564e1 100644 --- a/quantum/encoder.c +++ b/quantum/encoder.c @@ -177,9 +177,3 @@ void encoder_update_raw(uint8_t* slave_state) { if (changed) last_encoder_activity_trigger(); } #endif - -void encoder_insert_state(uint8_t index) { - encoder_state[index] <<= 2; - encoder_state[index] |= (readPin(encoders_pad_a[index]) << 0) | (readPin(encoders_pad_b[index]) << 1); - encoder_pulses[index] += encoder_LUT[encoder_state[index] & 0xF]; -} \ No newline at end of file From 59870789bb61be5436b38869cd7bd76cb6a7423b Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Thu, 28 Apr 2022 18:24:09 +0800 Subject: [PATCH 152/155] Update encoder.h --- quantum/encoder.h | 1 - 1 file changed, 1 deletion(-) diff --git a/quantum/encoder.h b/quantum/encoder.h index a81b7c84f8f2..25dc77721da9 100644 --- a/quantum/encoder.h +++ b/quantum/encoder.h @@ -24,7 +24,6 @@ bool encoder_read(void); bool encoder_update_kb(uint8_t index, bool clockwise); bool encoder_update_user(uint8_t index, bool clockwise); -void encoder_insert_state(uint8_t index); #ifdef SPLIT_KEYBOARD void encoder_state_raw(uint8_t* slave_state); From eca6b0e5245508fb0a35fec0ed72619b57b2656a Mon Sep 17 00:00:00 2001 From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com> Date: Thu, 28 Apr 2022 18:26:16 +0800 Subject: [PATCH 153/155] Delete config.h --- .../keychron/q2/rev_0111/keymaps/via/config.h | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 keyboards/keychron/q2/rev_0111/keymaps/via/config.h diff --git a/keyboards/keychron/q2/rev_0111/keymaps/via/config.h b/keyboards/keychron/q2/rev_0111/keymaps/via/config.h deleted file mode 100644 index 84d17b3721aa..000000000000 --- a/keyboards/keychron/q2/rev_0111/keymaps/via/config.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright 2022 @ Keychron (https://www.keychron.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 . - */ - -#pragma once - -/* Set dynamic keymap layer counts to 5 */ -#define DYNAMIC_KEYMAP_LAYER_COUNT 5 From 94d893f10780a883df7f47c3514f1e5db220f6b2 Mon Sep 17 00:00:00 2001 From: crembz Date: Wed, 15 Jun 2022 21:42:40 +1000 Subject: [PATCH 154/155] harvester keymap --- keyboards/crkbd/keymaps/harvester/README.md | 63 +++++++++ keyboards/crkbd/keymaps/harvester/config.h | 121 ++++++++++++++++ keyboards/crkbd/keymaps/harvester/enums.h | 28 ++++ keyboards/crkbd/keymaps/harvester/keymap.c | 149 ++++++++++++++++++++ keyboards/crkbd/keymaps/harvester/oled.c | 118 ++++++++++++++++ keyboards/crkbd/keymaps/harvester/rgb.c | 86 +++++++++++ keyboards/crkbd/keymaps/harvester/rgb.h | 11 ++ keyboards/crkbd/keymaps/harvester/rules.mk | 18 +++ 8 files changed, 594 insertions(+) create mode 100644 keyboards/crkbd/keymaps/harvester/README.md create mode 100644 keyboards/crkbd/keymaps/harvester/config.h create mode 100644 keyboards/crkbd/keymaps/harvester/enums.h create mode 100644 keyboards/crkbd/keymaps/harvester/keymap.c create mode 100644 keyboards/crkbd/keymaps/harvester/oled.c create mode 100644 keyboards/crkbd/keymaps/harvester/rgb.c create mode 100644 keyboards/crkbd/keymaps/harvester/rgb.h create mode 100644 keyboards/crkbd/keymaps/harvester/rules.mk diff --git a/keyboards/crkbd/keymaps/harvester/README.md b/keyboards/crkbd/keymaps/harvester/README.md new file mode 100644 index 000000000000..a7995a4f6571 --- /dev/null +++ b/keyboards/crkbd/keymaps/harvester/README.md @@ -0,0 +1,63 @@ +# KidBrazil's custom CRKBD Layout + +![Loose Transistor Crkbd](https://user-images.githubusercontent.com/4823043/71268460-0862c000-231b-11ea-8f32-2fe8da4d348a.jpg) + +This is a simple layout that I use for both programming and gaming. It is very +closely based on the original CRKBD layout with some modifications to the +position of CTRL and SHIFT. + +## Layers +This keymap includes a total of 4 Layers: +- QWERTY +- NUMBERS +- SYMBOLS +- GAMING +- WEAPONS + +The first three layers are pretty self explanatory and follow closely the +default keymap for this keyboard. The magic really starts to happen with the +gaming layer. + +### Gaming Layer +The gaming layer can be toggled on/off from the SYMBOLS layer. Once on the +gaming layer it will stay there until you toggle it off again. The gaming layer +includes normal WASD and most of the keys FPS games use on the left hand. On the +right hand we have F1-F12 and a few other special keys for games that require +it. + +### Weapon +The weapon layer is a momentary layer that can only be reached from the gaming +layer. This layer preserves the left hand almost unchanged, except for when the +layer is activated the top row becomes NUM 1 - 6 for wepon selection. The right +hand is KC_TRNS the whole way so basically it is still the gaming layer. + +## Custom Font +This keymap includes a custom font for my LooseTransistor logo. It is fine if +you want to use it I certainly don't mind but if you want your own, just replace +the glcdfont file here and you should be fine. + +Alternatively you could remove the font config line from the config.h file so it +will use the default QMK one. + +## OLED +This Keymap is setup to use the newer OLED API. Some work has been done to +customize this with showing layer and USB information. I also tried my best to +get a dormant / sleep state going but it is hit or miss and often only works on +the master hand. + +## OLED & RGB Matrix timeout +This keymap will set a automated timeout system for the OLED screen and the RGB +matrix. After 3 minutes or so the LED screen will display the logo on both +halves and 5 minutes after that both the LED and the Matrix will be switched +off. + +Once a user hits the keys again, the LED matrix will turn back on unless the +user has disabled it via RGB_TOG. + +## Flashing +To flash this on your CRKBD simply use the `make crkbd:kidbrazil:flash` +command. + +### TODO +- Wait for Spit_common to be implemented in CRKBD and revisit the special color + layers and animations diff --git a/keyboards/crkbd/keymaps/harvester/config.h b/keyboards/crkbd/keymaps/harvester/config.h new file mode 100644 index 000000000000..0551b0f26cf6 --- /dev/null +++ b/keyboards/crkbd/keymaps/harvester/config.h @@ -0,0 +1,121 @@ +/* +Copyright 2019 @foostan +Copyright 2020 Drashna Jaelre <@drashna> + +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 . +*/ + +#pragma once + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +//#define SPLIT_TRANSPORT_MIRROR +#define SPLIT_LAYER_STATE_ENABLE +#define SPLIT_LED_STATE_ENABLE +#define SPLIT_MODS_ENABLE + + +#ifdef RGBLIGHT_ENABLE + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT +// #define RGBLIGHT_EFFECT_RGB_TEST +// #define RGBLIGHT_EFFECT_ALTERNATING +// #define RGBLIGHT_EFFECT_TWINKLE + #define RGBLIGHT_LIMIT_VAL 120 + #define RGBLIGHT_HUE_STEP 10 + #define RGBLIGHT_SAT_STEP 17 + #define RGBLIGHT_VAL_STEP 17 +#endif + +#ifdef RGB_MATRIX_ENABLE +# define RGB_MATRIX_KEYPRESSES // reacts to keypresses +// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) +// # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects +# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_FRAMEBUFFER_EFFECTS +// # define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) +// # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) +# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. +# define RGB_MATRIX_HUE_STEP 8 +# define RGB_MATRIX_SAT_STEP 8 +# define RGB_MATRIX_VAL_STEP 8 +# define RGB_MATRIX_SPD_STEP 10 + +/* Enable the animations you want/need. You may need to enable only a small number of these because * + * they take up a lot of space. Enable and confirm that you can still successfully compile your firmware. */ +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +//# define ENABLE_RGB_MATRIX_ALPHAS_MODS +//# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +//# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_BREATHING +//# define ENABLE_RGB_MATRIX_BAND_SAT +//# define ENABLE_RGB_MATRIX_BAND_VAL +//# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +//# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +//# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +//# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +//# define ENABLE_RGB_MATRIX_CYCLE_ALL +//# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +//# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +//# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +//# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +//# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +//# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +//# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +//# define ENABLE_RGB_MATRIX_DUAL_BEACON +//# define ENABLE_RGB_MATRIX_RAINBOW_BEACON +//# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +//# define ENABLE_RGB_MATRIX_RAINDROPS +//# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +//# define ENABLE_RGB_MATRIX_HUE_BREATHING +//# define ENABLE_RGB_MATRIX_HUE_PENDULUM +//# define ENABLE_RGB_MATRIX_HUE_WAVE +//# define ENABLE_RGB_MATRIX_PIXEL_RAIN +//# define ENABLE_RGB_MATRIX_PIXEL_FLOW +//# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined +//# define ENABLE_RGB_MATRIX_TYPING_HEATMAP +//# define ENABLE_RGB_MATRIX_DIGITAL_RAIN +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE +//# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +//# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +//# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +//# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +//# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +//# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +//# define ENABLE_RGB_MATRIX_SPLASH +//# define ENABLE_RGB_MATRIX_MULTISPLASH +//# define ENABLE_RGB_MATRIX_SOLID_SPLASH +//# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH +#endif + +#define OLED_FONT_H "keyboards/crkbd/lib/glcdfont.c" + +#define USB_POLLING_INTERVAL_MS 1 +#define QMK_KEYS_PER_SCAN 12 + +#define DYNAMIC_KEYMAP_LAYER_COUNT 7 diff --git a/keyboards/crkbd/keymaps/harvester/enums.h b/keyboards/crkbd/keymaps/harvester/enums.h new file mode 100644 index 000000000000..f0c4413726bd --- /dev/null +++ b/keyboards/crkbd/keymaps/harvester/enums.h @@ -0,0 +1,28 @@ +// [CRKBD layers Init] -------------------------------------------------------// +typedef enum { + _BASE, + _NUM, + _FUNC, + _MEDIA, + _GAME, + _MODS, + _MODS2 +}CRKBD_LAYERS; + +extern enum CRKBD_LAYERS crkbd_layers; + +typedef enum { + _RGB_INDICATORS, + _RGB_DANGER, + _RGB_NUM, + _RGB_FUNC, + _RGB_MEDIA, + _RGB_GAME, + _RGB_MODS, + _RGB_MODS2, + _RGB_DEFAULT, + _RGB_TRANS, + _RGB_DISABLED +}CRKBD_RGB; + +extern enum CRKBD_RGB crkbd_rgb; diff --git a/keyboards/crkbd/keymaps/harvester/keymap.c b/keyboards/crkbd/keymaps/harvester/keymap.c new file mode 100644 index 000000000000..ab4558c18ea7 --- /dev/null +++ b/keyboards/crkbd/keymaps/harvester/keymap.c @@ -0,0 +1,149 @@ +/* +Copyright 2019 @foostan +Copyright 2020 Drashna Jaelre <@drashna> + +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 .vvvvvvvvvfdfgfdvcfdfgbv';p:.'p;:...llloooll...cvbcvbgfdsssaaxzzxasasaqwqwaszxasssdddsdss;;;...s...sssdddf,,gmmf,,gf.,dfgdfg.,mcvbbbb +*/ + +#include QMK_KEYBOARD_H +#include "oled.c" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + LSFT_T(KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, RSFT_T(KC_QUOT), + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + LCTL_T(KC_CAPS), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RCTL_T(KC_BSLS), + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, MO(_NUM), KC_SPC, KC_ENT, MO(_FUNC), RALT_T(KC_MENU) + //`--------------------------' `--------------------------' + + ), + + [_NUM] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC,KC_RBRC, KC_BSLS, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, XXXXXXX, KC_LEFT, KC_DOWN,KC_RIGHT, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, _______, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, MO(_MEDIA), KC_SCRL + //`--------------------------' `--------------------------' + ), + + [_FUNC] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + KC_GRAVE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, KC_LEFT, KC_LEFT,KC_DOWN,KC_RIGHT, KC_PGDN, NK_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + _______, MO(_MEDIA), _______, _______, _______, _______ + //`--------------------------' `--------------------------' + ), + + [_MEDIA] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EEP_RST, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, XXXXXXX, XXXXXXX, TO(_GAME), + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_VOLD, KC_MNXT, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, KC_MPLY + //`--------------------------' `--------------------------' + ), + [_GAME] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + QK_GESC, KC_T, KC_Q, KC_W, KC_E, KC_R, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LSFT, KC_G, KC_A, KC_S, KC_D, KC_F, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + MO(_MODS2), MO(_MODS), KC_SPC, KC_ENT, XXXXXXX, KC_RALT + //`--------------------------' `--------------------------' + ), + [_MODS] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + _______, KC_1, KC_2, KC_3, KC_4, KC_5, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + XXXXXXX, KC_6, KC_7, KC_8, KC_9, KC_0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TO(_BASE), + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + _______, _______, _______, KC_ENT, XXXXXXX, XXXXXXX + //`--------------------------' `--------------------------' + ), + [_MODS2] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + XXXXXXX, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TO(_BASE), + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + _______, _______, _______, KC_ENT, XXXXXXX, XXXXXXX + //`--------------------------' `--------------------------' + ) +}; + +uint8_t mod_state; +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + #ifdef OLED_ENABLE + if (record->event.pressed) { + set_keylog(keycode, record); + } + #endif + mod_state = get_mods(); + switch (keycode) { + + case KC_BSPC: + { + // Initialize a boolean variable that keeps track + // of the delete key status: registered or not? + static bool delkey_registered; + if (record->event.pressed) { + // Detect the activation of either shift keys + if (mod_state & MOD_MASK_SHIFT) { + // First temporarily canceling both shifts so that + // shift isn't applied to the KC_DEL keycode + del_mods(MOD_MASK_SHIFT); + register_code(KC_DEL); + // Update the boolean variable to reflect the status of KC_DEL + delkey_registered = true; + // Reapplying modifier state so that the held shift key(s) + // still work even after having tapped the Backspace/Delete key. + set_mods(mod_state); + return false; + } + } else { // on release of KC_BSPC + // In case KC_DEL is still being sent even after the release of KC_BSPC + if (delkey_registered) { + unregister_code(KC_DEL); + delkey_registered = false; + return false; + } + } + // Let QMK process the KC_BSPC keycode as usual outside of shift + return true; + } + + } + return true; +}; diff --git a/keyboards/crkbd/keymaps/harvester/oled.c b/keyboards/crkbd/keymaps/harvester/oled.c new file mode 100644 index 000000000000..ccde8dcffbc6 --- /dev/null +++ b/keyboards/crkbd/keymaps/harvester/oled.c @@ -0,0 +1,118 @@ +#include QMK_KEYBOARD_H +#include "enums.h" + +#ifdef OLED_ENABLE +#include + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + if (!is_keyboard_master()) { + return OLED_ROTATION_180; // flips the display 180 degrees if offhand + } + return rotation; +} + +void oled_render_layer_state(void) { + oled_write_P(PSTR("Layer: "), false); + switch (get_highest_layer(layer_state)) { + case _BASE: + oled_write_ln_P(PSTR("Base"), false); + break; + case _NUM: + oled_write_ln_P(PSTR("Numbers"), false); + break; + case _FUNC: + oled_write_ln_P(PSTR("Functions"), false); + break; + case _MEDIA: + oled_write_ln_P(PSTR("Media"), false); + break; + case _GAME: + oled_write_ln_P(PSTR("Gaming"), false); + break; + case _MODS: + oled_write_ln_P(PSTR("GNum"), false); + break; + case _MODS2: + oled_write_ln_P(PSTR("GFunc"), false); + break; + default: + oled_write_ln_P(PSTR("Undefined"), false); + } + // Host Keyboard LED Status + led_t led_state = host_keyboard_led_state(); + oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false); + oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false); + oled_write_ln_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false); +} + + +char keylog_str[24] = {}; + +const char code_to_name[60] = { + ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', + 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', + 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', + 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\', + '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '}; + +void set_keylog(uint16_t keycode, keyrecord_t *record) { + char name = ' '; + if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || + (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; } + if (keycode < 60) { + name = code_to_name[keycode]; + } + + // update keylog + snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c", + record->event.key.row, record->event.key.col, + keycode, name); +} + +void oled_render_keylog(void) { + oled_write(keylog_str, false); +} + +void render_bootmagic_status(bool status) { + /* Show Ctrl-Gui Swap options */ + static const char PROGMEM logo[][2][3] = { + {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, + {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, + }; + if (status) { + + oled_write_ln_P(logo[0][0], false); + oled_write_ln_P(logo[0][1], false); + } else { + oled_write_ln_P(logo[1][0], false); + oled_write_ln_P(logo[1][1], false); + } +} + +void oled_render_logo(void) { + static const char PROGMEM crkbd_logo[] = { + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, + 0}; + oled_write_P(crkbd_logo, false); +} + +bool oled_task_user(void) { + if (is_keyboard_master()) { + oled_render_layer_state(); + oled_render_keylog(); + } else { + oled_render_logo(); + } + return false; +} + +/*bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + set_keylog(keycode, record); + } + return true; +*/ +#endif // OLED_ENABLE diff --git a/keyboards/crkbd/keymaps/harvester/rgb.c b/keyboards/crkbd/keymaps/harvester/rgb.c new file mode 100644 index 000000000000..a09c98c04871 --- /dev/null +++ b/keyboards/crkbd/keymaps/harvester/rgb.c @@ -0,0 +1,86 @@ +#include QMK_KEYBOARD_H +#include "enums.h" +#include "rgb.h" + +#ifdef RGB_MATRIX_ENABLE + +__attribute__ ((weak)) + +void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + + if (host_keyboard_led_state().caps_lock) { + for (uint8_t i = led_min; i <= led_max; i++) { + if (g_led_config.flags[i] & LED_FLAG_KEYLIGHT) { + rgb_matrix_set_color(i, RGB_INDICATORS); + } + } + } + + if (get_highest_layer(layer_state) > 0) { + uint8_t layer = get_highest_layer(layer_state); + for (uint8_t row = 0; row < MATRIX_ROWS; ++row) { + for (uint8_t col = 0; col < MATRIX_COLS; ++col) { + uint8_t index = g_led_config.matrix_co[row][col]; + if (index >= led_min && index <= led_max && index != NO_LED && (keymap_key_to_keycode(layer, (keypos_t){col, row}) == QK_BOOTLOADER || keymap_key_to_keycode(layer, (keypos_t){col, row}) == QK_CLEAR_EEPROM)) { + rgb_matrix_set_color(index, RGB_DANGER); + } else if (index >= led_min && index <= led_max && index != NO_LED && keymap_key_to_keycode(layer, (keypos_t){col, row}) > KC_TRNS) { + switch (layer) { + case _NUM: { + rgb_matrix_set_color(index, RGB_NUM); + break; + } + case _FUNC: { + rgb_matrix_set_color(index, RGB_FUNC); + break; + } + case _MEDIA: { + rgb_matrix_set_color(index, RGB_MEDIA); + break; + } + case _GAME: { + switch (keymap_key_to_keycode(layer, (keypos_t){col, row})) { + case KC_W: { + rgb_matrix_set_color(index, RGB_GAME); + break; + } + case KC_A: { + rgb_matrix_set_color(index, RGB_GAME); + break; + } + case KC_S: { + rgb_matrix_set_color(index, RGB_GAME); + break; + } + case KC_D: { + rgb_matrix_set_color(index, RGB_GAME); + break; + } + default: { + rgb_matrix_set_color(index, RGB_DISABLED); + break; + } + } + break; + }; + case _MODS: { + rgb_matrix_set_color(index, RGB_MODS); + break; + }; + case _MODS2: { + rgb_matrix_set_color(index, RGB_MODS2); + break; + } + default: { // for any other layers, or the default layer + rgb_matrix_set_color(index, RGB_DEFAULT); + } + } + } else if (index >= led_min && index <= led_max && index != NO_LED && keymap_key_to_keycode(layer, (keypos_t){col, row}) == KC_TRNS) { + rgb_matrix_set_color(index, RGB_TRANS); + } else if (index >= led_min && index <= led_max && index != NO_LED && keymap_key_to_keycode(layer, (keypos_t){col, row}) == KC_NO) { + rgb_matrix_set_color(index, RGB_DISABLED); + } + } + } + } +} +#endif diff --git a/keyboards/crkbd/keymaps/harvester/rgb.h b/keyboards/crkbd/keymaps/harvester/rgb.h new file mode 100644 index 000000000000..b9fe33b09ee0 --- /dev/null +++ b/keyboards/crkbd/keymaps/harvester/rgb.h @@ -0,0 +1,11 @@ +#define RGB_INDICATORS 255,255,255 +#define RGB_DANGER 255,0,0 +#define RGB_NUM 0,255,255 +#define RGB_FUNC 255,255,0 +#define RGB_MEDIA 255,0,255 +#define RGB_GAME 255,0,0 +#define RGB_MODS 0,0,255 +#define RGB_MODS2 0,255,0 +#define RGB_DEFAULT 255,255,255 +#define RGB_TRANS 10,10,10 +#define RGB_DISABLED 0,0,0 diff --git a/keyboards/crkbd/keymaps/harvester/rules.mk b/keyboards/crkbd/keymaps/harvester/rules.mk new file mode 100644 index 000000000000..d1f159f3c00f --- /dev/null +++ b/keyboards/crkbd/keymaps/harvester/rules.mk @@ -0,0 +1,18 @@ +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. +VIA_ENABLE = yes # Enable VIA +OLED_ENABLE = yes +OLED_DRIVER = SSD1306 +LTO_ENABLE = yes +MOUSEKEY_ENABLE = no +RGB_MATRIX_ENABLE = yes +GRAVE_ESC_ENABLE = yes +TAP_DANCE_ENABLE = no +AUTO_SHIFT_ENABLE = no +COMBO_ENABLE = no +KEY_LOCK_ENABLE = no +KEY_OVERRIDE_ENABLE = no +SEQUENCER_ENABLE = no + +DEBOUNCE_TYPE = asym_eager_defer_pk + +SRC += ./rgb.c From 27994f85d20951f04255c641536d32105ae799cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Oct 2022 05:54:04 +0000 Subject: [PATCH 155/155] Bump JamesIves/github-pages-deploy-action from 4.3.4 to 4.4.1 Bumps [JamesIves/github-pages-deploy-action](https://github.com/JamesIves/github-pages-deploy-action) from 4.3.4 to 4.4.1. - [Release notes](https://github.com/JamesIves/github-pages-deploy-action/releases) - [Commits](https://github.com/JamesIves/github-pages-deploy-action/compare/v4.3.4...v4.4.1) --- updated-dependencies: - dependency-name: JamesIves/github-pages-deploy-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 70566c425a9d..1497739a0b52 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -34,7 +34,7 @@ jobs: qmk --verbose generate-docs - name: Deploy - uses: JamesIves/github-pages-deploy-action@v4.3.4 + uses: JamesIves/github-pages-deploy-action@v4.4.1 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} BASE_BRANCH: master