From 073b44924cdfd28d64ad2ee1dbe88b00f92d2c72 Mon Sep 17 00:00:00 2001 From: skullY Date: Sun, 27 Mar 2016 16:17:40 -0700 Subject: [PATCH 01/67] Adding clueboard/cluepad support to qmk --- .gitignore | 4 +- keyboard/clueboard1/Makefile | 137 +++++++++++++++ keyboard/clueboard1/clueboard1.c | 27 +++ keyboard/clueboard1/clueboard1.h | 52 ++++++ keyboard/clueboard1/config.h | 86 ++++++++++ keyboard/clueboard1/keymaps/keymap_default.c | 108 ++++++++++++ keyboard/clueboard1/led.c | 34 ++++ keyboard/clueboard2/Makefile | 140 +++++++++++++++ keyboard/clueboard2/backlight.c | 41 +++++ keyboard/clueboard2/clueboard2.c | 44 +++++ keyboard/clueboard2/clueboard2.h | 57 +++++++ keyboard/clueboard2/config.h | 100 +++++++++++ keyboard/clueboard2/keymaps/keymap_default.c | 170 +++++++++++++++++++ keyboard/clueboard2/keymaps/keymap_max.c | 147 ++++++++++++++++ keyboard/clueboard2/keymaps/keymap_skully.c | 108 ++++++++++++ keyboard/clueboard2/led.c | 36 ++++ keyboard/cluepad/Makefile | 136 +++++++++++++++ keyboard/cluepad/backlight.c | 54 ++++++ keyboard/cluepad/cluepad.c | 39 +++++ keyboard/cluepad/cluepad.h | 41 +++++ keyboard/cluepad/config.h | 102 +++++++++++ keyboard/cluepad/keymaps/keymap_default.c | 122 +++++++++++++ 22 files changed, 1783 insertions(+), 2 deletions(-) create mode 100644 keyboard/clueboard1/Makefile create mode 100644 keyboard/clueboard1/clueboard1.c create mode 100644 keyboard/clueboard1/clueboard1.h create mode 100644 keyboard/clueboard1/config.h create mode 100644 keyboard/clueboard1/keymaps/keymap_default.c create mode 100644 keyboard/clueboard1/led.c create mode 100644 keyboard/clueboard2/Makefile create mode 100644 keyboard/clueboard2/backlight.c create mode 100644 keyboard/clueboard2/clueboard2.c create mode 100644 keyboard/clueboard2/clueboard2.h create mode 100644 keyboard/clueboard2/config.h create mode 100644 keyboard/clueboard2/keymaps/keymap_default.c create mode 100644 keyboard/clueboard2/keymaps/keymap_max.c create mode 100644 keyboard/clueboard2/keymaps/keymap_skully.c create mode 100644 keyboard/clueboard2/led.c create mode 100644 keyboard/cluepad/Makefile create mode 100644 keyboard/cluepad/backlight.c create mode 100644 keyboard/cluepad/cluepad.c create mode 100644 keyboard/cluepad/cluepad.h create mode 100644 keyboard/cluepad/config.h create mode 100644 keyboard/cluepad/keymaps/keymap_default.c diff --git a/.gitignore b/.gitignore index 8b8c45169d..a082ea22e4 100644 --- a/.gitignore +++ b/.gitignore @@ -16,8 +16,8 @@ build/ .vagrant/ .DS_STORE -# Eclipse Settings +# Eclipse/PyCharm/Other IDE Settings .cproject .project .settings/ - +.idea diff --git a/keyboard/clueboard1/Makefile b/keyboard/clueboard1/Makefile new file mode 100644 index 0000000000..767fc95efb --- /dev/null +++ b/keyboard/clueboard1/Makefile @@ -0,0 +1,137 @@ +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device. +# Please customize your programmer settings(PROGRAM_CMD) +# +# make teensy = Download the hex file to the device, using teensy_loader_cli. +# (must have teensy_loader_cli installed). +# +# make dfu = Download the hex file to the device, using dfu-programmer (must +# have dfu-programmer installed). +# +# make flip = Download the hex file to the device, using Atmel FLIP (must +# have Atmel FLIP installed). +# +# make dfu-ee = Download the eeprom file to the device, using dfu-programmer +# (must have dfu-programmer installed). +# +# make flip-ee = Download the eeprom file to the device, using Atmel FLIP +# (must have Atmel FLIP installed). +# +# make debug = Start either simulavr or avarice as specified for debugging, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# Target file name (without extension). +TARGET = clueboard1 + + +# Directory common source filess exist +TOP_DIR = ../.. +TMK_DIR = ../../tmk_core + +# Directory keyboard dependent files exist +TARGET_DIR = . + +# # project specific files +SRC = clueboard1.c \ + led.c \ + +ifdef KEYMAP + SRC := keymaps/keymap_$(KEYMAP).c $(SRC) +else + SRC := keymaps/keymap_default.c $(SRC) +endif + +CONFIG_H = config.h + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# 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* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +# MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +# MIDI_ENABLE = YES # MIDI controls +# UNICODE_ENABLE = YES # Unicode +# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID + + +# Optimize size but this may cause error "relocation truncated to fit" +#EXTRALDFLAGS = -Wl,--relax + +# Search Path +VPATH += $(TARGET_DIR) +VPATH += $(TOP_DIR) +VPATH += $(TMK_DIR) + +include $(TOP_DIR)/quantum/quantum.mk diff --git a/keyboard/clueboard1/clueboard1.c b/keyboard/clueboard1/clueboard1.c new file mode 100644 index 0000000000..252c65fcc2 --- /dev/null +++ b/keyboard/clueboard1/clueboard1.c @@ -0,0 +1,27 @@ +#include "clueboard1.h" + +__attribute__ ((weak)) +void * matrix_init_user(void) { + // leave these blank +}; + +__attribute__ ((weak)) +void * matrix_scan_user(void) { + // leave these blank +}; + +void * matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + if (matrix_init_user) { + (*matrix_init_user)(); + } +}; + +void * matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + if (matrix_scan_user) { + (*matrix_scan_user)(); + } +}; diff --git a/keyboard/clueboard1/clueboard1.h b/keyboard/clueboard1/clueboard1.h new file mode 100644 index 0000000000..1572ea2fdc --- /dev/null +++ b/keyboard/clueboard1/clueboard1.h @@ -0,0 +1,52 @@ +#ifndef CLUEBOARD1_H +#define CLUEBOARD1_H + +#include "matrix.h" +#include "keymap_common.h" +#include + + +/* Clueboard matrix layout + * ,-----------------------------------------------------------. ,---. + * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 0E| | 0F| + * |-----------------------------------------------------------| |---| + * | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| 1C| 1D| | 1F| + * |-----------------------------------------------------------| `---' + * | 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 2A| 2B| 2C| 2D| + * |------------------------------------------------------------. + * | 30| 31| 32| 33| 34| 35| 36| 37| 38| 39| 3A| 3B| 3C| 3D|3E| + * |------------------------------------------------------------------. + * | 40| 41| 42| 43| 45| 46| 49| 4A| 4B| 4C| 4D| 4E| 4F| + * `------------------------------------------------------------------' + * ,-----------------------------------------------------------. ,---. + * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Yen| BS| |Ins| + * |-----------------------------------------------------------| |---| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del| + * |-----------------------------------------------------------| `---' + * |Caps | A| S| D| F| G| H| J| k| L| ;| '| # | Ent| + * |--------------------------------------------------------------. + * |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up| + * |------------------------------------------------------------------. + * |Ctrl|Alt|Gui |MHen| Space| Space|Henk|Gui |Ctrl| Fn|Left|Down|Rgt| + * `------------------------------------------------------------------' + */ +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + 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, k1F, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, \ + k40, k41, k42, k43, k45, k46, k49, k4A, k4B, k4C, k4D, k4E, k4F \ +) { \ + { 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, KC_NO, k1F }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D }, \ + { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E }, \ + { k40, k41, k42, k43, KC_NO, k45, k46, KC_NO, KC_NO, k49, k4A, k4B, k4C, k4D, k4E, k4F } \ +} + +void * matrix_init_user(void); +void * matrix_scan_user(void); + +#endif diff --git a/keyboard/clueboard1/config.h b/keyboard/clueboard1/config.h new file mode 100644 index 0000000000..01212078f1 --- /dev/null +++ b/keyboard/clueboard1/config.h @@ -0,0 +1,86 @@ +/* +Copyright 2012 Jun Wako + +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 0xC1ED +#define PRODUCT_ID 0x2301 +#define DEVICE_VER 0x0003 +#define MANUFACTURER Clueboard +#define PRODUCT Clueboard +#define DESCRIPTION QMK keyboard firmware for Clueboard + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 16 + +// COLS: Left to right, ROWS: Top to bottom + +/* Column pin configuration + * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + * pin: B3 F1 F4 F5 F6 C7 C6 B6 B5 B4 D7 D6 D4 F7 B0 B1 + */ +#define COLS (int []){ B3, F1, F4, F5, F6, C7, C6, B6, B5, B4, D7, D6, D4, F7, B0, B1 } + + /* Row pin configuration + * row: 0 1 2 3 4 + * pin: D1 D0 D2 D5 D3 + */ +#define ROWS (int []){ D1, D0, D2, D5, D3 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* 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 + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboard/clueboard1/keymaps/keymap_default.c b/keyboard/clueboard1/keymaps/keymap_default.c new file mode 100644 index 0000000000..bee7e35a07 --- /dev/null +++ b/keyboard/clueboard1/keymaps/keymap_default.c @@ -0,0 +1,108 @@ +#include "clueboard1.h" + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL 1 +#define _RS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,--------------------------------------------------------------------------. ,----. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |PGUP| + * |--------------------------------------------------------------------------| |----| + * | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PGDN| + * |--------------------------------------------------------------------------| `----' + * |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent| + * |-----------------------------------------------------------------------------. + * |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| UP| + * |------------------------------------------------------------------------|----|----. + * | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT| + * `----------------------------------------------------------------------------------' + */ +[_BL] = KEYMAP( + F(0), 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_BSLS, 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_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_RO, KC_RSFT, KC_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + * ,--------------------------------------------------------------------------. ,----. + * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN| + * |--------------------------------------------------------------------------| |----| + * | | | | | | | | |PScr|SLck|Paus| | | | |BLDE| + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | |PGUP| + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL|HOME|PGDN| END| + * `----------------------------------------------------------------------------------' + */ +[_FL] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, BL_INC, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, \ + KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_HOME, KC_PGDN, KC_END), + + /* Keymap _RS: Reset layer + * ,--------------------------------------------------------------------------. ,----. + * | | | | | | | | | | | | | | | | | | + * |--------------------------------------------------------------------------| |----| + * | | | | |RESET| | | | | | | | | | | | + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL| | | | + * `----------------------------------------------------------------------------------' + */ +[_RS] = 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,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_TRNS, KC_TRNS, KC_TRNS), +}; + +enum function_id { + SHIFT_ESC, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(SHIFT_ESC), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + } +} diff --git a/keyboard/clueboard1/led.c b/keyboard/clueboard1/led.c new file mode 100644 index 0000000000..deb7143eec --- /dev/null +++ b/keyboard/clueboard1/led.c @@ -0,0 +1,34 @@ + /* +Copyright 2012 Jun Wako + +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 "stdint.h" +#include "led.h" + + +void led_set(uint8_t usb_led) +{ + if (usb_led & (1< +#include "backlight.h" +#include "print.h" + +/* Clueboard 2.0 LED locations: + * + * Capslock: B4, pull high to turn on + * LCtrl: Shared with Capslock, DO NOT INSTALL LED'S IN BOTH + * Page Up: B7, pull high to turn on + * Escape: D6, pull high to turn on + * Arrows: D4, pull high to turn on + */ + +void init_backlight_pin(void) { + print("init_backlight_pin()\n"); + // Set our LED pins as output + DDRD |= (1<<6); // Esc + DDRB |= (1<<7); // Page Up + DDRD |= (1<<4); // Arrows + + // Set our LED pins low + PORTD &= ~(1<<6); // Esc + PORTB &= ~(1<<7); // Page Up + PORTD &= ~(1<<4); // Arrows +} + +void backlight_set(uint8_t level) { + if ( level == 0 ) { + // Turn off light + PORTD |= (1<<6); // Esc + PORTB |= (1<<7); // Page Up + PORTD |= (1<<4); // Arrows + } else { + // Turn on light + PORTD &= ~(1<<6); // Esc + PORTB &= ~(1<<7); // Page Up + PORTD &= ~(1<<4); // Arrows + } +} + diff --git a/keyboard/clueboard2/clueboard2.c b/keyboard/clueboard2/clueboard2.c new file mode 100644 index 0000000000..97d393d18d --- /dev/null +++ b/keyboard/clueboard2/clueboard2.c @@ -0,0 +1,44 @@ +#include "clueboard2.h" + +#ifdef BACKLIGHT_ENABLE +#include "backlight.h" +#endif + +__attribute__ ((weak)) +void * matrix_init_user(void) { + // leave these blank +}; + +__attribute__ ((weak)) +void * matrix_scan_user(void) { + // leave these blank +}; + +void * matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + if (matrix_init_user) { + (*matrix_init_user)(); + } + led_init_ports(); + + #ifdef BACKLIGHT_ENABLE + init_backlight_pin(); + #endif + + #ifdef RGBLIGHT_ENABLE + rgblight_init(); + #endif + + // JTAG disable for PORT F. write JTD bit twice within four cycles. + MCUCR |= (1< + + +/* Clueboard matrix layout + * ,-----------------------------------------------------------. ,---. + * | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54| 55| 56| | 57| + * |-----------------------------------------------------------| |---| + * | 10| 11| 12| 13| 14| 15| 16| 17| 60| 61| 62| 63| 64| 65| | 67| + * |-----------------------------------------------------------| `---' + * | 20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73| 74| 75| + * |------------------------------------------------------------. + * | 30| 31| 32| 33| 34| 35| 36| 37| 80| 81| 82| 83| 84| 85|86| + * |------------------------------------------------------------------. + * | 40| 41| 42| 43| 45| 46| 90| 91| 92| 93| 94| 95| 96| + * `------------------------------------------------------------------' + * ,-----------------------------------------------------------. ,---. + * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Yen| BS| |Ins| + * |-----------------------------------------------------------| |---| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del| + * |-----------------------------------------------------------| `---' + * |Caps | A| S| D| F| G| H| J| k| L| ;| '| # | Ent| + * |--------------------------------------------------------------. + * |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up| + * |------------------------------------------------------------------. + * |Ctrl|Alt|Gui |MHen| Space| Space|Henk|Gui |Ctrl| Fn|Left|Down|Rgt| + * `------------------------------------------------------------------' + */ +// The first section contains all of the arguments +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57, \ + k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \ + k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, \ + k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k84, k85, k86, \ + k40, k41, k42, k43, k45, k46, k90, k92, k93, k94, k95, k96, k97 \ +) { \ + { k00, k01, k02, k03, k04, k05, k06, k07 }, \ + { k10, k11, k12, k13, k14, k15, k16, k17 }, \ + { k20, k21, k22, k23, k24, k25, k26, k27 }, \ + { k30, k31, k32, k33, k34, k35, k36, k37 }, \ + { k40, k41, k42, k43, KC_NO, k45, k46, KC_NO }, \ + { k50, k51, k52, k53, k54, k55, k56, k57 }, \ + { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \ + { k70, k71, k72, k73, k74, k75, KC_NO, KC_NO }, \ + { k80, k81, k82, k83, k84, k85, k86, KC_NO }, \ + { k90, KC_NO, k92, k93, k94, k95, k96, k97 } \ +} + +void * matrix_init_user(void); +void * matrix_scan_user(void); + +#endif diff --git a/keyboard/clueboard2/config.h b/keyboard/clueboard2/config.h new file mode 100644 index 0000000000..04166c20f6 --- /dev/null +++ b/keyboard/clueboard2/config.h @@ -0,0 +1,100 @@ +/* +Copyright 2012 Jun Wako + +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 0xC1ED +#define PRODUCT_ID 0x2320 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Clueboard +#define PRODUCT Clueboard with RGB Underlighting +#define DESCRIPTION QMK keyboard firmware for Clueboard + +/* key matrix size */ +#define MATRIX_ROWS 10 +#define MATRIX_COLS 8 + +// COLS: Left to right, ROWS: Top to bottom + +/* Column pin configuration + * col: 0 1 2 3 4 5 6 7 + * pin: F0 F1 F4 F5 F6 F7 E6 B1 + */ +#define COLS (int []){ F0, F1, F4, F5, F6, F7, E6, B1 } + + /* Row pin configuration + * row: 0 1 2 3 4 5 6 7 8 9 + * pin: B2 C7 C6 B6 B5 B0 B3 D5 D3 D2 + */ +#define ROWS (int []){ B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* 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 + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* Backlight configuration + */ +#define BACKLIGHT_LEVELS 1 + +/* Underlight configuration + */ + #define ws2812_PORTREG PORTD + #define ws2812_DDRREG DDRD + #define ws2812_pin 7 + #define RGBLED_NUM 14 // Number of LEDs + #define RGBLIGHT_HUE_STEP 10 + #define RGBLIGHT_SAT_STEP 17 + #define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboard/clueboard2/keymaps/keymap_default.c b/keyboard/clueboard2/keymaps/keymap_default.c new file mode 100644 index 0000000000..5d52f27a72 --- /dev/null +++ b/keyboard/clueboard2/keymaps/keymap_default.c @@ -0,0 +1,170 @@ +#include "clueboard2.h" + +#ifdef ENABLE_RGBLIGHT +#include "rgblight.h" +#endif + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL 1 +#define _RS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,--------------------------------------------------------------------------. ,----. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |PGUP| + * |--------------------------------------------------------------------------| |----| + * | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PGDN| + * |--------------------------------------------------------------------------| `----' + * |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent| + * |-----------------------------------------------------------------------------. + * |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| UP| + * |------------------------------------------------------------------------|----|----. + * | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT| + * `----------------------------------------------------------------------------------' + */ +[_BL] = KEYMAP( + F(0), 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_GRV, 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_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_RO, KC_RSFT, KC_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + * ,--------------------------------------------------------------------------. ,----. + * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN| + * |--------------------------------------------------------------------------| |----| + * | | | | | | | | |PScr|SLck|Paus| | | | |BLDE| + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | |PGUP| + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL|HOME|PGDN| END| + * `----------------------------------------------------------------------------------' + */ +[_FL] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, BL_STEP, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_HOME, KC_PGDN, KC_END), + + /* Keymap _RS: Reset layer + * ,--------------------------------------------------------------------------. ,----. + * | | | | | | | | | | | | | | | | | | + * |--------------------------------------------------------------------------| |----| + * | | | | |RESET| | | | | | | | | | | | + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL| | | | + * `----------------------------------------------------------------------------------' + */ +[_RS] = 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, F(0), F(6), \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(7), \ + KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), F(4), \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, F(1), F(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(3), F(5), F(2)), +}; + +enum function_id { + SHIFT_ESC, + RGBLED_TOGGLE, + RGBLED_STEP_MODE, + RGBLED_INCREASE_HUE, + RGBLED_DECREASE_HUE, + RGBLED_INCREASE_SAT, + RGBLED_DECREASE_SAT, + RGBLED_INCREASE_VAL, + RGBLED_DECREASE_VAL +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(SHIFT_ESC), + [1] = ACTION_FUNCTION(RGBLED_TOGGLE), + [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), + [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), + [4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), + [5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), + [6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), + [7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), + [8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + //led operations + case RGBLED_TOGGLE: + if (record->event.pressed) { + rgblight_toggle(); + } + + break; + case RGBLED_INCREASE_HUE: + if (record->event.pressed) { + rgblight_increase_hue(); + } + break; + case RGBLED_DECREASE_HUE: + if (record->event.pressed) { + rgblight_decrease_hue(); + } + break; + case RGBLED_INCREASE_SAT: + if (record->event.pressed) { + rgblight_increase_sat(); + } + break; + case RGBLED_DECREASE_SAT: + if (record->event.pressed) { + rgblight_decrease_sat(); + } + break; + case RGBLED_INCREASE_VAL: + if (record->event.pressed) { + rgblight_increase_val(); + } + break; + case RGBLED_DECREASE_VAL: + if (record->event.pressed) { + rgblight_decrease_val(); + } + break; + case RGBLED_STEP_MODE: + if (record->event.pressed) { + rgblight_step(); + } + break; + } +} diff --git a/keyboard/clueboard2/keymaps/keymap_max.c b/keyboard/clueboard2/keymaps/keymap_max.c new file mode 100644 index 0000000000..714d6390d9 --- /dev/null +++ b/keyboard/clueboard2/keymaps/keymap_max.c @@ -0,0 +1,147 @@ +#include "clueboard2.h" + +#ifdef ENABLE_RGBLIGHT +#include "rgblight.h" +#endif + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL 1 +#define _RS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,--------------------------------------------------------------------------. ,----. + * | Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| ~| BS| |PgUp| + * |--------------------------------------------------------------------------| |----| + * | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PgDn| + * |--------------------------------------------------------------------------| `----' + * |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent| + * |-----------------------------------------------------------------------------. + * |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| Up| + * |------------------------------------------------------------------------|----|----. + * | Ctrl| Alt| Gui| MHen| Space| Space| Hen| Gui| Alt| Ctrl|Left|Down|Rght| + * `----------------------------------------------------------------------------------' + */ +[_BL] = KEYMAP( + 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_GRV, 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_NUHS, KC_ENT, \ + MO(_FL), KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL), KC_UP, \ + KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + * ,--------------------------------------------------------------------------. ,----. + * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN| + * |--------------------------------------------------------------------------| |----| + * | | | | | | | | |PScr|SLck|Paus| | | | |BLDE| + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | |PGUP| + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL|HOME|PGDN| END| + * `----------------------------------------------------------------------------------' + */ +[_FL] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, BL_STEP, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_PGUP, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END), + + /* Keymap _RS: Reset/Underlight layer + * ,--------------------------------------------------------------------------. ,----. + * | | | | | | | | | | | | | | | | | | + * |--------------------------------------------------------------------------| |----| + * | | | | |RESET| | | | | | | | | | | | + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL| | | | + * `----------------------------------------------------------------------------------' + */ +[_RS] = 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, F(0), F(6), \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(7), \ + KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), F(4), \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, F(1), F(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(3), F(5), F(2)), +}; + +enum function_id { + RGBLED_TOGGLE, + RGBLED_STEP_MODE, + RGBLED_INCREASE_HUE, + RGBLED_DECREASE_HUE, + RGBLED_INCREASE_SAT, + RGBLED_DECREASE_SAT, + RGBLED_INCREASE_VAL, + RGBLED_DECREASE_VAL, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(RGBLED_TOGGLE), + [1] = ACTION_FUNCTION(RGBLED_STEP_MODE), + [2] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), + [3] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), + [4] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), + [5] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), + [6] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), + [7] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + switch (id) { + case RGBLED_TOGGLE: + //led operations + if (record->event.pressed) { + rgblight_toggle(); + } + + break; + case RGBLED_INCREASE_HUE: + if (record->event.pressed) { + rgblight_increase_hue(); + } + break; + case RGBLED_DECREASE_HUE: + if (record->event.pressed) { + rgblight_decrease_hue(); + } + break; + case RGBLED_INCREASE_SAT: + if (record->event.pressed) { + rgblight_increase_sat(); + } + break; + case RGBLED_DECREASE_SAT: + if (record->event.pressed) { + rgblight_decrease_sat(); + } + break; + case RGBLED_INCREASE_VAL: + if (record->event.pressed) { + rgblight_increase_val(); + } + break; + case RGBLED_DECREASE_VAL: + if (record->event.pressed) { + rgblight_decrease_val(); + } + break; + case RGBLED_STEP_MODE: + if (record->event.pressed) { + rgblight_step(); + } + break; + } +} diff --git a/keyboard/clueboard2/keymaps/keymap_skully.c b/keyboard/clueboard2/keymaps/keymap_skully.c new file mode 100644 index 0000000000..74a03f2f30 --- /dev/null +++ b/keyboard/clueboard2/keymaps/keymap_skully.c @@ -0,0 +1,108 @@ +#include "clueboard2.h" + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL 1 +#define _RS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,--------------------------------------------------------------------------. ,----. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |PGUP| + * |--------------------------------------------------------------------------| |----| + * | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PGDN| + * |--------------------------------------------------------------------------| `----' + * |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent| + * |-----------------------------------------------------------------------------. + * |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| UP| + * |------------------------------------------------------------------------|----|----. + * | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT| + * `----------------------------------------------------------------------------------' + */ +[_BL] = KEYMAP( + F(0), 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_GRV, 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_LCTL,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_RO, KC_RSFT, KC_UP, \ + KC_LCTL,KC_LALT,KC_LGUI,MO(_FL), KC_SPC, KC_SPC, MO(_FL), KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + * ,--------------------------------------------------------------------------. ,----. + * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN| + * |--------------------------------------------------------------------------| |----| + * | | | | | | | | |PScr|SLck|Paus| | | | |BLDE| + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | |PGUP| + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL|HOME|PGDN| END| + * `----------------------------------------------------------------------------------' + */ +[_FL] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,KC_DEL, BL_STEP, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \ + KC_TRNS,KC_TRNS,MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_PGUP, \ + KC_TRNS,KC_TRNS,KC_TRNS,MO(_FL), KC_TRNS,KC_TRNS, MO(_FL),KC_TRNS,KC_TRNS,MO(_FL),KC_HOME,KC_PGDN,KC_END), + + /* Keymap _RS: Reset layer + * ,--------------------------------------------------------------------------. ,----. + * | | | | | | | | | | | | | | | | | | + * |--------------------------------------------------------------------------| |----| + * | | | | |RESET| | | | | | | | | | | | + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL| | | | + * `----------------------------------------------------------------------------------' + */ +[_RS] = 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,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \ + KC_TRNS,KC_TRNS,MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,MO(_FL),KC_TRNS, KC_TRNS, KC_TRNS), +}; + +enum function_id { + SHIFT_ESC, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(SHIFT_ESC), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + } +} diff --git a/keyboard/clueboard2/led.c b/keyboard/clueboard2/led.c new file mode 100644 index 0000000000..5788fc7b1f --- /dev/null +++ b/keyboard/clueboard2/led.c @@ -0,0 +1,36 @@ + /* +Copyright 2012 Jun Wako + +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 "stdint.h" +#include "led.h" + + +void led_init_ports() { + // * Set our LED pins as output + DDRB |= (1<<4); +} + +void led_set(uint8_t usb_led) { + if (usb_led & (1< +#include "backlight.h" +#include "led.h" + +#include "print.h" + +int pwm_level; + +void led_set(uint8_t usb_led) +{ + print("led_set\n"); +} + +void init_backlight_pin(void) +{ + // Set C7 to output + DDRC |= (1<<7); + + // Initialize the timer + TC4H = 0x03; + OCR4C = 0xFF; + TCCR4A = 0b10000010; + TCCR4B = 0b00000001; +} + +void backlight_set(uint8_t level) +{ + // Determine the PWM level + switch (level) + { + case 0: + // 33% + pwm_level = 0x54; + break; + case 1: + // 66% + pwm_level = 0xA8; + break; + case 2: + // 100% + pwm_level = 0xFF; + break; + case 3: + // 0% + pwm_level = 0x00; + break; + default: + xprintf("Unknown level: %d\n", level); + } + + // Write the PWM level to the timer + TC4H = pwm_level >> 8; + OCR4A = 0xFF & pwm_level; +} diff --git a/keyboard/cluepad/cluepad.c b/keyboard/cluepad/cluepad.c new file mode 100644 index 0000000000..ff3be5b9b5 --- /dev/null +++ b/keyboard/cluepad/cluepad.c @@ -0,0 +1,39 @@ +#include "cluepad.h" + +__attribute__ ((weak)) +void * matrix_init_user(void) { + // leave these blank +}; + +__attribute__ ((weak)) +void * matrix_scan_user(void) { + // leave these blank +}; + +void * matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + if (matrix_init_user) { + (*matrix_init_user)(); + } + + #ifdef BACKLIGHT_ENABLE + init_backlight_pin(); + #endif + + #ifdef RGBLIGHT_ENABLE + rgblight_init(); + #endif + + // JTAG disable for PORT F. write JTD bit twice within four cycles. + MCUCR |= (1< + + +/* Cluepad matrix layout + * .-------------------. + * |NLCK| /| *| -| + * |-------------------| + * | 7| 8| 9| | + * |--------------| | + * | 4| 5| 6| +| + * |-------------------| + * | 1| 2| 3| | + * |--------------| | + * | 0| .| Ent| + * '-------------------' + */ +// The first section contains all of the arguments +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, k03, \ + k10, k11, k12, k13, \ + k20, k21, k22, \ + k30, k31, k32, k33, \ + k40, k42 \ +) { \ + { k00, k01, k02, k03, }, \ + { k10, k11, k12, k13, }, \ + { k20, k21, k22, KC_NO, }, \ + { k30, k31, k32, k33, }, \ + { k40, KC_NO, k42, KC_NO } \ +} + +void * matrix_init_user(void); +void * matrix_scan_user(void); + +#endif diff --git a/keyboard/cluepad/config.h b/keyboard/cluepad/config.h new file mode 100644 index 0000000000..5ed421a6e0 --- /dev/null +++ b/keyboard/cluepad/config.h @@ -0,0 +1,102 @@ +/* +Copyright 2012 Jun Wako + +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 0xC1ED +#define PRODUCT_ID 0x2312 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Clueboard +#define PRODUCT Cluepad with RGB Underlighting +#define DESCRIPTION QMK keyboard firmware for Cluepad + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 4 + +// COLS: Left to right, ROWS: Top to bottom + +/* Column pin configuration + * col: 0 1 2 3 + * pin: F4 E6 B1 D2 + */ +#define COLS (int []){ F4, E6, B1, D2 } + + /* Row pin configuration + * row: 0 1 2 3 4 + * pin: + */ +#define ROWS (int []){ B0, D3, D5, D4, D6 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Number of backlighting levels */ +#define BACKLIGHT_LEVELS 3 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* Underlight configuration + */ + #define ws2812_PORTREG PORTF + #define ws2812_DDRREG DDRF + #define ws2812_pin 6 + #define RGBLED_NUM 4 // Number of LEDs + #define RGBLIGHT_HUE_STEP 10 + #define RGBLIGHT_SAT_STEP 17 + #define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* Debug forcibly enabled */ +#define ALWAYS_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboard/cluepad/keymaps/keymap_default.c b/keyboard/cluepad/keymaps/keymap_default.c new file mode 100644 index 0000000000..32cb43c745 --- /dev/null +++ b/keyboard/cluepad/keymaps/keymap_default.c @@ -0,0 +1,122 @@ +#include "cluepad.h" + +#include "backlight.h" +#include "rgblight.h" + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL 1 +#define _RS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * .-------------------. + * |NL F| /| *| -| + * |-------------------| + * | 7| 8| 9| | + * |--------------| | + * | 4| 5| 6| +| + * |-------------------| + * | 1| 2| 3| | + * |--------------| | + * | 0| .| Ent| + * '-------------------' + */ +[_BL] = KEYMAP( + LT(_FL, KC_NLCK), KC_PSLS, KC_PAST, KC_PMNS, \ + KC_P7, KC_P8, KC_P9, KC_PPLS, \ + KC_P4, KC_P5, KC_P6, \ + KC_P1, KC_P2, KC_P3, KC_PENT, \ + KC_P0, KC_PDOT), + + /* Keymap _FL: Function Layer + * .-------------------. + * |NL F| | | Fn0| + * |-------------------| + * | Fn2| | Fn4| | + * |--------------| | + * | Fn3|BL_S| Fn5| Fn6| + * |-------------------| + * | | | | | + * |--------------| | + * | Fn1| | Fn7| + * '-------------------' + */ +[_FL] = KEYMAP( + LT(_FL, KC_NLCK), KC_TRNS, KC_TRNS, F(0), \ + F(2), KC_TRNS, F(4), F(6), \ + F(3), BL_STEP, F(5), \ + KC_TRNS, KC_TRNS, KC_TRNS, F(7), \ + F(1), KC_TRNS) +}; + +enum function_id { + RGBLED_TOGGLE, + RGBLED_STEP_MODE, + RGBLED_INCREASE_HUE, + RGBLED_DECREASE_HUE, + RGBLED_INCREASE_SAT, + RGBLED_DECREASE_SAT, + RGBLED_INCREASE_VAL, + RGBLED_DECREASE_VAL, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(RGBLED_TOGGLE), + [1] = ACTION_FUNCTION(RGBLED_STEP_MODE), + [2] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), + [3] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), + [4] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), + [5] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), + [6] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), + [7] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + switch (id) { + case RGBLED_TOGGLE: + if (record->event.pressed) { + rgblight_toggle(); + } + break; + case RGBLED_INCREASE_HUE: + if (record->event.pressed) { + rgblight_increase_hue(); + } + break; + case RGBLED_DECREASE_HUE: + if (record->event.pressed) { + rgblight_decrease_hue(); + } + break; + case RGBLED_INCREASE_SAT: + if (record->event.pressed) { + rgblight_increase_sat(); + } + break; + case RGBLED_DECREASE_SAT: + if (record->event.pressed) { + rgblight_decrease_sat(); + } + break; + case RGBLED_INCREASE_VAL: + if (record->event.pressed) { + rgblight_increase_val(); + } + break; + case RGBLED_DECREASE_VAL: + if (record->event.pressed) { + rgblight_decrease_val(); + } + break; + case RGBLED_STEP_MODE: + if (record->event.pressed) { + rgblight_step(); + } + break; + } +} + From 5e822417d7aaebbb58154092ad2a7b5fd2469fbb Mon Sep 17 00:00:00 2001 From: skullY Date: Mon, 28 Mar 2016 22:49:24 -0700 Subject: [PATCH 02/67] Fixup clueboard support and add rgb to clueboard1 --- keyboard/clueboard1/Makefile | 4 +- keyboard/clueboard1/clueboard1.c | 32 ++++---- keyboard/clueboard1/clueboard1.h | 4 +- keyboard/clueboard1/config.h | 10 +++ keyboard/clueboard1/keymaps/keymap_default.c | 82 +++++++++++++++++++- keyboard/clueboard1/led.c | 14 ++-- keyboard/clueboard2/clueboard2.c | 8 +- keyboard/clueboard2/clueboard2.h | 4 +- keyboard/clueboard2/keymaps/keymap_default.c | 22 +++++- 9 files changed, 137 insertions(+), 43 deletions(-) diff --git a/keyboard/clueboard1/Makefile b/keyboard/clueboard1/Makefile index 767fc95efb..429ea6088b 100644 --- a/keyboard/clueboard1/Makefile +++ b/keyboard/clueboard1/Makefile @@ -51,7 +51,7 @@ TARGET_DIR = . # # project specific files SRC = clueboard1.c \ - led.c \ + led.c ifdef KEYMAP SRC := keymaps/keymap_$(KEYMAP).c $(SRC) @@ -62,7 +62,6 @@ endif CONFIG_H = config.h # MCU name -#MCU = at90usb1287 MCU = atmega32u4 # Processor frequency. @@ -121,6 +120,7 @@ CONSOLE_ENABLE = yes # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work # BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality # MIDI_ENABLE = YES # MIDI controls # UNICODE_ENABLE = YES # Unicode # BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID diff --git a/keyboard/clueboard1/clueboard1.c b/keyboard/clueboard1/clueboard1.c index 252c65fcc2..289e4644d3 100644 --- a/keyboard/clueboard1/clueboard1.c +++ b/keyboard/clueboard1/clueboard1.c @@ -1,27 +1,23 @@ #include "clueboard1.h" __attribute__ ((weak)) -void * matrix_init_user(void) { +void matrix_init_user(void) { // leave these blank -}; +} __attribute__ ((weak)) -void * matrix_scan_user(void) { +void matrix_scan_user(void) { // leave these blank -}; +} -void * matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - if (matrix_init_user) { - (*matrix_init_user)(); - } -}; +void matrix_init_kb(void) { + #ifdef RGBLIGHT_ENABLE + rgblight_init(); + #endif -void * matrix_scan_kb(void) { - // put your looping keyboard code here - // runs every cycle (a lot) - if (matrix_scan_user) { - (*matrix_scan_user)(); - } -}; + matrix_init_user(); +} + +void matrix_scan_kb(void) { + matrix_scan_user(); +} diff --git a/keyboard/clueboard1/clueboard1.h b/keyboard/clueboard1/clueboard1.h index 1572ea2fdc..839a81a150 100644 --- a/keyboard/clueboard1/clueboard1.h +++ b/keyboard/clueboard1/clueboard1.h @@ -46,7 +46,7 @@ { k40, k41, k42, k43, KC_NO, k45, k46, KC_NO, KC_NO, k49, k4A, k4B, k4C, k4D, k4E, k4F } \ } -void * matrix_init_user(void); -void * matrix_scan_user(void); +void matrix_init_user(void); +void matrix_scan_user(void); #endif diff --git a/keyboard/clueboard1/config.h b/keyboard/clueboard1/config.h index 01212078f1..1801e3d2cc 100644 --- a/keyboard/clueboard1/config.h +++ b/keyboard/clueboard1/config.h @@ -65,6 +65,16 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) +/* Underlight configuration + */ + #define ws2812_PORTREG PORTF + #define ws2812_DDRREG DDRF + #define ws2812_pin 6 + #define RGBLED_NUM 14 // Number of LEDs + #define RGBLIGHT_HUE_STEP 10 + #define RGBLIGHT_SAT_STEP 17 + #define RGBLIGHT_VAL_STEP 17 + /* * Feature disable options * These options are also useful to firmware size reduction. diff --git a/keyboard/clueboard1/keymaps/keymap_default.c b/keyboard/clueboard1/keymaps/keymap_default.c index bee7e35a07..33443f5825 100644 --- a/keyboard/clueboard1/keymaps/keymap_default.c +++ b/keyboard/clueboard1/keymaps/keymap_default.c @@ -1,5 +1,9 @@ #include "clueboard1.h" +#ifdef ENABLE_RGBLIGHT +#include "rgblight.h" +#endif + // Used for SHIFT_ESC #define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) @@ -26,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `----------------------------------------------------------------------------------' */ [_BL] = KEYMAP( - F(0), 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_BSLS, KC_BSPC, KC_PGUP, \ + F(0), 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_GRV, 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_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_RO, KC_RSFT, KC_UP, \ @@ -46,8 +50,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `----------------------------------------------------------------------------------' */ [_FL] = KEYMAP( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, BL_INC, \ - KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, \ + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, BL_STEP, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_HOME, KC_PGDN, KC_END), @@ -66,19 +70,47 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `----------------------------------------------------------------------------------' */ [_RS] = KEYMAP( + #ifdef ENABLE_RGBLIGHT + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), F(7), \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(8), \ + KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), F(5), \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, F(2), F(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(4), F(6), F(3)), + #else KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_TRNS, KC_TRNS, KC_TRNS), + #endif }; enum function_id { SHIFT_ESC, + #ifdef ENABLE_RGBLIGHT + RGBLED_TOGGLE, + RGBLED_STEP_MODE, + RGBLED_INCREASE_HUE, + RGBLED_DECREASE_HUE, + RGBLED_INCREASE_SAT, + RGBLED_DECREASE_SAT, + RGBLED_INCREASE_VAL, + RGBLED_DECREASE_VAL + #endif }; const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_FUNCTION(SHIFT_ESC), + #ifdef ENABLE_RGBLIGHT + [1] = ACTION_FUNCTION(RGBLED_TOGGLE), + [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), + [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), + [4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), + [5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), + [6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), + [7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), + [8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), + #endif }; void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { @@ -104,5 +136,49 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; + //led operations + #ifdef ENABLE_RGBLIGHT + case RGBLED_TOGGLE: + if (record->event.pressed) { + rgblight_toggle(); + } + + break; + case RGBLED_INCREASE_HUE: + if (record->event.pressed) { + rgblight_increase_hue(); + } + break; + case RGBLED_DECREASE_HUE: + if (record->event.pressed) { + rgblight_decrease_hue(); + } + break; + case RGBLED_INCREASE_SAT: + if (record->event.pressed) { + rgblight_increase_sat(); + } + break; + case RGBLED_DECREASE_SAT: + if (record->event.pressed) { + rgblight_decrease_sat(); + } + break; + case RGBLED_INCREASE_VAL: + if (record->event.pressed) { + rgblight_increase_val(); + } + break; + case RGBLED_DECREASE_VAL: + if (record->event.pressed) { + rgblight_decrease_val(); + } + break; + case RGBLED_STEP_MODE: + if (record->event.pressed) { + rgblight_step(); + } + break; + #endif } } diff --git a/keyboard/clueboard1/led.c b/keyboard/clueboard1/led.c index deb7143eec..f0dd5662d5 100644 --- a/keyboard/clueboard1/led.c +++ b/keyboard/clueboard1/led.c @@ -20,15 +20,13 @@ along with this program. If not, see . #include "led.h" -void led_set(uint8_t usb_led) -{ +void led_set_kb(uint8_t usb_led) { + DDRF |= (1<<0); if (usb_led & (1<event.pressed) { rgblight_toggle(); @@ -166,5 +179,6 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { rgblight_step(); } break; + #endif } } From 34dd96187c5ea2fe6e806f662e6ab0c320d0df1b Mon Sep 17 00:00:00 2001 From: skullY Date: Tue, 5 Apr 2016 20:27:24 -0700 Subject: [PATCH 03/67] Fix the clueboard2 led code --- keyboard/clueboard2/led.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/clueboard2/led.c b/keyboard/clueboard2/led.c index 5788fc7b1f..3d074e5d20 100644 --- a/keyboard/clueboard2/led.c +++ b/keyboard/clueboard2/led.c @@ -25,7 +25,7 @@ void led_init_ports() { DDRB |= (1<<4); } -void led_set(uint8_t usb_led) { +void led_set_kb(uint8_t usb_led) { if (usb_led & (1< Date: Tue, 5 Apr 2016 20:27:40 -0700 Subject: [PATCH 04/67] Fixup the cluepad code --- keyboard/cluepad/backlight.c | 2 +- keyboard/cluepad/cluepad.c | 8 ++++---- keyboard/cluepad/cluepad.h | 4 ++-- keyboard/cluepad/keymaps/keymap_default.c | 12 ++++++------ 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/keyboard/cluepad/backlight.c b/keyboard/cluepad/backlight.c index c0f8539494..a9caed1df8 100644 --- a/keyboard/cluepad/backlight.c +++ b/keyboard/cluepad/backlight.c @@ -6,7 +6,7 @@ int pwm_level; -void led_set(uint8_t usb_led) +void led_set_kb(uint8_t usb_led) { print("led_set\n"); } diff --git a/keyboard/cluepad/cluepad.c b/keyboard/cluepad/cluepad.c index ff3be5b9b5..d55b999605 100644 --- a/keyboard/cluepad/cluepad.c +++ b/keyboard/cluepad/cluepad.c @@ -1,16 +1,16 @@ #include "cluepad.h" __attribute__ ((weak)) -void * matrix_init_user(void) { +void matrix_init_user(void) { // leave these blank }; __attribute__ ((weak)) -void * matrix_scan_user(void) { +void matrix_scan_user(void) { // leave these blank }; -void * matrix_init_kb(void) { +void matrix_init_kb(void) { // put your keyboard start-up code here // runs once when the firmware starts up if (matrix_init_user) { @@ -30,7 +30,7 @@ void * matrix_init_kb(void) { MCUCR |= (1< Date: Thu, 7 Apr 2016 15:09:53 -0700 Subject: [PATCH 05/67] Add a help message to new_project.sh --- new_project.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/new_project.sh b/new_project.sh index 28de9c2f9f..5ac935d782 100755 --- a/new_project.sh +++ b/new_project.sh @@ -2,6 +2,11 @@ # Script to make a new quantum project # Jack Humbert 2015 +if [ -z "$1" ]; then + echo "Usege: $0 " + exit 1 +fi + KEYBOARD=$1 KEYBOARD_UPPERCASE=$(echo $1 | awk '{print toupper($0)}') From 97f8f378761506914b69d4fd2d5661bfcae28295 Mon Sep 17 00:00:00 2001 From: skullY Date: Sun, 10 Apr 2016 21:16:49 -0700 Subject: [PATCH 06/67] Fixup RGBLIGHT support for clueboard2 --- keyboard/clueboard2/keymaps/keymap_default.c | 11 +++++------ quantum/rgblight.c | 6 +++--- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/keyboard/clueboard2/keymaps/keymap_default.c b/keyboard/clueboard2/keymaps/keymap_default.c index 10fff7b9ac..73179f94cd 100644 --- a/keyboard/clueboard2/keymaps/keymap_default.c +++ b/keyboard/clueboard2/keymaps/keymap_default.c @@ -1,6 +1,6 @@ #include "clueboard2.h" -#ifdef ENABLE_RGBLIGHT +#ifdef RGBLIGHT_ENABLE #include "rgblight.h" #endif @@ -70,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `----------------------------------------------------------------------------------' */ [_RS] = KEYMAP( - #ifdef ENABLE_RGBLIGHT + #ifdef RGBLIGHT_ENABLE KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), F(7), \ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(8), \ KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ @@ -87,7 +87,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { enum function_id { SHIFT_ESC, - #ifdef ENABLE_RGBLIGHT + #ifdef RGBLIGHT_ENABLE RGBLED_TOGGLE, RGBLED_STEP_MODE, RGBLED_INCREASE_HUE, @@ -101,7 +101,7 @@ enum function_id { const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_FUNCTION(SHIFT_ESC), - #ifdef ENABLE_RGBLIGHT + #ifdef RGBLIGHT_ENABLE [1] = ACTION_FUNCTION(RGBLED_TOGGLE), [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), @@ -137,12 +137,11 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } break; //led operations - #ifdef ENABLE_RGBLIGHT + #ifdef RGBLIGHT_ENABLE case RGBLED_TOGGLE: if (record->event.pressed) { rgblight_toggle(); } - break; case RGBLED_INCREASE_HUE: if (record->event.pressed) { diff --git a/quantum/rgblight.c b/quantum/rgblight.c index 2215cf5cdf..6adc9e2784 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -190,7 +190,7 @@ void rgblight_mode(uint8_t mode) { rgblight_config.mode = mode; } eeconfig_write_rgblight(rgblight_config.raw); - dprintf("rgblight mode: %u\n", rgblight_config.mode); + xprintf("rgblight mode: %u\n", rgblight_config.mode); if (rgblight_config.mode == 1) { rgblight_timer_disable(); } else if (rgblight_config.mode >=2 && rgblight_config.mode <=23) { @@ -207,7 +207,7 @@ void rgblight_mode(uint8_t mode) { void rgblight_toggle(void) { rgblight_config.enable ^= 1; eeconfig_write_rgblight(rgblight_config.raw); - dprintf("rgblight toggle: rgblight_config.enable = %u\n", rgblight_config.enable); + xprintf("rgblight toggle: rgblight_config.enable = %u\n", rgblight_config.enable); if (rgblight_config.enable) { rgblight_mode(rgblight_config.mode); } else { @@ -300,7 +300,7 @@ void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val){ rgblight_config.sat = sat; rgblight_config.val = val; eeconfig_write_rgblight(rgblight_config.raw); - dprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val); + xprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val); } } From 21d4cafb8c2894a71c4022e248b0dbcc1d9ce57d Mon Sep 17 00:00:00 2001 From: skullY Date: Wed, 13 Apr 2016 14:20:08 -0700 Subject: [PATCH 07/67] Fixup rgb underlight for clueboard1 --- keyboard/clueboard1/Makefile | 3 +-- keyboard/clueboard1/config.h | 6 +++--- keyboard/clueboard1/keymaps/keymap_default.c | 10 +++++----- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/keyboard/clueboard1/Makefile b/keyboard/clueboard1/Makefile index 429ea6088b..50cde1517b 100644 --- a/keyboard/clueboard1/Makefile +++ b/keyboard/clueboard1/Makefile @@ -119,8 +119,7 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = yes # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality +# RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality # MIDI_ENABLE = YES # MIDI controls # UNICODE_ENABLE = YES # Unicode # BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID diff --git a/keyboard/clueboard1/config.h b/keyboard/clueboard1/config.h index 1801e3d2cc..2b20c3873d 100644 --- a/keyboard/clueboard1/config.h +++ b/keyboard/clueboard1/config.h @@ -67,9 +67,9 @@ along with this program. If not, see . /* Underlight configuration */ - #define ws2812_PORTREG PORTF - #define ws2812_DDRREG DDRF - #define ws2812_pin 6 + #define ws2812_PORTREG PORTB + #define ws2812_DDRREG DDRB + #define ws2812_pin 2 #define RGBLED_NUM 14 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboard/clueboard1/keymaps/keymap_default.c b/keyboard/clueboard1/keymaps/keymap_default.c index 33443f5825..3f4f3c4149 100644 --- a/keyboard/clueboard1/keymaps/keymap_default.c +++ b/keyboard/clueboard1/keymaps/keymap_default.c @@ -1,6 +1,6 @@ #include "clueboard1.h" -#ifdef ENABLE_RGBLIGHT +#ifdef RGBLIGHT_ENABLE #include "rgblight.h" #endif @@ -70,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `----------------------------------------------------------------------------------' */ [_RS] = KEYMAP( - #ifdef ENABLE_RGBLIGHT + #ifdef RGBLIGHT_ENABLE KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), F(7), \ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(8), \ KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ @@ -87,7 +87,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { enum function_id { SHIFT_ESC, - #ifdef ENABLE_RGBLIGHT + #ifdef RGBLIGHT_ENABLE RGBLED_TOGGLE, RGBLED_STEP_MODE, RGBLED_INCREASE_HUE, @@ -101,7 +101,7 @@ enum function_id { const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_FUNCTION(SHIFT_ESC), - #ifdef ENABLE_RGBLIGHT + #ifdef RGBLIGHT_ENABLE [1] = ACTION_FUNCTION(RGBLED_TOGGLE), [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), @@ -137,7 +137,7 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } break; //led operations - #ifdef ENABLE_RGBLIGHT + #ifdef RGBLIGHT_ENABLE case RGBLED_TOGGLE: if (record->event.pressed) { rgblight_toggle(); From fa2eedb7bd906634b8c500ba0d91638e63eaafed Mon Sep 17 00:00:00 2001 From: Roman Zolotarev Date: Sat, 16 Apr 2016 16:57:58 +0800 Subject: [PATCH 08/67] Add Roman's single layer layout based on Norman --- .../romanzolotarev-norman-osx/keymap.c | 45 + .../romanzolotarev-norman-osx/readme.md | 28 + .../romanzolotarev-norman-osx.hex | 1092 +++++++++++++++++ .../romanzolotarev-norman-osx.png | Bin 0 -> 96954 bytes 4 files changed, 1165 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c create mode 100644 keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md create mode 100644 keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.hex create mode 100644 keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png diff --git a/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c new file mode 100644 index 0000000000..e23c5a1d6a --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c @@ -0,0 +1,45 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = KEYMAP( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5, + KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_BSLS, + CTL_T(KC_ESC), KC_A, KC_S, KC_E, KC_T, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, + KC_F1, KC_F2, KC_F3, KC_F4, KC_LGUI, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_LALT, + // + /*-*/ KC_F6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + /*-*/ KC_NO, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_MINS, + /*-*/ /*-*/ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_ENT, + /*-*/ KC_RBRC, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + /*-*/ /*-*/ /*-*/ KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, + KC_MPLY, KC_MNXT, + KC_MPRV, + KC_RALT, KC_QUOT, KC_SPC + ) +}; + +const uint16_t PROGMEM fn_actions[] = { +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { +}; diff --git a/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md new file mode 100644 index 0000000000..80475ab21e --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md @@ -0,0 +1,28 @@ +# Roman's Layout + +There is only one layer based on [Norman layout](https://normanlayout.info/). + +Looking for multiple-layer layouts? + +- [Symbols, arrows, plover, HJKL arrows](../romanzolotarev-norman-plover-osx-hjkl/) +- [Same with IJKL arrows](../romanzolotarev-norman-plover-osx/) + +[![keyboard-layout](romanzolotarev-norman-osx.png)](http://www.keyboard-layout-editor.com/#/gists/9e89d54f1ea6eeeb7dab1b2d19d28195) + +## Functional Keys + +- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/). +- Tap `F2` to copy screenshot to the clipboard. +- Hold `SHIFT` and tap `F2` to save screenshot as a file. +- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/). + +## CTRL/ESC + +CTRL and ESC are frequently used in Vim. + +- Tap `CTRL/ESC` to send `ESC`. +- Hold `CTRL/ESC` to use as `CTRL`. + +## Activate N-rollover + +- Hold left `SHIFT` and right `SHIRT` and then tap `N`. diff --git a/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.hex b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.hex new file mode 100644 index 0000000000..1be94c43d1 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.hex @@ -0,0 +1,1092 @@ +:100000000C94BB010C94FF010C94FF010C94FF01B4 +:100010000C94FF010C94FF010C94FF010C94FF0160 +:100020000C94FF010C94FF010C94E20A0C94B40BA5 +:100030000C94FF010C94FF010C94FF010C94FF0140 +:100040000C94FF010C9432200C94FF010C94FF01DE +:100050000C94FF010C94BD190C94FF010C94FF014A +:100060000C94FF010C94FF010C94FF010C94FF0110 +:100070000C94FF010C94FF010C94FF010C94FF0100 +:100080000C94FF010C94FF010C94FF010C94FF01F0 +:100090000C94FF010C94FF010C94FF010C94FF01E0 +:1000A0000C94FF010C94FF010C94FF01210C430CF4 +:1000B000310D430C310D880CAB0C310D000D130DBF +:1000C000FF0FFF0F3C103C107F10BD10D612D61250 +:1000D000D610D612D711D711AA12D612D612C11223 +:1000E00035002B002971E1003A0000001E001400C9 +:1000F00004001D003B00E2001F001A0016001B0058 +:100100003C00297120000700080006003D002A007D +:100110002100090017001900E300A90022000E00C9 +:100120000A0005000000AA003E00310000002F0078 +:100130000000A8003F000000000030000000AE00FA +:1001400023000D001C0013000000AB002400180069 +:1001500011001000E700AC00250015000C0036006F +:1001600050002C0026000F00120037005100340010 +:10017000270033000B0038005200E6002E002D004F +:100180002800E5004F0000001603450072006700DC +:100190006F0044006F007800200045005A00000006 +:1001A00016034500720067006F0044006F0078007E +:1001B000200045005A0000000403090409026D00F4 +:1001C000040100A0FA090400000103010100092153 +:1001D00011010001223F000705810308000A0904FC +:1001E00001000103010200092111010001224D005B +:1001F0000705820308000A09040200010300000049 +:100200000921110100012236000705830308000AB5 +:10021000090403000103000000092111010001226B +:1002200039000705840310000112011001000000CD +:1002300008EDFE071301000102000105010906A1F6 +:1002400001050719E029E7150025019508750181C9 +:100250000205081901290595057501910295017599 +:100260000391010507190029771500250195787577 +:10027000018102C005010980A10185021601002645 +:10028000B7001A01002AB700751095018100C0055A +:100290000C0901A1018503160100269C021A010028 +:1002A0002A9C02751095018100C005010902A10177 +:1002B0000901A10005091901290515002501950568 +:1002C000750181029501750381010501093009312C +:1002D0001581257F95027508810609381581257FCE +:1002E000950175088106050C0A38021581257F9550 +:1002F0000175088106C0C005010906A1010507199D +:10030000E029E71500250195087501810295017521 +:1003100008810105081901290595057501910295C6 +:1003200001750391010507190029FF150025FF95A7 +:100330000675088100C000000000000000000000F9 +:1003400000010204060A0F17202C3A4A5D71879DAE +:10035000B3C7DAE9F5FCFFFCF5E9DAC7B39D8771AD +:100360005D4A3A2C20170F0A060402010000000023 +:1003700000000000000011241FBECFEFDAE0DEBF56 +:10038000CDBF04B603FE24C08091EF019091F0012F +:10039000A091F101B091F2018730904BA740B04B92 +:1003A000B9F41092EF011092F0011092F101109245 +:1003B000F20114BE84B7877F84BF88E10FB6F8943A +:1003C00080936000109260000FBEE0E0FFE30995AB +:1003D00011E0A0E0B1E0E8EEF3E402C005900D9278 +:1003E000A433B107D9F711E0A4E3B1E001C01D9235 +:1003F000AF3EB107E1F70E9426080C94F2210C945D +:100400000000089556985E9825982D9826982E9865 +:1004100027982F98089508950C940B0256985E988B +:1004200025982D9826982E9827982F988FEF90E052 +:10043000909389008093880090938B0080938A002A +:1004400090938D0080938C00259A2D9A2FEF80E752 +:1004500092E0215080409040E1F700C00000269AD1 +:100460002E9A2FEF80E792E0215080409040E1F7F4 +:1004700000C00000279A2F9A2FEF80E792E02150CA +:1004800080409040E1F700C0000025982D982FEFA4 +:1004900080E792E0215080409040E1F700C00000EA +:1004A00026982E982FEF80E792E0215080409040D0 +:1004B000E1F700C0000027982F9856985E9825987D +:1004C0002D9826982E9827982F98089589EA80933A +:1004D000800089E08093810024982C983F988AB10D +:1004E0008F748AB96E98479A8BB1806B8BB9769A64 +:1004F0000E940E020C94020280E28093000180911F +:10050000340181110EC00E94CB0281E0809334013E +:100510002FEF83ED90E3215080409040E1F700C041 +:10052000000080E40E94D1028093000181112EC05E +:100530000E94FB0280930001811128C00E94FB02EF +:1005400080930001811122C08FE30E94FB028093FF +:10055000000181111BC00E94F30280E40E94D102BD +:1005600080930001811112C08CE00E94FB028093F5 +:10057000000181110BC00E94FB02809300018111D8 +:1005800005C08FE30E94FB02809300010E94F302EA +:100590008091000108951092B9008AE08093B8001C +:1005A000089594EA9093BC009091BC0097FFFCCF13 +:1005B0009091B900987F983021F0903111F081E04E +:1005C00008958093BB0084E88093BC008091BC00B8 +:1005D00087FFFCCF8091B900887F883111F080348B +:1005E00071F780E0089584E98093BC008091BC009D +:1005F00084FDFCCF08958093BB0084E88093BC0009 +:100600008091BC0087FFFCCF9091B900987F81E07A +:10061000983209F480E0089584E88093BC008091CA +:10062000BC0087FFFCCF8091BB0008958091000142 +:10063000811115C080E40E94D102809300018111D4 +:100640000CC082E10E94FB0280930001811105C071 +:100650008FEF0E94FB02809300010E94F30284B19D +:10066000807F84B985B1807F85B98AB1837F8AB95B +:100670008BB1837F8BB93E98469808950E947C0287 +:10068000809300010E94160380B38C7080BB81B3FD +:10069000836F81BBA6E3B1E0E4E4F1E08EE08E0F6E +:1006A00011921D928E13FCCF0C946602BF92CF92D2 +:1006B000DF92EF92FF920F931F93CF93DF9380917E +:1006C0000001882379F0809135018F5F8093350197 +:1006D000811108C00E947C0280930001811102C038 +:1006E0000E940E0206E311E0C0E0D0E0DD24D394C6 +:1006F00082E0C82EEE24E394F12CC730D10500F53A +:1007000080910001811164C080E40E94D102809335 +:100710000001811112C082E10E94FB02809300015E +:1007200081110BC0C7010C2E01C0880F0A94EAF793 +:1007300080950E94FB02809300010E94F30248C052 +:10074000CA30A1F028F4C83059F0C93061F005C0B2 +:10075000CC3089F070F0CD3089F0209A289810C004 +:10076000219A29980DC0229A2A980AC0239A2B9878 +:1007700007C0529A01C0539A5B9802C03E9A4698AD +:1007800090EA9A95F1F79FB1799902C082E001C091 +:1007900080E091709D25982B7C9902C084E001C077 +:1007A00080E0892B7D9902C038E001C030E0832BC6 +:1007B0007E9902C020E101C020E0822B9FB190957C +:1007C000991F9927991F9295990F907E892B0FC099 +:1007D00080910001811149C080E40E94D102809380 +:1007E0000001882379F1B12C0E94F3028B2DF801CE +:1007F0009081981719F08083C09201010E9416031E +:1008000021960F5F1F4FCE30D10509F076CF809132 +:100810000101882361F1815080930101882339F01F +:100820008FE99FE00197F1F700C0000020C0A4E429 +:10083000B1E0E6E3F1E0CF01825F91919D938E13E9 +:10084000FCCF15C083E10E94FB028093000181115F +:10085000CACF81E40E94D102809300018111C3CFED +:100860000E940C03B82EB094BFCF80E0C0CF0E948E +:100870000C0281E0DF91CF911F910F91FF90EF90DB +:10088000DF90CF90BF900895E82FF0E0EC5BFE4F33 +:100890008081089508958B3B910578F4883A9105FD +:1008A00040F5853A9105D0F48430910508F0B1C047 +:1008B0008130910509F4ADC06BC0803E910508F40C +:1008C00067C0883E910508F4A4C09C01205F3109EF +:1008D0002031310508F05CC090650895853A910596 +:1008E00009F459C0863A910509F058C082E890E4AD +:1008F0000895883A910509F454C0893A910509F49C +:1009000053C08A3A910509F452C08B3A910509F413 +:1009100051C08C3A910509F450C08D3A910509F403 +:100920004FC0803B910509F44EC08E3A910509F401 +:100930004DC08F3A910509F44CC0813B910509F4F3 +:100940004BC0823B910509F44AC0833B910509F4F1 +:1009500049C0843B910509F448C0853B910509F4E1 +:1009600047C0863B910509F446C0873B910509F4D1 +:1009700045C0883B910509F444C0893B910509F4C1 +:1009800043C08A3B910509F442C080E094E4089595 +:1009900080E090E0089581E890E4089583E890E491 +:1009A000089582EE94E4089589EE94E408958AEE21 +:1009B00094E4089585EB94E4089586EB94E4089517 +:1009C00087EB94E408958CEC94E408958DEC94E422 +:1009D000089583E895E408958AE895E4089582E906 +:1009E00095E4089584E995E4089581E296E40895F4 +:1009F00083E296E4089584E296E4089585E296E41D +:100A0000089586E296E4089587E296E408958AE2DE +:100A100096E40895089596E0799FF001112494E5F5 +:100A2000899FE00DF11D1124E60FF11DEE0FFF1F50 +:100A3000E052FF4F859194910895880F991FFC0112 +:100A4000E05AF040859194910895880F991FFC0118 +:100A5000E052FF4F85919491089526E0729FF00136 +:100A6000112444E5849FE00DF11D1124E60FF11DD2 +:100A7000EE0FFF1FE052FF4F859194919C013A9534 +:100A800021154FE1340708F41CC13F5121153041B5 +:100A900020F49F700E94250508959C013053211574 +:100AA000304118F49927906C0895811520E592073C +:100AB00071F40E94FA124FEF84E39CE041508040B1 +:100AC0009040E1F700C000000E94E219FAC08130B6 +:100AD00020E5920731F48091CD0181608093CD01B2 +:100AE000F0C09C0130552115304108F051C0292F2C +:100AF00033272F70332721303105D9F4AC014370EF +:100B0000552702C0220F331F4A95E2F73C68AC011B +:100B100064E0440F551F6A95E1F744275370242B76 +:100B2000352B73E0880F991F7A95E1F78076992726 +:100B30001DC02230310529F4982F8827816F906AD3 +:100B4000089523303105A9F4AC014370552721E005 +:100B500030E002C0220F331F4A95E2F73C6843E0C1 +:100B6000880F991F4A95E1F7807E9770822B932B0F +:100B7000089524303105E1F4AC014370552721E09C +:100B800030E002C0220F331F4A95E2F73A68E7CF00 +:100B90009C0130572115304118F49F7090620895E0 +:100BA0009C0130582115304118F49F70906A0895C7 +:100BB000803E9105E0F4803C910558F58133910524 +:100BC00009F46FC048F48932910509F463C08A3290 +:100BD000910509F46DC072C089339105E9F082383E +:100BE0009105D1F08533910509F44DC067C0833E6E +:100BF000910581F138F4803E9105B9F0823E91056E +:100C0000D9F05CC0863E910561F1873E9105A1F166 +:100C100055C00E941D0508952091E00120FD02C0ED +:100C200021FF4CC080EE90E049C08091E00180FF40 +:100C3000F9CF89E390E042C08091E00182FF0EC0CD +:100C40008091E00184FF03C080E090E037C083EE34 +:100C500090E034C08091E00182FFF2CF82EE90E01C +:100C60002DC08091E00183FF0BC08091E00184FDE5 +:100C7000EBCF87EE90E022C08091E00183FFF5CFBB +:100C800086EE90E01BC08091E00185FF07C089E2FD +:100C900090E014C08091E00185FFF9CF85E390E0FA +:100CA0000DC08091E00186FF07C08AE290E006C097 +:100CB0008091E00186FFF9CF81E390E00E944B0430 +:100CC0000895089508950C94620680916201089534 +:100CD000CF93DF9300D01F92CDB7DEB79C018091F8 +:100CE000E601843019F593E099833B832A8390933E +:100CF000E9008FEF9091E800815095FD06C095EDD9 +:100D00009A95F1F700008111F5CF8091E80085FFF9 +:100D10000DC040E050E063E070E0CE0101960E941B +:100D2000D2088091E8008E778093E8000F900F90B2 +:100D30000F90DF91CF910895CF93DF9300D01F9252 +:100D4000CDB7DEB72091E601243021F522E02983DA +:100D50009B838A8383E08093E9008FEF9091E80082 +:100D6000815095FD06C095ED9A95F1F7000081112F +:100D7000F5CF8091E80085FF0DC040E050E063E0D2 +:100D800070E0CE0101960E94D2088091E8008E7733 +:100D90008093E8000F900F900F90DF91CF9108950E +:100DA0002091E6012430F1F422E02093E9002FEFB6 +:100DB0003091E800215035FD06C035ED3A95F1F748 +:100DC00000002111F5CF2091E80025FF0BC040E085 +:100DD00050E065E070E00E94D2088091E8008E77D4 +:100DE0008093E8000895CF93DF93EC019091E601A2 +:100DF000943009F046C080910C018823D9F080918D +:100E00000D018823B9F09093E9008FEF9091E800ED +:100E1000815095FD06C095E19A95F1F7000081118A +:100E2000F5CF8091E80085FF2CC040E050E060E104 +:100E300070E017C081E08093E9008FEF9091E800A7 +:100E4000815095FD06C095ED9A95F1F7000081114E +:100E5000F5CF8091E80085FF14C040E050E068E0E5 +:100E600070E0CE010E94D2088091E8008E778093D6 +:100E7000E80080E1FE01A2E5B1E001900D928A95C3 +:100E8000E1F7DF91CF9108958091E501811109C0CB +:100E90000E94670A0E94C40A8091E20084608093E5 +:100EA000E20008951092E501089508950C941F2022 +:100EB0000E9478190E9425200E946A0D0C946306F6 +:100EC00042E061EC81E00E94E10942E061EC82E0F5 +:100ED0000E94E10942E061EC83E00E94E10942E105 +:100EE00061EC84E00C94E1098091E801833009F41D +:100EF00055C030F4813071F0823009F48EC008950D +:100F00008A3009F47AC08B3009F460C0893009F066 +:100F10009CC020C08091E701813A09F096C0809181 +:100F2000E800877F8093E8008091EB019091EC01CD +:100F3000892B21F460E182E591E003C060E080E06C +:100F400090E070E00E941D098091E8008B7780930B +:100F5000E80008958091E701813209F076C0809120 +:100F6000EB019091EC01009719F0039709F06DC027 +:100F70008091E800877F8093E8008091E80082FDFF +:100F800005C08091E6018111F8CF5FC08091F1002A +:100F9000809362018091E8008B7753C08091E701D4 +:100FA000813A09F052C08091EB019091EC01892BBC +:100FB00009F04BC08091E800877F8093E800809122 +:100FC000E80080FFFCCF80910C0136C08091E701E2 +:100FD0008132D9F58091EB019091EC01892BA9F533 +:100FE0008091E800877F8093E8000E94160A809134 +:100FF000E90180930C010C94FA128091E70181328F +:1010000021F58091E800877F8093E8000E94160A0E +:101010008091EA018093630108958091E701813A0C +:10102000A1F48091E800877F8093E8008091E80038 +:1010300080FFFCCF809163018093F1008091E800F4 +:101040008E778093E8000C94160A089584B7877F02 +:1010500084BF88E10FB6F89480936000109260001E +:101060000FBE90E080E80FB6F894809361009093F3 +:1010700061000FBE0E94B90D0E94670A0E94C40A57 +:101080008091E20084608093E20078940E944A0D8F +:101090000E94BB0D82E091E00E94650D0E940D2030 +:1010A0008091E601853069F40E9439198091E4014C +:1010B0008823B1F30E946419882391F30E94BC082D +:1010C000EFCF0E94C10DECCF292F332723303105FC +:1010D000C9F064F42130310581F02230310509F086 +:1010E00043C08DE690E02CEB31E042C02132310567 +:1010F000F1F02232310541F137C082E190E029E27E +:1011000032E036C099278130910541F08230910557 +:1011100041F0892B49F5E8EBF1E005C0E0EAF1E0A8 +:1011200002C0E8E8F1E0849190E09F0121C06430C2 +:10113000D8F4E62FF0E0EE0FFF1FEE5DFE4F2081AA +:10114000318189E090E014C0643070F470E0FB01FC +:10115000EE0FFF1FE65EFE4F20813181FB01EA5E4C +:10116000FE4F808190E004C080E090E020E030E01D +:10117000FA0131832083089580E189BD82E189BD30 +:1011800009B400FEFDCF8091D8008F7D8093D800F8 +:101190008091E00082608093E0008091E00081FD1A +:1011A000FCCF0895CF92DF92EF92FF920F931F939F +:1011B000CF93DF93EC018B016A010E94350A811104 +:1011C00033C0C114D10439F0F60180819181081B2C +:1011D000190BC80FD91FE12CF12C0115110519F1BC +:1011E0008091E80085FD16C08091E8008E7780939D +:1011F000E800C114D10449F0F60180819181E80E24 +:10120000F91EF182E08285E00FC00E94350A882332 +:1012100021F30AC089918093F10001501109FFEF79 +:10122000EF1AFF0ADACF80E0DF91CF911F910F9183 +:10123000FF90EF90DF90CF9008952091ED013091D5 +:10124000EE012617370748F06115710539F4209132 +:10125000E8002E772093E80001C0B90140E0611555 +:101260007105A9F12091E601222309F443C025303C +:1012700009F442C02091E80023FD40C02091E8001D +:1012800022FD32C02091E80020FFE9CF4091F30019 +:101290002091F20030E0342BFC01CF016115710583 +:1012A00059F02830310540F481918093F10061506C +:1012B00071092F5F3F4FF1CF41E02830310509F030 +:1012C00040E02091E8002E772093E800C8CF41113C +:1012D000C9CF0AC08091E601882361F0853061F0B2 +:1012E0008091E80083FD0AC08091E80082FFF2CF80 +:1012F00080E0089582E0089583E0089581E00895F4 +:101300002091ED013091EE012617370748F0611565 +:10131000710539F42091E8002E772093E80001C090 +:10132000B901FC0120E06115710591F18091E601A0 +:10133000882309F440C0853009F43FC08091E8005B +:1013400083FD3DC08091E80082FD2FC08091E800C0 +:1013500080FFE9CF2091F3008091F20090E0922B82 +:101360006115710559F08830910540F4249120935E +:10137000F1003196615071090196F2CF21E0089792 +:1013800009F020E08091E8008E778093E800CBCFD1 +:101390002111CCCF0AC08091E601882361F085300D +:1013A00061F08091E80083FD0AC08091E80082FF2F +:1013B000F2CF80E0089582E0089583E0089581E00F +:1013C0000895982F973058F59093E900981739F0C1 +:1013D0007091EC002091ED005091F00003C0242F9B +:1013E000762F50E021FF19C03091EB003E7F309303 +:1013F000EB003091ED003D7F3093ED003091EB003C +:1014000031603093EB007093EC002093ED0050932B +:10141000F0002091EE0027FF07C09F5FD3CF8F70B1 +:101420008093E90081E0089580E008958091E701CC +:1014300087FF11C08091E80082FD05C08091E60120 +:101440008111F8CF11C08091E8008B770BC080919B +:10145000E601882349F08091E80080FFF8CF809171 +:10146000E8008E778093E80008952091E4003091A1 +:10147000E50095E64091EC00842F817040FF22C08A +:101480008091E80080FD1CC08091E601882391F0E6 +:10149000853091F08091EB0085FD10C04091E40013 +:1014A0005091E5004217530729F39A01915011F723 +:1014B00084E0089582E0089583E0089581E008952E +:1014C00080E008954091E80042FFDECF08950E9439 +:1014D000D50A0E94DD0AE0EEF0E080818160808321 +:1014E000E8EDF0E080818F77808319BCA7EDB0E054 +:1014F0008C918E7F8C9380818F7E80831092E5010A +:1015000008950F931F93CF93DF930E94D50A0E94F3 +:10151000DD0AC8EDD0E088818F7788838881806874 +:10152000888388818F7D888319BC1092E601109290 +:10153000E2011092E4011092E30100EE10E0F801E4 +:1015400080818B7F808388818160888342E060E036 +:1015500080E00E94E109E1EEF0E080818E7F8083EF +:10156000E2EEF0E08081816080838081886080830A +:10157000F80180818E7F8083888180618883DF91FC +:10158000CF911F910F910895E8EDF0E080818F7E5B +:101590008083E7EDF0E080818160808384E082BF1A +:1015A00081E08093E5010C94810AE8EDF0E0808110 +:1015B0008E7F80831092E20008951092DA001092DC +:1015C000E10008951F920F920FB60F9211242F93EE +:1015D0003F934F935F936F937F938F939F93AF93BB +:1015E000BF93EF93FF938091E10082FF0BC0809146 +:1015F000E20082FF07C08091E1008B7F8093E100D1 +:101600000E94490D8091DA0080FF1FC08091D800B0 +:1016100080FF1BC08091DA008E7F8093DA0080917A +:10162000D90080FF0DC080E189BD82E189BD09B488 +:1016300000FEFDCF81E08093E6010E94440705C0D3 +:1016400019BC1092E6010E9452078091E10080FFD0 +:1016500019C08091E20080FF15C08091E2008E7F6A +:101660008093E2008091E20080618093E2008091AB +:10167000D80080628093D80019BC85E08093E60191 +:101680000E9456078091E10084FF30C08091E20003 +:1016900084FF2CC080E189BD82E189BD09B400FED0 +:1016A000FDCF8091D8008F7D8093D8008091E1009C +:1016B0008F7E8093E1008091E2008F7E8093E20034 +:1016C0008091E20081608093E2008091E2018823B2 +:1016D00011F084E007C08091E30087FD02C081E043 +:1016E00001C083E08093E6010E9458078091E100E9 +:1016F00083FF29C08091E20083FF25C08091E10033 +:10170000877F8093E10082E08093E6011092E201FE +:101710008091E1008E7F8093E1008091E2008E7FD6 +:101720008093E2008091E20080618093E20042E0D9 +:1017300060E080E00E94E1098091F0008860809381 +:10174000F0000E945507FF91EF91BF91AF919F91DB +:101750008F917F916F915F914F913F912F910F905A +:101760000FBE0F901F9018951F920F920FB60F92F9 +:1017700011242F933F934F935F936F937F938F9396 +:101780009F93AF93BF93CF93DF93EF93FF93C0915A +:10179000E900CF708091EC00D82FD17080FDD0E8A7 +:1017A0001092E9008091F000877F8093F000789498 +:1017B0000E94F80B1092E9008091F00088608093FD +:1017C000F000CD2BCF70C093E900FF91EF91DF9136 +:1017D000CF91BF91AF919F918F917F916F915F91C9 +:1017E0004F913F912F910F900FBE0F901F90189522 +:1017F0001F93CF93DF93CDB7DEB7AA970FB6F894B8 +:10180000DEBF0FBECDBFE7EEF1E088E08E0F909116 +:10181000F10091938E13FBCF0E9474078091E80032 +:1018200083FF1FC18091E7019091E801492F50E0AB +:101830004A30510508F015C1FA01EA5AFF4F0C94DD +:10184000A721803881F0823809F00BC18091EB012B +:101850008F708093E9008091EB0085FB882780F9E9 +:101860001092E90006C08091E3019091E40191118A +:1018700082609091E800977F9093E8008093F10058 +:101880001092F100C8C0282F2D7F09F0EAC08823EC +:1018900019F0823061F0E5C08091E901813009F0F2 +:1018A000E0C0933009F080E08093E4012BC0809188 +:1018B000E901811127C08091EB018F7009F4D1C03B +:1018C0008093E9002091EB0020FF1CC0933021F4AD +:1018D0008091EB00806214C09091EB009061909336 +:1018E000EB0021E030E0A90102C0440F551F8A95AA +:1018F000E2F74093EA001092EA008091EB008860E2 +:101900008093EB001092E9008091E800877F86C009 +:101910008111A7C01091E9011F778091E3008078C1 +:10192000812B8093E3008091E800877F8093E8001B +:101930000E94160A8091E80080FFFCCF8091E300AE +:1019400080688093E300111102C082E001C083E04F +:101950008093E60186C08058823008F082C0809172 +:10196000E9019091EA018C3D53E0950779F583E018 +:101970008A838AE289834FB7F894DE01139620E0C8 +:101980003EE051E2E32FF0E050935700E49120FF56 +:1019900003C0E295EF703F5FEF708E2F90E0EA306A +:1019A00010F0C79601C0C0968D939D932F5F243190 +:1019B00049F74FBF8091E800877F8093E8006AE293 +:1019C00070E0CE0101960E941D0914C0AE014F5F68 +:1019D0005F4F6091EB010E946408BC01892B09F400 +:1019E00040C09091E800977F9093E80089819A81A8 +:1019F0000E9480098091E8008B778093E80031C0D5 +:101A0000803879F58091E800877F8093E8008091A5 +:101A1000E2018093F1008091E8008E778093E800E6 +:101A20000E94160A1EC081111CC09091E9019230DB +:101A3000C0F48091E800877F8093E8009093E201F2 +:101A40000E94160A8091E201811106C08091E30094 +:101A500087FD02C081E001C084E08093E6010E941E +:101A600060078091E80083FF0AC08091E800877FCB +:101A70008093E8008091EB0080628093EB00AA964F +:101A80000FB6F894DEBF0FBECDBFDF91CF911F918F +:101A900008950895CF938091E6018823A1F0C09125 +:101AA000E900CF709091EC00892F817090FD80E863 +:101AB000C82B1092E9008091E80083FD0E94F80B8A +:101AC000CF70C093E900CF910895909369018093FE +:101AD00068010895E0916801F0916901309721F063 +:101AE0000190F081E02D099480E00895E091680173 +:101AF000F0916901309721F00280F381E02D099483 +:101B00000895E0916801F0916901309721F0048017 +:101B1000F581E02D099408952091660130916701C7 +:101B20008217930771F09093670180936601E091AB +:101B30006801F0916901309721F00680F781E02D6E +:101B400009940895209164013091650182179307EB +:101B500071F09093650180936401E0916801F091C8 +:101B60006901309721F00084F185E02D09940895F2 +:101B700008950C94B80D0E947E190E943E030C94A7 +:101B8000441ACF92DF92EF92FF920F931F93CF935D +:101B9000DF93CDB7DEB72B970FB6F894DEBF0FBE3D +:101BA000CDBF0E9456038BE6C82E81E0D82E00E000 +:101BB00010E0E02E802F0E944404F60141916F0155 +:101BC000F42EF826B1F40F5F1F4F0E30110589F780 +:101BD0008FEF89838A831B820E9487198160782F07 +:101BE0009D838C8349815A816B818D810E94640E13 +:101BF00040C09091CD0191FF04C08B870E944A04A0 +:101C00008B8520E030E04F2D50E0922FBA01022E5C +:101C100002C0759567950A94E2F760FF24C02E8391 +:101C2000EF8221E030E0690102C0CC0CDD1C9A9506 +:101C3000E2F790E08C219D21892B09F420E0288790 +:101C40000E9487198160782F9A8789874E815F81EA +:101C500068858A850E94640EF801E559FE4F8081EF +:101C6000C826C08206C02F5F3F4F2630310569F677 +:101C7000AACF0E942B1D10916A010E946A0D1817AD +:101C8000A1F00E946A0D80936A012B960FB6F8941A +:101C9000DEBF0FBECDBFDF91CF911F910F91FF909F +:101CA000EF90DF90CF900C9463062B960FB6F894CC +:101CB000DEBF0FBECDBFDF91CF911F910F91FF907F +:101CC000EF90DF90CF900895CF93DF93CDB7DEB73D +:101CD0002B970FB6F894DEBF0FBECDBF4F8358874A +:101CE00069877A878B87DE01119686E0FD01119264 +:101CF0008A95E9F785E0FE01379601900D928A9565 +:101D0000E1F749815A816B817C818D819E810E949E +:101D100094152B960FB6F894DEBF0FBECDBFDF91A2 +:101D2000CF9108950895CF93882309F4C2C0C82F96 +:101D3000823859F40E946A0D81FDBBC089E30E947C +:101D40003D180E940A1989E30CC0833879F40E9477 +:101D50006A0D80FDAEC083E50E943D180E940A19FD +:101D600083E50E947F18CF910C940A19843859F4A6 +:101D70000E946A0D82FD9DC087E40E943D180E946A +:101D80000A1987E4EECF8CEF8C0F813A48F48C2F40 +:101D90000E94721F81118DC08C2F0E943D18E3CFCD +:101DA00080E28C0F883048F4C77081E001C0880F52 +:101DB000CA95EAF70E94C318D6CF8BE58C0F833003 +:101DC00078F4C53A29F0C63A31F083E890E005C0CE +:101DD00081E890E002C082E890E0CF910C948C0DF5 +:101DE00088E58C0F833108F064C0C83A39F1C93AEC +:101DF00041F1CA3A49F1CB3A51F1CC3A59F1CD3AD5 +:101E000061F1C03B69F1CE3A71F1CF3A79F1C13B52 +:101E100081F1C23B89F1C33B91F1C43B99F1C53BD0 +:101E2000A1F1C63BA9F1C73BB1F1C83BB9F1C93B30 +:101E3000C1F1CA3BC9F180E090E038C082EE90E089 +:101E400035C089EE90E032C08AEE90E02FC085EB7D +:101E500090E02CC086EB90E029C087EB90E026C094 +:101E60008CEC90E023C08DEC90E020C083E891E002 +:101E70001DC08AE891E01AC082E991E017C084E9A8 +:101E800091E014C081E292E011C083E292E00EC0C2 +:101E900084E292E00BC085E292E008C086E292E024 +:101EA00005C087E292E002C08AE292E0CF910C94F2 +:101EB000A20DCF910895882309F44BC0823859F4BC +:101EC0000E946A0D81FF45C089E30E943D180E946F +:101ED0000A1989E30CC0833871F40E946A0D80FFEF +:101EE00038C083E50E943D180E940A1983E50E94CC +:101EF0007F180C940A19843859F40E946A0D82FFE5 +:101F000028C087E40E943D180E940A1987E4EFCF99 +:101F10009CEF980F913A58F390E2980F983050F454 +:101F2000877091E001C0990F8A95EAF7892F0E9486 +:101F3000C918DFCF9BE5980F933020F480E090E044 +:101F40000C948C0D885A833120F480E090E00C943E +:101F5000A20D0895882321F00E94C3180C940A1939 +:101F60000895882321F00E94C9180C940A19089535 +:101F7000BF92CF92DF92EF92FF920F931F93CF9376 +:101F8000DF9300D000D000D0CDB7DEB725E0FC0154 +:101F9000DE01119601900D922A95E1F7FC01D080A7 +:101FA00011810281258122952F7043815481452B17 +:101FB00009F4FCC21F3F21F4FFEFDF1609F4F6C25B +:101FC0007C012E830E94920ED9821A8369817A81C4 +:101FD000802F0E943918182FB92E0E94EE170E94E8 +:101FE000B5162E81002319F00E94E0182E81EB2DEA +:101FF000E295EF70F0E0E05AFF4F0C94A7218B2D93 +:10200000807F9B2D9F70F92E882319F0F29480EF2A +:10201000F822002389F0FF2009F475C280E2810FC5 +:10202000883020F48F2D0E94C31803C08F2D0E948A +:10203000D3180E940A1967C2812F0E945B0FFF20EC +:1020400009F4B4C2105E8F2D183018F40E94C9181C +:1020500002C00E94D91826960FB6F894DEBF0FBEB4 +:10206000CDBFDF91CF911F910F91FF90EF90DF9047 +:10207000CF90BF900C940A193B2D307F8B2D8F7021 +:10208000303211F08295807F112319F0113021F147 +:102090002CC00023B9F0222309F4A0C1213009F09B +:1020A0009DC126960FB6F894DEBF0FBECDBFDF915F +:1020B000CF911F910F91FF90EF90DF90CF90BF9045 +:1020C0000C94F318222319F0213009F46FC28E8387 +:1020D0000E94F6188E8196C1002321F0223008F06C +:1020E00065C27CC1211162C28DC1002321F022236F +:1020F00009F474C108C2222309F484C119C22B2D2A +:1021000026952695237030E02115310521F02130E8 +:102110003105D1F04BC2002321F0812F9B2D93700C +:1021200002C080E090E026960FB6F894DEBF0FBEA6 +:10213000CDBFDF91CF911F910F91FF90EF90DF9076 +:10214000CF90BF900C948C0D002321F0812F9B2DFC +:10215000937002C080E090E026960FB6F894DEBF40 +:102160000FBECDBFDF91CF911F910F91FF90EF90E8 +:10217000DF90CF90BF900C94A20D812F002319F017 +:102180000E94331C02C00E949B1C26960FB6F89436 +:10219000DEBF0FBECDBFDF91CF911F910F91FF909A +:1021A000EF90DF90CF90BF900C94201D8B2D83700B +:1021B00009F07BC00111FAC1812F82958695877045 +:1021C000880F880F912F9F70C92ED12CE12CF12CF4 +:1021D000082E04C0CC0CDD1CEE1CFF1C0A94D2F7A8 +:1021E00014FF12C04FE050E060E070E004C0440F04 +:1021F000551F661F771F8A95D2F7CB01BA016095EC +:1022000070958095909503C060E070E0CB012B2D18 +:10221000269526952370422F50E042305105D9F083 +:102220004330510569F16C297D298E299F29413060 +:10223000510551F126960FB6F894DEBF0FBECDBF03 +:10224000DF91CF911F910F91FF90EF90DF90CF9092 +:10225000BF900C94DC166C297D298E299F29269627 +:102260000FB6F894DEBF0FBECDBFDF91CF911F91A7 +:102270000F91FF90EF90DF90CF90BF900C94F816E5 +:102280000E94DC16C701B60126960FB6F894DEBF91 +:102290000FBECDBFDF91CF911F910F91FF90EF90B7 +:1022A000DF90CF90BF900C94C016002319F08B2DB7 +:1022B000817001C08695882309F478C1812F8295A9 +:1022C00086958770880F880F912F9F70C92ED12C0B +:1022D000E12CF12C082E04C0CC0CDD1CEE1CFF1CE4 +:1022E0000A94D2F714FF12C04FE050E060E070E0B3 +:1022F00004C0440F551F661F771F8A95D2F7CB0184 +:10230000BA01609570958095909503C060E070E08B +:10231000CB012B2D269526952370422F50E042307D +:102320005105D9F04330510569F16C297D298E2979 +:102330009F294130510551F126960FB6F894DEBF22 +:102340000FBECDBFDF91CF911F910F91FF90EF9006 +:10235000DF90CF90BF900C94B6176C297D298E2901 +:102360009F2926960FB6F894DEBF0FBECDBFDF9132 +:10237000CF911F910F91FF90EF90DF90CF90BF9082 +:102380000C94D2170E94B617C701B60126960FB655 +:10239000F894DEBF0FBECDBFDF91CF911F910F919B +:1023A000FF90EF90DF90CF90BF900C949A17103F62 +:1023B000D1F118F4103E50F4A1C0123F09F463C0EB +:1023C00008F44CC0133F09F473C098C01F708B2DE4 +:1023D0008F710023A1F00E943317812F26960FB62C +:1023E000F894DEBF0FBECDBFDF91CF911F910F914B +:1023F000FF90EF90DF90CF90BF900C94AA0F0E94B7 +:102400005417812F26960FB6F894DEBF0FBECDBFAE +:10241000DF91CF911F910F91FF90EF90DF90CF90C0 +:10242000BF900C94B10F0023A9F02111BFC08B2DD8 +:102430008F7126960FB6F894DEBF0FBECDBFDF9129 +:10244000CF911F910F91FF90EF90DF90CF90BF90B1 +:102450000C947917223008F0A9C0E9CF0023A9F025 +:102460008B2D8F7126960FB6F894DEBF0FBECDBFB1 +:10247000DF91CF911F910F91FF90EF90DF90CF9060 +:10248000BF900C943317002359F38B2D8F71269630 +:102490000FB6F894DEBF0FBECDBFDF91CF911F9175 +:1024A0000F91FF90EF90DF90CF90BF900C94541756 +:1024B000002399F08B2D8F7126960FB6F894DEBF0E +:1024C0000FBECDBFDF91CF911F910F91FF90EF9085 +:1024D000DF90CF90BF900C941E1726960FB6F894FD +:1024E000DEBF0FBECDBFDF91CF911F910F91FF9047 +:1024F000EF90DF90CF90BF900C9414170023A9F0B9 +:10250000222309F4ADCF812F26960FB6F894DEBFB3 +:102510000FBECDBFDF91CF911F910F91FF90EF9034 +:10252000DF90CF90BF900C94930E222309F4ADCF8F +:10253000812F26960FB6F894DEBF0FBECDBFDF9178 +:10254000CF911F910F91FF90EF90DF90CF90BF90B0 +:102550000C945B0F4B2D4F70612FC7010E9401023D +:1025600026960FB6F894DEBF0FBECDBFDF91CF9198 +:102570001F910F91FF90EF90DF90CF90BF900C9440 +:1025800038164B2D4F70612FC70126960FB6F89461 +:10259000DEBF0FBECDBFDF91CF911F910F91FF9096 +:1025A000EF90DF90CF90BF900C940A0526960FB65F +:1025B000F894DEBF0FBECDBFDF91CF911F910F9179 +:1025C000FF90EF90DF90CF90BF9008950E94E018A9 +:1025D0000E94F0180E94B5180E940A190E94D11D8D +:1025E0000E94201D80E090E00E948C0D80E090E031 +:1025F0000C94A20D0E94D0180C94E6120E942E1882 +:10260000292F22952F7030E02C3031054CF42A30E0 +:1026100031056CF4225031092230310588F407C0AD +:102620002C30310549F02F30310531F009C0803EA2 +:1026300048F0803F29F406C093FB882780F908956D +:1026400080E0089581E00895CF93DF9300D000D01B +:102650001F92CDB7DEB70F900F900F900F900F9095 +:10266000DF91CF910895CF93DF9300D000D000D0B9 +:10267000CDB7DEB726960FB6F894DEBF0FBECDBF3E +:10268000DF91CF9108951F93CF93DF93C09179018C +:1026900016E080917A01C81799F0D0E01C9FF001F4 +:1026A0001D9FF00D1124E558FE4F4081518162813C +:1026B0007381848195810E9433132196C770E9CF7D +:1026C000DF91CF911F9108954091AB015091AC01E2 +:1026D0006091AD017091AE018091AF019091B00118 +:1026E0000C9433138091B00182958F7009F054C01F +:1026F0008091AD01882309F44FC080917901A091A8 +:102700007A016091AB017091AC014091AE015091A2 +:10271000AF01B6E08A1709F43FC090E041155105BA +:10272000C1F17F3F11F46F3FA1F1B89FF001B99F54 +:10273000F00D1124E558FE4F218172132AC020812B +:10274000621327C02281211124C0238134812417E0 +:10275000350710F421503109241B350B283C310575 +:10276000C0F42091B0012F7020612093B00126E0C9 +:10277000289FF001299FF00D1124E058FE4F808121 +:102780008F70806180838BEA91E00E94B80F0C9477 +:10279000431301968770BECF0895CF92DF92EF92D8 +:1027A000FF920F931F93CF93DF93CDB7DEB762975E +:1027B0000FB6F894DEBF0FBECDBF8C0185E0F801E7 +:1027C000DE011D9601900D928A95E1F7D8014C919A +:1027D00011965C91119712966C9112971396CD9069 +:1027E000DC9014973091AB017091AC018091AE01F7 +:1027F0009091AF01009709F46BC17F3F19F43F3FFF +:1028000009F466C1E090AD01EE2009F4C0C020914A +:10281000B001C816D90628F0F601E81BF90BCF0164 +:1028200004C0809590958C0D9D1DFF24F394883CE9 +:10283000910578F0F12C207F09F0C6C07C2DD98A53 +:10284000C88A89890E9424138BEA91E00E94B80FFC +:10285000B1C0822F807F09F046C0751314C03413B5 +:1028600012C0611110C02F7020612093B0010E942E +:1028700064138BEA91E00E94B80F8091B001D801F7 +:1028800015968C932EC0CD2819F15F3F11F44F3F60 +:10289000F9F0F62E61111CC08091790120917A0126 +:1028A00036E0821709F45AC090E0389FF001399F52 +:1028B000F00D1124E558FE4F7181571306C0708149 +:1028C000471303C07281711103C001968770E9CF6D +:1028D000F62E662309F418C18091B00181608093BF +:1028E000B001F12C11C1751308C0341306C0611179 +:1028F00004C08091B001D801C3C04D875E878D852B +:102900009E856A8B0E94FE126A898823E1F1662304 +:10291000D1F12091B001822F82958F7090E00297C3 +:1029200074F08091AB019091AC0198878F831986E8 +:10293000DB86CA862C87CE0107960E94B80F86E0F8 +:10294000F801ABEAB1E001900D928A95E1F70E949F +:1029500072130E946413FF24F394D6C04D875E87E0 +:102960008D859E850E942E18292F22952F7030E08C +:10297000223031050CF0BCC09F7009F0B6C0805EFB +:10298000883008F4C1C0C8010E94B80FE4CFC8164F +:10299000D90608F453C0F601E81BF90BCF01883CB7 +:1029A000910508F450C0F12C7C2DD98AC88A8989F8 +:1029B0000E942413EBEAF1E086E0DF011D928A9584 +:1029C000E9F70E946413A0C0751314C0341312C039 +:1029D000611110C08091B001F8018583C8010E9487 +:1029E000B80F86E0EBEAF1E0DF011D928A95E9F786 +:1029F000FE2C8AC04D875E878D859E856A8B0E94DE +:102A0000FE126A89882309F4BECF662309F4BBCF7E +:102A10002091B001822F82958F7090E002970CF484 +:102A20008ECF8091AB019091AC019A8389831B82F8 +:102A3000DD82CC822E83CE0101967FCF809590954A +:102A40008C0D9D1DACCFF62E662309F49CCF75131B +:102A50002EC034132CC02091B00120FD1FC0822F46 +:102A600082958F70D9F0D80115962C9315978F30D9 +:102A700049F08F5F982F9295907F822F8F70892BCE +:102A800015968C93C8010E94B80F86E0F801ABEA56 +:102A9000B1E001900D928A95E1F793CF86E0F801BD +:102AA000ABEAB1E001900D928A95E1F72DC04D8718 +:102AB0005E878D859E850E94FE12811140CF809198 +:102AC000B00181608093B001C8010E94B80F1CC0A2 +:102AD000662309F458CF4D875E878D859E850E94B9 +:102AE000FE12882309F44FCF2ACF811148CF0CC0A2 +:102AF000243031050CF047CF9F7009F440CFF80126 +:102B00009581907F09F03BCF8F2D62960FB6F89498 +:102B1000DEBF0FBECDBFDF91CF911F910F91FF9010 +:102B2000EF90DF90CF9008951F93CF93DF93CDB7B1 +:102B3000DEB72C970FB6F894DEBF0FBECDBF4F8324 +:102B4000588769877A878B879C87CE0107960E9472 +:102B5000CD13882369F08F8198852A853B85232BA7 +:102B6000F1F19F3F09F063C08F3F09F060C037C0AB +:102B700086E0FE013796DE01119601900D928A954E +:102B8000E1F76F817885EA85FB85309741F17F3FDA +:102B900011F46F3F21F120917A0130E0C9010196D3 +:102BA000877099274091790150E08417950709F4BF +:102BB00047C069837A83FD83EC8396E0929FD001BE +:102BC000939FB00D1124A558BE4FFE013196019080 +:102BD0000D929A95E1F780937A010E94431316E0D3 +:102BE0008091790190917A018917C1F1189FC001F4 +:102BF000112485589E4F0E94CD13882379F1E091CE +:102C000079011E9FF0011124E558FE4F408151814A +:102C100062817381848195810E943313809179014F +:102C200090E001968770992780937901D9CF4F81E1 +:102C3000588569857A858B859C850E943313CFCF13 +:102C40000E94FA1210927A0110927901EBEAF1E0F7 +:102C500086E0DF011D928A95E9F7C1CF2C960FB669 +:102C6000F894DEBF0FBECDBFDF91CF911F910895C5 +:102C7000EF92FF920F931F93CF93DF938C01892BD9 +:102C800009F46CC0F12CEE24E394E8012196F801DC +:102C90008491843740F4843008F051C0813081F051 +:102CA000823019F15BC0853709F444C0A8F19CE774 +:102CB000980F903708F052C08F770E945B0F41C089 +:102CC0000E5F1F4FFE01C49180E28C0F883048F4E4 +:102CD000C7708E2D01C0880FCA95EAF70E94E318CD +:102CE00014C08C2F0E94930E2DC00E5F1F4FFE014B +:102CF000C49180E28C0F883058F4C7708E2D01C0CB +:102D0000880FCA95EAF70E94E9180E940A191AC0AA +:102D10008C2F0E945B0F16C00E5F1F4FFE01C491E7 +:102D2000CC2381F08FE99FE00197F1F700C000000C +:102D3000C150F6CF0E5F1F4FFE01F49003C00E94FA +:102D4000930E8E018F2D882309F49FCFEFE9FFE0CA +:102D50003197F1F700C000008150F5CFDF91CF919E +:102D60001F910F91FF90EF90089508956093B50122 +:102D70007093B6018093B7019093B8010C94E6125A +:102D80000F931F930091B5011091B6012091B701E7 +:102D90003091B801DC01CB01802B912BA22BB32BFE +:102DA0008093B5019093B601A093B701B093B80199 +:102DB0001F910F910C94E6120F931F930091B50190 +:102DC0001091B6012091B7013091B801DC01CB011F +:102DD00080239123A223B3238093B5019093B6015E +:102DE000A093B701B093B8011F910F910C94E61214 +:102DF0000F931F930091B5011091B6012091B70177 +:102E00003091B801DC01CB0180279127A227B3279D +:102E10008093B5019093B601A093B701B093B80128 +:102E20001F910F910C94E6121092B1011092B20111 +:102E30001092B3011092B4010C94E61241E050E0FC +:102E400060E070E004C0440F551F661F771F8A952D +:102E5000D2F74093B1015093B2016093B3017093E4 +:102E6000B4010C94E61241E050E060E070E004C070 +:102E7000440F551F661F771F8A95D2F78091B101C5 +:102E80009091B201A091B301B091B401482B592B9C +:102E90006A2B7B2B4093B1015093B2016093B30135 +:102EA0007093B4010C94E61241E050E060E070E0F1 +:102EB00004C0440F551F661F771F8A95D2F74095AF +:102EC0005095609570958091B1019091B201A0915B +:102ED000B301B091B401482359236A237B23409363 +:102EE000B1015093B2016093B3017093B4010C949B +:102EF000E61241E050E060E070E004C0440F551F6E +:102F0000661F771F8A95D2F78091B1019091B20127 +:102F1000A091B301B091B401482759276A277B27B4 +:102F20004093B1015093B2016093B3017093B40127 +:102F30000C94E6120F931F930091B1011091B2010E +:102F40002091B3013091B401DC01CB01802B912B96 +:102F5000A22BB32B8093B1019093B201A093B30144 +:102F6000B093B4011F910F910C94E6120F931F932D +:102F70000091B1011091B2012091B3013091B401DF +:102F8000DC01CB0180239123A223B3238093B101E1 +:102F90009093B201A093B301B093B4011F910F912C +:102FA0000C94E6120F931F930091B1011091B2019E +:102FB0002091B3013091B401DC01CB01802791272E +:102FC000A227B3278093B1019093B201A093B301DC +:102FD000B093B4011F910F910C94E6120895CF9213 +:102FE000DF92EF92FF920F931F93CF93DF938C01A9 +:102FF000C090B501D090B601E090B701F090B80153 +:103000008091B1019091B201A091B301B091B4014E +:10301000C82AD92AEA2AFB2ACFE1D0E0D701C60183 +:103020000C2E04C0B695A795979587950A94D2F76C +:1030300080FF06C0B8018C2F0E942D05019721F456 +:10304000219760F780E001C08C2FDF91CF911F9115 +:103050000F91FF90EF90DF90CF900895CF93DF9383 +:10306000EC010E94EF17BE010E942D05DF91CF9168 +:103070000895CB010E942E18089590910C01992378 +:1030800021F090910D01911109C020910E01309114 +:103090000F01F90132969FEF40E01FC0982F9695DF +:1030A000969596959F3050F5E0910E01F0910F01A5 +:1030B000E90FF11D877021E030E0A90102C0440F43 +:1030C000551F8A95E2F7CA019181892B8183089562 +:1030D0009F3F39F04F5F4E3041F051915813F8CF78 +:1030E0000DC05111F7CF942FF5CF9F3F39F0F90163 +:1030F000E90FF11D97FDFA95828308950895909147 +:103100000C01992321F090910D01911109C020919A +:103110000E0130910F01F9013296205F3F4F1FC021 +:10312000982F9695969596959F30F0F4E0910E0124 +:10313000F0910F01E90FF11D877021E030E0A90146 +:1031400002C0440F551F8A95E2F7CA01809591810C +:103150008923818308953196E217F30729F090813E +:103160009813F9CF1082F7CF089581E090E0E091B5 +:103170000E01F0910F01E80FF91F108201968031C6 +:103180009105A9F708959091CC01892B8093CC01EA +:10319000089580959091CC0189238093CC01089566 +:1031A0001092CC0108959091CB01892B8093CB0193 +:1031B000089580959091CB0189238093CB01089548 +:1031C0001092CB0108959091CA01892B8093CA0176 +:1031D000089580959091CA0189238093CA0108952A +:1031E0001092CA0108958093B90108951092B9010F +:1031F000089580910E0190910F01FC0131969C0180 +:10320000205F3F4F80E0919191118F5FE217F307AC +:10321000D1F70895E0910E01F0910F018091CC015A +:103220008083E0910E01F0910F0190818091CB019C +:10323000892B8083E0910E01F0910F0190818091A4 +:10324000CA01892B80838091B901882361F0E091C4 +:103250000E01F0910F019081892B80830E94F91853 +:1032600081111092B90180910E0190910F010C947F +:10327000760D8091E601843021F11092CE0120E498 +:1032800088E190E00FB6F894A895809360000FBE97 +:103290002093600080E00E94630683B7817F846092 +:1032A00083BF83B7816083BF7894889583B78E7F0F +:1032B00083BF88E10FB6F89480936000109260009D +:1032C0000FBE089508950895CF930E9462190E9439 +:1032D00056030E946319C0E08C2F0E9444048111A0 +:1032E00004C0CF5FCE30C1F701C081E0CF91089517 +:1032F0000E94FA120E946A0D0C94630682E084BD5B +:1033000093E095BD9AEF97BD80936E0008952FB717 +:10331000F8948091CF019091D001A091D101B0910A +:10332000D2012FBF0895CF92DF92EF92FF920F93B9 +:103330001F932FB7F8944091CF015091D001609125 +:10334000D1017091D2012FBF6A017B01EE24FF24CD +:103350008C0120E030E0C016D106E206F30610F43E +:10336000415051099A01281B390BC9011F910F9136 +:10337000FF90EF90DF90CF9008951F920F920FB6BD +:103380000F9211248F939F93AF93BF938091CF019E +:103390009091D001A091D101B091D2010196A11DCF +:1033A000B11D8093CF019093D001A093D101B09330 +:1033B000D201BF91AF919F918F910F900FBE0F904F +:1033C0001F9018950E94670AF8942FEF87EA91E6FC +:1033D000215080409040E1F700C0000087E090EB72 +:1033E000DC018093EF019093F001A093F101B09381 +:1033F000F2019CE088E10FB6F894A89580936000F4 +:103400000FBE90936000FFCFEF92FF920F931F9338 +:10341000CF93DF93D82FC0E08C2F0E94440400E0AC +:1034200010E0E82EF12CC701002E02C0959587957B +:103430000A94E2F780FD06C00F5F1F4F06301105AA +:1034400091F709C0602F7C2F80E00E940B05D813F4 +:10345000F3CF81E004C0CF5FCE30F1F680E0DF91A2 +:10346000CF911F910F91FF90EF900895CF93C82FA8 +:103470008CE20E94041A882321F08C2FCF910C94A7 +:10348000041A80E0CF910895CF930E948B1B811185 +:1034900002C00E94711BC5E6C15049F00E9456034C +:1034A0008FE39CE90197F1F700C00000F5CF89E2B6 +:1034B0000E94361A811113C18AE20E94361A8111C4 +:1034C0000E94711B85E00E94361A81110E94E21948 +:1034D0000E94961B8093CD0187E00E94361A8823B4 +:1034E000A9F18BE10E94361A882351F08091CD0119 +:1034F00081FB222720F991E0922790FB81F90EC0F1 +:103500008EE00E94361A882361F08091CD0182FB03 +:10351000222720F991E0922790FB82F98093CD0138 +:1035200015C080E10E94361A9091CD01882341F0A8 +:1035300093FB222720F981E0822780FB93F904C0C6 +:10354000892F809580FB90F99093CD018091CD01DA +:103550000E949A1B0E94A81B8093E00180EE0E94AB +:10356000361A882341F08091E001982F909590FBC6 +:1035700080F98093E00189E30E94361A882359F08C +:103580008091E00181FB222720F991E0922790FBB6 +:1035900081F98093E00182EE0E94361A882359F067 +:1035A0008091E00182FB222720F991E0922790FB95 +:1035B00082F98093E00186EE0E94361A882359F042 +:1035C0008091E00183FB222720F991E0922790FB74 +:1035D00083F98093E00183EE0E94361A882359F024 +:1035E0008091E00184FB222720F991E0922790FB53 +:1035F00084F98093E00185E30E94361A882359F00C +:103600008091E00185FB222720F991E0922790FB31 +:1036100085F98093E00181E30E94361A882359F0EE +:103620008091E00186FB222720F991E0922790FB10 +:1036300086F98093E00181E10E94361A882359F0CF +:103640008091E00187FB222720F991E0922790FBEF +:1036500087F98093E0018091E0010E94AC1B80918A +:10366000E00187FB882780F980930D0187E20E94A3 +:10367000361AC82F8EE10E94361A8111C2608FE17E +:103680000E94361A8111C46080E20E94361A8111AC +:10369000C86081E20E94361A8111C06182E20E94F4 +:1036A000361A8111C06283E20E94361A8111C06409 +:1036B00084E20E94361A882311F0C06802C0CC232D +:1036C00029F08C2F0E94A31B6C2F03C00E949F1B0C +:1036D000682F70E080E090E0CF910C94B616CF9107 +:1036E00008956DEE7EEF80E090E00E94DD2160E0C5 +:1036F00082E090E00E94CF2160E083E090E00E94B1 +:10370000CF2160E084E090E00E94CF2160E085E07E +:1037100090E00C94CF2180E090E00E94C92121E04C +:103720008D3E9E4F09F020E0822F089582E090E0C8 +:103730000C94C121682F82E090E00C94CF2183E0AB +:1037400090E00C94C121682F83E090E00C94CF218D +:1037500084E090E00C94C121682F84E090E00C9408 +:10376000CF218091D50180FF0BC06091130185E0CE +:10377000689FB001112475956795759567952BC065 +:1037800081FF09C06091130185E0689FB001112499 +:103790007595679520C082FF07C06091130185E091 +:1037A000689FB001112417C09091D6019923D1F0E0 +:1037B00060911201961788F72091130185E0289FE8 +:1037C00090011124929FA001939F500D112470E04D +:1037D000CA010E9493216038710540F4611571059A +:1037E00039F002C065E070E0862F08958FE70895F4 +:1037F00081E008958091D50180FF08C0609111019A +:1038000070E0759567957595679521C081FF06C035 +:103810006091110170E07595679519C082FF04C031 +:103820006091110170E010C09091D6019923C1F010 +:10383000609110019617A0F780911101899FC00136 +:10384000112470E00E9493216038710528F46115FD +:10385000710521F0862F08958FE7089581E008957E +:1038600061E070E0F4CF803F21F40E94B11B8195AC +:1038700004C0813F29F40E94B11B8093D9010895AF +:10388000823F21F40E94B11B819504C0833F29F43B +:103890000E94B11B8093D8010895893F19F40E94BA +:1038A000FA1B05C08A3F31F40E94FA1B8195809370 +:1038B000DA0108958B3F21F40E94FA1B819504C020 +:1038C0008C3F29F40E94FA1B8093DB010895843F0A +:1038D00021F48091D701816017C0853F21F4809148 +:1038E000D701826011C0863F21F48091D7018460A6 +:1038F0000BC0873F21F48091D701886005C0883FC5 +:1039000031F48091D70180618093D70108958D3F74 +:1039100021F48091D50181600BC08E3F21F480910C +:10392000D501826005C08F3F29F48091D501846064 +:103930008093D5010895803F39F48091D90187FFA4 +:103940006CC01092D90169C0813F29F48091D901DE +:103950001816BCF362C09091D801823F29F497FFFA +:103960005CC01092D80159C0833F19F41916CCF3EA +:1039700054C0893F41F48091DA0118160CF04DC013 +:103980001092DA014AC08A3F29F48091DA0187FF58 +:1039900044C0F6CF8B3F39F48091DB0187FF3DC0F7 +:1039A0001092DB013AC08C3F29F48091DB0118169C +:1039B000BCF333C0843F21F48091D7018E7F17C0C0 +:1039C000853F21F48091D7018D7F11C0863F21F47E +:1039D0008091D7018B7F0BC0873F21F48091D70165 +:1039E000877F05C0883F31F48091D7018F7E809317 +:1039F000D70113C08D3F21F48091D5018E7F0BC07C +:103A00008E3F21F48091D5018D7F05C08F3F29F431 +:103A10008091D5018B7F8093D5018091D801811150 +:103A20000EC08091D90181110AC08091DA01811103 +:103A300006C08091DB01811102C01092D601089569 +:103A400087ED91E00E94810D0E9487199093D40127 +:103A50008093D30108951F93CF93DF938091D30177 +:103A60009091D4010E949319AC019091D6019923B1 +:103A700021F02091140130E006C0209115018AE068 +:103A8000289F900111244217530708F486C08091A3 +:103A9000D801C091D901D091DA011091DB018111D7 +:103AA00007C0C11176C0D11174C0111172C075C0A8 +:103AB0009F3F19F09F5F9093D601181624F40E943F +:103AC000B11B8093D8018091D80187FF05C00E9467 +:103AD000B11B81958093D8011C1624F40E94B11B60 +:103AE0008093D9018091D90187FF05C00E94B11B45 +:103AF00081958093D9016091D801662339F1C091F5 +:103B0000D901CC2319F1772767FD7095872F972F5F +:103B10000E94A42023E333E343E35FE30E940821F0 +:103B20000E9471206093D8016C2F772767FD7095F4 +:103B3000872F972F0E94A42023E333E343E35FE31F +:103B40000E9408210E9471206093D9011D1624F45F +:103B50000E94FA1B8093DA018091DA0187FF05C089 +:103B60000E94FA1B81958093DA01111624F40E94B9 +:103B7000FA1B8093DB018091DB0187FF05C00E9467 +:103B8000FA1B81958093DB01DF91CF911F910C94FB +:103B9000201D9F3F09F08ECF96CFDF91CF911F91CF +:103BA0000895E7EDF1E085E0DF011D928A95E9F7E0 +:103BB0001092D6011092D5010895833081F128F436 +:103BC000813059F08230D1F00895853009F449C030 +:103BD000B8F1863009F456C0089580911501262F5A +:103BE00030E0280F311D2F3F310524F4680F60931A +:103BF000150108958FEF80931501089580911401A8 +:103C0000262F30E0280F311D2F3F310524F4680F97 +:103C10006093140108958FEF8093140108958091AB +:103C20001301262F30E0280F311D2F3F310524F4DA +:103C3000680F6093130108958FEF80931301089527 +:103C400080911201262F30E0280F311D2F3F3105C2 +:103C500024F4680F6093120108958FEF809312018E +:103C6000089580911101262F30E0280F311D2F3F3C +:103C7000310524F4680F6093110108958FEF80934C +:103C80001101089580911001262F30E0280F311D79 +:103C90002F3F310524F4680F6093100108958FEFD2 +:103CA000809310010895833011F128F4813049F098 +:103CB000823091F00895853081F120F18630C1F194 +:103CC000089580911501681720F4861B80931501D3 +:103CD000089510921501089580911401681720F439 +:103CE000861B809314010895109214010895809109 +:103CF0001301681720F4861B809313010895109216 +:103D00001301089580911201681720F4861B809397 +:103D100012010895109212010895809111016817FF +:103D200020F4861B809311010895109211010895CB +:103D300080911001681720F4861B8093100108956C +:103D40001092100108950F931F938D3109F46AC0EA +:103D500008F03FC08E3009F484C0C0F4873009F405 +:103D60006DC068F4863009F0B5C08091CD01817FC7 +:103D70008E7F8093CD0181E08093DD01ACC08830DF +:103D800009F457C08B3009F46AC0A4C0863109F425 +:103D900066C078F4803109F477C0813109F09AC0A7 +:103DA0000E94FA1290910D0181E0892780930D0104 +:103DB00056C0893109F453C08B3109F08BC0809112 +:103DC000CD0181FB222720F991E0922790FB81F918 +:103DD00051C0853309F475C048F4873209F471C0C5 +:103DE00008F45EC0893209F46CC074C0833430F4C6 +:103DF0008A3308F053C0883391F16CC0833409F4DE +:103E000060C0883409F066C00E94FA120FEF13ED0B +:103E100020E3015010402040E1F700C000000E9464 +:103E2000E2191DC00E942B200E946A0D0E946306A9 +:103E300016C00E94961B0E94A81B11C09091CD0134 +:103E4000892F8095817080FB90F929F096609860A9 +:103E50009093CD0140C0997F977F9093CD0181E0F1 +:103E60003AC08091CD0182FB222720F991E0922770 +:103E700090FB82F98093CD01992389F38091CD0144 +:103E800081608093CD01EBCF8091CD0183FB222710 +:103E900020F991E0922790FB83F9ECCF895301C080 +:103EA0008D5141E050E060E070E08A019B0104C068 +:103EB000000F111F221F331F8A95D2F7C901B801C5 +:103EC00004C061E070E080E090E00E94B6160E94BD +:103ED000FA12C5CF80E01F910F91089580E00895F8 +:103EE00080E00895CF93C82F8091DD01813079F073 +:103EF00018F08230E9F187C0E0910E01F0910F01D6 +:103F00008081813169F0823209F07FC009C0E0917F +:103F10000E01F0910F018081813111F0823261F444 +:103F20008C2F0E946E1F811104C08C2F0E94A31E33 +:103F30001DC081E090E01AC08C2F0E94701F81117B +:103F400014C0C43179F048F4CB3079F0C03109F0B5 +:103F500060C082E08093DD0108C0C93219F0C83327 +:103F600021F057C01092DD0154C081E0817053C030 +:103F7000C93289F118F5C43171F1A8F4C73009F0DC +:103F800046C08AE08093150194E19093140193E078 +:103F9000909313018093120188E08093110188E2CD +:103FA0008093100134C0CE51C63088F5EC2FF0E07C +:103FB000E65DFE4F80818093DC0129C0CE34E9F0BC +:103FC00020F4CB3421F56AE013C0C13579F0C23555 +:103FD000F1F461E00DC08091DC01882319F01092AA +:103FE000DC0115C081E08093DD0115C061E006C0F1 +:103FF0008091DC010E94DD1D0AC06AE08091DC0135 +:104000000E94531E04C01092DD0180E004C081E0D4 +:1040100002C080E0ABCFCF910895E1E8F0E080816D +:10402000886080838081816080838FB7F89493E07B +:104030009093890090ED909388008FBF0895EFE6EC +:10404000F0E08081826080830895EFE6F0E0808177 +:104050008D7F80830895EFE6F0E0908182E08927EC +:10406000808308951F920F920FB60F9211242F9301 +:104070003F934F935F936F937F938F939F93AF93F0 +:10408000BF93EF93FF938091DE019091DF01019642 +:104090009093DF018093DE01811103C082E00E94D2 +:1040A0006306E091DF01E695E695F0E0EA5CFC4FFF +:1040B000E4918091DE018E1303C080E00E946306CC +:1040C000FF91EF91BF91AF919F918F917F916F91F0 +:1040D0005F914F913F912F910F900FBE0F901F90C6 +:1040E000189504D06894B1118DC0089570D088F0EF +:1040F0009F5790F0B92F9927B751A0F0D1F0660FD4 +:10410000771F881F991F1AF0BA95C9F712C0B130EE +:1041100081F077D0B1E0089574C0672F782F882799 +:10412000B85F39F0B93FCCF3869577956795B3952D +:10413000D9F73EF490958095709561957F4F8F4F9C +:104140009F4F0895E89409C097FB3EF490958095A1 +:10415000709561957F4F8F4F9F4F9923A9F0F92F4D +:1041600096E9BB279395F695879577956795B795CB +:10417000F111F8CFFAF4BB0F11F460FF1BC06F5FB1 +:104180007F4F8F4F9F4F16C0882311F096E911C0C3 +:10419000772321F09EE8872F762F05C0662371F0E4 +:1041A00096E8862F70E060E02AF09A95660F771FF8 +:1041B000881FDAF7880F9695879597F9089557FD28 +:1041C0009058440F551F59F05F3F71F04795880F85 +:1041D00097FB991F61F09F3F79F08795089512161C +:1041E00013061406551FF2CF4695F1DF08C01616C8 +:1041F00017061806991FF1CF869571056105089479 +:104200000895E894BB2766277727CB0197F908958F +:104210000BD078C069D028F06ED018F0952309F043 +:104220005AC05FC01124EECFCADFA0F3959FD1F32F +:10423000950F50E0551F629FF001729FBB27F00D54 +:10424000B11D639FAA27F00DB11DAA1F649F6627A9 +:10425000B00DA11D661F829F2227B00DA11D621FF8 +:10426000739FB00DA11D621F839FA00D611D221FB2 +:10427000749F3327A00D611D231F849F600D211D96 +:10428000822F762F6A2F11249F5750408AF0E1F039 +:1042900088234AF0EE0FFF1FBB1F661F771F881F82 +:1042A00091505040A9F79E3F510570F014C0AACF1D +:1042B0005F3FECF3983EDCF3869577956795B7956D +:1042C000F795E7959F5FC1F7FE2B880F911D969597 +:1042D000879597F9089597F99F6780E870E060E007 +:1042E00008959FEF80EC089500240A94161617068F +:1042F00018060906089500240A94121613061406D7 +:1043000005060895092E0394000C11F4882352F039 +:10431000BB0F40F4BF2B11F460FF04C06F5F7F4FF1 +:104320008F4F9F4F089597FB072E16F4009407D0E8 +:1043300077FD09D00E94AD2107FC05D03EF4909591 +:1043400081959F4F0895709561957F4F0895EE0F69 +:10435000FF1F0590F491E02D0994AA1BBB1B51E1AE +:1043600007C0AA1FBB1FA617B70710F0A61BB70BE5 +:10437000881F991F5A95A9F780959095BC01CD018A +:104380000895F999FECF92BD81BDF89A992780B51D +:104390000895A8E1B0E042E050E00C94E421262F1B +:1043A000F999FECF1FBA92BD81BD20BD0FB6F8941A +:1043B000FA9AF99A0FBE019608950E94CF21272FED +:1043C0000C94D021DC01CB01FC01F999FECF06C091 +:1043D000F2BDE1BDF89A319600B40D9241505040C3 +:0843E000B8F70895F894FFCF2F +:1043E80020026506F306D0069C0668060101BA019C +:1043F80028080A03140A3F4D3639F702AA02740244 +:104408003B02CE01E701000219020102030405067E +:044418000708090088 +:00000001FF diff --git a/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png new file mode 100644 index 0000000000000000000000000000000000000000..4b9433be28c1ea9ee0647d1f181a2a8641081ee6 GIT binary patch literal 96954 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

%@?%SIcDx zLy#()q46OzN3h)53?hy~G2Z5ReU)P)J_o`tW3R;QBh|@3TuE4$>z((NV+osB!k0%bOCiJpocB8T!E7hL|Q;9 zO~%EEjgAIj6Ur%=-k>d0R*E_iDiXR#8cK$(s(%$iuOpj^ls5)dgQ$8@z_|8b{E-q2 zQX!&rg(_YWLhsh{v`>k~lO-xGmCxx_yE76`_UP3O0Hc2eKD=;h{Dm%fzP0pXQEw->(rAcF85$kB@9D8ODJFd9T#F05wD`EM_+HRiAa*8ikq;6;_Fll z=+oAIp6?P{5tV3)bfKL4l7EhHwl_y;ncU&uFk0`l^QlL+8w{pyAa>bZZ)5Cr>`wPI zShrnLm&#ue&(0E!Ov1Z8LbNaj96WUCf_=G`C6FvdlL|BO{ly-$33jP0nUbhEd@{3J z?C@=pYl(f(@H5Y!rxmLv*{qL#e>fBJy=CE#)7Gb~XyJC!)g`;in0Uok-ff~2v^IXy z&RKl4DmDcHO=ad@u#KEGJ!tU5!)^(PrRxz4rk^S%QonCZn_2X8v z(hle|NVuvB)Gtre%jBjB7W=O;A%G(nE$-nPDR!O$Cuk1-dH#fLN%F60h*R#Bvx^;% z!*7MLI`8{C2KCdfcy8-?B9u_MOo3FI`0lvSTx5ovZrz^F;g_Z$VamCfK;Av9GP%z0Q5bCcm2=B8Nb|Po^P-<*uiN%ozf84Gu?;>3&Y92 zRUbIs-CQc&mB9r^05F^||IA63?aAR+ALR4^K}N$O(Z~Q*D+M0LP_TFceuY}f3=%~I zO)tITn^bBjf#5D0Y>@J>hxnlYHTk+o9ArR$U>I0%G0Ear28(mf3z4DQT7C7ARRmSe zqc`*2{9lBxcWTO9@wc>VL2S)lIt9Yk43|QuC&gZXf#}FIw);pAt11Ee4c-vD63Vk) zoHuyI(QMT_{xXOkSq5;jd>*k)DlRLo`hv-@1L zQdeY{0oK^gb4CP*LUN9Ss%e-luqdBhkUIdzEumopzc~_w^_S)`-4vii&`rl2&H=t| zICn7J?lq0wGg^O?ylAV*9hh0HKhz$=uc!?y{|VdQ&d_1CKlUjhS2r1sTQF2=j1tye^F*rhDS3q?Z}`Ps-G5f~>0n zt5u46r<{8G`C=!SfxHJ}L^)kx-HYbeymPzXp5}C8%8?rz6|&gUv@f}-f|xV2WRpKO zxL^$A$PhtdryOEipn9=GP_w)`%|Ftp{hV7;k`lM<{TH*BT8$=-Z04FfbNAai_hx~$ zQ}^mMtn0Vnm&AVobLxGu6b!6M8Mn~w$@gyZ0YYx82&enA)YvA!d|dxzHOZfeV4?j@gB;* z&@rz+%m9Fv=Je`2Txa5~NZ?S-j@znZO8|G%I&CJ?*b4C4lbXAr&&rZKp~66q_d=Rs zO+kyG4R?wDRt-jG)IE$H2VG7ji2?Cj>}RM3q~hPJZ88VAw4o%%aM@Q9`*L21>2k?xw+HY&`P%wqyI(Ufx^5%TOTZz{7=Hd|WOjqw+f;L|~&ySCVW7Wp+TBphY zmE-fFupU5hnN20<_TkW&9Y4F7J+59GD>PSzg6y*l$*n%M#}j^Xy*0rGo(wz!b3AW zja2BXwfjS^)5XvJo6Y^b^`-V?;`^z+Z%w@g;d|?@5OU-0XJ!ubaeKvlH1GJiV?9b| z6}A%ZN9%0cysaco(e2y^W$Efm9w7J_4-_FHc--Ca=E@xfIO6OsDPvUHsV1JwZM7s^ zF~cPv`0Mp!Fu;T9CHjrXdb9*UMP}B+z6njQFXL?_c4U+_oo%*a)yU+&dW33SeokQ7SI(hy=Mk6P7R+}SZMxV zidM8uOvQ=Jzl2z@zlHwBu&-|#+@*ZSUmy3gc(A?LnjT~F{zW6fT9PsX!e0zCItV`H zFja@u%}wxN>z4~hkpk$m93$W*P~7uKx+ahNz!o@vo1^K&FL9@*r$39?yp8k7s8mO{ zl^lq5n0Qfd=aB65U8l!Mc4B9R?27H_X&3(etTD<|1aO;Z2nawJ3ERxawfe-VFL^W# z**=@u7Y#k!aa0=trO2TWMA}+D-O3?)oiDB|r`xcgD$QfFiitL5D=MQLLm%X10Na$wPwO;XUiLbx?|RhWHR>#SGTXuN@ynYap=rTh1d&Xt-6igSo#dox8O@o;1>e$0;yS9)@jDB zuC52id<<-jpj40tzDwP(uN59eefuH^=(@`7eZA1?6SN<*7){%Lzs_^E$N7vlouwl` zE^bB8Sl8%@%8lSdYYHw1zSM!Q!WitX%L_K|N@Y>UwgI_q@xnFUZ z(!>$#(5q`{jZg^!;tRwx7&uRg{?3Kn0OZUTCvTxH2PHRw^lhQ_T2d^bBqDk0y1O@m?al{Mm(y7++e)CiDtLYm~EG?X?T(Rlm;Al~W!R_B@77hP42~k7qq7&|@VCOVoI6g(OQ~ zA2dt$_#aJ0fs?GsWeLrRH9JzG*xxd+4NwjnH23F`HOdNY76^BK{KEeMh_>^Z?y6VoyD+IdWG<}d=tHHZf*v_9N-i*`OX2H#UOjnt;|}9flaTa zWd}$f`Su*!0b6AGbSMrDfVd3eBPd4D4&WLO)~pnqC)_kJ%9I!&T&FfCcF6B+gstJl z5Q+8nW zjPbTEZTy(3&K{pvK?S~1>;**D&Ryh;t`f~zz_c{zgv%V+^9y~~k|%_d;`L(39F?`sNA1_= z-<+EZ!bB^wP9dR(OP_jfa*e>x!==>W^l+sQn6{=nZhnMnc3w#frN({;rt=TVp|9r_ z78Vnw@L4>zB%g#2b94!Q#2)e^837&2Zf+DYKp%NVs3wbn{rp?UEOioUUoK*L(f|kNB zN~Nr$yS=Y#HlahL-ZyW1Nn#W~)AKbcJ9~~AxEo^Y-ZdAl$33A2uA!951h zAZz&ezL8PBDd4!;0q7zBlxcBlAiLWQ1@_HYQk1HZli#_HtN?+dPL16J^Y21cU z_-3eCy+_;Xb|fJF=j~lUZ~+3W^eJ$?_PEod6!Aoyd%G0zQSNicMl+ED?ChWnkp4g> z1lMAat0x_MuVK^E`bRvZ`U=Rwg23C^TDXH7$Nb;l23#U|$n+@?b+c&{0BHbq1=ov% zr8D`V^UaGg=iMiuJzk1{LuI6KjY7O&AkAQLUyGz{y$w4W!D*MJ2j^pYJ^Ii6gRuJM zYP-VKsrg$U*a^CC84E*RzmXY&V0t>wZf6R!c+ZXHN`hEUllpN?wd`R*fKop(cPkB% zSAlGt$(E%cjG}%oRtj|kQ-ZO~<)$GYmm)jO^|{+xv?1c*|GpE1X&~85n*!twZW@Mh z$0Gu0ch2vafa)1qT7KR$nwgtp#6g7~PI;2hZbUIBLn!X{(#_CvfF*?JrmIqLf7R%H z`j6;iPyyt#M)160@e!CqEYKGNczNlm&l6uIu6$pjh0eNOy^1-$9d|PI4 zN%IQ(#l3+bOxQ9G>Ow7=t}4no_MRI3pCjIY9#(jGxa@XkAUdzg>;kYG=fs%Y+jogX zN=d~Cc^TW8(NQBmx_j=*X$C4{r!C&2jdz=-D*R)pD{E@vDckv88-qVU2f#btb3tiJ zAHnT2h~B+^fq=&Q_UenwBeJ!O968g%4t^^)d6S!8&)VTHK!=m!n4$+h@;x79cNXDtE|9sm4Al10Myj*Hqew!tHr&H?gogdZadUx}Gon84; z(?=8!n98IeYRXt@g-|ZJiWs340znj&fJv0Ykr)Vv2nvXZ5CtI-;*coFVW>dD;Snfu zDM6G_ZYYfhP*H(0DI$$PL8w8AK{S0K_z$?hWG0*4m-+7Q`+WB8=k51wfzuAprpw5g zVrPe4dnCg|eVCJ>JL@(f)$I-$X7|*GhllgZ#693&5;ru?*#?NXG)qv?c<=byIjlGY zlX2dimQoU|Z?0eMsR@3>@el%W1{ewikqaa4RluG#>2@u4)#g_53i_7mWowcP%7=Vp zX~}v0mADC$;Cv6DVXUKK4J4us#7TX8$ANkop}}Hqa9#o`6E zVMkI>&F-`*9RSeWDJ?`Bq=I3&=9jKc+f)Je$rTiFj>%qG9L6QlR~KQ_U7SlElPgXU zLLgHA^P|nP=tQZj2BH*b3j)$kzQZRZL*O$rGqZg%pgGaObrxdC(l&&*%yNmV40?+W zL)DKxj6;cJtt*WnoG}3?!g~%xTo@E&hgG~vr-0pw0>w9rzmL8+T;){l+^xLQWvCOlk% zH}GieSZKr6x#)+c!q|W5y=$$s)_Uasl|$5NEKX}Z2DqeD z05nj^MhCKYc-ZKCDr1q2E!=zoPzure1sL^AZUds!SA-j^Clxup%VI2r_7AJxm%Mo5 z0pxsB2}TF@k7^UP>o|GMn4T*<_|oE<@8Zfoj*55LpCX}}X{#s=P~+Roh0YDxJhYHW1G;YRF<_?qf!>85!`m6bo0T9qVeJ*V)d zAW$sPl*{^@()XC?T-GDIlW07r6sxNq1}2;Z!%Vt+%)m88B?D6qWBqBg5+1LzC>IXS zzGcRkZaCg*>Xvi=ecw-nRI@iv>e1UdMc5N7%|ZLY$0v(831)=ibzn{g$5mKLxh<=9 zFTccI&RuJa9I1Umu38@9@Zc_T@FzLT3}$!W}crxzOb(D zC0nT7pFpHO^*_9e!$o?%H2cBF944B|#|?$aAgBS_1bpJ#Nq`z04ky^gWbL^QS+V+r z{2`)D`C9VTaq9zm%rXCekmY|5yN99rQjco8RbC?K`p8L4yP@Wj7-za0Z{b738w_w8 zSkJ1m4p^M3bfMLscfch<`Lb%J@}gN3cl+TdMYhJjkH>zl$mkhoPl{@+FgLlzA=mrB zFA6s5rmv4Zbt*UR(}{O;P%~XqTT3R9LRR|V^Z8U7 hjUF&4Pws78dXO~C9Z!#UxT3FWOV~|vuh|)t`aik(1hoJF literal 0 HcmV?d00001 From 6274a216f87bad7d6fe9c9a1a4328dbf444fc364 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Tue, 26 Apr 2016 05:25:31 +0300 Subject: [PATCH 09/67] [Erez & Jack] Examples for advanced macro stuff --- README.md | 99 +- .../erez_experimental/erez_experimental.hex | 2156 +++++++++-------- .../keymaps/erez_experimental/keymap.c | 45 +- 3 files changed, 1230 insertions(+), 1070 deletions(-) diff --git a/README.md b/README.md index f5c271f165..749c97c8f1 100644 --- a/README.md +++ b/README.md @@ -211,6 +211,23 @@ This will clear all keys besides the mods currently pressed. If the user attempts to activate layer 1 AND layer 2 at the same time (for example, by hitting their respective layer keys), layer 3 will be activated. Layers 1 and 2 will _also_ be activated, for the purposes of fallbacks (so a given key will fall back from 3 to 2, to 1 -- and only then to 0). +#### Naming your macros + +If you have a bunch of macros you want to refer to from your keymap, while keeping the keymap easily readable, you can just name them like so: + +``` +#define AUD_OFF M(6) +#define AUD_ON M(7) +#define MUS_OFF M(8) +#define MUS_ON M(9) +#define VC_IN M(10) +#define VC_DE M(11) +#define PLOVER M(12) +#define EXT_PLV M(13) +``` + +As was done on the [Planck default keymap](/keyboard/planck/keymaps/default/keymap.c#L33-L40) + #### Timer functionality It's possible to start timers and read values for time-specific events - here's an example: @@ -227,11 +244,91 @@ if (timer_elapsed(key_timer) < 100) { It's best to declare the `static uint16_t key_timer;` outside of the macro block (top of file, etc). +#### Example 1: Single-key copy/paste (hold to copy, tap to paste) + +With QMK, it's easy to make one key do two things, as long as one of those things is being a modifier. :) So if you want a key to act as Ctrl when held and send the letter R when tapped, that's easy: `CTL_T(KC_R)`. But what do you do when you want that key to send Ctrl-V (paste) when tapped, and Ctrl-C (copy) when held? + +Here's what you do: + + +``` +static uint16_t key_timer; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 0: { + if (record->event.pressed) { + key_timer = timer_read(); // if the key is being pressed, we start the timer. + } + else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down"). + if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap. + return MACRO( D(LCTL), T(C), U(LCTL), END ); + } + else { + return MACRO( D(LCTL), T(V), U(LCTL), END ); + } + } + break; + } + } + return MACRO_NONE; +}; +``` + +And then, to assign this macro to a key on your keyboard layout, you just use `M(0)` on the key you want to press for copy/paste. + +#### Example 2: Space Cadet Shift (making it easy to send opening and closing parentheses) + +In the [Modern Space Cadet Keyboard](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses), one of cooler features is the Shift Parentheses. To quote Steve Losh: + + > When held while pressing other keys, act like Shift. + > When pressed and released on their own, type an opening or closing parenthesis (left and right shift respectively). + +``` +static uint16_t key_timer; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 0: { + if (record->event.pressed) { + key_timer = timer_read(); // if the key is being pressed, we start the timer. + register_code(KC_LSFT); // we're now holding down Shift. + } else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down"). + if (timer_elapsed(key_timer) < 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap. + register_code(KC_9); // sending 9 while Shift is held down gives us an opening paren + unregister_code(KC_9); // now let's let go of that key + } + unregister_code(KC_LSFT); // let's release the Shift key now. + } + break; + } + case 1: { + if (record->event.pressed) { + key_timer = timer_read(); // Now we're doing the same thing, only for the right shift/close paren key + register_code(KC_RSFT); + } else { + if (timer_elapsed(key_timer) < 150) { + register_code(KC_0); + unregister_code(KC_0); + } + unregister_code(KC_RSFT); + } + break; + } + } + return MACRO_NONE; +}; +``` + +And then, to assign this macro to a key on your keyboard layout, you just use `M(0)` on the key you want to press for left shift/opening parens, and `M(1)` for right shift/closing parens. + ## Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc) Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap: - #include + #include If you use Dvorak, use `keymap_dvorak.h` instead of `keymap_colemak.h` for this line. After including this line, you will get access to: diff --git a/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex b/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex index aa08845658..3af7ddbb8e 100644 --- a/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex +++ b/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex @@ -1,18 +1,18 @@ -:100000000C9465020C94AC020C94AC020C94AC02FF -:100010000C94AC020C94AC020C94AC020C94AC02A8 -:100020000C94AC020C94AC020C94C30B0C94950C85 -:100030000C94AC020C94AC020C94AC020C94AC0288 -:100040000C94AC020C9409210C94AC020C94AC02FC -:100050000C94AC020C949B1A0C94AC020C94AC0261 -:100060000C94AC020C94AC020C94AC020C94AC0258 -:100070000C94AC020C94AC020C94AC020C94AC0248 -:100080000C94AC020C94AC020C94AC020C94AC0238 -:100090000C94AC020C94AC020C94AC020C94AC0228 -:1000A0000C94AC020C94AC020C94AC02020D240D26 -:1000B000170E240D170E690D8C0D170EE10DF40DA2 -:1000C000DE10DE100D110D1150118A1197139713C8 -:1000D000A3119713981298126B1397139713821307 -:1000E0000000F0A12E004C002A00E1003581000044 +:100000000C9465020C94A9020C94A9020C94A90208 +:100010000C94A9020C94A9020C94A9020C94A902B4 +:100020000C94A9020C94A9020C94A30C0C94750DC9 +:100030000C94A9020C94A9020C94A9020C94A90294 +:100040000C94A9020C9448220C94A9020C94A902C5 +:100050000C94A9020C94EC1B0C94A9020C94A90218 +:100060000C94A9020C94A9020C94A9020C94A90264 +:100070000C94A9020C94A9020C94A9020C94A90254 +:100080000C94A9020C94A9020C94A9020C94A90244 +:100090000C94A9020C94A9020C94A9020C94A90234 +:1000A0000C94A9020C94A9020C94A902DA0DFC0D7F +:1000B000E70EFC0DE70E3E0E610EE70EB60EC90E02 +:1000C000C211C2110312031245128112811481144C +:1000D00099128114901390135B14811481146F147E +:1000E0000000F0A12E004C002A00003035810000F5 :1000F0001E00140004001D7134004D001F001A0082 :1001000016001B00E104C1002000080007000600E3 :1001100050002C0021001500090019004F004A0072 @@ -22,7 +22,7 @@ :10015000240018000D74100052004B0025000C0004 :100160000E00360051002800260012000F00370054 :100170002F002B81270013003382387130004E008E -:100180002D0031003478E500C100000001000100BD +:100180002D00310034780130C10000000100010071 :1001900001000100010000003A001E0022002602BA :1001A000010001003B001F002300270201000100A5 :1001B0003C00200024002F004B0101003D002100E5 @@ -75,1047 +75,1085 @@ :1004A0005D71879DB3C7DAE9F5FCFFFCF5E9DAC7B2 :1004B000B39D87715D4A3A2C20170F0A060402018A :1004C0000000000000000000000011241FBECFEF5C -:1004D000DAE0DEBFCDBF04B603FE27C08091ED0198 -:1004E0009091EE01A091EF01B091F0018730904B17 -:1004F000A740B04BD1F41092ED011092EE01109292 -:10050000EF011092F00114BE84B7877F84BF0FB64D -:10051000F894A895809160008861809360001092A3 -:1005200060000FBEE0E0FFE3099511E0A0E0B1E05C -:10053000E4EBF5E402C005900D92A433B107D9F7BE -:1005400021E0A4E3B1E001C01D92AD3EB207E1F7A6 -:100550000E940A090C94D8220C94000061110BC06F -:10056000FC018281882321F085EE0E94780F03C070 -:1005700085EE0E94401080E090E00895089560911B -:10058000B1017091B2018091B3019091B4010E94C8 -:10059000C81956985E9825982D9826982E982798D1 -:1005A0002F98813019F0823021F00895259A2D9AE4 -:1005B0000895269A2E9A08950C94BF0256985E9834 -:1005C00025982D9826982E9827982F988FEF90E0B1 -:1005D000909389008093880090938B0080938A0089 -:1005E00090938D0080938C00259A2D9A2FEF80E7B1 -:1005F00092E0215080409040E1F700C00000269A30 -:100600002E9A2FEF80E792E0215080409040E1F752 -:1006100000C00000279A2F9A2FEF80E792E0215028 -:1006200080409040E1F700C0000025982D982FEF02 -:1006300080E792E0215080409040E1F700C0000048 -:1006400026982E982FEF80E792E02150804090402E -:10065000E1F700C0000027982F9856985E982598DB -:100660002D9826982E9827982F98089589EA809398 -:10067000800089E08093810024982C983F988AB16B -:100680008F748AB96E98479A8BB1806B8BB9769AC2 -:100690000E94DE020C94BE0280E2809300018091F1 -:1006A000340181110EC00E949B0381E080933401CC -:1006B0002FEF83ED90E3215080409040E1F700C0A0 -:1006C000000080E40E94A1038093000181112EC0EC -:1006D0000E94CB0380930001811128C00E94CB03AC -:1006E00080930001811122C08FE30E94CB0380938D -:1006F000000181111BC00E94C30380E40E94A1037A -:1007000080930001811112C08CE00E94CB03809382 -:10071000000181110BC00E94CB0380930001811165 -:1007200005C08FE30E94CB03809300010E94C303A6 -:100730008091000108951092B9008AE08093B8007A -:10074000089594EA9093BC009091BC0097FFFCCF71 -:100750009091B900987F983021F0903111F081E0AC -:1007600008958093BB0084E88093BC008091BC0016 -:1007700087FFFCCF8091B900887F883111F08034E9 -:1007800071F780E0089584E98093BC008091BC00FB -:1007900084FDFCCF08958093BB0084E88093BC0067 -:1007A0008091BC0087FFFCCF9091B900987F81E0D9 -:1007B000983209F480E0089584E88093BC00809129 -:1007C000BC0087FFFCCF8091BB00089580910001A1 -:1007D000811115C080E40E94A10380930001811162 -:1007E0000CC082E10E94CB0380930001811105C0FF -:1007F0008FEF0E94CB03809300010E94C30384B15A -:10080000807F84B985B1807F85B98AB1837F8AB9B9 -:100810008BB1837F8BB93E98469808950E944C0314 -:10082000809300010E94E60380B38C7080BB81B38B -:10083000836F81BBE4E4F1E0A6E3B1E011921D9285 -:1008400081E0E235F807D1F70C9436039F92AF921E -:10085000BF92CF92DF92EF92FF920F931F93CF93AD -:10086000DF9380910001882379F0809135018F5FBB -:1008700080933501811108C00E944C0380930001D0 -:10088000811102C00E94DE0286E3E82E81E0F82E8C -:100890008701C0E0D0E0BB24B39492E0A92ECC2421 -:1008A000C394D12CC730D10500F58091000181118E -:1008B00064C080E40E94A10380930001811112C0F2 -:1008C00082E10E94CB038093000181110BC0C6011D -:1008D0000C2E01C0880F0A94EAF780950E94CB0382 -:1008E000809300010E94C30348C0CA30A1F028F4DD -:1008F000C83059F0C93061F005C0CC3089F070F0D3 -:10090000CD3089F0209A289810C0219A29980DC0DE -:10091000229A2A980AC0239A2B9807C0529A01C09B -:10092000539A5B9802C03E9A4698E0EAEA95F1F73E -:100930008FB181708B25799902C032E001C030E01F -:10094000832B7C9902C034E001C030E0832B7D9979 -:1009500002C028E001C020E0822B7E9902C090E115 -:1009600001C090E0892B9FB19095991F9927991FFD -:100970009295990F907E892B0FC080910001811173 -:100980004AC080E40E94A10380930001882381F182 -:10099000912C0E94C303892DD8019C91981719F0BE -:1009A0008C93A09201010E94E60321960F5F1F4FD6 -:1009B000CE30D10509F076CF80910101882369F10D -:1009C000815080930101882339F0EFE9FFE03197EE -:1009D000F1F700C0000021C0E4E4F1E0D7018D91FF -:1009E0007D018193B4E4EB16B1E0FB06B9F715C0C5 -:1009F00083E10E94CB03809300018111C9CF81E480 -:100A00000E94A103809300018111C2CF0E94DC03E8 -:100A1000982E9094BECF80E0BFCF0E94DC0281E090 -:100A2000DF91CF911F910F91FF90EF90DF90CF90CA -:100A3000BF90AF909F900895E82FF0E0EC5BFE4FE1 -:100A40008081089508958B3B910580F4883A910543 -:100A500048F5853A9105D8F48430910508F0B2C084 -:100A6000019709F06EC081E090E00895803E910505 -:100A700008F467C0883E910508F4A4C09C01205F7B -:100A800031092031310508F05CC090650895853A40 -:100A9000910509F459C0863A910509F058C082E8D9 -:100AA00090E40895883A910509F454C0893A910573 -:100AB00009F453C08A3A910509F452C08B3A910562 -:100AC00009F451C08C3A910509F450C08D3A910552 -:100AD00009F44FC0803B910509F44EC08E3A910550 -:100AE00009F44DC08F3A910509F44CC0813B910542 -:100AF00009F44BC0823B910509F44AC0833B910540 -:100B000009F449C0843B910509F448C0853B91052F -:100B100009F447C0863B910509F446C0873B91051F -:100B200009F445C0883B910509F444C0893B91050F -:100B300009F443C08A3B910509F442C080E094E483 -:100B4000089580E090E0089581E890E4089583E8B6 -:100B500090E4089582EE94E4089589EE94E4089573 -:100B60008AEE94E4089585EB94E4089586EB94E48A -:100B7000089587EB94E408958CEC94E408958DEC4B -:100B800094E4089583E895E408958AE895E4089547 -:100B900082E995E4089584E995E4089581E296E474 -:100BA000089583E296E4089584E296E4089585E248 -:100BB00096E4089586E296E4089587E296E408951F -:100BC0008AE296E40895089524E5829FC0011124E5 -:100BD000FC0126E0729FE00DF11D1124E60FF11DCE -:100BE000EE0FFF1FEC51FF4F859194910895880FF0 -:100BF000991FFC01E05AF040859194910895880F67 -:100C0000991FFC01E052FF4F85919491089524E5CE -:100C1000829FC0011124FC0146E0749FE00DF11D8C -:100C20001124E60FF11DEE0FFF1FEC51FF4F8591D0 -:100C300094919C013A9521154FE1340708F425C1A0 -:100C40003F512115304120F49F700E94FF05089507 -:100C50009C0130532115304118F49927906C089568 -:100C6000811520E5920769F40E94B9134FEF84E3E0 -:100C70009CE0415080409040E1F700C000000C949F -:100C8000C01A813020E5920731F48091CC01816057 -:100C90008093CC0108959C0130552115304108F016 -:100CA0005CC0292F33272F70332721303105E9F419 -:100CB000AC0164E0440F551F6A95E1F74427537077 -:100CC000BC016370772702C0220F331F6A95E2F7D9 -:100CD0003C68242B352B73E0880F991F7A95E1F738 -:100CE00080769927822B932B08952230310529F4A1 -:100CF000982F8827816F906A089523303105A1F4D9 -:100D0000AC0133E0440F551F3A95E1F7407E577030 -:100D10008370992721E030E002C0220F331F8A95AB -:100D2000E2F7C9019C6816C02430310531F5AC01E9 -:100D300023E0440F551F2A95E1F7407E57708370DA -:100D4000992721E030E002C0220F331F8A95E2F795 -:100D5000C9019A68842B952B08959C013057211561 -:100D6000304118F49F70906208959C01305821150D -:100D7000304118F49F70906A0895803E9105E0F428 -:100D8000803C910558F58133910509F46FC048F412 -:100D90008932910509F463C08A32910509F46DC066 -:100DA00072C089339105E9F082389105D1F085331D -:100DB000910509F44DC067C0833E910581F138F477 -:100DC000803E9105B9F0823E9105D9F05CC0863E27 -:100DD000910561F1873E9105A1F155C00E94F7058B -:100DE00008952091DE0120FD02C021FF4CC080EE5D -:100DF00090E049C08091DE0180FFF9CF89E390E067 -:100E000042C08091DE0182FF0EC08091DE0184FF2E -:100E100003C080E090E037C083EE90E034C0809162 -:100E2000DE0182FFF2CF82EE90E02DC08091DE01E4 -:100E300083FF0BC08091DE0184FDEBCF87EE90E055 -:100E400022C08091DE0183FFF5CF86EE90E01BC0CB -:100E50008091DE0185FF07C089E290E014C0809197 -:100E6000DE0185FFF9CF85E390E00DC08091DE01C2 -:100E700086FF07C08AE290E006C08091DE0186FF0F -:100E8000F9CF81E390E00E942305089508958091B1 -:100E900062010895CF93DF9300D01F92CDB7DEB7E4 -:100EA0009C018091E401843019F593E099833B83A0 -:100EB0002A839093E9008FEF9091E800815095FD8F -:100EC00006C095ED9A95F1F700008111F5CF80915C -:100ED000E80085FF0DC040E050E063E070E0CE0127 -:100EE00001960E94B7098091E8008E778093E80010 -:100EF0000F900F900F90DF91CF910895CF93DF93D4 -:100F000000D01F92CDB7DEB72091E401243021F547 -:100F100022E029839B838A8383E08093E9008FEF1B -:100F20009091E800815095FD06C095ED9A95F1F7F6 -:100F300000008111F5CF8091E80085FF0DC040E0F1 -:100F400050E063E070E0CE0101960E94B709809105 -:100F5000E8008E778093E8000F900F900F90DF915C -:100F6000CF9108959C018091E4018430F9F482E0EE -:100F70008093E9009FEF8091E800915085FD06C0C5 -:100F800085ED8A95F1F700009111F5CF8091E80089 -:100F900085FF0CC040E050E065E070E0C9010E94B0 -:100FA000B7098091E8008E778093E8000895CF9389 -:100FB000DF93EC018091E401843009F046C0909108 -:100FC0000C019923D9F090910D019923B9F08093E8 -:100FD000E9008FEF9091E800815095FD06C095E102 -:100FE0009A95F1F700008111F5CF8091E80085FF17 -:100FF0002CC040E050E060E170E017C081E08093D9 -:10100000E9008FEF9091E800815095FD06C095EDC5 -:101010009A95F1F700008111F5CF8091E80085FFE6 -:1010200014C040E050E068E070E0CE010E94B709D3 -:101030008091E8008E778093E80080E1FE01A2E5D0 -:10104000B1E001900D928A95E1F7DF91CF9108957B -:101050008091E301811109C00E94480B0E94A50BF9 -:101060008091E20084608093E20008951092E30191 -:10107000089508950C94F6200E94561A0E94FC20B0 -:101080000E94500E0C94460742E061EC81E00E9401 -:10109000C10A42E061EC82E00E94C10A42E061ECD8 -:1010A00083E00E94C10A42E161EC84E00C94C10A31 -:1010B0008091E601833009F455C030F4813071F03D -:1010C000823009F48EC008958A3009F47AC08B30DA -:1010D00009F460C0893009F09CC020C08091E5010E -:1010E000813A09F096C08091E800877F8093E800FC -:1010F0008091E9019091EA01892B21F460E182E578 -:1011000091E003C060E080E090E070E00E94020A9D -:101110008091E8008B778093E80008958091E50145 -:10112000813209F076C08091E9019091EA0100973F -:1011300019F0039709F06DC08091E800877F8093D4 -:10114000E8008091E80082FD05C08091E4018111F2 -:10115000F8CF5FC08091F100809362018091E80038 -:101160008B7753C08091E501813A09F052C080919C -:10117000E9019091EA01892B09F04BC08091E800C8 -:10118000877F8093E8008091E80080FFFCCF80910A -:101190000C0136C08091E5018132D9F58091E901D9 -:1011A0009091EA01892BA9F58091E800877F8093CF -:1011B000E8000E94F60A8091E70180930C010C94EC -:1011C000B9138091E501813221F58091E800877F94 -:1011D0008093E8000E94F60A8091E8018093630101 -:1011E00008958091E501813AA1F48091E800877F1C -:1011F0008093E8008091E80080FFFCCF809163013C -:101200008093F1008091E8008E778093E8000C9441 -:10121000F60A089584B7877F84BF0FB6F894A8951F -:1012200080916000886180936000109260000FBE22 -:1012300090E080E80FB6F89480936100909361008D -:101240000FBE0E949F0E0E94480B0E94A50B80912A -:10125000E20084608093E20078940E94300E0E9445 -:10126000A10E82E091E00E944B0E0E94E42080914A -:10127000E401853069F40E94181A8091E201882304 -:10128000B1F30E94421A882391F30E94A109EFCF83 -:101290000E94A70EECCF292F332723303105C9F048 -:1012A00060F42130310581F02230310509F041C070 -:1012B0008DE690E020E133E040C021323105E1F0DD -:1012C0002232310531F135C082E190E02DE733E083 -:1012D00034C099278130910549F028F0029749F5EB -:1012E000ECEDF2E005C0ECE0F3E002C0E4EFF2E088 -:1012F000849190E09F0121C06430D8F4E62FF0E0A3 -:10130000EE0FFF1FEE5DFE4F2081318189E090E0FE -:1013100014C0643070F470E0FB01EE0FFF1FE65E56 -:10132000FE4F20813181FB01EA5EFE4F808190E01B -:1013300004C080E090E020E030E0FA0131832083B7 -:10134000089580E189BD82E189BD09B400FEFDCF29 -:101350008091D8008F7D8093D8008091E0008260DA -:101360008093E0008091E00081FDFCCF0895CF9252 -:10137000DF92EF92FF920F931F93CF93DF93EC01D5 -:101380008B016A010E94150B811133C0C114D10475 -:1013900039F0F60180819181081B190BC80FD91F04 -:1013A000E12CF12C0115110519F18091E80085FD62 -:1013B00016C08091E8008E778093E800C114D104B4 -:1013C00049F0F60180819181E80EF91EF182E082F8 -:1013D00085E00FC00E94150B882321F30AC0899174 -:1013E0008093F10001501109FFEFEF1AFF0ADACFE5 -:1013F00080E0DF91CF911F910F91FF90EF90DF90F0 -:10140000CF9008952091EB013091EC01261737071A -:1014100048F06115710539F42091E8002E7720938A -:10142000E80001C0B901FC0120E06115710579F106 -:101430008091E4018823F1F18530F1F18091E80099 -:1014400083FD3CC08091E80082FD2EC08091E800C1 -:1014500080FFEBCF2091F3008091F20090E0922B7F -:101460006115710551F08830910538F42191209370 -:10147000F100615071090196F3CF21E0089709F05E -:1014800020E08091E8008E778093E800CECF211194 -:10149000CFCF0AC08091E401882361F0853061F0EC -:1014A0008091E80083FD0AC08091E80082FFF2CFBE -:1014B00080E0089582E0089583E0089581E0089532 -:1014C0002091EB013091EC012617370748F06115A8 -:1014D000710539F42091E8002E772093E80001C0CF -:1014E000B901FC0120E06115710591F18091E401E1 -:1014F000882309F440C0853009F43FC08091E8009A -:1015000083FD3DC08091E80082FD2FC08091E800FE -:1015100080FFE9CF2091F3008091F20090E0922BC0 -:101520006115710559F08830910540F4249120939C -:10153000F1003196615071090196F2CF21E00897D0 -:1015400009F020E08091E8008E778093E800CBCF0F -:101550002111CCCF0AC08091E401882361F085304D -:1015600061F08091E80083FD0AC08091E80082FF6D -:10157000F2CF80E0089582E0089583E0089581E04D -:101580000895982F973068F59093E900981739F0EF -:101590007091EC002091ED005091F00003C0242FD9 -:1015A000762F50E021FD02C09F5FECCF3091EB0021 -:1015B0003E7F3093EB003091ED003D7F3093ED00A6 -:1015C0003091EB0031603093EB007093EC0020938E -:1015D000ED005093F0002091EE0027FDE5CF80E074 -:1015E00008958F708093E90081E008958091E5016E -:1015F00087FF11C08091E80082FD05C08091E40161 -:101600008111F8CF11C08091E8008B770BC08091D9 -:10161000E401882349F08091E80080FFF8CF8091B1 -:10162000E8008E778093E80008952091E4003091DF -:10163000E50095E64091EC00842F817040FF23C0C7 -:101640008091E80080FD1DC08091E401882399F01D -:10165000853099F08091EB0085FD11C04091E40048 -:101660005091E5002417350729F3915011F09A01A4 -:10167000E1CF84E0089582E0089583E0089581E059 -:10168000089580E008954091E80042FFDDCF08957D -:101690000E94B60B0E94BE0BE0EEF0E080818160FC -:1016A0008083E8EDF0E080818F77808319BCA7ED1F -:1016B000B0E08C918E7F8C9380818F7E808310929E -:1016C000E30108950F931F93CF93DF930E94B60B0E -:1016D0000E94BE0BC8EDD0E088818F778883888117 -:1016E0008068888388818F7D888319BC1092E4018B -:1016F0001092E0011092E2011092E10100EE10E080 -:10170000F80180818B7F808388818160888342E0BB -:1017100060E080E00E94C10AE1EEF0E080818E7F0F -:101720008083E2EEF0E08081816080838081886048 -:101730008083F80180818E7F8083888180618883A7 -:10174000DF91CF911F910F910895E8EDF0E0808136 -:101750008F7E8083E7EDF0E080818160808384E08C -:1017600082BF81E08093E3010C94620BE8EDF0E02E -:1017700080818E7F80831092E20008951092DA00BB -:101780001092E10008951F920F920FB60F9211244C -:101790002F933F934F935F936F937F938F939F9379 -:1017A000AF93BF93EF93FF938091E10082FF0BC053 -:1017B0008091E20082FF07C08091E1008B7F8093DF -:1017C000E1000E942F0E8091DA0080FF1FC08091FF -:1017D000D80080FF1BC08091DA008E7F8093DA00F2 -:1017E0008091D90080FF0DC080E189BD82E189BD73 -:1017F00009B400FEFDCF81E08093E4010E94280837 -:1018000005C019BC1092E4010E9436088091E100E5 -:1018100080FF19C08091E20080FF15C08091E20036 -:101820008E7F8093E2008091E20080618093E200ED -:101830008091D80080628093D80019BC85E08093A5 -:10184000E4010E943A088091E10084FF30C0809159 -:10185000E20084FF2CC080E189BD82E189BD09B42A -:1018600000FEFDCF8091D8008F7D8093D8008091BD -:10187000E1008F7E8093E1008091E2008F7E809373 -:10188000E2008091E20081608093E2008091E001BB -:10189000882311F084E007C08091E30087FD02C037 -:1018A00081E001C083E08093E4010E943C088091C4 -:1018B000E10083FF29C08091E20083FF25C0809171 -:1018C000E100877F8093E10082E08093E401109241 -:1018D000E0018091E1008E7F8093E1008091E20041 -:1018E0008E7F8093E2008091E20080618093E2002D -:1018F00042E060E080E00E94C10A8091F0008860D0 -:101900008093F0000E943908FF91EF91BF91AF9151 -:101910009F918F917F916F915F914F913F912F9107 -:101920000F900FBE0F901F9018951F920F920FB639 -:101930000F9211242F933F934F935F936F937F9355 -:101940008F939F93AF93BF93CF93DF93EF93FF93C7 -:10195000C091E900CF708091EC00D82FD17080FD4C -:10196000D0E81092E9008091F000877F8093F0002A -:1019700078940E94D90C1092E9008091F000886060 -:101980008093F000CD2BCF70C093E900FF91EF91D1 -:10199000DF91CF91BF91AF919F918F917F916F9187 -:1019A0005F914F913F912F910F900FBE0F901F901D -:1019B00018951F93CF93DF93CDB7DEB7AA970FB6D5 -:1019C000F894DEBF0FBECDBFE5EEF1E08091F100EF -:1019D000819321E0ED3EF207C9F70E9458088091FB -:1019E000E80083FF24C18091E5019091E601492F31 -:1019F00050E04A30510508F01AC1FA01EA5AFF4F87 -:101A00000C948D22803881F0823809F010C18091C9 -:101A1000E9018F708093E9008091EB0085FB8827B6 -:101A200080F91092E90006C08091E1019091E201F5 -:101A3000911182609091E800977F9093E8008093E5 -:101A4000F1001092F100C8C0282F2D7F09F0EFC0DF -:101A5000882319F0823061F0EAC08091E70181307B -:101A600009F0E5C0933009F080E08093E2012BC0DB -:101A70008091E701811127C08091E9018F7009F4FD -:101A8000D6C08093E9002091EB0020FF1CC093306A -:101A900021F48091EB00806214C09091EB00906182 -:101AA0009093EB0021E030E0A90102C0440F551FE4 -:101AB0008A95E2F74093EA001092EA008091EB00E9 -:101AC00088608093EB001092E9008091E800877FA6 -:101AD00086C08111ACC01091E7011F778091E300AF -:101AE0008078812B8093E3008091E800877F80934A -:101AF000E8000E94F60A8091E80080FFFCCF809108 -:101B0000E30080688093E300111102C082E001C00D -:101B100083E08093E4018BC08058823008F087C056 -:101B20008091E7019091E8018C3D53E0950779F5AC -:101B300083E08A838AE289834FB7F894DE011396A3 -:101B400020E03EE051E2E32FF0E050935700E491B3 -:101B500020FF03C0E295EF703F5FEF708E2F90E0A3 -:101B6000EA3010F0C79601C0C0968D939D932F5F09 -:101B7000243149F74FBF8091E800877F8093E800C8 -:101B80006AE270E0CE0101960E94020A14C0AE0122 -:101B90004F5F5F4F6091E9010E944B09BC01892BA7 -:101BA00009F445C09091E800977F9093E8008981FF -:101BB0009A810E94600A8091E8008B778093E80008 -:101BC00036C08038A1F58091E800877F8093E800D7 -:101BD0008091E0018093F1008091E8008E778093FE -:101BE000E8000E94F60A23C0811121C08091E7011C -:101BF0009091E80199270297D4F48091E800877FBB -:101C00008093E8008091E7018093E0010E94F60A4A -:101C10008091E001811106C08091E30087FD02C040 -:101C200081E001C084E08093E4010E944408809137 -:101C3000E80083FF0AC08091E800877F8093E80076 -:101C40008091EB0080628093EB00AA960FB6F89427 -:101C5000DEBF0FBECDBFDF91CF911F9108950895D4 -:101C6000CF938091E4018823A1F0C091E900CF7067 -:101C70009091EC00892F817090FD80E8C82B109224 -:101C8000E9008091E80083FD0E94D90CCF70C093D9 -:101C9000E900CF91089590936901809368010895B8 -:101CA000E0916801F0916901309721F00190F08195 -:101CB000E02D099480E00895E0916801F0916901B8 -:101CC000309721F00280F381E02D09940895E0918E -:101CD0006801F0916901309721F00480F581E02DD1 -:101CE00009940895209166013091670128173907FA -:101CF00071F09093670180936601E0916801F09123 -:101D00006901309721F00680F781E02D099408954C -:101D100020916401309165012817390771F0909383 -:101D2000650180936401E0916801F0916901309749 -:101D300021F00084F185E02D0994089508950C9414 -:101D40009E0E0E945C1A0E940E040C94221BCF92DD -:101D5000DF92EF92FF920F931F93CF93DF93CDB754 -:101D6000DEB72B970FB6F894DEBF0FBECDBF0E9433 -:101D700026048BE6C82E81E0D82E00E010E0E02E8D -:101D8000802F0E941C05F60141916F01F82EF42668 -:101D9000B1F40F5F1F4F0E30110589F78FEF898364 -:101DA0008A831B820E94651A8160782F9D838C83B1 -:101DB00049815A816B818D810E944A0F40C0909168 -:101DC000CC0191FF04C08B870E9422058B8520E007 -:101DD00030E04F2D50E0922FBA01022E02C07595CF -:101DE00067950A94E2F760FF24C02E83EF8221E01A -:101DF00030E0690102C0CC0CDD1C9A95E2F790E05E -:101E00008C219D21892B09F420E028870E94651AE6 -:101E10008160782F9A8789874E815F8168858A855E -:101E20000E944A0FF801E559FE4F8081C826C08202 -:101E300006C02F5F3F4F2630310569F6AACF0E94BA -:101E4000091E0E94500E90916A018917A1F00E940C -:101E5000500E80936A012B960FB6F894DEBF0FBE2A -:101E6000CDBFDF91CF911F910F91FF90EF90DF9049 -:101E7000CF900C9446072B960FB6F894DEBF0FBE9A -:101E8000CDBFDF91CF911F910F91FF90EF90DF9029 -:101E9000CF900895CF93DF93CDB7DEB72B970FB6D2 -:101EA000F894DEBF0FBECDBF4F83588769877A870E -:101EB0008B87DE01119686E0FD0111928A95E9F784 -:101EC00085E0FE01379601900D928A95E1F74981F0 -:101ED0005A816B817C818D819E810E944D162B964B -:101EE0000FB6F894DEBF0FBECDBFDF91CF9108953E -:101EF000CF93C82F882309F4C1C0823859F40E94B7 -:101F0000500E81FDBBC089E30E94EA180E94A2190D -:101F100089E30CC0833879F40E94500E80FDAEC076 -:101F200083E50E94EA180E94A21983E50E942919FC -:101F3000CF910C94A219843859F40E94500E82FD5E -:101F40009DC087E40E94EA180E94A21987E4EECFA0 -:101F50008CEF8C0F813A48F48C2F0E94492081111C -:101F60008DC08C2F0E94EA18E3CF80E28C0F88305E -:101F700048F4C77081E001C0880FCA95EAF70E9453 -:101F80006B19D6CF8BE58C0F833078F4C53A29F0E6 -:101F9000C63A31F083E890E005C081E890E002C0E5 -:101FA00082E890E0CF910C94720E88E58C0F83311B -:101FB00008F064C0C83A39F1C93A41F1CA3A49F166 -:101FC000CB3A51F1CC3A59F1CD3A61F1C03B69F1CC -:101FD000CE3A71F1CF3A79F1C13B81F1C23B89F13F -:101FE000C33B91F1C43B99F1C53BA1F1C63BA9F1BB -:101FF000C73BB1F1C83BB9F1C93BC1F1CA3BC9F11B -:1020000080E090E038C082EE90E035C089EE90E04C -:1020100032C08AEE90E02FC085EB90E02CC086EBBA -:1020200090E029C087EB90E026C08CEC90E023C0C4 -:102030008DEC90E020C083E891E01DC08AE891E03B -:102040001AC082E991E017C084E991E014C081E2EE -:1020500092E011C083E292E00EC084E292E00BC0F5 -:1020600085E292E008C086E292E005C087E292E055 -:1020700002C08AE292E0CF910C94880ECF9108952D -:10208000882309F44BC0823859F40E94500E81FF16 -:1020900045C089E30E94EA180E94A21989E30CC096 -:1020A000833871F40E94500E80FF38C083E50E948F -:1020B000EA180E94A21983E50E9429190C94A2191A -:1020C000843859F40E94500E82FF28C087E40E9491 -:1020D000EA180E94A21987E4EFCF9CEF980F913A7B -:1020E00058F390E2980F983050F4877091E001C057 -:1020F000990F8A95EAF7892F0E947119DFCF9BE526 -:10210000980F933020F480E090E00C94720E885A7F -:10211000833120F480E090E00C94880E08958823A9 -:1021200021F00E946B190C94A2190895882321F0C4 -:102130000E9471190C94A2190895BF92CF92DF9258 -:10214000EF92FF920F931F93CF93DF9300D000D0B5 -:1021500000D0CDB7DEB77C0185E0F701DE01119636 -:1021600001900D928A95E1F7F70183819481892B83 -:1021700009F4DDC2908181818F3F19F49F3F09F4FA -:10218000D6C2F7010281258122952F7099838A8317 -:1021900089819A812E830E94A918182FB92E0E9436 -:1021A000A8180E946F17EB2DE295EF704E2F50E0AC -:1021B000FA01E05AFF4F2E810C948D228B2D807FE7 -:1021C0009B2D9F70F92E882319F0F29480EFF8224E -:1021D000002349F0FF2009F457C28F2D0E947B197C -:1021E0000E94A21951C2812F0E944010FF2009F4C1 -:1021F0009EC28F2D0E94811926960FB6F894DEBFDD -:102200000FBECDBFDF91CF911F910F91FF90EF9047 -:10221000DF90CF90BF900C94A2193B2D307F8B2D77 -:102220008F70303211F08295807F112319F01130B8 -:1022300021F12CC00023B9F0222309F490C12130F0 -:1022400009F08DC126960FB6F894DEBF0FBECDBF44 -:10225000DF91CF911F910F91FF90EF90DF90CF9082 -:10226000BF900C948B19222319F0213009F45FC21E -:102270008E830E948E198E8186C1002321F0223028 -:1022800008F055C26CC1211152C27DC1002321F05A -:10229000222309F464C1F8C1222309F474C109C2DC -:1022A0008B2D86958695837019F08130D1F03FC2D1 -:1022B000002321F0812F9B2D937002C080E090E0DD -:1022C00026960FB6F894DEBF0FBECDBFDF91CF913B -:1022D0001F910F91FF90EF90DF90CF90BF900C94E3 -:1022E000720E002321F0812F9B2D937002C080E09D -:1022F00090E026960FB6F894DEBF0FBECDBFDF91FB -:10230000CF911F910F91FF90EF90DF90CF90BF90F2 -:102310000C94880E812F002319F00E94111D02C019 -:102320000E94791D26960FB6F894DEBF0FBECDBF72 -:10233000DF91CF911F910F91FF90EF90DF90CF90A1 -:10234000BF900C94FE1D8B2D837009F075C0011198 -:10235000EEC1812F829586958770880F880F912F07 -:102360009F70C92ED12CE12CF12C082E04C0CC0C6E -:10237000DD1CEE1CFF1C0A94D2F714FF12C00FE004 -:1023800010E020E030E004C0000F111F221F331FB7 -:102390008A95D2F7C901B80160957095809590959E -:1023A00003C060E070E0CB014B2D4695469543702D -:1023B0004230C1F060F56C297D298E299F2941307A -:1023C00051F126960FB6F894DEBF0FBECDBFDF9158 -:1023D000CF911F910F91FF90EF90DF90CF90BF9022 -:1023E0000C9496176C297D298E299F2926960FB665 -:1023F000F894DEBF0FBECDBFDF91CF911F910F913B -:10240000FF90EF90DF90CF90BF900C94B2170E9496 -:102410009617C701B60126960FB6F894DEBF0FBE19 -:10242000CDBFDF91CF911F910F91FF90EF90DF9083 -:10243000CF90BF900C947A17002319F08B2D8170E8 -:1024400001C08695882309F472C1812F82958695F3 -:102450008770880F880F912F9F70C92ED12CE12C87 -:10246000F12C082E04C0CC0CDD1CEE1CFF1C0A94C1 -:10247000D2F714FF12C00FE010E020E030E004C0FB -:10248000000F111F221F331F8A95D2F7C901B8010F -:10249000609570958095909503C060E070E0CB01E9 -:1024A0004B2D4695469543704230C1F060F56C293E -:1024B0007D298E299F29413051F126960FB6F89437 -:1024C000DEBF0FBECDBFDF91CF911F910F91FF9067 -:1024D000EF90DF90CF90BF900C9470186C297D29FD -:1024E0008E299F2926960FB6F894DEBF0FBECDBF6A -:1024F000DF91CF911F910F91FF90EF90DF90CF90E0 -:10250000BF900C948C180E947018C701B6012696D3 -:102510000FB6F894DEBF0FBECDBFDF91CF911F91F4 -:102520000F91FF90EF90DF90CF90BF900C945418D4 -:10253000103FD1F118F4103E50F4A1C0123F09F43D -:1025400063C008F44CC0133F09F473C098C01F70F7 -:102550008B2D8F710023A1F00E94ED17812F2696FD -:102560000FB6F894DEBF0FBECDBFDF91CF911F91A4 -:102570000F91FF90EF90DF90CF90BF900C948F1051 -:102580000E940E18812F26960FB6F894DEBF0FBE5C -:10259000CDBFDF91CF911F910F91FF90EF90DF9012 -:1025A000CF90BF900C9496100023A9F02111BFC0CA -:1025B0008B2D8F7126960FB6F894DEBF0FBECDBF60 -:1025C000DF91CF911F910F91FF90EF90DF90CF900F -:1025D000BF900C943318223008F0A9C0E9CF002333 -:1025E000A9F08B2D8F7126960FB6F894DEBF0FBE23 -:1025F000CDBFDF91CF911F910F91FF90EF90DF90B2 -:10260000CF90BF900C94ED17002359F38B2D8F7151 -:1026100026960FB6F894DEBF0FBECDBFDF91CF91E7 -:102620001F910F91FF90EF90DF90CF90BF900C948F -:102630000E18002399F08B2D8F7126960FB6F89403 -:10264000DEBF0FBECDBFDF91CF911F910F91FF90E5 -:10265000EF90DF90CF90BF900C94D81726960FB6CE -:10266000F894DEBF0FBECDBFDF91CF911F910F91C8 -:10267000FF90EF90DF90CF90BF900C94CE17002387 -:10268000A9F0222309F4ADCF812F26960FB6F89436 -:10269000DEBF0FBECDBFDF91CF911F910F91FF9095 -:1026A000EF90DF90CF90BF900C94780F222309F425 -:1026B000ADCF812F26960FB6F894DEBF0FBECDBFEB -:1026C000DF91CF911F910F91FF90EF90DF90CF900E -:1026D000BF900C9440104B2D4F70612FC7010E948A -:1026E000AE0226960FB6F894DEBF0FBECDBFDF91C7 -:1026F000CF911F910F91FF90EF90DF90CF90BF90FF -:102700000C94F2164B2D4F70612FC70126960FB611 -:10271000F894DEBF0FBECDBFDF91CF911F910F9117 -:10272000FF90EF90DF90CF90BF900C94E30526963A -:102730000FB6F894DEBF0FBECDBFDF91CF911F91D2 -:102740000F91FF90EF90DF90CF90BF9008950E947F -:1027500088190E945D190E94A2190E94AE1E0E9453 -:10276000FE1D80E090E00E94720E80E090E00C94EC -:10277000880E0E9478190C94A7130E94A918292F7B -:1027800022952F702C3030F42A3048F42250223019 -:1027900078F405C02C3041F02F3031F009C0803E74 -:1027A00048F0803F29F406C093FB882780F90895FC -:1027B00080E0089581E00895CF93DF9300D000D0AA -:1027C0001F92CDB7DEB70F900F900F900F900F9024 -:1027D000DF91CF910895CF93DF9300D000D000D048 -:1027E000CDB7DEB726960FB6F894DEBF0FBECDBFCD -:1027F000DF91CF9108951F93CF93DF93C09179011B -:1028000016E080917A01C81799F0D0E01C9FF00182 -:102810001D9FF00D1124E558FE4F408151816281CA -:102820007381848195810E94EB132196C770E9CF53 -:10283000DF91CF911F9108954091AB015091AC0170 -:102840006091AD017091AE018091AF019091B001A6 -:102850000C94EB138091B00182958F7009F054C0F5 -:102860008091AD01882309F44FC080917901A09136 -:102870007A014091AE015091AF016091AB0170912E -:10288000AC01B6E08A1709F43FC090E0411551054C -:10289000C1F17F3F11F46F3FA1F1B89FF001B99FE3 -:1028A000F00D1124E558FE4F218127132AC0208105 -:1028B000261327C02281211124C0238134812417AB -:1028C000350710F421503109241B350B283C310504 -:1028D000C0F42091B0012F7020612093B00126E058 -:1028E000289FF001299FF00D1124E058FE4F8081B0 -:1028F0008F70806180838BEA91E00E949D100C9420 -:10290000FB1301968770BECF0895CF92DF92EF92AE -:10291000FF920F931F93CF93DF93CDB7DEB76297EC -:102920000FB6F894DEBF0FBECDBF8C0185E0F80175 -:10293000DE011D9601900D928A95E1F7D8014C9128 -:1029400011965C91119712966C918091AE019091C5 -:10295000AF01009709F475C13091AB017091AC01E2 -:102960007F3F19F43F3F09F46CC1F801C380D48064 -:10297000E090AD01EE2009F4BEC02091B001C81670 -:10298000D90628F0D601A81BB90BCD0104C080954B -:1029900090958C0D9D1DFF24F394883C910578F053 -:1029A000F12C207F09F0C4C07C2DD98AC88A89897E -:1029B0000E94DC138BEA91E00E949D10AFC0822F31 -:1029C000807F09F045C0571313C0431311C0611134 -:1029D0000FC02F7020612093B0010E941C148BEA5D -:1029E00091E00E949D108091B001F80185832EC076 -:1029F000CD2819F15F3F11F44F3FF9F0F62E611128 -:102A00001CC08091790120917A0136E0821709F487 -:102A10005BC090E0389FF001399FF00D1124E5581C -:102A2000FE4F7181571306C07081471303C0728136 -:102A3000711103C001968770E9CFF62E662309F461 -:102A40001CC18091B00181608093B001F12C15C14F -:102A5000571309C0431307C0611105C08091B0012D -:102A6000F8018583C8C04D875E878D859E856A8BFA -:102A70000E94BD136A898823D1F16623C1F1209198 -:102A8000B001822F82958F7090E0029774F0809150 -:102A9000AB019091AC0198878F831986DB86CA863B -:102AA0002C87CE0107960E949D1086E0F801ABEAC4 -:102AB000B1E001900D928A95E1F70E942A140E94DC -:102AC0001C14FF24F394D9C04D875E878D859E85A5 -:102AD0000E94A918292F22952F70223008F0C1C01A -:102AE0009F7009F0BBC0805E883008F4C6C0C80182 -:102AF0000E949D10E6CFC816D90608F453C0F6010F -:102B0000E81BF90BCF01883C910508F450C0F12C6B -:102B10007C2DD98AC88A89890E94DC13EBEAF1E00E -:102B200086E0DF011D928A95E9F70E941C14A5C07A -:102B3000571314C0431312C0611110C08091B0012B -:102B4000F8018583C8010E949D1086E0EBEAF1E060 -:102B5000DF011D928A95E9F7FE2C8FC04D875E87B5 -:102B60008D859E856A8B0E94BD136A89882309F42E -:102B7000BECF662309F4BBCF2091B001822F82958E -:102B80008F7090E002970CF490CF8091AB01909100 -:102B9000AC019A8389831B82DD82CC822E83CE0195 -:102BA000019681CF809590958C0D9D1DACCFF62E12 -:102BB000662309F49CCF571333C0431331C02091CF -:102BC000B00120FD24C0822F82958F70482F50E0E5 -:102BD00041155105E1F0D80115962C9315974F300A -:102BE000510549F08F5F982F9295907F822F8F70BB -:102BF000892B15968C93C8010E949D1086E0F801E0 -:102C0000ABEAB1E001900D928A95E1F78ECF86E0B4 -:102C1000F801ABEAB1E001900D928A95E1F72DC081 -:102C20004D875E878D859E850E94BD1381113DCFA6 -:102C30008091B00181608093B001C8010E949D1015 -:102C40001CC0662309F453CF4D875E878D859E8512 -:102C50000E94BD13882309F44ACF27CF811143CFA7 -:102C60000CC0243008F043CF9F7009F43CCFD8014A -:102C700015969C91907F09F036CF8F2D62960FB6F6 -:102C8000F894DEBF0FBECDBFDF91CF911F910F91A2 -:102C9000FF90EF90DF90CF9008951F93CF93DF9335 -:102CA000CDB7DEB72C970FB6F894DEBF0FBECDBF01 -:102CB0004F83588769877A878B879C87CE010796D1 -:102CC0000E948514882371F08A859B85892B09F4DD -:102CD00041C088858F3F09F065C08F818F3F09F023 -:102CE00061C038C086E0FE013796DE011196019082 -:102CF0000D928A95E1F76A857B856115710551F121 -:102D0000FF81E885EF3F11F4FF3F21F120917A0127 -:102D100030E0C9010196877099274091790150E010 -:102D20008417950709F447C0F983EA837D836C8390 -:102D300096E0929FD001939FB00D1124A558BE4FED -:102D4000FE01319601900D929A95E1F780937A01F8 -:102D50000E94FB1316E08091790190917A01891706 -:102D6000B9F1189FC001112485589E4F0E94851407 -:102D7000882371F1E09179011E9FF0011124E5583B -:102D8000FE4F4081518162817381848195810E94CF -:102D9000EB138091790190E00196877099278093D9 -:102DA0007901D9CF4F81588569857A858B859C8536 -:102DB0000E94EB13CFCF0E94B91310927A011092A8 -:102DC0007901EBEAF1E086E0DF011D928A95E9F7EF -:102DD0002C960FB6F894DEBF0FBECDBFDF91CF911A -:102DE0001F910895EF92FF920F931F93CF93DF935C -:102DF0008C01892B09F46CC0F12CEE24E394E801DA -:102E00002196F8018491843740F4843008F051C051 -:102E1000813081F0823019F15BC0853709F444C0FC -:102E2000A8F19CE7980F903708F052C08F770E9466 -:102E3000401041C00E5F1F4FFE01849190E2980F39 -:102E4000983050F48770FE2D01C0FF0F8A95EAF785 -:102E50008F2F0E947B1914C00E94780F2DC00E5F27 -:102E60001F4FFE01849190E2980F983060F48770B4 -:102E7000FE2D01C0FF0F8A95EAF78F2F0E9481195E -:102E80000E94A21919C00E94401016C00E5F1F4F69 -:102E9000FE01C491CC2381F08FE99FE00197F1F707 -:102EA00000C00000C150F6CF0E5F1F4FFE01F4902E -:102EB00003C00E94780F8E018F2D882309F49FCFC5 -:102EC000EFE9FFE03197F1F700C000008150F5CF46 -:102ED000DF91CF911F910F91FF90EF90089508958A -:102EE0006093B5017093B6018093B7019093B801D8 -:102EF0000C94A7130F931F930091B5011091B60185 -:102F00002091B7013091B801DC01CB01802B912BCE -:102F1000A22BB32B8093B5019093B601A093B70178 -:102F2000B093B8011F910F910C94A7130F931F93A7 -:102F30000091B5011091B6012091B7013091B8010F -:102F4000DC01CB0180239123A223B3238093B5011D -:102F50009093B601A093B701B093B8011F910F9160 -:102F60000C94A7130F931F930091B5011091B60114 -:102F70002091B7013091B801DC01CB018027912766 -:102F8000A227B3278093B5019093B601A093B70110 -:102F9000B093B8011F910F910C94A7131092B10137 -:102FA0001092B2011092B3011092B4010C94A713C5 -:102FB00041E050E060E070E004C0440F551F661F20 -:102FC000771F8A95D2F74093B1015093B201609375 -:102FD000B3017093B4010C94A71341E050E060E09A -:102FE00070E004C0440F551F661F771F8A95D2F703 -:102FF0008091B1019091B201A091B301B091B4015F -:10300000482B592B6A2B7B2B4093B1015093B20173 -:103010006093B3017093B4010C94A71341E050E0A6 -:1030200060E070E004C0440F551F661F771F8A954B -:10303000D2F740955095609570958091B10190912F -:10304000B201A091B301B091B401482359236A237E -:103050007B234093B1015093B2016093B30170930D -:10306000B4010C94A71341E050E060E070E004C0AC -:10307000440F551F661F771F8A95D2F78091B101C3 -:103080009091B201A091B301B091B40148275927A2 -:103090006A277B274093B1015093B2016093B3013B -:1030A0007093B4010C94A7130F931F930091B10177 -:1030B0001091B2012091B3013091B401DC01CB0138 -:1030C000802B912BA22BB32B8093B1019093B20153 -:1030D000A093B301B093B4011F910F910C94A71367 -:1030E0000F931F930091B1011091B2012091B30190 -:1030F0003091B401DC01CB0180239123A223B323BF -:103100008093B1019093B201A093B301B093B40145 -:103110001F910F910C94A7130F931F930091B1016E -:103120001091B2012091B3013091B401DC01CB01C7 -:1031300080279127A227B3278093B1019093B201F2 -:10314000A093B301B093B4011F910F910C94A713F6 -:103150000895CF92DF92EF92FF920F931F93CF9338 -:10316000DF938C01C090B101D090B201E090B30127 -:10317000F090B4018091B5019091B601A091B70192 -:10318000B091B801C82AD92AEA2AFB2ACFE1D0E0B7 -:10319000D701C6010C2E04C0B695A79597958795C3 -:1031A0000A94D2F780FF07C0B8018C2F0E9407064F -:1031B0008130910531F4219758F7B80180E00E94E1 -:1031C0000706DF91CF911F910F91FF90EF90DF9055 -:1031D000CF90089590910C019923F1F090910D01F9 -:1031E0009923D1F0982F9695969596959F3080F5D6 -:1031F000E0910E01F0910F01E90FF11D877021E0C0 -:1032000030E0A90102C0440F551F8A95E2F7CA01B8 -:103210009181892B8183089520910E0130910F01B6 -:10322000F90132969FEF40E05191851789F09F3F59 -:1032300019F4511101C0942F4F5F4E30A9F79F3FF1 -:1032400039F0F901E90FF11D97FDFA958283089590 -:10325000089590910C019923F9F090910D01992313 -:10326000D9F0982F9695969596959F3028F5E091F0 -:103270000E01F0910F01E90FF11D877021E030E0A0 -:10328000A90102C0440F551F8A95E2F7CA01809533 -:10329000918189238183089520910E0130910F013E -:1032A000F9013296205F3F4F9081891301C010824F -:1032B0003196E217F307C1F7089581E090E0E091BD -:1032C0000E01F0910F01E80FF91F10820196803175 -:1032D0009105A9F708959091CB01892B8093CB019B -:1032E000089580959091CB0189238093CB01089517 -:1032F0001092CB0108959091CA01892B8093CA0145 -:10330000089580959091CA0189238093CA010895F8 -:103310001092CA0108958093B90108951092B901DD -:10332000089580910E0190910F01FC0131969C014E -:10333000205F3F4F80E0919191118F5FE217F3077B -:10334000D1F70895E0910E01F0910F018091CB012A -:103350008083E0910E01F0910F0190818091CA016C -:10336000892B80838091B901882361F0E0910E015F -:10337000F0910F019081892B80830E949119811116 -:103380001092B90180910E0190910F010C945C0E86 -:10339000CF92DF92EF92FF926C01EE24FF24C114D2 -:1033A000D104E104F10421F0C701B60120E101C01C -:1033B00020E0C72ED82EE92EFF24C114D104E10449 -:1033C000F10419F0285FC701B6016B017C0154E0DC -:1033D000F694E794D794C7945A95D1F7C114D104C1 -:1033E000E104F10419F02C5FC701B6016B017C0107 -:1033F00042E0F694E794D794C7944A95D1F7C11464 -:10340000D104E104F10419F02E5FC701B601DC011B -:10341000CB01B695A79597958795892B8A2B8B2BF2 -:1034200009F02F5F822FFF90EF90DF90CF900895EB -:103430008091E401843011F120E488E190E00FB63E -:10344000F894A895809360000FBE2093600083B726 -:10345000817F846083BF83B7816083BF78948895C0 -:1034600083B78E7F83BF0FB6F894A89580916000D4 -:10347000886180936000109260000FBE08950895E7 -:103480000C943F1ACF930E94401A0E9426040E9477 -:103490003F1AC0E08C2F0E941C05811104C0CF5F31 -:1034A000CE30C1F701C081E0CF9108950E94B913D9 -:1034B0000E94500E0C94460782E084BD93E095BDB7 -:1034C0009AEF97BD80936E0008952FB7F89480917E -:1034D000CD019091CE01A091CF01B091D0012FBF2D -:1034E0000895CF92DF92EF92FF920F931F932FB721 -:1034F000F8944091CD015091CE016091CF0170912F -:10350000D0012FBF6A017B01EE24FF248C0120E053 -:1035100030E0C016D106E206F30610F4415051091E -:103520009A01281B390BC9011F910F91FF90EF9051 -:10353000DF90CF9008951F920F920FB60F92112433 -:103540008F939F93AF93BF938091CD019091CE01C4 -:10355000A091CF01B091D0010196A11DB11D809322 -:10356000CD019093CE01A093CF01B093D001BF9134 -:10357000AF919F918F910F900FBE0F901F90189554 -:103580000E94480BF8942FEF87EA91E62150804083 -:103590009040E1F700C0000087E090EBDC018093F1 -:1035A000ED019093EE01A093EF01B093F0019CE048 -:1035B00088E10FB6F894A895809360000FBE9093B1 -:1035C0006000FFCFEF92FF920F931F93CF93DF9393 -:1035D000D82FC0E08C2F0E941C0500E010E0E82EE0 -:1035E000F12CC701002E02C0959587950A94E2F749 -:1035F00080FD06C00F5F1F4F0630110591F709C00F -:10360000602F7C2F80E00E94E4058D13F3CF81E0D2 -:1036100004C0CF5FCE30F1F680E0DF91CF911F91F3 -:103620000F91FF90EF900895CF93C82F8CE20E94E6 -:10363000E21A882321F08C2FCF910C94E21A80E0BB -:10364000CF910895CF930E94691C811102C00E94FE -:103650004F1CC5E6C15049F00E9426048FE39CE947 -:103660000197F1F700C00000F5CF89E20E94141B1A -:10367000811113C18AE20E94141B81110E944F1C08 -:1036800085E00E94141B81110E94C01A0E94741CC4 -:103690008093CC0187E00E94141B8823A9F18BE161 -:1036A0000E94141B882351F08091CC0181FB2227BA -:1036B00020F991E0922790FB81F90EC08EE00E94E4 -:1036C000141B882361F08091CC0182FB222720F912 -:1036D00091E0922790FB82F98093CC0115C080E1A4 -:1036E0000E94141B9091CC01882341F093FB222768 -:1036F00020F981E0822780FB93F904C0892F80950F -:1037000080FB90F99093CC018091CC010E94781CB1 -:103710000E94861C8093DE0180EE0E94141B882389 -:1037200041F08091DE01982F909590FB80F9809375 -:10373000DE0189E30E94141B882359F08091DE0189 -:1037400081FB222720F991E0922790FB81F9809359 -:10375000DE0182EE0E94141B882359F08091DE0165 -:1037600082FB222720F991E0922790FB82F9809337 -:10377000DE0186EE0E94141B882359F08091DE0141 -:1037800083FB222720F991E0922790FB83F9809315 -:10379000DE0183EE0E94141B882359F08091DE0124 -:1037A00084FB222720F991E0922790FB84F98093F3 -:1037B000DE0185E30E94141B882359F08091DE010D -:1037C00085FB222720F991E0922790FB85F98093D1 -:1037D000DE0181E30E94141B882359F08091DE01F1 -:1037E00086FB222720F991E0922790FB86F98093AF -:1037F000DE0181E10E94141B882359F08091DE01D3 -:1038000087FB222720F991E0922790FB87F980938C -:10381000DE018091DE010E948A1C8091DE0187FB1F -:10382000882780F980930D0187E20E94141BC82F1E -:103830008EE10E94141B8111C2608FE10E94141B53 -:103840008111C46080E20E94141B8111C86081E272 -:103850000E94141B8111C06182E20E94141B81111D -:10386000C06283E20E94141B8111C06484E20E9442 -:10387000141B882311F0C06802C0CC2329F08C2FC0 -:103880000E94811C6C2F03C00E947D1C682F70E079 -:1038900080E090E0CF910C947017CF9108956DEE79 -:1038A0007EEF80E090E00E94C32260E082E090E042 -:1038B0000E94B52260E083E090E00E94B52260E0C3 -:1038C00084E090E00E94B52260E085E090E00C94F6 -:1038D000B52280E090E00E94AF2221E08D3E9E4F15 -:1038E00009F020E0822F089582E090E00C94A72256 -:1038F000682F82E090E00C94B52283E090E00C9475 -:10390000A722682F83E090E00C94B52284E090E039 -:103910000C94A722682F84E090E00C94B52280914B -:10392000D30180FF0BC06091130185E0689FB00157 -:10393000112475956795759567952BC081FF09C012 -:103940006091130185E0689FB0011124759567951A -:1039500020C082FF07C06091130185E0689FB0011D -:10396000112417C09091D4019923D1F060911201D4 -:10397000961788F72091130185E0289F9001112464 -:10398000929FA001939F500D112470E0CA010E94E4 -:1039900079226038710540F46115710519F406C08B -:1039A00065E070E0862F08958FE7089581E008951F -:1039B0008091D30180FF08C06091110170E075957E -:1039C00067957595679521C081FF06C060911101CB -:1039D00070E07595679519C082FF04C06091110170 -:1039E00070E010C09091D401992399F0609110017A -:1039F0009617A0F780911101899FC001112470E0F2 -:103A00000E9479226038710540F46115710519F43E -:103A100006C061E070E0862F08958FE7089581E089 -:103A20000895803F21F40E948F1C819504C0813F3E -:103A300029F40E948F1C8093D7010895823F21F4BE -:103A40000E948F1C819504C0833F29F40E948F1C23 -:103A50008093D6010895893F19F40E94D81C05C0AF -:103A60008A3F31F40E94D81C81958093D801089533 -:103A70008B3F21F40E94D81C819504C08C3F29F40F -:103A80000E94D81C8093D9010895843F21F480912D -:103A9000D501816017C0853F21F48091D5018260F6 -:103AA00011C0863F21F48091D50184600BC0873F0F -:103AB00021F48091D501886005C0883F31F4809160 -:103AC000D50180618093D50108958D3F21F48091C7 -:103AD000D30181600BC08E3F21F48091D3018260BD -:103AE00005C08F3F29F48091D30184608093D30176 -:103AF0000895803F39F48091D70187FF6CC0109200 -:103B0000D70169C0813F29F48091D7011816BCF311 -:103B100062C09091D601823F29F497FF5CC0109259 -:103B2000D60159C0833F19F41916CCF354C0893F0C -:103B300041F48091D80118160CF04DC01092D801B4 -:103B40004AC08A3F29F48091D80187FF44C0F6CF4C -:103B50008B3F39F48091D90187FF3DC01092D90184 -:103B60003AC08C3F29F48091D9011816BCF333C0B8 -:103B7000843F21F48091D5018E7F17C0853F21F4C9 -:103B80008091D5018D7F11C0863F21F48091D501B0 -:103B90008B7F0BC0873F21F48091D501877F05C0C3 -:103BA000883F31F48091D5018F7E8093D50113C079 -:103BB0008D3F21F48091D3018E7F0BC08E3F21F485 -:103BC0008091D3018D7F05C08F3F29F48091D3016F -:103BD0008B7F8093D3018091D60181110EC080919B -:103BE000D70181110AC08091D801811106C080914E -:103BF000D901811102C01092D401089585ED91E0A0 -:103C00000E94670E0E94651A9093D2018093D101A1 -:103C100008951F93CF93DF938091D1019091D201AA -:103C20000E94711AAC019091D401992321F0209146 -:103C3000140130E006C0209115018AE0289F900110 -:103C400011244217530708F485C08091D601C09112 -:103C5000D701D091D8011091D901811107C0C111AC -:103C600075C0D11173C0111171C074C09F3F19F09C -:103C70009F5F9093D401181624F40E948F1C8093A8 -:103C8000D6018091D60187FF05C00E948F1C8195C7 -:103C90008093D6011C1624F40E948F1C8093D701B8 -:103CA0008091D70187FF05C00E948F1C819580936A -:103CB000D7016091D601662331F1C091D701CC23A1 -:103CC00011F1062E000C770B880B990B0E948021B6 -:103CD00023E333E343E35FE30E94E4210E944821AE -:103CE0006093D6016C2FCC0F770B880B990B0E9439 -:103CF000802123E333E343E35FE30E94E4210E9456 -:103D000048216093D7011D1624F40E94D81C80938B -:103D1000D8018091D80187FF05C00E94D81C8195E9 -:103D20008093D801111624F40E94D81C8093D901E5 -:103D30008091D90187FF05C00E94D81C819580938E -:103D4000D901DF91CF911F910C94FE1D9F3F09F087 -:103D50008FCFA0CFDF91CF911F910895E5EDF1E0D6 -:103D600085E0DF011D928A95E9F71092D401109247 -:103D7000D3010895833081F128F4813059F08230E5 -:103D8000D1F00895853009F449C0B8F1863009F4BE -:103D900056C0089580911501262F30E0280F311D5F -:103DA0002F3F310524F4680F6093150108958FEFBC -:103DB00080931501089580911401262F30E0280F7B -:103DC000311D2F3F310524F4680F609314010895CD -:103DD0008FEF80931401089580911301262F30E016 -:103DE000280F311D2F3F310524F4680F6093130114 -:103DF00008958FEF80931301089580911201262F6B -:103E000030E0280F311D2F3F310524F4680F6093F7 -:103E1000120108958FEF809312010895809111018E -:103E2000262F30E0280F311D2F3F310524F4680F75 -:103E30006093110108958FEF80931101089580918F -:103E40001001262F30E0280F311D2F3F310524F4BB -:103E5000680F6093100108958FEF8093100108950B -:103E6000833011F128F4813049F0823091F00895C7 -:103E7000853081F120F18630C1F1089580911501DE -:103E8000681720F4861B8093150108951092150180 -:103E9000089580911401681720F4861B8093140103 -:103EA000089510921401089580911301681720F469 -:103EB000861B809313010895109213010895809139 -:103EC0001201681720F4861B809312010895109246 -:103ED0001201089580911101681720F4861B8093C8 -:103EE0001101089510921101089580911001681731 -:103EF00020F4861B809310010895109210010895FC -:103F00000F931F938D3109F46BC008F03FC08E30C2 -:103F100009F47DC0C0F4873009F46EC068F48630BF -:103F200009F0AFC08091CC01817F8E7F8093CC015E -:103F300081E08093DB01A6C0883009F458C08B3043 -:103F400009F49BC09EC0863109F497C078F4803193 -:103F500009F470C0813109F094C00E94B9139091A6 -:103F60000D0181E0892780930D0187C0893109F413 -:103F700084C08B3109F085C08091CC0181FB222760 -:103F800020F991E0922790FB81F94AC0853309F42A -:103F90005BC048F4873209F457C008F45AC089322C -:103FA00009F452C06EC0833438F48A3308F067C015 -:103FB000883309F462C065C0833409F445C088348D -:103FC00009F05FC00E94B9130FEF13ED20E3015019 -:103FD00010402040E1F700C000000E94C01A4DC010 -:103FE0000E9402210E94500E0E94460746C00E9475 -:103FF000741C0E94861C41C09091CC01892F817055 -:1040000090FF12C0917F9E7F9093CC013BC0809126 -:10401000CC0182FB222720F991E0922790FB82F9C4 -:104020008093CC01992349F18091CC0181608093E8 -:10403000CC0123C08091CC0183FB222720F991E0A1 -:10404000922790FB83F9ECCF61E070E080E090E094 -:1040500010C08D5141E050E060E070E08A019B01AA -:1040600004C0000F111F221F331F8A95D2F7C90108 -:10407000B8010E9470170E94B91381E003C08953F0 -:10408000E9CF80E01F910F91089580E008950C948E -:104090004520CF93C82F8091DB01813079F018F053 -:1040A0008230E9F187C0E0910E01F0910F0180812B -:1040B000813169F0823209F07FC009C0E0910E01C0 -:1040C000F0910F018081813111F0823261F48C2FE7 -:1040D0000E944720811104C08C2F0E94801F1DC0A8 -:1040E00081E090E01AC08C2F0E944520811114C0FD -:1040F000C43179F048F4CB3079F0C03109F060C0B8 -:1041000082E08093DB0108C0C93219F0C83321F086 -:1041100057C01092DB0154C081E0817053C0C93296 -:1041200089F118F5C43171F1A8F4C73009F046C01F -:104130008AE08093150194E19093140193E09093A9 -:1041400013018093120188E08093110188E280932B -:10415000100134C0CE51C63088F5EC2FF0E0E65D9A -:10416000FE4F80818093DA0129C0CE34E9F020F43B -:10417000CB3421F56AE013C0C13579F0C235F1F4D2 -:1041800061E00DC08091DA01882319F01092DA0104 -:1041900015C081E08093DB0115C061E006C080910D -:1041A000DA010E94BA1E0AC06AE08091DA010E9418 -:1041B000301F04C01092DB0180E004C081E002C027 -:1041C00080E0ABCFCF910895E1E8F0E08081886096 -:1041D00080838081816080838FB7F89493E090938F -:1041E000890090ED909388008FBF0895EFE6F0E08E -:1041F0008081826080830895EFE6F0E080818D7F8A -:1042000080830895EFE6F0E0908182E08927808343 -:1042100008951F920F920FB60F9211242F933F9380 -:104220004F935F936F937F938F939F93AF93BF93BE -:10423000EF93FF938091DC019091DD0101969093C3 -:10424000DD018093DC01811103C082E00E944607FA -:10425000E091DD01E695E695F0E0E657FB4FE4914D -:104260008091DC018E1303C080E00E944607FF911D -:10427000EF91BF91AF919F918F917F916F915F91DE -:104280004F913F912F910F900FBE0F901F90189557 -:104290000E944F216894B1110C94DE2108950E9470 -:1042A000C32188F09F5798F0B92F9927B751B0F0E4 -:1042B000E1F0660F771F881F991F1AF0BA95C9F7AA -:1042C00014C0B13091F00E94DD21B1E008950C944A -:1042D000DD21672F782F8827B85F39F0B93FCCF3FD -:1042E000869577956795B395D9F73EF49095809527 -:1042F000709561957F4F8F4F9F4F0895E89409C047 -:1043000097FB3EF490958095709561957F4F8F4F08 -:104310009F4F9923A9F0F92F96E9BB279395F6951E -:10432000879577956795B795F111F8CFFAF4BB0F9C -:1043300011F460FF1BC06F5F7F4F8F4F9F4F16C000 -:10434000882311F096E911C0772321F09EE8872F8A -:10435000762F05C0662371F096E8862F70E060E046 -:104360002AF09A95660F771F881FDAF7880F9695BF -:10437000879597F9089557FD9058440F551F59F0A8 -:104380005F3F71F04795880F97FB991F61F09F3F42 -:1043900079F087950895121613061406551FF2CF6B -:1043A0004695F1DF08C0161617061806991FF1CFBB -:1043B00086957105610508940895E894BB276627E2 -:1043C0007727CB0197F908950E94F7210C94682272 -:1043D0000E945A2238F00E94612220F0952311F0A9 -:1043E0000C9451220C94572211240C94DE210E942B -:1043F000BB2170F3959FC1F3950F50E0551F629F4D -:10440000F001729FBB27F00DB11D639FAA27F00D2D -:10441000B11DAA1F649F6627B00DA11D661F829F54 -:104420002227B00DA11D621F739FB00DA11D621F39 -:10443000839FA00D611D221F749F3327A00D611D56 -:10444000231F849F600D211D822F762F6A2F112438 -:104450009F5750409AF0F1F088234AF0EE0FFF1F6B -:10446000BB1F661F771F881F91505040A9F79E3FC2 -:10447000510580F00C9451220C94DE215F3FE4F34F -:10448000983ED4F3869577956795B795F795E79518 -:104490009F5FC1F7FE2B880F911D9695879597F921 -:1044A000089597F99F6780E870E060E008959FEFB6 -:1044B00080EC089500240A941616170618060906BB -:1044C000089500240A94121613061406050608958A -:1044D000092E0394000C11F4882352F0BB0F40F412 -:1044E000BF2B11F460FF04C06F5F7F4F8F4F9F4F52 -:1044F000089597FB072E16F4009407D077FD09D096 -:104500000E94932207FC05D03EF4909581959F4F21 -:104510000895709561957F4F0895EE0FFF1F0590E8 -:10452000F491E02D0994AA1BBB1B51E107C0AA1FFF -:10453000BB1FA617B70710F0A61BB70B881F991F44 -:104540005A95A9F780959095BC01CD010895F999E8 -:10455000FECF92BD81BDF89A992780B50895A8E154 -:10456000B0E042E050E00C94CA22262FF999FECF29 -:104570001FBA92BD81BD20BD0FB6F894FA9AF99A80 -:104580000FBE019608950E94B522272F0C94B622E3 -:10459000DC01CB01FC01F999FECF06C0F2BDE1BD03 -:1045A000F89A319600B40D9241505040B8F70895F2 -:0445B000F894FFCFAD -:1045B40020024707D707B2077E074A070101BA015D -:1045C40028080A03140A3F4D36394B04FE03C80376 -:1045D4008F0322033B0354036D0301020304050606 -:0445E40007080900BB +:1004D000DAE0DEBFCDBF04B603FE24C08091F00198 +:1004E0009091F101A091F201B091F3018730904B0E +:1004F000A740B04BB9F41092F0011092F1011092A4 +:10050000F2011092F30114BE84B7877F84BF88E1A3 +:100510000FB6F89480936000109260000FBEE0E088 +:10052000FFE3099511E0A0E0B1E0EEE1F8E402C0DC +:1005300005900D92A433B107D9F711E0A4E3B1E01F +:1005400001C01D92A03FB107E1F70E94E9090C9498 +:100550000D240C940000662319F06130F1F03DC0C9 +:10056000FC018281882341F00E94B71B90933501E2 +:100570008093340181EE1CC080913401909135014B +:100580000E94C31B8639910534F486E20E944A100A +:1005900086E20E94121181EE1EC0FC018281882336 +:1005A00051F00E94B71B909335018093340185EE82 +:1005B0000E944A1012C080913401909135010E942E +:1005C000C31B8639910534F487E20E944A1087E202 +:1005D0000E94121185EE0E94121180E090E00895B1 +:1005E00008956091B3017091B4018091B50190912B +:1005F000B6010E94151B56985E9825982D9826984E +:100600002E9827982F98813019F0823021F0089584 +:10061000259A2D9A0895269A2E9A089508950C9455 +:10062000F10256985E9825982D9826982E9827982E +:100630002F988FEF90E0909389008093880090939B +:100640008B0080938A0090938D0080938C00259A74 +:100650002D9A2FEF80E792E0215080409040E1F703 +:1006600000C00000269A2E9A2FEF80E792E02150DA +:1006700080409040E1F700C00000279A2F9A2FEFAA +:1006800080E792E0215080409040E1F700C00000F8 +:1006900025982D982FEF80E792E0215080409040E0 +:1006A000E1F700C0000026982E982FEF80E792E037 +:1006B000215080409040E1F700C0000027982F981B +:1006C00056985E9825982D9826982E9827982F98BA +:1006D000089589EA8093800089E0809381002498BE +:1006E0002C983F988AB18F748AB96E98479A8BB1CB +:1006F000806B8BB9769A0E9411030C94F00280E211 +:10070000809300018091360181110EC00E94D003B8 +:1007100081E0809336012FEF83ED90E321508040FC +:100720009040E1F700C0000080E40E94D60380936F +:10073000000181112EC00E940004809300018111EC +:1007400028C00E94000480930001811122C08FE321 +:100750000E9400048093000181111BC00E94F803D5 +:1007600080E40E94D60380930001811112C08CE0C6 +:100770000E9400048093000181110BC00E940004BC +:1007800080930001811105C08FE30E9400048093D3 +:1007900000010E94F8038091000108950C940E035B +:1007A0001092B9008AE08093B800089594EA90937B +:1007B000BC009091BC0097FFFCCF9091B900987F4E +:1007C000983021F0903111F081E008958093BB00C2 +:1007D00084E88093BC008091BC0087FFFCCF8091AF +:1007E000B900887F883111F0803471F780E0089576 +:1007F00084E98093BC008091BC0084FDFCCF089507 +:100800008093BB0084E88093BC008091BC0087FF8C +:10081000FCCF9091B900987F81E0983209F480E094 +:10082000089584E88093BC008091BC0087FFFCCFD2 +:100830008091BB00089580910001811115C080E472 +:100840000E94D6038093000181110CC082E10E94B6 +:10085000000480930001811105C08FEF0E94000405 +:10086000809300010E94F80384B1807F84B985B130 +:10087000807F85B98AB1837F8AB98BB1837F8BB939 +:100880003E98469808950E947F03809300010E943D +:100890001B0480B38C7080BB81B3836F81BBE6E4A3 +:1008A000F1E0A8E3B1E011921D9281E0E435F80790 +:1008B000D1F70C946903BF92CF92DF92EF92FF922F +:1008C0000F931F93CF93DF9380910001882379F0DA +:1008D000809137018F5F80933701811108C00E949A +:1008E0007F0380930001811102C00E94110308E37D +:1008F00011E0C0E0D0E0DD24D39482E0C82EEE24E5 +:10090000E394F12CC73000F580910001811162C0A1 +:1009100080E40E94D60380930001811112C082E11D +:100920000E9400048093000181110BC0C7010C2EAE +:1009300001C0880F0A94EAF780950E940004809312 +:1009400000010E94F80346C0CA30A1F028F4C83064 +:1009500059F0C93061F005C0CC3089F070F0CD306D +:1009600089F0209A289810C0219A29980DC0229ABF +:100970002A980AC0239A2B9807C0529A01C0539A0A +:100980005B9802C03E9A4698E0EAEA95F1F78FB18B +:1009900079995AC092E081708D25892B7C9B02C089 +:1009A00090E001C094E0892B7D9B02C090E001C0E3 +:1009B00098E0892B7E9B02C090E001C090E1892BDA +:1009C0009FB19095991F9927991F9295990F907EA5 +:1009D000892B0FC08091000181114BC080E40E94DF +:1009E000D60380930001882389F1B12C0E94F8037B +:1009F0008B2DF8019081981719F08083C092010126 +:100A00000E941B0421960F5F1F4FCE30D10509F0C5 +:100A100079CF80910101882371F181508093010188 +:100A2000882339F08FE99FE00197F1F700C00000BB +:100A300022C0A6E4B1E0E8E3F1E081918D9391E07A +:100A4000E634F907D1F717C090E0A5CF83E10E9403 +:100A50000004809300018111C8CF81E40E94D60375 +:100A6000809300018111C1CF0E941104B82EB0946F +:100A7000BDCF80E0BECF0E940F0381E0DF91CF9118 +:100A80001F910F91FF90EF90DF90CF90BF9008954E +:100A9000E82FF0E0EA5BFE4F808108950895089505 +:100AA00096E0799FF001112494E5899FE00DF11DF6 +:100AB0001124E60FF11DEE0FFF1FEC51FF4F859142 +:100AC00094910895880F991F805A9040FC01859158 +:100AD00094910895880F991F80529F4FFC01859132 +:100AE000949108950F931F93CF93DF93EC01811599 +:100AF00020E3920730F5811530E2930708F0B1C08A +:100B00008B3B910588F4883A910508F058C0853AE6 +:100B1000910508F049C08430910508F043C0813048 +:100B2000910509F4B2C1AEC18F3F910509F0D0F52E +:100B3000803F910508F092C0805E9109089790F17E +:100B4000A1C1C11581E5D807A8F4C23090E5D90745 +:100B500008F09FC0C11520E5D20709F486C008F04F +:100B600092C0C11580E4D80708F08CC18E0111270E +:100B7000106CCCC1C11590E8D90758F4C11520E715 +:100B8000D20708F07BC1C11530E6D30708F423C1B2 +:100B900079C1C11580E9D80708F074C18E011F70B2 +:100BA000106AB4C18E01B2C1853A910509F470C1D1 +:100BB000863A910509F46FC103E810E4A7C1883AA9 +:100BC000910509F46BC1893A910509F46AC18A3A21 +:100BD000910509F469C18B3A910509F468C18C3A11 +:100BE000910509F467C18D3A910509F466C1803B0E +:100BF000910509F465C18E3A910509F464C18F3AF3 +:100C0000910509F463C1813B910509F462C1823BFE +:100C1000910509F461C1833B910509F460C1843BEE +:100C2000910509F45FC1853B910509F45EC1863BDE +:100C3000910509F45DC1873B910509F45CC1883BCE +:100C4000910509F45BC1893B910509F45AC18A3BBE +:100C5000910509F059C10AE216E458C18C011065EA +:100C600055C19F700E946A0552C10E94A4149FEF53 +:100C700024E33CE0915020403040E1F700C0000008 +:100C80000E94111C43C18091CF0181608093CF01EC +:100C90003DC10E94B91D811102C00E949F1D0E948A +:100CA000D61D90E09093F0018093EF01C23080E573 +:100CB000D80721F48091EF01816086C0C43090E5AF +:100CC000D90721F48091EF0182607EC0C63020E513 +:100CD000D20721F48091EF01846076C0C83030E5FE +:100CE000D30719F48091EF0127C0CA3080E5D807F7 +:100CF00021F48091EF01806167C0CC3090E5D90785 +:100D000021F48091EF0180625FC0CE3020E5D207F0 +:100D100021F48091EF01806457C0C03130E5D307E2 +:100D200021F48091EF0180684FC0C23180E5D8077F +:100D300029F48091EF018460886046C0C33090E55B +:100D4000D90721F48091EF018E7F3EC0C53020E5A8 +:100D5000D20721F48091EF018D7F36C0C73030E596 +:100D6000D30721F48091EF018B7F2EC0C93080E53D +:100D7000D80719F48091EF0126C0CB3090E5D90750 +:100D800021F48091EF018F7E1FC0CD3020E5D20786 +:100D900021F48091EF018F7D17C0CF3030E5D3076C +:100DA00021F48091EF018F7B0FC0C13180E5D8071E +:100DB00021F48091EF018F7707C0C331D04531F422 +:100DC0008091EF018B7F877F8093EF018091EF010E +:100DD0000E94DA1D9BC08D2F99278F709927813033 +:100DE0009105E9F48E01037011279C0102C0220FC6 +:100DF000331F0A95E2F789011C68CE0164E0880F71 +:100E0000991F6A95E1F788279370082B192B73E0D7 +:100E1000CC0FDD1F7A95E1F7C076DD272CC082303C +:100E2000910529F41C2F0027016F106A6FC08330D1 +:100E3000910561F4CE018370992701E010E002C0B2 +:100E4000000F111F8A95E2F71C680EC0049709F085 +:100E50005DC0CE018370992701E010E002C0000F51 +:100E6000111F8A95E2F71A6843E0CC0FDD1F4A95FF +:100E7000E1F7C07ED7700C2B1D2B48C08E011F7070 +:100E8000106244C000E010E041C001E010E03EC04C +:100E900001E810E43BC002E810E438C002EE14E4BC +:100EA00035C009EE14E432C00AEE14E42FC005EB9D +:100EB00014E42CC006EB14E429C007EB14E426C0AC +:100EC0000CEC14E423C00DEC14E420C003E815E49A +:100ED0001DC00AE815E41AC002E915E417C004E9C8 +:100EE00015E414C001E216E411C003E216E40EC0DA +:100EF00004E216E40BC005E216E408C006E216E4BC +:100F000005C007E216E402C000E014E4C801DF9166 +:100F1000CF911F910F91089596E0799FF0011124D0 +:100F200094E5899FE00DF11D1124E60FF11DEE0FF0 +:100F3000FF1FEC51FF4F85919491803E9105E0F4A5 +:100F4000803C910558F58133910509F46FC048F450 +:100F50008932910509F463C08A32910509F46DC0A4 +:100F600072C089339105E9F082389105D1F085335B +:100F7000910509F44DC067C0833E910581F138F4B5 +:100F8000803E9105B9F0823E9105D9F05CC0863E65 +:100F9000910561F1873E9105A1F155C00E9462055E +:100FA00008952091EF0120FD02C021FF4CC080EE8A +:100FB00090E049C08091EF0180FFF9CF89E390E094 +:100FC00042C08091EF0182FF0EC08091EF0184FF4B +:100FD00003C080E090E037C083EE90E034C08091A1 +:100FE000EF0182FFF2CF82EE90E02DC08091EF0101 +:100FF00083FF0BC08091EF0184FDEBCF87EE90E083 +:1010000022C08091EF0183FFF5CF86EE90E01BC0F8 +:101010008091EF0185FF07C089E290E014C08091C4 +:10102000EF0185FFF9CF85E390E00DC08091EF01DE +:1010300086FF07C08AE290E006C08091EF0186FF3C +:10104000F9CF81E390E00E947205089508950C9411 +:101050002608809164010895CF93DF9300D01F92FA +:10106000CDB7DEB72091E601243019F523E02983BE +:101070009B838A832093E9008FEF9091E800815051 +:1010800095FD06C095ED9A95F1F700008111F5CF19 +:101090008091E80085FF0DC040E050E063E070E023 +:1010A000CE0101960E94960A8091E8008E77809387 +:1010B000E8000F900F900F90DF91CF910895CF939C +:1010C000DF9300D01F92CDB7DEB72091E601243028 +:1010D00021F522E029839B838A8383E08093E900C2 +:1010E0008FEF9091E800815095FD06C095ED9A959F +:1010F000F1F700008111F5CF8091E80085FF0DC068 +:1011000040E050E063E070E0CE0101960E94960A54 +:101110008091E8008E778093E8000F900F900F90F9 +:10112000DF91CF9108952091E6012430F1F422E07F +:101130002093E9002FEF3091E800215035FD06C0E3 +:1011400035ED3A95F1F700002111F5CF2091E80037 +:1011500025FF0BC040E050E065E070E00E94960A79 +:101160008091E8008E778093E8000895CF93DF9315 +:10117000EC018091E601843009F046C090910C01A9 +:101180009923D9F090910D019923B9F08093E9004A +:101190008FEF9091E800815095FD06C095E19A95FA +:1011A000F1F700008111F5CF8091E80085FF2CC098 +:1011B00040E050E060E170E017C081E08093E9001A +:1011C0008FEF9091E800815095FD06C095ED9A95BE +:1011D000F1F700008111F5CF8091E80085FF14C080 +:1011E00040E050E068E070E0CE010E94960A8091F5 +:1011F000E8008E778093E80080E1FE01A4E5B1E08D +:1012000001900D928A95E1F7DF91CF910895809139 +:10121000E501811109C00E94280C0E94850C809173 +:10122000E20084608093E20008951092E501089541 +:1012300008950C9435220E94A81B0E943B220E9414 +:10124000220F0C94270842E061EC81E00E94A20B7F +:1012500042E061EC82E00E94A20B42E061EC83E09C +:101260000E94A20B42E161EC84E00C94A20B8091FD +:10127000E801833009F455C030F4813071F08230D8 +:1012800009F48EC008958A3009F47AC08B3009F4CD +:1012900060C0893009F09CC020C08091E701813A8C +:1012A00009F096C08091E800877F8093E8008091E4 +:1012B000EB019091EC01892B21F060E080E090E05F +:1012C00003C060E184E591E070E00E94DF0A809154 +:1012D000E8008B778093E80008958091E7018132E0 +:1012E00009F076C08091EB019091EC01009719F024 +:1012F000039709F06DC08091E800877F8093E80034 +:101300008091E80082FD05C08091E6018111F8CF4F +:101310005FC08091F100809364018091E8008B7739 +:1013200053C08091E701813A09F052C08091EB01EE +:101330009091EC01892B09F04BC08091E800877FE8 +:101340008093E8008091E80080FFFCCF80910C0141 +:1013500036C08091E7018132D9F58091EB019091FF +:10136000EC01892BA9F58091E800877F8093E80044 +:101370000E94D70B8091E90180930C010C94A41476 +:101380008091E701813221F58091E800877F809389 +:10139000E8000E94D70B8091EA01809365010895CF +:1013A0008091E701813AA1F48091E800877F8093E2 +:1013B000E8008091E80080FFFCCF80916501809378 +:1013C000F1008091E8008E778093E8000C94D70BB1 +:1013D000089584B7877F84BF88E10FB6F89480931F +:1013E0006000109260000FBE90E080E80FB6F894A5 +:1013F00080936100909361000FBE0E94710F0E9464 +:10140000280C0E94850C8091E20084608093E200A9 +:1014100078940E94000F0E94730F82E091E00E9476 +:101420001D0F0E9423228091E601853069F40E94FD +:10143000681B8091E4018823B1F30E94931B8823E9 +:1014400091F30E94800AEFCF0E94790FECCF292FF1 +:10145000332723303105A9F06CF42130310509F42C +:1014600042C02230310509F043C08DE690E020E112 +:1014700033E042C021323105C9F02232310519F181 +:1014800037C099278130910541F08230910541F0B4 +:10149000892B71F5ECE0F3E005C0E4EFF2E002C067 +:1014A000ECEDF2E0849190E09F0126C0643000F5FD +:1014B000E62FF0E0EE0FFF1FEE5DFE4F2081318141 +:1014C00089E090E019C0643098F4E62FF0E0DF0185 +:1014D000AA0FBB1FA65EBE4F2D913C91EA5EFE4F48 +:1014E000808190E009C082E190E02DE733E004C004 +:1014F00080E090E020E030E0FA013183208308951D +:1015000080E189BD82E189BD09B400FEFDCF8091F3 +:10151000D8008F7D8093D8008091E0008260809316 +:10152000E0008091E00081FDFCCF0895CF92DF9232 +:10153000EF92FF920F931F93CF93DF937C018B0168 +:10154000EA010E94F80B811131C0209731F08881A7 +:101550009981081B190BE80EF91EC12CD12C01151D +:10156000110519F18091E80085FD14C08091E80013 +:101570008E778093E800209741F0888199818C0DC7 +:101580009D1D9983888385E011C00E94F80B8823F4 +:1015900031F30CC0F70181917F018093F10001507C +:1015A0001109FFEFCF1ADF0ADACF80E0DF91CF9188 +:1015B0001F910F91FF90EF90DF90CF9008952091B1 +:1015C000ED013091EE012617370748F061157105DE +:1015D00039F42091E8002E772093E80001C0B9018A +:1015E000FC0120E061157105B9F18091E6018823C5 +:1015F00009F440C0853009F43FC08091E80083FDC4 +:101600003DC08091E80082FF06C08091E80082FF23 +:1016100026C080E008958091E80080FFE3CF20910C +:10162000F3008091F20090E0922B6115710551F06A +:101630008830910538F421912093F10061507109AF +:101640000196F3CF21E0089709F020E08091E800AF +:101650008E778093E800C6CF2111C7CFD6CF809177 +:10166000E601882339F0853039F08091E80083FF66 +:10167000CCCF04C082E0089583E0089581E008950E +:101680002091ED013091EE012617370748F06115E2 +:10169000710539F42091E8002E772093E80001C00D +:1016A000B901FC0120E061157105C1F18091E601ED +:1016B000882309F441C0853009F440C08091E800D6 +:1016C00083FD3EC08091E80082FF06C08091E80063 +:1016D00082FF27C080E008958091E80080FFE3CF7B +:1016E0002091F3008091F20090E0922B611571053A +:1016F00059F08830910540F424912093F1003196FF +:10170000615071090196F2CF21E0089709F020E0BD +:101710008091E8008E778093E800C5CF2111C6CF75 +:10172000D5CF8091E601882339F0853039F080915A +:10173000E80083FFCBCF04C082E0089583E00895E2 +:1017400081E00895982F973058F59093E900981705 +:1017500039F07091EC002091ED005091F00003C041 +:10176000242F762F50E021FF19C03091EB003E7FEF +:101770003093EB003091ED003D7F3093ED003091E0 +:10178000EB0031603093EB007093EC002093ED00A0 +:101790005093F0002091EE0027FF07C09F5FD3CF4A +:1017A0008F708093E90081E0089580E00895809132 +:1017B000E70187FD05C08091E80080FF0EC012C0E0 +:1017C0008091E80082FD05C08091E6018111F8CF8B +:1017D00008958091E8008B7708C08091E60181111F +:1017E000EACF08958091E8008E778093E80008950D +:1017F0008091E4009091E50045E62091EC0020FF07 +:1018000021C02091E80020FD21C02091E601222383 +:1018100089F0253089F02091EB0025FD0FC0209143 +:10182000E4003091E5002817390739F3415041F0C1 +:10183000C901E3CF82E0089583E0089581E008952F +:1018400084E008952091E80022FFDFCF80E0089532 +:101850000E94960C0E949E0CE0EEF0E08081816078 +:101860008083E8EDF0E080818F77808319BCA7ED5D +:10187000B0E08C918E7F8C9380818F7E80831092DC +:10188000E50108950F931F93CF93DF930E94960C69 +:101890000E949E0CC8EDD0E088818F778883888174 +:1018A0008068888388818F7D888319BC1092E601C7 +:1018B0001092E2011092E4011092E30100EE10E0B8 +:1018C000F80180818B7F808388818160888342E0FA +:1018D00060E080E00E94A20BE1EEF0E080818E7F6C +:1018E0008083E2EEF0E08081816080838081886087 +:1018F0008083F80180818E7F8083888180618883E6 +:10190000DF91CF911F910F910895E8EDF0E0808174 +:101910008F7E8083E7EDF0E080818160808384E0CA +:1019200082BF81E08093E5010C94420CE8EDF0E089 +:1019300080818E7F80831092E20008951092DA00F9 +:101940001092E10008951F920F920FB60F9211248A +:101950002F933F934F935F936F937F938F939F93B7 +:10196000AF93BF93EF93FF938091E10082FF0BC091 +:101970008091E20082FF07C08091E1008B7F80931D +:10198000E1000E94FF0E8091DA0080FF1FC080916D +:10199000D80080FF1BC08091DA008E7F8093DA0030 +:1019A0008091D90080FF0DC080E189BD82E189BDB1 +:1019B00009B400FEFDCF81E08093E6010E94070993 +:1019C00005C019BC1092E6010E9415098091E10042 +:1019D00080FF19C08091E20080FF15C08091E20075 +:1019E0008E7F8093E2008091E20080618093E2002C +:1019F0008091D80080628093D80019BC85E08093E4 +:101A0000E6010E9419098091E10084FF30C08091B5 +:101A1000E20084FF2CC080E189BD82E189BD09B468 +:101A200000FEFDCF8091D8008F7D8093D8008091FB +:101A3000E1008F7E8093E1008091E2008F7E8093B1 +:101A4000E2008091E20081608093E2008091E201F7 +:101A5000882311F084E007C08091E30087FF02C073 +:101A600083E001C081E08093E6010E941B09809120 +:101A7000E10083FF29C08091E20083FF25C08091AF +:101A8000E100877F8093E10082E08093E60110927D +:101A9000E2018091E1008E7F8093E1008091E2007D +:101AA0008E7F8093E2008091E20080618093E2006B +:101AB00042E060E080E00E94A20B8091F00088602C +:101AC0008093F0000E941809FF91EF91BF91AF91B0 +:101AD0009F918F917F916F915F914F913F912F9146 +:101AE0000F900FBE0F901F9018951F920F920FB678 +:101AF0000F9211242F933F934F935F936F937F9394 +:101B00008F939F93AF93BF93CF93EF93FF93C09126 +:101B1000E900CF708091EC001092E9008091F00014 +:101B2000877F8093F00078940E94B10D1092E900B5 +:101B30008091F00088608093F000C093E900FF91ED +:101B4000EF91CF91BF91AF919F918F917F916F91C5 +:101B50005F914F913F912F910F900FBE0F901F906B +:101B600018951F93CF93DF93CDB7DEB7AA970FB623 +:101B7000F894DEBF0FBECDBFE7EEF1E08091F1003B +:101B8000819321E0EF3EF207C9F70E943709809167 +:101B9000E80083FF1CC12091E7013091E801832F09 +:101BA00090E08A30910508F012C1FC01EA5AFF4F1B +:101BB0000C94BD23203881F0223809F008C18091AF +:101BC000EB018F708093E9008091EB0085FB882703 +:101BD00080F91092E90006C08091E3019091E40140 +:101BE000911182609091E800977F9093E800809334 +:101BF000F1001092F100C5C0822F8D7F09F0E7C07F +:101C0000222319F0223061F0E2C08091E901813095 +:101C100009F0DDC0333009F080E08093E40128C092 +:101C20008091E901811124C02091EB012F7009F40A +:101C3000CEC02093E9008091EB0080FF19C0809115 +:101C4000EB00333011F4806211C080618093EB00AF +:101C500081E090E0022E01C0880F0A94EAF7809399 +:101C6000EA001092EA008091EB0088608093EB001C +:101C70001092E9008091E800877F86C02111A7C0FB +:101C80001091E9011F778091E3008078812B809388 +:101C9000E3008091E800877F8093E8000E94D70BE3 +:101CA0008091E80080FFFCCF8091E3008068809302 +:101CB000E300112311F083E001C082E08093E6018C +:101CC00086C02058223008F082C08091E9019091AE +:101CD000EA018C3D23E0920779F583E08A838AE26A +:101CE00089834FB7F894DE01139620E03EE051E27D +:101CF000E32FF0E050935700E49120FF03C0E295FA +:101D0000EF703F5FEF708E2F90E0EA3010F0C796D3 +:101D100001C0C0968D939D932F5F243149F74FBF2B +:101D20008091E800877F8093E8006AE270E0CE014E +:101D300001960E94DF0A14C0AE014F5F5F4F6091B1 +:101D4000EB010E94270A009709F441C02091E800A6 +:101D5000277F2093E800BC0189819A810E94400B73 +:101D60008091E8008B778093E80031C0203879F5C6 +:101D70008091E800877F8093E8008091E201809362 +:101D8000F1008091E8008E778093E8000E94D70BE5 +:101D90001EC021111CC09091E9019230C0F48091C5 +:101DA000E800877F8093E8009093E2010E94D70BC0 +:101DB0008091E201811104C08091E30087FF02C09D +:101DC00084E001C081E08093E6010E9423098091B4 +:101DD000E80083FF0AC08091E800877F8093E800D5 +:101DE0008091EB0080628093EB00AA960FB6F89486 +:101DF000DEBF0FBECDBFDF91CF911F910895089533 +:101E0000CF938091E6018823B1F08091E9008F7033 +:101E10009091EC0090FF02C090E801C090E0C92FC3 +:101E2000C82B1092E9008091E80083FD0E94B10D5B +:101E3000CF70C093E900CF91089590936B01809388 +:101E40006A010895E0916A01F0916B01309721F0E9 +:101E50000190F081E02D099480E00895E0916A01FD +:101E6000F0916B01309721F00280F381E02D09940D +:101E70000895E0916A01F0916B01309721F00480A0 +:101E8000F581E02D09940895209168013091690150 +:101E90008217930771F09093690180936801E09134 +:101EA0006A01F0916B01309721F00680F781E02DF7 +:101EB0000994089520916601309167018217930774 +:101EC00071F09093670180936601E0916A01F0914F +:101ED0006B01309721F00084F185E02D099408957D +:101EE00008950C94700F0E94AE1B0E9443040C9442 +:101EF000741CCF92DF92EF92FF920F931F93CF93B8 +:101F0000DF93CDB7DEB72B970FB6F894DEBF0FBEC9 +:101F1000CDBF0E945B043DE6E32E31E0F32E00E0EE +:101F200010E0C02E802F0E944805F701D1907F015C +:101F3000D826B1F40F5F1F4F0E30110591F78FEFC8 +:101F400089838A831B820E94B71B8160782F9D83BF +:101F50008C8349815A816B818D810E941C1041C004 +:101F60009091CF0191FF04C08B870E944E058B8515 +:101F700020E030E04D2D50E0922FBA01022E02C039 +:101F8000759567950A94E2F760FF25C02E83CF828E +:101F9000EE24E394F12C02C0EE0CFF1C9A95E2F7BC +:101FA00090E08E219F2121E0892B09F420E02887F1 +:101FB0000E94B71B8160782F9A8789874E815F8145 +:101FC00068858A850E941C10F801E359FE4F8081C4 +:101FD0008E25808306C02F5F3F4F2630310561F686 +:101FE000A9CF0E94581F10916C010E94220F181750 +:101FF000A1F00E94220F80936C012B960FB6F894EB +:10200000DEBF0FBECDBFDF91CF911F910F91FF902B +:10201000EF90DF90CF900C9427082B960FB6F89492 +:10202000DEBF0FBECDBFDF91CF911F910F91FF900B +:10203000EF90DF90CF900895CF93DF93CDB7DEB7C9 +:102040002B970FB6F894DEBF0FBECDBF4F835887D6 +:1020500069877A878B87DE01119686E0FD011192F0 +:102060008A95E9F785E0FE01379601900D928A95F1 +:10207000E1F749815A816B817C818D819E810E942B +:1020800070172B960FB6F894DEBF0FBECDBFDF9151 +:10209000CF910895CF93C82F882309F4C1C0823807 +:1020A00059F40E94220F81FDBBC089E30E941C1AD3 +:1020B0000E94E61A89E30CC0833879F40E94220F4B +:1020C00080FDAEC083E50E941C1A0E94E61A83E5DB +:1020D0000E945C1ACF910C94E61A843859F40E943D +:1020E000220F82FD9DC087E40E941C1A0E94E61AFE +:1020F00087E4EECF8CEF8C0F813A48F48C2F0E944E +:102100008B2181118DC08C2F0E941C1AE3CF80E29D +:102110008C0F883048F4C77081E001C0880FCA95E1 +:10212000EAF70E949D1AD6CF8BE58C0F833078F4A6 +:10213000C53A29F0C63A31F482E890E005C081E85A +:1021400090E002C083E890E0CF910C94440F88E5C2 +:102150008C0F833108F064C0C83A39F1C93A41F1B3 +:10216000CA3A49F1CB3A51F1CC3A59F1CD3A61F141 +:10217000C03B69F1CE3A71F1CF3A79F1C13B81F1BF +:10218000C23B89F1C33B91F1C43B99F1C53BA1F13D +:10219000C63BA9F1C73BB1F1C83BB9F1C93BC1F19D +:1021A000CA3BC9F58AE292E038C082EE90E035C0C1 +:1021B00089EE90E032C08AEE90E02FC085EB90E08F +:1021C0002CC086EB90E029C087EB90E026C08CEC19 +:1021D00090E023C08DEC90E020C083E891E01DC02A +:1021E0008AE891E01AC082E991E017C084E991E0A1 +:1021F00014C081E292E011C083E292E00EC084E25A +:1022000092E00BC085E292E008C086E292E005C051 +:1022100087E292E002C080E090E0CF910C945A0FE8 +:10222000CF910895882309F44BC0823859F40E9455 +:10223000220F81FF45C089E30E941C1A0E94E61A02 +:1022400089E30CC0833871F40E94220F80FF38C0EC +:1022500083E50E941C1A0E94E61A83E50E945C1A1C +:102260000C94E61A843859F40E94220F82FF28C089 +:1022700087E40E941C1A0E94E61A87E4EFCF9CEFC5 +:10228000980F913A58F390E2980F983050F4877075 +:1022900091E001C0990F8A95EAF7892F0E94A31A4D +:1022A000DFCF9BE5980F933020F480E090E00C9412 +:1022B000440F885A833120F480E090E00C945A0F48 +:1022C0000895882321F00E949D1A0C94E61A08951F +:1022D000882321F00E94A31A0C94E61A0895CF9245 +:1022E000DF92EF92FF920F931F93CF93DF93CDB7BF +:1022F000DEB728970FB6F894DEBF0FBECDBF8C01B6 +:1023000085E0F801DE01119601900D928A95E1F7C2 +:10231000F801D080E180F280558152955F70238171 +:102320003481232B39F0FFEFEF1206C081E0DF127A +:1023300003C003C081E001C080E080FDE2C2C801AB +:102340005F830E94CE03D982EA8269817A818F2DD0 +:102350000E94181A9E8388870E94CC190E949F1899 +:102360004E815F816885FF2029F00E94BA1A688536 +:102370005F814E81E42FE295EF70F0E0E05AFF4F6D +:102380000C94BD23842F807F142F1F70882311F09D +:102390001295107FFF20B1F0112309F467C280E28B +:1023A000860F883028F4812F68870E949D1A04C008 +:1023B000812F68870E94AD1A688568870E94E61A97 +:1023C000688554C2862F68870E9412116885112380 +:1023D00009F497C2605E812F683018F40E94A31A36 +:1023E00002C00E94B31A28960FB6F894DEBF0FBE43 +:1023F000CDBFDF91CF911F910F91FF90EF90DF90B4 +:10240000CF900C94E61A242F207F842F8F702032D7 +:1024100011F08295807F662319F0613019F12BC08D +:10242000FF20B1F0552309F493C1513009F090C158 +:1024300028960FB6F894DEBF0FBECDBFDF91CF91C7 +:102440001F910F91FF90EF90DF90CF900C94CD1AD9 +:10245000552319F0513009F454C28E830E94D01ACA +:102460008E8189C1FF2021F0523008F04AC270C12C +:10247000511147C280C1FF2021F0552309F468C1E2 +:10248000F5C1552309F477C105C2242F2695269559 +:10249000237030E02115310521F021303105C9F0DC +:1024A00030C2FF2021F0862F942F937002C080E06D +:1024B00090E028960FB6F894DEBF0FBECDBFDF9137 +:1024C000CF911F910F91FF90EF90DF90CF900C94E0 +:1024D000440FFF2021F0862F942F937002C080E0DC +:1024E00090E028960FB6F894DEBF0FBECDBFDF9107 +:1024F000CF911F910F91FF90EF90DF90CF900C94B0 +:102500005A0F862FFF2019F00E94601E02C00E9401 +:10251000C81E28960FB6F894DEBF0FBECDBFDF9160 +:10252000CF911F910F91FF90EF90DF90CF900C947F +:102530004D1F842F837009F076C0F110E2C1262F61 +:10254000229526952770220F220F862F8F70C82E76 +:10255000D12CE12CF12C022E04C0CC0CDD1CEE1C85 +:10256000FF1C0A94D2F764FF10C06FE070E080E0B7 +:1025700090E004C0660F771F881F991F2A95D2F735 +:10258000609570958095909503C060E070E0CB01F8 +:10259000242F269526952370422F50E04230510576 +:1025A000D1F04330510559F16C297D298E299F299D +:1025B0004130510541F128960FB6F894DEBF0FBEA9 +:1025C000CDBFDF91CF911F910F91FF90EF90DF90E2 +:1025D000CF900C94C4186C297D298E299F292896A8 +:1025E0000FB6F894DEBF0FBECDBFDF91CF911F9124 +:1025F0000F91FF90EF90DF90CF900C94DE180E9427 +:10260000C418C701B60128960FB6F894DEBF0FBEF6 +:10261000CDBFDF91CF911F910F91FF90EF90DF9091 +:10262000CF900C94AA18FF2019F0842F817001C05C +:102630008695882309F465C1262F22952695277053 +:10264000220F220F862F8F70C82ED12CE12CF12C57 +:10265000022E04C0CC0CDD1CEE1CFF1C0A94D2F729 +:1026600064FF10C06FE070E080E090E004C0660F8F +:10267000771F881F991F2A95D2F7609570958095CE +:10268000909503C060E070E0CB01242F269526953D +:102690002370422F50E042305105D1F043305105B4 +:1026A00059F16C297D298E299F294130510541F12D +:1026B00028960FB6F894DEBF0FBECDBFDF91CF9145 +:1026C0001F910F91FF90EF90DF90CF900C9498198D +:1026D0006C297D298E299F2928960FB6F894DEBF94 +:1026E0000FBECDBFDF91CF911F910F91FF90EF9063 +:1026F000DF90CF900C94B2190E949819C701B601CF +:1027000028960FB6F894DEBF0FBECDBFDF91CF91F4 +:102710001F910F91FF90EF90DF90CF900C947E1956 +:10272000603FC9F118F4603E50F49BC0623F09F469 +:1027300060C008F44AC0633F09F46FC092C0162F0E +:102740001F70842F8F71FF2099F00E941719812F1D +:1027500028960FB6F894DEBF0FBECDBFDF91CF91A4 +:102760001F910F91FF90EF90DF90CF900C9461112B +:102770000E943819812F28960FB6F894DEBF0FBE3D +:10278000CDBFDF91CF911F910F91FF90EF90DF9020 +:10279000CF900C946811FF20A1F05111B2C0842F8A +:1027A0008F7128960FB6F894DEBF0FBECDBFDF91B4 +:1027B000CF911F910F91FF90EF90DF90CF900C94ED +:1027C0005D19523008F09DC0EACFFF20A1F0842FA0 +:1027D0008F7128960FB6F894DEBF0FBECDBFDF9184 +:1027E000CF911F910F91FF90EF90DF90CF900C94BD +:1027F0001719FF2061F3842F8F7128960FB6F89474 +:10280000DEBF0FBECDBFDF91CF911F910F91FF9023 +:10281000EF90DF90CF900C943819FF2091F0842F27 +:102820008F7128960FB6F894DEBF0FBECDBFDF9133 +:10283000CF911F910F91FF90EF90DF90CF900C946C +:10284000021928960FB6F894DEBF0FBECDBFDF91F8 +:10285000CF911F910F91FF90EF90DF90CF900C944C +:10286000F818FF20A1F0552309F4B1CF862F289640 +:102870000FB6F894DEBF0FBECDBFDF91CF911F9191 +:102880000F91FF90EF90DF90CF900C944A1055235A +:1028900009F4B1CF862F28960FB6F894DEBF0FBE8D +:1028A000CDBFDF91CF911F910F91FF90EF90DF90FF +:1028B000CF900C9412114F70C8010E94AB02289661 +:1028C0000FB6F894DEBF0FBECDBFDF91CF911F9141 +:1028D0000F91FF90EF90DF90CF900C941D184F70E8 +:1028E000C80128960FB6F894DEBF0FBECDBFDF91AA +:1028F000CF911F910F91FF90EF90DF90CF900C94AC +:102900004F0528960FB6F894DEBF0FBECDBFDF91FE +:10291000CF911F910F91FF90EF90DF90CF9008958E +:102920000E94BA1A0E94CA1A0E948F1A0E94E61ABE +:102930000E94F91F0E944D1F80E090E00E94440F0A +:1029400080E090E00C945A0F0E94AA1A0C94901404 +:102950000E940D1A292F22952F7030E02C3031055E +:102960004CF42A3031056CF4225031092230310503 +:1029700090F407C02C30310551F02F30310539F07B +:102980000AC0803E10F0803F31F481E0089593FB4F +:10299000882780F9089580E00895CF93DF9300D0D1 +:1029A00000D01F92CDB7DEB70F900F900F900F9011 +:1029B0000F90DF91CF910895CF93DF9300D000D097 +:1029C00000D0CDB7DEB726960FB6F894DEBF0FBEA7 +:1029D000CDBFDF91CF9108951F93CF93DF93C09127 +:1029E0007B0116E080917C01C81799F0D0E01C9F14 +:1029F000F0011D9FF00D1124E358FE4F40815181DD +:102A000062817381848195810E94DC142196C77054 +:102A1000E9CFDF91CF911F9108954091AD01509181 +:102A2000AE016091AF017091B0018091B1019091C0 +:102A3000B2010C94DC14CF938091B20182958F7017 +:102A400009F05FC08091AF01882309F45AC020913A +:102A50007B01A0917C016091AD017091AE018091EC +:102A6000B0019091B10131E06F3F09F030E0B32F38 +:102A7000C6E02A1709F445C0009721F07F3F21F4F2 +:102A80004B2F03C041E001C040E030E040FD35C0C5 +:102A9000C29FF001C39FF00D1124E358FE4F418106 +:102AA00074132BC04081641328C04281411125C09A +:102AB000438154814817590710F441505109481B6C +:102AC000590B483C5105C8F48091B2018F70806168 +:102AD0008093B20186E0829FF001839FF00D112464 +:102AE000EE57FE4F80818F70806180838DEA91E088 +:102AF0000E946F11CF910C94EC142F5F3F4F277001 +:102B0000B8CFCF910895CF92DF92EF92FF920F93BB +:102B10001F93CF93DF93CDB7DEB762970FB6F894CC +:102B2000DEBF0FBECDBF8C0185E0F801DE011D9632 +:102B300001900D928A95E1F7D8014C9111965C9124 +:102B4000119712966C9112971396ED90FC90149732 +:102B50007091AD01E091AE012091B0013091B101D1 +:102B60002115310531F0EF3F31F481E07F3F19F459 +:102B700003C081E001C080E0B82FB170CB2E80FD92 +:102B80006CC1D090AF01DD2009F4F5C0F091B20125 +:102B9000E216F30638F0C701821B930B883C9105BF +:102BA00048F09BC0209530952E0D3F1D283C3105E7 +:102BB00008F093C08F2F807F09F052C0E51314C036 +:102BC000741312C0D62E61110FC0FF70F061F09324 +:102BD000B2010E940D158DEA91E00E946F11809163 +:102BE000B201F80185836CC1EF2831F05F3F31F409 +:102BF00081E04F3F19F403C081E001C080E080FD17 +:102C000003C081E0862701C080E0F82FF170FF2E1D +:102C100080FF1CC080917B0120917C0136E08217EF +:102C200009F428C190E0389FF001399FF00D11247C +:102C3000E358FE4F7181571306C07081471303C0DC +:102C40007281671303C001968770E9CFD62E662381 +:102C500009F436C18091B20181608093B20153C002 +:102C6000E51308C0741306C0611104C0D80115969D +:102C7000FC93AEC04D875E878D859E856A8B0E94D2 +:102C8000A8146A89882329F1D62E662311F1209190 +:102C9000B201822F82958F7090E002970CF460C091 +:102CA0008091AD019091AE0198878F831986FB8644 +:102CB000EA862C87CE01079651C0E51731F14D8782 +:102CC0005E878D859E856A8B0E94A8146A89811112 +:102CD0002EC0C8010E946F11A4C08F2F807F69F79A +:102CE0007E2DF98AE88A89890E94CD148DEA91E0C7 +:102CF0000E946F11EDEAF1E086E0DF011D928A95F6 +:102D0000E9F70E940D15D12CDBC07413D8CF6111E7 +:102D1000D6CFD8011596FC93C8010E946F11EDEA39 +:102D2000F1E086E0DF011D928A95E9F7C9C0D62E51 +:102D3000662379F22091B201822F82958F7090E004 +:102D4000029774F08091AD019091AE019A838983CE +:102D50001B82FD82EC822E83CE0101960E946F11B0 +:102D600086E0F801ADEAB1E001900D928A95E1F7B5 +:102D70000E941B156FC0E216F30628F0C701821BE4 +:102D8000930B9C0104C0209530952E0D3F1D283CCF +:102D9000310508F052C0D62E662309F49ACFE51308 +:102DA0002CC074132AC08091B20180FD1DC0982FE1 +:102DB00092959F70C9F0D80115968C9315979F3006 +:102DC00039F09F5F9295907F8F70892B15968C9329 +:102DD000C8010E946F1186E0F801ADEAB1E00190F0 +:102DE0000D928A95E1F736C086E0F801ADEAB1E0D0 +:102DF00001900D928A95E1F763C04D875E878D85BE +:102E00009E850E94A814882379F086E0F801ADEA37 +:102E1000B1E001900D928A95E1F70E941B150E9486 +:102E20000D15DD24D3944CC08091B2018160809354 +:102E3000B201C8010E946F1143C07E2DF98AE88A51 +:102E400089890E94CD14EDEAF1E086E0DF011D9250 +:102E50008A95E9F70E940D1533C0662309F439CF2E +:102E60004D875E878D859E850E94A814882309F46E +:102E700030CFCBCF4D875E878D859E850E940D1A02 +:102E8000292F22952F7030E0223031052CF49F70CD +:102E900041F0811106C00CC0243031052CF49F7024 +:102EA00049F4805E883020F0C8010E946F11CF2C59 +:102EB000DC2C06C0D80115969C91907F91F7F8CF35 +:102EC0008D2D62960FB6F894DEBF0FBECDBFDF9199 +:102ED000CF911F910F91FF90EF90DF90CF900895C9 +:102EE0001F93CF93DF93CDB7DEB72C970FB6F8942F +:102EF000DEBF0FBECDBF4F83588769877A878B8728 +:102F00009C87CE0107960E9483158823C1F02F81EC +:102F100038858A859B85892B31F03F3F11F080E011 +:102F200003C02F3FE1F781E0811147C04F815885F1 +:102F300069857A858B859C850E94DC143EC086E07D +:102F4000FE013796DE01119601900D928A95E1F708 +:102F5000FF81E8854A855B854115510531F0EF3FDA +:102F600031F481E0FF3F19F403C081E001C080E04B +:102F700080FD23C020917C0130E0C901019687705B +:102F8000992760917B0170E086179707F1F1F9832B +:102F9000EA835D834C8396E0929FD001939FB00DAE +:102FA0001124A358BE4FFE01319601900D929A95BF +:102FB000E1F780937C010E94EC1416E080917B0184 +:102FC00090917C01891779F1189FC00111248358D1 +:102FD0009E4F0E948315882331F1E0917B011E9F53 +:102FE000F0011124E358FE4F4081518162817381C9 +:102FF000848195810E94DC1480917B0190E0019690 +:103000008770992780937B01D9CF0E94A4141092D6 +:103010007C0110927B01EDEAF1E086E0DF011D9278 +:103020008A95E9F7CACF2C960FB6F894DEBF0FBE8B +:10303000CDBFDF91CF911F910895EF92FF920F9333 +:103040001F93CF93DF939C01009709F471C0F12C7B +:10305000EE24E394E9012196F9018491843740F448 +:10306000843008F056C0813081F0823021F160C098 +:10307000853709F449C0C0F19CE7980F903708F0F4 +:1030800057C08F770E94121146C089010E5F1F4FF3 +:10309000FE01849190E2980F983050F48770FE2DD5 +:1030A00001C0FF0F8A95EAF78F2F0E94BD1A15C045 +:1030B0000E944A1014C089010E5F1F4FFE018491C7 +:1030C00090E2980F983068F48770FE2D01C0FF0FD2 +:1030D0008A95EAF78F2F0E94C31A0E94E61AE80128 +:1030E0001AC00E941211FBCF2E5F3F4FFE01C49108 +:1030F000CC2341F08FE99FE00197F1F700C0000079 +:10310000C150F6CFE90107C0FE01F490E901229613 +:1031100002C00E944A108F2D882341F0EFE9FFE0A2 +:103120003197F1F700C000008150F6CF9E0192CF99 +:10313000DF91CF911F910F91FF90EF900895089527 +:103140006093B7017093B8018093B9019093BA016D +:103150000C9490140F931F930091B7011091B80134 +:103160002091B9013091BA01062B172B282B392B4E +:103170000093B7011093B8012093B9013093BA01BD +:103180001F910F910C9490140F931F930091B7010E +:103190001091B8012091B9013091BA01062317238B +:1031A000282339230093B7011093B8012093B90164 +:1031B0003093BA011F910F910C9490140F931F93A9 +:1031C0000091B7011091B8012091B9013091BA0175 +:1031D00006271727282739270093B7011093B8012E +:1031E0002093B9013093BA011F910F910C94901460 +:1031F0001092B3011092B4011092B5011092B60171 +:103200000C94901441E050E060E070E004C0440F82 +:10321000551F661F771F8A95D2F74093B3015093CD +:10322000B4016093B5017093B6010C94901441E021 +:1032300050E060E070E004C0440F551F661F771F28 +:103240008A95D2F78091B3019091B401A091B50114 +:10325000B091B601842B952BA62BB72B8093B3018D +:103260009093B401A093B501B093B6010C9490145F +:1032700041E050E060E070E004C0440F551F661F5D +:10328000771F8A95D2F740955095609570958091FB +:10329000B3019091B401A091B501B091B60184231E +:1032A0009523A623B7238093B3019093B401A093F1 +:1032B000B501B093B6010C94901441E050E060E089 +:1032C00070E004C0440F551F661F771F8A95D2F720 +:1032D0008091B3019091B401A091B501B091B60174 +:1032E00084279527A627B7278093B3019093B4012D +:1032F000A093B501B093B6010C9490140F931F9353 +:103300000091B3011091B4012091B5013091B60143 +:10331000062B172B282B392B0093B3011093B401E4 +:103320002093B5013093B6011F910F910C94901426 +:103330000F931F930091B3011091B4012091B50137 +:103340003091B60106231723282339230093B301B4 +:103350001093B4012093B5013093B6011F910F91E2 +:103360000C9490140F931F930091B3011091B4012A +:103370002091B5013091B601062717272827392754 +:103380000093B3011093B4012093B5013093B601BB +:103390001F910F910C9490140895CF92DF92EF92A9 +:1033A000FF920F931F93CF93DF93EC01C090B7016F +:1033B000D090B801E090B901F090BA018091B301CA +:1033C0009091B401A091B501B091B601C82AD92A53 +:1033D000EA2AFB2A0FE110E0B701A601002E04C083 +:1033E00076956795579547950A94D2F740FD05C0A5 +:1033F0000150110988F780E007C0BE01802F0E94AC +:103400008C070197A9F3802FDF91CF911F910F9126 +:10341000FF90EF90DF90CF900895CF93DF93EC0172 +:103420000E94CD19BE010E948C07DF91CF910895B3 +:10343000CB010E940D1A089590910C019923D9F0A7 +:1034400090910D019923B9F0982F969596959695A0 +:103450009F3088F5E0910E01F0910F01E90FF11D09 +:10346000877021E030E001C0220F8A95EAF7818160 +:10347000822B8183089540910E0150910F0120E02D +:1034800030E09FEFFA01E20FF31F6281681799F0B5 +:103490009F3F19F4611101C0922F2F5F3F4F2E30D3 +:1034A000310581F79F3F39F0FA01E90FF11D97FDD2 +:1034B000FA9582830895089590910C019923E1F083 +:1034C00090910D019923C1F0982F96959695969518 +:1034D0009F3020F5E0910E01F0910F01E90FF11DF1 +:1034E000877021E030E001C0220F8A95EAF720952D +:1034F000818128232183089540910E0150910F016D +:1035000020E030E0FA01E20FF31F9281981301C02E +:1035100012822F5F3F4F2E303105A1F7089581E0D1 +:1035200090E0E0910E01F0910F01E80FF91F108279 +:10353000019680319105A9F708959091CE01982BBD +:103540009093CE01089580959091CE019823909309 +:10355000CE0108951092CE0108959091CD01982B3F +:103560009093CD01089580959091CD0198239093EB +:10357000CD0108951092CD0108959091CC01982B22 +:103580009093CC01089580959091CC0198239093CD +:10359000CC0108951092CC0108958093BB01089549 +:1035A0001092BB01089540910E0150910F0120E04F +:1035B00030E080E0FA01E20FF31F918191118F5FFB +:1035C0002F5F3F4F2F303105A9F70895E0910E018D +:1035D000F0910F018091CE018083E0910E01F09176 +:1035E0000F0180819091CD01892B8083E0910E01A4 +:1035F000F0910F0180819091CC01892B8083909173 +:10360000BB01992361F0E0910E01F0910F018081DF +:10361000892B80830E94D31A81111092BB01809163 +:103620000E0190910F010C942E0FCF92DF92EF922A +:10363000FF920F931F936C01EE24FF24C114D10459 +:10364000E104F10421F46B017C0180E001C080E120 +:1036500033272F2D1E2D0D2D0115110521053105A7 +:1036600019F0885F6801790197018601A4E0369519 +:10367000279517950795AA95D1F7011511052105ED +:10368000310519F08C5F6801790197018601F2E03C +:103690003695279517950795FA95D1F701151105D8 +:1036A0002105310519F08E5F68017901B701A60186 +:1036B0007695679557954795452B462B472B09F0EF +:1036C0008F5F1F910F91FF90EF90DF90CF90089543 +:1036D0008091E601843021F11092D00120E488E14C +:1036E00090E00FB6F894A895809360000FBE2093E9 +:1036F000600080E00E94270883B7817F846083BFD9 +:1037000083B7816083BF7894889583B78E7F83BFAA +:1037100088E10FB6F89480936000109260000FBEAD +:10372000089508950895CF930E94911B0E945B0411 +:103730000E94921BC0E08C2F0E944805811105C099 +:10374000CF5FCE30C1F780E001C081E0CF91089516 +:103750000E94A4140E94220F0C94270882E084BDCA +:1037600093E095BD9AEF97BD80936E0008952FB7B3 +:10377000F8948091D1019091D201A091D301B091A0 +:10378000D4012FBF0895CF92DF92EF92FF920F9353 +:103790001F932FB7F8944091D1015091D2016091BD +:1037A000D3017091D4012FBF6A017B01EE24FF2465 +:1037B0008C0120E030E0C016D106E206F30610F4DA +:1037C00041505109481B590BCA011F910F91FF909D +:1037D000EF90DF90CF9008951F920F920FB60F9247 +:1037E00011248F939F93AF93BF938091D1019091B8 +:1037F000D201A091D301B091D4010196A11DB11DB8 +:103800008093D1019093D201A093D301B093D401BE +:10381000BF91AF919F918F910F900FBE0F901F900E +:1038200018950E94280CF8942FEF87EA91E6215012 +:1038300080409040E1F700C0000087E090EBDC01A1 +:103840008093F0019093F101A093F201B093F30102 +:103850002CE088E190E00FB6F894A8958093600082 +:103860000FBE20936000FFCFEF92FF920F931F9344 +:10387000CF93DF93E82EF12C8F2D0E944805C0E0F6 +:10388000D0E0082F10E098010C2E02C03595279546 +:103890000A94E2F720FD05C02196C630D10599F7BC +:1038A00009C06C2F7F2D80E00E945005E812F4CFF4 +:1038B00081E005C0F3948EE0F812DECF80E0DF9166 +:1038C000CF911F910F91FF90EF900895CF93C82F44 +:1038D0008CE20E94341C882321F08C2FCF910C9411 +:1038E000341C80E0CF910895CF930E94B91D8111BF +:1038F00002C00E949F1DC5E6C15049F00E945B04B2 +:103900008FE39CE90197F1F700C00000F5CF89E251 +:103910000E94661C811111C18AE20E94661C8111FD +:103920000E949F1D85E00E94661C81110E94111C4F +:103930000E94C41D8093CF0187E00E94661C8823EB +:1039400099F18BE10E94661C882351F09091CF0180 +:1039500091FB882780F921E0822780FB91F922C022 +:103960008EE00E94661C882351F09091CF0192FB5B +:10397000882780F921E0822780FB92F913C080E13B +:103980000E94661C9091CF01882341F093FB882709 +:1039900080F921E0822780FB93F904C0892F80956C +:1039A00080FB90F99093CF018091CF010E94C81DB8 +:1039B0000E94D61D8093EF0180EE0E94661C882332 +:1039C00041F08091EF01982F909590FB80F98093C2 +:1039D000EF0189E30E94661C882359F09091EF0162 +:1039E00091FB882780F921E0822780FB91F9909351 +:1039F000EF0182EE0E94661C882359F09091EF013E +:103A000092FB882780F921E0822780FB92F990932E +:103A1000EF0186EE0E94661C882359F09091EF0119 +:103A200093FB882780F921E0822780FB93F990930C +:103A3000EF0183EE0E94661C882359F09091EF01FC +:103A400094FB882780F921E0822780FB94F99093EA +:103A5000EF0185E30E94661C882359F09091EF01E5 +:103A600095FB882780F921E0822780FB95F99093C8 +:103A7000EF0181E30E94661C882359F09091EF01C9 +:103A800096FB882780F921E0822780FB96F99093A6 +:103A9000EF0181E10E94661C882359F09091EF01AB +:103AA00097FB882780F921E0822780FB97F9909384 +:103AB000EF018091EF010E94DA1D8091EF0187FBF9 +:103AC000882780F980930D0187E20E94661CC82F29 +:103AD0008EE10E94661C8111C2608FE10E94661C0B +:103AE0008111C46080E20E94661C8111C86081E27D +:103AF0000E94661C8111C06182E20E94661C8111D5 +:103B0000C06283E20E94661C8111C06484E20E944C +:103B1000661C882311F0C06802C0CC2329F08C2FCA +:103B20000E94D11D6C2F03C00E94CD1D682F70E034 +:103B300080E090E0CF910C94A018CF9108956DEEA5 +:103B40007EEF80E090E00E94F72360E082E090E06A +:103B50000E94E52360E083E090E00E94E52360E0BE +:103B600084E090E00E94E52360E085E090E00C9422 +:103B7000E52380E090E00E94DF2321E08D3E9E4F10 +:103B800009F020E0822F089582E090E00C94D72382 +:103B9000682F82E090E00C94E52383E090E00C94A1 +:103BA000D723682F83E090E00C94E52384E090E035 +:103BB0000C94D723682F84E090E00C94E523809147 +:103BC000D70180FF0BC06091130185E0689FB001B1 +:103BD000112475956795759567952AC081FF09C071 +:103BE0006091130185E0689FB00111247595679578 +:103BF0001FC082FF07C06091130185E0689FB0017C +:103C0000112416C04091D8014423C9F060911201DB +:103C1000461788F72091130185E0289F9001112411 +:103C2000429FC001439F900D112470E00E94A92380 +:103C30006038710540F46115710539F002C065E026 +:103C400070E0862F08958FE7089581E008958091B0 +:103C5000D70180FF08C06091110170E075956795EC +:103C60007595679521C081FF06C06091110170E0D4 +:103C70007595679519C082FF04C06091110170E0CD +:103C800010C08091D8018823C1F06091100186177F +:103C9000A0F790911101989FC001112470E00E943B +:103CA000A9236038710528F46115710521F0862F6C +:103CB00008958FE7089581E0089561E070E0F4CF02 +:103CC000803F21F40E94DF1D819504C0813F29F4CB +:103CD0000E94DF1D8093DB010895823F21F40E9442 +:103CE000DF1D819504C0833F29F40E94DF1D80936E +:103CF000DA010895893F19F40E94271E05C08A3F02 +:103D000031F40E94271E81958093DC0108958B3F3A +:103D100021F40E94271E819504C08C3F29F40E9443 +:103D2000271E8093DD010895843F21F48091D901FD +:103D3000816017C0853F21F48091D901826011C054 +:103D4000863F21F48091D90184600BC0873F21F424 +:103D50008091D901886005C0883F31F48091D901F4 +:103D600080618093D90108958D3F21F48091D7011E +:103D700081600BC08E3F21F48091D701826005C025 +:103D80008F3F29F48091D70184608093D7010895F3 +:103D9000803F39F48091DB0187FF6CC01092DB011A +:103DA00069C0813F29F48091DB011816BCF362C021 +:103DB0009091DA01823F29F497FF5CC01092DA01FA +:103DC00059C0833F19F41916CCF354C0893F41F40C +:103DD0008091DC0118160CF04DC01092DC014AC035 +:103DE0008A3F29F48091DC0187FF44C0F6CF8B3FE6 +:103DF00039F48091DD0187FF3DC01092DD013AC0AA +:103E00008C3F29F48091DD011816BCF333C0843F48 +:103E100021F48091D9018E7F17C0853F21F48091D4 +:103E2000D9018D7F11C0863F21F48091D9018B7F0C +:103E30000BC0873F21F48091D901877F05C0883F5F +:103E400031F48091D9018F7E8093D90113C08D3FC9 +:103E500021F48091D7018E7F0BC08E3F21F4809199 +:103E6000D7018D7F05C08F3F29F48091D7018B7FCB +:103E70008093D7018091DA0181110EC08091DB011E +:103E800081110AC08091DC01811106C08091DD01A1 +:103E9000811102C01092D801089589ED91E00E942D +:103EA000390F0E94B71B9093D6018093D5010895D6 +:103EB0001F93CF93DF938091D5019091D6010E94FB +:103EC000C31B4091D801442321F02091140130E01C +:103ED00006C0209115015AE0259F900111248217F8 +:103EE000930708F482C08091DA011091DB01D09130 +:103EF000DC01C091DD01811107C0111105C0D11194 +:103F000003C0CC2309F471C04F3F19F04F5F4093B9 +:103F1000D801181624F40E94DF1D8093DA018091E5 +:103F2000DA0187FF05C00E94DF1D81958093DA01C9 +:103F3000111624F40E94DF1D8093DB018091DB01C8 +:103F400087FF05C00E94DF1D81958093DB01609192 +:103F5000DA01662339F11091DB01112319F177277A +:103F600067FD7095872F972F0E94BA2223E333E3D2 +:103F700043E35FE30E941E230E9487226093DA01DD +:103F8000612F772767FD7095872F972F0E94BA22A0 +:103F900023E333E343E35FE30E941E230E9487226F +:103FA0006093DB011D1624F40E94271E8093DC0120 +:103FB0008091DC0187FF05C00E94271E81958093B8 +:103FC000DC011C1624F40E94271E8093DD018091E1 +:103FD000DD0187FF05C00E94271E81958093DD01CA +:103FE000DF91CF911F910C944D1FDF91CF911F91C5 +:103FF0000895E9EDF1E085E0DF011D928A95E9F78A +:104000001092D8011092D7010895833081F128F4DD +:10401000813059F08230D1F00895853009F449C0DB +:10402000B8F1863009F456C0089520911501862F05 +:1040300090E0820F911D8F3F910520F4620F6093F5 +:10404000150108958FEF80931501089520911401B3 +:10405000862F90E0820F911D8F3F910520F4620F13 +:104060006093140108958FEF8093140108952091B7 +:104070001301862F90E0820F911D8F3F910520F450 +:10408000620F6093130108958FEF809313010895D9 +:1040900020911201862F90E0820F911D8F3F910594 +:1040A00020F4620F6093120108958FEF8093120144 +:1040B000089520911101862F90E0820F911D8F3F6E +:1040C000910520F4620F6093110108958FEF8093A2 +:1040D0001101089520911001862F90E0820F911D0B +:1040E0008F3F910520F4620F6093100108958FEFC8 +:1040F000809310010895833011F128F4813049F044 +:10410000823091F00895853081F120F18630C1F13F +:10411000089580911501681720F4861B809315017E +:10412000089510921501089580911401681720F4E4 +:10413000861B8093140108951092140108958091B4 +:104140001301681720F4861B8093130108951092C1 +:104150001301089580911201681720F4861B809343 +:1041600012010895109212010895809111016817AB +:1041700020F4861B80931101089510921101089577 +:1041800080911001681720F4861B80931001089518 +:104190001092100108958D3109F442C020F58E303F +:1041A00009F477C070F4873009F459C018F48630E8 +:1041B000F1F134C0883009F4A8C08B3009F4A5C0EF +:1041C0002DC0863109F4A1C038F4803109F472C0E1 +:1041D000813109F479C022C0893109F496C08B314C +:1041E00009F44DC01BC0853309F487C048F48732F9 +:1041F00009F483C008F473C0893209F47EC00EC08C +:10420000833438F48A3308F068C0883309F47DC0F9 +:1042100005C0833409F471C0883499F080E00895B2 +:104220000E9441220E94220F0E9427086EC08091A6 +:10423000CF01817F8E7F8093CF0181E08093DF016A +:1042400008950E94A4142FEF83ED90E32150804045 +:104250009040E1F700C000000E94111C56C09091F0 +:10426000CF01892F8095817080FB90F919F09660BD +:1042700098601DC0997F977F9093CF0146C0909121 +:10428000CF0191FB882780F921E0822780FB91F9FB +:1042900009C09091CF0192FB882780F921E0822705 +:1042A00080FB92F99093CF01882379F191609093EC +:1042B000CF0108959091CF0193FB882780F921E0E9 +:1042C000822780FB93F9EECF0E94A41480910D0108 +:1042D00091E0892780930D0118C027EC01C023EEDF +:1042E000280F61E070E080E090E004C0660F771F67 +:1042F000881F991F2A95D2F704C061E070E080E022 +:1043000090E00E94A0180E94A41481E0089580E02B +:10431000089580E00895CF93C82F8091DF01813008 +:1043200079F018F08230D1F184C0A0910E01B091E3 +:104330000F018C91813169F0823209F07CC009C093 +:10434000A0910E01B0910F018C91813111F0823258 +:1043500049F48C2F0E94872181111DC08C2F0E944F +:10436000CB201AC08C2F0E948921811114C0C43126 +:1043700079F048F4CB3079F0C03109F060C082E0C8 +:104380008093DF0108C0C93219F0C83321F057C04B +:104390001092DF0154C081E0817053C0C93289F1AD +:1043A00018F5C43171F1A8F4C73009F046C08AE0AD +:1043B0008093150194E19093140193E0909313017D +:1043C0008093120188E08093110188E280931001AC +:1043D00034C0CE51C63088F5EC2FF0E0E65DFE4FDC +:1043E00080818093DE0129C0CE34E9F020F4CB3403 +:1043F00021F56AE013C0C13579F0C235F1F461E00E +:104400000DC08091DE01882319F01092DE0115C0E5 +:1044100081E08093DF0115C061E006C08091DE017C +:104420000E9405200AC06AE08091DE010E947B2084 +:1044300004C01092DF0180E004C081E002C080E08F +:10444000ABCFCF910895E1E8F0E080818860808370 +:104450008081816080838FB7F89493E09093890086 +:1044600090ED909388008FBF0895EFE6F0E0808193 +:10447000826080830895EFE6F0E080818D7F808305 +:104480000895EFE6F0E0808192E089278083089527 +:104490001F920F920FB60F9211242F933F934F93B9 +:1044A0005F936F937F938F939F93AF93BF93EF939C +:1044B000FF938091E0019091E10101969093E101D9 +:1044C0008093E001811103C082E00E942708E091FF +:1044D000E101E695E695F0E0E657FB4FE491809127 +:1044E000E0018E1303C080E00E942708FF91EF9146 +:1044F000BF91AF919F918F917F916F915F914F91FC +:104500003F912F910F900FBE0F901F90189504D0E0 +:104510006894B1118DC0089570D088F09F5790F0C5 +:10452000B92F9927B751A0F0D1F0660F771F881FD8 +:10453000991F1AF0BA95C9F712C0B13081F077D03F +:10454000B1E0089574C0672F782F8827B85F39F0DD +:10455000B93FCCF3869577956795B395D9F73EF437 +:1045600090958095709561957F4F8F4F9F4F0895DF +:10457000E89409C097FB3EF49095809570956195FD +:104580007F4F8F4F9F4F9923A9F0F92F96E9BB27B3 +:104590009395F695879577956795B795F111F8CF2F +:1045A000FAF4BB0F11F460FF1BC06F5F7F4F8F4F9A +:1045B0009F4F16C0882311F096E911C0772321F090 +:1045C0009EE8872F762F05C0662371F096E8862F28 +:1045D00070E060E02AF09A95660F771F881FDAF77F +:1045E000880F9695879597F9089557FD9058440F31 +:1045F000551F59F05F3F71F04795880F97FB991F42 +:1046000061F09F3F79F087950895121613061406FE +:10461000551FF2CF4695F1DF08C01616170618068B +:10462000991FF1CF86957105610508940895E89466 +:10463000BB2766277727CB0197F908950BD078C061 +:1046400069D028F06ED018F0952309F05AC05FC0E9 +:104650001124EECFCADFA0F3959FD1F3950F50E060 +:10466000551F629FF001729FBB27F00DB11D639F24 +:10467000AA27F00DB11DAA1F649F6627B00DA11DCA +:10468000661F829F2227B00DA11D621F739FB00D70 +:10469000A11D621F839FA00D611D221F749F3327E0 +:1046A000A00D611D231F849F600D211D822F762F79 +:1046B0006A2F11249F5750408AF0E1F088234AF076 +:1046C000EE0FFF1FBB1F661F771F881F91505040C2 +:1046D000A9F79E3F510570F014C0AACF5F3FECF3DD +:1046E000983EDCF3869577956795B795F795E795AE +:1046F0009F5FC1F7FE2B880F911D9695879597F9BF +:10470000089597F99F6780E870E060E008959FEF53 +:1047100080EC089500240A94161617061806090658 +:10472000089500240A941216130614060506089527 +:10473000092E0394000C11F4882352F0BB0F40F4AF +:10474000BF2B11F460FF04C06F5F7F4F8F4F9F4FEF +:10475000089597FB072E16F4009407D077FD09D033 +:104760000E94C32307FC05D03EF4909581959F4F8E +:104770000895709561957F4F0895EE0FFF1F059086 +:10478000F491E02D0994AA1BBB1B51E107C0AA1F9D +:10479000BB1FA617B70710F0A61BB70B881F991FE2 +:1047A0005A95A9F780959095BC01CD010895F99986 +:1047B000FECF92BD81BDF89A992780B50895A8E1F2 +:1047C000B0E042E050E00C94FF23262FF999FECF91 +:1047D00092BD81BDF89A019700B4021639F01FBA54 +:1047E00020BD0FB6F894FA9AF99A0FBE0895019673 +:1047F000272F0E94E6230C94E523DC01CB01FC016A +:10480000F999FECF06C0F2BDE1BDF89A319600B429 +:0E4810000D9241505040B8F70895F894FFCF34 +:10481E0020022908B60893085F082C080101BC0184 +:10482E0028080A03140A3F4D36394B04FE03C80309 +:10483E008F0322033B0354036D0301020304050699 +:04484E00070809004E :00000001FF diff --git a/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c b/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c index 24ff1c6884..18bace4ebc 100644 --- a/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c +++ b/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c @@ -7,6 +7,9 @@ #define SYMB 1 // symbols #define MDIA 2 // media keys +#define LSFTO M(0) // Left shift, open parens when tapped +#define RSFTC M(1) // Right shift, close parens when tapped + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer * @@ -17,7 +20,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | BkSp | A | S | D | F | G |------| |------| H | Alt/J| K | L |; / L2| LGui/' | * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * |LShift/(|Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl|RShift/)| * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | * `----------------------------------' `----------------------------------' @@ -36,7 +39,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + LSFTO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, ALT_T(KC_APP), KC_LGUI, KC_HOME, @@ -45,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_RGHT, KC_6,KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(SYMB), KC_Y,KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_H,ALT_T(KC_J),KC_K, KC_L, LT(MDIA,KC_SCLN),GUI_T(KC_QUOT), - MEH_T(KC_NO),KC_N,KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + MEH_T(KC_NO),KC_N,KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), RSFTC, KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, KC_LALT, CTL_T(KC_ESC), KC_PGUP, @@ -140,17 +143,37 @@ const uint16_t PROGMEM fn_actions[] = { [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) }; +static uint16_t key_timer; + const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - // MACRODOWN only works in this function switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); + case 0: { + if (record->event.pressed) { + key_timer = timer_read(); // if the key is being pressed, we start the timer. + register_code(KC_LSFT); // we're now holding down Shift. + } else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down"). + if (timer_elapsed(key_timer) < 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap. + register_code(KC_9); // sending 9 while Shift is held down gives us an opening paren + unregister_code(KC_9); // now let's let go of that key + } + unregister_code(KC_LSFT); // let's release the Shift key now. + } + break; + } + case 1: { + if (record->event.pressed) { + key_timer = timer_read(); // Now we're doing the same thing, only for the right shift/close paren key + register_code(KC_RSFT); + } else { + if (timer_elapsed(key_timer) < 150) { + register_code(KC_0); + unregister_code(KC_0); + } + unregister_code(KC_RSFT); + } + break; } - break; } return MACRO_NONE; }; @@ -183,3 +206,5 @@ void matrix_scan_user(void) { } }; + + From 140b97a1cd226432a8ec647004943698e3d87f0b Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 26 Apr 2016 01:16:47 -0400 Subject: [PATCH 10/67] adds delayed vibrato --- quantum/audio/voices.c | 31 +++++++++++++++++++++++++++++++ quantum/audio/voices.h | 2 ++ 2 files changed, 33 insertions(+) diff --git a/quantum/audio/voices.c b/quantum/audio/voices.c index de9f8ae544..0921bd5931 100644 --- a/quantum/audio/voices.c +++ b/quantum/audio/voices.c @@ -1,5 +1,6 @@ #include "voices.h" #include "stdlib.h" +#include "vibrato_lut.h" // these are imported from audio.c extern uint16_t envelope_index; @@ -99,6 +100,36 @@ float voice_envelope(float frequency) { if ((envelope_index % 8) == 0) note_timbre = 0; break; + case delayed_vibrato: + polyphony_rate = 0; + note_timbre = TIMBRE_50; + #define VOICE_VIBRATO_DELAY 150 + #define VOICE_VIBRATO_SPEED 50 + switch (compensated_index) { + case 0 ... VOICE_VIBRATO_DELAY: + break; + default: + frequency = frequency * VIBRATO_LUT[(int)fmod((((float)compensated_index - (VOICE_VIBRATO_DELAY + 1))/1000*VOICE_VIBRATO_SPEED), VIBRATO_LUT_LENGTH)]; + break; + } + break; + // case delayed_vibrato_octave: + // polyphony_rate = 0; + // if ((envelope_index % 2) == 1) { + // note_timbre = 0.55; + // } else { + // note_timbre = 0.45; + // } + // #define VOICE_VIBRATO_DELAY 150 + // #define VOICE_VIBRATO_SPEED 50 + // switch (compensated_index) { + // case 0 ... VOICE_VIBRATO_DELAY: + // break; + // default: + // frequency = frequency * VIBRATO_LUT[(int)fmod((((float)compensated_index - (VOICE_VIBRATO_DELAY + 1))/1000*VOICE_VIBRATO_SPEED), VIBRATO_LUT_LENGTH)]; + // break; + // } + // break; // case duty_fifth_down: // note_timbre = 0.5; // if ((envelope_index % 3) == 0) diff --git a/quantum/audio/voices.h b/quantum/audio/voices.h index 4b894f28d4..74c873f42f 100644 --- a/quantum/audio/voices.h +++ b/quantum/audio/voices.h @@ -16,6 +16,8 @@ typedef enum { octave_crunch, duty_osc, duty_octave_down, + delayed_vibrato, + // delayed_vibrato_octave, // duty_fifth_down, // duty_fourth_down, // duty_third_down, From bf56838fe99aafd37559d560e47b707a83c87588 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 26 Apr 2016 01:17:00 -0400 Subject: [PATCH 11/67] adds freq LUT for future use --- quantum/audio/frequency_lut.h | 357 ++++++++++++++++++++++++++++++++++ 1 file changed, 357 insertions(+) create mode 100644 quantum/audio/frequency_lut.h diff --git a/quantum/audio/frequency_lut.h b/quantum/audio/frequency_lut.h new file mode 100644 index 0000000000..e62da5be4e --- /dev/null +++ b/quantum/audio/frequency_lut.h @@ -0,0 +1,357 @@ +#include +#include +#include + +#define FREQUENCY_LUT_LENGTH 349 + +const uint16_t FREQUENCY_LUT[FREQUENCY_LUT_LENGTH] = { +0x8E0B, +0x8C02, +0x8A00, +0x8805, +0x8612, +0x8426, +0x8241, +0x8063, +0x7E8C, +0x7CBB, +0x7AF2, +0x792E, +0x7772, +0x75BB, +0x740B, +0x7261, +0x70BD, +0x6F20, +0x6D88, +0x6BF6, +0x6A69, +0x68E3, +0x6762, +0x65E6, +0x6470, +0x6300, +0x6194, +0x602E, +0x5ECD, +0x5D71, +0x5C1A, +0x5AC8, +0x597B, +0x5833, +0x56EF, +0x55B0, +0x5475, +0x533F, +0x520E, +0x50E1, +0x4FB8, +0x4E93, +0x4D73, +0x4C57, +0x4B3E, +0x4A2A, +0x491A, +0x480E, +0x4705, +0x4601, +0x4500, +0x4402, +0x4309, +0x4213, +0x4120, +0x4031, +0x3F46, +0x3E5D, +0x3D79, +0x3C97, +0x3BB9, +0x3ADD, +0x3A05, +0x3930, +0x385E, +0x3790, +0x36C4, +0x35FB, +0x3534, +0x3471, +0x33B1, +0x32F3, +0x3238, +0x3180, +0x30CA, +0x3017, +0x2F66, +0x2EB8, +0x2E0D, +0x2D64, +0x2CBD, +0x2C19, +0x2B77, +0x2AD8, +0x2A3A, +0x299F, +0x2907, +0x2870, +0x27DC, +0x2749, +0x26B9, +0x262B, +0x259F, +0x2515, +0x248D, +0x2407, +0x2382, +0x2300, +0x2280, +0x2201, +0x2184, +0x2109, +0x2090, +0x2018, +0x1FA3, +0x1F2E, +0x1EBC, +0x1E4B, +0x1DDC, +0x1D6E, +0x1D02, +0x1C98, +0x1C2F, +0x1BC8, +0x1B62, +0x1AFD, +0x1A9A, +0x1A38, +0x19D8, +0x1979, +0x191C, +0x18C0, +0x1865, +0x180B, +0x17B3, +0x175C, +0x1706, +0x16B2, +0x165E, +0x160C, +0x15BB, +0x156C, +0x151D, +0x14CF, +0x1483, +0x1438, +0x13EE, +0x13A4, +0x135C, +0x1315, +0x12CF, +0x128A, +0x1246, +0x1203, +0x11C1, +0x1180, +0x1140, +0x1100, +0x10C2, +0x1084, +0x1048, +0x100C, +0xFD1, +0xF97, +0xF5E, +0xF25, +0xEEE, +0xEB7, +0xE81, +0xE4C, +0xE17, +0xDE4, +0xDB1, +0xD7E, +0xD4D, +0xD1C, +0xCEC, +0xCBC, +0xC8E, +0xC60, +0xC32, +0xC05, +0xBD9, +0xBAE, +0xB83, +0xB59, +0xB2F, +0xB06, +0xADD, +0xAB6, +0xA8E, +0xA67, +0xA41, +0xA1C, +0x9F7, +0x9D2, +0x9AE, +0x98A, +0x967, +0x945, +0x923, +0x901, +0x8E0, +0x8C0, +0x8A0, +0x880, +0x861, +0x842, +0x824, +0x806, +0x7E8, +0x7CB, +0x7AF, +0x792, +0x777, +0x75B, +0x740, +0x726, +0x70B, +0x6F2, +0x6D8, +0x6BF, +0x6A6, +0x68E, +0x676, +0x65E, +0x647, +0x630, +0x619, +0x602, +0x5EC, +0x5D7, +0x5C1, +0x5AC, +0x597, +0x583, +0x56E, +0x55B, +0x547, +0x533, +0x520, +0x50E, +0x4FB, +0x4E9, +0x4D7, +0x4C5, +0x4B3, +0x4A2, +0x491, +0x480, +0x470, +0x460, +0x450, +0x440, +0x430, +0x421, +0x412, +0x403, +0x3F4, +0x3E5, +0x3D7, +0x3C9, +0x3BB, +0x3AD, +0x3A0, +0x393, +0x385, +0x379, +0x36C, +0x35F, +0x353, +0x347, +0x33B, +0x32F, +0x323, +0x318, +0x30C, +0x301, +0x2F6, +0x2EB, +0x2E0, +0x2D6, +0x2CB, +0x2C1, +0x2B7, +0x2AD, +0x2A3, +0x299, +0x290, +0x287, +0x27D, +0x274, +0x26B, +0x262, +0x259, +0x251, +0x248, +0x240, +0x238, +0x230, +0x228, +0x220, +0x218, +0x210, +0x209, +0x201, +0x1FA, +0x1F2, +0x1EB, +0x1E4, +0x1DD, +0x1D6, +0x1D0, +0x1C9, +0x1C2, +0x1BC, +0x1B6, +0x1AF, +0x1A9, +0x1A3, +0x19D, +0x197, +0x191, +0x18C, +0x186, +0x180, +0x17B, +0x175, +0x170, +0x16B, +0x165, +0x160, +0x15B, +0x156, +0x151, +0x14C, +0x148, +0x143, +0x13E, +0x13A, +0x135, +0x131, +0x12C, +0x128, +0x124, +0x120, +0x11C, +0x118, +0x114, +0x110, +0x10C, +0x108, +0x104, +0x100, +0xFD, +0xF9, +0xF5, +0xF2, +0xEE +}; \ No newline at end of file From bf925fb71cf03d520f66baefa6af5c94ff5b7952 Mon Sep 17 00:00:00 2001 From: Roman Zolotarev Date: Tue, 26 Apr 2016 16:46:43 +0800 Subject: [PATCH 12/67] Add Roman's layout with QWERTY --- .../romanzolotarev-norman-qwerty-osx/keymap.c | 73 ++ .../readme.md | 34 + .../romanzolotarev-norman-qwerty-osx.hex | 1139 +++++++++++++++++ .../romanzolotarev-norman-qwerty-osx.png | Bin 0 -> 100627 bytes 4 files changed, 1246 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c create mode 100644 keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/readme.md create mode 100644 keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.hex create mode 100644 keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png diff --git a/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c new file mode 100644 index 0000000000..dd946c1823 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c @@ -0,0 +1,73 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 +#define QWRT 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = KEYMAP( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5, + KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_BSLS, + KC_LCTL, KC_A, KC_S, KC_E, KC_T, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, + KC_F1, KC_F2, KC_F3, KC_F4, KC_LGUI, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_LALT, + // + /*-*/ KC_F6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + /*-*/ TG(QWRT), KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_MINS, + /*-*/ /*-*/ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_ENT, + /*-*/ KC_RBRC, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + /*-*/ /*-*/ /*-*/ KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, + KC_MPLY, KC_MNXT, + KC_MPRV, + KC_RALT, KC_QUOT, KC_SPC + ), + [QWRT] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_E, KC_R, KC_T, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_D, KC_F, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, + // + /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRNS, + /*-*/ /*-*/ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_TRNS, + /*-*/ KC_TRNS, KC_N, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS + ), +}; + +const uint16_t PROGMEM fn_actions[] = { +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + case QWRT: + ergodox_right_led_1_on(); + break; + default: + break; + } +}; diff --git a/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/readme.md b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/readme.md new file mode 100644 index 0000000000..0e78c130b3 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/readme.md @@ -0,0 +1,34 @@ +# Roman's Layout + +There are two layers: + +- **BASE** is [Norman layout](https://normanlayout.info/). +- **QWRT** is QWERTY. + +[![keyboard-layout](romanzolotarev-norman-qwerty-osx.png)](http://www.keyboard-layout-editor.com/#/gists/3b236f450da474dc506a5a80390c3cc7) + +## Switching + +- Tap `QWRT` to toggle **QWRT**. + +## LEDs + +- Red: QWRT is on. + +## Functional Keys + +- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/). +- Tap `F2` to copy screenshot to the clipboard. +- Hold `SHIFT` and tap `F2` to save screenshot as a file. +- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/). + +## CTRL/ESC + +Both CTRL and ESC are frequently used in Vim. + +- Tap `CTRL/ESC` to send `ESC`. +- Hold `CTRL/ESC` to use as `CTRL`. + +## Activate N-rollover + +- Hold left `SHIFT` and right `SHIRT` and then tap `N`. diff --git a/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.hex b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.hex new file mode 100644 index 0000000000..80ae0751b1 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.hex @@ -0,0 +1,1139 @@ +:100000000C940F020C9453020C9453020C94530260 +:100010000C9453020C9453020C9453020C9453020C +:100020000C9453020C9453020C94070C0C94D90CAE +:100030000C9453020C9453020C9453020C945302EC +:100040000C9453020C94A3210C9453020C9453026D +:100050000C9453020C94321B0C9453020C945302D4 +:100060000C9453020C9453020C9453020C945302BC +:100070000C9453020C9453020C9453020C945302AC +:100080000C9453020C9453020C9453020C9453029C +:100090000C9453020C9453020C9453020C9453028C +:1000A0000C9453020C9453020C945302460D680DA9 +:1000B000560E680D560EAD0DD00D560E250E380E8F +:1000C0002411241161116111A411E211FB13FB131E +:1000D000FB11FB13FC12FC12CF13FB13FB13E613F3 +:1000E00035002B00E000E1003A0000001E00140083 +:1000F00004001D003B00E2001F001A0016001B0058 +:100100003C00297120000700080006003D002A007D +:100110002100090017001900E300A90022000E00C9 +:100120000A0005000000AA003E00310000002F0078 +:100130000000A8003F000154000030000000AE00A5 +:1001400023000D001C0013000000AB002400180069 +:1001500011001000E700AC00250015000C0036006F +:1001600050002C0026000F00120037005100340010 +:10017000270033000B0038005200E6002E002D004F +:100180002800E5004F00000001000100010001000F +:100190000100000001000100010001000100010058 +:1001A0000100010001000100010001000100080040 +:1001B0000700010001000100010015000900010015 +:1001C0000100010001001700010001000000010012 +:1001D0000100010000000100000001000100010019 +:1001E000000001000000010001001C000B001100D4 +:1001F00000000100010018000D00010001000100D5 +:1002000001000C000E0001000100010001001200BD +:100210000F00010001000100010013003300010084 +:1002200001000100010001000100010001000000C7 +:1002300016034500720067006F0044006F007800ED +:10024000200045005A0000001603450072006700B8 +:100250006F0044006F007800200045005A00000045 +:100260000403090409026D00040100A0FA09040056 +:10027000000103010100092111010001223F0007D3 +:1002800005810308000A09040100010301020009B5 +:100290002111010001224D000705820308000A090F +:1002A00004020001030000000921110100012236AF +:1002B000000705830308000A090403000103000086 +:1002C00000092111010001223900070584031000F3 +:1002D000011201100100000008EDFE0713010001EA +:1002E00002000105010906A101050719E029E7152A +:1002F0000025019508750181020508190129059558 +:1003000005750191029501750391010507190029F1 +:100310007715002501957875018102C005010980D6 +:10032000A101850216010026B7001A01002AB700B4 +:10033000751095018100C0050C0901A10185031606 +:100340000100269C021A01002A9C02751095018169 +:1003500000C005010902A1010901A1000509190157 +:100360002905150025019505750181029501750383 +:1003700081010501093009311581257F9502750834 +:10038000810609381581257F950175088106050CC0 +:100390000A38021581257F950175088106C0C005C0 +:1003A000010906A101050719E029E71500250195B6 +:1003B0000875018102950175088101050819012957 +:1003C00005950575019102950175039101050719C0 +:1003D0000029FF150025FF950675088100C0000063 +:1003E000000000000000000000010204060A0F17D0 +:1003F000202C3A4A5D71879DB3C7DAE9F5FCFFFC12 +:10040000F5E9DAC7B39D87715D4A3A2C20170F0AC8 +:10041000060402010000000000000000000011249A +:100420001FBECFEFDAE0DEBFCDBF04B603FE24C0AF +:100430008091EE019091EF01A091F001B091F10156 +:100440008730904BA740B04BB9F41092EE01109258 +:10045000EF011092F0011092F10114BE84B7877F72 +:1004600084BF88E10FB6F89480936000109260001A +:100470000FBEE0E0FFE3099511E0A0E0B1E0E4ED9C +:10048000F6E402C005900D92A433B107D9F711E04C +:10049000A4E3B1E001C01D92AE3EB107E1F70E94B6 +:1004A0004B090C9468230C94000008950895609102 +:1004B000B1017091B2018091B3019091B4010E9499 +:1004C0005E1A56985E9825982D9826982E9827980B +:1004D0002F98813011F4259A2D9A08950C94570283 +:1004E00056985E9825982D9826982E9827982F989C +:1004F0008FEF90E0909389008093880090938B0019 +:1005000080938A0090938D0080938C00259A2D9A79 +:100510002FEF80E792E0215080409040E1F700C04B +:100520000000269A2E9A2FEF80E792E0215080401B +:100530009040E1F700C00000279A2F9A2FEF80E744 +:1005400092E0215080409040E1F700C000002598E3 +:100550002D982FEF80E792E0215080409040E1F706 +:1005600000C0000026982E982FEF80E792E02150DF +:1005700080409040E1F700C0000027982F985698DF +:100580005E9825982D9826982E9827982F9808954C +:1005900089EA8093800089E08093810024982C98D8 +:1005A0003F988AB18F748AB96E98479A8BB1806BE5 +:1005B0008BB9769A0E9470020C94560280E2809366 +:1005C00000018091340181110EC00E942D0381E051 +:1005D000809334012FEF83ED90E3215080409040D1 +:1005E000E1F700C0000080E40E9433038093000123 +:1005F00081112EC00E945D0380930001811128C0EB +:100600000E945D0380930001811122C08FE30E944C +:100610005D038093000181111BC00E94550380E49B +:100620000E94330380930001811112C08CE00E946C +:100630005D038093000181110BC00E945D038093D4 +:100640000001811105C08FE30E945D0380930001CA +:100650000E9455038091000108951092B9008AE02C +:100660008093B800089594EA9093BC009091BC00E8 +:1006700097FFFCCF9091B900987F983021F090318E +:1006800011F081E008958093BB0084E88093BC0062 +:100690008091BC0087FFFCCF8091B900887F8831B2 +:1006A00011F0803471F780E0089584E98093BC00F4 +:1006B0008091BC0084FDFCCF08958093BB0084E84A +:1006C0008093BC008091BC0087FFFCCF9091B90063 +:1006D000987F81E0983209F480E0089584E880935F +:1006E000BC008091BC0087FFFCCF8091BB000895C7 +:1006F00080910001811115C080E40E943303809332 +:10070000000181110CC082E10E945D038093000111 +:10071000811105C08FEF0E945D03809300010E944C +:10072000550384B1807F84B985B1807F85B98AB152 +:10073000837F8AB98BB1837F8BB93E9846980895A1 +:100740000E94DE02809300010E94780380B38C70C7 +:1007500080BB81B3836F81BBA6E3B1E0E4E4F1E049 +:100760008EE08E0F11921D928E13FCCF0C94C80256 +:10077000BF92CF92DF92EF92FF920F931F93CF938E +:10078000DF9380910001882379F0809135018F5F9C +:1007900080933501811108C00E94DE028093000120 +:1007A000811102C00E94700206E311E0C0E0D0E0B7 +:1007B000DD24D39482E0C82EEE24E394F12CC730DC +:1007C000D10500F580910001811164C080E40E9490 +:1007D000330380930001811112C082E10E945D0306 +:1007E0008093000181110BC0C7010C2E01C0880F3E +:1007F0000A94EAF780950E945D03809300010E94AD +:10080000550348C0CA30A1F028F4C83059F0C930A7 +:1008100061F005C0CC3089F070F0CD3089F0209ABD +:10082000289810C0219A29980DC0229A2A980AC0A7 +:10083000239A2B9807C0529A01C0539A5B9802C022 +:100840003E9A469890EA9A95F1F79FB1799902C03D +:1008500082E001C080E091709D25982B7C9902C0B8 +:1008600084E001C080E0892B7D9902C038E001C09E +:1008700030E0832B7E9902C020E101C020E0822B72 +:100880009FB19095991F9927991F9295990F907EE6 +:10089000892B0FC080910001811149C080E40E9422 +:1008A000330380930001882379F1B12C0E94550312 +:1008B0008B2DF8019081981719F08083C092010167 +:1008C0000E94780321960F5F1F4FCE30D10509F0AB +:1008D00076CF80910101882361F1815080930101DD +:1008E000882339F08FE99FE00197F1F700C00000FD +:1008F00020C0A4E4B1E0E6E3F1E0CF01825F919192 +:100900009D938E13FCCF15C083E10E945D038093FD +:1009100000018111CACF81E40E943303809300015A +:100920008111C3CF0E946E03B82EB094BFCF80E078 +:10093000C0CF0E946E0281E0DF91CF911F910F9195 +:10094000FF90EF90DF90CF90BF900895E82FF0E0F8 +:10095000EC5BFE4F808108950895089596E0799F9D +:10096000F001112494E5899FE00DF11D1124E60F9B +:10097000F11DEE0FFF1FE052FF4F859194910895F6 +:10098000880F991FFC01E05AF040859194910895D9 +:10099000880F991FFC01E052FF4F859194910895B3 +:1009A0000F931F93CF93DF93EC018115904350F584 +:1009B000C11580E2D80708F0B3C0CB3BD10590F455 +:1009C000C83AD10508F05AC0C53AD10508F04BC065 +:1009D000C430D10508F0BBC1219709F0B5C101E0D1 +:1009E00010E0F5C1CF3FD10511F008F0B0C1C03F14 +:1009F000D10508F092C0CE01805E9109089708F4F5 +:100A0000A6C1A2C1C11591E5D907A8F4C23020E55D +:100A1000D20708F09EC0C11580E5D80709F485C04B +:100A200008F091C0C11520E4D20708F08DC1DD2780 +:100A30008E01106CCCC1C11580E8D80758F4C115DF +:100A400090E7D90708F07CC1C11520E6D20708F469 +:100A500022C17AC1C11580E9D80708F075C1DF70DD +:100A60008E01106AB4C1C53AD10509F472C1C63A03 +:100A7000D10509F071C102E810E4A9C1C83AD10555 +:100A800009F46DC1C93AD10509F46CC1CA3AD1055E +:100A900009F46BC1CB3AD10509F46AC1CC3AD1054E +:100AA00009F469C1CD3AD10509F468C1C03BD1054B +:100AB00009F467C1CE3AD10509F466C1CF3AD10530 +:100AC00009F465C1C13BD10509F464C1C23BD1053C +:100AD00009F463C1C33BD10509F462C1C43BD1052C +:100AE00009F461C1C53BD10509F460C1C63BD1051C +:100AF00009F45FC1C73BD10509F45EC1C83BD1050C +:100B000009F45DC1C93BD10509F45CC1CA3BD105FB +:100B100009F45BC100E014E45AC18E01106557C1AD +:100B2000CE019F700E94C80453C10E941F149FEF02 +:100B300024E38CE0915020408040E1F700C00000A9 +:100B40000E94571B44C18091CD0181608093CD01EB +:100B50003EC10E94001D811102C00E94E61C0E943D +:100B60001D1D90E09093EE018093ED01C23090E561 +:100B7000D90721F48091ED01816086C0C43020E561 +:100B8000D20721F48091ED0182607EC0C63080E5FD +:100B9000D80721F48091ED01846076C0C83090E5DB +:100BA000D90719F48091ED0127C0CA3020E5D2079A +:100BB00021F48091ED01806167C0CC3080E5D807D9 +:100BC00021F48091ED0180625FC0CE3090E5D907BD +:100BD00021F48091ED01806457C0C03120E5D20737 +:100BE00021F48091ED0180684FC0C23180E5D807C3 +:100BF00029F48091ED018460886046C0C33090E59F +:100C0000D90721F48091ED018E7F3EC0C53020E5EB +:100C1000D20721F48091ED018D7F36C0C73080E589 +:100C2000D80721F48091ED018B7F2EC0C93090E56B +:100C3000D90719F48091ED0126C0CB3020E5D20709 +:100C400021F48091ED018F7E1FC0CD3080E5D80763 +:100C500021F48091ED018F7D17C0CF3090E5D90749 +:100C600021F48091ED018F7B0FC0C13120E5D207C7 +:100C700021F48091ED018F7707C0C331D04531F465 +:100C80008091ED018B7F877F8093ED018091ED0155 +:100C90000E94211D9CC08D2F99278F70992781302C +:100CA0009105D9F49E012370332702C0880F991F44 +:100CB0002A95E2F79C688E0144E0000F111F4A95C7 +:100CC000E1F700271370802B912B53E0CC0FDD1F31 +:100CD0005A95E1F7C076DD272FC08230910531F4B7 +:100CE000DC2FCC278E01016F106A71C08330910513 +:100CF00069F4CE018370992701E010E002C0000F73 +:100D0000111F8A95E2F7C8019C680FC0049709F08B +:100D10005EC0CE018370992701E010E002C0000F91 +:100D2000111F8A95E2F7C8019A6823E0CC0FDD1FF6 +:100D30002A95E1F7C07ED7708C010C2B1D2B47C084 +:100D4000DF708E01106243C000E010E040C08E01F1 +:100D50003EC001E810E43BC003E810E438C002EEF6 +:100D600014E435C009EE14E432C00AEE14E42FC0D6 +:100D700005EB14E42CC006EB14E429C007EB14E4E3 +:100D800026C00CEC14E423C00DEC14E420C003E8EE +:100D900015E41DC00AE815E41AC002E915E417C0FD +:100DA00004E915E414C001E216E411C003E216E4FC +:100DB0000EC004E216E40BC005E216E408C006E229 +:100DC00016E405C007E216E402C00AE216E4C80110 +:100DD000DF91CF911F910F91089596E0799FF001D7 +:100DE000112494E5899FE00DF11D1124E60FF11DFA +:100DF000EE0FFF1FE052FF4F85919491803E9105C9 +:100E0000E0F4803C910558F58133910509F46FC0F9 +:100E100048F48932910509F463C08A32910509F4D6 +:100E20006DC072C089339105E9F082389105D1F027 +:100E30008533910509F44DC067C0833E910581F16A +:100E400038F4803E9105B9F0823E9105D9F05CC03E +:100E5000863E910561F1873E9105A1F155C00E9442 +:100E6000C00408952091ED0120FD02C021FF4CC077 +:100E700080EE90E049C08091ED0180FFF9CF89E3D9 +:100E800090E042C08091ED0182FF0EC08091ED01A3 +:100E900084FF03C080E090E037C083EE90E034C070 +:100EA0008091ED0182FFF2CF82EE90E02DC0809123 +:100EB000ED0183FF0BC08091ED0184FDEBCF87EE48 +:100EC00090E022C08091ED0183FFF5CF86EE90E0A7 +:100ED0001BC08091ED0185FF07C089E290E014C03E +:100EE0008091ED0185FFF9CF85E390E00DC0809101 +:100EF000ED0186FF07C08AE290E006C08091ED0117 +:100F000086FFF9CF81E390E00E94D0040895089510 +:100F10000C948707809162010895CF93DF9300D0EE +:100F20001F92CDB7DEB79C018091E401843019F5A2 +:100F300093E099833B832A839093E9008FEF90910C +:100F4000E800815095FD06C095ED9A95F1F70000F7 +:100F50008111F5CF8091E80085FF0DC040E050E0A1 +:100F600063E070E0CE0101960E94F7098091E800ED +:100F70008E778093E8000F900F900F90DF91CF91C4 +:100F80000895CF93DF9300D01F92CDB7DEB72091A5 +:100F9000E401243021F522E029839B838A8383E0C6 +:100FA0008093E9008FEF9091E800815095FD06C095 +:100FB00095ED9A95F1F700008111F5CF8091E80049 +:100FC00085FF0DC040E050E063E070E0CE01019687 +:100FD0000E94F7098091E8008E778093E8000F90D7 +:100FE0000F900F90DF91CF9108952091E40124306C +:100FF000F1F422E02093E9002FEF3091E800215036 +:1010000035FD06C035ED3A95F1F700002111F5CF19 +:101010002091E80025FF0BC040E050E065E070E063 +:101020000E94F7098091E8008E778093E800089588 +:10103000CF93DF93EC019091E401943009F046C026 +:1010400080910C018823D9F080910D018823B9F09B +:101050009093E9008FEF9091E800815095FD06C0D4 +:1010600095E19A95F1F700008111F5CF8091E800A4 +:1010700085FF2CC040E050E060E170E017C081E0E7 +:101080008093E9008FEF9091E800815095FD06C0B4 +:1010900095ED9A95F1F700008111F5CF8091E80068 +:1010A00085FF14C040E050E068E070E0CE010E948F +:1010B000F7098091E8008E778093E80080E1FE01D7 +:1010C000A2E5B1E001900D928A95E1F7DF91CF9111 +:1010D00008958091E301811109C00E948C0B0E9448 +:1010E000E90B8091E20084608093E2000895109201 +:1010F000E301089508950C9490210E94ED1A0E9436 +:1011000096210E948F0E0C94880742E061EC81E0EA +:101110000E94060B42E061EC82E00E94060B42E076 +:1011200061EC83E00E94060B42E161EC84E00C94E8 +:10113000060B8091E601833009F455C030F481300C +:1011400071F0823009F48EC008958A3009F47AC0B3 +:101150008B3009F460C0893009F09CC020C08091B8 +:10116000E501813A09F096C08091E800877F80937D +:10117000E8008091E9019091EA01892B21F460E176 +:1011800082E591E003C060E080E090E070E00E94C2 +:10119000420A8091E8008B778093E800089580915F +:1011A000E501813209F076C08091E9019091EA0170 +:1011B000009719F0039709F06DC08091E800877FD0 +:1011C0008093E8008091E80082FD05C08091E401F1 +:1011D0008111F8CF5FC08091F1008093620180910E +:1011E000E8008B7753C08091E501813A09F052C045 +:1011F0008091E9019091EA01892B09F04BC080911F +:10120000E800877F8093E8008091E80080FFFCCFB2 +:1012100080910C0136C08091E5018132D9F5809131 +:10122000E9019091EA01892BA9F58091E800877F77 +:101230008093E8000E943B0B8091E70180930C01B2 +:101240000C941F148091E501813221F58091E80012 +:10125000877F8093E8000E943B0B8091E801809398 +:10126000630108958091E501813AA1F48091E8003D +:10127000877F8093E8008091E80080FFFCCF809119 +:1012800063018093F1008091E8008E778093E800FD +:101290000C943B0B089584B7877F84BF88E10FB619 +:1012A000F89480936000109260000FBE90E080E898 +:1012B0000FB6F89480936100909361000FBE0E9476 +:1012C000DE0E0E948C0B0E94E90B8091E20084608C +:1012D0008093E20078940E946F0E0E94E00E82E0FC +:1012E00091E00E948A0E0E947E218091E401853067 +:1012F00069F40E94AE1A8091E2018823B1F30E9442 +:10130000D91A882391F30E94E109EFCF0E94E60EDB +:10131000ECCF292F332723303105C9F064F4213075 +:10132000310581F02230310509F043C08DE690E0AF +:1013300024E632E042C021323105F1F0223231059B +:1013400041F137C082E190E021ED32E036C09927CB +:101350008130910541F08230910541F0892B49F5AA +:10136000E0E6F2E005C0E8E4F2E002C0E0E3F2E02B +:10137000849190E09F0121C06430D8F4E62FF0E022 +:10138000EE0FFF1FEE5DFE4F2081318189E090E07E +:1013900014C0643070F470E0FB01EE0FFF1FE65ED6 +:1013A000FE4F20813181FB01EA5EFE4F808190E09B +:1013B00004C080E090E020E030E0FA013183208337 +:1013C000089580E189BD82E189BD09B400FEFDCFA9 +:1013D0008091D8008F7D8093D8008091E00082605A +:1013E0008093E0008091E00081FDFCCF0895CF92D2 +:1013F000DF92EF92FF920F931F93CF93DF93EC0155 +:101400008B016A010E945A0B811133C0C114D104AF +:1014100039F0F60180819181081B190BC80FD91F83 +:10142000E12CF12C0115110519F18091E80085FDE1 +:1014300016C08091E8008E778093E800C114D10433 +:1014400049F0F60180819181E80EF91EF182E08277 +:1014500085E00FC00E945A0B882321F30AC08991AE +:101460008093F10001501109FFEFEF1AFF0ADACF64 +:1014700080E0DF91CF911F910F91FF90EF90DF906F +:10148000CF9008952091EB013091EC01261737079A +:1014900048F06115710539F42091E8002E7720930A +:1014A000E80001C0B90140E061157105A9F1209182 +:1014B000E401222309F443C0253009F442C02091FD +:1014C000E80023FD40C02091E80022FD32C02091B9 +:1014D000E80020FFE9CF4091F3002091F20030E0D6 +:1014E000342BFC01CF016115710559F0283031050D +:1014F00040F481918093F100615071092F5F3F4F5B +:10150000F1CF41E02830310509F040E02091E800BA +:101510002E772093E800C8CF4111C9CF0AC080912F +:10152000E401882361F0853061F08091E80083FD5B +:101530000AC08091E80082FFF2CF80E0089582E047 +:10154000089583E0089581E008952091EB013091A2 +:10155000EC012617370748F06115710539F4209121 +:10156000E8002E772093E80001C0B901FC0120E0DB +:101570006115710591F18091E401882309F440C05F +:10158000853009F43FC08091E80083FD3DC0809123 +:10159000E80082FD2FC08091E80080FFE9CF209114 +:1015A000F3008091F20090E0922B6115710559F0E3 +:1015B0008830910540F424912093F10031966150D8 +:1015C00071090196F2CF21E0089709F020E080919F +:1015D000E8008E778093E800CBCF2111CCCF0AC0F2 +:1015E0008091E401882361F0853061F08091E8000A +:1015F00083FD0AC08091E80082FFF2CF80E0089569 +:1016000082E0089583E0089581E00895982F97304F +:1016100058F59093E900981739F07091EC002091FB +:10162000ED005091F00003C0242F762F50E021FFF1 +:1016300019C03091EB003E7F3093EB003091ED000C +:101640003D7F3093ED003091EB0031603093EB0043 +:101650007093EC002093ED005093F0002091EE0089 +:1016600027FF07C09F5FD3CF8F708093E90081E091 +:10167000089580E008958091E50187FF11C0809171 +:10168000E80082FD05C08091E4018111F8CF11C00E +:101690008091E8008B770BC08091E401882349F0AA +:1016A0008091E80080FFF8CF8091E8008E778093EA +:1016B000E80008952091E4003091E50095E640911E +:1016C000EC00842F817040FF22C08091E80080FDF3 +:1016D0001CC08091E401882391F0853091F08091C5 +:1016E000EB0085FD10C04091E4005091E5004217E9 +:1016F000530729F39A01915011F784E0089582E08D +:10170000089583E0089581E0089580E00895409170 +:10171000E80042FFDECF08950E94FA0B0E94020CFF +:10172000E0EEF0E0808181608083E8EDF0E0808190 +:101730008F77808319BCA7EDB0E08C918E7F8C935E +:1017400080818F7E80831092E30108950F931F9311 +:10175000CF93DF930E94FA0B0E94020CC8EDD0E0F9 +:1017600088818F77888388818068888388818F7D4E +:10177000888319BC1092E4011092E0011092E201FA +:101780001092E10100EE10E0F80180818B7F8083F0 +:1017900088818160888342E060E080E00E94060BDF +:1017A000E1EEF0E080818E7F8083E2EEF0E08081E8 +:1017B00081608083808188608083F80180818E7F52 +:1017C0008083888180618883DF91CF911F910F9101 +:1017D0000895E8EDF0E080818F7E8083E7EDF0E012 +:1017E00080818160808384E082BF81E08093E30117 +:1017F0000C94A60BE8EDF0E080818E7F8083109240 +:10180000E20008951092DA001092E10008951F920C +:101810000F920FB60F9211242F933F934F935F9324 +:101820006F937F938F939F93AF93BF93EF93FF93A8 +:101830008091E10082FF0BC08091E20082FF07C02F +:101840008091E1008B7F8093E1000E946E0E809179 +:10185000DA0080FF1FC08091D80080FF1BC08091FC +:10186000DA008E7F8093DA008091D90080FF0DC06E +:1018700080E189BD82E189BD09B400FEFDCF81E030 +:101880008093E4010E94690805C019BC1092E4012C +:101890000E9477088091E10080FF19C08091E200EA +:1018A00080FF15C08091E2008E7F8093E2008091DE +:1018B000E20080618093E2008091D8008062809392 +:1018C000D80019BC85E08093E4010E947B088091D8 +:1018D000E10084FF30C08091E20084FF2CC080E1F1 +:1018E00089BD82E189BD09B400FEFDCF8091D80099 +:1018F0008F7D8093D8008091E1008F7E8093E100FE +:101900008091E2008F7E8093E2008091E20081600E +:101910008093E2008091E001882311F084E007C009 +:101920008091E30087FD02C081E001C083E08093E5 +:10193000E4010E947D088091E10083FF29C080912D +:10194000E20083FF25C08091E100877F8093E10062 +:1019500082E08093E4011092E0018091E1008E7FAB +:101960008093E1008091E2008E7F8093E20080917D +:10197000E20080618093E20042E060E080E00E944B +:10198000060B8091F00088608093F0000E947A0836 +:10199000FF91EF91BF91AF919F918F917F916F9147 +:1019A0005F914F913F912F910F900FBE0F901F901D +:1019B00018951F920F920FB60F9211242F933F93F9 +:1019C0004F935F936F937F938F939F93AF93BF9347 +:1019D000CF93DF93EF93FF93C091E900CF70809195 +:1019E000EC00D82FD17080FDD0E81092E9008091F2 +:1019F000F000877F8093F00078940E941D0D109274 +:101A0000E9008091F00088608093F000CD2BCF70CA +:101A1000C093E900FF91EF91DF91CF91BF91AF911A +:101A20009F918F917F916F915F914F913F912F91F6 +:101A30000F900FBE0F901F9018951F93CF93DF93B9 +:101A4000CDB7DEB7AA970FB6F894DEBF0FBECDBFF5 +:101A5000E5EEF1E088E08E0F9091F10091938E1306 +:101A6000FBCF0E9499088091E80083FF1FC18091FD +:101A7000E5019091E601492F50E04A30510508F008 +:101A800015C1FA01EA5AFF4F0C941823803881F0EF +:101A9000823809F00BC18091E9018F708093E900D1 +:101AA0008091EB0085FB882780F91092E90006C041 +:101AB0008091E1019091E201911182609091E800A2 +:101AC000977F9093E8008093F1001092F100C8C0D6 +:101AD000282F2D7F09F0EAC0882319F0823061F0A9 +:101AE000E5C08091E701813009F0E0C0933009F052 +:101AF00080E08093E2012BC08091E701811127C033 +:101B00008091E9018F7009F4D1C08093E9002091A0 +:101B1000EB0020FF1CC0933021F48091EB00806229 +:101B200014C09091EB0090619093EB0021E030E0C5 +:101B3000A90102C0440F551F8A95E2F74093EA00BD +:101B40001092EA008091EB0088608093EB00109285 +:101B5000E9008091E800877F86C08111A7C01091BD +:101B6000E7011F778091E3008078812B8093E30069 +:101B70008091E800877F8093E8000E943B0B809172 +:101B8000E80080FFFCCF8091E30080688093E30051 +:101B9000111102C082E001C083E08093E40186C09D +:101BA0008058823008F082C08091E7019091E8016E +:101BB0008C3D53E0950779F583E08A838AE2898337 +:101BC0004FB7F894DE01139620E03EE051E2E32F98 +:101BD000F0E050935700E49120FF03C0E295EF70CE +:101BE0003F5FEF708E2F90E0EA3010F0C79601C093 +:101BF000C0968D939D932F5F243149F74FBF8091FD +:101C0000E800877F8093E8006AE270E0CE010196E9 +:101C10000E94420A14C0AE014F5F5F4F6091E9011C +:101C20000E948909BC01892B09F440C09091E80009 +:101C3000977F9093E80089819A810E94A50A8091FC +:101C4000E8008B778093E80031C0803879F5809187 +:101C5000E800877F8093E8008091E0018093F100A5 +:101C60008091E8008E778093E8000E943B0B1EC0B5 +:101C700081111CC09091E7019230C0F48091E8007E +:101C8000877F8093E8009093E0010E943B0B809156 +:101C9000E001811106C08091E30087FD02C081E070 +:101CA00001C084E08093E4010E9485088091E800EF +:101CB00083FF0AC08091E800877F8093E8008091CD +:101CC000EB0080628093EB00AA960FB6F894DEBF1B +:101CD0000FBECDBFDF91CF911F9108950895CF938F +:101CE0008091E4018823A1F0C091E900CF70909128 +:101CF000EC00892F817090FD80E8C82B1092E900DC +:101D00008091E80083FD0E941D0DCF70C093E90013 +:101D1000CF91089590936901809368010895E091AF +:101D20006801F0916901309721F00190F081E02D78 +:101D3000099480E00895E0916801F091690130977D +:101D400021F00280F381E02D09940895E09168016B +:101D5000F0916901309721F00480F581E02D09941C +:101D6000089520916601309167018217930771F001 +:101D70009093670180936601E0916801F091690199 +:101D8000309721F00680F781E02D09940895209185 +:101D90006401309165018217930771F0909365019A +:101DA00080936401E0916801F0916901309721F01E +:101DB0000084F185E02D0994089508950C94DD0EBA +:101DC0000E94F31A0E94A0030C94B91BCF92DF92D9 +:101DD000EF92FF920F931F93CF93DF93CDB7DEB7B0 +:101DE0002B970FB6F894DEBF0FBECDBF0E94B8038D +:101DF0008BE6C82E81E0D82E00E010E0E02E802F88 +:101E00000E94A604F60141916F01F42EF826B1F468 +:101E10000F5F1F4F0E30110589F78FEF89838A837B +:101E20001B820E94FC1A8160782F9D838C834981DC +:101E30005A816B818D810E94890F40C09091CD01A4 +:101E400091FF04C08B870E94AC048B8520E030E0BA +:101E50004F2D50E0922FBA01022E02C07595679562 +:101E60000A94E2F760FF24C02E83EF8221E030E085 +:101E7000690102C0CC0CDD1C9A95E2F790E08C2140 +:101E80009D21892B09F420E028870E94FC1A81609B +:101E9000782F9A8789874E815F8168858A850E941D +:101EA000890FF801E559FE4F8081C826C08206C01F +:101EB0002F5F3F4F2630310569F6AACF0E94A01E42 +:101EC00010916A010E948F0E1817A1F00E948F0EC8 +:101ED00080936A012B960FB6F894DEBF0FBECDBF7C +:101EE000DF91CF911F910F91FF90EF90DF90CF90F6 +:101EF0000C9488072B960FB6F894DEBF0FBECDBFAB +:101F0000DF91CF911F910F91FF90EF90DF90CF90D5 +:101F10000895CF93DF93CDB7DEB72B970FB6F89424 +:101F2000DEBF0FBECDBF4F83588769877A878B8707 +:101F3000DE01119686E0FD0111928A95E9F785E0B0 +:101F4000FE01379601900D928A95E1F749815A81F9 +:101F50006B817C818D819E810E94B9162B960FB674 +:101F6000F894DEBF0FBECDBFDF91CF9108950895E5 +:101F7000CF93882309F4C2C0C82F823859F40E9435 +:101F80008F0E81FDBBC089E30E9462190E942F1A47 +:101F900089E30CC0833879F40E948F0E80FDAEC0B7 +:101FA00083E50E9462190E942F1A83E50E94A419FA +:101FB000CF910C942F1A843859F40E948F0E82FD11 +:101FC0009DC087E40E9462190E942F1A87E4EECF19 +:101FD0008CEF8C0F813A48F48C2F0E94E320811102 +:101FE0008DC08C2F0E946219E3CF80E28C0F883065 +:101FF00048F4C77081E001C0880FCA95EAF70E94D3 +:10200000E819D6CF8BE58C0F833078F4C53A29F0E8 +:10201000C63A31F083E890E005C081E890E002C064 +:1020200082E890E0CF910C94B10E88E58C0F83315B +:1020300008F064C0C83A39F1C93A41F1CA3A49F1E5 +:10204000CB3A51F1CC3A59F1CD3A61F1C03B69F14B +:10205000CE3A71F1CF3A79F1C13B81F1C23B89F1BE +:10206000C33B91F1C43B99F1C53BA1F1C63BA9F13A +:10207000C73BB1F1C83BB9F1C93BC1F1CA3BC9F19A +:1020800080E090E038C082EE90E035C089EE90E0CC +:1020900032C08AEE90E02FC085EB90E02CC086EB3A +:1020A00090E029C087EB90E026C08CEC90E023C044 +:1020B0008DEC90E020C083E891E01DC08AE891E0BB +:1020C0001AC082E991E017C084E991E014C081E26E +:1020D00092E011C083E292E00EC084E292E00BC075 +:1020E00085E292E008C086E292E005C087E292E0D5 +:1020F00002C08AE292E0CF910C94C70ECF9108956E +:10210000882309F44BC0823859F40E948F0E81FF56 +:1021100045C089E30E9462190E942F1A89E30CC00E +:10212000833871F40E948F0E80FF38C083E50E94CF +:1021300062190E942F1A83E50E94A4190C942F1A89 +:10214000843859F40E948F0E82FF28C087E40E94D1 +:1021500062190E942F1A87E4EFCF9CEF980F913AF3 +:1021600058F390E2980F983050F4877091E001C0D6 +:10217000990F8A95EAF7892F0E94EE19DFCF9BE528 +:10218000980F933020F480E090E00C94B10E885AC0 +:10219000833120F480E090E00C94C70E08958823EA +:1021A00021F00E94E8190C942F1A0895882321F039 +:1021B0000E94EE190C942F1A0895BF92CF92DF92CD +:1021C000EF92FF920F931F93CF93DF9300D000D035 +:1021D00000D0CDB7DEB725E0FC01DE0111960190FD +:1021E0000D922A95E1F7FC01D080118102812581B1 +:1021F00022952F7043815481452B09F4FCC21F3F67 +:1022000021F4FFEFDF1609F4F6C27C012E830E9451 +:10221000B70FD9821A8369817A81802F0E945E1953 +:10222000182FB92E0E9413190E94DA172E8100234D +:1022300019F00E94051A2E81EB2DE295EF70F0E067 +:10224000E05AFF4F0C9418238B2D807F9B2D9F709D +:10225000F92E882319F0F29480EFF822002389F0F8 +:10226000FF2009F475C280E2810F883020F48F2DA1 +:102270000E94E81903C08F2D0E94F8190E942F1A9E +:1022800067C2812F0E948010FF2009F4B4C2105E43 +:102290008F2D183018F40E94EE1902C00E94FE190A +:1022A00026960FB6F894DEBF0FBECDBFDF91CF915B +:1022B0001F910F91FF90EF90DF90CF90BF900C9403 +:1022C0002F1A3B2D307F8B2D8F70303211F082957D +:1022D000807F112319F0113021F12CC00023B9F0B7 +:1022E000222309F4A0C1213009F09DC126960FB622 +:1022F000F894DEBF0FBECDBFDF91CF911F910F913C +:10230000FF90EF90DF90CF90BF900C94181A22238B +:1023100019F0213009F46FC28E830E941B1A8E813E +:1023200096C1002321F0223008F065C27CC1211142 +:1023300062C28DC1002321F0222309F474C108C2B6 +:10234000222309F484C119C22B2D269526952370CA +:1023500030E02115310521F021303105D1F04BC29B +:10236000002321F0812F9B2D937002C080E090E02C +:1023700026960FB6F894DEBF0FBECDBFDF91CF918A +:102380001F910F91FF90EF90DF90CF90BF900C9432 +:10239000B10E002321F0812F9B2D937002C080E0AD +:1023A00090E026960FB6F894DEBF0FBECDBFDF914A +:1023B000CF911F910F91FF90EF90DF90CF90BF9042 +:1023C0000C94C70E812F002319F00E94A81D02C093 +:1023D0000E94101E26960FB6F894DEBF0FBECDBF2A +:1023E000DF91CF911F910F91FF90EF90DF90CF90F1 +:1023F000BF900C94951E8B2D837009F07BC001114A +:10240000FAC1812F829586958770880F880F912F4A +:102410009F70C92ED12CE12CF12C082E04C0CC0CBD +:10242000DD1CEE1CFF1C0A94D2F714FF12C04FE013 +:1024300050E060E070E004C0440F551F661F771F36 +:102440008A95D2F7CB01BA016095709580959095E9 +:1024500003C060E070E0CB012B2D269526952370FC +:10246000422F50E042305105D9F04330510569F117 +:102470006C297D298E299F294130510551F12696DD +:102480000FB6F894DEBF0FBECDBFDF91CF911F9185 +:102490000F91FF90EF90DF90CF90BF900C940118B8 +:1024A0006C297D298E299F2926960FB6F894DEBFC8 +:1024B0000FBECDBFDF91CF911F910F91FF90EF9095 +:1024C000DF90CF90BF900C941D180E940118C70197 +:1024D000B60126960FB6F894DEBF0FBECDBFDF91D2 +:1024E000CF911F910F91FF90EF90DF90CF90BF9011 +:1024F0000C94E517002319F08B2D817001C086958F +:10250000882309F478C1812F829586958770880F7A +:10251000880F912F9F70C92ED12CE12CF12C082E01 +:1025200004C0CC0CDD1CEE1CFF1C0A94D2F714FF77 +:1025300012C04FE050E060E070E004C0440F551F4F +:10254000661F771F8A95D2F7CB01BA016095709507 +:102550008095909503C060E070E0CB012B2D26950F +:1025600026952370422F50E042305105D9F0433078 +:10257000510569F16C297D298E299F29413051052A +:1025800051F126960FB6F894DEBF0FBECDBFDF9196 +:10259000CF911F910F91FF90EF90DF90CF90BF9060 +:1025A0000C94DB186C297D298E299F2926960FB65D +:1025B000F894DEBF0FBECDBFDF91CF911F910F9179 +:1025C000FF90EF90DF90CF90BF900C94F7180E948F +:1025D000DB18C701B60126960FB6F894DEBF0FBE12 +:1025E000CDBFDF91CF911F910F91FF90EF90DF90C2 +:1025F000CF90BF900C94BF18103FD1F118F4103E4B +:1026000050F4A1C0123F09F463C008F44CC0133F5A +:1026100009F473C098C01F708B2D8F710023A1F037 +:102620000E945818812F26960FB6F894DEBF0FBE71 +:10263000CDBFDF91CF911F910F91FF90EF90DF9071 +:10264000CF90BF900C94CF100E947918812F2696BE +:102650000FB6F894DEBF0FBECDBFDF91CF911F91B3 +:102660000F91FF90EF90DF90CF90BF900C94D61019 +:102670000023A9F02111BFC08B2D8F7126960FB6B4 +:10268000F894DEBF0FBECDBFDF91CF911F910F91A8 +:10269000FF90EF90DF90CF90BF900C949E18223067 +:1026A00008F0A9C0E9CF0023A9F08B2D8F712696E1 +:1026B0000FB6F894DEBF0FBECDBFDF91CF911F9153 +:1026C0000F91FF90EF90DF90CF90BF900C9458182F +:1026D000002359F38B2D8F7126960FB6F894DEBF29 +:1026E0000FBECDBFDF91CF911F910F91FF90EF9063 +:1026F000DF90CF90BF900C947918002399F08B2D28 +:102700008F7126960FB6F894DEBF0FBECDBFDF9156 +:10271000CF911F910F91FF90EF90DF90CF90BF90DE +:102720000C94431826960FB6F894DEBF0FBECDBFAB +:10273000DF91CF911F910F91FF90EF90DF90CF909D +:10274000BF900C9439180023A9F0222309F4ADCFCF +:10275000812F26960FB6F894DEBF0FBECDBFDF9156 +:10276000CF911F910F91FF90EF90DF90CF90BF908E +:102770000C94B80F222309F4ADCF812F26960FB603 +:10278000F894DEBF0FBECDBFDF91CF911F910F91A7 +:10279000FF90EF90DF90CF90BF900C9480104B2D66 +:1027A0004F70612FC7010E94550226960FB6F8940C +:1027B000DEBF0FBECDBFDF91CF911F910F91FF9074 +:1027C000EF90DF90CF90BF900C945D174B2D4F7022 +:1027D000612FC70126960FB6F894DEBF0FBECDBF9E +:1027E000DF91CF911F910F91FF90EF90DF90CF90ED +:1027F000BF900C94AD0426960FB6F894DEBF0FBEC2 +:10280000CDBFDF91CF911F910F91FF90EF90DF909F +:10281000CF90BF9008950E94051A0E94151A0E9439 +:10282000DA190E942F1A0E94461F0E94951E80E00E +:1028300090E00E94B10E80E090E00C94C70E0E94E0 +:10284000F5190C940B140E945319292F22952F70FF +:1028500030E02C3031054CF42A3031056CF4225034 +:1028600031092230310588F407C02C30310549F098 +:102870002F30310531F009C0803E48F0803F29F407 +:1028800006C093FB882780F9089580E0089581E0D1 +:102890000895CF93DF9300D000D01F92CDB7DEB75D +:1028A0000F900F900F900F900F90DF91CF910895A0 +:1028B000CF93DF9300D000D000D0CDB7DEB72696FF +:1028C0000FB6F894DEBF0FBECDBFDF91CF91089554 +:1028D0001F93CF93DF93C091790116E080917A0125 +:1028E000C81799F0D0E01C9FF0011D9FF00D112436 +:1028F000E558FE4F408151816281738184819581C9 +:102900000E9458142196C770E9CFDF91CF911F9193 +:1029100008954091AB015091AC016091AD0170916F +:10292000AE018091AF019091B0010C945814809148 +:10293000B00182958F7009F054C08091AD01882359 +:1029400009F44FC080917901A0917A016091AB01A7 +:102950007091AC014091AE015091AF01B6E08A1781 +:1029600009F43FC090E041155105C1F17F3F11F4DA +:102970006F3FA1F1B89FF001B99FF00D1124E55808 +:10298000FE4F218172132AC02081621327C0228149 +:10299000211124C0238134812417350710F42150DC +:1029A0003109241B350B283C3105C0F42091B001BE +:1029B0002F7020612093B00126E0289FF001299F0D +:1029C000F00D1124E058FE4F80818F70806180836C +:1029D0008BEA91E00E94DD100C94681401968770D8 +:1029E000BECF0895CF92DF92EF92FF920F931F9385 +:1029F000CF93DF93CDB7DEB762970FB6F894DEBF03 +:102A00000FBECDBF8C0185E0F801DE011D9601905F +:102A10000D928A95E1F7D8014C9111965C9111972E +:102A200012966C9112971396CD90DC90149730917A +:102A3000AB017091AC018091AE019091AF01009714 +:102A400009F46BC17F3F19F43F3F09F466C1E09080 +:102A5000AD01EE2009F4C0C02091B001C816D9061E +:102A600028F0F601E81BF90BCF0104C08095909582 +:102A70008C0D9D1DFF24F394883C910578F0F12C7A +:102A8000207F09F0C6C07C2DD98AC88A89890E9416 +:102A900049148BEA91E00E94DD10B1C0822F807F43 +:102AA00009F046C0751314C0341312C0611110C070 +:102AB0002F7020612093B0010E9489148BEA91E06D +:102AC0000E94DD108091B001D80115968C932EC024 +:102AD000CD2819F15F3F11F44F3FF9F0F62E611147 +:102AE0001CC08091790120917A0136E0821709F4A7 +:102AF0005AC090E0389FF001399FF00D1124E5583D +:102B0000FE4F7181571306C07081471303C0728155 +:102B1000711103C001968770E9CFF62E662309F480 +:102B200018C18091B00181608093B001F12C11C176 +:102B3000751308C0341306C0611104C08091B00140 +:102B4000D801C3C04D875E878D859E856A8B0E94A4 +:102B500023146A898823E1F16623D1F12091B00121 +:102B6000822F82958F7090E0029774F08091AB0174 +:102B70009091AC0198878F831986DB86CA862C8753 +:102B8000CE0107960E94DD1086E0F801ABEAB1E0C5 +:102B900001900D928A95E1F70E9497140E94891482 +:102BA000FF24F394D6C04D875E878D859E850E9455 +:102BB0005319292F22952F7030E0223031050CF067 +:102BC000BCC09F7009F0B6C0805E883008F4C1C0F8 +:102BD000C8010E94DD10E4CFC816D90608F453C01E +:102BE000F601E81BF90BCF01883C910508F450C0B1 +:102BF000F12C7C2DD98AC88A89890E944914EBEA74 +:102C0000F1E086E0DF011D928A95E9F70E948914C0 +:102C1000A0C0751314C0341312C0611110C080918C +:102C2000B001F8018583C8010E94DD1086E0EBEA5F +:102C3000F1E0DF011D928A95E9F7FE2C8AC04D87ED +:102C40005E878D859E856A8B0E9423146A898823FE +:102C500009F4BECF662309F4BBCF2091B001822FC7 +:102C600082958F7090E002970CF48ECF8091AB012B +:102C70009091AC019A8389831B82DD82CC822E8362 +:102C8000CE0101967FCF809590958C0D9D1DACCF88 +:102C9000F62E662309F49CCF75132EC034132CC076 +:102CA0002091B00120FD1FC0822F82958F70D9F036 +:102CB000D80115962C9315978F3049F08F5F982F78 +:102CC0009295907F822F8F70892B15968C93C801D7 +:102CD0000E94DD1086E0F801ABEAB1E001900D92B0 +:102CE0008A95E1F793CF86E0F801ABEAB1E0019075 +:102CF0000D928A95E1F72DC04D875E878D859E8563 +:102D00000E942314811140CF8091B0018160809393 +:102D1000B001C8010E94DD101CC0662309F458CF21 +:102D20004D875E878D859E850E942314882309F434 +:102D30004FCF2ACF811148CF0CC0243031050CF081 +:102D400047CF9F7009F440CFF8019581907F09F03B +:102D50003BCF8F2D62960FB6F894DEBF0FBECDBF6E +:102D6000DF91CF911F910F91FF90EF90DF90CF9067 +:102D700008951F93CF93DF93CDB7DEB72C970FB68F +:102D8000F894DEBF0FBECDBF4F83588769877A871F +:102D90008B879C87CE0107960E94F214882369F0E6 +:102DA0008F8198852A853B85232BF1F19F3F09F080 +:102DB00063C08F3F09F060C037C086E0FE013796E0 +:102DC000DE01119601900D928A95E1F76F81788569 +:102DD000EA85FB85309741F17F3F11F46F3F21F188 +:102DE00020917A0130E0C9010196877099274091BE +:102DF000790150E08417950709F447C069837A8305 +:102E0000FD83EC8396E0929FD001939FB00D112437 +:102E1000A558BE4FFE01319601900D929A95E1F7AB +:102E200080937A010E94681416E080917901909154 +:102E30007A018917C1F1189FC001112485589E4F4E +:102E40000E94F214882379F1E09179011E9FF0012C +:102E50001124E558FE4F4081518162817381848144 +:102E600095810E9458148091790190E001968770B5 +:102E7000992780937901D9CF4F81588569857A85C3 +:102E80008B859C850E945814CFCF0E941F141092EE +:102E90007A0110927901EBEAF1E086E0DF011D9200 +:102EA0008A95E9F7C1CF2C960FB6F894DEBF0FBE16 +:102EB000CDBFDF91CF911F910895EF92FF920F93B5 +:102EC0001F93CF93DF938C01892B09F46CC0F12CF5 +:102ED000EE24E394E8012196F8018491843740F4CC +:102EE000843008F051C0813081F0823019F15BC02C +:102EF000853709F444C0A8F19CE7980F903708F093 +:102F000052C08F770E94801041C00E5F1F4FFE019C +:102F1000C49180E28C0F883048F4C7708E2D01C0B8 +:102F2000880FCA95EAF70E94081A14C08C2F0E94D5 +:102F3000B80F2DC00E5F1F4FFE01C49180E28C0FB1 +:102F4000883058F4C7708E2D01C0880FCA95EAF7F3 +:102F50000E940E1A0E942F1A1AC08C2F0E948010F5 +:102F600016C00E5F1F4FFE01C491CC2381F08FE984 +:102F70009FE00197F1F700C00000C150F6CF0E5F4F +:102F80001F4FFE01F49003C00E94B80F8E018F2DD9 +:102F9000882309F49FCFEFE9FFE03197F1F700C0F4 +:102FA00000008150F5CFDF91CF911F910F91FF90DD +:102FB000EF90089508956093B5017093B6018093E2 +:102FC000B7019093B8010C940B140F931F930091C9 +:102FD000B5011091B6012091B7013091B801DC0123 +:102FE000CB01802B912BA22BB32B8093B501909317 +:102FF000B601A093B701B093B8011F910F910C9443 +:103000000B140F931F930091B5011091B6012091FD +:10301000B7013091B801DC01CB0180239123A223B9 +:10302000B3238093B5019093B601A093B701B093F9 +:10303000B8011F910F910C940B140F931F930091E3 +:10304000B5011091B6012091B7013091B801DC01B2 +:10305000CB0180279127A227B3278093B5019093B6 +:10306000B601A093B701B093B8011F910F910C94D2 +:103070000B141092B1011092B2011092B301109290 +:10308000B4010C940B1441E050E060E070E004C027 +:10309000440F551F661F771F8A95D2F74093B101E1 +:1030A0005093B2016093B3017093B4010C940B146C +:1030B00041E050E060E070E004C0440F551F661F1F +:1030C000771F8A95D2F78091B1019091B201A091BA +:1030D000B301B091B401482B592B6A2B7B2B409341 +:1030E000B1015093B2016093B3017093B4010C9499 +:1030F0000B1441E050E060E070E004C0440F551F45 +:10310000661F771F8A95D2F7409550956095709508 +:103110008091B1019091B201A091B301B091B4013D +:10312000482359236A237B234093B1015093B20172 +:103130006093B3017093B4010C940B1441E050E020 +:1031400060E070E004C0440F551F661F771F8A952A +:10315000D2F78091B1019091B201A091B301B091E9 +:10316000B401482759276A277B274093B101509320 +:10317000B2016093B3017093B4010C940B140F93DC +:103180001F930091B1011091B2012091B3013091D0 +:10319000B401DC01CB01802B912BA22BB32B8093AC +:1031A000B1019093B201A093B301B093B4011F9108 +:1031B0000F910C940B140F931F930091B101109178 +:1031C000B2012091B3013091B401DC01CB01802325 +:1031D0009123A223B3238093B1019093B201A093D2 +:1031E000B301B093B4011F910F910C940B140F9382 +:1031F0001F930091B1011091B2012091B301309160 +:10320000B401DC01CB0180279127A227B32780934B +:10321000B1019093B201A093B301B093B4011F9197 +:103220000F910C940B140895CF92DF92EF92FF92BE +:103230000F931F93CF93DF938C01C090B501D09073 +:10324000B601E090B701F090B8018091B101909182 +:10325000B201A091B301B091B401C82AD92AEA2AD7 +:10326000FB2ACFE1D0E0D701C6010C2E04C0B695F1 +:10327000A795979587950A94D2F780FF06C0B80165 +:103280008C2F0E94ED06019721F4219760F780E0D2 +:1032900001C08C2FDF91CF911F910F91FF90EF9084 +:1032A000DF90CF900895CF93DF93EC010E94141923 +:1032B000BE010E94ED06DF91CF910895CB010E94DF +:1032C0005319089590910C01992321F090910D01CB +:1032D000911109C020910E0130910F01F901329630 +:1032E0009FEF40E01FC0982F9695969596959F303A +:1032F00050F5E0910E01F0910F01E90FF11D87707B +:1033000021E030E0A90102C0440F551F8A95E2F781 +:10331000CA019181892B818308959F3F39F04F5FC6 +:103320004E3041F051915813F8CF0DC05111F7CFE5 +:10333000942FF5CF9F3F39F0F901E90FF11D97FD6B +:10334000FA9582830895089590910C01992321F0B4 +:1033500090910D01911109C020910E0130910F0142 +:10336000F9013296205F3F4F1FC0982F9695969592 +:1033700096959F30F0F4E0910E01F0910F01E90F66 +:10338000F11D877021E030E0A90102C0440F551FF4 +:103390008A95E2F7CA0180959181892381830895F6 +:1033A0003196E217F30729F090819813F9CF108234 +:1033B000F7CF089581E090E0E0910E01F0910F01C8 +:1033C000E80FF91F1082019680319105A9F7089541 +:1033D0009091CC01892B8093CC0108958095909198 +:1033E000CC0189238093CC0108951092CC010895DB +:1033F0009091CB01892B8093CB010895809590917A +:10340000CB0189238093CB0108951092CB010895BD +:103410009091CA01892B8093CA010895809590915B +:10342000CA0189238093CA0108951092CA010895A0 +:103430008093B90108951092B901089580910E0109 +:1034400090910F01FC0131969C01205F3F4F80E07D +:10345000919191118F5FE217F307D1F70895E091F1 +:103460000E01F0910F018091CC018083E0910E015B +:10347000F0910F0190818091CB01892B8083E091A5 +:103480000E01F0910F0190818091CA01892B8083F8 +:103490008091B901882361F0E0910E01F0910F0154 +:1034A0009081892B80830E941E1A81111092B9018C +:1034B00080910E0190910F010C949B0ECF92DF92A0 +:1034C000EF92FF926C01EE24FF24C114D104E104B9 +:1034D000F10421F0C701B60120E101C020E0C72EB0 +:1034E000D82EE92EFF24C114D104E104F10419F00F +:1034F000285FC701B6016B017C0154E0F694E794A4 +:10350000D794C7945A95D1F7C114D104E104F104BA +:1035100019F02C5FC701B6016B017C0142E0F69403 +:10352000E794D794C7944A95D1F7C114D104E10424 +:10353000F10419F02E5FC701B601DC01CB01B6958D +:10354000A79597958795892B8A2B8B2B09F02F5F51 +:10355000822FFF90EF90DF90CF9008958091E4014B +:10356000843021F11092CE0120E488E190E00FB682 +:10357000F894A895809360000FBE2093600080E0CF +:103580000E94880783B7817F846083BF83B781608F +:1035900083BF7894889583B78E7F83BF88E10FB609 +:1035A000F89480936000109260000FBE0895089513 +:1035B0000895CF930E94D71A0E94B8030E94D81A88 +:1035C000C0E08C2F0E94A604811104C0CF5FCE30D2 +:1035D000C1F701C081E0CF9108950E941F140E949D +:1035E0008F0E0C94880782E084BD93E095BD9AEF1E +:1035F00097BD80936E0008952FB7F8948091CF0106 +:103600009091D001A091D101B091D2012FBF089526 +:10361000CF92DF92EF92FF920F931F932FB7F89400 +:103620004091CF015091D0016091D1017091D201B0 +:103630002FBF6A017B01EE24FF248C0120E030E0E3 +:10364000C016D106E206F30610F4415051099A0162 +:10365000281B390BC9011F910F91FF90EF90DF904C +:10366000CF9008951F920F920FB60F9211248F934F +:103670009F93AF93BF938091CF019091D001A09180 +:10368000D101B091D2010196A11DB11D8093CF014E +:103690009093D001A093D101B093D201BF91AF918B +:1036A0009F918F910F900FBE0F901F9018950E94C1 +:1036B0008C0BF8942FEF87EA91E6215080409040E0 +:1036C000E1F700C0000087E090EBDC018093EE01A1 +:1036D0009093EF01A093F001B093F1019CE088E199 +:1036E0000FB6F894A895809360000FBE9093600089 +:1036F000FFCFEF92FF920F931F93CF93DF93D82FBB +:10370000C0E08C2F0E94A60400E010E0E82EF12C0F +:10371000C701002E02C0959587950A94E2F780FDB7 +:1037200006C00F5F1F4F0630110591F709C0602FCB +:103730007C2F80E00E94AE04D813F3CF81E004C058 +:10374000CF5FCE30F1F680E0DF91CF911F910F91E6 +:10375000FF90EF900895CF93C82F8CE20E94791BC1 +:10376000882321F08C2FCF910C94791B80E0CF918E +:103770000895CF930E94001D811102C00E94E61C93 +:10378000C5E6C15049F00E94B8038FE39CE9019758 +:10379000F1F700C00000F5CF89E20E94AB1B811158 +:1037A00013C18AE20E94AB1B81110E94E61C85E0D6 +:1037B0000E94AB1B81110E94571B0E940B1D80931E +:1037C000CD0187E00E94AB1B8823A9F18BE10E9409 +:1037D000AB1B882351F08091CD0181FB222720F97A +:1037E00091E0922790FB81F90EC08EE00E94AB1B06 +:1037F000882361F08091CD0182FB222720F991E09E +:10380000922790FB82F98093CD0115C080E10E9440 +:10381000AB1B9091CD01882341F093FB222720F927 +:1038200081E0822780FB93F904C0892F809580FB7B +:1038300090F99093CD018091CD010E940F1D0E94BF +:103840001D1D8093ED0180EE0E94AB1B882341F08B +:103850008091ED01982F909590FB80F98093ED0178 +:1038600089E30E94AB1B882359F08091ED0181FB15 +:10387000222720F991E0922790FB81F98093ED01B6 +:1038800082EE0E94AB1B882359F08091ED0182FBF0 +:10389000222720F991E0922790FB82F98093ED0195 +:1038A00086EE0E94AB1B882359F08091ED0183FBCB +:1038B000222720F991E0922790FB83F98093ED0174 +:1038C00083EE0E94AB1B882359F08091ED0184FBAD +:1038D000222720F991E0922790FB84F98093ED0153 +:1038E00085E30E94AB1B882359F08091ED0185FB95 +:1038F000222720F991E0922790FB85F98093ED0132 +:1039000081E30E94AB1B882359F08091ED0186FB77 +:10391000222720F991E0922790FB86F98093ED0110 +:1039200081E10E94AB1B882359F08091ED0187FB58 +:10393000222720F991E0922790FB87F98093ED01EF +:103940008091ED010E94211D8091ED0187FB882768 +:1039500080F980930D0187E20E94AB1BC82F8EE196 +:103960000E94AB1B8111C2608FE10E94AB1B8111D1 +:10397000C46080E20E94AB1B8111C86081E20E949A +:10398000AB1B8111C06182E20E94AB1B8111C0623E +:1039900083E20E94AB1B8111C06484E20E94AB1BD6 +:1039A000882311F0C06802C0CC2329F08C2F0E941C +:1039B000181D6C2F03C00E94141D682F70E080E05A +:1039C00090E0CF910C94DB17CF9108956DEE7EEFD0 +:1039D00080E090E00E94522360E082E090E00E944C +:1039E000402360E083E090E00E94402360E084E0B8 +:1039F00090E00E94402360E085E090E00C9440233A +:103A000080E090E00E943A2321E08D3E9E4F09F035 +:103A100020E0822F089582E090E00C943223682FFA +:103A200082E090E00C94402383E090E00C943223F9 +:103A3000682F83E090E00C94402384E090E00C94A5 +:103A40003223682F84E090E00C9440238091D501CC +:103A500080FF0BC06091130185E0689FB0011124C5 +:103A600075956795759567952BC081FF09C0609125 +:103A7000130185E0689FB00111247595679520C0FA +:103A800082FF07C06091130185E0689FB001112497 +:103A900017C09091D6019923D1F060911201961729 +:103AA00088F72091130185E0289F90011124929FAF +:103AB000A001939F500D112470E0CA010E940423BD +:103AC0006038710540F46115710539F002C065E098 +:103AD00070E0862F08958FE7089581E00895809122 +:103AE000D50180FF08C06091110170E07595679560 +:103AF0007595679521C081FF06C06091110170E046 +:103B00007595679519C082FF04C06091110170E03E +:103B100010C09091D6019923C1F0609110019617C1 +:103B2000A0F780911101899FC001112470E00E94CB +:103B300004236038710528F46115710521F0862F82 +:103B400008958FE7089581E0089561E070E0F4CF73 +:103B5000803F21F40E94261D819504C0813F29F4F5 +:103B60000E94261D8093D9010895823F21F40E946E +:103B7000261D819504C0833F29F40E94261D809351 +:103B8000D8010895893F19F40E946F1D05C08A3F2E +:103B900031F40E946F1D81958093DA0108958B3F67 +:103BA00021F40E946F1D819504C08C3F29F40E946E +:103BB0006F1D8093DB010895843F21F48091D7012C +:103BC000816017C0853F21F48091D701826011C0C8 +:103BD000863F21F48091D70184600BC0873F21F498 +:103BE0008091D701886005C0883F31F48091D7016A +:103BF00080618093D70108958D3F21F48091D50194 +:103C000081600BC08E3F21F48091D501826005C098 +:103C10008F3F29F48091D50184608093D501089568 +:103C2000803F39F48091D90187FF6CC01092D9018F +:103C300069C0813F29F48091D9011816BCF362C094 +:103C40009091D801823F29F497FF5CC01092D8016F +:103C500059C0833F19F41916CCF354C0893F41F47D +:103C60008091DA0118160CF04DC01092DA014AC0AA +:103C70008A3F29F48091DA0187FF44C0F6CF8B3F59 +:103C800039F48091DB0187FF3DC01092DB013AC01F +:103C90008C3F29F48091DB011816BCF333C0843FBC +:103CA00021F48091D7018E7F17C0853F21F4809148 +:103CB000D7018D7F11C0863F21F48091D7018B7F82 +:103CC0000BC0873F21F48091D701877F05C0883FD3 +:103CD00031F48091D7018F7E8093D70113C08D3F3F +:103CE00021F48091D5018E7F0BC08E3F21F480910D +:103CF000D5018D7F05C08F3F29F48091D5018B7F41 +:103D00008093D5018091D80181110EC08091D90195 +:103D100081110AC08091DA01811106C08091DB0116 +:103D2000811102C01092D601089587ED91E00E94A2 +:103D3000A60E0E94FC1A9093D4018093D30108959B +:103D40001F93CF93DF938091D3019091D4010E9470 +:103D5000081BAC019091D601992321F02091140108 +:103D600030E006C0209115018AE0289F90011124BF +:103D70004217530708F486C08091D801C091D90139 +:103D8000D091DA011091DB01811107C0C11176C019 +:103D9000D11174C0111172C075C09F3F19F09F5F9F +:103DA0009093D601181624F40E94261D8093D80102 +:103DB0008091D80187FF05C00E94261D81958093C0 +:103DC000D8011C1624F40E94261D8093D9018091ED +:103DD000D90187FF05C00E94261D81958093D901D6 +:103DE0006091D801662339F1C091D901CC2319F132 +:103DF000772767FD7095872F972F0E94152223E361 +:103E000033E343E35FE30E9479220E94E22160935F +:103E1000D8016C2F772767FD7095872F972F0E9409 +:103E2000152223E333E343E35FE30E9479220E94F8 +:103E3000E2216093D9011D1624F40E946F1D809326 +:103E4000DA018091DA0187FF05C00E946F1D81951C +:103E50008093DA01111624F40E946F1D8093DB0118 +:103E60008091DB0187FF05C00E946F1D81958093C3 +:103E7000DB01DF91CF911F910C94951E9F3F09F0BC +:103E80008ECF96CFDF91CF911F910895E7EDF1E0AE +:103E900085E0DF011D928A95E9F71092D601109214 +:103EA000D5010895833081F128F4813059F08230B2 +:103EB000D1F00895853009F449C0B8F1863009F48D +:103EC00056C0089580911501262F30E0280F311D2E +:103ED0002F3F310524F4680F6093150108958FEF8B +:103EE00080931501089580911401262F30E0280F4A +:103EF000311D2F3F310524F4680F6093140108959C +:103F00008FEF80931401089580911301262F30E0E4 +:103F1000280F311D2F3F310524F4680F60931301E2 +:103F200008958FEF80931301089580911201262F39 +:103F300030E0280F311D2F3F310524F4680F6093C6 +:103F4000120108958FEF809312010895809111015D +:103F5000262F30E0280F311D2F3F310524F4680F44 +:103F60006093110108958FEF80931101089580915E +:103F70001001262F30E0280F311D2F3F310524F48A +:103F8000680F6093100108958FEF809310010895DA +:103F9000833011F128F4813049F0823091F0089596 +:103FA000853081F120F18630C1F1089580911501AD +:103FB000681720F4861B809315010895109215014F +:103FC000089580911401681720F4861B80931401D2 +:103FD000089510921401089580911301681720F438 +:103FE000861B809313010895109213010895809108 +:103FF0001201681720F4861B809312010895109215 +:104000001201089580911101681720F4861B809396 +:1040100011010895109211010895809110016817FF +:1040200020F4861B809310010895109210010895CA +:104030000F931F938D3109F46BC008F03FC08E3091 +:1040400009F47FC0C0F4873009F469C068F4863091 +:1040500009F0B1C08091CD01817F8E7F8093CD0129 +:1040600081E08093DD01A8C0883009F4A2C08B30C4 +:1040700009F49FC0A0C0863109F49BC078F4803158 +:1040800009F472C0813109F096C00E941F1490910A +:104090000D0181E0892780930D018BC0893109F4DE +:1040A00088C08B3109F087C08091CD0181FB222728 +:1040B00020F991E0922790FB81F94CC0853309F4F7 +:1040C00070C048F4873209F46CC008F459C08932D2 +:1040D00009F467C070C0833438F48A3308F04EC0E6 +:1040E000883309F466C067C0833409F45AC0883441 +:1040F00009F061C00E941F140FEF13ED20E301507F +:1041000010402040E1F700C000000E94571B51C042 +:104110000E949C210E948F0E0E9488074AC09091A5 +:10412000CD01892F8095817080FB90F929F09660F0 +:1041300098609093CD0140C0997F977F9093CD0177 +:1041400038C08091CD0182FB222720F991E092278F +:1041500090FB82F98093CD01992359F18091CD0193 +:1041600081608093CD0125C08091CD0183FB222702 +:1041700020F991E0922790FB83F9ECCF895301C09D +:104180008D5141E050E060E070E08A019B0104C085 +:10419000000F111F221F331F8A95D2F7C901B801E2 +:1041A00004C061E070E080E090E00E94DB170E94B4 +:1041B0001F1481E001C080E01F910F91089580E0FD +:1041C000089580E00895CF93C82F8091DD0181305C +:1041D00079F018F08230E9F187C0E0910E01F0919A +:1041E0000F018081813169F0823209F07FC009C0FE +:1041F000E0910E01F0910F018081813111F0823246 +:1042000061F48C2F0E94DF20811104C08C2F0E944A +:1042100018201DC081E090E01AC08C2F0E94E12080 +:10422000811114C0C43179F048F4CB3079F0C03139 +:1042300009F060C082E08093DD0108C0C93219F046 +:10424000C83321F057C01092DD0154C081E0817065 +:1042500053C0C93289F118F5C43171F1A8F4C730DF +:1042600009F046C08AE08093150194E1909314010F +:1042700093E0909313018093120188E080931101E1 +:1042800088E28093100134C0CE51C63088F5EC2FFF +:10429000F0E0E65DFE4F80818093DC0129C0CE34E2 +:1042A000E9F020F4CB3421F56AE013C0C13579F090 +:1042B000C235F1F461E00DC08091DC01882319F072 +:1042C0001092DC0115C081E08093DD0115C061E032 +:1042D00006C08091DC010E94521F0AC06AE08091F2 +:1042E000DC010E94C81F04C01092DD0180E004C000 +:1042F00081E002C080E0ABCFCF910895E1E8F0E02B +:104300008081886080838081816080838FB7F8940A +:1043100093E09093890090ED909388008FBF08956B +:10432000EFE6F0E08081826080830895EFE6F0E0C0 +:1043300080818D7F80830895EFE6F0E0908182E0B8 +:104340008927808308951F920F920FB60F92112430 +:104350002F933F934F935F936F937F938F939F938D +:10436000AF93BF93EF93FF938091DE019091DF01B4 +:1043700001969093DF018093DE01811103C082E0FA +:104380000E948807E091DF01E695E695F0E0E252B1 +:10439000FC4FE4918091DE018E1303C080E00E9407 +:1043A0008807FF91EF91BF91AF919F918F917F917E +:1043B0006F915F914F913F912F910F900FBE0F9092 +:1043C0001F90189504D06894B1118DC0089570D0D5 +:1043D00088F09F5790F0B92F9927B751A0F0D1F0EE +:1043E000660F771F881F991F1AF0BA95C9F712C078 +:1043F000B13081F077D0B1E0089574C0672F782F85 +:104400008827B85F39F0B93FCCF3869577956795E3 +:10441000B395D9F73EF490958095709561957F4F4F +:104420008F4F9F4F0895E89409C097FB3EF49095F5 +:104430008095709561957F4F8F4F9F4F9923A9F07D +:10444000F92F96E9BB279395F6958795779567950C +:10445000B795F111F8CFFAF4BB0F11F460FF1BC050 +:104460006F5F7F4F8F4F9F4F16C0882311F096E9E3 +:1044700011C0772321F09EE8872F762F05C0662391 +:1044800071F096E8862F70E060E02AF09A95660F4A +:10449000771F881FDAF7880F9695879597F9089503 +:1044A00057FD9058440F551F59F05F3F71F04795E5 +:1044B000880F97FB991F61F09F3F79F087950895CA +:1044C000121613061406551FF2CF4695F1DF08C0E9 +:1044D000161617061806991FF1CF86957105610506 +:1044E00008940895E894BB2766277727CB0197F9AE +:1044F00008950BD078C069D028F06ED018F09523BD +:1045000009F05AC05FC01124EECFCADFA0F3959F17 +:10451000D1F3950F50E0551F629FF001729FBB27AA +:10452000F00DB11D639FAA27F00DB11DAA1F649F56 +:104530006627B00DA11D661F829F2227B00DA11D09 +:10454000621F739FB00DA11D621F839FA00D611D8F +:10455000221F749F3327A00D611D231F849F600DB0 +:10456000211D822F762F6A2F11249F5750408AF0E9 +:10457000E1F088234AF0EE0FFF1FBB1F661F771F75 +:10458000881F91505040A9F79E3F510570F014C00C +:10459000AACF5F3FECF3983EDCF38695779567955D +:1045A000B795F795E7959F5FC1F7FE2B880F911D93 +:1045B0009695879597F9089597F99F6780E870E039 +:1045C00060E008959FEF80EC089500240A94161689 +:1045D000170618060906089500240A9412161306F1 +:1045E000140605060895092E0394000C11F488237F +:1045F00052F0BB0F40F4BF2B11F460FF04C06F5F9B +:104600007F4F8F4F9F4F089597FB072E16F400940E +:1046100007D077FD09D00E941E2307FC05D03EF489 +:10462000909581959F4F0895709561957F4F08955E +:10463000EE0FFF1F0590F491E02D0994AA1BBB1B00 +:1046400051E107C0AA1FBB1FA617B70710F0A61B92 +:10465000B70B881F991F5A95A9F780959095BC01B3 +:10466000CD010895F999FECF92BD81BDF89A9927A1 +:1046700080B50895A8E1B0E042E050E00C945A23E0 +:10468000262FF999FECF92BD81BDF89A019700B40B +:10469000021639F01FBA20BD0FB6F894FA9AF99AAB +:1046A0000FBE08950196272F0E9441230C944023AA +:1046B000DC01CB01FC01F999FECF06C0F2BDE1BDE2 +:1046C000F89A319600B40D9241505040B8F70895D1 +:0446D000F894FFCF8C +:1046D40020028A071808F507C1078D070101BA01EE +:1046E40028080A03140A3F4D36399F0352031C035A +:1046F400E30276028F02A802C10201020304050646 +:044704000708090099 +:00000001FF diff --git a/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png new file mode 100644 index 0000000000000000000000000000000000000000..34762ecb752947c8d1fbfd75566472df9eec5a0d GIT binary patch literal 100627 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